1: #
   2: /*
   3: * 	C compiler-- first pass header
   4: */
   5: 
   6: #include <stdio.h>
   7: 
   8: /*
   9:  * parameters
  10:  */
  11: 
  12: #define LTYPE   long    /* change to int if no long consts */
  13: #define MAXINT  077777  /* Largest positive short integer */
  14: #define MAXUINT 0177777 /* largest unsigned integer */
  15: #define NCPS    8   /* # chars per symbol */
  16: #define HSHSIZ  400 /* # entries in hash table for names */
  17: #define CMSIZ   40  /* size of expression stack */
  18: #define SSIZE   20  /* size of other expression stack */
  19: #define SWSIZ   230 /* size of switch table */
  20: #define NMEMS   128 /* Number of members in a structure */
  21: #define NBPW    16  /* bits per word, object machine */
  22: #define NBPC    8   /* bits per character, object machine */
  23: #define NCPW    2   /* chars per word, object machine */
  24: #define LNCPW   2   /* chars per word, compiler's machine */
  25: #define STAUTO  (-6)    /* offset of first auto variable */
  26: #define STARG   4   /* offset of first argument */
  27: 
  28: 
  29: /*
  30:  * # bytes in primitive types
  31:  */
  32: #define SZCHAR  1
  33: #define SZINT   2
  34: #define SZPTR   2
  35: #define SZFLOAT 4
  36: #define SZLONG  4
  37: #define SZDOUB  8
  38: 
  39: /*
  40:  * format of a structure description
  41:  */
  42: struct str {
  43:     int ssize;          /* structure size */
  44:     struct hshtab   **memlist;  /* member list */
  45: };
  46: 
  47: /*
  48:  * For fields, strp points here instead.
  49:  */
  50: struct field {
  51:     int flen;       /* field width in bits */
  52:     int bitoffs;    /* shift count */
  53: };
  54: 
  55: /*
  56:  * Structure of tree nodes for operators
  57:  */
  58: struct tnode {
  59:     int op;     /* operator */
  60:     int type;       /* data type */
  61:     int *subsp;     /* subscript list (for arrays) */
  62:     struct  str *strp;  /* structure description for structs */
  63:     struct  tnode *tr1; /* left operand */
  64:     struct  tnode *tr2; /* right operand */
  65: };
  66: 
  67: /*
  68:  * Tree node for constants
  69:  */
  70: struct  cnode {
  71:     int op;
  72:     int type;
  73:     int *subsp;
  74:     struct  str *strp;
  75:     int value;
  76: };
  77: 
  78: /*
  79:  * Tree node for long constants
  80:  */
  81: struct lnode {
  82:     int op;
  83:     int type;
  84:     int *subsp;
  85:     struct  str *strp;
  86:     LTYPE   lvalue;
  87: };
  88: 
  89: /*
  90:  * tree node for floating
  91:  * constants
  92:  */
  93: struct  fnode {
  94:     int op;
  95:     int type;
  96:     int *subsp;
  97:     struct  str *strp;
  98:     char    *cstr;
  99: };
 100: 
 101: /*
 102:  * Structure of namelist
 103:  */
 104: /*
 105:  * Pushed-down entry for block structure
 106:  */
 107: struct  phshtab {
 108:     char    hclass;
 109:     char    hflag;
 110:     int htype;
 111:     int *hsubsp;
 112:     struct  str *hstrp;
 113:     int hoffset;
 114:     struct  phshtab *hpdown;
 115:     char    hblklev;
 116: };
 117: 
 118: /*
 119:  * Top-level namelist
 120:  */
 121: struct hshtab {
 122:     char    hclass;     /* storage class */
 123:     char    hflag;      /* various flags */
 124:     int htype;      /* type */
 125:     int *hsubsp;    /* subscript list */
 126:     struct  str *hstrp; /* structure description */
 127:     int hoffset;    /* post-allocation location */
 128:     struct  phshtab *hpdown;    /* Pushed-down name in outer block */
 129:     char    hblklev;    /* Block level of definition */
 130:     char    name[NCPS]; /* ASCII name */
 131: };
 132: 
 133: /*
 134:  * Place used to keep dimensions
 135:  * during declarations
 136:  */
 137: struct  tdim {
 138:     int rank;
 139:     int dimens[5];
 140: };
 141: 
 142: /*
 143:  * Table for recording switches.
 144:  */
 145: struct swtab {
 146:     int swlab;
 147:     int swval;
 148: };
 149: 
 150: char    cvtab[4][4];
 151: char    filename[64];
 152: int opdope[];
 153: char    ctab[];
 154: char    symbuf[NCPS+2];
 155: int hshused;
 156: struct  hshtab  hshtab[HSHSIZ];
 157: struct  tnode **cp;
 158: int isn;
 159: struct  swtab   swtab[SWSIZ];
 160: struct  swtab   *swp;
 161: int contlab;
 162: int brklab;
 163: int retlab;
 164: int deflab;
 165: unsigned autolen;       /* make these int if necessary */
 166: unsigned maxauto;       /* ... will only cause trouble rarely */
 167: int peeksym;
 168: int peekc;
 169: int eof;
 170: int line;
 171: char    *funcbase;
 172: char    *curbase;
 173: char    *coremax;
 174: char    *maxdecl;
 175: struct  hshtab  *defsym;
 176: struct  hshtab  *funcsym;
 177: int proflg;
 178: struct  hshtab  *csym;
 179: int cval;
 180: LTYPE   lcval;
 181: int nchstr;
 182: int nerror;
 183: struct  hshtab  **paraml;
 184: struct  hshtab  **parame;
 185: int strflg;
 186: int mosflg;
 187: int initflg;
 188: int inhdr;
 189: char    sbuf[BUFSIZ];
 190: FILE    *sbufp;
 191: int regvar;
 192: int bitoffs;
 193: struct  tnode   funcblk;
 194: char    cvntab[];
 195: char    numbuf[64];
 196: struct  hshtab **memlist;
 197: int nmems;
 198: struct  hshtab  structhole;
 199: int blklev;
 200: int mossym;
 201: 
 202: /*
 203:   operators
 204: */
 205: #define EOFC    0
 206: #define NULLOP  218
 207: #define SEMI    1
 208: #define LBRACE  2
 209: #define RBRACE  3
 210: #define LBRACK  4
 211: #define RBRACK  5
 212: #define LPARN   6
 213: #define RPARN   7
 214: #define COLON   8
 215: #define COMMA   9
 216: #define FSEL    10
 217: #define CAST    11
 218: #define ETYPE   12
 219: 
 220: #define KEYW    19
 221: #define NAME    20
 222: #define CON 21
 223: #define STRING  22
 224: #define FCON    23
 225: #define SFCON   24
 226: #define LCON    25
 227: #define SLCON   26
 228: 
 229: #define SIZEOF  91
 230: #define INCBEF  30
 231: #define DECBEF  31
 232: #define INCAFT  32
 233: #define DECAFT  33
 234: #define EXCLA   34
 235: #define AMPER   35
 236: #define STAR    36
 237: #define NEG 37
 238: #define COMPL   38
 239: 
 240: #define DOT 39
 241: #define PLUS    40
 242: #define MINUS   41
 243: #define TIMES   42
 244: #define DIVIDE  43
 245: #define MOD 44
 246: #define RSHIFT  45
 247: #define LSHIFT  46
 248: #define AND 47
 249: #define OR  48
 250: #define EXOR    49
 251: #define ARROW   50
 252: #define ITOF    51
 253: #define FTOI    52
 254: #define LOGAND  53
 255: #define LOGOR   54
 256: #define FTOL    56
 257: #define LTOF    57
 258: #define ITOL    58
 259: #define LTOI    59
 260: #define ITOP    13
 261: #define PTOI    14
 262: #define LTOP    15
 263: 
 264: #define EQUAL   60
 265: #define NEQUAL  61
 266: #define LESSEQ  62
 267: #define LESS    63
 268: #define GREATEQ 64
 269: #define GREAT   65
 270: #define LESSEQP 66
 271: #define LESSP   67
 272: #define GREATQP 68
 273: #define GREATP  69
 274: 
 275: #define ASPLUS  70
 276: #define ASMINUS 71
 277: #define ASTIMES 72
 278: #define ASDIV   73
 279: #define ASMOD   74
 280: #define ASRSH   75
 281: #define ASLSH   76
 282: #define ASSAND  77
 283: #define ASOR    78
 284: #define ASXOR   79
 285: #define ASSIGN  80
 286: 
 287: #define QUEST   90
 288: #define MAX 93
 289: #define MAXP    94
 290: #define MIN 95
 291: #define MINP    96
 292: #define SEQNC   97
 293: #define CALL    100
 294: #define MCALL   101
 295: #define JUMP    102
 296: #define CBRANCH 103
 297: #define INIT    104
 298: #define SETREG  105
 299: #define RFORCE  110
 300: #define BRANCH  111
 301: #define LABEL   112
 302: #define NLABEL  113
 303: #define RLABEL  114
 304: #define STRASG  115
 305: #define ITOC    109
 306: #define SEOF    200 /* stack EOF marker in expr compilation */
 307: 
 308: /*
 309:   types
 310: */
 311: #define INT 0
 312: #define CHAR    1
 313: #define FLOAT   2
 314: #define DOUBLE  3
 315: #define STRUCT  4
 316: #define LONG    6
 317: #define UNSIGN  7
 318: #define UNION   8       /* adjusted later to struct */
 319: 
 320: #define ALIGN   01
 321: #define TYPE    07
 322: #define BIGTYPE 060000
 323: #define TYLEN   2
 324: #define XTYPE   (03<<3)
 325: #define PTR 010
 326: #define FUNC    020
 327: #define ARRAY   030
 328: 
 329: /*
 330:   storage classes
 331: */
 332: #define KEYWC   1
 333: #define DEFXTRN 20
 334: #define TYPEDEF 9
 335: #define MOS 10
 336: #define AUTO    11
 337: #define EXTERN  12
 338: #define STATIC  13
 339: #define REG 14
 340: #define STRTAG  15
 341: #define ARG 16
 342: #define ARG1    17
 343: #define AREG    18
 344: #define MOU 21
 345: #define ENUMTAG 22
 346: #define ENUMCON 24
 347: 
 348: /*
 349:   keywords
 350: */
 351: #define GOTO    20
 352: #define RETURN  21
 353: #define IF  22
 354: #define WHILE   23
 355: #define ELSE    24
 356: #define SWITCH  25
 357: #define CASE    26
 358: #define BREAK   27
 359: #define CONTIN  28
 360: #define DO  29
 361: #define DEFAULT 30
 362: #define FOR 31
 363: #define ENUM    32
 364: 
 365: /*
 366:   characters
 367: */
 368: #define BSLASH  117
 369: #define SHARP   118
 370: #define INSERT  119
 371: #define PERIOD  120
 372: #define SQUOTE  121
 373: #define DQUOTE  122
 374: #define LETTER  123
 375: #define DIGIT   124
 376: #define NEWLN   125
 377: #define SPACE   126
 378: #define UNKN    127
 379: 
 380: /*
 381:  * Special operators in intermediate code
 382:  */
 383: #define BDATA   200
 384: #define WDATA   201
 385: #define PROG    202
 386: #define DATA    203
 387: #define BSS 204
 388: #define CSPACE  205
 389: #define SSPACE  206
 390: #define SYMDEF  207
 391: #define SAVE    208
 392: #define RETRN   209
 393: #define EVEN    210
 394: #define PROFIL  212
 395: #define SWIT    213
 396: #define EXPR    214
 397: #define SNAME   215
 398: #define RNAME   216
 399: #define ANAME   217
 400: #define SETSTK  219
 401: #define SINIT   220
 402: 
 403: /*
 404:   Flag bits
 405: */
 406: 
 407: #define BINARY  01
 408: #define LVALUE  02
 409: #define RELAT   04
 410: #define ASSGOP  010
 411: #define LWORD   020
 412: #define RWORD   040
 413: #define COMMUTE 0100
 414: #define RASSOC  0200
 415: #define LEAF    0400
 416: 
 417: /*
 418:  * Conversion codes
 419:  */
 420: #define ITF 1
 421: #define ITL 2
 422: #define LTF 3
 423: #define ITP 4
 424: #define PTI 5
 425: #define FTI 6
 426: #define LTI 7
 427: #define FTL 8
 428: #define LTP 9
 429: #define ITC 10
 430: #define XX  15
 431: 
 432: /*
 433:  * symbol table flags
 434:  */
 435: 
 436: #define FMOS    01
 437: #define FKEYW   04
 438: #define FFIELD  020
 439: #define FINIT   040
 440: #define FLABL   0100
 441: 
 442: /*
 443:  * functions
 444:  */
 445: char    *sbrk();
 446: struct  tnode *tree();
 447: char    *copnum();
 448: struct  tnode *convert();
 449: struct  tnode *chkfun();
 450: struct  tnode *disarray();
 451: struct  tnode *block();
 452: struct  cnode *cblock();
 453: struct  fnode *fblock();
 454: char    *gblock();
 455: struct  tnode *pexpr();
 456: struct  str *strdec();
 457: struct  hshtab *xprtype();
 458: struct  tnode *nblock();

