[comp.sys.amiga] Comp.binaries- multiple files

armhold@topaz.rutgers.edu (George Armhold) (01/01/89)

How does one go about piecing together the long files from
comp.binaries.amiga? (I'm assuming that the reason there are multiple
msgs with the same program name is because they are too long for a
standard msg- is this correct?) Usually I use the 's' commmand to put
the file in my directory.
-GEA

mikes@lakesys.UUCP (Mike Shawaluk) (01/01/89)

In article <Dec.31.17.18.19.1988.4549@topaz.rutgers.edu> armhold@topaz.rutgers.edu (George Armhold) writes:
>
>How does one go about piecing together the long files from
>comp.binaries.amiga? (I'm assuming that the reason there are multiple
>msgs with the same program name is because they are too long for a
>standard msg- is this correct?) Usually I use the 's' commmand to put
>the file in my directory.
>-GEA

I used to use the 's' or 'w' commands for multiple-piece articles also, but
I've found a few slightly more efficient tricks, especially for the way that
Mr. Page has been posting Amiga stuff, which is as uuencoded .ZOO files (or
.zuu files, as they're usually named).  If the posting is all in one files, I
usually type "| unshar", which deposits the .zuu file directly in my News
directory (I use rn).  It's usually a good idea to "read" the first page or
so of the posting, to determine whether the shell archive contains one or
more files before doing this, to prevent things from getting jumbled up, in
the event that there are other things in my News directory that I haven't
gotten around to moving elsewhere or downloading yet.  Anyways, your original
question was about piecing together multiple pieces, like moebius or rgb, I
assume.  Well, what I was able to do for those was this (note, these are all
"rn" commands; you may not be able to do this if you use another news reader)

First, I do an "=" command, to see how many articles there are, and the
article numbers of them.  Then I type "first#-last#:|unshar", where first# is
the article number of the first one, last# is the last number.  This causes
each of the postings to be unshar'ed, resulting in a bunch of .zu? files in
my directory (.zu1, .zu2, etc.)  Then, assuming I have all of the pieces, I
can type "cat rgb1.zu? | uudecode", which will take the pieces rgb1.zu1
through rgb1.zu9 (or however high up it got), concatenate them together, and
uudecode the .zuu file into a .zoo file.  If there are more than 9 pieces, as
there were for the recent rgb demo, you might have to modify your cat command
slightly, such as "cat rgb1.zu? rgb1.zu1? | uudecode".  Please note that the
above isn't intended to be a tutorial on UN*X, piping, rn, or anything, just
a list of my shortcuts, etc.  I try to use these techniques, not only because
it saves time & typing, but because it cuts down the number of intermediate
files, which makes the system administrator happy, as his disks tend to
runneth over slightly less often :-)

Does anyone else out there have any suggestions or alternatives to add?
-- 
   - Mike Shawaluk
     ...!uunet!marque!lakesys!mikes

hrlaser@pnet02.cts.com (Harv Laser) (01/02/89)

I downloaded the 9-part "MoebiuS" animation and while I didn't turn
it into a .Zoo file on my host, I did it on my Amiga instead. I ended
up with a .Zoo file that correctly unZOOed giving me the animation, and
a bunch of ancillary pieces. In fact here's exactly what I got after
unZOOing it to a blank floppy:

Directory "df1:" on Sunday 01-Jan-89
more                       11008 ----rwed Yesterday 21:47:46
MoebiuS                   462394 ----rwed Yesterday 21:47:26
.info                         59 ----rwed Yesterday 22:06:41
MoebiuS.data               14859 ----rwed Yesterday 21:47:35
PlayPFX.info                1798 ----rwed Yesterday 21:47:53
PlayPFX                    28044 ----rwed Yesterday 21:47:52
MoebiuS-IT.doc              2354 ----rwed Yesterday 21:47:29
Moebius.doc                  626 ----rwed Yesterday 21:47:36
MoebiuS-IT.doc.info         1507 ----rwed Yesterday 21:47:32
Moebius.doc.info            1507 ----rwed Yesterday 21:47:39
MoebiuS.info                6891 ----rwed Yesterday 21:47:43

Okay, all well and good. ZOO didn't barf on it so I figure the files
all came thru intact. So I read the .doc file (the English one :-)
and I slide my CLI out of the way and open the disk icon and clic click
on the big MoebiuS icon. It invokes PlayPFX which opens a little 
window at the bottom of the screen, click click gronk gronk, I see
the memory on my Workbench menu strip going down down down... the screen
flashes once, all the memory comes back and that's it.  No animation.
Hmmm... read the docs again "requires 1.5M" (I have 2.5M)... so I get
rid of some stuff hogging up my ramdisk and try it again. Same thing.
Reboot, same thing. I even went so far as to install the disk with
the animation on it, put a startup sequence in it that just says 
"playpfx moebius" and boot from THAT and this time I just get some
meaningless (to me) error code after 20 seconds of listening my drive
load something.  

Oh yeah.. I DID rename the disk to "ArteMatica #2" but that still didn't
do any good. When I tried "playpfx Moebius.data" It loaded a pretty
title screen, displayed it for about 3 seconds, then returned me to the
CLI.

So I give up... what's the trick to getting MoebiuS to work? Can someone
compare those filesizes above with those from a known working copy? 

