> UxFiler Kos%=fx(0,1)&FF:10,8:A%=:13:A%<50:&87:>&7C00:&83:>&4000:&80 <&FFFF:=fx(132,0) (init:hdr::err: 2:X%=ctrl%:Y%=X%256:: <8:wdt%=+1: F'drv$="":(D%+48)">";"["drv$"]"; P"csd%=home%:" "A$:do(s(A$)) Z dinit:ver$="1.31b" nsctrl% 127,name% 255,zp% 7,data% 511,data2% 511,ientry% 63,dir% 515,object% 63,thisdir% 63,diskrec% 255(os%=6) xVX%=ctrl%:Y%=X%256:res%=0:D%=0:drv$="":path$="/":title$="":home%=-1:csd%=-1:fsv%=6 @fs%=fs:d$=".":s$="/":os%-24:d$="/":s$=".":os%-32:d$="\" Ucmd$=":MOUNT:DIR:CD:CAT:EX:LS:INFO:TYPE:DUMP:IMPORT:EXPORT:FREE:BLOCK:HELP:QUIT:" hlp$=":|:|&:|&::::(): [CTRLS]: [7BIT]: (): ():::::"  -hdr:"UxFiler v"ver$" by J.G.Harston": ݤerr:"FX229":: !:fs<>fs%:"FX143,18,"+fs% ?CloseAll:A%=<>17<>28:" at line "+Þ,<128A%):=-1A% -CloseAll:in%=in%:in%:A%=in%:in%=0:#A% '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)) ,(B$="COPY":"Use EXPORT or IMPORT": 60B$=1"0123",B$):drv$="":D%=B$:home%=-1: @/A%=cmd$,":"+B$+":"):A%=0:"Bad command": JA%=("FN_"+B$+"(A$)"): T-ݤsyn(S$):A$="":"Syntax: "B$" "S$:== ^ݤ_QUIT(A$):"Quit" h ros%>5:*QUIT |  ݤ_HELP(A$):hdr:p%=2:q%=2: 0A%=cmd$,":",p%):2cmd$,p%,A%-p%);:p%=A%+1 0A%=hlp$,":",q%):9)hlp$,q%,A%-q%):q%=A%+1 p%>cmd$:=0 <ݤ_MOUNT(A$):home%=-1:A$<2:do(A$):=0drv$=A$:D%=-1:=0 ݤ_CAT(A$):LstDir(0):=0 ݤ_EX(A$):LstDir(1):=0 ݤ_LS(A$)=_EX(A$) ݤ_CD(A$)=_DIR(A$) 2ݤ_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:= 3(mode%16384)=0:"'"src$"' not a directory":= %path$=path$+fname$+"/":home%=ptr% \path$,3)="../":path$=path$,path$-4)::path$=path$,path$-1):path$,1)="/"path$="" &*path$,2)="./":path$=path$,path$-2) 0=0 :'ݤ_BLOCK(A$):syn(""):= DLblk%=("&"+uc(A$)):RdBlocks(data%,blk%,D%,1):O%=data%:ln%=512:dump() N=0 X!ݤ_DUMP(A$):syn(""):= b look:= l dump() v=0 (dump(F%):cols%=16:wdt%<80:cols%=8 P%=0ln%-1cols%:B$="" :h0(P%,6)" ";:F%:(P%&1FF)=0:ReadData(P%):O%=data% Q%=P%P%+cols%-1 'Q%=" "A$<="~" B$=B$+A$B$=B$+"." O%=O%+1::B$:: !ݤ_TYPE(A$):syn(""):= @msk%=A$," [")<>0:msk%=(msk%&80)&7F:A$=A$,A$+" "," ")-1)  look:= ;last%=0:P%=0ln%-1:(P%&1FF)=0:ReadData(P%):O%=data% 3Q%=?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::: =0  ݤ_FREE(A$):A%=Mount *:RdInode(0):RdBlocks(dir%,1,D%,1):isize%=dir%!0&FFFF 4Efsv%=6:fsize%=dir%!2&FFFF:nfree%=dir%!4&FFFF:ptr%=dir%!6&FFFF >Kfsv%=7:fsize%=swap32(dir%!2):nfree%=dir%!6&FFFF:ptr%=swap32(dir%!8) Hfree%=nfree%: REptr%:RdBlocks(data%,ptr%,D%,1):data%?1=0:free%=free%+data%?0-1 \$ptr%:fsv%=6:ptr%=data%!2&FFFF f'ptr%:fsv%=7:ptr%=swap32(data%!2) p+ptr%<2ptr%>=fsize%:used%=fsize%-free% zQ"Disk free: &"h0(free%,8)" blocks, &"h0(free%*512,8)" bytes, ";free%2;"K" Q"Disk used: &"h0(used%,8)" blocks, &"h0(used%*512,8)" bytes, ";used%2;"K" T"Disk size: &"h0(fsize%,8)" blocks, &"h0(fsize%*512,8)" bytes, ";fsize%2;"K" =0 ݤ_INFO(A$) A$="":PrSBlock:=0  look:= !inode%=ptr%:x%=0:ListFile(1) 5fsv%=6:p%=8isz%-12:h0(ientry%!p%,4)" ";:: ;fsv%=7:p%=12413:h0(swap24(ientry%!p%),6)" ";:: ;fsv%=7:p%=42483:h0(swap24(ientry%!p%),6)" ";:: =0 Iݤ_EXPORT(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$<>"/":A%=look:cblk%=ptr%:A%:= 8*A$="/":A%=Mount:cblk%=root%:A%<0:= BFileInfo(cblk%) LM(mode%24576)<>16384:fptr%=ientry%:leaf$=src$:CopyOneFile(src$,dst$):=0 V6A%=file(dst$,8):dst$=dst$+d$:CopyDirectory(dst$) `"MetaInfo(thisdir%):AcornInfo jSetInfo(dst$,dst$-1)) t=0 ~7ݤ_IMPORT(A$):syn(" "):= +A%=A$," "):src$=A$,A%-1):A$=A$,A%+1) +A%=A$," "):dst$=A$,A%-1):A$=A$,A%+1) 5ptr%=find(dst$):ptr%=0:"'"dst$"' not found":= FileInfo(ptr%) 7in%=f_openin(src$):in%=0:"'"src$"' not found":= Iln%=#in%:ln%>length%:#in%:in%=0:"Source file longer than dest":= :ln%>1024*1024-1:#in%:in%=0:"Can't 1M+ files yet":= ""Copying "src$;" to "dst$;4; P%=0ln%-1:B%=0 [(P%&1FF)=0:f_gbpb(3,in%,data%,512,P%):WriteData(P%):3,8)d(100*P%length%,2)"%"; :#in%:in%=0:3,127) =0 LCopyDirectory(dst$):entry%,bit%,inode%,fptr%,fname$,blk%,dptr%,alloc%  'A%=0634:thisdir%!A%=ientry%!A%: alloc%=all0%  (8blk%=thisdir%!alloc%&FFFFFF:fsv%=6:blk%=blk%&FFFF 2blk%:CopyBlock <alloc%=alloc%+alsz% Fblk%=0alloc%>almx%-1 P ZCopyBlock d(RdBlocks(dir%,blk%,D%,1):dptr%=dir% n xinode%=!dptr%&FFFF =dir%+512  >CopyObject:ptr%,bit%,old_cblk%,thisdir$,bitmap$,object$ fname$="."fname$="..": 9cnf%:"Copy "fname$;:cnf%=yna(cnf%):cnf%>0::13 NFileInfo(inode%):leaf$=fname$:fname$=fn_undos(fname$),10):fptr%=ientry% ;(mode%24576)<>16384:CopyOneFile(leaf$,dst$+fname$): old_cblk%=cblk% -A%=063:thisdir$=thisdir$+thisdir%?A%: *A%=063:object$ =object$ +fptr%?A%: cblk%=inode% A%=file(dst$+fname$,8) ""CopyDirectory(dst$+fname$+d$) ,)A%=063:object%?A%=object$,A%+1): 6MetaInfo(object%) @$AcornInfo:SetInfo(dst$+fname$) J+A%=063:thisdir%?A%=thisdir$,A%+1): T-cblk%=old_cblk%:RdBlocks(dir%,blk%,D%,1) ^ h#CopyOneFile(src$,dst$):cblk% r+"Copying "src$;(15-src$)"to "dst$4; |$A%=0634:object%!A%=fptr%!A%: @MetaInfo(object%):file(dst$,5):X%?14=&33:A%=file(dst$,4) KAcornInfo:X%!2=load%:X%!6=exec%:X%!10=0:X%!14=length%:A%=file(dst$,7) length%:CopyData SetInfo(dst$):3,127): CopyData 8out%=f_openout(dst$):P%=0::ReadData(P%):=0:4; 0(P%1023)=0:3,8)d(100*P%length%,2)"%"; -num%=512:P%+num%>length%:num%=length%-P% 7f_gbpb(2,out%,data%,num%,0):P%=P%+512:P%>=length% #out%:out%=0: TSetInfo(dst$):X%!2=load%:X%!6=exec%:X%!10=length%:X%!14=attr%:A%=file(dst$,1) UA$=leaf$+15-leaf$," ")+h0(load%,8)+" "+h0(exec%,8)+" "+h0(length%,8)+13+10 Kinf%:out%=(dst$+s$+"inf"):p%=1A$:#out%,A$,p%,1)::#out%:out%=0  fs%<>5: +X%!8=cdate%:A%=NetFS_OpN(19,5,10,dst$) NetFS_Op(18,64+dst$): &6X%!8=cdate%:X%!10=ctime%:X%!13=mdate%:X%!15=mtime% 0 A%=NetFS_OpN(19,64,18,dst$) :>A%=NetFS_Op(0,"ACCOUNT "+dst$+" "+~acc%+" ("+~aux%+")") D N5LstDir(cflg%):x%=0:Mount:"Not a UNIX disk": XRdInode(csd%) bH(ientry%?1(64+32))<>64"inode "h0(csd%,4)" is not a directory": l"Path: "path$ vU(cflg%1):"inode filename"12"mode"6"nd uid gid len ctime"4"mtime"4"atime" alloc%=all0%  7blk%=ientry%!alloc%&FFFFFF:fsv%=6:blk%=blk%&FFFF blk%:ListBlock alloc%=alloc%+alsz%  alloc%almx%-1 (cflg%1)=0:(x%3):  ListBlock (RdBlocks(dir%,blk%,D%,1):dptr%=dir%  inode%=!dptr%&FFFF =dir%+512 4 >ListFile(cflg%) H!(cflg%1):h0(inode%,4)" "; R,FileInfo(inode%):fname$;(15-fname$); \@(cflg%1)=0:x%=x%+1:x%"time: disk last update:"5date(swap32(dir%!(in1%+5))) jEn%=in1%+9&1FF2:h0(dir%!n%,4);:((n%-in1%-9)31)=30:8" "; t :: ~ ݤattr(A%):A$="" (A%1)A$="x"A$="-" (A%2)A$="w"+A$A$="-"+A$ (A%4)A$="r"+A$A$="-"+A$ (A%8)A$="x"+A$A$="-"+A$ (A%16)A$="w"+A$A$="-"+A$ (A%32)A$="r"+A$A$="-"+A$ (A%64)A$="x"+A$A$="-"+A$ !(A%128)A$="w"+A$A$="-"+A$ !(A%256)A$="r"+A$A$="-"+A$ !(A%512)A$="s"+A$A$="-"+A$ "(A%1024)A$="g"+A$A$="-"+A$ "(A%2048)A$="u"+A$A$="-"+A$ "(A%4096)A$="l"+A$A$="-"+A$ "(A%8192)A$="c"+A$A$="-"+A$ #(A%16384)A$="d"+A$A$="-"+A$ (#(A%32768)A$="a"+A$A$="-"+A$ 2=A$ <ݤdate(A%) F,day%,month%,year%,hour%,minute%,second% P4X%!1=A%/2.56:X%!1=X%!1+&336E996A:Date_ToOrd(X%) Z3=d0(day%,2)+"/"+d0(month%,2)+"/"+d0(year%,2) dUnixDateToAcorn(A%) n4X%!1=A%/2.56:X%!1=X%!1+&336E996A:Date_ToOrd(X%) x;date%=&101:year%>1980:date%=f_date(day%,month%,year%) (time%=f_time(hour%,minute%,second%)  AcornInfo 6attr%=(mode%256)256+(mode%128)64+(mode%64)16 mattr%=attr%+(((mode%32)/2)((mode%4)*4))+(((mode%16)*2)((mode%2)*16))+(((mode%8)*8)((mode%1)*64)) cdate%>mdate%:cdate%=mdate% 6UnixDateToAcorn(cdate%):cdate%=date%:ctime%=time% 6UnixDateToAcorn(mdate%):mdate%=date%:mtime%=time% ?Date_FromOrd(X%,day%,month%,year%,hour%,minute%,second%,0) *X%!5=&FFFFFF:(mode%&49):X%!5=&FFFFE6 Cload%=X%!4:exec%=!X%:attr%=attr%+256*mdate%:acc%=uid%:aux%=gid%  Hݤlook:src$=A$:ptr%=find(src$):ptr%:FileInfo(ptr%):ln%=length%:= "'"src$"' not found":= 1ݤfind(A$):match$=A$,14):match%=0:Mount:=0 &RdInode(csd%):csd%=-1:csd%=root% "alloc%=all0%:match%=0 , 67blk%=ientry%!alloc%&FFFFFF:fsv%=6:blk%=blk%&FFFF @blk%:FileBlock Jalloc%=alloc%+alsz% T)match%:alloc%almx%-1match% hmatch%:=inode%=0 rFileBlock |(RdBlocks(dir%,blk%,D%,1):dptr%=dir%  inode%=!dptr%&FFFF =dir%+512match%  4FileInfo(f%):RdInode(f%):MetaInfo(ientry%): MetaInfo(i%) mode% =i%!0&FFFF 0nlink% =i%!2&FFFF:fsv%=6:nlink%=nlink%&FF 5uid% =i%!(2+usz%/2)&FFFF:fsv%=6:uid%=uid%&FF 9gid% =i%!(2+2*(usz%/2))&FFFF:fsv%=6:gid%=gid%&FF !fsv%=6:length%=swap24(i%!5) !fsv%=7:length%=swap32(i%!8) &Kfsv%=6:adate%=swap32(i%!tm%):mdate%=swap32(i%!(tm%+4)):cdate%=mdate% 0Xfsv%=7:adate%=swap32(i%!(tm%+8)):mdate%=swap32(i%!(tm%+4)):cdate%=swap32(i%!tm%) : DRdInode(i%) NRdBlocks(data%,2,D%,1) X1RdBlocks(data%,(&400+i%*isz%-isz%)512,D%,1) bi%=(&400+i%*isz%-isz%)511 l-A%=0isz%-14:ientry%!A%=data%!(A%+i%): v ݤMount:csd%<>-1:=0 ;fdcInit(diskrec%,9,9,2,2,80,1):RdBlocks(data%,2,D%,1) Cfsv%=6:isz%=32:root%=1:all0%=8:almx%=&18:alsz%=2:tm%=&18:usz%=2 Odata%!8=0:fsv%=7:isz%=64:root%=2:all0%=13:almx%=&34:alsz%=3:tm%=&34:usz%=4 #csd%=root%:home%=csd%:path$="/" =0 !ReadData(ptr%):TxData(): "WriteData(ptr%):TxData(): TxData(write%):p% vec%=(mode%4096)<>0 fsv%=6:Tx6 fsv%=7:Tx7 -p%=0:write%:A%=05114:data%!A%=0:: 'p%:TxBlocks(data%,p%,D%,1,write%)   Tx7 ?ptr%<&1400:p%=ptr%512:p%=12+p%*3:p%=swap24(ientry%!p%): *ptr%<&11400:p%=&2Ap%=&2D 44p%=swap24(ientry%!p%):RdBlocks(data2%,p%,D%,1) >ptr%<&11400:ptr%=ptr%-&1400:p%=ptr%512ptr%=ptr%-&11400:p%=ptr%(512*128):p%=swap32(data2%!(p%*4)):RdBlocks(data2%,p%,D%,1):p%=(ptr%512)127 Hp%=swap32(data2%!(p%*4)) R \ Tx6 f-vec%=0:p%=8+2*(ptr%512):p%=ientry%!p%: pp%=8+2*(ptr%(128*1024)) z%RdBlocks(data2%,ientry%!p%,D%,1) &p%=(ptr%512)&FF:p%=data2%!(p%*2)  6RdBlocks(a%,b%,d%,n%):TxBlocks(a%,b%,d%,n%,): 6TxBlocks(addr%,block%,drive%,number%,write%):q% 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 7dskrec%?8=sec0%:dskrec%!16=trks%*spt%*(2^bps%)*hds%  %fdcAct(op%,ad%,sc%,dv%,nm%,dn%) !op%=1:A%=05114:ad%!A%=0: dv%>1:err%=-1: $Cdrv$=""::fdcOp(op%):ad%=ad%+512:sc%=sc%+1:nm%=nm%-1:nm%<1: .1op%=2:dsk%=f_openup(drv$):dsk%=0:err%=-2: 81op%=1:dsk%=f_openin(drv$):dsk%=0:err%=-2: BSop%=1:sc%*512>#dsk%:#dsk%:dsk%=0:err%=-3:"Disk error: past end of image": L;f_gbpb(5-op%*2,dsk%,ad%,nm%*512,sc%*512):#dsk%:dsk%=0 V `fdcOp(op%) jos%>6:err%=-1 tQos%=6:ș"XADFS_DiscOp",,op%+(diskrec%<<6),sc%*512+((dv%3)<<29),ad%,512err% ~]os%<6:trk%=sc%9:trk%=trk%2+80*(trk%1):err%=scsi(ad%,6+op%*2,dv%4,trk%*16+sc%9+1,1)  csd%=0: err%:: err%=-1:"Unsupported": ;err%:"Disk error &"h0(err%,2)" at ";dv%":"h0(sc%,6)  1ݤswap24(A%):zp%!0=A%:zp%!3=A%:=zp%!1&FFFFFF )ݤswap32(A%):zp%!0=A%:zp%!4=A%:=zp%!2 /ݤs(A$):A$,1)=" ":A$=A$,2):A$,1)<>" " +A$,1)=" ":A$=A$,A$-1):A$,1)<>" " =A$ ݤuc(A$):A$="":="" EA%=1A$:A$,A%,1)>"_":A$=A$,A%-1)+(A$,A%,1)&5F)+A$,A%+1)  :=A$  3ݤfx(A%,X%):Y%:Y%=X%256:=(&FFF4&FFFF00)256 %ݤfn_undos(A$):B%:(os%-32):=A$ TA%=1A$:B%=".#$^&@%~",A$,A%,1)):B%:A$=A$,A%-1)+"/?<>+=;\",B%,1)+A$,A%+1) ( :=A$ 2ݤyna(A%):A%=0:=0 <+"? (Y/N/A)";::A%="YAN",(&DF)):A% F+7,127);"YesAllNo ",A%*3-2,3);:=A%-2 P%ݤh0(A%,N%):="00000000"+~A%,N%) Z$ݤd0(A%,N%):="00000000"+A%,N%) d$ݤd(A%,N%):=" "+A%,N%) n+ݤscsi(addr%,cmd%,drv%,sect%,num%):fs% xfs%=fs:fs%<>8:*FADFS 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% -ݤfs:(os%-32)=0:A%,Y%,E%:=(&FFDA)&FF =29 %f_gbpb(A%,chn%,addr%,num%,ptr%) >?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: 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 FA%=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 , A%-8:=0 6+(os%-24):A$="mkdir "+A$A$="cdir "+A$ @>&FFFF:::=0 J A$:=2 T!ݤf_openin(A$)=(f_name(A$)) ^"ݤf_openout(A$)=(f_name(A$)) h!ݤf_openup(A$)=(f_name(A$)) rWݤ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 ;Date_FromOrd(mem%,d%,m%,y%,hr%,mn%,sc%,cs%):y%=y%400 qd%=y%*365.25+m%*30+d%+"120112234455",m%,1)+((y%4)=0)-((y%-1)100)-(m%>2((y%4)=0(y%100)<>0y%=0))+36493 d%>146066:d%=d%-146097 =d%=d%*&41EB:mem%!1=d%+d%:d%=((hr%*60+mn%)*60+sc%)*100+cs% #?mem%=d%:mem%!1=mem%!1+d%256: #Date_ToOrd(mem%):A%,B%,C%,D% @year%=0:month%=0:day%=0:hour%=0:minute%=0:second%=0:centi%=0 mem%!1<0: FD%=mem%!1&83D6+2447065:C%=mem%?0+256*(mem%!1&83D6):centi%=C%100 >C%=C%100:second%=C%60:C%=C%60:minute%=C%60:hour%=C%60 8B%=((D%*4+3)146097-4)+3:C%=B%14614*5+2:D%=D%*4+3 &.A%=C%153+2:day%=C%1535+1:month%=A%12+1 0*year%=D%146097*100+B%1461+A%12-4800 : DDݤf_date(d%,m%,y%):y%=y%-1981:=d%+m%*256+(y%15)*4096+(y%16)*32 N*ݤf_time(h%,m%,s%):=h%+m%*256+s%*65536