From owner-svn-src-all@FreeBSD.ORG Thu Nov 24 18:37:16 2011 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D0E171065670; Thu, 24 Nov 2011 18:37:16 +0000 (UTC) (envelope-from fjoe@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id BF8C78FC13; Thu, 24 Nov 2011 18:37:16 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pAOIbGox007675; Thu, 24 Nov 2011 18:37:16 GMT (envelope-from fjoe@svn.freebsd.org) Received: (from fjoe@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id pAOIbGPK007663; Thu, 24 Nov 2011 18:37:16 GMT (envelope-from fjoe@svn.freebsd.org) Message-Id: <201111241837.pAOIbGPK007663@svn.freebsd.org> From: Max Khon Date: Thu, 24 Nov 2011 18:37:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r227944 - head/usr.sbin/sade X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Nov 2011 18:37:16 -0000 Author: fjoe Date: Thu Nov 24 18:37:16 2011 New Revision: 227944 URL: http://svn.freebsd.org/changeset/base/227944 Log: Port to new libdialog. Modified: head/usr.sbin/sade/Makefile head/usr.sbin/sade/devices.c head/usr.sbin/sade/disks.c head/usr.sbin/sade/dmenu.c head/usr.sbin/sade/install.c head/usr.sbin/sade/label.c head/usr.sbin/sade/main.c head/usr.sbin/sade/menus.c head/usr.sbin/sade/misc.c head/usr.sbin/sade/msg.c head/usr.sbin/sade/sade.h head/usr.sbin/sade/system.c Modified: head/usr.sbin/sade/Makefile ============================================================================== --- head/usr.sbin/sade/Makefile Thu Nov 24 17:58:14 2011 (r227943) +++ head/usr.sbin/sade/Makefile Thu Nov 24 18:37:16 2011 (r227944) @@ -19,9 +19,10 @@ WARNS?= 3 .if ${MACHINE} == "pc98" CFLAGS+= -DPC98 .endif -CFLAGS+= -I${.CURDIR}/../../gnu/lib/libodialog -I. +CFLAGS+= -I${.CURDIR}/../../contrib/dialog -I. +DEBUG_FLAGS= -O0 -g -DPADD= ${LIBODIALOG} ${LIBNCURSES} ${LIBUTIL} ${LIBDISK} -LDADD= -lodialog -lncurses -lutil -ldisk +DPADD= ${LIBDIALOG} ${LIBNCURSESW} ${LIBM} ${LIBUTIL} ${LIBDISK} +LDADD= -ldialog -lncursesw -lm -lutil -ldisk .include Modified: head/usr.sbin/sade/devices.c ============================================================================== --- head/usr.sbin/sade/devices.c Thu Nov 24 17:58:14 2011 (r227943) +++ head/usr.sbin/sade/devices.c Thu Nov 24 18:37:16 2011 (r227944) @@ -29,7 +29,6 @@ * */ -#include "sade.h" #include #include #include @@ -40,6 +39,8 @@ #include #include +#include "sade.h" + /* how much to bias minor number for a given /dev/s slice */ #define SLICE_DELTA (0x10000) @@ -247,7 +248,7 @@ deviceGetAll(void) } free(names); } - dialog_clear_norefresh(); + dlg_clear(); } /* Rescan all devices, after closing previous set - convenience function */ Modified: head/usr.sbin/sade/disks.c ============================================================================== --- head/usr.sbin/sade/disks.c Thu Nov 24 17:58:14 2011 (r227943) +++ head/usr.sbin/sade/disks.c Thu Nov 24 18:37:16 2011 (r227944) @@ -113,7 +113,7 @@ check_geometry(Disk *d) if (d->bios_cyl > 65536 || d->bios_hd > 256 || d->bios_sect >= 64) #endif { - dialog_clear_norefresh(); + dlg_clear(); sg = msgYesNo("WARNING: It is safe to use a geometry of %lu/%lu/%lu for %s on\n" "computers with modern BIOS versions. If this disk is to be used\n" "on an old machine it is recommended that it does not have more\n" @@ -223,21 +223,21 @@ getBootMgr(char *dname, u_char **bootipl char *cp; int i = 0; + dlg_clr_result(); cp = variable_get(VAR_BOOTMGR); if (!cp) { /* Figure out what kind of IPL the user wants */ sprintf(str, "Install Boot Manager for drive %s?", dname); MenuIPLType.title = str; - i = dmenuOpenSimple(&MenuIPLType, FALSE); + i = dmenuOpen(&MenuIPLType); } else { if (!strncmp(cp, "boot", 4)) - BootMgr = 0; + dlg_add_result(MenuIPLType.items[0].prompt); else - BootMgr = 1; + dlg_add_result(MenuIPLType.items[1].prompt); } if (cp || i) { - switch (BootMgr) { - case 0: + if (!strcmp(dialog_vars.input_result, MenuIPLType.items[0].prompt)) { if (!boot0) boot0 = bootalloc("boot0", &boot0_size); *bootipl = boot0; *bootipl_size = boot0_size; @@ -245,10 +245,7 @@ getBootMgr(char *dname, u_char **bootipl *bootmenu = boot05; *bootmenu_size = boot05_size; return; - case 1: - default: - break; - } + } } *bootipl = NULL; *bootipl_size = 0; @@ -266,36 +263,33 @@ getBootMgr(char *dname, u_char **bootCod char *cp; int i = 0; + dlg_clr_result(); cp = variable_get(VAR_BOOTMGR); if (!cp) { /* Figure out what kind of MBR the user wants */ sprintf(str, "Install Boot Manager for drive %s?", dname); MenuMBRType.title = str; - i = dmenuOpenSimple(&MenuMBRType, FALSE); + i = dmenuOpen(&MenuMBRType); } else { + if (!strcmp(cp, "standard")) + dlg_add_result(MenuMBRType.items[0].prompt); if (!strncmp(cp, "boot", 4)) - BootMgr = 0; - else if (!strcmp(cp, "standard")) - BootMgr = 1; + dlg_add_result(MenuMBRType.items[1].prompt); else - BootMgr = 2; + dlg_add_result(MenuMBRType.items[2].prompt); } if (cp || i) { - switch (BootMgr) { - case 0: - if (!boot0) boot0 = bootalloc("boot0", &boot0_size); - *bootCode = boot0; - *bootCodeSize = boot0_size; - return; - case 1: + if (!strcmp(dialog_vars.input_result, MenuMBRType.items[0].prompt)) { if (!mbr) mbr = bootalloc("mbr", &mbr_size); *bootCode = mbr; *bootCodeSize = mbr_size; return; - case 2: - default: - break; + } else if (!strcmp(dialog_vars.input_result, MenuMBRType.items[1].prompt)) { + if (!boot0) boot0 = bootalloc("boot0", &boot0_size); + *bootCode = boot0; + *bootCodeSize = boot0_size; + return; } } #endif @@ -333,7 +327,7 @@ diskPartition(Device *dev) /* Flush both the dialog and curses library views of the screen since we don't always know who called us */ - dialog_clear_norefresh(), clear(); + dlg_clear(), clear(); current_chunk = 0; /* Set up the chunk array */ @@ -705,12 +699,15 @@ diskPartition(Device *dev) p = CheckRules(d); if (p) { char buf[FILENAME_MAX]; - - use_helpline("Press F1 to read more about disk slices."); - use_helpfile(systemHelpFile("partition", buf)); + DIALOG_VARS save_vars; + + dlg_save_vars(&save_vars); + dialog_vars.help_line = "Press F1 to read more about disk slices."; + dialog_vars.help_file = systemHelpFile("partition", buf); if (!variable_get(VAR_NO_WARN)) - dialog_mesgbox("Disk slicing warning:", p, -1, -1); + xdialog_msgbox("Disk slicing warning:", p, -1, -1, 1); free(p); + dlg_restore_vars(&save_vars); } restorescr(w); } @@ -751,7 +748,7 @@ bootalloc(char *name, size_t *size) } #endif /* !__ia64__ */ -#ifdef WITH_SLICES +#ifdef WITH_SLICES static int partitionHook(dialogMenuItem *selected) { @@ -804,7 +801,7 @@ diskPartitionEditor(dialogMenuItem *self return DITEM_FAILURE; } - result = dmenuOpenSimple(menu, FALSE) ? DITEM_SUCCESS : DITEM_FAILURE; + result = dmenuOpen(menu) ? DITEM_SUCCESS : DITEM_FAILURE; free(menu); return result; } Modified: head/usr.sbin/sade/dmenu.c ============================================================================== --- head/usr.sbin/sade/dmenu.c Thu Nov 24 17:58:14 2011 (r227943) +++ head/usr.sbin/sade/dmenu.c Thu Nov 24 18:37:16 2011 (r227944) @@ -34,196 +34,6 @@ #define MAX_MENU 15 -static Boolean exited; - -int -dmenuDisplayFile(dialogMenuItem *tmp) -{ - systemDisplayHelp((char *)tmp->data); - return DITEM_SUCCESS; -} - -int -dmenuSubmenu(dialogMenuItem *tmp) -{ - return (dmenuOpenSimple((DMenu *)(tmp->data), FALSE) ? DITEM_SUCCESS : DITEM_FAILURE); -} - -int -dmenuSystemCommand(dialogMenuItem *self) -{ - WINDOW *w = NULL; /* Keep lint happy */ - - /* If aux is set, the command is known not to produce any screen-spoiling output */ - if (!self->aux) - w = savescr(); - systemExecute((char *)self->data); - if (!self->aux) - restorescr(w); - return DITEM_SUCCESS; -} - -int -dmenuSystemCommandBox(dialogMenuItem *tmp) -{ - WINDOW *w = savescr(); - - use_helpfile(NULL); - use_helpline("Select OK to dismiss this dialog"); - dialog_prgbox(tmp->title, (char *)tmp->data, 22, 76, 1, 1); - restorescr(w); - return DITEM_SUCCESS; -} - -int -dmenuExit(dialogMenuItem *tmp) -{ - exited = TRUE; - return DITEM_LEAVE_MENU; -} - -int -dmenuSetVariable(dialogMenuItem *tmp) -{ - variable_set((char *)tmp->data, *((char *)tmp->data) != '_'); - return DITEM_SUCCESS; -} - -int -dmenuSetVariables(dialogMenuItem *tmp) -{ - char *cp1, *cp2; - char *copy = strdup((char *)tmp->data); - - for (cp1 = copy; cp1 != NULL;) { - cp2 = index(cp1, ','); - if (cp2 != NULL) *cp2++ = '\0'; - variable_set(cp1, *cp1 != '_'); - cp1 = cp2; - } - free(copy); - return DITEM_SUCCESS; -} - -int -dmenuToggleVariable(dialogMenuItem *tmp) -{ - char *var, *cp; - int status; - - if (!(var = strdup((char *)tmp->data))) { - msgConfirm("Incorrect data field for `%s'!", tmp->title); - return DITEM_FAILURE; - } - if (!(cp = index(var, '='))) { - msgConfirm("Data field for %s is not in var=value format!", tmp->title); - return DITEM_FAILURE; - } - status = variable_check(var); - *cp = '\0'; - variable_set2(var, status ? "NO" : "YES", *var != '_'); - free(var); - return DITEM_SUCCESS; -} - -int -dmenuISetVariable(dialogMenuItem *tmp) -{ - char *ans, *var; - - if (!(var = (char *)tmp->data)) { - msgConfirm("Incorrect data field for `%s'!", tmp->title); - return DITEM_FAILURE; - } - ans = msgGetInput(variable_get(var), tmp->title, 1); - if (!ans) - return DITEM_FAILURE; - else if (!*ans) - variable_unset(var); - else - variable_set2(var, ans, *var != '_'); - return DITEM_SUCCESS; -} - -int -dmenuSetFlag(dialogMenuItem *tmp) -{ - if (*((unsigned int *)tmp->data) & tmp->aux) - *((unsigned int *)tmp->data) &= ~tmp->aux; - else - *((unsigned int *)tmp->data) |= tmp->aux; - return DITEM_SUCCESS; -} - -int -dmenuSetValue(dialogMenuItem *tmp) -{ - *((unsigned int *)tmp->data) = tmp->aux; - return DITEM_SUCCESS; -} - -/* Traverse menu but give user no control over positioning */ -Boolean -dmenuOpenSimple(DMenu *menu, Boolean buttons) -{ - int choice, scroll, curr, max; - - choice = scroll = curr = max = 0; - return dmenuOpen(menu, &choice, &scroll, &curr, &max, buttons); -} - -/* Work functions for the state hook */ -int -dmenuFlagCheck(dialogMenuItem *item) -{ - return (*((unsigned int *)item->data) & item->aux); -} - -int -dmenuVarCheck(dialogMenuItem *item) -{ - char *w; - - w = (char *)item->aux; - if (!w) - w = (char *)item->data; - return variable_check(w); -} - -int -dmenuVarsCheck(dialogMenuItem *item) -{ - int res, init; - char *w, *cp1, *cp2; - char *copy; - - w = (char *)item->aux; - if (!w) - w = (char *)item->data; - if (!w) - return FALSE; - - copy = strdup(w); - res = TRUE; - init = FALSE; - for (cp1 = copy; cp1 != NULL;) { - init = TRUE; - cp2 = index(cp1, ','); - if (cp2 != NULL) - *cp2++ = '\0'; - res = res && variable_check(cp1); - cp1 = cp2; - } - free(copy); - return res && init; -} - -int -dmenuRadioCheck(dialogMenuItem *item) -{ - return (*((long *)item->data) == item->aux); -} - static int menu_height(DMenu *menu, int n) { @@ -242,54 +52,42 @@ menu_height(DMenu *menu, int n) /* Traverse over an internal menu */ Boolean -dmenuOpen(DMenu *menu, int *choice, int *scroll, int *curr, int *max, Boolean buttons) +dmenuOpen(DMenu *menu) { int n, rval = 0; - dialogMenuItem *items; - items = menu->items; - if (buttons) - items += 2; /* Count up all the items */ - for (n = 0; items[n].title; n++); + for (n = 0; menu->items[n].title; n++) + ; while (1) { char buf[FILENAME_MAX]; + DIALOG_VARS save_vars; WINDOW *w = savescr(); /* Any helpful hints, put 'em up! */ - use_helpline(menu->helpline); - use_helpfile(systemHelpFile(menu->helpfile, buf)); - dialog_clear_norefresh(); + dlg_save_vars(&save_vars); + dialog_vars.help_line = menu->helpline; + dialog_vars.help_file = systemHelpFile(menu->helpfile, buf); + dlg_clear(); /* Pop up that dialog! */ - if (menu->type & DMENU_NORMAL_TYPE) - rval = dialog_menu((u_char *)menu->title, (u_char *)menu->prompt, - -1, -1, menu_height(menu, n), -n, items, - (char *)(uintptr_t)buttons, choice, scroll); - - else if (menu->type & DMENU_RADIO_TYPE) - rval = dialog_radiolist((u_char *)menu->title, - (u_char *)menu->prompt, -1, -1, menu_height(menu, n), -n, - items, (char *)(uintptr_t)buttons); - - else if (menu->type & DMENU_CHECKLIST_TYPE) - rval = dialog_checklist((u_char *)menu->title, - (u_char *)menu->prompt, -1, -1, menu_height(menu, n), -n, - items, (char *)(uintptr_t)buttons); - else + if (menu->type & DMENU_NORMAL_TYPE) { + rval = xdialog_menu(menu->title, menu->prompt, + -1, -1, menu_height(menu, n), n, menu->items); + } else if (menu->type & DMENU_RADIO_TYPE) { + rval = xdialog_radiolist(menu->title, menu->prompt, + -1, -1, menu_height(menu, n), n, menu->items); + } else { msgFatal("Menu: `%s' is of an unknown type\n", menu->title); - if (exited) { - exited = FALSE; - restorescr(w); - return TRUE; } - else if (rval) { + dlg_restore_vars(&save_vars); + if (rval) { restorescr(w); return FALSE; - } - else if (menu->type & DMENU_SELECTION_RETURNS) { + } else if (menu->type & DMENU_SELECTION_RETURNS) { restorescr(w); return TRUE; - } + } else + delwin(w); } } Modified: head/usr.sbin/sade/install.c ============================================================================== --- head/usr.sbin/sade/install.c Thu Nov 24 17:58:14 2011 (r227943) +++ head/usr.sbin/sade/install.c Thu Nov 24 18:37:16 2011 (r227944) @@ -29,7 +29,6 @@ * */ -#include "sade.h" #include #include #include @@ -51,6 +50,8 @@ #include #include +#include "sade.h" + #define TERMCAP_FILE "/usr/share/misc/termcap" Boolean @@ -177,7 +178,7 @@ installFilesystems(Device *dev) sprintf(fname, "/dev/%s", c2->name); i = (Fake || swapon(fname)); if (!i) { - dialog_clear_norefresh(); + dlg_clear(); msgNotify("Added %s as an additional swap device", fname); } else { @@ -209,7 +210,7 @@ installFilesystems(Device *dev) command_sort(); command_execute(); - dialog_clear_norefresh(); + dlg_clear(); return DITEM_SUCCESS | DITEM_RESTORE; } Modified: head/usr.sbin/sade/label.c ============================================================================== --- head/usr.sbin/sade/label.c Thu Nov 24 17:58:14 2011 (r227943) +++ head/usr.sbin/sade/label.c Thu Nov 24 18:37:16 2011 (r227944) @@ -29,7 +29,7 @@ * */ -#include "sade.h" +#include #include #include #include @@ -37,6 +37,8 @@ #include #include +#include "sade.h" + #define AUTO_HOME 0 /* do not create /home automatically */ /* @@ -161,7 +163,7 @@ diskLabelEditor(dialogMenuItem *self) result = DITEM_FAILURE; } else { - result = dmenuOpenSimple(menu, FALSE) ? DITEM_SUCCESS : DITEM_FAILURE; + result = dmenuOpen(menu) ? DITEM_SUCCESS : DITEM_FAILURE; free(menu); } } @@ -417,9 +419,8 @@ get_mountpoint(PartType type, struct chu static PartType get_partition_type(void) { - char selection[20]; int i; - static unsigned char *fs_types[] = { + static char *fs_types[] = { #ifdef __ia64__ "EFI", "An EFI system partition", #endif @@ -428,6 +429,7 @@ get_partition_type(void) }; WINDOW *w = savescr(); + dlg_clr_result(); i = dialog_menu("Please choose a partition type", "If you want to use this partition for swap space, select Swap.\n" "If you want to put a filesystem on it, choose FS.", @@ -437,16 +439,16 @@ get_partition_type(void) #else 2, 2, #endif - fs_types, selection, NULL, NULL); + fs_types); restorescr(w); if (!i) { #ifdef __ia64__ - if (!strcmp(selection, "EFI")) + if (!strcmp(dialog_vars.input_result, "EFI")) return PART_EFI; #endif - if (!strcmp(selection, "FS")) + if (!strcmp(dialog_vars.input_result, "FS")) return PART_FILESYSTEM; - else if (!strcmp(selection, "Swap")) + else if (!strcmp(dialog_vars.input_result, "Swap")) return PART_SWAP; } return PART_NONE; @@ -1251,7 +1253,7 @@ diskLabel(Device *dev) if (!msgNoYes("Are you sure you want to go into Wizard mode?\n\n" "This is an entirely undocumented feature which you are not\n" "expected to understand!")) { - dialog_clear(); + dlg_clear(); end_dialog(); DialogActive = FALSE; if (dev->private) { Modified: head/usr.sbin/sade/main.c ============================================================================== --- head/usr.sbin/sade/main.c Thu Nov 24 17:58:14 2011 (r227943) +++ head/usr.sbin/sade/main.c Thu Nov 24 18:37:16 2011 (r227944) @@ -39,8 +39,8 @@ const char *ProgName = "sade"; int main(int argc, char **argv) { - int choice, scroll, curr, max, status; - + int status; + /* Record name to be able to restart */ StartName = argv[0]; @@ -77,7 +77,9 @@ main(int argc, char **argv) /* Try to preserve our scroll-back buffer */ if (OnVTY) { - for (curr = 0; curr < 25; curr++) + int i; + + for (i = 0; i < 25; i++) putchar('\n'); } /* Move stderr aside */ @@ -105,10 +107,9 @@ main(int argc, char **argv) } /* Begin user dialog at outer menu */ - dialog_clear(); + dlg_clear(); while (1) { - choice = scroll = curr = max = 0; - dmenuOpen(&MenuMain, &choice, &scroll, &curr, &max, FALSE); + dmenuOpen(&MenuMain); if (getpid() != 1 || !msgNoYes("Are you sure you wish to exit?") ) Modified: head/usr.sbin/sade/menus.c ============================================================================== --- head/usr.sbin/sade/menus.c Thu Nov 24 17:58:14 2011 (r227943) +++ head/usr.sbin/sade/menus.c Thu Nov 24 18:37:16 2011 (r227944) @@ -53,7 +53,7 @@ DMenu MenuDiskDevices = { "Use [TAB] to get to the buttons and leave this menu.", "Press F1 for important information regarding disk geometry!", "drives", - { { NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0 } }, + { { NULL, NULL, NULL } }, }; DMenu MenuMain = { @@ -62,12 +62,12 @@ DMenu MenuMain = { "This is a utility for partitioning and/or labelling your disks.", "DISKUTIL", "main", - { + { #ifdef WITH_SLICES - { "1 Partition", "Managing disk partitions", NULL, diskPartitionEditor, NULL, NULL, 0, 0, 0, 0 }, + { "1 Partition", "Managing disk partitions", diskPartitionEditor }, #endif - { "2 Label", "Label allocated disk partitions", NULL, diskLabelEditor, NULL, NULL, 0, 0, 0, 0 }, - { NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0 } + { "2 Label", "Label allocated disk partitions", diskLabelEditor }, + { NULL, NULL, NULL } }, }; @@ -75,22 +75,20 @@ DMenu MenuMain = { #ifdef PC98 /* IPL type menu */ DMenu MenuIPLType = { - DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS, + DMENU_RADIO_TYPE | DMENU_SELECTION_RETURNS, "overwrite me", /* will be disk specific label */ "If you want a FreeBSD Boot Manager, select \"BootMgr\". If you would\n" "prefer your Boot Manager to remain untouched then select \"None\".\n\n", "Press F1 to read about drive setup", "drives", - { { "BootMgr", "Install the FreeBSD Boot Manager", - dmenuRadioCheck, dmenuSetValue, NULL, &BootMgr, 0, 0, 0, 0 }, - { "None", "Leave the IPL untouched", - dmenuRadioCheck, dmenuSetValue, NULL, &BootMgr, '(', '*', ')', 1 }, - { NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0 } }, + { { "BootMgr", "Install the FreeBSD Boot Manager", NULL }, + { "None", "Leave the IPL untouched", NULL }, + { NULL, NULL, NULL } }, }; #else /* MBR type menu */ DMenu MenuMBRType = { - DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS, + DMENU_RADIO_TYPE | DMENU_SELECTION_RETURNS, "overwrite me", /* will be disk specific label */ "FreeBSD comes with a boot manager that allows you to easily\n" "select between FreeBSD and any other operating systems on your machine\n" @@ -99,18 +97,13 @@ DMenu MenuMBRType = { "to do so (limitations in the PC BIOS usually prevent this otherwise).\n" "If you have other operating systems installed and would like a choice when\n" "booting, choose \"BootMgr\". If you would prefer to keep your existing\n" - "boot manager, select \"None\".\n\n", + "boot manager, select \"None\".\n", "", "drives", - { { "Standard", "Install a standard MBR (non-interactive boot manager)", - dmenuRadioCheck, dmenuSetValue, NULL, &BootMgr, '(', '*', ')', 1 }, - { "BootMgr", "Install the FreeBSD boot manager", - dmenuRadioCheck, dmenuSetValue, NULL, &BootMgr, '(', '*', ')', 0 }, - { "None", "Do not install a boot manager", - dmenuRadioCheck, dmenuSetValue, NULL, &BootMgr, '(', '*', ')', 2 }, - { NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0 } } + { { "Standard", "Install a standard MBR (non-interactive boot manager)", NULL }, + { "BootMgr", "Install the FreeBSD boot manager", NULL }, + { "None", "Do not install a boot manager", NULL }, + { NULL, NULL, NULL } } }; #endif /* PC98 */ #endif /* __i386__ */ - - Modified: head/usr.sbin/sade/misc.c ============================================================================== --- head/usr.sbin/sade/misc.c Thu Nov 24 17:58:14 2011 (r227943) +++ head/usr.sbin/sade/misc.c Thu Nov 24 18:37:16 2011 (r227944) @@ -31,7 +31,6 @@ * */ -#include "sade.h" #include #include #include @@ -47,6 +46,8 @@ #include #include +#include "sade.h" + /* Quick check to see if a file is readable */ Boolean file_readable(char *fname) @@ -217,3 +218,192 @@ restorescr(WINDOW *w) delwin(w); } +static int +xdialog_count_rows(const char *p) +{ + int rows = 0; + + while ((p = strchr(p, '\n')) != NULL) { + p++; + if (*p == '\0') + break; + rows++; + } + + return rows ? rows : 1; +} + +int +xdialog_menu(const char *title, const char *cprompt, int height, int width, + int menu_height, int item_no, dialogMenuItem *ditems) +{ + int i, result, choice = 0; + DIALOG_LISTITEM *listitems; + DIALOG_VARS save_vars; + + dlg_save_vars(&save_vars); + + /* initialize list items */ + listitems = dlg_calloc(DIALOG_LISTITEM, item_no + 1); + assert_ptr(listitems, "xdialog_menu"); + for (i = 0; i < item_no; i++) { + listitems[i].name = ditems[i].prompt; + listitems[i].text = ditems[i].title; + } + + /* calculate height */ + if (height < 0) + height = xdialog_count_rows(cprompt) + menu_height + 4 + 2; + if (height > LINES) + height = LINES; + + /* calculate width */ + if (width < 0) { + int tag_x = 0; + + for (i = 0; i < item_no; i++) { + int j, l; + + l = strlen(listitems[i].name); + for (j = 0; j < item_no; j++) { + int k = strlen(listitems[j].text); + tag_x = MAX(tag_x, l + k + 2); + } + } + width = MAX(dlg_count_columns(cprompt), title != NULL ? dlg_count_columns(title) : 0); + width = MAX(width, tag_x + 4) + 4; + } + width = MAX(width, 24); + if (width > COLS) + width = COLS; + + /* show menu */ + dialog_vars.default_item = listitems[choice].name; + result = dlg_menu(title, cprompt, height, width, + menu_height, item_no, listitems, &choice, NULL); + switch (result) { + case DLG_EXIT_ESC: + result = -1; + break; + case DLG_EXIT_OK: + if (ditems[choice].fire != NULL) { + int status; + WINDOW *save; + + save = savescr(); + status = ditems[choice].fire(ditems + choice); + restorescr(save); + } + result = 0; + break; + case DLG_EXIT_CANCEL: + default: + result = 1; + break; + } + + free(listitems); + dlg_restore_vars(&save_vars); + return result; +} + +int +xdialog_radiolist(const char *title, const char *cprompt, int height, int width, + int menu_height, int item_no, dialogMenuItem *ditems) +{ + int i, result, choice = 0; + DIALOG_LISTITEM *listitems; + DIALOG_VARS save_vars; + + dlg_save_vars(&save_vars); + + /* initialize list items */ + listitems = dlg_calloc(DIALOG_LISTITEM, item_no + 1); + assert_ptr(listitems, "xdialog_menu"); + for (i = 0; i < item_no; i++) { + listitems[i].name = ditems[i].prompt; + listitems[i].text = ditems[i].title; + listitems[i].state = i == choice; + } + + /* calculate height */ + if (height < 0) + height = xdialog_count_rows(cprompt) + menu_height + 4 + 2; + if (height > LINES) + height = LINES; + + /* calculate width */ + if (width < 0) { + int check_x = 0; + + for (i = 0; i < item_no; i++) { + int j, l; + + l = strlen(listitems[i].name); + for (j = 0; j < item_no; j++) { + int k = strlen(listitems[j].text); + check_x = MAX(check_x, l + k + 6); + } + } + width = MAX(dlg_count_columns(cprompt), title != NULL ? dlg_count_columns(title) : 0); + width = MAX(width, check_x + 4) + 4; + } + width = MAX(width, 24); + if (width > COLS) + width = COLS; + + /* show menu */ + dialog_vars.default_item = listitems[choice].name; + result = dlg_checklist(title, cprompt, height, width, + menu_height, item_no, listitems, NULL, FLAG_RADIO, &choice); + switch (result) { + case DLG_EXIT_ESC: + result = -1; + break; + case DLG_EXIT_OK: + if (ditems[choice].fire != NULL) { + int status; + WINDOW *save; + + save = savescr(); + status = ditems[choice].fire(ditems + choice); + restorescr(save); + } + result = 0; + break; + case DLG_EXIT_CANCEL: + default: + result = 1; + break; + } + + /* save result */ + if (result == 0) + dlg_add_result(listitems[choice].name); + free(listitems); + dlg_restore_vars(&save_vars); + return result; +} + +int +xdialog_msgbox(const char *title, const char *cprompt, + int height, int width, int pauseopt) +{ + /* calculate height */ + if (height < 0) + height = 2 + xdialog_count_rows(cprompt) + 2 + !!pauseopt; + if (height > LINES) + height = LINES; + + /* calculate width */ + if (width < 0) { + width = title != NULL ? dlg_count_columns(title) : 0; + width = MAX(width, dlg_count_columns(cprompt)) + 4; + } + if (pauseopt) + width = MAX(width, 10); + if (width > COLS) + width = COLS; + + return dialog_msgbox(title, cprompt, height, width, pauseopt); +} Modified: head/usr.sbin/sade/msg.c ============================================================================== --- head/usr.sbin/sade/msg.c Thu Nov 24 17:58:14 2011 (r227943) +++ head/usr.sbin/sade/msg.c Thu Nov 24 18:37:16 2011 (r227944) @@ -184,13 +184,16 @@ msgConfirm(const char *fmt, ...) va_start(args, fmt); vsnprintf(errstr, FILENAME_MAX, fmt, args); va_end(args); - use_helpline(NULL); - use_helpfile(NULL); + dialog_vars.help_line = NULL; + dialog_vars.help_file = NULL; if (OnVTY) { ioctl(0, VT_ACTIVATE, 1); msgInfo(NULL); } - dialog_notify(errstr); + dialog_vars.help_line = "Press Enter or Space"; + xdialog_msgbox("Message", errstr, -1, -1, 1); + dialog_vars.help_line = NULL; + restorescr(w); } @@ -205,11 +208,11 @@ msgNotify(const char *fmt, ...) va_start(args, fmt); vsnprintf(errstr, FILENAME_MAX, fmt, args); va_end(args); - use_helpline(NULL); - use_helpfile(NULL); + dialog_vars.help_line = NULL; + dialog_vars.help_file = NULL; if (isDebug()) msgDebug("Notify: %s\n", errstr); - dialog_msgbox(NULL, errstr, -1, -1, 0); + xdialog_msgbox(NULL, errstr, -1, -1, 0); } /* Put up a message in a popup yes/no box and return 0 for YES, 1 for NO */ @@ -225,8 +228,8 @@ msgYesNo(const char *fmt, ...) va_start(args, fmt); vsnprintf(errstr, FILENAME_MAX, fmt, args); va_end(args); - use_helpline(NULL); - use_helpfile(NULL); + dialog_vars.help_line = NULL; + dialog_vars.help_file = NULL; if (OnVTY) { ioctl(0, VT_ACTIVATE, 1); /* Switch back */ msgInfo(NULL); @@ -246,20 +249,24 @@ msgNoYes(const char *fmt, ...) char *errstr; int ret; WINDOW *w = savescr(); - + DIALOG_VARS save_vars; + errstr = (char *)alloca(FILENAME_MAX); va_start(args, fmt); vsnprintf(errstr, FILENAME_MAX, fmt, args); va_end(args); - use_helpline(NULL); - use_helpfile(NULL); + dialog_vars.help_line = NULL; + dialog_vars.help_file = NULL; if (OnVTY) { ioctl(0, VT_ACTIVATE, 1); /* Switch back */ msgInfo(NULL); } if (variable_get(VAR_NONINTERACTIVE)) return 1; /* If non-interactive, return NO all the time */ - ret = dialog_noyes("User Confirmation Requested", errstr, -1, -1); + dlg_save_vars(&save_vars); + dialog_vars.defaultno = TRUE; + ret = dialog_yesno("User Confirmation Requested", errstr, -1, -1); + dlg_restore_vars(&save_vars); restorescr(w); return ret; } @@ -278,8 +285,8 @@ msgGetInput(char *buf, const char *fmt, va_start(args, fmt); vsnprintf(errstr, FILENAME_MAX, fmt, args); va_end(args); - use_helpline(NULL); - use_helpfile(NULL); + dialog_vars.help_line = NULL; + dialog_vars.help_file = NULL; if (buf) SAFE_STRCPY(input_buffer, buf); else @@ -288,10 +295,10 @@ msgGetInput(char *buf, const char *fmt, ioctl(0, VT_ACTIVATE, 1); /* Switch back */ msgInfo(NULL); } *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***