|
|
1.1 ! root 1: /* ! 2: * Routines for Doing Alphanumeric Input/Output (the -a option) ! 3: * D.P.Mitchell 83/07/01. ! 4: */ ! 5: ! 6: #include <stdio.h> ! 7: #define CHAR1 '#' ! 8: ! 9: extern int permutation[]; ! 10: char trans[66] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz./"; ! 11: int untrans[] = { ! 12: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 13: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 14: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 63, ! 15: 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 0, 0, 0, 0, 0, 0, ! 16: 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ! 17: 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, ! 18: 0, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, ! 19: 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 0, ! 20: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 21: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 22: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 23: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 24: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 25: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 26: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 27: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 28: }; ! 29: ! 30: out_alpha(c_buffer) ! 31: int c_buffer[128]; ! 32: { ! 33: int six[171]; ! 34: register c0, c1, c2; ! 35: register src, dst; ! 36: ! 37: for (src = 0, dst = 0; src < 128;) { ! 38: c0 = c_buffer[permutation[src++]]; ! 39: c1 = c_buffer[permutation[src++]]; ! 40: if (src < 128) ! 41: c2 = c_buffer[permutation[src++]]; ! 42: else ! 43: c2 = 0; ! 44: six[dst++] = trans[(c0 >> 2) & 077]; ! 45: six[dst++] = trans[((c0 & 03) << 4) | ((c1 >> 4) & 017)]; ! 46: six[dst++] = trans[((c1 & 017) << 2) | ((c2 >> 6) & 03)]; ! 47: if (dst < 171) ! 48: six[dst++] = trans[c2 & 077]; ! 49: } ! 50: putchar(CHAR1); ! 51: for (src = 0; src < 57; src++) ! 52: putchar(six[src]); ! 53: putchar('\n'); ! 54: putchar(CHAR1); ! 55: for (; src < 114; src++) ! 56: putchar(six[src]); ! 57: putchar('\n'); ! 58: putchar(CHAR1); ! 59: for (; src < 171; src++) ! 60: putchar(six[src]); ! 61: putchar('\n'); ! 62: } ! 63: ! 64: int ! 65: in_alpha(c_buffer) ! 66: int c_buffer[128]; ! 67: { ! 68: int six[171]; ! 69: register c0, c1, c2, c3; ! 70: register src, dst; ! 71: char line[64]; ! 72: extern char *fgets(); ! 73: ! 74: for (dst = 0; dst < 171; ) { ! 75: do { ! 76: if (fgets(line, 64, stdin) == NULL) ! 77: return 0; ! 78: } while (line[0] != CHAR1); ! 79: for (src = 1; src < 58; src++) ! 80: six[dst++] = line[src]; ! 81: } ! 82: for (src = 0, dst = 0; src < 171; ) { ! 83: c0 = untrans[six[src++]]; ! 84: c1 = untrans[six[src++]]; ! 85: c2 = untrans[six[src++]]; ! 86: if (src < 171) ! 87: c3 = untrans[six[src++]]; ! 88: else ! 89: c3 = 0; ! 90: c_buffer[permutation[dst++]] = (c0 << 2) | (c1 >> 4); ! 91: c_buffer[permutation[dst++]] = ((c1 & 017) << 4) | (c2 >> 2); ! 92: if (dst < 128) ! 93: c_buffer[permutation[dst++]] = ((c2 & 03) << 6) | c3; ! 94: } ! 95: return 1; ! 96: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.