`` Dir Tree
`` Recursively, displays content of a directory and sub-directories
`` www.scriptol.org

/*
   syntax:
    dirtree [q]
    
   q = quiet, don't display content of subdirectories
   
   Enter a directory at prompt.
   
   It appears a value as \somedir or /somedir doesn't works (ask the OS  makers for the reason)
   under windows, type:  c:\somedir instead.
   
*/

enum STR_PAD_LEFT, STR_PAD_RIGHT, STR_PAD_BOTH

boolean QUIET = false


void indent(int offset)
    for int o in 0.. offset    echo "  "
return



void dispdir(text level, int offset)

    dir mydir = opendir(level)
    int fcounter = 0
    int dcounter = 0
    number size = 0


    do
        text t = readdir(mydir)
        if t = nil break
        if t[0] = "." continue    
        
        text subdir = level + "/" + t
        
        if is_dir(subdir) = true
            //echo pad(" ", 12, " ")
            indent(offset)
            echo "<", t, ">", "\n"
            dcounter + 1
            dispdir(subdir, offset+ 1)
        else
            
            if (QUIET = false) or (offset = 0)
                indent(offset)
                print pad(text(filesize(subdir)),   12," ", STR_PAD_RIGHT), t
            /if    
            fcounter + 1
            size + filesize(subdir)
            
        /if

    /do forever
    
    closedir(mydir)
    
    indent(offset)
    print pad(" ", 12, " "), '[', fcounter, "files,", dcounter, "directories ]", size, " bytes"
    
return


text mainlevel

print "DirTree - www.scriptol.net"


if $argc > 1
    if $argv[1] = "q" let QUIET = true
/if    

input "Directory? ", mainlevel
if mainlevel = "." let mainlevel = getcwd()
if mainlevel = nil let mainlevel = getcwd()

print "-".dup(50)
print "  Dir tree of" , mainlevel
print "-".dup(50)

dispdir(mainlevel, 0)

print "-".dup(50)