> AFSFiler Kos%=fx(0,1)&FF:10,8:A%=:13:A%<50:&87:>&7C00:&83:>&4000:&80 <&FFFF:=fx(132,0) (init:hdr::err: 27curr%=-1:inmem%=0::fs%=fs:X%=ctrl%:Y%=X%256:: <8:wdt%=+1: F'drv$="":(D%+48)">";"["drv$"]"; P"csd%=home%:" "A$:do(s(A$)) Z0 dinit:ver$="1.32c" n\ctrl% 127,name% 255,data% 255,thisdir% &19FF,alloc% 511:diskrec%=0:os%=6:diskrec% 255 xQD%=0:drv$="":path$="":title$="":csd%=0:home%=0:valid%=&30534641:map$="JesMap" Qfsv%=0:opt%=0:fullinf%=:d$=".":s$="/":os%-24:d$="/":s$=".":os%-32:d$="\" Ecmd$=":MOUNT:DIR:CAT:EX:INFO:TYPE:DUMP:COPY:BLOCK:INF:HELP:QUIT:" hlp$=":|:|&:::(): [CTRLS]: [7BIT]: ()::FULL|SHORT::::"  .hdr:"AFSFiler v"ver$" by J.G.Harston": ݤerr:"FX229":: !:fs<>fs%:"FX143,18,"+fs% ?CloseAll:A%=<>17<>28:" at line "+Þ,<128A%):=-1A% CloseAll 'out%=out%:out%:A%=out%:out%=0:#A% 'dsk%=dsk%:dsk%:A%=dsk%:dsk%=0:#A%  do(A$):A$="?":A$="HELP" A$,1)=";"A$="": A$,1)="*":A$,2):  A$,1)=".":A$="CAT "+A$,2) "6A%=A$+" "," "):B$=uc(A$,A%-1)):A$=s(A$,A%+1)) ,CB$=1"01234567",B$):drv$="":D%=B$(((os%<6)3)7):home%=0: 6/A%=cmd$,":"+B$+":"):A%=0:"Bad command": @A%=("FN_"+B$+"(A$)"): J-ݤsyn(S$):A$="":"Syntax: "B$" "S$:== Tݤ_QUIT(A$):"Quit" ^ hos%>5:*QUIT r | ݤ_HELP(A$):hdr:p%=2:q%=2: 0A%=cmd$,":",p%):2cmd$,p%,A%-p%);:p%=A%+1 0A%=hlp$,":",q%):8)hlp$,q%,A%-q%):q%=A%+1 p%>cmd$:=0 ݤ_OPT(A$) fsv%=(A$):=0 Tݤ_INF(A$):A$="":"Output ""FULL",fullinf%);"SHORT",fullinf%)" .inf info":=0 fullinf%=uc(A$)="S":=0 ?ݤ_MOUNT(A$):home%=0:A$<2:do(A$):=0drv$=s(A$):D%=-1:=0 ݤ_CAT(A$):LstDir(0):=0 ݤ_EX(A$):LstDir(1):=0 5ݤ_DIR(A$):curr%=-1:syn("|&"):= DA$,1)="&":A%=Mount:home%=(uc(A$)):path$="&"+h0(home%,6):=0 .A$="$":A%=Mount:home%=root%:path$="$":=0  look:= 5(fptr%?&14&20)=0:"'"src$"' not a directory":= FA%=fptr%?&C:fptr%?&C=13:path$=path$+"."+s($(fptr%+2)):fptr%?&C=A% &Wpath$,2)=".^":A%=path$-1:A%=A%-1:path$,A%,1)="."A%<2:path$=path$,A%+(A%>1)) 0home%=fptr%!&17&FFFFFF :=0 D'ݤ_BLOCK(A$):syn(""):= N]blk%=("&"+uc(A$))&FFFFFF:RdBlocks(data%,blk%,D%,1):S%=blk%*256:O%=data%:ln%=256:dump X=0 b!ݤ_DUMP(A$):syn(""):= l look:= v3FileInfo(fptr%,1):S%=0::ReadData:dump:eof% =0 $dump:cols%=16:wdt%<80:cols%=8 P%=0ln%-1cols%:B$="" 'h0(P%+S%,8)" ";:Q%=P%P%+cols%-1 'Q%=" "A$<="~" B$=B$+A$B$=B$+"." O%=O%+1::B$::S%=S%+ln%: !ݤ_TYPE(A$):syn(""):= @msk%=A$," [")<>0:msk%=(msk%&80)&7F:A$=A$,A$+" "," ")-1)  look:= /FileInfo(fptr%,1):S%=0:last%=0::ReadData ?P%=0ln%-1:Q%=?O%msk%:msk%=255:Q%Q%=10Q%=13Q%>31Q% #(Q%=10Q%=13)Q%<>last%:23-Q% Q%=9:(8-(8));  !last%=?O%:O%=O%+1::S%=S%+ln% eof%::  =0 *ݤ_INFO(A$) 4A$<>"":look:= > A$<>"":x%=0:ListFile(1):=0 HMount:= RDHdr:(18-title$);"SEQINTMUX",(fsv%3)*3+1,3)" DEN=";fsv%4+1 \3"Root: &"h0(root%,6)" CrDate: "date(idate%) f6"MapA: &"h0(mapa%,6);"* ",(mapa%=map%)+2,1)" "; p6"MapB: &"h0(mapb%,6);"* ",(mapb%=map%)+2,1)" "; zV"MapSz: ";mapsz%'"Size: &"h0(dsize%,6)" ";dsize%4;"K ";(dsize%-512)/4096;"M" =0 Gݤ_COPY(A$):syn(" (inf:) (onfirm)"):= 5A%=A$+" "," "):src$=A$,A%-1):dst$=s(A$,A%+1)) 9cnf%=uc(dst$,2))=" C":cnf%:dst$=s(dst$,dst$-2)) 1inf%=uc(dst$,4))="INF:":inf%:dst$=dst$,5) !dst$="":" missing":= @os%<6:dst$,"::")dst$,1)="-":"FS prefix unsupported":= A$=src$:A$<>"$":look:= Ssrc$="$":A%=Mount:fptr%=data%:fptr%?&14=&20:fptr%!&17=root%:curr%=-1:A%<0:= >((fptr%?&14)&20)=0:leaf$=src$:CopyOneFile(src$,dst$):=0 !A%=file(dst$,8):dst$=dst$+d$ Toldcsd%=csd%:oldfptr%=fptr%:curr%=-1:csd%=fptr%!&17&FFFFFF:CopyDirectory(dst$) VA%=dst$:A%=A%-1:dst$,A%,1)=d$A%<1:leaf$=dst$,A%+1,dst$-A%-1):dst$=dst$,A%) Xsrc$="$":load%=0:exec%=0:length%=&200:attr%=8:mdate%=idate%:SetInfo(dst$+leaf$):=0 SetDir:=0 'CopyDirectory(dst$):entry%,leaf$ $*RdDir:fptr%=thisdir%:thisdir%?15=0: .8entry%=1::fptr%=thisdir%+(!fptr%&FFFF):CopyObject 8'entry%=entry%+1:entry%>thisdir%?15 B L"CopyObject:oldcsd%,oldfptr% V#FileInfo(fptr%,1):fname$="": `9cnf%:"Copy "fname$;:cnf%=yna(cnf%):cnf%>0::13 j)leaf$=fname$:fname$=fn_todos(fname$) t;((fptr%?&14)&20)=0:CopyOneFile(fname$,dst$+fname$): ~4"Copying "fname$;(10-fname$)" to "dst$+fname$ oldcsd%=csd%:oldfptr%=fptr% #curr%=-1:csd%=fptr%!&17&FFFFFF A%=file(dst$+fname$,8) "CopyDirectory(dst$+fname$+d$)  SetDir:  SetDir /curr%=-1:csd%=oldcsd%:RdDir:fptr%=oldfptr% ,FileInfo(fptr%,1):SetInfo(dst$+fname$)  CopyOneFile(src$,dst$) -"Copying "src$;(10-src$)" to "dst$;4; @FileInfo(fptr%,1):file(dst$,5):X%!14=&33:A%=file(dst$,4) >X%!2=load%:X%!6=exec%:X%!10=0:X%!14=&4000:A%=file(dst$,7)  length%:CopyData SetInfo(dst$):3,127)  (CopyData 24out%=f_openout(dst$):S%=0::ReadData:=0:4; <1(S%1023)=0:3,8)d0(100*S%length%,2)"%"; F,ln%:gbpb(2,out%,data%,ln%,0):S%=S%+ln% P"eof%:#out%:out%=0:length%=S% Z dTSetInfo(dst$):X%!2=load%:X%!6=exec%:X%!10=length%:X%!14=attr%:A%=file(dst$,1) nMA$=leaf$+11-leaf$," ")+h0(load%,8)+" "+h0(exec%,8)+" "+h0(length%,8) x:fullinf%:A$=A$+" "+h0(attr%255,2)+" "+h0(mdate%,4) A$=A$+13+10 Kinf%:out%=(dst$+s$+"inf"):p%=1A$:#out%,A$,p%,1)::#out%:out%=0  fs%<>5: %A%=NetFS_Op(19,4+access%+dst$) +X%!8=mdate%:A%=NetFS_OpN(19,5,10,dst$) NetFS_Op(18,64+dst$): ,X%!8=mdate%:X%!10=0:X%!13=mdate%:X%!15=0  A%=NetFS_OpN(19,64,18,dst$)  -Hdr:"Disk: L";fsv%4+2;"FS::"title$;: 6LstDir(cflg%):x%=0:Mount:"Not an AFS0 disk": Hdr:"."path$' *RdDir:fptr%=thisdir%:thisdir%?15=0: entry%=1thisdir%?15 2fptr%=thisdir%+(!fptr%&FFFF):ListFile(cflg%) entry%:: " ,ListFile(cflg%) 61FileInfo(fptr%,cflg%):fname$;(11-fname$); @@(cflg%1):h0(load%,8)" "h0(exec%,8)" "h0(length%,6)" "; Jattr(access%); T-(cflg%1):date(mdate%)" "h0(sin%,6): ^(x%=x%+1:x%<(wdt%+1)20:" ";x%=0: h rݤattr(A%):A$="" |(A%1):A$="r"+A$ (A%2):A$="w"+A$  A$="/"+A$ (A%4):A$="R"+A$ (A%8):A$="W"+A$ (A%16):A$="L"+A$ (A%32):A$="D"+A$ (A%64):A$="P"+A$ (A%128):A$="M"+A$ =A$+8-A$," ") Yݤdate(A%)=d0(A%31,2)+"/"+d0((A%256)15,2)+"/"+d0(1981+(A%4096)+((A%&E0)/2),4) .ݤlook:src$=A$:fptr%=find(src$):fptr%:= "'"src$"' not found":= 6ݤfind(A$):match$=uc(A$,10)):match%=0:Mount:=0 VRdDir:match$="^":thisdir%!17=&FFFF:thisdir%!19=&D5E:thisdir%?37=32:=thisdir%+17 -fptr%=thisdir%:entry%=1:thisdir%?15=0:=0 #:fptr%=thisdir%+(!fptr%&FFFF) &=A%=fptr%?&C:fptr%?&C=13:fname$=s($(fptr%+2)):fptr%?&C=A% 0/match%=(uc(fname$)=match$):entry%=entry%+1 :entry%>thisdir%?15match% Dmatch%:=fptr%=0 NFileInfo(f%,i%) X1A%=f%?&C:f%?&C=13:fname$=s($(f%+2)):f%?&C=A% b@A%=1fname$:fname$,A%,1)<"!"fname$,A%,1)>"~":fname$="" lA% vTload%=f%!&0C:exec%=f%!&10:access%=f%?&14:mdate%=f%!&15&FFFF:sin%=f%!&17&FFFFFF Klength%=0:attr%=(access%3)*16+(access%&C)/4+(access%16)/2+mdate%*256 (i%1)=0sin%=0: #fsv%<4:FileLen1:FileLen2: FileLen1 offset%=sin%: offset%=(offset%&FFF)*2+5  RdAlloc(map%+offset%256,2) &offset%=alloc%!(offset%255)&FFFF &length%=length%+256:offset%&4000 -A%=offset%255:A%:length%=length%+A%-256  FileLen2 2RdAlloc(sin%,1):ChkMap(alloc%):"Bad map": "B%=alloc%?8:B%:length%=B%-256   HA%=12::B%=alloc%!A%&FFFF00:length%=length%+B%:A%=A%+5:B%=0A%>&F9  4A%>&F9:B%=alloc%!250&FFFFFF:B%:RdAlloc(B%,1) * B%=0 4 >RdDir:curr%=csd%: Hfsv%<4:RdDir1RdDir2 Rcurr%=csd%: \ RdDir1 faddr%=thisdir%:fptr%=csd%: p$RdBlocks(addr%,fptr%&FFF,D%,1) zoffset%=(fptr%&FFF)*2+5  RdAlloc(map%+offset%256,2) $fptr%=alloc%!(offset%255)&FFFF "addr%=addr%+256:(fptr%&4000)   RdDir2 @RdAlloc(csd%,1):ChkMap(alloc%):"Bad map":thisdir%?15=0: $addr%=thisdir%:fptr%=alloc%+10: 4RdBlocks(addr%,!fptr%&FFFFFF,D%,fptr%!3&FFFF) 1addr%=addr%+256*(fptr%!3&FFFF):fptr%=fptr%+5 (!fptr%&FFFFFF)=0  ݤMount:csd%:=0 `curr%=-1:home%=0:inmem%=0:bps%=256:fsv%=8::fsv%=fsv%+((fsv%3)=0)-1:fsv%<4:spt%=10spt%=16 NfdcInit(diskrec%,8,spt%,2,fsv%4+1,80,0):!data%=0:RdBlocks(data%,0,D%,1) gfsv%<4:root%=data%!22&FFFFFF:!data%=valid%:dib%=0:RdBlocks(data%,root%,D%,1):root%3:!data%=-1:dib%=data%!&F6&FFFFFF:RdBlocks(data%,dib%,D%,1) $Ifsv%>3:!data%=-1:root%=data%!&1F&FFFFFF:RdBlocks(data%,root%,D%,1) .=fsv%>3:!data%=-1:RdBlocks(data%,data%!&0A&FFFFFF,D%,1) 8.?data%=-1:data%!3=&20202024:!data%=valid% Bfsv%=0!data%=valid% L!data%=0:drv$<>"":err%=-2 V4err%=-2:"Disk error: image file not found":=-2 `!data%<>valid%:=-5 j(RdBlocks(data%,dib%,D%,1):path$="$" t=A%=data%?20:data%?20=13:title$=s($(data%+4)):data%?20=A% ~Ufreec%=data%!36&FFFF:idate%=data%!34&FFFF:root%=data%!31&FFFFFF:dnxt%=data%?29 Pmapsz%=data%?28:nsec%=data%!26&FFFF:ndsks%=data%?25:dsize%=data%!22&FFFFFF Fntrk%=data%!20&FFFF:mapb%=0:mapa%=0:map%=0:home%=root%:csd%=home% fsv%>3:=0 Amapsz%=data%?33:mapb%=data%!30&FFFFFF:mapa%=data%!27&FFFFFF Jidate%=data%!25&FFFF:root%=data%!22&FFFFFF:dsize%=(data%!20&FFFF)*2 %map%=mapa%:home%=root%:csd%=home% )RdBlocks(data%,mapa%,D%,1):f%=?data% ARdBlocks(data%,mapb%,D%,1):((f%-?data%)255)=255:map%=mapb% =0 ReadData sin%=0:ln%=0:eof%=: !fsv%<4:ReadData1ReadData2 O%=data%: ReadData1 #RdBlocks(data%,sin%&FFF,D%,1) offset%=(sin%&FFF)*2+5 ( RdAlloc(map%+offset%256,2) 2#sin%=alloc%!(offset%255)&FFFF <eof%=sin%&4000:ln%=256 F%eof%:ln%=sin%255:ln%=0:ln%=256 P ZReadData2 deof%=0:S%=0:aptr%=0 nHaptr%=0:RdAlloc(sin%,1):ChkMap(alloc%):"Bad map":eof%=:ln%=0: x%ln%=alloc%?8::aptr%<10:aptr%=10 sec%=alloc%!aptr%&FFFFFF num%=alloc%!(aptr%+3)&FFFF 4aptr%=250:RdAlloc(sec%,1):alloc%?8=ln%:aptr%=0 %aptr%:RdBlocks(data%,sec%,D%,1) -sec%=sec%+1:num%=num%-1:alloc%!aptr%=sec% 3alloc%?(aptr%+3)=num%:alloc%?(aptr%+4)=num%256 Tln%=256:num%=0:aptr%=aptr%+5:alloc%!aptr%=0:eof%=:ln%=alloc%?8:ln%=0:ln%=256  'RdAlloc(sin%,num%):sin%=inmem%: 1RdBlocks(alloc%,sin%,D%,num%):inmemX%=sin%: KݤChkMap(B%):A%=B%?6:B%?6=13:$B%=map$:B%?6=A%:=B%?6<>B%?255B%?6=A%:= #RdBlocks(ad%,bl%,dv%,nm%):p% ?err%=0:p%=0nm%-1:fdcRd(ad%+p%*256,bl%+p%,dv%,1,fsv%4+1) : 6fdcInit(dskrec%,bps%,spt%,hds%,den%,trks%,sec0%) i%:os%<>6: "Sdskrec%?0=bps%:dskrec%?1=spt%:dskrec%?2=hds%:dskrec%?3=den%:den%=1:dskrec%?2=1 ,Gi%=4594:dskrec%!i%=0::dskrec%!60=&20000000:dskrec%!64=&20000000 67dskrec%?8=sec0%:dskrec%!16=trks%*spt%*(2^bps%)*hds% @ J&fdcRd(addr%,sec%,drv%,num%,den%) T.A%=02554:addr%!A%=0::drv%>7:err%=-1: ^A%=sec%spt% h5fsv%1:sec%=((A%80)*2+(A%80))*spt%+(sec%spt%) r4fsv%2:sec%=((A%2)*80+(A%2))*spt%+(sec%spt%) |Jdrv$=""::fdcOp(1):addr%=addr%+256:sec%=sec%+1:num%=num%-1:num%<1: *dsk%=f_openin(drv$):dsk%=0:err%=-2: bsec%*256>#dsk%:#dsk%:dsk%=0:err%=-3:"Disk error: past end of image"+10+13,curr%<>-1);: 7gbpb(3,dsk%,addr%,num%*256,sec%*256):#dsk%:dsk%=0  fdcOp(op%) Zos%=6: "XADFS_DiscOp",0,op%+64+(diskrec%<<6),sec%*bps%+((drv%3)<<29),addr%,bps%err% aos%<6:den%=1:op%=1:err%=disk(addr%,&53,(drv%3)+2*(sec%800),(sec%10)80,sec%10,1,den%) ;os%<6:den%>1:op%=1:err%=scsi(addr%,&08,drv%,sec%,1) csd%=0: err%:: err%=-1:"Unsupported": =err%:"Disk error &"h0(err%,2)" at ";drv%":"h0(sec%,6)  'ݤfn_todos(A$):B%:(os%-32)=0:=A$ TA%=1A$:B%="/?<>+=;\",A$,A%,1)):B%:A$=A$,A%-1)+".#$^&@%~",B%,1)+A$,A%+1)  :=A$ &ݤyna(A%):A%=0:=0 0+"? (Y/N/A)";::A%="YAN",(&DF)):A% :+7,127);"YesAllNo ",A%*3-2,3);:=A%-2 D4ݤdisk(addr%,cmd%,drv%,trk%,sec%,num%,den%):fs% Nfs%=fs:fs%<>4:*FX143,18,4 X7X%?0=drv%+den%*24+8:X%!1=addr%:X%?5=3-7*(cmd%>127) b=X%?6=cmd%:X%?7=trk%:X%?8=sec%:X%?9=num%&20:A%=127:&FFF1 l5A%=X%?(7+X%?5):A%<>&10:fs%<>4:"FX143,18,"+fs% v=A% +ݤscsi(addr%,cmd%,drv%,sect%,num%):fs% fs%=fs:fs%<>8:*FX143,18,8 DX%?0=0:X%!1=addr%:X%?5=cmd%:X%?6=drv%*32+((sect%&1F0000)65536) 9X%?7=((sect%&FF00)256):X%?8=sect%:X%!9=num%:X%!11=0 2A%=&72:&FFF1:A%=?X%:fs%<>8:"FX143,18,"+fs% =A% 5ݤfx(A%,X%):Y%:Y%=X%256:=((&FFF4)&FFFF00)256 $ݤh0(A%,N%):="0000000"+~A%,N%) $ݤd0(A%,N%):="00000000"+A%,N%) /ݤs(A$):A$,1)=" ":A$=A$,2):A$,1)<>" " +A$,1)=" ":A$=A$,A$-1):A$,1)<>" " =A$ ݤuc(A$):B$:A$="":="" 5B$=B$+(A$((A$<"@")&DF)):A$=A$,2):A$="":=B$ Rݤfile(A$,A%):A%-8:<&FFFFF:$name%=A$:?X%=name%:X%?1=name%256:=(&FFDD)&FF RA$=f_name(A$):A%=255A%=5:X%!14=(A$):X%!14:X%!10=#X%!14:#X%!14:X%!14=&33 1A%=255:X%?6=0:"LOAD """+A$+""" "+~X%!2:=1 *A%=5:X%!14:=1A%=5:=0 4FA%=0:"SAVE """+A$+""" "+~X%!10+" "+~X%!14:X%!10=X%!14-X%!10:=1 >BA%=7:"SAVE """+A$+""" "+~+"+"+~X%!10:X%!10=X%!14-X%!10:=1 H A%-8:=0 R+(os%-24):A$="mkdir "+A$A$="cdir "+A$ \>&FFFF:::=0 f A$:=2 p#gbpb(A%,chn%,addr%,num%,ptr%) z>?X%=chn%:X%!1=addr%:X%!5=num%:X%!9=ptr%:<&FFFFF:&FFD1: A%=1A%=3:#?X%=X%!9 3:A%=1A%=2:#?X%,?X%!1A%=3A%=4:?X%!1=#?X% 2X%!1=X%!1+1:X%!5=X%!5-1:(#?X%A%>2)X%!5<1: -ݤfs:(os%-32)=0:A%,Y%,E%:=(&FFDA)&FF =29 !ݤf_openin(A$)=(f_name(A$)) "ݤf_openout(A$)=(f_name(A$)) Wݤf_name(A$):os%-32:A%,B%:B%=A%:A%=A$,"\",A%+1):A%=0:A$,".",B%)=0:A$=A$+"." =A$ +ݤNetFS_Op(A%,A$)=NetFS_OpN(A%,0,7,A$) PݤNetFS_OpN(A%,T%,O%,A$):N%:!X%=0:X%?1=O%+1+A$:X%!3=A%:X%?7=T%:$(X%+O%)=A$ X>&FFFF:N%=4X%?1:X%?N%=X%?(N%+3)::ș&60048,A%,X%+4,O%+A$,120A%:A%=0:X%?3=0:=0 ;>&FFFF:A%>&FFFF:X%?3=?A%:ș&2002B,A%+4$(X%+4):=X%?3 A%=&14:&FFF1:=X%?3