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

encode defined in line 50; used 1 times
  • in line 41
fr defined in line 91; used 1 times
  • in line 59
main defined in line 14; never used
outdec defined in line 74; used 1 times
  • in line 63

Defined variables

sccsid defined in line 9; never used

Defined macros

ENC defined in line 12; used 5 times
Last modified: 1981-09-04
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 641
Valid CSS Valid XHTML 1.0 Strict