home *** CD-ROM | disk | FTP | other *** search
/ Amiga ACS 1998 #4 / amigaacscoverdisc1998-041998.iso / utilities / shareware / dev / ucb_logoppc / source / init.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-06-25  |  20.1 KB  |  445 lines

  1. /*
  2.  *      init.c   logo init module         dvb
  3.  *
  4.  * Copyright (C) 1993 by the Regents of the University of California
  5.  *
  6.  *      This program is free software; you can redistribute it and/or modify
  7.  *      it under the terms of the GNU General Public License as published by
  8.  *      the Free Software Foundation; either version 2 of the License, or
  9.  *      (at your option) any later version.
  10.  *
  11.  *      This program is distributed in the hope that it will be useful,
  12.  *      but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  *      GNU General Public License for more details.
  15.  *
  16.  *      You should have received a copy of the GNU General Public License
  17.  *      along with this program; if not, write to the Free Software
  18.  *      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  19.  *
  20.  */
  21.  
  22. #include "logo.h"
  23. #include "globals.h"
  24. #include <string.h>
  25.  
  26. typedef struct priminfo {
  27.     char *name;
  28.     short minargs;
  29.     short defargs;
  30.     short maxargs;
  31.     short priority;
  32.     NODE *(*prim) ();
  33. } PRIMTYPE;
  34.  
  35. NODE *True, *False, *Right_Paren, *Left_Paren, *Toplevel, *SYstem, *Error,
  36.      *End, *Redefp, *Caseignoredp, *Erract, *Printdepthlimit,
  37.      *Printwidthlimit, *Pause, *LoadNoisily,
  38.      *If, *Ifelse, *To, *Macro, *Unbound, *Not_Enough_Node,
  39.      *Minus_Sign, *Minus_Tight, *Startup, *Query, *OutPut, *Op, *Stop,
  40.      *Goto, *TAg;
  41. NODE *Null_Word = NIL;
  42.  
  43. PRIMTYPE prims[] = {
  44.     {"*", 1, 1, 1, PREFIX_PRIORITY + 3, lmul},
  45.     {"+", 1, 1, 1, PREFIX_PRIORITY + 2, ladd},
  46.     {"-", 1, 1, 1, PREFIX_PRIORITY + 2, lsub},
  47.     {"--", 1, 1, 1, PREFIX_PRIORITY + 4, lsub},
  48.     {".defmacro", 2, 2, 2, PREFIX_PRIORITY, ldefmacro},
  49.     {".eq", 2, 2, 2, PREFIX_PRIORITY, l_eq},
  50.     {".macro", -1, -1, -1, PREFIX_PRIORITY, lmacro},
  51.     {".maybeoutput", 1, 1, 1, MAYBE_PRIORITY, loutput},
  52.     {".setbf", 2, 2, 2, PREFIX_PRIORITY, l_setbf},
  53.     {".setfirst", 2, 2, 2, PREFIX_PRIORITY, l_setfirst},
  54.     {".setitem", 3, 3, 3, PREFIX_PRIORITY, l_setitem},
  55.     {"/", 1, 1, 1, PREFIX_PRIORITY + 3, ldivide},
  56.     {"<", 2, 2, 2, PREFIX_PRIORITY + 1, llessp},
  57.     {"=", 2, 2, 2, PREFIX_PRIORITY + 1, lequalp},
  58.     {">", 2, 2, 2, PREFIX_PRIORITY + 1, lgreaterp},
  59.     {"?", 0, 0, 1, PREFIX_PRIORITY, lqm},
  60. #ifdef AMIGA
  61.       {"am.version", 0, 0, 0, PREFIX_PRIORITY, lam_version},
  62.       {"am.prefs", 0, 0, 0, PREFIX_PRIORITY, lam_prefs},
  63. #endif
  64.     {"allopen", 0, 0, 0, PREFIX_PRIORITY, lallopen},
  65.     {"and", 0, 2, -1, PREFIX_PRIORITY, land},
  66.     {"apply", 2, 2, 2, MACRO_PRIORITY, lapply},
  67.     {"arc", 2, 2, 2, PREFIX_PRIORITY, larc},
  68.     {"arctan", 1, 1, 2, PREFIX_PRIORITY, latan},
  69.     {"array", 1, 1, 2, PREFIX_PRIORITY, larray},
  70.     {"arrayp", 1, 1, 1, PREFIX_PRIORITY, larrayp},
  71.     {"array?", 1, 1, 1, PREFIX_PRIORITY, larrayp},
  72.     {"ascii", 1, 1, 1, PREFIX_PRIORITY, lascii},
  73.     {"ashift", 2, 2, 2, PREFIX_PRIORITY, lashift},
  74.     {"back", 1, 1, 1, PREFIX_PRIORITY, lback},
  75.     {"background", 0, 0, 0, PREFIX_PRIORITY, lbackground},
  76.     {"backslashedp", 1, 1, 1, PREFIX_PRIORITY, lbackslashedp},
  77.     {"backslashed?", 1, 1, 1, PREFIX_PRIORITY, lbackslashedp},
  78.     {"beforep", 2, 2, 2, PREFIX_PRIORITY, lbeforep},
  79.     {"before?", 2, 2, 2, PREFIX_PRIORITY, lbeforep},
  80.     {"bf", 1, 1, 1, PREFIX_PRIORITY, lbutfirst},
  81.     {"bfs", 1, 1, 1, PREFIX_PRIORITY, lbfs},
  82.     {"bg", 0, 0, 0, PREFIX_PRIORITY, lbackground},
  83.     {"bitand", 0, 2, -1, PREFIX_PRIORITY, lbitand},
  84.     {"bitnot", 1, 1, 1, PREFIX_PRIORITY, lbitnot},
  85.     {"bitor", 0, 2, -1, PREFIX_PRIORITY, lbitor},
  86.     {"bitxor", 0, 2, -1, PREFIX_PRIORITY, lbitxor},
  87.     {"bk", 1, 1, 1, PREFIX_PRIORITY, lback},
  88.     {"bl", 1, 1, 1, PREFIX_PRIORITY, lbutlast},
  89.     {"buried", 0, 0, 0, PREFIX_PRIORITY, lburied},
  90.     {"bury", 1, 1, 1, PREFIX_PRIORITY, lbury},
  91.     {"butfirst", 1, 1, 1, PREFIX_PRIORITY, lbutfirst},
  92.     {"butfirsts", 1, 1, 1, PREFIX_PRIORITY, lbfs},
  93.     {"butlast", 1, 1, 1, PREFIX_PRIORITY, lbutlast},
  94.     {"buttonp", 0, 0, 0, PREFIX_PRIORITY, lbuttonp},
  95.     {"button?", 0, 0, 0, PREFIX_PRIORITY, lbuttonp},
  96.     {"bye", 0, 0, 0, PREFIX_PRIORITY, lbye},
  97.     {"catch", 2, 2, 2, MACRO_PRIORITY, lcatch},
  98.     {"char", 1, 1, 1, PREFIX_PRIORITY, lchar},
  99.     {"clean", 0, 0, 0, PREFIX_PRIORITY, lclean},
  100.     {"clearscreen", 0, 0, 0, PREFIX_PRIORITY, lclearscreen},
  101.     {"cleartext", 0, 0, 0, PREFIX_PRIORITY, lcleartext},
  102.     {"close", 1, 1, 1, PREFIX_PRIORITY, lclose},
  103.     {"co", OK_NO_ARG, 1, 1, PREFIX_PRIORITY, lcontinue},
  104.     {"contents", 0, 0, 0, PREFIX_PRIORITY, lcontents},
  105.     {"continue", OK_NO_ARG, 1, 1, PREFIX_PRIORITY, lcontinue},
  106.     {"copydef", 2, 2, 2, PREFIX_PRIORITY, lcopydef},
  107.     {"cos", 1, 1, 1, PREFIX_PRIORITY, lcos},
  108.     {"count", 1, 1, 1, PREFIX_PRIORITY, lcount},
  109.     {"cs", 0, 0, 0, PREFIX_PRIORITY, lclearscreen},
  110.     {"ct", 0, 0, 0, PREFIX_PRIORITY, lcleartext},
  111.     {"cursor", 0, 0, 0, PREFIX_PRIORITY, lcursor},
  112.     {"define", 2, 2, 2, PREFIX_PRIORITY, ldefine},
  113.     {"definedp", 1, 1, 1, PREFIX_PRIORITY, ldefinedp},
  114.     {"defined?", 1, 1, 1, PREFIX_PRIORITY, ldefinedp},
  115.     {"difference", 2, 2, 2, PREFIX_PRIORITY, lsub},
  116.     {"dribble", 1, 1, 1, PREFIX_PRIORITY, ldribble},
  117.     {"ed", OK_NO_ARG, 1, 1, PREFIX_PRIORITY, ledit},
  118.     {"edit", OK_NO_ARG, 1, 1, PREFIX_PRIORITY, ledit},
  119.     {"emptyp", 1, 1, 1, PREFIX_PRIORITY, lemptyp},
  120.     {"empty?", 1, 1, 1, PREFIX_PRIORITY, lemptyp},
  121.     {"eofp", 0, 0, 0, PREFIX_PRIORITY, leofp},
  122.     {"eof?", 0, 0, 0, PREFIX_PRIORITY, leofp},
  123.     {"equalp", 2, 2, 2, PREFIX_PRIORITY, lequalp},
  124.     {"equal?", 2, 2, 2, PREFIX_PRIORITY, lequalp},
  125.     {"er", 1, 1, 1, PREFIX_PRIORITY, lerase},
  126.     {"erall", 0, 0, 0, PREFIX_PRIORITY, lerall},
  127.     {"erase", 1, 1, 1, PREFIX_PRIORITY, lerase},
  128.     {"erasefile", 1, 1, 1, PREFIX_PRIORITY, lerasefile},
  129.     {"erf", 1, 1, 1, PREFIX_PRIORITY, lerasefile},
  130.     {"erns", 0, 0, 0, PREFIX_PRIORITY, lerns},
  131.     {"erpls", 0, 0, 0, PREFIX_PRIORITY, lerpls},
  132.     {"erps", 0, 0, 0, PREFIX_PRIORITY, lerps},
  133.     {"error", 0, 0, 0, PREFIX_PRIORITY, lerror},
  134.     {"exp", 1, 1, 1, PREFIX_PRIORITY, lexp},
  135.     {"fd", 1, 1, 1, PREFIX_PRIORITY, lforward},
  136.     {"fence", 0, 0, 0, PREFIX_PRIORITY, lfence},
  137.     {"fill", 0, 0, 0, PREFIX_PRIORITY, lfill},
  138.     {"first", 1, 1, 1, PREFIX_PRIORITY, lfirst},
  139.     {"firsts", 1, 1, 1, PREFIX_PRIORITY, lfirsts},
  140.     {"forever", 1, 1, 1, MACRO_PRIORITY, lforever},
  141.     {"form", 3, 3, 3, PREFIX_PRIORITY, lform},
  142.     {"forward", 1, 1, 1, PREFIX_PRIORITY, lforward},
  143.     {"fput", 2, 2, 2, PREFIX_PRIORITY, lfput},
  144.     {"fs", 0, 0, 0, PREFIX_PRIORITY, lfullscreen},
  145.     {"fullscreen", 0, 0, 0, PREFIX_PRIORITY, lfullscreen},
  146.     {"fulltext", 1, 1, 1, PREFIX_PRIORITY, lfulltext},
  147.     {"gc", 0, 0, 1, PREFIX_PRIORITY, lgc},
  148.     {"goto", 1, 1, 1, MACRO_PRIORITY, lgoto},
  149.     {"gprop", 2, 2, 2, PREFIX_PRIORITY, lgprop},
  150.     {"greaterp", 2, 2, 2, PREFIX_PRIORITY, lgreaterp},
  151.     {"greater?", 2, 2, 2, PREFIX_PRIORITY, lgreaterp},
  152.     {"heading", 0, 0, 0, PREFIX_PRIORITY, lheading},
  153.     {"help", OK_NO_ARG, 1, 1, PREFIX_PRIORITY, lhelp},
  154.     {"hideturtle", 0, 0, 0, PREFIX_PRIORITY, lhideturtle},
  155.     {"home", 0, 0, 0, PREFIX_PRIORITY, lhome},
  156.     {"ht", 0, 0, 0, PREFIX_PRIORITY, lhideturtle},
  157.     {"if", 2, 2, 3, MACRO_PRIORITY, lif},
  158.     {"ifelse", 3, 3, 3, MACRO_PRIORITY, lifelse},
  159.     {"iff", 1, 1, 1, MACRO_PRIORITY, liffalse},
  160.     {"iffalse", 1, 1, 1, MACRO_PRIORITY, liffalse},
  161.     {"ift", 1, 1, 1, MACRO_PRIORITY, liftrue},
  162.     {"iftrue", 1, 1, 1, MACRO_PRIORITY, liftrue},
  163.     {"int", 1, 1, 1, PREFIX_PRIORITY, linteg},
  164.     {"item", 2, 2, 2, PREFIX_PRIORITY, litem},
  165.     {"keyp", 0, 0, 0, PREFIX_PRIORITY, lkeyp},
  166.     {"key?", 0, 0, 0, PREFIX_PRIORITY, lkeyp},
  167.     {"label", 1, 1, 1, PREFIX_PRIORITY, llabel},
  168.     {"last", 1, 1, 1, PREFIX_PRIORITY, llast},
  169.     {"left", 1, 1, 1, PREFIX_PRIORITY, lleft},
  170.     {"lessp", 2, 2, 2, PREFIX_PRIORITY, llessp},
  171.     {"less?", 2, 2, 2, PREFIX_PRIORITY, llessp},
  172.     {"list", 0, 2, -1, PREFIX_PRIORITY, llist},
  173.     {"listp", 1, 1, 1, PREFIX_PRIORITY, llistp},
  174.     {"list?", 1, 1, 1, PREFIX_PRIORITY, llistp},
  175.     {"ln", 1, 1, 1, PREFIX_PRIORITY, lln},
  176.     {"load", 1, 1, 1, PREFIX_PRIORITY, lload},
  177.     {"local", 1, 1, -1, PREFIX_PRIORITY, llocal},
  178.     {"log10", 1, 1, 1, PREFIX_PRIORITY, llog10},
  179.     {"lowercase", 1, 1, 1, PREFIX_PRIORITY, llowercase},
  180.     {"lput", 2, 2, 2, PREFIX_PRIORITY, llput},
  181.     {"lshift", 2, 2, 2, PREFIX_PRIORITY, llshift},
  182.     {"lt", 1, 1, 1, PREFIX_PRIORITY, lleft},
  183.     {"macrop", 1, 1, 1, PREFIX_PRIORITY, lmacrop},
  184.     {"macro?", 1, 1, 1, PREFIX_PRIORITY, lmacrop},
  185.     {"make", 2, 2, 2, PREFIX_PRIORITY, lmake},
  186.     {"member", 2, 2, 2, PREFIX_PRIORITY, lmember},
  187.     {"memberp", 2, 2, 2, PREFIX_PRIORITY, lmemberp},
  188.     {"member?", 2, 2, 2, PREFIX_PRIORITY, lmemberp},
  189.     {"minus", 1, 1, 1, PREFIX_PRIORITY, lsub},
  190.     {"modulo", 2, 2, 2, PREFIX_PRIORITY, lmodulo},
  191.     {"mousepos", 0, 0, 0, PREFIX_PRIORITY, lmousepos},
  192.     {"namep", 1, 1, 1, PREFIX_PRIORITY, lnamep},
  193.     {"name?", 1, 1, 1, PREFIX_PRIORITY, lnamep},
  194.     {"names", 0, 0, 0, PREFIX_PRIORITY, lnames},
  195.     {"nodes", 0, 0, 0, PREFIX_PRIORITY, lnodes},
  196.     {"nodribble", 0, 0, 0, PREFIX_PRIORITY, lnodribble},
  197.     {"norefresh", 0, 0, 0, PREFIX_PRIORITY, lnorefresh},
  198.     {"not", 1, 1, 1, PREFIX_PRIORITY, lnot},
  199.     {"numberp", 1, 1, 1, PREFIX_PRIORITY, lnumberp},
  200.     {"number?", 1, 1, 1, PREFIX_PRIORITY, lnumberp},
  201.     {"op", 1, 1, 1, OUTPUT_PRIORITY, loutput},
  202.     {"openappend", 1, 1, 1, PREFIX_PRIORITY, lopenappend},
  203.     {"openread", 1, 1, 1, PREFIX_PRIORITY, lopenread},
  204.     {"openupdate", 1, 1, 1, PREFIX_PRIORITY, lopenupdate},
  205.     {"openwrite", 1, 1, 1, PREFIX_PRIORITY, lopenwrite},
  206.     {"or", 0, 2, -1, PREFIX_PRIORITY, lor},
  207.     {"output", 1, 1, 1, OUTPUT_PRIORITY, loutput},
  208.     {"palette", 1, 1, 1, PREFIX_PRIORITY, lpalette},
  209.     {"parse", 1, 1, 1, PREFIX_PRIORITY, lparse},
  210.     {"pause", 0, 0, 0, PREFIX_PRIORITY, lpause},
  211.     {"pc", 0, 0, 0, PREFIX_PRIORITY, lpencolor},
  212.     {"pd", 0, 0, 0, PREFIX_PRIORITY, lpendown},
  213.     {"pe", 0, 0, 0, PREFIX_PRIORITY, lpenerase},
  214.     {"pencolor", 0, 0, 0, PREFIX_PRIORITY, lpencolor},
  215.     {"pendown", 0, 0, 0, PREFIX_PRIORITY, lpendown},
  216.     {"pendownp", 0, 0, 0, PREFIX_PRIORITY, lpendownp},
  217.     {"pendown?", 0, 0, 0, PREFIX_PRIORITY, lpendownp},
  218.     {"penerase", 0, 0, 0, PREFIX_PRIORITY, lpenerase},
  219.     {"penmode", 0, 0, 0, PREFIX_PRIORITY, lpenmode},
  220.     {"penpaint", 0, 0, 0, PREFIX_PRIORITY, lpenpaint},
  221.     {"penpattern", 0, 0, 0, PREFIX_PRIORITY, lpenpattern},
  222.     {"penreverse", 0, 0, 0, PREFIX_PRIORITY, lpenreverse},
  223.     {"pensize", 0, 0, 0, PREFIX_PRIORITY, lpensize},
  224.     {"penup", 0, 0, 0, PREFIX_PRIORITY, lpenup},
  225.     {"plist", 1, 1, 1, PREFIX_PRIORITY, lplist},
  226.     {"plists", 0, 0, 0, PREFIX_PRIORITY, lplists},
  227.     {"po", 1, 1, 1, PREFIX_PRIORITY, lpo},
  228.     {"pos", 0, 0, 0, PREFIX_PRIORITY, lpos},
  229.     {"pot", 1, 1, 1, PREFIX_PRIORITY, lpot},
  230.     {"power", 2, 2, 2, PREFIX_PRIORITY, lpower},
  231.     {"pprop", 3, 3, 3, PREFIX_PRIORITY, lpprop},
  232.     {"ppt", 0, 0, 0, PREFIX_PRIORITY, lpenpaint},
  233.     {"pr", 0, 1, -1, PREFIX_PRIORITY, lprint},
  234.     {"primitivep", 1, 1, 1, PREFIX_PRIORITY, lprimitivep},
  235.     {"primitive?", 1, 1, 1, PREFIX_PRIORITY, lprimitivep},
  236.     {"print", 0, 1, -1, PREFIX_PRIORITY, lprint},
  237.     {"procedurep", 1, 1, 1, PREFIX_PRIORITY, lprocedurep},
  238.     {"procedure?", 1, 1, 1, PREFIX_PRIORITY, lprocedurep},
  239.     {"procedures", 0, 0, 0, PREFIX_PRIORITY, lprocedures},
  240.     {"product", 0, 2, -1, PREFIX_PRIORITY, lmul},
  241.     {"pu", 0, 0, 0, PREFIX_PRIORITY, lpenup},
  242.     {"px", 0, 0, 0, PREFIX_PRIORITY, lpenreverse},
  243.     {"quotient", 1, 2, 2, PREFIX_PRIORITY, ldivide},
  244.     {"radarctan", 1, 1, 2, PREFIX_PRIORITY, lradatan},
  245.     {"radcos", 1, 1, 1, PREFIX_PRIORITY, lradcos},
  246.     {"radsin", 1, 1, 1, PREFIX_PRIORITY, lradsin},
  247.     {"random", 1, 1, 1, PREFIX_PRIORITY, lrandom},
  248.     {"rawascii", 1, 1, 1, PREFIX_PRIORITY, lrawascii},
  249.     {"rc", 0, 0, 0, PREFIX_PRIORITY, lreadchar},
  250.     {"rcs", 1, 1, 1, PREFIX_PRIORITY, lreadchars},
  251.     {"readchar", 0, 0, 0, PREFIX_PRIORITY, lreadchar},
  252.     {"readchars", 1, 1, 1, PREFIX_PRIORITY, lreadchars},
  253.     {"reader", 0, 0, 0, PREFIX_PRIORITY, lreader},
  254.     {"readlist", 0, 0, 0, PREFIX_PRIORITY, lreadlist},
  255.     {"readpos", 0, 0, 0, PREFIX_PRIORITY, lreadpos},
  256.     {"readword", 0, 0, 0, PREFIX_PRIORITY, lreadword},
  257.     {"refresh", 0, 0, 0, PREFIX_PRIORITY, lrefresh},
  258.     {"remainder", 2, 2, 2, PREFIX_PRIORITY, lremainder},
  259.     {"remprop", 2, 2, 2, PREFIX_PRIORITY, lremprop},
  260.     {"repcount", 0, 0, 0, PREFIX_PRIORITY, lrepcount},
  261.     {"repeat", 2, 2, 2, MACRO_PRIORITY, lrepeat},
  262.     {"rerandom", 0, 0, 1, PREFIX_PRIORITY, lrerandom},
  263.     {"right", 1, 1, 1, PREFIX_PRIORITY, lright},
  264.     {"rl", 0, 0, 0, PREFIX_PRIORITY, lreadlist},
  265.     {"round", 1, 1, 1, PREFIX_PRIORITY, lround},
  266.     {"rt", 1, 1, 1, PREFIX_PRIORITY, lright},
  267.     {"run", 1, 1, 1, MACRO_PRIORITY, lrun},
  268.     {"runparse", 1, 1, 1, PREFIX_PRIORITY, lrunparse},
  269.     {"runresult", 1, 1, 1, MACRO_PRIORITY, lrunresult},
  270.     {"rw", 0, 0, 0, PREFIX_PRIORITY, lreadword},
  271.     {"save", 1, 1, 1, PREFIX_PRIORITY, lsave},
  272.     {"scrunch", 0, 0, 0, PREFIX_PRIORITY, lscrunch},
  273.     {"se", 0, 2, -1, PREFIX_PRIORITY, lsentence},
  274.     {"sentence", 0, 2, -1, PREFIX_PRIORITY, lsentence},
  275.     {"setbg", 1, 1, 1, PREFIX_PRIORITY, lsetbackground},
  276.     {"setbackground", 1, 1, 1, PREFIX_PRIORITY, lsetbackground},
  277.     {"setcursor", 1, 1, 1, PREFIX_PRIORITY, lsetcursor},
  278.     {"seth", 1, 1, 1, PREFIX_PRIORITY, lsetheading},
  279.     {"setheading", 1, 1, 1, PREFIX_PRIORITY, lsetheading},
  280.     {"setitem", 3, 3, 3, PREFIX_PRIORITY, lsetitem},
  281.     {"setmargins", 1, 1, 1, PREFIX_PRIORITY, lsetmargins},
  282.     {"setpalette", 2, 2, 2, PREFIX_PRIORITY, lsetpalette},
  283.     {"setpc", 1, 1, 1, PREFIX_PRIORITY, lsetpencolor},
  284.     {"setpencolor", 1, 1, 1, PREFIX_PRIORITY, lsetpencolor},
  285.     {"setpenpattern", 1, 1, 1, PREFIX_PRIORITY, lsetpenpattern},
  286.     {"setpensize", 1, 1, 1, PREFIX_PRIORITY, lsetpensize},
  287.     {"setpos", 1, 1, 1, PREFIX_PRIORITY, lsetpos},
  288.     {"setread", 1, 1, 1, PREFIX_PRIORITY, lsetread},
  289.     {"setreadpos", 1, 1, 1, PREFIX_PRIORITY, lsetreadpos},
  290.     {"setscrunch", 2, 2, 2, PREFIX_PRIORITY, lsetscrunch},
  291.     {"setwrite", 1, 1, 1, PREFIX_PRIORITY, lsetwrite},
  292.     {"setwritepos", 1, 1, 1, PREFIX_PRIORITY, lsetwritepos},
  293.     {"setx", 1, 1, 1, PREFIX_PRIORITY, lsetx},
  294.     {"setxy", 2, 2, 2, PREFIX_PRIORITY, lsetxy},
  295.     {"sety", 1, 1, 1, PREFIX_PRIORITY, lsety},
  296.     {"shell", 1, 1, 2, PREFIX_PRIORITY, lshell},
  297.     {"show", 0, 1, -1, PREFIX_PRIORITY, lshow},
  298.     {"shownp", 0, 0, 0, PREFIX_PRIORITY, lshownp},
  299.     {"shown?", 0, 0, 0, PREFIX_PRIORITY, lshownp},
  300.     {"showturtle", 0, 0, 0, PREFIX_PRIORITY, lshowturtle},
  301.     {"sin", 1, 1, 1, PREFIX_PRIORITY, lsin},
  302.     {"splitscreen", 0, 0, 0, PREFIX_PRIORITY, lsplitscreen},
  303.     {"sqrt", 1, 1, 1, PREFIX_PRIORITY, lsqrt},
  304.     {"ss", 0, 0, 0, PREFIX_PRIORITY, lsplitscreen},
  305.     {"st", 0, 0, 0, PREFIX_PRIORITY, lshowturtle},
  306.     {"standout", 1, 1, 1, PREFIX_PRIORITY, lstandout},
  307.     {"step", 1, 1, 1, PREFIX_PRIORITY, lstep},
  308.     {"stop", 0, 0, 0, STOP_PRIORITY, lstop},
  309.     {"substringp", 2, 2, 2, PREFIX_PRIORITY, lsubstringp},
  310.     {"substring?", 2, 2, 2, PREFIX_PRIORITY, lsubstringp},
  311.     {"sum", 0, 2, -1, PREFIX_PRIORITY, ladd},
  312.     {"tag", 1, 1, 1, PREFIX_PRIORITY, ltag},
  313.     {"test", 1, 1, 1, PREFIX_PRIORITY, ltest},
  314.     {"text", 1, 1, 1, PREFIX_PRIORITY, ltext},
  315.     {"textscreen", 0, 0, 0, PREFIX_PRIORITY, ltextscreen},
  316.     {"thing", 1, 1, 1, PREFIX_PRIORITY, lthing},
  317.     {"throw", 1, 1, 2, PREFIX_PRIORITY, lthrow},
  318.     {"to", -1, -1, -1, PREFIX_PRIORITY, lto},
  319.     {"tone", 2, 2, 2, PREFIX_PRIORITY, ltone},
  320.     {"towards", 1, 1, 1, PREFIX_PRIORITY, ltowards},
  321.     {"trace", 1, 1, 1, PREFIX_PRIORITY, ltrace},
  322.     {"ts", 0, 0, 0, PREFIX_PRIORITY, ltextscreen},
  323.     {"type", 0, 1, -1, PREFIX_PRIORITY, ltype},
  324.     {"unbury", 1, 1, 1, PREFIX_PRIORITY, lunbury},
  325.     {"unstep", 1, 1, 1, PREFIX_PRIORITY, lunstep},
  326.     {"untrace", 1, 1, 1, PREFIX_PRIORITY, luntrace},
  327.     {"uppercase", 1, 1, 1, PREFIX_PRIORITY, luppercase},
  328.     {"wait", 1, 1, 1, PREFIX_PRIORITY, lwait},
  329.     {"window", 0, 0, 0, PREFIX_PRIORITY, lwindow},
  330.     {"word", 0, 2, -1, PREFIX_PRIORITY, lword},
  331.     {"wordp", 1, 1, 1, PREFIX_PRIORITY, lwordp},
  332.     {"word?", 1, 1, 1, PREFIX_PRIORITY, lwordp},
  333.     {"wrap", 0, 0, 0, PREFIX_PRIORITY, lwrap},
  334.     {"writepos", 0, 0, 0, PREFIX_PRIORITY, lwritepos},
  335.     {"writer", 0, 0, 0, PREFIX_PRIORITY, lwriter},
  336.  
  337. #ifdef mac
  338.     {"setwindowtitle", 1, 1, 1, PREFIX_PRIORITY, lsetwindowtitle},
  339.     {"settextfont", 1, 1, 1, PREFIX_PRIORITY, lsettextfont},
  340.     {"settextsize", 1, 1, 1, PREFIX_PRIORITY, lsettextsize},
  341.     {"settextstyle", 1, 1, 1, PREFIX_PRIORITY, lsettextstyle},
  342.     {"setwindowsize", 1, 1, 1, PREFIX_PRIORITY, lsetwindowsize},
  343.     {"setwindowxy", 1, 1, 1, PREFIX_PRIORITY, lsetwindowxy},
  344.     {"newconsole", 0, 0, 0, PREFIX_PRIORITY, lnewconsole},
  345.     {"graphtext", 0, 0, 0, PREFIX_PRIORITY, lgraphtext},
  346.     {"regulartext", 0, 0, 0, PREFIX_PRIORITY, lregulartext},
  347.     {"caninverse", 1, 1, 1, PREFIX_PRIORITY, lcaninverse},
  348. #endif
  349.  
  350.     {0, 0, 0, 0, 0, 0}
  351. };
  352.  
  353. NODE *intern_p(NODE *caseobj) {
  354.     NODE *result = intern(caseobj);
  355.     setflag__caseobj(result, PERMANENT);
  356.     return result;
  357. }
  358.  
  359. void init(void) {
  360.     extern long time();
  361.     int i = 0;
  362.     NODE *proc = NIL, *pname = NIL, *cnd = NIL;
  363.  
  364.     fill_reserve_tank();
  365.     oldyoungs = Unbound = newnode(PUNBOUND);
  366.  
  367. #ifdef HAVE_SRANDOM
  368.     srandom((int)time((long *)NULL));
  369. #else
  370.     srand((int)time((long *)NULL));
  371. #endif
  372. #ifdef ecma
  373.     for (i=0; i<128; i++)
  374.    ecma_array[i] = i;
  375.     for (i=0; i<ecma_size; i++)
  376.    ecma_array[(int)special_chars[i]] = ecma_begin+i;
  377.     i = 0;
  378. #endif
  379.     logolib = getenv("LOGOLIB");
  380.     if (logolib == NULL) logolib = libloc;
  381.     helpfiles = getenv("LOGOHELP");
  382.     if (helpfiles == NULL) helpfiles = helploc;
  383.     editor = getenv("EDITOR");
  384.     if (editor == NULL) editor = "jove";
  385.     editorname = strrchr(editor, (int)'/');
  386.     editorname = (editorname ? editorname+1 : editor);
  387.     tempdir = getenv("TEMP");
  388.     if (tempdir == NULL) tempdir = temploc;
  389.     while (prims[i].name) {
  390.    if (prims[i].priority == MACRO_PRIORITY)
  391.        proc = newnode(MACRO);
  392.    else if (prims[i].priority <= TAIL_PRIORITY)
  393.        proc = newnode(TAILFORM);
  394.    else if ((prims[i].priority & ~4) == (PREFIX_PRIORITY & ~4))
  395.        proc = newnode(PRIM); /* incl. -- */
  396.    else
  397.        proc = newnode(INFIX);
  398.    setprimpri(proc, prims[i].priority);
  399.    setprimfun(proc, prims[i].prim);
  400.    setprimdflt(proc, prims[i].defargs);
  401.    setprimmax(proc, prims[i].maxargs);
  402.    setprimmin(proc, prims[i].minargs);
  403.    pname = make_static_strnode(prims[i].name);
  404.    cnd = make_instance(pname, pname);
  405.    setprocnode__caseobj(cnd, proc);
  406.    if (nodetype(proc) == MACRO)
  407.        setflag__caseobj(cnd, PROC_MACRO);
  408.    setflag__caseobj(cnd, PERMANENT);
  409.    i++;
  410.     }
  411.     True = intern_p(make_static_strnode("true"));
  412.     False = intern_p(make_static_strnode("false"));
  413.     Left_Paren = intern_p(make_static_strnode("("));
  414.     Right_Paren = intern_p(make_static_strnode(")"));
  415.     Minus_Sign = intern_p(make_static_strnode("-"));
  416.     Minus_Tight = intern_p(make_static_strnode("--"));
  417.     Query = intern_p(make_static_strnode("?"));
  418.     Null_Word = intern_p(make_static_strnode("\0"));
  419.     To = intern_p(make_static_strnode("to"));
  420.     Macro = intern_p(make_static_strnode(".macro"));
  421.     Toplevel = intern_p(make_static_strnode("toplevel"));
  422.     SYstem = intern_p(make_static_strnode("system"));
  423.     Error = intern_p(make_static_strnode("error"));
  424.     End = intern_p(make_static_strnode("end"));
  425.     If = intern_p(make_static_strnode("if"));
  426.     Ifelse = intern_p(make_static_strnode("ifelse"));
  427.     Redefp = intern_p(make_static_strnode("redefp"));
  428.     Caseignoredp = intern_p(make_static_strnode("caseignoredp"));
  429.     setvalnode__caseobj(Caseignoredp, True);
  430.     setflag__caseobj(Caseignoredp, VAL_BURIED);
  431.     Erract = intern_p(make_static_strnode("erract"));
  432.     Printdepthlimit = intern_p(make_static_strnode("printdepthlimit"));
  433.     Printwidthlimit = intern_p(make_static_strnode("printwidthlimit"));
  434.     LoadNoisily = intern_p(make_static_strnode("loadnoisily"));
  435.     Pause = intern_p(make_static_strnode("pause"));
  436.     Startup = intern_p(make_static_strnode("startup"));
  437.     OutPut = intern_p(make_static_strnode("output"));
  438.     Op = intern_p(make_static_strnode("op"));
  439.     Stop = intern_p(make_static_strnode("stop"));
  440.     Goto = intern_p(make_static_strnode("goto"));
  441.     TAg = intern_p(make_static_strnode("Tag"));
  442.     the_generation = cons(NIL, NIL);
  443.     Not_Enough_Node = cons(NIL, NIL);
  444. }
  445.