home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format 55 / af055a.adf / unixutil / splitlzh.c < prev   
C/C++ Source or Header  |  1992-08-27  |  1KB  |  68 lines

  1. /*
  2.  * splitlzh - Split a LZH file into a multivolume archive suitable for
  3.  *            processing by LhA.
  4.  *
  5.  * This is freely distributable. Do with it whatever you desire.
  6.  *
  7.  * Written by Stefan Boberg, 1992
  8.  *
  9.  */
  10.  
  11. #include <stdio.h>
  12. #include <string.h>
  13.  
  14. #define EXIT_FAILURE 1
  15.  
  16. FILE *open_vol(name, no)
  17. char *name;
  18. long no;
  19. {
  20.   char work[1024];
  21.  
  22.   if (no)
  23.     sprintf(work, "%s.l%02d", name, no);
  24.   else
  25.     sprintf(work, "%s.lzh", name);
  26.  
  27.   return fopen(work, "wb");
  28. }
  29.  
  30. int main(argc, argv)
  31. int argc;
  32. char **argv;
  33. {
  34.   char buffer[1024];              /* Small I/O buffer */
  35.   FILE *in, *out;
  36.   long size, i, j = 1024, vol_no = 0;
  37.  
  38.   if (argc != 4) {
  39.     printf("Usage: %s <arcsize in KB> <infile> <outname>\n", argv[0]);
  40.     exit(EXIT_FAILURE);
  41.   }
  42.  
  43.   size = atoi(argv[1]);
  44.  
  45.   if (in = fopen(argv[2], "rb")) {
  46.     while (!feof(in)) {
  47.       if (out = open_vol(argv[3], vol_no++)) {
  48.         i = size;
  49.  
  50.         while((i--) && (j == 1024)) {
  51.           j = fread(buffer, 1, 1024, in);
  52.           fwrite(buffer, 1, j, out);
  53.         }
  54.         fclose(out);
  55.       } else {
  56.         fclose(in);
  57.         printf("Error opening volume %d!\n\n", vol_no);
  58.         exit(EXIT_FAILURE);
  59.       }
  60.     }
  61.   } else {
  62.     printf("Error opening source!!\n\n");
  63.     exit(EXIT_FAILURE);
  64.   }
  65.  
  66.   return 0;
  67. }
  68.