|
|
1.1 ! root 1: -title mincpp: translate minimal conditional assembly stuff to cpp format ! 2: * ! 3: * This program takes a MINIMAL program and translates all ! 4: * conditional assembly statements to a format acceptable to ! 5: * the C preprocessor (cpp). ! 6: * ! 7: * MINIMAL CPP ! 8: * ! 9: * .IF sym #ifdef sym ! 10: * .THEN {nothing} ! 11: * .ELSE #else ! 12: * .FI #endif ! 13: * .DEF sym #define sym 1 ! 14: * .UNDEF sym #undef sym ! 15: * ! 16: * Luckily, all MINIMAL conditional assembly statements start ! 17: * with a "." in column 1. ! 18: * ! 19: &stlimit = -1 ! 20: &anchor = 1 ! 21: * ! 22: * build translation table. ! 23: * ! 24: castbl = table( 5 ) ! 25: castbl['IF'] = '#ifdef' ! 26: castbl['ELSE'] = '#else' ! 27: castbl['FI'] = '#endif' ! 28: castbl['DEF'] = '#define' ! 29: castbl['UNDEF'] = '#undef' ! 30: * ! 31: * obtain input and output files. ! 32: * ! 33: terminal = 'enter minimal input file' ! 34: input(.in,0,terminal) ! 35: terminal = 'enter minimal/cpp output file' ! 36: output(.out,1,terminal) ! 37: * ! 38: * read statements and do quick check. ! 39: * ! 40: main line = in :f(done) ! 41: leq( substr(line,1,1),'.' ) :s(castmt) ! 42: out = line :(main) ! 43: * ! 44: * here to do real translation ! 45: * ! 46: castmt opcode = symbol = ! 47: line len(1) ( break( ' ' ) | rem ) . opcode ! 48: + ( span( ' ' ) | '' ) ! 49: + ( ( len( 1 ) | '' ) rem . symbol ) :f(error) ! 50: opcode = castbl[opcode] ! 51: out = differ( opcode ) opcode ' ' symbol ! 52: + (ident( opcode,'#define' ) ' 1','' ) :(main) ! 53: * ! 54: * on error, show offensive line to person at teminal ! 55: * ! 56: error terminal = 'error: ' line :(main) ! 57: done ! 58: end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.