10 MODE7:T$= "File Rescue" 20 h%=(TOP+&900)AND&FF00:H%=HIMEM 30 HIMEM=h%:ON ERROR PROCerr 40 PROCinit:ON ERROR PROCerror 50 REPEAT CLS:PROChd("Main Menu") 60 FOR Y%=1 TO opts 70 PRINTTAB(ox%,4+Y%)red$;Y%ylw$opt$(Y%) 80 NEXT:REPEAT PROCmemused 90 PRINTTAB(25,oy%-3)cyn$drv 100 PRINTTAB(25,oy%-2)cyn$traks 110 PROCcn(grn$+"Press key for your choice : ",oy%+2) 120 Q%=FNin(opts$):IF Q%=3 PROCwipe 130 IF Q%=4 PROCdrive 140 IF Q%=5 PROCswap 150 UNTIL Q%=1 OR Q%=2 OR Q%=6 160 IF Q%=1 PROCsearch 170 IF Q%=2 PROCrecover 180 IF Q%=6 quit=TRUE 190 UNTIL quit:PROCquit:END 200 DEF PROCerror:PROCcoff 210 IF ERR=17 ENDPROC 220 ON ERROR OFF:PROCquit 230 DEF PROCerr:PROCcon 240 REPORT:PRINT" at line ";ERL:END 250 DEF PROCquit:CLS:*fx4 260 PROCcon:PROChd("End"):*FX18 270 PRINT':@%=10:ENDPROC 280 DEF PROCinit:PROCcoff:*FX4,1 290 READ opts:DIM opt$(opts) 300 FOR O%=1 TO opts:READ opt$(O%) 310 opts$=opts$+STR$O%:NEXT 320 ox%=2:oy%=O%+4 330 c$=CHR$&88+CHR$&88+CHR$&89+CHR$&89 340 copy$=CHR$&87:tab$=CHR$9:cr$=CHR$13 350 buff1=&B00:buff2=&C00:buff3=&A00 360 quit=FALSE:ctrl=&70:PROCassem 370 sects=10:traks=40:sct=2:trk=0 380 drv=0:P%=999:@%=5:J%=0 390 red$=CHR$129:grn$=CHR$130 400 ylw$=CHR$131:blu$=CHR$132 410 mag$=CHR$133:cyn$=CHR$134 420 wht$=CHR$135:ENDPROC 430 DATA 6 440 DATA Search disc for data 450 DATA Recover data from disc 460 DATA Wipe memory clean 470 DATA Select disc drive 480 DATA Number of tracks 490 DATA Quit 500 DEF PROCcoff:LOCAL B% 510 DEF PROCcon:LOCAL B%:B%=1 520 VDU23,1,B%;0;0;0;:ENDPROC 530 DEF PROChd(t$):VDU26,12 540 PROCdb(grn$+T$+" _ "+t$+" ",0) 550 ENDPROC 560 DEF PROCdb(t$,Y%) 570 PROCcn(CHR$141+t$+" ",Y%) 580 PROCcn(CHR$141+t$+" ",Y%+1) 590 ENDPROC 600 DEF PROCcn(t$,Y%) 610 LOCAL X%:X%=(40-LEN(t$))DIV2 620 PRINTTAB(X%,Y%)t$:ENDPROC 630 DEF FNin(k$):LOCAL I%:*FX21 640 PROCcon:REPEAT I%=INSTR(k$,GET$) 650 VDU-7*(I%=0):UNTILI%:PROCcoff:=I% 660 DEF PROCrd(d%,t%,s%,b%):W%=&53 670 DEF PROCwrt(d%,t%,s%,b%):W%=&4B 680 ctrl?0=d%:ctrl!1=b%:ctrl?5=3 690 ctrl?6=W%:ctrl?7=t%:ctrl?8=s% 700 ctrl?9=&21:PROCdfs(ctrl,10) 710 ENDPROC 720 DEF PROCdfs(C%,e%) 730 LOCAL A%,X%,Y%,R% 740 A%=&7F:X%=C%:Y%=X%DIV256 750 REPEAT R%=R%+1:CALL &FFF1 760 UNTIL C%?e%=0 OR R%=10 770 IF C%?e%=0 ENDPROC 780 PROCcn("Disc Error!!",VPOS+1) 790 PROCcn("Press Space to continue or Escape",VPOS+2 800 Z%=FNin(" "):ENDPROC 810 DEF PROCrecover:PROChd("Recover") 820 IF NOT FNfull PROCsaving 830 IF J%>0 PROCmemsave 840 ENDPROC 850 DEF PROCsaving 860 PROCcn(cyn$+"Use [ and ] to change sector, ",5) 870 PROCcn(cyn$+"S to save, or Q to quit: ",6) 880 LOCAL F%,X%,Y%:X%=POS:Y%=VPOS 890 REPEAT PROCmemused 900 PROCrd(drv,trk,sct,buff1) 910 PROCscreen(buff1):VDU31X%Y% 920 K%=(FNin(c$+"SsQq")+1)DIV2 930 IF K%=3 PROCsave 940 IF K%=2 PROCinc 950 IF K%=1 PROCdec 960 UNTIL (K%=4) OR FNfull 970 PROCmemused:ENDPROC 980 DEF PROCsave 990 !ptr=J%+HIMEM:CALLshift2 1000 J%=J%+&100:SOUND 1,-7,40,1 1010 PROCinc:ENDPROC 1020 DEF FNfull=((J%+HIMEM)=H%) 1030 DEF PROCmemused:LOCAL L%,j$ 1040 IF FNfull j$=red$+"Memory full"+wht$ ELSE j$=grn$+"Memory used"+wht$ 1050 PROCcn(j$,19):L%=38*J%DIV(H%-HIMEM) 1060 j$=grn$+STRING$(L%,CHR$&FF) 1070 IF L%>30 j$=ylw$+MID$(j$,2) 1080 IF L%>35 j$=red$+MID$(j$,2) 1090 PRINTTAB(0,20)j$SPC(38-L%):ENDPROC 1100 DEF PROCmemsave 1110 PROCcn(ylw$+"Do you want to save now? ",22) 1120 IF FNin("YyNn")>2 ENDPROC 1130 PRINTCHR$13SPC39:PROCcn(ylw$+"Change disc, then press Space...",22) 1140 Z%=FNin(" "):PRINTCHR$13SPC39CHR$13; 1150 PRINTmag$"Enter filename:"red$; 1160 F$=FNfnm(12):PROCcli("SAVE "+F$+" "+STR$~HIMEM+"+"+STR$~J%+" 0 0") 1170 ENDPROC 1180 DEF FNfnm(L%):LOCAL F$,X%,Y% 1190 X%=POS:Y%=VPOS:REPEAT PROCcon 1200 PRINTTAB(X%,Y%)SPC(LENF$); 1210 INPUTTAB(X%,Y%)F$:PROCcoff 1220 UNTIL LENF$<=L%:=F$ 1230 DEF PROCscreen(!ptr) 1240 VDU28,3,17,37,8,12 1250 CALL ascout:VDU26:ENDPROC 1260 DEF PROCwipe:IF J%=0 ENDPROC 1270 PROCcn(ylw$+"Are you sure?"+wht$,15) 1280 IF FNin("YyNn")<3 J%=0 1290 PRINTCHR$13SPC40;:ENDPROC 1300 DEF PROCdrive 1310 drv=drv+1:IF drv=4 drv=0 1320 ENDPROC 1330 DEF PROCswap 1340 IF traks=80 traks=40 ELSE traks=80 1350 ENDPROC 1360 DEF PROCsearch 1370 PROChd("Search") 1380 PROCcn("Enter a distinctive string from the",VPOS+2) 1390 PROCcn("file you wish to find:",VPOS+1) 1400 Y%=VPOS+2:PROCcon 1410 REPEAT INPUTTAB(0,Y%)$buff3 1420 UNTIL $buff3>"":?leng=LEN$buff3 1430 PROCcn(CHR$136+"Searching...",VPOS+2) 1440 M%=sects*traks-1:trk=0:sct=2 1450 PROCrd(drv,trk,sct,buff1) 1460 REPEAT REPEAT PROCinc 1470 PROCrd(drv,trk,sct,buff2) 1480 A%=USR(cmp)AND&FF:IF A% CALLshift1 1490 UNTIL FNend:IF A%=0 PROCthis_it 1500 UNTIL FNend:IF A%<>0 PROCnot_fnd 1510 ENDPROC 1520 DEF FNend=A%=0ORV%=M%OR!buff1=&E5E5E5E5 1530 DEF PROCthis_it 1540 PROCdec:PROCscreen(buff1) 1550 PROCcn(red$+"Is this the file you want? ",20):A%=FNin("YyNn")>2 1560 PROCcn(STRING$(28," "),VPOS) 1570 IF A% PROCcn(ylw$+CHR$136+"Continuing search...",VPOS):CALL shift1 1580 ENDPROC 1590 DEF PROCnot_fnd 1600 PROCcn(red$+"I could not find this string. ",20) 1610 PROCcn(ylw$+"Press SPACE to continue... ",22) 1620 Z%=FNin(" "):ENDPROC 1630 DEF PROCinc:sct=sct+1 1640 IF sct=sects trk=trk+1:sct=0 1650 IF trk=traks trk=0:sct=2 1660 V%=trk*10+sct:ENDPROC 1670 DEF PROCdec:sct=sct-1 1680 IF sct=1 IF trk=0 sct=-1 1690 IF sct=-1 sct=sects-1:trk=trk-1 1700 IF trk=-1 trk=traks-1 1710 V%=trk*10+sct:ENDPROC 1720 DEF PROCcli($&700):LOCAL X%,Y% 1730 Y%=7:CALL &FFF7:ENDPROC 1740 DEF PROCassem:LOCAL L%,P% 1750 DIM code &80 1760 oswrch=&FFEE:osnewl=&FFE7 1770 ptr=&88:leng=&8A 1780 FOR L%=0 TO 2 STEP 2 1790 P%=code:[OPT L%:.cmp 1800 LDA #buff1 MOD256:STA ptr 1810 LDA #buff1 DIV256:STA ptr+1 1820 .clp1 LDY #&00:.clp2 LDA (ptr),Y 1830 CMP buff3,Y:BNE notsame:INY 1840 CPY leng:BNE clp2:LDA #&00:RTS 1850 .notsame INC ptr:BNE clp1 1860 LDA #&FF:RTS 1870 .shift1 LDY #0:.slp1 LDA buff2,Y 1880 STA buff1,Y:INY:BNE slp1:RTS 1890 .shift2 LDY #0:.slp2 LDA buff1,Y 1900 STA (ptr),Y:INY:BNE slp2:RTS 1910 .ascout LDY #0:.asclp TYA 1920 AND #&1F:BNE nocr:JSR osnewl 1930 .nocr LDA (ptr),Y:JSR ascii 1940 JSR oswrch:INY:BNE asclp:RTS 1950 .ascii CMP #32:BCC dot 1960 CMP #127:BCS dot:RTS 1970 .dot LDA #ASC".":RTS 1980 ]:NEXT:ENDPROC