[comp.sys.amiga] DISKSALV - AmigaDOS disk salvaging program

sean@ukma.UUCP (03/01/87)

Everyone should have this program!  Can fix just about anything except
a degaussed or reformatted disk.  It can handle hard errors and the error
I get most often: "Not a DOS disk".  I believe that this program was
originally distributed with source, but I don't have it (yet).  Enjoy.

Sean


#! /bin/sh
: This is a shell archive, meaning:
: 1. Remove everything above the '#! /bin/sh' line.
: 2. Save the resulting text in a file.
: 3. Execute the file with /bin/sh '(not csh)' to create the files:
:	'disksalv.doc'
:	'disksalv.uue'
:	'readme'
: This archive created: 'Sun Mar  1 13:51:53 1987
'
: By:	'Sean Casey (The Leaning Tower of Patterson Office @ The Univ. of KY)'
export PATH; PATH=/bin:$PATH
echo shar: extracting "'disksalv.doc'" '(6981 characters)'
if test -f 'disksalv.doc'
then
	echo shar: will not over-write existing file "'disksalv.doc'"
else
cat  >'disksalv.doc' <<'SHAR_EOF'




 				  DiskSalv

			AmigaDOS Disk Salvage Program
				    by
				Dave Haynie

			      (c) April 1986




	This file describes my AmigaDOS disk salvaging program, DiskSalv.
This program, the source for it, and this text file are all copyrighted,
and are not to be considered in the public domain.  Nontheless, all of 
these programs may be copied magnetically or electronically without any
additional permission, providing no charge is requested	for the program.  
The only fees permitted are a moderate copying charge, in the case of 
magnetic distribution, or any normal BBS charges, in the case of an 
electronic download.  Any other uses may be negotiated by contacting me.
Additionally, feel free to use any part of the source for your personal
learning, and any small part of the source may be incorporated into your 
own program.  If you are very pleased with this program or what you learn
from the source code, please consider sending no more than $10.00 to me.  I
use such monies as an aid in creating more such programs.  In addition, I'd
appreciate reports of any bugs encountered so that I can maintain this 
program better.  Money and any other communication from users also serves as
an indicator of how useful the program is to the Amiga community and helps me
decide what my next project will be and how much to support current programs.
All correspondence may be sent to:

		Dave Haynie
		645 Allen Avenue
		Gibbstown, NJ 08027

		Usenet:		{allegra,caip,seismo}!cbmvax!daveh
		Compuserve:	76703,2047
		QuantumLink:	Animal128

These addresses are current as of this writing, most are likely to remain
so for awhile.  And that's enough of that.


	This program is designed to let the user salvage all or parts
of a damaged AmigaDOS disk.  It is used similarly to the standard 
AmigaDOS DISKCOPY or COPY programs, with the format:

		DISKSALV dfN: [TO] dfM:

Where the source disk is the corrupted disk, the target disk is	a formatted
AmigaDOS disk, usually (but not necessarily) empty.  This command currently
takes two drives; i.e. it won't salvage df0: to df0: or to RAM:.  This program
salvages the bad disk by by-passing the normal disk root directory, which may 
be corrupted (and as well is probably the most likely cause of a complete disk
being rejected by AmigaDOS).  It performs a scan to collect all directories
and their associated files, building an internal dynamic image of the bad
disk.  Then each directory found is created through normal DOS call, then the
files belonging to that directory are placed under it.  The process continues
until no more files/directories exist.  There is no necessary correlation
between the physical location of files on the bad disk and the physical
location of the corresponding files on the newly created disk.  Once all 
linkable files are restored, a directory of existing but unused data blocks is
created, in an effort to preserve anything left, which might be manually 
re-created for a file that had its file header badly destroyed.  This program
will also copy a good disk, though inefficiently as compared to a straight 
Copy command.  Also, this program recovers files that have been deleted but 
not yet written over.  Thus, it can be used to recover deleted (but not 
overwritten) files.

	This version of DiskSalv (1.0) is meant to be a full featured version,
completely replacing the previous version (0.9).  As in 0.9, this program is
capable of recovering disk directories on a bad disk, and any files in these
directories with vaild file headers.  When rebuilding a file, it uses the 
redundant information in AmigaDOS to resolve any file links that appear 
corrupted.  Every AmigaDOS file has a header containing a list of block 
pointers, and a first block pointer.  This first pointer is a link to the 
first 512 byte data block in the file.  This first link is also echoed in the
aforementioned list of block pointers.  Each subsequent data block has a link
to the next block which as well can be verified by the block pointer list.  
Data blocks also contain sequence numbers, indicating their logical sequence
in the file, and backpointers to the file header block.  These last two items
are constantly checked, and are very good in helping to resolve any next block
conflicts that might arise.

	This new version of DiskSalv does a few more intelligent things. It
