|
|
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.