1File: INIT.C Page 1 1 /* 2 Copyright 1982 3 Alcyon Corporation 4 8716 Production Ave. 5 San Diego, Ca. 92121 6 */ 7 8 #include "icode.h" 9 #include "machine.h" 10 /*cexpr operators*/ 11 #define EOF 0 12 #define SUB 1 13 #define ADD 2 14 #define NOT 3 15 #define NEG 4 16 #define LPAREN 5 17 #define RPAREN 6 18 #define QMARK 7 19 #define COLON 8 20 #define OR 9 21 #define AND 10 22 #define XOR 11 23 #define EQUAL 12 24 #define NEQUAL 13 25 #define LESS 14 26 #define LSEQUAL 15 27 #define GREAT 16 28 #define GREQUAL 17 29 #define LSHIFT 18 30 #define RSHIFT 19 31 #define MULT 20 32 #define DIV 21 33 #define MOD 22 34 #define COMPL 23 35 #define CONST 24 36 #define LASTOP COMPL /*up to here used by cexpr*/ 37 #define SQUOTE 25 38 #define DQUOTE 26 39 #define ANYC 27 40 #define BADC 28 41 #define COMMA 29 42 #define NEWL 30 43 #define POUND 31 44 #define ALPHA 32 45 #define DIGIT 33 46 #define BSLASH 34 47 #define WHITE 35 48 #define BUFSIZE 512 49 #define LINESIZE 512 50 #define ARG -1 51 #define NEWLABEL -2 52 #define LABEL -3 53 #define NOARGS -4 54 #define MAXARGS 60 55 #define ARGBSIZE 1000 56 #define TOKSIZE 300 /*BUG 4/20/82 was 128*/ 57 #define DEFSIZE 1024 58 #define PBSIZE 1000 59 #define DEFINE 1 1File: INIT.C Page 2 60 #define UNDEF 2 61 #define INCLUDE 3 62 #define IFDEF 4 63 #define IFNDEF 5 64 #define ELSE 6 65 #define ENDIF 7 66 #define IF 8 67 #define SKIP 0 68 #define NOSKIP 1 69 #define SOH '\01' 70 #define SSIZE 8 71 #define HSIZE 517 /* 3.4 made prime */ 72 #define FSTACK 10 73 74 #define TRUE 1 75 #define FALSE 0 76 #define NDEFS 20 77 78 struct symbol { 79 char s_name[SSIZE]; 80 char *s_def; 81 } symtab[HSIZE]=0; 82 83 /*buffered I/O structure*/ 84 struct ibuf { 85 int fd; 86 int nc; 87 char *bp; 88 char buffer[BUFSIZE]; 89 } outbuf=0; 90 91 /* command line define structure */ 92 struct defstruc { 93 char *ptr; 94 char *value; 95 } defs[NDEFS]=0; 96 97 struct stackstruc { /* [vlh] */ 98 int ifd; 99 char ifile[13]; 100 int lineno; 101 struct ibuf inbuf; 102 } filestack[FSTACK]=0, *filep=0; /* stack of incl files, ptr to... */ 103 #ifdef BULLSHIT /* Bullshit, bullshit, bullshit!!!*/ 104 #ifdef VERSADOS 105 #define NONEST 1 106 #define NOFORKS 1 107 #endif 108 109 #ifdef VMS 110 #define NONEST 1 111 #endif 112 113 #ifdef NONEST 114 struct ibuf holdbuf=0; /* alternate buffer, hold main file info */ 115 #endif 116 #endif 117 int mfail=0; /*macro error flag*/ 118 int skip=0; /*skipping current line*/ 1File: INIT.C Page 3 119 char *defap=0; /*pointer to available define area*/ 120 char *defp=0; /*pointer to next avail define byte*/ 121 int defcount=0; /*bytes left in define area*/ 122 int defused=0; /*number of bytes used in define area*/ 123 int defmax=0; /*maximum define area used*/ 124 int pflag=0; 125 int asflag=0; 126 127 /*line to output after macro substitution*/ 128 char line[LINESIZE+2]=0; /*line buffer*/ 129 char *linep=0; /*current line pointer*/ 130 int loverflow=0; /*line overflow flag*/ 131 int lineno=0; 132 133 /*push back buffer*/ 134 char pbbuf[PBSIZE]=0; /*push back buffer*/ 135 char *pbp=0; /*push back pointer*/ 136 int pbflag=0; /*checks for recursive definition*/ 137 138 139 char *lookup(); 140 char *setend(); 141 char *makecopy(); 142 char *makecopy(); 143 char *maketemp(); 144 char *sbrk(); 145 struct symbol *getsp(); 146 #define STKLEN 64 147 int oprstk[STKLEN]=0; 148 int opnstk[STKLEN]=0; 149 int pristk[STKLEN]=0; 150 int *oprptr=0; 151 int *opnptr=0; 152 int *priptr=0; 153 154 int nincl=0; 155 char *incl[10]=0; 156 char tmp[6]=0; 157 #define CSTKSIZE 20 158 char cstack[CSTKSIZE]=0; 159 char *cstkptr=0; 160 char inclname[TOKSIZE]=0; 161 int cvalue=0; 162 #define EXPSIZE 1024 163 int exprarea[EXPSIZE]=0;