add opendir alias
[minix.git] / commands / DESCRIBE / DESCRIBE.sh
blob63560ae368e30a665f5af944bdc3ddc5b37460b6
1 #!/bin/sh
3 # DESCRIBE 2.2 - Describe the given devices. Author: Kees J. Bot
5 # BUGS
6 # - Arguments may not contain shell metacharacters.
8 case $# in
9 0) flag=; set -$- /dev ;;
10 *) flag=d ;;
11 esac
13 ls -l$flag $* | \
14 sed -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 | {
19 ex=0 # exit code
21 while read major minor path
23 case $path in
24 /*) name=`expr $path : '.*/\\(.*\\)$'`
26 *) name=$path
27 esac
28 dev= des=
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
37 case $major,$minor in
38 1,0) des="RAM disk" dev=ram
40 1,1) des="memory" dev=mem
42 1,2) des="kernel memory" dev=kmem
44 1,3) des="null device, data sink" dev=null
46 1,4) des="boot device loaded from boot image" dev=boot
48 1,5) des="null byte stream generator" dev=zero
50 1,6) des="boot image RAM disk" dev=imgrd
52 1,[789]|1,1[012])
53 ramdisk=`expr $minor - 7`
54 des="RAM disk $ramdisk" dev=ram$ramdisk
56 2,*) drive=`expr $minor % 4`
57 case `expr $minor - $drive` in
58 0) des='auto density' dev="fd$drive"
60 4) des='360k, 5.25"' dev="pc$drive"
62 8) des='1.2M, 5.25"' dev="at$drive"
64 12) des='360k in 720k, 5.25"' dev="qd$drive"
66 16) des='720k, 3.5"' dev="ps$drive"
68 20) des='360k in 1.2M, 5.25"' dev="pat$drive"
70 24) des='720k in 1.2M, 5.25"' dev="qh$drive"
72 28) des='1.44M, 3.5"' dev="PS$drive"
74 112) des='auto partition 0' dev="fd${drive}p0"
76 116) des='auto partition 1' dev="fd${drive}p1"
78 120) des='auto partition 2' dev="fd${drive}p2"
80 124) des='auto partition 3' dev="fd${drive}p3"
82 *) dev=BAD
83 esac
84 des="floppy drive $drive ($des)"
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}
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}
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}
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
112 *[13579])
113 des="controller $ctrlr tape $tape (rewinding)"
114 dev=c${ctrlr}t${tape}
115 esac
117 4,0) des="console device" dev=console
119 4,[1-7])des="virtual console $minor" dev=ttyc$minor
121 4,15) des="diagnostics device" dev=log
123 4,1[6-9])
124 line=`expr $minor - 16`
125 des="serial line $line" dev=tty0$line
127 4,125) des="video output" dev=video
129 4,126) des="auxiliary input" dev=kbdaux
131 4,127) des="keyboard input" dev=kbd
133 4,12[89]|4,1[3-8]?|4,19[01])
134 p=`expr \\( $minor - 128 \\) / 16 | tr '0123' 'pqrs'`
135 n=`expr $minor % 16`
136 test $n -ge 10 && n=`expr $n - 10 | tr '012345' 'abcdef'`
137 des="pseudo tty `expr $minor - 128`" dev=tty$p$n
139 4,???)
140 p=`expr \\( $minor - 192 \\) / 16 | tr '0123' 'pqrs'`
141 n=`expr $minor % 16`
142 test $n -ge 10 && n=`expr $n - 10 | tr '012345' 'abcdef'`
143 des="controller of tty$p$n" dev=pty$p$n
145 5,0) des="anonymous tty" dev=tty
147 6,0) des="line printer, parallel port" dev=lp
149 7,*)
150 d=`expr $minor % 8`
151 n=`expr $minor / 8`
152 case $d in
153 0) des="IP stat" dev=ipstat
155 1) case $name in
156 psip*)
157 des="Pseudo IP #$n" dev=psip
159 *) des="raw ethernet #$n" dev=eth
160 esac
162 2) des="raw IP #$n" dev=ip
164 3) des="TCP/IP #$n" dev=tcp
166 4) des="UDP #$n" dev=udp
167 esac
168 case $d in
169 [0123])
170 if [ "$name" = "$dev" ]
171 then
172 des="$des (default)"
173 else
174 dev=$dev$n
176 esac
178 11,0)
179 des="block filter" dev=filter
181 13,0)
182 des="audio" dev=audio
184 14,0)
185 des="faulty block device driver" dev=fbd
187 15,0)
188 des="kernel log" dev=klog
190 16,0)
191 des="pseudo random number generator" dev=urandom
193 17,0)
194 des="hello" dev=hello
196 18,0)
197 des="UNIX domain socket" dev=uds
199 BAD,BAD)
200 des= dev=
202 *) dev=BAD
203 esac
205 case $name:$dev in
207 echo "$path: not a device" >&2
208 ex=1
210 *:*BAD*)
211 echo "$path: cannot describe: major=$major, minor=$minor" >&2
212 ex=1
214 $dev:*)
215 echo "$path: $des"
217 *:*) echo "$path: nonstandard name for $dev: $des"
218 esac
219 done
221 exit $ex