FixDisk V1.0 (C) Copyright Werner Gunther 1989 Freeware USE THIS PROGRAM AT YOUR OWN RISK FixDisk is a program to recover as much as possible from a defective disk. I don't claim it is better than 'Diskdoctor' or 'DiskSalv', but it has some features the others don't have: first of all it can recover damaged (unreadable) tracks, it has functions to check file integrity, to check the directory structure and functions to undelete, copy or show (even defective) files, fix corrupted directory pointers etc. Everything can be selected with an intuition interface, so everyone can determine what action should be take place by himself. Now the bad news: The program does not keep track of 'loose blocks' i.e. files without a file header like DiskSalv. It does only work with disks / partitions using a maximum of 4063 blocks. It may work with larger disks too, but I don't have a hard disk, so I couldn't test it out. Disks with more than 4063 blocks are rejected by the program. You may force the program to accept <48 MB partitions adding 'DOOM' to the command line (i.e. 'FixDisk doom'). As I said before, it has not been tested and should only be used if anything else failed, and you're just about to format the partition. USAGE: After starting FixDisk from Cli or Workbench you will see a set of gadgets with the available drives on the top of the window. Choose the desired drive by clicking it's gadget. If the choosen drive is a 3.5" or a 5.25" drive you will be asked to insert a disk. Now the program starts to read in the disk, cylinder by cylinder searching for file/directory headers. This may take a while, please be patient. Beside read errors you may get some other messages at this point: Block 0 has to start with 'DOS' or 'KICK'. If it does not, you are asked if you want to fix it. The program couldn't find the root block and FixDisk wants to build a new one. The disk isn't validated, the program is going to validate it. There is no root block and no file header on the disk, the disk is probably a custom disk (or the Kickstart disk). FixDisk won't check anything (and won't let you check, change or fix anything) except read errors. You may press break (CTRL-C) anytime if you want to abort this operation. When the disk has been examined, you'll get a file requester on the left half of the window. The first column shows the 'key' (the block number where the file header has been found), followed by 'DEL' for deleted files or '-->', followed by the filename. Red (Color 3) entries are directories. Click on the filename to select it or shift-click for multiple selections. Doubleclick a directory to enter the directory. The right half of the window is filled with 17 Gadgets. As you will notice some of them are disabled at startup. These are gadgets that will write onto the disk. To enable them you have to choose 'Write enable' from the 'Miscellaneous' menu (there is only one menu anyway). THE GADGETS: Directory - Parent This gadget is part of the file requester. The requester will show the files from the parent directory. Directory - Root Same as above, but steps to the root directory. Show - Selected Shows a file in Hex or ASCII. Like all other commands, the file is processed without using DOS, but each sector (block) is read in, checked and displayed. It works exactly the same way 'Copy' (see below) would do, so you can use this function to see, what exactly can be recovered from a defective file. If the file is on a 'Standard Filesystem' (non FFS) disk, you will be asked where the program should take the file links from. Each block that belongs to a file is listed in the file header block (and in one or more 'file list blocks' if the file is too large). On the 'Standard Filesystem' each data block has a pointer to the next block belonging to the same file, too. So we have two ways to determine how the file is build up: using the links listed in the file header, or using the inter-block links. Anyway, it is much safer if you select the file header links, if only one block is wrong, you'll get a lot of rubbish using the inter-block links. Check Files - Selected This function checks the selected files. With the Standard Filesystem it is very easy to determine if a file is ok or defective, as each data block has a checksum, a pointer to the file header, pointer to the next block etc. This is not the case with the FFS and there is no way to determine if a given data block really belongs to that file. So, even if the file passes the test, it may still be corrupted. Check Files - Deleted Checks only deleted files, so you can see which one can be undeleted. Check Files - All Checks all files. Undelete Files - Selected The first thing this function does, is calling 'check file'. If the file seems to be ok, the file header is inserted into the hash chain of it's parent directory and the bitmap will be updated, but the 'Bitmap Flag' will change to 'FALSE', just to make sure the disk is going to be validated after this operation. Undelete Files - All Tries to undelete all deleted files. Copy Files - Selected Works like 'Show' (see above). You'll be asked to enter a output path/directory, if the directory gets full, you may enter a new path. If a given file already exists in the destination directory, the program will append '.2' to the filename (if '.2' exits too, you'll get '.2.2', don't tell me this is dumb, I know that already). Like 'Check File' you may get some error messages while the program is working. If a block doesn't seem to belong to a given file, you'll be asked to 'SKIP IGNORE ABORT'. 'Skip' means, the damaged block won't be copied, 'Ignore' the block will be copied, no matter what is on that block, 'Abort' leaves 'Copy Files'. Protection bits are preserved, dates are not. Copy Files - All Copies the entire disk, trying to recover as much as possible. Wipe Files - Selected This function clears the file header of a deleted file. Utilities like 'Diskdoctor', 'DiskSalv' will try to recover all files, even if they have been deleted. If you don't want some files to pop up again using one of the programs above, you may use this function. Be warned: after this operation you'll have to use a disk-monitor/sector-editor to get the data back. Wipe Files - All Purges all deleted files. Delete - Selected Deletes a file, i.e. the file header will be taken out of its hash chain, and the bitmap updated. The 'Bitmap Flag' will be set to 'FALSE' as in 'Undelete' (see above). This function even works if the DOS delete does return an error. Delete - Faulty Checks all files and deletes those with errors. The program may ask you before deleting a file, if you wish. Info - Device Returns some information about the selected device. Validate - Disk This is not the Amiga Validator, but my own. The main difference between them is that this one tries to repair the disk structure. You may get some error reports: Loops in a hash chain, wrong or unreadable file headers, checksum errors or 'key already set', two files claiming to own the same data block. The usually action that takes place, is to ask you if the corrupted file may be deleted. You may check what exactly was wrong using 'Show' and 'Check file' afterwards. Recover - Track This function tries to get as much as possible from a defective track. It uses the RAWREAD command from the trackdisk.device and therefore works with the trackdisk.device only. What it actually does, is to RAWREAD the track into a buffer, search the syncs, and decode the sector (this may take some seconds, the routine to decode isn't very fast). If a sector sync is missing, the program tries to determine where the sector has to start, this works sometimes, but is usually wrong. When the track has been decoded, you'll get a window displaying: the number of the sector (1-11), the first 4 longwords of that sector, if the checksum is OK or BAD, and if that block is ALLOCated or FREE. If an entries is red (color 3), the sector didn't have a sync. If, instead of the first few bytes, you get 'unreadable', the program couldn't even work out where the sector should have been. If you are not satisfied with the result, you may click 'RETRY', this will restart the procedure and usually gives a different result (if the track has a 'hard' error, i.e. a damaged surface). If you think the result is good (or good enough) click on 'WRITE', this will format the track and write those sectors back. It may happen that the track can't be formatted. Click 'RETRY' several times, the defective part of the track may 'fall' into the gap at some point. If this doesn't seem to work, pull out the disk and insert a new, EMPTY!, even unformatted disk, and write the track on this disk. Now comes the tricky part: back up the original disk, and copy the recovered track to the backup with DiskZap/DiskX/Sectorama etc. Hmmm, no, much too complicate, the Amiga is a multitasking machine! Backup the disk WHILE FixDisk is running, insert the backup into the drive you have selected and click 'RETRY'. THE MENU There are actually only two menuitems: Ignore readerrors: Usually you get a requester asking 'RETRY' 'IGNORE' if an error occurs. This may be very annoying if the disk has a lot of defective tracks. This item will stop that requester popping up. It has also a second function: If you are using the 'Copy' function, the program will stop every time a file seems to be damaged, and asks what action should be taken. With 'Ignore readerrors' on, errors are just listed, but the program will act as if you have choosen 'IGNORE'. Write Enable Enables those gadgets that will write onto the disk. That's all. Well, almost. The program has about 80 requesters, some of them have not been explained, but they should be self-explanatory. Send flames, bug reports, requests to G35@DHDURZ1.BITNET Werner Gunther Wingertspfad 12 D 6900 Heidelberg (FRG)