|
|
1.1 root 1: #ifndef lint
2: static char *rcsid =
3: "$Header: data.c,v 1.8 85/03/24 11:02:24 sklower Exp $";
4: #endif
5:
6: /* -[Sun Jun 19 14:41:00 1983 by jkf]-
7: * data.c $Locker: $
8: * static storage declarations
9: *
10: * (c) copyright 1982, Regents of the University of California
11: */
12:
13:
14:
15: #include "global.h"
16: #include "gtabs.h"
17: #include "structs.h"
18: #include "frame.h"
19: #include <stdio.h>
20:
21: /*char firstalloc[NBPG] = { 'x' }; /* first thing allocated in file */
22: lispval lispsys[SIGNIF]; /* lisp data used by system */
23:
24: lispval gftab[GFTABLEN]; /* global function table for interpreter */
25:
26: lispval gctab[GCTABLEN] = /* global constant table for interpreter */
27: {nil,0,SMALL(-1),SMALL(0),SMALL(1),SMALL(2),SMALL(3),SMALL(4)};
28:
29:
30: /* Port definitions *****************************************************/
31: FILE *piport, /* standard input port */
32: *poport, /* standard output port */
33: *errport, /* port for error messages */
34: *rdrport, /* temporary port for readr */
35: *proport; /* port for protocal */
36: int lineleng = 80; /* line length desired */
37: int rlevel; /* used to indicate depth of recursion
38: in reader. No longer really necessary */
39: char keybin = FALSE; /* logical flag: using keyboard */
40: char protflag = FALSE; /* logical flag: want protocall */
41: char rbktf; /* logical flag: ] mode */
42:
43: #ifdef RTPORTS
44: lispval ioname[128]; /* strings of names of files currently open */
45: #else
46: lispval ioname[_NFILE]; /* strings of names of files currently open */
47: #endif
48:
49: /* name stack ***********************************************************/
50: struct argent *orgnp; /* used by top level to reset to start */
51: struct argent *namptr, /* temporary pointer */
52: #ifndef NPINREG
53: *lbot, /* beginning of frame */
54: *np, /* first free entry */
55: #endif
56: *nplim; /* don't have this = np */
57: struct nament *bnp, /* top of bind stack */
58: *orgbnp, /* absolute bottom of ""*/
59: *bnplim; /* absolute top of "" */
60:
61:
62:
63: /* hashing things *******************************************************/
64: int hash; /* set by ratom */
65: int atmlen; /* length of atom including final null */
66:
67:
68: /* big string buffer for whomever needs it ******************************/
69: static char i_strbuf[600];
70: char *strbuf = i_strbuf;
71: char *endstrb = i_strbuf + 599;
72:
73: /* in the case we can't use the C stack for extending automatics */
74: #ifdef SPISFP
75: long xstack[16384];
76: long *xsp;
77: long *exsp = xstack + ((sizeof xstack)/(sizeof (long)));
78: #endif
79:
80: /* strings needed by the two hand crafted atoms, nil and eof */
81: char nilpname[] = "nil";
82: char eofpname[] = "eof";
83:
84: /* set by sstatus commands */
85: int uctolc = 0; /* when set, uc chars in atoms go to lc */
86: /* default mode for dumplisp
87: (note this is decimal not octal) */
88: #if os_unisoft || os_unix_ts
89: int dmpmode = 410;
90: #else
91: int dmpmode = 413;
92: #endif
93:
94: /* break and error declarations *****************************************/
95: int depth = 0; /* depth of nested breaks */
96: lispval contval; /* the value being returned up */
97: int retval; /* used by each error/prog call */
98: lispval lispretval; /* used by non-local goto's */
99: int rsetsw; /* when set, trace frames built */
100: int bcdtrsw; /* when set with rsetsw, trace bcd too */
101: int evalhcallsw; /* when set will not evalhook next eval */
102: int funhcallsw; /* when set will not funcallhook next eval */
103:
104:
105: /* exception handling stuff *********************************************/
106: int exception; /* true if an exception is pending */
107: int sigintcnt; /* number of SIGINT's pending */
108:
109: /* current state of the hole (for fasling into) *************************/
110: #ifndef HOLE
111: #define HOLE 0
112: #endif
113: extern char holbeg[];
114: char *curhbeg = holbeg; /* next location to fasl into */
115: int usehole = HOLE; /* if TRUE, fasl tries to use hole */
116: int holesize = HOLE; /* This avoids an ifdef in dumplisp */
117:
118: /* other stuff **********************************************************/
119: lispval ftemp,vtemp,argptr,ttemp; /* temporaries: use briefly */
120: int itemp;
121: lispval sigacts[16]; /* for catching interrupts */
122: int sigstruck,sigdelay; /* for catching interrupts */
123: lispval stattab[16]; /* miscelleneous options */
124: lispval Vprintsym; /* value is the symbol 'print' */
125:
126: /* interpreter globals */
127:
128: int lctrace;
129: int fvirgin = 1; /* set to 1 initially */
130: int gctime;
131: struct frame *errp; /* stack of error frames */
132:
133:
134: /* global pointers to the transfer tables */
135:
136:
137: struct trtab *trhead= /* first in list of transfer tables */
138: (struct trtab *) 0;
139: struct trent *trcur; /* next entry to allocate */
140: int trleft = 0; /* number of entries left in current table */
141:
142: /* globals from sysat.c */
143:
144: int *beginsweep; /* place for sweeper to begin */
145: int initflag = TRUE; /* inhibit gcing initially */
146: int tgcthresh = 15;
147: int page_limit = (5 * TTSIZE) / 6;
148: int ttsize = TTSIZE;
149:
150:
151: /* global used in io.c */
152:
153: lispval lastrtab;
154:
155: /* globals from [VT]alloc.c */
156:
157:
158: char purepage[TTSIZE];
159: int fakettsize = TTSIZE - 8;
160: int gcstrings; /* Do we mark and sweep strings? */
161: int *bind_lists = (int *) CNIL; /* lisp data for compiled code */
162:
163:
164: struct str_x str_current[2]; /* next free string spaces */
165:
166: struct types
167: atom_str =
168: {
169: (char *)CNIL, 0, ATOMSPP, ATOM, 5,
170: &atom_items, &atom_pages, &atom_name,
171: (struct heads *) CNIL, (char *)CNIL
172: },
173: strng_str =
174: {
175: (char *) CNIL, 0, STRSPP, STRNG, 128,
176: &str_items, &str_pages, &str_name,
177: (struct heads *) CNIL, (char *)CNIL
178: },
179: int_str =
180: {
181: (char *) CNIL, 0, INTSPP, INT, 1,
182: &int_items, &int_pages, &int_name,
183: (struct heads *) CNIL, (char *)CNIL
184: },
185: dtpr_str =
186: {
187: (char *) CNIL, 0, DTPRSPP, DTPR, 2,
188: &dtpr_items, &dtpr_pages, &dtpr_name,
189: (struct heads *) CNIL, (char *)CNIL
190: },
191: doub_str =
192: {
193: (char *) CNIL, 0, DOUBSPP, DOUB, 2,
194: &doub_items, &doub_pages, &doub_name,
195: (struct heads *) CNIL, (char *)CNIL
196: },
197: array_str =
198: {
199: (char *) CNIL, 0, ARRAYSPP, ARRAY, 5,
200: &array_items, &array_pages, &array_name,
201: (struct heads *) CNIL, (char *)CNIL
202: },
203: other_str =
204: {
205: (char *) CNIL, 0, STRSPP, OTHER, 128,
206: &other_items, &other_pages, &other_name,
207: (struct heads *) CNIL, (char *)CNIL
208: },
209:
210: sdot_str =
211: {
212: (char *) CNIL, 0, SDOTSPP, SDOT, 2,
213: &sdot_items, &sdot_pages, &sdot_name,
214: (struct heads *) CNIL, (char *)CNIL
215: },
216: val_str =
217: {
218: (char *) CNIL, 0, VALSPP, VALUE, 1,
219: &val_items, &val_pages, &val_name,
220: (struct heads *) CNIL, (char *)CNIL
221: },
222: funct_str =
223: {
224: (char *) CNIL, 0, BCDSPP, BCD, 2,
225: &funct_items, &funct_pages, &funct_name,
226: (struct heads *) CNIL, (char *)CNIL
227: },
228: vect_str =
229: {
230:
231: (char *) CNIL, 0, VECTORSPP, VECTOR, 1,
232: &vect_items, &vect_pages, &vect_name,
233: (struct heads *) CNIL, (char *)CNIL
234: },
235: vecti_str =
236: {
237:
238: (char *) CNIL, 0, VECTORSPP, VECTORI, 1,
239: &vect_items, &vecti_pages, &vecti_name,
240: (struct heads *) CNIL, (char *)CNIL
241: },
242:
243: hunk_str[7] =
244: {
245: {
246: (char *) CNIL, 0, HUNK2SPP, HUNK2, 2,
247: &hunk_items[0], &hunk_pages[0], &hunk_name[0],
248: (struct heads *) CNIL, (char *)CNIL
249: },
250: {
251: (char *) CNIL, 0, HUNK4SPP, HUNK4, 4,
252: &hunk_items[1], &hunk_pages[1], &hunk_name[1],
253: (struct heads *) CNIL, (char *)CNIL
254: },
255: {
256: (char *) CNIL, 0, HUNK8SPP, HUNK8, 8,
257: &hunk_items[2], &hunk_pages[2], &hunk_name[2],
258: (struct heads *) CNIL, (char *)CNIL
259: },
260: {
261: (char *) CNIL, 0, HUNK16SPP, HUNK16, 16,
262: &hunk_items[3], &hunk_pages[3], &hunk_name[3],
263: (struct heads *) CNIL, (char *)CNIL
264: },
265: {
266: (char *) CNIL, 0, HUNK32SPP, HUNK32, 32,
267: &hunk_items[4], &hunk_pages[4], &hunk_name[4],
268: (struct heads *) CNIL, (char *)CNIL
269: },
270: {
271: (char *) CNIL, 0, HUNK64SPP, HUNK64, 64,
272: &hunk_items[5], &hunk_pages[5], &hunk_name[5],
273: (struct heads *) CNIL, (char *)CNIL
274: },
275: {
276: (char *) CNIL, 0, HUNK128SPP, HUNK128, 128,
277: &hunk_items[6], &hunk_pages[6], &hunk_name[6],
278: (struct heads *) CNIL, (char *)CNIL
279: }
280: };
281: extern struct readtable { unsigned char ctable[132]; } initread;
282: unsigned char *ctable = initread.ctable;
283: int gensymcounter = 0;
284:
285: int hashtop = HASHTOP;
286: int xcycle = 0; /* used by xsbrk */
287: struct atom *hasht[HASHTOP];
288: lispval datalim; /* pointer to next location to allocate */
289:
290: char typetable[TTSIZE+1] = {UNBO,ATOM,PORT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT};
291:
292: /* this must be the last thing allocated in this file */
293: char lsbrkpnt,zfreespace;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.