And if, as the docs say, the animation was created with Sculpt-Animate,
why did the artist put it in this bizarre format that requires "PlayPFX"
to show it instead of just defaulting to E.Graham's "Movie" program!?!?

Harv Laser, Sysop, The People/Link AmigaZone.  Plink: CBM*HARV
UUCP: {ames!elroy, <backbone>}!gryphon!pnet02!hrlaser
INET: hrlaser@pnet02.cts.com
<---open            Push down while turning           close tightly--->

grwalter@watcgl.waterloo.edu (Fred Walter) (01/03/89)

In article <263@lakesys.UUCP> mikes@lakesys.UUCP (Mike Shawaluk) writes:
>Then, assuming I have all of the pieces, I
>can type "cat rgb1.zu? | uudecode", which will take the pieces rgb1.zu1
>through rgb1.zu9 (or however high up it got), concatenate them together, and
>uudecode the .zuu file into a .zoo file.  If there are more than 9 pieces, as
>there were for the recent rgb demo, you might have to modify your cat command
>slightly, such as "cat rgb1.zu? rgb1.zu1? | uudecode".

In the program I just posted a couple of days ago that tries to automate
putting together binaries/source postings I didn't take the above into
account. Here is an updated version.

	fred

---cut-here--------------------------hey-that-tickles!!!!----------
/*
 * newsbreak.c (version 1.02)
 *
 * by G. R. Walter (Fred) December 30, 1988
 *
 * Description:
 *     Takes a series of files which are shar files (strips any
 *     garbage at the start of the shar file) that have been posted to
 *     comp.{sources|binaries}.amiga and feeds them through sh.
 *     After they have been fed through sh the original files are
 *     deleted. Then any uuencoded files are uudecoded, after which
 *     the uuencoded files are also deleted.
 *
 * NOTES:
 *     1) This program assumes that all necessary shar files are in the
 *        current directory. It attempts to not delete stuff if it can't
 *        handle it (like when not all the parts of a multi-part uuencoded
 *        file are available).
 *     2) When there are multiple parts to a uuencoded file, a maximum
 *        of 29 parts are currently handled.
 */

#include <stdio.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/dir.h>

main()
{
    DIR            *dirp;
    struct direct  *dp;

    void            unshar();
    void            uudecode();

    /* unshar everything */
    dirp = opendir(".");
    for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp))
	unshar(dp->d_name);
    closedir(dirp);

    /* uudecode everything */
    dirp = opendir(".");
    for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp))
	uudecode(dp->d_name);
    closedir(dirp);

    exit(0);
}

void
unshar(name)
    char           *name;
{
    FILE           *fin;
    FILE           *fout;
    char            buf[200];

    fin = fopen(name, "r");
    if (fin == NULL)		/* file doesn't exist !? */
	return;

    for (;;) {
	if (fgets(buf, 200, fin) == NULL) {	/* not a shar file !? */
	    fclose(fin);
	    return;
	}
	if (strncmp(buf, "#!/bin/sh", 9) == 0)
	    break;
    }

    fout = fopen(".unshar.temp.file", "w");
    while (fgets(buf, 200, fin) != NULL)
	fprintf(fout, "%s", buf);
    fclose(fout);
    fclose(fin);

    if (system("sh .unshar.temp.file >> .unshar.output") == 0)
        unlink(name);

    unlink(".unshar.temp.file");
}

void
uudecode(name)
    char           *name;
{
    FILE           *file;
    char            buf[200];
    char            name_buf[200];
    char           *ptr;

    /* check if the file still exists */
    file = fopen(name, "r");
    if (file == NULL)
	return;
    fclose(file);

    /* if the file ends in ".uu" or ".zuu" just uudecode it */
    ptr = name + strlen(name) - 1;
    if ((*ptr == 'u') && (*(ptr - 1) == 'u')) {
	ptr -= 2;
	if ((*ptr == '.') || ((*ptr == 'z') && (*(ptr - 1) == '.'))) {
	    sprintf(buf, "uudecode %s", name);
	    if (system(buf) == 0)
	        unlink(name);
	    return;
	}
    }

    /* handle ".zu#" where # is a number */
    while (isdigit(*ptr))
	ptr--;

    if ((*ptr == 'u') && ((*(ptr - 1) == 'z') && (*(ptr - 2) == '.'))) {
	*(ptr + 1) = NULL;

	/* check out how many parts there are */
	sprintf(name_buf, "%s10", name);
        file = fopen(name_buf, "r");
        if (file == NULL) {
	    sprintf(buf, "cat %s? | uudecode", name);
        } else {
            fclose(file);
	    sprintf(name_buf, "%s20", name);
            file = fopen(name_buf, "r");
            if (file == NULL) {
	        sprintf(buf, "cat %s? %s1? | uudecode", name, name);
	    } else {
                fclose(file);
	        sprintf(name_buf, "%s30", name);
                file = fopen(name_buf, "r");
                if (file == NULL) {
	            sprintf(buf, "cat %s? %s1? %s2? | uudecode",
			    name, name, name);
		} else {
		    fclose(file);
		}
	    }
	}

	if (system(buf) == 0) {
	    sprintf(buf, "rm %s*", name);
	    system(buf);
	}
    }
}