home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
vol_200
/
204_01
/
preproc.c
< prev
next >
Wrap
Text File
|
1979-12-31
|
3KB
|
86 lines
#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);
}