This is bsplit.c in view mode; [Download] [Up]
/*
* bsplit.c - split files in manageable pieces.
* usage is exactly like the split program.
*
* Written by C. Swiger 8/08/93
*/
#include <stdio.h>
#define DEFAULT_SIZE 50000
#define DEFAULT_PREFIX "x"
#ifndef MAXPATHLEN
#define MAXPATHLEN 200
#endif
char *malloc ();
int
convint (str)
char *str;
{
int multiplier = 1;
int arglen = strlen (str);
if (arglen > 1) {
switch (str[arglen - 1]) {
case 'k':
multiplier = 1024;
str[arglen - 1] = '\0';
break;
case 'm':
multiplier = 1024 * 1024;
str[arglen - 1] = '\0';
break;
}
}
return atoi (str) * multiplier;
}
int
main (argc, argv) /* bsplit - split binary file */
char *argv[];
{
char *buf;
char *myname;
int blocksize = DEFAULT_SIZE;
int level;
int got;
int file_number = 0;
char outfname[MAXPATHLEN + 1];
char outbase[MAXPATHLEN + 3];
int foundinname = 0;
FILE *infile = stdin;
FILE *outfile;
myname = *argv;
strcpy (outbase, DEFAULT_PREFIX);
if (argc == 1) {
fprintf (stderr,
"usage: %s [-size{km}] [file [prefix]]\n",
myname);
exit(1);
}
while (--argc > 0) {
argv++;
if ((*argv)[0] == '-') {
if ((*argv)[1] == '\0') {
if (foundinname) {
fprintf (stderr,
"usage: %s [-size{km}] [file [prefix]]\n",
myname);
exit (1);
}
foundinname++;
} else
blocksize = convint(*argv + 1);
if (blocksize < 1) {
fprintf (stderr,
"usage: %s [-size{km}] [file [prefix]]\n",
myname);
exit (1);
}
}
else
if (foundinname) {
if (strlen (*argv) > MAXPATHLEN) {
fprintf (stderr, "%s: prefix too long\n",
myname);
exit (1);
}
strcpy (outbase, *argv);
}
else {
if ((infile = fopen (*argv, "r")) == NULL) {
fprintf (stderr, "%s: cannot open %s\n",
myname, *argv);
exit (1);
}
foundinname++;
}
}
if ((buf = malloc (blocksize)) == NULL) {
fprintf (stderr, "%s: malloc failed\n", myname);
exit (1);
}
level = 0;
while (1) {
got = read (fileno (infile), &buf[level], blocksize - level);
level += got;
if ((level < blocksize) && (got > 0))
continue;
if ((level == blocksize) || ((got == 0) && (level > 0)))
{
sprintf (outfname, "%s%c%c", outbase, file_number / 26 + 'a',
file_number % 26 + 'a');
if ((outfile = fopen (outfname, "w")) == NULL)
{
fprintf (stderr, "%s: cannot create %s\n", myname,
outfname);
exit (1);
}
if (write (fileno (outfile), buf, level) != level)
{
fprintf (stderr, "%s: write failed\n", myname);
exit (1);
}
fclose (outfile);
level = 0;
file_number++;
}
if (got == 0)
break;
}
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.