"do", "DO", /* have to be first */
main(argc
,argv
) int argc
; char **argv
; {
if(argc
>1 && argv
[1][0]=='-'){
filestack
[0] = infile
= fd
= ninclude
= linect
[0] = 0;
if( (fd
= filestack
[0] = copen(svargv
[++infile
],'r')) < 0 ) {
error("can't open %s", svargv
[infile
]);
nextchar
= (peek
<0) ? gchar(): peek
;
extern int linect
[], nnames
;
extern char *names
[], *nameptr
[];
for(gcp
=0; (c
=gcbuf
[gcp
]=cgetc(fd
))!='\0' ; gcp
++ ){
while(putchar(cgetc(fd
))!='\n');
if( (atype
=alphanum(c
)) && apos
< 0 ){
if( nnames
>0 && (t
=lookup(&gcbuf
[apos
],names
))>=0){
for(i
=0;gcbuf
[apos
++]=nameptr
[t
][i
];i
++);
if( c
< ' ' && (c
!='\n' && c
!='\t') ) /* strip crap */
while( (c
=cgetc(fd
))!='\n' && c
!='\0');
while( (gcbuf
[++gcp
]=t
=cgetc(fd
)) != c
)
error("unbalanced quote");
cclose(filestack
[ninclude
--]);
fd
= filestack
[ninclude
];
cclose(filestack
[ninclude
]);
if( (fd
= filestack
[ninclude
] = copen(svargv
[++infile
],'r')) < 0) {
error("can't open %s", svargv
[infile
]);
while( (c
=getc())==' ' || c
=='\t' );
for(i
=0; (fname
[i
]=c
=getc())!='\n' && c
!=';' && c
!=' ' && c
!='\t'; i
++);
if( (fd
= copen(fname
,'r')) < 0 ) {
error("can't open %s", fname
);
filestack
[++ninclude
] = fd
;
lookup(string
,tbl
) char *string
; char *tbl
[]; {
for(i
=0; tbl
[i
]!=0; i
++){
for( j
=0; (r
=tbl
[i
][j
])==string
[j
] && r
!='\0'; j
++);
while( (c
=getc())==' ' || c
=='\n' || c
=='\t' );
type
= lookup(str
,keyword
);
if( keytran
[type
]==XDEFINE
) {
} else if( keytran
[type
]==XINCLUDE
) {
while( (c
=getc())==' ' || c
=='\t' || c
=='\n' );
if( c
>='a' && c
<='z' || c
>='A' && c
<='Z' )
for (sp
=0; (c
=s
[sp
++]=getc())!=' ' && c
!='\t' && c
!='\n' && c
!='{' && c
!='}'
&& c
!=';' && c
!='(' && c
!=')' ; )
while( (s
[sp
++]=getc())!=c
);
while( (c
= *s
++) != '\0' )
if(c
>='0' && c
<='9') return(1);
if(c
>='a' && c
<='z') return(1);
if(c
>='A' && c
<='Z') return(1);
while( (c
=getc())==' ' || c
=='\t' );
for(nstr
=0; c
=getc(); nstr
++ ){
if(c
==' ' || c
=='\t' || c
=='\n') break;
if( (index
=lookup(str
,names
)) >= 0 )
else if( (index
= nnames
++)>=MAXNAMES
-1 ){
error("too many defined names");
names
[index
] = getvec(nstr
+1);
for( i
=0; names
[index
][i
]=str
[i
]; i
++ );
while( (c
=getc())==' ' || c
=='\t' );
for( i
=0; (c
=getc())!='\n' && c
!='\0'; i
++ )
nameptr
[index
] = getvec(i
+1);
for( i
=0; nameptr
[index
][i
]=str
[i
]; i
++ );