10 REM > UpdateHTML v0.39
   20 Q%=PAGE:DIMctrl%127,name%127,data%511:A$=FNOS_GetEnv:X%=ctrl%:Y%=X%DIV256
   30 ver$="0.38"
   40 quit$=FNcl(" -q",1):debug%=FNcl("-d",0):ONERROROSCLI"Spool":REPORT:PROCClose_All:PROCexit(ERR):END
   50 IFFNcl("-?",0):PRINT"Syntax: "run$" -path <path> -home <path> -navbar -quit quitcmd":PROCexit(0):END
   60 verbose%=FNcl("-v",0):php%=FNcl("-ph",0):path$=FNcl("-p",1):nav%=FNcl("-n",0)
   70 iconpath$=FNcl("-i",1):IFiconpath$="":iconpath$="/icons/"
   80 home$=FNcl("-h",1):IFhome$="":home$="/"
   90 root$=FNcl("-r",1):IFroot$="":root$="/"
  100 site$=FNcl("-s",1):IFsite$="":site$="/"
  110 sfx$=FNcl("-S",1):sfx%=0
  120 text%=0:html%=TRUE:long%=0:short%=TRUE
  130 dir$=A$
  140 IFdebug%:PRINT"verbose%=";verbose%;"   nav%=";nav%'"home$='"home$"'"'"root$='"root$"'"'"site$='"site$"'"'"path$='"path$"'"'"icon$='"iconpath$"'"'" dir$='"dir$"'"'"quit$='"quit$"'"
  150 IFsfx$<>"":IFFNfile(sfx$,5)<>1:PRINT"Suffix file '"sfx$"' not found":PROCexit(214)
  160 IFsfx$<>"":DIMsfx% X%!10:sfx%?(X%!10)=13:OSCLI"Load "+sfx$+" "+STR$~sfx%
  170 IFdir$<>"":OSCLI"Dir "+dir$
  180 IFRIGHT$(site$,2)<>"::":site$=site$+"::"
  190 IFpath$="":path$=FNPath_Name:path$=FNs(FNgbpb(5))+MID$(path$,INSTR(path$,"$")-1)
  200 IFpath$="""""":path$=""
  210 ver$="0.39"
  220 PROCver_Scan
  230 IdxHeadr$="Automatic BBC Tree Crawler"
  240 IFos%<6:ver_mos$=MID$("ElectronBBCMasterCompact",VALMID$("010909121218",os%*2+1,2),VALMID$("833667",os%+1,1))+" "+ver_mos$
  250 index$="index/htm":out$=index$+"_":dirs%=0
  260 f$="."+path$:REPEATf$=MID$(f$,2):UNTILINSTR(f$,".")=0:path$=LEFT$(path$,LENpath$-LENf$-1)
  270 A%=1:REPEAThome$="/.."+home$:A%=INSTR(path$,".",A%+1):UNTILA%=0:home$=MID$(home$,5)
  280 fs%=FNfs:CLS:VDU15:PROCDoDir:PROCexit(0):END
  290 DEFPROCScan(f%,path$):LOCALp%,t%,r%,f$
  300 REPEAT:f$=FNgbpb8(p%):p%=X%!9:r%=LENf$:IFr%:PROCRdName
  310 UNTILr%=0:ENDPROC
  320 DEFPROCRdName:IFASCf$=46:ENDPROC
  330 IFASCf$=95ORf$=index$ORRIGHT$(f$,1)="_"ORf$=out$:ENDPROC
  340 t%=FNfile(f$,5):l%=X%!2:e%=X%!6:n%=X%!10:a%=X%!14:IFt%=3:t%=1
  350 IFfs%=5:A%=FNNetFS_Op(&12,CHR$64+f$):X%?9=a%:a%=X%!9
  360 X%!2=l%:X%!6=e%:X%!10=n%:X%!14=a%
  370 IFf$<>"$":IFt%=2AND(X%?14AND8):ENDPROC
  380 IFt%=1:IF(X%?14AND&13)<>&11:ENDPROC
  390 IFt%=1:IF(X%?14AND&10)<>&10:ENDPROC
  400 IFt%=2:IFLEFT$(f$,1)="!":t%=3
  410 IFt%=1ORt%=2:PROCDoObject:IFf%:IFf%<>t%:ENDPROC
  420 IFverbose%:PRINTt$(t%)": ";f$
  430 IFt%=1:PROCDoFile:ENDPROC
  440 IFINKEY-1:PRINTpath$;".";f$:ENDPROC
  450 IFt%<>2:ENDPROC
  460 dirs%=dirs%+1:OSCLI"Dir "+f$:PROCDoDir:OSCLI"Dir ^":dirs%=dirs%-1
  470 ENDPROC
  480 DEFFNCheckIndex
  490 A%=FNfile("@."+index$,5):IFA%=0:=TRUE
  500 IFNOTFNRdTop(index$):=FALSE
  510 A%=data%:REPEAT:A%=A%+1+LEN$A%:UNTILLEN$A%=0ORINSTR($A%,IdxHeadr$)ORA%>data%+510
  520 IFLEN$A%=0:=FALSE
  530 IFINSTR($A%,IdxHeadr$)=0:=FALSE
  540 A%=A%+INSTR($A%,IdxHeadr$)
  550 A%=A%+INSTR($A%,"""")-3
  560 IF?A%=ASC";":=VAL$(A%+1)ELSE=TRUE
  570 DEFFNRdTop(A$):in%=OPENIN(A$):IFEXT#in%<256:CLOSE#in%:in%=0:=FALSE
  580 FORA%=0TO511:IFNOTEOF#in%:data%?A%=BGET#in%:IFdata%?A%=10:data%?A%=13
  590 NEXT:CLOSE#in%:in%=0:data%?511=13:=TRUE
  600 DEFFNNoRoot(A$):A%=INSTR(A$,".$"):IFA%:A$=LEFT$(A$,A%-1)+MID$(A$,A%+2)
  610 IFLEFT$(A$,2)="..":A$=MID$(A$,3)
  620 =A$
  630 DEFPROCDoDir
  640 CLS:PRINTpath$;".";f$
  650 index%=FNCheckIndex:IFindex%:PROCScanIndex
  660 PROCScan(2,path$+"."+f$):PROCDoDirPost
  670 ENDPROC
  680 DEFPROCScanIndex
  690 IFindex%=-1:PROCDoDirPre:PROCScan(1,path$+"."+f$):PROCDoDirMid:ENDPROC
  700 IFindex%=2:PROCScanAddrs:ENDPROC
  710 ENDPROC
  720 DEFPROCScanAddrs
  730 soft%=0:OSCLI"Spool "+out$
  740 in%=OPENIN("@."+index$)
  750 REPEAT:A$=FNrd(in%):IFINSTR(A$,"application/riscos;"):PROCScanAddr2
  760 PRINTA$;FNlf;:UNTILEOF#in%:CLOSE#in%:in%=0:*Spool
  770 PROCDoDirMidUpdate(TRUE,soft%=0,FALSE)
  780 ENDPROC
  790 DEFPROCScanAddr2
  800 B$=A$:A%=INSTR(A$,"a href="""):F$=MID$(A$,A%+10):F$=LEFT$(F$,INSTR(F$,"""")-1)
  810 IFFNfile(F$,5)<>1:ENDPROC
  820 L%=X%!2:E%=X%!6
  830 A%=INSTR(B$,"load=&"):B%=INSTR(B$," ",A%):IFA%:B$=LEFT$(B$,A%+9)+STR$~L%+";"+MID$(B$,B%)
  840 A%=INSTR(B$,"exec=&"):B%=INSTR(B$,"""",A%):IFA%:A$=LEFT$(B$,A%+9)+STR$~E%+";"+MID$(B$,B%)
  850 IFA$<>B$:soft%=soft%+1
  860 ENDPROC
  870 DEFPROCDoObject:IFf%<>1:ENDPROC
  880 f1$=f$
  890 PROCFileType
  900 f2$=FNunixname(FNfn_sfx(f1$,type%))
  910 IFtype%=&FC0:PROCLinkELSEf$=f$+MID$(f2$,LENf$+1)
  920 PROCMimeType
  930 PRINT" <A href="""f2$;LEFT$("/",t%=2)"""";LEFT$(">",mime$="");:IFmime$<>"":PRINT" TYPE="""+mime$+""">";
  940 PRINTf$;LEFT$("</A> ",html%);
  950 bas%=0
  960 IFbas%=0:bas%=RIGHT$(f2$,4)=".bbc":IFbas%:f2$=LEFT$(f2$,LENf2$-4)
  970 IFbas%=0:bas%=RIGHT$(f2$,3)=".bb":IFbas%:f2$=LEFT$(f2$,LENf2$-3)
  980 IFbas%=0:bas%=RIGHT$(f2$,2)=".b"ANDtype%=&1C7:IFbas%:f2$=LEFT$(f2$,LENf2$-2)
  990 IFbas%=0:bas%=RIGHT$(f2$,1)="."ANDtype%=&1C7:IFbas%:f2$=LEFT$(f2$,LENf2$-1)
 1000 bas%=bas%ORtype%=&1C7ORtype%=&FFBORINSTR(mime$,"exec=&FFFF7B00")
 1010 IFbas%:IFhtml%:PRINT"(<a href=""";FNbas(f2$);".bas"">L</a>)";ELSEPRINTFNspc(3);
 1020 PRINTFNspc(13-LENf$);:x%=(x%+1)AND(x%<4)
 1030 PRINTLEFT$("DL/"+FNspc(1),t%=2)LEFT$("wr/R",t%<>2);LEFT$("<BR>",x%=0);FNcr;
 1040 IFmime$<>""ORbas%:soft%=soft%+1
 1050 ENDPROC
 1060 DEFPROCDoFile
 1070 ENDPROC
 1080 DEFPROCDoDirPre
 1090 OSCLI"Spool "+out$:PROChtmlHdr
 1100 soft%=0:x%=0:ENDPROC
 1110 DEFPROCDoDirMid:PRINT"</TT>";:IFnav%:PROCnavbot
 1120 PRINT"</BODY>"FNcr"</HTML>"FNcr;:*Spool
 1130 A%=FNfile(out$,5):len%=X%!10:A%=FNfile("@",5)
 1140 IFA%=2:A%=FNfile("@."+index$,5)ELSEA%=FNfile(index$,5)
 1150 PROCDoDirMidUpdate(A%,(A%<>0)AND(len%=X%!10),(A%=0)AND(php%<>0)AND(soft%=0)):ENDPROC
 1160 DEFPROCDoDirMidUpdate(found%,same%,notneeded%)
 1170 IFsame%:PRINT"No change":OSCLI"Delete "+out$:ENDPROC
 1180 IFnotneeded%:PRINT"Not needed":OSCLI"Delete "+out$:ENDPROC
 1190 PRINT"Updated":IFfound%:OSCLI"Delete "+index$
 1200 OSCLI"Rename "+out$+" "+index$:OSCLI"Access "+index$+" R/r"
 1210 X%!14=0:X%!18=0:type%=FNfile(index$,5)
 1220 IFfs%=5:A%=FNNetFS_Op(18,CHR$64+index$):X%?19=X%?14:X%!15=X%!10
 1230 Sdy%=X%?15AND31:Smn%=X%?16AND15:Syr%=1981+(X%?16DIV16)+(X%?15AND&E0)/2
 1240 Sh%=X%?17:Sm%=X%?18:Ss%=X%?19
 1250 PROCDate_FromOrd(data%,Sdy%,Smn%,Syr%,Sh%,Sm%,Ss%,0)
 1260 X%!6=!data%:X%!2=&FFFFAF00:X%?2=data%?4:X%?14=&11:A%=FNfile(index$,1)
 1270 ENDPROC
 1280 DEFPROCDoDirPost
 1290 ENDPROC
 1300 DEFPROChtmlHdr
 1310 PRINT"<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.0 Transitional//EN"">";FNcr;
 1320 PRINT"<HTML><HEAD>"FNcr;
 1330 PRINT"<META http-equiv=""Content-Type"" content=""text/html; charset=ISO-8859-1"">";FNcr;
 1340 PRINT"<META name=""Generator"" content=""";IdxHeadr$;" ";ver$"; ";ver_mos$;:IFindex%<>-1:PRINT";";index%;
 1350 PRINT""">";STRING$(16-LENLEFT$(ver_mos$,16)," ");FNcr;
 1360 PRINT"<META name=""Author"" content=""Jonathan Graham Harston"">"FNcr;
 1370 PRINT"<META name=""Date"" content=""";:A%=FNdate
 1380 PRINTFNh0(A%DIV65536,4);"-";FNh0(A%DIV256,2);"-";FNh0(A%,2);
 1390 PRINT" ";RIGHT$(FNtime,8);""">"FNcr;
 1400 PRINT"<TITLE>";site$;FNNoRoot(path$+"."+f$);"</TITLE>";FNcr;
 1410 PRINT"</HEAD>"FNcr;FNcr"<BODY>"FNcr;
 1420 IFnav%:PROCnavtop:ENDPROC
 1430 PRINT"<TT>";site$;path$"."f$"<BR>";FNcr;
 1440 PRINT"<A href=""../"">Parent"+FNspc(1)+"Directory</A>";FNcr;
 1450 PRINTFNspc(16);FNcr;
 1460 PRINT"<A href=""";STRING$(dirs%,"../");home$;LEFT$("./",dirs%=0ANDhome$="");""">";
 1470 PRINT"Home"+FNspc(1)+"Page"LEFT$("</A>",html%)FNcr;
 1480 PRINT"<BR><BR>";FNcr;
 1490 ENDPROC
 1500 DEFPROCnavtop
 1510 A$=FNNoRoot(path$+"."+f$)
 1520 D%=-1:A%=0:REPEATA%=INSTR(A$,".",A%+1):D%=D%+1:UNTILA%=0
 1530 PRINT"<TABLE bgcolor=""#ffff66"" width=""100%""><TR><TD>";FNcr;
 1540 PRINT"<SMALL> <A href=""../";STRING$(D%,"../");"""";FNcr;
 1550 PRINT"target=""_top"">";LEFT$(site$,LENsite$-2);"</A>::";
 1560 REPEAT:A%=INSTR(A$,"."):P$=LEFT$(A$,A%-1):A$=MID$(A$,A%+1)
 1570   IFD%:PRINT"<A href=""";STRING$(D%,"../");"""";FNcr;"target=""_top"">";P$;"</A>.";
 1580 D%=D%-1:UNTILD%<1
 1590 PRINT"<B>";A$;"</B>";FNcr;
 1600 PRINT"</SMALL><TD align=""right"">"FNcr;
 1610 PRINT"<SMALL><A href=""http://google.co.uk/custom?domains=mdfs.net&sitesearch=mdfs.net"">Search</A>";FNcr;
 1620 PRINT" </SMALL></TABLE><P>";FNcr;
 1630 PRINT"<TT>";
 1640 ENDPROC
 1650 DEFPROCnavbot
 1660 PRINT"<CENTER><HR width=""100%"">";FNcr;
 1670 PRINT"Authored by <A href=""";STRING$(dirs%,"../");home$;LEFT$("./",dirs%=0ANDhome$="");
 1680 PRINT"User/JGH/"">J.G.Harston</A>";
 1690 A$=MID$(FNTime,5,11):A$=LEFT$(A$,2)+"-"+MID$(A$,4,3)+"-"+RIGHT$(A$,4)
 1700 PRINT"<BR>Last update: ";A$;"</CENTER>";FNcr;
 1710 ENDPROC
 1720 DEFFNunixname(A$):FORA%=1TOLENA$
 1730   IFINSTR("./",MID$(A$,A%,1)):A$=LEFT$(A$,A%-1)+CHR$(ASCMID$(A$,A%,1)EOR1)+MID$(A$,A%+1)
 1740   IFMID$(A$,A%,1)="^":A$=LEFT$(A$,A%-1)+".."+MID$(A$,A%+1):A%=A%+1
 1750 NEXT:=A$
 1760 DEFPROCMimeType
 1770 IFt%=2:icon$="folder":mime$="":ENDPROC
 1780 xt$=FNuc(RIGHT$(f2$,4))
 1790 IFxt$=".HTM":icon$="html":mime$="":ENDPROC
 1800 IFxt$=".TXT":icon$="text":mime$="":ENDPROC
 1810 IFxt$=".GIF":icon$="gif":mime$="":ENDPROC
 1820 IFxt$=".ZIP":icon$="compressed":mime$="application/zip":soft%=soft%-1:ENDPROC
 1830 IFtype%=&FFF:icon$="text":mime$="text/plain":soft%=soft%-1:ENDPROC
 1840 IFtype%=&FFB:icon$="basic":mime$="application/basic":ENDPROC
 1850 IFtype%=&FAF:icon$="html":mime$="text/html":soft%=soft%-1:ENDPROC
 1860 IFtype%=&BBC:icon$="rom":mime$="":ENDPROC
 1870 IFtype%=&700:icon$="rom":mime$="":ENDPROC
 1880 IFtype%=-1:IFX%!2<&10000:IFX%!6<&10000:icon$="unknown":mime$="application/riscos; load=&"+STR$~(X%!2)+"; exec=&"+STR$~(X%!6):ENDPROC
 1890 IFtype%=-1:icon$="unknown":mime$="application/riscos; load=&"+STR$~(X%!2)+"; exec=&"+STR$~(X%!6):ENDPROC
 1900 icon$="unknown":mime$=""
 1910 ENDPROC
 1920 DEFPROCFileType:type%=-1
 1930 IFX%!2<>X%!6:type%=(X%!2AND&FFF00)DIV256:IFtype%=&FFFORtype%=&FC0ORX%!6=&FFFF0000ORX%!6=-1:ENDPROC
 1940 IF(X%!4AND&FFFF)=(X%!8AND&FFFF):IF(((X%!4AND&FFFF)+1)AND&FFFF)<2:type%=-1
 1950 IFX%!2=X%!6:IF(X%!2AND&FFFF)=&8000:type%=&BBC
 1960 IFX%?2=0:IF(X%!4AND&FFFF)=(X%!8AND&FFFF):IF(((X%!4AND&FFFF)+1)AND&FFFF)<2:IF(X%?7AND&C0)=&80:type%=&FFB
 1970 IFtype%>&F0DANDtype%<&F20:type%=&FFB
 1980 ENDPROC
 1990 DEFPROCLink
 2000 soft%=soft%+1:OSCLI"Load "+f$+" "+STR$~data%:data%?253=13
 2010 f1$=$data%+CHR$0+CHR$10
 2020 A%=INSTR(f1$,CHR$0):B%=INSTR(f1$,CHR$10):IFB%<A%:A%=B%
 2030 f1$=LEFT$(f1$,A%-1)
 2040 t%=FNfile(f1$,5):PROCFileType:IFLEFT$(f1$,1)=":":f1$="."+MID$(f1$,2)
 2050 f2$=FNunixname(f1$):ENDPROC
 2060 DEFFNbas(f2$):LOCALB$:IFINSTR(f2$,".")=0:=f2$
 2070 A%=LENf2$+1:REPEATA%=A%-1:UNTILMID$(f2$,A%,1)=".":B$=LEFT$(f2$,A%-1):A$=FNuc(MID$(f2$,A%))
 2080 IFFNfile("@."+B$,5)=1:=f2$
 2090 IFA$=".SRC"ORA$=".SR"ORA$=".S":=B$
 2100 IFA$=".BBC"ORA$=".BB"ORA$=".B":=B$
 2110 =f2$
 2120 DEFFNlf:OSCLI"FX3,16":VDU13:OSCLI"FX3":VDU10:=""
 2130 DEFFNcr:OSCLI"FX3,16":PRINT:OSCLI"FX3":VDU13:=""
 2140 DEFFNspc(A%):=STRING$(A%AND(A%>0),LEFT$(" ",html%)+LEFT$(" ",text%))
 2150 DEFPROCClose_All
 2160 in%=in%:IFin%:A%=in%:in%=0:CLOSE#A%
 2170 out%=out%:IFout%:A%=out%:out%=0:CLOSE#A%
 2180 ENDPROC
 2190 DEFFNOS_GetEnv:A%=0:X%=1:os%=((USR&FFF4)AND&FF00)DIV256
 2200 A%=&600-&7B00*(PAGE>&8000):IF!(PAGE-&100)=@%:A%=PAGE-&300
 2210 IF?(TOP-3)=0:A%=&100:IFHIMEM<&FFFF:A%=PAGE-&300:IF!(HIMEM+512)=@%:A%=HIMEM
 2220 A$=$A%:IFPAGE=&8F00:run$=A$:SYS16TOA$,,A%:SYS72,"",A%:A$=MID$(A$,1+INSTR(A$+" "," ",1+INSTR(A$," "))):IFLENA$=0:A$=run$
 2230 FORY%=-1TO0:A$=" "+A$:REPEATA$=MID$(A$,2):UNTILASCA$<>32:IFASCA$=34:A%=INSTR(A$,"""",2)+1ELSEA%=INSTR(A$+" "," ")
 2240   IFY%:run$=MID$(A$,1-(ASCA$=34),A%-1+2*(ASCA$=34)):A$=MID$(A$,A%+1)
 2250 NEXT:=A$
 2260 DEFPROCos(A$):IFASCA$=42:OSCLIA$ELSEIFLENA$:CHAINA$
 2270 ENDPROC
 2280 DEFPROCexit(A%):OSCLI"FX1,"+STR$A%:quit$=quit$:A$=quit$:quit$="":PROCos(A$)
 2290 IFPAGE>&FFFFF:QUITA%ELSEEND
 2300 ENDPROC
 2310 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$
 2320 IFl$="":A%=INSTR(A$+" "," "):l$=LEFT$(A$,A%-1):A$=FNs(MID$(A$,A%+1)):=l$
 2330 IFn%=0:IFl$<>"":A%=INSTR(A$,l$):IFA%:A$=FNs(LEFT$(A$,A%-1)+MID$(A$,INSTR(A$," ",A%)+1))+" ":=TRUE
 2340 IFn%=0:IFl$<>"":=FALSE
 2350 A%=INSTR(LEFT$(" ",ASCl$=32)+A$,l$):IFA%=0:=""
 2360 A$=LEFT$(A$,A%-1)+FNs(MID$(A$,INSTR(A$," ",A%)+1))
 2370 IFASCl$=32:l$=MID$(A$,A%):A$=LEFT$(A$,A%-1):=MID$(l$,1-(ASCl$=34),LENl$+2*(ASCl$=34))
 2380 IFASCMID$(A$,A%,1)<>34:l$=MID$(A$,A%,INSTR(A$+" "," ",A%)-A%):A$=LEFT$(A$,A%-1)+MID$(A$,A%+LENl$+1):=l$
 2390 l$=MID$(A$,A%+1,INSTR(A$+" ",""" ",A%+1)-A%-1):A$=LEFT$(A$,A%-1)+MID$(A$,A%+LENl$+3):=l$
 2400 DEFFNs(A$):IFLEFT$(A$,1)=" ":REPEATA$=MID$(A$,2):UNTILLEFT$(A$,1)<>" "
 2410 IFRIGHT$(A$,1)=" ":REPEATA$=LEFT$(A$,LENA$-1):UNTILRIGHT$(A$,1)<>" "
 2420 =A$
 2430 DEFFNuc(A$):LOCALB$:IFA$="":=""
 2440 REPEATB$=B$+CHR$(ASCA$AND((A$<"@")OR&DF)):A$=MID$(A$,2):UNTILA$="":=B$
 2450 DEFFNlc(A$):LOCALB$:IFA$="":=""
 2460 REPEATB$=B$+CHR$(ASCA$OR((A$<"_")AND&20)):A$=MID$(A$,2):UNTILA$="":=B$
 2470 DEFFNh0(A%,N%):=RIGHT$("0000000"+STR$~A%,N%)
 2480 DEFFNfile(A$,A%):$name%=A$:?X%=name%:X%?1=name%DIV256:=(USR&FFDD)AND&FF
 2490 DEFFNgbpb(A%):X%!1=name%:CALL&FFD1:A%=name%+((1+?name%)AND((A%AND-2)=6)):A%?(1+?A%)=13:=$(A%+1)
 2500 DEFFNgbpb8(ptr%):X%!1=name%:X%!5=1:X%!9=ptr%:A%=8:CALL&FFD1:IFX%!5=1:=""
 2510 A%=name%+1:A%!(A%?-1)=&D20:A%?(INSTR($A%," ")-1)=13:=$A%
 2520 DEFFNfs:LOCALA%,Y%,E%:=(USR&FFDA)AND&FF
 2530 DEFFNtime:?X%=0:A%=14:CALL&FFF1:IF?X%=0:=""
 2540 X%?24=13:A%=VAL$(X%+4):$(X%+4)=RIGHT$("0"+STR$(A%AND31),2):$(X%+11)=STR$(INTVAL$(X%+11)+(A%AND&E0)DIV2-100*(INTVAL$(X%+11)<1981)):X%?6=32:X%?15=46:=$X%
 2550 DEFFNTime:!X%=1:A%=14:CALL&FFF1:FORA%=0TO7:X%?A%=VALSTR$~X%?A%:NEXT
 2560 ?X%=?X%+((X%?2)AND&E0)DIV2:X%?2=X%?2AND31:IF?X%<81:?X%=?X%+100
 2570 IF!X%=101:!X%=&10000700:X%!4=0:A%=20:CALL&FFF1:!X%=0:IFX%!4:?X%=81+(X%?5DIV16)+((X%?4AND&E0)DIV2):X%?1=X%?5AND15:X%?2=X%?4AND31:X%!4=X%!6
 2580 IFX%?3=0:IFX%?2:X%?3=FNDate_DayOfWeek(X%?2,X%?1,1900+X%?0)
 2590 =FNDay(X%?3)+","+FNd0(X%?2,2)+" "+FNMon(X%?1)+" "+FNd0(1900+X%?0,4)+"."+FNd0(X%?4,2)+":"+FNd0(X%?5,2)+":"+FNd0(X%?6,2)
 2600 DEFFNdate:A%=14:!X%=1:CALL&FFF1:IF!X%=1:=0
 2610 ?X%=EVAL("&"+STR$((VALSTR$~?X%+(((VALSTR$~X%?2)DIV2)AND&F0))MOD100))
 2620 =(VALSTR$~X%?2AND31)+256*VALSTR$~X%?1+65536*(&1900+?X%-&700*(?X%<128))
 2630 DEFFNd0(A%,N%)=RIGHT$("00000000"+STR$A%,N%)
 2640 DEFFNDay(A%):=MID$("000SunMonTueWedThuFriSat",A%*3+1,3)
 2650 DEFFNMon(A%):=MID$("000JanFebMarAprMayJunJulAugSepOctNovDecDDDEEEFFF",A%*3+1,3)
 2660 DEFFNDate_DayOfWeek(d%,m%,y%):y%=y%MOD400
 2670 =(y%*365.25+m%*30+d%+VALMID$("120112234455",m%,1)+((y%MOD4)=0)-((y%-1)DIV100)-(m%>2AND((y%MOD4)=0AND(y%MOD100)<>0ORy%=0))+3)MOD7+1
 2680 DEFPROCDate_FromOrd(mem%,d%,m%,y%,hr%,mn%,sc%,cs%):y%=y%MOD400
 2690 d%=y%*365.25+m%*30+d%+VALMID$("120112234455",m%,1)+((y%MOD4)=0)-((y%-1)DIV100)-(m%>2AND((y%MOD4)=0AND(y%MOD100)<>0ORy%=0))+36493
 2700 IFd%>146066:d%=d%-146097
 2710 d%=d%*&41EB:mem%!1=d%+d%:d%=((hr%*60+mn%)*60+sc%)*100+cs%
 2720 ?mem%=d%:mem%!1=mem%!1+d%DIV256:ENDPROC
 2730 DEFFNfn_sfx(n$,t%):LOCALe%,f%,sp%,xt$:IFLENn$<10ORsfx%=0:=n$
 2740 A%=0:REPEATe%=A%+1:A%=INSTR(n$,".",e%):UNTILA%=0:IFLENn$-e%<9:=n$ELSEe%=INSTR(n$,"/",e%):IFe%=0:=n$
 2750 xt$=FNlc(MID$(n$,e%+1)):sp%=sfx%:REPEAT:f%=LEFT$($sp%,LENxt$)=xt$:IFsp%?3=44:f%=f%ANDt%=EVAL("&"+$(sp%+4))
 2760 A%=sp%:sp%=sp%+1+LEN$sp%:UNTIL?sp%=13ORf%:IFf%:xt$=LEFT$($A%,3)
 2770 IFRIGHT$(n$,1)<="_":IFRIGHT$(n$,1)<>"/":xt$=FNuc(xt$)
 2780 =LEFT$(n$,e%-1)+"/"+xt$
 2790 DEFFNPath_Name:A%=6
 2800 DEFFNPath_Full:A%=&106
 2810 LOCALn$,p$:REPEAT:X%!1=name%:CALL&FFD1
 2820   ?(name%+2+?name%+?(name%+?name%+1))=13
 2830   n$=$(name%+2+?name%):*DIR ^
 2840   n$=LEFT$(n$,INSTR(n$+" "," ")-1)
 2850 p$=n$+"."+p$:UNTILn$="$"ORn$="&"
 2860 p$=LEFT$(p$,LENp$-1):OSCLI"DIR "+p$
 2870 IFA%=6:X%!1=name%:CALL&FFD1:?(name%+1+?name%)=13:n$=$(name%+1):IFn$<>"":=":"+n$+"."+p$
 2880 X%!1=name%:A%=5:CALL&FFD1
 2890 ?(name%+1+?name%)=13:n$=$(name%+1)
 2900 n$=LEFT$(n$,INSTR(n$+" "," ")-1):=":"+n$+"."+p$
 2910 DEFFNNetFS_Op(A%,A$):!X%=0:X%?1=8+LENA$:X%!3=A%:$(X%+7)=A$:A%=&14:CALL&FFF1:=X%?3
 2920 DEFPROCver_Scan:LOCALtmp$,in%:ver_mos$=""
 2930 REPEAT:tmp$="tmp"+RIGHT$(STR$TIME,4):in%=OPENIN(tmp$):IFin%:CLOSE#in%
 2940 UNTILin%=0:OSCLI"Spool "+tmp$:OSCLI"FX3,70":OSCLI"HELP":OSCLI"FX3":*Spool
 2950 in%=OPENIN(tmp$):FORA%=0TO1:IFA%:DIMver_ttl$(ver_num%)
 2960   PTR#in%=0:ver_num%=-1:REPEAT:A$=FNrd(in%):IFRIGHT$(A$,1)=")":A$=LEFT$(A$,INSTR(A$+"(","(")-1)
 2970     IFLENA$>2:IFASCA$<>32:ver_num%=ver_num%+1:IFA%:ver_ttl$(ver_num%)=A$:IFLEFT$(A$,3)="OS "ORLEFT$(A$,4)="MOS ":ver_mos$=A$
 2980 UNTILEOF#in%:NEXT:CLOSE#in%:in%=0:OSCLI"Delete "+tmp$
 2990 IFos%=6SYS"XOS_Byte"TOA%:SYS"OS_WriteN",A%+4TOA$:ver_mos$=LEFT$(A$,INSTR(A$+" ("," (")-1)
 3000 ENDPROC
 3010 DEFFNrd(i%):LOCALA%,B%,A$:REPEAT:A%=BGET#i%:IFA%<>10ANDA%<>13:A$=A$+CHR$A%
 3020 UNTILA%=10ORA%=13OREOF#i%:IFNOTEOF#i%:B%=BGET#i%:IFA%=B%OR(B%<>13ANDB%<>10):PTR#i%=PTR#i%-1
 3030 =A$