1: #include <stdio.h> 2: #include "config.h" 3: char code[256]; 4: #define FIRST 3 5: #define FOLLOW 2 6: #define ZERO 6 7: #define next() (((c = getc(si))==EOF)? exit(0):0) 8: #define copy() putc(c,so) 9: #define type() code[(unsigned char)c] 10: #if os_unix_ts 11: #define index strchr 12: #endif 13: 14: init() { 15: doit(FIRST,"ABCDEFGHIJKLMNOPQRSTUVWXYZ_"); 16: doit(FIRST,"0abcdefghijklmnopqrstuvwxyz_"); 17: doit(FOLLOW,"123456789"); 18: } 19: doit(act,list) 20: register unsigned char *list; 21: { 22: while(*list) {code[*list++]=act;} 23: } 24: main( ) 25: { 26: register FILE *si = stdin, *so = stdout; 27: register c, count; 28: 29: init(); 30: copying: 31: do { next(); copy();} while(type()!=FIRST); 32: hexnum: 33: if(c=='0') { 34: next(); 35: if(c=='X'||c=='x') { 36: do { copy(); next();} 37: while (index("0123456789abcdefABCDEF",c&0x7f)>0); 38: } 39: ungetc(c,si); goto copying; 40: } 41: counting: 42: for(count = 0; count < 7; count++) { 43: next(); 44: copy(); 45: if(!(type()&FOLLOW)) goto copying; 46: } 47: squelch: 48: do { next(); } while (type()&FOLLOW); 49: copy(); 50: goto copying; 51: }