[BACK]Return to MAKEDEV CVS log [TXT][DIR] Up to [local] / src / etc / etc.i386

File: [local] / src / etc / etc.i386 / MAKEDEV (download)

Revision 1.91, Tue Apr 17 16:20:24 2001 UTC (23 years, 1 month ago) by todd
Branch: MAIN
CVS Tags: OPENBSD_2_9_BASE, OPENBSD_2_9
Changes since 1.90: +2 -2 lines

spelling

#!/bin/sh -
#
#	$OpenBSD: MAKEDEV,v 1.91 2001/04/17 16:20:24 todd Exp $
#	$NetBSD: MAKEDEV,v 1.40 1996/03/31 00:50:47 perry Exp $
#
# 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, including local devices.
#		Tries to make the 'standard' number of each type.
#	floppy	devices to be put on install floppies
#	std	standard devices
#	local	configuration specific devices
#	usbs	make USB devices
#
# Tapes:
#	wt*	QIC-interfaced (e.g. not SCSI) 3M cartridge tape
#	st*	SCSI tapes
#
# Disks:
#	wd*	"winchester" disk drives (ST506,IDE,ESDI,RLL,...)
#	fd*	"floppy" disk drives (3 1/2", 5 1/4")
#	sd*	SCSI disks
#	cd*	SCSI CD-ROM
#	mcd*	Mitsumi CD-ROM
#	vnd*	"file" pseudo-disks
#	rd*	"ramdisk" pseudo-disks
#	ccd*	contatenated disk devices
#	raid*	RAIDframe disk devices
#
# Console ports:
#	ttyC0	pccons or wscons screen 0
#	ttyC*	wscons
#
# Pointing devices: XXX no longer necessary with wsmouse drivers XXX
#	mms*	Microsoft bus mouse
#	lms*	Logitech bus mouse
#	pms*	PS/2 mouse
#	mouse-*	"mouse link"				(XXX)
# 
# Terminal ports:
#	tty*	PC COM ports
#	ttyc*	Cyclades serial ports
#
# Pseudo terminals:
#	pty*	set of 16 master and slave pseudo terminals
#
# Printers:
#	lpt*	stock lp
#	lpa*	interruptless lp
#
# USB devices:
#	usb*	Bus control devices used by usbd for attach/detach
#	uhid*	Generic HID devices
#	ulpt*	Printer devices
#	urio*	Diamond Multimedia Rio 500
#	ugen*	Generic device
#	utty*	Serial ports
#
# Call units:
#
# Special purpose devices:
#	ch*	SCSI media changer
#	fd	file descriptors
#	bpf*	packet filter
#	speaker	pc speaker				(XXX - installed)
#	lkm	loadable kernel modules interface
#	audio*	audio device
#	apm	power management device
#	tun*	network tunnel driver
#	joy*	joystick driver
#	pcmcia*	PCMCIA card drivers
#	*random	inkernel random number generator
#	uk*	"unknown SCSI" devices
#	ses*	SES/SAF-TE SCSI devices
#	ss*	SCSI scanners
#	xfs*	XFS filesystem devices
#	bktr0	video capturing
#	tuner0	tuner device
#	wdt0	watchdog timer
#

PATH=/sbin:/usr/sbin:/bin:/usr/bin
umask 77
this=$0

hex ()
{
	case $1 in
		[0-9]) echo -n $1 ;;
		10) echo -n a;;
		11) echo -n b;;
		12) echo -n c;;
		13) echo -n d;;
		14) echo -n e;;
		15) echo -n f;;
	esac
}