Defined variables

autolen defined in line 165; used 7 times
bitoffs defined in line 192; used 18 times
blklev defined in line 199; used 16 times
brklab defined in line 162; used 22 times
contlab defined in line 161; used 19 times
coremax defined in line 173; used 3 times
cp defined in line 157; used 51 times
csym defined in line 178; used 13 times
ctab defined in line 153; used 12 times
curbase defined in line 172; used 19 times
cval defined in line 179; used 32 times
cvntab defined in line 194; used 1 times
cvtab defined in line 150; used 1 times
deflab defined in line 164; used 8 times
defsym defined in line 175; used 15 times
eof defined in line 169; used 6 times
filename defined in line 151; used 3 times
funcbase defined in line 171; used 21 times
funcblk defined in line 193; used 5 times
funcsym defined in line 176; used 3 times
hshtab defined in line 156; used 10 times
hshused defined in line 155; used 3 times
inhdr defined in line 188; used 8 times
initflg defined in line 187; used 6 times
isn defined in line 158; used 27 times
line defined in line 170; used 12 times
maxauto defined in line 166; used 4 times
maxdecl defined in line 174; used 10 times
memlist defined in line 196; used 16 times
mosflg defined in line 186; used 11 times
mossym defined in line 200; used 5 times
nchstr defined in line 181; used 8 times
nerror defined in line 182; used 6 times
nmems defined in line 197; used 5 times
numbuf defined in line 195; used 3 times
opdope defined in line 152; used 6 times
parame defined in line 184; used 4 times
paraml defined in line 183; used 8 times
peekc defined in line 168; used 24 times
peeksym defined in line 167; used 54 times
proflg defined in line 177; used 2 times
regvar defined in line 191; used 10 times
retlab defined in line 163; used 4 times
sbuf defined in line 189; used 1 times
strflg defined in line 185; used 4 times
structhole defined in line 198; used 2 times
swp defined in line 160; used 10 times
swtab defined in line 159; used 2 times
symbuf defined in line 154; used 11 times

