void ficlCompileFile(FICL_SYSTEM *pSys) { #if FICL_WANT_FILE FICL_DICT *dp = pSys->dp; assert(dp); dictAppendWord(dp, "create-file", ficlCreateFile, FW_DEFAULT); dictAppendWord(dp, "open-file", ficlOpenFile, FW_DEFAULT); dictAppendWord(dp, "close-file", ficlCloseFile, FW_DEFAULT); dictAppendWord(dp, "include-file", ficlIncludeFile, FW_DEFAULT); dictAppendWord(dp, "read-file", ficlReadFile, FW_DEFAULT); dictAppendWord(dp, "read-line", ficlReadLine, FW_DEFAULT); dictAppendWord(dp, "write-file", ficlWriteFile, FW_DEFAULT); dictAppendWord(dp, "write-line", ficlWriteLine, FW_DEFAULT); dictAppendWord(dp, "file-position", ficlFilePosition, FW_DEFAULT); dictAppendWord(dp, "file-size", ficlFileSize, FW_DEFAULT); dictAppendWord(dp, "reposition-file", ficlRepositionFile, FW_DEFAULT); dictAppendWord(dp, "file-status", ficlFileStatus, FW_DEFAULT); dictAppendWord(dp, "flush-file", ficlFlushFile, FW_DEFAULT); dictAppendWord(dp, "delete-file", ficlDeleteFile, FW_DEFAULT); dictAppendWord(dp, "rename-file", ficlRenameFile, FW_DEFAULT); #ifdef FICL_HAVE_FTRUNCATE dictAppendWord(dp, "resize-file", ficlResizeFile, FW_DEFAULT); ficlSetEnv(pSys, "file", FICL_TRUE); ficlSetEnv(pSys, "file-ext", FICL_TRUE); #endif /* FICL_HAVE_FTRUNCATE */ #else &pSys; #endif /* FICL_WANT_FILE */ }
/************************************************************************** f i c l C o m p i l e P l a t f o r m ** Build FreeBSD platform extensions into the system dictionary **************************************************************************/ void ficlCompilePlatform(FICL_SYSTEM *pSys) { FICL_DICT *dp = pSys->dp; assert (dp); dictAppendWord(dp, ".#", displayCellNoPad, FW_DEFAULT); dictAppendWord(dp, "fopen", pfopen, FW_DEFAULT); dictAppendWord(dp, "fclose", pfclose, FW_DEFAULT); dictAppendWord(dp, "fread", pfread, FW_DEFAULT); dictAppendWord(dp, "fload", pfload, FW_DEFAULT); dictAppendWord(dp, "fkey", fkey, FW_DEFAULT); dictAppendWord(dp, "fseek", pfseek, FW_DEFAULT); dictAppendWord(dp, "fwrite", pfwrite, FW_DEFAULT); dictAppendWord(dp, "key", key, FW_DEFAULT); dictAppendWord(dp, "key?", keyQuestion, FW_DEFAULT); dictAppendWord(dp, "ms", ms, FW_DEFAULT); dictAppendWord(dp, "seconds", pseconds, FW_DEFAULT); dictAppendWord(dp, "heap?", freeHeap, FW_DEFAULT); dictAppendWord(dp, "dictthreshold", ficlDictThreshold, FW_DEFAULT); dictAppendWord(dp, "dictincrease", ficlDictIncrease, FW_DEFAULT); dictAppendWord(dp, "setenv", ficlSetenv, FW_DEFAULT); dictAppendWord(dp, "setenv?", ficlSetenvq, FW_DEFAULT); dictAppendWord(dp, "getenv", ficlGetenv, FW_DEFAULT); dictAppendWord(dp, "unsetenv", ficlUnsetenv, FW_DEFAULT); dictAppendWord(dp, "copyin", ficlCopyin, FW_DEFAULT); dictAppendWord(dp, "copyout", ficlCopyout, FW_DEFAULT); dictAppendWord(dp, "findfile", ficlFindfile, FW_DEFAULT); dictAppendWord(dp, "ccall", ficlCcall, FW_DEFAULT); #ifndef TESTMAIN #ifdef __i386__ dictAppendWord(dp, "outb", ficlOutb, FW_DEFAULT); dictAppendWord(dp, "inb", ficlInb, FW_DEFAULT); #endif #ifdef HAVE_PNP dictAppendWord(dp, "pnpdevices",ficlPnpdevices, FW_DEFAULT); dictAppendWord(dp, "pnphandlers",ficlPnphandlers, FW_DEFAULT); #endif #endif #if defined(PC98) ficlSetEnv(pSys, "arch-pc98", FICL_TRUE); #elif defined(__i386__) ficlSetEnv(pSys, "arch-i386", FICL_TRUE); ficlSetEnv(pSys, "arch-ia64", FICL_FALSE); ficlSetEnv(pSys, "arch-powerpc", FICL_FALSE); #elif defined(__ia64__) ficlSetEnv(pSys, "arch-i386", FICL_FALSE); ficlSetEnv(pSys, "arch-ia64", FICL_TRUE); ficlSetEnv(pSys, "arch-powerpc", FICL_FALSE); #elif defined(__powerpc__) ficlSetEnv(pSys, "arch-i386", FICL_FALSE); ficlSetEnv(pSys, "arch-ia64", FICL_FALSE); ficlSetEnv(pSys, "arch-powerpc", FICL_TRUE); #endif return; }
/************************************************************************** f i c l C o m p i l e P l a t f o r m ** Build FreeBSD platform extensions into the system dictionary **************************************************************************/ void ficlCompilePlatform(FICL_SYSTEM *pSys) { ficlCompileFcn **fnpp; FICL_DICT *dp = pSys->dp; assert (dp); dictAppendWord(dp, ".#", displayCellNoPad, FW_DEFAULT); dictAppendWord(dp, "isdir?", isdirQuestion, FW_DEFAULT); dictAppendWord(dp, "fopen", pfopen, FW_DEFAULT); dictAppendWord(dp, "fclose", pfclose, FW_DEFAULT); dictAppendWord(dp, "fread", pfread, FW_DEFAULT); dictAppendWord(dp, "freaddir", pfreaddir, FW_DEFAULT); dictAppendWord(dp, "fload", pfload, FW_DEFAULT); dictAppendWord(dp, "fkey", fkey, FW_DEFAULT); dictAppendWord(dp, "fseek", pfseek, FW_DEFAULT); dictAppendWord(dp, "fwrite", pfwrite, FW_DEFAULT); dictAppendWord(dp, "key", key, FW_DEFAULT); dictAppendWord(dp, "key?", keyQuestion, FW_DEFAULT); dictAppendWord(dp, "ms", ms, FW_DEFAULT); dictAppendWord(dp, "seconds", pseconds, FW_DEFAULT); dictAppendWord(dp, "heap?", freeHeap, FW_DEFAULT); dictAppendWord(dp, "dictthreshold", ficlDictThreshold, FW_DEFAULT); dictAppendWord(dp, "dictincrease", ficlDictIncrease, FW_DEFAULT); dictAppendWord(dp, "setenv", ficlSetenv, FW_DEFAULT); dictAppendWord(dp, "setenv?", ficlSetenvq, FW_DEFAULT); dictAppendWord(dp, "getenv", ficlGetenv, FW_DEFAULT); dictAppendWord(dp, "unsetenv", ficlUnsetenv, FW_DEFAULT); dictAppendWord(dp, "copyin", ficlCopyin, FW_DEFAULT); dictAppendWord(dp, "copyout", ficlCopyout, FW_DEFAULT); dictAppendWord(dp, "findfile", ficlFindfile, FW_DEFAULT); dictAppendWord(dp, "ccall", ficlCcall, FW_DEFAULT); dictAppendWord(dp, "uuid-from-string", ficlUuidFromString, FW_DEFAULT); dictAppendWord(dp, "uuid-to-string", ficlUuidToString, FW_DEFAULT); SET_FOREACH(fnpp, Xficl_compile_set) (*fnpp)(pSys); #if defined(PC98) ficlSetEnv(pSys, "arch-pc98", FICL_TRUE); #elif defined(__i386__) ficlSetEnv(pSys, "arch-i386", FICL_TRUE); ficlSetEnv(pSys, "arch-powerpc", FICL_FALSE); #elif defined(__powerpc__) ficlSetEnv(pSys, "arch-i386", FICL_FALSE); ficlSetEnv(pSys, "arch-powerpc", FICL_TRUE); #endif return; }
void ficlCompileSearch(FICL_SYSTEM *pSys) { FICL_DICT *dp = pSys->dp; assert (dp); /* ** optional SEARCH-ORDER word set */ dictAppendWord(dp, ">search", searchPush, FW_DEFAULT); dictAppendWord(dp, "search>", searchPop, FW_DEFAULT); dictAppendWord(dp, "definitions", definitions, FW_DEFAULT); dictAppendWord(dp, "forth-wordlist", forthWordlist, FW_DEFAULT); dictAppendWord(dp, "get-current", getCurrent, FW_DEFAULT); dictAppendWord(dp, "get-order", getOrder, FW_DEFAULT); dictAppendWord(dp, "search-wordlist", searchWordlist, FW_DEFAULT); dictAppendWord(dp, "set-current", setCurrent, FW_DEFAULT); dictAppendWord(dp, "set-order", setOrder, FW_DEFAULT); dictAppendWord(dp, "ficl-wordlist", ficlWordlist, FW_DEFAULT); /* ** Set SEARCH environment query values */ ficlSetEnv(pSys, "search-order", FICL_TRUE); ficlSetEnv(pSys, "search-order-ext", FICL_TRUE); ficlSetEnv(pSys, "wordlists", FICL_DEFAULT_VOCS); dictAppendWord(dp, "wid-get-name", widGetName, FW_DEFAULT); dictAppendWord(dp, "wid-set-name", widSetName, FW_DEFAULT); dictAppendWord(dp, "wid-set-super", setParentWid, FW_DEFAULT); return; }
/************************************************************************** ** Add float words to a system's dictionary. ** pSys -- Pointer to the FICL sytem to add float words to. **************************************************************************/ void ficlCompileFloat(FICL_SYSTEM *pSys) { FICL_DICT *dp = pSys->dp; assert(dp); #if FICL_WANT_FLOAT dictAppendWord(dp, ">float", ToF, FW_DEFAULT); /* d>f */ dictAppendWord(dp, "f!", Fstore, FW_DEFAULT); dictAppendWord(dp, "f*", Fmul, FW_DEFAULT); dictAppendWord(dp, "f+", Fadd, FW_DEFAULT); dictAppendWord(dp, "f-", Fsub, FW_DEFAULT); dictAppendWord(dp, "f/", Fdiv, FW_DEFAULT); dictAppendWord(dp, "f0<", FzeroLess, FW_DEFAULT); dictAppendWord(dp, "f0=", FzeroEquals, FW_DEFAULT); dictAppendWord(dp, "f<", FisLess, FW_DEFAULT); /* f>d */ dictAppendWord(dp, "f@", Ffetch, FW_DEFAULT); /* falign faligned */ dictAppendWord(dp, "fconstant", Fconstant, FW_DEFAULT); dictAppendWord(dp, "fdepth", Fdepth, FW_DEFAULT); dictAppendWord(dp, "fdrop", Fdrop, FW_DEFAULT); dictAppendWord(dp, "fdup", Fdup, FW_DEFAULT); dictAppendWord(dp, "fliteral", fliteralIm, FW_IMMEDIATE); /* float+ floats floor fmax fmin */ dictAppendWord(dp, "f?dup", FquestionDup, FW_DEFAULT); dictAppendWord(dp, "f=", FisEqual, FW_DEFAULT); dictAppendWord(dp, "f>", FisGreater, FW_DEFAULT); dictAppendWord(dp, "f0>", FzeroGreater, FW_DEFAULT); dictAppendWord(dp, "f2drop", FtwoDrop, FW_DEFAULT); dictAppendWord(dp, "f2dup", FtwoDup, FW_DEFAULT); dictAppendWord(dp, "f2over", FtwoOver, FW_DEFAULT); dictAppendWord(dp, "f2swap", FtwoSwap, FW_DEFAULT); dictAppendWord(dp, "f+!", FplusStore, FW_DEFAULT); dictAppendWord(dp, "f+i", Faddi, FW_DEFAULT); dictAppendWord(dp, "f-i", Fsubi, FW_DEFAULT); dictAppendWord(dp, "f*i", Fmuli, FW_DEFAULT); dictAppendWord(dp, "f/i", Fdivi, FW_DEFAULT); dictAppendWord(dp, "int>float", itof, FW_DEFAULT); dictAppendWord(dp, "float>int", Ftoi, FW_DEFAULT); dictAppendWord(dp, "f.", FDot, FW_DEFAULT); dictAppendWord(dp, "f.s", displayFStack, FW_DEFAULT); dictAppendWord(dp, "fe.", EDot, FW_DEFAULT); dictAppendWord(dp, "fover", Fover, FW_DEFAULT); dictAppendWord(dp, "fnegate", Fnegate, FW_DEFAULT); dictAppendWord(dp, "fpick", Fpick, FW_DEFAULT); dictAppendWord(dp, "froll", Froll, FW_DEFAULT); dictAppendWord(dp, "frot", Frot, FW_DEFAULT); dictAppendWord(dp, "fswap", Fswap, FW_DEFAULT); dictAppendWord(dp, "i-f", isubf, FW_DEFAULT); dictAppendWord(dp, "i/f", idivf, FW_DEFAULT); dictAppendWord(dp, "float>", FFrom, FW_DEFAULT); dictAppendWord(dp, "f-roll", FminusRoll, FW_DEFAULT); dictAppendWord(dp, "f-rot", Fminusrot, FW_DEFAULT); dictAppendWord(dp, "(fliteral)", fliteralParen, FW_COMPILE); ficlSetEnv(pSys, "floating", FICL_FALSE); /* not all required words are present */ ficlSetEnv(pSys, "floating-ext", FICL_FALSE); ficlSetEnv(pSys, "floating-stack", FICL_DEFAULT_STACK); #endif return; }
/************************************************************************** f i c l S e t V e r s i o n E n v ** Create a double cell environment constant for the version ID **************************************************************************/ static void ficlSetVersionEnv(FICL_SYSTEM *pSys) { ficlSetEnvD(pSys, "ficl-version", FICL_VER_MAJOR, FICL_VER_MINOR); ficlSetEnv (pSys, "ficl-robust", FICL_ROBUST); return; }