Note that -p isn't implemented yet.
[unix-history] / usr / src / usr.bin / systat / disks.c
CommitLineData
4da6460c 1#ifndef lint
855ff304 2static char sccsid[] = "@(#)disks.c 1.2 (Lucasfilm) %G%";
4da6460c
KM
3#endif
4
5#include "systat.h"
855ff304 6#include <sys/param.h>
4da6460c 7#include <sys/buf.h>
855ff304 8#include <sys/file.h>
4da6460c
KM
9#ifdef vax
10#include <vaxuba/ubavar.h>
11#include <vaxmba/mbavar.h>
12#endif
13#ifdef sun
14#include <sundev/mbvar.h>
15#endif
855ff304 16#include <ctype.h>
4da6460c
KM
17
18char dr_name[DK_NDRIVE][10];
19
20#define steal(where, var) \
21 lseek(kmem, where, L_SET); read(kmem, &var, sizeof var);
22
23#ifdef vax
24read_names(mp, up)
25 register struct mba_device *mp;
26 register struct uba_device *up;
27{
28 static int once = 0;
29 struct mba_device mdev;
30 struct mba_driver mdrv;
31 short two_char;
32 char *cp = (char *)&two_char;
33 struct uba_device udev;
34 struct uba_driver udrv;
35
36 if (once)
37 return;
38 once++;
39 if (up == 0) {
40 error("Disk init info not in namelist\n");
41 return;
42 }
43 if (mp) for (;;) {
44 steal(mp++, mdev);
45 if (mdev.mi_driver == 0)
46 break;
47 if (mdev.mi_dk < 0 || mdev.mi_alive == 0)
48 continue;
49 steal(mdev.mi_driver, mdrv);
50 steal(mdrv.md_dname, two_char);
51 sprintf(dr_name[mdev.mi_dk], "%c%c%d",
52 cp[0], cp[1], mdev.mi_unit);
53 }
54 if (up) for (;;) {
55 steal(up++, udev);
56 if (udev.ui_driver == 0)
57 break;
58 if (udev.ui_dk < 0 || udev.ui_alive == 0)
59 continue;
60 steal(udev.ui_driver, udrv);
61 steal(udrv.ud_dname, two_char);
62 sprintf(dr_name[udev.ui_dk], "%c%c%d",
63 cp[0], cp[1], udev.ui_unit);
64 }
65}
66#endif
67
68#ifdef sun
69/*VARARGS*/
70read_names(mp)
71 register struct mb_device *mp;
72{
73 static int once = 0;
74 struct mb_device mdev;
75 struct mb_driver mdrv;
76 short two_char;
77 char *cp = (char *) &two_char;
78
79 if (once)
80 return;
81 once++;
82 if (mp == 0) {
83 error("Disk init info not in namelist\n");
84 return;
85 }
86 for (;;) {
87 steal(mp++, mdev);
88 if (mdev.md_driver == 0)
89 break;
90 if (mdev.md_dk < 0 || mdev.md_alive == 0)
91 continue;
92 steal(mdev.md_driver, mdrv);
93 steal(mdrv.mdr_dname, two_char);
94 sprintf(dr_name[mdev.md_dk], "%c%c%d",
95 cp[0], cp[1], mdev.md_unit);
96 }
97}
98#endif
99
100dkselect(args, truefalse, selections)
101 char *args;
102 int truefalse, selections[];
103{
104 register char *cp;
105 register int i;
106 char *index();
107
108 cp = index(args, '\n');
109 if (cp)
110 *cp = '\0';
111 for (;;) {
112 for (cp = args; *cp && isspace(*cp); cp++)
113 ;
114 args = cp;
115 for (; *cp && !isspace(*cp); cp++)
116 ;
117 if (*cp)
118 *cp++ = '\0';
119 if (cp - args == 0)
120 break;
121 for (i = 0; i < DK_NDRIVE; i++)
122 if (strcmp(args, dr_name[i]) == 0) {
123 selections[i] = truefalse;
124 if (dk_mspw[i] != 0.0)
125 if (truefalse == 0)
126 ndrives--;
127 else
128 ndrives++;
129 break;
130 }
131 if (i >= DK_NDRIVE)
132 error("%s: unknown drive", args);
133 args = cp;
134 }
135}