v05i083: bsplit - a split-like program for binary files
Peter Knoppers, Delft Univ. of Technology
knop at dutesta.UUCP
Wed Dec 14 13:10:06 AEST 1988
Posting-number: Volume 5, Issue 83
Submitted-by: "Peter Knoppers, Delft Univ. of Technology" <knop at dutesta.UUCP>
Archive-name: bsplit
Below follows my program bsplit.c. It is a short and simple program
that we use rather often. Manual is not included, as the use is
almost identical to that of the un*x split program. As furnished
it compiles and works on the systems that I tried. It may not
work on systems where ints are 16 bits. For local use you may
change this program into anything you like.
Modified versions must not be re-distributed. Distribution of the
original version with diff is OK. If someone really improves this,
mail the diffs to me, so that I can re-post the really-improved
version. The copyright message is there to prevent uncontrolled
spreading of many slightly different versions.
My present email address is knop at dutesta.UUCP, this will soon
change to knop at duteca.UUCP.
#! /bin/sh
# This file was wrapped with "dummyshar". "sh" this file to extract.
# Contents: bsplit.c
echo extracting 'bsplit.c'
if test -f 'bsplit.c' -a -z "$1"; then echo Not overwriting 'bsplit.c'; else
sed 's/^X//' << \EOF > 'bsplit.c'
X/*
X * bsplit.c - split binary files in manageable pieces.
X * usage is exactly like the split program.
X *
X * This program was written from scratch, without looking at the
X * sources of split.
X *
X * Copyright (C) 1988 P. Knoppers
X * Bilderdijkhof 59
X * 2624 ZG Delft
X * The Netherlands
X */
X
Xchar copy0[] = "Copyright (C) 1988 P. Knoppers";
Xchar copy1[] = "Permission to use and distribute copies of this";
Xchar copy2[] = "program WITH SOURCE is granted to anyone, provided";
Xchar copy3[] = "that it is NOT CHANGED in any way.";
X
X#include <stdio.h>
X#define DEFSIZE 50000
X#define DEFPREFIX "x"
X#define MAXNAME 200
X
Xchar *malloc ();
X
Xmain (argc, argv) /* bsplit - split binary file */
Xchar *argv[];
X{
X char *buf;
X char *myname;
X int bulksize = DEFSIZE;
X int level;
X int got;
X int fno = 0;
X char outfname[MAXNAME + 1];
X char outbase[MAXNAME + 3];
X int foundinname = 0;
X FILE * infile = stdin;
X FILE * outfile;
X
X myname = *argv;
X strcpy (outbase, DEFPREFIX);
X while (--argc > 0)
X {
X argv++;
X if ((*argv)[0] == '-')
X {
X if ((*argv)[1] == '\0')
X {
X if (foundinname != 0)
X {
X fprintf (stderr,
X "usage: %s [-size] [file [prefix]]\n",
X myname);
X exit (1);
X }
X foundinname++;
X }
X else
X if (sscanf (*argv, "-%d", &bulksize) != 1)
X {
X fprintf (stderr,
X "usage: %s [-size] [file [prefix]]\n",
X myname);
X exit (1);
X }
X }
X else
X if (foundinname != 0)
X {
X if (strlen (*argv) > MAXNAME)
X {
X fprintf (stderr, "%s: prefix too long\n",
X myname);
X exit (1);
X }
X strcpy (outbase, *argv);
X }
X else
X {
X if ((infile = fopen (*argv, "r")) == NULL)
X {
X fprintf (stderr, "%s: cannot open %s\n",
X myname, *argv);
X exit (1);
X }
X foundinname++;
X }
X }
X
X if ((buf = malloc (bulksize)) == NULL)
X {
X fprintf (stderr, "%s: malloc failed\n", myname);
X exit (1);
X }
X level = 0;
X while (1)
X {
X got = read (fileno (infile), &buf[level], bulksize - level);
X level += got;
X if ((level < bulksize) && (got > 0))
X continue;
X if ((level == bulksize) || ((got == 0) && (level > 0)))
X {
X sprintf (outfname, "%s%c%c", outbase, fno / 26 + 'a',
X fno % 26 + 'a');
X if ((outfile = fopen (outfname, "w")) == NULL)
X {
X fprintf (stderr, "%s: cannot create %s\n", myname,
X outfname);
X exit (1);
X }
X if (write (fileno (outfile), buf, level) != level)
X {
X fprintf (stderr, "%s: write failed\n", myname);
X exit (1);
X }
X fclose (outfile);
X level = 0;
X fno++;
X }
X if (got == 0)
X break;
X }
X}
EOF
chars=`wc -c < 'bsplit.c'`
if test $chars != 2804; then echo 'bsplit.c' is $chars characters, should be 2804 characters!; fi
fi
exit 0
--
_____ __ __ __ __ ____ _____ _____ ______ _____ _____
| _ \ | |/ || \| | / \ | _ \ | _ \ | ___|| _ \ / ___|
| __/ _ | < | || || || __/ | __/ | >__ | < \__ \
|__| |_| |__|\__||__|\__| \____/ |__| |__| |______||__|\__||_____/
P. Knoppers, Delft Univ. of Technology, The Netherlands - knop at dutesta.UUCP
More information about the Comp.sources.misc
mailing list