Defined struct's

cnode defined in line 70; used 6 times
field defined in line 50; used 2 times
fnode defined in line 93; used 6 times
hshtab defined in line 121; used 93 times
lnode defined in line 81; used 2 times
phshtab defined in line 107; used 14 times
str defined in line 42; used 20 times
swtab defined in line 145; used 6 times
tdim defined in line 137; used 6 times
tnode defined in line 58; used 110 times

Defined macros

ALIGN defined in line 320; used 8 times
AMPER defined in line 235; used 6 times
ANAME defined in line 399; used 1 times
AND defined in line 248; used 4 times
AREG defined in line 343; used 4 times
ARG defined in line 341; used 4 times
ARG1 defined in line 342; used 4 times
ARRAY defined in line 327; used 17 times
ARROW defined in line 251; used 1 times
ASDIV defined in line 278; never used
ASLSH defined in line 281; used 1 times
ASMINUS defined in line 276; never used
ASMOD defined in line 279; never used
ASOR defined in line 283; never used
ASPLUS defined in line 275; used 2 times
ASRSH defined in line 280; used 1 times
ASSAND defined in line 282; never used
ASSGOP defined in line 410; used 1 times
ASTIMES defined in line 277; never used
ASXOR defined in line 284; never used
AUTO defined in line 336; used 13 times
BDATA defined in line 383; used 4 times
BIGTYPE defined in line 322; used 4 times
BINARY defined in line 407; used 5 times
BRANCH defined in line 300; used 1 times
BREAK defined in line 358; used 1 times
BSLASH defined in line 368; used 1 times
BSS defined in line 387; used 2 times
CALL defined in line 293; used 8 times
CASE defined in line 357; used 1 times
CAST defined in line 217; used 4 times
CBRANCH defined in line 296; used 1 times
CHAR defined in line 312; used 18 times
CMSIZ defined in line 17; used 2 times
COLON defined in line 214; used 9 times
COMMA defined in line 215; used 8 times
COMMUTE defined in line 413; never used
COMPL defined in line 238; used 1 times
CON defined in line 222; used 14 times
CONTIN defined in line 359; used 1 times
CSPACE defined in line 388; used 1 times
DATA defined in line 386; used 2 times
DECAFT defined in line 233; never used
DECBEF defined in line 231; used 1 times
DEFAULT defined in line 361; used 1 times
DEFXTRN defined in line 333; used 3 times
DIGIT defined in line 375; used 14 times
DIVIDE defined in line 244; used 2 times
DO defined in line 360; used 1 times
DOT defined in line 240; used 1 times
DOUBLE defined in line 314; used 7 times
DQUOTE defined in line 373; used 1 times
ELSE defined in line 355; used 3 times
ENUM defined in line 363; used 6 times
ENUMCON defined in line 346; used 4 times
ENUMTAG defined in line 345; used 1 times
EOFC defined in line 205; used 7 times
EQUAL defined in line 264; used 1 times
ETYPE defined in line 218; used 3 times
EVEN defined in line 393; used 4 times
EXCLA defined in line 234; used 2 times
EXOR defined in line 250; used 3 times
EXPR defined in line 396; used 1 times
EXTERN defined in line 337; used 18 times
FCON defined in line 224; used 6 times
FFIELD defined in line 438; used 5 times
FINIT defined in line 439; used 2 times
FKEYW defined in line 437; used 6 times
FLABL defined in line 440; used 3 times
FLOAT defined in line 313; used 4 times
FMOS defined in line 436; used 4 times
FOR defined in line 362; used 1 times
FSEL defined in line 216; used 2 times
FTI defined in line 425; used 1 times
FTL defined in line 427; used 1 times
FTOI defined in line 253; used 2 times
FTOL defined in line 256; used 1 times
FUNC defined in line 326; used 9 times
GOTO defined in line 351; used 1 times
GREAT defined in line 269; used 2 times
GREATEQ defined in line 268; used 1 times
GREATP defined in line 273; never used
GREATQP defined in line 272; never used
HSHSIZ defined in line 16; used 8 times
IF defined in line 353; used 1 times
INCAFT defined in line 232; never used
INCBEF defined in line 230; used 1 times
INIT defined in line 297; used 2 times
INSERT defined in line 370; used 1 times
INT defined in line 311; used 31 times
ITC defined in line 429; never used
ITF defined in line 420; used 2 times
ITL defined in line 421; used 3 times
ITOC defined in line 305; used 2 times
ITOF defined in line 252; used 2 times
ITOL defined in line 258; used 1 times
ITOP defined in line 260; used 1 times
ITP defined in line 423; used 5 times
JUMP defined in line 295; used 1 times
KEYW defined in line 220; used 8 times
KEYWC defined in line 332; never used
LABEL defined in line 301; used 5 times
LBRACE defined in line 208; used 8 times
LBRACK defined in line 210; used 3 times
LCON defined in line 226; used 3 times
LEAF defined in line 415; never used
LESS defined in line 267; used 2 times
LESSEQ defined in line 266; used 3 times
LESSEQP defined in line 270; used 1 times
LESSP defined in line 271; never used
LETTER defined in line 374; used 54 times
LNCPW defined in line 24; used 4 times
LOGAND defined in line 254; used 1 times
LOGOR defined in line 255; used 1 times
LONG defined in line 316; used 5 times
LPARN defined in line 212; used 5 times
LSHIFT defined in line 247; used 1 times
LTF defined in line 422; used 2 times
LTI defined in line 426; used 2 times
LTOF defined in line 257; used 1 times
LTOI defined in line 259; used 1 times
LTOP defined in line 262; used 1 times
LTP defined in line 428; used 4 times
LTYPE defined in line 12; used 2 times
LVALUE defined in line 408; used 1 times
LWORD defined in line 411; used 1 times
MAX defined in line 288; used 3 times
MAXINT defined in line 13; used 2 times
MAXP defined in line 289; used 1 times
MAXUINT defined in line 14; never used
MCALL defined in line 294; used 1 times
MIN defined in line 290; used 2 times
MINP defined in line 291; never used
MINUS defined in line 242; used 3 times
MOD defined in line 245; used 1 times
MOS defined in line 335; used 10 times
MOU defined in line 344; used 3 times
NAME defined in line 221; used 18 times
NBPC defined in line 22; used 4 times
NBPW defined in line 21; used 2 times
NCPS defined in line 15; used 9 times
NCPW defined in line 23; used 1 times
NEG defined in line 237; used 1 times
NEQUAL defined in line 265; used 1 times
NEWLN defined in line 376; used 1 times
NLABEL defined in line 302; used 2 times
NMEMS defined in line 20; used 4 times
NULLOP defined in line 206; used 1 times
OR defined in line 249; used 2 times
PERIOD defined in line 371; used 1 times
PLUS defined in line 241; used 9 times
PROFIL defined in line 394; used 1 times
PROG defined in line 385; used 2 times
PTI defined in line 424; used 6 times
PTOI defined in line 261; used 1 times
PTR defined in line 325; used 13 times
QUEST defined in line 287; used 4 times
RASSOC defined in line 414; used 1 times
RBRACE defined in line 209; used 12 times
RBRACK defined in line 211; used 4 times
REG defined in line 339; used 9 times
RELAT defined in line 409; used 2 times
RETRN defined in line 392; used 1 times
RETURN defined in line 352; used 1 times
RFORCE defined in line 299; used 2 times
RLABEL defined in line 303; used 1 times
RNAME defined in line 398; used 1 times
RPARN defined in line 213; used 12 times
RSHIFT defined in line 246; used 1 times
RWORD defined in line 412; used 1 times
SAVE defined in line 391; used 1 times
SEMI defined in line 207; used 15 times
SEOF defined in line 306; used 1 times
SEQNC defined in line 292; used 1 times
SETREG defined in line 298; used 3 times
SETSTK defined in line 400; used 1 times
SFCON defined in line 225; never used
SHARP defined in line 369; used 1 times
SINIT defined in line 401; used 1 times
SIZEOF defined in line 229; used 5 times
SLCON defined in line 227; never used
SNAME defined in line 397; used 1 times
SPACE defined in line 377; used 5 times
SQUOTE defined in line 372; used 1 times
SSIZE defined in line 18; used 3 times
SSPACE defined in line 389; used 4 times
STAR defined in line 236; used 8 times
STARG defined in line 26; used 1 times
STATIC defined in line 338; used 11 times
STAUTO defined in line 25; used 2 times
STRASG defined in line 304; used 1 times
STRING defined in line 223; used 2 times
STRTAG defined in line 340; used 1 times
STRUCT defined in line 315; used 13 times
SWIT defined in line 395; used 1 times
SWITCH defined in line 356; used 1 times
SWSIZ defined in line 19; used 2 times
SYMDEF defined in line 390; used 4 times
SZCHAR defined in line 32; never used
SZDOUB defined in line 37; used 1 times
SZFLOAT defined in line 35; used 1 times
SZINT defined in line 33; used 2 times
SZLONG defined in line 36; used 1 times
SZPTR defined in line 34; used 1 times
TIMES defined in line 243; used 1 times
TYLEN defined in line 323; used 8 times
TYPE defined in line 321; used 12 times
TYPEDEF defined in line 334; used 11 times
UNION defined in line 318; used 2 times
UNKN defined in line 378; used 30 times
UNSIGN defined in line 317; used 18 times
WDATA defined in line 384; never used
WHILE defined in line 354; used 2 times
XTYPE defined in line 324; used 19 times
XX defined in line 430; used 4 times

Usage of this include

Last modified: 1979-01-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 2911
Valid CSS Valid XHTML 1.0 Strict