5 char base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
8 void do_historical(FILE *in, FILE *out, char *decode) {
9 unsigned char input[45];
10 unsigned char output[62];
13 fprintf(out, "begin %s %s\n", "644", decode);
17 input[0] = 0; input[1] = 0; input[2] = 0;
18 bytes = fread(input, 1, 45, in);
20 for (i = bytes; i < 45; i++) {
23 output[0] = oldbase[bytes];
26 for (i=0;i<bytes;i+=3) {
27 bits = (input[i] << 16) | (input[i+1] << 8) | (input[i+2]);
29 output[i/3*4+4] = oldbase[(bits & 0x3f)];
30 output[i/3*4+3] = oldbase[((bits >> 6) & 0x3f)];
31 output[i/3*4+2] = oldbase[((bits >> 12) & 0x3f)];
32 output[i/3*4+1] = oldbase[((bits >> 18) & 0x3f)];
35 fprintf(out, "%s\n", output);
37 fprintf(out, "end\n");
40 int main(int ac, char *av[]) {
44 FILE *output = stdout;
45 unsigned char input[3];
50 for (i = 0; i<64; i++) {
51 oldbase[i] = i + 0x20;
56 if (!strcmp(av[1], "-m")) {
66 if (freopen(file, "r", stdin) == 0) {
67 perror("can't open file:");
73 do_historical(stdin, output, decode);
77 fprintf(output, "begin-base64 %s %s\n", "644", decode);
83 input[0] = 0; input[1] = 0; input[2] = 0;
84 bytes = fread(input, 1, 3, stdin);
88 bits = (input[0] << 16) | (input[1] << 8) | (input[2]);
91 out[2] = (bits >> 6) & 0x3f;
92 out[1] = (bits >> 12) & 0x3f;
93 out[0] = (bits >> 18) & 0x3f;
95 for (i=0;i < bytes+1; i++) {
96 fputc(base64[out[i]], stdout);
105 if (++groups % 15 == 0) {
110 if (groups % 15 != 0) {
113 fprintf(stdout, "====\n");