home *** CD-ROM | disk | FTP | other *** search
/ PC Extra Super CD 1998 January / PCPLUS131.iso / DJGPP / V2 / DJLSR201.ZIP / src / utils / merge.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-07-12  |  1.1 KB  |  65 lines

  1. /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
  2. #include <stdio.h>
  3. #include <fcntl.h>
  4. #include <unistd.h>
  5.  
  6. #ifndef O_BINARY
  7. #define O_BINARY 0
  8. #endif
  9.  
  10. #define BUFS 16384
  11.  
  12. static void
  13. usage(void)
  14. {
  15.   fprintf(stderr,"Usage: merge [inputBase] [outputFile]\n");
  16.   fprintf(stderr, "reads <inputBase>.000, <inputBase>.001, etc\n");
  17.   exit(1);
  18. }
  19.  
  20. static int
  21. p_open(char *ob, int p)
  22. {
  23.   char partname[1024];
  24.   sprintf(partname, "%s.%03d", ob, p);
  25.   return open(partname, O_RDONLY|O_BINARY);
  26. }
  27.  
  28. int
  29. main(int argc, char **argv)
  30. {
  31.   char buf[BUFS];
  32.   long r;
  33.   int partnum;
  34.   int outf, f;
  35.   
  36.   if (argc != 3)
  37.     usage();
  38.  
  39.   outf = open(argv[2], O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0666);
  40.   if (outf < 0)
  41.     usage();
  42.  
  43.   partnum = 0;
  44.   f = p_open(argv[1], partnum);
  45.   while (1)
  46.   {
  47.     r = read(f, buf, BUFS);
  48.  
  49.     if (r <= 0)
  50.     {
  51.       close(f);
  52.       partnum++;
  53.       f = p_open(argv[1], partnum);
  54.  
  55.       if (f < 0)
  56.       {
  57.         close(outf);
  58.         exit(0);
  59.       }
  60.     }
  61.     
  62.     write(outf, buf, r);
  63.   }
  64. }
  65.