dodisk ()
{
	rm -f ${1}${2}? r${1}${2}?
	n=$(( $5*16 + $6 ))
	mknod ${1}${2}a  b $3 $n
	mknod ${1}${2}b  b $3 $(( $n + 1 ))
	mknod ${1}${2}c  b $3 $(( $n + 2 ))
	mknod ${1}${2}d  b $3 $(( $n + 3 ))
	mknod ${1}${2}e  b $3 $(( $n + 4 ))
	mknod ${1}${2}f  b $3 $(( $n + 5 ))
	mknod ${1}${2}g  b $3 $(( $n + 6 ))
	mknod ${1}${2}h  b $3 $(( $n + 7 ))
	mknod ${1}${2}i  b $3 $(( $n + 8 ))
	mknod ${1}${2}j  b $3 $(( $n + 9 ))
	mknod ${1}${2}k  b $3 $(( $n + 10 ))
	mknod ${1}${2}l  b $3 $(( $n + 11 ))
	mknod ${1}${2}m  b $3 $(( $n + 12 ))
	mknod ${1}${2}n  b $3 $(( $n + 13 ))
	mknod ${1}${2}o  b $3 $(( $n + 14 ))
	mknod ${1}${2}p  b $3 $(( $n + 15 ))
	mknod r${1}${2}a c $4 $n
	mknod r${1}${2}b c $4 $(( $n + 1 ))
	mknod r${1}${2}c c $4 $(( $n + 2 ))
	mknod r${1}${2}d c $4 $(( $n + 3 ))
	mknod r${1}${2}e c $4 $(( $n + 4 ))
	mknod r${1}${2}f c $4 $(( $n + 5 ))
	mknod r${1}${2}g c $4 $(( $n + 6 ))
	mknod r${1}${2}h c $4 $(( $n + 7 ))
	mknod r${1}${2}i c $4 $(( $n + 8 ))
	mknod r${1}${2}j c $4 $(( $n + 9 ))
	mknod r${1}${2}k c $4 $(( $n + 10 ))
	mknod r${1}${2}l c $4 $(( $n + 11 ))
	mknod r${1}${2}m c $4 $(( $n + 12 ))
	mknod r${1}${2}n c $4 $(( $n + 13 ))
	mknod r${1}${2}o c $4 $(( $n + 14 ))
	mknod r${1}${2}p c $4 $(( $n + 15 ))
	chown root.operator ${1}${2}[a-p] r${1}${2}[a-p]
	chmod 640 ${1}${2}[a-p] r${1}${2}[a-p]
}

unt()
{
	# XXX pdksh can't seem to deal with locally scoped variables
	# in ${foo#$bar} expansions
	arg="$1"
	tmp="${arg#[a-zA-Z]*}"
	tmp="${tmp%*[a-zA-Z]}"
	while [ "$tmp" != "$arg" ]
	do
		arg=$tmp
		tmp="${arg#[a-zA-Z]*}"
		tmp="${tmp%*[a-zA-Z]}"
	done
	echo $arg
}

for i
do

unit=`unt $i`
[ "$unit" ] || unit=0

case $i in

all)
	sh $this std fd wt0 wd0 wd1 wd2 wd3 sd0 sd1 sd2
	sh $this tty00 tty01 tty02 tty03 pty0 pty1 st0 st1 ch0 cd0 cd1
	sh $this ttyc0 ttyc1 ttyc2 ttyc3 ttyc4 ttyc5 ttyc6 ttyc7
	sh $this mcd0 vnd0 vnd1 lpa0 lpa1 ccd0 ccd1 ccd2 ccd3
	sh $this raid0 raid1 raid2 raid3 lpt0 lpt1 lpt2
	sh $this ttyC0 ttyC1 ttyC2 ttyC3 ttyC4 ttyC5 ttyC6 ttyC7 ttyC8 ttyC9
	sh $this ttyCa ttyCb
	sh $this wscons
	sh $this ipl tun0 tun1 tun2
	sh $this bpf0 bpf1 bpf2 bpf3 bpf4 bpf5 bpf6 bpf7 bpf8 bpf9
	sh $this speaker lkm audio0 joy0 joy1 apm local
	sh $this random ses0 uk0 uk1 ss0 ss1 pctr bktr0 tuner0 wdt0
	sh $this fd0 fd0B fd0C fd0D fd0E fd0F fd0G fd0H 
	sh $this fd1 fd1B fd1C fd1D fd1E fd1F fd1G fd1H
	sh $this xfs0 music
	sh $this rmidi0 rmidi1 rmidi2 rmidi3 rmidi4 rmidi5 rmidi6 rmidi7
	sh $this usbs
