Annotation of 42BSD/ucb/pascal/px/vars.h, revision 1.1.1.1

1.1       root        1: /* Copyright (c) 1979 Regents of the University of California */
                      2: 
                      3: /* static char sccsid[] = "@(#)vars.h 1.12 1/22/83"; */
                      4: 
                      5: #include <stdio.h>
                      6: 
                      7: /*
                      8:  * px - Berkeley Pascal interpreter
                      9:  *
                     10:  * Version 4.0, January 1981
                     11:  *
                     12:  * Original version by Ken Thompson
                     13:  *
                     14:  * Substantial revisions by Bill Joy and Chuck Haley
                     15:  * November-December 1976
                     16:  *
                     17:  * Rewritten for VAX 11/780 by Kirk McKusick
                     18:  * Fall 1978
                     19:  *
                     20:  * Rewritten in ``C'' using libpc by Kirk McKusick
                     21:  * Winter 1981
                     22:  *
                     23:  * Px is described in detail in the "PX 4.0 Implementation Notes"
                     24:  * The source code for px is in several major pieces:
                     25:  *
                     26:  *     int.c           C main program which reads in interpreter code
                     27:  *     interp.c        Driver including main interpreter loop and
                     28:  *                     the interpreter instructions grouped by their
                     29:  *                     positions in the interpreter table.
                     30:  *     utilities.c     Interpreter exit, backtrace, and runtime statistics.
                     31:  *
                     32:  * In addition there are several headers defining mappings for panic
                     33:  * names into codes, and a definition of the interpreter transfer
                     34:  * table. These are made by the script make.ed1 in this directory and 
                     35:  * the routine opc.c from ${PASCALDIR}. (see the makefile for details)
                     36:  */
                     37: #define PXPFILE                "pmon.out"
                     38: #define        BITSPERBYTE     8
                     39: #define        BITSPERLONG     (BITSPERBYTE * sizeof(long))
                     40: #define HZ             100
                     41: #define NAMSIZ         76
                     42: #define MAXFILES       32
                     43: #define PREDEF         2
                     44: #ifdef ADDR32
                     45: #define STDLVL         ((struct iorec *)(0x7ffffff1))
                     46: #define GLVL           ((struct iorec *)(0x7ffffff0))
                     47: #endif ADDR32
                     48: #ifdef ADDR16
                     49: #define STDLVL         ((struct iorec *)(0xfff1))
                     50: #define GLVL           ((struct iorec *)(0xfff0))
                     51: #endif ADDR16
                     52: #define FILNIL         ((struct iorec *)(0))
                     53: #define INPUT          ((struct iorec *)(&input))
                     54: #define OUTPUT         ((struct iorec *)(&output))
                     55: #define ERR            ((struct iorec *)(&_err))
                     56: #define        PX      0       /* normal run of px */
                     57: #define        PIX     1       /* load and go */
                     58: #define        PIPE    2       /* bootstrap via a pipe */
                     59: #define        PDX     3       /* invoked by the debugger "pdx" */
                     60: #define releq 0
                     61: #define relne 2
                     62: #define rellt 4
                     63: #define relgt 6
                     64: #define relle 8
                     65: #define relge 10
                     66: typedef enum {FALSE, TRUE} bool;
                     67: 
                     68: /*
                     69:  * interrupt and allocation routines
                     70:  */
                     71: extern long createtime;
                     72: extern char *PALLOC();
                     73: extern char *malloc();
                     74: extern long time();
                     75: extern intr();
                     76: extern memsize();
                     77: extern syserr();
                     78: extern liberr();
                     79: 
                     80: /*
                     81:  * stack routines and structures
                     82:  */
                     83: struct sze8 {
                     84:        char element[8];
                     85: };
                     86: extern short pop2();
                     87: extern long pop4();
                     88: extern double pop8();
                     89: extern struct sze8 popsze8();
                     90: extern char *pushsp();
                     91: 
                     92: /*
                     93:  * emulated pc types
                     94:  */
                     95: union progcntr {
                     96:        char *cp;
                     97:        unsigned char *ucp;
                     98:        short *sp;
                     99:        unsigned short *usp;
                    100:        long *lp;
                    101:        double *dbp;
                    102:        struct hdr *hdrp;
                    103: };
                    104: 
                    105: /*
                    106:  * THE RUNTIME DISPLAY
                    107:  *
                    108:  * The entries in the display point to the active static block marks.
                    109:  * The first entry in the display is for the global variables,
                    110:  * then the procedure or function at level one, etc.
                    111:  * Each display entry points to a stack frame as shown:
                    112:  *
                    113:  *             base of stack frame
                    114:  *               ---------------
                    115:  *               |             |
                    116:  *               | block mark  |
                    117:  *               |             |
                    118:  *               ---------------  <-- display entry "stp" points here
                    119:  *               |             |  <-- display entry "locvars" points here
                    120:  *               |   local     |
                    121:  *               |  variables  |
                    122:  *               |             |
                    123:  *               ---------------
                    124:  *               |             |
                    125:  *               |  expression |
                    126:  *               |  temporary  |
                    127:  *               |  storage    |
                    128:  *               |             |
                    129:  *               - - - - - - - -
                    130:  *
                    131:  * The information in the block mark is thus at positive offsets from
                    132:  * the display.stp pointer entries while the local variables are at negative
                    133:  * offsets from display.locvars. The block mark actually consists of
                    134:  * two parts. The first part is created at CALL and the second at entry,
                    135:  * i.e. BEGIN. Thus:
                    136:  *
                    137:  *             -------------------------
                    138:  *             |                       |
                    139:  *             |  Saved lino           |
                    140:  *             |  Saved lc             |
                    141:  *             |  Saved dp             |
                    142:  *             |                       |
                    143:  *             -------------------------
                    144:  *             |                       |
                    145:  *             |  Saved (dp)           |
                    146:  *             |                       |
                    147:  *             |  Pointer to current   |
                    148:  *             |   routine header info |
                    149:  *             |                       |
                    150:  *             |  Saved value of       |
                    151:  *             |   "curfile"           |
                    152:  *             |                       |
                    153:  *             |  Empty tos value      |
                    154:  *             |                       |
                    155:  *             -------------------------
                    156:  */
                    157: 
                    158: /*
                    159:  * program variables
                    160:  */
                    161: extern union display   _display;       /* runtime display */
                    162: extern struct dispsave *_dp;           /* ptr to active frame */
                    163: extern long            _lino;          /* current line number */
                    164: extern int             _argc;          /* number of passed args */
                    165: extern char            **_argv;        /* values of passed args */
                    166: extern bool            _nodump;        /* TRUE => no post mortum dump */
                    167: extern long            _runtst;        /* TRUE => runtime tests */
                    168: extern long            _mode;          /* execl by PX, PIPE, or PIX */
                    169: extern long            _stlim;         /* statement limit */
                    170: extern long            _stcnt;         /* statement count */
                    171: extern long            _seed;          /* random number seed */
                    172: extern char            *_maxptr;       /* maximum valid pointer */
                    173: extern char            *_minptr;       /* minimum valid pointer */
                    174: extern long            *_pcpcount;     /* pointer to pxp buffer */
                    175: extern long            _cntrs;         /* number of counters */
                    176: extern long            _rtns;          /* number of routine cntrs */
                    177: 
                    178: /*
                    179:  * The file i/o routines maintain a notion of a "current file".
                    180:  * A pointer to this file structure is kept in "curfile".
                    181:  *
                    182:  * file structures
                    183:  */
                    184: struct iorechd {
                    185:        char            *fileptr;       /* ptr to file window */
                    186:        long            lcount;         /* number of lines printed */
                    187:        long            llimit;         /* maximum number of text lines */
                    188:        FILE            *fbuf;          /* FILE ptr */
                    189:        struct iorec    *fchain;        /* chain to next file */
                    190:        struct iorec    *flev;          /* ptr to associated file variable */
                    191:        char            *pfname;        /* ptr to name of file */
                    192:        short           funit;          /* file status flags */
                    193:        short           fblk;           /* index into active file table */
                    194:        long            fsize;          /* size of elements in the file */
                    195:        char            fname[NAMSIZ];  /* name of associated UNIX file */
                    196: };
                    197: 
                    198: struct iorec {
                    199:        char            *fileptr;       /* ptr to file window */
                    200:        long            lcount;         /* number of lines printed */
                    201:        long            llimit;         /* maximum number of text lines */
                    202:        FILE            *fbuf;          /* FILE ptr */
                    203:        struct iorec    *fchain;        /* chain to next file */
                    204:        struct iorec    *flev;          /* ptr to associated file variable */
                    205:        char            *pfname;        /* ptr to name of file */
                    206:        short           funit;          /* file status flags */
                    207:        short           fblk;           /* index into active file table */
                    208:        long            fsize;          /* size of elements in the file */
                    209:        char            fname[NAMSIZ];  /* name of associated UNIX file */
                    210:        char            buf[BUFSIZ];    /* I/O buffer */
                    211:        char            window[1];      /* file window element */
                    212: };
                    213: 
                    214: /*
                    215:  * unit flags
                    216:  */
                    217: #define        FDEF    0x80    /* 1 => reserved file name */
                    218: #define        FTEXT   0x40    /* 1 => text file, process EOLN */
                    219: #define        FWRITE  0x20    /* 1 => open for writing */
                    220: #define        FREAD   0x10    /* 1 => open for reading */
                    221: #define        TEMP    0x08    /* 1 => temporary file */
                    222: #define        SYNC    0x04    /* 1 => window is out of sync */
                    223: #define        EOLN    0x02    /* 1 => at end of line */
                    224: #define        EOFF    0x01    /* 1 => at end of file */
                    225: 
                    226: /*
                    227:  * file routines
                    228:  */
                    229: extern struct iorec    *GETNAME();
                    230: extern char            *MKTEMP();
                    231: 
                    232: /*
                    233:  * file record variables
                    234:  */
                    235: extern struct iorechd  _fchain;        /* head of active file chain */
                    236: extern struct iorec    *_actfile[];    /* table of active files */
                    237: extern long            _filefre;       /* last used entry in _actfile */
                    238: 
                    239: /*
                    240:  * standard files
                    241:  */
                    242: extern struct iorechd  input;
                    243: extern struct iorechd  output;
                    244: extern struct iorechd  _err;
                    245: 
                    246: /*
                    247:  * Px execution profile array
                    248:  */
                    249: #ifdef PROFILE
                    250: #define        NUMOPS 256
                    251: extern long _profcnts[NUMOPS];
                    252: #endif PROFILE

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.