/* xlftab.c - xlisp function table */ #include "xlisp.h" /* external functions */ extern NODE *xeval(),*xapply(),*xfuncall(),*xquote(),*xbquote(), *xset(),*xsetq(),*xsetf(),*xdefun(),*xdefmacro(), *xgensym(),*xmakesymbol(),*xintern(), *xsymname(),*xsymvalue(),*xsymplist(),*xget(),*xremprop(), *xcar(),*xcaar(),*xcadr(),*xcdr(),*xcdar(),*xcddr(), *xcons(),*xlist(),*xappend(),*xreverse(),*xlast(),*xnth(),*xnthcdr(), *xmember(),*xassoc(),*xsubst(),*xsublis(),*xremove(),*xlength(), *xmapc(),*xmapcar(),*xmapl(),*xmaplist(), *xrplca(),*xrplcd(),*xnconc(),*xdelete(), *xatom(),*xsymbolp(),*xnumberp(),*xboundp(),*xnull(),*xlistp(),*xconsp(), *xeq(),*xeql(),*xequal(), *xcond(),*xand(),*xor(),*xlet(),*xletstar(),*xif(), *xprog(),*xprogstar(),*xprog1(),*xprog2(),*xprogn(),*xgo(),*xreturn(), *xcatch(),*xthrow(), *xerror(),*xcerror(),*xbreak(),*xerrset(),*xbaktrace(),*xevalhook(), *xdo(),*xdostar(),*xdolist(),*xdotimes(), *xadd(),*xsub(),*xmul(),*xdiv(),*xrem(),*xmin(),*xmax(),*xabs(), *xadd1(),*xsub1(),*xbitand(),*xbitior(),*xbitxor(),*xbitnot(), *xminusp(),*xzerop(),*xplusp(),*xevenp(),*xoddp(), *xlss(),*xleq(),*xequ(),*xneq(),*xgeq(),*xgtr(), *xstrlen(),*xstrcat(),*xsubstr(),*xascii(),*xchr(),*xatoi(),*xitoa(), *xread(),*xprint(),*xprin1(),*xprinc(),*xterpri(), *xflatsize(),*xflatc(),*xexplode(),*xexplc(),*ximplode(),*xmaknam(), *xopeni(),*xopeno(),*xclose(),*xrdchar(),*xpkchar(),*xwrchar(),*xreadline(), *xload(),*xgc(),*xexpand(),*xalloc(),*xmem(),*xtype(),*xexit(); /* the function table */ struct fdef ftab[] = { /* evaluator functions */ { "eval", SUBR, xeval }, { "apply", SUBR, xapply }, { "funcall", SUBR, xfuncall }, { "quote", FSUBR, xquote }, { "function", FSUBR, xquote }, { "backquote", FSUBR, xbquote }, /* symbol functions */ { "set", SUBR, xset }, { "setq", FSUBR, xsetq }, { "setf", FSUBR, xsetf }, { "defun", FSUBR, xdefun }, { "defmacro", FSUBR, xdefmacro }, { "gensym", SUBR, xgensym }, { "make-symbol", SUBR, xmakesymbol }, { "intern", SUBR, xintern }, { "symbol-name", SUBR, xsymname }, { "symbol-value", SUBR, xsymvalue }, { "symbol-plist", SUBR, xsymplist }, { "get", SUBR, xget }, { "remprop", SUBR, xremprop }, /* list functions */ { "car", SUBR, xcar }, { "caar", SUBR, xcaar }, { "cadr", SUBR, xcadr }, { "cdr", SUBR, xcdr }, { "cdar", SUBR, xcdar }, { "cddr", SUBR, xcddr }, { "cons", SUBR, xcons }, { "list", SUBR, xlist }, { "append", SUBR, xappend }, { "reverse", SUBR, xreverse }, { "last", SUBR, xlast }, { "nth", SUBR, xnth }, { "nthcdr", SUBR, xnthcdr }, { "member", SUBR, xmember }, { "assoc", SUBR, xassoc }, { "subst", SUBR, xsubst }, { "sublis", SUBR, xsublis }, { "remove", SUBR, xremove }, { "length", SUBR, xlength }, { "mapc", SUBR, xmapc }, { "mapcar", SUBR, xmapcar }, { "mapl", SUBR, xmapl }, { "maplist", SUBR, xmaplist }, /* destructive list functions */ { "rplaca", SUBR, xrplca }, { "rplacd", SUBR, xrplcd }, { "nconc", SUBR, xnconc }, { "delete", SUBR, xdelete }, /* predicate functions */ { "atom", SUBR, xatom }, { "symbolp", SUBR, xsymbolp }, { "numberp", SUBR, xnumberp }, { "boundp", SUBR, xboundp }, { "null", SUBR, xnull }, { "not", SUBR, xnull }, { "listp", SUBR, xlistp }, { "consp", SUBR, xconsp }, { "minusp", SUBR, xminusp }, { "zerop", SUBR, xzerop }, { "plusp", SUBR, xplusp }, { "evenp", SUBR, xevenp }, { "oddp", SUBR, xoddp }, { "eq", SUBR, xeq }, { "eql", SUBR, xeql }, { "equal", SUBR, xequal }, /* control functions */ { "cond", FSUBR, xcond }, { "and", FSUBR, xand }, { "or", FSUBR, xor }, { "let", FSUBR, xlet }, { "let*", FSUBR, xletstar }, { "if", FSUBR, xif }, { "prog", FSUBR, xprog }, { "prog*", FSUBR, xprogstar }, { "prog1", FSUBR, xprog1 }, { "prog2", FSUBR, xprog2 }, { "progn", FSUBR, xprogn }, { "go", FSUBR, xgo }, { "return", SUBR, xreturn }, { "do", FSUBR, xdo }, { "do*", FSUBR, xdostar }, { "dolist", FSUBR, xdolist }, { "dotimes", FSUBR, xdotimes }, { "catch", FSUBR, xcatch }, { "throw", SUBR, xthrow }, /* debugging and error handling functions */ { "error", SUBR, xerror }, { "cerror", SUBR, xcerror }, { "break", SUBR, xbreak }, { "errset", FSUBR, xerrset }, { "baktrace", SUBR, xbaktrace }, { "evalhook", SUBR, xevalhook }, /* arithmetic functions */ { "+", SUBR, xadd }, { "-", SUBR, xsub }, { "*", SUBR, xmul }, { "/", SUBR, xdiv }, { "1+", SUBR, xadd1 }, { "1-", SUBR, xsub1 }, { "rem", SUBR, xrem }, { "min", SUBR, xmin }, { "max", SUBR, xmax }, { "abs", SUBR, xabs }, /* bitwise logical functions */ { "bit-and", SUBR, xbitand }, { "bit-ior", SUBR, xbitior }, { "bit-xor", SUBR, xbitxor }, { "bit-not", SUBR, xbitnot }, /* numeric comparison functions */ { "<", SUBR, xlss }, { "<=", SUBR, xleq }, { "=", SUBR, xequ }, { "/=", SUBR, xneq }, { ">=", SUBR, xgeq }, { ">", SUBR, xgtr }, /* string functions */ { "strlen", SUBR, xstrlen }, { "strcat", SUBR, xstrcat }, { "substr", SUBR, xsubstr }, { "ascii", SUBR, xascii }, { "chr", SUBR, xchr }, { "atoi", SUBR, xatoi }, { "itoa", SUBR, xitoa }, /* I/O functions */ { "read", SUBR, xread }, { "print", SUBR, xprint }, { "prin1", SUBR, xprin1 }, { "princ", SUBR, xprinc }, { "terpri", SUBR, xterpri }, { "flatsize", SUBR, xflatsize }, { "flatc", SUBR, xflatc }, { "explode", SUBR, xexplode }, { "explodec", SUBR, xexplc }, { "implode", SUBR, ximplode }, { "maknam", SUBR, xmaknam }, /* file I/O functions */ { "openi", SUBR, xopeni }, { "openo", SUBR, xopeno }, { "close", SUBR, xclose }, { "read-char", SUBR, xrdchar }, { "peek-char", SUBR, xpkchar }, { "write-char", SUBR, xwrchar }, { "readline", SUBR, xreadline }, /* system functions */ { "load", SUBR, xload }, { "gc", SUBR, xgc }, { "expand", SUBR, xexpand }, { "alloc", SUBR, xalloc }, { "mem", SUBR, xmem }, { "type", SUBR, xtype }, { "exit", SUBR, xexit }, { 0 } };