>'UTIL3
>N1
>f
 
 
                            pcheck - utility
                                  - # -
>X
pcheck
======
 
 
tHE pcheck uTILITY IS A COMPREHENSIVE dIRECTORY cHECK uTILITY.  iT ALLOWS THE USER TO COMPLETELY CHECK THE INTEGRITY OF DISK STORAGE SYSTEMS.  aLL ldos SUPPORTED DISK DEVICES MAY BE OPERATED ON, INCLUDING sINGLE/dOUBLE dENSITY, sINGLE/dOUBLE sIDED, 5" AND 8" FLOPPIES AND FIXED/REMOVABLE RIGID DISK SYSTEMS.  tHIS PROGRAM WILL LOCATE AND REPORT ANY INCONSISTENCIES IN THE DIRECTORY INFORMATION OF A DISK.  iN CONJUNCTION WITH pfix, MOST DIRECTORY PROBLEMS CAN BE EASILY CORRECTED WITHOUT EXTENSIVE KNOWLEDGE OF HOW DIRECTORIES ARE FORMATTED.  tHE SYNTAX OF THE pcheck COMMAND IS:
>JN
 
          =====================================================
          !  pcheck,*,:A                                      !
          !  pcheck,*,FILESPEC                                !
          !                                                   !
          !       :A = DRIVE NUMBER TO CHECK (COLON OPTIONAL) !
          !       FILESPEC = ANY VALID ldos FILESPEC          !
          !                                                   !
          !       AN ASTERISK (*) PRECEEDING THE COMMAND WILL !
          !       SEND THE OUTPUT TO THE VIDEO and PRINTER    !
          !                                                   !
          !  ABBR: none                                       !
          =====================================================
>JY
 
     aFTER SELECTING THE MODE OF OPERATION (FULL DISK OR FILE), THE ENTIRE DIRECTORY OF THE INDICATED DISK IS READ INTO MEMORY.  iF NOT ENOUGH MEMORY IS AVAILABLE, IT WILL BE REPORTED, AND THE PROGRAM WILL ABORT.  iF ANY ERRORS OCCURING DURING THE DIRECTORY READ, THEY WILL BE REPORTED, AND THE PROGRAM WILL PAUSE AND ALLOW YOU TO SELECT A r>ETRY, s>KIP, OR a>BORT.  aLTHOUGH IT IS POSSIBLE TO CHECK EVEN AN UNREADABLE DIRECTORY, UNPREDICTABLE ERRORS MAY BE REPORTED.  fOR THE NORMAL OPERATION OF THIS PROGRAM, IT IS ASSUMED THAT ALL SECTORS OF THE DIRECTORY ARE readable, EVEN THOUGH THEY MAY BE incorrect.
 
     eACH FILE SPECIFIED IS PASSED THROUGH A THREE STAGE CHECK.  tHIS WILL EITHER BE THE SINGLE FILE SPECIFIED, OR ALL FILES IF AN ENTIRE DISK IS SPECIFIED.  iN THE FIRST STAGE, THE INTEGRITY OF THE FILES DIRECTORY ENTRY IS CHECKED.  iN THE SECOND STAGE, THE ASSOCIATED hit TABLE BYTES ARE CHECKED.  iN THE THIRD STAGE, THE ASSOCIATED gat TABLE BYTES ARE CHECKED.  wHEN ALL SPECIFIED FILES HAVE BEEN CHECKED, AND ALL ERRORS HAVE BEEN REPORTED, A TOTAL ERROR COUNT WILL BE ISSUED AND THE PROGRAM WILL EXIT BACK TO dos.  tHE FILE pfix/cmd IS CAPABLE OF FIXING MOST ERRORS THAT MAY BE REPORTED BY pcheck.
 
     tHE FOLLOWING IS A LIST OF THE POSSIBLE ERROR MESSAGES THAT pcheck MAY REPORT.  a TECHNICAL SECTION WILL FOLLOW THAT WILL DESCRIBE THE LOGIC USED BY pcheck, AND PROBABLE CAUSES FOR THE ERROR CONDITIONS.
