/* a nasty kludge to get end of line markers */ void putcr(int c) { switch (c){ case '\n': putchar(0x0d); putchar(0x0a); break; case 0x0d: break; default: putchar(c); } } int next_token(void) { do { switch (lex_val=getchar()){ case '-': return cap; case ' ': return space; case 0x0a: lex_val = '\n'; return nl; case 0x0d: break; /*avoids 0d 0d 0a output */ case EOF: lex_val = 0x1a; return fend; default: if (toupper(lex_val) == lex_val) return cap; else return other; } } while (lex_val == 0x0d); return forbid; } void skip(void) { return; } void echo(void) { #ifdef DEBUG if ((lex_val < ' ') || (lex_val > 'z')) putchar ('.'); else putchar(lex_val); printf(" %2.2x",lex_val); #endif putcr(lex_val ); count = 0; } void tally(void) { count += 1; } void markg(void) { putcr('\n' ); putchar(lex_val ); count = 0; } void smarkg(void) { putcr('\n' ); while(count--) putchar(' ' ); putchar(lex_val ); count = 0; } void zero(void) { count = 0; } void secho(void) { putchar(' ' ); putcr(lex_val ); #ifdef DEBUG printf(" %x", lex_val); #endif count = 0; }