Annotation of 43BSDTahoe/ucb/pascal/px/vars.h, revision 1.1

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

unix.superglobalmegacorp.com

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