1#!/bin/mksh
2# $MirSecuCron$
3# $MirOS: src/etc/etc.sparc/MAKEDEV,v 1.22 2010/09/25 11:58:50 tg Exp $
4#
5# THIS FILE AUTOMATICALLY GENERATED.  DO NOT EDIT.
6# generated from:
7#
8#	OpenBSD: etc.sparc/MAKEDEV.md,v 1.28 2005/07/17 12:23:14 miod Exp
9#	MirOS: src/etc/etc.sparc/MAKEDEV.md,v 1.7 2006/06/17 16:28:22 tg Exp
10#	OpenBSD: MAKEDEV.common,v 1.19 2005/06/29 18:23:26 todd Exp
11#	MirOS: src/etc/MAKEDEV.common,v 1.12 2010/09/25 11:58:05 tg Exp
12#	OpenBSD: MAKEDEV.mi,v 1.73 2005/02/07 06:14:18 david Exp
13#	MirOS: src/etc/MAKEDEV.mi,v 1.14 2009/07/18 14:08:59 tg Exp
14#	OpenBSD: MAKEDEV.sub,v 1.14 2005/02/07 06:14:18 david Exp
15#	MirOS: src/etc/MAKEDEV.sub,v 1.4 2005/07/24 12:49:10 tg Exp
16#
17#
18# Copyright (c) 2003-2009 Thorsten Glaser <tg@mirbsd.org>
19# Copyright (c) 2001-2004 Todd T. Fries <todd@OpenBSD.org>
20#
21# Permission to use, copy, modify, and distribute this software for any
22# purpose with or without fee is hereby granted, provided that the above
23# copyright notice and this permission notice appear in all copies.
24#
25# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
26# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
27# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
28# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
29# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
30# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
31# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
32#
33# Device "make" file.  Valid arguments:
34#	all	makes all known devices, including local devices.
35#		Tries to make the ``standard'' number of each type.
36#	ramdisk	Ramdisk kernel devices
37#	std	Standard devices
38#	local	Configuration specific devices
39# Disks:
40#	ccd*	Concatenated disk devices
41#	cd*	ATAPI and SCSI CD-ROM drives
42#	fd*	Floppy disk drives (3 1/2", 5 1/4")
43#	presto*	Prestoserve NVRAM memory
44#	sd*	SCSI disks, including flopticals
45#	raid*	RAIDframe disk devices
46#	rd*	"rd" pseudo-disks
47#	vnd*	"file" pseudo-disk devices
48#	xd*	Xylogic 753/7053 disks
49#	xy*	Xylogic 450/451 disks
50# Tapes:
51#	ch*	SCSI media changers
52#	st*	SCSI tape drives
53# Terminal ports:
54#	cua[a-z]*	Zilog 8530 serial ports
55#	tty[a-z]*	Zilog 8530 serial ports
56#	magma*	Magma multiport cards
57#	spif*	"spif" multiport cards
58# Pseudo terminals:
59#	ptm	pty master device
60#	pty*	Set of 62 master pseudo terminals
61#	tty*	Set of 62 slave pseudo terminals
62# Printers:
63#	bpp*	Parallel port
64#	bppmag[mno]	Magma parallel port
65#	bpp[jkl]	"spif" parallel port
66# Console ports:
67#	ttyC0	Minimal wscons devices
68#	ttyC-F*	wscons display devices
69#	wskbd*	wscons keyboards
70#	wsmux	wscons keyboard/mouse mux devices
71# Pointing devices:
72#	wsmouse*	wscons mice
73# Special purpose devices:
74#	audio*	Audio devices
75#	bpf*	Berkeley Packet Filter
76#	fd	fd/* nodes for fdescfs
77#	lkm	Loadable kernel modules interface
78#	openprom	PROM settings
79#	pf*	Packet Filter
80#	*random	In-kernel random data source
81#	ss*	SCSI scanners
82#	systrace*	System call tracing device
83#	tun*	Network tunnel driver
84#	uk*	Unknown SCSI devices
85PATH=/sbin:/usr/sbin:/bin:/usr/bin
86T=$0
87
88# set this to echo for Echo-Only debugging
89[ "$eo" ] || eo=
90
91hex()
92{
93	case $1 in
94	[0-9]) echo -n $1;;
95	10) echo -n a;;
96	11) echo -n b;;
97	12) echo -n c;;
98	13) echo -n d;;
99	14) echo -n e;;
100	15) echo -n f;;
101	esac
102}
103
104alph2d()
105{
106	typeset t="$1"
107	typeset p="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
108	typeset sub=${p%${t}*}
109	echo ${#sub}
110}
111
112h2d()
113{
114	typeset s="$1"
115	typeset f=${s%*[0-9a-f]} n=${s#[0-9a-f]*}
116
117	echo $(($(_h2d $f)*16+ $(_h2d $n) ))
118}
119
120_h2d()
121{
122	case $1 in
123	[0-9]) echo -n $1;;
124	a) echo -n 10;;
125	b) echo -n 11;;
126	c) echo -n 12;;
127	d) echo -n 13;;
128	e) echo -n 14;;
129	f) echo -n 15;;
130	esac
131}
132
133unt()
134{
135	# XXX pdksh can't seem to deal with locally scoped variables
136	# in ${foo#$bar} expansions
137	arg="$1"
138	tmp="${arg#[a-zA-Z]*}"
139	tmp="${tmp%*[a-zA-Z]}"
140	while [ "$tmp" != "$arg" ]
141	do
142		arg=$tmp
143		tmp="${arg#[a-zA-Z]*}"
144		tmp="${tmp%*[a-zA-Z]}"
145	done
146	echo $arg
147}
148
149dodisk()
150{
151	[ "$DEBUG" ] && set -x
152	n=$(($((${5}*${7:-16}))+${6})) count=0
153	RMlist="$RMlist $1$2? r$1$2?"
154	[ 0$7 -ne 8 ] && l="i j k l m n o p"
155	for d in a b c d e f g h $l
156	do
157		M $1$2$d	b $3 $(($n+$count)) 640
158		M r$1$2$d	c $4 $(($n+$count)) 640
159		let count=count+1
160	done
161	MKlist="$MKlist;chown root:operator $1$2? r$1$2?"
162}
163
164dodisk2()
165{
166	n=$(($(($5*${7:-16}))+$6))
167	M $1$2a b $3 $n 640 operator
168	M r$1$2a c $4 $n 640 operator
169	n=$(($n+2))
170	M $1$2c b $3 $n 640 operator
171	M r$1$2c c $4 $n 640 operator
172}
173
174# M name b/c major minor [mode] [group]
175RMlist="rm -f"
176MKlist=":"
177
178mkl() {
179	[ "${mklist[$1]}" ] && {
180		mklist[$1]="${mklist[$1]};mknod -m $1 $2 $3 $4 $5"
181	} || {
182		mklist[$1]="mknod -m $1 $2 $3 $4 $5"
183		modes="$modes $1"
184	}
185}
186
187M() {
188	RMlist="$RMlist $1"
189	mkl ${5-666} $1 $2 $3 $4
190	mklist="$mklist $1"
191	G=${6:-wheel}
192	[ "$7" ] && {
193		MKlist="$MKlist;chown $7:$G $1"
194	} || {
195		case $G in
196		wheel)		g=0;;
197		kmem)		g=2;;
198		tty)		g=4;;
199		operator)	g=5;;
200		_lkm)		g=61;;
201		dialer)		g=117;;
202		audio)		g=250;;
203		esac
204		[ "${grplist[$g]}" ] && {
205			grplist[$g]="${grplist[$g]} $1"
206		} || {
207			groups="$groups $g"
208			grplist[$g]="chgrp $G $1"
209		}
210	}
211	return 0
212}
213
214R() {
215[ "$DEBUG" ] && set -x
216for i in "$@"
217do
218U=`unt $i`
219[ "$U" ] || U=0
220
221case $i in
222ramdisk)
223	R std random bpf0
224	R fd0 sd0 sd1 sd2 rd0 cd0
225	;;
226
227std)
228	M console	c 0 0 600
229	M tty		c 2 0
230	M mem		c 3 0 640 kmem
231	M kmem		c 3 1 640 kmem
232	M null		c 3 2
233	M zero		c 3 12
234	M stdin		c 24 0
235	M stdout	c 24 1
236	M stderr	c 24 2
237	M ksyms		c 122 0 640 kmem
238	M drum		c 7 0 640 kmem
239	M klog		c 16 0 600
240	M eeprom	c 3 11	640 kmem
241	M openprom	c 70 0	640 kmem
242	;;
243
244uk*)
245	M uk$U c 120 $U 640 operator
246	;;
247
248tun*)
249	M tun$U c 111 $U 600
250	;;
251
252systrace)
253	M systrace c 50 0 644
254	;;
255
256ss*)
257	M ss$U c 121 $(($U*16)) 640 operator
258	M nss$U c 121 $(($(($U*16))+1)) 640 operator
259	M enss$U c 121 $(($(($U*16))+3)) 640 operator
260	RMlist="$RMlist scan$U"
261	MKlist="$MKlist;(umask 77;ln -s ss$U scan$U)"
262	;;
263
264*random)
265	M random c 119 0 644
266	M srandom c 119 1 644
267	M urandom c 119 2 644
268	M prandom c 119 3 644
269	M wrandom c 119 3 666
270	M arandom c 119 4 644
271	;;
272
273pf*)
274	M pf c 59 0 600
275	;;
276
277openprom)
278	M openprom c 70 0
279	;;
280
281lkm)
282	M lkm c 112 0 640 _lkm
283	;;
284
285fd)
286	RMlist="mkdir -p fd;$RMlist" n=0
287	while [ $n -lt 64 ];do M fd/$n c 24 $n;n=$(($n+1));done
288	MKlist="$MKlist;chmod 555 fd"
289	;;
290
291bpf*)
292	M bpf$U c 105 $U 600
293	;;
294
295audio*)
296	M sound$U	c 69 $U 660 audio
297	M mixer$U	c 69 $(($U+16)) 660 audio
298	M audio$U	c 69 $(($U+128)) 660 audio
299	M audioctl$U	c 69 $(($U+192)) 660 audio
300	MKlist="$MKlist;[ -e audio ] || ln -s audio$U audio"
301	MKlist="$MKlist;[ -e mixer ] || ln -s mixer$U mixer"
302	MKlist="$MKlist;[ -e sound ] || ln -s sound$U sound"
303	MKlist="$MKlist;[ -e audioctl ] || ln -s audioctl$U audioctl"
304	;;
305
306wsmouse[0-9]*)
307	M wsmouse$U c 80 $U 600
308	;;
309
310wsmux|wsmouse|wskbd)
311	M wsmouse c 81 0 600
312	M wskbd c 81 1 600
313	;;
314
315wskbd*)
316	M wskbd$U c 79 $U 600
317	;;
318
319tty[C-F]*)
320	U=${i##tty[C-F]}
321	case $i in
322	ttyC*) n=C m=0;;
323	ttyD*) n=D m=256;;
324	ttyE*) n=E m=512;;
325	ttyF*) n=F m=768;;
326	esac
327	case $U in
328	[0-9a-f]) M tty$n$U c 78 $((16#$U+$m)) 600;;
329	cfg) M tty${n}cfg c 78 $((255+$m)) 600;;
330	*) echo bad unit $U for $i; exit 1;;
331	esac
332	;;
333
334wscons)
335	R wsmouse0 wsmouse1 wsmouse2 wsmouse3 wskbd0 wskbd1 wskbd2
336	R wskbd3 wsmux ttyFcfg ttyF0 ttyF1 ttyF2 ttyF3 ttyF4 ttyF5
337	R ttyF6 ttyF7 ttyF8 ttyF9 ttyFa ttyFb ttyEcfg ttyE0 ttyE1
338	R ttyE2 ttyE3 ttyE4 ttyE5 ttyE6 ttyE7 ttyE8 ttyE9 ttyEa ttyEb
339	R ttyDcfg ttyD0 ttyD1 ttyD2 ttyD3 ttyD4 ttyD5 ttyD6 ttyD7
340	R ttyD8 ttyD9 ttyDa ttyDb ttyCcfg ttyC0 ttyC1 ttyC2 ttyC3
341	R ttyC4 ttyC5 ttyC6 ttyC7 ttyC8 ttyC9 ttyCa ttyCb
342	;;
343
344bpp*)
345	M bpp$U c 104 $U 600
346	;;
347
348pty*)
349	if [ $U -gt 15 ]; then
350		echo bad unit for pty in: $i
351		continue
352	fi
353	set -A letters p q r s t u v w x y z P Q R S T
354	set -A suffixes 0 1 2 3 4 5 6 7 8 9 \
355	    a b c d e f g h i j k l m n o p q r s t u v w x y z \
356	    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
357
358	name=${letters[$U]}
359	n=0
360	while [ $n -lt 62 ]
361	do
362		nam=$name${suffixes[$n]}
363		off=$(($U*62))
364		M tty$nam c 20 $(($off+$n))
365		M pty$nam c 21 $(($off+$n))
366		n=$(($n+1))
367	done
368	;;
369
370ptm)
371	M ptm c 125 0 666
372	;;
373
374spif*)
375	case $U in
376	0)	offset=0  nam=j;;
377	1)	offset=16 nam=k;;
378	2)	offset=32 nam=l;;
379	*)	echo "bad unit for $i: $U"; exit 127;;
380	esac
381	offset=$(($U*64))
382	n=0
383	while [ $n -lt 8 ]
384	do
385		name=${nam}`hex $n`
386		M tty$name c 102 $(($offset+$n)) 660 dialer uucp
387		n=$(($n+1))
388	done
389	M bpp${nam}0 c 103 $(($offset+0)) 600
390	;;
391
392magma*)
393	case $U in
394	0)	offset=0  nam=m;;
395	1)	offset=16 nam=n;;
396	2)	offset=32 nam=o;;
397	*)	echo "bad unit for $i: $U"; exit 127;;
398	esac
399	offset=$(($U*64))
400	n=0
401	while [ $n -lt 16 ]
402	do
403		name=${nam}`hex $n`
404		M tty$name c 100 $(($offset+$n)) 660 dialer uucp
405		n=$(($n+1))
406	done
407	M bpp${nam}0 c 101 $(($offset+0)) 600
408	M bpp${nam}1 c 101 $(($offset+1)) 600
409	;;
410
411tty[a-z])
412	u=${i#tty*}
413	case $u in
414	a) n=0 ;;
415	b) n=1 ;;
416	c) n=2 ;;
417	d) n=3 ;;
418	e) n=4;;
419	f) n=5;;
420	*) echo unknown tty device $i ;;
421	esac
422	M tty$u c 12 $n 660 dialer uucp
423	;;
424
425cua[a-z])
426	u=${i#cua*}
427	case $u in
428	a) n=0 ;;
429	b) n=1 ;;
430	c) n=2 ;;
431	d) n=3 ;;
432	e) n=4;;
433	f) n=5;;
434	*) echo unknown cua device $i ;;
435	esac
436	M cua$u c 12 $(($n+128)) 660 dialer uucp
437	;;
438
439st*)
440	n=$(($U*16))
441	for pre in " " n e en
442	do
443		M ${pre}st$U	b 11 $n 660 operator
444		M ${pre}rst$U	c 18 $n 660 operator
445		n=$(($n+1))
446	done
447	;;
448
449ch*)
450	M ch$U c 19 $U 660 operator
451	;;
452
453vnd*)
454	dodisk vnd $U 8 110 $U 0
455	dodisk svnd $U 8 110 $U 2048
456	;;
457
458rd*)
459	dodisk2 rd $U 17 106 $U 0
460	;;
461
462fd*)
463	typnam=$U${i#fd[01]*}
464	case $typnam in
465	0|1)	typnum=0;; # no type specified, assume A
466	*A)	typnum=0; typnam=0;;
467	*B)	typnum=1;;
468	*C)	typnum=2;;
469	*D)	typnum=3;;
470	*E)	typnum=4;;
471	*F)	typnum=5;;
472	*G)	typnum=6;;
473	*H)	typnum=7;;
474	*)	echo bad type $typnam for $i; exit 1;;
475	esac
476	case $U in
477	0|1)	blk=16; chr=54;;
478	*)	echo bad unit $U for $i; exit 1;;
479	esac
480	nam=fd${typnam}
481	n=$(($(($U*128))+$(($typnum*16))))
482	M ${nam}a	b $blk $n 640 operator
483	M ${nam}b	b $blk $(($n+1)) 640 operator
484	M ${nam}c	b $blk $(($n+2)) 640 operator
485	M r${nam}a	c $chr $n 640 operator
486	M r${nam}b	c $chr $(($n+1)) 640 operator
487	M r${nam}c	c $chr $(($n+2)) 640 operator
488	;;
489
490cd*)
491	dodisk2 cd $U 18 58 $U 0
492	;;
493
494local)
495	test -s $T.local && sh $T.local
496	;;
497
498all)
499	R presto0 bpp0 ccd0 ccd1 ccd2 ccd3 vnd0 vnd1 vnd2 vnd3 sd0
500	R sd1 sd2 sd3 sd4 cd0 cd1 rd0 xy0 xy1 xy2 xy3 tun0 tun1 tun2
501	R tun3 bpf0 bpf1 bpf2 bpf3 bpf4 bpf5 bpf6 bpf7 bpf8 bpf9 pty0
502	R fd1 fd1B fd1C fd1D fd1E fd1F fd1G fd1H fd0 fd0B fd0C fd0D
503	R fd0E fd0F fd0G fd0H ss0 ss1 ch0 cuaa cuab cuac cuad ttya
504	R ttyb ttyc ttyd ptm local wscons audio0 uk0 random lkm pf
505	R systrace xd0 xd1 xd2 xd3 raid0 raid1 raid2 raid3 std st0 st1
506	R fd
507	;;
508
509presto*|xd*|xy*|sd*|raid*|ccd*)
510	case $i in
511	presto*) dodisk presto $U 26 25 $U 0;;
512	xd*) dodisk xd $U 10 42 $U 0;;
513	xy*) dodisk xy $U 3 9 $U 0;;
514	sd*) dodisk sd $U 7 17 $U 0;;
515	raid*) dodisk raid $U 25 123 $U 0;;
516	ccd*) dodisk ccd $U 9 23 $U 0;;
517	esac
518	;;
519
520*)
521	echo $i: unknown device
522	;;
523esac
524done
525}
526R "$@"
527list="$RMlist"
528for mode in $modes; do
529	list="$list;${mklist[$mode]}"
530done
531for group in $groups; do
532	list="$list;${grplist[$group]}"
533done
534list="$list;$MKlist"
535if [ "$eo" = "echo" ]; then
536	$eo "$list"
537else
538	echo "$list" | sh
539fi
540