>'UTIL4
>N1
>f
 
 
                            pfix - utility
                                - # -
>X
pfix
====
 
 
tHE pfix uTILITY IS A COMPREHENSIVE dIRECTORY rEPAIR uTILITY.  iT ALLOWS THE USER TO COMPLETELY REPAIR MOST DIRECTORY PROBLEMS, AND ALSO HAS THE ABILITY TO TRANSFER A FAULTY BOOT SECTOR FROM A GOOD DISK.  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 REPAIR MOST INCONSISTENCIES IN THE DIRECTORY INFORMATION OF A DISK.  iN CONJUNCTION WITH pcheck, MOST DIRECTORY PROBLEMS CAN BE EASILY LOCATED AND CORRECTED WITHOUT EXTENSIVE KNOWLEDGE OF HOW DIRECTORIES ARE FORMATTED.  tHE SYNTAX OF THE pfix COMMAND IS:
>JN
 
          =====================================================
          !  pfix,:A,g,h,f,b=:D,l,p                           !
          !                                                   !
          !       :A = DRIVE NUMBER TO FIX (COLON OPTIONAL)   !
          !       g  = REPAIR gat TABLE                       !
          !       h  = REPAIR hit TABLE                       !
          !       f  = REPAIR MISSING/INVALID fILE DATA       !
          !       b  = REPAIR boot SECTOR                     !
          !       :D = TAKE BOOT SECTOR FROM THIS DRIVE       !
          !            (MANDATORY IF b IS SPECIFIED)          !
          !       l  = LOCKOUT CYLINDER ABOVE DIRECTORY       !
          !            (RIGID SYSTEMS ONLY)                   !
          !       p  = PROMPT FOR CYLS, DENSITY, SIDES        !
          !            (SHOULD BE LAST PARAMETER SPECIFIED    !
          !                                                   !
          !       aT LEAST one PARAMETER must BE SPECIFIED    !
          !                                                   !
          !  ABBR: none                                       !
          =====================================================
>JY
 
     aFTER SELECTING THE DESIRED PARAMETERS, THE ENTIRE DIRECTORY OF THE INDICATED DISK IS READ INTO MEMORY.  iF THE p OPTION IS NOT SPECIFIED, THE PROGRAM WILL USE THE INFORMATION SUPPLIED BY ldos DEFINING THE DISKETTE CYLINDER COUNT, NUMBER OF SIDES, AND DENSITY.  tHIS INFORMATION IS LOCATED IN THE gat SECTOR OF THE DISKETTE AT FORMAT TIME.  iF IT IS POSSIBLE THAT THIS PARTICULAR INFORMATION IS INVALID, USE THE p OPTION, AND YOU WILL BE PROMPTED TO ENTER THESE PARAMETERS.  iF, FOR EXAMPLE, THE ENTIRE gat SECTOR IS ZEROED OUT, ldos WILL REPORT THIS TO BE A XXXXXX DENSITY, SINGLE SIDED, 35 TRACK DISK.  iF THE gat IS FIXED USING THESE PARAMETERS, AND THE DISK IS really A 40 TRACK DISK, THE CORRECTIONS WILL BE INACCURATE.
 
     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 REPAIR EVEN AN UNREADABLE DIRECTORY, UNPREDICTABLE ERRORS MAY BE GENERATED.  fOR THE NORMAL OPERATION OF THIS PROGRAM, IT IS ASSUMED THAT ALL SECTORS OF THE DIRECTORY ARE readable, EVEN THOUGH THEY MAY BE incorrect.
>F
     eACH FILE OF THE DIRECTORY IS PASSED THROUGH A THREE STAGE PROCESS.  iN THE FIRST STAGE, THE INTEGRITY OF THE FILES DIRECTORY ENTRY IS FIXED.  iN THE SECOND STAGE, THE ASSOCIATED hit TABLE BYTES ARE FIXED.  iN THE THIRD STAGE, THE ASSOCIATED gat TABLE BYTES ARE FIXED.  wHEN ALL SPECIFIED FILES HAVE BEEN CHECKED, AND ALL ERRORS HAVE BEEN CORRECTED, THE CORRECTED DATA WILL BE WRITTEN BACK TO DISK PER THE COMMAND PARAMETERS.  eITHER THE gat, hit, FILE RECORDS, AND/OR boot SECTOR WILL BE UPDATED TO THE DISK.  aLTHOUGH THE ENTIRE DIRECTORY IS REPAIRED IN MEMORY, ONLY THE REQUESTED DATA TO BE FIXED IS WRITTEN BACK OUT TO THE DISK.  tHE FILE pfix/cmd IS CAPABLE OF FIXING MOST ERRORS THAT MAY BE REPORTED BY pcheck.
 
      iF ONLY THE gat AND/OR hit ARE SPECIFIED, AND AN ERROR IS FOUND IN ANY OF THE FILES DIRECTORY RECORDS, THE FIX WILL ABORT AND A MESSAGE WILL BE REPORTED TO USE THE "f" OPTION.  tHIS IS BECAUSE IT WOULD BE UNRELIABLE TO REPAIR A gat OR hit WHEN THE ROOT INFORMATION IS INVALID.  tHIS IS TO PREVENT A USER FROM INADVERTENTLY DESTROYING ANY RELEVANT DATA.
 
     tHE FOLLOWING IS A LIST OF THE ERRORS THAT pcheck CAN FIX.  a TECHNICAL SECTION WILL FOLLOW THAT WILL DESCRIBE THE LOGIC USED BY pfix, AND PROBABLE CAUSES FOR THE ERROR CONDITIONS.
 
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 pfix USES TO REPAIR THE DIRECTORY.  tHE NOVICE USER NEED NOT BE CONCERNED WITH THIS INFORMATION AS IT IS OFFERED ONLY AS TECHNICAL REFERENCE FOR THE ADVANCED USER.
 
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, REPLACE WITH AN "x".  (iF THIS OCCURS, A hit REPAIR WILL BE REQUIRED TO ACCESS THIS FILE FROM dos)
     tHE 5 EXTENTS OF THE ASSOCIATED FILE RECORD ARE EACH CHECKED ON A SECTOR BY SECTOR BASIS.
     iF ANY EXTENT POINTS TO A TRACK THAT IS BEYOND THE DISKETTE BOUNDARY, ENTER A TERMINATOR (ffh) AT THE CURRENT LOCATION.
     iF ANY GRANULES ARE INDICATED IN A FILE'S EXTENTS, AND THE CORRESPONDING gat BIT IS SET (ASSIGNED TO A PREVIOUS FILE), THE RECORD WILL BE TERMINATED AT THE CURRENT LOCATION.
     iF ALL 5 EXTENTS HAVE BEEN PARSED, AND NO TERMINATOR FOUND (feh OR ffh) THEN ENTER A TERMINATOR AT THE LAST POSITION.
>N59
     iF AN EXTENDED RECORD IS FOUND, AND IT IS NOT AT THE 5TH POSITION IN THE EXTENT FIELD, IGNORE 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), DELINK THE EXTENSION.  iF BIT 7 IS NOT SET (NOT AN EXTENSION), DELINK THE EXTENSION.  tHE SECOND BYTE IN THE ENTENDED RECORD IS A LINK BACK TO THE PREVIOUS RECORD.  iF THIS BYTE IS INCORRECT, DELINK THE EXTENSION.
     tHE DE-LINKING OF THE FILES IS TO PROTECT AGAINST POSSIBLE OVERLAYING ANOTHER FILE THAT DOES NOT IN FACT LINK BACK TO THE PRIMARY.  bY DE-LINKING A FILE, DATA PAST THE DE-LINK WILL BE LOST, BUT THE DATA WILL NOT ACCIDENTALLY BE FORCE-LINKED TO AN INCORRECT ENTRY.
     tHIS PROCESS CONTINUES UNTIL AN ffh TERMINATOR IS REACHED, OR A TERMINAL ERROR IS FOUND AND A TERMINATOR IS FORCED.
     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, THEN FORCE THE NUMBER OF ALLOCATED RECORDS INTO THE END OF FILE SECTOR.
 
