10 REM > MkImg v1.12
   20 DIMctrl%127,name%79,zp%9:A$=FNOS_GetEnv:in%=0:out%=0:inc%=0:IFos%=32:PROCWin_TextIO
   30 quit$=FNcl(" -qu",1):debug%=FNcl("-de",0):ONERRORREPORT:PRINT:PROCexit(ERR)
   40 IFFNcl("-help",0):PRINT"MkImg v1.12a (C)J.G.Harston 2005-2020":A$="-?"
   50 IFFNcl("-?",0):PRINT"Syntax: MkImg outfile inpath -c num -fs type -@ -i@file -o opt -p -q -R root -r -s size -t title -quit command":PROCexit(0)
   60 title$=FNcl("-t",1):opt%=VALFNcl("-o",1):type$=FNcl("-f",1):IFtype$="":type$="DFS"
   70 cycle$=FNcl("-c",1):size$=FNcl("-s",1):rc%=FNcl("-r",0):vb%=NOTFNcl("-q",0)
   80 dsd%=FNcl("-ds",0):pad%=FNcl("-p",0):stdin%=FNcl("-@",0):v1%=FNcl("-v1",0)
   90 ex%=FNcl("-e",0):ex%=TRUE:root$=LEFT$(FNcl("-R",1),1):IFroot$="":root$="$"
  100 size%=VALsize$*4:IF(ASCRIGHT$(size$,1)AND&DF)=77:size%=size%*1024
  110 inc$="":A%=INSTR(" "+A$," -i@")
  120 IFA%:inc$=MID$(A$,A%+3,INSTR(A$," ",A%)-A%-3):A%=FNcl("-i@"+inc$,0)
  130 out$=FNcl("",0):in$=FNcl("",0):leaf$=FNcl("",0)
  140 d$=".":s$="/":IFos%AND40:d$="/":s$=".":IFos%AND32:d$="\"
  150 ONERRORREPORT:PRINTLEFT$(" at line "+STR$ERL,ERR<128ANDERR<>17):PROCClose_All:PROCexit(ERR)
  160 X%=ctrl%:Y%=X%DIV256:cycle%=0:files%=0
  170 type$=FNuc(type$):fstype%=INSTR("HADFS24",type$):IFfstype%=0:fstype%=3*INSTR("DFS31",type$)+4*INSTR("DFS62",type$)
  180 IFfstype%<1ORfstype%>4:PRINT"Unsupported filesystem":PROCexit(220)
  190 IFVALRIGHT$(type$,2)=24:fstype%=0
  200 IFfstype%=1:IFsize%>&10000:fstype%=0
  210 IFfstype%=1:IFsize%=&10000:size%=&FFFF
  220 IFfstype%=0:IFsize%=&1000000:size%=&FFFFFF
  230 IFfstype%=0:tln%=16:dsz%=23:fsz%=32:root%=&47:dmax%=&01000000
  240 IFfstype%=1:tln%=16:dsz%=31:fsz%=24:root%=&47:dmax%=&00010000
  250 IFfstype%=2:tln%=19:dsz%=47:fsz%=26:root%=&02:dmax%=&00200000
  260 IFfstype%=3:tln%=12:dsz%=31:fsz%=16:root%=&01:dmax%=&00000400
  270 IFfstype%=4:tln%=12:dsz%=62:fsz%=16:root%=&01:dmax%=&00000400
  280 IFsize%:dmax%=size%
  290 side%=0:dskid%=RND(65535)
  300 IFfstype%<3:ex%=FALSE
  310 DIMA%-1:max%=HIMEM-A%-4096:DIMmem% max%:wr%=2:rd%=4
  320 IFout$="":INPUT"Destination file: "out$
  330 out%=FNf_openout(out$):IFout%=0:PRINT"Can't open '"out$"'":PROCexit(192)
  340 title$=LEFT$(title$+STRING$(20," "),tln%):PROCdskHdr
  350 CLOSE#out%:out%=0:X%!2=&FFFB2200:IFfstype%=2:X%!2=&FFFFCE00
  360 A%=FNfile(out$,2):out%=FNf_openup(out$):PTR#out%=EXT#out%
  370 A%=0:idate%=0:IFin$<>"":A%=FNf_info(in$):idate%=X%!15
  380 IFin$=""ORinc$<>""ORstdin%:PROCEnter:A%=2ELSEIFA%=2:PROCcd(in$):PROCChkDir:PROCScan("",root%):A%=2
  390 IFA%=1:PROCChkDir:p$="":PROCAdd:A%=2
  400 IFA%<>2:PRINT"Dir. '"in$"' not found"ELSEPROCsetFSM
  410 IFpad%:IFsize%:IFEXT#out%<size%*256:PTR#out%=size%*256-1:BPUT#out%,0
  420 CLOSE#out%:out%=0:PROCexit(0):END
  430 DEFPROCEnter:p$=""
  440 IFinc$=""ANDNOTstdin%:PRINT"Enter files to include, end with RETURN"
  450 IFinc$<>""ANDNOTstdin%:OSCLI"Exec "+inc$:inc%=FNbyte(198,0,255):IFos%=32:inc%=!540
  460 IFin$<>"":PROCcd(in$)
  470 PROCChkDir:IFinc%:IFEXT#inc%=0:ENDPROC
  480 REPEAT:IFinc%=0:PRINT"Enter filename: ";
  490   INPUTLINE""in$:IFstdin%:PRINTCHR$11;SPC(16+LENin$);STRING$(16+LENin$,CHR$127)
  500   leaf$="":PROCAdd:A%=0:IFinc%:A%=EOF#inc%OR(EXT#inc%-PTR#inc%<2)
  510 UNTILin$=""ORA%:IFinc$<>"":*Exec
  520 ENDPROC
  530 DEFPROCAdd
  540 IFleaf$="":leaf$=in$:A%=INSTR(in$,","):IFA%:leaf$=MID$(in$,A%+1):in$=LEFT$(in$,A%-1)
  550 t%=0:IFin$<>"":IFASCin$<>124:t%=FNf_info(in$):IFinc%ORstdin%:VDU11
  560 IFt%:A%=FNaddELSEIFin$<>"":IFASCin$<>124:PRINT"File '"in$"' not found"
  570 ENDPROC
  580 DEFPROCChkDir:fs%=FNfs:IFrc%=0:ENDPROC
  590 IFFNf_scan(0)<>"0":ENDPROC
  600 A$=FNf_scan(X%!9):IFA$<>"1":IFA$<>"2":ENDPROC
  610 rc%=-2:ENDPROC
  620 DEFPROCScan(p$,dir%):LOCALp%,r%:IFfstype%<=2:LOCALfiles%
  630 REPEAT:in$=FNf_scan(p%):r%=LENin$:p%=X%!9:IFr%:PROCRdName
  640 UNTILr%=0:ENDPROC
  650 DEFPROCRdName:IFASCin$=46:IFos%<8:ENDPROC
  660 cycle%=X%?0:t%=FNf_info(in$)
  670 leaf$=in$:IFos%AND-24:leaf$=FNfn_unbbc(leaf$)
  680 sec%=FNadd:IFt%<>2:ENDPROC
  690 IFrc%=0ORsec%=0:ENDPROC
  700 PROCcd(in$):PROCScan(p$+in$+d$,sec%):PROCcd("^"):ENDPROC
  710 DEFFNadd
  720 IFt%=2:IFfstype%>2:PROCside2:=dir%
  730 IFt%=2:IFrc%=0:=dir%
  740 load%=X%!2:exec%=X%!6:fsize%=X%!10:attr%=X%?14:IFfs%<>16:attr%=attr%AND&7F
  750 mdate%=X%!15:mtime%=X%!17:cdate%=X%!20:ctime%=X%!22:acc%=X%!25:PROCinf
  760 IFvb%:PRINT"Adding ";p$;in$;"...   ";
  770 PTR#out%=EXT#out%:PROCalign:ptr0%=EXT#out%-side%
  780 IFptr0%+fsize%>dmax%*256:PRINT"disk full":=0
  790 IFfsz%=24:IFfsize%>&7FFFF:PRINT"file too long":=0
  800 IFfiles%>=dsz%:IFfstype%>1:PRINT"cat full":=0
  810 IFfiles%>=dsz%:PROCextend
  820 REPEATA%=INSTR(leaf$,"."):IFA%:leaf$=LEFT$(leaf$,A%-1)+"/"+MID$(leaf$,A%+1)
  830 UNTILA%=0:IFex%:A%=INSTR(leaf$,"/",3):IFA%:leaf$=FNuc(MID$(leaf$+" ",A%+1,1))+"/"+LEFT$(leaf$,A%-1)
  840 IFex%:IFMID$(leaf$,2,1)<>"/":leaf$=root$+"/"+leaf$
  850 IFt%<>2:in%=FNf_openin(in$):IFin%=0:PRINT"Can't open '"in$"'.":=0
  860 IFt%<>2:PROCtrans:CLOSE#in%:in%=0ELSEPROCmkdir
  870 PROCalign:sect%=ptr0%DIV256:ptr0%=EXT#out%:files%=files%+1
  880 IFfstype%>2:PROCaddDFS
  890 IFfstype%=2:PROCaddADFS
  900 IFfstype%<2:PROCaddHADFS
  910 PTR#out%=EXT#out%
  920 IFvb%:VDU8,8,8:PRINT"Done."
  930 =sect%
  940 DEFPROCinf:IF(os%AND-24)=0:ENDPROC
  950 A$=in$:IFFNf_info(A$+s$+"inf")=0:IFINSTR(A$,"."):REPEAT:A$=LEFT$(A$,LENA$-1):UNTILRIGHT$(A$,1)=s$ORA$="":A$=LEFT$(A$,LENA$-1)
  960 A$=A$+s$+"inf":IFFNf_info(A$)=1:IFX%!10<80:in%=OPENIN(A$):A$=GET$#in%:CLOSE#in%:in%=0ELSEENDPROC
  970 A%=INSTR(A$,"BOOT="):IFA%:opt%=VALMID$(A$,A%+5):A$=LEFT$(A$,A%-1)
  980 A%=INSTR(A$,"CRC="):IFA%:A$=LEFT$(A$,A%-1)
  990 A%=VALFNcl("",0):load%=FNinf(0):exec%=FNinf(load%):A%=FNinf(0)
 1000 IFLEFT$(A$,1)="L":attr%=&19:A$=FNs(MID$(A$,2))ELSEattr%=FNinf(&33)
 1010 mdate%=FNinf(0):mtime%=FNinf(0):cdate%=FNinf(mdate%):ctime%=FNinf(0)
 1020 ENDPROC
 1030 DEFFNinf(A%):IFLENA$:=EVAL("&"+FNcl("",0))ELSE=A%
 1040 DEFPROCaddDFS:IFrc%:IFLENp$=-2*rc%:leaf$=RIGHT$(p$,2)+MID$(leaf$,3)
 1050 leaf$=MID$(leaf$+"       ",3,7)+CHR$(ASCleaf$OR((attr%AND8)*16))
 1060 PROCf_gbpb(rd%-1,out%,mem%,512,side%+512*(files%DIV32))
 1070 FORA%=252TO16STEP-4:mem%!A%=mem%!(A%-8):mem%!(256+A%)=mem%!(256+A%-8):NEXT
 1080 A%=mem%?16:$(mem%+8)=leaf$:mem%?16=A%
 1090 mem%?&104=cycle%:mem%?&105=((files%MOD32)+(files%DIV32))*8:mem%?&106=opt%*16+ptr0%DIV65536:mem%?&107=ptr0%DIV256
 1100 mem%!&108=load%:mem%!&10A=exec%:mem%!&10C=fsize%:mem%?&10F=sect%
 1110 mem%?&10E=sect%DIV256+(load%AND&30000)DIV16384+(fsize%AND&30000)DIV4096+(exec%AND&30000)DIV1024
 1120 PROCf_gbpb(wr%-1,out%,mem%,512,side%+512*(files%DIV32))
 1130 ENDPROC
 1140 DEFPROCaddADFS:fptr%=mem%:$fptr%=LEFT$(leaf$+CHR$13+"        ",10)
 1150 PROCaddAttr((attr%AND3)+(attr%AND8)DIV2+((t%=2)AND8)+(((attr%AND6)=4)AND16)+(attr%AND&30)*2+(((attr%AND&60)=&40)AND128)+(attr%AND&80)*2)
 1160 fptr%!10=load%:fptr%!14=exec%:fptr%!18=fsize%:fptr%!22=sect%:fptr%?25=0
 1170 PROCf_gbpb(wr%-1,out%,mem%,fsz%,dir%*256+files%*fsz%-21)
 1180 ENDPROC
 1190 DEFPROCaddHADFS
 1200 mdate%=FNh_date(mdate%):cdate%=FNh_date(cdate%)
 1210 mtime%=(mtime%AND&1F)*2048+(mtime%AND&3F00)DIV8+(mtime%AND&3F0000)DIV131072
 1220 PTR#out%=dir%*256+12:BPUT#out%,files%+((fsz%=32)AND&80):fptr%=mem%
 1230 $fptr%=LEFT$(leaf$+"        ",10):PROCaddAttr(((attr%EOR&33)AND255)+((t%=2)AND256))
 1240 fptr%!10=load%:fptr%!14=exec%:fptr%!18=fsize%
 1250 IFfsz%=32:fptr%!22=sect%:fptr%?25=0:fptr%!26=mdate%:fptr%!28=mtime%:fptr%?30=cdate%:fptr%?31=cdate%DIV256
 1260 IFfsz%=24:fptr%?22=sect%:fptr%?23=sect%DIV256:fptr%?20=(fptr%?20AND7)+(mdate%AND&F8):fptr%?21=mdate%DIV256
 1270 IFfsz%=24:fptr%?9=(fptr%?9AND127)+(mdate%AND1)*128:fptr%?13=(fptr%?13AND63)+(mdate%AND6)*32
 1280 PROCf_gbpb(wr%-1,out%,fptr%,fsz%,dir%*256+files%*fsz%)
 1290 ENDPROC
 1300 DEFPROCaddAttr(bits%):bits%=bits%*128:FORA%=0TO9:fptr%?A%=(fptr%?A%AND127)+(bits%AND128):bits%=bits%DIV2:NEXT:ENDPROC
 1310 DEFPROCextend:PROCf_gbpb(rd%-1,out%,mem%,fsz%,dir%*256)
 1320 IFfsz%=24:first%=mem%!&14AND&FFFF:mem%?&0E=ptr0%DIV&100:mem%?&0F=ptr0%DIV&10000
 1330 IFfsz%=32:first%=mem%!&14AND&FFFFFF:mem%?&17=ptr0%DIV&100:mem%?&18=ptr0%DIV&10000:mem%?&19=ptr0%DIV&1000000
 1340 PROCf_gbpb(wr%-1,out%,mem%,fsz%,dir%*256):IFfirst%=0:first%=dir%
 1350 mem%?&0C=mem%?12AND31:mem%?&14=first%:mem%?&15=first%DIV256:IFfsz%=24:mem%?&0E=0:mem%?&0F=0
 1360 IFfsz%=32:mem%?&17=0:mem%?&18=0:mem%?&19=0:mem%?&16=first%DIV&1000000
 1370 PROCf_gbpb(wr%-1,out%,mem%,fsz%,ptr0%)
 1380 PROCalign:BPUT#out%,0:PROCalign:BPUT#out%,0:PROCalign
 1390 dir%=ptr0%DIV&100:ptr0%=EXT#out%:files%=0:ENDPROC
 1400 DEFPROCmkdir:fsize%=(dsz%*fsz%+64)AND&F00
 1410 FORA%=0TOfsize%-1STEP4:mem%!A%=0:NEXT
 1420 IFfstype%=2:$mem%=CHR$0+"Hugo":mem%?5=0:$(mem%+&4CC)=leaf$:mem%!&4D6=dir%:IFtitle$="":title$=leaf$
 1430 IFfstype%=2:$(mem%+&4D9)=title$:mem%!&4EC=0:$(mem%+&4FB)="Hugo":mem%?&4FF=0
 1440 IFfstype%<2:$mem%=LEFT$(leaf$+"         ",10):mem%!&0A=dir%:mem%!&10=dskid%:mem%?&12=opt%:opt%=0
 1450 IFfstype%=0:mem%!&0A=&800000:mem%!&1A=dir%
 1460 PROCf_gbpb(wr%,out%,mem%,fsize%,0):ENDPROC
 1470 DEFPROCtrans:IFfsize%=0ORt%=2:ENDPROC
 1480 copyend%=fsize%:ptr%=0:REPEAT:IFvb%:PRINTFNsofar(ptr%,copyend%);
 1490   len%=max%:IFptr%+len%>copyend%:len%=copyend%-ptr%
 1500   PROCf_gbpb(rd%,in%,mem%,len%,0):PROCf_gbpb(wr%,out%,mem%,len%,0)
 1510 ptr%=ptr%+len%:UNTILptr%>=copyend%:ENDPROC
 1520 DEFPROCalign:FORA%=0TO255STEP4:mem%!A%=0:NEXT
 1530 A%=256-(PTR#out%AND255):IFA%<256:PROCf_gbpb(wr%,out%,mem%,A%,0)
 1540 ENDPROC
 1550 DEFPROCdskHdr:files%=0:FORA%=0TO511STEP4:mem%!A%=0:NEXT
 1560 IFfstype%>2:PROCdfsHdr
 1570 IFfstype%=2:PROCadfsHdr
 1580 IFfstype%<2:PROChadfsHdr
 1590 ptr0%=PTR#out%:ENDPROC
 1600 DEFPROCdfsHdr:$mem%=LEFT$(title$,8):mem%!8=0:$(mem%+256)=MID$(title$,9):mem%!260=0
 1610 PROCf_gbpb(wr%-1,out%,mem%,512,side%)
 1620 IFfstype%=4:!mem%=&AAAAAAAA:mem%!4=&AAAAAAAA:mem%!256=0:PROCf_gbpb(wr%-1,out%,mem%,512,side%+512)
 1630 ENDPROC
 1640 DEFPROChadfsHdr:$mem%=title$:$(mem%+16)=CHR$0+"(C)JGH"+CHR$0:mem%!&18=dskid%
 1650 mem%!&1C=dmax%:mem%?31=(fsz%=32)AND&80:IFfsz%=24:mem%?30=1
 1660 PROCf_gbpb(wr%-1,out%,mem%,256,&4600)
 1670 DEFPROCadfsHdr
 1680 dir%=root%:leaf$="$":PTR#out%=root%*256:PROCmkdir:title$=""
 1690 ENDPROC
 1700 DEFPROCsetFSM:idate%=FNh_date(idate%):stp%=2:IFfsz%=32:stp%=3
 1710 IFsize%=0:size%=ptr0%DIV256
 1720 PROCf_gbpb(rd%-1,out%,mem%,512,(root%-1+1*(fstype%=2))*256)
 1730 IFfstype%<2:mem%!&1A=idate%:mem%!&1C=size%:mem%?&1F=(fsz%=32)AND&80:IFfsz%=24:mem%?&1E=1
 1740 IFfstype%<2:mem%!&20=2:mem%!(&20+stp%)=&44:mem%!(&20+2*stp%)=ptr0%DIV256:mem%!(&20+3*stp%)=size%-ptr0%DIV256
 1750 IFfstype%=2:mem%!&FC=size%:mem%!&1FB=dskid%:mem%?&1FD=opt%:mem%?&1FE=3:mem%!&00=ptr0%DIV256:mem%!&100=size%-ptr0%DIV256:mem%?&FF=FNsum(mem%):mem%?&1FF=FNsum(mem%+256)
 1760 IFfstype%>2:mem%?&106=opt%*16+size%DIV256:mem%?&107=size%
 1770 PROCf_gbpb(wr%-1,out%,mem%,512,(root%-1+1*(fstype%=2))*256)
 1780 IFfstype%<4:ENDPROC
 1790 PROCf_gbpb(rd%-1,out%,mem%,512,side%+512)
 1800 mem%?&106=opt%*16+size%DIV256:mem%?&107=size%
 1810 PROCf_gbpb(wr%-1,out%,mem%,512,side%+512)
 1820 ENDPROC
 1830 DEFFNsum(mem%):S%=255:FORA%=254TO0STEP-1:IFS%>255:S%=(S%+1)AND255
 1840 S%=S%+mem%?A%:NEXT:=S%AND255
 1850 DEFPROCside2:IFin$<>"1":IFin$<>"2":ENDPROC
 1860 IFrc%<>-2ORp$<>"":ENDPROC
 1870 IFsize%:PTR#out%=side%+256+6:BPUT#out%,opt%*16+size%DIV256:BPUT#out%,size%
 1880 IFEXT#out%>&32000:PRINT"Side 0 too full":PROCClose_All:PROCexit(128-2)
 1890 PTR#out%=EXT#out%:FORA%=0TO255STEP4:mem%!A%=&E5E5E5E5:NEXT
 1900 REPEAT:PROCf_gbpb(wr%,out%,mem%,256,0):UNTILEXT#out%>=&32000
 1910 side%=&32000:PROCdskHdr:ENDPROC
 1920 DEFFNh_date(A%)=(A%AND&FF00)+(A%AND31)*8+(A%AND&E0)DIV32
 1930 DEFFNsofar(A%,B%):VDU8,8,8:PRINTFNd0(A%/(B%+1)*100,2);"%";:=""
 1940 DEFPROCcd(A$):OSCLI"DIR "+A$:ENDPROC
 1950 DEFFNfn_unbbc(B$):IF(os%AND-24)=0:=B$
 1960 LOCALB%:A$="#?./$<^>&+@=%; "
 1970 FORA%=1TOLENB$:B%=INSTR(A$,MID$(B$,A%,1))-1
 1980   IFB%>TRUE:B$=LEFT$(B$,A%-1)+MID$(A$+"_",(B%EOR1)+1,1)+MID$(B$,A%+1)
 1990 NEXT:=B$
 2000 DEFFNd0(A%,N%):=RIGHT$("00000000"+STR$A%,N%)
 2010 DEFFNbyte(A%,X%,Y%)=((USR&FFF4)AND&FF00)DIV256
 2020 DEFPROCClose_All:*EXEC
 2030 in%=in%:IFin%:A%=in%:in%=0:CLOSE#A%
 2040 out%=out%:IFout%:A%=out%:out%=0:CLOSE#A%
 2050 ENDPROC
 2060 DEFFNOS_GetEnv:LOCALA$,A%,X%,Y%:X%=1:os%=((USR&FFF4)AND&FF00)DIV256
 2070 IFos%>31:IFPAGE>&FFFFF:DIMX%LOCAL256:SYS"GetModuleFileName",0,X%,255:run$=$$X%:=@cmd$
 2080 A%=(HIMEM>&FFFF)AND&900:IF?(TOP-3):A%=((PAGE>&9FFF)ANDA%)OR((&1400-PAGE)AND(A%=0))ELSEA%=((A%-&500)OR&200)AND&FFF
 2090 A$=$(PAGE-&E00+A%):IFA%=0:run$=A$:SYS16TOA$,,A%:SYS72,"",A%:A$=MID$(A$,1+INSTR(A$+" "," ",1+INSTR(A$," "))):IFLENA$=0:A$=run$
 2100 FORY%=-1TO0:A$=" "+A$:REPEATA$=MID$(A$,2):UNTILASCA$<>32
 2110   IFY%:IFASCA$=34:A%=INSTR(A$,"""",2)+1ELSEIFY%:A%=INSTR(A$+" "," ")
 2120   IFY%:run$=MID$(A$,1-(ASCA$=34),A%-1+2*(ASCA$=34)):IFrun$<>"":A$=MID$(A$,A%+1)
 2130 NEXT:=A$
 2140 DEFPROCos(A$):IFASCA$=42:OSCLIA$ELSEIFA$<>"":CHAINA$
 2150 ENDPROC
 2160 DEFPROCexit(A%):OSCLI"FX1,"+STR$(A%AND255):quit$=quit$:A$=quit$:quit$="":PROCos(A$)
 2170 IFPAGE>&FFFFF:QUITA%
 2180 IFos%<6:ENDELSE*Quit
 2190 ENDPROC
 2200 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$
 2210 IFl$="":A%=INSTR(A$+" "," "):l$=LEFT$(A$,A%-1):A$=FNs(MID$(A$,A%+1)):=l$
 2220 IFn%=0:IFl$<>"":A%=INSTR(A$,l$):IFA%:A$=FNs(LEFT$(A$,A%-1)+MID$(A$,INSTR(A$," ",A%)+1))+" ":=TRUE
 2230 IFn%=0:IFl$<>"":=FALSE
 2240 A%=INSTR(LEFT$(" ",ASCl$=32)+A$,l$):IFA%=0:=""
 2250 A$=LEFT$(A$,A%-1)+FNs(MID$(A$,INSTR(A$," ",A%)+1))
 2260 IFASCl$=32:l$=MID$(A$,A%):A$=LEFT$(A$,A%-1):=MID$(l$,1-(ASCl$=34),LENl$+2*(ASCl$=34))
 2270 IFASCMID$(A$,A%,1)<>34:l$=MID$(A$,A%,INSTR(A$+" "," ",A%)-A%):A$=LEFT$(A$,A%-1)+MID$(A$,A%+LENl$+1):=l$
 2280 l$=MID$(A$,A%+1,INSTR(A$+""" ",""" ",A%+1)-A%-1):A$=LEFT$(A$,A%-1)+MID$(A$,A%+LENl$+3):=l$
 2290 DEFFNs(A$):IFLEFT$(A$,1)=" ":REPEATA$=MID$(A$,2):UNTILLEFT$(A$,1)<>" "
 2300 IFRIGHT$(A$,1)=" ":REPEATA$=LEFT$(A$,LENA$-1):UNTILRIGHT$(A$,1)<>" "
 2310 =A$
 2320 DEFFNuc(A$):LOCALB$:IFA$="":=""
 2330 REPEATB$=B$+CHR$(ASCA$AND((A$<"@")OR&DF)):A$=MID$(A$,2):UNTILA$="":=B$
 2340 DEFFNfs:LOCALA%,Y%,E%:=(USR&FFDA)AND&FF
 2350 DEFPROCf_gbpb(A%,chn%,addr%,num%,ptr%):?X%=chn%:X%!1=addr%:X%!5=num%:X%!9=ptr%:CALL&FFD1:ENDPROC
 2360 DEFFNf_openin(A$)=OPENIN(A$)
 2370 DEFFNf_openout(A$)=OPENOUT(A$)
 2380 DEFFNf_openup(A$)=OPENUP(A$)
 2390 DEFFNf_scan(p%):IFfs%>127:SYS12,9,"",name%,1,p%,32TO,,,A%,X%!9:X%!5=1-A%:SYS70,name%TOA$:=A$
 2400 X%!1=name%:X%!5=1:X%!9=p%:A%=8:CALL&FFD1:IFX%!5=1:=""
 2410 A%=name%+1:A%!(A%?-1)=&D20:A%?(INSTR($A%," ")-1)=13:=$A%
 2420 DEFFNfile(A$,A%):$name%=A$:?X%=name%:X%?1=name%DIV256:=(USR&FFDD)AND&FF
 2430 DEFFNf_info(A$):LOCALT%,L%,E%,S%,F%,U%,P%:X%!14=0:T%=FNfile(A$,5):IFT%=0:=0
 2440 X%!17=0:X%!21=0:X%!25=0:F%=FNfs:IFF%<>16:IFF%<>5:=T%
 2450 L%=X%!2:E%=X%!6:S%=X%!10:P%=X%!14
 2460 IFF%=16:A%=FNfile(A$,&FD):IFX%!6=E%:IFX%!10=S%:X%!6=0:X%!10=0:X%!8=P%:X%?8=0
 2470 IFF%=16:X%!14=P%:X%!17=X%!6:X%!21=X%!10:X%!25=X%!2:X%!2=L%:X%!6=E%:X%!10=S%:=T%
 2480 IFFNNetFS_OpN(18,65,8,A$)=0:U%=X%!5
 2490 IFFNNetFS_OpN(18,64,8,A$)=0:X%!15=X%!10:X%?19=X%?14:X%!20=X%!5:X%?24=X%?9ELSEX%!14=P%:X%!19=P%:X%?19=0:X%!22=0
 2500 X%!2=L%:X%!6=E%:X%!10=S%:X%?14=P%:X%!25=U%:=T%
 2510 DEFFNNetFS_OpN(A%,T%,O%,A$):!X%=0:X%?1=O%+1+LENA$:X%!3=A%
 2520 IFHIMEM>&FFFF:X%?4=T%:$(X%+O%-3)=A$:SYS&60048,A%,X%+4,O%+LENA$,120TOA%:IFA%=0:X%?3=0:=0
 2530 IFHIMEM>&FFFF:IFA%>&FFFF:X%?3=?A%:SYS&2002B,A%+4TO$(X%+4):=X%?3
 2540 X%!4=0:X%?7=T%:$(X%+O%)=A$:A%=&14:CALL&FFF1:=X%?3
65449 
  162  CLGOSCLIPOSPROCATNCIRCLELOADWHEN PAGEREPORTEVALTRUE?{ATNRECTANGLELOADWHEN PAGEREPEATEVALTRUECIRCLEATNINSTALLRECTANGLELOADWHEN PAGEREPEATATNINSTALLRECTANGLELEN"  X{L{LQ%=PA.:CH."* BASIC s{l{t{EVALORIGINTRUEPRIVATEELLIPSELNTRUER{ATNPRIVATEELLIPSETAB(ATNR{STEPEXITVDU`OPENUPRECTANGLEONm{`WHENOSCLIPLOTFILLLEN`LINEINTORLEN X{,zELLIPSE0EVALELLIPSEPOSINTERRORLNLOADPOSINTERRORLOGEVALTRUEWAITJTIMELNLOADPAGERETURNGCOLLOGONADVAL{EXITPRINTLENCIRCLE`LENPTR QUIT
37113     ELLIPSEeINTLNLENeLENINTLENCIRCLE QUITMOUSE CLGCLG{OPENUPWAITJ12030STRING$({PAGEVDUONEOF{EXITLOCALLENPTR QUITMOUSELENCIRCLE`