marks off any bad block that's found, and will never try to read it once it is
found bad at one time in the disk scan.  Since the DOS does several retrys on
any bad block found, trying to read a bad block can take a comparatively long
period of time, so this marking saves scanning time.  The second thing that's
marked is the writing of any particular data block.  If a data block is
written out once, it is marked and never used again.  This will eliminate any
errors that might crop up with a circular list of data blocks, which can occur
when a block pointer is corrupted.  When creating a new directory, the program
will check for the prior existance of such a directory.  If it already exists,
the intended name will be modified slightly.  After 10 of these attempted name
changes, the program will abort the attempt to write out the directory.  This
allows a non-empty disk to easily be used for the output disk without having to
worry about overwriting directories currently existing on the output disk.

	Along with that goes another new feature.  If the output disk gets 
filled up completely, the program will pause you and request another disk for
the output disk.  Actually, the first time the disk becomes full, the system
will pop up with a requestor box indicating that the disk has become full.
Click the "CANCEL" box here and a prompt on the CLI comes up requesting a
change of disks.  It will then recreate the currently active directory path,
and the file that it was working on before the swap took place.  Everything
from this point on proceeds as normal.

	One final feature is the ability to save blocks that have lost their
file headers.  These are often remains from old deleted files, but they could
easily be blocks missing from a normal corrupted file.  These will appear in
a uniquely named SPARE-BLOCKS directory.  Each file in that directory will
have a name indicating the block's block number, parent block number, and
sequence number.  Any program source or other ASCII text can be easily put
together by hand by following the proper sequence among files of similar
parentage if desired, either in an editor or via the Join command.  Any binary
files may be re-assembled similarly, but unless all of the blocks in the
file are available, the reassembled file will generally be useless.

					-Dave Haynie
					 April 1986


	"I gained nothing at all from Supreme Enlightenment, and
	 for that very reason it is called Supreme Enlightenment."

					-Gotama Buddha

	"Let me control a planet's oxygen supply and I don't care
	 who makes the laws."

					-Great Cthulhu's Starry Wisdom Band
SHAR_EOF
if test 6981 -ne "`wc -c < 'disksalv.doc'`"
then
	echo shar: error transmitting "'disksalv.doc'" '(should have been 6981 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'disksalv.uue'" '(17659 characters)'
if test -f 'disksalv.uue'
then
	echo shar: will not over-write existing file "'disksalv.uue'"
