[net.sources] program to separate xlisp distribution files

betz (04/01/83)

/* separate.c - separate a combined file into individual files */

#include <stdio.h>

#define LINEMAX	500

/* main - the main routine */
main(argc,argv)
  int argc; char *argv[];
{
    FILE *ifp,*ofp = NULL;
    char line[LINEMAX],ofname[100];

    /* make sure there is a file to separate */
    if (argc != 2) {
	printf("incorrect number of arguments\n");
	exit();
    }

    /* open the input file */
    if ((ifp = fopen(argv[1],"r")) == NULL) {
	printf("can't open: %s\n",argv[1]);
	exit();
    }

    /* process each file */
    while (fgets(line,LINEMAX,ifp) != NULL) {

	/* look for a header line */
	if (sscanf(line,"<<<<<<<<<< %s >>>>>>>>>>",ofname) == 1) {

	    /* close the current output file */
	    if (ofp != NULL)
		fclose(ofp);

	    /* open the new output file */
	    if ((ofp = fopen(ofname,"w")) == NULL)
		printf("can't create: %s\n",ofname);
	    else
		printf("creating: %s\n",ofname);
	}

	/* output a line to the current output file */
	else if (ofp != NULL)
	    fputs(line,ofp);

	/* no current output file, print the line */
	else
	    fputs(line,stdout);
    }

    /* close the last output file */
    if (ofp != NULL)
	fclose(ofp);

    /* close the input file */
    fclose(ifp);
}

jim (04/01/83)

Once again I am prompted to post my "shell archiver".  I didn't invent
the idea, but I did write this particular version.

This is a shell script which takes as input the names of a bunch of
files.  It produces as output a shell script, which when run extracts
the original files.  I have seen some much fancier versions, but this
one works and it is still what I use.  I find it to be a convenient way
to bundle up a bunch of files for distribution, for example in
net.sources, because it doesn't require any special software on the
receiving end, just a standard Unix shell.

Put this script in a file called shar, and use it by typing:

	shar ArchiveName file1 file2 ...

Here it is:

AR=$1
shift
echo "# The rest of this file is a shell script which will extract:" >>$AR
echo "# $*" >>$AR
for i do
	echo a - $i
	echo "echo x - $i" >>$AR
	echo "cat >$i <<'!Funky!Stuff!'" >>$AR
	cat $i >>$AR
	echo "!Funky!Stuff!" >>$AR
done