Annotation of 43BSDReno/pgrm/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.2 (Berkeley) 11/12/86
                      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: #ifdef vax
                     34: struct rtlocals {
                     35:     jmp_buf            gotoenv;
                     36:     struct iorec       *curfile;
                     37:     struct dispsave    dsave;
                     38: } rtlocs;
                     39: #endif vax
                     40: 
                     41: #ifdef tahoe
                     42: struct rtlocals {
                     43:     jmp_buf            gotoenv;
                     44:     struct iorec       *curfile;
                     45:     struct dispsave    dsave;
                     46:     long               savedregs[9];
                     47: } rtlocs;
                     48: #endif tahoe
                     49: 
                     50: #ifdef mc68000
                     51: struct rtlocals {
                     52:     jmp_buf            gotoenv;
                     53:     struct iorec       *curfile;
                     54:     struct dispsave    dsave;
                     55: } rtlocs;
                     56: #endif mc68000
                     57: 
                     58: #define        GOTOENVOFFSET   ( -sizeof rtlocs )
                     59: #define        CURFILEOFFSET   ( GOTOENVOFFSET + sizeof rtlocs.gotoenv )
                     60: #define        DSAVEOFFSET     ( CURFILEOFFSET + sizeof rtlocs.curfile )
                     61: 
                     62:     /*
                     63:      * this is a cookie used to communicate between the
                     64:      * routine entry code and the routine exit code.
                     65:      * mostly it's for labels shared between the two.
                     66:      */
                     67: #ifdef vax
                     68: struct entry_exit_cookie {
                     69:     struct nl  *nlp;
                     70:     char       extname[BUFSIZ];
                     71:     int                toplabel;
                     72:     int                savlabel;
                     73: };
                     74: #define        FRAME_SIZE_LABEL        "LF"
                     75: #define        SAVE_MASK_LABEL         "L"
                     76: #endif vax
                     77: 
                     78: #ifdef tahoe
                     79: struct entry_exit_cookie {
                     80:     struct nl  *nlp;
                     81:     char       extname[BUFSIZ];
                     82:     int                toplabel;
                     83:     int                savlabel;
                     84: };
                     85: #define        FRAME_SIZE_LABEL        "LF"
                     86: #define        SAVE_MASK_LABEL         "L"
                     87: #endif tahoe
                     88: 
                     89: #ifdef mc68000
                     90: struct entry_exit_cookie {
                     91:     struct nl  *nlp;
                     92:     char       extname[BUFSIZ];
                     93:     int                toplabel;
                     94: };
                     95: #define        FRAME_SIZE_LABEL        "LF"
                     96: #define        PAGE_BREAK_LABEL        "LP"
                     97: #define        SAVE_MASK_LABEL         "LS"
                     98: #endif mc68000
                     99: 
                    100:     /*
                    101:      * formats for various names
                    102:      *     NAMEFORMAT          arbitrary length strings.
                    103:      *     EXTFORMAT           for externals, a preceding underscore.
                    104:      *     LABELFORMAT         for label names, a preceding dollar-sign.
                    105:      *     PREFIXFORMAT        used to print made up names with prefixes.
                    106:      *     LABELPREFIX         with getlab() makes up label names.
                    107:      *     LLABELPREFIX        with getlab() makes up sdb labels.
                    108:      *     FORMALPREFIX        prefix for EXTFORMAT for formal entry points.
                    109:      * a typical use might be to print out a name with a preceeding underscore
                    110:      * with putprintf( EXTFORMAT , 0 , name );
                    111:      */
                    112: #define        NAMEFORMAT      "%s"
                    113: #define        EXTFORMAT       "_%s"
                    114: #define        LABELFORMAT     "$%s"
                    115: #define        PREFIXFORMAT    "%s%d"
                    116: #define        LABELPREFIX     "L"
                    117: #define        LLABELPREFIX    "LL"
                    118: #define        FORMALPREFIX    "__"
                    119: 
                    120:     /*
                    121:      * the name of the statement counter
                    122:      */
                    123: #define        STMTCOUNT       "__stcnt"
                    124: 
                    125:     /*
                    126:      * the name of the pcp counters
                    127:      */
                    128: #define        PCPCOUNT        "__pcpcount"
                    129: 
                    130:     /*
                    131:      * a vector of pointer to enclosing functions for fully qualified names.
                    132:      */
                    133: char   *enclosing[ DSPLYSZ ];
                    134: 
                    135: #ifdef vax
                    136:     /*
                    137:      * the runtime framepointer and argumentpointer registers
                    138:      */
                    139: #   define     P2FP            13
                    140: #   define     P2FPNAME        "fp"
                    141: #   define     P2AP            12
                    142: #   define     P2APNAME        "ap"
                    143: 
                    144:     /*
                    145:      * the register save mask for saving no registers
                    146:      */
                    147: #   define     RSAVEMASK       ( 0 )
                    148: 
                    149:     /*
                    150:      * runtime check mask for divide check and integer overflow
                    151:      */
                    152: #   define     RUNCHECK        ( ( 1 << 15 ) | ( 1 << 14 ) )
                    153: 
                    154:     /*
                    155:      * and of course ...
                    156:      */
                    157: #   define     BITSPERBYTE     8
                    158: #endif vax
                    159: 
                    160: #ifdef tahoe
                    161:     /*
                    162:      * the runtime framepointer and argumentpointer registers
                    163:      */
                    164: #   define     P2FP            13
                    165: #   define     P2FPNAME        "fp"
                    166: #   define     P2AP            13
                    167: #   define     P2APNAME        "fp"
                    168: 
                    169:     /*
                    170:      * the register save mask for saving no registers
                    171:      */
                    172: #   define     RSAVEMASK       ( 0 )
                    173: 
                    174:     /*
                    175:      * divide check and integer overflow don't exist in the save mask
                    176:      */
                    177: #   define     RUNCHECK        ( 0 )
                    178: 
                    179:     /*
                    180:      * and of course ...
                    181:      */
                    182: #   define     BITSPERBYTE     8
                    183: #endif tahoe
                    184: 
                    185: #ifdef mc68000
                    186:     /*
                    187:      * these magic numbers lifted from pcc/mac2defs
                    188:      * the offsets are for mapping data and address register numbers
                    189:      * to linear register numbers.  e.g. d2 ==> r2, and a2 ==> r10.
                    190:      */
                    191: #   define     DATA_REG_OFFSET 0
                    192: #   define     ADDR_REG_OFFSET 8
                    193: #   define     P2FPNAME        "a6"
                    194: #   define     P2FP            (ADDR_REG_OFFSET + 6)
                    195: #   define     P2APNAME        "a6"
                    196: #   define     P2AP            (ADDR_REG_OFFSET + 6)
                    197: 
                    198:     /*
                    199:      * and still ...
                    200:      */
                    201: #   define     BITSPERBYTE     8
                    202: #endif mc68000

unix.superglobalmegacorp.com

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