#! /bin/sh
#
# 5799-WZQ (C) COPYRIGHT IBM CORPORATION 1987,1988
# LICENSED MATERIALS - PROPERTY OF IBM
# REFER TO COPYRIGHT INSTRUCTIONS FORM NUMBER G120-2083
#
# Copyright (c) 1983 Regents of the University of California.
# All rights reserved. The Berkeley Software License Agreement
# specifies the terms and conditions for redistribution.
#
# $Header:MAKEDEV_ca 12.0$
# $ACIS:MAKEDEV_ca 12.0$
# $Source: /ibm/acis/usr/src/dev/RCS/MAKEDEV_ca,v $
#
#	@(#)MAKEDEV	4.16	7/23/83
#
# Device "make" file.  Valid arguments:
#	std	standard devices
#	local	configuration specific devices
# Tapes:
#	st*	streaming tape
# Disks:
#	hd*	hard disk
#	fd*	floppy disk
# Terminal multiplexors:
#	asy*	4 port asynch
#	com*	communications card
#	psp	2 port planar serial card
# Pseudo terminals:
#	pty*	set of 16 master and slave pseudo terminals
# Pseudo devices:
#	displays	aed, apa16, apa8, apa8c, mono
# Printers:
#	lp*	line printer
#	ps*	PostScript printer
# Special:
#	mouse	planar mouse/tablet input
#	speaker	interface to keyboard speaker
#	displays	makes all the display device interfaces.
# 
# MAKEDEV floorstand creates devices for standard configuration for the
#	floorstand configuration
# MAKEDEV 6152	creates devices for the 6152 (similar to floorstand but
#		omitting various devices.
#
umask 77
for i
do
case $i in

floorstand)
	./MAKEDEV std st0 hd0 hd1 hd2 hd3 hd4 hd5 fd0 fd1 sc0 sc1 asy0 psp com1 com2 lp0 pty0
	;;

6152)
	./MAKEDEV std hd0 hd1 fd0 fd1 asy0 lp0 pty0
	;;

X)
	./MAKEDEV conttys displays mice bus
	;;
std)
	/etc/mknod console	c 0 0
	/etc/mknod drum		c 9 0	; chmod 640 drum ; chgrp kmem drum
	/etc/mknod kmem		c 3 1	; chmod 640 kmem ; chgrp kmem kmem
	/etc/mknod mem		c 3 0	; chmod 640 mem ; chgrp kmem mem
	/etc/mknod null		c 3 2	; chmod 666 null
# following only make sense on an RT
	/etc/mknod kmem1	c 3 3	; chmod 640 kmem1 ; chgrp kmem kmem1
	/etc/mknod kmem2	c 3 4	; chmod 640 kmem2 ; chgrp kmem kmem2
	/etc/mknod kmem4	c 3 5	; chmod 640 kmem4 ; chgrp kmem kmem4
	/etc/mknod ros		c 3 6	; chmod 444 ros
	/etc/mknod afpamem	c 3 12	; chmod 600 afpamem
# following only make sense on a 6152
	/etc/mknod pcmem	c 3 7	; chmod 640 pcmem ; chgrp kmem pcmem
	/etc/mknod rpc0a	c 3 8	; chmod 640 rpc0a ; chgrp kmem rpc0a
	/etc/mknod pc0a		b 9 8	; chmod 640 pc0a ; chgrp kmem pc0a
	/etc/mknod mem0		c 3 9	; chmod 640 mem0 ; chgrp kmem mem0
	/etc/mknod mem1		c 3 10	; chmod 640 mem1 ; chgrp kmem mem1
	/etc/mknod mem2		c 3 11	; chmod 640 mem2 ; chgrp kmem mem2
# end of 6152 devices
	/etc/mknod tty		c 2 0	; chmod 666 tty
	/etc/mknod klog		c 19 0	; chmod 640 klog ; chgrp kmem klog
 	/etc/mknod mouse	c 15 80	; chmod 666 mouse
	/etc/mknod speaker	c 14 0  ; chmod 666 speaker
	;;

st0)
	umask 0 ; unit=`expr $i : '..\(.*\)'`
	blk=5;
#	/etc/mknod st$unit	b $blk $unit
	/etc/mknod st0	b 5 0
	/etc/mknod nst0	b 5 4
	/etc/mknod rst0	c 11 0
	/etc/mknod nrst0 c 11 4
	umask 77
	;;

