xref: /minix/minix/commands/DESCRIBE/DESCRIBE.sh (revision 27852ebe)
1#!/bin/sh
2#
3# DESCRIBE 2.2 - Describe the given devices.		Author: Kees J. Bot
4#
5# BUGS
6# - Arguments may not contain shell metacharacters.
7
8case $# in
90)	flag=; set -$- /dev ;;
10*)	flag=d ;;
11esac
12
13ls -l$flag $* | \
14sed	-e '/^total/d' \
15	-e '/^l/d' \
16	-e '/^[^bc]/s/.* /BAD BAD /' \
17	-e '/^[bc]/s/.* \([0-9][0-9]*\), *\([0-9][0-9]*\).* /\1 \2 /' \
18| {
19ex=0	# exit code
20
21while read major minor path
22do
23    case $path in
24    /*)	name=`expr $path : '.*/\\(.*\\)$'`
25	;;
26    *)	name=$path
27    esac
28    dev= des=
29
30    case $major in	# One of the controllers?  What is its controller nr?
31    3)	ctrlr=0	;;
32    8)	ctrlr=1	;;
33    10)	ctrlr=2	;;
34    12)	ctrlr=3	;;
35    esac
36
37    case $major,$minor in
38    1,0)	des="RAM disk" dev=ram
39	;;
40    1,1)	des="memory" dev=mem
41	;;
42    1,2)	des="kernel memory" dev=kmem
43	;;
44    1,3)	des="null device, data sink" dev=null
45	;;
46    1,4)	des="boot device loaded from boot image" dev=boot
47	;;
48    1,5)	des="null byte stream generator" dev=zero
49	;;
50    1,6)	des="boot image RAM disk" dev=imgrd
51	;;
52    1,[789]|1,1[012])
53		ramdisk=`expr $minor - 7`
54		des="RAM disk $ramdisk" dev=ram$ramdisk
55	;;
56    2,*)	drive=`expr $minor % 4`
57	case `expr $minor - $drive` in
58	0)	des='auto density' dev="fd$drive"
59	    ;;
60	4)	des='360k, 5.25"' dev="pc$drive"
61	    ;;
62	8)	des='1.2M, 5.25"' dev="at$drive"
63	    ;;
64	12)	des='360k in 720k, 5.25"' dev="qd$drive"
65	    ;;
66	16)	des='720k, 3.5"' dev="ps$drive"
67	    ;;
68	20)	des='360k in 1.2M, 5.25"' dev="pat$drive"
69	    ;;
70	24)	des='720k in 1.2M, 5.25"' dev="qh$drive"
71	    ;;
72	28)	des='1.44M, 3.5"' dev="PS$drive"
73	    ;;
74	112)	des='auto partition 0' dev="fd${drive}p0"
75	    ;;
76	116)	des='auto partition 1' dev="fd${drive}p1"
77	    ;;
78	120)	des='auto partition 2' dev="fd${drive}p2"
79	    ;;
80	124)	des='auto partition 3' dev="fd${drive}p3"
81	    ;;
82	*)	dev=BAD
83	esac
84	des="floppy drive $drive ($des)"
85	;;
86    [38],[05]|[38],[123][05]|1[02],[05]|1[02],[123][05])
87	drive=`expr $minor / 5`
88	des="controller $ctrlr disk $drive" dev=c${ctrlr}d${drive}
89	;;
90    [38],?|[38],[123]?|1[02],?|1[02],[123]?)
91	drive=`expr $minor / 5`
92	par=`expr $minor % 5 - 1`
93	des="controller $ctrlr disk $drive partition $par"
94	dev=c${ctrlr}d${drive}p${par}
95	;;
96    [38],12[89]|[38],1[3-9]?|[38],2??|1[02],12[89]|1[02],1[3-9]?|1[02],2??)
97	drive=`expr \\( $minor - 128 \\) / 16`
98	par=`expr \\( \\( $minor - 128 \\) / 4 \\) % 4`
99	sub=`expr \\( $minor - 128 \\) % 4`
100	des="hard disk $drive, partition $par, subpartition $sub"
101	des="controller $ctrlr disk $drive partition $par slice $sub"
102	#par=`expr $drive '*' 5 + $par`
103	dev=c${ctrlr}d${drive}p${par}s${sub}
104	;;
105    [38],6[4-9]|[38],7?|1[02],6[4-9]|1[02],7?)
106	tape=`expr \\( $minor - 64 \\) / 2`
107	case $minor in
108	*[02468])
109	    des="controller $ctrlr tape $tape (non-rewinding)"
110	    dev=c${ctrlr}t${tape}n
111	    ;;
112	*[13579])
113	    des="controller $ctrlr tape $tape (rewinding)"
114	    dev=c${ctrlr}t${tape}
115	esac
116	;;
117    4,0)	des="console device" dev=console
118	;;
119    4,[1-7])des="virtual console $minor" dev=ttyc$minor
120	;;
121    4,15)	des="diagnostics device" dev=log
122	;;
123    4,1[6-9])
124	line=`expr $minor - 16`
125	des="serial line $line" dev=tty0$line
126	;;
127    4,125)	des="video output" dev=video
128	;;
129    5,0)	des="anonymous tty" dev=tty
130	;;
131    6,0)	des="line printer, parallel port" dev=lp
132	;;
133    7,*)
134	d=`expr $minor % 8`
135	n=`expr $minor / 8`
136	case $d in
137	0)  des="IP stat" dev=ipstat
138	    ;;
139	1)  case $name in
140	    psip*)
141		des="Pseudo IP #$n" dev=psip
142		;;
143	    *)  des="raw ethernet #$n" dev=eth
144	    esac
145	    ;;
146	2)  des="raw IP #$n" dev=ip
147	    ;;
148	3)  des="TCP/IP #$n" dev=tcp
149	    ;;
150	4)  des="UDP #$n" dev=udp
151	esac
152	case $d in
153	[0123])
154	    if [ "$name" = "$dev" ]
155	    then
156		des="$des (default)"
157	    else
158		dev=$dev$n
159	    fi
160	esac
161	;;
162    9,0)
163	des="unix98 pseudoterminal master" dev=ptmx
164	;;
165    9,12[89]|9,1[3-8]?|9,19[01])
166	p=`expr \\( $minor - 128 \\) / 16 | tr '0123' 'pqrs'`
167	n=`expr $minor % 16`
168	test $n -ge 10 && n=`expr $n - 10 | tr '012345' 'abcdef'`
169	des="pseudo tty `expr $minor - 128`" dev=tty$p$n
170	;;
171    9,???)
172	p=`expr \\( $minor - 192 \\) / 16 | tr '0123' 'pqrs'`
173	n=`expr $minor % 16`
174	test $n -ge 10 && n=`expr $n - 10 | tr '012345' 'abcdef'`
175	des="controller of tty$p$n" dev=pty$p$n
176	;;
177    11,0)
178	des="block filter" dev=filter
179	;;
180    13,0)
181	des="audio" dev=audio
182	;;
183    14,0)
184	des="faulty block device driver" dev=fbd
185	;;
186    15,0)
187	des="kernel log" dev=klog
188	;;
189    16,0)
190	des="pseudo random number generator" dev=urandom
191	;;
192    17,0)
193	des="hello" dev=hello
194	;;
195    5[6-9],0|6[0-3],0)
196	drive=`expr $major - 56`
197	des="vnode disk $drive" dev=vnd$drive
198	;;
199    5[6-9],[1-4]|6[0-3],[1-4])
200	drive=`expr $major - 56`
201	par=`expr $minor - 1`
202	des="vnode disk $drive partition $par" dev=vnd${drive}p${par}
203	;;
204    5[6-9],12[89]|5[6-9],13[0-9]|5[6-9],14[0-3]|6[0-3],12[89]|5[6-9],13[0-9]|5[6-9],14[0-3])
205	drive=`expr $major - 56`
206	par=`expr \\( \\( $minor - 128 \\) / 4 \\) % 4`
207	sub=`expr \\( $minor - 128 \\) % 4`
208	des="vnode disk $drive partition $par slice $sub"
209	dev=vnd${drive}p${par}s${sub}
210	;;
211    64,0)
212	des="keyboard input multiplexer"
213	dev=kbdmux
214	;;
215    64,[1-4])
216	n=`expr $minor - 1`
217	des="keyboard input $n"
218	dev=kbd$n
219	;;
220    64,64)
221	des="mouse input multiplexer"
222	dev=mousemux
223	;;
224    64,6[5-8])
225	n=`expr $minor - 65`
226	des="mouse input $n"
227	dev=mouse$n
228	;;
229    BAD,BAD)
230	des= dev=
231	;;
232    *)	dev=BAD
233    esac
234
235    case $name:$dev in
236    *:)
237	echo "$path: not a device" >&2
238	ex=1
239	;;
240    *:*BAD*)
241	echo "$path: cannot describe: major=$major, minor=$minor" >&2
242	ex=1
243	;;
244    $dev:*)
245	echo "$path: $des"
246	;;
247    *:*)	echo "$path: nonstandard name for $dev: $des"
248    esac
249done
250
251exit $ex
252}
253