# @(#)disklabel 1.4 /sccs/src/cmd/sadmin/shell/s.disklabel # Ask the user to insert a medium and verify it is present. # Write the label to the standard output if it is present. #! chmod +x ${file} usage="Usage: $0 [ -y | -n'drivename' | -q'question' ] parent-pid filename -n'drivename' Provide a name for the drive. -q'question' Provide alternative question. -y return the label without asking questions" ndrive='diskette drive' question= case $# in 2 ) ;; 3 ) case "$1" in -n?* ) ndrive=`expr "$1" : '-n\(.*\)'` ;; -q?* ) question=`expr "$1" : '-q\(.*\)'` ;; -y ) getit=yes ;; * ) echo >&2 "${usage}" exit 1 esac shift ;; 4 ) case "$1" in -n ) ndrive=$2 ;; -q ) question=$2 ;; * ) echo >&2 "${usage}" exit 1 esac shift shift ;; * ) echo >&2 "${usage}" exit 1 esac : ${question:="Insert the medium in the ${ndrive}. Press <RETURN> when ready. [q]"} pid=$1 ddrive=$2 case ${ddrive} in /dev/r* ) # WARNING: This depends on the common, but not universal, naming # convenetion that all character and block special devices are under # /dev and if /dev/THING is a block device then /dev/rTHING is the # corresponding character (aka "raw") device. Note that THING may # have directories as part of the name. # if ddrive is raw, bddrive == block device for a raw device bddrive=/dev/`expr ${ddrive} : '/dev/r\(.*\)'` ;; * ) # otherwise they are the same. bddrive=${ddrive} esac trap 'exit 1' 1 2 trap "kill ${pid}; exit 0" 15 flags="-qq -k$$" mounted=`/etc/mount | sed -n "\\;${bddrive};s;^\\([^ ]*\\) on ${bddrive} .*;\\1;p"` if [ -n "${mounted}" ] then echo >&2 "The ${ndrive} is already mounted as the ${mounted} file system. This command cannot run with it mounted." if [ ${getit} ] then kill ${pid} exit 0 fi if checkyn ${flags} -H" The ${ndrive} is already in use; it has a medium in it that is mounted as a file system starting at the ${mounted} directory. Before you can use the ${ndrive} for some other purpose, you must unmount the medium now in use." \ -f "Do you want to unmount it?" then if diskumount ${bddrive} ${mounted} then : else echo >&2 " This command cannot run because the ${mounted} file system is mounted. Unmount it and try again." kill ${pid} exit 0 fi else echo >&2 "The medium in the ${ndrive} is still mounted on ${mounted}." kill ${pid} exit 0 fi fi while true do if [ -z "${getit}" ] then checklist ${flags} -f -D '' \ "${question}" \ '<RETURN>' '' fi label=`/etc/labelit ${ddrive} 2>/dev/null` if [ $? -eq 0 ] then break fi echo >&2 ' The medium may not be properly inserted, the drive door may not be closed, the medium may not be formatted, the medium may be in upside-down, or there is some other problem. Check it and try again. ' if [ ${getit} ] then kill ${pid} exit 0 fi done /etc/fsstat ${ddrive} >/dev/null 2>&1 if [ $? = 3 ] then exit 0 fi echo "${label}"