summaryrefslogtreecommitdiffstats
path: root/usr.sbin/sysinstall/dmenu.c
diff options
context:
space:
mode:
authorjkh <jkh@FreeBSD.org>1995-05-01 21:56:32 +0000
committerjkh <jkh@FreeBSD.org>1995-05-01 21:56:32 +0000
commite3598880e349017837533ba4e1967b87751ddeff (patch)
tree66e8a7a94085501f4c4c4f035003b8f42ba879d5 /usr.sbin/sysinstall/dmenu.c
parentd0d51976ab3315b9d155a3551f319e36b88b260c (diff)
downloadFreeBSD-src-e3598880e349017837533ba4e1967b87751ddeff.zip
FreeBSD-src-e3598880e349017837533ba4e1967b87751ddeff.tar.gz
Commit my latest changes before having a nap. Still not close to done,
nor is it in sync with my working sources, but it leaves me less CVS hassles to bring in the new files at this time. Still no documentation to translate quite yet, but soon. This stuff is actually very close now.
Diffstat (limited to 'usr.sbin/sysinstall/dmenu.c')
-rw-r--r--usr.sbin/sysinstall/dmenu.c63
1 files changed, 34 insertions, 29 deletions
diff --git a/usr.sbin/sysinstall/dmenu.c b/usr.sbin/sysinstall/dmenu.c
index f49e4cd..36bc88c 100644
--- a/usr.sbin/sysinstall/dmenu.c
+++ b/usr.sbin/sysinstall/dmenu.c
@@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next
* generation being slated for what's essentially a complete rewrite.
*
- * $Id: dmenu.c,v 1.2 1995/04/27 18:03:52 jkh Exp $
+ * $Id: dmenu.c,v 1.3 1995/04/29 19:33:00 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@@ -63,7 +63,7 @@ dmenuOpen(DMenu *menu, int *choice, int *scroll, int *curr, int *max)
char *title = tmp->title;
char *prompt = tmp->prompt;
- if (menu->options & DMENU_RADIO_TYPE) {
+ if (menu->options & (DMENU_RADIO_TYPE | DMENU_MULTIPLE_TYPE)) {
if (*title == '*') {
addme = "ON";
++title;
@@ -80,11 +80,11 @@ dmenuOpen(DMenu *menu, int *choice, int *scroll, int *curr, int *max)
nitems = item_add(nitems, NULL, curr, max); /* Terminate it */
while (1) {
+ char buf[FILENAME_MAX];
+
/* Any helpful hints, put 'em up! */
- if (menu->helpline)
- use_helpline(menu->helpline);
- if (menu->helpfile)
- use_helpfile(menu->helpfile);
+ use_helpline(menu->helpline);
+ use_helpfile(systemHelpFile(menu->helpfile, buf));
/* Pop up that dialog! */
if (menu->options & DMENU_NORMAL_TYPE) {
@@ -106,17 +106,30 @@ dmenuOpen(DMenu *menu, int *choice, int *scroll, int *curr, int *max)
(unsigned char **)nitems,
(unsigned char *)result);
}
+ else if (menu->options & DMENU_MULTIPLE_TYPE) {
+ rval = dialog_checklist((unsigned char *)menu->title,
+ (unsigned char *)menu->prompt,
+ -1, -1,
+ n > MAX_MENU ? MAX_MENU : n,
+ n,
+ (unsigned char **)nitems,
+ (unsigned char *)result);
+ }
dialog_clear();
if (!rval) {
- for (tmp = menu->items; tmp->title; tmp++)
- if (!strcmp(result,
- (*tmp->title == '*') ? tmp->title + 1 :
- tmp->title))
- break;
- if (!tmp->title)
- msgFatal("Menu item `%s' not found??", result);
+ if (menu->options & DMENU_MULTIPLE_TYPE)
+ tmp = &(menu->items[0]);
+ else {
+ for (tmp = menu->items; tmp->title; tmp++)
+ if (!strcmp(result,
+ (*tmp->title == '*') ? tmp->title + 1 :
+ tmp->title))
+ break;
+ if (!tmp->title)
+ msgFatal("Menu item `%s' not found??", result);
+ }
}
- else if (rval == 255)
+ else if (rval == -1)
tmp = &shellAction;
else {
items_free(nitems, curr, max);
@@ -149,11 +162,14 @@ dmenuOpen(DMenu *menu, int *choice, int *scroll, int *curr, int *max)
/* Same as above, but execute it in a prgbox */
case DMENU_SYSTEM_COMMAND_BOX:
+ use_helpfile(NULL);
+ use_helpline("Select OK to dismiss this dialog");
dialog_prgbox(tmp->title, (char *)tmp->ptr, 22, 76, 1, 1);
+ dialog_clear();
break;
case DMENU_CALL:
- if (((int (*)())tmp->ptr)()) {
+ if (((int (*)())tmp->ptr)(result)) {
items_free(nitems, curr, max);
return;
}
@@ -163,20 +179,9 @@ dmenuOpen(DMenu *menu, int *choice, int *scroll, int *curr, int *max)
items_free(nitems, curr, max);
return;
- case DMENU_SET_VARIABLE: {
- Variable *newvar;
-
- if (!index((char *)tmp->ptr, '='))
- msgWarn("Improperly formatted variable: %s", tmp->ptr);
- putenv((char *)tmp->ptr);
- newvar = (Variable *)malloc(sizeof(Variable));
- if (!newvar)
- msgFatal("Out of Memory!");
- strncpy(newvar->value, tmp->ptr, 1024);
- newvar->next = VarHead;
- VarHead = newvar;
- msgInfo("Setting option %s", newvar->value);
- }
+ case DMENU_SET_VARIABLE:
+ variable_set((char *)tmp->ptr);
+ msgInfo("Setting option %s", tmp->ptr);
break;
default:
OpenPOWER on IntegriCloud