MiniUnix/usr/source/c/c0h.c
#
/*
C compiler-- pass 1 header
*/
/*
parameters
*/
#define ncps 8
#define hshsiz 200
#define cmsiz 40
#define swsiz 200
#define OSSIZ 500
#define dimsiz 100
#define NBPW 16
#define NBPC 8
#define NCPW 2
#define STRSIZ 256
struct tnode {
int op;
int type;
int dimp;
struct tnode *tr1, *tr2;
};
struct {
int op;
int type;
char ssp; /* subscript list */
char lenp; /* structure length */
};
struct tname {
int op;
int type;
int dimp;
int class;
int offset;
int nloc;
};
struct txname {
int op;
int type;
int dimp;
int class;
int offset;
char nname[ncps];
};
struct tconst {
int op;
int type;
int dimp;
int value;
};
struct hshtab {
char hclass;
char hflag;
int htype;
int hdimp;
int hoffset;
char name[ncps];
};
struct {
char hclass;
char hflag;
int htype;
char flen; /* Field length */
char bitoffs; /* Offset of field */
};
struct swtab {
int swlab;
int swval;
};
struct bnode {
int bop;
struct tnode *btree;
int lbl;
int cond;
};
char cvtab[4][4];
char savstr[STRSIZ];
char *strptr;
int opdope[];
char ctab[];
char symbuf[ncps+2];
int hshused;
struct hshtab hshtab[hshsiz];
int *space;
int *cp;
int cmst[cmsiz];
int isn;
struct swtab swtab[swsiz];
struct swtab *swp;
int contlab;
int brklab;
int retlab;
int deflab;
int nauto;
int autolen;
int peeksym;
int peekc;
int eof;
int line;
int osspace[OSSIZ];
int *treespace;
struct hshtab *defsym;
struct hshtab *funcsym;
int xdflg;
int proflg;
int stflg;
struct hshtab *csym;
int cval;
double fcval;
int nchstr;
int nerror;
struct hshtab *paraml;
struct hshtab *parame;
int strflg;
int mosflg;
int initflg;
int inhdr;
int dimtab[dimsiz];
char obuf[518];
char sbuf[518];
int dimp;
int regvar;
int bitoffs;
struct tname funcblk;
/*
operators
*/
#define EOF 0
#define SEMI 1
#define LBRACE 2
#define RBRACE 3
#define LBRACK 4
#define RBRACK 5
#define LPARN 6
#define RPARN 7
#define COLON 8
#define COMMA 9
#define FSEL 10
#define KEYW 19
#define NAME 20
#define CON 21
#define STRING 22
#define FCON 23
#define SFCON 24
#define SIZEOF 91
#define INCBEF 30
#define DECBEF 31
#define INCAFT 32
#define DECAFT 33
#define EXCLA 34
#define AMPER 35
#define STAR 36
#define NEG 37
#define COMPL 38
#define DOT 39
#define PLUS 40
#define MINUS 41
#define TIMES 42
#define DIVIDE 43
#define MOD 44
#define RSHIFT 45
#define LSHIFT 46
#define AND 47
#define OR 48
#define EXOR 49
#define ARROW 50
#define ITOF 51
#define FTOI 52
#define LOGAND 53
#define LOGOR 54
#define FTOL 56
#define LTOF 57
#define ITOL 58
#define LTOI 59
#define EQUAL 60
#define NEQUAL 61
#define LESSEQ 62
#define LESS 63
#define GREATEQ 64
#define GREAT 65
#define LESSEQP 66
#define LESSP 67
#define GREATQP 68
#define GREATP 69
#define ASPLUS 70
#define ASMINUS 71
#define ASTIMES 72
#define ASDIV 73
#define ASMOD 74
#define ASRSH 75
#define ASLSH 76
#define ASSAND 77
#define ASOR 78
#define ASXOR 79
#define ASSIGN 80
#define QUEST 90
#define CALL 100
#define MCALL 101
#define JUMP 102
#define CBRANCH 103
#define INIT 104
#define SETREG 105
#define RFORCE 110
#define BRANCH 111
#define LABEL 112
#define NLABEL 113
#define RLABEL 114
/*
types
*/
#define INT 0
#define CHAR 1
#define FLOAT 2
#define DOUBLE 3
#define STRUCT 4
#define RSTRUCT 5
#define LONG 6
#define NOTYPE 7 /* used internally */
#define ALIGN 01
#define TYPE 07
#define TYLEN 2
#define XTYPE (03<<3)
#define PTR 010
#define FUNC 020
#define ARRAY 030
/*
storage classes
*/
#define KEYWC 1
#define MOS 10
#define AUTO 11
#define EXTERN 12
#define STATIC 13
#define REG 14
#define STRTAG 15
#define ARG 16
#define ARG1 17
#define FMOS 18
/*
keywords
*/
#define GOTO 20
#define RETURN 21
#define IF 22
#define WHILE 23
#define ELSE 24
#define SWITCH 25
#define CASE 26
#define BREAK 27
#define CONTIN 28
#define DO 29
#define DEFAULT 30
#define FOR 31
/*
characters
*/
#define INSERT 119
#define PERIOD 120
#define SQUOTE 121
#define DQUOTE 122
#define LETTER 123
#define DIGIT 124
#define NEWLN 125
#define SPACE 126
#define UNKN 127
/*
* Special operators in intermediate code
*/
#define BDATA 200
#define WDATA 201
#define PROG 202
#define DATA 203
#define BSS 204
#define CSPACE 205
#define SSPACE 206
#define SYMDEF 207
#define SAVE 208
#define RETRN 209
#define EVEN 210
#define PROFIL 212
#define SWIT 213
#define EXPR 214
#define SNAME 215
#define RNAME 216
#define ANAME 217
#define NULL 218
/*
Flag bits
*/
#define BINARY 01
#define LVALUE 02
#define RELAT 04
#define ASSGOP 010
#define LWORD 020
#define RWORD 040
#define COMMUTE 0100
#define RASSOC 0200
#define LEAF 0400
/*
* Conversion codes
*/
#define ITF 1
#define ITL 2
#define LTF 3
#define ITP 4
#define PTI 5
#define FTI 6
#define LTI 7
#define FTL 8
#define XX 15
/*
* symbol table flags
*/
#define FNDEL 01
#define FNUND 02
#define FKEYW 04
#define FFIELD 020