W8SDZ@SIMTEL20.ARPA (Keith Petersen) (03/27/88)
Some postings to comp.binaries.ibm.pc are *still* coming through with files uuencoded with the old obsolete version of Unix uuencode. The later versions substitute the accent grave (`) for the space character to get around problems with some mailers which strip trailing blanks. Here's the latest, in case you would like to pass it along to your systems folks. Please note it is NOT the same version I posted a few weeks ago. This one is newer. --Keith Petersen Maintainer of the MSDOS archives at SIMTEL20 --cut-here--UUENCODE.C FOR UNIX--cut-here-- #ifndef lint static char sccsid[] = "@(#)uuencode.c 5.5 (Berkeley) 2/24/88"; #endif /* * uuencode [input] output * * Encode a file so it can be mailed to a remote system. */ #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> /* ENC is the basic 1 character encoding function to make a char printing */ #define ENC(c) ((c) ? ((c) & 077) + ' ': '`') main(argc, argv) char **argv; { FILE *in; struct stat sbuf; int mode; /* optional 1st argument */ if (argc > 2) { if ((in = fopen(argv[1], "r")) == NULL) { perror(argv[1]); exit(1); } argv++; argc--; } else in = stdin; if (argc != 2) { fprintf(stderr,"Usage: uuencode [infile] remotefile\n"); exit(2); } /* figure out the input file mode */ if (fstat(fileno(in), &sbuf) < 0 || !isatty(fileno(in))) mode = 0666 & ~umask(0666); else mode = sbuf.st_mode & 0777; printf("begin %o %s\n", mode, argv[1]); encode(in, stdout); printf("end\n"); exit(0); } /* * copy from in to out, encoding as you go along. */ encode(in, out) register FILE *in; register FILE *out; { char buf[80]; register int i, n; for (;;) { /* 1 (up to) 45 character line */ n = fread(buf, 1, 45, in); putc(ENC(n), out); for (i=0; i<n; i += 3) outdec(&buf[i], out); putc('\n', out); if (n <= 0) break; } } /* * output one group of 3 bytes, pointed at by p, on file f. */ outdec(p, f) register char *p; register FILE *f; { register int c1, c2, c3, c4; c1 = *p >> 2; c2 = (*p << 4) & 060 | (p[1] >> 4) & 017; c3 = (p[1] << 2) & 074 | (p[2] >> 6) & 03; c4 = p[2] & 077; putc(ENC(c1), f); putc(ENC(c2), f); putc(ENC(c3), f); putc(ENC(c4), f); }