[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r3366 - in GNUnet: . m4 src/setup src/setup/ncurses
From: |
grothoff |
Subject: |
[GNUnet-SVN] r3366 - in GNUnet: . m4 src/setup src/setup/ncurses |
Date: |
Tue, 5 Sep 2006 20:25:25 -0700 (PDT) |
Author: grothoff
Date: 2006-09-05 20:25:16 -0700 (Tue, 05 Sep 2006)
New Revision: 3366
Removed:
GNUnet/src/setup/ncurses/mconf_checklist.c
GNUnet/src/setup/ncurses/mconf_colors.h
GNUnet/src/setup/ncurses/mconf_dialog.h
GNUnet/src/setup/ncurses/mconf_inputbox.c
GNUnet/src/setup/ncurses/mconf_menubox.c
GNUnet/src/setup/ncurses/mconf_msgbox.c
GNUnet/src/setup/ncurses/mconf_textbox.c
GNUnet/src/setup/ncurses/mconf_util.c
GNUnet/src/setup/ncurses/mconf_yesno.c
Modified:
GNUnet/README.debian
GNUnet/configure.ac
GNUnet/m4/Makefile.in
GNUnet/src/setup/Makefile.am
GNUnet/src/setup/gnunet-setup.c
GNUnet/src/setup/ncurses/Makefile.am
GNUnet/src/setup/ncurses/mconf.c
GNUnet/src/setup/ncurses/mconf.h
GNUnet/src/setup/ncurses/wizard_curs.c
GNUnet/src/setup/ncurses/wizard_curs.h
GNUnet/todo
Log:
fixing gnunet-setup menuconfig api -- now using dialog
Modified: GNUnet/README.debian
===================================================================
--- GNUnet/README.debian 2006-09-06 00:22:25 UTC (rev 3365)
+++ GNUnet/README.debian 2006-09-06 03:25:16 UTC (rev 3366)
@@ -26,6 +26,8 @@
libmysqlclient14-dev
libncurses5-dev
libcurl3-gnutls-dev
+libncursesw5-dev
+dialog
guile-1.8-dev (out since Feb 2006 - still no debian package!)
libextractor-dev (unstable required!)
Modified: GNUnet/configure.ac
===================================================================
--- GNUnet/configure.ac 2006-09-06 00:22:25 UTC (rev 3365)
+++ GNUnet/configure.ac 2006-09-06 03:25:16 UTC (rev 3366)
@@ -345,17 +345,8 @@
fi
# GNUnet Setup
-curses=1
-pdcurses=0
-AC_CHECK_HEADER([ncurses.h], [AC_DEFINE([CURSES_LOC], [<ncurses.h>], [Curses
location])],
- [AC_CHECK_HEADER([ncurses/ncurses.h], AC_DEFINE([CURSES_LOC],
[<ncurses/ncurses.h>]),
- [AC_CHECK_HEADER([curses.h], AC_DEFINE([CURSES_LOC], [<curses.h>]),
- [AC_CHECK_HEADER([ncurses/curses.h], AC_DEFINE([CURSES_LOC],
[<ncurses/curses.h>]),
- curses=0)])])])
-AC_CHECK_LIB(ncurses, scrollok,,AC_CHECK_LIB(pdcurses,
scrollok,pdcurses=1,curses=0))
-AC_DEFINE_UNQUOTED([HAVE_CURSES], $curses, [We have curses])
-AM_CONDITIONAL(HAVE_CURSES, test x$curses = x1)
-AM_CONDITIONAL(HAVE_PDCURSES, test x$pdcurses = x1)
+AC_CHECK_HEADER([dialog.h],curses=1,curses=0)
+AM_CONDITIONAL(HAVE_DIALOG, test x$curses = x1)
# check for gtk >= 2.6.0
AC_MSG_CHECKING(for gtk)
Modified: GNUnet/m4/Makefile.in
===================================================================
--- GNUnet/m4/Makefile.in 2006-09-06 00:22:25 UTC (rev 3365)
+++ GNUnet/m4/Makefile.in 2006-09-06 03:25:16 UTC (rev 3366)
@@ -93,6 +93,7 @@
GMSGFMT = @GMSGFMT@
GNUNETGTK_CFLAGS = @GNUNETGTK_CFLAGS@
GNUNETGTK_LIBS = @GNUNETGTK_LIBS@
+GREP = @GREP@
GTK_CFLAGS = @GTK_CFLAGS@
GTK_LIBS = @GTK_LIBS@
GUILE = @GUILE@
@@ -100,16 +101,14 @@
GUILE_CONFIG = @GUILE_CONFIG@
GUILE_LDFLAGS = @GUILE_LDFLAGS@
GUILE_TOOLS = @GUILE_TOOLS@
-HAVE_CURSES_FALSE = @HAVE_CURSES_FALSE@
-HAVE_CURSES_TRUE = @HAVE_CURSES_TRUE@
+HAVE_DIALOG_FALSE = @HAVE_DIALOG_FALSE@
+HAVE_DIALOG_TRUE = @HAVE_DIALOG_TRUE@
HAVE_GTK_FALSE = @HAVE_GTK_FALSE@
HAVE_GTK_TRUE = @HAVE_GTK_TRUE@
HAVE_IPV6_FALSE = @HAVE_IPV6_FALSE@
HAVE_IPV6_TRUE = @HAVE_IPV6_TRUE@
HAVE_MYSQL_FALSE = @HAVE_MYSQL_FALSE@
HAVE_MYSQL_TRUE = @HAVE_MYSQL_TRUE@
-HAVE_PDCURSES_FALSE = @HAVE_PDCURSES_FALSE@
-HAVE_PDCURSES_TRUE = @HAVE_PDCURSES_TRUE@
HAVE_SQLITE_FALSE = @HAVE_SQLITE_FALSE@
HAVE_SQLITE_TRUE = @HAVE_SQLITE_TRUE@
HAVE_ZLIB_FALSE = @HAVE_ZLIB_FALSE@
@@ -174,15 +173,9 @@
XFREEBSD_TRUE = @XFREEBSD_TRUE@
XGETTEXT = @XGETTEXT@
_libcurl_config = @_libcurl_config@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_AS = @ac_ct_AS@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
ac_ct_F77 = @ac_ct_F77@
-ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -197,23 +190,30 @@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
subdirs = @subdirs@
Modified: GNUnet/src/setup/Makefile.am
===================================================================
--- GNUnet/src/setup/Makefile.am 2006-09-06 00:22:25 UTC (rev 3365)
+++ GNUnet/src/setup/Makefile.am 2006-09-06 03:25:16 UTC (rev 3366)
@@ -3,12 +3,12 @@
if HAVE_GTK
gtk_dir = gtk
endif
-if HAVE_CURSES
+if HAVE_DIALOG
curses_dir = ncurses
endif
-SUBDIRS = lib text .
-# $(curses_dir) $(gtk_dir) .
+SUBDIRS = lib text . $(curses_dir)
+# $(gtk_dir) .
plugindir = $(libdir)/GNUnet
Modified: GNUnet/src/setup/gnunet-setup.c
===================================================================
--- GNUnet/src/setup/gnunet-setup.c 2006-09-06 00:22:25 UTC (rev 3365)
+++ GNUnet/src/setup/gnunet-setup.c 2006-09-06 03:25:16 UTC (rev 3366)
@@ -170,7 +170,7 @@
cfgFilename = config_daemon
? STRDUP(DEFAULT_DAEMON_CONFIG_FILE)
: STRDUP(DEFAULT_CLIENT_CONFIG_FILE);
- dirname = STRDUP(cfgFilename);
+ dirname = string_expandFileName(ectx, cfgFilename);
i = strlen(dirname) - 1;
while (i > -1) {
char ch = dirname[i];
Modified: GNUnet/src/setup/ncurses/Makefile.am
===================================================================
--- GNUnet/src/setup/ncurses/Makefile.am 2006-09-06 00:22:25 UTC (rev
3365)
+++ GNUnet/src/setup/ncurses/Makefile.am 2006-09-06 03:25:16 UTC (rev
3366)
@@ -8,30 +8,12 @@
plugin_LTLIBRARIES = \
libgnunetsetup_curses.la
-if HAVE_CURSES
-if HAVE_PDCURSES
- pdcurses_lib = -lpdcurses
-else
- curses_lib = -lncurses
-endif
-endif
-
libgnunetsetup_curses_la_SOURCES = \
- mconf.c mconf.h \
- mconf_checklist.c \
- mconf_colors.h \
- mconf_dialog.h \
- mconf_inputbox.c \
- mconf_menubox.c \
- mconf_msgbox.c \
- mconf_textbox.c \
- mconf_util.c \
- mconf_yesno.c \
- wizard_curs.c \
- wizard_curs.h
+ mconf.c mconf.h
+# wizard_curs.c wizard_curs.h
libgnunetsetup_curses_la_LDFLAGS = \
- $(curses_lib) $(pdcurses_lib) \
+ -lncursesw -ldialog \
-export-dynamic -avoid-version -module
libgnunetsetup_curses_la_LIBADD = \
Modified: GNUnet/src/setup/ncurses/mconf.c
===================================================================
--- GNUnet/src/setup/ncurses/mconf.c 2006-09-06 00:22:25 UTC (rev 3365)
+++ GNUnet/src/setup/ncurses/mconf.c 2006-09-06 03:25:16 UTC (rev 3366)
@@ -19,821 +19,430 @@
*/
/**
- * Copyright (C) 2002 Roman Zippel <address@hidden>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-/**
- * @brief GNUnet Setup
+ * @brief GNUnet Setup using dialog
* @file conf/mconf.c
- * @author Roman Zippel
- * @author Petr Baudis
- * @author Nils Durner
+ * @author Christian Grothoff
*/
+#include <dialog.h>
+
+#undef _
+#undef OK
#include "platform.h"
#include "gnunet_util.h"
-#include "confdata.h"
+#include "gnunet_setup_lib.h"
-#ifndef MINGW
-#include <sys/ioctl.h>
-#include <termios.h>
-#endif
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <signal.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
#include "mconf.h"
-#include "mconf_dialog.h"
-#define LKC_DIRECT_LINK
-#include "lkc.h"
-
-static const char menu_instructions[] =
- "Arrow keys navigate the menu. "
- "<Enter> selects submenus --->. "
- "Highlighted letters are hotkeys. "
- "Pressing <Y> includes, <N> excludes features. "
- "Press <Esc><Esc> to exit, <?> for Help. "
- "Legend: [*] built-in [ ] excluded ",
-radiolist_instructions[] =
- "Use the arrow keys to navigate this window or "
- "press the hotkey of the item you wish to select "
- "followed by the <SPACE BAR>. "
- "Press <?> for additional information about this option.",
-inputbox_instructions_int[] =
- "Please enter a decimal value. "
- "Fractions will not be accepted. "
- "Use the <TAB> key to move from the input field to the buttons below
it.",
-inputbox_instructions_hex[] =
- "Please enter a hexadecimal value. "
- "Use the <TAB> key to move from the input field to the buttons below
it.",
-inputbox_instructions_string[] =
- "Please enter a string value. "
- "Use the <TAB> key to move from the input field to the buttons below
it.",
-setmod_text[] =
- "This feature depends on another which has been configured as a
module.\n"
- "As a result, this feature will be built as a module.",
-nohelp_text[] =
- "There is no help available for this option.\n",
-load_config_text[] =
- "Enter the name of the configuration file you wish to load. "
- "Accept the name shown to restore the configuration you "
- "last retrieved. Leave blank to abort.",
-load_config_help[] =
- "\n"
- "For various reasons, one may wish to keep several different\n"
- "configurations available on a single machine.\n"
- "\n"
- "If you have saved a previous configuration in a file other than the\n"
- "default, entering the name of the file here will allow you\n"
- "to modify that configuration.\n"
- "\n"
- "If you are uncertain, then you have probably never used alternate\n"
- "configuration files. You should therefor leave this blank to
abort.\n",
-readme_text[] =
- "Overview\n"
- "--------\n"
- "To change a setting, highlight it with the cursor\n"
- "keys and press <Y> to enable it or <N> to removed it.\n"
- "\n"
- "Items beginning with numbers or other text within parenthesis can\n"
- "be changed by highlighting the item and pressing <Enter>. Then\n"
- "enter the new value into the dialog box that pops up.\n"
- "\n"
- "\n"
- "Some additional keyboard hints:\n"
- "\n"
- "Menus\n"
- "----------\n"
- "o Use the Up/Down arrow keys (cursor keys) to highlight the item\n"
- " you wish to change or submenu wish to select and press <Enter>.\n"
- " Submenus are designated by \"--->\".\n"
- "\n"
- " Shortcut: Press the option's highlighted letter (hotkey).\n"
- " Pressing a hotkey more than once will sequence\n"
- " through all visible items which use that hotkey.\n"
- "\n"
- " You may also use the <PAGE UP> and <PAGE DOWN> keys to scroll\n"
- " unseen options into view.\n"
- "\n"
- "o To exit a menu use the cursor keys to highlight the <Exit> button\n"
- " and press <ENTER>.\n"
- "\n"
- " Shortcut: Press <ESC><ESC> or <E> or <X> if there is no hotkey\n"
- " using those letters. You may press a single <ESC>,
but\n"
- " there is a delayed response which you may find
annoying.\n"
- "\n"
- " Also, the <TAB> and cursor keys will cycle between <Select>,\n"
- " <Exit> and <Help>\n"
- "\n"
- "o To get help with an item, use the cursor keys to highlight <Help>\n"
- " and Press <ENTER>.\n"
- "\n"
- " Shortcut: Press <H> or <?>.\n"
- "\n"
- "\n"
- "Radiolists (Choice lists)\n"
- "-----------\n"
- "o Use the cursor keys to select the option you wish to set and
press\n"
- " <S> or the <SPACE BAR>.\n"
- "\n"
- " Shortcut: Press the first letter of the option you wish to set
then\n"
- " press <S> or <SPACE BAR>.\n"
- "\n"
- "o To see available help for the item, use the cursor keys to
highlight\n"
- " <Help> and Press <ENTER>.\n"
- "\n"
- " Shortcut: Press <H> or <?>.\n"
- "\n"
- " Also, the <TAB> and cursor keys will cycle between <Select> and\n"
- " <Help>\n"
- "\n"
- "\n"
- "Data Entry\n"
- "-----------\n"
- "o Enter the requested information and press <ENTER>\n"
- " If you are entering hexadecimal values, it is not necessary to\n"
- " add the '0x' prefix to the entry.\n"
- "\n"
- "o For help, use the <TAB> or cursor keys to highlight the help
option\n"
- " and press <ENTER>. You can try <TAB><H> as well.\n"
- "\n"
- "\n"
- "Text Box (Help Window)\n"
- "--------\n"
- "o Use the cursor keys to scroll up/down/left/right. The VI editor\n"
- " keys h,j,k,l function here as do <SPACE BAR> and <B> for those\n"
- " who are familiar with less and lynx.\n"
- "\n"
- "o Press <E>, <X>, <Enter> or <Esc><Esc> to exit.\n"
- "\n"
- "\n"
- "Final Acceptance\n"
- "----------------\n"
- "YOUR CHANGES ARE NOT FINAL. You will be given a last chance to\n"
- "confirm them prior to exiting Menuconfig.\n"
- "\n"
- "Alternate Configuration Files\n"
- "-----------------------------\n"
- "Menuconfig supports the use of alternate configuration files for\n"
- "those who, for various reasons, find it necessary to switch\n"
- "between different configurations.\n"
- "\n"
- "At the end of the main menu you will find two options. One is\n"
- "for saving the current configuration to a file of your choosing.\n"
- "The other option is for loading a previously saved alternate\n"
- "configuration.\n"
- "\n"
- "Even if you don't use alternate configuration files, but you\n"
- "find during a Menuconfig session that you have completely messed\n"
- "up your settings, you may use the \"Load Alternate...\" option to\n"
- "restore your previously saved settings from \".config\" without\n"
- "restarting Menuconfig.\n"
- "\n"
- "Other information\n"
- "-----------------\n"
- "If you use Menuconfig in an XTERM window make sure you have your\n"
- "$TERM variable set to point to a xterm definition which supports
color.\n"
- "Otherwise, Menuconfig will look rather bad. Menuconfig will not\n"
- "display correctly in a RXVT window because rxvt displays only one\n"
- "intensity of color, bright.\n"
- "\n"
- "Menuconfig will display larger menus on screens or xterms which are\n"
- "set to display more than the standard 25 row by 80 column geometry.\n"
- "In order for this to work, the \"stty size\" command must be able to\n"
- "display the screen's current row and column geometry. I STRONGLY\n"
- "RECOMMEND that you make sure you do NOT have the shell variables\n"
- "LINES and COLUMNS exported into your environment. Some
distributions\n"
- "export those variables via /etc/profile. Some ncurses programs can\n"
- "become confused when those variables (LINES & COLUMNS) don't reflect\n"
- "the true screen size.\n"
- "\n"
- "\n"
- "******** IMPORTANT, OPTIONAL ALTERNATE PERSONALITY AVAILABLE
********\n"
- "********
********\n"
- "If you prefer to have all of the options listed in a single\n"
- "menu, rather than the default multimenu hierarchy, run the
menuconfig\n"
- "with MENUCONFIG_MODE environment variable set to single_menu.\n"
- "\n"
- "Note that this mode can eventually be a little more CPU expensive\n"
- "(especially with a larger number of unrolled categories) than the\n"
- "default mode.\n"
-
"*********************************************************************\n"
- "\n"
- "\n"
- "Propaganda\n"
- "----------\n"
- "The windowing support utility (lxdialog) is a VERY modified version
of\n"
- "the dialog utility by Savio Lam <address@hidden>. Although lxdialog\n"
- "is significantly different from dialog, I have left Savio's
copyrights\n"
- "intact. Please DO NOT contact Savio with questions about lxdialog.\n"
- "He will not be able to assist.\n"
- "\n"
- "William Roadcap was the original author of Menuconfig.\n"
-
-;
-
-static char filename[PATH_MAX+1] = "/etc/GNUnet/.config";
-static int indent;
#ifndef MINGW
-static struct termios ios_org;
+#include <termios.h>
#endif
-int rows = 0, cols = 0;
-static int child_count;
-static int single_menu_mode;
-static struct dialog_list_item *items[32768]; /* FIXME: This ought to be
dynamic */
-static int item_no;
+static struct GE_Context * ectx;
-static void conf(struct menu *menu);
-static void conf_choice(struct menu *menu);
-static void conf_string(struct menu *menu);
-static void conf_load(void);
-static void show_help(struct menu *menu);
-static void show_readme(void);
-
-void init_wsize(void)
-{
- char *env;
-
-#ifndef MINGW
- struct winsize ws;
-
- if (ioctl(1, TIOCGWINSZ, &ws) == -1) {
- rows = 24;
- cols = 80;
- } else {
- rows = ws.ws_row;
- cols = ws.ws_col;
-#else
- rows = cols = 0;
-#endif
- if (!rows) {
- env = getenv("LINES");
- if (env)
- rows = atoi(env);
- if (!rows)
- rows = 24;
- }
- if (!cols) {
- env = getenv("COLUMNS");
- if (env)
- cols = atoi(env);
- if (!cols)
- cols = 80;
- }
-#ifndef MINGW
- }
-#endif
-
- if (rows < 19 || cols < 80) {
- end_dialog();
- fprintf(stderr, "Your display is too small to run
Menuconfig!\n");
- fprintf(stderr, "It must be at least 19 lines by 80
columns.\n");
- exit(1);
- }
-
- rows -= 4;
- cols -= 5;
+static void show_help(const char * option,
+ const char * helptext) {
+ dialog_vars.help_button = 0;
+ dialog_msgbox(option,
+ gettext(helptext),
+ 20,
+ 70,
+ TRUE);
+ dialog_vars.help_button = 1;
}
-static void creset(void)
-{
- int i;
+static void run_menu(struct GNS_Context * ctx,
+ struct GNS_Tree * pos,
+ struct GC_Configuration * cfg) {
+ int st;
+ int i;
+ DIALOG_LISTITEM * items;
+ int msel;
+ DIALOG_FORMITEM fitem;
+ unsigned long long lval;
+ double dval;
+ GNS_Value * val;
- for (i = 0; i < item_no; i++) {
- free(items[i]->name);
- free(items[i]);
- }
+ fitem.type = 0;
+ fitem.name = pos->description;
+ fitem.name_len = strlen(pos->description);
+ fitem.name_y = 3;
+ fitem.name_x = 5;
+ fitem.name_free = 0;
+ fitem.text_y = 5;
+ fitem.text_x = 5;
+ fitem.text_flen = 55;
+ fitem.text_ilen = 63;
+ fitem.text_free = 0;
+ fitem.help_free = 0;
- item_no = 0;
-}
-
-static void cmake(void)
-{
- items[item_no] = calloc(1, sizeof(struct dialog_list_item));
- items[item_no]->name = malloc(512); items[item_no]->name[0] = 0;
- items[item_no]->namelen = 0;
- item_no++;
-}
-
-static int cprint_name(const char *fmt, ...)
-{
- va_list ap;
- int res;
-
- if (!item_no)
- cmake();
- va_start(ap, fmt);
- res = vsnprintf(items[item_no - 1]->name + items[item_no - 1]->namelen,
- 512 - items[item_no - 1]->namelen, fmt, ap);
- if (res > 0)
- items[item_no - 1]->namelen += res;
- va_end(ap);
-
- return res;
-}
-
-static int cset_tag(char type, void *ptr)
-{
- items[item_no - 1]->type = type;
- items[item_no - 1]->data = ptr;
- return 0;
-}
-
-#ifndef MINGW
-static void winch_handler(int sig)
-{
- static int lock;
-
- if (!lock) {
- lock = 1;
- /* I just can't figure out how to make this thing not to crash
- * (it won't crash everytime but at least in 1 of 10 tries).
- * FIXME: Something rotten causes stack corruption to us, not
- * a good thing to live with. --pasky */
-#if 0
- init_wsize();
- resize_dialog(rows + 4, cols + 5);
-#endif
- lock = 0;
+ dialog_vars.cancel_label = _("Cancel");
+ msel = 0;
+ while (1) {
+ switch (pos->type & GNS_KindMask) {
+ case GNS_Root:
+ dialog_vars.cancel_label = _("Exit");
+ /* fall-through! */
+ case GNS_Node:
+ st = 0;
+ i = 0;
+ while (pos->children[i] != NULL) {
+ if (pos->children[i]->visible)
+ st++;
+ i++;
+ }
+ if (st == 0)
+ return; /* no visible entries */
+ items = MALLOC(sizeof(DIALOG_LISTITEM) * st);
+ i = 0;
+ st = 0;
+ while (pos->children[i] != NULL) {
+ if (pos->children[i]->visible) {
+ items[st].name = pos->children[i]->option;
+ items[st].text = gettext(pos->children[i]->description);
+ items[st].help = gettext(pos->children[i]->help);
+ items[st].state = 0;
+ st++;
}
-}
-#endif
-
-static void build_conf(struct menu *menu)
-{
- struct symbol *sym;
- struct property *prop;
- struct menu *child;
- int type, tmp, doint = 2;
- tristate val;
- char ch;
-
- if (!menu_is_visible(menu))
- return;
-
- sym = menu->sym;
- prop = menu->prompt;
- if (!sym) {
- if (prop && menu != current_menu) {
- const char *prompt = menu_get_prompt(menu);
- switch (prop->type) {
- case P_MENU:
- child_count++;
- cmake();
- cset_tag('m', menu);
-
- if (single_menu_mode) {
- cprint_name("%s%*c%s",
- menu->data ? "-->" : "++>",
- indent + 1, ' ', prompt);
- } else
- cprint_name(" %*c%s --->", indent +
1, ' ', prompt);
-
- if (single_menu_mode && menu->data)
- goto conf_childs;
- return;
- default:
- if (prompt) {
- child_count++;
- cmake();
- cset_tag(':', menu);
- cprint_name("---%*c%s", indent + 1, '
', prompt);
- }
- }
- } else
- doint = 0;
- goto conf_childs;
+ i++;
+ }
+ st = dlg_menu(gettext(pos->description),
+ "Select configuration option to change",
+ 20,
+ 70,
+ 13,
+ st,
+ items,
+ &msel,
+ NULL);
+ FREE(items);
+ switch (st) {
+ case DLG_EXIT_OK:
+ i = 0;
+ st = msel;
+ while (pos->children[i] != NULL) {
+ if (pos->children[i]->visible) {
+ if (st == 0)
+ run_menu(ctx,
+ pos->children[i],
+ cfg);
+ st--;
+ }
+ i++;
}
+ break;
+ case DLG_EXIT_HELP:
+ show_help(pos->children[msel]->option,
+ pos->children[msel]->help);
+ break;
+ case DLG_EXIT_ESC:
+ case DLG_EXIT_ERROR:
+ case DLG_EXIT_CANCEL:
+ default:
+ return;
+ }
+ break;
- cmake();
- type = sym_get_type(sym);
- if (sym_is_choice(sym)) {
- struct symbol *def_sym = sym_get_choice_value(sym);
- struct menu *def_menu = NULL;
-
- child_count++;
- for (child = menu->list; child; child = child->next) {
- if (menu_is_visible(child) && child->sym == def_sym)
- def_menu = child;
- }
-
- val = sym_get_tristate_value(sym);
- if (sym_is_changable(sym)) {
- cset_tag('t', menu);
- switch (type) {
- case S_BOOLEAN:
- cprint_name("[%c]", val == no ? ' ' : '*');
- break;
- case S_TRISTATE:
- switch (val) {
- case yes: ch = '*'; break;
- case mod: ch = 'M'; break;
- default: ch = ' '; break;
- }
- cprint_name("<%c>", ch);
- break;
- }
- } else {
- cset_tag(def_menu ? 't' : ':', menu);
- cprint_name(" ");
- }
-
- cprint_name("%*c%s", indent + 1, ' ', menu_get_prompt(menu));
- if (val == yes) {
- if (def_menu) {
- cprint_name(" (%s)", menu_get_prompt(def_menu));
- cprint_name(" --->");
- if (def_menu->list) {
- indent += 2;
- build_conf(def_menu);
- indent -= 2;
- }
- }
- return;
- }
- } else {
- if (menu == current_menu) {
- cset_tag(':', menu);
- cprint_name("---%*c%s", indent + 1, ' ',
menu_get_prompt(menu));
- goto conf_childs;
- }
- child_count++;
- val = sym_get_tristate_value(sym);
- if (sym_is_choice_value(sym) && val == yes) {
- cset_tag(':', menu);
- cprint_name(" ");
- } else {
- switch (type) {
- case S_BOOLEAN:
- cset_tag('t', menu);
- if (sym_is_changable(sym))
- cprint_name("[%c]", val == no ? ' ' :
'*');
- else
- cprint_name("---");
- break;
- case S_TRISTATE:
- cset_tag('t', menu);
- switch (val) {
- case yes: ch = '*'; break;
- case mod: ch = 'M'; break;
- default: ch = ' '; break;
- }
- if (sym_is_changable(sym))
- cprint_name("<%c>", ch);
- else
- cprint_name("---");
- break;
- default:
- cset_tag('s', menu);
- tmp = cprint_name("(%s)",
sym_get_string_value(sym));
- tmp = indent - tmp + 4;
- if (tmp < 0)
- tmp = 0;
- cprint_name("%*c%s%s", tmp, ' ',
menu_get_prompt(menu),
- (sym_has_value(sym) ||
!sym_is_changable(sym)) ?
- "" : " (NEW)");
- goto conf_childs;
- }
- }
- cprint_name("%*c%s%s", indent + 1, ' ', menu_get_prompt(menu),
- (sym_has_value(sym) || !sym_is_changable(sym)) ?
- "" : " (NEW)");
- if (menu->prompt->type == P_MENU) {
- cprint_name(" --->");
- return;
- }
+ case GNS_Leaf:
+ switch (pos->type & GNS_TypeMask) {
+ case GNS_Boolean:
+ st = dialog_yesno(pos->option,
+ gettext(pos->description),
+ 5, 60);
+ switch (st) {
+ case DLG_EXIT_OK:
+ case DLG_EXIT_CANCEL:
+ if (0 != GC_set_configuration_value_string(cfg,
+ ectx,
+ pos->section,
+ pos->option,
+ st == DLG_EXIT_OK ? "YES"
: "NO")) {
+ show_help(pos->option,
+ gettext_noop("Internal error! (Choice invalid?)"));
+ break;
+ }
+ return;
+ case DLG_EXIT_HELP:
+ show_help(pos->option, pos->help);
+ break;
+ case DLG_EXIT_ESC:
+ return;
+ default:
+ GE_BREAK(ectx, 0);
+ return;
}
+ break;
+ case GNS_String:
+ if (pos->value.String.legalRange[0] == NULL) {
+ /* free form */
+ fitem.text = MALLOC(65536);
+ strcpy(fitem.text,
+ pos->value.String.val);
+ fitem.text_len = strlen(fitem.text);
+ fitem.help = pos->help;
+ msel = 0;
+ st = dlg_form(pos->option,
+ "",
+ 20,
+ 70,
+ 15,
+ 1,
+ &fitem,
+ &msel);
+ switch (st) {
+ case DLG_EXIT_OK:
+ if (0 != GC_set_configuration_value_string(cfg,
+ ectx,
+ pos->section,
+ pos->option,
+ fitem.text)) {
+ show_help(pos->option,
+ gettext_noop("Internal error! (Value invalid?)"));
+ break;
+ }
+ FREE(fitem.text);
+ return;
+ case DLG_EXIT_HELP:
+ show_help(pos->option, pos->help);
+ break;
+ default:
+ break;
+ }
+ FREE(fitem.text);
+ /* end free form */
+ } else {
+ /* begin choice */
-conf_childs:
- indent += doint;
- for (child = menu->list; child; child = child->next)
- build_conf(child);
- indent -= doint;
-}
+ val = &pos->value;
+ i = 0;
+ while (val->String.legalRange[i] != NULL)
+ i++;
+ GE_ASSERT(ectx, i != 0);
+ items = MALLOC(sizeof(DIALOG_LISTITEM) * i);
+ i = 0;
+ msel = -1;
+
+ while (val->String.legalRange[i] != NULL) {
+ items[i].name = "";
+ items[i].text = val->String.legalRange[i];
+ items[i].help = "";
+ items[i].state = 0;
+ if (0 == strcmp(val->String.legalRange[i],
+ val->String.val)) {
+ items[i].state = 1;
+ msel = i;
+ }
+ if ( (msel == -1) &&
+ (0 == strcmp(val->String.legalRange[i],
+ val->String.def)) )
+ msel = i;
+ i++;
+ }
+ st = dlg_checklist(gettext(pos->option),
+ gettext(pos->description),
+ 20,
+ 70,
+ 13,
+ i,
+ items,
+ " *",
+ FLAG_RADIO,
+ &msel);
+ FREE(items);
+ switch (st) {
+ case DLG_EXIT_OK:
+ if (0 != GC_set_configuration_value_choice(cfg,
+ ectx,
+ pos->section,
+ pos->option,
+
val->String.legalRange[msel])) {
+ show_help(pos->option,
+ gettext_noop("Internal error! (Choice invalid?)"));
+ break;
+ }
+ return;
+ case DLG_EXIT_HELP:
+ show_help(pos->option,
+ pos->help);
+ break;
+ case DLG_EXIT_ESC:
+ case DLG_EXIT_ERROR:
+ case DLG_EXIT_CANCEL:
+ default:
+ return;
+ }
+ } /* end choice */
+ break;
-static void conf(struct menu *menu)
-{
- char active_type = 0; void *active_ptr = NULL;
- const char *prompt = menu_get_prompt(menu);
- struct menu *submenu;
- struct symbol *sym;
- int stat;
-
- UNLINK("lxdialog.scrltmp");
- while (1) {
- indent = 0;
- child_count = 0;
- current_menu = menu;
- creset();
- build_conf(menu);
- if (!child_count)
- break;
- if (menu == &rootmenu) {
- cmake(); cset_tag(':', NULL); cprint_name("--- ");
- cmake(); cset_tag('L', NULL); cprint_name("Load an
Alternate Configuration File");
- }
- dialog_clear();
- /* active_item itself can change after any creset() +
- * build_conf() :-( */
- stat = dialog_menu(prompt ? prompt : "Main Menu",
- menu_instructions, rows, cols, rows - 10,
- active_type, active_ptr, item_no, items);
- if (stat < -1)
- continue; /* Windows resized, let's redraw... */
- if (stat < 0)
- break;
-
- if (stat == 1 || stat == 255)
- break;
-
- {
- struct dialog_list_item *active_item;
-
- active_item = first_sel_item(item_no, items);
- if (!active_item)
- continue;
- active_item->selected = 0;
- active_type = active_item->type;
- active_ptr = active_item->data;
- }
-
- if (!active_type)
- continue;
-
- sym = NULL;
- submenu = active_ptr;
- if (submenu) sym = submenu->sym;
-
- switch (stat) {
- case 0:
- switch (active_type) {
- case 'm':
- if (single_menu_mode)
- submenu->data = (void *) (long)
!submenu->data;
- else
- conf(submenu);
- break;
- case 't':
- if (sym_is_choice(sym) &&
sym_get_tristate_value(sym) == yes)
- conf_choice(submenu);
- else if (submenu->prompt->type == P_MENU)
- conf(submenu);
- break;
- case 's':
- conf_string(submenu);
- break;
- case 'L':
- conf_load();
- break;
- }
- break;
- case 2:
- if (sym)
- show_help(submenu);
- else
- show_readme();
- break;
- case 3:
- if (active_type == 't') {
- if (sym_set_tristate_value(sym, yes))
- break;
- if (sym_set_tristate_value(sym, mod))
- show_textbox(NULL, setmod_text, 6, 74);
- }
- break;
- case 4:
- if (active_type == 't')
- sym_set_tristate_value(sym, no);
- break;
- case 5:
- if (active_type == 't')
- sym_set_tristate_value(sym, mod);
- break;
- case 6:
- if (active_type == 't') {
- sym_toggle_tristate_value(sym);
- } else if (active_type == 'm') {
- if (single_menu_mode)
- submenu->data = (void *)
(long)!submenu->data;
- else
- conf(submenu);
- }
- break;
- }
+ case GNS_Double:
+ fitem.text = MALLOC(64);
+ SNPRINTF(fitem.text,
+ 64,
+ "%f",
+ pos->value.Double.val);
+ fitem.text_len = strlen(fitem.text);
+ fitem.help = pos->help;
+ st = DLG_EXIT_HELP;
+ msel = 0;
+ st = dlg_form(pos->option,
+ "",
+ 20,
+ 70,
+ 15,
+ 1,
+ &fitem,
+ &msel);
+ switch (st) {
+ case DLG_EXIT_OK:
+ if (1 != sscanf(fitem.text,
+ "%lf",
+ &dval)) {
+ show_help(pos->option,
+ gettext_noop("Invalid input, expecting floating point
value."));
+ break;
+ }
+ if (0 != GC_set_configuration_value_string(cfg,
+ ectx,
+ pos->section,
+ pos->option,
+ fitem.text)) {
+ show_help(pos->option,
+ gettext_noop("Internal error! (Value invalid?)"));
+ FREE(fitem.text);
+ break;
+ }
+ FREE(fitem.text);
+ return;
+ case DLG_EXIT_HELP:
+ show_help(pos->option, pos->help);
+ break;
+ default:
+ break;
}
-}
+ FREE(fitem.text);
+ break;
-void show_textbox(const char *title, const char *text, int r, int c)
-{
- int fd;
-
- fd = CREAT(".help.tmp", 0777);
- WRITE(fd, text, strlen(text));
- CLOSE(fd);
- while (dialog_textbox(title, ".help.tmp", r, c) < 0)
- ;
- UNLINK(".help.tmp");
-}
-
-void show_helptext(const char *title, const char *text)
-{
- show_textbox(title, text, rows, cols);
-}
-
-static void show_help(struct menu *menu)
-{
- const char *help;
- char *helptext;
- struct symbol *sym = menu->sym;
-
- help = sym->help;
- if (!help)
- help = nohelp_text;
- if (sym->name) {
- helptext = malloc(strlen(sym->name) + strlen(help) + 16);
- sprintf(helptext, "CONFIG_%s:\n\n%s", sym->name, help);
- show_helptext(menu_get_prompt(menu), helptext);
- free(helptext);
- } else
- show_helptext(menu_get_prompt(menu), help);
-}
-
-static void show_readme(void)
-{
- show_textbox(NULL, readme_text, rows, cols);
-}
-
-static void conf_choice(struct menu *menu)
-{
- const char *prompt = menu_get_prompt(menu);
- struct menu *child;
- struct symbol *active;
-
- while (1) {
- current_menu = menu;
- active = sym_get_choice_value(menu->sym);
- creset();
- for (child = menu->list; child; child = child->next) {
- if (!menu_is_visible(child))
- continue;
- cmake();
- cset_tag(0, child);
- cprint_name("%s", menu_get_prompt(child));
- items[item_no - 1]->selected = (child->sym == active);
- }
-
- switch (dialog_checklist(prompt ? prompt : "Main Menu",
- radiolist_instructions, 15, 70, 6,
- item_no, items, FLAG_RADIO)) {
- case 0:
- menu = first_sel_item(item_no, items)->data;
- if (!menu)
- break;
- sym_set_tristate_value(menu->sym, yes);
- return;
- case 1:
- show_help(menu);
- break;
- case 255:
- return;
- }
+ case GNS_UInt64:
+ fitem.text = MALLOC(64);
+ SNPRINTF(fitem.text,
+ 64,
+ "%llu",
+ pos->value.UInt64.val);
+ fitem.text_len = strlen(fitem.text);
+ fitem.help = pos->help;
+ st = DLG_EXIT_HELP;
+ msel = 0;
+ while (st == DLG_EXIT_HELP) {
+ st = dlg_form(pos->option,
+ "",
+ 20,
+ 70,
+ 15,
+ 1,
+ &fitem,
+ &msel);
+ switch (st) {
+ case DLG_EXIT_OK:
+ if (1 != sscanf(fitem.text,
+ "%llu",
+ &lval)) {
+ show_help(pos->option,
+ gettext_noop("Invalid input, expecting integer."));
+ continue;
+ }
+ if ( (lval < pos->value.UInt64.min) ||
+ (lval > pos->value.UInt64.max)) {
+ show_help(pos->option,
+ gettext_noop("Value is not in legal range."));
+ continue;
+ }
+ if (0 != GC_set_configuration_value_number(cfg,
+ ectx,
+ pos->section,
+ pos->option,
+ lval)) {
+ show_help(pos->option,
+ gettext_noop("Internal error! (Choice invalid?)"));
+ continue;
+ }
+ break;
+ case DLG_EXIT_HELP:
+ show_help(pos->option, pos->help);
+ break;
+ default:
+ break;
+ }
}
-}
+ FREE(fitem.text);
+ return;
+ default:
+ GE_BREAK(ectx, 0);
+ return;
+ } /* end switch type & type */
+ break;
-static void conf_string(struct menu *menu)
-{
- const char *prompt = menu_get_prompt(menu);
+ default:
+ GE_BREAK(ectx, 0);
+ break;
- while (1) {
- char *heading;
-
- switch (sym_get_type(menu->sym)) {
- case S_INT:
- heading = (char *) inputbox_instructions_int;
- break;
- case S_HEX:
- heading = (char *) inputbox_instructions_hex;
- break;
- case S_STRING:
- heading = (char *) inputbox_instructions_string;
- break;
- default:
- heading = "Internal mconf error!";
- /* panic? */;
- }
-
- switch (dialog_inputbox(prompt ? prompt : "Main Menu",
- heading, 10, 75,
- sym_get_string_value(menu->sym))) {
- case 0:
- if (sym_set_string_value(menu->sym,
- dialog_input_result))
- return;
- show_textbox(NULL, "You have made an invalid entry.",
5, 43);
- break;
- case 1:
- show_help(menu);
- break;
- case 255:
- return;
- }
- }
+ } /* end switch type & Kind */
+ } /* end while(1) */
}
-static void conf_load(void)
-{
- while (1) {
- switch(dialog_inputbox(NULL, load_config_text, 11, 55,
- filename)) {
- case 0:
- if (!dialog_input_result[0])
- return;
- if (!conf_read(dialog_input_result))
- return;
- show_textbox(NULL, "File does not exist!", 5, 38);
- break;
- case 1:
- show_helptext("Load Alternate Configuration",
load_config_help);
- break;
- case 255:
- return;
- }
- }
-}
-static void conf_cleanup() {
-#ifndef MINGW
- tcsetattr(1, TCSAFLUSH, &ios_org);
-#endif
- UNLINK(".help.tmp");
- UNLINK("lxdialog.scrltmp");
-}
+int mconf_mainsetup_curses(int argc,
+ const char **argv,
+ struct PluginHandle * self,
+ struct GE_Context * e,
+ struct GC_Configuration * cfg,
+ struct GNS_Context * gns,
+ const char * filename,
+ int is_daemon) {
+ int ret;
+ struct termios ios_org;
-
-int main_setup_ncurses(int argc,
- const char **argv,
- struct PluginHandle * self,
- struct GE_Context * ectx,
- struct GC_Configuration * cfg,
- struct GNS_Context * gns,
- const char * filename,
- int is_daemon) {
- char *mode;
- int stat;
-
- backtitle = _("GNUnet Configuration");
- mode = getenv("MENUCONFIG_MODE");
- if (mode) {
- if (!strcasecmp(mode, "single_menu"))
- single_menu_mode = 1;
- }
-
+ ectx = e;
#ifndef MINGW
- {
- struct sigaction sa;
- sa.sa_handler = winch_handler;
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = SA_RESTART;
- sigaction(SIGWINCH, &sa, NULL);
- }
tcgetattr(1, &ios_org);
#endif
- atexit(conf_cleanup);
- init_dialog();
- init_wsize();
- conf(&rootmenu);
+ dialog_vars.backtitle = _("GNUnet Configuration");
+ dialog_vars.item_help = 1;
+ dialog_vars.help_button = 1;
+ init_dialog(stdin, stderr);
+ run_menu(gns,
+ GNS_get_tree(gns),
+ cfg);
+
+ ret = 0;
if ( (0 == GC_test_dirty(cfg)) &&
(0 == ACCESS(filename, R_OK)) ) {
+ end_dialog();
printf(_("Configuration unchanged, no need to save.\n"));
+ } else {
+ dialog_vars.help_button = 0;
+ ret = dialog_yesno(NULL,
+ _("Do you wish to save your new configuration?"),
+ 5, 60);
end_dialog();
- return 0;
- }
- do {
- stat = dialog_yesno(NULL,
- _("Do you wish to save your new configuration?"),
- 5, 60);
- } while (stat < 0);
- end_dialog();
- printf("\n\n");
- if (stat == 0) {
- if (0 != GC_write_configuration(cfg,
- filename)) {
- return 1;
+ if (ret == DLG_EXIT_OK) {
+ if (0 != GC_write_configuration(cfg,
+ filename)) {
+ /* error message already printed... */
+ ret = 1;
+ } else {
+ ret = 0;
+ }
+ printf(_("\nEnd of configuration.\n"));
+ } else {
+ ret = 0;
+ printf(_("\nYour configuration changes were NOT saved.\n"));
}
- printf(_("End of configuration.\n"));
- } else {
- printf(_("Your configuration changes were NOT saved.\n"));
}
- return 0;
+
+#ifndef MINGW
+ tcsetattr(1, TCSAFLUSH, &ios_org);
+#endif
+ return ret;
}
Modified: GNUnet/src/setup/ncurses/mconf.h
===================================================================
--- GNUnet/src/setup/ncurses/mconf.h 2006-09-06 00:22:25 UTC (rev 3365)
+++ GNUnet/src/setup/ncurses/mconf.h 2006-09-06 03:25:16 UTC (rev 3366)
@@ -1,6 +1,6 @@
/*
This file is part of GNUnet.
- (C) 2001, 2002, 2005 Christian Grothoff (and other contributing authors)
+ (C) 2001, 2002, 2005, 2006 Christian Grothoff (and other contributing
authors)
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
@@ -20,7 +20,7 @@
/**
- * @file conf/mconf.h
+ * @file setup/ncurses/mconf.h
* @brief GNUnet Setup
* @author Nils Durner
*/
Deleted: GNUnet/src/setup/ncurses/mconf_checklist.c
===================================================================
--- GNUnet/src/setup/ncurses/mconf_checklist.c 2006-09-06 00:22:25 UTC (rev
3365)
+++ GNUnet/src/setup/ncurses/mconf_checklist.c 2006-09-06 03:25:16 UTC (rev
3366)
@@ -1,376 +0,0 @@
-/*
- * checklist.c -- implements the checklist box
- *
- * ORIGINAL AUTHOR: Savio Lam (address@hidden)
- * Stuart Herbert - address@hidden: radiolist extension
- * Alessandro Rubini - address@hidden: merged the two
- * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (address@hidden)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-/**
- * @brief GNUnet Setup
- * @file conf/mconf_checklist.c
- * @author Savio Lam
- * @author Nils Durner
- */
-
-#include "mconf_dialog.h"
-
-static int list_width, check_x, item_x, checkflag;
-
-/*
- * Print list item
- */
-static void
-print_item (WINDOW * win, const char *item, int status,
- int choice, int selected)
-{
- int i;
-
- /* Clear 'residue' of last item */
- wattrset (win, menubox_attr);
- wmove (win, choice, 0);
- for (i = 0; i < list_width; i++)
- waddch (win, ' ');
-
- wmove (win, choice, check_x);
- wattrset (win, selected ? check_selected_attr : check_attr);
- if (checkflag == FLAG_CHECK)
- wprintw (win, "[%c]", status ? 'X' : ' ');
- else
- wprintw (win, "(%c)", status ? 'X' : ' ');
-
- wattrset (win, selected ? tag_selected_attr : tag_attr);
- mvwaddch(win, choice, item_x, item[0]);
- wattrset (win, selected ? item_selected_attr : item_attr);
- waddstr (win, (char *)item+1);
- if (selected) {
- wmove (win, choice, check_x+1);
- wrefresh (win);
- }
-}
-
-/*
- * Print the scroll indicators.
- */
-static void
-print_arrows (WINDOW * win, int choice, int item_no, int scroll,
- int y, int x, int height)
-{
- wmove(win, y, x);
-
- if (scroll > 0) {
- wattrset (win, uarrow_attr);
- waddch (win, ACS_UARROW);
- waddstr (win, "(-)");
- }
- else {
- wattrset (win, menubox_attr);
- waddch (win, ACS_HLINE);
- waddch (win, ACS_HLINE);
- waddch (win, ACS_HLINE);
- waddch (win, ACS_HLINE);
- }
-
- y = y + height + 1;
- wmove(win, y, x);
-
- if ((height < item_no) && (scroll + choice < item_no - 1)) {
- wattrset (win, darrow_attr);
- waddch (win, ACS_DARROW);
- waddstr (win, "(+)");
- }
- else {
- wattrset (win, menubox_border_attr);
- waddch (win, ACS_HLINE);
- waddch (win, ACS_HLINE);
- waddch (win, ACS_HLINE);
- waddch (win, ACS_HLINE);
- }
-}
-
-/*
- * Display the termination buttons
- */
-static void
-print_buttons( WINDOW *dialog, int height, int width, int selected)
-{
- int x = width / 2 - 11;
- int y = height - 2;
-
- print_button (dialog, "Select", y, x, selected == 0);
- print_button (dialog, " Help ", y, x + 14, selected == 1);
-
- wmove(dialog, y, x+1 + 14*selected);
- wrefresh (dialog);
-}
-
-/*
- * Display a dialog box with a list of options that can be turned on or off
- * The `flag' parameter is used to select between radiolist and checklist.
- */
-int
-dialog_checklist (const char *title, const char *prompt, int height, int width,
- int list_height, int item_no, struct dialog_list_item **items, int flag)
-
-{
- int i, x, y, box_x, box_y;
- int key = 0, button = 0, choice = 0, scroll_i = 0, max_choice, *status;
- WINDOW *dialog, *list;
-
- checkflag = flag;
-
- /* Allocate space for storing item on/off status */
- if ((status = malloc (sizeof (int) * item_no)) == NULL) {
- endwin ();
- fprintf (stderr,
- "\nCan't allocate memory in dialog_checklist().\n");
- exit (-1);
- }
-
- /* Initializes status */
- for (i = 0; i < item_no; i++) {
- status[i] = items[i]->selected;
- if (!choice && status[i])
- choice = i;
- }
-
- max_choice = GNUNET_MIN (list_height, item_no);
-
- /* center dialog box on screen */
- x = (COLS - width) / 2;
- y = (LINES - height) / 2;
-
- draw_shadow (stdscr, y, x, height, width);
-
- dialog = newwin (height, width, y, x);
- keypad (dialog, TRUE);
-
- draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr);
- wattrset (dialog, border_attr);
- mvwaddch (dialog, height-3, 0, ACS_LTEE);
- for (i = 0; i < width - 2; i++)
- waddch (dialog, ACS_HLINE);
- wattrset (dialog, dialog_attr);
- waddch (dialog, ACS_RTEE);
-
- if (title != NULL && (int)strlen(title) >= width-2 ) {
- /* truncate long title -- mec */
- char * title2 = malloc(width-2+1);
- memcpy( title2, title, width-2 );
- title2[width-2] = '\0';
- title = title2;
- }
-
- if (title != NULL) {
- wattrset (dialog, title_attr);
- mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
- waddstr (dialog, (char *)title);
- waddch (dialog, ' ');
- }
-
- wattrset (dialog, dialog_attr);
- print_autowrap (dialog, prompt, width - 2, 1, 3);
-
- list_width = width - 6;
- box_y = height - list_height - 5;
- box_x = (width - list_width) / 2 - 1;
-
- /* create new window for the list */
- list = subwin (dialog, list_height, list_width, y+box_y+1, x+box_x+1);
-
- keypad (list, TRUE);
-
- /* draw a box around the list items */
- draw_box (dialog, box_y, box_x, list_height + 2, list_width + 2,
- menubox_border_attr, menubox_attr);
-
- /* Find length of longest item in order to center checklist */
- check_x = 0;
- for (i = 0; i < item_no; i++)
- check_x = GNUNET_MAX (check_x, + (int) strlen (items[i]->name) + 4);
-
- check_x = (list_width - check_x) / 2;
- item_x = check_x + 4;
-
- if (choice >= list_height) {
- scroll_i = choice - list_height + 1;
- choice -= scroll_i;
- }
-
- /* Print the list */
- for (i = 0; i < max_choice; i++) {
- print_item (list, items[scroll_i + i]->name,
- status[i+scroll_i], i, i == choice);
- }
-
- print_arrows(dialog, choice, item_no, scroll_i,
- box_y, box_x + check_x + 5, list_height);
-
- print_buttons(dialog, height, width, 0);
-
- wnoutrefresh (list);
- wnoutrefresh (dialog);
- doupdate ();
-
- while (key != ESC) {
- key = wgetch (dialog);
-
- if (should_resize)
- do_resize_dialog();
-
- for (i = 0; i < max_choice; i++)
- if (toupper(key) == toupper(items[scroll_i + i]->name[i]))
- break;
-
-
- if ( i < max_choice || key == KEY_UP || key == KEY_DOWN ||
- key == '+' || key == '-' ) {
- if (key == KEY_UP || key == '-') {
- if (!choice) {
- if (!scroll_i)
- continue;
- /* Scroll list down */
- if (list_height > 1) {
- /* De-highlight current first item */
- print_item (list, items[scroll_i]->name,
- status[scroll_i], 0, FALSE);
- scrollok (list, TRUE);
- wscrl (list, -1);
- scrollok (list, FALSE);
- }
- scroll_i--;
- print_item (list, items[scroll_i]->name,
- status[scroll_i], 0, TRUE);
- wnoutrefresh (list);
-
- print_arrows(dialog, choice, item_no, scroll_i,
- box_y, box_x + check_x + 5, list_height);
-
- wrefresh (dialog);
-
- continue; /* wait for another key press */
- } else
- i = choice - 1;
- } else if (key == KEY_DOWN || key == '+') {
- if (choice == max_choice - 1) {
- if (scroll_i + choice >= item_no - 1)
- continue;
- /* Scroll list up */
- if (list_height > 1) {
- /* De-highlight current last item before scrolling up */
- print_item (list, items[scroll_i + max_choice -
1]->name,
- status[scroll_i + max_choice - 1],
- max_choice - 1, FALSE);
- scrollok (list, TRUE);
- scroll (list);
- scrollok (list, FALSE);
- }
- scroll_i++;
- print_item (list, items[scroll_i + max_choice - 1]->name,
- status[scroll_i + max_choice - 1],
- max_choice - 1, TRUE);
- wnoutrefresh (list);
-
- print_arrows(dialog, choice, item_no, scroll_i,
- box_y, box_x + check_x + 5, list_height);
-
- wrefresh (dialog);
-
- continue; /* wait for another key press */
- } else
- i = choice + 1;
- }
- if (i != choice) {
- /* De-highlight current item */
- print_item (list, items[scroll_i + choice]->name,
- status[scroll_i + choice], choice, FALSE);
- /* Highlight new item */
- choice = i;
- print_item (list, items[scroll_i + choice]->name,
- status[scroll_i + choice], choice, TRUE);
- wnoutrefresh (list);
- wrefresh (dialog);
- }
- continue; /* wait for another key press */
- }
- switch (key) {
- case 'H':
- case 'h':
- case '?':
- delwin (dialog);
- free (status);
- return 1;
- case TAB:
- case KEY_LEFT:
- case KEY_RIGHT:
- button = ((key == KEY_LEFT ? --button : ++button) < 0)
- ? 1 : (button > 1 ? 0 : button);
-
- print_buttons(dialog, height, width, button);
- wrefresh (dialog);
- break;
-#ifdef KEY_RESIZE
- case KEY_RESIZE:
- button = -2;
-#endif
- case 'S':
- case 's':
- case ' ':
- case '\n':
- if (!button) {
- if (flag == FLAG_CHECK) {
- status[scroll_i + choice] = !status[scroll_i + choice];
- wmove (list, choice, check_x);
- wattrset (list, check_selected_attr);
- wprintw (list, "[%c]", status[scroll_i + choice] ? 'X' : '
');
- } else {
- if (!status[scroll_i + choice]) {
- for (i = 0; i < item_no; i++)
- status[i] = 0;
- status[scroll_i + choice] = 1;
- for (i = 0; i < max_choice; i++)
- print_item (list, items[scroll_i + i]->name,
- status[scroll_i + i], i, i == choice);
- }
- }
- wnoutrefresh (list);
- wrefresh (dialog);
-
- for (i = 0; i < item_no; i++) {
- items[i]->selected = status[i];
- }
- }
- delwin (dialog);
- free (status);
- return button;
- case 'X':
- case 'x':
- key = ESC;
- case ESC:
- break;
- }
-
- /* Now, update everything... */
- doupdate ();
- }
-
-
- delwin (dialog);
- free (status);
- return -1; /* ESC pressed */
-}
Deleted: GNUnet/src/setup/ncurses/mconf_colors.h
===================================================================
--- GNUnet/src/setup/ncurses/mconf_colors.h 2006-09-06 00:22:25 UTC (rev
3365)
+++ GNUnet/src/setup/ncurses/mconf_colors.h 2006-09-06 03:25:16 UTC (rev
3366)
@@ -1,167 +0,0 @@
-/*
- * colors.h -- color attribute definitions
- *
- * AUTHOR: Savio Lam (address@hidden)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-/**
- * @brief GNUnet Setup
- * @file conf/mconf_colors.h
- * @author Savio Lam
- * @author Nils Durner
- **/
-
-/*
- * Default color definitions
- *
- * *_FG = foreground
- * *_BG = background
- * *_HL = highlight?
- */
-#define SCREEN_FG COLOR_CYAN
-#define SCREEN_BG COLOR_BLUE
-#define SCREEN_HL TRUE
-
-#define SHADOW_FG COLOR_BLACK
-#define SHADOW_BG COLOR_BLACK
-#define SHADOW_HL TRUE
-
-#define DIALOG_FG COLOR_BLACK
-#define DIALOG_BG COLOR_WHITE
-#define DIALOG_HL FALSE
-
-#define TITLE_FG COLOR_YELLOW
-#define TITLE_BG COLOR_WHITE
-#define TITLE_HL TRUE
-
-#define BORDER_FG COLOR_WHITE
-#define BORDER_BG COLOR_WHITE
-#define BORDER_HL TRUE
-
-#define BUTTON_ACTIVE_FG COLOR_WHITE
-#define BUTTON_ACTIVE_BG COLOR_BLUE
-#define BUTTON_ACTIVE_HL TRUE
-
-#define BUTTON_INACTIVE_FG COLOR_BLACK
-#define BUTTON_INACTIVE_BG COLOR_WHITE
-#define BUTTON_INACTIVE_HL FALSE
-
-#define BUTTON_KEY_ACTIVE_FG COLOR_WHITE
-#define BUTTON_KEY_ACTIVE_BG COLOR_BLUE
-#define BUTTON_KEY_ACTIVE_HL TRUE
-
-#define BUTTON_KEY_INACTIVE_FG COLOR_RED
-#define BUTTON_KEY_INACTIVE_BG COLOR_WHITE
-#define BUTTON_KEY_INACTIVE_HL FALSE
-
-#define BUTTON_LABEL_ACTIVE_FG COLOR_YELLOW
-#define BUTTON_LABEL_ACTIVE_BG COLOR_BLUE
-#define BUTTON_LABEL_ACTIVE_HL TRUE
-
-#define BUTTON_LABEL_INACTIVE_FG COLOR_BLACK
-#define BUTTON_LABEL_INACTIVE_BG COLOR_WHITE
-#define BUTTON_LABEL_INACTIVE_HL TRUE
-
-#define INPUTBOX_FG COLOR_BLACK
-#define INPUTBOX_BG COLOR_WHITE
-#define INPUTBOX_HL FALSE
-
-#define INPUTBOX_BORDER_FG COLOR_BLACK
-#define INPUTBOX_BORDER_BG COLOR_WHITE
-#define INPUTBOX_BORDER_HL FALSE
-
-#define SEARCHBOX_FG COLOR_BLACK
-#define SEARCHBOX_BG COLOR_WHITE
-#define SEARCHBOX_HL FALSE
-
-#define SEARCHBOX_TITLE_FG COLOR_YELLOW
-#define SEARCHBOX_TITLE_BG COLOR_WHITE
-#define SEARCHBOX_TITLE_HL TRUE
-
-#define SEARCHBOX_BORDER_FG COLOR_WHITE
-#define SEARCHBOX_BORDER_BG COLOR_WHITE
-#define SEARCHBOX_BORDER_HL TRUE
-
-#define POSITION_INDICATOR_FG COLOR_YELLOW
-#define POSITION_INDICATOR_BG COLOR_WHITE
-#define POSITION_INDICATOR_HL TRUE
-
-#define MENUBOX_FG COLOR_BLACK
-#define MENUBOX_BG COLOR_WHITE
-#define MENUBOX_HL FALSE
-
-#define MENUBOX_BORDER_FG COLOR_WHITE
-#define MENUBOX_BORDER_BG COLOR_WHITE
-#define MENUBOX_BORDER_HL TRUE
-
-#define ITEM_FG COLOR_BLACK
-#define ITEM_BG COLOR_WHITE
-#define ITEM_HL FALSE
-
-#define ITEM_SELECTED_FG COLOR_WHITE
-#define ITEM_SELECTED_BG COLOR_BLUE
-#define ITEM_SELECTED_HL TRUE
-
-#define TAG_FG COLOR_YELLOW
-#define TAG_BG COLOR_WHITE
-#define TAG_HL TRUE
-
-#define TAG_SELECTED_FG COLOR_YELLOW
-#define TAG_SELECTED_BG COLOR_BLUE
-#define TAG_SELECTED_HL TRUE
-
-#define TAG_KEY_FG COLOR_YELLOW
-#define TAG_KEY_BG COLOR_WHITE
-#define TAG_KEY_HL TRUE
-
-#define TAG_KEY_SELECTED_FG COLOR_YELLOW
-#define TAG_KEY_SELECTED_BG COLOR_BLUE
-#define TAG_KEY_SELECTED_HL TRUE
-
-#define CHECK_FG COLOR_BLACK
-#define CHECK_BG COLOR_WHITE
-#define CHECK_HL FALSE
-
-#define CHECK_SELECTED_FG COLOR_WHITE
-#define CHECK_SELECTED_BG COLOR_BLUE
-#define CHECK_SELECTED_HL TRUE
-
-#define UARROW_FG COLOR_GREEN
-#define UARROW_BG COLOR_WHITE
-#define UARROW_HL TRUE
-
-#define DARROW_FG COLOR_GREEN
-#define DARROW_BG COLOR_WHITE
-#define DARROW_HL TRUE
-
-/* End of default color definitions */
-
-#define C_ATTR(x,y) ((x ? A_BOLD : 0) | COLOR_PAIR((y)))
-#define COLOR_NAME_LEN 10
-#define COLOR_COUNT 8
-
-/*
- * Global variables
- */
-
-typedef struct {
- char name[COLOR_NAME_LEN];
- int value;
-} color_names_st;
-
-extern color_names_st color_names[];
-extern int color_table[][3];
Deleted: GNUnet/src/setup/ncurses/mconf_dialog.h
===================================================================
--- GNUnet/src/setup/ncurses/mconf_dialog.h 2006-09-06 00:22:25 UTC (rev
3365)
+++ GNUnet/src/setup/ncurses/mconf_dialog.h 2006-09-06 03:25:16 UTC (rev
3366)
@@ -1,217 +0,0 @@
-
-/*
- * dialog.h -- common declarations for all dialog modules
- *
- * AUTHOR: Savio Lam (address@hidden)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-/**
- * @brief GNUnet Setup
- * @file conf/mconf_dialog.h
- * @author Savio Lam
- * @author Nils Durner
- **/
-
-#include <sys/types.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "platform.h"
-#include "bool.h"
-
-#ifdef CURSES_LOC
- #include CURSES_LOC
-#endif
-
-#if 1
-
-/*
- * Colors in ncurses 1.9.9e do not work properly since foreground and
- * background colors are OR'd rather than separately masked. This version
- * of dialog was hacked to work with ncurses 1.9.9e, making it incompatible
- * with standard curses. The simplest fix (to make this work with standard
- * curses) uses the wbkgdset() function, not used in the original hack.
- * Turn it off if we're building with 1.9.9e, since it just confuses things.
- */
-#if defined(NCURSES_VERSION) && defined(_NEED_WRAP) && !defined(GCC_PRINTFLIKE)
-#define OLD_NCURSES 1
-#undef wbkgdset
-#define wbkgdset(w,p) /*nothing*/
-#else
-#define OLD_NCURSES 0
-#endif
-
-#define TR(params) _tracef params
-
-#define ESC 27
-#define TAB 9
-#define MAX_LEN 2048
-#define BUF_SIZE (10*1024)
-#define GNUNET_MIN(x,y) (x < y ? x : y)
-#define GNUNET_MAX(x,y) (x > y ? x : y)
-
-
-#ifndef ACS_ULCORNER
-#define ACS_ULCORNER '+'
-#endif
-#ifndef ACS_LLCORNER
-#define ACS_LLCORNER '+'
-#endif
-#ifndef ACS_URCORNER
-#define ACS_URCORNER '+'
-#endif
-#ifndef ACS_LRCORNER
-#define ACS_LRCORNER '+'
-#endif
-#ifndef ACS_HLINE
-#define ACS_HLINE '-'
-#endif
-#ifndef ACS_VLINE
-#define ACS_VLINE '|'
-#endif
-#ifndef ACS_LTEE
-#define ACS_LTEE '+'
-#endif
-#ifndef ACS_RTEE
-#define ACS_RTEE '+'
-#endif
-#ifndef ACS_UARROW
-#define ACS_UARROW '^'
-#endif
-#ifndef ACS_DARROW
-#define ACS_DARROW 'v'
-#endif
-
-/*
- * Attribute names
- */
-#define screen_attr attributes[0]
-#define shadow_attr attributes[1]
-#define dialog_attr attributes[2]
-#define title_attr attributes[3]
-#define border_attr attributes[4]
-#define button_active_attr attributes[5]
-#define button_inactive_attr attributes[6]
-#define button_key_active_attr attributes[7]
-#define button_key_inactive_attr attributes[8]
-#define button_label_active_attr attributes[9]
-#define button_label_inactive_attr attributes[10]
-#define inputbox_attr attributes[11]
-#define inputbox_border_attr attributes[12]
-#define searchbox_attr attributes[13]
-#define searchbox_title_attr attributes[14]
-#define searchbox_border_attr attributes[15]
-#define position_indicator_attr attributes[16]
-#define menubox_attr attributes[17]
-#define menubox_border_attr attributes[18]
-#define item_attr attributes[19]
-#define item_selected_attr attributes[20]
-#define tag_attr attributes[21]
-#define tag_selected_attr attributes[22]
-#define tag_key_attr attributes[23]
-#define tag_key_selected_attr attributes[24]
-#define check_attr attributes[25]
-#define check_selected_attr attributes[26]
-#define uarrow_attr attributes[27]
-#define darrow_attr attributes[28]
-
-/* number of attributes */
-#define ATTRIBUTE_COUNT 29
-
-/*
- * Global variables
- */
-extern bool use_colors;
-extern bool should_resize;
-
-extern chtype attributes[];
-#endif
-
-extern char *backtitle;
-
-struct dialog_list_item {
- char *name;
- int namelen;
- char type;
- void *data;
- int selected; /* Set to 1 by dialog_*() function. */
-};
-
-/*
- * Function prototypes
- */
-
-void init_dialog (void);
-void init_wsize(void);
-void end_dialog (void);
-void resize_dialog(int rows, int cols);
-void do_resize_dialog(void);
-void dialog_clear (void);
-#ifdef CURSES_LOC
-void attr_clear (WINDOW * win, int height, int width, chtype attr);
-void color_setup (void);
-void print_autowrap (WINDOW * win, const char *prompt, int width, int y, int
x);
-void print_button (WINDOW * win, const char *label, int y, int x, int
selected);
-void draw_box (WINDOW * win, int y, int x, int height, int width, chtype box,
- chtype border);
-void draw_shadow (WINDOW * win, int y, int x, int height, int width);
-#endif
-
-int first_alpha (const char *string, const char *exempt);
-int dialog_yesno (const char *title, const char *prompt, int height, int
width);
-int dialog_msgbox (const char *title, const char *prompt, int height,
- int width, int pause);
-int dialog_textbox (const char *title, const char *file, int height, int
width);
-int dialog_menu (const char *title, const char *prompt, int height, int width,
- int menu_height, const char choice_type, const void *choice_ptr,
- int item_no, struct dialog_list_item **items);
-int dialog_checklist (const char *title, const char *prompt, int height,
- int width, int list_height, int item_no,
- struct dialog_list_item **items, int flag);
-extern char dialog_input_result[];
-int dialog_inputbox (const char *title, const char *prompt, int height,
- int width, const char *init);
-
-struct dialog_list_item *first_sel_item(int item_no,
- struct dialog_list_item **items);
-
-void show_textbox(const char *title, const char *text, int r, int c);
-void show_helptext(const char *title, const char *text);
-
-/*
- * This is the base for fictitious keys, which activate
- * the buttons.
- *
- * Mouse-generated keys are the following:
- * -- the first 32 are used as numbers, in addition to '0'-'9'
- * -- the lowercase are used to signal mouse-enter events (M_EVENT + 'o')
- * -- uppercase chars are used to invoke the button (M_EVENT + 'O')
- */
-#ifdef CURSES_LOC
-#define M_EVENT (KEY_MAX+1)
-#endif
-
-
-/*
- * The `flag' parameter in checklist is used to select between
- * radiolist and checklist
- */
-#define FLAG_CHECK 1
-#define FLAG_RADIO 0
Deleted: GNUnet/src/setup/ncurses/mconf_inputbox.c
===================================================================
--- GNUnet/src/setup/ncurses/mconf_inputbox.c 2006-09-06 00:22:25 UTC (rev
3365)
+++ GNUnet/src/setup/ncurses/mconf_inputbox.c 2006-09-06 03:25:16 UTC (rev
3366)
@@ -1,257 +0,0 @@
-/*
- * inputbox.c -- implements the input box
- *
- * ORIGINAL AUTHOR: Savio Lam (address@hidden)
- * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (address@hidden)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-/**
- * @brief GNUnet Setup
- * @file conf/mconf_inputbox.c
- * @author Savio Lam
- * @author Nils Durner
- */
-
-#include "mconf_dialog.h"
-
-char dialog_input_result[MAX_LEN + 1];
-
-/*
- * Print the termination buttons
- */
-static void
-print_buttons(WINDOW *dialog, int height, int width, int selected)
-{
- int x = width / 2 - 11;
- int y = height - 2;
-
- print_button (dialog, " Ok ", y, x, selected==0);
- print_button (dialog, " Help ", y, x + 14, selected==1);
-
- wmove(dialog, y, x+1+14*selected);
- wrefresh(dialog);
-}
-
-/*
- * Display a dialog box for inputing a string
- */
-int
-dialog_inputbox (const char *title, const char *prompt, int height, int width,
- const char *init)
-{
- int i, x, y, box_y, box_x, box_width;
- int input_x = 0, scroll = 0, key = 0, button = -1;
- char *instr = dialog_input_result;
- WINDOW *dialog;
-
- /* center dialog box on screen */
- x = (COLS - width) / 2;
- y = (LINES - height) / 2;
-
-
- draw_shadow (stdscr, y, x, height, width);
-
- dialog = newwin (height, width, y, x);
- keypad (dialog, TRUE);
-
- draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr);
- wattrset (dialog, border_attr);
- mvwaddch (dialog, height-3, 0, ACS_LTEE);
- for (i = 0; i < width - 2; i++)
- waddch (dialog, ACS_HLINE);
- wattrset (dialog, dialog_attr);
- waddch (dialog, ACS_RTEE);
-
- if (title != NULL && strlen(title) >= (unsigned int) width-2 ) {
- /* truncate long title -- mec */
- char * title2 = malloc(width-2+1);
- memcpy( title2, title, width-2 );
- title2[width-2] = '\0';
- title = title2;
- }
-
- if (title != NULL) {
- wattrset (dialog, title_attr);
- mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
- waddstr (dialog, (char *)title);
- waddch (dialog, ' ');
- }
-
- wattrset (dialog, dialog_attr);
- print_autowrap (dialog, prompt, width - 2, 1, 3);
-
- /* Draw the input field box */
- box_width = width - 6;
- getyx (dialog, y, x);
- box_y = y + 2;
- box_x = (width - box_width) / 2;
- draw_box (dialog, y + 1, box_x - 1, 3, box_width + 2,
- border_attr, dialog_attr);
-
- print_buttons(dialog, height, width, 0);
-
- /* Set up the initial value */
- wmove (dialog, box_y, box_x);
- wattrset (dialog, inputbox_attr);
-
- if (!init)
- instr[0] = '\0';
- else
- strcpy (instr, init);
-
- input_x = strlen (instr);
-
- if (input_x >= box_width) {
- scroll = input_x - box_width + 1;
- input_x = box_width - 1;
- for (i = 0; i < box_width - 1; i++)
- waddch (dialog, instr[scroll + i]);
- } else
- waddstr (dialog, instr);
-
- wmove (dialog, box_y, box_x + input_x);
-
- wrefresh (dialog);
-
- while (key != ESC) {
- key = wgetch (dialog);
-
- if (should_resize)
- do_resize_dialog();
-
- if (button == -1) { /* Input box selected */
- switch (key) {
- case TAB:
- case KEY_UP:
- case KEY_DOWN:
- break;
- case KEY_LEFT:
- continue;
- case KEY_RIGHT:
- continue;
- case KEY_BACKSPACE:
- case 127:
-#ifdef MINGW
- case 8:
-#endif
- if (input_x || scroll) {
- wattrset (dialog, inputbox_attr);
- if (!input_x) {
- scroll = scroll < box_width - 1 ?
- 0 : scroll - (box_width - 1);
- wmove (dialog, box_y, box_x);
- for (i = 0; i < box_width; i++)
- waddch (dialog, instr[scroll + input_x + i] ?
- instr[scroll + input_x + i] : ' ');
- input_x = strlen (instr) - scroll;
- } else
- input_x--;
- instr[scroll + input_x] = '\0';
- mvwaddch (dialog, box_y, input_x + box_x, ' ');
- wmove (dialog, box_y, input_x + box_x);
- wrefresh (dialog);
- }
- continue;
- default:
- if (key < 0x100 && isprint (key)) {
- if (scroll + input_x < MAX_LEN) {
- wattrset (dialog, inputbox_attr);
- instr[scroll + input_x] = key;
- instr[scroll + input_x + 1] = '\0';
- if (input_x == box_width - 1) {
- scroll++;
- wmove (dialog, box_y, box_x);
- for (i = 0; i < box_width - 1; i++)
- waddch (dialog, instr[scroll + i]);
- } else {
- wmove (dialog, box_y, input_x++ + box_x);
- waddch (dialog, key);
- }
- wrefresh (dialog);
- } else
- flash (); /* Alarm user about overflow */
- continue;
- }
- }
- }
- switch (key) {
- case 'O':
- case 'o':
- delwin (dialog);
- return 0;
- case 'H':
- case 'h':
- delwin (dialog);
- return 1;
- case KEY_UP:
- case KEY_LEFT:
- switch (button) {
- case -1:
- button = 1; /* Indicates "Cancel" button is selected */
- print_buttons(dialog, height, width, 1);
- break;
- case 0:
- button = -1; /* Indicates input box is selected */
- print_buttons(dialog, height, width, 0);
- wmove (dialog, box_y, box_x + input_x);
- wrefresh (dialog);
- break;
- case 1:
- button = 0; /* Indicates "OK" button is selected */
- print_buttons(dialog, height, width, 0);
- break;
- }
- break;
- case TAB:
- case KEY_DOWN:
- case KEY_RIGHT:
- switch (button) {
- case -1:
- button = 0; /* Indicates "OK" button is selected */
- print_buttons(dialog, height, width, 0);
- break;
- case 0:
- button = 1; /* Indicates "Cancel" button is selected */
- print_buttons(dialog, height, width, 1);
- break;
- case 1:
- button = -1; /* Indicates input box is selected */
- print_buttons(dialog, height, width, 0);
- wmove (dialog, box_y, box_x + input_x);
- wrefresh (dialog);
- break;
- }
- break;
-#ifdef KEY_RESIZE
- case KEY_RESIZE:
- button = -2;
-#endif
- case ' ':
- case '\n':
- delwin (dialog);
- return (button == -1 ? 0 : button);
- case 'X':
- case 'x':
- key = ESC;
- case ESC:
- break;
- }
- }
-
- delwin (dialog);
- return -1; /* ESC pressed */
-}
Deleted: GNUnet/src/setup/ncurses/mconf_menubox.c
===================================================================
--- GNUnet/src/setup/ncurses/mconf_menubox.c 2006-09-06 00:22:25 UTC (rev
3365)
+++ GNUnet/src/setup/ncurses/mconf_menubox.c 2006-09-06 03:25:16 UTC (rev
3366)
@@ -1,450 +0,0 @@
-/*
- * menubox.c -- implements the menu box
- *
- * ORIGINAL AUTHOR: Savio Lam (address@hidden)
- * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (address@hidden)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-/*
- * Changes by Clifford Wolf (address@hidden)
- *
- * [ 1998-06-13 ]
- *
- * *) A bugfix for the Page-Down problem
- *
- * *) Formerly when I used Page Down and Page Up, the cursor would be set
- * to the first position in the menu box. Now lxdialog is a bit
- * smarter and works more like other menu systems (just have a look at
- * it).
- *
- * *) Formerly if I selected something my scrolling would be broken because
- * lxdialog is re-invoked by the Menuconfig shell script, can't
- * remember the last scrolling position, and just sets it so that the
- * cursor is at the bottom of the box. Now it writes the temporary file
- * lxdialog.scrltmp which contains this information. The file is
- * deleted by lxdialog if the user leaves a submenu or enters a new
- * one, but it would be nice if Menuconfig could make another "rm -f"
- * just to be sure. Just try it out - you will recognise a difference!
- *
- * [ 1998-06-14 ]
- *
- * *) Now lxdialog is crash-safe against broken "lxdialog.scrltmp" files
- * and menus change their size on the fly.
- *
- * *) If for some reason the last scrolling position is not saved by
- * lxdialog, it sets the scrolling so that the selected item is in the
- * middle of the menu box, not at the bottom.
- *
- * 02 January 1999, Michael Elizabeth Chastain (address@hidden)
- * Reset 'scroll' to 0 if the value from lxdialog.scrltmp is bogus.
- * This fixes a bug in Menuconfig where using ' ' to descend into menus
- * would leave mis-synchronized lxdialog.scrltmp files lying around,
- * fscanf would read in 'scroll', and eventually that value would get used.
- */
-
-/**
- * @brief GNUnet Setup
- * @file conf/mconf_menubox.c
- * @author Savio Lam
- * @author Nils Durner
- */
-
-#include "mconf_dialog.h"
-
-static int menu_width, item_x;
-
-/*
- * Print menu item
- */
-static void
-print_item (WINDOW * win, const char *item, int choice, int selected, int
hotkey)
-{
- int j;
- char menu_item[menu_width+1];
-
- strncpy(menu_item, item, menu_width);
- menu_item[menu_width] = 0;
- j = first_alpha(menu_item, "YyNnMm");
-
- /* Clear 'residue' of last item */
- wattrset (win, menubox_attr);
- wmove (win, choice, 0);
-#if OLD_NCURSES
- {
- int i;
- for (i = 0; i < menu_width; i++)
- waddch (win, ' ');
- }
-#else
- wclrtoeol(win);
-#endif
- wattrset (win, selected ? item_selected_attr : item_attr);
- mvwaddstr (win, choice, item_x, menu_item);
- if (hotkey) {
- wattrset (win, selected ? tag_key_selected_attr : tag_key_attr);
- mvwaddch(win, choice, item_x+j, menu_item[j]);
- }
- if (selected) {
- wmove (win, choice, item_x+1);
- wnoutrefresh (win);
- }
-}
-
-/*
- * Print the scroll indicators.
- */
-static void
-print_arrows (WINDOW * win, int item_no, int scroll,
- int y, int x, int height)
-{
- int cur_y, cur_x;
-
- getyx(win, cur_y, cur_x);
-
- wmove(win, y, x);
-
- if (scroll > 0) {
- wattrset (win, uarrow_attr);
- waddch (win, ACS_UARROW);
- waddstr (win, "(-)");
- }
- else {
- wattrset (win, menubox_attr);
- waddch (win, ACS_HLINE);
- waddch (win, ACS_HLINE);
- waddch (win, ACS_HLINE);
- waddch (win, ACS_HLINE);
- }
-
- y = y + height + 1;
- wmove(win, y, x);
-
- if ((height < item_no) && (scroll + height < item_no)) {
- wattrset (win, darrow_attr);
- waddch (win, ACS_DARROW);
- waddstr (win, "(+)");
- }
- else {
- wattrset (win, menubox_border_attr);
- waddch (win, ACS_HLINE);
- waddch (win, ACS_HLINE);
- waddch (win, ACS_HLINE);
- waddch (win, ACS_HLINE);
- }
-
- wmove(win, cur_y, cur_x);
-}
-
-/*
- * Display the termination buttons.
- */
-static void
-print_buttons (WINDOW *win, int height, int width, int selected)
-{
- int x = width / 2 - 16;
- int y = height - 2;
-
- print_button (win, "Select", y, x, selected == 0);
- print_button (win, " Exit ", y, x + 12, selected == 1);
- print_button (win, " Help ", y, x + 24, selected == 2);
-
- wmove(win, y, x+1+12*selected);
- wrefresh (win);
-}
-
-/*
- * Display a menu for choosing among a number of options
- */
-int
-dialog_menu (const char *title, const char *prompt, int height, int width,
- int menu_height, const char choice_type, const void *choice_ptr,
- int item_no, struct dialog_list_item ** items)
-{
- int i, j, x, y, box_x, box_y;
- int key = 0, button = 0, scroll_i = 0, choice = 0, first_item = 0,
max_choice;
- WINDOW *dialog, *menu;
- FILE *f;
-
- max_choice = GNUNET_MIN (menu_height, item_no);
-
- /* center dialog box on screen */
- x = (COLS - width) / 2;
- y = (LINES - height) / 2;
-
- draw_shadow (stdscr, y, x, height, width);
-
- dialog = newwin (height, width, y, x);
- keypad (dialog, TRUE);
-
- draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr);
- wattrset (dialog, border_attr);
- mvwaddch (dialog, height - 3, 0, ACS_LTEE);
- for (i = 0; i < width - 2; i++)
- waddch (dialog, ACS_HLINE);
- wattrset (dialog, dialog_attr);
- wbkgdset (dialog, dialog_attr & A_COLOR);
- waddch (dialog, ACS_RTEE);
-
- if (title != NULL && (int) strlen(title) >= width-2 ) {
- /* truncate long title -- mec */
- char * title2 = malloc(width-2+1);
- memcpy( title2, title, width-2 );
- title2[width-2] = '\0';
- title = title2;
- }
-
- if (title != NULL) {
- wattrset (dialog, title_attr);
- mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
- waddstr (dialog, (char *)title);
- waddch (dialog, ' ');
- }
-
- wattrset (dialog, dialog_attr);
- print_autowrap (dialog, prompt, width - 2, 1, 3);
-
- menu_width = width - 6;
- box_y = height - menu_height - 5;
- box_x = (width - menu_width) / 2 - 1;
-
- /* create new window for the menu */
- menu = subwin (dialog, menu_height, menu_width,
- y + box_y + 1, x + box_x + 1);
- keypad (menu, TRUE);
-
- /* draw a box around the menu items */
- draw_box (dialog, box_y, box_x, menu_height + 2, menu_width + 2,
- menubox_border_attr, menubox_attr);
-
- /*
- * Find length of longest item in order to center menu.
- * Set 'choice' to default item.
- */
- item_x = 0;
- for (i = 0; i < item_no; i++) {
- item_x = GNUNET_MAX (item_x, GNUNET_MIN(menu_width, (int) strlen
(items[i]->name) + 2));
- if (choice_type == items[i]->type && choice_ptr == items[i]->data)
- choice = i;
- }
-
- item_x = (menu_width - item_x) / 2;
-
- /* get the scroll info from the temp file */
- if ( (f=FOPEN("/tmp/lxdialog.scrltmp","r")) != NULL ) {
- if ( (fscanf(f,"%d\n",&scroll_i) == 1) && (scroll_i <= choice) &&
- (scroll_i+max_choice > choice) && (scroll_i >= 0) &&
- (scroll_i+max_choice <= item_no) ) {
- first_item = scroll_i;
- choice = choice - scroll_i;
- fclose(f);
- } else {
- scroll_i=0;
- REMOVE("/tmp/lxdialog.scrltmp");
- fclose(f);
- f=NULL;
- }
- }
- if ( (choice >= max_choice) || (f==NULL && choice >= max_choice/2) ) {
- if (choice >= item_no-max_choice/2)
- scroll_i = first_item = item_no-max_choice;
- else
- scroll_i = first_item = choice - max_choice/2;
- choice = choice - scroll_i;
- }
-
- /* Print the menu */
- for (i=0; i < max_choice; i++) {
- print_item (menu, items[first_item + i]->name, i, i == choice,
- (items[first_item + i]->type != ':'));
- }
-
- wnoutrefresh (menu);
-
- print_arrows(dialog, item_no, scroll_i,
- box_y, box_x+item_x+1, menu_height);
-
- print_buttons (dialog, height, width, 0);
- wmove (menu, choice, item_x+1);
- wrefresh (menu);
-
- while (key != ESC) {
- key = wgetch(menu);
-
- if (should_resize)
- do_resize_dialog();
-
- if (key < 256 && isalpha(key)) key = tolower(key);
-
- if (strchr("ynm", key))
- i = max_choice;
- else {
- for (i = choice+1; i < max_choice; i++) {
- j = first_alpha(items[scroll_i+i]->name, "YyNnMm");
- if (key == tolower(items[scroll_i+i]->name[j]))
- break;
- }
- if (i == max_choice)
- for (i = 0; i < max_choice; i++) {
- j = first_alpha(items[scroll_i+i]->name, "YyNnMm");
- if (key == tolower(items[scroll_i+i]->name[j]))
- break;
- }
- }
-
- if (i < max_choice ||
- key == KEY_UP || key == KEY_DOWN ||
- key == '-' || key == '+' ||
- key == KEY_PPAGE || key == KEY_NPAGE) {
-
- print_item (menu, items[scroll_i+choice]->name, choice, FALSE,
- (items[scroll_i+choice]->type != ':'));
-
- if (key == KEY_UP || key == '-') {
- if (choice < 2 && scroll_i) {
- /* Scroll menu down */
- scrollok (menu, TRUE);
- wscrl (menu, -1);
- scrollok (menu, FALSE);
-
- scroll_i--;
-
- print_item (menu, items[scroll_i]->name, 0, FALSE,
- (items[scroll_i]->type != ':'));
- } else
- choice = GNUNET_MAX(choice - 1, 0);
-
- } else if (key == KEY_DOWN || key == '+') {
-
- print_item (menu, items[scroll_i+choice]->name, choice, FALSE,
- (items[scroll_i+choice]->type != ':'));
-
- if ((choice > max_choice-3) &&
- (scroll_i + max_choice < item_no)
- ) {
- /* Scroll menu up */
- scrollok (menu, TRUE);
- scroll (menu);
- scrollok (menu, FALSE);
-
- scroll_i++;
-
- print_item (menu, items[scroll_i + max_choice - 1]->name,
- max_choice-1, FALSE,
- (items[scroll_i + max_choice - 1]->type !=
':'));
- } else
- choice = GNUNET_MIN(choice+1, max_choice-1);
-
- } else if (key == KEY_PPAGE) {
- scrollok (menu, TRUE);
- for (i=0; (i < max_choice); i++) {
- if (scroll_i > 0) {
- wscrl (menu, -1);
- scroll_i--;
- print_item (menu, items[scroll_i]->name, 0, FALSE,
- (items[scroll_i]->type != ':'));
- } else {
- if (choice > 0)
- choice--;
- }
- }
- scrollok (menu, FALSE);
-
- } else if (key == KEY_NPAGE) {
- for (i=0; (i < max_choice); i++) {
- if (scroll_i+max_choice < item_no) {
- scrollok (menu, TRUE);
- scroll(menu);
- scrollok (menu, FALSE);
- scroll_i++;
- print_item (menu, items[scroll_i + max_choice -
1]->name,
- max_choice-1, FALSE,
- (items[scroll_i + max_choice - 1]->type !=
':'));
- } else {
- if (choice+1 < max_choice)
- choice++;
- }
- }
-
- } else
- choice = i;
-
- print_item (menu, items[scroll_i + choice]->name, choice, TRUE,
- (items[scroll_i + choice]->type != ':'));
-
- print_arrows(dialog, item_no, scroll_i,
- box_y, box_x+item_x+1, menu_height);
-
- wnoutrefresh (dialog);
- wrefresh (menu);
-
- continue; /* wait for another key press */
- }
-
- switch (key) {
- case KEY_LEFT:
- case TAB:
- case KEY_RIGHT:
- button = ((key == KEY_LEFT ? --button : ++button) < 0)
- ? 2 : (button > 2 ? 0 : button);
-
- print_buttons(dialog, height, width, button);
- wrefresh (menu);
- break;
-#ifdef KEY_RESIZE
- case KEY_RESIZE:
-#endif
- case 's':
- case 'y':
- case 'n':
- case 'm':
- case ' ':
- /* save scroll info */
- if ( (f=FOPEN("/tmp/lxdialog.scrltmp","w")) != NULL ) {
- fprintf(f,"%d\n",scroll_i);
- fclose(f);
- }
- delwin (dialog);
- items[scroll_i + choice]->selected = 1;
- switch (key) {
- case 's': return 3;
- case 'y': return 3;
- case 'n': return 4;
- case 'm': return 5;
- case ' ': return 6;
- }
- return -2;
- case 'h':
- case '?':
- button = 2;
- case '\n':
- delwin (dialog);
- items[scroll_i + choice]->selected = 1;
-
- REMOVE("/tmp/lxdialog.scrltmp");
- return button;
- case 'e':
- case 'x':
- key = ESC;
- case ESC:
- break;
- }
- }
-
- delwin (dialog);
- REMOVE("/tmp/lxdialog.scrltmp");
- return -1; /* ESC pressed */
-}
Deleted: GNUnet/src/setup/ncurses/mconf_msgbox.c
===================================================================
--- GNUnet/src/setup/ncurses/mconf_msgbox.c 2006-09-06 00:22:25 UTC (rev
3365)
+++ GNUnet/src/setup/ncurses/mconf_msgbox.c 2006-09-06 03:25:16 UTC (rev
3366)
@@ -1,99 +0,0 @@
-/*
- * msgbox.c -- implements the message box and info box
- *
- * ORIGINAL AUTHOR: Savio Lam (address@hidden)
- * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (address@hidden)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-/**
- * @brief GNUnet Setup
- * @file conf/mconf_msgbox.c
- * @author Savio Lam
- * @author Nils Durner
- */
-
-#include "mconf_dialog.h"
-
-/*
- * Display a message box. Program will pause and display an "OK" button
- * if the parameter 'pause' is non-zero.
- */
-int
-dialog_msgbox (const char *title, const char *prompt, int height, int width,
- int pause)
-{
- int i, x, y, key = 0;
- WINDOW *dialog;
-
- /* center dialog box on screen */
- x = (COLS - width) / 2;
- y = (LINES - height) / 2;
-
- draw_shadow (stdscr, y, x, height, width);
-
- dialog = newwin (height, width, y, x);
- keypad (dialog, TRUE);
-
- draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr);
-
- if (title != NULL && strlen(title) >= (unsigned int) width-2 ) {
- /* truncate long title -- mec */
- char * title2 = malloc(width-2+1);
- memcpy( title2, title, width-2 );
- title2[width-2] = '\0';
- title = title2;
- }
-
- if (title != NULL) {
- wattrset (dialog, title_attr);
- mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
- waddstr (dialog, (char *)title);
- waddch (dialog, ' ');
- }
- wattrset (dialog, dialog_attr);
- print_autowrap (dialog, prompt, width - 2, 1, 2);
-
- if (pause) {
- wattrset (dialog, border_attr);
- mvwaddch (dialog, height - 3, 0, ACS_LTEE);
- for (i = 0; i < width - 2; i++)
- waddch (dialog, ACS_HLINE);
- wattrset (dialog, dialog_attr);
- waddch (dialog, ACS_RTEE);
-
- print_button (dialog, " Ok ",
- height - 2, width / 2 - 4, TRUE);
-
- wrefresh (dialog);
- while (key != ESC && key != '\n' && key != ' ' &&
- key != 'O' && key != 'o' && key != 'X' && key != 'x'
-#ifdef KEY_RESIZE
- && key != KEY_RESIZE
-#endif
- ) {
- key = wgetch (dialog);
- if (should_resize)
- do_resize_dialog ();
- }
- } else {
- key = '\n';
- wrefresh (dialog);
- }
-
- delwin (dialog);
- return key == ESC ? -1 : 0;
-}
Deleted: GNUnet/src/setup/ncurses/mconf_textbox.c
===================================================================
--- GNUnet/src/setup/ncurses/mconf_textbox.c 2006-09-06 00:22:25 UTC (rev
3365)
+++ GNUnet/src/setup/ncurses/mconf_textbox.c 2006-09-06 03:25:16 UTC (rev
3366)
@@ -1,576 +0,0 @@
-/*
- * textbox.c -- implements the text box
- *
- * ORIGINAL AUTHOR: Savio Lam (address@hidden)
- * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (address@hidden)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-/**
- * @brief GNUnet Setup
- * @file conf/mconf_textbox.c
- * @author Savio Lam
- * @author Nils Durner
- */
-
-#include "platform.h"
-#include "gnunet_util.h"
-#include "mconf_dialog.h"
-
-static void back_lines (int n);
-static void print_page (WINDOW * win, int height, int width);
-static void print_line (WINDOW * win, int row, int width);
-static char *get_line (void);
-static void print_position (WINDOW * win, int height, int width);
-
-static int hscroll, fd, file_size, bytes_read;
-static int begin_reached = 1, end_reached, page_length;
-static char *buf, *page;
-
-/*
- * Display text from a file in a dialog box.
- */
-int
-dialog_textbox (const char *title, const char *file, int height, int width)
-{
- int i, x, y, cur_x, cur_y, fpos, key = 0;
- int passed_end;
- char search_term[MAX_LEN + 1];
- WINDOW *dialog, *text;
-
- search_term[0] = '\0'; /* no search term entered yet */
-
- /* Open input file for reading */
- if ((fd = fileopen(file, O_RDONLY)) == -1) {
- endwin ();
- fprintf (stderr,
- "\nCan't open input file in dialog_textbox().\n");
- exit (-1);
- }
- /* Get file size. Actually, 'file_size' is the real file size - 1,
- since it's only the last byte offset from the beginning */
- if ((file_size = lseek (fd, 0, SEEK_END)) == -1) {
- endwin ();
- fprintf (stderr, "\nError getting file size in dialog_textbox().\n");
- exit (-1);
- }
- /* Restore file pointer to beginning of file after getting file size */
- if (lseek (fd, 0, SEEK_SET) == -1) {
- endwin ();
- fprintf (stderr, "\nError moving file pointer in dialog_textbox().\n");
- exit (-1);
- }
- /* Allocate space for read buffer */
- if ((buf = malloc (BUF_SIZE + 1)) == NULL) {
- endwin ();
- fprintf (stderr, "\nCan't allocate memory in dialog_textbox().\n");
- exit (-1);
- }
- if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) {
- endwin ();
- fprintf (stderr, "\nError reading file in dialog_textbox().\n");
- exit (-1);
- }
- buf[bytes_read] = '\0'; /* mark end of valid data */
- page = buf; /* page is pointer to start of page to
be displayed */
-
- /* center dialog box on screen */
- x = (COLS - width) / 2;
- y = (LINES - height) / 2;
-
-
- draw_shadow (stdscr, y, x, height, width);
-
- dialog = newwin (height, width, y, x);
- keypad (dialog, TRUE);
-
- /* Create window for text region, used for scrolling text */
- text = subwin (dialog, height - 4, width - 2, y + 1, x + 1);
- wattrset (text, dialog_attr);
- wbkgdset (text, dialog_attr & A_COLOR);
-
- keypad (text, TRUE);
-
- /* register the new window, along with its borders */
- draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr);
-
- wattrset (dialog, border_attr);
- mvwaddch (dialog, height-3, 0, ACS_LTEE);
- for (i = 0; i < width - 2; i++)
- waddch (dialog, ACS_HLINE);
- wattrset (dialog, dialog_attr);
- wbkgdset (dialog, dialog_attr & A_COLOR);
- waddch (dialog, ACS_RTEE);
-
- if (title != NULL && strlen(title) >= (unsigned int)width-2 ) {
- /* truncate long title -- mec */
- char * title2 = malloc(width-2+1);
- memcpy( title2, title, width-2 );
- title2[width-2] = '\0';
- title = title2;
- }
-
- if (title != NULL) {
- wattrset (dialog, title_attr);
- mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
- waddstr (dialog, (char *)title);
- waddch (dialog, ' ');
- }
- print_button (dialog, " Exit ", height - 2, width / 2 - 4, TRUE);
- wnoutrefresh (dialog);
- getyx (dialog, cur_y, cur_x); /* Save cursor position */
-
- /* Print first page of text */
- attr_clear (text, height - 4, width - 2, dialog_attr);
- print_page (text, height - 4, width - 2);
- print_position (dialog, height, width);
- wmove (dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh (dialog);
-
- while ((key != ESC) && (key != '\n')) {
- key = wgetch (dialog);
-
- if (should_resize)
- do_resize_dialog();
-
- switch (key) {
-#ifdef KEY_RESIZE
- case KEY_RESIZE:
-#endif
- case 'E': /* Exit */
- case 'e':
- case 'X':
- case 'x':
- delwin (dialog);
- free (buf);
- close (fd);
-#ifdef KEY_RESIZE
- return key == KEY_RESIZE ? -2 : 0;
-#else
- return 0;
-#endif
- case 'g': /* First page */
- case KEY_HOME:
- if (!begin_reached) {
- begin_reached = 1;
- /* First page not in buffer? */
- if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) {
- endwin ();
- fprintf (stderr,
- "\nError moving file pointer in dialog_textbox().\n");
- exit (-1);
- }
- if (fpos > bytes_read) { /* Yes, we have to read it in */
- if (lseek (fd, 0, SEEK_SET) == -1) {
- endwin ();
- fprintf (stderr, "\nError moving file pointer in "
- "dialog_textbox().\n");
- exit (-1);
- }
- if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) {
- endwin ();
- fprintf (stderr,
- "\nError reading file in dialog_textbox().\n");
- exit (-1);
- }
- buf[bytes_read] = '\0';
- }
- page = buf;
- print_page (text, height - 4, width - 2);
- print_position (dialog, height, width);
- wmove (dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh (dialog);
- }
- break;
- case 'G': /* Last page */
- case KEY_END:
-
- end_reached = 1;
- /* Last page not in buffer? */
- if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) {
- endwin ();
- fprintf (stderr,
- "\nError moving file pointer in dialog_textbox().\n");
- exit (-1);
- }
- if (fpos < file_size) { /* Yes, we have to read it in */
- if (lseek (fd, -BUF_SIZE, SEEK_END) == -1) {
- endwin ();
- fprintf (stderr,
- "\nError moving file pointer in dialog_textbox().\n");
- exit (-1);
- }
- if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) {
- endwin ();
- fprintf (stderr,
- "\nError reading file in dialog_textbox().\n");
- exit (-1);
- }
- buf[bytes_read] = '\0';
- }
- page = buf + bytes_read;
- back_lines (height - 4);
- print_page (text, height - 4, width - 2);
- print_position (dialog, height, width);
- wmove (dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh (dialog);
- break;
- case 'K': /* Previous line */
- case 'k':
- case KEY_UP:
- if (!begin_reached) {
- back_lines (page_length + 1);
-
- /* We don't call print_page() here but use scrolling to ensure
- faster screen update. However, 'end_reached' and
- 'page_length' should still be updated, and 'page' should
- point to start of next page. This is done by calling
- get_line() in the following 'for' loop. */
- scrollok (text, TRUE);
- wscrl (text, -1); /* Scroll text region down one line */
- scrollok (text, FALSE);
- page_length = 0;
- passed_end = 0;
- for (i = 0; i < height - 4; i++) {
- if (!i) {
- /* print first line of page */
- print_line (text, 0, width - 2);
- wnoutrefresh (text);
- } else
- /* Called to update 'end_reached' and 'page' */
- get_line ();
- if (!passed_end)
- page_length++;
- if (end_reached && !passed_end)
- passed_end = 1;
- }
-
- print_position (dialog, height, width);
- wmove (dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh (dialog);
- }
- break;
- case 'B': /* Previous page */
- case 'b':
- case KEY_PPAGE:
- if (begin_reached)
- break;
- back_lines (page_length + height - 4);
- print_page (text, height - 4, width - 2);
- print_position (dialog, height, width);
- wmove (dialog, cur_y, cur_x);
- wrefresh (dialog);
- break;
- case 'J': /* Next line */
- case 'j':
- case KEY_DOWN:
- if (!end_reached) {
- begin_reached = 0;
- scrollok (text, TRUE);
- scroll (text); /* Scroll text region up one line */
- scrollok (text, FALSE);
- print_line (text, height - 5, width - 2);
- wnoutrefresh (text);
- print_position (dialog, height, width);
- wmove (dialog, cur_y, cur_x); /* Restore cursor position */
- wrefresh (dialog);
- }
- break;
- case KEY_NPAGE: /* Next page */
- case ' ':
- if (end_reached)
- break;
-
- begin_reached = 0;
- print_page (text, height - 4, width - 2);
- print_position (dialog, height, width);
- wmove (dialog, cur_y, cur_x);
- wrefresh (dialog);
- break;
- case '0': /* Beginning of line */
- case 'H': /* Scroll left */
- case 'h':
- case KEY_LEFT:
- if (hscroll <= 0)
- break;
-
- if (key == '0')
- hscroll = 0;
- else
- hscroll--;
- /* Reprint current page to scroll horizontally */
- back_lines (page_length);
- print_page (text, height - 4, width - 2);
- wmove (dialog, cur_y, cur_x);
- wrefresh (dialog);
- break;
- case 'L': /* Scroll right */
- case 'l':
- case KEY_RIGHT:
- if (hscroll >= MAX_LEN)
- break;
- hscroll++;
- /* Reprint current page to scroll horizontally */
- back_lines (page_length);
- print_page (text, height - 4, width - 2);
- wmove (dialog, cur_y, cur_x);
- wrefresh (dialog);
- break;
- case ESC:
- break;
- }
- }
-
- delwin (dialog);
- free (buf);
- close (fd);
- return 1; /* ESC pressed */
-}
-
-/*
- * Go back 'n' lines in text file. Called by dialog_textbox().
- * 'page' will be updated to point to the desired line in 'buf'.
- */
-static void
-back_lines (int n)
-{
- int i, fpos;
-
- begin_reached = 0;
- /* We have to distinguish between end_reached and !end_reached
- since at end of file, the line is not ended by a '\n'.
- The code inside 'if' basically does a '--page' to move one
- character backward so as to skip '\n' of the previous line */
- if (!end_reached) {
- /* Either beginning of buffer or beginning of file reached? */
- if (page == buf) {
- if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) {
- endwin ();
- fprintf (stderr, "\nError moving file pointer in "
- "back_lines().\n");
- exit (-1);
- }
- if (fpos > bytes_read) { /* Not beginning of file yet */
- /* We've reached beginning of buffer, but not beginning of
- file yet, so read previous part of file into buffer.
- Note that we only move backward for BUF_SIZE/2 bytes,
- but not BUF_SIZE bytes to avoid re-reading again in
- print_page() later */
- /* Really possible to move backward BUF_SIZE/2 bytes? */
- if (fpos < BUF_SIZE / 2 + bytes_read) {
- /* No, move less then */
- if (lseek (fd, 0, SEEK_SET) == -1) {
- endwin ();
- fprintf (stderr, "\nError moving file pointer in "
- "back_lines().\n");
- exit (-1);
- }
- page = buf + fpos - bytes_read;
- } else { /* Move backward BUF_SIZE/2 bytes */
- if (lseek (fd, -(BUF_SIZE / 2 + bytes_read), SEEK_CUR)
- == -1) {
- endwin ();
- fprintf (stderr, "\nError moving file pointer "
- "in back_lines().\n");
- exit (-1);
- }
- page = buf + BUF_SIZE / 2;
- }
- if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) {
- endwin ();
- fprintf (stderr, "\nError reading file in back_lines().\n");
- exit (-1);
- }
- buf[bytes_read] = '\0';
- } else { /* Beginning of file reached */
- begin_reached = 1;
- return;
- }
- }
- if (*(--page) != '\n') { /* '--page' here */
- /* Something's wrong... */
- endwin ();
- fprintf (stderr, "\nInternal error in back_lines().\n");
- exit (-1);
- }
- }
- /* Go back 'n' lines */
- for (i = 0; i < n; i++)
- do {
- if (page == buf) {
- if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) {
- endwin ();
- fprintf (stderr,
- "\nError moving file pointer in back_lines().\n");
- exit (-1);
- }
- if (fpos > bytes_read) {
- /* Really possible to move backward BUF_SIZE/2 bytes? */
- if (fpos < BUF_SIZE / 2 + bytes_read) {
- /* No, move less then */
- if (lseek (fd, 0, SEEK_SET) == -1) {
- endwin ();
- fprintf (stderr, "\nError moving file pointer "
- "in back_lines().\n");
- exit (-1);
- }
- page = buf + fpos - bytes_read;
- } else { /* Move backward BUF_SIZE/2 bytes */
- if (lseek (fd, -(BUF_SIZE / 2 + bytes_read),
- SEEK_CUR) == -1) {
- endwin ();
- fprintf (stderr, "\nError moving file pointer"
- " in back_lines().\n");
- exit (-1);
- }
- page = buf + BUF_SIZE / 2;
- }
- if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) {
- endwin ();
- fprintf (stderr, "\nError reading file in "
- "back_lines().\n");
- exit (-1);
- }
- buf[bytes_read] = '\0';
- } else { /* Beginning of file reached */
- begin_reached = 1;
- return;
- }
- }
- } while (*(--page) != '\n');
- page++;
-}
-
-/*
- * Print a new page of text. Called by dialog_textbox().
- */
-static void
-print_page (WINDOW * win, int height, int width)
-{
- int i, passed_end = 0;
-
- page_length = 0;
- for (i = 0; i < height; i++) {
- print_line (win, i, width);
- if (!passed_end)
- page_length++;
- if (end_reached && !passed_end)
- passed_end = 1;
- }
- wnoutrefresh (win);
-}
-
-/*
- * Print a new line of text. Called by dialog_textbox() and print_page().
- */
-static void
-print_line (WINDOW * win, int row, int width)
-{
- int y, x;
- char *line;
-
- line = get_line ();
- line += GNUNET_MIN ((int)strlen (line), hscroll); /* Scroll horizontally
*/
- wmove (win, row, 0); /* move cursor to correct line */
- waddch (win, ' ');
- waddnstr (win, line, GNUNET_MIN ((int)strlen (line), width - 2));
-
- getyx (win, y, x);
- /* Clear 'residue' of previous line */
-#if OLD_NCURSES
- {
- int i;
- for (i = 0; i < width - x; i++)
- waddch (win, ' ');
- }
-#else
- wclrtoeol(win);
-#endif
-}
-
-/*
- * Return current line of text. Called by dialog_textbox() and print_line().
- * 'page' should point to start of current line before calling, and will be
- * updated to point to start of next line.
- */
-static char *
-get_line (void)
-{
- int i = 0, fpos;
- static char line[MAX_LEN + 1];
-
- end_reached = 0;
- while (*page != '\n') {
- if (*page == '\0') {
- /* Either end of file or end of buffer reached */
- if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) {
- endwin ();
- fprintf (stderr, "\nError moving file pointer in "
- "get_line().\n");
- exit (-1);
- }
- if (fpos < file_size) { /* Not end of file yet */
- /* We've reached end of buffer, but not end of file yet,
- so read next part of file into buffer */
- if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) {
- endwin ();
- fprintf (stderr, "\nError reading file in get_line().\n");
- exit (-1);
- }
- buf[bytes_read] = '\0';
- page = buf;
- } else {
- if (!end_reached)
- end_reached = 1;
- break;
- }
- } else if (i < MAX_LEN)
- line[i++] = *(page++);
- else {
- /* Truncate lines longer than MAX_LEN characters */
- if (i == MAX_LEN)
- line[i++] = '\0';
- page++;
- }
- }
- if (i <= MAX_LEN)
- line[i] = '\0';
- if (!end_reached)
- page++; /* move pass '\n' */
-
- return line;
-}
-
-/*
- * Print current position
- */
-static void
-print_position (WINDOW * win, int height, int width)
-{
- int fpos, percent;
-
- if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) {
- endwin ();
- fprintf (stderr, "\nError moving file pointer in print_position().\n");
- exit (-1);
- }
- wattrset (win, position_indicator_attr);
- wbkgdset (win, position_indicator_attr & A_COLOR);
- percent = !file_size ?
- 100 : ((fpos - bytes_read + page - buf) * 100) / file_size;
- wmove (win, height - 3, width - 9);
- wprintw (win, "(%3d%%)", percent);
-}
Deleted: GNUnet/src/setup/ncurses/mconf_util.c
===================================================================
--- GNUnet/src/setup/ncurses/mconf_util.c 2006-09-06 00:22:25 UTC (rev
3365)
+++ GNUnet/src/setup/ncurses/mconf_util.c 2006-09-06 03:25:16 UTC (rev
3366)
@@ -1,438 +0,0 @@
-/*
- * util.c
- *
- * ORIGINAL AUTHOR: Savio Lam (address@hidden)
- * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (address@hidden)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-/**
- * @brief GNUnet Setup
- * @file conf/mconf_util.c
- * @author Savio Lam
- * @author Nils Durner
- */
-
-#include "mconf_dialog.h"
-
-
-/* use colors by default? */
-bool use_colors = 1;
-
-const char * backtitle = NULL;
-
-const char *dialog_result;
-
-/*
- * Attribute values, default is for mono display
- */
-chtype attributes[] =
-{
- A_NORMAL, /* screen_attr */
- A_NORMAL, /* shadow_attr */
- A_NORMAL, /* dialog_attr */
- A_BOLD, /* title_attr */
- A_NORMAL, /* border_attr */
- A_REVERSE, /* button_active_attr */
- A_DIM, /* button_inactive_attr */
- A_REVERSE, /* button_key_active_attr */
- A_BOLD, /* button_key_inactive_attr */
- A_REVERSE, /* button_label_active_attr */
- A_NORMAL, /* button_label_inactive_attr */
- A_NORMAL, /* inputbox_attr */
- A_NORMAL, /* inputbox_border_attr */
- A_NORMAL, /* searchbox_attr */
- A_BOLD, /* searchbox_title_attr */
- A_NORMAL, /* searchbox_border_attr */
- A_BOLD, /* position_indicator_attr */
- A_NORMAL, /* menubox_attr */
- A_NORMAL, /* menubox_border_attr */
- A_NORMAL, /* item_attr */
- A_REVERSE, /* item_selected_attr */
- A_BOLD, /* tag_attr */
- A_REVERSE, /* tag_selected_attr */
- A_BOLD, /* tag_key_attr */
- A_REVERSE, /* tag_key_selected_attr */
- A_BOLD, /* check_attr */
- A_REVERSE, /* check_selected_attr */
- A_BOLD, /* uarrow_attr */
- A_BOLD /* darrow_attr */
-};
-
-
-#include "mconf_colors.h"
-
-/*
- * Table of color values
- */
-int color_table[][3] =
-{
- {SCREEN_FG, SCREEN_BG, SCREEN_HL},
- {SHADOW_FG, SHADOW_BG, SHADOW_HL},
- {DIALOG_FG, DIALOG_BG, DIALOG_HL},
- {TITLE_FG, TITLE_BG, TITLE_HL},
- {BORDER_FG, BORDER_BG, BORDER_HL},
- {BUTTON_ACTIVE_FG, BUTTON_ACTIVE_BG, BUTTON_ACTIVE_HL},
- {BUTTON_INACTIVE_FG, BUTTON_INACTIVE_BG, BUTTON_INACTIVE_HL},
- {BUTTON_KEY_ACTIVE_FG, BUTTON_KEY_ACTIVE_BG, BUTTON_KEY_ACTIVE_HL},
- {BUTTON_KEY_INACTIVE_FG, BUTTON_KEY_INACTIVE_BG, BUTTON_KEY_INACTIVE_HL},
- {BUTTON_LABEL_ACTIVE_FG, BUTTON_LABEL_ACTIVE_BG, BUTTON_LABEL_ACTIVE_HL},
- {BUTTON_LABEL_INACTIVE_FG, BUTTON_LABEL_INACTIVE_BG,
- BUTTON_LABEL_INACTIVE_HL},
- {INPUTBOX_FG, INPUTBOX_BG, INPUTBOX_HL},
- {INPUTBOX_BORDER_FG, INPUTBOX_BORDER_BG, INPUTBOX_BORDER_HL},
- {SEARCHBOX_FG, SEARCHBOX_BG, SEARCHBOX_HL},
- {SEARCHBOX_TITLE_FG, SEARCHBOX_TITLE_BG, SEARCHBOX_TITLE_HL},
- {SEARCHBOX_BORDER_FG, SEARCHBOX_BORDER_BG, SEARCHBOX_BORDER_HL},
- {POSITION_INDICATOR_FG, POSITION_INDICATOR_BG, POSITION_INDICATOR_HL},
- {MENUBOX_FG, MENUBOX_BG, MENUBOX_HL},
- {MENUBOX_BORDER_FG, MENUBOX_BORDER_BG, MENUBOX_BORDER_HL},
- {ITEM_FG, ITEM_BG, ITEM_HL},
- {ITEM_SELECTED_FG, ITEM_SELECTED_BG, ITEM_SELECTED_HL},
- {TAG_FG, TAG_BG, TAG_HL},
- {TAG_SELECTED_FG, TAG_SELECTED_BG, TAG_SELECTED_HL},
- {TAG_KEY_FG, TAG_KEY_BG, TAG_KEY_HL},
- {TAG_KEY_SELECTED_FG, TAG_KEY_SELECTED_BG, TAG_KEY_SELECTED_HL},
- {CHECK_FG, CHECK_BG, CHECK_HL},
- {CHECK_SELECTED_FG, CHECK_SELECTED_BG, CHECK_SELECTED_HL},
- {UARROW_FG, UARROW_BG, UARROW_HL},
- {DARROW_FG, DARROW_BG, DARROW_HL},
-}; /* color_table */
-
-/*
- * Set window to attribute 'attr'
- */
-void
-attr_clear (WINDOW * win, int height, int width, chtype attr)
-{
- int i, j;
-
- wattrset (win, attr);
- for (i = 0; i < height; i++) {
- wmove (win, i, 0);
- for (j = 0; j < width; j++)
- waddch (win, ' ');
- }
- touchwin (win);
-}
-
-void dialog_clear (void)
-{
- attr_clear (stdscr, LINES, COLS, screen_attr);
- /* Display background title if it exists ... - SLH */
- if (backtitle != NULL) {
- int i;
-
- wattrset (stdscr, screen_attr);
- mvwaddstr (stdscr, 0, 1, (char *)backtitle);
- wmove (stdscr, 1, 1);
- for (i = 1; i < COLS - 1; i++)
- waddch (stdscr, ACS_HLINE);
- }
- wnoutrefresh (stdscr);
-}
-
-/*
- * Do some initialization for dialog
- */
-void
-init_dialog (void)
-{
- initscr (); /* Init curses */
- keypad (stdscr, TRUE);
- cbreak ();
- noecho ();
-
-
- if (use_colors) /* Set up colors */
- color_setup ();
-
-
- dialog_clear ();
-}
-
-/*
- * Setup for color display
- */
-void
-color_setup (void)
-{
- int i;
-
- if (has_colors ()) { /* Terminal supports color? */
- start_color ();
-
- /* Initialize color pairs */
- for (i = 0; i < ATTRIBUTE_COUNT; i++)
- init_pair (i + 1, color_table[i][0], color_table[i][1]);
-
- /* Setup color attributes */
- for (i = 0; i < ATTRIBUTE_COUNT; i++)
- attributes[i] = C_ATTR (color_table[i][2], i + 1);
- }
-}
-
-/*
- * End using dialog functions.
- */
-void
-end_dialog (void)
-{
- endwin ();
-}
-
-/*
- * This is the backend part of the resizing magic. We can't do almost anything
- * in resize_dialog() since we are most probably in an evil place like a
- * malloc() --- in fact we can't even ungetch()! And since we have no way how
- * to interrupt wgetch(), we can't react sooner than after the user presses a
- * key. Then we will immediatelly call do_resize_dialog(), process the key
- * pressed by the user and next wgetch() should immediatelly yield KEY_RESIZE,
- * which is going to make the dialog being redrawn. It could look a little
- * weird when the key pressed by the user will close the dialog, well... ;-)
- */
-
-static int new_rows, new_cols;
-bool should_resize = 0;
-
-void
-resize_dialog (int rows, int cols)
-{
- should_resize = 1;
- new_rows = rows;
- new_cols = cols;
-}
-
-void
-do_resize_dialog ()
-{
- should_resize = 0;
- /* TODO */
-#ifndef MINGW
- resizeterm(new_rows, new_cols);
-#endif
- COLS = new_cols;
- LINES = new_rows;
-#ifdef KEY_RESIZE
- ungetch(KEY_RESIZE);
-#endif
-}
-
-/*
- * Print a string of text in a window, automatically wrap around to the
- * next line if the string is too long to fit on one line. Newline
- * characters '\n' are replaced by spaces. We start on a new line
- * if there is no room for at least 4 nonblanks following a double-space.
- */
-void
-print_autowrap (WINDOW * win, const char *prompt, int width, int y, int x)
-{
- int newl, cur_x, cur_y;
- int prompt_len, room, wlen;
- char tempstr[MAX_LEN + 1], *word, *sp, *sp2, *sp_nl;
-
- strcpy (tempstr, prompt);
-
- prompt_len = strlen(tempstr);
-
- /*
- * Remove newlines
- */
-/* for(i=0; i<prompt_len; i++) {
- if(tempstr[i] == '\n') tempstr[i] = ' ';
- }
-*/
- if (prompt_len <= width - x * 2) { /* If prompt is short */
- wmove (win, y, (width - prompt_len) / 2);
- waddstr (win, tempstr);
- } else {
- cur_x = x;
- cur_y = y;
- newl = 1;
- word = tempstr;
- while (word && *word) {
- sp = strchr(word, ' ');
- sp_nl = strchr(word, '\n');
-
- if (sp_nl && (sp_nl < sp || !sp))
- sp = sp_nl;
- else
- sp_nl = NULL;
-
- if (sp)
- *sp++ = 0;
-
- if (sp_nl) {
- /* "\n" encountered */
- wmove (win, cur_y, cur_x);
- waddstr (win, word);
- cur_y++;
- cur_x = x;
- wmove (win, cur_y, cur_x);
- newl = 1;
- }
- else {
- /* Wrap to next line if either the word
does not fit,
- or it is the first word of a
new sentence, and it is
- short, and the next word does
not fit. */
- room = width - cur_x;
- wlen = strlen (word);
- if (wlen > room ||
- (newl && wlen < 4 && sp && wlen + 1 +
strlen (sp) > room &&
- (!(sp2 = strchr (sp, ' ')) || wlen + 1
+ (sp2 - sp) > room)))
- {
- cur_y++;
- cur_x = x;
- }
- wmove (win, cur_y, cur_x);
- waddstr (win, word);
- getyx (win, cur_y, cur_x);
- cur_x++;
- if (sp && *sp == ' ') {
- cur_x++; /*
double space */
- while (*++sp == ' ');
- newl = 1;
- }
- else
- newl = 0;
- }
- word = sp;
- }
- }
-}
-
-/*
- * Print a button
- */
-void
-print_button (WINDOW * win, const char *label, int y, int x, int selected)
-{
- int i, temp;
-
- wmove (win, y, x);
- wattrset (win, selected ? button_active_attr : button_inactive_attr);
- waddstr (win, "<");
- temp = strspn (label, " ");
- label += temp;
- wattrset (win, selected ? button_label_active_attr
- : button_label_inactive_attr);
- for (i = 0; i < temp; i++)
- waddch (win, ' ');
- wattrset (win, selected ? button_key_active_attr
- : button_key_inactive_attr);
- waddch (win, label[0]);
- wattrset (win, selected ? button_label_active_attr
- : button_label_inactive_attr);
- waddstr (win, (char *)label + 1);
- wattrset (win, selected ? button_active_attr : button_inactive_attr);
- waddstr (win, ">");
- wmove (win, y, x + temp + 1);
-}
-
-/*
- * Draw a rectangular box with line drawing characters
- */
-void
-draw_box (WINDOW * win, int y, int x, int height, int width,
- chtype box, chtype border)
-{
- int i, j;
-
- wattrset (win, 0);
- for (i = 0; i < height; i++) {
- wmove (win, y + i, x);
- for (j = 0; j < width; j++)
- if (!i && !j)
- waddch (win, border | ACS_ULCORNER);
- else if (i == height - 1 && !j)
- waddch (win, border | ACS_LLCORNER);
- else if (!i && j == width - 1)
- waddch (win, box | ACS_URCORNER);
- else if (i == height - 1 && j == width - 1)
- waddch (win, box | ACS_LRCORNER);
- else if (!i)
- waddch (win, border | ACS_HLINE);
- else if (i == height - 1)
- waddch (win, box | ACS_HLINE);
- else if (!j)
- waddch (win, border | ACS_VLINE);
- else if (j == width - 1)
- waddch (win, box | ACS_VLINE);
- else
- waddch (win, box | ' ');
- }
-}
-
-/*
- * Draw shadows along the right and bottom edge to give a more 3D look
- * to the boxes
- */
-void
-draw_shadow (WINDOW * win, int y, int x, int height, int width)
-{
- int i;
-
- if (has_colors ()) { /* Whether terminal supports color? */
- wattrset (win, shadow_attr);
- wmove (win, y + height, x + 2);
- for (i = 0; i < width; i++)
- waddch (win, winch (win) & A_CHARTEXT);
- for (i = y + 1; i < y + height + 1; i++) {
- wmove (win, i, x + width);
- waddch (win, winch (win) & A_CHARTEXT);
- waddch (win, winch (win) & A_CHARTEXT);
- }
- wnoutrefresh (win);
- }
-}
-
-/*
- * Return the position of the first alphabetic character in a string.
- */
-int
-first_alpha(const char *string, const char *exempt)
-{
- unsigned int i;
- int in_paren=0, c;
-
- for (i = 0; i < strlen(string); i++) {
- c = tolower(string[i]);
-
- if (strchr("<[(", c)) ++in_paren;
- if (strchr(">])", c) && in_paren > 0) --in_paren;
-
- if ((! in_paren) && isalpha(c) &&
- strchr(exempt, c) == 0)
- return i;
- }
-
- return 0;
-}
-
-/*
- * Get the first selected item in the dialog_list_item list.
- */
-struct dialog_list_item *
-first_sel_item(int item_no, struct dialog_list_item ** items)
-{
- int i;
- for (i = 0; i < item_no; i++) {
- if (items[i]->selected)
- return items[i];
- }
-
- return NULL;
-}
Deleted: GNUnet/src/setup/ncurses/mconf_yesno.c
===================================================================
--- GNUnet/src/setup/ncurses/mconf_yesno.c 2006-09-06 00:22:25 UTC (rev
3365)
+++ GNUnet/src/setup/ncurses/mconf_yesno.c 2006-09-06 03:25:16 UTC (rev
3366)
@@ -1,134 +0,0 @@
-/*
- * yesno.c -- implements the yes/no box
- *
- * ORIGINAL AUTHOR: Savio Lam (address@hidden)
- * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (address@hidden)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-/**
- * @brief GNUnet Setup
- * @file conf/mconf_yesno.c
- * @author Savio Lam
- * @author Nils Durner
- */
-
-#include "mconf_dialog.h"
-
-/*
- * Display termination buttons
- */
-static void
-print_buttons(WINDOW *dialog, int height, int width, int selected)
-{
- int x = width / 2 - 10;
- int y = height - 2;
-
- print_button (dialog, " Yes ", y, x, selected == 0);
- print_button (dialog, " No ", y, x + 13, selected == 1);
-
- wmove(dialog, y, x+1 + 13*selected );
- wrefresh (dialog);
-}
-
-/*
- * Display a dialog box with two buttons - Yes and No
- */
-int
-dialog_yesno (const char *title, const char *prompt, int height, int width)
-{
- int i, x, y, key = 0, button = 0;
- WINDOW *dialog;
-
- /* center dialog box on screen */
- x = (COLS - width) / 2;
- y = (LINES - height) / 2;
-
- draw_shadow (stdscr, y, x, height, width);
-
- dialog = newwin (height, width, y, x);
- keypad (dialog, TRUE);
-
- draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr);
- wattrset (dialog, border_attr);
- mvwaddch (dialog, height-3, 0, ACS_LTEE);
- for (i = 0; i < width - 2; i++)
- waddch (dialog, ACS_HLINE);
- wattrset (dialog, dialog_attr);
- waddch (dialog, ACS_RTEE);
-
- if ( (title != NULL) &&
- (strlen(title) >= (unsigned int) width-2) ) {
- /* truncate long title -- mec */
- char * title2 = malloc(width-2+1);
- memcpy( title2, title, width-2 );
- title2[width-2] = '\0';
- title = title2;
- }
-
- if (title != NULL) {
- wattrset (dialog, title_attr);
- mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
- waddstr (dialog, (char *)title);
- waddch (dialog, ' ');
- }
-
- wattrset (dialog, dialog_attr);
- print_autowrap (dialog, prompt, width - 2, 1, 3);
-
- print_buttons(dialog, height, width, 0);
-
- while (key != ESC) {
- key = wgetch (dialog);
-
- if (should_resize)
- do_resize_dialog();
-
- switch (key) {
- case 'Y':
- case 'y':
- delwin (dialog);
- return 0;
- case 'N':
- case 'n':
- delwin (dialog);
- return 1;
-
- case TAB:
- case KEY_LEFT:
- case KEY_RIGHT:
- button = ((key == KEY_LEFT ? --button : ++button) < 0)
- ? 1 : (button > 1 ? 0 : button);
-
- print_buttons(dialog, height, width, button);
- wrefresh (dialog);
- break;
-#ifdef KEY_RESIZE
- case KEY_RESIZE:
- button = -2;
-#endif
- case ' ':
- case '\n':
- delwin (dialog);
- return button;
- case ESC:
- break;
- }
- }
-
- delwin (dialog);
- return -1; /* ESC pressed */
-}
Modified: GNUnet/src/setup/ncurses/wizard_curs.c
===================================================================
--- GNUnet/src/setup/ncurses/wizard_curs.c 2006-09-06 00:22:25 UTC (rev
3365)
+++ GNUnet/src/setup/ncurses/wizard_curs.c 2006-09-06 03:25:16 UTC (rev
3366)
@@ -1,6 +1,6 @@
/*
This file is part of GNUnet.
- (C) 2005 Christian Grothoff (and other contributing authors)
+ (C) 2005, 2006 Christian Grothoff (and other contributing authors)
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
@@ -19,30 +19,28 @@
*/
/**
- * @file conf/wizard_curs.c
+ * @file setup/ncurses/wizard_curs.c
* @brief A easy-to-use configuration assistant for curses
* @author Nils Durner
*/
+#include <dialog.h>
+
+#undef _
+#undef OK
+#include "platform.h"
#include "gnunet_util.h"
-#include "platform.h"
+#include "gnunet_setup_lib.h"
+#include "wizard_curs.h"
+#include "mconf.h"
+
#ifndef MINGW
- #include <grp.h>
+#include <grp.h>
#endif
-#define LKC_DIRECT_LINK
-#include "lkc.h"
-#include "mconf_dialog.h"
-#include "wizard_util.h"
-#include "mconf.h"
-#include "wizard_curs.h"
-#include "confdata.h"
-
-extern int cols, rows;
-
static struct dialog_list_item **nic_items;
static int nic_item_count = 0;
@@ -82,8 +80,14 @@
item->selected = wiz_is_nic_default(name, defaultNIC);
}
-int wizard_curs_main(int argc, char **argv)
-{
+int wizard_curs_main_ncurses(int argc,
+ const char **argv,
+ struct PluginHandle * self,
+ struct GE_Context * ectx,
+ struct GC_Configuration * cfg,
+ struct GNS_Context * gns,
+ const char * filename,
+ int is_daemon)
void *active_ptr = NULL;
int idx, ret, autostart = 0, adv = 0;
struct symbol *sym;
Modified: GNUnet/src/setup/ncurses/wizard_curs.h
===================================================================
--- GNUnet/src/setup/ncurses/wizard_curs.h 2006-09-06 00:22:25 UTC (rev
3365)
+++ GNUnet/src/setup/ncurses/wizard_curs.h 2006-09-06 03:25:16 UTC (rev
3366)
@@ -1,6 +1,6 @@
/*
This file is part of GNUnet.
- (C) 2001, 2002, 2005 Christian Grothoff (and other contributing authors)
+ (C) 2001, 2002, 2005, 2006 Christian Grothoff (and other contributing
authors)
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
@@ -20,14 +20,21 @@
/**
- * @file conf/gconf.h
+ * @file setup/ncurses/wizard_curs.h
* @brief GNUnet Setup
* @author Nils Durner
*/
-#ifndef GCONF_H
-#define GCONF_H
+#ifndef WIZARD_CURS_H
+#define WIZARD_CURS_H
-int wizard_curs_main(int argc, char **argv);
+int wizard_curs_main_ncurses(int argc,
+ const char **argv,
+ struct PluginHandle * self,
+ struct GE_Context * ectx,
+ struct GC_Configuration * cfg,
+ struct GNS_Context * gns,
+ const char * filename,
+ int is_daemon);
#endif
Modified: GNUnet/todo
===================================================================
--- GNUnet/todo 2006-09-06 00:22:25 UTC (rev 3365)
+++ GNUnet/todo 2006-09-06 03:25:16 UTC (rev 3366)
@@ -59,7 +59,6 @@
- gnunet-setup memory leaks (#878)
- gnunet-setup category switch update bug (#892) [ RC ]
+ gtk wizard
- + ncurses config
+ ncurses wizard
+ scm specification of configuration
- fix known bugs (see Mantis for updates):
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r3366 - in GNUnet: . m4 src/setup src/setup/ncurses,
grothoff <=