10 REM >BACKUP v1.20 01-Dec-1998
   80 MODE&87:A$=FNOS_GetEnv:quit$=FNcl(" -q",1):ONERRORREPORT:PRINT:PROCend
   90 IFFNcl("-?",0):PRINT"Syntax: "run$" (<src> <dst> (<trks> <sides>) (-t <tries>)":PROCend
  100 PROCinit:PRINT"BACKUP PROGRAM 1.20. Buffer size: &";~maxlen%'
  110 ONERRORREPORT:PROCClose:PROCend
  120 fs%=FNfs:PROCparams:PROCbackup:PROCend
  130 END
  150 DEFPROCinit:OSWORD=&FFF1:OSGBPB=&FFD1:maxlen%=(HIMEM-LOMEM-3000)AND&FFFF00
  160 DIMctrl%30,data%maxlen%:X%=ctrl%:Y%=X%DIV256:name%=data%
  170 ENDPROC
  190 DEFPROCClose:IFfs%<>FNfs:OSCLI"FX143,18,"+STR$fs%
  200 ch%=ch%:IFch%:A%=ch%:ch%=0:CLOSE#A%
  210 ENDPROC
  230 DEFPROCDrd(Ad%,Dv%,Sc%,Nm%):PROCdsk(&53,sdrv$):ENDPROC
  240 DEFPROCDwr(Ad%,Dv%,Sc%,Nm%):PROCdsk(&4B,ddrv$):ENDPROC
  250 DEFPROCdsk(Cmd%,fn$):Derr%=0:IFDv%=-1:PROCgpb:ENDPROC
  260 OSCLI"FX143,18,4":Nm0%=Nm%:A%=&7F:REPEAT
  270   Num%=Nm%DIV256:IFNum%+(Sc%MOD10)>10:Num%=10-(Sc%MOD10)
  280   try%=tries%:REPEAT
  290     ?X%=Dv%:X%!1=Ad%:X%?5=3:X%?6=Cmd%:X%?7=Sc%DIV10:X%?8=Sc%MOD10
  300     X%!9=Num%OR32:IFX%?7>79:X%?7=X%?7-80:?X%=?X%OR2
  310     VDU13:IFCmd%=&53:PRINT"Read ";ELSEPRINT"Write";
  320     PRINT" "FNh0(Dv%,1)":"FNh0(Sc%,6)"+"FNh0(Nm%DIV256,2)" "FNh0(tries%-try%,1)" ";
  330   CALLOSWORD:Derr%=X%?10:try%=try%-1:UNTILDerr%=0ORtry%=0
  340   IFDerr%:PRINTFNerr(Derr%);SPC(39-POS);:IFNm%=&100:PRINT
  350   IFCmd%=&53ANDDerr%=0:PRINT;read%+Nm0%-Nm%;" bytes read";ELSEIFCmd%=&4BANDDerr%=0PRINT;write%-Nm0%+Nm%;" bytes left";
  360   PRINTSPC(39-POS);:Ad%=Ad%+Num%*256:Sc%=Sc%+Num%:Nm%=Nm%-Num%*256
  370 UNTILNm%<1ORDerr%:OSCLI"FX143,18,"+STR$fs%:ENDPROC
  390 DEFFNerr(A%):IFA%<&08ORA%>&18:="Error "+FNh0(A%,2)
  400 =MID$("Clock errorID CRC errorData CRC errorNot readyWrite protectedTrack 0 not foundSector not found",VALMID$("010012243847620079",A%-7,2),VALMID$("110012140915170016",A%-7,2))
  440 DEFPROCgpb:Sc%=Sc%*256:A%=INSTR(fn$,":",2):IFA%:OSCLILEFT$(fn$,A%-1):fn$=MID$(fn$,A%+1)
  450 IFCmd%=&53:A%=3:ch%=OPENIN(fn$)ELSEA%=1:IFSc%=0:ch%=OPENOUT(fn$)ELSEch%=OPENUP(fn$)
  460 ?X%=ch%:X%!1=Ad%:X%!5=Nm%:X%!9=Sc%:CALLOSGBPB:CLOSE#ch%:ch%=0:IFFNfs<>fs%:OSCLI"FX143,18,"+STR$fs%
  470 ENDPROC
  490 DEFPROCparams
  500 spt%=VALFNcl("-s",1):tries%=VALFNcl("-t",1):sdrv$=FNcl("",1)
  510 ddrv$=FNcl("",1):trk%=VALFNcl("",1):sides%=VALFNcl("",1)
  520 IFsdrv$="":trk%=-1:INPUT"Source drive: "sdrv$:INPUT"Dest. drive: "ddrv$
  530 sdrv$=FNfsn(sdrv$):sdrv%=-1:IFLENsdrv$=1:sdrv%=VALsdrv$
  540 ddrv$=FNfsn(ddrv$):ddrv%=-1:IFLENddrv$=1:ddrv%=VALddrv$
  550 same%=(sdrv%=ddrv%)ANDsdrv%>-1:IFsame%:PRINT"Using same drive."
  560 IFtrk%=-1:INPUT"Number of tracks (80) "trk%:INPUT"Number of sides (2) "sides%:INPUT"Number of tries (10) "tries%:PRINT"Press a key to backup from "sdrv$" to "ddrv$;:IFGETOR1PRINT'
  570 IFspt%=0:spt%=10
  580 IFtrk%=0:trk%=80
  590 IFsides%=0:sides%=2
  600 IFtries%=0:tries%=10
  610 ENDPROC
  630 DEFPROCbackup
  640 read%=0:write%=2560*trk%*sides%:FORs%=0TO(sides%-1)*2STEP2
  650   sect%=0:length%=trk%*2560:REPEAT:num%=maxlen%:IFnum%>length%:num%=length%
  670     IFsame%:PRINTCHR$13"Insert source disk and press a key";:IFGETOR1:PRINTCHR$13;SPC(39);CHR$13;
  680     REPEATPROCDrd(data%,(sdrv%+s%)OR(sdrv%<0),sect%-(spt%*trk%)*(s%=2ANDsdrv%<0),num%)
  690       IFDerr%:num%=(num%AND&FFFE00)DIV2
  700     UNTILDerr%=0ORnum%<&100:IFnum%<&100:num%=&100
  710     IFDerr%=0ORnum%=&100:read%=read%+num%
  730     IFsame%:PRINTCHR$13"Insert dest. disk and press a key";:IFGETOR1:PRINTCHR$13;SPC(39);CHR$13;
  740     REPEATPROCDwr(data%,(ddrv%+s%)OR(ddrv%<0),sect%-(spt%*trk%)*(s%=2ANDddrv%<0),num%)
  750       IFDerr%:num%=(num%AND&FFFE00)DIV2
  760     UNTILDerr%=0ORDerr%=&12ORnum%<&100:IFnum%<&100:num%=&100
  770     IFDerr%=0ORnum%=&100:write%=write%-num%
  780     IFDerr%=&12:PRINT'"Destination disk write protected":length%=0:s%=99
  790     sect%=sect%+num%DIV256:length%=length%-num%
  800 UNTILlength%<1ORDerr%=&12:NEXTs%:PRINTCHR$13;SPC(39)
  810 IFddrv%>-1:ENDPROC
  820 ONERRORONERROROFF:PROCClose:PROCend
  830 A%=INSTR(ddrv$,":",2):IFA%:OSCLILEFT$(ddrv$,A%-1):ddrv$=MID$(ddrv$,A%+1)
  840 X%!2=&FFFB2200:A%=FNfile(ddrv$,2):OSCLI"Stamp "+ddrv$
  850 PROCClose:ENDPROC
  870 DEFFNfsn(A$):IFLEFT$(A$,1)="-":A%=INSTR(A$,"-",2):IFA%:B%=INSTR(A$,"."):IFB%=0ORB%>A%:A$=MID$(A$,2,A%-2)+":"+MID$(A$,A%+1)
  880 =A$
  890 DEFFNh0(A%,N%)=RIGHT$("0000000"+STR$~A%,N%)
  900 DEFFNfs:LOCALA%,X%,Y%,E%:=(USR&FFDA)AND&FF
  910 DEFFNfile(A$,A%):$name%=A$:?X%=data%:X%?1=data%DIV256:=(USR&FFDD)AND&FF
  920 DEFFNOS_GetEnv:IFHIMEM>&FFFF:run$=$&8100:SYS16TOA$,,A%:SYS72,"",A%:A$=MID$(A$,1+INSTR(A$+" "," ",1+INSTR(A$," "))):IFLENA$=0:A$=run$
  930 IFLENA$=0:IF?(TOP-3):A$=$&600ELSEIFLENA$=0:A$=$(PAGE-&300)
  940 FORY%=-1TO0:A$=" "+A$:REPEATA$=MID$(A$,2):UNTILASCA$<>32
  950   IFY%:IFASCA$=34:A%=INSTR(A$,"""",2)+1ELSEIFY%:A%=INSTR(A$+" "," ")
  960   IFY%:run$=MID$(A$,1-(ASCA$=34),A%-1+2*(ASCA$=34)):IFrun$<>"":A$=MID$(A$,A%+1)
  970 NEXT:=A$
  980 DEFFNcl(l$,n%):IFl$="":A$=FNs(A$):IFASCA$=34:A%=INSTR(A$+" "" ",""" ",2):l$=MID$(A$,2,A%-2):A$=FNs(MID$(A$,A%+1)):=l$
  990 IFl$="":A%=INSTR(A$+" "," "):l$=LEFT$(A$,A%-1):A$=FNs(MID$(A$,A%+1)):=l$
 1000 IFn%=0:IFl$<>"":A%=INSTR(A$,l$):IFA%:A$=FNs(LEFT$(A$,A%-1)+MID$(A$,INSTR(A$," ",A%)+1))+" ":=TRUE
 1010 IFn%=0:IFl$<>"":=FALSE
 1020 A%=INSTR(LEFT$(" ",ASCl$=32)+A$,l$):IFA%=0:=""
 1030 A$=LEFT$(A$,A%-1)+FNs(MID$(A$,INSTR(A$," ",A%)+1))
 1040 IFASCl$=32:l$=MID$(A$,A%):A$=LEFT$(A$,A%-1):=MID$(l$,1-(ASCl$=34),LENl$+2*(ASCl$=34))
 1050 IFASCMID$(A$,A%,1)<>34:l$=MID$(A$,A%,INSTR(A$+" "," ",A%)-A%):A$=LEFT$(A$,A%-1)+MID$(A$,A%+LENl$+1):=l$
 1060 l$=MID$(A$,A%+1,INSTR(A$+""" ",""" ",A%+1)-A%-1):A$=LEFT$(A$,A%-1)+MID$(A$,A%+LENl$+3):=l$
 1070 DEFFNs(A$):IFLEFT$(A$,1)=" ":REPEATA$=MID$(A$,2):UNTILLEFT$(A$,1)<>" "
 1080 IFRIGHT$(A$,1)=" ":REPEATA$=LEFT$(A$,LENA$-1):UNTILRIGHT$(A$,1)<>" "
 1090 =A$
 1100 DEFPROCos(A$):IFA$=""ORASCA$=42:OSCLIA$:ENDPROCELSECHAINA$:ENDPROC
 1110 DEFPROCend:IFquit$<>"":A$=quit$:quit$="":PROCos(A$)
 1120 A$=CHR$13:END:ENDPROC
65449 
  162  CLGOSCLIPOSPROCATNCIRCLELOADWHEN PAGEREPORTEVALTRUE?{ATNRECTANGLELOADWHEN PAGEREPEATEVALTRUECIRCLEATNINSTALLRECTANGLELOADWHEN PAGEREPEATATNINSTALLRECTANGLELEN"™  X{¢L {L÷ÿQ%=PA.:CH."* BASIC s{l{t{EVALORIGINTRUEPRIVATEELLIPSELNTRUER{ATNPRIVATEELLIPSETAB(ATNR{STEPEXITVDU`OPENUPRECTANGLEONm{`WHENOSCLIPLOTFILLLEN`LINEINTORLEN X{,zELLIPSE0EVALELLIPSEPOSINTERRORLNLOADPOSINTERRORLOGEVALTRUE4iTIMELNLOADPAGERETURNGCOLLOGONADVAL{EXITPRINTLENCIRCLE`LENPTR QUIT
37113     ELLIPSEeINTLNLENeLENINTLENCIRCLE QUITMOUSE CLGCLG{OPENUP4i12030STRING$({PAGEVDUONEOF{EXITLOCALLENPTR QUITMOUSELENCIRCLE`