// LGP-21 Flexowriter to ASCII // tables from Christian Corti's flex2asc.pas program // #include #include // Z ) SP B L _ < Y * = R " : // EOT I & ? BS D % ] HT N $ [ M V // ' P O E ( X U F T G // H J C K A Q S W BEL /* orig table char uc[] = { 0, 90, 41, 32, 0, 66, 76, 95, 60, 89, 42, 61, 0, 82, 34, 58, 4, 73, 38, 63, 8, 68, 37, 93, 9, 78, 36, 91, 0, 77, 227, 86, 39, 80, 228, 79, 0, 69, 40, 88, 0, 85, 70, 0, 0, 84, 71, 0, 0, 72, 74, 0, 0, 67, 75, 0, 0, 65, 81, 0, 0, 83, 87, 7 }; */ char uc[] = { 0, 90, 41, 32, 0, 66, 76, 95, 60, 89, 42, 61, 0, 82, 34, 58, 10, 73, 38, 63, 8, 68, 37, 93, 9, 78, 36, 91, 0, 77, 227, 86, 39, 80, 228, 79, 0, 69, 40, 88, 0, 85, 70, 0, 0, 84, 71, 0, 0, 72, 74, 0, 0, 67, 75, 0, 0, 65, 81, 0, 0, 83, 87, 0 }; // z . SP b l - > y 2 + r 3 ; // i 4 / BS d 5 . HT n 6 , m 7 v // ' p 8 o e 9 x u f t g // h j c k a q s w BEL /* orig table char lc[] = { 0, 122, 48, 32, 0, 98, 108, 45, 62, 121, 50, 43, 0, 114, 51, 59, 4, 105, 52, 47, 8, 100, 53, 46, 9, 110, 54, 44, 0, 109, 55, 118, 39, 112, 56, 111, 0, 101, 57, 120, 0, 117, 102, 0, 0, 116, 103, 0, 0, 104, 106, 0, 0, 99, 107, 0, 0, 97, 113, 0, 0, 115, 119, 7 }; */ char lc[] = { 0, 122, 48, 32, 0, 98, 108, 45, 62, 121, 50, 43, 0, 114, 51, 59, 10, 105, 52, 47, 8, 100, 53, 46, 9, 110, 54, 44, 0, 109, 55, 118, 39, 112, 56, 111, 0, 101, 57, 120, 0, 117, 102, 0, 0, 116, 103, 0, 0, 104, 106, 0, 0, 99, 107, 0, 0, 97, 113, 0, 0, 115, 119, 0 }; int main(){ unsigned char in, c, out; int caseflag = 0; while(1){ in = getchar(); if(feof(stdin)){putchar('\n'); exit(0);} #ifdef DEBUG if(in&0x20) putchar('1'); else putchar('0'); if(in&0x10) putchar('1'); else putchar('0'); if(in&0x08) putchar('1'); else putchar('0'); if(in&0x04) putchar('1'); else putchar('0'); if(in&0x02) putchar('1'); else putchar('0'); if(in&0x01) putchar('1'); else putchar('0'); putchar(' '); #endif // bits in paper tape frame // 1 6 5 4 3 2 // shifts to // 6 5 4 3 2 1 // c = in << 1; c |= ((c & 0x40) >> 6); c = c & 0x3f; #ifdef DEBUG if(c&0x20) putchar('1'); else putchar('0'); if(c&0x10) putchar('1'); else putchar('0'); if(c&0x08) putchar('1'); else putchar('0'); if(c&0x04) putchar('1'); else putchar('0'); if(c&0x02) putchar('1'); else putchar('0'); if(c&0x01) putchar('1'); else putchar('0'); putchar(' '); #endif if(c == 8){ caseflag = 1; continue;} if(c == 4){ caseflag = 0; continue;} if(caseflag) c = uc[c]; else c = lc[c]; if(c == 0){ caseflag = 0; continue;} // force lower-case if we are in tape leader putchar(c); } }