home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / TURBOPAS / ERASCHK2.ZIP / ERASECHK.PAS < prev   
Encoding:
Pascal/Delphi Source File  |  1986-02-15  |  4.2 KB  |  133 lines

  1. PROGRAM EraseChk (input,output,diskfile);
  2.  
  3. { Verifies that there are no readable sectors           }
  4. { Used after bulk erasing to ensure data destruction    }
  5. { Drive B is hardcoded by constant "drive" = 1          }
  6. {                                                       }
  7. { Edward Nisley / Microcomputer Consulting              }
  8. { PO Box 8086 Poughkeepsie NY 12603                     }
  9. { CompuServe 74065,1363                                 }
  10. {                                                       }
  11. { Application:  IBM PC, PC-DOS 2.0/3.0 only             }
  12. {               Turbo 3.0 used for compilation          }
  13.  
  14. {-------------------------------------------------------}
  15. { Compiler directives                                   }
  16.  
  17. {+R       want range checking on strings                }
  18. {+C       want ctrl-break checking for I/O              }
  19. {+U       want ctrl-break checking enabled              }
  20.  
  21. {-------------------------------------------------------}
  22. { Global constants                                      }
  23.  
  24. CONST
  25.  
  26.   datecode      = '1 July 85';
  27.  
  28.   drive         = 1;            { select drive B        }
  29.  
  30.   maxtrack      = 39;           { highest track number  }
  31.   maxhead       = 1;            { highest head number   }
  32.   maxsector     = 9;            { highest sector number }
  33.  
  34.   diskIO        = $13;          { diskette I/O intr     }
  35.   verify_op     = $04;          { verify sector opcode  }
  36.   nsects        = 1;            { num sects per op      }
  37.  
  38. {-------------------------------------------------------}
  39. { Global types                                          }
  40.  
  41. TYPE
  42.  
  43.   regtype         = RECORD CASE boolean OF
  44.     false : (AX,BX,CX,DX,BP,SI,DI,DS,ES,Flags : INTEGER);
  45.     true  : (AL,AH,BL,BH,CL,CH,DL,DH : BYTE);
  46.                   END;
  47.  
  48. {-------------------------------------------------------}
  49. { Global variables                                      }
  50.  
  51. VAR
  52.  
  53.   rc_0          : INTEGER;      { sectors not erased    }
  54.   rc_2          : INTEGER;      { other ret code totals }
  55.   rc_4          : INTEGER;
  56.   rc_16         : INTEGER;
  57.   rc_x          : INTEGER;
  58.  
  59.   rcode         : BYTE;         { disk op ret code      }
  60.  
  61.   regs          : regtype;      { for BIOS interrupts   }
  62.  
  63.   track         : 0..maxtrack;  { disk drive track      }
  64.   head          : 0..maxhead;   { disk drive head       }
  65.   sector        : 1..maxsector; { disk drive sector     }
  66.  
  67. {-------------------------------------------------------}
  68. { Start of the main routine                             }
  69.  
  70. BEGIN
  71.  
  72.   LowVideo;
  73.   ClrScr;
  74.   Writeln('EraseChk -- verifies sector destruction');
  75.   Writeln(datecode);
  76.   Writeln;
  77.  
  78.   rc_0  := 0;                   { count good sectors    }
  79.   rc_2  := 0;                   { count other ret codes }
  80.   rc_4  := 0;
  81.   rc_16 := 0;
  82.   rc_x  := 0;
  83.  
  84.  
  85.   FOR track := 0 TO maxtrack DO
  86.    FOR head := 0 TO maxhead DO
  87.     FOR sector := 1 TO maxsector DO BEGIN
  88.  
  89.      regs.AH := verify_op;      { set up opcode         }
  90.      regs.AL := nsects;         { read one sector only  }
  91.      
  92.      regs.DL := drive;          { set up sector IO      }
  93.      regs.DH := head;
  94.      regs.CH := track;
  95.      regs.CL := sector;
  96.     
  97.      Intr(diskIO,regs);         { do the verify op      }
  98.  
  99.      IF (regs.flags AND $0001) <> 0      { error?       }
  100.       THEN BEGIN
  101.        rcode := regs.AH;        { some error, bad read  }
  102.        CASE rcode OF
  103.         2  : rc_2  := rc_2  + 1;
  104.         4  : rc_4  := rc_4  + 1;
  105.         16 : rc_16 := rc_16 + 1;
  106.         ELSE rc_x  := rc_x  + 1;
  107.        END;
  108.       END
  109.       ELSE BEGIN                { no error, good read   }
  110.        rcode := 0;
  111.        rc_0 := rc_0 +1;
  112.       END;
  113.  
  114.      GoToXY(1,5);               { present status        }
  115.  
  116.      Writeln('Track:    ',regs.CH:4);
  117.      Writeln('Head:     ',regs.DH:4);
  118.      Writeln;
  119.      Writeln('Return code: ',rcode:4);
  120.      Writeln;
  121.      Writeln('RC Total Meaning');
  122.      Writeln(' 0 ',rc_0:4,' read OK, sector not destroyed');
  123.      Writeln(' 2 ',rc_2:4,' address mark not found');
  124.      Writeln(' 4 ',rc_4:4,' record not found');
  125.      Writeln('16 ',rc_16:4,' bad CRC');
  126.      Writeln(' ? ',rc_x:4,' other errors or combinations');
  127.  
  128.     END;
  129.  
  130.   Writeln;
  131.   Writeln('Program complete');
  132.  
  133. END.