Xref: utzoo comp.binaries.ibm.pc.d:2092 comp.sys.ibm.pc:25476 Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!rutgers!bellcore!faline!thumper!ulysses!mhuxo!mhuxu!skeeve From: skeeve@mhuxu.UUCP (Chris Riley) Newsgroups: comp.binaries.ibm.pc.d,comp.sys.ibm.pc Subject: Re: binary downloads Keywords: binaries Message-ID: <9146@mhuxu.UUCP> Date: 1 Mar 89 21:17:42 GMT References: <241@jarthur.Claremont.EDU> <327@rruxd.UUCP> Reply-To: skeeve@mhuxu.UUCP (79533-riley c) Distribution: na Organization: AT&T Bell Laboratories, Murray Hill Lines: 250 In article <327@rruxd.UUCP> wws@rruxd.UUCP (W W Scott) writes: >In article <241@jarthur.Claremont.EDU>, pthiesse@jarthur.Claremont.EDU (Paul Thiessen) writes: >> Hello. >> How do you take binary-type files off of this network and into a PC? I >> assume there are conversion programs necessary. What are they? I have PAK on >> my PC (a new PKARC compatible program), and a UNIX system to access this >> network. >> I'd appreciate any help. Thanks. >> >> Paul Thiessen > >I've used CTRM to upload and download binary files between my PS/2 and UNIX. >CTRM is public domain software using the Kermit protocol. It emulates a >HP-2621. > >Wayne CTRM is NOT public domain. From the manual: -- begin quote This program and documentation is copyrighted and is the property of the author. It is NOT in the public domain. It may not be copied without the permission of the author and the author reserves all rights. CTRM, however, may be used by AT&T employees at work and in their homes and may be copied for other AT&T employees but may not be distributed outside of AT&T. Please refer questions concerning outside distribution to the author. -- end quote The author is Ted Roycraft, and his email address is att!lcuxlc!tjr. In reference to Paul's question, I believe that Rahul posts instructions each month, but here you go. Put the following line in a file, say 'combine'. ---start of combine cat $* | sed '/^END/,/^BEGIN/d'| uudecode ---end At the end of this posting is the source for the uuencode program. Compile it. Use the save to file feature in whatever version of readnews you are using. Save each archive to a different name. Now say: $ sh combine filename and you have the archive in the original binary format, ready to send to the PC. Use the file-transfer program that you usually use for sending the file to the PC. Kermit works well, but you will need to find out what is available at your site. Once you have the file on the PC, say c:> pkunpak arcname and you are all set. (you did say that you had pkunpak, right?) Good luck! Chris Riley ---start of uuencode.c #ifndef lint static char sccsid[] = "@(#)uudecode.c 5.3 (Berkeley) 4/10/85"; #endif /* * uudecode [input] * * create the specified file, decoding as you go. * used with uuencode. */ #include #include #include #include /* single character decode */ #define DEC(c) (((c) - ' ') & 077) main(argc, argv) char **argv; { FILE *in, *out; int mode; char dest[128]; char buf[80]; /* optional input arg */ if (argc > 1) { if ((in = fopen(argv[1], "r")) == NULL) { perror(argv[1]); exit(1); } argv++; argc--; } else in = stdin; if (argc != 1) { printf("Usage: uudecode [infile]\n"); exit(2); } /* search for header line */ for (;;) { if (fgets(buf, sizeof buf, in) == NULL) { fprintf(stderr, "No begin line\n"); exit(3); } if (strncmp(buf, "begin ", 6) == 0) break; } sscanf(buf, "begin %o %s", &mode, dest); /* handle ~user/file format */ if (dest[0] == '~') { char *sl; struct passwd *getpwnam(); char *index(); struct passwd *user; char dnbuf[100]; sl = index(dest, '/'); if (sl == NULL) { fprintf(stderr, "Illegal ~user\n"); exit(3); } *sl++ = 0; user = getpwnam(dest+1); if (user == NULL) { fprintf(stderr, "No such user as %s\n", dest); exit(4); } strcpy(dnbuf, user->pw_dir); strcat(dnbuf, "/"); strcat(dnbuf, sl); strcpy(dest, dnbuf); } /* create output file */ out = fopen(dest, "w"); if (out == NULL) { perror(dest); exit(4); } chmod(dest, mode); decode(in, out); if (fgets(buf, sizeof buf, in) == NULL || strcmp(buf, "end\n")) { fprintf(stderr, "No end line\n"); exit(5); } exit(0); } /* * copy from in to out, decoding as you go along. */ decode(in, out) FILE *in; FILE *out; { char buf[80]; char *bp; int n; for (;;) { /* for each input line */ if (fgets(buf, sizeof buf, in) == NULL) { printf("Short file\n"); exit(10); } n = DEC(buf[0]); if (n <= 0) break; bp = &buf[1]; while (n > 0) { outdec(bp, out, n); bp += 4; n -= 3; } } } /* * output a group of 3 bytes (4 input characters). * the input chars are pointed to by p, they are to * be output to file f. n is used to tell us not to * output all of them at the end of the file. */ outdec(p, f, n) char *p; FILE *f; { int c1, c2, c3; c1 = DEC(*p) << 2 | DEC(p[1]) >> 4; c2 = DEC(p[1]) << 4 | DEC(p[2]) >> 2; c3 = DEC(p[2]) << 6 | DEC(p[3]); if (n >= 1) putc(c1, f); if (n >= 2) putc(c2, f); if (n >= 3) putc(c3, f); } /* fr: like read but stdio */ int fr(fd, buf, cnt) FILE *fd; char *buf; int cnt; { int c, i; for (i=0; i