|
|
1.1 ! root 1: #include <stdio.h> ! 2: ! 3: #define AD 0 ! 4: ! 5: #define peekc(p) (p->_cnt>0? *(p)->_ptr&0377:_filbuf(p)==-1?-1:((p)->_cnt++,*--(p)->_ptr&0377)) ! 6: ! 7: /**********************************************************************/ ! 8: /* */ ! 9: /* file: global.h */ ! 10: /* contents: */ ! 11: /* GLOBAL STUFF *******************************************************/ ! 12: ! 13: ! 14: #define FALSE 0 ! 15: #define TRUE 1 ! 16: #define EVER ;; ! 17: #include <pagsiz.h> ! 18: #define CNIL ((lispval) -4) ! 19: #define nil ((lispval) 0) ! 20: #define eofa ((lispval) 20) ! 21: #define NOTNIL(a) ((int)a) ! 22: #define ISNIL(a) (!(int)a) ! 23: #define STRBLEN 256 ! 24: ! 25: ! 26: #define NULL_CHAR 0 ! 27: #define LF '\n' ! 28: #define WILDCHR '\0177' ! 29: ! 30: ! 31: /* type flags and the macros to get them ********************************/ ! 32: ! 33: #define UNBO -1 ! 34: #define STRNG 0 ! 35: #define ATOM 1 ! 36: #define INT 2 ! 37: #define DTPR 3 ! 38: #define DOUB 4 ! 39: #define BCD 5 ! 40: #define PORT 6 ! 41: #define ARRAY 7 ! 42: #define SDOT 9 ! 43: #define VALUE 10 ! 44: ! 45: /* the numbers per page of the different data objects *******************/ ! 46: #define ATOMSPP 25 ! 47: #define STRSPP NBPG ! 48: #define INTSPP 128 ! 49: #define DTPRSPP 64 ! 50: #define DOUBSPP 64 ! 51: #define ARRAYSPP 25 ! 52: #define SDOTSPP 64 ! 53: #define VALSPP 128 ! 54: #define BCDSPP 64 ! 55: ! 56: extern char typetab[]; /* the table with types for each page */ ! 57: ! 58: #define TTSIZE 4096 ! 59: /* Absolute limit, in pages of the ! 60: size to which the lisp system may grow. ! 61: If you change this, you must recompile ! 62: alloc.c and data.c */ ! 63: ! 64: #define TYPL(a1) ((typetab+1)[(int)(a1) >> 9]) ! 65: #define SETTYPE(a1,b) {if((itemp = ((int)a1) >> 9) > TTSIZE) badmem();\ ! 66: (typetab + 1)[itemp] = (b); } ! 67: ! 68: #define TYPE(a1) ((typetab+1)[(int)(a1) >> 9]) ! 69: ! 70: #define VALID(a) (a >= CNIL && a < datalim) ! 71: ! 72: /* some types ***********************************************************/ ! 73: #define lispint long ! 74: #define MAX10LNG 200000000 /* max long divided by 10 */ ! 75: ! 76: ! 77: typedef union lispobj *lispval ; ! 78: struct dtpr {lispval cdr, ! 79: car;}; ! 80: struct sdot { ! 81: int I; ! 82: lispval CDR; ! 83: }; ! 84: ! 85: ! 86: struct atom { ! 87: lispval clb; /* current level binding*/ ! 88: lispval plist; /* pointer to prop list */ ! 89: #ifndef WILD ! 90: lispval fnbnd; /* function binding */ ! 91: #endif ! 92: struct atom *hshlnk; /* hash link to next */ ! 93: char *pname; /* print name */ ! 94: }; ! 95: #ifdef WILD ! 96: #define fnbnd clb ! 97: #endif ! 98: ! 99: struct array { ! 100: lispval accfun, /* access function--may be anything */ ! 101: aux; /* slot for dimensions or auxilliary data */ ! 102: char *data; /* pointer to first byte of array */ ! 103: lispval length, delta; /* length in items and length of one item */ ! 104: }; ! 105: ! 106: struct bfun { ! 107: lispval (*entry)(); /* entry point to routine */ ! 108: lispval discipline, /* argument-passing discipline */ ! 109: language, /* language coded in */ ! 110: params, /* parameter list if relevant */ ! 111: loctab; /* local table */ ! 112: }; ! 113: ! 114: union lispobj { ! 115: struct atom a; ! 116: FILE *p; ! 117: struct dtpr d; ! 118: long int i; ! 119: long int *j; ! 120: double r; ! 121: lispval (*f)(); ! 122: struct array ar; ! 123: struct sdot s; ! 124: char c; ! 125: lispval l; ! 126: struct bfun bcd; ! 127: }; ! 128: ! 129: ! 130: #include "sigtab.h" /* table of all pointers to lisp data */ ! 131: ! 132: /* Port definitions *****************************************************/ ! 133: extern FILE *piport, /* standard input port */ ! 134: *poport, /* standard output port */ ! 135: *errport, /* port for error messages */ ! 136: *rdrport; /* temporary port for readr */ ! 137: extern FILE *xports[]; /* page of file *'s for lisp */ ! 138: extern int lineleng ; /* line length desired */ ! 139: extern char rbktf; /* logical flag: ] mode */ ! 140: extern char *ctable; /* Character table in current use */ ! 141: #define Xdqc ctable[131] ! 142: #define Xesc ctable[130] ! 143: #define Xsdc ctable[129] ! 144: ! 145: /* name stack ***********************************************************/ ! 146: ! 147: #ifdef ROWAN ! 148: #define NAMESIZE 4096 ! 149: #else ! 150: #define NAMESIZE 1024 ! 151: #endif ! 152: ! 153: extern struct nament { ! 154: lispval val, ! 155: atm; ! 156: } *bnp, /* first free bind entry*/ ! 157: *bnplim; /* limit of bindstack */ ! 158: ! 159: extern struct argent { ! 160: lispval val; ! 161: } *np, /* top entry on stack */ ! 162: *lbot, /* bottom of cur frame */ ! 163: *namptr, /* temporary pointer */ ! 164: *nplim; /* don't have this = np */ ! 165: ! 166: #define TNP if(np >= nplim) namerr(); ! 167: #define INRNP if (np++ >= nplim) namerr(); ! 168: ! 169: #define INCNP(x,y) {np[1].atm = (lispval)(x); np[1].val = (lispval)(y);\ ! 170: if(np++ >= nplim) namerr();} ! 171: ! 172: ! 173: /** status codes **********************************************/ ! 174: /* */ ! 175: /* these define how status and sstatus should service probes */ ! 176: /* into the lisp data base */ ! 177: ! 178: /* common status codes */ ! 179: #define ST_NO 0 ! 180: ! 181: /* status codes */ ! 182: #define ST_READ 1 ! 183: #define ST_FEATR 2 ! 184: #define ST_SYNT 3 ! 185: #define ST_RINTB 4 ! 186: #define ST_NFETR 5 ! 187: #define ST_DMPR 6 ! 188: ! 189: /* sstatus codes */ ! 190: #define ST_SET 1 ! 191: #define ST_FEATW 2 ! 192: #define ST_TOLC 3 ! 193: #define ST_CORE 4 ! 194: #define ST_INTB 5 ! 195: #define ST_NFETW 6 ! 196: #define ST_DMPW 7 ! 197: ! 198: ! 199: ! 200: /* hashing things *******************************************************/ ! 201: #define HASHTOP 128 /* we handle 8-bit characters by dropping top bit */ ! 202: extern struct atom *hasht[HASHTOP]; ! 203: extern int hash; /* set by ratom */ ! 204: extern int atmlen; /* length of atom including final null */ ! 205: ! 206: ! 207: /* big string buffer for whomever needs it ******************************/ ! 208: extern char strbuf[STRBLEN]; ! 209: extern char *endstrb; ! 210: ! 211: /* break and error declarations *****************************************/ ! 212: #define SAVSIZE 40 /* number of bytes saved by setexit */ ! 213: #define BRRETB 1 ! 214: #define BRCONT 2 ! 215: #define BRGOTO 3 ! 216: #define BRRETN 4 ! 217: #define INTERRUPT 5 ! 218: #define THROW 6 ! 219: extern int depth; /* depth of nested breaks */ ! 220: extern lispval contval; /* the value being returned up */ ! 221: extern int retval; /* used by each error/prog call */ ! 222: extern struct argent *orgnp; /* used by top level to reset to start */ ! 223: extern struct nament *orgbnp; /* used by top level to reset to start */ ! 224: ! 225: ! 226: /* other stuff **********************************************************/ ! 227: extern lispval ftemp,vtemp,argptr,ttemp; /* temporaries: use briefly */ ! 228: extern int itemp; ! 229: /* for pointer type conversion */ ! 230: #include "dfuncs.h" ! 231: ! 232: #define NUMBERP 2 ! 233: #define BCDP 5 ! 234: #define PORTP 6 ! 235: #define ARRAYP 7 ! 236: ! 237: #define ABSVAL 0 ! 238: #define MINUS 1 ! 239: #define ADD1 2 ! 240: #define SUB1 3 ! 241: #define NOT 4 ! 242: #define LNILL 5 ! 243: #define ZEROP 6 ! 244: #define ONEP 7 ! 245: #define PLUS 8 ! 246: #define TIMES 9 ! 247: #define DIFFERENCE 10 ! 248: #define QUOTIENT 11 ! 249: #define MOD 12 ! 250: #define LESSP 13 ! 251: #define GREATERP 14 ! 252: #define SUM 15 ! 253: #define PRODUCT 16 ! 254: #define AND 17 ! 255: #define OR 18 ! 256: #define XOR 19 ! 257: ! 258: interpt(); ! 259: handler(); extern lispval sigacts[16]; extern sigdelay, sigstruck; ! 260: ! 261: /* limit of valid data area **************************************/ ! 262: ! 263: extern lispval datalim; ! 264: ! 265: /** macros to push and pop the value of an atom on the stack ******/ ! 266: ! 267: #define PUSHDOWN(atom,value)\ ! 268: {bnp->atm=atom;bnp++->val=atom->clb;atom->clb=value;if(bnp>bnplim) binderr();} ! 269: ! 270: #define POP\ ! 271: {--bnp;bnp->atm->clb=bnp->val;} ! 272: ! 273: /** macro for evaluating atoms in eval and interpreter ***********/ ! 274: ! 275: #define EVALATOM(x) vtemp = x->clb;\ ! 276: if( vtemp == CNIL ) {\ ! 277: printf("%s: ",(x)->pname);\ ! 278: vtemp = error("UNBOUND VARIABLE",TRUE);} ! 279: ! 280: /* having to do with small integers */ ! 281: ! 282: #define SMALL(i) ((lispval)(1024 + (i<<2))) ! 283: #define P(p) ((lispval) (xports +((p)-_iob))) ! 284: ! 285: /* interpreter globals */ ! 286: ! 287: extern int lctrace; ! 288: ! 289: /* register lisp macros for registers */ ! 290: #define saveonly(n) asm("#save n"); ! 291: #define snpand(n) asm("#protect n");
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.