10 REM > RECOVER
   20 REM FIND LOST ADFS ENTRIES
   30 DIM ctrl% 31,mem% &4FF:X%=ctrl%:Y%=X%DIV256
   40 this%=&00000:found%=0
   50 REPEAT:PRINTCHR$13;"Checking ";~this%;
   60   PROCreadX(this%,0,mem%)
   70   mem%?255=13:IF $(mem%+251)="Hugo":PROCRecover
   80 this%=this%+1:UNTIL0
   90 END
  100 :
  110 DEFPROCRecover
  120 IF(mem%!214 AND&FFFFFF)<>2:ENDPROC
  130 mem%?214=13:n$=$(mem%+204):PRINT" - found ";n$;
  140 FOR S%=2 TO 6:PROCreadX(S%,0,mem%+S%*256-512):NEXT
  150 $(mem%+5+26*found%)=n$:mem%!(27+26*found%)=this%-4
  160 mem%?(8+26*found%)=mem%?(8+26*found%) OR 128
  170 FOR S%=2 TO 6:PROCwriteX(S%,0,mem%+S%*256-512):NEXT
  180 found%=found%+1:PRINT:ENDPROC
  190 :
  200 DEFPROCwriteX(sec%,drv%,mem%):A%=FNscsi(&0A,mem%,&100,sec%,drv%)
  210 DEFPROCreadX(sec%,drv%,mem%):A%=FNscsi(&08,mem%,&100,sec%,drv%)
  220 IF A%:PRINT"Disk error &";~A%;:PROCdelay(200)
  230 ENDPROC
  240 :
  250 DEFPROCdelay(T%):T%=TIME+T%:REPEAT UNTIL TIME>T%:ENDPROC
  260 :
  270 DEFFNscsi(cmd%,addr%,num%,sect%,drv%):LOCAL fs%
  280 fs%=FNfs:IF fs%<>8:OSCLI"FADFS"
  290 X%?0=0:X%!1=addr%:X%?5=cmd%:X%?6=drv%*32+((sect%AND&1F0000)DIV65536)
  300 X%?7=((sect%AND&FF00)DIV256):X%?8=sect%:X%!9=num%DIV256:X%!11=num%
  310 A%=114:CALL&FFF1:A%=?X%:IF fs%<>8:OSCLI"FX143,18,"+STR$ fs%
  320 =A%
  330 :
  340 DEFFNfs:LOCAL A%,E%,Y%:=(USR&FFDA)AND&FF