hd*)
	unit=`expr $i : '..\(.*\)'`
	case $i in
	hd*) name=hd; blk=1; chr=4;;
	esac
	case $unit in
	0|1|2|3|4|5)
		/etc/mknod ${name}${unit}a	b $blk `expr $unit '*' 8 + 0`
		/etc/mknod ${name}${unit}b	b $blk `expr $unit '*' 8 + 1`
		/etc/mknod ${name}${unit}c	b $blk `expr $unit '*' 8 + 2`
		/etc/mknod ${name}${unit}g	b $blk `expr $unit '*' 8 + 6`
		/etc/mknod r${name}${unit}a	c $chr `expr $unit '*' 8 + 0`
		/etc/mknod r${name}${unit}b	c $chr `expr $unit '*' 8 + 1`
		/etc/mknod r${name}${unit}c	c $chr `expr $unit '*' 8 + 2`
		/etc/mknod r${name}${unit}g	c $chr `expr $unit '*' 8 + 6`
		/etc/mknod ${name}${unit}d	b $blk `expr $unit '*' 8 + 3`
		/etc/mknod ${name}${unit}e	b $blk `expr $unit '*' 8 + 4`
		/etc/mknod ${name}${unit}f	b $blk `expr $unit '*' 8 + 5`
		/etc/mknod ${name}${unit}h	b $blk `expr $unit '*' 8 + 7`
		/etc/mknod r${name}${unit}d	c $chr `expr $unit '*' 8 + 3`
		/etc/mknod r${name}${unit}e	c $chr `expr $unit '*' 8 + 4`
		/etc/mknod r${name}${unit}f	c $chr `expr $unit '*' 8 + 5`
		/etc/mknod r${name}${unit}h	c $chr `expr $unit '*' 8 + 7`
		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
	;;

sc*)
	unit=`expr $i : '..\(.*\)'`
	case $i in
	sc*) name=sc; blk=7; chr=18;;
	esac
	case $unit in
	0|1|2|3|4|5|6|7|8|9)
		uval=$unit;;
	a)
		uval=10;;
	b)
		uval=11;;
	c)
		uval=12;;
	d)
		uval=13;;
	*)
		uval=999;;
	esac
	case $unit in
	0|1|2|3|4|5|6|7|8|9|a|b|c|d)
		/etc/mknod ${name}${unit}a	b $blk `expr $uval '*' 8 + 0`
		/etc/mknod ${name}${unit}b	b $blk `expr $uval '*' 8 + 1`
		/etc/mknod ${name}${unit}c	b $blk `expr $uval '*' 8 + 2`
		/etc/mknod ${name}${unit}g	b $blk `expr $uval '*' 8 + 6`
		/etc/mknod r${name}${unit}a	c $chr `expr $uval '*' 8 + 0`
		/etc/mknod r${name}${unit}b	c $chr `expr $uval '*' 8 + 1`
		/etc/mknod r${name}${unit}c	c $chr `expr $uval '*' 8 + 2`
		/etc/mknod r${name}${unit}g	c $chr `expr $uval '*' 8 + 6`
		/etc/mknod ${name}${unit}d	b $blk `expr $uval '*' 8 + 3`
		/etc/mknod ${name}${unit}e	b $blk `expr $uval '*' 8 + 4`
		/etc/mknod ${name}${unit}f	b $blk `expr $uval '*' 8 + 5`
		/etc/mknod ${name}${unit}h	b $blk `expr $uval '*' 8 + 7`
		/etc/mknod r${name}${unit}d	c $chr `expr $uval '*' 8 + 3`
		/etc/mknod r${name}${unit}e	c $chr `expr $uval '*' 8 + 4`
		/etc/mknod r${name}${unit}f	c $chr `expr $uval '*' 8 + 5`
		/etc/mknod r${name}${unit}h	c $chr `expr $uval '*' 8 + 7`
		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
	;;

fd*)
	umask 0
	unit=`expr $i : '..\(.*\)'`
	name=fd; blk=3; chr=10;
	case $unit in
	0|1)
		/etc/mknod ${name}${unit}	b $blk $unit
		/etc/mknod r${name}${unit}   c $chr $unit
# to keep newfs happy
		ln -s r${name}${unit} r${name}${unit}a
		;;
	*)
		echo bad unit for floppy disk in: $i
		;;
	esac
	umask 77
	;;

asy*)
	unit=`expr $i : 'asy\(.*\)'`
	case $unit in
	0|1|2|3)
		eval `echo $unit | awk ' { u = $1 } END {
		    for (i = 0; i < 4; i++)
			printf("/etc/mknod tty%02d c 1 %d; ",u*4+i,u*4+i); }'`
		;;
	*)
		echo bad unit for asy in: $i
		;;
	esac
	;;

