> SJFiler Kos%=fx(0,1)&FF:10,8:A%=:13:A%<50:&87:>&7C00:&83:>&4000:&80 <&FFFF:=fx(132,0) (init:hdr::err: 2.curr%=-1::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.31a" n[ctrl% 127,name% 255,thisdir% 63,bitmap% 63,object% 63,dir% &3FF,alloc% &3FF,data% &3FF xND%=0:drv$="":path$="":title$="":csd%=0:home%=0:valid$="SJ Research":res%=0 Jopt%=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:"SJFiler 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 9ݤ_OPT(A$):A$="":"OPT=";opt%'"1:"'"2:"'"4:"'"8:":=0 opt%=(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("|&"):= aA$,1)="&":csd%=0:A%=Mount:home%=(uc(A$)):thisdir%!31=home%*256:path$="&"+h0(home%,6):=0 .A$,".")+A$,"^"):"DIR ":= 5A$="$":csd%=0:A%=Mount:home%=root%:path$="$":=0  look:= 5(fptr%?&17&20)=0:"'"src$"' not a directory":= &$A%=0634:thisdir%!A%=ptr%!A%: 0Bpath$=path$+".",ptr%?1<>37)+$(ptr%+1):home%=thisdir%!32&FFFF :=0 D'ݤ_BLOCK(A$):syn(""):= NMblk%=("&"+uc(A$)):RdBlocks(data%,blk%,D%,1):O%=data%:ln%=1024:dump() X=0 b!ݤ_DUMP(A$):syn(""):= l look:= v dump() =0 (dump(F%):cols%=16:wdt%<80:cols%=8 P%=0ln%-1cols%:B$="" :h0(P%,6)" ";:F%:(P%&3FF)=0:ReadData(P%):O%=data% 9Q%=P%P%+cols%-1:Q%=" "A$<="~" B$=B$+A$B$=B$+"." O%=O%+1::B$:: !ݤ_TYPE(A$):syn(""):= Bmsk%=A$," [")<>0:msk%=(msk%&80)&7F:src$=A$,A$+" "," ")-1)  look:= ;last%=0:P%=0ln%-1:(P%&3FF)=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  ݤ_INFO(A$) *A$="":Mount:= 4 A$="":"Disk: MDFS::"title$ >eA$="":"Root: &"h0(root%,6)" Size: &"h0(dsize%,6)" CrDate: "date(idate%)" "time(itime%):=0 H look:= R#fptr%=object%:x%=0:ListFile(1) \Ap%=0312:h0(object%?p%,2);h0(object%?(p%+1),2)" ";::8 f,p%=32632:h0(object%!p%,4)" ";::8 p=0 zGݤ_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:= 5src$="$":csd%=0:A%=Mount:ptr%=thisdir%:A%<0:= cblk%=ptr% N((object%?&17)&20)=0:fptr%=object%:leaf$=src$:CopyOneFile(src$,dst$):=0 !A%=file(dst$,8):dst$=dst$+d$ CopyDirectory(dst$) ~src$="$":load%=0:exec%=0:length%=&200:attr%=8:mdate%=idate%:mtime%=itime%:cdate%=idate%:ctime%=itime%FileInfo(thisdir%) SetInfo(dst$,dst$-1)) =0 ,CopyDirectory(dst$):entry%,bit%,fptr% %A%=0634:thisdir%!A%=cblk%!A%: $%ptr%=32:cblk%=thisdir%!ptr%&FFFF .RdDir:RdBitMap 8!bit%=?bitmap%2:fptr%=dir%+64 Bentry%=1: L)(entry%7)=0:bit%=bitmap%?(entry%8) VQ(entry%15)=0:ptr%=ptr%+2:cblk%=thisdir%!ptr%&FFFF:cblk%:RdDir:fptr%=dir% `(bit%1)<>0:CopyObject jbit%=bit%2:fptr%=fptr%+64 tentry%=entry%+1:entry%>255 ~ >CopyObject:ptr%,bit%,old_cblk%,thisdir$,bitmap$,object$ !FileInfo(fptr%):fname$="": 9cnf%:"Copy "fname$;:cnf%=yna(cnf%):cnf%>0::13 )leaf$=fname$:fname$=fn_todos(fname$) 7(access%&20)=0:CopyOneFile(fname$,dst$+fname$): 4"Copying "fname$;(10-fname$)" to "dst$+fname$ old_cblk%=cblk% -A%=063:thisdir$=thisdir$+thisdir%?A%: ,A%=063:bitmap$ =bitmap$ +bitmap%?A%: *A%=063:object$ =object$ +fptr%?A%: cblk%=fptr% A%=file(dst$+fname$,8) "CopyDirectory(dst$+fname$+d$)  )A%=063:object%?A%=object$,A%+1): ,FileInfo(object%):SetInfo(dst$+fname$) +A%=063:thisdir%?A%=thisdir$,A%+1): (+A%=063:bitmap%?A% =bitmap$ ,A%+1): 2cblk%=old_cblk%:RdDir < F#CopyOneFile(src$,dst$):cblk% P-"Copying "src$;(10-src$)" to "dst$;4; Z$A%=0634:object%!A%=fptr%!A%: d@FileInfo(object%):file(dst$,5):X%!14=&33:A%=file(dst$,4) n@X%!2=load%:X%!6=exec%:X%!10=0:X%!14=length%:A%=file(dst$,7) xlength%:CopyData SetInfo(dst$):3,127)  CopyData .out%=f_openout(dst$):P%=0::ReadData(P%) 1(P%1023)=0:3,8)d0(100*P%length%,2)"%"; .num%=1024:P%+num%>length%:num%=length%-P% 5gbpb(2,out%,data%,num%,0):P%=P%+1024:P%>length% #out%:out%=0: TSetInfo(dst$):X%!2=load%:X%!6=exec%:X%!10=length%:X%!14=attr%:A%=file(dst$,1) MA$=leaf$+11-leaf$," ")+h0(load%,8)+" "+h0(exec%,8)+" "+h0(length%,8) Lfullinf%:A$=A$+" "+h0(attr%255,2)+" "+h0(mdate%,4)+" "+h0(mtime%,6) Wfullinf%:A$=A$+" "+h0(cdate%,4)+" "+h0(ctime%,6)+" "+h0(acc%,4)+" "+h0(aux%,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=cdate%:A%=NetFS_OpN(19,5,10,dst$) ,NetFS_Op(18,64+dst$): 66X%!8=cdate%:X%!10=ctime%:X%!13=mdate%:X%!15=mtime% @ A%=NetFS_OpN(19,64,18,dst$) J>A%=NetFS_Op(0,"ACCOUNT "+dst$+" "+~acc%+" ("+~aux%+")") T ^6LstDir(cflg%):x%=0:Mount:"Not an MDFS disk": h""Path: MDFS::"title$"."path$' r%ptr%=32:cblk%=thisdir%!ptr%&FFFF |RdDir:RdBitMap !bit%=?bitmap%2:fptr%=dir%+64 entry%=1255 )(entry%7)=0:bit%=bitmap%?(entry%8) Q(entry%15)=0:ptr%=ptr%+2:cblk%=thisdir%!ptr%&FFFF:cblk%:RdDir:fptr%=dir% !(bit%1)<>0ListFile(cflg%) &bit%=bit%2:fptr%=fptr%+64:entry% (x%3):(cflg%1)=0:  ListFile(cflg%) +FileInfo(fptr%):fname$;(11-fname$); @(cflg%1):h0(load%,8)" "h0(exec%,8)" "h0(length%,6)" "; attr(access%); A(cflg%1):date(cdate%)" "date(mdate%)" "time(mtime%)" "; /(cflg%1):h0(acc%,3)" ("h0(aux%,3)")": (x%=x%+1:x%<(wdt%+1)20:" ";x%=0:  &ݤattr(A%):A$="" 0(A%1):A$="r"+A$ :(A%2):A$="w"+A$ D A$="/"+A$ N(A%4):A$="R"+A$ X(A%8):A$="W"+A$ b(A%16):A$="L"+A$ l(A%32):A$="D"+A$ v(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),2) .ݤtime(A%)=d0(A%255,2)+":"+d0(A%256,2) Dݤlook:src$=A$:ptr%=find(src$):ptr%=0:"'"src$"' not found":= #A%=0634:object%!A%=ptr%!A%: ln%=object%!&14&FFFFFF:= 6ݤfind(A$):match$=uc(A$,10)):match%=0:Mount:=0 %ptr%=32:cblk%=thisdir%!ptr%&FFFF match$,1)="%":cblk%=0 RdDir:RdBitMap cblk%=0:!bitmap%=&FFFF !bit%=?bitmap%2:fptr%=dir%+64 entry%=1:  )(entry%7)=0:bit%=bitmap%?(entry%8) Q(entry%15)=0:ptr%=ptr%+2:cblk%=thisdir%!ptr%&FFFF:cblk%:RdDir:fptr%=dir%  ](bit%1)<>0fptr%?11=13:fname$=$(fptr%+1)+0:match%=(uc(fname$,fname$,0)-1))=match$) *7match%:bit%=bit%2:fptr%=fptr%+64:entry%=entry%+1 4'entry%>((cblk%<>0&FF)&0F)match% >match%:=fptr%=0 HFileInfo(f%) R1A%=f%?&B:f%?&B=13:fname$=s($(f%+1)):f%?&B=A% \@A%=1fname$:fname$,A%,1)<"!"fname$,A%,1)>"~":fname$="" fA% p%acc%=?f%:load%=f%!&C:exec%=f%!&10 zlength%=f%!&14&FFFFFF access%=f%?&17  cdate%=f%!&18&FFFF:ctime%=0 +mdate%=f%!&1A&FFFF:mtime%=f%!&1C&FFFF aux%=f%?&1E:vec%=f%?&1F1 acc%=acc%(f%?&1F&0E)*128 aux%=aux%(f%?&1F&70)*8 Aattr%=(access%3)*16+(access%&C)/4+(access%16)/2+mdate%*256  RdDir:curr%=cblk%: ,RdBlocks(dir%,cblk%,D%,1):curr%=cblk%: 0RdBitMap:A%=0634:bitmap%!A%=dir%!A%:: ݤMount:csd%:=0 7curr%=-1:res%=0:data%!&40=0:RdBlocks(data%,0,D%,1) 4err%=-2:"Disk error: image file not found":=-2 Odata%?(&40+valid$)=13:$(data%+&40)<>valid$:res%=1:RdBlocks(data%,0,D%,1) 4data%?(&40+valid$)=13:$(data%+&40)<>valid$:=-5 $GA%=0634:thisdir%!A%=data%!A%::path$="$":root%=thisdir%!32&FFFF .;data%?&61=13:title$=$(data%+&57):dsize%=data%!&62&FFFF 83idate%=data%!&7A&FFFF:itime%=data%!&7C&FFFFFF Bhome%=root%:csd%=home% L=0 V+ReadData(ptr%):p%:vec%=object%?&1F1 `Tvec%=0:p%=32+(ptr%1024)*2:cblk%=object%!p%&FFFF:RdBlocks(data%,cblk%,D%,1): jp%=32+(ptr%(512*1024))*2 tcblk%=object%!p%&FFFF ~ RdBlocks(alloc%,cblk%,D%,1) p%=(ptr%(512*1024-1)) p%=(p%1024)*2 cblk%=alloc%!p%&FFFF RdBlocks(data%,cblk%,D%,1)  /RdBlocks(addr%,block%,drive%,number%):p% Herr%=0:p%=0number%-1:fdcRd(addr%+p%*1024,block%+res%+p%,drive%,1) : fdcRd(ad%,sc%,drv%,nm%) :A%=010234:ad%!A%=0::drv%=drv%-5:drv%>7:err%=-1: Bdrv$=""::fdcOp(1):ad%=ad%+1024:sc%=sc%+1:nm%=nm%-1:nm%<1: *dsk%=f_openin(drv$):dsk%=0:err%=-2: Msc%*1024>#dsk%:#dsk%:dsk%=0:err%=-3:"Disk error: past end of image": 5gbpb(3,dsk%,ad%,nm%*1024,sc%*1024):#dsk%:dsk%=0  fdcOp(op%) (os%=6:trk%=sc%5:hd%=trk%1:trk%=trk%2:sec%=sc%5:ș"XADFS_DiscOp",,op%,((trk%*2+hd%)*5+sec%)*1024+0+((drv%3)<<29),ad%,1024err% 2aos%<6:op%=1:trk%=sc%5:trk%=trk%2+80*(trk%1):err%=scsi(addr%,&08,drv%4,trk%*16+sc%5,1) < csd%=0: Ferr%:: Perr%=-1:"Unsupported": Z+=;\",A$,A%,1)):B%:A$=A$,A%-1)+".#$^&@%~",B%,1)+A$,A%+1) :=A$ ݤyna(A%):A%=0:=0 +"? (Y/N/A)";::A%="YAN",(&DF)):A% +7,127);"YesAllNo ",A%*3-2,3);:=A%-2 +ݤscsi(addr%,cmd%,drv%,sect%,num%):fs% fs%=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% 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$ 6Rݤ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 J1A%=255:X%?6=0:"LOAD """+A$+""" "+~X%!2:=1 TA%=5:X%!14:=1A%=5:=0 ^FA%=0:"SAVE """+A$+""" "+~X%!10+" "+~X%!14:X%!10=X%!14-X%!10:=1 hBA%=7:"SAVE """+A$+""" "+~+"+"+~X%!10:X%!10=X%!14-X%!10:=1 r A%-8:=0 |+(os%-24):A$="mkdir "+A$A$="cdir "+A$ >&FFFF:::=0 A$:=2 #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: -ݤ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 0A%=&14:&FFF1:=X%?3