%%HP: T(3)A(D)F(.);
@ by Eric Davis
@ TREE: builds graphic object of directory tree
\<<
  CLLCD                                         @ >>> sect 1 <<<
  PATH HOME { :0: "HOME" } '$2' STO             @ return path & base dir
  \<<                                           @ dir find prog: $1
    1 +                                         @ advance level
    15 TVARS 1
    IF OVER SIZE                                @ look for dir objs 
    THEN
      DO
         GETI DUP 2 DISP DUP 5 PICK \->TAG      @ tag dir at current level
         PATH HOME SWAP $2 SWAP + '$2' STO EVAL @ save in HOME temp var&rtn
         EVAL 3 PICK $1                         @ next dir & look for more
      UNTIL DUP 1 ==
      END
    END 3 DROPN
  \>> '$1' STO  \-> r                           @ prog in HOME & path local
  \<<
    0 $1 HOME $2                                @ dirs; get result list
    { $1 $2 } PURGE r EVAL                      @ zap temps & return path
    CLLCD                                       @ >>> sect 2 <<<
    DUP SIZE 8 * R\->B # 83h SWAP BLANK SWAP    @ build blank GROB
    :0: "" +                                    @ and add dummy to list
    1
    DO
       GETI OBJ\-> OBJ\->                       @ indented entry -> GROB
       9 * R\->B 3 PICK 2 - 8 * R\->B 2 \->LIST
       5 ROLL 3 ROLLD SWAP
       DUP \->TAG OBJ\-> SWAP DROP 2 \->GROB REPL 3 ROLLD
    UNTIL DUP 1 ==
    END DROP2 PICT STO { } PVIEW PICT PURGE     @ clean up & show
  \>>
\>>
