1*74a4d8c2SCharles.Forsyth #include <lib9.h> 2*74a4d8c2SCharles.Forsyth #include <bio.h> 3*74a4d8c2SCharles.Forsyth #include "../vc/v.out.h" 4*74a4d8c2SCharles.Forsyth 5*74a4d8c2SCharles.Forsyth #ifndef EXTERN 6*74a4d8c2SCharles.Forsyth #define EXTERN extern 7*74a4d8c2SCharles.Forsyth #endif 8*74a4d8c2SCharles.Forsyth 9*74a4d8c2SCharles.Forsyth 10*74a4d8c2SCharles.Forsyth #define MAXALIGN 7 11*74a4d8c2SCharles.Forsyth 12*74a4d8c2SCharles.Forsyth typedef struct Sym Sym; 13*74a4d8c2SCharles.Forsyth typedef struct Gen Gen; 14*74a4d8c2SCharles.Forsyth typedef struct Io Io; 15*74a4d8c2SCharles.Forsyth typedef struct Hist Hist; 16*74a4d8c2SCharles.Forsyth 17*74a4d8c2SCharles.Forsyth #define FPCHIP 1 18*74a4d8c2SCharles.Forsyth #define NSYMB 8192 19*74a4d8c2SCharles.Forsyth #define BUFSIZ 8192 20*74a4d8c2SCharles.Forsyth #define HISTSZ 20 21*74a4d8c2SCharles.Forsyth #define NINCLUDE 10 22*74a4d8c2SCharles.Forsyth #define NHUNK 10000 23*74a4d8c2SCharles.Forsyth #define EOF (-1) 24*74a4d8c2SCharles.Forsyth #define IGN (-2) 25*74a4d8c2SCharles.Forsyth #define GETC() ((--fi.c < 0)? filbuf(): *fi.p++ & 0xff) 26*74a4d8c2SCharles.Forsyth #define NHASH 503 27*74a4d8c2SCharles.Forsyth #define STRINGSZ 200 28*74a4d8c2SCharles.Forsyth #define NMACRO 10 29*74a4d8c2SCharles.Forsyth 30*74a4d8c2SCharles.Forsyth struct Sym 31*74a4d8c2SCharles.Forsyth { 32*74a4d8c2SCharles.Forsyth Sym* link; 33*74a4d8c2SCharles.Forsyth char* macro; 34*74a4d8c2SCharles.Forsyth long value; 35*74a4d8c2SCharles.Forsyth ushort type; 36*74a4d8c2SCharles.Forsyth char *name; 37*74a4d8c2SCharles.Forsyth char sym; 38*74a4d8c2SCharles.Forsyth }; 39*74a4d8c2SCharles.Forsyth #define S ((Sym*)0) 40*74a4d8c2SCharles.Forsyth 41*74a4d8c2SCharles.Forsyth EXTERN struct 42*74a4d8c2SCharles.Forsyth { 43*74a4d8c2SCharles.Forsyth char* p; 44*74a4d8c2SCharles.Forsyth int c; 45*74a4d8c2SCharles.Forsyth } fi; 46*74a4d8c2SCharles.Forsyth 47*74a4d8c2SCharles.Forsyth struct Io 48*74a4d8c2SCharles.Forsyth { 49*74a4d8c2SCharles.Forsyth Io* link; 50*74a4d8c2SCharles.Forsyth char b[BUFSIZ]; 51*74a4d8c2SCharles.Forsyth char* p; 52*74a4d8c2SCharles.Forsyth short c; 53*74a4d8c2SCharles.Forsyth short f; 54*74a4d8c2SCharles.Forsyth }; 55*74a4d8c2SCharles.Forsyth #define I ((Io*)0) 56*74a4d8c2SCharles.Forsyth 57*74a4d8c2SCharles.Forsyth EXTERN struct 58*74a4d8c2SCharles.Forsyth { 59*74a4d8c2SCharles.Forsyth Sym* sym; 60*74a4d8c2SCharles.Forsyth short type; 61*74a4d8c2SCharles.Forsyth } h[NSYM]; 62*74a4d8c2SCharles.Forsyth 63*74a4d8c2SCharles.Forsyth struct Gen 64*74a4d8c2SCharles.Forsyth { 65*74a4d8c2SCharles.Forsyth Sym* sym; 66*74a4d8c2SCharles.Forsyth long offset; 67*74a4d8c2SCharles.Forsyth short type; 68*74a4d8c2SCharles.Forsyth short reg; 69*74a4d8c2SCharles.Forsyth short name; 70*74a4d8c2SCharles.Forsyth double dval; 71*74a4d8c2SCharles.Forsyth char sval[8]; 72*74a4d8c2SCharles.Forsyth }; 73*74a4d8c2SCharles.Forsyth 74*74a4d8c2SCharles.Forsyth struct Hist 75*74a4d8c2SCharles.Forsyth { 76*74a4d8c2SCharles.Forsyth Hist* link; 77*74a4d8c2SCharles.Forsyth char* name; 78*74a4d8c2SCharles.Forsyth long line; 79*74a4d8c2SCharles.Forsyth long offset; 80*74a4d8c2SCharles.Forsyth }; 81*74a4d8c2SCharles.Forsyth #define H ((Hist*)0) 82*74a4d8c2SCharles.Forsyth 83*74a4d8c2SCharles.Forsyth enum /* keep in synch with ../cc/cc.h */ 84*74a4d8c2SCharles.Forsyth { 85*74a4d8c2SCharles.Forsyth Plan9 = 1<<0, 86*74a4d8c2SCharles.Forsyth Unix = 1<<1, 87*74a4d8c2SCharles.Forsyth Windows = 1<<2, 88*74a4d8c2SCharles.Forsyth }; 89*74a4d8c2SCharles.Forsyth 90*74a4d8c2SCharles.Forsyth enum 91*74a4d8c2SCharles.Forsyth { 92*74a4d8c2SCharles.Forsyth CLAST, 93*74a4d8c2SCharles.Forsyth CMACARG, 94*74a4d8c2SCharles.Forsyth CMACRO, 95*74a4d8c2SCharles.Forsyth CPREPROC, 96*74a4d8c2SCharles.Forsyth }; 97*74a4d8c2SCharles.Forsyth 98*74a4d8c2SCharles.Forsyth EXTERN char debug[256]; 99*74a4d8c2SCharles.Forsyth EXTERN Sym* hash[NHASH]; 100*74a4d8c2SCharles.Forsyth EXTERN char* Dlist[30]; 101*74a4d8c2SCharles.Forsyth EXTERN int nDlist; 102*74a4d8c2SCharles.Forsyth EXTERN Hist* ehist; 103*74a4d8c2SCharles.Forsyth EXTERN int newflag; 104*74a4d8c2SCharles.Forsyth EXTERN Hist* hist; 105*74a4d8c2SCharles.Forsyth EXTERN char* hunk; 106*74a4d8c2SCharles.Forsyth EXTERN char* include[NINCLUDE]; 107*74a4d8c2SCharles.Forsyth EXTERN Io* iofree; 108*74a4d8c2SCharles.Forsyth EXTERN Io* ionext; 109*74a4d8c2SCharles.Forsyth EXTERN Io* iostack; 110*74a4d8c2SCharles.Forsyth EXTERN long lineno; 111*74a4d8c2SCharles.Forsyth EXTERN int nerrors; 112*74a4d8c2SCharles.Forsyth EXTERN long nhunk; 113*74a4d8c2SCharles.Forsyth EXTERN int nosched; 114*74a4d8c2SCharles.Forsyth EXTERN int ninclude; 115*74a4d8c2SCharles.Forsyth EXTERN Gen nullgen; 116*74a4d8c2SCharles.Forsyth EXTERN char* outfile; 117*74a4d8c2SCharles.Forsyth EXTERN int pass; 118*74a4d8c2SCharles.Forsyth EXTERN char* pathname; 119*74a4d8c2SCharles.Forsyth EXTERN long pc; 120*74a4d8c2SCharles.Forsyth EXTERN int peekc; 121*74a4d8c2SCharles.Forsyth EXTERN int sym; 122*74a4d8c2SCharles.Forsyth EXTERN char symb[NSYMB]; 123*74a4d8c2SCharles.Forsyth EXTERN int thechar; 124*74a4d8c2SCharles.Forsyth EXTERN char* thestring; 125*74a4d8c2SCharles.Forsyth EXTERN long thunk; 126*74a4d8c2SCharles.Forsyth EXTERN Biobuf obuf; 127*74a4d8c2SCharles.Forsyth 128*74a4d8c2SCharles.Forsyth int assemble(char*); 129*74a4d8c2SCharles.Forsyth void* alloc(long); 130*74a4d8c2SCharles.Forsyth void* allocn(void*, long, long); 131*74a4d8c2SCharles.Forsyth void errorexit(void); 132*74a4d8c2SCharles.Forsyth void pushio(void); 133*74a4d8c2SCharles.Forsyth void newio(void); 134*74a4d8c2SCharles.Forsyth void newfile(char*, int); 135*74a4d8c2SCharles.Forsyth Sym* slookup(char*); 136*74a4d8c2SCharles.Forsyth Sym* lookup(void); 137*74a4d8c2SCharles.Forsyth void syminit(Sym*); 138*74a4d8c2SCharles.Forsyth long yylex(void); 139*74a4d8c2SCharles.Forsyth int getc(void); 140*74a4d8c2SCharles.Forsyth int getnsc(void); 141*74a4d8c2SCharles.Forsyth void unget(int); 142*74a4d8c2SCharles.Forsyth int escchar(int); 143*74a4d8c2SCharles.Forsyth void cinit(void); 144*74a4d8c2SCharles.Forsyth void pinit(char*); 145*74a4d8c2SCharles.Forsyth void cclean(void); 146*74a4d8c2SCharles.Forsyth int isreg(Gen*); 147*74a4d8c2SCharles.Forsyth void outcode(int, Gen*, int, Gen*); 148*74a4d8c2SCharles.Forsyth void zname(char*, int, int); 149*74a4d8c2SCharles.Forsyth void zaddr(Gen*, int); 150*74a4d8c2SCharles.Forsyth void ieeedtod(Ieee*, double); 151*74a4d8c2SCharles.Forsyth int filbuf(void); 152*74a4d8c2SCharles.Forsyth Sym* getsym(void); 153*74a4d8c2SCharles.Forsyth void domacro(void); 154*74a4d8c2SCharles.Forsyth void macund(void); 155*74a4d8c2SCharles.Forsyth void macdef(void); 156*74a4d8c2SCharles.Forsyth void macexpand(Sym*, char*); 157*74a4d8c2SCharles.Forsyth void macinc(void); 158*74a4d8c2SCharles.Forsyth void maclin(void); 159*74a4d8c2SCharles.Forsyth void macprag(void); 160*74a4d8c2SCharles.Forsyth void macif(int); 161*74a4d8c2SCharles.Forsyth void macend(void); 162*74a4d8c2SCharles.Forsyth void outhist(void); 163*74a4d8c2SCharles.Forsyth void dodefine(char*); 164*74a4d8c2SCharles.Forsyth void prfile(long); 165*74a4d8c2SCharles.Forsyth void linehist(char*, int); 166*74a4d8c2SCharles.Forsyth void gethunk(void); 167*74a4d8c2SCharles.Forsyth void yyerror(char*, ...); 168*74a4d8c2SCharles.Forsyth int yyparse(void); 169*74a4d8c2SCharles.Forsyth void setinclude(char*); 170*74a4d8c2SCharles.Forsyth 171*74a4d8c2SCharles.Forsyth /* 172*74a4d8c2SCharles.Forsyth * Posix.c/Inferno.c/Nt.c 173*74a4d8c2SCharles.Forsyth */ 174*74a4d8c2SCharles.Forsyth int mywait(int*); 175*74a4d8c2SCharles.Forsyth int mycreat(char*, int); 176*74a4d8c2SCharles.Forsyth int systemtype(int); 177*74a4d8c2SCharles.Forsyth int pathchar(void); 178*74a4d8c2SCharles.Forsyth char* mygetwd(char*, int); 179*74a4d8c2SCharles.Forsyth int myexec(char*, char*[]); 180*74a4d8c2SCharles.Forsyth int mydup(int, int); 181*74a4d8c2SCharles.Forsyth int myfork(void); 182*74a4d8c2SCharles.Forsyth int mypipe(int*); 183*74a4d8c2SCharles.Forsyth void* mysbrk(ulong); 184