script_find の全リスト
#! /usr/dt/bin/dtksh
set -u
. /usr/dt/lib/dtksh/DtFuncs.dtsh
#
# This sample shell script provides a graphical interface to the
# `find' command. Each time it is executed, it will attempt to
# restore the dialog to the last set of values entered by the user.
# When the `find' command is initiated, the output will be displayed
# in a dtterm window.
#
#
# Post an# error dialog. The main application window is disabled
# until the error dialog is unposted. The message to be displayed
# in the # error dialog is passed in as $1
#
PostErrorDialog()
{
DtDisplayErrorDialog "Find Error" "$1" ¥
DIALOG_PRIMARY_APPLICATION_MODAL
}
#
# This is both the `Ok' and the `Apply' callback; in the case of the
# `Ok' callback, it unposts the main application window, and then
# exits, if the dialog contains valid information. For both `Ok' and
# `Apply', the set of search directories is first validated; if any
# of the paths are not valid, then an error dialog is posted.
# Otherwise, the `find' process is started in a terminal window.
#
OkCallback()
{
RetrieveAndSaveCurrentValues
if [ "$SD_VAL" = "" ] ; then
PostErrorDialog "You must specify a directory to search"
else
for i in $SD_VAL ; do
if [ ! -d $i ] ; then
MSG="The following search directory does not exist:
$i"
PostErrorDialog "$MSG"
return 1
fi
done
if [ $CB_WIDGET = $OK ] ; then
XtPopdown $TOPLEVEL
fi
CMD="/bin/find $SD_VAL"
if [ ! "$FNP_VAL" = "" ] ; then
CMD=$CMD" -name $FNP_VAL"
fi
if ! $(XmToggleButtonGetState $T1); then
CMD=$CMD" -xdev"
fi
if $(XmToggleButtonGetState $T3); then
CMD=$CMD" -hidden"
fi
if $(XmToggleButtonGetState $T4); then
CMD=$CMD" -follow"
fi
if $(XmToggleButtonGetState $T5); then
CMD=$CMD" -depth"
fi
case $FSTYPE_VAL in
$NFS) CMD=$CMD" -fsonly nfs" ;;
$CDFS) CMD=$CMD" -fsonly cdfs" ;;
$HFS) CMD=$CMD" -fsonly hfs" ;;
*) ;;
esac
case $FILETYPE_VAL in
$REGULAR) CMD=$CMD" -type f" ;;
$DIRECTORY) CMD=$CMD" -type d" ;;
$BLOCK) CMD=$CMD" -type b" ;;
$CHAR) CMD=$CMD" -type c" ;;
$FIFO) CMD=$CMD" -type p" ;;
$SYMLINK) CMD=$CMD" -type l" ;;
$SOCKET) CMD=$CMD" -type s" ;;
$NET) CMD=$CMD" -type n" ;;
$MOUNT) CMD=$CMD" -type M" ;;
$HIDDEN) CMD=$CMD" -type H" ;;
*) ;;
esac
if $(XmToggleButtonGetState $T2); then
CMD=$CMD" -print"
fi
/usr/dt/bin/dtterm -title "Find A File" -e /usr/dt/bin/dtexec ¥
-open -1 $CMD &
if [ $CB_WIDGET = $OK ] ; then
exit 0
fi
fi
}
#
# This function attempt to load in the previous dialog values.
# Each line read from the file is then interpreted as a ksh command.
#
LoadStickyValues()
{
if [ -r "./Find.sticky" ] ; then
exec 6< "./Find.sticky"
XtAddInput FID 6 "EvalCmd"
fi
}
#
# This function is invoked for each line in the `sticky' values file.
# It will evalutate each line as a dtksh command.
#
EvalCmd()
{
if [ ${#INPUT_LINE} -gt 0 ]; then
eval "$INPUT_LINE"
fi
if [ "$INPUT_EOF" = `true' ]; then
XtRemoveInput $INPUT_ID
eval exec $INPUT_SOURCE'<&-'
fi
}
#
# This function retrieves the current values, and then saves them
# off into a file, so that they can be restored the next time the
# dialog is displayed. It is called anytime the user selects either
# the "Ok" or "Apply" buttons.
#
RetrieveAndSaveCurrentValues()
{
XmTextGetString SD_VAL $SD
XmTextGetString FNP_VAL $FNP
XtGetValues $FSTYPE menuHistory:FSTYPE_VAL
XtGetValues $FILETYPE menuHistory:FILETYPE_VAL
exec 3> "./Find.sticky"
if [ ! "$SD_VAL" = ""] ; then
print -u 3 "XmTextSetString ¥$SD ¥"$SD_VAL¥""
print -u 3 "XmTextFieldSetInsertionPosition ¥$SD ${#SD_VAL}"
fi
if [ ! "$FNP_VAL" = "" ] ; then
print -u 3 "XmTextSetString ¥$FNP ¥"$FNP_VAL¥""
print -u 3 "XmTextFieldSetInsertionPosition ¥$FNP ${#FNP_VAL}"
fi
case $FSTYPE_VAL in
$NFS) FST="¥$NFS" ;;
$CDFS) FST="¥$CDFS" ;;
$HFS) FST="¥$HFS" ;;
*) FST="¥$NODIR" ;;
esac
print -u 3 "XtSetValues ¥$FSTYPE menuHistory:$FST"
case $FILETYPE_VAL in
$REGULAR) FT="¥$REGULAR" ;;
$DIRECTORY) FT="¥$DIRECTORY" ;;
$BLOCK) FT="¥$BLOCK" ;;
$CHAR) FT="¥$CHAR" ;;
$FIFO) FT="¥$FIFO" ;;
$SYMLINK) FT="¥$SYMLINK" ;;
$SOCKET) FT="¥$SOCKET" ;;
$NET) FT="¥$NET" ;;
$MOUNT) FT="¥$MOUNT" ;;
$HIDDEN) FT="¥$HIDDEN" ;;
*) FT="¥$NOTYPE" ;;
esac
print -u 3 "XtSetValues ¥$FILETYPE menuHistory:$FT"
if $(XmToggleButtonGetState $T1); then
print -u 3 "XmToggleButtonSetState ¥$T1 true false"
fi
if $(XmToggleButtonGetState $T2); then
print -u 3 "XmToggleButtonSetState ¥$T2 true false"
fi
if $(XmToggleButtonGetState $T3); then
print -u 3 "XmToggleButtonSetState ¥$T3 true false"
fi
if $(XmToggleButtonGetState $T4); then
print -u 3 "XmToggleButtonSetState ¥$T4 true false"
fi
if $(XmToggleButtonGetState $T5); then
print -u 3 "XmToggleButtonSetState ¥$T5 true false"
fi
exec 3<&-
}
################ Create the Main UI ####################
set -f
XtInitialize TOPLEVEL find Dtksh $0 "${@:-}"
XtSetValues $TOPLEVEL title:"Find Files"
XtCreateManagedWidget FORM form XmForm $TOPLEVEL
XtCreateManagedWidget SDLABEL sdlabel XmLabel $FORM ¥
labelString:"Search Directory:" ¥
$(DtkshAnchorTop 12) ¥
$(DtkshAnchorLeft 10)
XtCreateManagedWidget SD sd XmText $FORM ¥
columns:30 ¥
value:"." ¥
$(DtkshAnchorTop 6) ¥
$(DtkshRightOf $SDLABEL 10) ¥
$(DtkshAnchorRight 10) ¥
navigationType:EXCLUSIVE_TAB_GROUP
XmTextFieldSetInsertionPosition $SD 1
XtCreateManagedWidget FNPLABEL fnpabel XmLabel $FORM ¥
labelString:"Filename Pattern:" ¥
$(DtkshUnder $SDLABEL 24) ¥
$(DtkshAnchorLeft 10)
XtCreateManagedWidget FNP fnp XmText $FORM ¥
columns:30 ¥ $(DtkshUnder $SD 8) ¥
$(DtkshRightOf $FNPLABEL 10) ¥
$(DtkshAnchorRight 10) ¥
navigationType:EXCLUSIVE_TAB_GROUP
XtCreateManagedWidget SEP sep XmSeparator $FORM ¥
separatorType:SINGLE_DASHED_LINE ¥
$(DtkshUnder $FNP 10) ¥
$(DtkshSpanWidth)
XtCreateManagedWidget RC rc XmRowColumn $FORM ¥
orientation:HORIZONTAL ¥
numColumns:3 ¥
packing:PACK_COLUMN ¥
$(DtkshUnder $SEP 10) ¥
$(DtkshSpanWidth 10 10) ¥
navigationType:EXCLUSIVE_TAB_GROUP
DtkshAddButtons -w $RC XmToggleButtonGadget ¥
T1 "Cross Mount Points" ""¥
T2 "Print Matching Filenames" ""¥
T3 "Search Hidden Subdirectories" ""¥
T4 "Follow Symbolic Links" ""¥
T5 "Descend Subdirectories First" ""
XtCreateManagedWidget SEP2 sep XmSeparator $FORM ¥
separatorType:SINGLE_DASHED_LINE ¥
$(DtkshUnder $RC 10) ¥
$(DtkshSpanWidth)
XmCreatePulldownMenu PANE $FORM pane
DtkshAddButtons -w $PANE XmPushButtonGadget ¥
NODIR "no restrictions" ""¥
NFS "nfs" ""¥
CDFS "cdfs" ""¥
HFS "hfs" ""
XmCreateOptionMenu FSTYPE $FORM fstype ¥
labelString:"Restrict Search To File System Type:" ¥
menuHistory:$NODIR ¥
subMenuId:$PANE ¥
$(DtkshUnder $SEP2 20) ¥
$(DtkshSpanWidth 10 10) ¥
navigationType:EXCLUSIVE_TAB_GROUP
XtManageChild $FSTYPE
XmCreatePulldownMenu PANE2 $FORM pane2
DtkshAddButtons -w $PANE2 XmPushButtonGadget ¥
NOTYPE "no restrictions" ""¥
REGULAR "regular" ""¥
DIRECTORY "directory" ""¥
BLOCK "block special" ""¥
CHAR "character special" ""¥
FIFO "fifo" ""¥
SYMLINK "symbolic link" ""¥
SOCKET "socket" ""¥
NET "network special" ""¥
MOUNT "mount point" ""¥
HIDDEN "hidden directory" ""
XmCreateOptionMenu FILETYPE $FORM filetype ¥
labelString:"Match Only Files Of Type:" ¥
menuHistory:$NOTYPE ¥
subMenuId:$PANE2 ¥
$(DtkshUnder $FSTYPE 10) ¥
$(DtkshSpanWidth 10 10) ¥
navigationType:EXCLUSIVE_TAB_GROUP
XtManageChild $FILETYPE
XtSetValues $FILETYPE spacing:90
XtCreateManagedWidget SEP3 sep3 XmSeparator $FORM ¥
$(DtkshUnder $FILETYPE 10) ¥
$(DtkshSpanWidth)
XtCreateManagedWidget OK ok XmPushButton $FORM ¥
labelString:"Ok" ¥
$(DtkshUnder $SEP3 10) ¥
$(DtkshFloatLeft 4) ¥
$(DtkshFloatRight 24) ¥
$(DtkshAnchorBottom 10)
XtAddCallback $OK activateCallback "OkCallback"
XtCreateManagedWidget APPLY apply XmPushButton $FORM ¥
labelString:"Apply" ¥
$(DtkshUnder $SEP3 10) ¥
$(DtkshFloatLeft 28) ¥
$(DtkshFloatRight 48) ¥
$(DtkshAnchorBottom 10)
XtAddCallback $APPLY activateCallback "OkCallback"
XtCreateManagedWidget CLOSE close XmPushButton $FORM ¥
labelString:"Close" ¥
$(DtkshUnder $SEP3 10) ¥
$(DtkshFloatLeft 52) ¥
$(DtkshFloatRight 72) ¥
$(DtkshAnchorBottom 10)
XtAddCallback $CLOSE activateCallback "exit 1"
XtCreateManagedWidget HELP help XmPushButton $FORM ¥
labelString:"Help" ¥
$(DtkshUnder $SEP3 10) ¥
$(DtFloatLeft 76) ¥
$(DtkshFloatRight 96) ¥
$(DtkshAnchorBottom 10)
XtAddCallback $HELP activateCallback ¥
"DtkshDisplayQuickHelpDialog `Using The Find Command'
HELP_TYPE_FILE ¥
`./Find.help' "
XtSetValues $FORM ¥
initialFocus:$SD ¥
defaultButton:$OK ¥
cancelButton:$CLOSE ¥
navigationType:EXCLUSIVE_TAB_GROUP
DtkshSetReturnKeyControls $SD $FNP $FORM $OK
LoadStickyValues
XtRealizeWidget $TOPLEVEL
XtMainLoop