10 REM >ETree 20 REM Displays directory tree 30 REM (C) J.G.Harston 40 REM 50 DIM ch$(10),buff% 20,data% 100:total%=0:up%=(FN_INFO("^")=2) 60 REPEAT:INPUT"Path to show: "path$ 70 IF NOT up% AND INSTR(path$,"$")=0 PRINT"Needs a reference to root ($)":path$="" 80 IF path$<>"" THEN IF FN_INFO(path$)<>2 PRINTpath$;" is not a directory":path$="" 90 UNTILpath$<>"" 100 INPUT"List files? "F$:F$=LEFT$(F$,1):Fflg%=F$="Y" OR F$="y" 110 INPUT"Printout? "P$:P$=LEFT$(P$,1):Pflg%=P$="Y" OR P$="y" 120 ibm%=Pflg%:PROCch:IFPflg% VDU2 130 OSCLI"DIR "+path$:PROCgbpb(5,0):?(data%+1+?data%)=13:PRINT"Disk: ";$(data%+1) 140 PROCgbpb(6,0):?(data%+?data%+?(data%+1+?data%)+2)=13:PRINT"Dir: "$(data%+2+?data%); 150 total%=FNcat(0,0,0):PROCup(MID$(path$,INSTR(path$,".")+1)) 160 PRINT'"Total disk space used: ";total%;" bytes" 170 IF Pflg% AND Fflg% CLS 180 IF Pflg% VDU 3 190 END 200 : 210 DEFPROCgbpb(A%,index%):LOCAL X%,Y% 220 buff%!1=data%:buff%!5=1:buff%!9=index% 230 X%=buff%:Y%=X%DIV256:CALL &FFD1:ENDPROC 240 : 250 DEFFNcat(lv%,flg%,flg2%):LOCAL end%,total%,index%:index%=flg2%:total%=0:xt%=0 260 REPEAT:PROCgbpb(8,index%):index%=buff%!9:end%=buff%?5 270 IFend%=0 AND flg2%<>0 AND Fflg% THEN UNTIL TRUE:=TRUE 280 IFend%=0 PROCfile 290 UNTIL end%<>0 OR xt%:IF flg2%<>0 :=xt% 300 =total% 310 : 320 DEFPROCfile:LOCAL f$,type%:xt%=FALSE 330 ?(data%+?data%+1)=13:f$=FNstrip($(data%+1)):type%=FN_INFO(f$) 340 total%=total%+buff%!10:IF buff%?10<>0 THEN total%=(total% AND &FFFF00)+&100 350 IF flg2%<>0 AND type%=2 THEN xt%=TRUE:ENDPROC 360 IF Fflg% OR type%=2 PROCpr(f$) 370 IF type%=2 THEN PROCdown(f$):total%=total%+FNcat(lv%+1,LENf$,0):PROCup(f$) 380 ENDPROC 390 : 400 DEFPROCpr(f$) 410 nxt%=FNcat(lv%,0,index%) 420 IFflg%<>0 PRINTSTRING$(11-flg%,CHR$c%(0)); 430 IFnxt% ch$(lv%)=CHR$c%(3) ELSE ch$(lv%)=" " 440 IFflg%<>0 AND nxt% VDUc%(1):flg%=0:GOTO480 ELSE IFflg%<>0 AND nxt%=0 VDUc%(0):flg%=0:GOTO480 450 PRINT 460 IFlv%>0 FORz=0TOlv%-1:PRINTch$(z);SPC11;:NEXT 470 IF nxt% VDUc%(5) ELSE VDUc%(4) 480 PRINTf$; 490 ENDPROC 500 : 510 DEFPROCdown(f$):path$=path$+"."+f$:OSCLI"DIR "+f$:ENDPROC 520 : 530 DEFPROCup(f$):path$=LEFT$(path$,LEN path$-LEN f$-1):IF up% OSCLI"DIR ^":ENDPROC 540 OSCLI"DIR "+path$:ENDPROC 550 : 560 DEFFN_INFO(f$):LOCAL A%,X%,Y%:$data%=f$:!buff%=data%:X%=buff%:Y%=X%DIV256:A%=5:=(USR&FFDD)AND&FF 570 DEFFNstrip(f$):IF LEFT$(f$,1)=" " REPEAT:f$=MID$(f$,2):UNTILLEFT$(f$,1)<>" " 580 f$=LEFT$(f$,INSTR(f$+" "," ")-1):=f$ 590 : 600 DEFPROCch 610 DIM c%(5):FORz%=0 TO 5:c%(z%)=z%+166:NEXT 620 IFibm% c%(0)=&C4:c%(1)=&C2:c%(2)=254:c%(3)=&B3:c%(4)=&C0:c%(5)=&C3 630 VDU23,c%(0),0,0,0,255,0,0,0,0 :REM --- 640 VDU23,c%(1),0,0,0,255,24,24,24,24 :REM -v- 650 REM c%(2) 660 VDU23,c%(3),24,24,24,24,24,24,24,24 :REM | 670 VDU23,c%(4),24,24,24,24+7,0,0,0,0 :REM \ 680 VDU23,c%(5),24,24,24,24+7,24,24,24,24:REM +- 690 ENDPROC