#include #include "c.h" #include "expr.h" #include "gen.h" #include "cglbdec.h" /* *68000 C compiler * *Copyright 1984, 1985, 1986 Matthew Brandt. * all commercial rights reserved. * *This compiler is intended as an instructive tool for personal use. Any *use for profit without the written consent of the author is prohibited. * *This compiler may be distributed freely for non-commercial use as long *as this notice stays intact. Please forward any enhancements or questions *to: * *Matthew Brandt *Box 920337 *Norcross, Ga 30092 */ FILE *inclfile[10]; int incldepth = 0; int inclline[10]; char *lptr; char *litlate(); preprocess() { ++lptr; lastch = ' '; getsym(); /* get first word on line */ if( lastst != id ) { error(ERR_PREPROC); return getline(incldepth == 0); } if( strcmp(lastid,"include") == 0 ) return doinclude(); else if( strcmp(lastid,"define") == 0 ) return dodefine(); else { error(ERR_PREPROC); return getline(incldepth == 0); } } doinclude() { int rv; getsym(); /* get file to include */ if( lastst != sconst ) { error(ERR_INCLFILE); return getline(incldepth == 0); } inclline[incldepth] = lineno; inclfile[incldepth++] = input; /* push current input file */ input = fopen(laststr,"r"); if( input == 0 ) { input = inclfile[--incldepth]; error(ERR_CANTOPEN); rv = getline(incldepth == 0); } else { rv = getline(incldepth == 1); lineno = -32768; /* dont list include files */ } return rv; } dodefine() { SYM *sp; getsym(); /* get past #define */ if( lastst != id ) { error(ERR_DEFINE); return getline(incldepth == 0); } ++global_flag; /* always do #define as globals */ sp = xalloc(sizeof(SYM)); sp->name = litlate(lastid); sp->value.s = litlate(lptr); insert(sp,&defsyms); --global_flag; return getline(incldepth == 0); }