psp)
	/etc/mknod ttys0 c 12 0
	/etc/mknod ttys1 c 12 1
	;;

conttys)
	/etc/mknod ttyaed c 0 1
	/etc/mknod ttyap16 c 0 2
	/etc/mknod ttyap8c c 0 3
	/etc/mknod ttyapa8 c 0 4
	/etc/mknod ttyega c 0 5
	/etc/mknod ttymono c 0 6
	/etc/mknod ttympel c 0 7
	/etc/mknod ttyvga c 0 1
	/etc/mknod tty8514 c 0 2
	;;

bus)
	/etc/mknod bus c 13 0; chmod 666 bus
	;;

com*)
	unit=`expr $i : 'com\(.*\)'`
	case $unit in
	1)
		/etc/mknod ttyc0 c 1 16
		;;
	2)
		/etc/mknod ttyc1 c 1 20
		;;
	*)
		echo bad unit for com in: $i
		;;
	esac
	;;

lp*)
	unit=`expr $i : "lp\(.*\)"`
	case $unit in
	0|1|2)
		/etc/mknod $i c 8 `expr $unit \* 8`
		chmod 666 $i
		;;
	*)
		echo bad unit for $name in: $i
		;;
	esac
	;;

ps*)
	unit=`expr $i : "ps\(.*\)"`
	case $unit in
	0|1|2)
		/etc/mknod $i c 22 $unit
		chmod 666 $i
		;;
	*)
		echo bad unit for $name 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;;
	*) echo bad unit for pty in: $i;;
	esac
	case $class in
	0|1|2)
		umask 0
		eval `echo $offset $name | awk ' { b=$1; n=$2 } END {
			for (i = 0; i < 16; i++)
				printf("/etc/mknod tty%s%x c 6 %d; \
					/etc/mknod pty%s%x c 7 %d; ", \
					n, i, b+i, n, i, b+i); }'`
		umask 77
		;;
	esac
	;;

displays)
	/etc/mknod aed c 0 73; chmod 666 aed
	/etc/mknod apa16 c 0 74 ; chmod 666 apa16
	/etc/mknod apa8c c 0 75 ; chmod 666 apa8c
	/etc/mknod apa8 c 0 76 ; chmod 666 apa8
	/etc/mknod ega c 0 77 ; chmod 666 ega
	/etc/mknod mono c 0 78 ; chmod 666 mono
	/etc/mknod mpel c 0 79 ; chmod 666 mpel
	/etc/mknod vga c 0 73 ; chmod 666 vga
	/etc/mknod ibm8514 c 0 74 ; chmod 666 ibm8514
 	;;

mice)
	/etc/mknod msaed c 15 1 ; chmod 666 msaed
	/etc/mknod msapa16 c 15 2; chmod 666 msapa16
	/etc/mknod msapa8c c 15 3; chmod 666 msapa8c
	/etc/mknod msapa8  c 15 4; chmod 666 msapa8
	/etc/mknod msega  c 15 5; chmod 666 msega
	/etc/mknod msmono  c 15 6; chmod 666 msmono
	/etc/mknod msmpel  c 15 7; chmod 666 msmpel
	/etc/mknod msvga  c 15 1; chmod 666 msvga
	/etc/mknod ms8514  c 15 2; chmod 666 ms8514
	;;

local)
	sh -$- MAKEDEV.local
	;;

rvd*)
	umask 0
	eval `echo "6 17 10" | awk ' { BLOCK=$1; CHAR=$2; limit=$3
		for (i=0; i<limit; ++i)
		printf("/etc/mknod vd%da b %d %d; /etc/mknod rvd%da c %d %d; \n", i, BLOCK, i, i, CHAR, i); } ' `
	/etc/mknod rvdcontrol c 17 255 ; chmod 666 rvdcontrol
	;;

# make limit (10) devices for each drive specified
op*)
	drive=`expr $i : 'op\(.*\)'`
	umask 0
	eval `echo "8 21 10 $drive" | awk ' { BLOCK=$1; CHAR=$2; limit=$3; drive=$4;
		start = drive*32; end = start+limit
		for (i=start; i<end; ++i)
		printf("op=op%d; /etc/mknod $op b %d %d; /etc/mknod rop%d c %d %d; chmod 640 $op r$op; chgrp operator $op r$op; \n", i, BLOCK, i, i, CHAR, i); } ' `
	;;

*)
	echo "${0}: error: undefined target: ${i}"
	exit 1;;
	
esac
done
