BSD 4_3_Tahoe development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Sun, 24 Mar 1985 04:06:25 +0000 (20:06 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Sun, 24 Mar 1985 04:06:25 +0000 (20:06 -0800)
Work on file usr/tmp/housel/franz/h/global.h
Work on file usr/src/ucb/lisp/franz/h/global.h

Synthesized-from: CSRG/cd2/4.3tahoe

usr/src/ucb/lisp/franz/h/global.h [new file with mode: 0644]
usr/tmp/housel/franz/h/global.h [new file with mode: 0644]

diff --git a/usr/src/ucb/lisp/franz/h/global.h b/usr/src/ucb/lisp/franz/h/global.h
new file mode 100644 (file)
index 0000000..a46e28b
--- /dev/null
@@ -0,0 +1,452 @@
+/*                                     -[Sun Jun 19 14:42:59 1983 by jkf]-
+ *     global.h                        $Locker:  $
+ * main include file 
+ *
+ * $Header: global.h,v 1.11 85/03/24 11:06:11 sklower Exp $
+ *
+ * (c) copyright 1982, Regents of the University of California
+ */
+
+
+#include <stdio.h>
+#include "config.h"
+#include "ltypes.h"
+#ifdef UNIXTS
+#include "tsfix.h"
+#endif
+
+#define AD 0
+
+#define        peekc(p)        (p->_cnt>0? *(p)->_ptr&0377:_filbuf(p)==-1?-1:((p)->_cnt++,*--(p)->_ptr&0377))
+
+#define FALSE  0
+#define        TRUE    1
+#define EVER   ;;
+#define STRBLEN 512
+#define LBPG   512
+
+
+#define        NULL_CHAR       0
+#define        LF      '\n'
+#define        WILDCHR '\0177'
+
+
+/* the numbers per page of the different data objects *******************/
+
+#define NUMSPACES (VECTORI+1)
+
+#define ATOMSPP 25
+#define STRSPP 1
+#define INTSPP 128
+#define DTPRSPP 64
+#define DOUBSPP 64
+#define ARRAYSPP 25
+#define SDOTSPP 64
+#define VALSPP 128
+#define BCDSPP 64
+
+
+#define HUNK2SPP 64             /* hunk page sizes */
+#define HUNK4SPP 32
+#define HUNK8SPP 16
+#define HUNK16SPP 8
+#define HUNK32SPP 4
+#define HUNK64SPP 2
+#define HUNK128SPP 1
+#define VECTORSPP 512
+
+/* offset of size info from beginning of vector,  in longwords */
+/* these values are not valid when a vector is stored in the free */
+/* list, in which case the chaining is done through the propery field */
+#define VSizeOff -2
+#define VPropOff -1
+
+/* VecTotSize: the total number of longwords for the data segment of
+ * the vector. Takes a byte count and rounds up to nearest long.
+ */
+
+#define VecTotSize(x)  (((x)+3) >> 2)
+#define VecTotToByte(x) ((x) * sizeof(long))
+
+/* these vector size macros determine the number of complete objects
+   in the vector
+ */
+#define VecSize(x)     ((x) >> 2)
+#define VecWordSize(x) ((x) >> 1)
+#define VecByteSize(x) (x)
+
+/* maximum and minimum fixnums */
+#define MaxINT 0x3fffffff
+#define MinINT (- 0x4000000)
+/* 
+ * macros for saving state and restoring state
+ *
+ * Savestack and Restorestack are required at the beginning and end of
+ * functions which modify the stack pointers np and lbot.
+ * The Savestack(n) should appear at the end of the variable declarations
+ * The n refers to the number of register variables declared in this routine.
+ * The information is required for the Vax version only.
+ */
+#ifdef PORTABLE
+extern struct atom nilatom, eofatom;
+#define nil    ((lispval) &nilatom)
+#define eofa   ((lispval) &eofatom)
+#define Savestack(n) struct argent *OLDlbot = lbot, *OLDnp = np
+#define Restorestack() (lbot = OLDlbot), np = OLDnp
+#else
+#define nil    ((lispval) 0)
+#define eofa   ((lispval) 20)
+#define Savestack(n) snpand(n)
+#define Restorestack() 
+#endif
+
+#ifdef SIXONLY
+#define errorh1 errh1
+#define errorh2 errh2
+#endif
+
+#define        CNIL    ((lispval) (OFFSET-4))
+#define NOTNIL(a)      (nil!=a)
+#define ISNIL(a)       (nil==a)
+
+#ifdef SPISFP
+extern long *xsp, xstack[];
+#define sp() xsp
+#define stack(z) (xsp > xstack ? (*--xsp = z): xserr())
+#define unstack() (*xsp++)
+#define Keepxs() long *oxsp = xsp;
+#define Freexs() xsp = oxsp;
+#else
+extern long *sp(), stack(), unstack();
+#define Keepxs() /* */
+#define Freexs() /* */
+#endif
+
+extern char typetable[];  /*  the table with types for each page  */
+#define ATOX(a1)       ((((int)(a1)) - OFFSET) >> 9)
+#define        TYPE(a1)        ((typetable+1)[ATOX(a1)])
+#define        TYPL(a1)        ((typetable+1)[ATOX(a1)])
+#define SETTYPE(a1,b,c)   {if((itemp = ATOX(a1)) >= fakettsize) \
+                        { if(fakettsize >= TTSIZE) \
+                          {\
+                             printf(" all space exausted, goodbye\n");\
+                             exit(1);\
+                          }\
+                          fakettsize++;  badmem(c);\
+                        }\
+                       (typetable + 1)[itemp] = (b); }
+
+#define        HUNKP(a1)       ((TYPE(a1) >= 11) & (TYPE(a1) <= 17))
+#define        HUNKSIZE(a1)    ((TYPE(a1)+5) & 15)
+
+#define UPTR(x)        ((unsigned)(((long)(x))-(long)CNIL))
+#define VALID(a)       (UPTR(a) <= UPTR(datalim))
+
+#define Popframe() (errp->olderrp)
+
+
+/* some types ***********************************************************/
+#define lispint long
+#define MAX10LNG 200000000             /* max long divided by 10       */
+
+
+typedef union lispobj *lispval ;
+
+struct dtpr {
+       lispval cdr, car;
+};
+
+struct sdot {
+       int     I;
+       lispval CDR;
+};
+
+
+struct atom    {
+       lispval         clb;            /* current level binding*/
+       lispval         plist;          /* pointer to prop list */
+#ifndef WILD
+       lispval         fnbnd;          /* function binding     */
+#endif
+       struct  atom    *hshlnk;        /* hash link to next    */
+       char            *pname;         /* print name   */
+       };
+#ifdef WILD
+#define fnbnd clb
+#endif
+
+struct array {
+       lispval accfun,         /*  access function--may be anything  */
+               aux;            /*  slot for dimensions or auxilliary data  */
+       char *data;             /*  pointer to first byte of array    */
+       lispval length, delta;  /* length in items and length of one item */
+};
+
+struct bfun {
+       lispval (*start)();     /*  entry point to routine  */
+       lispval discipline,     /*  argument-passing discipline  */
+               language,       /*  language coded in   */
+               params,         /*  parameter list if relevant  */
+               loctab;         /*  local table  */
+};
+
+struct Hunk {
+       lispval hunk[1];
+};
+
+struct Vector {
+        lispval vector[1];
+};
+
+/* the vectori types */
+struct Vectorb {
+       char vectorb[1];
+};
+
+struct Vectorw {
+       short  vectorw[1];
+};
+
+struct Vectorl {
+    long vectorl[1];
+};
+
+union lispobj {
+       struct atom a;
+       FILE *p;
+       struct dtpr d;
+       long int i;
+       long int *j;
+       double r;
+       lispval (*f)();
+       struct array ar;
+       struct sdot s;
+       char c;
+       lispval l;
+       struct bfun bcd;
+       struct Hunk h;
+       struct Vector v;
+       struct Vectorb vb;
+       struct Vectorw vw;
+       struct Vectorl vl;
+};
+
+#ifdef lint
+extern lispval Inewint();
+#define inewint(p) Inewint((long)(p))
+#else
+extern lispval inewint();
+#endif
+
+
+#include "sigtab.h"   /* table of all pointers to lisp data */
+
+/* Port definitions *****************************************************/
+extern FILE    *piport,                /* standard input port          */
+       *poport,                /* standard output port         */
+       *errport,               /* port for error messages      */
+       *rdrport;               /* temporary port for readr     */
+
+#ifndef RTPORTS
+extern FILE *xports[];         /* page of file *'s for lisp    */
+#define P(p)           ((lispval) (xports +((p)-_iob)))
+#define PN(p)          ((int) ((p)-_iob))
+#else
+extern lispval P();
+extern FILE **xports;
+#define PN(p) (((FILE **)P(p))-xports)
+#endif
+
+extern int lineleng ;          /* line length desired          */
+extern char rbktf;             /* logical flag: ] mode         */
+extern unsigned char *ctable;          /* Character table in current use */
+#define Xdqc ctable[131]
+#define Xesc ctable[130]
+#define Xsdc ctable[129]
+
+/* name stack ***********************************************************/
+
+#define NAMESIZE 3072
+
+/* the name stack limit is raised by NAMINC every namestack overflow to allow
+   a user function to handle the error
+*/
+#define NAMINC 25
+
+extern struct nament {
+       lispval val,
+               atm;
+}      *bnp,                   /* first free bind entry*/
+       *bnplim;                /* limit of bindstack   */
+
+struct argent {
+       lispval val;
+};
+extern struct argent *lbot, *np, *namptr;
+extern struct nament   *bnp;                   /* first free bind entry*/
+extern struct argent *nplim;           /* don't have this = np */
+extern struct argent *orgnp;   /* used by top level to reset to start  */
+extern struct nament *orgbnp;  /* used by top level to reset to start  */
+extern struct nament *bnplim;          /* limit of bindstack   */
+extern struct argent   *np,                    /* top entry on stack   */
+               *lbot,                  /* bottom of cur frame  */
+               *namptr;                /* temporary pointer    */
+extern lispval sigacts[16];
+extern lispval hunk_pages[7], hunk_items[7], hunk_name[7];
+
+extern lispval Vprintsym;
+
+#define TNP    if(np >= nplim) namerr();
+
+#define TNP    if(np >= nplim) namerr();
+#define INRNP  if (np++ >= nplim) namerr();
+#define protect(p) (np++->val = (p))
+#define chkarg(p,x); if((p)!=np-lbot) argerr(x);
+
+
+/** status codes **********************************************/
+/*                                                           */
+/* these define how status and sstatus should service probes  */
+/* into the lisp data base                                   */
+
+/* common status codes */
+#define ST_NO 0
+
+/* status codes */
+#define ST_READ 1
+#define ST_FEATR 2
+#define ST_SYNT 3
+#define ST_RINTB 4
+#define ST_NFETR 5
+#define ST_DMPR  6
+#define ST_CTIM  7
+#define ST_LOCT  8
+#define ST_ISTTY 9
+#define ST_UNDEF 10
+
+/* sstatus codes */
+#define ST_SET 1
+#define ST_FEATW 2
+#define ST_TOLC 3
+#define ST_CORE 4
+#define ST_INTB 5
+#define ST_NFETW 6
+#define ST_DMPW  7
+#define ST_AUTR 8
+#define ST_TRAN 9
+#define ST_BCDTR 10
+#define ST_GCSTR 11
+
+
+/* number of counters for fasl to use in a profiling lisp  */
+#define NMCOUNT 5000
+
+/* hashing things *******************************************************/
+#define        HASHTOP 1024    /*  we handle 8-bit characters by dropping top bit  */
+extern struct  atom    *hasht[HASHTOP];
+extern int     hash;           /* set by ratom         */
+extern int     atmlen;         /* length of atom including final null  */
+
+
+/** exception handling ***********************************************/
+extern int exception;  /* if TRUE then an exception is pending, one of */
+                       /* the below                                    */
+extern int sigintcnt;   /* if > 0 then there is a SIGINT pending       */
+
+/* big string buffer for whomever needs it ******************************/
+extern char    *strbuf;
+extern char    *endstrb;
+
+/* break and error declarations *****************************************/
+#define        SAVSIZE 44              /* number of bytes saved by setexit     */
+#define        BRRETB  1
+#define BRCONT 2
+#define        BRGOTO  3
+#define        BRRETN  4
+#define INTERRUPT 5
+#define THROW  6
+extern int     depth;          /* depth of nested breaks               */
+extern lispval contval;        /* the value being returned up          */
+extern int     retval;         /* used by each error/prog call         */
+extern lispval  lispretval;    /* used by non-local go                 */
+extern int     rsetsw;         /* used by *rset mode                   */
+extern int     evalhcallsw;    /* used by evalhook                     */
+extern int     funhcallsw;     /* used by evalhook                     */
+
+
+/* other stuff **********************************************************/
+extern lispval ftemp,vtemp,argptr,ttemp;       /* temporaries: use briefly  */
+extern int itemp;
+                                       /* for pointer type conversion  */
+#include       "dfuncs.h"
+
+#define        NUMBERP 2
+#define        BCDP    5
+#define        PORTP   6
+#define ARRAYP 7
+
+#define        ABSVAL  0
+#define        MINUS   1
+#define        ADD1    2
+#define        SUB1    3
+#define        NOT     4
+#define        LNILL   5
+#define        ZEROP   6
+#define        ONEP    7
+#define        PLUS    8
+#define        TIMES   9
+#define        DIFFERENCE      10
+#define        QUOTIENT        11
+#define        MOD     12
+#define        LESSP   13
+#define        GREATERP        14
+#define        SUM     15
+#define        PRODUCT 16
+#define        AND     17
+#define        OR      18
+#define        XOR     19
+
+interpt();
+handler();  extern sigdelay, sigstruck;
+
+/* limit of valid data area **************************************/
+
+extern lispval datalim;
+
+/** macros to push and pop the value of an atom on the stack ******/
+
+#define PUSHDOWN(atom,value)\
+       {bnp->atm=(atom);bnp++->val=(atom)->a.clb;(atom)->a.clb=value;\
+       if(bnp>bnplim) binderr();}
+
+#define POP\
+       {--bnp;bnp->atm->a.clb=bnp->val;}
+
+/* PUSHVAL  is used to store a specific atom and value on the
+ * bindstack.   Currently only used by closure code
+ */  
+#define PUSHVAL(atom,value)\
+       {bnp->atm=(atom);bnp++->val=value;\
+       if(bnp>bnplim) binderr();}
+
+/** macro for evaluating atoms in eval and interpreter  ***********/
+
+#define EVALATOM(x)    vtemp = x->a.clb;\
+                       if( vtemp == CNIL ) {\
+                               printf("%s: ",(x)->a.pname);\
+                               vtemp = error("UNBOUND VARIABLE",TRUE);}
+
+/*  having to do with small integers                                   */
+extern long Fixzero[];
+#define SMALL(i)       ((lispval)(Fixzero + i))
+#define okport(arg,default) (vtemp = arg,((TYPE((vtemp))!=PORT)?default:(vtemp)->p))
+
+extern lispval ioname[];       /* names of open files */
+/*  interpreter globals   */
+
+extern int lctrace;
+
+/* register lisp macros for registers */
+
+#define saveonly(n)    asm("#save      n")
+#define snpand(n)      asm("#protect   n")
diff --git a/usr/tmp/housel/franz/h/global.h b/usr/tmp/housel/franz/h/global.h
new file mode 100644 (file)
index 0000000..a46e28b
--- /dev/null
@@ -0,0 +1,452 @@
+/*                                     -[Sun Jun 19 14:42:59 1983 by jkf]-
+ *     global.h                        $Locker:  $
+ * main include file 
+ *
+ * $Header: global.h,v 1.11 85/03/24 11:06:11 sklower Exp $
+ *
+ * (c) copyright 1982, Regents of the University of California
+ */
+
+
+#include <stdio.h>
+#include "config.h"
+#include "ltypes.h"
+#ifdef UNIXTS
+#include "tsfix.h"
+#endif
+
+#define AD 0
+
+#define        peekc(p)        (p->_cnt>0? *(p)->_ptr&0377:_filbuf(p)==-1?-1:((p)->_cnt++,*--(p)->_ptr&0377))
+
+#define FALSE  0
+#define        TRUE    1
+#define EVER   ;;
+#define STRBLEN 512
+#define LBPG   512
+
+
+#define        NULL_CHAR       0
+#define        LF      '\n'
+#define        WILDCHR '\0177'
+
+
+/* the numbers per page of the different data objects *******************/
+
+#define NUMSPACES (VECTORI+1)
+
+#define ATOMSPP 25
+#define STRSPP 1
+#define INTSPP 128
+#define DTPRSPP 64
+#define DOUBSPP 64
+#define ARRAYSPP 25
+#define SDOTSPP 64
+#define VALSPP 128
+#define BCDSPP 64
+
+
+#define HUNK2SPP 64             /* hunk page sizes */
+#define HUNK4SPP 32
+#define HUNK8SPP 16
+#define HUNK16SPP 8
+#define HUNK32SPP 4
+#define HUNK64SPP 2
+#define HUNK128SPP 1
+#define VECTORSPP 512
+
+/* offset of size info from beginning of vector,  in longwords */
+/* these values are not valid when a vector is stored in the free */
+/* list, in which case the chaining is done through the propery field */
+#define VSizeOff -2
+#define VPropOff -1
+
+/* VecTotSize: the total number of longwords for the data segment of
+ * the vector. Takes a byte count and rounds up to nearest long.
+ */
+
+#define VecTotSize(x)  (((x)+3) >> 2)
+#define VecTotToByte(x) ((x) * sizeof(long))
+
+/* these vector size macros determine the number of complete objects
+   in the vector
+ */
+#define VecSize(x)     ((x) >> 2)
+#define VecWordSize(x) ((x) >> 1)
+#define VecByteSize(x) (x)
+
+/* maximum and minimum fixnums */
+#define MaxINT 0x3fffffff
+#define MinINT (- 0x4000000)
+/* 
+ * macros for saving state and restoring state
+ *
+ * Savestack and Restorestack are required at the beginning and end of
+ * functions which modify the stack pointers np and lbot.
+ * The Savestack(n) should appear at the end of the variable declarations
+ * The n refers to the number of register variables declared in this routine.
+ * The information is required for the Vax version only.
+ */
+#ifdef PORTABLE
+extern struct atom nilatom, eofatom;
+#define nil    ((lispval) &nilatom)
+#define eofa   ((lispval) &eofatom)
+#define Savestack(n) struct argent *OLDlbot = lbot, *OLDnp = np
+#define Restorestack() (lbot = OLDlbot), np = OLDnp
+#else
+#define nil    ((lispval) 0)
+#define eofa   ((lispval) 20)
+#define Savestack(n) snpand(n)
+#define Restorestack() 
+#endif
+
+#ifdef SIXONLY
+#define errorh1 errh1
+#define errorh2 errh2
+#endif
+
+#define        CNIL    ((lispval) (OFFSET-4))
+#define NOTNIL(a)      (nil!=a)
+#define ISNIL(a)       (nil==a)
+
+#ifdef SPISFP
+extern long *xsp, xstack[];
+#define sp() xsp
+#define stack(z) (xsp > xstack ? (*--xsp = z): xserr())
+#define unstack() (*xsp++)
+#define Keepxs() long *oxsp = xsp;
+#define Freexs() xsp = oxsp;
+#else
+extern long *sp(), stack(), unstack();
+#define Keepxs() /* */
+#define Freexs() /* */
+#endif
+
+extern char typetable[];  /*  the table with types for each page  */
+#define ATOX(a1)       ((((int)(a1)) - OFFSET) >> 9)
+#define        TYPE(a1)        ((typetable+1)[ATOX(a1)])
+#define        TYPL(a1)        ((typetable+1)[ATOX(a1)])
+#define SETTYPE(a1,b,c)   {if((itemp = ATOX(a1)) >= fakettsize) \
+                        { if(fakettsize >= TTSIZE) \
+                          {\
+                             printf(" all space exausted, goodbye\n");\
+                             exit(1);\
+                          }\
+                          fakettsize++;  badmem(c);\
+                        }\
+                       (typetable + 1)[itemp] = (b); }
+
+#define        HUNKP(a1)       ((TYPE(a1) >= 11) & (TYPE(a1) <= 17))
+#define        HUNKSIZE(a1)    ((TYPE(a1)+5) & 15)
+
+#define UPTR(x)        ((unsigned)(((long)(x))-(long)CNIL))
+#define VALID(a)       (UPTR(a) <= UPTR(datalim))
+
+#define Popframe() (errp->olderrp)
+
+
+/* some types ***********************************************************/
+#define lispint long
+#define MAX10LNG 200000000             /* max long divided by 10       */
+
+
+typedef union lispobj *lispval ;
+
+struct dtpr {
+       lispval cdr, car;
+};
+
+struct sdot {
+       int     I;
+       lispval CDR;
+};
+
+
+struct atom    {
+       lispval         clb;            /* current level binding*/
+       lispval         plist;          /* pointer to prop list */
+#ifndef WILD
+       lispval         fnbnd;          /* function binding     */
+#endif
+       struct  atom    *hshlnk;        /* hash link to next    */
+       char            *pname;         /* print name   */
+       };
+#ifdef WILD
+#define fnbnd clb
+#endif
+
+struct array {
+       lispval accfun,         /*  access function--may be anything  */
+               aux;            /*  slot for dimensions or auxilliary data  */
+       char *data;             /*  pointer to first byte of array    */
+       lispval length, delta;  /* length in items and length of one item */
+};
+
+struct bfun {
+       lispval (*start)();     /*  entry point to routine  */
+       lispval discipline,     /*  argument-passing discipline  */
+               language,       /*  language coded in   */
+               params,         /*  parameter list if relevant  */
+               loctab;         /*  local table  */
+};
+
+struct Hunk {
+       lispval hunk[1];
+};
+
+struct Vector {
+        lispval vector[1];
+};
+
+/* the vectori types */
+struct Vectorb {
+       char vectorb[1];
+};
+
+struct Vectorw {
+       short  vectorw[1];
+};
+
+struct Vectorl {
+    long vectorl[1];
+};
+
+union lispobj {
+       struct atom a;
+       FILE *p;
+       struct dtpr d;
+       long int i;
+       long int *j;
+       double r;
+       lispval (*f)();
+       struct array ar;
+       struct sdot s;
+       char c;
+       lispval l;
+       struct bfun bcd;
+       struct Hunk h;
+       struct Vector v;
+       struct Vectorb vb;
+       struct Vectorw vw;
+       struct Vectorl vl;
+};
+
+#ifdef lint
+extern lispval Inewint();
+#define inewint(p) Inewint((long)(p))
+#else
+extern lispval inewint();
+#endif
+
+
+#include "sigtab.h"   /* table of all pointers to lisp data */
+
+/* Port definitions *****************************************************/
+extern FILE    *piport,                /* standard input port          */
+       *poport,                /* standard output port         */
+       *errport,               /* port for error messages      */
+       *rdrport;               /* temporary port for readr     */
+
+#ifndef RTPORTS
+extern FILE *xports[];         /* page of file *'s for lisp    */
+#define P(p)           ((lispval) (xports +((p)-_iob)))
+#define PN(p)          ((int) ((p)-_iob))
+#else
+extern lispval P();
+extern FILE **xports;
+#define PN(p) (((FILE **)P(p))-xports)
+#endif
+
+extern int lineleng ;          /* line length desired          */
+extern char rbktf;             /* logical flag: ] mode         */
+extern unsigned char *ctable;          /* Character table in current use */
+#define Xdqc ctable[131]
+#define Xesc ctable[130]
+#define Xsdc ctable[129]
+
+/* name stack ***********************************************************/
+
+#define NAMESIZE 3072
+
+/* the name stack limit is raised by NAMINC every namestack overflow to allow
+   a user function to handle the error
+*/
+#define NAMINC 25
+
+extern struct nament {
+       lispval val,
+               atm;
+}      *bnp,                   /* first free bind entry*/
+       *bnplim;                /* limit of bindstack   */
+
+struct argent {
+       lispval val;
+};
+extern struct argent *lbot, *np, *namptr;
+extern struct nament   *bnp;                   /* first free bind entry*/
+extern struct argent *nplim;           /* don't have this = np */
+extern struct argent *orgnp;   /* used by top level to reset to start  */
+extern struct nament *orgbnp;  /* used by top level to reset to start  */
+extern struct nament *bnplim;          /* limit of bindstack   */
+extern struct argent   *np,                    /* top entry on stack   */
+               *lbot,                  /* bottom of cur frame  */
+               *namptr;                /* temporary pointer    */
+extern lispval sigacts[16];
+extern lispval hunk_pages[7], hunk_items[7], hunk_name[7];
+
+extern lispval Vprintsym;
+
+#define TNP    if(np >= nplim) namerr();
+
+#define TNP    if(np >= nplim) namerr();
+#define INRNP  if (np++ >= nplim) namerr();
+#define protect(p) (np++->val = (p))
+#define chkarg(p,x); if((p)!=np-lbot) argerr(x);
+
+
+/** status codes **********************************************/
+/*                                                           */
+/* these define how status and sstatus should service probes  */
+/* into the lisp data base                                   */
+
+/* common status codes */
+#define ST_NO 0
+
+/* status codes */
+#define ST_READ 1
+#define ST_FEATR 2
+#define ST_SYNT 3
+#define ST_RINTB 4
+#define ST_NFETR 5
+#define ST_DMPR  6
+#define ST_CTIM  7
+#define ST_LOCT  8
+#define ST_ISTTY 9
+#define ST_UNDEF 10
+
+/* sstatus codes */
+#define ST_SET 1
+#define ST_FEATW 2
+#define ST_TOLC 3
+#define ST_CORE 4
+#define ST_INTB 5
+#define ST_NFETW 6
+#define ST_DMPW  7
+#define ST_AUTR 8
+#define ST_TRAN 9
+#define ST_BCDTR 10
+#define ST_GCSTR 11
+
+
+/* number of counters for fasl to use in a profiling lisp  */
+#define NMCOUNT 5000
+
+/* hashing things *******************************************************/
+#define        HASHTOP 1024    /*  we handle 8-bit characters by dropping top bit  */
+extern struct  atom    *hasht[HASHTOP];
+extern int     hash;           /* set by ratom         */
+extern int     atmlen;         /* length of atom including final null  */
+
+
+/** exception handling ***********************************************/
+extern int exception;  /* if TRUE then an exception is pending, one of */
+                       /* the below                                    */
+extern int sigintcnt;   /* if > 0 then there is a SIGINT pending       */
+
+/* big string buffer for whomever needs it ******************************/
+extern char    *strbuf;
+extern char    *endstrb;
+
+/* break and error declarations *****************************************/
+#define        SAVSIZE 44              /* number of bytes saved by setexit     */
+#define        BRRETB  1
+#define BRCONT 2
+#define        BRGOTO  3
+#define        BRRETN  4
+#define INTERRUPT 5
+#define THROW  6
+extern int     depth;          /* depth of nested breaks               */
+extern lispval contval;        /* the value being returned up          */
+extern int     retval;         /* used by each error/prog call         */
+extern lispval  lispretval;    /* used by non-local go                 */
+extern int     rsetsw;         /* used by *rset mode                   */
+extern int     evalhcallsw;    /* used by evalhook                     */
+extern int     funhcallsw;     /* used by evalhook                     */
+
+
+/* other stuff **********************************************************/
+extern lispval ftemp,vtemp,argptr,ttemp;       /* temporaries: use briefly  */
+extern int itemp;
+                                       /* for pointer type conversion  */
+#include       "dfuncs.h"
+
+#define        NUMBERP 2
+#define        BCDP    5
+#define        PORTP   6
+#define ARRAYP 7
+
+#define        ABSVAL  0
+#define        MINUS   1
+#define        ADD1    2
+#define        SUB1    3
+#define        NOT     4
+#define        LNILL   5
+#define        ZEROP   6
+#define        ONEP    7
+#define        PLUS    8
+#define        TIMES   9
+#define        DIFFERENCE      10
+#define        QUOTIENT        11
+#define        MOD     12
+#define        LESSP   13
+#define        GREATERP        14
+#define        SUM     15
+#define        PRODUCT 16
+#define        AND     17
+#define        OR      18
+#define        XOR     19
+
+interpt();
+handler();  extern sigdelay, sigstruck;
+
+/* limit of valid data area **************************************/
+
+extern lispval datalim;
+
+/** macros to push and pop the value of an atom on the stack ******/
+
+#define PUSHDOWN(atom,value)\
+       {bnp->atm=(atom);bnp++->val=(atom)->a.clb;(atom)->a.clb=value;\
+       if(bnp>bnplim) binderr();}
+
+#define POP\
+       {--bnp;bnp->atm->a.clb=bnp->val;}
+
+/* PUSHVAL  is used to store a specific atom and value on the
+ * bindstack.   Currently only used by closure code
+ */  
+#define PUSHVAL(atom,value)\
+       {bnp->atm=(atom);bnp++->val=value;\
+       if(bnp>bnplim) binderr();}
+
+/** macro for evaluating atoms in eval and interpreter  ***********/
+
+#define EVALATOM(x)    vtemp = x->a.clb;\
+                       if( vtemp == CNIL ) {\
+                               printf("%s: ",(x)->a.pname);\
+                               vtemp = error("UNBOUND VARIABLE",TRUE);}
+
+/*  having to do with small integers                                   */
+extern long Fixzero[];
+#define SMALL(i)       ((lispval)(Fixzero + i))
+#define okport(arg,default) (vtemp = arg,((TYPE((vtemp))!=PORT)?default:(vtemp)->p))
+
+extern lispval ioname[];       /* names of open files */
+/*  interpreter globals   */
+
+extern int lctrace;
+
+/* register lisp macros for registers */
+
+#define saveonly(n)    asm("#save      n")
+#define snpand(n)      asm("#protect   n")