>F
 
1.   cYLINDER XXX HAS AN INVALID gat TABLE BYTE
2.   hit BYTE AT XXh INVALID OR EXTRANEOUS
3.   fILENAME CONTAINS NON-ASCII CHARACTERS
4.   eND OF fILE sECTOR BEYOND ALLOCATED SECTORS
5.   nO TERMINATOR FOR EXTENT FIELD
6.   dIRECTORY LINKS TO RECORD NOT LINKING BACK TO IT
7.   tRACK ASSIGNED THAT IS BEYOND DISKETTE BOUNDARY
8.   eXTENSION ASSIGNED BEFORE END OF EXTENTS
9.   fORWARD LINK TO INACTIVE ENTRY
10.  fORWARD LINK TO NON-EXTENSION ENTRY
11.  eXTENSION RECORD NOT ASSIGNED TO ANY FILES
12.  mULTIPLE FILES ASSIGNED TO SINGLE GRANULE
13.  dIRECTORY RECORD HAS INVALID hit BYTE
14.  dIRECTORY RECORD HAS A ZERO hit BYTE
15.  eXTENDED DIRECTORY RECORD HAS INVALID hit BYTE
16.  eXTENDED DIRECTORY RECORD HAS A ZERO hit BYTE
 
     tHIS SECTION CONTAINS THE LOGIC THAT pcheck USES TO DETERMINE THE CORRECTNESS OF THE DIRECTORY.  tHE NOVICE USER NEED NOT BE CONCERNED WITH THIS INFORMATION AS IT IS OFFERED ONLY AS TECHNICAL REFERENCE FOR THE ADVANCED USER.
     dURING PASSES 1-3, IF AN ERROR IS FOUND, IT IS REPORTED IN THE FOLLOWING FORMAT:
 
FILENAME/EXT       @ dIRECTORY sECTOR XX, rELATIVE bYTE XXh.
"ERROR MESSAGE STRING"
 
     iF A NON ASCII CHARACTER IS FOUND IN THE FILENAME, ITS POSITION WILL BE HIGHLIGHTED WITH A GRAPHIC BLOCK.  iN ALL ERRORS REPORTED IN THE ABOVE FORMAT, THE DIRECTORY LOCATION WILL REFER TO THE primary DIRECTORY RECORD, REGARDLESS OF WHERE THE ERROR OCCURED ALONG THE FILE.
 
pASS #1
 
     cHECK TO BE SURE THAT ALL 11 BYTES OF THE FILENAME CONTAIN CHARACTERS WITHIN THE RANGE OF 20h TO bfh (PRINTABLE ASCII CHARACTERS).  iF ANY ARE FOUND TO BE OUTSIDE THIS RANGE, REPORT ERROR 3.  tHE OFFENDING CHARACTERS ARE DISPLAYED AS A GRAPHIC BLOCK TO AID IN IDENTIFYING THEIR POSITIONS.
     tHE 5 EXTENTS OF THE ASSOCIATED RECORD ARE EACH CHECKED ON A SECTOR BY SECTOR BASIS.
     iF ANY EXTENT POINTS TO A TRACK THAT IS BEYOND THE DISKETTE BOUNDARY, REPORT ERROR 7.
     iF ALL 5 EXTENTS HAVE BEEN PARSED, AND NO TERMINATOR IS FOUND (feh OR ffh) THEN REPORT ERROR 5 AND TERMINATE.
     iF AN EXTENDED RECORD IS FOUND, AND IT IS NOT AT THE 5TH POSITION IN THE EXTENT FIELD, REPORT ERROR 8 AND CONTINUE.
     iF THE EXTENDED RECORD IS FOUND, LOCATE ITS POSITION IN THE DIRECTORY.  iF BIT 4 OF THE FIRST BYTE IN THE RECORD IS NOT SET (INACTIVE FILE), REPORT ERROR 9 AND TERMINATE.  iF BIT 7 IS NOT SET (NOT AN EXTENSION), REPORT ERROR 10 AND TERMINATE.  tHE SECOND BYTE IN THE ENTENDED RECORD IS A LINK BACK TO THE PREVIOUS RECORD.  iF THIS BYTE IS INCORRECT, REPORT ERROR 6 AND TERMINATE.