# MISSING:
#	sh $this mouse-?
	;;

floppy)
	sh $this std wt0 fd0 wd0 wd1 sd0 sd1 tty00 tty01
	sh $this st0 cd0 ttyC0 random
	;;

ramdisk)
	sh $this std lkm tty00 tty01 tty02 tty03 ttyC0 random
	sh $this wt0 fd0 rd0 wd0 wd1 wd2 wd3 bpf0
	sh $this sd0 sd1 sd2 sd3 st0 st1 cd0 cd1 mcd0
	;;

usbs)
	sh $this usb0 usb1
	sh $this uhid0 uhid1 uhid2 uhid3
	sh $this ulpt0 ulpt1
	sh $this urio0
	sh $this utty0 utty1
	;;

std)
	rm -f console drum mem kmem xf86 null zero io tty klog stdin stdout stderr ksyms
	mknod console		c 0 0
	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
	mknod xf86		c 2 4   ; chmod 600 xf86 ; chown root xf86
	mknod zero		c 2 12	; chmod 666 zero
	mknod io		c 2 14	; chmod 640 io ; chown root.kmem io
	mknod tty		c 1 0	; chmod 666 tty
	mknod klog		c 7 0	; chmod 600 klog
	mknod stdin		c 22 0	; chmod 666 stdin
	mknod stdout		c 22 1	; chmod 666 stdout
	mknod stderr		c 22 2	; chmod 666 stderr
	mknod ksyms		c 50 0  ; chmod 640 ksyms ; chown root.kmem ksyms
	;;

usb*)
	rm -f usb$unit
	mknod usb$unit c 61 $unit
	chown root.wheel usb$unit
	chmod 660 usb$unit
	;;

uhid*)
	rm -f uhid$unit
	mknod uhid$unit c 62 $unit
	chown root.wheel uhid$unit
	chmod 660 uhid$unit
	;;

ulpt*)
	rm -f ulpt$unit
	mknod ulpt$unit c 64 $unit
	chown root.wheel ulpt$unit
	chmod 660 ulpt$unit
	;;

urio*)
	rm -f urio$unit
	mknod urio$unit c 65 $unit
	chown root.wheel urio$unit
	chmod 660 urio$unit
	;;

ugen*)
	for j in 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
	do
		rm -f ugen$unit.$j
		mknod ugen$unit.$j c 63 $(( $unit * 16 + $j ))
		chown root.wheel ugen$unit.$j
		chmod 660 ugen$unit.$j
	done
	;;

utty*)
	rm -f utty$unit
	mknod utty$unit c 66 $unit
	chown root.wheel utty$unit
	chmod 660 utty$unit
	;;

ttyCcfg)
	rm -f ttyCcfg
	mknod ttyCcfg c 12 255
	chown root.wheel ttyCcfg
	;;

ttyC*)
	unit=${i##ttyC}
	case $unit in
	[0123456789abcdef])	;;
	*)			echo bad unit $unit for $i; exit 1;;
	esac
	num=$(( 16#$unit ))
	rm -f ttyC$unit
	mknod ttyC$unit c 12 $num
	chown root.wheel ttyC$unit
	;;

wscons)
	sh $this wskbd0 wskbd1 wskbd2 wskbd3
	sh $this wsmouse0 wsmouse1 wsmouse2 wsmouse3
	sh $this ttyCcfg
	sh $this wsmux
	;;

wskbd*)
	rm -f wskbd$unit
	mknod wskbd$unit c 67 $unit
	chown root.wheel wskbd$unit
	;;

wsmouse*)
	rm -f wsmouse$unit
	mknod wsmouse$unit c 68 $unit
	chown root.wheel wsmouse$unit
	;;

wsmux|wsmouse|wskbd)
	rm -f wsmouse wskbd
	mknod wsmouse c 69 0
	mknod wskbd c 69 1
	chown root.wheel wsmouse wskbd
	chmod 600 wsmouse wskbd
	;;

