/* ascii.c - ASCII table - Don Yang (uguu.org) 02/28/00 */ #include #include char table[256][4] = { "nul", "soh", "stx", "etx", "eot", "enq", "ack", "bel", "bs ", "tab", "lf ", "vt ", "np ", "cr ", "so ", "si ", "dle", "dc1", "dc2", "dc3", "dc4", "nak", "syn", "etb", "can", "em ", "eof", "esc", "fs ", "gs ", "rs ", "us " }; int main(int argc, char **argv) { int i, j, c; int x, k, s, p, r; /* Parse arguments */ x = k = s = p = r = 0; for(i = 1; i < argc; i++) { switch( tolower(argv[i][0]) ) { case 'e': k = 128; break; case 'x': sscanf(argv[i] + 1, "%d", &x); break; case 's': sscanf(argv[i] + 1, "%d", &s); break; case 'p': sscanf(argv[i] + 1, "%d", &p); break; case 'r': r = 1; break; default: return puts("ASCII 1.1 (2/28/00) - Don Yang (uguu.org)\n\n" "Usage: ascii [e] [x] [s] [p] [r]\n" " e Display extended characters\n" " x Display XORed characters (by )\n" " s Preshift\n" " p Postshift\n" " r rot13\n" ); } } /* Initialize table */ for(i = 32; i < 256; i++) sprintf(table[i], "%c ", i); sprintf(table[127], "del"); /* Print table */ if( x + s + p + r == 0 ) { /* Plain */ puts("\ndec, hex, chr\n"); for(i = 0; i < 16; i++) { for(j = 0; j < 128; j += 16) printf("%3d %02x %s", i + j + k, i + j + k, table[i + j + k]); } } else { /* Processed */ printf("\ndec, chr, "); if( s ) { if( p ) { if( x ) /* s != 0, p != 0, x != 0 */ printf("(((%s + %d) %% 256) ^ %d + %d) %% 256\n\n", r ? "rot13(chr)" : "chr", s, x, p); else /* s != 0, p != 0, x == 0 */ printf("(((%s + %d) %% 256) + %d) %% 256\n\n", r ? "rot13(chr)" : "chr", s, p); } else { if( x ) /* s != 0, p == 0, x != 0 */ printf("((%s + %d) %% 256) ^ %d\n\n", r ? "rot13(chr)" : "chr", s, x); else /* s != 0, p == 0, x == 0 */ printf("(%s + %d) %% 256\n\n", r ? "rot13(chr)" : "chr", s); } } else { if( p ) { if( x ) /* s == 0, p != 0, x != 0 */ printf("(%s ^ %d + %d) %% 256\n\n", r ? "rot13(chr)" : "chr", x, p); else /* s == 0, p != 0, x == 0 */ printf("(%s + %d) %% 256\n\n", r ? "rot13(chr)" : "chr", p); } else { if( x ) /* s == 0, p == 0, x != 0 */ printf("%s ^ %d\n\n", r ? "rot13(chr)" : "chr", x); else /* s == 0, p == 0, x == 0 */ puts("rot13(chr)\n"); } } for(; s < 0; s += 256); for(; p < 0; p += 256); for(i = 0; i < 16; i++) { for(j = 0; j < 128; j += 16 ) { c = i + j + k; if( r && isalpha(c) ) { c = islower(c) ? ((c - 'a') + 13) % 26 + 'a' : ((c - 'A') + 13) % 26 + 'A'; } printf("%3d %s%s", i + j + k, table[i + j + k], table[((((c + s) % 256) ^ x) + p) % 256]); } } } putchar('\n'); return 0; }