MCPcopy Create free account
hub / github.com/CruiserOne/Astrolog / FEvalFunction

Function FEvalFunction

express.cpp:1233–2054  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1231// parameters to the function.
1232
1233flag FEvalFunction(int ifun, PAR *rgpar, char *rgpchEval[2])
1234{
1235 int ipar, nType, n = 0, n1, n2, n3, n4;
1236 real r = 0.0, r1, r2, r3, r4;
1237 char sz[cchSzMax];
1238 flag fRetOpt = fFalse, fRetReal = fFalse, fOpt = fFalse, fOptReal = fFalse;
1239#ifdef WIN
1240 POINT pt;
1241#endif
1242
1243 // Analyze the input and output parameter types.
1244 for (ipar = 0; ipar <= rgfun[ifun].nParam; ipar++) {
1245 nType = (rgfun[ifun].nType >> (ipar << 1)) & 3;
1246 if (ipar == 0) {
1247 if (nType == R_)
1248 fRetReal = fTrue;
1249 else if (nType == E_)
1250 fRetOpt = fTrue;
1251 continue;
1252 }
1253 if (nType == I_) {
1254 if (rgpar[ipar].fReal)
1255 rgpar[ipar].n = (int)rgpar[ipar].r;
1256 } else if (nType == R_) {
1257 if (!rgpar[ipar].fReal)
1258 rgpar[ipar].r = (real)rgpar[ipar].n;
1259 } else if (nType == E_) {
1260 fOpt = fTrue;
1261 if (rgpar[ipar].fReal)
1262 fOptReal = fTrue;
1263 }
1264 }
1265
1266 // Convert optional type parameters to real if any are real.
1267 if (fOpt && fOptReal)
1268 for (ipar = 1; ipar <= rgfun[ifun].nParam; ipar++) {
1269 nType = (rgfun[ifun].nType >> (ipar << 1)) & 3;
1270 if (nType == E_ && !rgpar[ipar].fReal) {
1271 rgpar[ipar].r = (real)rgpar[ipar].n;
1272 rgpar[ipar].fReal = fTrue;
1273 }
1274 }
1275 if (fRetOpt && fOptReal)
1276 fRetReal = fTrue;
1277
1278 n1 = rgpar[1].n; n2 = rgpar[2].n; n3 = rgpar[3].n; n4 = rgpar[4].n;
1279 r1 = rgpar[1].r; r2 = rgpar[2].r; r3 = rgpar[3].r; r4 = rgpar[4].r;
1280
1281 switch (ifun) {
1282 // General functions (independent of Astrolog and astrology)
1283 case funFalse: n = fFalse; break;
1284 case funTrue: n = fTrue; break;
1285 case funInt: n = n1; break;
1286 case funReal: r = r1; break;
1287 case funBool: n = (n1 != 0); break;
1288 case funType: n = fOptReal; break;
1289 case funAdd: EIR(n1 + n2, r1 + r2); break;
1290 case funSub: EIR(n1 - n2, r1 - r2); break;

Callers 1

PchGetParameterFunction · 0.85

Calls 15

RSgnFunction · 0.85
RAngleFunction · 0.85
KvBlendFunction · 0.85
KvHueFunction · 0.85
KvHue2Function · 0.85
CchSzFunction · 0.85
GetOffsetCIFunction · 0.85
RObjDiamFunction · 0.85
RHousePlaceIn3DFunction · 0.85
MinDistanceFunction · 0.85
MinDifferenceFunction · 0.85
MidpointFunction · 0.85

Tested by

no test coverage detected