* Copyright (c) 1980, 1992, 1993
* The Regents of the University of California. All rights reserved.
* %sccs.include.redist.c%
static char sccsid
[] = "@(#)disks.c 8.1 (Berkeley) %G%";
static void dkselect
__P((char *, int, int []));
static int read_names
__P((void));
static struct nlist namelist
[] = {
#define X_MBDINIT (X_DK_WPMS+1)
#define X_UBDINIT (X_DK_WPMS+2)
#define X_MBDINIT (X_DK_WPMS+1)
#define X_VBDINIT (X_DK_WPMS+1)
#if defined(hp300) || defined(luna68k)
#define X_HPDINIT (X_DK_WPMS+1)
#define X_SCSI_DINIT (X_DK_WPMS+1)
int dk_ndrive
, *dk_select
;
#include "names.c" /* XXX */
if (kvm_nlist(kd
, namelist
)) {
if (namelist
[X_DK_NDRIVE
].n_value
== 0) {
error("dk_ndrive undefined in kernel");
NREAD(X_DK_NDRIVE
, &dk_ndrive
, LONG
);
error("dk_ndrive=%d according to %s", dk_ndrive
, _PATH_UNIX
);
dk_mspw
= (float *)calloc(dk_ndrive
, sizeof (float));
long *wpms
= (long *)calloc(dk_ndrive
, sizeof(long));
KREAD(NPTR(X_DK_WPMS
), wpms
, dk_ndrive
* sizeof (long));
for (i
= 0; i
< dk_ndrive
; i
++)
*(dk_mspw
+ i
) = (*(wpms
+ i
) == 0)? 0.0:
(float) 1.0 / *(wpms
+ i
);
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
]);
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
);