Annotation of 3BSD/cmd/px/h00vars.h, revision 1.1

1.1     ! root        1: #
        !             2: /*
        !             3:  * px - Berkeley Pascal interpreter
        !             4:  *
        !             5:  * Version 2.0, January 1979
        !             6:  *
        !             7:  * Original version by Ken Thompson
        !             8:  *
        !             9:  * Substantial revisions by Bill Joy and Chuck Haley
        !            10:  * November-December 1976
        !            11:  *
        !            12:  * Rewritten for VAX 11/780 by Kirk McKusick
        !            13:  * Fall 1978
        !            14:  *
        !            15:  * Px is described in detail in the "PX 1.0 Implementation Notes"
        !            16:  * The source code for px is in several major pieces:
        !            17:  *
        !            18:  *     int.c           C main program which reads in interpreter code
        !            19:  *     00case.s        Driver including main interpreter loop
        !            20:  *     dd*.s           Where dd are digits, interpreter instructions
        !            21:  *                     grouped by their positions in the interpreter table.
        !            22:  *     p*.c            Various C language routines supporting the system.
        !            23:  *
        !            24:  * In addition there are several headers defining mappings for error
        !            25:  * messages names into codes, and a definition of the interpreter transfer
        !            26:  * table. These are made by the script Emake in this directory and the scripts
        !            27:  * in the directory '../opcodes'.
        !            28:  */
        !            29: 
        !            30: long   argc;
        !            31: char   **argv;
        !            32: 
        !            33: /*
        !            34:  * Pascal runtime errors transfer to the routine
        !            35:  * 'error' in the file perror.c to decode them.
        !            36:  */
        !            37: int    perrno;         /* number of error which occurred */
        !            38: 
        !            39: /*
        !            40:  * Definitions for memory allocation
        !            41:  * Memory allocation is done by palloc in utilities.c
        !            42:  */
        !            43: 
        !            44: /*
        !            45:  * The file i/o routines maintain a notion of a "current file".
        !            46:  * The printing name of this file is kept in the variable
        !            47:  * "file" for use in error messages.
        !            48:  */
        !            49: char   *file;          /* ptr to active file name */
        !            50: long   fchain;         /* head of active file chain */
        !            51: int    bufopt;         /* controls flushing of std output as follows:
        !            52:                         * 0 => flush on every write
        !            53:                         * 1 => flush before std read or at end of line
        !            54:                         * 2 => normal buffering
        !            55:                         */
        !            56: /*
        !            57:  * THE RUNTIME DISPLAY
        !            58:  *
        !            59:  * The entries in the display point to the active static block marks.
        !            60:  * The first entry in the display is for the global variables,
        !            61:  * then the procedure or function at level one, etc.
        !            62:  * Each display entry points to a stack frame as shown:
        !            63:  *
        !            64:  *             base of stack frame
        !            65:  *               ---------------
        !            66:  *               |             |
        !            67:  *               | block mark  |
        !            68:  *               |             |
        !            69:  *               ---------------  <-- display entry points here
        !            70:  *               |             |
        !            71:  *               |   local     |
        !            72:  *               |  variables  |
        !            73:  *               |             |
        !            74:  *               ---------------
        !            75:  *               |             |
        !            76:  *               |  expression |
        !            77:  *               |  temporary  |
        !            78:  *               |  storage    |
        !            79:  *               |             |
        !            80:  *               - - - - - - - -
        !            81:  *
        !            82:  * The information in the block mark is thus at positive offsets from
        !            83:  * the display pointer entries while the local variables are at negative
        !            84:  * offsets. The block mark actually consists of two parts. The first
        !            85:  * part is created at CALL and the second at entry, i.e. BEGIN. Thus:
        !            86:  *
        !            87:  *             -------------------------
        !            88:  *             |                       |
        !            89:  *             |  Saved lino           |
        !            90:  *             |  Saved lc             |
        !            91:  *             |  Saved dp             |
        !            92:  *             |                       |
        !            93:  *             -------------------------
        !            94:  *             |                       |
        !            95:  *             |  Saved (dp)           |
        !            96:  *             |                       |
        !            97:  *             |  Current section name |
        !            98:  *             |   and entry line ptr  |
        !            99:  *             |                       |
        !           100:  *             |  Saved file name and  |
        !           101:  *             |   file buffer ptr     |
        !           102:  *             |                       |
        !           103:  *             |  Empty tos value      |
        !           104:  *             |                       |
        !           105:  *             -------------------------
        !           106:  */
        !           107: 
        !           108: /*
        !           109:  * Structure for accessing things in the block mark
        !           110:  */
        !           111: struct stack {
        !           112:        long    *tos;           /* pointer to top of stack frame */
        !           113:        char    *file;          /* pointer to active file name */
        !           114:        long    buf;            /* pointer to active file record */
        !           115:        struct  {
        !           116:                char    name[8];/* name of active procedure */
        !           117:                short   offset; /* offset of procedure in source file */
        !           118:                } *entry;
        !           119:        struct  stack *disp;    /* previous display value for this level */
        !           120:        struct  stack **dp;     /* pointer to active display entry */
        !           121:        long    lc;             /* previous location counter */
        !           122:        long    lino;           /* previous line number */
        !           123:        } *display[40];
        !           124: 
        !           125: long   addrsze;                /* size of display addresses */
        !           126: 
        !           127: 
        !           128: /*
        !           129:  * Program option variables
        !           130:  */
        !           131: long   stcnt;          /* number of statements executed */
        !           132: long   stlim;          /* max number of statements to execute */
        !           133: long   llimit;         /* max number of lines per text file */
        !           134: short  nodump;         /* 1 => no post mortum dump */
        !           135: short  mode;           /* mode of input to interpreter */
        !           136: #define        PX      0       /* normal run of px */
        !           137: #define        PIX     1       /* load and go */
        !           138: #define        PIPE    2       /* bootstrap via a pipe */
        !           139: 
        !           140: /*
        !           141:  * Pxp variables
        !           142:  */
        !           143: char   *pxpbuf;        /* pointer to pxp buffer */
        !           144: long   pxpsize;        /* size of pxp buffer */
        !           145: 
        !           146: #ifdef profile
        !           147: /*
        !           148:  * Px execution profile data
        !           149:  */
        !           150: #define        numops 256
        !           151: struct cntrec {
        !           152:        double  counts[numops]; /* instruction counts */
        !           153:        long    runs;           /* number of interpreter runs */
        !           154:        long    startdate;      /* date profile started */
        !           155:        long    usrtime;        /* total user time consumed */
        !           156:        long    systime;        /* total system time consumed */
        !           157:        double  stmts;          /* number of pascal statements executed */
        !           158:        } profdata;
        !           159: long   profcnts[numops];
        !           160: #define        proffile        "/usr/ucb/pascal/px/pcnt.out"
        !           161: FILE   *datafile;              /* input datafiles */
        !           162: #else
        !           163: int    profcnts;       /* dummy just to keep the linker happy */
        !           164: #endif

unix.superglobalmegacorp.com

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