freebsd-skq/etc/etc.i386/MAKEDEV

1220 lines
30 KiB
Plaintext
Raw Normal View History

#!/bin/sh -
#
# Copyright (c) 1990 The Regents of the University of California.
# All rights reserved.
#
# Written and contributed by W. Jolitz 12/90
#
# Redistribution and use in source and binary forms are permitted provided
# that: (1) source distributions retain this entire copyright notice and
# comment, and (2) distributions including binaries display the following
# acknowledgement: ``This product includes software developed by the
# University of California, Berkeley and its contributors'' in the
# documentation or other materials provided with the distribution and in
# all advertising materials mentioning features or use of this software.
# Neither the name of the University nor the names of its contributors may
# be used to endorse or promote products derived from this software without
# specific prior written permission.
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
# @(#)MAKEDEV 5.2 (Berkeley) 6/22/90
#
# Device "make" file. Valid arguments:
# all makes all known devices, standard number of units (or close)
# std standard devices
# local configuration specific devices
# mach-4 mach4&lites+devices for Mach's XFree86 distribution
# (see http://www.cs.hut.fi/lites.html for more info on LITES)
#
# Tapes:
# wt* QIC-interfaced (e.g. not SCSI) 3M cartridge tape
# st* "NEW type scsi tapes" (old driver uses the
# block devices of the disks to get access)
1994-02-07 04:25:07 +00:00
# ft* QIC-40/QIC-80 3M cartridge tape (interfaced
# via the floppy disk controller)
#
# Disks:
1996-01-31 15:03:18 +00:00
# wd* "Winchester" disk drives (ST506,IDE,ESDI,RLL,...)
# fd* "floppy" disk drives (3 1/2", 5 1/4")
1996-01-31 15:03:18 +00:00
# sd* "SCSI disks"
# cd* "SCSI CD-ROM disks"
# mcd* "Mitsumi CD-ROM disks"
# scd* "Sony CD-ROM disks"
# matcd* "Matsushita (Panasonic) CD-ROM disks"
# wcd* "IDE CD-ROM disks"
# vn* "vnode disks"
# od* "optical disks"
#
# Console ports:
# vty* virtual console devices for syscons/pcvt/codrv
1995-03-12 15:25:32 +00:00
#
# Pointing devices:
# mse* Logitech and ATI Inport bus mouse
# psm* PS/2 mouse
1996-09-08 23:56:27 +00:00
# sysmouse Mousesystems mouse emulator for syscons
#
# Time devices:
# refclock-* serial ports used by xntpd parse refclocks
#
# Terminal ports:
1995-03-12 15:25:32 +00:00
# tty* general purpose serial ports
# cua* dialout serial ports
# ttyA* Specialix SI/XIO dialin ports ('*' = number of devices)
# cuaA* Specialix SI/XIO dialout ports
# ttyD* Digiboard - 16 dialin ports
# cuaD* Digiboard - 16 dialout ports
#
# Pseudo terminals:
# pty* set of 32 master and slave pseudo terminals
# vty* virtual terminals using syscons/pcvt/codrv console
#
# Printers:
# lpt* stock lp
#
# SCSI devices (other than CD-ROM, tape and disk):
# uk* "unknown" device (supports ioctl calls only)
# worm* WORM driver
# pt* Processor Type (HP scanner, as one example)
#
# PC-CARD (previously called PCMCIA) support
# card* PC-CARD slots
#
# Special purpose devices:
# apm Advanced Power Management BIOS
# bpf* packet filter
# speaker pc speaker
# tw* xten power controller
# snd* various sound cards
1995-03-12 15:25:32 +00:00
# pcaudio PCM audio driver
# socksys iBCS2 socket system driver
# vat VAT compatibility audio driver (requires snd*)
# gsc Genius GS-4500 hand scanner
1995-01-25 21:21:28 +00:00
# joy pc joystick
# tun* Tunneling IP device
# snp* tty snoop devices
1996-01-31 15:03:18 +00:00
# spigot Video Spigot video acquisition card
# meteor* Matrox Meteor video acquisition card (pci)
1996-02-02 19:25:24 +00:00
# qcam* Connectix QuickCam(tm) parallel port camera
1995-02-14 23:48:05 +00:00
# isdn* ISDN devices
# labpc* National Instrument's Lab-PC and LAB-PC+
1996-03-26 21:04:54 +00:00
# perfmon CPU performance-monitoring counters
# pci PCI configuration-space access from user mode
#
# $Id: MAKEDEV,v 1.129 1996/12/13 07:54:57 jkh Exp $
#
PATH=/sbin:/bin/:/usr/bin:/usr/sbin:$PATH
umask 77
# Convert integer to partition name
dkitop() {
local p
case $1 in
0) p=a;; 1) p=b;; 2) p=c;; 3) p=d;; 4) p=e;; 5) p=f;; 6) p=g;; 7) p=h;;
*) p="?";;
esac
echo $p
}
# Convert integer to slice name
dkitos() {
local s
case $1 in
0) s="";;
1) s="";;
*) s=s$(($1-1));;
esac
echo $s
}
# Convert disk (type, unit, slice, partition) to minor number
dkminor()
{
echo $((32 * 65536 * $1 + 8 * $2 + 65536 * $3 + $4))
}
# Convert the last character of a tty name to a minor number.
ttyminor()
{
case $unit in
[0-9]) m=$unit;;
a) m=10;; b) m=11;; c) m=12;; d) m=13;; e) m=14;; f) m=15;; g) m=16;;
h) m=17;; i) m=18;; j) m=19;; k) m=20;; l) m=21;; m) m=22;; n) m=23;;
o) m=24;; p) m=25;; q) m=26;; r) m=27;; s) m=28;; t) m=29;; u) m=30;;
v) m=31;;
*) m="?";;
esac
echo $m
}
# Raw partition for disks
dkrawpart=2
# Compatibility slice for disks
dkcompatslice=0
# Raw slice for disks
dkrawslice=1
# Control bit for SCSI
scsictl=536870912
# Standard umasks
disk_umask=037 # allow group operator to read disks
tape_umask=017 # allow group operator to read/write tapes
for i
do
case $i in
all)
sh MAKEDEV std # standard
1995-03-12 15:25:32 +00:00
sh MAKEDEV wd0 wd1 wd2 wd3 fd0 fd1 sd0 sd1 sd2 sd3 # bdev, disk
sh MAKEDEV cd0 mcd0 scd0 matcd0 wcd0 # bdev, cdrom
sh MAKEDEV od0 # bdev, ODD
1995-03-12 15:25:32 +00:00
sh MAKEDEV ft0 wt0 st0 # bdev, tape
sh MAKEDEV ttyd0 ttyd1 ttyd2 ttyd3 # cdev, serial
sh MAKEDEV cuaa0 cuaa1 cuaa2 cuaa3 # cdev, serial
sh MAKEDEV lpt0 lpt1 lpt2 # cdev, printer
1995-03-12 15:25:32 +00:00
sh MAKEDEV pty0 ch0 tw0 bpf0 # cdev
1996-09-08 23:56:27 +00:00
sh MAKEDEV perfmon speaker pcaudio psm0 mse0 sysmouse # cdev
sh MAKEDEV vty4 # cdev
1995-05-18 10:51:03 +00:00
sh MAKEDEV tun0 # cdev
;;
std)
rm -f console drum mem kmem null random urandom zero io tty klog
rm -f stdin stdout stderr lkm pci
mknod console c 0 0; chmod 600 console; chown root.wheel console
mknod drum c 4 0; chmod 640 drum; chown root.kmem drum
mknod kmem c 2 1; chmod 640 kmem; chown root.kmem kmem
mknod mem c 2 0; chmod 640 mem; chown root.kmem mem
mknod null c 2 2; chmod 666 null; chown root.wheel null
mknod random c 2 3; chmod 644 random; chown root.wheel random
mknod urandom c 2 4; chmod 644 urandom; chown root.wheel urandom
mknod zero c 2 12; chmod 666 zero; chown root.wheel zero
1995-12-31 09:30:30 +00:00
mknod io c 2 14; chmod 600 io; chown root.wheel io
mknod tty c 1 0; chmod 666 tty; chown root.wheel tty
mknod klog c 7 0; chmod 600 klog; chown root.wheel klog
mknod stdin c 22 0; chmod 666 stdin; chown root.wheel stdin
mknod stdout c 22 1; chmod 666 stdout; chown root.wheel stdout
mknod stderr c 22 2; chmod 666 stderr; chown root.wheel stderr
mknod lkm c 32 0; chmod 644 lkm; chown root.wheel lkm
mknod pci c 78 0; chmod 644 pci; chown root.wheel pci
rm -f fd/*
mkdir fd > null 2>&1
(cd fd && eval `echo "" | awk ' BEGIN { \
for (i = 0; i < 64; i++) \
1995-03-12 15:25:32 +00:00
printf("mknod %d c 22 %d;", i, i)}'`)
chown -R bin.bin fd
chmod 555 fd
chmod 666 fd/*
;;
mach-4)
mknod iopl c 22 0
mknod kbd c 23 0
mknod mouse c 24 0
mknod time c 25 0
mknod timezone c 26 0
;;
# Create device files for new Archive/Wangtek QIC-02 tape driver (vak)
wt*)
umask $tape_umask
u=`expr $i : '..\(.*\)'`
if [ x$u = x ]; then u=0; fi
From: Sergey Ryzhkov, Serge Vakulenko E-mail: <sir@kiae.su>, <vak@zebub.msk.su> added new /dev/wt entries for wt.c version 1.3 8) Some controllers support only 1024 block length. Setting WT_BSIZE bit in device minor number turns on this mode. Minor number structure: 0bfffuuu Fields: uuu - Unit number. It's possible to install up to three tape controllers on the same machine, using DRQs 1..3. Hence, unit number can lie in range 0..2. fff - Tape format number: 0 - /dev/rwt0 - default density (auto select) 1 - /dev/rwt0a - QIC 11 (obsolete) 2 - /dev/rwt0b - QIC 24 (60 megabytes) 3 - /dev/rwt0c - QIC 120 (120 megabytes) 4 - /dev/rwt0d - QIC 150 (150 megabytes) 5 - /dev/rwt0e - QIC 300 (300 megabytes?) 6 - /dev/rwt0f - QIC 600 (600 megabytes?) b - Long block size flag. With this bit set, the driver will perform all i/o operations with the controller using 1024-byte blocks, instead of 512 ones. Some controllers need it (CMS for example). If you Wangtek controller does not stream well, you can try to use /dev/rWt0 device instead of /dev/rwt0 (uncomment needed lines in /dev/MAKEDEV to create it). Block interface (writing blocks less than 2048 bytes) is not functioning pwoperly. Use raw interface instead. Thanks to all who helped to test it on the following hardware: Controller Drive Volume Interface Thanks to --------------------------------------------------------------------------- Archive SC-499 Archive 2150L 150 Meg QIC-02 KIAE CMS? ? 150 Meg QIC-02 KIAE Everex EV 831/833 ? ? QIC-36 Joergen Haegg Wangtek ASSY Wangtek 60 Meg QIC-02 Ken Whedbee Tecmar QT150i? Wangtek 5150EQ ? QIC-02? Marko Teiste ? Wangtek 5099EK 60 Meg QIC-36 Robert Shien Archive SC400S ? 60 Meg ? Warren Toomey
1993-12-14 11:11:37 +00:00
rm -f r[Ww]t$u nr[Ww]t$u r[Ww]t$u[a-f] nr[Ww]t$u[a-f]
mknod rwt${u} c 10 `expr 0 + $u` # default density, 512b blocks
mknod nrwt${u} c 10 `expr 4 + $u`
From: Sergey Ryzhkov, Serge Vakulenko E-mail: <sir@kiae.su>, <vak@zebub.msk.su> added new /dev/wt entries for wt.c version 1.3 8) Some controllers support only 1024 block length. Setting WT_BSIZE bit in device minor number turns on this mode. Minor number structure: 0bfffuuu Fields: uuu - Unit number. It's possible to install up to three tape controllers on the same machine, using DRQs 1..3. Hence, unit number can lie in range 0..2. fff - Tape format number: 0 - /dev/rwt0 - default density (auto select) 1 - /dev/rwt0a - QIC 11 (obsolete) 2 - /dev/rwt0b - QIC 24 (60 megabytes) 3 - /dev/rwt0c - QIC 120 (120 megabytes) 4 - /dev/rwt0d - QIC 150 (150 megabytes) 5 - /dev/rwt0e - QIC 300 (300 megabytes?) 6 - /dev/rwt0f - QIC 600 (600 megabytes?) b - Long block size flag. With this bit set, the driver will perform all i/o operations with the controller using 1024-byte blocks, instead of 512 ones. Some controllers need it (CMS for example). If you Wangtek controller does not stream well, you can try to use /dev/rWt0 device instead of /dev/rwt0 (uncomment needed lines in /dev/MAKEDEV to create it). Block interface (writing blocks less than 2048 bytes) is not functioning pwoperly. Use raw interface instead. Thanks to all who helped to test it on the following hardware: Controller Drive Volume Interface Thanks to --------------------------------------------------------------------------- Archive SC-499 Archive 2150L 150 Meg QIC-02 KIAE CMS? ? 150 Meg QIC-02 KIAE Everex EV 831/833 ? ? QIC-36 Joergen Haegg Wangtek ASSY Wangtek 60 Meg QIC-02 Ken Whedbee Tecmar QT150i? Wangtek 5150EQ ? QIC-02? Marko Teiste ? Wangtek 5099EK 60 Meg QIC-36 Robert Shien Archive SC400S ? 60 Meg ? Warren Toomey
1993-12-14 11:11:37 +00:00
# mknod rWt${u} c 10 `expr 64 + $u` # default density, 1024b blocks
# mknod nrWt${u} c 10 `expr 68 + $u`
mknod rwt${u}b c 10 `expr 16 + $u` # 60 megabytes
mknod nrwt${u}b c 10 `expr 20 + $u`
1995-03-12 15:25:32 +00:00
mknod rwt${u}c c 10 `expr 24 + $u` # 120 megabytes
From: Sergey Ryzhkov, Serge Vakulenko E-mail: <sir@kiae.su>, <vak@zebub.msk.su> added new /dev/wt entries for wt.c version 1.3 8) Some controllers support only 1024 block length. Setting WT_BSIZE bit in device minor number turns on this mode. Minor number structure: 0bfffuuu Fields: uuu - Unit number. It's possible to install up to three tape controllers on the same machine, using DRQs 1..3. Hence, unit number can lie in range 0..2. fff - Tape format number: 0 - /dev/rwt0 - default density (auto select) 1 - /dev/rwt0a - QIC 11 (obsolete) 2 - /dev/rwt0b - QIC 24 (60 megabytes) 3 - /dev/rwt0c - QIC 120 (120 megabytes) 4 - /dev/rwt0d - QIC 150 (150 megabytes) 5 - /dev/rwt0e - QIC 300 (300 megabytes?) 6 - /dev/rwt0f - QIC 600 (600 megabytes?) b - Long block size flag. With this bit set, the driver will perform all i/o operations with the controller using 1024-byte blocks, instead of 512 ones. Some controllers need it (CMS for example). If you Wangtek controller does not stream well, you can try to use /dev/rWt0 device instead of /dev/rwt0 (uncomment needed lines in /dev/MAKEDEV to create it). Block interface (writing blocks less than 2048 bytes) is not functioning pwoperly. Use raw interface instead. Thanks to all who helped to test it on the following hardware: Controller Drive Volume Interface Thanks to --------------------------------------------------------------------------- Archive SC-499 Archive 2150L 150 Meg QIC-02 KIAE CMS? ? 150 Meg QIC-02 KIAE Everex EV 831/833 ? ? QIC-36 Joergen Haegg Wangtek ASSY Wangtek 60 Meg QIC-02 Ken Whedbee Tecmar QT150i? Wangtek 5150EQ ? QIC-02? Marko Teiste ? Wangtek 5099EK 60 Meg QIC-36 Robert Shien Archive SC400S ? 60 Meg ? Warren Toomey
1993-12-14 11:11:37 +00:00
mknod nrwt${u}c c 10 `expr 28 + $u`
mknod rwt${u}d c 10 `expr 32 + $u` # 150 megabytes
mknod nrwt${u}d c 10 `expr 36 + $u`
# mknod rwt${u}e c 10 `expr 40 + $u` # 300 megabytes?
# mknod nrwt${u}e c 10 `expr 44 + $u`
# mknod rwt${u}f c 10 `expr 48 + $u` # 600 megabytes?
# mknod nrwt${u}f c 10 `expr 52 + $u`
chown root.operator r[Ww]t$u nr[Ww]t$u r[Ww]t$u[a-f] nr[Ww]t$u[a-f]
umask 77
;;
# Individual slices.
od*s*|sd*s*|vn*s*|wd*s*)
umask $disk_umask
case $i in
od*s*) name=od; blk=20; chr=70;;
sd*s*) name=sd; blk=4; chr=13;;
wd*s*) name=wd; blk=0; chr=3;;
vn*s*) name=vn; blk=15; chr=43;;
esac
unit=`expr $i : '..\([0-9]*\)s'`
slice=`expr $i : '..[0-9]*s\([0-9]*\)'`
part=`expr $i : '..[0-9]*s[0-9]*\(.*\)'`
case $unit in
[0-9]|[1-2][0-9]|30|31)
case $slice in
[0-9]|[1-2][0-9]|30)
oldslice=$slice
slice=$(($slice+1))
slicename=`dkitos $slice`
rm -f $name$unit$slicename* r$name$unit$slicename*
minor=`dkminor 0 $unit $slice $dkrawpart`
mknod $name$unit$slicename b $blk $minor
mknod r$name$unit$slicename c $chr $minor
case $part in
[a-h])
case $oldslice in
0) slice=$oldslice ;;
esac
for part in 0 1 2 3 4 5 6 7
do
minor=`dkminor 0 $unit $slice $part`
partname=`dkitop $part`
mknod $name$unit$slicename$partname \
b $blk $minor
mknod r$name$unit$slicename$partname \
c $chr $minor
done
;;
"")
;;
*)
echo bad partition for disk in: $i
;;
esac
chgrp operator $name$unit$slicename* \
r$name$unit$slicename*
;;
*)
echo bad slice for disk in: $i
;;
esac
;;
*)
echo bad unit for disk in: $i "(unit=$unit, slice=$slice, part=$part)"
;;
esac
umask 77
;;
fd*)
umask $disk_umask
unit=`expr $i : '..\(.*\)'`
name=fd; blk=2; chr=9
rm -f $name$unit* r$name$unit*
case $unit in
0|1|2|3)
mknod ${name}${unit} b $blk `expr $unit '*' 64`
mknod r${name}${unit} c $chr `expr $unit '*' 64`
# Fake BSD partitions
for i in a b c d e f g h
do
ln ${name}${unit} ${name}${unit}$i
ln r${name}${unit} r${name}${unit}$i
done
# User-readable and programmer-readable name sets
mknod ${name}${unit}.1720 b $blk `expr $unit '*' 64 + 1`
mknod r${name}${unit}.1720 c $chr `expr $unit '*' 64 + 1`
# ln ${name}${unit}.1720 ${name}${unit}135hs21
# ln r${name}${unit}.1720 r${name}${unit}135hs21
mknod ${name}${unit}.1480 b $blk `expr $unit '*' 64 + 2`
mknod r${name}${unit}.1480 c $chr `expr $unit '*' 64 + 2`
# ln ${name}${unit}.1480 ${name}${unit}135hs18
# ln r${name}${unit}.1480 r${name}${unit}135hs18
# ln ${name}${unit}.1480 ${name}${unit}96hs18
# ln r${name}${unit}.1480 r${name}${unit}96hs18
mknod ${name}${unit}.1440 b $blk `expr $unit '*' 64 + 3`
mknod r${name}${unit}.1440 c $chr `expr $unit '*' 64 + 3`
# ln ${name}${unit}.1440 ${name}${unit}135
# ln r${name}${unit}.1440 r${name}${unit}135
# ln ${name}${unit}.1440 ${name}${unit}135ds18
# ln r${name}${unit}.1440 r${name}${unit}135ds18
# ln ${name}${unit}.1440 ${name}${unit}96ds18
# ln r${name}${unit}.1440 r${name}${unit}96ds18
mknod ${name}${unit}.1200 b $blk `expr $unit '*' 64 + 4`
mknod r${name}${unit}.1200 c $chr `expr $unit '*' 64 + 4`
# ln ${name}${unit}.1200 ${name}${unit}96
# ln r${name}${unit}.1200 r${name}${unit}96
# ln ${name}${unit}.1200 ${name}${unit}96ds15
# ln r${name}${unit}.1200 r${name}${unit}96ds15
# ln ${name}${unit}.1200 ${name}${unit}135ds15
# ln r${name}${unit}.1200 r${name}${unit}135ds15
mknod ${name}${unit}.820 b $blk `expr $unit '*' 64 + 5`
mknod r${name}${unit}.820 c $chr `expr $unit '*' 64 + 5`
# ln ${name}${unit}.820 ${name}${unit}96hs10
# ln r${name}${unit}.820 r${name}${unit}96hs10
# ln ${name}${unit}.820 ${name}${unit}135hs10
# ln r${name}${unit}.820 r${name}${unit}135hs10
mknod ${name}${unit}.800 b $blk `expr $unit '*' 64 + 6`
mknod r${name}${unit}.800 c $chr `expr $unit '*' 64 + 6`
# ln ${name}${unit}.800 ${name}${unit}96ds10
# ln r${name}${unit}.800 r${name}${unit}96ds10
# ln ${name}${unit}.800 ${name}${unit}135ds10
# ln r${name}${unit}.800 r${name}${unit}135ds10
mknod ${name}${unit}.720 b $blk `expr $unit '*' 64 + 7`
mknod r${name}${unit}.720 c $chr `expr $unit '*' 64 + 7`
# ln ${name}${unit}.720 ${name}${unit}96ds9
# ln r${name}${unit}.720 r${name}${unit}96ds9
# ln ${name}${unit}.720 ${name}${unit}135ds9
# ln r${name}${unit}.720 r${name}${unit}135ds9
mknod ${name}${unit}.360 b $blk `expr $unit '*' 64 + 8`
mknod r${name}${unit}.360 c $chr `expr $unit '*' 64 + 8`
# ln ${name}${unit}.360 ${name}${unit}48
# ln r${name}${unit}.360 r${name}${unit}48
# ln ${name}${unit}.360 ${name}${unit}48ds9
# ln r${name}${unit}.360 r${name}${unit}48ds9
chgrp operator ${name}${unit}* r${name}${unit}*
;;
*)
echo bad unit for disk in: $i
;;
esac
umask 77
;;
1994-02-07 04:25:07 +00:00
ft*)
umask $tape_umask
unit=`expr $i : '..\(.*\)'`
name=ft; blk=2; chr=9
1994-02-07 04:25:07 +00:00
rm -f $name$unit* r$name$unit*
case $unit in
0|1|2|3)
mknod ${name}${unit} b $blk `expr $unit '*' 64 + 32`
mknod r${name}${unit} c $chr `expr $unit '*' 64 + 32`
ln ${name}${unit} ${name}${unit}a
ln r${name}${unit} r${name}${unit}a
chgrp operator ${name}${unit}* r${name}${unit}*
;;
*)
echo bad unit for tape in: $i
;;
esac
umask 77
;;
od*|sd*|vn*|wd*)
umask $disk_umask
case $i in
od*) name=od; blk=20; chr=70;;
sd*) name=sd; blk=4; chr=13;;
vn*) name=vn; blk=15; chr=43;;
wd*) name=wd; blk=0; chr=3;;
esac
unit=`expr $i : '..\(.*\)'`
case $unit in
[0-9]|[1-2][0-9]|30|31)
for slicepartname in s0h s1 s2 s3 s4
do
sh MAKEDEV $name$unit$slicepartname
done
case $name in
od|sd)
rm -f r${name}${unit}.ctl
mknod r${name}${unit}.ctl c $chr `expr $unit '*' 8 + $scsictl `
chmod 600 r${name}${unit}.ctl
;;
esac
;;
*)
echo bad unit for disk in: $i
;;
esac
umask 77
;;
ccd*)
umask 37
name=ccd
blk=21; chr=74
unit=`expr $i : '...\(.*\)'`
case $unit in
[0-9]|[1-2][0-9]|30|31)
rm -f r${name}${unit}.ctl
mknod r${name}${unit}.ctl c $chr `expr $unit '*' 8 + $scsictl `
chmod 600 r${name}${unit}.ctl
for part in 0 1 2 3 4 5 6 7
do
minor=`dkminor 0 $unit 0 $part`
partname=`dkitop $part`
mknod $name$unit$partname \
b $blk $minor
mknod r$name$unit$partname \
c $chr $minor
done
;;
*)
echo bad unit for disk in: $i
;;
esac
umask 77
;;
uk*)
unit=`expr $i : 'uk\(.*\)'`
rm -f uk$unit
1995-03-04 20:54:24 +00:00
mknod uk$unit c 31 $unit
;;
worm*)
unit=`expr $i : 'worm\(.*\)'`
if [ "X${unit}" = "X" ]; then
unit=0
fi
chr=62
name=worm
rm -f r${name}${unit}
mknod r${name}${unit} c $chr ${unit}
rm -f r${name}${unit}.ctl
mknod r${name}${unit}.ctl c $chr `expr $unit + $scsictl `
1995-03-04 20:54:24 +00:00
;;
# SCSI processor type driver
pt[0-9]*)
chr=61
name=pt
unit=`expr $i : 'pt\([0-9][0-9]*\)'`
if [ "X${unit}" = "X" ]; then
unit=0
fi
unit=`expr $unit + 1 - 1`
rm -f ${name}${unit}
mknod ${name}${unit} c $chr $unit
rm -f ${name}${unit}.ctl
mknod ${name}${unit}.ctl c $chr `expr $unit + $scsictl `
;;
pty*)
class=`expr $i : 'pty\(.*\)'`
case $class in
0) offset=0 name=p;;
1) offset=32 name=q;;
2) offset=64 name=r;;
3) offset=96 name=s;;
# Note that xterm (at least) only look at p-s.
1995-03-12 15:25:32 +00:00
4) offset=128 name=P;;
5) offset=160 name=Q;;
6) offset=192 name=R;;
7) offset=224 name=S;;
# This still leaves [tuTU].
*) echo bad unit for pty in: $i;;
esac
case $class in
0|1|2|3|4|5|6|7)
umask 0
eval `echo $offset $name | awk ' { b=$1; n=$2 } END { \
for (i = 0; i < 32; i++) {
c = substr("0123456789abcdefghijklmnopqrstuv", i + 1, 1); \
printf("rm -f tty%s%s pty%s%s; \
mknod tty%s%s c 5 %d; \
mknod pty%s%s c 6 %d; \
chown root.wheel tty%s%s pty%s%s;", \
n, c, n, c, \
n, c, b+i, \
n, c, b+i, \
n, c, n, c); \
} \
}'`
umask 77
;;
esac
;;
st*)
umask $tape_umask
unit=`expr $i : '..\(.*\)'`
chr=14
#remove old stype names
1995-03-12 15:25:32 +00:00
rm -f [hml]rst[0123456] [hml][en]rst[0123456] [hml]enrst[0123456]
#remove new style names
1995-03-12 15:25:32 +00:00
rm -f rst${unit} [en]rst${unit} enrst${unit}
rm -f rst${unit}.[0123] nrst${unit}.[0123]\
1995-03-12 15:25:32 +00:00
erst${unit}.[0123] st${unit}ctl.[0123]
#remove control device
case $unit in
0|1|2|3|4|5|6)
for mode in 0 1 2 3
do
mknod rst${unit}.${mode} c $chr `expr $unit '*' 16 + $mode '*' 4 + 0`
mknod nrst${unit}.${mode} c $chr `expr $unit '*' 16 + $mode '*' 4 + 1`
mknod erst${unit}.${mode} c $chr `expr $unit '*' 16 + $mode '*' 4 + 2`
mknod st${unit}ctl.${mode} c $chr `expr $unit '*' 16 + $mode '*' 4 + 3`
1995-03-12 15:25:32 +00:00
chgrp operator rst${unit}.${mode}\
nrst${unit}.${mode} \
erst${unit}.${mode} \
st${unit}ctl.${mode}
chmod 600 st${unit}ctl.${mode}
done
rm -f rst${unit}.ctl
mknod rst${unit}.ctl c $chr `expr $unit '*' 16 + $scsictl `
chmod 600 rst${unit}.ctl
ln rst${unit}.0 rst${unit}
ln nrst${unit}.0 nrst${unit}
ln erst${unit}.0 erst${unit}
;;
*)
echo bad unit for tape in: $i
1995-03-12 15:25:32 +00:00
;;
esac
umask 77
;;
ch*)
umask 37
unit=`expr $i : '..\(.*\)'`
case $i in
ch*) name=ch; chr=17;;
esac
rm -f $name$unit
case $unit in
0|1|2|3|4|5|6)
mknod ${name}${unit} c $chr `expr $unit '*' 16 + 0`
chgrp operator ${name}${unit}
rm -f r${name}${unit}.ctl
mknod r${name}${unit}.ctl c $chr `expr $unit '*' 16 + $scsictl `
chmod 600 r${name}${unit}.ctl
;;
*)
echo bad unit for media changer in: $i
;;
esac
umask 77
;;
cd*|mcd*|scd*)
umask $disk_umask
case $i in
1994-03-07 00:57:38 +00:00
cd*) unit=`expr $i : '..\(.*\)'`; name=cd; blk=6; chr=15;;
mcd*) unit=`expr $i : '...\(.*\)'`; name=mcd; blk=7; chr=29;;
scd*) unit=`expr $i : '...\(.*\)'`; name=scd; blk=16; chr=45;;
esac
rm -f $name$unit? r$name$unit?
case $unit in
0|1|2|3|4|5|6)
mknod ${name}${unit}a b $blk `expr $unit '*' 8 + 0`
1995-03-12 15:25:32 +00:00
mknod ${name}${unit}c b $blk `expr $unit '*' 8 + 2`
mknod r${name}${unit}a c $chr `expr $unit '*' 8 + 0`
1995-03-12 15:25:32 +00:00
mknod r${name}${unit}c c $chr `expr $unit '*' 8 + 2`
chgrp operator ${name}${unit}[a-h] r${name}${unit}[a-h]
case $name in
cd)
rm -f r${name}${unit}.ctl
mknod r${name}${unit}.ctl c $chr `expr $unit '*' 8 + $scsictl `
chmod 600 r${name}${unit}.ctl
;;
esac
;;
*)
echo bad unit for disk in: $i
;;
esac
umask 77
;;
matcd*)
umask 2
case $i in
matcd*) unit=`expr $i : '.....\(.*\)'`; name=matcd; blk=17; chr=46;;
esac
rm -f $name$unit? r$name$unit? $name$unit?? r$name$unit??
case $unit in
0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15)
mknod ${name}${unit}a b $blk `expr $unit '*' 8 + 0`
mknod ${name}${unit}c b $blk `expr $unit '*' 8 + 2`
mknod r${name}${unit}a c $chr `expr $unit '*' 8 + 0`
mknod r${name}${unit}c c $chr `expr $unit '*' 8 + 2`
chgrp operator ${name}${unit}[a-h] r${name}${unit}[a-h]
chmod 640 ${name}${unit}[a-h] r${name}${unit}[a-h]
mknod ${name}${unit}la b $blk `expr $unit '*' 8 + 128`
mknod ${name}${unit}lc b $blk `expr $unit '*' 8 + 130`
mknod r${name}${unit}la c $chr `expr $unit '*' 8 + 128`
mknod r${name}${unit}lc c $chr `expr $unit '*' 8 + 130`
chgrp operator ${name}${unit}l[a-h] r${name}${unit}l[a-h]
chmod 640 ${name}${unit}l[a-h] r${name}${unit}l[a-h]
;;
*)
echo bad unit for disk in: $i
;;
esac
umask 77
;;
wcd*)
umask 2 ;
unit=`expr $i : '...\(.*\)'`
blk=19
chr=69
rm -f wcd$unit? rwcd$unit?
case $unit in
0|1|2|3)
mknod wcd${unit}a b $blk `expr $unit '*' 8 + 0`
mknod rwcd${unit}a c $chr `expr $unit '*' 8 + 0`
mknod wcd${unit}c b $blk `expr $unit '*' 8 + 2`
mknod rwcd${unit}c c $chr `expr $unit '*' 8 + 2`
chgrp operator wcd${unit}[a-h] rwcd${unit}[a-h]
chmod 640 wcd${unit}[a-h] rwcd${unit}[a-h]
;;
*)
echo bad unit for disk in: $i
;;
esac
umask 77
;;
lpt*)
unit=`expr $i : 'lpt\(.*\)'`
rm -f lpt$unit
rm -f lpctl$unit
mknod lpt$unit c 16 $unit
mknod lpctl$unit c 16 `expr $unit + 128`
chown root.wheel lpt$unit
chown root.wheel lpctl$unit
;;
tw*)
unit=`expr $i : 'tw\(.*\)'`
rm -f tw$unit
mknod tw$unit c 19 $unit
chown root.operator tw$unit
;;
# Use this to create virtual consoles for syscons, pcvt or codrv
# ttyv0-b
# use as MAKEDEV vtyNN to create NN entries
vty*)
chr=12
units=`expr $i : 'vty\(.*\)'`
eval `echo ${chr} ${units} | awk ' { c=$1; n=$2 } END {
for (i = 0; i < n; i++)
printf("rm -f ttyv%01x; mknod ttyv%01x c %d %d; \
chown root.wheel ttyv%01x;", \
i, i, c, i, i); }'`
ln -fs ttyv0 vga # XXX X still needs this pccons relic
;;
bpf*)
unit=`expr $i : 'bpf\(.*\)'`
rm -f bpf$unit
mknod bpf$unit c 23 $unit
chown root.wheel bpf$unit
;;
speaker)
rm -f speaker
mknod speaker c 26 0
chown root.wheel speaker
;;
cuaa?|cua?)
umask 7
1994-12-08 00:44:55 +00:00
unit=`expr $i : 'cua.*\(.\)$'`
rm -f cua*a$unit
m=`ttyminor $unit`
mknod cuaa$unit c 28 `expr $m + 128`
mknod cuaia$unit c 28 `expr $m + 32 + 128`
mknod cuala$unit c 28 `expr $m + 64 + 128`
chown uucp.dialer cua*a$unit
umask 77
;;
tty0?|ttyd?|tty?)
1994-12-08 00:44:55 +00:00
unit=`expr $i : 'tty.*\(.\)$'`
rm -f tty*d$unit
m=`ttyminor $unit`
mknod ttyd$unit c 28 $m
mknod ttyid$unit c 28 `expr $m + 32`
mknod ttyld$unit c 28 `expr $m + 64`
chown root.wheel tty*d$unit
;;
cuac?)
umask 7
portlist="0 1 2 3 4 5 6 7 8 9 a b c d e f
g h i j k l m n o p q r s t u v"
major=48
card=`expr $i : 'cua.*\(.\)$'`
for unit in $portlist
do
minor=`ttyminor $unit`
minor=`expr $card \* 65536 + $minor`
name=$card$unit
rm -f cuac$name cuaic$name cualc$name
mknod cuac$name c $major `expr $minor + 128`
mknod cuaic$name c $major `expr $minor + 32 + 128`
mknod cualc$name c $major `expr $minor + 64 + 128`
chown uucp.dialer cuac$name cuaic$name cualc$name
done
umask 77
;;
ttyc?)
portlist="0 1 2 3 4 5 6 7 8 9 a b c d e f
g h i j k l m n o p q r s t u v"
major=48
card=`expr $i : 'tty.*\(.\)$'`
for unit in $portlist
do
minor=`ttyminor $unit`
minor=`expr $card \* 65536 + $minor`
name=$card$unit
rm -f ttyc$name ttyic$name ttylc$name
mknod ttyc$name c $major $minor
mknod ttyic$name c $major `expr $minor + 32`
mknod ttylc$name c $major `expr $minor + 64`
chown root.wheel ttyc$name ttyic$name ttylc$name
done
;;
# RISCom8 'rc' driver entries
cuam?)
1995-04-23 12:02:21 +00:00
umask 7
unit=`expr $i : 'cua.*\(.\)$'`
rm -f cuam$unit
1995-04-23 12:02:21 +00:00
m=`ttyminor $unit`
mknod cuam$unit c 63 `expr $m + 128`
chown uucp.dialer cuam$unit
1995-04-23 12:02:21 +00:00
umask 77
;;
ttym?)
1995-04-23 12:02:21 +00:00
unit=`expr $i : 'tty.*\(.\)$'`
rm -f ttym$unit
1995-04-23 12:02:21 +00:00
m=`ttyminor $unit`
mknod ttym$unit c 63 $m
chown root.wheel ttym$unit
1995-04-23 12:02:21 +00:00
;;
# Specialix SI/XIO.
# Note: these are 'base 1' to match the numbers on the panels, and to match
# the manual that comes with the system.
ttyA*)
major=68
nports=`expr $i : 'ttyA\(.*\)$'`
port=1
while [ $port -le $nports ]; do
minor=`expr $port - 1`
name=`expr $port + 1000 | cut -c 3-4`
rm -f tty*A$name
mknod ttyA$name c $major $minor
chown root.wheel ttyA$name
mknod ttyiA$name c $major `expr $minor + 65536`
chown root.wheel ttyiA$name
mknod ttylA$name c $major `expr $minor + 131072`
chown root.wheel ttylA$name
port=`expr $port + 1`
done
# For the user-mode control program, 'sicontrol'
rm -f si_control
mknod si_control c 68 262144
chmod 600 si_control
chown root.wheel si_control
;;
cuaA*)
umask 7
major=68
nports=`expr $i : 'cuaA\(.*\)$'`
port=1
while [ $port -le $nports ]; do
minor=`expr $port - 1`
name=`expr $port + 1000 | cut -c 3-4`
rm -f cuaA$name
mknod cuaA$name c $major `expr $minor + 128`
chown uucp.dialer cuaA$name
port=`expr $port + 1`
done
umask 77
;;
# Digiboard PC/?? 16 port card.
# The current scheme of minor numbering is:
#
# unused{14} CARD{2} major{8} CALLOUT{1} LOCK{1} INIT{1} PORT{5}
#
# CARD bitfield in future versions may be extended to 3 bits.
#
# See dgb(4)
#
ttyD?)
portlist="0 1 2 3 4 5 6 7 8 9 a b c d e f"
major=58
card=`expr $i : 'tty.*\(.\)$'`
for unit in $portlist
do
minor=`ttyminor $unit`
minor=`expr $card \* 65536 + $minor`
name=$card$unit
rm -f tty*D$name
mknod ttyD$name c $major $minor
mknod ttyiD$name c $major `expr $minor + 32`
mknod ttylD$name c $major `expr $minor + 64`
chown root.wheel tty*D$name
done
;;
cuaD?)
umask 7
portlist="0 1 2 3 4 5 6 7 8 9 a b c d e f"
major=58
card=`expr $i : 'cua.*\(.\)$'`
for unit in $portlist
do
minor=`ttyminor $unit`
minor=`expr $card \* 65536 + $minor`
name=$card$unit
rm -f cua*D$name
mknod cuaD$name c $major `expr $minor + 128`
mknod cuaiD$name c $major `expr $minor + 32 + 128`
mknod cualD$name c $major `expr $minor + 64 + 128`
chown uucp.dialer cua*D$name
done
umask 77
;;
mse*)
unit=`expr $i : 'mse\(.*\)'`
chr=27
rm -f mse$unit
mknod mse$unit c $chr `expr $unit '*' 2 + 1` # non-blocking for X11
chown root.wheel mse$unit
;;
psm*)
unit=`expr $i : 'psm\(.*\)'`
chr=21
rm -f psm$unit
mknod psm$unit c $chr `expr $unit '*' 2 + 1` # non-blocking for X11
chown root.wheel psm$unit
;;
mouse*)
1994-12-08 00:44:55 +00:00
name=`expr $i : 'mouse\(.*\)'`
if [ ! -c $name ]; then
$0 $name # make the appropriate device
fi
rm -f mouse
ln -s $name mouse
;;
1994-04-21 14:08:27 +00:00
pcaudio)
rm -f pcaudio pcaudioctl
mknod pcaudio c 24 0
mknod pcaudioctl c 24 128
chown root.wheel pcaudio pcaudioctl
1994-04-21 14:08:27 +00:00
;;
socksys)
rm -f socksys nfsd spx
mknod socksys c 41 0
mknod spx c 41 1
ln -s socksys nfsd
chown root.wheel socksys nfsd spx
chmod 666 socksys nfsd spx
;;
snd*)
#
# changes from Linux voxware
1996-01-31 15:03:18 +00:00
# minor Linux FreeBSD
# 8 sequencer2 (aka music0) music0
# 17 patmgr0 sequencer1
# 33 patmgr1 sequencer2
#
unit=`expr $i : 'snd\(.*\)'`
chr=30
# XXX write this less verbosely, like std
snd_security_hole=0 # XXX
umask $snd_security_hole
if [ $unit = "0" ] ; then
rm -f mixer ; ln -s mixer$unit mixer
rm -f sequencer ; ln -s sequencer$unit sequencer
rm -f dsp ; ln -s dsp$unit dsp
rm -f audio ; ln -s audio$unit audio
rm -f dspW ; ln -s dspW$unit dspW
rm -f music ; ln -s music$unit music
rm -f pss ; ln -s pss$unit pss
fi
rm -f mixer$unit # Mixer [ Control ]
mknod mixer$unit c $chr `expr $unit '*' 16 + 0`
rm -f sequencer$unit # Sequencer [ FM Synth and MIDI output ]
mknod sequencer$unit c $chr `expr $unit '*' 16 + 1`
rm -f midi midi$unit # Midi 0
mknod midi$unit c $chr `expr $unit '*' 16 + 2`
rm -f dsp$unit # DSP [ Digitized voice ]
mknod dsp$unit c $chr `expr $unit '*' 16 + 3`
rm -f audio$unit # SPARC audio [ Not fully implemented ]
mknod audio$unit c $chr `expr $unit '*' 16 + 4`
rm -f dspW$unit # Wide DSP (each sample is 16 bits)
mknod dspW$unit c $chr `expr $unit '*' 16 + 5`
rm -f sndstat # Status Device [ Debugging interface, only 1 ]
mknod sndstat c $chr 6
# minor number 7 is unused
rm -f music$unit # Sequencer level 2
mknod music$unit c $chr `expr $unit '*' 16 + 8`
rm -f pss$unit # PSS and programmable devices
mknod pss$unit c $chr `expr $unit '*' 16 + 9`
# minor numbers 10-15 are unused
umask 77
;;
vat)
rm -f vatio
mknod vatio c 25 128
chown root.wheel vatio
chmod 660 vatio
;;
gsc*)
unit=`expr $i : 'gsc\(.*\)'`
rm -f gsc${unit}*
mknod gsc${unit} c 47 $unit
mknod gsc${unit}p c 47 $(($unit + 8))
mknod gsc${unit}d c 47 $(($unit + 32))
mknod gsc${unit}pd c 47 $(($unit + 40))
chmod 666 gsc${unit}*
chown root.wheel gsc${unit}*
;;
apm*)
rm -f apm
chr=39
mknod apm c $chr 0
chown root.operator apm
chmod 660 apm
;;
card*)
unit=`expr $i : 'card\(.*\)'`
chr=50
rm -f card$unit
mknod card$unit c $chr $unit
chmod 644 card$unit
chown root.wheel card$unit
;;
ttyx?|ttyy?|ttyz?)
case $i in
1995-03-12 15:25:32 +00:00
*0) unit=0;; *1) unit=1;; *2) unit=2;; *3) unit=3;;
*4) unit=4;; *5) unit=5;; *6) unit=6;; *7) unit=7;;
*8) unit=8;; *9) unit=9;; *a) unit=10;; *b) unit=11;;
*c) unit=12;; *d) unit=13;; *e) unit=14;; *f) unit=15;;
esac
case $i in
ttyy?) unit=`expr $unit \+ 16`;;
ttyz?) unit=`expr $unit \+ 32`;;
esac
rm -f $i
mknod $i c 42 $unit
chown uucp.wheel $i
;;
cronyx)
rm -f cronyx
mknod cronyx c 42 63
chown root.wheel cronyx
1995-03-12 15:25:32 +00:00
;;
1995-01-25 21:21:28 +00:00
joy)
rm -f joy0 joy1
mknod joy0 c 51 0
mknod joy1 c 51 1
chown root.operator joy0 joy1
chmod 640 joy0 joy1
1995-01-25 21:21:28 +00:00
;;
spigot)
rm -f spigot
1995-07-30 12:56:26 +00:00
mknod spigot c 11 0
chmod 444 spigot
;;
1996-02-02 19:25:24 +00:00
qcam?)
unit=`expr $i : 'qcam\(.*\)'`
rm -f qcam$unit
mknod qcam$unit c 73 $unit
chmod 444 qcam$unit
;;
meteor?)
unit=`expr $i : 'meteor\(.*\)'`
rm -f meteor$unit
mknod meteor$unit c 67 $unit
chown root.wheel meteor$unit
chmod 444 meteor$unit
;;
tun?)
unit=`expr $i : 'tun\(.*\)'`
rm -f tun$unit
mknod tun$unit c 52 $unit
chown uucp.dialer tun$unit
;;
1996-09-08 23:56:27 +00:00
sysmouse)
rm -f sysmouse consolectl
1996-09-08 23:56:27 +00:00
mknod sysmouse c 12 128
mknod consolectl c 12 255
chown root.wheel sysmouse consolectl
1996-09-08 23:56:27 +00:00
;;
1995-02-14 21:13:14 +00:00
snp?)
unit=`expr $i : 'snp\(.*\)'`
rm -f snp$unit
mknod snp$unit c 53 $unit
chown root.wheel snp$unit
;;
1995-02-14 23:48:05 +00:00
# Valid arguments to isdn:
# none makes all the node but nic0
# 5000 makes nic0 for Niccy 5000
# 3008 makes nic0 for Niccy 3008
1995-03-12 15:25:32 +00:00
# 3009 makes nic0 for Niccy 3009
# 1000 makes nodes for Niccy 1000
# tel* makes nodes for TELES S0
1995-02-14 23:48:05 +00:00
#
isdn*)
type=`expr $i : 'isdn\(.*\)'`
if [ "X${type}" = "X" ]; then
type=none
fi
unit=54
rm -f nic0 snic0 n?ic0 isdn isdn? ity?? itel?? ispy
mknod n8ic0 c $unit 0
mknod snic0 c `expr $unit + 4` 0
mknod n9ic0 c `expr $unit + 6` 0
mknod isdn c `expr $unit + 1` 0
mknod isdn1 c `expr $unit + 1` 1
mknod isdn2 c `expr $unit + 1` 2
mknod ity00 c `expr $unit + 2` 0
mknod ity01 c `expr $unit + 2` 1
mknod ityo0 c `expr $unit + 2` 130
mknod ityo1 c `expr $unit + 2` 131
mknod itel00 c `expr $unit + 3` 0
mknod itel01 c `expr $unit + 3` 1
mknod ispy c `expr $unit + 5` 0
chown root.wheel n8ic0 n9ic0 snic0 isdn isdn? ity?? itel?? ispy
chown uucp.wheel ityo[01]
1995-02-14 23:48:05 +00:00
case $type in
5000)
ln snic0 nic0
chown root.wheel nic0
1995-02-14 23:48:05 +00:00
;;
3008)
ln n8ic0 nic0
chown root.wheel nic0
1995-02-14 23:48:05 +00:00
;;
3009)
ln n9ic0 nic0
chown root.wheel nic0
1995-02-14 23:48:05 +00:00
;;
1000|tel*|TEL*|none)
;;
*)
echo "No such ISDN device subtype: $type"
;;
esac
;;
# dufault@hda.com: If I do much more work on other A-D boards
# then eventually we'll have a "ad" and "dio" interface and some of these
# "labpcaio" ones will be gone.
# labpcaio: D-A and A-D.
# labpcdio: Digital in and Digital out.
#
labpc*)
umask 7
case $i in
labpcaio*)
name=labpcaio
unit=`expr $i : 'labpcaio\(.*\)'`
all="0 1 2 3 4 5 6 7"
offset=0
;;
labpcdio*)
name=labpcdio
unit=`expr $i : 'labpcdio\(.*\)'`
all="0 1 2 3"
offset=8
;;
*)
echo "Don't understand that labpc name"
exit
;;
esac
if [ "X${unit}" = "X" ]; then
unit=all
fi
case $unit in
0|1|2|3|4|5|6|7)
rm -f $name$unit
mknod $name$unit c 66 `expr $offset + $unit `
;;
all)
for i in $all
do
rm -f $name$i
mknod $name$i c 66 `expr $offset + $i `
done
;;
*)
echo "No such LabPC unit: $unit"
;;
esac
umask 77
;;
1996-03-26 21:04:54 +00:00
perfmon)
rm -f perfmon
mknod perfmon c 2 32
chown root.kmem perfmon
chmod 640 perfmon
1996-03-26 21:04:54 +00:00
;;
local)
umask 0 # XXX should be elsewhere
sh MAKEDEV.local
umask 77
;;
*)
echo $i - no such device name
;;
esac
done