home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume5 / bsplit < prev    next >
Internet Message Format  |  1989-02-03  |  5KB

  1. Path: xanth!nic.MR.NET!hal!ncoast!allbery
  2. From: knop@dutesta.UUCP (Peter Knoppers, Delft Univ. of Technology)
  3. Newsgroups: comp.sources.misc
  4. Subject: v05i083: bsplit - a split-like program for binary files
  5. Message-ID: <1238@dutesta.UUCP>
  6. Date: 14 Dec 88 03:10:06 GMT
  7. Sender: allbery@ncoast.UUCP
  8. Reply-To: knop@dutesta.UUCP (Peter Knoppers, Delft Univ. of Technology)
  9. Organization: DELFT UNIVERSITY OF TECHNOLOGY Faculty of Electrical Engineering Computer architecture and Digital Technique Mekelweg 4   -   2628 CD  Delft
  10. Lines: 162
  11. Approved: allbery@ncoast.UUCP
  12.  
  13. Posting-number: Volume 5, Issue 83
  14. Submitted-by: "Peter Knoppers, Delft Univ. of Technology" <knop@dutesta.UUCP>
  15. Archive-name: bsplit
  16.  
  17. Below follows my program bsplit.c. It is a short and simple program
  18. that we use rather often. Manual is not included, as the use is
  19. almost identical to that of the un*x split program. As furnished
  20. it compiles and works on the systems that I tried. It may not
  21. work on systems where ints are 16 bits. For local use you may
  22. change this program into anything you like.
  23.  
  24. Modified versions must not be re-distributed. Distribution of the
  25. original version with diff is OK. If someone really improves this,
  26. mail the diffs to me, so that I can re-post the really-improved 
  27. version. The copyright message is there to prevent uncontrolled
  28. spreading of many slightly different versions.
  29.  
  30. My present email address is knop@dutesta.UUCP, this will soon
  31. change to knop@duteca.UUCP.
  32.  
  33. #! /bin/sh
  34. # This file was wrapped with "dummyshar".  "sh" this file to extract.
  35. # Contents:  bsplit.c
  36. echo extracting 'bsplit.c'
  37. if test -f 'bsplit.c' -a -z "$1"; then echo Not overwriting 'bsplit.c'; else
  38. sed 's/^X//' << \EOF > 'bsplit.c'
  39. X/*
  40. X * bsplit.c - split binary files in manageable pieces.
  41. X * usage is exactly like the split program.
  42. X *
  43. X * This program was written from scratch, without looking at the
  44. X * sources of split.
  45. X *
  46. X * Copyright (C) 1988 P. Knoppers
  47. X *                    Bilderdijkhof 59
  48. X *                    2624 ZG  Delft
  49. X *                    The Netherlands
  50. X */
  51. X
  52. Xchar copy0[] = "Copyright (C) 1988 P. Knoppers";
  53. Xchar copy1[] = "Permission to use and distribute copies of this";
  54. Xchar copy2[] = "program WITH SOURCE is granted to anyone, provided";
  55. Xchar copy3[] = "that it is NOT CHANGED in any way.";
  56. X
  57. X#include <stdio.h>
  58. X#define DEFSIZE 50000
  59. X#define DEFPREFIX "x"
  60. X#define MAXNAME 200
  61. X
  62. Xchar   *malloc ();
  63. X
  64. Xmain (argc, argv)        /* bsplit - split binary file */
  65. Xchar   *argv[];
  66. X{
  67. X    char   *buf;
  68. X    char   *myname;
  69. X    int     bulksize = DEFSIZE;
  70. X    int     level;
  71. X    int     got;
  72. X    int     fno = 0;
  73. X    char    outfname[MAXNAME + 1];
  74. X    char    outbase[MAXNAME + 3];
  75. X    int     foundinname = 0;
  76. X    FILE * infile = stdin;
  77. X    FILE * outfile;
  78. X
  79. X    myname = *argv;
  80. X    strcpy (outbase, DEFPREFIX);
  81. X    while (--argc > 0)
  82. X    {
  83. X    argv++;
  84. X    if ((*argv)[0] == '-')
  85. X    {
  86. X        if ((*argv)[1] == '\0')
  87. X        {
  88. X        if (foundinname != 0)
  89. X        {
  90. X            fprintf (stderr,
  91. X                "usage: %s [-size] [file [prefix]]\n",
  92. X                myname);
  93. X            exit (1);
  94. X        }
  95. X        foundinname++;
  96. X        }
  97. X        else
  98. X        if (sscanf (*argv, "-%d", &bulksize) != 1)
  99. X        {
  100. X            fprintf (stderr,
  101. X                "usage: %s [-size] [file [prefix]]\n",
  102. X                myname);
  103. X            exit (1);
  104. X        }
  105. X    }
  106. X    else
  107. X        if (foundinname != 0)
  108. X        {
  109. X        if (strlen (*argv) > MAXNAME)
  110. X        {
  111. X            fprintf (stderr, "%s: prefix too long\n",
  112. X                myname);
  113. X            exit (1);
  114. X        }
  115. X        strcpy (outbase, *argv);
  116. X        }
  117. X        else
  118. X        {
  119. X        if ((infile = fopen (*argv, "r")) == NULL)
  120. X        {
  121. X            fprintf (stderr, "%s: cannot open %s\n",
  122. X                myname, *argv);
  123. X            exit (1);
  124. X        }
  125. X        foundinname++;
  126. X        }
  127. X    }
  128. X
  129. X    if ((buf = malloc (bulksize)) == NULL)
  130. X    {
  131. X    fprintf (stderr, "%s: malloc failed\n", myname);
  132. X    exit (1);
  133. X    }
  134. X    level = 0;
  135. X    while (1)
  136. X    {
  137. X    got = read (fileno (infile), &buf[level], bulksize - level);
  138. X    level += got;
  139. X    if ((level < bulksize) && (got > 0))
  140. X        continue;
  141. X    if ((level == bulksize) || ((got == 0) && (level > 0)))
  142. X    {
  143. X        sprintf (outfname, "%s%c%c", outbase, fno / 26 + 'a',
  144. X            fno % 26 + 'a');
  145. X        if ((outfile = fopen (outfname, "w")) == NULL)
  146. X        {
  147. X        fprintf (stderr, "%s: cannot create %s\n", myname,
  148. X            outfname);
  149. X        exit (1);
  150. X        }
  151. X        if (write (fileno (outfile), buf, level) != level)
  152. X        {
  153. X        fprintf (stderr, "%s: write failed\n", myname);
  154. X        exit (1);
  155. X        }
  156. X        fclose (outfile);
  157. X        level = 0;
  158. X        fno++;
  159. X    }
  160. X    if (got == 0)
  161. X        break;
  162. X    }
  163. X}
  164. EOF
  165. chars=`wc -c < 'bsplit.c'`
  166. if test $chars !=    2804; then echo 'bsplit.c' is $chars characters, should be    2804 characters!; fi
  167. fi
  168. exit 0
  169. -- 
  170.  _____      __  __  __  __   ____   _____   _____   ______  _____    _____ 
  171. |  _  \    |  |/  ||  \|  | /    \ |  _  \ |  _  \ |   ___||  _  \  /  ___|
  172. |   __/ _  |     < |      ||  ||  ||   __/ |   __/ |   >__ |     <  \__  \
  173. |__|   |_| |__|\__||__|\__| \____/ |__|    |__|    |______||__|\__||_____/
  174. P. Knoppers, Delft Univ. of Technology, The Netherlands - knop@dutesta.UUCP
  175.