GOPHERSPACE.DE - P H O X Y
gophering on sdf.org
# @(#)selectdevice 1.2 /sccs/src/cmd/sadmin/shell/s.selectdevice
# Select one of the simple administration names for a block or character
# device.

#! chmod +x ${file}

pid=${2:?}
case "$1" in
-b ) # block device
type=-b
typename=block
r=
;;
-c ) # character (aka raw) device
type=-c
typename=character
r=r
;;
* )
echo >&2 "Usage:  $0 -[b|c] pid [dir [names ...]]"
exit 1
esac

if [ $# -lt 3 ]
then
#default directory to /dev/${r}SA
set -- $1 $2 /dev/${r}SA
fi
DIR=$3

if [ ! -d $DIR ]
then
admerr $0 $DIR nonexistent directory
exit 1
fi

rm -f /usr/tmp/$$.list
cd $DIR
shift 3
if [ $# -eq 0 ]
then
# default to everything in directory
ls >/usr/tmp/$$.list
else
for DEVTYPES in $*
do
ls | grep "${DEVTYPES}[0-9][0-9]*" >>/usr/tmp/$$.list
done
fi
if [ ! -s /usr/tmp/$$.list ]
then
admerr $0 Problems in $DIR, no valid ${typename} devices.
rm -f /usr/tmp/$$.list
exit 1
fi

set -- `cat /usr/tmp/$$.list`

if [ $# = 1 ]
then
if [ ! ${type} "$1" ]
then
admerr $0 $1 is not of type ${typename}
rm -f /usr/tmp/$$.list
exit 1
fi

echo $DIR/$1
rm -f /usr/tmp/$$.list
exit 0
elif [ $# -gt 1 ]
then
list=`pr -tn /usr/tmp/$$.list`
select=`checklist -k "${pid}" -fep -H "
The menu items indicate possible devices for use by this subcommand.
Your selection will determine the particular device to be used." "
Select which device to use:

${list}

Enter a number, a name, the initial part of a name, or
? for HELP, q to QUIT:" ${list} q`
case ${select} in
q )
rm -f /usr/tmp/$$.list
exit 0 ;;
[1-9] | [1-9][0-9]* )
shift `expr $select - 1`
DEV=$DIR/$1
;;
* )
DEV=$DIR/${select}
esac
if [ ! ${type} $DEV ]
then
admerr $0 $DEV is not of type ${typename}
rm -f /usr/tmp/$$.list
exit 1
fi
echo $DEV
rm -f /usr/tmp/$$.list
exit 0
fi