#ifndef lint static char *rcsid = "$Header: data.c,v 1.8 85/03/24 11:02:24 sklower Exp $"; #endif /* -[Sun Jun 19 14:41:00 1983 by jkf]- * data.c $Locker: $ * static storage declarations * * (c) copyright 1982, Regents of the University of California */ #include "global.h" #include "gtabs.h" #include "structs.h" #include "frame.h" #include /*char firstalloc[NBPG] = { 'x' }; /* first thing allocated in file */ lispval lispsys[SIGNIF]; /* lisp data used by system */ lispval gftab[GFTABLEN]; /* global function table for interpreter */ lispval gctab[GCTABLEN] = /* global constant table for interpreter */ {nil,0,SMALL(-1),SMALL(0),SMALL(1),SMALL(2),SMALL(3),SMALL(4)}; /* Port definitions *****************************************************/ FILE *piport, /* standard input port */ *poport, /* standard output port */ *errport, /* port for error messages */ *rdrport, /* temporary port for readr */ *proport; /* port for protocal */ int lineleng = 80; /* line length desired */ int rlevel; /* used to indicate depth of recursion in reader. No longer really necessary */ char keybin = FALSE; /* logical flag: using keyboard */ char protflag = FALSE; /* logical flag: want protocall */ char rbktf; /* logical flag: ] mode */ #ifdef RTPORTS lispval ioname[128]; /* strings of names of files currently open */ #else lispval ioname[_NFILE]; /* strings of names of files currently open */ #endif /* name stack ***********************************************************/ struct argent *orgnp; /* used by top level to reset to start */ struct argent *namptr, /* temporary pointer */ #ifndef NPINREG *lbot, /* beginning of frame */ *np, /* first free entry */ #endif *nplim; /* don't have this = np */ struct nament *bnp, /* top of bind stack */ *orgbnp, /* absolute bottom of ""*/ *bnplim; /* absolute top of "" */ /* hashing things *******************************************************/ int hash; /* set by ratom */ int atmlen; /* length of atom including final null */ /* big string buffer for whomever needs it ******************************/ static char i_strbuf[600]; char *strbuf = i_strbuf; char *endstrb = i_strbuf + 599; /* in the case we can't use the C stack for extending automatics */ #ifdef SPISFP long xstack[16384]; long *xsp; long *exsp = xstack + ((sizeof xstack)/(sizeof (long))); #endif /* strings needed by the two hand crafted atoms, nil and eof */ char nilpname[] = "nil"; char eofpname[] = "eof"; /* set by sstatus commands */ int uctolc = 0; /* when set, uc chars in atoms go to lc */ /* default mode for dumplisp (note this is decimal not octal) */ #if os_unisoft || os_unix_ts int dmpmode = 410; #else int dmpmode = 413; #endif /* break and error declarations *****************************************/ int depth = 0; /* depth of nested breaks */ lispval contval; /* the value being returned up */ int retval; /* used by each error/prog call */ lispval lispretval; /* used by non-local goto's */ int rsetsw; /* when set, trace frames built */ int bcdtrsw; /* when set with rsetsw, trace bcd too */ int evalhcallsw; /* when set will not evalhook next eval */ int funhcallsw; /* when set will not funcallhook next eval */ /* exception handling stuff *********************************************/ int exception; /* true if an exception is pending */ int sigintcnt; /* number of SIGINT's pending */ /* current state of the hole (for fasling into) *************************/ #ifndef HOLE #define HOLE 0 #endif extern char holbeg[]; char *curhbeg = holbeg; /* next location to fasl into */ int usehole = HOLE; /* if TRUE, fasl tries to use hole */ int holesize = HOLE; /* This avoids an ifdef in dumplisp */ /* other stuff **********************************************************/ lispval ftemp,vtemp,argptr,ttemp; /* temporaries: use briefly */ int itemp; lispval sigacts[16]; /* for catching interrupts */ int sigstruck,sigdelay; /* for catching interrupts */ lispval stattab[16]; /* miscelleneous options */ lispval Vprintsym; /* value is the symbol 'print' */ /* interpreter globals */ int lctrace; int fvirgin = 1; /* set to 1 initially */ int gctime; struct frame *errp; /* stack of error frames */ /* global pointers to the transfer tables */ struct trtab *trhead= /* first in list of transfer tables */ (struct trtab *) 0; struct trent *trcur; /* next entry to allocate */ int trleft = 0; /* number of entries left in current table */ /* globals from sysat.c */ int *beginsweep; /* place for sweeper to begin */ int initflag = TRUE; /* inhibit gcing initially */ int tgcthresh = 15; int page_limit = (5 * TTSIZE) / 6; int ttsize = TTSIZE; /* global used in io.c */ lispval lastrtab; /* globals from [VT]alloc.c */ char purepage[TTSIZE]; int fakettsize = TTSIZE - 8; int gcstrings; /* Do we mark and sweep strings? */ int *bind_lists = (int *) CNIL; /* lisp data for compiled code */ struct str_x str_current[2]; /* next free string spaces */ struct types atom_str = { (char *)CNIL, 0, ATOMSPP, ATOM, 5, &atom_items, &atom_pages, &atom_name, (struct heads *) CNIL, (char *)CNIL }, strng_str = { (char *) CNIL, 0, STRSPP, STRNG, 128, &str_items, &str_pages, &str_name, (struct heads *) CNIL, (char *)CNIL }, int_str = { (char *) CNIL, 0, INTSPP, INT, 1, &int_items, &int_pages, &int_name, (struct heads *) CNIL, (char *)CNIL }, dtpr_str = { (char *) CNIL, 0, DTPRSPP, DTPR, 2, &dtpr_items, &dtpr_pages, &dtpr_name, (struct heads *) CNIL, (char *)CNIL }, doub_str = { (char *) CNIL, 0, DOUBSPP, DOUB, 2, &doub_items, &doub_pages, &doub_name, (struct heads *) CNIL, (char *)CNIL }, array_str = { (char *) CNIL, 0, ARRAYSPP, ARRAY, 5, &array_items, &array_pages, &array_name, (struct heads *) CNIL, (char *)CNIL }, other_str = { (char *) CNIL, 0, STRSPP, OTHER, 128, &other_items, &other_pages, &other_name, (struct heads *) CNIL, (char *)CNIL }, sdot_str = { (char *) CNIL, 0, SDOTSPP, SDOT, 2, &sdot_items, &sdot_pages, &sdot_name, (struct heads *) CNIL, (char *)CNIL }, val_str = { (char *) CNIL, 0, VALSPP, VALUE, 1, &val_items, &val_pages, &val_name, (struct heads *) CNIL, (char *)CNIL }, funct_str = { (char *) CNIL, 0, BCDSPP, BCD, 2, &funct_items, &funct_pages, &funct_name, (struct heads *) CNIL, (char *)CNIL }, vect_str = { (char *) CNIL, 0, VECTORSPP, VECTOR, 1, &vect_items, &vect_pages, &vect_name, (struct heads *) CNIL, (char *)CNIL }, vecti_str = { (char *) CNIL, 0, VECTORSPP, VECTORI, 1, &vect_items, &vecti_pages, &vecti_name, (struct heads *) CNIL, (char *)CNIL }, hunk_str[7] = { { (char *) CNIL, 0, HUNK2SPP, HUNK2, 2, &hunk_items[0], &hunk_pages[0], &hunk_name[0], (struct heads *) CNIL, (char *)CNIL }, { (char *) CNIL, 0, HUNK4SPP, HUNK4, 4, &hunk_items[1], &hunk_pages[1], &hunk_name[1], (struct heads *) CNIL, (char *)CNIL }, { (char *) CNIL, 0, HUNK8SPP, HUNK8, 8, &hunk_items[2], &hunk_pages[2], &hunk_name[2], (struct heads *) CNIL, (char *)CNIL }, { (char *) CNIL, 0, HUNK16SPP, HUNK16, 16, &hunk_items[3], &hunk_pages[3], &hunk_name[3], (struct heads *) CNIL, (char *)CNIL }, { (char *) CNIL, 0, HUNK32SPP, HUNK32, 32, &hunk_items[4], &hunk_pages[4], &hunk_name[4], (struct heads *) CNIL, (char *)CNIL }, { (char *) CNIL, 0, HUNK64SPP, HUNK64, 64, &hunk_items[5], &hunk_pages[5], &hunk_name[5], (struct heads *) CNIL, (char *)CNIL }, { (char *) CNIL, 0, HUNK128SPP, HUNK128, 128, &hunk_items[6], &hunk_pages[6], &hunk_name[6], (struct heads *) CNIL, (char *)CNIL } }; extern struct readtable { unsigned char ctable[132]; } initread; unsigned char *ctable = initread.ctable; int gensymcounter = 0; int hashtop = HASHTOP; int xcycle = 0; /* used by xsbrk */ struct atom *hasht[HASHTOP]; lispval datalim; /* pointer to next location to allocate */ char typetable[TTSIZE+1] = {UNBO,ATOM,PORT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT}; /* this must be the last thing allocated in this file */ char lsbrkpnt,zfreespace;