#!/bin/sh
name=`basename $0`

#############################################################################
# AUTHOR:  Timothy J. Luoma <luomat@capitalist.princeton.edu>
#
# VERSION: 1.0.0
#
# DATE:    09 April 1996
#
# WARNING: USE ENTIRELY AT YOUR OWN RISK
#
# PURPOSE: to make using the extended flags of 'find' a little easier
#		by entering into an interactive mode for some common flags
#
# TESTED UNDER: NeXTStep 3.2 on my NeXTStation
#
# USAGE NOTES:
# 	All arguments given are ignored
#
# 	If you do not want to set any of the options, just hit ENTER
#
# 	It assumes you know _something_ about how 'find' works
#
#	Not all flags are available, basically the ones I like
#
#############################################################################
echo -n "$name: what directory? (Press enter to select current directory) "
read dir

if [ "$dir" = "" ]
then
	dir="."
else
	if [ -d "$dir" ]
	then
		: #placeholder
	else
		echo "$name error: $dir is not a dir, using . "
	fi
fi

######################################################
echo -n "$name: what filename?  (Press enter for ALL) " 
read filename

all=no

if [ "$filename" = "" ]
then
	# filename1="-name *"
	all=yes
else
	filename1="-name $filename"
	
	echo -n "	Only exact matches to $filename? [y/N] " 
		stty cbreak
		wildcard=`dd if=/dev/tty bs=1 count=1 2>/dev/null`
		stty -cbreak

		case $wildcard in
			y|Y) wildcard=no
			;;

			*)   wildcard=yes
			;;
		esac
fi

######################################################
echo "$name: what type?"
echo -n "	(d)irectory (f)ile (l)ink (s)ocket (b)lock (c)haracter (p)ipe -> "
	stty cbreak
	type=`dd if=/dev/tty bs=1 count=1 2>/dev/null`
	stty -cbreak

	case $type in
		b|c|d|f|p|l|s) 
			type1="-type $type"
			echo " "
		;;
		
		*) #no type specified
			type1=""
		;;
	esac

######################################################
echo -n "$name: what user? "
read user

	if [ "$user" = "" ]
	then
		user1=""
	else
		user1="-user $user"
	fi

######################################################
echo -n "$name: last a)ccess m)odified c)hanged? "
	stty cbreak
	amc=`dd if=/dev/tty bs=1 count=1 2>/dev/null`
	stty -cbreak
	
	case $amc in
		a|m|c)  
			echo " "
			echo -n "	how many days? (use + and -) "
			read days
			
			if [ "$amc" = "a" ]
			then
				amc1="-atime $days"
			elif [ "$amc" = "m" ]
			then
				amc1="-mtime $days"
			else
				amc1="-ctime $days"
			fi
		;;
		
		*) amc1=""
		;;
	esac

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

echo -n  "$name: command? (don't end with \;) "
read command

	if [ "$command" != "" ]
	then
		echo -n  "$name: confirm command? [y/N] "
		stty cbreak
		confirm=`dd if=/dev/tty bs=1 count=1 2>/dev/null`
		stty -cbreak
		
		case $confirm in
			y*|Y*) 
			   command1="-ok $command "
			   echo " "
			;;

			*) command1="-exec $command "
			;;
		esac
	fi

######################################################
echo -n "$name: print? [y/N] "
	stty cbreak
	print=`dd if=/dev/tty bs=1 count=1 2>/dev/null`
	stty -cbreak
	
	case $print in 
		
		y|Y) print1="-print"
		     echo " "
		;;
		
		*)   print1=""
		;;
	esac

######################################################
echo -n "$name: list? [y/N] "
	stty cbreak
	list=`dd if=/dev/tty bs=1 count=1 2>/dev/null`
	stty -cbreak
	
	case $list in 
		
		y|Y) list1="-ls"
		     echo " "
		;;
		
		*)   list1=""
		;;
	esac

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

if [ "$all" = "yes" ] 	# if the user wants to match all files
then		
	if [ "$command1" != "" ]
	then	
		find $dir -name "*" $type1 $user1 $amc1 $command1 \; $print1 $list1
	else
		find $dir -name "*" $type1 $user1 $amc1 $print1 $list1
	fi
else
	if [ "$wildcard" = "yes" ]
	then
		# if the user DOES NOT want just exact matches
		if [ "$command1" != "" ]
		then	
 		  find $dir $filename1\* $type1 $user1 $amc1 $command1 \; $print1 $list1
		else
  		  find $dir $filename1\* $type1 $user1 $amc1 $print1 $list1
		fi
	else
		# if the user DOES want to use just exact matches
		if [ "$command1" != "" ]
		then	
    		  find $dir $filename1 $type1 $user1 $amc1 $command1 \; $print1 $list1
		else
  		  find $dir $filename1 $type1 $user1 $amc1 $print1 $list1
		fi
	fi
fi

exit 0
# end