ttyc*)
	rm -f ttyc$unit cuac$unit
	mknod ttyc$unit c 38 $unit
	mknod cuac$unit c 38 $(( $unit + 128 ))
	chown uucp.dialer ttyc$unit cuac$unit
	chmod 660 ttyc$unit cuac$unit
	;;

fd)
	rm -f fd/*
	mkdir fd > /dev/null 2>&1
	n=0
	(cd fd && while [ $n -lt 64 ]; do mknod $n c 22 $n; n="$(( $n + 1 ))"; done )
	chown -R root.wheel fd
	chmod 555 fd
	chmod 666 fd/*
	;;

wt*)
	umask 2
	case $i in
	wt*) name=wt;  chr=10; blk=3;;
	esac
	rm -f $name$unit n$name$unit r$name$unit nr$name$unit
	mknod $name$unit	b $blk $(( $unit * 8 + 0 ))
	mknod n$name$unit	b $blk $(( $unit * 8 + 4 ))
	mknod r$name$unit	c $chr $(( $unit * 8 + 0 ))
	mknod nr$name$unit	c $chr $(( $unit * 8 + 4 ))
	chown root.operator $name$unit n$name$unit r$name$unit nr$name$unit
	chmod 640 $name$unit n$name$unit r$name$unit nr$name$unit
	umask 77
	;;

fd*)
	umask 2
	unit=${i##fd}
	typnam=${unit#?}
	unit=${unit%%[!0-9]}
	case $typnam in
	"")	typnum=0;;	# no type specified, assume A
	A)	typnam=; typnum=0;;
	B)	typnum=1;;
	C)	typnum=2;;
	D)	typnum=3;;
	E)	typnum=4;;
	F)	typnum=5;;
	G)	typnum=6;;
	H)	typnum=7;;
	*)	echo bad type $typnam for $i; exit 1;;
	esac
	case $unit in
	0|1)	blk=2; chr=9;;
	*)	echo bad unit $unit for $i; exit 1;;
	esac
	nam=fd${unit}${typnam}
	rm -f ${nam}? r${nam}?
	basenum=$(( $unit * 128 + $typnum * 16 ))
	mknod ${nam}a	b $blk $(( $basenum + 0 ))
	mknod ${nam}b	b $blk $(( $basenum + 1 ))
	mknod ${nam}c	b $blk $(( $basenum + 2 ))
	#mknod ${nam}d	b $blk $(( $basenum + 3 ))
	#mknod ${nam}e	b $blk $(( $basenum + 4 ))
	#mknod ${nam}f	b $blk $(( $basenum + 5 ))
	#mknod ${nam}g	b $blk $(( $basenum + 6 ))
	#mknod ${nam}h	b $blk $(( $basenum + 7 ))
	#mknod ${nam}i	b $blk $(( $basenum + 8 ))
	#mknod ${nam}j	b $blk $(( $basenum + 9 ))
	#mknod ${nam}k	b $blk $(( $basenum + 10 ))
	#mknod ${nam}l	b $blk $(( $basenum + 11 ))
	#mknod ${nam}m	b $blk $(( $basenum + 12 ))
	#mknod ${nam}n	b $blk $(( $basenum + 13 ))
	#mknod ${nam}o	b $blk $(( $basenum + 14 ))
	#mknod ${nam}p	b $blk $(( $basenum + 15 ))
	mknod r${nam}a	c $chr $(( $basenum + 0 ))
	mknod r${nam}b	c $chr $(( $basenum + 1 ))
	mknod r${nam}c	c $chr $(( $basenum + 2 ))
	#mknod r${nam}d	c $chr $(( $basenum + 3 ))
	#mknod r${nam}e	c $chr $(( $basenum + 4 ))
	#mknod r${nam}f	c $chr $(( $basenum + 5 ))
	#mknod r${nam}g	c $chr $(( $basenum + 6 ))
	#mknod r${nam}h	c $chr $(( $basenum + 7 ))
	#mknod r${nam}i	c $chr $(( $basenum + 8 ))
	#mknod r${nam}j	c $chr $(( $basenum + 9 ))
	#mknod r${nam}k	c $chr $(( $basenum + 10 ))
	#mknod r${nam}l	c $chr $(( $basenum + 11 ))
	#mknod r${nam}m	c $chr $(( $basenum + 12 ))
	#mknod r${nam}n	c $chr $(( $basenum + 13 ))
	#mknod r${nam}o	c $chr $(( $basenum + 14 ))
	#mknod r${nam}p	c $chr $(( $basenum + 15 ))
	chown root.operator ${nam}[a-p] r${nam}[a-p]
	chmod 640 ${nam}[a-p] r${nam}[a-p]
	umask 77
	;;

ccd*|sd*|wd[0-9]*|raid*)
	umask 2
	case $i in
	ccd*)	name=ccd;	blk=16; chr=18;;
	raid*)	name=raid;	blk=19; chr=54;;
	sd*)	name=sd;	blk=4;  chr=13;;
	wd*)	name=wd;	blk=0;  chr=3;;
	esac
	dodisk $name $unit $blk $chr $unit 0
	umask 77
	;;

vnd*)
	umask 2
	blk=14; chr=41;
	dodisk  vnd $unit $blk $chr $unit 0
	dodisk svnd $unit $blk $chr $unit 128
	umask 77
	;;

tty0*)
	unit=${i##tty0}
	rm -f com0$unit tty0$unit cua0$unit
	mknod tty0$unit c 8 $unit
	mknod cua0$unit c 8 $(( $unit + 128 ))
	chown uucp.dialer tty0$unit cua0$unit
	chmod 660 tty0$unit cua0$unit
	;;

pty*)
	case $unit in
	0) offset=0 name=p;;
	1) offset=16 name=q;;
	2) offset=32 name=r;;
	3) offset=48 name=s;;
	4) offset=64 name=t;;
	5) offset=80 name=u;;
	6) offset=96 name=v;;
	7) offset=112 name=w;;
	8) offset=128 name=x;;
	9) offset=144 name=y;;
	10) offset=160 name=z;;
	11) offset=176 name=P;;
	12) offset=192 name=Q;;
	13) offset=208 name=R;;
	14) offset=224 name=S;;
	15) offset=240 name=T;;
	*) echo bad unit for pty in: $i; continue ;;
	esac
	umask 0
	n=0
	while [ $n -lt 16 ]
	do
		nam=$name`hex $n`
		rm -f {tty,pty}$nam
		mknod tty$nam c 5 "$(( $offset + $n ))"
		mknod pty$nam c 6 "$(( $offset + $n ))"
		let n=n+1
	done
	umask 77
	;;
st*)
	umask 2
	case $i in
	st*) name=st;  chr=14; blk=5;;
	esac
	rm -f $name$unit n$name$unit e$name$unit en$name$unit \
		r$name$unit nr$name$unit er$name$unit enr$name$unit 
	n=$(( $unit*16 ))
	mknod $name$unit	b $blk $n
	mknod n$name$unit	b $blk $(( $n + 1 ))
	mknod e$name$unit	b $blk $(( $n + 2 ))
	mknod en$name$unit	b $blk $(( $n + 3 ))
	mknod r$name$unit	c $chr $n
	mknod nr$name$unit	c $chr $(( $n + 1 ))
	mknod er$name$unit	c $chr $(( $n + 2 ))
	mknod enr$name$unit	c $chr $(( $n + 3 ))
	chown root.operator $name$unit n$name$unit e$name$unit en$name$unit \
		r$name$unit nr$name$unit er$name$unit enr$name$unit 
	chmod 660 $name$unit n$name$unit e$name$unit en$name$unit \
		r$name$unit nr$name$unit er$name$unit enr$name$unit 
	umask 77
	;;

ch*)
	umask 2
	case $i in
	ch*) name=ch;  chr=17;;
	esac
	rm -f $name$unit
	mknod $name$unit	c $chr $unit
	chown root.operator $name$unit
	chmod 660 $name$unit
	umask 77
	;;

cd*|mcd*|rd*)
	umask 2
	case $i in
	rd*)  name=rd;  blk=17; chr=47;;
	cd*)  name=cd;  blk=6;  chr=15;;
	mcd*) name=mcd; blk=7;  chr=39;;
	esac
	rm -f $name$unit? r$name$unit?
	n=$(( $unit*16 ))
	mknod ${name}${unit}a	b $blk $n
	mknod ${name}${unit}c	b $blk $(( $n + 2 ))
	mknod r${name}${unit}a	c $chr $n
	mknod r${name}${unit}c	c $chr $(( $n + 2 ))
	chown root.operator ${name}${unit}[a-h] r${name}${unit}[a-h]
	chmod 640 ${name}${unit}[a-h] r${name}${unit}[a-h]
	umask 77
	;;

lpt*|lpa*)
	case $i in
	lpt*) name=lpt; flags=0;;
	lpa*) name=lpa; flags=128;;
	esac
	rm -f $name$unit
	mknod $name$unit c 16 $(( $unit + $flags ))
	chown root.wheel $name$unit
	;;

bpf*|tun[0-9]*)
	case $i in
	bpf*) name=bpf; chr=23;;
	tun*) name=tun; chr=40;;
	esac
	rm -f $name$unit
	mknod $name$unit c $chr $unit
	chown root.wheel $name$unit
	;;

ipl)
	rm -f ipl ipnat ipstate ipauth
	mknod ipl c 44 0
	mknod ipnat c 44 1
	mknod ipstate c 44 2
	mknod ipauth c 44 3
	chown root.wheel ipl ipnat ipstate ipauth
	;;

speaker)					# (XXX - installed)
	rm -f speaker
	mknod speaker c 27 0
	chown root.wheel speaker
	;;

lkm)
	rm -f lkm
	mknod lkm c 28 0
	chown root.kmem lkm
	chmod 640 lkm
	;;

#mms*|lms*)
#	case $i in
#	mms*) name=mms; chr=35;;
#	lms*) name=lms; chr=36;;
#	esac
#	rm -f $name$unit
#	mknod $name$unit c $chr $unit
#	chown root.wheel $name$unit
#	;;

#pms*)
#	rm -f pms${unit}
#	rm -f psm${unit}
#	mknod pms${unit} c 37 0
#	mknod psm${unit} c 37 1
#	chown root.wheel pms${unit}
#	chown root.wheel psm${unit}
#	;;

#mouse*)					# (XXX)
#	case $i in
#	mouse-*)
#		name=${i##mouse-}
#		if [ ! -c $name ]; then
#			/bin/sh $0 $name	# make the appropriate device
#		fi
#		rm -f mouse
#		ln -s $name mouse
#		;;
#	*)
#		echo no such device: use mouse-\${dev}, e.g. mouse-cua00
#		;;
#	esac
#	;;

audio*)
	major=42
	audio=audio$n
	sound=sound$n
	mixer=mixer$n
	audioctl=audioctl$n
	rm -f $audio $sound $mixer $audioctl
	mknod $sound    c $major $unit
	mknod $audio    c $major $(( $unit + 128 ))
	mknod $mixer    c $major $(( $unit + 16 ))
	mknod $audioctl c $major $(( $unit + 192 ))
	chown root.wheel $audio $sound $mixer $audioctl
	chmod 666 $audio $sound $mixer $audioctl
	[ -e audio ] || ln -s $audio audio
	[ -e mixer ] || ln -s $mixer mixer
	[ -e sound ] || ln -s $sound sound
	[ -e audioctl ] || ln -s $audioctl audioctl
	;;

joy*)
	rm -f joy$unit
	mknod joy$unit c 26 $unit
	chown root.wheel joy$unit
	chmod 666 joy$unit
	;;

xfs*)
	rm -f xfs$unit
	mknod xfs$unit c 51 $unit
	chown root.wheel xfs$unit
	chmod 600 xfs$unit
	;;

rmidi*)
	major=52
	rmidi=rmidi$unit
	rm -f $rmidi
	mknod $rmidi c $major $unit
	chown root.wheel $rmidi
	chmod 666 $rmidi
	;;

music*)
	[ "$unit" = "0" ] && n= || n=$unit
	music=music$n
	sequencer=sequencer$n
	major=53
	rm -f $sequencer $music
	mknod $music     c $major $(( $unit + 0 ))
	mknod $sequencer c $major $(( $unit + 128 ))
	chown root.wheel $music $sequencer
	chmod 666 $music $sequencer
	;;

apm*)
	rm -f apm apmctl
	mknod apm c 21 0
	mknod apmctl c 21 8
	chown root.wheel apm apmctl
	chmod 644 apm apmctl
	;;

random|srandom|urandom|prandom|arandom)
	rm -f random urandom srandom prandom arandom
	mknod  random c 45 0
	mknod srandom c 45 1
	mknod urandom c 45 2
	mknod prandom c 45 3
	mknod arandom c 45 4
	chown root.wheel random srandom urandom prandom arandom
	chmod 644 random srandom urandom prandom arandom
	;;

#pcmcia*)
#	rm -f pcmcia/bus? pcmcia/chip? pcmcia/slot*
#	mkdir -p pcmcia
#	mknod pcmcia/bus0 c 25 128
#	mknod pcmcia/bus1 c 25 129
#	mknod pcmcia/bus2 c 25 130
#	mknod pcmcia/bus3 c 25 131
#	mknod pcmcia/chip0 c 25 64
#	mknod pcmcia/chip1 c 25 65
#	mknod pcmcia/chip2 c 25 66
#	mknod pcmcia/chip3 c 25 67
#	mknod pcmcia/slot0 c 25 0
#	mknod pcmcia/slot1 c 25 1
#	mknod pcmcia/slot2 c 25 2
#	mknod pcmcia/slot3 c 25 3
#	mknod pcmcia/slot4 c 25 4
#	mknod pcmcia/slot5 c 25 5
#	mknod pcmcia/slot6 c 25 6
#	mknod pcmcia/slot7 c 25 7
#	mknod pcmcia/slot8 c 25 8
#	mknod pcmcia/slot9 c 25 9
#	mknod pcmcia/slot10 c 25 10
#	mknod pcmcia/slot11 c 25 11
#	mknod pcmcia/slot12 c 25 12
#	mknod pcmcia/slot13 c 25 13
#	mknod pcmcia/slot14 c 25 14
#	mknod pcmcia/slot15 c 25 15
#	chown -R root.wheel pcmcia
#	chmod 700 pcmcia
#	chmod 600 pcmcia/*
#	;;

uk*)
	rm -f uk$unit
	mknod uk$unit c 20 $unit
	chown root.operator uk$unit
	chmod 640 uk$unit
	;;

ses*)
	rm -f ses$unit
	mknod ses$unit c 24 $unit
	chown root.operator ses$unit
	chmod 640 ses$unit
	;;

ss*)
	rm -f ss$unit
	mknod ss$unit c 19 $unit
	chown root.operator ss$unit
	chmod 440 ss$unit
#	backwards compatibility with older PINTs
	rm -f scan$unit
	ln -s ss$unit scan$unit
	;;

pctr)
	rm -f pctr;
	mknod pctr c 46 0
	chown root.wheel pctr
	chmod 0644 pctr
	;;

bktr*)
	rm -f bktr$unit
	mknod bktr$unit c 49 $unit
	chown root.wheel bktr$unit
	chmod 0644 bktr$unit
	;;

tuner*)
	rm -f tuner$unit
	mknod tuner$unit c 49 $(( unit + 16 ))
	chown root.wheel tuner$unit
	chmod 0644 tuner$unit
	;;

wdt*)
	rm -f wdt$unit
	mknod wdt$unit c 55 $unit
	chown root.operator wdt$unit
	chmod 0440 wdt$unit
	;;

local)
	umask 0
	test -s $this.local && sh $this.local
	;;

*)
	echo no such device
	;;

esac
done