home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / progc / djsrc106.arj / DJTART.C < prev    next >
C/C++ Source or Header  |  1992-04-18  |  1KB  |  70 lines

  1. #include <stdio.h>
  2. #include <fcntl.h>
  3. #include <sys/stat.h>
  4. #include <string.h>
  5. #include <errno.h>
  6. #include <io.h>
  7.  
  8. #include "oread.h"
  9.  
  10. void Fatal(char *msg)
  11. {
  12.   fprintf(stderr, "Fatal! %s!\n", msg);
  13.   exit(1);
  14. }
  15.  
  16. /*------------------------------------------------------------------------*/
  17.  
  18. main(int argc, char **argv)
  19. {
  20.   int i = 1;
  21.   for (; i < argc; i++)
  22.     tarlist(argv[i]);
  23. }
  24.  
  25. /*------------------------------------------------------------------------*/
  26.  
  27. typedef struct {
  28.   char name[100];
  29.   char operm[8];
  30.   char ouid[8];
  31.   char ogid[8];
  32.   char osize[11];
  33.   char otime[12];
  34.   char ocsum[8];
  35.   char flags[2];
  36.   char filler[355];
  37. } TARREC;
  38.  
  39. char buf[512];
  40.  
  41. tarlist(char *fname)
  42. {
  43.   TARREC header;
  44.   int r;
  45.   void *f;
  46.   long perm, uid, gid, size, time, csum, posn=0;
  47.   int dsize;
  48.   char *changed_name;
  49.   f = oread_open(fname);
  50.  
  51.   while (1)
  52.   {
  53.     oread_read(f, &header);
  54.     if (header.name[0] == 0)
  55.       break;
  56.     sscanf(header.operm, "%lo", &perm);
  57.     sscanf(header.ouid, "%lo", &uid);
  58.     sscanf(header.ogid, "%lo", &gid);
  59.     sscanf(header.osize, "%lo", &size);
  60.     sscanf(header.otime, "%lo", &time);
  61.     printf("%08lx %6lo %12ld %s", posn, perm, size, header.name, posn);
  62.     if (header.flags[1] == 0x32)
  63.       printf(" -> %s", header.filler);
  64.     printf("\n");
  65.     oread_skip(f, (size+511) & ~511);
  66.     posn += 512 + (size+511) & ~511;
  67.   }
  68.   oread_close(f);
  69. }
  70.