mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-02 08:42:48 +00:00
Another sample devconf application. This one's a menu of devices; read the
man page.
This commit is contained in:
parent
7ed12e2a4a
commit
f34bdd9a32
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=7810
9
usr.bin/devmenu/Makefile
Normal file
9
usr.bin/devmenu/Makefile
Normal file
@ -0,0 +1,9 @@
|
||||
# $Id$
|
||||
|
||||
PROG= devmenu
|
||||
SRCS= devmenu.c devfilter.c ifmenu.c
|
||||
MAN1= devmenu.1
|
||||
LDADD+= -ldialog -lncurses
|
||||
CFLAGS+= -I/sys
|
||||
|
||||
.include <bsd.prog.mk>
|
195
usr.bin/devmenu/devfilter.c
Normal file
195
usr.bin/devmenu/devfilter.c
Normal file
@ -0,0 +1,195 @@
|
||||
/*
|
||||
* Copyright 1995 Massachusetts Institute of Technology
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software and
|
||||
* its documentation for any purpose and without fee is hereby
|
||||
* granted, provided that both the above copyright notice and this
|
||||
* permission notice appear in all copies, that both the above
|
||||
* copyright notice and this permission notice appear in all
|
||||
* supporting documentation, and that the name of M.I.T. not be used
|
||||
* in advertising or publicity pertaining to distribution of the
|
||||
* software without specific, written prior permission. M.I.T. makes
|
||||
* no representations about the suitability of this software for any
|
||||
* purpose. It is provided "as is" without express or implied
|
||||
* warranty.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY M.I.T. ``AS IS''. M.I.T. DISCLAIMS
|
||||
* ALL EXPRESS OR IMPLIED WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT
|
||||
* SHALL M.I.T. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
#include <sys/devconf.h>
|
||||
#include <sys/proc.h>
|
||||
#include <vm/vm.h>
|
||||
#include <sys/sysctl.h>
|
||||
#include <err.h>
|
||||
#include <sysexits.h>
|
||||
|
||||
#include "devmenu.h"
|
||||
|
||||
char *
|
||||
devmenu_toname(const struct devconf *dev)
|
||||
{
|
||||
static char buf[2*MAXDEVNAME];
|
||||
snprintf(buf, sizeof buf, "%s%d", dev->dc_name, dev->dc_unit);
|
||||
return buf;
|
||||
}
|
||||
|
||||
int
|
||||
devmenu_filter(const struct devconf *dev, char **userlist)
|
||||
{
|
||||
int i;
|
||||
char *name;
|
||||
|
||||
if (!userlist)
|
||||
return 1;
|
||||
|
||||
name = devmenu_toname(dev);
|
||||
|
||||
for (i = 0; userlist[i]; i++) {
|
||||
if (strcmp(name, userlist[i]) == 0) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct devconf **
|
||||
devmenu_alldevs(void)
|
||||
{
|
||||
int mib[3];
|
||||
size_t size;
|
||||
int ndevs, i, ndx;
|
||||
struct devconf **rv;
|
||||
|
||||
size = sizeof ndevs;
|
||||
mib[0] = CTL_HW;
|
||||
mib[1] = HW_DEVCONF;
|
||||
mib[2] = DEVCONF_NUMBER;
|
||||
|
||||
if (sysctl(mib, 3, &ndevs, &size, 0, 0) < 0) {
|
||||
err(EX_OSERR, "sysctl failed reading hw.devconf.number");
|
||||
}
|
||||
|
||||
rv = malloc((ndevs + 1) * sizeof *rv);
|
||||
if (!rv) {
|
||||
err(EX_UNAVAILABLE, "malloc(%lu)",
|
||||
(unsigned long)(ndevs * sizeof *rv));
|
||||
}
|
||||
|
||||
for (ndx = 0, i = 1; i <= ndevs; i++) {
|
||||
mib[2] = i;
|
||||
if (sysctl(mib, 3, 0, &size, 0, 0) < 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
rv[ndx] = malloc(size);
|
||||
if (!rv[ndx]) {
|
||||
err(EX_UNAVAILABLE, "malloc(%lu)",
|
||||
(unsigned long)size);
|
||||
}
|
||||
|
||||
if (sysctl(mib, 3, rv[ndx], &size, 0, 0) < 0) {
|
||||
err(EX_OSERR, "sysctl reading hw.devconf.%d", i);
|
||||
}
|
||||
|
||||
ndx++;
|
||||
}
|
||||
|
||||
rv[ndx] = 0;
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
void
|
||||
devmenu_freedevs(struct devconf ***devpp)
|
||||
{
|
||||
struct devconf **devp = *devpp;
|
||||
int i;
|
||||
|
||||
for (i = 0; devp[i]; i++) {
|
||||
free(devp[i]);
|
||||
}
|
||||
|
||||
free(devp);
|
||||
*devpp = 0;
|
||||
}
|
||||
|
||||
const char *
|
||||
devmenu_common(const char *title, const char *hfile, char **devnames,
|
||||
const char *prompt, const char *none, enum dc_class class)
|
||||
{
|
||||
struct devconf **devs;
|
||||
int s;
|
||||
unsigned char **items = 0;
|
||||
int nitems = 0;
|
||||
int itemindex = 0;
|
||||
char *name;
|
||||
int i;
|
||||
static char resbuf[2*MAXDEVNAME];
|
||||
|
||||
if (hfile) {
|
||||
use_helpfile((char *)hfile);
|
||||
}
|
||||
devs = devmenu_alldevs();
|
||||
|
||||
for (i = 0; devs[i]; i++) {
|
||||
if (class && !(devs[i]->dc_class & class))
|
||||
continue;
|
||||
if (devmenu_filter(devs[i], devnames)) {
|
||||
++nitems;
|
||||
items = realloc(items, 2 * nitems * sizeof *items);
|
||||
if (!items) {
|
||||
err(EX_UNAVAILABLE, "malloc(%lu)",
|
||||
(unsigned long)(2 * nitems * sizeof *items));
|
||||
}
|
||||
|
||||
name = devmenu_toname(devs[i]);
|
||||
|
||||
items[itemindex] = strdup(name);
|
||||
if (!items[itemindex]) {
|
||||
err(EX_UNAVAILABLE, "strdup-malloc(%lu)",
|
||||
(unsigned long)(strlen(name) + 1));
|
||||
}
|
||||
|
||||
items[itemindex + 1] = devs[i]->dc_descr;
|
||||
itemindex += 2;
|
||||
}
|
||||
}
|
||||
|
||||
if (!nitems) {
|
||||
dialog_msgbox((char *)title, none, -1, -1, 1);
|
||||
return "none";
|
||||
}
|
||||
|
||||
name = resbuf;
|
||||
|
||||
if(dialog_menu((char *)title, prompt, 24, 78, nitems, nitems, items,
|
||||
resbuf, 0, 0) != 0) {
|
||||
name = "none";
|
||||
}
|
||||
|
||||
for (i = 0; i < 2 * nitems; i += 2) {
|
||||
free(items[i]);
|
||||
}
|
||||
|
||||
free(items);
|
||||
|
||||
devmenu_freedevs(&devs);
|
||||
return name;
|
||||
}
|
124
usr.bin/devmenu/devmenu.1
Normal file
124
usr.bin/devmenu/devmenu.1
Normal file
@ -0,0 +1,124 @@
|
||||
.\"
|
||||
.\" Copyright 1995 Massachusetts Institute of Technology
|
||||
.\"
|
||||
.\" Permission to use, copy, modify, and distribute this software and
|
||||
.\" its documentation for any purpose and without fee is hereby
|
||||
.\" granted, provided that both the above copyright notice and this
|
||||
.\" permission notice appear in all copies, that both the above
|
||||
.\" copyright notice and this permission notice appear in all
|
||||
.\" supporting documentation, and that the name of M.I.T. not be used
|
||||
.\" in advertising or publicity pertaining to distribution of the
|
||||
.\" software without specific, written prior permission. M.I.T. makes
|
||||
.\" no representations about the suitability of this software for any
|
||||
.\" purpose. It is provided "as is" without express or implied
|
||||
.\" warranty.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY M.I.T. ``AS IS''. M.I.T. DISCLAIMS
|
||||
.\" ALL EXPRESS OR IMPLIED WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
.\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT
|
||||
.\" SHALL M.I.T. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" $Id$
|
||||
.Dd April 13, 1995
|
||||
.Dt DEVMENU 1
|
||||
.Os FreeBSD 2.1
|
||||
.Sh NAME
|
||||
.Nm devmenu
|
||||
.Nd present a menu of available devices
|
||||
.Sh SYNOPSIS
|
||||
.Nm lsdev
|
||||
.Op Fl c Ar class
|
||||
.Op Fl f Ar outfile
|
||||
.Op Fl h Ar helpfile
|
||||
.Op Fl t Ar title
|
||||
.Op Fl nid
|
||||
.Op Ar name ...
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm
|
||||
program uses the
|
||||
.Xr dialog 3
|
||||
library to present a menu of available devices meeting some set of
|
||||
criteria. The list of devices is obtained using the
|
||||
.Xr sysctl 3
|
||||
device configuration database
|
||||
.Pq Dq devconf ,
|
||||
and intersected with the list of
|
||||
.Ar name s
|
||||
if one was specified on the command line. The following command-line
|
||||
flags are supported:
|
||||
.Bl -tag -width mhmhelpfile
|
||||
.It Fl c Ar class
|
||||
specifies a class of devices to further restrict the available
|
||||
choices. Multiple
|
||||
.Fl c
|
||||
options can be specified, in which case the union of the specified
|
||||
classes is used. The following classes are currently supported:
|
||||
.Bl -tag -width parallel
|
||||
.It Li cpu
|
||||
a processor
|
||||
.It Li bus
|
||||
a system bus, or a peripheral bus
|
||||
.It Li disk
|
||||
a read-write disk drive
|
||||
.It Li rodisk
|
||||
a read-only disk drive (e.g., CD-ROM)
|
||||
.It Li display
|
||||
a display device (usually there is only one)
|
||||
.It Li serial
|
||||
a serial port or multiport controller
|
||||
.It Li parallel
|
||||
a parallel printer port
|
||||
.It Li netif
|
||||
a network interface
|
||||
.It Li misc
|
||||
everything else
|
||||
.El
|
||||
.Pp
|
||||
.It Fl f Ar outfile
|
||||
specifies the name a file where the name of the selected device is
|
||||
written. If no file is specified, the name is written on the standard
|
||||
output.
|
||||
.It Fl h Ar helpfile
|
||||
can be used to specify the name of a file to be displayed when the
|
||||
user presses the `?' key.
|
||||
.It Fl t Ar title
|
||||
specifies the title of the window passed to the
|
||||
.Xr dialog 3
|
||||
library when creating the menu.
|
||||
.El
|
||||
.Pp
|
||||
In addition, there are three flags to request special menus with
|
||||
unique prompt text and possibly pseudo-devices (but this is not yet
|
||||
implemented). These are:
|
||||
.Bl -tag -width xxx
|
||||
.It Fl n
|
||||
requests a menu of network interfaces
|
||||
.It Fl i
|
||||
requests a menu of possible installation media (i.e., disks, CD-ROMs,
|
||||
and tapes)
|
||||
.It Fl d
|
||||
requests a menu of disks
|
||||
.El
|
||||
.Sh SEE ALSO
|
||||
.Xr sysctl 3 ,
|
||||
.Xr lsdev 8
|
||||
.Sh AUTHOR
|
||||
The
|
||||
.Nm
|
||||
program was written by Garrett A. Wollman at the MIT Laboratory for
|
||||
Computer Science.
|
||||
.Sh HISTORY
|
||||
A
|
||||
.Nm
|
||||
command first appeared in
|
||||
.Tn FreeBSD
|
||||
2.1.
|
206
usr.bin/devmenu/devmenu.c
Normal file
206
usr.bin/devmenu/devmenu.c
Normal file
@ -0,0 +1,206 @@
|
||||
/*
|
||||
* Copyright 1995 Massachusetts Institute of Technology
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software and
|
||||
* its documentation for any purpose and without fee is hereby
|
||||
* granted, provided that both the above copyright notice and this
|
||||
* permission notice appear in all copies, that both the above
|
||||
* copyright notice and this permission notice appear in all
|
||||
* supporting documentation, and that the name of M.I.T. not be used
|
||||
* in advertising or publicity pertaining to distribution of the
|
||||
* software without specific, written prior permission. M.I.T. makes
|
||||
* no representations about the suitability of this software for any
|
||||
* purpose. It is provided "as is" without express or implied
|
||||
* warranty.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY M.I.T. ``AS IS''. M.I.T. DISCLAIMS
|
||||
* ALL EXPRESS OR IMPLIED WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT
|
||||
* SHALL M.I.T. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* devmenu - present a menu of installed devices of a specified
|
||||
* class or classes
|
||||
*
|
||||
* Garrett A. Wollman, April 1995
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <sys/devconf.h>
|
||||
#include <sysexits.h>
|
||||
#include <err.h>
|
||||
#include <dialog.h>
|
||||
|
||||
#include "devmenu.h"
|
||||
|
||||
static enum dc_class interpret_class(char *str);
|
||||
static void dm_err_exit(int);
|
||||
static int err_writefn(void *cookie, const char *val, int nchars);
|
||||
static void usage(const char *);
|
||||
|
||||
static FILE *errfp;
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
enum dc_class class = 0;
|
||||
enum mode { GENERIC, NETIF, INSTALL, DISK } mode = GENERIC;
|
||||
const char *title = 0, *hfile = 0;
|
||||
char **devnames = 0;
|
||||
int c;
|
||||
const char *fn = 0;
|
||||
const char *sel = "none";
|
||||
|
||||
while ((c = getopt(argc, argv, "c:t:h:nidf:")) != EOF) {
|
||||
switch(c) {
|
||||
case 'c':
|
||||
class |= interpret_class(optarg);
|
||||
break;
|
||||
case 't':
|
||||
title = optarg;
|
||||
break;
|
||||
case 'h':
|
||||
hfile = optarg;
|
||||
break;
|
||||
case 'n':
|
||||
mode = NETIF;
|
||||
break;
|
||||
case 'i':
|
||||
mode = INSTALL;
|
||||
break;
|
||||
case 'd':
|
||||
mode = DISK;
|
||||
break;
|
||||
case 'f':
|
||||
fn = optarg;
|
||||
break;
|
||||
case '?':
|
||||
default:
|
||||
usage(argv[0]);
|
||||
return EX_USAGE;
|
||||
}
|
||||
}
|
||||
|
||||
if (optind < argc) {
|
||||
devnames = &argv[optind];
|
||||
}
|
||||
|
||||
errfp = fwopen(0, err_writefn);
|
||||
if (!errfp) {
|
||||
err(EX_UNAVAILABLE, "fwopen");
|
||||
}
|
||||
|
||||
setvbuf(errfp, (char *)0, _IOLBF, (size_t)0);
|
||||
|
||||
init_dialog();
|
||||
err_set_exit(dm_err_exit);
|
||||
err_set_file(errfp);
|
||||
|
||||
switch(mode) {
|
||||
case NETIF:
|
||||
sel = devmenu_netif(title, hfile, devnames);
|
||||
break;
|
||||
case INSTALL:
|
||||
sel = devmenu_common(title, hfile, devnames,
|
||||
"Select an installation device",
|
||||
"No installation devices found",
|
||||
DC_CLS_DISK | DC_CLS_RDISK | DC_CLS_TAPE);
|
||||
break;
|
||||
case DISK:
|
||||
sel = devmenu_common(title, hfile, devnames,
|
||||
"Select a disk",
|
||||
"No disks found",
|
||||
DC_CLS_DISK);
|
||||
break;
|
||||
case GENERIC:
|
||||
sel = devmenu_common(title, hfile, devnames,
|
||||
"Select a device",
|
||||
"No devices found",
|
||||
class);
|
||||
break;
|
||||
}
|
||||
err_set_file(0);
|
||||
fclose(errfp);
|
||||
end_dialog();
|
||||
err_set_exit(0);
|
||||
if (fn) {
|
||||
errfp = fopen(fn, "w");
|
||||
if (!errfp) {
|
||||
err(EX_OSERR, "fopen(%s)", fn);
|
||||
}
|
||||
fprintf(errfp, "%s\n", sel);
|
||||
fclose(errfp);
|
||||
} else {
|
||||
printf("%s\n", sel);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const char *classes[] = DC_CLASSNAMES;
|
||||
#define NCLASSES ((sizeof classes)/(sizeof classes[0]))
|
||||
|
||||
static enum dc_class
|
||||
interpret_class(char *str)
|
||||
{
|
||||
int i;
|
||||
enum dc_class rv;
|
||||
|
||||
for(i = 1; i < NCLASSES; i++) {
|
||||
if(! strcmp(classes[i], str)) {
|
||||
rv = (1 << (i - 1));
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i == NCLASSES) {
|
||||
err(EX_USAGE, "unknown class `%s'", str);
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
static void
|
||||
dm_err_exit(int rval)
|
||||
{
|
||||
fflush(errfp);
|
||||
fclose(errfp);
|
||||
end_dialog();
|
||||
exit(rval);
|
||||
}
|
||||
|
||||
static int
|
||||
err_writefn(void *cookie, const char *val, int nchars)
|
||||
{
|
||||
char buf[nchars + 1];
|
||||
|
||||
strncpy(buf, val, nchars);
|
||||
buf[nchars] = '\0';
|
||||
|
||||
dialog_msgbox("Error", buf, -1, -1, 1);
|
||||
return nchars;
|
||||
}
|
||||
|
||||
static void
|
||||
usage(const char *argv0)
|
||||
{
|
||||
fprintf(stderr, "%s: usage:\n%s foo\n", argv0, argv0);
|
||||
}
|
54
usr.bin/devmenu/devmenu.h
Normal file
54
usr.bin/devmenu/devmenu.h
Normal file
@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright 1995 Massachusetts Institute of Technology
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software and
|
||||
* its documentation for any purpose and without fee is hereby
|
||||
* granted, provided that both the above copyright notice and this
|
||||
* permission notice appear in all copies, that both the above
|
||||
* copyright notice and this permission notice appear in all
|
||||
* supporting documentation, and that the name of M.I.T. not be used
|
||||
* in advertising or publicity pertaining to distribution of the
|
||||
* software without specific, written prior permission. M.I.T. makes
|
||||
* no representations about the suitability of this software for any
|
||||
* purpose. It is provided "as is" without express or implied
|
||||
* warranty.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY M.I.T. ``AS IS''. M.I.T. DISCLAIMS
|
||||
* ALL EXPRESS OR IMPLIED WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT
|
||||
* SHALL M.I.T. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/* NB: must include sys/devconf.h before this file */
|
||||
|
||||
/* Args are: title, help file, device name list */
|
||||
extern const char *devmenu_netif(const char *, const char *, char **);
|
||||
|
||||
/* Args are: title, help file, class mask, name list */
|
||||
extern const char *devmenu(const char *, const char *, enum dc_class, char **);
|
||||
|
||||
extern char *devmenu_toname(const struct devconf *);
|
||||
|
||||
/* Args are: device, user's list of devices */
|
||||
extern int devmenu_filter(const struct devconf *, char **);
|
||||
|
||||
/* Returns an array of pointers to all the devconf devices in the system */
|
||||
extern struct devconf **devmenu_alldevs(void);
|
||||
|
||||
/* Frees the array allocated above */
|
||||
extern void devmenu_freedevs(struct devconf ***);
|
||||
|
||||
/* Args are: title, help file, name list, prompt, no-devices message, class */
|
||||
extern const char *devmenu_common(const char *, const char *, char **,
|
||||
const char *, const char *, enum dc_class);
|
||||
|
51
usr.bin/devmenu/ifmenu.c
Normal file
51
usr.bin/devmenu/ifmenu.c
Normal file
@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Copyright 1995 Massachusetts Institute of Technology
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software and
|
||||
* its documentation for any purpose and without fee is hereby
|
||||
* granted, provided that both the above copyright notice and this
|
||||
* permission notice appear in all copies, that both the above
|
||||
* copyright notice and this permission notice appear in all
|
||||
* supporting documentation, and that the name of M.I.T. not be used
|
||||
* in advertising or publicity pertaining to distribution of the
|
||||
* software without specific, written prior permission. M.I.T. makes
|
||||
* no representations about the suitability of this software for any
|
||||
* purpose. It is provided "as is" without express or implied
|
||||
* warranty.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY M.I.T. ``AS IS''. M.I.T. DISCLAIMS
|
||||
* ALL EXPRESS OR IMPLIED WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT
|
||||
* SHALL M.I.T. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* ifmenu - present a menu of network interfaces
|
||||
*
|
||||
* Garrett A. Wollman, April 1995
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/devconf.h>
|
||||
#include "devmenu.h"
|
||||
|
||||
/*
|
||||
* This is provided in a separate file so that, in the future, non-physical
|
||||
* network interfaces might be added as well.
|
||||
*/
|
||||
const char *
|
||||
devmenu_netif(const char *title, const char *hfile, char **devnames)
|
||||
{
|
||||
return devmenu_common(title, hfile, devnames,
|
||||
"Select a network interface",
|
||||
"No network interfaces available",
|
||||
DC_CLS_NETIF);
|
||||
}
|
Loading…
Reference in New Issue
Block a user