home *** CD-ROM | disk | FTP | other *** search
/ norge.freeshell.org (192.94.73.8) / 192.94.73.8.tar / 192.94.73.8 / pub / computers / 3b2 / disklabel < prev    next >
Text File  |  1985-05-23  |  3KB  |  141 lines

  1. #    @(#)disklabel    1.4    /sccs/src/cmd/sadmin/shell/s.disklabel
  2. #    Ask the user to insert a medium and verify it is present.
  3. #    Write the label to the standard output if it is present.
  4.  
  5. #!    chmod +x ${file}
  6.  
  7. usage="Usage:  $0 [ -y | -n'drivename' | -q'question' ] parent-pid filename
  8. -n'drivename'    Provide a name for the drive.
  9. -q'question'    Provide alternative question.
  10. -y        return the label without asking questions"
  11. ndrive='diskette drive'
  12. question=
  13.  
  14. case $# in
  15. 2 )
  16.     ;;
  17. 3 )
  18.     case "$1" in
  19.     -n?* )
  20.         ndrive=`expr "$1" : '-n\(.*\)'`
  21.         ;;
  22.     -q?* )
  23.         question=`expr "$1" : '-q\(.*\)'`
  24.         ;;
  25.     -y )
  26.         getit=yes
  27.         ;;
  28.     * )
  29.         echo >&2 "${usage}"
  30.         exit 1
  31.     esac
  32.     shift
  33.     ;;
  34. 4 )
  35.     case "$1" in
  36.     -n )
  37.         ndrive=$2
  38.         ;;
  39.     -q )
  40.         question=$2
  41.         ;;
  42.     * )
  43.         echo >&2 "${usage}"
  44.         exit 1
  45.     esac
  46.     shift
  47.     shift
  48.     ;;
  49. * )
  50.     echo >&2 "${usage}"
  51.     exit 1
  52. esac
  53. : ${question:="Insert the medium in the ${ndrive}.  Press <RETURN> when ready. [q]"}
  54.  
  55. pid=$1
  56. ddrive=$2
  57. case ${ddrive} in
  58. /dev/r* )
  59.     #  WARNING:  This depends on the common, but not universal, naming
  60.     #  convenetion that all character and block special devices are under
  61.     #  /dev and if /dev/THING is a block device then /dev/rTHING is the
  62.     #  corresponding character (aka "raw") device.  Note that THING may
  63.     #  have directories as part of the name.
  64.     #    if ddrive is raw, bddrive == block device for a raw device
  65.     bddrive=/dev/`expr ${ddrive} : '/dev/r\(.*\)'`
  66.     ;;
  67. * )
  68.     #    otherwise they are the same.
  69.     bddrive=${ddrive}
  70. esac
  71.  
  72. trap 'exit 1' 1 2
  73. trap "kill ${pid};  exit 0" 15
  74. flags="-qq -k$$"
  75.  
  76. mounted=`/etc/mount  |
  77.     sed -n "\\;${bddrive};s;^\\([^ ]*\\) on ${bddrive} .*;\\1;p"`
  78. if [ -n "${mounted}" ]
  79. then
  80.     echo >&2 "The ${ndrive} is already mounted as the ${mounted} file system.
  81. This command cannot run with it mounted."
  82.     if [ ${getit} ]
  83.     then
  84.         kill ${pid}
  85.         exit 0
  86.     fi
  87.     if  checkyn ${flags} -H"
  88.     The ${ndrive} is already in use; it has a medium in it that
  89.     is mounted as a file system starting at the ${mounted} directory.
  90.     Before you can use the ${ndrive} for some other purpose, you
  91.     must unmount the medium now in use." \
  92.         -f "Do you want to unmount it?"
  93.     then
  94.         if  diskumount ${bddrive} ${mounted}
  95.         then
  96.             :
  97.         else
  98.             echo >&2 "    This command cannot run because the ${mounted} file system is mounted.
  99.     Unmount it and try again."
  100.             kill ${pid}
  101.             exit 0
  102.         fi
  103.     else
  104.         echo >&2 "The medium in the ${ndrive} is still mounted on ${mounted}."
  105.         kill ${pid}
  106.         exit 0
  107.     fi
  108. fi
  109.  
  110. while true
  111. do
  112.     if [ -z "${getit}" ]
  113.     then
  114.         checklist ${flags} -f -D '' \
  115.             "${question}" \
  116.             '<RETURN>' ''
  117.     fi
  118.     label=`/etc/labelit ${ddrive} 2>/dev/null`
  119.     if [ $? -eq 0 ]
  120.     then
  121.         break
  122.     fi
  123.         echo >&2 '
  124.     The medium may not be properly inserted,
  125.     the drive door may not be closed, the medium may not be formatted,
  126.     the medium may be in upside-down, or there is some other problem.
  127.     Check it and try again.
  128. '
  129.     if [ ${getit} ]
  130.     then
  131.         kill ${pid}
  132.         exit 0
  133.     fi
  134. done
  135. /etc/fsstat ${ddrive} >/dev/null 2>&1
  136. if [ $? = 3 ]
  137. then
  138.     exit 0
  139. fi
  140. echo "${label}"
  141.