~ubuntu-branches/debian/lenny/ucblogo/lenny

« back to all changes in this revision

Viewing changes to init.c

  • Committer: Bazaar Package Importer
  • Author(s): Hamish Moffatt
  • Date: 2001-09-02 15:15:21 UTC
  • Revision ID: james.westby@ubuntu.com-20010902151521-doo25fmfq7v3pxkg
Tags: upstream-5.1
ImportĀ upstreamĀ versionĀ 5.1

Show diffs side-by-side

added added

removed removed

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