// Built-in function definitions for basic2c // Format: BUILTIN(name, return_type, c_template) // This file is #included into basic2c.c with BUILTIN macro defined // // Template placeholders: % or %1 = first arg, %2 = second arg, etc. // Return types: TYPE_BYTE, TYPE_INT, TYPE_LONG, TYPE_FLOAT, TYPE_DBL, TYPE_STR // Standard math functions BUILTIN("SQR", TYPE_DBL, "sqrt(%)") BUILTIN("SIN", TYPE_DBL, "sin(%)") BUILTIN("COS", TYPE_DBL, "cos(%)") BUILTIN("TAN", TYPE_DBL, "tan(%)") BUILTIN("ATN", TYPE_DBL, "atan(%)") BUILTIN("LOG", TYPE_DBL, "log(%)") BUILTIN("EXP", TYPE_DBL, "exp(%)") BUILTIN("SGN", TYPE_INT, "((%) > 0 ? 1 : ((%) < 0 ? -1 : 0))") BUILTIN("RND", TYPE_DBL, "((double)rand() / (double)RAND_MAX)") // Extended math functions BUILTIN("CEIL", TYPE_DBL, "ceil(%)") BUILTIN("FLOOR", TYPE_DBL, "floor(%)") BUILTIN("ROUND", TYPE_DBL, "round(%)") BUILTIN("FRAC", TYPE_DBL, "((%) - floor(%))") BUILTIN("FIX", TYPE_DBL, "trunc(%)") BUILTIN("HYPOT", TYPE_DBL, "hypot(%, %2)") BUILTIN("MAX", TYPE_DBL, "((double)((%) > (%2) ? (%) : (%2)))") BUILTIN("MIN", TYPE_DBL, "((double)((%) < (%2) ? (%) : (%2)))") // System/Time BUILTIN("TIMER", TYPE_DBL, "((double)clock() / CLOCKS_PER_SEC)") // String functions BUILTIN("CHR$", TYPE_STR, "_bchr((int)(%))") BUILTIN("STR$", TYPE_STR, "_bstr_of_int(%)") BUILTIN("UCASE$", TYPE_STR, "_bucase(%)") BUILTIN("LCASE$", TYPE_STR, "_blcase(%)") BUILTIN("LTRIM$", TYPE_STR, "_bltrim(%)") BUILTIN("RTRIM$", TYPE_STR, "_brtrim(%)") BUILTIN("TRIM$", TYPE_STR, "_btrim(%)") BUILTIN("SPACE$", TYPE_STR, "_bspace((int)(%))") BUILTIN("HEX$", TYPE_STR, "_bhex((int)(%))") BUILTIN("OCT$", TYPE_STR, "_boct((int)(%))") BUILTIN("TAB", TYPE_STR, "_btab((int)(%))") BUILTIN("SPC", TYPE_STR, "_bspace((int)(%))") BUILTIN("ENVIRON$", TYPE_STR, "_bgetenv(%)")