>F
     tHIS PROCESS CONTINUES UNTIL AN ffh TERMINATOR IS REACHED, OR A TERMINAL ERROR IS FOUND.
     wHEN PROCESSING IS COMPLETED, THE NUMBER OF SECTORS ASSIGNED TO THE FILE IS CALCULATED AND COMPARED TO THE END OF FILE SECTOR IN THE DIRECTORY RECORD.  iF THE END OF FILE IS LARGER THAN THE ALLOCATED RECORDS, REPORT ERROR 4.
 
pASS #2
 
     tHIS PASS CHECKS THE INTEGRITY OF THE ASSOCIATED hit BYTE FOR THE CURRENT FILE.  eACH FILE IS TRACED FROM ITS PRIMARY DIRECTORY ENTRY THROUGH ALL EXTENTS UNTIL AN ffh TERMINATOR OR A TERMINAL ERROR IS REACHED.
     iF THE PRIMARY DIRECTORY ENTRY CONTAINS AN INVALID hit BYTE, REPORT ERROR 13 AND CONTINUE.  iF THE PRIMARY DIRECTORY ENTRY CONTAINS A ZERO hit BYTE, REPORT ERROR 14 AND CONTINUE.
     iF AN EXTENDED DIRECTORY RECORD CONTAINS AN INVALID hit BYTE, REPORT ERROR 15 AND CONTINUE.  iF AN EXTENDED RECORD CONTAINS A ZERO hit BYTE, REPORT ERROR 16 AND CONTINUE.
 
pASS #3
 
     tHIS PASS CHECKS THE INTEGRITY OF THE ASSOCIATED gat BYTES FOR THE CURRENT FILE.  aS WITH PASS 2, EACH FILE IS TRACED THROUGH ALL OF ITS EXTENTS.
     iF THE CURRENT GRANULE HAS ALREADY BEEN ALLOCATED (EITHER BY ITSELF OR ANOTHER FILE), REPORT ERROR 12 AND CONTINUE.
     note:  oNLY A SINGLE ERROR 12 WILL BE REPORTED FOR A SINGLE FILE EVEN THOUGH THERE MAY BE SEVERAL OCCURANCES OF IT.
 
 
     wHEN THESE STEPS HAVE ALL BEEN COMPLETED, AND A SINGLE FILE HAS BEEN SPECIFIED, THE NUMBER OF ERRORS WILL BE REPORTED AND AN EXIT WILL BE MADE BACK TO dos.  iF AN ENTIRE DISK IS SPECIFIED, 3 ADDITIONAL CHECKS ARE MADE ON THE DIRECTORY.
 
cHECK #1
 
     wHEN pASS #1 IS MADE IN THE ABOVE PROCESS, IT CHECKS EVERY DIRECTORY RECORD THAT HAS BIT 4 SET AND BIT 7 not SET (ACTIVE PRIMARY DIRECTORY RECORD).  aS THE CURRENT FILE IS BEING CHECKED, BIT 5 OF ALL THE ASSOCIATED DIRECTORY PRIMARY AND EXTENDED RECORDS IS SET TO INDICATE A COMPLETED FILE.  dURING THE cHECK #1 PHASE, THE ENTIRE DIRECTORY IS RE-SCANNED.  iF ANY FILES HAVE BIT 4 SET, AND NOT BIT 5, THEN BIT 7 must BE SET AND ERROR 11 IS REPORTED.  tHIS CONDITION INDICATES AN EXTENDED DIRECTORY RECORD THAT HAS NOT BE LINKED TO ANY PRIMARY RECORD (AN EXTRANEOUS DIRECTORY RECORD).  tHIS CONDITION COULD RESULT IF ONE OF THE ABOVE PASSES TERMINATES ON A FATAL ERROR AND AN EXTENSION IS NOT CHECKED.  iF NO TERMINAL TYPE ERRORS ARE REPORTED, BUT ERROR 11 IS ISSUED, THEN THERE IS AN EXTRA RECORD IN THE DIRECTORY THAT IS NOT ASSOCIATED WITH ANY FILES.
