home *** CD-ROM | disk | FTP | other *** search
/ Media Share 13 / mediashare_13.zip / mediashare_13 / ZIPPED / PROGRAM / SNPD9404.ZIP / SPLIT.C < prev    next >
C/C++ Source or Header  |  1994-04-03  |  2KB  |  72 lines

  1. /*
  2. **  SPLIT.C - A utility to split large text files into smaller files
  3. **
  4. **  public domain by Bob Stout
  5. **
  6. **  uses PSPLIT.C from SNIPPETS
  7. */
  8.  
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12.  
  13. #ifdef __TURBOC__
  14.  #define FAR far
  15. #else
  16.  #define FAR _far
  17. #endif
  18.  
  19. void psplit(char *, char *, char *, char *, char *);
  20.  
  21. int main(int argc, char *argv[])
  22. {
  23.       long newsize = 32L * 1024L;
  24.       size_t seq = 0;
  25.       char fname[FILENAME_MAX];
  26.       FILE *from;
  27.  
  28.       if (2 > argc)
  29.       {
  30.             puts("SPLIT big_file [size_in_K]\n");
  31.             puts("creates files of the same name, "
  32.                   "but with numeric extensions");
  33.             puts("a maximum file size may be specified for new files");
  34.             return EXIT_SUCCESS;
  35.       }
  36.       if (2 < argc)
  37.       {
  38.             newsize   = atol(argv[2]);
  39.             newsize <<= 10;
  40.       }
  41.       if (NULL == (from = fopen(argv[1], "r")))
  42.       {
  43.             printf("\aSPLIT: error - can't open %s\n", argv[1]);
  44.             return EXIT_FAILURE;
  45.       }
  46.       psplit(argv[1], NULL, NULL, fname, NULL);
  47.       while (!feof(from))
  48.       {
  49.             char newname[FILENAME_MAX], buf[1024];
  50.             FILE *to;
  51.             long bytes;
  52.  
  53.             sprintf(newname, "%s.%03d", fname, seq++);
  54.             if (NULL == (to = fopen(newname, "w")))
  55.             {
  56.                   printf("\aSPLIT: error - can't write %s\n", newname);
  57.                   return EXIT_FAILURE;
  58.             }
  59.             for (bytes = 0L; !feof(from) && (bytes < newsize); )
  60.             {
  61.                   if (fgets(buf, 1023, from))
  62.                   {
  63.                         fputs(buf, to);
  64.                         bytes += (long)strlen(buf);
  65.                   }
  66.             }
  67.             fclose(to);
  68.             printf("%s written\n", newname);
  69.       }
  70.       return EXIT_SUCCESS;
  71. }
  72.