addInternalFunctions method
void
addInternalFunctions()
Implementation
void addInternalFunctions() {
// encryption / decryption
addFunction2Param("ENCRYPT", encrypt);
addFunction2Param("DECRYPT", decrypt);
// ── Date/time ────────────────────────────────────────────────
addFunction0Param("NOW", fnNOW);
addFunction0Param("yesterday", fnYesterday);
addFunction0Param("last-night", fnLastNight);
addFunction0Param("last-month", fnLastMonth);
addFunction0Param("last-week", fnLastWeek);
addFunction0Param("last-year", fnLastYear);
addFunction0Param("DATE", fnDATE);
addFunction1Param("DAY", fnDAY);
addFunction1Param("DAYOFMONTH", fnDAYOFMONTH);
addFunction1Param("DAYOFWEEK", fnDAYOFWEEK);
addFunction1Param("DAYOFYEAR", fnDAYOFYEAR);
addFunction2Param("DaysInAMonth", fnDaysInAMonth);
addFunction1Param("HOUR", fnHOUR);
addFunction1Param("MINUTE", fnMINUTE);
addFunction1Param("MONTH", fnMONTH);
addFunction1Param("SECOND", fnSECOND);
addFunction0Param("TIME", fnTIME);
addFunction0Param("TODAY", fnTODAY);
addFunction1Param("WEEK", fnWEEK);
addFunction1Param("YEAR", fnYEAR);
// ── String processing ────────────────────────────────────────────────
addFunction1Param("ASC", fnAsc);
addFunction1Param("ANSI", fnANSI);
addFunction1Param("UTF8", fnUTF8);
addFunction3Param("AnsiDelete", fnAnsiDelete);
addFunction3Param("AnsiInsert", fnAnsiInsert);
addFunction1Param("AnsiLength", fnAnsiLength);
addFunction3Param("AnsiMid", fnAnsiMid);
addFunction2Param("AnsiPos", fnAnsiPos);
addFunction1Param("CHR", fnCHR);
addFunction1Param("CHAR", fnCHR);
addFunction1Param("CODE", (_) => null);
addFunction3Param("DELETE", fnDELETE);
addFunction3Param("DEL", fnDELETE);
addFunction3Param("DELA", fnAnsiDelete);
addFunction3Param("DELB", fnAnsiDelete);
addFunction2Param("FIND", fnPOS);
addFunction2Param("FINDA", fnAnsiPos);
addFunction2Param("FINDB", fnAnsiPos);
addFunction2Param("FORMAT", fnFORMAT);
addFunction2Param("FormatDateTime", fnFormatDateTime);
addFunction2Param("FormatFloat", fnFormatFloat);
addFunction2Param("HEX", fnHex);
addFunction3Param("INSERT", fnINSERT);
addFunction3Param("INS", fnINSERT);
addFunction3Param("INSA", fnAnsiInsert);
addFunction3Param("INSB", fnAnsiInsert);
addFunction1Param("LEN", fnLENGTH);
addFunction1Param("LENA", fnAnsiLength);
addFunction1Param("LENB", fnAnsiLength);
addFunction1Param("LENGTH", fnLENGTH);
addFunction1Param("LOWER", fnLOWER);
addFunction1Param("LTRIM", fnLTRIM);
addFunction3Param("MID", fnMID);
addFunction3Param("MIDA", fnAnsiMid);
addFunction3Param("MIDB", fnAnsiMid);
addFunction2Param("POS", fnPOS);
addFunction3Param("REPLACE", fnREPLACE);
addFunction3Param("REPLACEA", fnREPLACE);
addFunction3Param("REPLACEB", fnREPLACE);
addFunction3Param("REPLACEAT", fnReplaceAt);
addFunction2Param("REPT", (v1, v2) => null);
addFunction1Param("RTRIM", fnRTRIM);
addFunction1Param("TRIM", fnTRIM);
addFunction1Param("TrimLeft", fnTrimLeft);
addFunction1Param("TrimRight", fnTrimRight);
addFunction1Param("UPPER", fnUPPER);
addFunction1Param("UPPERA", fnUPPERA);
addFunction2Param("AnsiCompareStr", fnAnsiCompareStr);
addFunction2Param("AnsiCompareText", fnAnsiCompareText);
addFunction1Param("AnsiLowerCase", fnAnsiLowerCase);
addFunction1Param("AnsiUpperCase", fnAnsiUpperCase);
addFunction2Param("CompareStr", fnCompareStr);
addFunction2Param("CompareText", fnCompareText);
addFunction3Param("COPY", fnCOPY);
addFunction3Param("COPYB", fnCOPY);
addFunction2Param("INSTR", fnINSTR);
addFunction2Param("LOCATE", fnLOCATE);
addFunction2Param("LIKE", fnLIKE);
addFunction1Param("STR", fnSTR);
addFunction1Param("VarToStr", fnVarToStr);
addFunction1Param("IntToStr", fnIntToStr);
addFunction1Param("FloatToStr", fnFloatToStr);
addFunction1Param("StrToInt", fnStrToInt);
addFunction1Param("StrToFloat", fnStrToFloat);
addFunction1Param("StrToDate", fnStrToDate);
addFunction1Param("StrToDateTime", fnStrToDateTime);
addFunction1Param("StrToTime", fnStrToTime);
addFunction1Param("StrToHex", fnStrToHex);
addFunction1Param("HexToStr", fnHexToStr);
addFunction2Param("IntToHex", fnIntToHex);
addFunction1Param("HexToInt", fnHexToInt);
addFunction1Param("ColorToHex", fnColorToHex);
addFunction1Param("HexToColor", fnHexToColor);
addFunction1Param("HTML", fnHTML);
addFunction1Param("LEADBYTE", (v) => false);
addFunction2Param("LEADBYTEB", fnLeadByte);
// ── Numeric ────────────────────────────────────────────────────
addFunction1Param("ABS", fnAbs);
addFunction1Param("CEIL", fnCeil);
addFunction1Param("FLOOR", fnFloor);
addFunction1Param("FRAC", fnFrac);
addFunction1Param("TRUNC", fnTrunc);
addFunction1Param("INT", fnInt);
addFunction1Param("float", fnFloat);
addFunction1Param("SQR", fnSqr);
addFunction1Param("SQRT", fnSqrt);
addFunction1Param("EXP", fnExp);
addFunction1Param("LN", fnLn);
addFunction2Param("POWER", fnPower);
addFunction1Param("SIN", fnSin);
addFunction1Param("COS", fnCos);
addFunction1Param("TAN", fnTan);
addFunction1Param("ArcSin", fnArcSin);
addFunction1Param("ArcCos", fnArcCos);
addFunction1Param("ArcTan", fnArcTan);
addFunction0Param("Pi", fnPi);
addFunctionAParam("Round", (args) => args.length >= 2
? fnRoundTo(args[0], args[1])
: fnRound(args.isNotEmpty ? args[0] : 0));
addFunction2Param("RoundTo", fnRoundTo);
addFunction1Param("Odd", fnOdd);
addFunction2Param("MAX", fnMax);
addFunction2Param("MIN", fnMin);
addFunction1Param("Random", fnRandom);
addFunction2Param("RandomRange", fnRandomRange);
// ── Type ────────────────────────────────────────────────────
addFunction1Param("Assigned", fnAssigned);
addFunction1Param("ISEVEN", fnISSEVEN);
addFunction1Param("ISODD", fnISODD);
addFunction1Param("ISNULL", fnISNULL);
addFunction1Param("ISNUMBER", fnISNUMBER);
addFunction1Param("ISTEXT", (v) => v is String);
addFunction1Param("DEFINE", fnDEFINE);
addFunction1Param("VarIsNull", fnVarIsNull);
addFunction1Param("VarType", fnVarType);
addFunction1Param("TYPENAME", tt_TYPENAME);
// ── Logic ────────────────────────────────────────────────────
addFunction0Param("TRUE", fnTRUE);
addFunction0Param("FALSE", fnFALSE);
addFunction0Param("NULL", fnNULL);
addFunction0Param("NBSP", fnNBSP);
addFunction0Param("DBX", fnDBX);
// ── Date helpers ────────────────────────────────────────────────
addFunction1Param("DateTimeToStr", fnDateTimeToStr);
addFunction1Param("DateToStr", fnDateToStr);
addFunction1Param("TimeToStr", fnTimeToStr);
addFunction1Param("MyDate", fnMyDate);
addFunction1Param("MyDateTime", fnMyDateTime);
addFunction0Param("TDATE", fnTDATE);
addFunction1Param("BDATE", fnBDATE);
addFunction1Param("IsLeapYear", fnIsLeapYear);
addFunction1Param("ISWEEKEND", tt_ISWEEKEND);
addFunction1Param("ISWEEKDAY", tt_ISWEEKDAY);
// ── Misc ────────────────────────────────────────────────────
addFunction1Param("MD5", fnMD5);
addFunction1Param("GetUrlContent", fnGetUrlContent);
addFunction0Param("GetFreeRes", fnGetFreeRes);
addFunction0Param("GetPhysMem", fnGetPhysMem);
addFunction0Param("GetMacPhysicalAddress", fnGetMacPhysicalAddress);
addFunction0Param("CPU", fnCPU);
addFunction0Param("loCaseInsensitive", fnLoCaseInsensitive);
addFunction0Param("loPartialKey", fnLoPartialKey);
addFunction1Param("NAME", fnNAME);
addFunction1Param("VALUE", fnVALUE);
addFunction1Param("ARRAY", fnARRAY);
addFunction2Param("CELL", fnCELL);
addFunction2Param("img", fnImg);
addFunction1Param("ExtractFilePath", fnExtractFilePath);
addFunction1Param("ExtractFileDir", fnExtractFileDir);
addFunction1Param("ExtractFileDrive", fnExtractFileDrive);
addFunction1Param("ExtractFileName", fnExtractFileName);
addFunction1Param("ExtractFileNameNoExt", fnExtractFileNameNoExt);
addFunction1Param("ExtractFileExt", fnExtractFileExt);
addFunction2Param("INC", fnINCVal);
addFunction2Param("dec", fnDECVal);
// ── IIF ─────────────────────────────────────────────────────
addFunction3Param("IIF", iif);
addFunction3Param("IF", iif);
// ============================================================
// tt_ custom function library V1.3
// ============================================================
// String — advanced
addFunction2Param("tt_PADL", tt_PADL);
addFunction2Param("tt_PADR", tt_PADR);
addFunction2Param("tt_PADC", tt_PADC);
addFunction3Param("tt_LPAD", tt_LPAD);
addFunction3Param("tt_RPAD", tt_RPAD);
addFunction2Param("tt_REPEAT", tt_REPEAT);
addFunction2Param("tt_COUNTSTR", tt_COUNTSTR);
addFunction2Param("tt_STARTSWITH", tt_STARTSWITH);
addFunction2Param("tt_ENDSWITH", tt_ENDSWITH);
addFunction2Param("tt_CONTAINS", tt_CONTAINS);
addFunction2Param("tt_WRAP", tt_WRAP);
// String — numeric formatting
addFunction2Param("tt_ZFILL", tt_ZFILL);
addFunction2Param("tt_NUMFMT", tt_NUMFMT);
addFunction1Param("tt_COMMAFMT", tt_COMMAFMT);
// Math — advanced
addFunction2Param("tt_GCD", tt_GCD);
addFunction2Param("tt_LCM", tt_LCM);
addFunction3Param("tt_CLAMP", tt_CLAMP);
addFunction3Param("tt_LERP", tt_LERP);
addFunction3Param("tt_BETWEEN", tt_BETWEEN);
addFunction2Param("tt_PERCENT", tt_PERCENT);
addFunction2Param("tt_ROUNDBANK", tt_ROUNDBANK);
// Date — advanced
addFunction3Param("tt_DATEADD", tt_DATEADD);
addFunction3Param("tt_DATEDIFF", tt_DATEDIFF);
addFunction2Param("tt_DATESTART", tt_DATESTART);
addFunction2Param("tt_DATEEND", tt_DATEEND);
addFunction2Param("tt_WORKDAYS", tt_WORKDAYS);
addFunction1Param("tt_QUARTER", tt_QUARTER);
addFunction1Param("tt_RDATE", tt_RDATE);
addFunction1Param("tt_RDATETIME", tt_RDATETIME);
// Type checking / safe conversion
addFunction2Param("tt_NVL", tt_NVL);
addFunction3Param("tt_NVL2", tt_NVL2);
addFunctionAParam("tt_COALESCE", tt_COALESCE);
addFunction1Param("tt_TOINT", tt_TOINT);
addFunction1Param("tt_TOFLOAT", tt_TOFLOAT);
addFunction1Param("tt_TODATE", tt_TODATE);
addFunction1Param("tt_TYPENAME", tt_TYPENAME);
// Logic / control flow
addFunctionAParam("tt_SWITCH", tt_SWITCH);
addFunctionAParam("tt_DECODE", tt_DECODE);
// ============================================================
// tt_ extension function library V1.4
// ============================================================
// String, advanced
addFunction3Param("tt_SPLIT", tt_SPLIT);
addFunction2Param("tt_SPLITCOUNT", tt_SPLITCOUNT);
addFunction2Param("tt_JOIN", tt_JOIN);
addFunction3Param("tt_TOKENAT", tt_TOKENAT);
addFunction2Param("tt_ELLIPSIS", tt_ELLIPSIS);
addFunction1Param("tt_CAPWORDS", tt_CAPWORDS);
addFunction2Param("tt_CHARAT", tt_CHARAT);
addFunction3Param("tt_INDEXOF", tt_INDEXOF);
addFunction2Param("tt_LASTINDEXOF", tt_LASTINDEXOF);
addFunction2Param("tt_REMOVECHARS", tt_REMOVECHARS);
addFunction2Param("tt_KEEPCHARS", tt_KEEPCHARS);
addFunction1Param("tt_ONLYDIGITS", tt_ONLYDIGITS);
addFunction1Param("tt_ONLYALPHA", tt_ONLYALPHA);
addFunction3Param("tt_MASK", tt_MASK);
addFunction2Param("tt_UNMASK", tt_UNMASK);
addFunction1Param("tt_SLUGIFY", tt_SLUGIFY);
addFunction2Param("tt_TRUNCWORDS", tt_TRUNCWORDS);
addFunction1Param("tt_CRLF2BR", tt_CRLF2BR);
addFunction1Param("tt_BR2CRLF", tt_BR2CRLF);
addFunction1Param("tt_HTMLENCODE", tt_HTMLENCODE);
addFunction1Param("tt_HTMLDECODE", tt_HTMLDECODE);
addFunction1Param("tt_URLENCODE", tt_URLENCODE);
// Math, advanced
addFunction1Param("tt_ISPRIME", tt_ISPRIME);
addFunction1Param("tt_FIB", tt_FIB);
addFunction1Param("tt_LOG2", tt_LOG2);
addFunction2Param("tt_LOGN", tt_LOGN);
addFunction2Param("tt_HYPOT", tt_HYPOT);
addFunction1Param("tt_DEG2RAD", tt_DEG2RAD);
addFunction1Param("tt_RAD2DEG", tt_RAD2DEG);
addFunction1Param("tt_CBRT", tt_CBRT);
addFunction1Param("tt_EVEN", tt_EVEN);
addFunction1Param("tt_ODD", tt_ODD);
addFunctionAParam("tt_SUMSQ", tt_SUMSQ);
addFunctionAParam("tt_PRODUCT", tt_PRODUCT);
addFunctionAParam("tt_HARMEAN", tt_HARMEAN);
addFunctionAParam("tt_GEOMEAN", tt_GEOMEAN);
addFunctionAParam("tt_QUARTILE", tt_QUARTILE);
addFunctionAParam("tt_NPV", tt_NPV);
addFunctionAParam("tt_IRR", tt_IRR);
// Date, advanced
addFunction1Param("tt_ISWEEKEND", tt_ISWEEKEND);
addFunction1Param("tt_ISWEEKDAY", tt_ISWEEKDAY);
addFunction2Param("tt_NEXTWDAY", tt_NEXTWDAY);
addFunction2Param("tt_PREVWDAY", tt_PREVWDAY);
addFunction2Param("tt_EOMDATE", tt_EOMDATE);
addFunction2Param("tt_BOMDATE", tt_BOMDATE);
addFunction2Param("tt_ADDWORKDAYS", tt_ADDWORKDAYS);
addFunction2Param("tt_YEARFRAC", tt_YEARFRAC);
addFunction2Param("tt_AGE", tt_AGE);
addFunction2Param("tt_FISCALQUARTER", tt_FISCALQUARTER);
addFunction2Param("tt_FISCALYEAR", tt_FISCALYEAR);
addFunction1Param("tt_DAYNAME", tt_DAYNAME);
addFunction1Param("tt_MONTHNAME", tt_MONTHNAME);
addFunction3Param("tt_DATESERIAL", tt_DATESERIAL);
addFunction3Param("tt_TIMESERIAL", tt_TIMESERIAL);
// Array / collection
addFunctionAParam("tt_ARRJOIN", tt_ARRJOIN);
addFunctionAParam("tt_ARRMAX", tt_ARRMAX);
addFunctionAParam("tt_ARRMIN", tt_ARRMIN);
addFunctionAParam("tt_ARRSUM", tt_ARRSUM);
addFunctionAParam("tt_ARRAVG", tt_ARRAVG);
addFunctionAParam("tt_ARRCONTAINS", tt_ARRCONTAINS);
addFunctionAParam("tt_ARRUNIQ", tt_ARRUNIQ);
addFunctionAParam("tt_CHOOSE", tt_CHOOSE);
// System / misc
addFunction0Param("tt_GUID", tt_GUID);
addFunction2Param("tt_RANDOMSTR", tt_RANDOMSTR);
addFunction1Param("tt_TOHEX", tt_TOHEX);
addFunction1Param("tt_FROMHEX", tt_FROMHEX);
addFunction2Param("tt_TOBIN", tt_TOBIN);
addFunction1Param("tt_FROMBIN", tt_FROMBIN);
addFunction2Param("tt_BITOR", tt_BITOR);
addFunction2Param("tt_BITAND", tt_BITAND);
addFunction2Param("tt_BITXOR", tt_BITXOR);
addFunction1Param("tt_BITNOT", tt_BITNOT);
addFunction2Param("tt_BITSHL", tt_BITSHL);
addFunction2Param("tt_BITSHR", tt_BITSHR);
addFunction1Param("tt_BYTESIZE", tt_BYTESIZE);
addFunction1Param("tt_HASH", tt_HASH);
addFunction1Param("tt_CHECKSUM", tt_CHECKSUM);
// Finance, advanced
addFunction3Param("tt_PMT", tt_PMT);
addFunction3Param("tt_PV", tt_PV);
addFunction4Param("tt_FV", tt_FV);
addFunction3Param("tt_NPER", tt_NPER);
addFunction3Param("tt_RATE", tt_RATE);
addFunction4Param("tt_IPMT", tt_IPMT);
addFunction4Param("tt_PPMT", tt_PPMT);
addFunctionAParam("tt_CUMIPMT", tt_CUMIPMT);
// AsXxx series
addFunction1Param("tt_AsString", tt_AsString);
addFunction1Param("tt_AsInt", tt_AsInt);
addFunction1Param("tt_AsFloat", tt_AsFloat);
addFunction1Param("tt_AsBool", tt_AsBool);
addFunction1Param("tt_AsDate", tt_AsDate);
addFunction1Param("tt_AsTime", tt_AsTime);
addFunction1Param("tt_AsDateTime", tt_AsDateTime);
addFunction2Param("tt_AsFixed", tt_AsFixed);
addFunction2Param("tt_AsCurr", tt_AsCurr);
addFunction2Param("tt_AsPct", tt_AsPct);
addFunction2Param("tt_AsSci", tt_AsSci);
addFunction1Param("tt_AsYN", tt_AsYN);
addFunction1Param("tt_AsTF", tt_AsTF);
addFunction1Param("tt_As10", tt_As10);
addFunction1Param("tt_AsBit", tt_AsBit);
addFunction2Param("tt_AsHex", tt_AsHex);
addFunction1Param("tt_AsOct", tt_AsOct);
addFunction1Param("tt_AsISO", tt_AsISO);
addFunction1Param("tt_AsRDate", tt_AsRDate);
addFunction1Param("tt_AsRDateTime", tt_AsRDateTime);
addFunction1Param("tt_AsSlug", tt_AsSlug);
addFunction1Param("tt_AsUpper", tt_AsUpper);
addFunction1Param("tt_AsLower", tt_AsLower);
addFunction1Param("tt_AsTrimmed", tt_AsTrimmed);
addFunction1Param("tt_AsQuoted", tt_AsQuoted);
addFunction1Param("tt_AsDQuoted", tt_AsDQuoted);
addFunction1Param("tt_AsSQLStr", tt_AsSQLStr);
addFunction1Param("tt_AsNullable", tt_AsNullable);
addFunction2Param("tt_AsDefault", tt_AsDefault);
addFunction1Param("tt_AsJson", tt_AsJson);
addFunctionAParam("tt_AsCsv", tt_AsCsv);
// ============================================================
// COB_ GnuCOBOL Intrinsic Functions
// ============================================================
addFunction1Param("COB_ABS", COB_ABS);
addFunction1Param("COB_ACOS", COB_ACOS);
addFunction1Param("COB_ASIN", COB_ASIN);
addFunction1Param("COB_ATAN", COB_ATAN);
addFunction1Param("COB_COS", COB_COS);
addFunction1Param("COB_SIN", COB_SIN);
addFunction1Param("COB_TAN", COB_TAN);
addFunction1Param("COB_SQRT", COB_SQRT);
addFunction1Param("COB_EXP", COB_EXP);
addFunction1Param("COB_EXP10", COB_EXP10);
addFunction1Param("COB_LOG", COB_LOG);
addFunction1Param("COB_LOG10", COB_LOG10);
addFunction2Param("COB_MOD", COB_MOD);
addFunction2Param("COB_REM", COB_REM);
addFunction1Param("COB_INTEGER", COB_INTEGER);
addFunction1Param("COB_INTEGER_PART", COB_INTEGER_PART);
addFunction1Param("COB_FRACTION_PART", COB_FRACTION_PART);
addFunction1Param("COB_FACTORIAL", COB_FACTORIAL);
addFunction0Param("COB_E", COB_E);
addFunction0Param("COB_PI", COB_PI);
addFunction1Param("COB_SIGN", COB_SIGN);
addFunction2Param("COB_ANNUITY", COB_ANNUITY);
addFunctionAParam("COB_PRESENT_VALUE", COB_PRESENT_VALUE);
addFunctionAParam("COB_MAX", COB_MAX);
addFunctionAParam("COB_MIN", COB_MIN);
addFunctionAParam("COB_MEAN", COB_MEAN);
addFunctionAParam("COB_MEDIAN", COB_MEDIAN);
addFunctionAParam("COB_MIDRANGE", COB_MIDRANGE);
addFunctionAParam("COB_RANGE", COB_RANGE);
addFunctionAParam("COB_SUM", COB_SUM);
addFunctionAParam("COB_VARIANCE", COB_VARIANCE);
addFunctionAParam("COB_STANDARD_DEVIATION", COB_STANDARD_DEVIATION);
addFunctionAParam("COB_ORD_MAX", COB_ORD_MAX);
addFunctionAParam("COB_ORD_MIN", COB_ORD_MIN);
addFunction1Param("COB_HIGHEST_ALGEBRAIC", COB_HIGHEST_ALGEBRAIC);
addFunction1Param("COB_LOWEST_ALGEBRAIC", COB_LOWEST_ALGEBRAIC);
addFunctionAParam("COB_CONCATENATE", COB_CONCATENATE);
addFunction1Param("COB_LENGTH", COB_LENGTH);
addFunction1Param("COB_BYTE_LENGTH", COB_BYTE_LENGTH);
addFunction1Param("COB_STORED_CHAR_LENGTH", COB_STORED_CHAR_LENGTH);
addFunction1Param("COB_LOWER_CASE", COB_LOWER_CASE);
addFunction1Param("COB_UPPER_CASE", COB_UPPER_CASE);
addFunction1Param("COB_REVERSE", COB_REVERSE);
addFunction2Param("COB_TRIM", COB_TRIM);
addFunctionAParam("COB_SUBSTITUTE", COB_SUBSTITUTE);
addFunctionAParam("COB_SUBSTITUTE_CASE", COB_SUBSTITUTE_CASE);
addFunction1Param("COB_CHAR", COB_CHAR);
addFunction1Param("COB_ORD", COB_ORD);
addFunction1Param("COB_NUMVAL", COB_NUMVAL);
addFunction2Param("COB_NUMVAL_C", COB_NUMVAL_C);
addFunction1Param("COB_NUMVAL_F", COB_NUMVAL_F);
addFunction1Param("COB_TEST_NUMVAL", COB_TEST_NUMVAL);
addFunction2Param("COB_TEST_NUMVAL_C", COB_TEST_NUMVAL_C);
addFunction1Param("COB_TEST_NUMVAL_F", COB_TEST_NUMVAL_F);
addFunction0Param("COB_CURRENT_DATE", COB_CURRENT_DATE);
addFunction0Param("COB_WHEN_COMPILED", COB_WHEN_COMPILED);
addFunction1Param("COB_DATE_OF_INTEGER", COB_DATE_OF_INTEGER);
addFunction1Param("COB_INTEGER_OF_DATE", COB_INTEGER_OF_DATE);
addFunction1Param("COB_DAY_OF_INTEGER", COB_DAY_OF_INTEGER);
addFunction1Param("COB_INTEGER_OF_DAY", COB_INTEGER_OF_DAY);
addFunction0Param("COB_SECONDS_PAST_MIDNIGHT", COB_SECONDS_PAST_MIDNIGHT);
addFunction2Param("COB_COMBINED_DATETIME", COB_COMBINED_DATETIME);
addFunction2Param("COB_DATE_TO_YYYYMMDD", COB_DATE_TO_YYYYMMDD);
addFunction2Param("COB_YEAR_TO_YYYY", COB_YEAR_TO_YYYY);
addFunction1Param("COB_TEST_DATE_YYYYMMDD", COB_TEST_DATE_YYYYMMDD);
addFunction1Param("COB_TEST_DAY_YYYYDDD", COB_TEST_DAY_YYYYDDD);
addFunction1Param("COB_LOCALE_DATE", COB_LOCALE_DATE);
addFunction1Param("COB_LOCALE_TIME", COB_LOCALE_TIME);
addFunction2Param("COB_LOCALE_COMPARE", COB_LOCALE_COMPARE);
addFunction0Param("COB_CURRENCY_SYMBOL", COB_CURRENCY_SYMBOL);
addFunction0Param("COB_MONETARY_DECIMAL_POINT", COB_MONETARY_DECIMAL_POINT);
addFunction0Param("COB_MONETARY_THOUSANDS_SEPARATOR", COB_MONETARY_THOUSANDS_SEPARATOR);
addFunction0Param("COB_NUMERIC_DECIMAL_POINT", COB_NUMERIC_DECIMAL_POINT);
addFunction0Param("COB_NUMERIC_THOUSANDS_SEPARATOR", COB_NUMERIC_THOUSANDS_SEPARATOR);
addFunction1Param("COB_RANDOM", COB_RANDOM);
addFunction2Param("COB_BOOLEAN_OF_INTEGER", COB_BOOLEAN_OF_INTEGER);
addFunction1Param("COB_INTEGER_OF_BOOLEAN", COB_INTEGER_OF_BOOLEAN);
addFunction2Param("COB_STANDARD_COMPARE", COB_STANDARD_COMPARE);
// ── WML function aliases ────────────────────────────────
// The function names WML uses differ from the registered names; aliases are filled in here
addFunction1Param("ACOS", fnArcCos);
addFunction1Param("ASIN", fnArcSin);
addFunction1Param("ATAN", fnArcTan);
addFunction0Param("PI", fnPi);
addFunction2Param("RAND", fnRandomRange);
// ROUND and Round are case-insensitive; Round is registered as a FuncA, ROUND inherits it automatically
addFunction1Param("VAL", fnStrToFloat);
addFunction1Param("COLOR2HEX", fnColorToHex);
addFunction1Param("HEX2COLOR", fnHexToColor);
addFunction1Param("DATE2STR", fnDateToStr);
addFunction1Param("DATETIME2STR", fnDateTimeToStr);
addFunction1Param("TIME2STR", fnTimeToStr);
addFunction1Param("STR2DATE", fnStrToDate);
addFunction1Param("STR2DATETIME", fnStrToDateTime);
addFunction1Param("STR2TIME", fnStrToTime);
addFunction2Param("INT2HEX", fnIntToHex);
addFunction1Param("HEX2INT", fnHexToInt);
addFunction1Param("HEX2STR", fnHexToStr);
addFunction1Param("STR2HEX", fnStrToHex);
addFunction1Param("DAYNAME", tt_DAYNAME);
addFunction1Param("LOWERA", fnLOWER);
addFunction1Param("UPPERA", fnUPPER);
addFunction1Param("LENA", fnAnsiLength);
addFunction3Param("MIDA", fnAnsiMid);
// VAR is handled specially in _callFunction; it needs a placeholder so findIdent can find it
addFunction2Param("VAR", (v1, v2) => v2);
}