>F
 
cHECK #2
 
     aS THE PROGRAM PROCESSES PASS #2, IT COMPLETELY BUILDS A SECOND hit TABLE IN ANOTHER BUFFER.  dURING THE CHECK #2 PHASE, THE COMPUTED TABLE IS COMPARED BYTE FOR BYTE WITH THE hit TABLE AS READ FROM THE DISKETTE.  iF ANY OF THE BYTES DO NOT MATCH, REPORT ERROR 2 AND THE RELATIVE BYTE OF THE MISMATCH.  iF NONE OF THE PASS #2 ERRORS ARE REPORTED, BUT ERROR 2 IS ISSUED, THEN THERE IS AN EXTRA BYTE IN THE hit TABLE AT THE CORRESPONDING LOCATION.
 
cHECK #3
 
     aS THE PROGRAM PROCESSES PASS #3, IT COMPLETELY BUILDS A SECOND gat TABLE IN ANOTHER BUFFER.  bEFORE CHECK 3 IS MADE, THE DISK LOCKOUT TABLE IS OVERLAID ONTO THE BUILT gat TABLE SO THAT LOCKED OUT TRACKS WILL NOT BE COUNTED.  dURING THE CHECK #3 PHASE, THE COMPUTED TABLE IS COMPARED BYTE FOR BYTE WITH THE gat TABLE AS READ FROM THE DISKETTE FOR AS MANY TRACKS AS THERE ARE ON THE DISK.  iF ANY OF THE BYTES DO NOT MATCH, REPORT ERROR 1 AND THE RELATIVE CYLINDER OF THE MISMATCH.  iF NONE OF THE PASS #3 ERRORS ARE REPORTED, BUT ERROR 1 IS ISSUED, THEN THERE ARE EXTRA GRANS ALLOCATED ON THE DISK THAT ARE NOT ASSIGNED TO ANY FILES.
 
     sOMETIMES, ONE TYPE OF AN ERROR WILL INHERENTLY CAUSE ANOTHER TYPE OF ERROR.  iN THESE CASES, FIXING EVEN ONE ERROR MAY CORRECT SEVERAL OTHERS.  aS AN EXAMPLE, IF THERE IS NO TERMINATOR FOR A RECORD, CHANCES ARE THAT ERROR 12 WILL BE REPORTED ALSO.  iF A TERMINAL ERROR IS FOUND IN A DIRECTORY LINK TO AN EXTENSION, ERROR 2 MAY ALSO BE REPORTED.
 
     wHEN USING THIS UTILITY ON rIGID DRIVES, THERE IS ONE ERROR THAT MAY BE REPORTED THAT SHOULD BE CONSIDERED NORMAL.  ldos SETS ASIDE AN EXTRA TRACK RIGHT NEXT TO THE DIRECTORY, AND SHOWS THIS TRACK AS ALLOCATED IN THE gat TABLE.  tHIS TRACK IS USED BY THE lAREDO SYSTEM AS OVERHEAD, AND SHOULD NOT BE USED.  pcheck MAY REPORT AN INVALID gat tABLE bYTE AT THIS TRACK LOCATION, AND IT SHOULD BE CONSIDERED NORMAL.  tHE rIGID DRIVE USER SHOULD BE AWARE OF THIS PROBLEM, ESPECIALLY AS IT RELATES TO THE pfix UTILITY, WHICH MAY DE-ALLOCATE THIS TRACK, OR ALLOCATE IT TO AN UNASSIGNED FILE.