pASS #2
 
     tHIS PASS CONSTRUCTS THE hit TABLE.  eACH FILE IS TRACED FROM ITS PRIMARY DIRECTORY ENTRY THROUGH ALL EXTENTS UNTIL AN ffh TERMINATOR IS REACHED.  tHE ENTIRE hit TABLE WILL BE RE-CONSTRUCTED STARTING WITH A PAGE (256 BYTES) OF ZEROES.  aLL ACTIVE PRIMARY AND EXTENDED DIRECTORY RECORDS ARE LOGGED CORRECTLY INTO THIS TABLE.
 
pASS #3
 
     tHIS PASS CONSTRUCTS THE gat TABLE.  aS WITH PASS 2, EACH FILE IS TRACED THROUGH ALL OF ITS EXTENTS.  tHE ENTIRE gat TABLE WILL BE RE-CONSTRUCTED STARTING WITH ALL NULL CHARACTERS.  aLL ACTIVE PRIMARY AND EXTENDED DIRECTORY RECORDS ARE LOGGED CORRECTLY INTO THIS TABLE.
 
 
     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, REPAIRING THIS WILL SOMETIMES CORRECT A MULTIPLE FILES ASSIGNED TO A SINGLE GRANULE ERROR.
 
     wHEN USING THIS UTILITY ON rIGID DRIVES, THERE IS ONE ERROR THAT MAY BE REPAIRED THAT THE USER SHOULD BE MADE AWARE OF.  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.  tHE pfix UTILITY WILL DE-ALLOCATE THIS GRANULE, AS IT IS NOT ASSIGNED TO ANY FILES.  tHIS IS ONLY ON THE lAREDO SYSTEM, AND CANNOT BE DETECTED VIA THE dct PARAMETERS.  dUE TO THIS SITUATION, pfix WILL ALLOCATE THIS TRACK IF THE FOLLOWING CONDITIONS ARE MET:
     tHE DRIVE BEING FIXED MUST BE A rIGID DRIVE.
     tHE gat FIX OPTION MUST HAVE BEEN SPECIFIED.
     tHE gat ENTRY FOR THE CYLINDER IMMEDIATELY PAST THE DIRECTORY MUST BE A NULL BYTE (NOT ALLOCATED TO ANY FILES) after THE gat RE-BUILD.
     tHE l OPTION MUST HAVE BEEN SPECIFIED.
 
     iF THESE CONDITIONS ARE MET, THEN THE EXTRA TRACK IS AUTOMATICALLY ALLOCATED.  tHIS COULD ESSENTIALLY LOCK-OUT AN AVAILABLE TRACK ON A NON-lAREDO SYSTEM, BUT WILL CAUSE NO OTHER PROBLEMS.  iF YOU ARE NOT SURE IF YOUR RIGID SYSTEM USES THIS CYLINDER OR NOT, THEN USE THE l OPTION.  iT IS BETTER TO LOCK OUT A CYLINDER THAN CRASH THE SYSTEM.