else
cat  >'disksalv.uue' <<'SHAR_EOF'
begin 644 disksalv
M```#\P`````````#``````````(```O+```!.`````$```/I```+RT[Z'<9.
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
M>`(`+RR`'DZZ%>I03TJL@!9G#DAX`@`O+(`63KH5UE!/2JR`!F<<3KKI&B\L
M@`9.NA2*6$](>``X+RR`!DZZZ-103TJL@`IG"B\L@`I.NA406$\0+?_W2(`_
M`$ZZ$F143TY=3G5$:7-K4V%L=B`E<R`H8RDQ.3@V(&)Y(")(87IY(B!$879E
M($AA>6YI90H*`"`@5&AI<R!P<F]G<F%M('-A;'9A9V5S(&$@8F%D($%M:6=A
M1$]3(&1I<VL@8GD@8V]P>6EN9R!A;GD*`')E8V]V97)A8FQE(&9I;&5S(&]R
M(&1I<F5C=&]R:65S(&9R;VT@=&AE(&)A9"!D:7-K('1O(&$@9V]O9`H`9F]R
M;6%T=&5D(&1I<VLN("!)="!A;'-O(&-O<&EE<R!L;V]S92!D871A(&)L;V-K
M<R`H8FQO8VMS"@!W:&\G<R!F:6QE(&AE861E<B!W87,@9&5S=')O>65D*2X@
M(%1H92!F;W)M870@:7,Z"@H`("!$:7-K4V%L=B!D9DTZ(%M43UT@9&9..@H*
M`'=H97)E($X@86YD($T@87)E(&1I9F9E<F5N="`S(#$O,B(@9')I=F5S(&9R
M;VT@,"!T;R`S+@H`("!4:&ES('!R;V=R86T@;6%Y(&)E(&1I<W1R:6)U=&5D
M(&9R964@9F]R(&%N>2!P97)S;VYA;`H`=7-A9V4@=VET:&]U="!A9&1I=&EO
M;F%L('!E<FUI<W-I;VXN("!)9B!Y;W4@9FEN9"!T:&ES"@!P<F]G<F%M('9E
M<GD@=7-E9G5L+"!P;&5A<V4@8V]N<VED97(@<&%Y:6YG("0Q,"!O<B!L97-S
M(&9O<@H`:71S('5S92X@(%EO=2!M87D@86QS;R!D:7)E8W0@86YY('%U97-T
M:6]N<RP@8G5G(')E<&]R=',L"@!O<B!M86-A9&%M:6$@;G5T<R!T;R!T:&4@
M875T:&]R(&%T.@H`("`@1&%V92!(87EN:64*("`@-C0U($%L;&5N($%V96YU
M90H@("!':6)B<W1O=VXL($Y*(#`X,#(W"@`@("!5<V5N970@("`@.B`@>V%L
M;&5G<F$L8V%I<"QS96ES;6]](6-B;79A>"%D879E:`H`("`@0V]M<'5S97)V
M93H@(#<V-S`S+#(P-#<*("`@475A;G1U;4QI;FLZ($%N:6UA;#$R.`H`57-A
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
M`&#6)6T`"``*%6T`#P`)%7P`!``(0BH`#A5$``]"ITZZ`*)83R5``!!*K0`(
M9PHO"DZZ`%I83V`*2&H`%$ZZ`,A83R`*8)).50``+PHD;0`(2JH`"F<(+PI.
MN@#D6$\5?`#_``@E?/____\`%'``$"H`#R\`3KH`>%A/2'@`(B\*3KH`6%!/
M)%].74YU(F\`!"QL@H9.[OZ>("\`!"QL@H9.[OZV3OH``DSO``,`!"QL@H9.
M[O\Z(F\`!"QL@H9.[OXX3OH``B)O``0L;(*&3N[^VBQL@H9.[O]\3OH``B)O
M``0@+P`(+&R"AD[N_RX@+P`$+&R"AD[N_K`@;P`$+&R"AD[N_HP@;P`$((A8
MD$*H``0A2``(3G4@;P`$3.\"`0`((B\`$"QL@H9.[OY$+&R"AB)O``0@+P`(
M3N[]V")O``0L;(*&3N[^F")O``0L;(*&3N[^ADSO``,`!"QL@H9.[O[.(&\`
M!"QL@H9.[OZ```````/L`````0```````!W*`````````_(```/J````GC$N
M,``````````````````````!`````````````````````#`Q,C,T-38W.#EA
M8F-D968````@("`@("`@("`P,#`P,"`@("`@("`@("`@("`@("`@()!`0$!`
M0$!`0$!`0$!`0$`,#`P,#`P,#`P,0$!`0$!`0`D)"0D)"0$!`0$!`0$!`0$!
M`0$!`0$!`0$!0$!`0$!`"@H*"@H*`@("`@("`@("`@("`@("`@("`@)`0$!`
M(``````````````````!``````$``````````````````````0$````!````
M``````````````````$"`````0``````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
0```#\@```^L````!```#\@``
`
end
SHAR_EOF
if test 17659 -ne "`wc -c < 'disksalv.uue'`"
then
	echo shar: error transmitting "'disksalv.uue'" '(should have been 17659 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'readme'" '(454 characters)'
if test -f 'readme'
then
	echo shar: will not over-write existing file "'readme'"
else
cat  >'readme' <<'SHAR_EOF'
The disksalv.c file has been "Manxed" and there are no guarrentees that 
it still compiles under Lattice.  Disksalv was compiled with Aztec 3.30c 
under version 1.1 of AmigaDos.  One bug fix was done to change the ULONG
*ptr to a LONG *ptr in the procedure NewPoint so that the comparison for
*ptr < 0 will function correctly.  This will eliminate the false 
resolving link conflict warnings for files that are longer than 70 blocks.
Enjoy.
Don Phillips
SHAR_EOF
if test 454 -ne "`wc -c < 'readme'`"
then
	echo shar: error transmitting "'readme'" '(should have been 454 characters)'
fi
fi # end of overwriting check
:	End of shell archive
exit 0
-- 
===========================================================================
Sean Casey      UUCP:  cbosgd!ukma!sean           CSNET:  sean@ms.uky.csnet
		ARPA:  ukma!sean@anl-mcs.arpa    BITNET:  sean@UKMA.BITNET