home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / diskutil / tapebios / dumpdir.c < prev    next >
C/C++ Source or Header  |  1993-08-06  |  2KB  |  88 lines

  1. /* Directory of a dump tape                 */
  2. /* This program is part of the TapeBIOS distribution    */
  3. /* Written by Alan Hourihane 1992            */
  4. /* Needs TapeBIOS driver loaded                */
  5.  
  6. #include <osbind.h>
  7. #include <stdio.h>
  8. #include "tapebind.h"
  9.  
  10. extern void bzero();
  11. extern long get_cookie();
  12. extern void exit();
  13. extern int Request_Sense();
  14. extern int atoi();
  15. extern int strcmp();
  16.  
  17. #define NUMLEN    10
  18. #define IDPOS    64
  19.  
  20. typedef struct {            /* BIOS Parameter Block Structure */
  21.     short      recsiz;
  22.     short      clsiz;
  23.     short      clsizb;
  24.     short      rdlen;
  25.     short      fsiz;
  26.     short      fatrec;
  27.     short      datrec;
  28.     short      numcl;
  29.     short      bflags;
  30. } bpb;
  31.  
  32. int
  33. main(argc,argv)
  34. int    argc;
  35. char    *argv[];
  36. {
  37.     int    spacing;
  38.     char    buffer[512];          /* Buffer for header block */
  39.     char    *sname;         /* Pointer to the name */
  40.     char    drvnam;         /* Original source drive name */
  41.     int    sctsiz;         /* sector size */
  42.     long     numsct;         /* Number of sectors on drive */
  43.     int    r;              /* Used for results */
  44.     int    status;
  45.  
  46.     printf("Read Dumped Drives from Tape. Copyright 1992, A. Hourihane.\r\n");
  47.  
  48.     if (argc!=1) {
  49.         fprintf(stderr,"Usage: %s <no parameters>\r\n",argv[0]);
  50.         exit(1);
  51.     }
  52.  
  53.     if (!get_cookie("TAPE")) {
  54.         printf("TapeBIOS is not installed.\r\n");
  55.         exit(1);
  56.     }
  57.  
  58.     status = Tload(0L);
  59.     status = Trewind();
  60.  
  61.     for (;;) { 
  62.         bzero(buffer,512);
  63.         r=Tread(buffer,1L);     /* Read the header */
  64.         if(r == 2) {
  65.             status = Request_Sense();
  66.             fprintf(stderr,"Error reading header block or End of Archive.\r\n");
  67.             status = Trewind();
  68.             status = Tunload(0L);
  69.             exit(0);
  70.         }
  71.         drvnam=buffer[0];
  72.         sctsiz=atoi(&buffer[1]);
  73.         numsct=atoi(&buffer[1+NUMLEN]);
  74.         sname=&buffer[1+NUMLEN*2];
  75.         if (strcmp("DUMPFORMAT",&buffer[IDPOS])) {
  76.             fprintf(stderr, "Tape not in DUMP format.\r\n");
  77.             status = Trewind();
  78.             status = Tunload(0L);
  79.             exit(1);
  80.         }
  81.         printf("Original source drive: %c, Sector size: %d bytes, Drive size = %.1fK\r\n",drvnam,sctsiz,(float)numsct*(float)sctsiz/1024);
  82.         printf("Dump name: %s\r\n",sname);
  83.         for (spacing=1;spacing<=(sctsiz/512);spacing++) 
  84.             r = Tspace(numsct);
  85.     } 
  86.     exit(0);
  87. }
  88.