static char sccsid
[] = "@(#)disks.c 1.3 (Berkeley) %G%";
static struct nlist nlst
[] = {
if (nlst
[X_DK_NDRIVE
].n_value
== 0) {
error("dk_ndrive undefined in kernel");
dk_ndrive
= getw(nlst
[X_DK_NDRIVE
].n_value
);
error("dk_ndrive=%d according to /vmunix", dk_ndrive
);
dk_mspw
= (float *)calloc(dk_ndrive
, sizeof (float));
lseek(kmem
, nlst
[X_DK_MSPW
].n_value
, L_SET
);
read(kmem
, dk_mspw
, dk_ndrive
* sizeof (float));
dr_name
= (char **)calloc(dk_ndrive
, sizeof (char *));
dk_select
= (int *)calloc(dk_ndrive
, sizeof (int));
for (cp
= buf
, i
= 0; i
< dk_ndrive
; i
++) {
sprintf(dr_name
[i
], "dk%d", i
);
cp
+= strlen(dr_name
[i
]) + 1;
if (prefix(cmd
, "display") || prefix(cmd
, "add")) {
dkselect(args
, 1, dk_select
);
if (prefix(cmd
, "ignore") || prefix(cmd
, "delete")) {
dkselect(args
, 0, dk_select
);
if (prefix(cmd
, "drives")) {
move(CMDLINE
, 0); clrtoeol();
for (i
= 0; i
< dk_ndrive
; i
++)
printw("%s ", dr_name
[i
]);
#define steal(where, var) \
lseek(kmem, where, L_SET); read(kmem, &var, sizeof var);
#include <vaxuba/ubavar.h>
#include <vaxmba/mbavar.h>
char *cp
= (char *)&two_char
;
register struct mba_device
*mp
;
register struct uba_device
*up
;
mp
= (struct mba_device
*)nlst
[X_MBDINIT
].n_value
;
up
= (struct uba_device
*)nlst
[X_UBDINIT
].n_value
;
if (mp
== 0 && up
== 0) {
error("Disk init info not in namelist\n");
if (mdev
.mi_dk
< 0 || mdev
.mi_alive
== 0)
steal(mdev
.mi_driver
, mdrv
);
steal(mdrv
.md_dname
, two_char
);
sprintf(dr_name
[mdev
.mi_dk
], "%c%c%d",
cp
[0], cp
[1], mdev
.mi_unit
);
if (udev
.ui_dk
< 0 || udev
.ui_alive
== 0)
steal(udev
.ui_driver
, udrv
);
steal(udrv
.ud_dname
, two_char
);
sprintf(dr_name
[udev
.ui_dk
], "%c%c%d",
cp
[0], cp
[1], udev
.ui_unit
);
#include <sundev/mbvar.h>
char *cp
= (char *) &two_char
;
register struct mb_device
*mp
;
mp
= (struct mb_device
*)nlst
[X_MBDINIT
].n_value
;
error("Disk init info not in namelist\n");
if (mdev
.md_dk
< 0 || mdev
.md_alive
== 0)
steal(mdev
.md_driver
, mdrv
);
steal(mdrv
.mdr_dname
, two_char
);
sprintf(dr_name
[mdev
.md_dk
], "%c%c%d",
cp
[0], cp
[1], mdev
.md_unit
);
dkselect(args
, truefalse
, selections
)
int truefalse
, selections
[];
for (cp
= args
; *cp
&& isspace(*cp
); cp
++)
for (; *cp
&& !isspace(*cp
); cp
++)
for (i
= 0; i
< dk_ndrive
; i
++)
if (strcmp(args
, dr_name
[i
]) == 0) {
selections
[i
] = truefalse
;
error("%s: drive not configured",
error("%s: unknown drive", args
);