#!/bin/bash

VERSION=0.3

#strace -o test/strace -ff -F -f -q -s 128 -e open,creat,mkdir,mknod,link,symlink,rename,unlink,utime,chdir,execve,fork,vfork,_exit,exit_group make -i all

strace -o slog -f -q -e open,creat,mkdir,link,symlink,rename,unlink,execve,fork,vfork $@

grep '0$' slog > tlog



while read LINE ; do
	case $LINE in
		*'execve'*)
			#echo LINE1=$LINE
			PNUM=${LINE%%' '*}
			# chop off all following ']'
			LINE=${LINE%%']'*}
			#echo LINE2=$LINE
			# remove all before leading '['
			#LINE=${LINE#*'['}
			# remove all before leading '('
			LINE=${LINE#*'('}
			#echo LINE3=$LINE
			LINE=${LINE//,/}
			#echo LINE4=$LINE
			set -- $LINE
			
			ArgCount=${#@}
			#echo ArgCount=$ArgCount $LINE
			PenUltimate=$((ArgCount - 1))
			#echo rev=$rev
			# if the next to last item is a redirect
			case $(eval echo \$$PenUltimate) in
				'') : ;;
				*'>>'*) 
					STR=$(echo ${!ArgCount})
					STR=${STR//\"/}
					echo "append($(eval echo \$$PenUltimate)):'$STR'"
				;;
				*'>'*) 
					STR=$(echo ${!ArgCount})
					STR=${STR//\"/}
					echo "redirect($1)($(eval echo \$$PenUltimate)):'$STR'"
				;;
				# OK, it wasn't a redirect, truncation or append action
				*)
					# echo PNUM=$PNUM
					case $(echo $1) in
						# hmmm what about 'cat | ...' ??
						# hmmm what about chown and chmod ??
						*/cp\")
							ITEM=${LINE##* }
							echo "cp:'${ITEM//\"/}'"
						;;
						*/install\")
							# this could be a file or a directory
							ITEM=${LINE##* }
							echo "install:'${ITEM//\"/}'"
						;;
						*/ginstall\")
							# this could be a file or a directory
							ITEM=${LINE##* }
							echo "ginstall:'${ITEM//\"/}'"
						;;
						*/link\")
							TARGET=$(eval echo \$$PenUltimate)
							TARGET=${TARGET//\"/}
							LINK=$(eval echo \$$ArgCount)
							LINK=${LINK//\"/}
							echo "link:'\"$TARGET\" \"$LINK\"'"
						;;
						*/ln\")
							TARGET=$(eval echo \$$PenUltimate)
							TARGET=${TARGET//\"/}
							LINK=$(eval echo \$$ArgCount)
							LINK=${LINK//\"/}
							echo "ln:'\"$TARGET\" \"$LINK\"'"
						;;
						*/mkdir\") 
							#DIR=$(eval echo \$$PenUltimate)
							#DIR=$3
							DIR=${LINE##* }
							echo "mkdir:'${DIR//\"/}'"
						;;
						#*/mknod\") 
							# NODE=??
						#	echo "mknod: ${NODE//\"/}"
						#;;
						#*mv\")
						#	we are catching the atomic 'rename' call
						#	ITEM=${LINE##* }
						#	echo "mv:'${ITEM//\"/}'"
						#;;
						*/rm\")
							# this could be a file or a directory
							ITEM=${LINE##* }
							echo "rm:'${ITEM//\"/}'"
						;;
						*/rmdir\")
							# 
							ITEM=${LINE##* }
							echo "rmdir:'${ITEM//\"/}'"
						;;
						*/sed\")
							ITEM=${LINE##* }
							echo "sed:'${ITEM//\"/}'"
						;;
						*/unlink\")
							LINK=${LINE##* }
							#LINK=${LINK//\"/}
							echo "unlink:'$LINK'"
						;;
					esac
				;;
			esac
		;;
		*rename\(*)
			LINE=${LINE%%')'*}
			#echo LINE2=$LINE
			# remove all beofre leading '['
			LINE=${LINE#*'('}
			#echo LINE3=$LINE
			LINE=${LINE//,/}
			#echo LINE4=$LINE
			set -- $LINE
			#echo "'rename: ${LINE//\"/}'"
			echo "rename:'${1} ${2}'"
			#echo "'rename: ${LINE}'"
		;;
		#*symlink\(*)
		#	LINE=${LINE%%')'*}
		#	#echo LINE2=$LINE
		#	# remove all beofre leading '['
		#	LINE=${LINE#*'('}
		#	#echo LINE3=$LINE
		#	LINE=${LINE//,/}
		#	#echo LINE4=$LINE
		#	set -- $LINE
		#	echo "'symlink: ${LINE//\"/}'"
		#;;
			
	esac
done < tlog
