2 REM:Data Recovery Prg. (c)1986 Acroatix 3 MAXFILES=1:CLEAR0,MAXRAM:CLEAR500,MAXRAM-FRE(0)+2000 4 LFILESV:DEFSTRA-F:DEFINTI-S:DIMS(79):E=CHR$(27):XR=MAXRAMC 5 ONERRORGOTO45:CLS:GOSUB48:PRINT:PRINT"Disk has"DSKI$("")"sectors free." 6 GOSUB47:I=0:GOSUB60:IFNB>0THENPRINT@200,"Directory Bad.":FORI=1TO500:NEXT:GOTO9 7 PRINT@200,"Ignore allocated sectors (y/n)?";:A=INPUT$(1):IFINSTR("nN",A)THEN9ELSEFORI=1TO79:X=HIMEM+1240+INT(I/4):IFPEEK(X)AND(4^(4-(IMOD4))/2)THENS(I)=-1:NA=NA+1:ELSES(I)=0 8 NEXT 9 CLS:PRINT"Searching for Series Start...":I=1 10 IFI>79THEN43ELSEPRINT@40,I;:IFS(I)THENI=I+1:GOTO10 11 JS=I:GOSUB60:IFIETHENI=I+1:GOTO10ELSEK=0:IT=4:GOSUB63 12 K=K+1:JE=I:IT=4:GOSUB70:I=PEEK(HIMEM+1280):IFI>79THEN13ELSEGOSUB60:IFNOTIETHEN12 13 ONKEYGOSUB15,18,19,22,23:KEYON:IC=0:PRINT@301,"GO"; 14 KEYON:IFICTHEN9ELSE14 15 KEYOFF:IT=1:CLS:PRINT"BAsic File Line Numbers in Sector 1:":DSKO$0,JS,HIMEM:Y=HIMEM+2 16 Z=PEEK(Y)+256*PEEK(Y+1):PRINTZ;:Y=Y+2 17 IFY-HIMEM>1275THEN69ELSEIFPEEK(Y)=0THENY=Y+3:GOTO16ELSEY=Y+1:GOTO17 18 KEYOFF:CLS:PRINT"First sector of DOcument:":IT=2:DSKO$0,JS,HIMEM:FORY=HIMEMTOHIMEM+1279:PRINTCHR$(PEEK(Y));:NEXT:GOTO69 19 KEYOFF:CLS:PRINT"Values for COmmand-type File:":IT=3:DSKO$0,JS,HIMEM:PRINT:Z=PEEK(HIMEM)+256*PEEK(HIMEM+1):PRINT"TOP:"Z:ZL=PEEK(HIMEM+2)+256*PEEK(HIMEM+3):V=Z+ZL-1:PRINT"END:";:IFV>65535THENPRINTV-65536ELSEPRINTV 20 PRINT"EXE:"PEEK(HIMEM+4)+256*PEEK(HIMEM+5):IFZL+6>K*1280ORZL+6<1+(K-1)*1280THENPRINT:PRINT"Illegal File length: Can't be CO":IT=4 21 GOTO69 22 IT=4:GOTO64 23 KEYOFF:ONITGOTO26,31,32,24 24 NI=NI+K 25 IC=-1:RETURN 26 GOSUB35:F=F+"BA":DSKO$0,JE,HIMEM:X=HIMEM-1:PRINT"Select active line numbers:" 27 IFJE=JSTHEN29 28 X=X+1:IFX-HIMEM>1279THENXL=K*1280:GOTO38ELSEIFPEEK(X)<>0THEN28 29 X=X+3:PRINT"Is"PEEK(X)+256*PEEK(X+1)"a good line number (y/n)? "; 30 A=INPUT$(1):IFINSTR("yYnN",A)=0THEN30ELSEPRINTA:IFINSTR("yY",A)THENX=X+2:GOTO28ELSEXL=(K-1)*1280+X-HIMEM-2:GOTO38 31 GOSUB35:F=F+"DO":XL=K*1280:GOTO38 32 GOSUB35:PRINT"Extension:":PRINT"1. CO":PRINT"2. CA":PRINT"3. CT":PRINT"4. CW":PRINT"Press Key"; 33 A=INPUT$(1):IFA<"1"ORA>"4"THEN33ELSEPRINT:FORI=1TOVAL(A):READFX:NEXT:F=F+FX:XL=ZL+6:RESTORE:GOTO38 34 DATA CO,CA,CT,CW 35 CLS:INPUT"File name";F:J=LEN(F):FORI=1TOJ:B=MID$(F,I,1):IFNOT(B<"a"ORB>"z")THENB=CHR$(ASC(B)AND223):MID$(F,I,1)=B 36 NEXT:IFJ=0ORJ>6THENBEEP:GOTO35ELSEIFJ<6THENF=F+SPACE$(6-J) 37 RETURN 38 PRINT"File length is"XL:INPUT"OK to recover this file (y/n)";A:IFINSTR("yY",A)=0THENGOSUB63:GOTO70 39 II=JS:M=1:YP=HIMEM:XP=YP:NR=NR+K 40 DSKO$0,II,YP:IFXL<1281THENYP=YP+XL:GOSUB48:GOSUB50:GOSUB52:GOSUB47:GOTO25 41 XL=XL-1280:YP=YP+1280:II=PEEK(YP):IFYP>MAXRAM-1293THENGOSUB48:GOSUB50:GOSUB52:GOSUB47:M=2:YP=HIMEM:XP=YP 42 GOTO40 43 CLS:PRINT"All Sectors accounted for:":PRINT"Allocated: "NA:PRINT"Empty: "NE:PRINT"Bad: "NB:PRINT"Ignored: "NI:PRINT"Recovered: "NR:PRINT"Press any key";:POKE-86,0:A=INPUT$(1) 44 CLEAR0,MAXRAM:LFILESMENU 45 IFERR=63THENPRINT"Write Protect Tab Open on Dest. Disk" 46 PRINTERL"ERROR! Can't Continue ... Press Key":A=INPUT$(1):CLEAR0,MAXRAM:LFILESMENU 47 A="Damaged":GOTO49 48 A="Receiving" 49 BEEP:PRINT"Insert "A" Diskette; press key";:POKE-86,0:A=INPUT$(1):PRINT:RETURN 50 XC=YP-HIMEM:IFM=3THENZQ=XR+6:A="Reading"ELSEZQ=XR+9:IFM=2THENA="Appending"ELSEA="Writing" 51 B=F:Z=VARPTR(B):PRINTA" "B:IFIT=2THEN55ELSECALLXR+3,M,PEEK(Z+1)+256*PEEK(Z+2):RETURN 52 N=INT(XC/128):IFIT=2THEN57ELSEIFN>0THENFORI=1TON:CALLZQ,128,XP:XP=XP+128:NEXT 53 N=XC-128*N:IFN>0THENCALLZQ,N,XP:XP=XP+N 54 CALLXR+15,2:RETURN 55 B=":"+LEFT$(F,6):IFIM=1THENOPENBFOROUTPUTAS1ELSEOPENBFORAPPENDAS1 56 RETURN 57 Z=VARPTR(B):POKEZ,128:FORI=1TON:POKEZ+2,INT(XP/256):POKEZ+1,XP-256*PEEK(Z+2):PRINT#1,B;:XP=XP+128:NEXT 58 N=XC-128*N:IFN>0THENPOKEZ,N:POKEZ+2,INT(XP/256):POKEZ+1,XP-256*PEEK(Z+2):PRINT#1,B; 59 CLOSE:RETURN 60 S(I)=-1:IE=0:ONERRORGOTO62:PRINT@300,"Read"I;:DSKO$0,I,HIMEM:IN=PEEK(HIMEM+1280):IFIN=0THENNE=NE+1:IE=-1 61 ONERRORGOTO45:PRINT@300,SPACE$(18);:RETURN 62 IFERR=18THENIE=-1:NB=NB+1:PRINT@300,I"BAD! Press Key";:A=INPUT$(1):RESUME61ELSEIFERR=66THENIE=-1:NI=NI+1:RESUME61ELSE45 63 CLS:LINE(3,4)-(236,20),1,B:PRINT@45,"POWR-DOS Data Recovery Program";:PRINT@121,"Sectors File Length Range:":PRINT:PRINT" Choose Type:":LINE(3,37)-(117,63),1,B:LINE(3,53)-(116,53),1:LINE(4,63)-(116,63),0:PRINT@301,"GO"; 64 PRINT@281,"BA DO CO Skip";:ONITGOTO65,66,67,68 65 PRINT@281,E"pBA"E"q";:RETURN 66 PRINT@286,E"pDO"E"q";:RETURN 67 PRINT@291,E"pCO"E"q";:RETURN 68 PRINT@295,E"pSkip"E"q";:RETURN 69 PRINT@280,SPACE$(39)CHR$(13)"Press to continue";:POKE-86,0:A=INPUT$(1):GOSUB63 70 PRINT@129,USING"##/##";JS;JE;:PRINT@180,USING"##### to #####";1+(K-1)*1280;K*1280;:RETURN