Annotation of 43BSD/ucb/pascal/src/pc.h, revision 1.1.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:  *     @(#)pc.h        5.1 (Berkeley) 6/5/85
                      7:  */
                      8: 
                      9: #include <setjmp.h>
                     10: 
                     11:     /*
                     12:      * random constants for pc
                     13:      */
                     14:     
                     15:     /*
                     16:      * the name of the display.
                     17:      */
                     18: #define        DISPLAYNAME     "__disply"
                     19: 
                     20:     /*
                     21:      * the structure below describes the locals used by the run time system.
                     22:      * at function entry, at least this much space is allocated,
                     23:      * and the following information is filled in:
                     24:      * the address of a routine to close the current frame for unwinding,
                     25:      * a pointer to the display entry for the current static level and
                     26:      * the previous contents of the display for this static level.
                     27:      * the curfile location is used to point to the currently active file,
                     28:      * and is filled in as io is initiated.
                     29:      * one of these structures is allocated on the (negatively growing) stack.
                     30:      * at function entry, fp is set to point to the last field of the struct,
                     31:      * thus the offsets of the fields are as indicated below.
                     32:      */
                     33: struct rtlocals {
                     34:     jmp_buf            gotoenv;
                     35:     struct iorec       *curfile;
                     36:     struct dispsave    dsave;
                     37: } rtlocs;
                     38: #define        GOTOENVOFFSET   ( -sizeof rtlocs )
                     39: #define        CURFILEOFFSET   ( GOTOENVOFFSET + sizeof rtlocs.gotoenv )
                     40: #define        DSAVEOFFSET     ( CURFILEOFFSET + sizeof rtlocs.curfile )
                     41: 
                     42:     /*
                     43:      * this is a cookie used to communicate between the
                     44:      * routine entry code and the routine exit code.
                     45:      * mostly it's for labels shared between the two.
                     46:      */
                     47: #ifdef vax
                     48: struct entry_exit_cookie {
                     49:     struct nl  *nlp;
                     50:     char       extname[BUFSIZ];
                     51:     int                toplabel;
                     52:     int                savlabel;
                     53: };
                     54: #define        FRAME_SIZE_LABEL        "LF"
                     55: #define        SAVE_MASK_LABEL         "L"
                     56: #endif vax
                     57: 
                     58: #ifdef mc68000
                     59: struct entry_exit_cookie {
                     60:     struct nl  *nlp;
                     61:     char       extname[BUFSIZ];
                     62:     int                toplabel;
                     63: };
                     64: #define        FRAME_SIZE_LABEL        "LF"
                     65: #define        PAGE_BREAK_LABEL        "LP"
                     66: #define        SAVE_MASK_LABEL         "LS"
                     67: #endif mc68000
                     68: 
                     69:     /*
                     70:      * formats for various names
                     71:      *     NAMEFORMAT          arbitrary length strings.
                     72:      *     EXTFORMAT           for externals, a preceding underscore.
                     73:      *     LABELFORMAT         for label names, a preceding dollar-sign.
                     74:      *     PREFIXFORMAT        used to print made up names with prefixes.
                     75:      *     LABELPREFIX         with getlab() makes up label names.
                     76:      *     LLABELPREFIX        with getlab() makes up sdb labels.
                     77:      *     FORMALPREFIX        prefix for EXTFORMAT for formal entry points.
                     78:      * a typical use might be to print out a name with a preceeding underscore
                     79:      * with putprintf( EXTFORMAT , 0 , name );
                     80:      */
                     81: #define        NAMEFORMAT      "%s"
                     82: #define        EXTFORMAT       "_%s"
                     83: #define        LABELFORMAT     "$%s"
                     84: #define        PREFIXFORMAT    "%s%d"
                     85: #define        LABELPREFIX     "L"
                     86: #define        LLABELPREFIX    "LL"
                     87: #define        FORMALPREFIX    "__"
                     88: 
                     89:     /*
                     90:      * the name of the statement counter
                     91:      */
                     92: #define        STMTCOUNT       "__stcnt"
                     93: 
                     94:     /*
                     95:      * the name of the pcp counters
                     96:      */
                     97: #define        PCPCOUNT        "__pcpcount"
                     98: 
                     99:     /*
                    100:      * a vector of pointer to enclosing functions for fully qualified names.
                    101:      */
                    102: char   *enclosing[ DSPLYSZ ];
                    103: 
                    104: #ifdef vax
                    105:     /*
                    106:      * the runtime framepointer and argumentpointer registers
                    107:      */
                    108: #   define     P2FP            13
                    109: #   define     P2FPNAME        "fp"
                    110: #   define     P2AP            12
                    111: #   define     P2APNAME        "ap"
                    112: 
                    113:     /*
                    114:      * the register save mask for saving no registers
                    115:      */
                    116: #   define     RSAVEMASK       ( 0 )
                    117: 
                    118:     /*
                    119:      * runtime check mask for divide check and integer overflow
                    120:      */
                    121: #   define     RUNCHECK        ( ( 1 << 15 ) | ( 1 << 14 ) )
                    122: 
                    123:     /*
                    124:      * and of course ...
                    125:      */
                    126: #   define     BITSPERBYTE     8
                    127: #endif vax
                    128: 
                    129: #ifdef mc68000
                    130:     /*
                    131:      * these magic numbers lifted from pcc/mac2defs
                    132:      * the offsets are for mapping data and address register numbers
                    133:      * to linear register numbers.  e.g. d2 ==> r2, and a2 ==> r10.
                    134:      */
                    135: #   define     DATA_REG_OFFSET 0
                    136: #   define     ADDR_REG_OFFSET 8
                    137: #   define     P2FPNAME        "a6"
                    138: #   define     P2FP            (ADDR_REG_OFFSET + 6)
                    139: #   define     P2APNAME        "a6"
                    140: #   define     P2AP            (ADDR_REG_OFFSET + 6)
                    141: 
                    142:     /*
                    143:      * and still ...
                    144:      */
                    145: #   define     BITSPERBYTE     8
                    146: #endif mc68000

unix.superglobalmegacorp.com

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