home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #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;
-
- 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);
- }
-