#!/bin/sh
#find value File name in all directories
USAGE="fname [d] [directory] fileName"
helpFile="$HOME/lbin/fname.txt"
# you should not use `getopt abo: "$@"` since that would parse
# the arguments differently from what the set command below does.
ARGS=`getopt dDfFlLxXHhNn $@`
if [ $? != 0 ]
then
	echo 'BAD USAGE Usage: ...'
	cat $helpFile
	exit 98
fi
findVal="$*";
set -- $ARGS
# You cannot use the set command with a backquoted getopt directly,
# since the exit code from getopt would be shadowed by those of set,
# which is zero by definition.

cmdNum=0 #Used to show what cmd to run - Default Value
fileType="f" #default look only for files

for i
do
	case "$i"
	in
		 -h| -H)
			cmdText=" Show Help Information "
			cat $helpFile
			exit 97;
			;;
		-d | -D )
			cmdNum=1;
			cmdText=" find ALL DIRECTORIES ONLY "
			# find all directory names
			fileType="d"
			shift;
			break;
			;;
		-f | -F )
			cmdNum=2;
			cmdText=" find ALL File "
			# find all file names
			shift;
			findVal="$*";
			find $findVal -type f -print
			break;
			;;
		-l | -L )
			cmdNum=3;
			cmdText=" List all File info "
			# List all file info for files found
			shift;
			break;
			;;
		-n | -N )
			cmdNum=5;
			cmdText=" List all Files with no extention"
			shift;
			;;
		-x | -X )
			cmdNum=4;
			cmdText=" Find files with EXACT MATCH ONLY! "
			#find Exact match only - do not add *$fileName*
			shift;
			break;
			;;
		--)
			cmdNum=0;
			cmdText=" Find files with WILDCARD MATCH! "
			echo "In Default END DO NOTHING"
			shift;
			break; 
			#NOT RUN HERE find . -type f  -iname "$findVal" -print 
			;;
	esac
done
argc="$#"
#if [ $count -gt 0 ]; then
### echo "#### 1 ####\nARGS=$ARGS \nCurrentArgs=$*\narg0=$0\narg1=$arg1 dirName=$dirName fileName=$fileName \n cmdNum=$cmdNum cmdText=$cmdText \nARGC = $argc \$0= $0\n \$1 = $1 \$2 = $2\n#### 1 ####"
if [ $1 = "--" ] ;
then
### 	echo "\n##### NEEEEEED SHIFT ##### "
### echo "#### 2 ####\nARGS=$ARGS \nCurrentArgs=$*\narg0=$0\narg1=$arg1 dirName=$dirName fileName=$fileName \n cmdNum=$cmdNum cmdText=$cmdText \nARGC = $argc \$0= $0\n \$1 = $1 \$2 = $2\n#### 2 ####"
	shift
fi
if [ $argc = 0 ] ;
then
	echo "Help";
### echo "#### 3 ####\nARGS=$ARGS \nCurrentArgs=$*\narg0=$0\narg1=$arg1 dirName=$dirName fileName=$fileName \n cmdNum=$cmdNum cmdText=$cmdText \nARGC = $argc \$0= $0\n \$1 = $1 \$2 = $2\n#### 3 ####"
	cat $helpFile
	exit 96;
elif [ $argc = 1 ] ; then  # -l DOES NOT WORK
	dirName="."
	fileName="$1"
elif [ $argc = 2 ] ; then #-l works 
	#-l DOES NOT WORK
	# -d dirname dir NOT WORKING
	dirName="$1"
	fileName="$2"
	if [ $cmdNum = 3 ]; then
		dirName="."
		fileName="*$1*"
### echo "#### 4 ####\nARGS=$ARGS \nCurrentArgs=$*\narg0=$0\narg1=$arg1 dirName=$dirName fileName=$fileName \n cmdNum=$cmdNum cmdText=$cmdText \nARGC = $argc \$0= $0\n \$1 = $1 \$2 = $2\n#### 4 ####"
	elif [ $cmdNum = 5 ]; then
		dirName="."
		fileName="*$1*"
		find $dirName  -type f -not -name "*.*"
	elif [ ! -d $dirName ]; then
		echo "ERROR: $dirName does not exist!!!(dirName)"
### echo "#### 5 ####\nARGS=$ARGS \nCurrentArgs=$*\narg0=$0\narg1=$arg1 dirName=$dirName fileName=$fileName \n cmdNum=$cmdNum cmdText=$cmdText \nARGC = $argc \$0= $0\n \$1 = $1 \$2 = $2\n#### 5 ####"
		exit 95;
	fi
else
	echo "two args"
### echo "#### 5 ####\nARGS=$ARGS \ndirName=$dirnName fileName=$fileName \n cmdNum=$cmdNum cmdText=$cmdText \nARGC = $argc CMD= $0 $*\n#### 5 ####"
	dirName="$1"
	fileName="$2"
fi
#XXX Why do I NEED THIS
#if [ $cmdNum = 0 ]; then
	#make Wild Card Search
	fileName="*$fileName*"
#fi
#echo "1=$1 2=$2 3=$3"
#echo "dirName=$dirName fileName=$fileName arg3=$3"
### echo "#### 6 ####\nARGS=$ARGS \nCurrentArgs=$*\narg0=$0\narg1=$arg1 dirName=$dirName fileName=$fileName \n cmdNum=$cmdNum cmdText=$cmdText \nARGC = $argc \$0= $0\n \$1 = $1 \$2 = $2\n#### 6 ####"
#echo "Cmd to RUN= $cmdNum"
echo "Looking for file (${fileName}) in directory (${dirName}) $cmdText";
##set -x
if [ $cmdNum = 3 ]; then
	#get file details ls -l
	echo "Looking for Long Listing: "
	#find $dirName -type $fileType -iname "$fileName" -print | xargs -0 ls -ld
	find $dirName -type $fileType  -iname "$fileName" -print | xargs ls -ld
	rtn="$?"
else
##set -x
	find $dirName -type $fileType -iname "$fileName" -print 2>/dev/null
	echo "CMD=" . "find $dirName -type $fileType -iname $fileName -print"
	rtn="$?"
fi
echo "RTN=$rtn"
##ALT NOT USED find $1 -type f  -iname "*$2*" -print | xargs grep -iH "$2" 2>/dev/null
