#!/bin/sh -
#
#	@(#)MAKEDEV	8.1 (Berkeley) 6/9/93
#

# Device "make" file.  Valid arguments:
#	std	standard devices
#	local	configuration specific devices
# Tapes:
#	tz*	SCSI tapes, DEC TK50 cartridge tape
# Disks:
#	rz*	SCSI disks
#	vnd*	"file" pseudo-disks
#	ccd*	concatenated disk driver
# Terminal multiplexors:
#	dc*	4 channel serial interface (keyboard, mouse, modem, printer)
#	scc*	82530 serial interface
# Pseudo terminals:
#	pty*	set of 16 master and slave pseudo terminals
# Printers:
# Call units:
# Special purpose devices:
#	bpf*	packet filter
#	lkm	loadable kernel modules interface
#	tun*	network tunnel driver
# Platform-specific devices:
#	NOTE: /dev/mouse should be a link to one of these for X windows.
#	pm*	raw interface to PMAX graphics devices
#	cfb*	raw interface to turbochannel PMAG-BA color frame buffer
#	xcfb*	raw interface to maxine graphics devices
#	mfb*	raw interface to mono graphics devices

PATH=/sbin:/bin/:/usr/bin:/usr/sbin
umask 77
for i
do
case $i in

all)
	sh MAKEDEV std rz0 rz1 rz2 rz3 rz4 tz0 tz1
	sh MAKEDEV cd0
	sh MAKEDEV pty0 vnd0 vnd1 vnd2 vnd3 ccd0 ccd1 ccd2 ccd3
	sh MAKEDEV tun0 tun1 tun2 tun3
	sh MAKEDEV bpf0 bpf1 bpf2 bpf3
	sh MAKEDEV lkm local
#	sh MAKEDEV audio pm0 cfb0 xcfb0 mfb0 sfb0
	sh MAKEDEV fb0 fb1 fb2
	;;

