#!/bin/bash
#
# Name: dirtree
# Programmer:
#            Hemant T. Shah
#            Life Insurance Data Processing
#            July 12 1994
#
# Description:
#  Print directory tree structure as follows:
#   |___Mail
#     |___scheduler
#     |___cics_scripts
#     |___tar_msdos
#     |___awk
#     |___attributes
#   |___tmp
#   |___News
#     |___dosscsi
#     |___FAQ_xterminal
#     |___shell_history.Z
#     |___FAQ_AIX
#     |___aix_ftp_site
#     |___hp_software
#   |___dnload
#     |___telnet.h
#     |___msdos
#     |___tnetd.tar.Z
#     |___aix
#     |___hp
#   |___xkey.c
#
# Conversion to bash v2 syntax done by Chet Ramey
#	- removed command substitutions calling `basename'
#

ProgramName=${0##*/}
Path="."
ShowAll=1
ShowDir=0


ExpandDirectory()
{
local object   # Local variable

cd "$1"

for object in $PWD/.??* $PWD/*
do
   if [ -d $object ];  # It is a directory
   then
      echo "${indent}|___${object##*/}/"
      indent="${indent}!   "   # Add to indentation
      if [ -x $object ];
      then
         ExpandDirectory $object
      fi
      indent=${indent%????}    # Remove from indentation
   elif [ -e $object ]; then
      if (( ShowAll == 1 ));
      then
         echo "${indent}|___${object##*/}"
      fi
   fi
done

}

usage()
{
	echo -e "Usage: $ProgramName [-h] [-f] [-d] [path] "
	echo -e "\t-h       ... display this help message."
	echo -e "\t-f path  ... shows all files and directories below path (default)."
	echo -e "\t-d path  ... shows all directories only below path."
}

while getopts "fd" opt
do
	case $opt in
	f) ShowAll=1 ;;
	#d) ShowDir=1 ;;
	d) ShowAll=0 ;;
	*) usage ; exit 2;;
	esac
done

shift $(( $OPTIND - 1 ))

Path=${1:-.}

if [ ! -d "$Path" ]; then
	echo "$0: error: specified path is not a directory." >&2
	exit 1
fi



echo "!$Path/"
ExpandDirectory $Path
