home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
alib
/
d1xx
/
d110
/
pdc.lha
/
Pdc
/
src
/
Preproc.c
< prev
next >
Wrap
C/C++ Source or Header
|
1987-10-28
|
2KB
|
87 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;
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);
}