std)
	mknod console		c 0 0
	mknod drum		c 1 0	; chmod 640 drum ; chgrp kmem drum
	mknod tty		c 2 0	; chmod 666 tty
	mknod kmem		c 3 1	; chmod 640 kmem ; chgrp kmem kmem
	mknod mem		c 3 0	; chmod 640 mem ; chgrp kmem mem
	mknod null		c 3 2	; chmod 666 null
	mknod zero		c 3 12	; chmod 666 zero
	mknod klog		c 6 0	; chmod 600 klog
	mknod stdin		c 7 0	; chmod 666 stdin
	mknod stdout		c 7 1	; chmod 666 stdout
	mknod stderr		c 7 2	; chmod 666 stderr
	mkdir fd > /dev/null 2>&1
	(cd fd && eval `echo "" | awk ' BEGIN { \
		for (i = 0; i < 64; i++) \
			printf("mknod %d c 7 %d;", i, i)}'`)
	chown -R bin.bin fd
	chmod 555 fd
	chmod 666 fd/*
	;;

tz*)
	umask 0 ; unit=`expr $i : '..\(.*\)'`
	case $i in
	tz*) chr=10;;
	esac
	case $unit in
	0|1|2|3|4|5|6)
		unit0=`expr $unit \* 16`
		unit1=`expr $unit \* 16 + 1`
		unit2=`expr $unit \* 16 + 2`
		unit3=`expr $unit \* 16 + 3`
		mknod rmt$unit c $chr $unit0
		mknod nrmt$unit c $chr $unit1
		mknod rmth$unit c $chr $unit2
		mknod nrmth$unit c $chr $unit3
		chmod 666 rmt$unit nrmt$unit rmth$unit nrmth$unit
		;;
	*)
		echo bad unit for tape in: $1
		;;
	esac
	umask 77
	;;

bpf*)
	unit=`expr $i : 'bpf\(.*\)'`
	rm -f bpf$unit
	mknod bpf$unit c 12 $unit
	chmod 600 bpf$unit
	chown root.wheel bpf$unit
	;;

tun*)
#	unit=`expr $i : 'tun\(.*\)'`
#	rm -f tun$unit
#	mknod tun$unit c 111 $unit
#	chmod 600 tun$unit
#	chown root.wheel tun$unit
	;;

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

rz*|vnd*|vn*|ccd*)
	umask 2 ; unit=`expr $i : '.*[dz]\(.*\)'`
	case $i in
	rz*) name=rz; blk=21; chr=56;;
	vn*) name=vnd; blk=2; chr=11;;
	ccd*) name=ccd; blk=24; chr=87;;
	esac
	case $unit in
	0|1|2|3|4|5|6)
		mknod ${name}${unit}c	b $blk `expr $unit '*' 8 + 2`
		mknod r${name}${unit}c	c $chr `expr $unit '*' 8 + 2`
		if [ $name != vnd ]
		then
		mknod ${name}${unit}a	b $blk `expr $unit '*' 8 + 0`
		mknod ${name}${unit}b	b $blk `expr $unit '*' 8 + 1`
		mknod ${name}${unit}d	b $blk `expr $unit '*' 8 + 3`
		mknod ${name}${unit}e	b $blk `expr $unit '*' 8 + 4`
		mknod ${name}${unit}f	b $blk `expr $unit '*' 8 + 5`
		mknod ${name}${unit}g	b $blk `expr $unit '*' 8 + 6`
		mknod ${name}${unit}h	b $blk `expr $unit '*' 8 + 7`
		mknod r${name}${unit}a	c $chr `expr $unit '*' 8 + 0`
		mknod r${name}${unit}b	c $chr `expr $unit '*' 8 + 1`
		mknod r${name}${unit}d	c $chr `expr $unit '*' 8 + 3`
		mknod r${name}${unit}e	c $chr `expr $unit '*' 8 + 4`
		mknod r${name}${unit}f	c $chr `expr $unit '*' 8 + 5`
		mknod r${name}${unit}g	c $chr `expr $unit '*' 8 + 6`
		mknod r${name}${unit}h	c $chr `expr $unit '*' 8 + 7`
		fi
		chgrp operator ${name}${unit}[a-h] r${name}${unit}[a-h]
		chmod 640 ${name}${unit}[a-h] r${name}${unit}[a-h]
		;;
	*)
		echo bad unit for disk in: $i
		;;
	esac
	umask 77
	;;

dc*)
	unit=`expr $i : 'dc\(.*\)'`
	case $unit in
	0)
		mknod tty00 c 16 2
		mknod tty01 c 16 3
		;;
	*)
		echo bad unit for dc in: $i
		;;
	esac
	;;

scc*)
	unit=`expr $i : 'scc\(.*\)'`
	case $unit in
	0)
		mknod tty00 c 17 2
		mknod tty01 c 17 3
		;;
	*)
		echo bad unit for scc in: $i
		;;
	esac
	;;

fb*)
	unit=`expr $i : 'fb\(.*\)'`
	mknod fb$unit c 86 $unit ; chmod 666 fb$unit
	;;

# NOTE:
# framebuffer-specific devices pm*, cfb*, xfb*, sfb* ,mfb* are not 
# supported in 1.2.  Use the generic fb device intsead.
#
pm*)
	unit=`expr $i : 'pm\(.*\)'`
	case $unit in
	0)
		mknod pm0 c 8 0
		;;
	*)
		echo bad unit for pm in: $i
		;;
	esac
	;;

cfb*)
	unit=`expr $i : 'cfb\(.*\)'`
	case $unit in
	0)
		mknod cfb0 c 13 0
		;;
	*)
		echo bad unit for cfb in: $i
		;;
	esac
	;;

xcfb*)
	unit=`expr $i : 'xcfb\(.*\)'`
	case $unit in
	0)
		mknod xcfb0 c 14 0
		;;
	*)
		echo bad unit for xcfb in: $i
		;;
	esac
	;;

mfb*)
	unit=`expr $i : 'mfb\(.*\)'`
	case $unit in
	0)
		mknod mfb0 c 18 0
		;;
	*)
		echo bad unit for mfb in: $i
		;;
	esac
	;;

pty*)
	class=`expr $i : 'pty\(.*\)'`
	case $class in
	0) offset=0 name=p;;
	1) offset=16 name=q;;
	2) offset=32 name=r;;
	3) offset=48 name=s;;
# Note that telnetd, rlogind, and xterm (at least) only look at p-s.
	4) offset=64 name=t;;
	*) echo bad unit for pty in: $i;;
	esac
	case $class in
	0|1|2|3|4)
		umask 0
		eval `echo $offset $name | awk ' { b=$1; n=$2 } END {
			for (i = 0; i < 16; i++)
				printf("mknod tty%s%x c 4 %d; \
					mknod pty%s%x c 5 %d; ", \
					n, i, b+i, n, i, b+i); }'`
		umask 77
		if [ $class = 1 ]; then
			mv ttyqf ttyv0; mv ptyqf ptyv0
		fi
		;;
	esac
	;;

local)
	umask 0
	sh MAKEDEV.local
	;;

*)
	echo $i: unknown device
	;;
esac
done
