1: /*
2: * uuencode [input] output
3: *
4: * Encode a file so it can be mailed to a remote system.
5: */
6: #include <stdio.h>
7: #include <sys/types.h>
8: #include <sys/stat.h>
9: static char *sccsid = "@(#)uuencode.c 1.1";
10:
11: /* ENC is the basic 1 character encoding function to make a char printing */
12: #define ENC(c) (((c) & 077) + ' ')
13:
14: main(argc, argv)
15: char **argv;
16: {
17: FILE *in;
18: struct stat sbuf;
19: int mode;
20:
21: /* optional 1st argument */
22: if (argc > 2) {
23: if ((in = fopen(argv[1], "r")) == NULL) {
24: perror(argv[1]);
25: exit(1);
26: }
27: argv++; argc--;
28: } else
29: in = stdin;
30:
31: if (argc != 2) {
32: printf("Usage: uuencode [infile] remotefile\n");
33: exit(2);
34: }
35:
36: /* figure out the input file mode */
37: fstat(fileno(in), &sbuf);
38: mode = sbuf.st_mode & 0777;
39: printf("begin %o %s\n", mode, argv[1]);
40:
41: encode(in, stdout);
42:
43: printf("end\n");
44: exit(0);
45: }
46:
47: /*
48: * copy from in to out, encoding as you go along.
49: */
50: encode(in, out)
51: FILE *in;
52: FILE *out;
53: {
54: char buf[80];
55: int i, n;
56:
57: for (;;) {
58: /* 1 (up to) 45 character line */
59: n = fr(in, buf, 45);
60: putc(ENC(n), out);
61:
62: for (i=0; i<n; i += 3)
63: outdec(&buf[i], out);
64:
65: putc('\n', out);
66: if (n <= 0)
67: break;
68: }
69: }
70:
71: /*
72: * output one group of 3 bytes, pointed at by p, on file f.
73: */
74: outdec(p, f)
75: char *p;
76: FILE *f;
77: {
78: int c1, c2, c3, c4;
79:
80: c1 = *p >> 2;
81: c2 = (*p << 4) & 060 | (p[1] >> 4) & 017;
82: c3 = (p[1] << 2) & 074 | (p[2] >> 6) & 03;
83: c4 = p[2] & 077;
84: putc(ENC(c1), f);
85: putc(ENC(c2), f);
86: putc(ENC(c3), f);
87: putc(ENC(c4), f);
88: }
89:
90: /* fr: like read but stdio */
91: int
92: fr(fd, buf, cnt)
93: FILE *fd;
94: char *buf;
95: int cnt;
96: {
97: int c, i;
98:
99: for (i=0; i<cnt; i++) {
100: c = getc(fd);
101: if (c == EOF)
102: return(i);
103: buf[i] = c;
104: }
105: return (cnt);
106: }
Defined functions
fr
defined in line
91; used 1 times
main
defined in line
14;
never used
Defined variables
sccsid
defined in line
9;
never used
Defined macros
ENC
defined in line
12; used 5 times