DIM path$(300)
DIM path1$(300)
DIM file$(800)
~FSETDTA(BASEPAGE+128)
gt%=-1
FOR a%=3 TO 10
  @lookup
  QSORT path$(),i%+1
  INC roots%
  INC gt%
  FOR m%=0 TO i%
    path1$(gt%+m%)=path$(m%)
  NEXT m%
  ERASE path$()
  DIM path$(300)
  CLR time%
  ADD gt%,i%
  CLR i%
  curpath$=""
NEXT a%
'
ERASE path$()
'
' get files out of path
'
FOR x%=0 TO gt%
  IF path1$(x%)=""
    LPRINT
    LPRINT "Drive"'CHR$(67+dof%)
    INC dof%
  ENDIF
  CLR i%
  curpath$=path1$(x%)
  IF curpath$<>""
    curpath$=curpath$+"\"
  ENDIF
  LPRINT
  @lookup2
  QSORT file$(),i%
  CLR offset%
  REPEAT
    r%=INSTR(path1$(x%),"\",r%)
    IF r%
      INC offset%
      INC r%
    ENDIF
  UNTIL r%=0
  LPRINT CHR$(27);"4";STRING$(2*offset%," ");path1$(x%);CHR$(27);"5"
  FOR bs%=0 TO i%-1
    LPRINT STRING$(2*offset%+ABS(path1$(x%)<>"")," ");file$(bs%)
  NEXT bs%
  CLR i%
NEXT x%
LPRINT "There are"'gt%-roots%'"folders and"'numfiles%'"files on this hard drive"
'
PROCEDURE lookup
  REPEAT
    IF path$(time%)<>""
      curpath$=path$(time%)+"\"
    ENDIF
    e%=FSFIRST(CHR$(64+a%)+":\"+curpath$+"*.*",-1)
    DO UNTIL e%
      IF BYTE{BASEPAGE+149} AND 16
        IF BYTE{BASEPAGE+158}<>ASC(".")
          INC i%
          path$(i%)=curpath$+CHAR{BASEPAGE+158}
        ENDIF
      ENDIF
      e%=FSNEXT()
    LOOP
    INC time%
  UNTIL path$(time%)=""
RETURN
'
PROCEDURE lookup2
  e%=FSFIRST(CHR$(66+dof%)+":\"+curpath$+"*.*",-1)
  DO UNTIL e%
    IF (BYTE{BASEPAGE+149} AND 16)=0
      file$(i%)=CHAR{BASEPAGE+158}
      INC i%
      INC numfiles%
    ENDIF
    e%=FSNEXT()
  LOOP
RETURN
