#!/bin/sh
TMP_FILE=/tmp/ps_output.$$
OLDIFS=$IFS
HELP="Usage:\n\t$0 [pid]"
OPTIONS="-ef"

# Programovani v sh: http://www.dartmouth.edu/%7Erc/classes/unix1/index.html

# Zarovnani child procesu
function indent(){
	INDEX=0
	while [ $INDEX -le $1 ]
	do
		echo -n " "
		INDEX=$(($INDEX+1))
	done
}

# Vypsani helpu
while true;
do
	case $1 in
		--)  shift
			break
			;;
		-*)  echo -e $HELP
			exit 1
			;;
		*)   break
			;;
	esac
done

# Uroven rekurze
if [ $# -eq 0 ]
then
	PROCES=1
	PPID_NUM=0
	DATA=/tmp/process_tr.$$
elif [ $# -eq 1 ]
then
	PROCES=$1
	PPID_NUM=0
	DATA=/tmp/process_tr.$$
elif [ $# -eq 3 ]
then
	PROCES=$1
	PPID_NUM=$2
	DATA=$3
else
	 echo -e $HELP
	exit 1
fi

# zpracovani vstupu
if [ "$PPID_NUM" = 0 ] # v prvnim kole
then
	#rm -f $DATA $TMP_FILE
    
	 # Bez prvniho radku
	 ps $OPTIONS | sed '1d' | sort > $TMP_FILE

	exec < $TMP_FILE

	IFS=''
	while read INPUT
	do
		# echo "$INPUT" >> a
		
		IFS=$OLDIFS
		set $INPUT
		OWNER=$1
		PID=$2
		PARENT_PID=$3
		  COL=48	 #Kde zacina ve vypisu nazev procesu
		NAME=`echo "$INPUT" | cut -c$COL-`
		echo "$PID $PARENT_PID $OWNER $NAME" >> $DATA
		IFS=''
	done
	IFS=$OLDIFS
fi

#################################################################

INPUT=`grep "^$PROCES " $DATA`
set $INPUT
# $1 -- proces, $3 -- owner, $4 -- name
TAB=$(($PPID_NUM * 2))
echo "`indent $TAB && echo $OUTPUT$1   $4`"

# rekurzivne spusti sama sebe s parametrem nazvu procesu
PPID_NUM=`expr $PPID_NUM + 1`
while read INPUT
do
	set $INPUT
	if [ "$2" = "$PROCES" ]
	then
		$0 $1 $PPID_NUM $DATA
	fi
done < $DATA

# Uklid a konec
rm -f /tmp/*.$$
exit 0

