Index: usr.sbin/tzsetup/Makefile =================================================================== --- usr.sbin/tzsetup/Makefile (revision 216873) +++ usr.sbin/tzsetup/Makefile (working copy) @@ -3,11 +3,11 @@ PROG= tzsetup MAN= tzsetup.8 -CFLAGS+= -I${.CURDIR} +CFLAGS+= -I${.CURDIR}/../../gnu/lib/libodialog -I. WARNS?= 3 -DPADD= ${LIBDIALOG} ${LIBNCURSES} -LDADD= -ldialog -lncurses +DPADD= ${LIBODIALOG} ${LIBNCURSES} +LDADD= -lodialog -lncurses .include Index: usr.sbin/sade/Makefile =================================================================== --- usr.sbin/sade/Makefile (revision 216873) +++ usr.sbin/sade/Makefile (working copy) @@ -19,9 +19,9 @@ .if ${MACHINE} == "pc98" CFLAGS+= -DPC98 .endif -CFLAGS+= -I${.CURDIR}/../../gnu/lib/libdialog -I. +CFLAGS+= -I${.CURDIR}/../../gnu/lib/libodialog -I. -DPADD= ${LIBDIALOG} ${LIBNCURSES} ${LIBUTIL} ${LIBDISK} -LDADD= -ldialog -lncurses -lutil -ldisk +DPADD= ${LIBODIALOG} ${LIBNCURSES} ${LIBUTIL} ${LIBDISK} +LDADD= -lodialog -lncurses -lutil -ldisk .include Index: usr.sbin/sysinstall/Makefile =================================================================== --- usr.sbin/sysinstall/Makefile (revision 216873) +++ usr.sbin/sysinstall/Makefile (working copy) @@ -18,12 +18,12 @@ .if ${MACHINE} == "pc98" CFLAGS+= -DPC98 .endif -CFLAGS+= -I${.CURDIR}/../../gnu/lib/libdialog -I. +CFLAGS+= -I${.CURDIR}/../../gnu/lib/libodialog -I. WARNS?= 2 -DPADD= ${LIBDIALOG} ${LIBNCURSES} ${LIBUTIL} ${LIBDISK} ${LIBFTPIO} -LDADD= -ldialog -lncurses -lutil -ldisk -lftpio +DPADD= ${LIBODIALOG} ${LIBNCURSES} ${LIBUTIL} ${LIBDISK} ${LIBFTPIO} +LDADD= -lodialog -lncurses -lutil -ldisk -lftpio CLEANFILES= makedevs.c rtermcap CLEANFILES+= keymap.tmp keymap.h countries.tmp countries.h Index: share/mk/bsd.libnames.mk =================================================================== --- share/mk/bsd.libnames.mk (revision 216873) +++ share/mk/bsd.libnames.mk (working copy) @@ -101,6 +101,7 @@ LIBNGATM?= ${DESTDIR}${LIBDIR}/libngatm.a LIBNVPAIR?= ${DESTDIR}${LIBDIR}/libnvpair.a LIBOBJC?= ${DESTDIR}${LIBDIR}/libobjc.a +LIBODIALOG?= ${DESTDIR}${LIBDIR}/libodialog.a LIBOPIE?= ${DESTDIR}${LIBDIR}/libopie.a # The static PAM library doesn't know its secondary dependencies, Index: gnu/usr.bin/dialog/dialog.c =================================================================== --- gnu/usr.bin/dialog/dialog.c (revision 216873) +++ gnu/usr.bin/dialog/dialog.c (working copy) @@ -1,394 +0,0 @@ -/* - * dialog - Display simple dialog boxes from shell scripts - * - * AUTHOR: Savio Lam (lam836@cs.cuhk.hk) - * - * 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. - * - * $FreeBSD$ - * - * - * HISTORY: - * - * 17/12/93 - Version 0.1 released. - * - * 19/12/93 - menu will now scroll if there are more items than can fit - * on the screen. - * - added 'checklist', a dialog box with a list of options that - * can be turned on or off. A list of options that are on is - * returned on exit. - * - * 20/12/93 - Version 0.15 released. - * - * 29/12/93 - Incorporated patch from Patrick J. Volkerding - * (volkerdi@mhd1.moorhead.msus.edu) that made these changes: - * - increased MAX_LEN to 2048 - * - added 'infobox', equivalent to a message box without pausing - * - added option '--clear' that will clear the screen - * - Explicit line breaking when printing prompt text can be - * invoked by real newline '\n' besides the string "\n" - * - an optional parameter '--title ' can be used to - * specify a title string for the dialog box - * - * 03/01/94 - added 'textbox', a dialog box for displaying text from a file. - * - Version 0.2 released. - * - * 04/01/94 - some fixes and improvements for 'textbox': - * - fixed a bug that will cause a segmentation violation when a - * line is longer than MAX_LEN characters. Lines will now be - * truncated if they are longer than MAX_LEN characters. - * - removed wrefresh() from print_line(). This will increase - * efficiency of print_page() which calls print_line(). - * - display current position in the form of percentage into file. - * - Version 0.21 released. - * - * 05/01/94 - some changes for faster screen update. - * - * 07/01/94 - much more flexible color settings. Can use all 16 colors - * (8 normal, 8 highlight) of the Linux console. - * - * 08/01/94 - added run-time configuration using configuration file. - * - * 09/01/94 - some minor bug fixes and cleanups for menubox, checklist and - * textbox. - * - * 11/01/94 - added a man page. - * - * 13/01/94 - some changes for easier porting to other Unix systems (tested - * on Ultrix, SunOS and HPUX) - * - Version 0.3 released. - * - * 08/06/94 - Patches by Stuart Herbert - S.Herbert@shef.ac.uk - * Fixed attr_clear and the textbox stuff to work with ncurses 1.8.5 - * Fixed the wordwrap routine - it'll actually wrap properly now - * Added a more 3D look to everything - having your own rc file could - * prove 'interesting' to say the least :-) - * Added radiolist option - * - Version 0.4 released. - * - * 09/28/98 - Patches by Anatoly A. Orehovsky - tolik@mpeks.tomsk.su - * Added ftree and tree options - * - */ - -#include - -#include -#include -#include -#include -#include - -void Usage(char *name); -void EndDialog(int cls); - -int main(int argc, char *argv[]) -{ - int offset = 0, clear_screen = 0, end_common_opts = 0, default_yesno = 1, retval; - unsigned char *title = NULL; - unsigned char result[MAX_LEN]; - char *hline = NULL, *hfile = NULL; - - if (argc < 2) - Usage(argv[0]); - else if (!strcmp(argv[1], "--create-rc")) { -#ifdef HAVE_NCURSES - if (argc != 3) - Usage(argv[0]); - dialog_create_rc(argv[2]); - return 0; -#else - fprintf(stderr, "\nThis option is currently unsupported on your system.\n"); - return -1; -#endif - } - - while (offset < argc-1 && !end_common_opts) { /* Common options */ - if (!strcmp(argv[offset+1], "--title")) { - if (argc-offset < 3 || title != NULL) /* No two "--title" please! */ - Usage(argv[0]); - else { - title = argv[offset+2]; - offset += 2; - } - } - else if (!strcmp(argv[offset+1], "--hline")) { - if (argc-offset < 3 || hline != NULL) /* No two "--hline" please! */ - Usage(argv[0]); - else { - hline = argv[offset+2]; - use_helpline(hline); - offset += 2; - } - } - else if (!strcmp(argv[offset+1], "--hfile")) { - if (argc-offset < 3 || hfile != NULL) /* No two "--hfile" please! */ - Usage(argv[0]); - else { - hfile = argv[offset+2]; - use_helpfile(hfile); - offset += 2; - } - } - else if (!strcmp(argv[offset+1], "--clear")) { - if (clear_screen) /* Hey, "--clear" can't appear twice! */ - Usage(argv[0]); - else if (argc == 2) { /* we only want to clear the screen */ - init_dialog(); - dialog_update(); /* init_dialog() will clear the screen for us */ - end_dialog(); - return 0; - } - else { - clear_screen = 1; - offset++; - } - } - else /* no more common options */ - end_common_opts = 1; - } - - if (argc-1 == offset) /* no more options */ - Usage(argv[0]); - - /* Box options */ - - if (!strcmp(argv[offset+1], "--yesno")) { - if (argc-offset != 5 && argc-offset != 6) - Usage(argv[0]); - if (argc-offset == 6) { - if (!strcmp(argv[offset+5], "yes")) - default_yesno = 1; - else if (!strcmp(argv[offset+5], "no")) - default_yesno = 0; - else - Usage(argv[0]); - } - init_dialog(); - if (default_yesno == 1) - retval = dialog_yesno(title, argv[offset+2], atoi(argv[offset+3]), - atoi(argv[offset+4])); - else - retval = dialog_noyes(title, argv[offset+2], atoi(argv[offset+3]), - atoi(argv[offset+4])); - - dialog_update(); - EndDialog(clear_screen); - return retval; - } - else if (!strcmp(argv[offset+1], "--msgbox")) { - if (argc-offset != 5) - Usage(argv[0]); - init_dialog(); - retval = dialog_msgbox(title, argv[offset+2], atoi(argv[offset+3]), - atoi(argv[offset+4]), 1); - - dialog_update(); - EndDialog(clear_screen); - return retval; - } - else if (!strcmp(argv[offset+1], "--prgbox")) { - if (argc-offset != 5) - Usage(argv[0]); - init_dialog(); - retval = dialog_prgbox(title, argv[offset+2], atoi(argv[offset+3]), - atoi(argv[offset+4]), TRUE, TRUE); - - dialog_update(); - EndDialog(clear_screen); - return WEXITSTATUS(retval); - } - else if (!strcmp(argv[offset+1], "--infobox")) { - if (argc-offset != 5) - Usage(argv[0]); - init_dialog(); - retval = dialog_msgbox(title, argv[offset+2], atoi(argv[offset+3]), - atoi(argv[offset+4]), 0); - - dialog_update(); - EndDialog(clear_screen); - return retval; - } - else if (!strcmp(argv[offset+1], "--textbox")) { - if (argc-offset != 5) - Usage(argv[0]); - init_dialog(); - retval = dialog_textbox(title, argv[offset+2], atoi(argv[offset+3]), - atoi(argv[offset+4])); - - dialog_update(); - EndDialog(clear_screen); - return retval; - } - else if (!strcmp(argv[offset+1], "--menu")) { - if (argc-offset < 8 || ((argc-offset) % 2)) - Usage(argv[0]); - init_dialog(); - retval = dialog_menu(title, argv[offset+2], atoi(argv[offset+3]), - atoi(argv[offset+4]), atoi(argv[offset+5]), - (argc-offset-6)/2, argv+offset + 6, result, - NULL, NULL); - dialog_update(); - if (retval == 0) - fputs(result, stderr); - EndDialog(clear_screen); - return retval; - } - else if (!strcmp(argv[offset+1], "--checklist")) { - if (argc-offset < 9 || ((argc-offset-6) % 3)) - Usage(argv[0]); - init_dialog(); - retval = dialog_checklist(title, argv[offset+2], atoi(argv[offset+3]), - atoi(argv[offset+4]), atoi(argv[offset+5]), - (argc-offset-6)/3, argv+offset + 6, result); - - dialog_update(); - if (retval == 0) { - unsigned char *s, *h; int first; - - h = result; - first = 1; - while ((s = strchr(h, '\n')) != NULL) { - *s++ = '\0'; - if (!first) - fputc(' ', stderr); - else - first = 0; - fprintf(stderr, "\"%s\"", h); - h = s; - } - } - EndDialog(clear_screen); - return retval; - } - else if (!strcmp(argv[offset+1], "--radiolist")) { - if (argc-offset < 9 || ((argc-offset-6) % 3)) - Usage(argv[0]); - init_dialog(); - retval = dialog_radiolist(title, argv[offset+2], atoi(argv[offset+3]), - atoi(argv[offset+4]), atoi(argv[offset+5]), - (argc-offset-6)/3, argv+offset + 6, result); - - dialog_update(); - if (retval == 0) - fputs(result, stderr); - EndDialog(clear_screen); - return retval; - } - else if (!strcmp(argv[offset+1], "--inputbox")) { - if (argc-offset != 5 && argc-offset != 6) - Usage(argv[0]); - if (argc-offset == 6) - strcpy(result, argv[offset+5]); - else - *result = '\0'; - init_dialog(); - retval = dialog_inputbox(title, argv[offset+2], atoi(argv[offset+3]), - atoi(argv[offset+4]), result); - - dialog_update(); - if (retval == 0) - fputs(result, stderr); - EndDialog(clear_screen); - return retval; - } -/* ftree and tree options */ - else if (!strcmp(argv[offset+1], "--ftree")) { - unsigned char *tresult; - if (argc-offset != 8) - Usage(argv[0]); - init_dialog(); - retval = dialog_ftree(argv[offset+2], *argv[offset+3], - title, argv[offset+4], atoi(argv[offset+5]), atoi(argv[offset+6]), - atoi(argv[offset+7]), &tresult); - - dialog_update(); - if (!retval) - { - fputs(tresult, stderr); - free(tresult); - } - EndDialog(clear_screen); - return retval; - } - else if (!strcmp(argv[offset+1], "--tree")) { - unsigned char *tresult; - if (argc-offset < 8) - Usage(argv[0]); - init_dialog(); - retval = dialog_tree((unsigned char **)argv+offset+7, argc-offset-7, - *argv[offset+2], title, argv[offset+3], atoi(argv[offset+4]), - atoi(argv[offset+5]), atoi(argv[offset+6]), &tresult); - - dialog_update(); - if (!retval) - fputs(tresult, stderr); - - EndDialog(clear_screen); - return retval; - } - - Usage(argv[0]); - - return 0; -} -/* End of main() */ - - -/* - * Print program usage - */ -void Usage(char *name) -{ - fprintf(stderr, "\ -\ndialog version 0.3, by Savio Lam (lam836@cs.cuhk.hk).\ -\n patched to version %s by Stuart Herbert (S.Herbert@shef.ac.uk)\ -\n Changes Copyright (C) 1995 by Andrey A. Chernov, Moscow, Russia\ -\n patched by Anatoly A. Orehovsky (tolik@mpeks.tomsk.su)\ -\n\ -\n* Display dialog boxes from shell scripts *\ -\n\ -\nUsage: %s --clear\ -\n %s --create-rc \ -\n %s [--title ] [--clear] [--hline <line>] [--hfile <file>]\\\ -\n <Box options>\ -\n\ -\nBox options:\ -\n\ -\n --yesno <text> <height> <width> [yes|no]\ -\n --msgbox <text> <height> <width>\ -\n --prgbox \"<command line>\" <height> <width>\ -\n --infobox <text> <height> <width>\ -\n --inputbox <text> <height> <width> [<init string>]\ -\n --textbox <file> <height> <width>\ -\n --menu <text> <height> <width> <menu height> <tag1> <item1>...\ -\n --checklist <text> <height> <width> <list height> <tag1> <item1> <status1>...\ -\n --radiolist <text> <height> <width> <list height> <tag1> <item1> <status1>...\ -\n --ftree <file> <FS> <text> <height> <width> <menu height>\ -\n --tree <FS> <text> <height> <width> <menu height> <item1>...\n", VERSION, name, name, name); - exit(-1); -} -/* End of Usage() */ - -/* - * End dialog - */ -void EndDialog(int cls) -{ - if (cls) /* clear screen before exit */ - dialog_clear(); - end_dialog(); -} -/* End of Dialog() */ Index: gnu/usr.bin/dialog/TESTS/msgbox =================================================================== --- gnu/usr.bin/dialog/TESTS/msgbox (revision 216873) +++ gnu/usr.bin/dialog/TESTS/msgbox (working copy) @@ -1,14 +0,0 @@ -#!/bin/sh -DIALOG=${DIALOG=/usr/bin/dialog} - -$DIALOG --title "MESSAGE BOX" --clear \ - --msgbox "Hi, this is a simple message box. You can use this to\n\ -display any message you like. The box will remain until\n\ -you press the ENTER key." -1 -1 - -case $? in - 0) - echo "OK";; - 255) - echo "ESC pressed.";; -esac Index: gnu/usr.bin/dialog/TESTS/prgbox =================================================================== --- gnu/usr.bin/dialog/TESTS/prgbox (revision 216873) +++ gnu/usr.bin/dialog/TESTS/prgbox (working copy) @@ -1,12 +0,0 @@ -#!/bin/sh -DIALOG=${DIALOG=/usr/bin/dialog} - -$DIALOG --title "PROGRAM BOX: 'cal'" --clear \ - --prgbox "cal" 13 27 - -case $? in - 0) - echo "OK";; - *) - echo "Exit code:" $?;; -esac Index: gnu/usr.bin/dialog/TESTS/infobox =================================================================== --- gnu/usr.bin/dialog/TESTS/infobox (revision 216873) +++ gnu/usr.bin/dialog/TESTS/infobox (working copy) @@ -1,15 +0,0 @@ -#!/bin/sh -DIALOG=${DIALOG=/usr/bin/dialog} - -$DIALOG --title "INFO BOX" \ - --infobox "Hi, this is an information box. It is -different from a message box in that it will -not pause waiting for input after displaying -the message. The pause here is only introduced -by the sleep command, not by dialog. - -You have 10 seconds to read this..." -1 -1 - -stty -echo -sleep 10 -stty echo Index: gnu/usr.bin/dialog/TESTS/inputbox =================================================================== --- gnu/usr.bin/dialog/TESTS/inputbox (revision 216873) +++ gnu/usr.bin/dialog/TESTS/inputbox (working copy) @@ -1,28 +0,0 @@ -#!/bin/sh -DIALOG=${DIALOG=/usr/bin/dialog} - -$DIALOG --title "INPUT BOX" --clear \ - --inputbox "Hi, this is an input dialog box. You can use \n\ -this to ask questions that require the user \n\ -to input a string as the answer. You can \n\ -input strings of length longer than the \n\ -width of the input box, in that case, the \n\ -input field will be automatically scrolled. \n\ -You can use BACKSPACE, LEFT, RIGHT, HOME, END\n\ -to correct errors. \n\n\ -Try inputing your name below:" -1 -1 "John Smith" 2> /tmp/inputbox.tmp.$$ - -retval=$? - -input=`cat /tmp/inputbox.tmp.$$` -rm -f /tmp/inputbox.tmp.$$ - -case $retval in - 0) - echo "Input string is '$input'";; - 1) - echo "Cancel pressed.";; - 255) - [ -z "$input" ] || echo $input ; - echo "ESC pressed.";; -esac Index: gnu/usr.bin/dialog/TESTS/treebox =================================================================== --- gnu/usr.bin/dialog/TESTS/treebox (revision 216873) +++ gnu/usr.bin/dialog/TESTS/treebox (working copy) @@ -1,25 +0,0 @@ -#!/bin/sh -DIALOG=${DIALOG=/usr/bin/dialog} - -$DIALOG --clear --title "TREE BOX" \ - --hline "Press arrows, TAB or Enter" \ - --hfile "../COPYING" \ - --tree "/" \ - "This is tree box" -1 -1 10 \ - `find -x / -type d` 2>/tmp/tree.tmp.$$ - -retval=$? - -choice=`cat /tmp/tree.tmp.$$` - -case $retval in - 0) - echo "'$choice' chosen.";; - 1) - echo "Cancel pressed.";; - 255) - [ -z "$choice" ] || echo $choice ; - echo "ESC pressed.";; -esac - -rm -f /tmp/tree.tmp.$$ Index: gnu/usr.bin/dialog/TESTS/checklist =================================================================== --- gnu/usr.bin/dialog/TESTS/checklist (revision 216873) +++ gnu/usr.bin/dialog/TESTS/checklist (working copy) @@ -1,33 +0,0 @@ -#!/bin/sh -DIALOG=${DIALOG=/usr/bin/dialog} - -$DIALOG --title "CHECKLIST BOX" --clear \ - --checklist "Hi, this is a checklist box. You can use this to \n\ -present a list of choices which can be turned on or \n\ -off. If there are more items than can fit on the \n\ -screen, the list will be scrolled. You can use the \n\ -UP/DOWN arrow keys, the first letter of the choice as a\n\ -hot key, or the number keys 1-9 to choose an option. \n\ -Press SPACE to toggle an option on/off. \n\n\ - Which of the following are fruits?" -1 -1 5 \ - "Apple" "It's an apple." off \ - "Dog" "No, that's not my dog." ON \ - "Orange" "Yeah, that's juicy." off \ - "Cat" "No, never put a dog and a cat together!" oN \ - "Fish" "Cats like fish." On \ - "Lemon" "You know how it tastes." on 2> /tmp/checklist.tmp.$$ - -retval=$? - -choice=`cat /tmp/checklist.tmp.$$` -rm -f /tmp/checklist.tmp.$$ - -case $retval in - 0) - echo "'$choice' chosen.";; - 1) - echo "Cancel pressed.";; - 255) - [ -z "$choice" ] || echo $choice ; - echo "ESC pressed.";; -esac Index: gnu/usr.bin/dialog/TESTS/radiolist =================================================================== --- gnu/usr.bin/dialog/TESTS/radiolist (revision 216873) +++ gnu/usr.bin/dialog/TESTS/radiolist (working copy) @@ -1,33 +0,0 @@ -#!/bin/sh -DIALOG=${DIALOG=/usr/bin/dialog} - -$DIALOG --title "RADIOLIST BOX" --clear \ - --radiolist "Hi, this is a radiolist box. You can use this to \n\ -present a list of choices, one of them can be turned \n\ -on or off. If there are more items than can fit on the \n\ -screen, the list will be scrolled. You can use the \n\ -UP/DOWN arrow keys, the first letter of the choice as a\n\ -hot key, or the number keys 1-9 to choose an option. \n\ -Press SPACE to toggle an option on/off. \n\n\ - Which of the following are fruits?" -1 -1 5 \ - "Apple" "It's an apple." off \ - "Dog" "No, that's not my dog." ON \ - "Orange" "Yeah, that's juicy." off \ - "Cat" "No, never put a dog and a cat together!" oFF \ - "Fish" "Cats like fish." OFF \ - "Lemon" "You know how it tastes." oFF 2> /tmp/radiolist.tmp.$$ - -retval=$? - -choice=`cat /tmp/radiolist.tmp.$$` -rm -f /tmp/radiolist.tmp.$$ - -case $retval in - 0) - echo "'$choice' chosen.";; - 1) - echo "Cancel pressed.";; - 255) - [ -z "$choice" ] || echo $choice ; - echo "ESC pressed.";; -esac Index: gnu/usr.bin/dialog/TESTS/Makefile =================================================================== --- gnu/usr.bin/dialog/TESTS/Makefile (revision 216873) +++ gnu/usr.bin/dialog/TESTS/Makefile (working copy) @@ -1,8 +0,0 @@ -# $FreeBSD$ - -NO_OBJ= -FILES= README checklist ftreebox infobox inputbox menubox msgbox \ - prgbox radiolist textbox treebox yesno -FILESDIR= ${SHAREDIR}/examples/dialog - -.include <bsd.prog.mk> Index: gnu/usr.bin/dialog/TESTS/README =================================================================== --- gnu/usr.bin/dialog/TESTS/README (revision 216873) +++ gnu/usr.bin/dialog/TESTS/README (working copy) @@ -1,15 +0,0 @@ -These shell scripts demonstrate possibilities of the dialog(1) tool. - -checklist - checkbox list -ftreebox - file tree box -infobox - info box -inputbox - input box -menubox - menu -msgbox - message box -prgbox - program box -radiolist - radio button list -textbox - simple text box -treebox - tree box -yesno - yes/no dialog - -$FreeBSD$ Index: gnu/usr.bin/dialog/TESTS/menubox =================================================================== --- gnu/usr.bin/dialog/TESTS/menubox (revision 216873) +++ gnu/usr.bin/dialog/TESTS/menubox (working copy) @@ -1,35 +0,0 @@ -#!/bin/sh -DIALOG=${DIALOG=/usr/bin/dialog} - -$DIALOG --clear --title "MENU BOX" \ - --hline "Press 1-9, Up/Down, first letter or Enter" \ - --menu "Hi, this is a menu box. You can use this to \n\ -present a list of choices for the user to \n\ -choose. If there are more items than can fit \n\ -on the screen, the menu will be scrolled. \n\ -You can use the UP/DOWN arrow keys, the first \n\ -letter of the choice as a hot key, or the \n\ -number keys 1-9 to choose an option.\n\ -Try it now!\n\n\ - Choose the OS you like:" -1 -1 4 \ - "FreeBSD" "A Real Operating System for Real Users" \ - "Linux" "Another free Unix Clone for 386/486" \ - "OS/2" "IBM OS/2" \ - "WIN NT" "Microsoft Windows NT" \ - "PCDOS" "IBM PC DOS" \ - "MSDOS" "Microsoft DOS" 2> /tmp/menu.tmp.$$ - -retval=$? - -choice=`cat /tmp/menu.tmp.$$` -rm -f /tmp/menu.tmp.$$ - -case $retval in - 0) - echo "'$choice' chosen.";; - 1) - echo "Cancel pressed.";; - 255) - [ -z "$choice" ] || echo $choice ; - echo "ESC pressed.";; -esac Index: gnu/usr.bin/dialog/TESTS/textbox =================================================================== --- gnu/usr.bin/dialog/TESTS/textbox (revision 216873) +++ gnu/usr.bin/dialog/TESTS/textbox (working copy) @@ -1,42 +0,0 @@ -#!/bin/sh -DIALOG=${DIALOG=/usr/bin/dialog} - -cat << EOF > /tmp/textbox.tmp.$$ -Hi, this is a text dialog box. It can be used to display text from a file. -The file should not contain any 'tab' characters, so you should 'expand' -the file first if it contains 'tab' characters. - -It's like a simple text file viewer, with these keys implemented: - -PGDN/SPACE - Move down one page -PGUP/'b' - Move up one page -DOWN/'j' - Move down one line -UP/'k' - Move up one line -LEFT/'h' - Scroll left -RIGHT/'l' - Scroll right -'0' - Move to beginning of line -HOME/'g' - Move to beginning of file -END/'G' - Move to end of file -'/' - Forward search -'?' - Backward search -'n' - Repeat last search (forward) -'N' - Repeat last search (backward) - - -The following is a sample text file: - - -EOF - -cat ../COPYING | expand >> /tmp/textbox.tmp.$$ - -$DIALOG --clear --title "TEXT BOX" --textbox "/tmp/textbox.tmp.$$" 22 77 - -case $? in - 0) - echo "OK";; - 255) - echo "EXIT choosed.";; -esac - -rm -f /tmp/textbox.tmp.$$ Index: gnu/usr.bin/dialog/TESTS/yesno =================================================================== --- gnu/usr.bin/dialog/TESTS/yesno (revision 216873) +++ gnu/usr.bin/dialog/TESTS/yesno (working copy) @@ -1,23 +0,0 @@ -#!/bin/sh -DIALOG=${DIALOG=/usr/bin/dialog} - -$DIALOG --title "YES/NO BOX" --clear \ - --hline "Press F1 or ? to see GNU GPL" \ - --hfile ../COPYING \ - --yesno "Hi, this is a yes/no dialog box. You can use this to ask \ - questions that have an answer of either yes or no. \ - BTW, do you notice that long lines will be automatically \ - wrapped around so that they can fit in the box? You can \ - also control line breaking explicitly by inserting \ - 'backslash n' at any place you like, but in this case, \ - auto wrap around will be disabled and you will have to \ - control line breaking yourself." 15 61 - -case $? in - 0) - echo "Yes chosen.";; - 1) - echo "No chosen.";; - 255) - echo "ESC pressed.";; -esac Index: gnu/usr.bin/dialog/TESTS/ftreebox =================================================================== --- gnu/usr.bin/dialog/TESTS/ftreebox (revision 216873) +++ gnu/usr.bin/dialog/TESTS/ftreebox (working copy) @@ -1,27 +0,0 @@ -#!/bin/sh -DIALOG=${DIALOG=/usr/bin/dialog} - -find -xd / -type d > /tmp/ftreebox.tmp.$$ - -$DIALOG --clear --title "FTREE BOX" \ - --hline "Press arrows, TAB or Enter" \ - --hfile "../COPYING" \ - --ftree "/tmp/ftreebox.tmp.$$" "/" \ - "This is ftree box" \ - -1 -1 10 2>/tmp/ftree.tmp.$$ - -retval=$? - -choice=`cat /tmp/ftree.tmp.$$` - -case $retval in - 0) - echo "'$choice' chosen.";; - 1) - echo "Cancel pressed.";; - 255) - [ -z "$choice" ] || echo $choice ; - echo "ESC pressed.";; -esac - -rm -f /tmp/ftreebox.tmp.$$ /tmp/ftree.tmp.$$ Index: gnu/usr.bin/dialog/README.lib =================================================================== --- gnu/usr.bin/dialog/README.lib (revision 216873) +++ gnu/usr.bin/dialog/README.lib (working copy) @@ -1,3 +0,0 @@ -Now 'dialog' splitted to this sources and library of functions, -see /usr/src/gnu/lib/libdialog for details. - Ache. Index: gnu/usr.bin/dialog/COPYING =================================================================== --- gnu/usr.bin/dialog/COPYING (revision 216873) +++ gnu/usr.bin/dialog/COPYING (working copy) @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - Appendix: How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) 19yy <name of author> - - 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. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) 19yy name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. Index: gnu/usr.bin/dialog/Makefile =================================================================== --- gnu/usr.bin/dialog/Makefile (revision 216873) +++ gnu/usr.bin/dialog/Makefile (working copy) @@ -1,17 +1,13 @@ -# Makefile for dialog # $FreeBSD$ -.include <bsd.own.mk> - -.if ${MK_EXAMPLES} != "no" -SUBDIR= TESTS -.endif - +DIALOG= ${.CURDIR}/../../../contrib/dialog PROG= dialog -CFLAGS+= -Wall -Wstrict-prototypes - DPADD= $(LIBDIALOG) $(LIBNCURSES) -LDADD= -ldialog -lncurses +LDADD= -ldialog -lncursesw -lm +CFLAGS+= -I${.CURDIR} -I${DIALOG} +.PATH: ${DIALOG} +WARNS?= 3 + .include <bsd.prog.mk> Index: gnu/usr.bin/dialog/README =================================================================== --- gnu/usr.bin/dialog/README (revision 216873) +++ gnu/usr.bin/dialog/README (working copy) @@ -1,161 +0,0 @@ - - dialog - Display dialog boxes in shell script (version 0.3) - =========================================================== - -This is a program that will enable you to present a variety of questions or -display messages using dialog boxes from a shell script. Currently, these -types of dialog boxes are implemented: yes/no box, menu box, input box, -message box, text box, info box, checklist box. The idea of writing this -program came from the fact that most questions asked in a shell script (and -many interactive programs as well) can be classified into these few types: - - - 1) One that requires the user to answer either yes or no. - - 2) One that presents a number of options for the user to choose. - - 3) One that requires the user to input a string. - - 4) One that displays a message and optionally wait for a key press - before continuing. - - 5) One that presents a list of options that can be turned on or off. - - -The program 'dialog' can, say for example, be called in a shell script to -present the first type of questions like this: - - - if dialog --yesno <question text> <height> <width> - then - ... - fi - - - e.g. if dialog --yesno "Do you want to continue?" 7 51 - then - echo "Continuing..." - else - echo "Aborting..." - fi - - -I've included a sample shell script for each type of boxes in the directory -samples. The program requires ncurses to compile. Running 'dialog' without -arguments will display the usage. - - - -FEATURES --------- - - * Friendly dialog box interface with buttons, etc. - - * Auto wrap around of question text if it's too long to fit on - one line. - - * "\n" can be inserted in question text to control line breaking - explicitly. The real newline character '\n' can also be used. - - * run-time configruation of color settings and other options using - a configuration file. - - - -WHAT'S NEW SINCE VERSION 0.21? ------------------------------- - - * some changes for faster screen update. - - * much more flexible color settings. Can use all 16 colors - (8 normal, 8 highlight) of the Linux console. - - * added run-time configuration using configuration file. - - * some minor bug fixes and cleanups for menubox, checklist and - textbox. - - * added a man page. - - * some changes for easier porting to other Unix systems (tested - on Ultrix, SunOS and HPUX) - - - -INSTALLATION ------------- - - 1. cd ./src - - 2. Go to step 3 if your system has ncurses (e.g. Linux). - Edit Makefile and remove -DHAVE_NCURSES from DEFS. Also - remove rc.c from SRCS and rc.o from OBJS. Change LIBS as - appropriate (Usually, it should be '-lcurses -ltermcap'). - Go to step 6. - - 3. Edit Makefile and remove -DBROKEN_WSCRL from DEFS if you - are using ncurses 1.8.3 or newer. Menu scrolling should - be faster. DON'T REMOVE IT IF YOU ARE NOT USING AT LEAST - VERSION 1.8.3 OF NCURSES. - - 4. Edit dialog.h and change USE_SHADOW to FALSE if you don't - want shadowed dialog boxes. Also change USE_COLORS to - FALSE if you don't want colors. Note that 'dialog' will - check if the terminal supports colors, and will use mono - settings if it doesn't, so USE_COLORS won't do any harm - even if you have a mono display. Also note that USE_SHADOW - implies USE_COLORS. These two options can be changed at - run-time using the run-time configuration file (see below). - - 5. Edit colors.h to change default color definitions if you - don't like the defaults. These are only compiled in defaults, - you can change them at run-time using the run-time - configuration file. - - 6. 'make depend; make install' will compile and install the - binaries in /usr/local/bin (change BINDIR in Makefile if - you want to install elsewhere). - - 7. 'make install.man' will install the man page to - /usr/local/man (change MANDIR in Makefile if you want to - install elsewhere). - - 8. You can then try the sample shell scripts in the samples - directory (make sure the environment variable DIALOG is - not set, the scripts use it to find the dialog binary, if - it's not set, "../src/dialog" will be used). - - 9. Don't forget to mail me (mail address at end of this file) - if you find any bugs, have some good color settings to - contribute or just want to tell me that you like it, Don't - mail me if you don't like it :-) - - - -RUN-TIME CONFIGURATION ----------------------- - - 1. Create a sample configuration file by typing: - - "dialog --create-rc <file>" - - 2. At start, 'dialog' determines the settings to use as follows: - - a) if environment variable DIALOGRC is set, it's value - determines the name of the configuration file. - - b) if the file in (a) can't be found, use the file - $HOME/.dialogrc as the configuration file. - - c) if the file in (b) can't be found, use compiled in - defaults. - - 3. Edit the sample configuration file and copy it to some place - that 'dialog' can find, as stated in step 2 above. - - - - -Comments and bug reports welcome. - -- Savio Lam (lam836@cs.cuhk.hk) Index: gnu/usr.bin/dialog/dialog.1 =================================================================== --- gnu/usr.bin/dialog/dialog.1 (revision 216873) +++ gnu/usr.bin/dialog/dialog.1 (working copy) @@ -1,326 +0,0 @@ -.\" $FreeBSD$ -.TH DIALOG 1 "2 October 1998" -.SH NAME -dialog \- display dialog boxes from shell scripts -.SH SYNOPSIS -.B dialog --clear -.br -.BI "dialog --create-rc " file -.br -.B dialog -[ -.BI "\-\-title " title -] -[ -.B \-\-clear -] -[ -.BI "\-\-hline " line -] -[ -.BI "\-\-hfile " file -] -.B box-options -.SH DESCRIPTION -.B Dialog -is a program which allows you to present a variety of questions or -display messages in dialog box form from a shell script. The following -types of dialog objects are currently supported: -.LP -.BR yes/no " box," " menu" " box," " input" " box," -.BR message " box," " text" " box," " info" " box," -.BR checklist " box," " program" " box," -.BR radiolist " box," -.BR ftree " and " tree " boxes." -.SH OPTIONS -.TP -.B \-\-clear -The screen will be cleared to the -.BR "screen attribute" " on exit." -.TP -.BI \-\-create-rc " file" -.RB "Since " dialog " supports run-time configuration," -this can be used to dump a sample configuration file to the file specified -by -.IR file "." -.TP -.BI \-\-title " title" -Specifies a -.I title -string to be displayed at the top of the dialog box. -.TP -.BI \-\-hline " line" -Specifies a -.I line -string to be displayed at the bottom of the dialog box. -.TP -.BI \-\-hfile " file" -Specifies a -.I file -to be displayed by pressing ? or F1. -.TP -.B Box Options -.TP -.BI \-\-yesno " text height width \fR[ \fByes \fR| \fBno \fR]" -.RB A " yes/no" " dialog box of size" -.I height -rows by -.I width -columns will be displayed. The string specified by -.I text -is displayed inside the dialog box. If this string is too long to fit -in one line, it will be automatically divided into multiple lines at -the appropriate points. The -.I text -string may also contain the sub-string -.I -"\en" -or newline characters -.I `\en\' -to control line breaking explicitly. This dialog box is useful for -asking questions that require the user to answer either yes or no. -.RB "The dialog box has a" " Yes" " button and a " No -button, in which the user can switch between by pressing the -.IR TAB " key." -.RB A " Yes" " button is selected by default unless" " no" -is specified. -.TP -.BI \-\-msgbox " text height width" -.RB A " message" " box is very similar to a" " yes/no" " box." -The only difference between a -.B message -box and a -.B yes/no -box is that a -.B message -box has only a single -.B OK -button. You can use this dialog box to display any message you like. -After reading the message, the user can press the -.I ENTER -key so that -.B dialog -will exit and the calling shell script can continue its operation. -.TP -.BI \-\-infobox " text height width" -.RB An " info" " box is basically a" " message" " box." -However, in this case, -.B dialog -will exit immediately after displaying the message to the user. The -screen is not cleared when -.B dialog -exits, so that the message will remain on the screen until the calling -shell script clears it later. This is useful when you want to inform -the user that some operations are carrying on that may require some -time to finish. -.TP -.BI \-\-inputbox " text height width" -.RB "An " input " box is useful when you want to ask questions that" -require the user to input a string as the answer. When inputing the -string, the -.I BACKSPACE -key can be used to correct typing errors. If the input string is longer than -can be fitted in the dialog box, the input field will be scrolled. On exit, -the input string will be printed on -.IR stderr "." -.TP -.BI \-\-textbox " file height width" -.RB A " text" " box lets you display the contents of a text file in a" -dialog box. It is like a simple text file viewer. The user can move -through the file by using the -.IR UP/DOWN ", " PGUP/PGDN -.RI and " HOME/END" " keys available on most keyboards." -If the lines are too long to be displayed in the box, the -.I LEFT/RIGHT -keys can be used to scroll the text region horizontally. For more -convenience, forward and backward searching functions are also provided. -.IP "\fB\-\-menu \fItext height width menu-height \fR[ \fItag item \fR] \fI..." -As its name suggests, a -.B menu -box is a dialog box that can be used to present a list of choices in -the form of a menu for the user to choose. Each menu entry consists of a -.IR tag " string and an " item " string. The" -.I tag -gives the entry a name to distinguish it from the other entries in the -menu. The -.I item -is a short description of the option that the entry represents. The -user can move between the menu entries by pressing the -.I UP/DOWN -keys, the first letter of the -.I tag -as a hot-key, or the number keys -.IR 1-9 ". There are" -.I menu-height -entries displayed in the menu at one time, but the menu will be -scrolled if there are more entries than that. When -.B dialog -exits, the -.I tag -of the chosen menu entry will be printed on -.IR stderr "." -.TP -.BI \-\-prgbox " command height width" -.RB A " program" " box lets you display output of command in" -dialog box. -.IP "\fB\-\-checklist \fItext height width list-height \fR[ \fItag item status \fR] \fI..." -.RB "A " checklist " box is similar to a " menu " box in that there are" -multiple entries presented in the form of a menu. Instead of choosing -one entry among the entries, each entry can be turned on or off by the -user. The initial on/off state of each entry is specified by -.IR status "." -On exit, a list of the -.I tag -strings of those entries that are turned on will be printed on -.IR stderr "." -.IP "\fB\-\-radiolist \fItext height width list-height \fR[ \fItag item status \fR] \fI..." -.RB "A " radiolist " box is similar to a " checklist " but it only allows" -a single entry to be selected. One entry may initially be turned on as -specified by -.IR status "." -On exit, the -.I tag -string of the entry that is turned on will be printed on -.IR stderr "." -.IP "\fB\-\-ftree \fIfile FS text height width menu-height" -.B ftree -box is a dialog box showing the tree described by the data from the file -.IR file "." -The data in the file should look like find(1) output. For the -find output, the field separator -.I FS -will be -.IR \'/\' ". If" -.IR height " and" -.IR width " are" -positive numbers, they set the absolute size of the whole -.BR ftree " box. If" -.IR height " and" -.IR width " are negative numbers, the size of the" -.B ftree -box will be -selected automatically. -.I menu-height -sets the height of the tree subwindow inside the -.B ftree -box and must be set. -.I text -is shown inside the -.B ftree -box above the tree subwindow and can contain newline characters -.I '\en\' -to split lines. One can navigate in the tree by pressing -.IR UP/DOWN " or " \'+\'/\'-\' ", " PG_UP/PG_DOWN " or " \'b\'/SPACE -.RI "and " HOME/END " or " \'g\'/\'G\' "." -A leaf of the tree is selected by pressing -.IR TAB " or " LEFT/RIGHT -the -.B OK -button and pressing -.IR ENTER "." -The selected leaf (to be more -exact, the full path to it from the root of the tree) is printed to -.IR stderr "." -If -.B Cancel -and then -.I ENTER -is pressed, nothing is printed to -.IR stderr "." -.I file -may contain data like find(1) -output, as well as like the output of find(1) with -.I -d -option. Some of the transient paths to the leaves of the tree may be -absent. Such data is corrected when fed from file. -.IP "\fB\-\-tree \fIFS text height width menu-height \fR[ \fIitem \fR] \fI..." -.B tree -box is like -.B ftree -box with some exceptions. First, the data is not -entered from a file, but from the command line as -.I item item ... -Second, the data thus entered is not corrected in any way. -Thus, the data like the output of find(1) with -.I -d -option will look incorrectly. -.SH "RUN-TIME CONFIGURATION" -.TP 4 -1. -Create a sample configuration file by typing: -.LP -.in +1i -"dialog --create-rc <file>" -.TP 4 -2. -At start, -.B dialog -determines the settings to use as follows: -.RS -.TP 4 -a) -if environment variable -.B DIALOGRC -is set, its value determines the name of the configuration file. -.TP 4 -b) -if the file in (a) can't be found, use the file -.I $HOME/.dialogrc -as the configuration file. -.TP 4 -c) -if the file in (b) can't be found, use compiled in defaults. -.RE -.TP 4 -3. -Edit the sample configuration file and copy it to some place that -.B dialog -can find, as stated in step 2 above. -.SH ENVIRONMENT -.TP 15 -.B DIALOGRC -Define this variable if you want to specify the name of the configuration file -to use. -.SH FILES -.TP 20 -.I $HOME/.dialogrc -default configuration file -.SH DIAGNOSTICS -Exit status is 0 if -.BR dialog " is exited by pressing the " Yes " or " OK -button, and 1 if the -.BR No " or " Cancel -button is pressed. Otherwise, if errors occur inside -.B dialog -or -.B dialog -is exited by pressing the -.I ESC -key, the exit status is -1. -.SH SEE ALSO -dialog(3) -.SH BUGS -Text files containing -.I tab -characters may cause problems with -.B text -box. -.I Tab -characters in text files must first be expanded to spaces before being -.RB "displayed by " text " box." -.sp 1 -Screen update is too slow. -.sp 1 -The -.B ftree -and -.B tree -boxes do not allow the tree to be moved to the left or to -the right. Thus, if there are many levels of data, some of the leaves can be -rendered invisible. A standard display with 80 characters allows for 17 -levels to be visible. Deeper levels are invisible. However, the navigation -in the tree and selection of leaves do work. -.SH AUTHOR -Savio Lam (lam836@cs.cuhk.hk) -.sp 1 -Changes by Anatoly A. Orehovsky (tolik@mpeks.tomsk.su) (ftree and tree boxes) Index: gnu/lib/libdialog/msgbox.c =================================================================== --- gnu/lib/libdialog/msgbox.c (revision 216873) +++ gnu/lib/libdialog/msgbox.c (working copy) @@ -1,346 +0,0 @@ -/* - * msgbox.c -- implements the message box and info box - * - * AUTHOR: Savio Lam (lam836@cs.cuhk.hk) - * - * 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. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <dialog.h> -#include "dialog.priv.h" - - -/* local prototypes */ -static int getnlines(unsigned char *buf); -static void print_page(WINDOW *win, int height, int width, unsigned char *buf, int startline, int hscroll); -static void print_perc(WINDOW *win, int y, int x, float p); - - -/* - * Display a message box. Program will pause and display an "OK" button - * if the parameter 'pause' is non-zero. - */ -int dialog_msgbox(unsigned char *title, unsigned char *prompt, int height, int width, int pause) -{ - int i, j, x, y, key = 0; - WINDOW *dialog; - - if (height < 0) - height = strheight(prompt)+2+2*(!!pause); - if (width < 0) { - i = strwidth(prompt); - j = ((title != NULL) ? strwidth(title) : 0); - width = MAX(i,j)+4; - } - if (pause) - width = MAX(width,10); - - if (width > COLS) - width = COLS; - if (height > LINES) - height = LINES; - /* center dialog box on screen */ - x = DialogX ? DialogX : (COLS - width)/2; - y = DialogY ? DialogY : (LINES - height)/2; - -#ifdef HAVE_NCURSES - if (use_shadow) - draw_shadow(stdscr, y, x, height, width); -#endif - dialog = newwin(height, width, y, x); - if (dialog == NULL) { - endwin(); - fprintf(stderr, "\nnewwin(%d,%d,%d,%d) failed, maybe wrong dims\n", height,width,y,x); - exit(1); - } - keypad(dialog, TRUE); - - draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); - - if (title != NULL) { - wattrset(dialog, title_attr); - wmove(dialog, 0, (width - strlen(title))/2 - 1); - waddch(dialog, ' '); - waddstr(dialog, title); - waddch(dialog, ' '); - } - wattrset(dialog, dialog_attr); - wmove(dialog, 1, 2); - print_autowrap(dialog, prompt, height-1, width-2, width, 1, 2, TRUE, FALSE); - - if (pause) { - wattrset(dialog, border_attr); - wmove(dialog, height-3, 0); - waddch(dialog, ACS_LTEE); - for (i = 0; i < width-2; i++) - waddch(dialog, ACS_HLINE); - wattrset(dialog, dialog_attr); - waddch(dialog, ACS_RTEE); - wmove(dialog, height-2, 1); - for (i = 0; i < width-2; i++) - waddch(dialog, ' '); - display_helpline(dialog, height-1, width); - print_button(dialog, " OK ", height-2, width/2-6, TRUE); - wrefresh(dialog); - while (key != ESC && key != '\n' && key != ' ' && key != '\r') - key = wgetch(dialog); - if (key == '\r') - key = '\n'; - } - else { - key = '\n'; - wrefresh(dialog); - } - - delwin(dialog); - return (key == ESC ? -1 : 0); -} -/* End of dialog_msgbox() */ - -int -dialog_mesgbox(unsigned char *title, unsigned char *prompt, int height, int width) -/* - * Desc: basically the same as dialog_msgbox, but ... can use PGUP, PGDN and - * arrowkeys to move around the text and pause is always enabled - */ -{ - int i, j, x, y, key=0; - int theight, startline, hscroll, max_lines; - WINDOW *dialog; - - if (height < 0) - height = strheight(prompt)+2+2; - if (width < 0) { - i = strwidth(prompt); - j = ((title != NULL) ? strwidth(title) : 0); - width = MAX(i,j)+4; - } - width = MAX(width,10); - - if (width > COLS) - width = COLS; - if (height > LINES) - height = LINES; - /* center dialog box on screen */ - x = (COLS - width)/2; - y = (LINES - height)/2; - -#ifdef HAVE_NCURSES - if (use_shadow) - draw_shadow(stdscr, y, x, height, width); -#endif - dialog = newwin(height, width, y, x); - if (dialog == NULL) { - endwin(); - fprintf(stderr, "\nnewwin(%d,%d,%d,%d) failed, maybe wrong dims\n", height,width,y,x); - exit(1); - } - keypad(dialog, TRUE); - - draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); - - if (title != NULL) { - wattrset(dialog, title_attr); - wmove(dialog, 0, (width - strlen(title))/2 - 1); - waddch(dialog, ' '); - waddstr(dialog, title); - waddch(dialog, ' '); - } - - wattrset(dialog, border_attr); - wmove(dialog, height-3, 0); - waddch(dialog, ACS_LTEE); - for (i = 0; i < width-2; i++) - waddch(dialog, ACS_HLINE); - wattrset(dialog, dialog_attr); - waddch(dialog, ACS_RTEE); - wmove(dialog, height-2, 1); - for (i = 0; i < width-2; i++) - waddch(dialog, ' '); - display_helpline(dialog, height-1, width); - print_button(dialog, " OK ", height-2, width/2-6, TRUE); - wattrset(dialog, dialog_attr); - - theight = height - 4; - startline = 0; - hscroll = 0; - max_lines = getnlines(prompt); - print_page(dialog, theight, width, prompt, startline, hscroll); - print_perc(dialog, height-3, width-9, (float) (startline+theight)/max_lines); - wmove(dialog, height-2, width/2-3); - wrefresh(dialog); - while ((key != ESC) && (key != '\n') && (key != '\r') && (key != ' ')) { - key = wgetch(dialog); - switch(key) { - case KEY_HOME: - startline=0; - hscroll=0; - break; - case KEY_END: - startline = max_lines - theight; - if (startline < 0) startline = 0; - break; - case '\020': /* ^P */ - case KEY_UP: - if (startline > 0) startline--; - break; - case '\016': /* ^N */ - case KEY_DOWN: - if (startline < max_lines - theight) startline++; - break; - case KEY_RIGHT: - hscroll+=5; - break; - case KEY_LEFT: - if (hscroll > 0) hscroll-=5; - if (hscroll < 0) hscroll =0; - break; - case KEY_PPAGE: - if (startline - height > 0) { - startline -= theight; - } else { - startline = 0; - } - break; - case KEY_NPAGE: - if (startline + theight < max_lines - theight) { - startline += theight; - } else { - startline = max_lines - theight; - if (startline < 0) startline = 0; - } - break; - case KEY_F(1): - case '?': - display_helpfile(); - break; - } - print_page(dialog, theight, width, prompt, startline, hscroll); - print_perc(dialog, height-3, width-9, (float) (startline+theight)/max_lines); - wmove(dialog, height-2, width/2-3); - wrefresh(dialog); - } - - delwin(dialog); - return (key == ESC ? -1 : 0); - -} /* dialog_mesgbox() */ - -static void -print_perc(WINDOW *win, int y, int x, float p) -/* - * Desc: print p as a percentage at the coordinates (y,x) - */ -{ - char ps[10]; - - if (p>1.0) p=1.0; - sprintf(ps, "(%3d%%)", (int) (p*100)); - wmove(win, y, x); - waddstr(win, ps); - - return; -} /* print_perc() */ - -static int -getnlines(unsigned char *buf) -/* - * Desc: count the # of lines in <buf> - */ -{ - int i = 0; - - if (*buf) - i++; - while (*buf) { - if (*buf == '\n' || *buf == '\r') - i++; - buf++; - } - return(i); -} /* getlines() */ - - -unsigned char * -getline(unsigned char *buf, int n) -/* - * Desc: return a pointer to the n'th line in <buf> or NULL if its - * not there - */ -{ - int i; - - if (n<0) { - return(NULL); - } - - i=0; - while (*buf && i<n) { - if (*buf == '\n' || *buf == '\r') { - i++; - } - buf++; - } - if (i<n) { - return(NULL); - } else { - return(buf); - } -} /* getline() */ - -static void -print_page(WINDOW *win, int height, int width, unsigned char *buf, int startline, int hscroll) -/* - * Desc: Print a page of text in the current window, starting at line <startline> - * with a <horizontal> scroll of hscroll from buffer <buf> - */ -{ - int i, j; - unsigned char *b; - - b = getline(buf, startline); - for (i=0; i<height; i++) { - /* clear line */ - wmove(win, 1+i, 1); - for (j=0; j<width-2; j++) waddnstr(win, " ", 1); - wmove(win, 1+i, 1); - j = 0; - /* scroll to the right */ - while (*b && (*b != '\n') && (*b != '\r') && (j<hscroll)) { - b++; - j++; - } - /* print new line */ - j = 0; - while (*b && (*b != '\n') && (*b != '\r') && (j<width-2)) { - waddnstr(win, b, 1); - if (*b != '\t') { /* check for tabs */ - j++; - } else { - j = ((int) (j+1)/8 + 1) * 8 - 1; - } - b++; - } - while (*b && (*b != '\n') && (*b != '\r')) b++; - if (*b) b++; /* skip over '\n', if it exists */ - } -} /* print_page() */ - - - - Index: gnu/lib/libdialog/dlg_config.h =================================================================== --- gnu/lib/libdialog/dlg_config.h (revision 0) +++ gnu/lib/libdialog/dlg_config.h (revision 0) @@ -0,0 +1,88 @@ +/* dlg_config.h. Generated automatically by configure. */ +/* + * The configure script expands this as a set of definitions + */ + +#define DIALOG_PATCHDATE 20100428 +#define DIALOG_VERSION "1.1" +#define HAVE_ALLOCA 1 +#define HAVE_COLOR 1 +#define HAVE_CURSES_H 1 +#define HAVE_DIRENT_H 1 +#define HAVE_DLG_FORMBOX 1 +#define HAVE_DLG_GAUGE 1 +#define HAVE_DLG_MIXEDFORM 1 +#define HAVE_DLG_TAILBOX 1 +#define HAVE_DLG_TRACE 1 +#define HAVE_FEOF_UNLOCKED 1 +#define HAVE_FLUSHINP 1 +#define HAVE_FSEEKO 1 +#define HAVE_GETBEGX 1 +#define HAVE_GETBEGY 1 +#define HAVE_GETBEGYX 1 +#define HAVE_GETCURX 1 +#define HAVE_GETCURY 1 +#define HAVE_GETCWD 1 +#define HAVE_GETEGID 1 +#define HAVE_GETEUID 1 +#define HAVE_GETGID 1 +#define HAVE_GETMAXX 1 +#define HAVE_GETMAXY 1 +#define HAVE_GETMAXYX 1 +#define HAVE_GETPAGESIZE 1 +#define HAVE_GETPARX 1 +#define HAVE_GETPARY 1 +#define HAVE_GETPARYX 1 +#define HAVE_GETUID 1 +#define HAVE_ICONV 1 +#define HAVE_INTTYPES_H 1 +#define HAVE_LANGINFO_CODESET 1 +#define HAVE_LC_MESSAGES 1 +#define HAVE_LIMITS_H 1 +#define HAVE_LOCALE_H 1 +#define HAVE_MBSTATE_T 1 +#define HAVE_MEMORY_H 1 +#define HAVE_MIXEDGAUGE 1 +#define HAVE_MMAP 1 +#define HAVE_MUNMAP 1 +#define HAVE_NL_TYPES_H 1 +#define HAVE_PUTENV 1 +#define HAVE_RC_FILE 1 +#define HAVE_SEARCH_H 1 +#define HAVE_SETENV 1 +#define HAVE_SETLOCALE 1 +#define HAVE_STDDEF_H 1 +#define HAVE_STDINT_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_STPCPY 1 +#define HAVE_STRCASECMP 1 +#define HAVE_STRCHR 1 +#define HAVE_STRDUP 1 +#define HAVE_STRFTIME 1 +#define HAVE_STRINGS_H 1 +#define HAVE_STRING_H 1 +#define HAVE_STRTOUL 1 +#define HAVE_SYS_PARAM_H 1 +#define HAVE_SYS_STAT_H 1 +#define HAVE_SYS_TYPES_H 1 +#define HAVE_SYS_WAIT_H 1 +#define HAVE_TERM_H 1 +#define HAVE_TSEARCH 1 +#define HAVE_TYPE_CHTYPE 1 +#define HAVE_UNCTRL_H 1 +#define HAVE_UNISTD_H 1 +#define HAVE_USE_DEFAULT_COLORS 1 +#define HAVE_WAITPID 1 +#define HAVE_WGET_WCH 1 +#define HAVE_XDIALOG 1 +#define HAVE__NC_FREE_AND_EXIT 1 +#define ICONV_CONST const +#define MIXEDCASE_FILENAMES 1 +#define NCURSES 1 +#define NEED_WCHAR_H 1 +#define PACKAGE "dialog" +#define RETSIGTYPE void +#define STDC_HEADERS 1 +#define SYSTEM_NAME "freebsd9.0" +#define TIME_WITH_SYS_TIME 1 +#define TYPE_CHTYPE_IS_SCALAR 1 Index: gnu/lib/libdialog/dialog.h =================================================================== --- gnu/lib/libdialog/dialog.h (revision 216873) +++ gnu/lib/libdialog/dialog.h (working copy) @@ -1,211 +0,0 @@ -#ifndef _DIALOG_H_INCLUDE -#define _DIALOG_H_INCLUDE - -/* - * dialog.h -- common declarations for all dialog modules - * - * AUTHOR: Savio Lam (lam836@cs.cuhk.hk) - * - * Substantial rennovation: 12/18/95, Jordan K. Hubbard - * - * 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. - * - * $FreeBSD$ - * - */ - -#define HAVE_NCURSES - -#ifdef HAVE_NCURSES -#include <ncurses.h> - -#else - -#ifdef ultrix -#include <cursesX.h> -#else -#include <curses.h> -#endif - -#endif - -/* special return codes for `fire' actions */ -#define DITEM_STATUS(flag) ((flag) & 0x0000FFFF) -#define DITEM_SUCCESS 0 -#define DITEM_FAILURE 1 - -/* Flags - returned in upper 16 bits of return status */ -#define DITEM_LEAVE_MENU (1 << 16) -#define DITEM_REDRAW (1 << 17) -#define DITEM_RECREATE (1 << 18) -#define DITEM_RESTORE (1 << 19) -#define DITEM_CONTINUE (1 << 20) - -/* Attributes as used by entry fields right now */ -#define DITEM_NO_ECHO 0x0001 - - -/* negative offsets for buttons in item lists, if specified */ -#define OK_BUTTON -2 -#define CANCEL_BUTTON -1 - -/* for use in describing more exotic behaviors */ -typedef struct _dmenu_item { - char *prompt; - char *title; - int (*checked)(struct _dmenu_item *self); - int (*fire)(struct _dmenu_item *self); - void (*selected)(struct _dmenu_item *self, int is_selected); - void *data; - char lbra, mark, rbra; - long aux; -} dialogMenuItem; - -#define VERSION "0.4" -#define MAX_LEN 4096 - -#ifndef TRUE -#define TRUE (1) -#endif -#ifndef FALSE -#define FALSE (0) -#endif - -extern int DialogX, DialogY, DialogInputAttrs; - -/* - * 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 - -extern chtype attributes[]; - -#ifdef HAVE_NCURSES -extern bool use_shadow; -void draw_shadow(WINDOW *win, int y, int x, int height, int width); -#endif -void draw_box(WINDOW *win, int y, int x, int height, int width, chtype box, chtype border); -int line_edit(WINDOW *dialog, int box_y, int box_x, int flen, int box_width, chtype attrs, int first, unsigned char *result, int attr_mask); -int strheight(const char *p); -int strwidth(const char *p); - -void dialog_create_rc(unsigned char *filename); -int dialog_yesno(unsigned char *title, unsigned char *prompt, int height, int width); -int dialog_noyes(unsigned char *title, unsigned char *prompt, int height, int width); -int dialog_prgbox(unsigned char *title, const unsigned char *line, int height, int width, int pause, int use_shell); -int dialog_msgbox(unsigned char *title, unsigned char *prompt, int height, int width, int pause); -int dialog_textbox(unsigned char *title, unsigned char *file, int height, int width); -int dialog_menu(unsigned char *title, unsigned char *prompt, int height, int width, int menu_height, - int item_no, void *itptr, unsigned char *result, int *ch, int *sc); -int dialog_checklist(unsigned char *title, unsigned char *prompt, int height, int width, int list_height, - int item_no, void *itptr, unsigned char *result); -int dialog_radiolist(unsigned char *title, unsigned char *prompt, int height, int width, int list_height, - int item_no, void *itptr, unsigned char *result); -int dialog_inputbox(unsigned char *title, unsigned char *prompt, int height, int width, unsigned char *result); -void dialog_clear_norefresh(void); -void dialog_clear(void); -void dialog_update(void); -void init_dialog(void); -void end_dialog(void); - -/* Additions to libdialog */ -char *dialog_fselect(char *dir, char *fmask); -int dialog_dselect(char *dir, char *fmask); -void dialog_notify(char *msg); -int dialog_mesgbox(unsigned char *title, unsigned char *prompt, int height, int width); -void use_helpfile(char *helpfile); -void use_helpline(char *helpline); -char *get_helpline(void); -void restore_helpline(char *helpline); -void dialog_gauge(char *title, char *prompt, int y, int x, int height, int width, int perc); - -/* - * Display a tree menu from file - * - * filename - file with like find(1) output - * FS - fields separator - * title - title of dialog box - * prompt - prompt text into dialog box - * height - height of dialog box - * width - width of dialog box - * menu_height - height of menu box - * result - pointer to char array - * - * return values: - * -1 - ESC pressed - * 0 - Ok, result set (must be freed later) - * 1 - Cancel - */ -int dialog_ftree(unsigned char *filename, unsigned char FS, - unsigned char *title, unsigned char *prompt, - int height, int width, int menu_height, - unsigned char **result); - -/* - * Display a tree menu from array - * - * names - array with like find(1) output - * size - size of array - * FS - fields separator - * title - title of dialog box - * prompt - prompt text into dialog box - * height - height of dialog box - * width - width of dialog box - * menu_height - height of menu box - * result - pointer to char array - * - * return values: - * -1 - ESC pressed - * 0 - Ok, result set - * 1 - Cancel - */ - -int dialog_tree(unsigned char **names, int size, unsigned char FS, - unsigned char *title, unsigned char *prompt, - int height, int width, int menu_height, - unsigned char **result); - -#endif /* _DIALOG_H_INCLUDE */ Index: gnu/lib/libdialog/colors.h =================================================================== --- gnu/lib/libdialog/colors.h (revision 216873) +++ gnu/lib/libdialog/colors.h (working copy) @@ -1,219 +0,0 @@ -/* - * colors.h -- color attribute definitions - * - * AUTHOR: Savio Lam (lam836@cs.cuhk.hk) - * - * 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. - */ - - -/* - * 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_RED -#define TAG_KEY_BG COLOR_WHITE -#define TAG_KEY_HL TRUE - -#define TAG_KEY_SELECTED_FG COLOR_RED -#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 { - unsigned char name[COLOR_NAME_LEN]; - int value; -} color_names_st; - - -#ifdef __DIALOG_MAIN__ - -/* - * For matching color names with color values - */ -color_names_st color_names[] = { - {"BLACK", COLOR_BLACK}, - {"RED", COLOR_RED}, - {"GREEN", COLOR_GREEN}, - {"YELLOW", COLOR_YELLOW}, - {"BLUE", COLOR_BLUE}, - {"MAGENTA", COLOR_MAGENTA}, - {"CYAN", COLOR_CYAN}, - {"WHITE", COLOR_WHITE}, -}; /* color names */ - - -/* - * 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 */ - -#else - -extern color_names_st color_names[]; -extern int color_table[][3]; - -#endif /* __DIALOG_MAIN__ */ Index: gnu/lib/libdialog/inputbox.c =================================================================== --- gnu/lib/libdialog/inputbox.c (revision 216873) +++ gnu/lib/libdialog/inputbox.c (working copy) @@ -1,190 +0,0 @@ -/* - * inputbox.c -- implements the input box - * - * AUTHOR: Savio Lam (lam836@cs.cuhk.hk) - * - * 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. - */ - - -#include <dialog.h> -#include "dialog.priv.h" - - -/* - * Display a dialog box for inputing a string - */ -int dialog_inputbox(unsigned char *title, unsigned char *prompt, int height, int width, unsigned char *result) -{ - int i, j, x, y, box_y, box_x, box_width, first, - key = 0, button = -1; - unsigned char instr[MAX_LEN+1]; - WINDOW *dialog; - - if (height < 0) - height = strheight(prompt)+2+4; - if (width < 0) { - i = strwidth(prompt); - j = ((title != NULL) ? strwidth(title) : 0); - width = MAX(i,j) + 4; - } - width = MAX(width,24); - - if (width > COLS) - width = COLS; - if (height > LINES) - height = LINES; - /* center dialog box on screen */ - x = DialogX ? DialogX : (COLS - width)/2; - y = DialogY ? DialogY : (LINES - height)/2; - -#ifdef HAVE_NCURSES - if (use_shadow) - draw_shadow(stdscr, y, x, height, width); -#endif - dialog = newwin(height, width, y, x); - if (dialog == NULL) { - endwin(); - fprintf(stderr, "\nnewwin(%d,%d,%d,%d) failed, maybe wrong dims\n", height,width,y,x); - exit(1); - } - keypad(dialog, TRUE); - - draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); - wattrset(dialog, border_attr); - wmove(dialog, height-3, 0); - waddch(dialog, ACS_LTEE); - for (i = 0; i < width-2; i++) - waddch(dialog, ACS_HLINE); - wattrset(dialog, dialog_attr); - waddch(dialog, ACS_RTEE); - wmove(dialog, height-2, 1); - for (i = 0; i < width-2; i++) - waddch(dialog, ' '); - - if (title != NULL) { - wattrset(dialog, title_attr); - wmove(dialog, 0, (width - strlen(title))/2 - 1); - waddch(dialog, ' '); - waddstr(dialog, title); - waddch(dialog, ' '); - } - wattrset(dialog, dialog_attr); - wmove(dialog, 1, 2); - print_autowrap(dialog, prompt, height-1, width-2, width, 1, 2, TRUE, FALSE); - - /* 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); - - display_helpline(dialog, height-1, width); - - x = width/2-11; - y = height-2; - print_button(dialog, "Cancel", y, x+14, FALSE); - print_button(dialog, " OK ", y, x, TRUE); - - first = 1; - strcpy(instr, result); - wattrset(dialog, dialog_attr); - - while (key != ESC) { - - if (button == -1) { /* Input box selected */ - key = line_edit(dialog, box_y, box_x, -1, box_width, inputbox_attr, first, instr, DialogInputAttrs); - first = 0; - } - else - key = wgetch(dialog); - - switch (key) { - case 'O': - case 'o': - delwin(dialog); - strcpy(result, instr); - return 0; - case 'C': - case 'c': - delwin(dialog); - return 1; - case KEY_UP: - case KEY_LEFT: - case KEY_BTAB: - switch (button) { - case -1: - button = 1; /* Indicates "Cancel" button is selected */ - print_button(dialog, " OK ", y, x, FALSE); - print_button(dialog, "Cancel", y, x+14, TRUE); - wrefresh(dialog); - break; - case 0: - button = -1; /* Indicates input box is selected */ - print_button(dialog, "Cancel", y, x+14, FALSE); - print_button(dialog, " OK ", y, x, TRUE); - break; - case 1: - button = 0; /* Indicates "OK" button is selected */ - print_button(dialog, "Cancel", y, x+14, FALSE); - print_button(dialog, " OK ", y, x, TRUE); - wrefresh(dialog); - break; - } - break; - case TAB: - case KEY_DOWN: - case KEY_RIGHT: - switch (button) { - case -1: - button = 0; /* Indicates "OK" button is selected */ - print_button(dialog, "Cancel", y, x+14, FALSE); - print_button(dialog, " OK ", y, x, TRUE); - wrefresh(dialog); - break; - case 0: - button = 1; /* Indicates "Cancel" button is selected */ - print_button(dialog, " OK ", y, x, FALSE); - print_button(dialog, "Cancel", y, x+14, TRUE); - wrefresh(dialog); - break; - case 1: - button = -1; /* Indicates input box is selected */ - print_button(dialog, "Cancel", y, x+14, FALSE); - print_button(dialog, " OK ", y, x, TRUE); - break; - } - break; - case ' ': - case '\n': - case '\r': - delwin(dialog); - if (button < 1) - strcpy(result, instr); - return (button == -1 ? 0 : button); - case ESC: - break; - case KEY_F(1): - case '?': - display_helpfile(); - break; - } - } - - delwin(dialog); - return -1; /* ESC pressed */ -} -/* End of dialog_inputbox() */ Index: gnu/lib/libdialog/checklist.c =================================================================== --- gnu/lib/libdialog/checklist.c (revision 216873) +++ gnu/lib/libdialog/checklist.c (working copy) @@ -1,661 +0,0 @@ -/* - * checklist.c -- implements the checklist box - * - * AUTHOR: Savio Lam (lam836@cs.cuhk.hk) - * - * Substantial rennovation: 12/18/95, Jordan K. Hubbard - * - * 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. - * - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <dialog.h> -#include "dialog.priv.h" - - -static void print_item(WINDOW *win, unsigned char *tag, unsigned char *item, int status, int choice, int selected, dialogMenuItem *me, int list_width, int item_x, int check_x); - -#define DREF(di, item) ((di) ? &((di)[(item)]) : NULL) - -/* - * Display a dialog box with a list of options that can be turned on or off - */ -int -dialog_checklist(unsigned char *title, unsigned char *prompt, int height, int width, - int list_height, int cnt, void *it, unsigned char *result) -{ - int i, j, x, y, cur_x, cur_y, old_x, old_y, box_x, box_y, key = 0, button, - choice, l, k, scroll, max_choice, item_no = 0, *status; - int redraw_menu = FALSE, cursor_reset = FALSE; - int rval = 0, onlist = 1, ok_space, cancel_space; - char okButton, cancelButton; - WINDOW *dialog, *list; - unsigned char **items = NULL; - dialogMenuItem *ditems; - int list_width, check_x, item_x; - - /* Allocate space for storing item on/off status */ - if ((status = alloca(sizeof(int) * abs(cnt))) == NULL) { - endwin(); - fprintf(stderr, "\nCan't allocate memory in dialog_checklist().\n"); - exit(-1); - } - -draw: - choice = scroll = button = 0; - /* Previous calling syntax, e.g. just a list of strings? */ - if (cnt >= 0) { - items = it; - ditems = NULL; - item_no = cnt; - /* Initializes status */ - for (i = 0; i < item_no; i++) - status[i] = !strcasecmp(items[i*3 + 2], "on"); - } - /* It's the new specification format - fake the rest of the code out */ - else { - item_no = abs(cnt); - ditems = it; - if (!items) - items = (unsigned char **)alloca((item_no * 3) * sizeof(unsigned char *)); - - /* Initializes status */ - for (i = 0; i < item_no; i++) { - status[i] = ditems[i].checked ? ditems[i].checked(&ditems[i]) : FALSE; - items[i*3] = ditems[i].prompt; - items[i*3 + 1] = ditems[i].title; - items[i*3 + 2] = status[i] ? "on" : "off"; - } - } - max_choice = MIN(list_height, item_no); - - check_x = 0; - item_x = 0; - /* Find length of longest item in order to center checklist */ - for (i = 0; i < item_no; i++) { - l = strlen(items[i*3]); - for (j = 0; j < item_no; j++) { - k = strlen(items[j*3 + 1]); - check_x = MAX(check_x, l + k + 6); - } - item_x = MAX(item_x, l); - } - if (height < 0) - height = strheight(prompt)+list_height+4+2; - if (width < 0) { - i = strwidth(prompt); - j = ((title != NULL) ? strwidth(title) : 0); - width = MAX(i,j); - width = MAX(width,check_x+4)+4; - } - width = MAX(width,24); - - if (width > COLS) - width = COLS; - if (height > LINES) - height = LINES; - /* center dialog box on screen */ - x = (COLS - width)/2; - y = (LINES - height)/2; - -#ifdef HAVE_NCURSES - if (use_shadow) - draw_shadow(stdscr, y, x, height, width); -#endif - dialog = newwin(height, width, y, x); - if (dialog == NULL) { - endwin(); - fprintf(stderr, "\nnewwin(%d,%d,%d,%d) failed, maybe wrong dims\n", height,width, y, x); - return -1; - } - keypad(dialog, TRUE); - - draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); - wattrset(dialog, border_attr); - wmove(dialog, height-3, 0); - waddch(dialog, ACS_LTEE); - for (i = 0; i < width-2; i++) - waddch(dialog, ACS_HLINE); - wattrset(dialog, dialog_attr); - waddch(dialog, ACS_RTEE); - wmove(dialog, height-2, 1); - for (i = 0; i < width-2; i++) - waddch(dialog, ' '); - - if (title != NULL) { - wattrset(dialog, title_attr); - wmove(dialog, 0, (width - strlen(title))/2 - 1); - waddch(dialog, ' '); - waddstr(dialog, title); - waddch(dialog, ' '); - } - wattrset(dialog, dialog_attr); - wmove(dialog, 1, 2); - print_autowrap(dialog, prompt, height - 1, width - 2, width, 1, 2, TRUE, FALSE); - - list_width = width - 6; - getyx(dialog, cur_y, cur_x); - box_y = cur_y + 1; - 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); - if (list == NULL) { - delwin(dialog); - endwin(); - fprintf(stderr, "\nsubwin(dialog,%d,%d,%d,%d) failed, maybe wrong dims\n", list_height, list_width, - y + box_y + 1, x + box_x + 1); - return -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); - - check_x = (list_width - check_x) / 2; - item_x = check_x + item_x + 6; - - /* Print the list */ - for (i = 0; i < max_choice; i++) - print_item(list, items[i * 3], items[i * 3 + 1], status[i], i, i == choice, DREF(ditems, i), list_width, item_x, check_x); - wnoutrefresh(list); - print_arrows(dialog, scroll, list_height, item_no, box_x, box_y, check_x + 4, cur_x, cur_y); - - display_helpline(dialog, height - 1, width); - - x = width / 2 - 11; - y = height - 2; - /* Is this a fancy new style argument string where we get to override - * the buttons, or an old style one where they're fixed? - */ - if (ditems && result) { - cancelButton = toupper(ditems[CANCEL_BUTTON].prompt[0]); - print_button(dialog, ditems[CANCEL_BUTTON].prompt, y, x + strlen(ditems[OK_BUTTON].prompt) + 5, ditems[CANCEL_BUTTON].checked ? ditems[CANCEL_BUTTON].checked(&ditems[CANCEL_BUTTON]) : FALSE); - okButton = toupper(ditems[OK_BUTTON].prompt[0]); - print_button(dialog, ditems[OK_BUTTON].prompt, y, x, ditems[OK_BUTTON].checked ? ditems[OK_BUTTON].checked(&ditems[OK_BUTTON]) : TRUE); - } - else { - cancelButton = 'C'; - print_button(dialog, "Cancel", y, x + 14, FALSE); - okButton = 'O'; - print_button(dialog, " OK ", y, x, TRUE); - } - wnoutrefresh(dialog); - wmove(list, choice, check_x+1); - wrefresh(list); - - /* - * XXX Black magic voodoo that allows printing to the checklist - * window. For some reason, if this "refresh" code is not in - * place, printing to the window from the selected callback - * prints "behind" the checklist window. There is probably a - * better way to do this. - */ - draw_box(dialog, box_y, box_x, list_height + 2, list_width + 2, menubox_border_attr, menubox_attr); - - for (i = 0; i < max_choice; i++) - print_item(list, items[i * 3], items[i * 3 + 1], status[i], i, i == choice, DREF(ditems, i), list_width, item_x, check_x); - print_arrows(dialog, scroll, list_height, item_no, box_x, box_y, check_x + 4, cur_x, cur_y); - - wmove(list, choice, check_x+1); - wnoutrefresh(dialog); - wrefresh(list); - /* XXX Black magic XXX */ - - while (key != ESC) { - key = wgetch(dialog); - - /* Shortcut to OK? */ - if (toupper(key) == okButton) { - if (ditems) { - if (result && ditems[OK_BUTTON].fire) { - int st; - WINDOW *save; - - save = dupwin(newscr); - st = ditems[OK_BUTTON].fire(&ditems[OK_BUTTON]); - if (st & DITEM_RESTORE) { - touchwin(save); - wrefresh(save); - } - delwin(save); - } - } - else if (result) { - *result = '\0'; - for (i = 0; i < item_no; i++) { - if (status[i]) { - strcat(result, items[i*3]); - strcat(result, "\n"); - } - } - } - rval = 0; - key = ESC; /* Lemme out! */ - break; - } - - /* Shortcut to cancel? */ - if (toupper(key) == cancelButton) { - if (ditems && result && ditems[CANCEL_BUTTON].fire) { - int st; - WINDOW *save; - - save = dupwin(newscr); - st = ditems[CANCEL_BUTTON].fire(&ditems[CANCEL_BUTTON]); - if (st & DITEM_RESTORE) { - touchwin(save); - wrefresh(save); - wmove(dialog, cur_y, cur_x); - } - delwin(save); - } - rval = 1; - key = ESC; /* I gotta go! */ - break; - } - - /* Check if key pressed matches first character of any item tag in list */ - for (i = 0; i < max_choice; i++) - if (key != ' ' && key < 0x100 && toupper(key) == toupper(items[(scroll+i)*3][0])) - break; - - if (i < max_choice || (key >= '1' && key <= MIN('9', '0'+max_choice)) || - KEY_IS_UP(key) || KEY_IS_DOWN(key) || ((key == ' ' || key == '\n' || - key == '\r') && onlist)) { - - /* if moving from buttons to the list, reset and redraw buttons */ - if (!onlist) { - onlist = 1; - button = 0; - - if (ditems && result) { - print_button(dialog, ditems[CANCEL_BUTTON].prompt, y, x + strlen(ditems[OK_BUTTON].prompt) + 5, ditems[CANCEL_BUTTON].checked ? ditems[CANCEL_BUTTON].checked(&ditems[CANCEL_BUTTON]) : button); - print_button(dialog, ditems[OK_BUTTON].prompt, y, x, ditems[OK_BUTTON].checked ? ditems[OK_BUTTON].checked(&ditems[OK_BUTTON]) : !button); - } - else { - print_button(dialog, "Cancel", y, x + 14, button); - print_button(dialog, " OK ", y, x, !button); - } - wmove(list, choice, check_x+1); - wnoutrefresh(dialog); - wrefresh(list); - } - - if (key >= '1' && key <= MIN('9', '0'+max_choice)) - i = key - '1'; - - else if (KEY_IS_UP(key)) { - if (!choice) { - if (scroll) { - /* Scroll list down */ - getyx(dialog, cur_y, cur_x); /* Save cursor position */ - if (list_height > 1) { - /* De-highlight current first item before scrolling down */ - print_item(list, items[scroll * 3], items[scroll * 3 + 1], status[scroll], 0, - FALSE, DREF(ditems, scroll), list_width, item_x, check_x); - scrollok(list, TRUE); - wscrl(list, -1); - scrollok(list, FALSE); - } - scroll--; - print_item(list, items[scroll*3], items[scroll*3 + 1], status[scroll], 0, - TRUE, DREF(ditems, scroll), list_width, item_x, check_x); - print_arrows(dialog, scroll, list_height, item_no, box_x, box_y, check_x + 4, cur_x, cur_y); - wmove(list, choice, check_x+1); - wnoutrefresh(dialog); - wrefresh(list); - } - continue; /* wait for another key press */ - } - else - i = choice - 1; - } - else if (KEY_IS_DOWN(key)) { - if (choice == max_choice - 1) { - if (scroll + choice < item_no - 1) { - /* Scroll list up */ - getyx(dialog, cur_y, cur_x); /* Save cursor position */ - if (list_height > 1) { - /* De-highlight current last item before scrolling up */ - print_item(list, items[(scroll + max_choice - 1) * 3], - items[(scroll + max_choice - 1) * 3 + 1], - status[scroll + max_choice - 1], max_choice - 1, - FALSE, DREF(ditems, scroll + max_choice - 1), list_width, item_x, check_x); - scrollok(list, TRUE); - scroll(list); - scrollok(list, FALSE); - } - scroll++; - print_item(list, items[(scroll + max_choice - 1) * 3], - items[(scroll + max_choice - 1) * 3 + 1], - status[scroll + max_choice - 1], max_choice - 1, TRUE, - DREF(ditems, scroll + max_choice - 1), list_width, item_x, check_x); - print_arrows(dialog, scroll, list_height, item_no, box_x, box_y, check_x + 4, cur_x, cur_y); - wmove(list, choice, check_x+1); - wnoutrefresh(dialog); - wrefresh(list); - } - continue; /* wait for another key press */ - } - else - i = choice + 1; - } - else if ((key == ' ' || key == '\n' || key == '\r') && onlist) { /* Toggle item status */ - char lbra = 0, rbra = 0, mark = 0; - - getyx(list, old_y, old_x); /* Save cursor position */ - - if (ditems) { - if (ditems[scroll + choice].fire) { - int st; - WINDOW *save; - - save = dupwin(newscr); - st = ditems[scroll + choice].fire(&ditems[scroll + choice]); /* Call "fire" action */ - if (st & DITEM_RESTORE) { - touchwin(save); - wrefresh(save); - } - delwin(save); - if (st & DITEM_REDRAW) { - wclear(list); - for (i = 0; i < item_no; i++) - status[i] = ditems[i].checked ? ditems[i].checked(&ditems[i]) : FALSE; - for (i = 0; i < max_choice; i++) { - print_item(list, items[(scroll + i) * 3], items[(scroll + i) * 3 + 1], - status[scroll + i], i, i == choice, DREF(ditems, scroll + i), list_width, item_x, check_x); - } - wnoutrefresh(list); - print_arrows(dialog, scroll, list_height, item_no, box_x, box_y, check_x + 4, - cur_x, cur_y); - wrefresh(dialog); - } - if (st & DITEM_LEAVE_MENU) { - /* Allow a fire action to take us out of the menu */ - key = ESC; - rval = 0; - break; - } - else if (st & DITEM_RECREATE) { - delwin(list); - delwin(dialog); - dialog_clear(); - goto draw; - } - } - status[scroll + choice] = ditems[scroll + choice].checked ? - ditems[scroll + choice].checked(&ditems[scroll + choice]) : FALSE; - lbra = ditems[scroll + choice].lbra; - rbra = ditems[scroll + choice].rbra; - mark = ditems[scroll + choice].mark; - } - else - status[scroll + choice] = !status[scroll + choice]; - wmove(list, choice, check_x); - wattrset(list, check_selected_attr); - if (!lbra) - lbra = '['; - if (!rbra) - rbra = ']'; - if (!mark) - mark = 'X'; - wprintw(list, "%c%c%c", lbra, status[scroll + choice] ? mark : ' ', rbra); - wmove(list, old_y, old_x); /* Restore cursor to previous position */ - wrefresh(list); - continue; /* wait for another key press */ - } - - if (i != choice) { - /* De-highlight current item */ - getyx(dialog, cur_y, cur_x); /* Save cursor position */ - print_item(list, items[(scroll + choice) * 3], items[(scroll + choice) * 3 + 1], - status[scroll + choice], choice, FALSE, DREF(ditems, scroll + choice), list_width, item_x, check_x); - - /* Highlight new item */ - choice = i; - print_item(list, items[(scroll + choice) * 3], items[(scroll + choice) * 3 + 1], status[scroll + choice], choice, TRUE, DREF(ditems, scroll + choice), list_width, item_x, check_x); - wmove(list, choice, check_x+1); /* Restore cursor to previous position */ - wrefresh(list); - } - continue; /* wait for another key press */ - } - - switch (key) { - case KEY_PPAGE: /* can we go up? */ - if (scroll > height - 4) - scroll -= (height-4); - else - scroll = 0; - redraw_menu = TRUE; - if (!onlist) { - onlist = 1; - button = 0; - } - break; - - case KEY_NPAGE: /* can we go down a full page? */ - if (scroll + list_height >= item_no-1 - list_height) { - scroll = item_no - list_height; - if (scroll < 0) - scroll = 0; - } - else - scroll += list_height; - redraw_menu = TRUE; - if (!onlist) { - onlist = 1; - button = 0; - } - break; - - case KEY_HOME: /* go to the top */ - scroll = 0; - choice = 0; - redraw_menu = TRUE; - cursor_reset = TRUE; - onlist = 1; - break; - - case KEY_END: /* Go to the bottom */ - scroll = item_no - list_height; - if (scroll < 0) - scroll = 0; - choice = max_choice - 1; - redraw_menu = TRUE; - cursor_reset = TRUE; - onlist = 1; - break; - - case TAB: - case KEY_BTAB: - /* move to next component */ - if (onlist) { /* on list, next is ok button */ - onlist = 0; - if (ditems && result) { - print_button(dialog, ditems[CANCEL_BUTTON].prompt, y, x + strlen(ditems[OK_BUTTON].prompt) + 5, ditems[CANCEL_BUTTON].checked ? ditems[CANCEL_BUTTON].checked(&ditems[CANCEL_BUTTON]) : button); - print_button(dialog, ditems[OK_BUTTON].prompt, y, x, ditems[OK_BUTTON].checked ? ditems[OK_BUTTON].checked(&ditems[OK_BUTTON]) : !button); - ok_space = 1; - cancel_space = strlen(ditems[OK_BUTTON].prompt) + 6; - } - else { - print_button(dialog, "Cancel", y, x + 14, button); - print_button(dialog, " OK ", y, x, !button); - ok_space = 3; - cancel_space = 15; - } - if (button) - wmove(dialog, y, x + cancel_space); - else - wmove(dialog, y, x + ok_space); - wrefresh(dialog); - break; - } - else if (button) { /* on cancel button, next is list */ - button = 0; - onlist = 1; - redraw_menu = TRUE; - break; - } - /* on ok button, next is cancel button, same as left/right case */ - - case KEY_LEFT: - case KEY_RIGHT: - onlist = 0; - button = !button; - if (ditems && result) { - print_button(dialog, ditems[CANCEL_BUTTON].prompt, y, x + strlen(ditems[OK_BUTTON].prompt) + 5, ditems[CANCEL_BUTTON].checked ? ditems[CANCEL_BUTTON].checked(&ditems[CANCEL_BUTTON]) : button); - print_button(dialog, ditems[OK_BUTTON].prompt, y, x, ditems[OK_BUTTON].checked ? ditems[OK_BUTTON].checked(&ditems[OK_BUTTON]) : !button); - ok_space = 1; - cancel_space = strlen(ditems[OK_BUTTON].prompt) + 6; - } - else { - print_button(dialog, "Cancel", y, x + 14, button); - print_button(dialog, " OK ", y, x, !button); - ok_space = 3; - cancel_space = 15; - } - if (button) - wmove(dialog, y, x + cancel_space); - else - wmove(dialog, y, x + ok_space); - wrefresh(dialog); - break; - - case ' ': - case '\n': - case '\r': - if (!onlist) { - if (ditems) { - if (result && ditems[button ? CANCEL_BUTTON : OK_BUTTON].fire) { - int st; - WINDOW *save = dupwin(newscr); - - st = ditems[button ? CANCEL_BUTTON : OK_BUTTON].fire(&ditems[button ? CANCEL_BUTTON : OK_BUTTON]); - if (st & DITEM_RESTORE) { - touchwin(save); - wrefresh(save); - } - delwin(save); - if (st == DITEM_FAILURE) - continue; - } - } - else if (result) { - *result = '\0'; - for (i = 0; i < item_no; i++) { - if (status[i]) { - strcat(result, items[i*3]); - strcat(result, "\n"); - } - } - } - rval = button; - key = ESC; /* Bail out! */ - break; - } - - /* Let me outta here! */ - case ESC: - rval = -1; - break; - - /* Help! */ - case KEY_F(1): - case '?': - display_helpfile(); - break; - } - - if (redraw_menu) { - getyx(list, old_y, old_x); - wclear(list); - - /* - * Re-draw a box around the list items. It is required - * if amount of list items is smaller than height of listbox. - * Otherwise un-redrawn field will be filled with default - * screen attributes instead of dialog attributes. - */ - draw_box(dialog, box_y, box_x, list_height + 2, list_width + 2, menubox_border_attr, menubox_attr); - - for (i = 0; i < max_choice; i++) - print_item(list, items[(scroll + i) * 3], items[(scroll + i) * 3 + 1], status[scroll + i], i, i == choice, DREF(ditems, scroll + i), list_width, item_x, check_x); - print_arrows(dialog, scroll, list_height, item_no, box_x, box_y, check_x + 4, cur_x, cur_y); - - /* redraw buttons to fix highlighting */ - if (ditems && result) { - print_button(dialog, ditems[CANCEL_BUTTON].prompt, y, x + strlen(ditems[OK_BUTTON].prompt) + 5, ditems[CANCEL_BUTTON].checked ? ditems[CANCEL_BUTTON].checked(&ditems[CANCEL_BUTTON]) : button); - print_button(dialog, ditems[OK_BUTTON].prompt, y, x, ditems[OK_BUTTON].checked ? ditems[OK_BUTTON].checked(&ditems[OK_BUTTON]) : !button); - } - else { - print_button(dialog, "Cancel", y, x + 14, button); - print_button(dialog, " OK ", y, x, !button); - } - wnoutrefresh(dialog); - if (cursor_reset) { - wmove(list, choice, check_x+1); - cursor_reset = FALSE; - } - else { - wmove(list, old_y, old_x); - } - wrefresh(list); - redraw_menu = FALSE; - } - } - delwin(list); - delwin(dialog); - return rval; -} - - -/* - * Print list item - */ -static void -print_item(WINDOW *win, unsigned char *tag, unsigned char *item, int status, int choice, int selected, dialogMenuItem *me, int list_width, int item_x, int check_x) -{ - 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); - wprintw(win, "%c%c%c", me && me->lbra ? me->lbra : '[', - status ? me && me->mark ? me->mark : 'X' : ' ', - me && me->rbra ? me->rbra : ']'); - wattrset(win, menubox_attr); - waddch(win, ' '); - wattrset(win, selected ? tag_key_selected_attr : tag_key_attr); - waddch(win, tag[0]); - wattrset(win, selected ? tag_selected_attr : tag_attr); - waddstr(win, tag + 1); - wmove(win, choice, item_x); - wattrset(win, selected ? item_selected_attr : item_attr); - waddstr(win, item); - /* If have a selection handler for this, call it */ - if (me && me->selected) { - wrefresh(win); - me->selected(me, selected); - } -} -/* End of print_item() */ Index: gnu/lib/libdialog/dialog.3 =================================================================== --- gnu/lib/libdialog/dialog.3 (revision 216873) +++ gnu/lib/libdialog/dialog.3 (working copy) @@ -1,842 +0,0 @@ -.\" -.\" Copyright (c) 1995, Jordan Hubbard -.\" -.\" All rights reserved. -.\" -.\" This manual page may be used, modified, copied, distributed, and -.\" sold, in both source and binary form provided that the above -.\" copyright and these terms are retained, verbatim, as the first -.\" lines of this file. Under no circumstances is the author -.\" responsible for the proper functioning of the software described herein -.\" nor does the author assume any responsibility for damages incurred with -.\" its use. -.\" -.\" $FreeBSD$ -.\" -.Dd January 1, 2000 -.Dt DIALOG 3 -.Os -.Sh NAME -.Nm draw_shadow , -.Nm draw_box , -.Nm line_edit , -.Nm strheight , -.Nm strwidth , -.Nm dialog_create_rc , -.Nm dialog_yesno , -.Nm dialog_noyes , -.Nm dialog_prgbox , -.Nm dialog_msgbox , -.Nm dialog_textbox , -.Nm dialog_menu , -.Nm dialog_checklist , -.Nm dialog_radiolist , -.Nm dialog_inputbox , -.Nm dialog_clear_norefresh , -.Nm dialog_clear , -.Nm dialog_update , -.Nm dialog_fselect , -.Nm dialog_notify , -.Nm dialog_mesgbox , -.Nm dialog_gauge , -.Nm init_dialog , -.Nm end_dialog , -.Nm use_helpfile , -.Nm use_helpline , -.Nm get_helpline , -.Nm restore_helpline , -.Nm dialog_ftree , -.Nm dialog_tree -.Nd provide a simple ncurses-based GUI interface -.Sh SYNOPSIS -.In dialog.h -.Ft "void" -.Fn draw_shadow "WINDOW *win" "int y" "int x" "int height" "int width" -.Ft "void" -.Fn draw_box "WINDOW *win" "int y" "int x" "int height" "int width" "chtype box" "chtype border" -.Ft "int" -.Fo line_edit -.Fa "WINDOW *dialog" -.Fa "int box_y" -.Fa "int box_x" -.Fa "int flen" -.Fa "int box_width" -.Fa "chtype attr" -.Fa "int first" -.Fa "unsigned char *result" -.Fa "int attr_mask" -.Fc -.Ft "int" -.Fn strheight "const char *p" -.Ft "int" -.Fn strwidth "const char *p" -.Ft "void" -.Fn dialog_create_rc "unsigned char *filename" -.Ft "int" -.Fn dialog_yesno "unsigned char *title" "unsigned char *prompt" "int height" "int width" -.Ft "int" -.Fn dialog_noyes "unsigned char *title" "unsigned char *prompt" "int height" "int width" -.Ft "int" -.Fn dialog_prgbox "unsigned char *title" "const unsigned char *line" "int height" "int width" "int pause" "int use_shell" -.Ft "int" -.Fn dialog_textbox "unsigned char *title" "unsigned char *file" "int height" "int width" -.Ft "int" -.Fo dialog_menu -.Fa "unsigned char *title" -.Fa "unsigned char *prompt" -.Fa "int height" -.Fa "int width" -.Fa "int menu_height" -.Fa "int cnt" -.Fa "void *it" -.Fa "unsigned char *result" -.Fa "int *ch" -.Fa "int *sc" -.Fc -.Ft "int" -.Fn dialog_checklist "unsigned char *title" "unsigned char *prompt" "int height" "int width" "int list_height" "int cnt" "void *it" "unsigned char *result" -.Ft "int" -.Fn dialog_radiolist "unsigned char *title" "unsigned char *prompt" "int height" "int width" "int list_height" "int cnt" "void *it" "unsigned char *result" -.Ft "int" -.Fn dialog_inputbox "unsigned char *title" "unsigned char *prompt" "int height" "int width" "unsigned char *result" -.Ft "char *" -.Fn dialog_fselect "char *dir" "char *fmask" -.Ft "int" -.Fn dialog_dselect "char *dir" "char *fmask" -.Ft "void" -.Fn dialog_notify "char *msg" -.Ft "int" -.Fn dialog_mesgbox "unsigned char *title" "unsigned char *prompt" "int height" "int width" -.Ft "void" -.Fn dialog_gauge "char *title" "char *prompt" "int y" "int x" "int height" "int width" "int perc" -.Ft "void" -.Fn use_helpfile "char *hfile" -.Ft "void" -.Fn use_helpline "char *hline" -.Ft "char *" -.Fn get_helpline "void" -.Ft "void" -.Fn dialog_clear_norefresh "void" -.Ft "void" -.Fn dialog_clear "void" -.Ft "void" -.Fn dialog_update "void" -.Ft "void" -.Fn init_dialog "void" -.Ft "void" -.Fn end_dialog "void" -.Ft "int" -.Fn dialog_ftree "unsigned char *filename" "unsigned char FS" "unsigned char *title" "unsigned char *prompt" "int height" "int width" "int menu_height" "unsigned char **result" -.Ft "int" -.Fo dialog_tree -.Fa "unsigned char **names" -.Fa "int size" -.Fa "unsigned char FS" -.Fa "unsigned char *title" -.Fa "unsigned char *prompt" -.Fa "int height" -.Fa "int width" -.Fa "int menu_height" -.Fa "unsigned char **result" -.Fc -.Sh DESCRIPTION -The dialog library attempts to provide a fairly simplistic set of -fixed-presentation menus, input boxes, gauges, file requestors and -other general purpose GUI (a bit of a stretch, since it uses -ncurses) objects. -Since the library also had its roots in a -shell-script writer's utility (see the -.Xr dialog 1 -command), the -early API was somewhat primitively based on strings being passed in or -out and parsed. -This API was later extended to take either the -original arguments or arrays of -.Va dialogMenuItem -structures, -giving the user much more control over the internal behavior of each -control. -The -.Va dialogMenuItem -structure internals are public: -.Bd -literal -offset indent -typedef struct _dmenu_item { - char *prompt; - char *title; - int (*checked)(struct _dmenu_item *self); - int (*fire)(struct _dmenu_item *self); - int (*selected)(struct _dmenu_item *self, int is_selected); - void *data; - char lbra, mark, rbra; - long aux; -} dialogMenuItem; -.Ed -.Pp -The -.Dv prompt -and -.Dv title -strings are pretty much self-explanatory, -and the -.Va checked -and -.Va fire -function pointers provide optional -display and action hooks (the -.Dv data -variable being available for -the convenience of those hooks) when more tightly coupled feedback between -a menu object and user code is required. -The -.Va selected -hook also -allows you to verify whether or not a given item is selected (the cursor is -over it) for implementing pretty much any possible context-sensitive -behavior. -A number of clever tricks for simulating various kinds of item -types can also be done by adjusting the values of -.Va lbra -(default: '['), -.Va mark -(default: '*' for radio menus, 'X' for check menus) -and -.Va rbra -(default: ']') and declaring a reasonable -.Va checked -hook, -which should return TRUE for the -.Dq marked -state and FALSE for -.Dq unmarked . -The -.Va aux -field is not used internally, and is available for miscellaneous usage. -If an item has a -.Va fire -hook associated with it, it will also be called -whenever the item is "toggled" in some way and should return one of the -following codes: -.Bd -literal -offset 4n -#define DITEM_SUCCESS 0 /* Successful completion */ -#define DITEM_FAILURE 1 /* Failed to "fire" */ -.Ed -.Pp -The following flags are in the upper 16 bits of return status: -.Bd -literal -offset 4n -#define DITEM_LEAVE_MENU (1 << 16) -#define DITEM_REDRAW (1 << 17) -#define DITEM_RECREATE (1 << 18) -#define DITEM_RESTORE (1 << 19) -#define DITEM_CONTINUE (1 << 20) -.Ed -.Pp -Two special globals also exist for putting a dialog at any arbitrary -X,Y location (the early designers rather short-sightedly made no provisions -for this). -If set to zero, the default centering behavior will be in -effect. -.Pp -Below is a short description of the various functions: -.Pp -The -.Fn draw_shadow -function draws a shadow in curses window -.Va win -using the dimensions of -.Va x , y , width -and -.Va height . -.Pp -The -.Fn draw_box -function draws a bordered box using the dimensions of -.Va x , y , width -and -.Va height . -The attributes from -.Va box -and -.Va border -are used, if specified, while painting the box and border regions of the -object. -.Pp -The -.Fn line_edit -function invokes a simple line editor with an edit box of dimensions -.Va box_x , box_y -and -.Va box_width . -The field length is constrained by -.Va flen , -starting at the -.Va first -character specified and -optionally displayed with character attributes -.Va attr . -The string being edited is stored in -.Va result . -Returns 0 on success, 1 on Cancel, and -1 on failure or ESC. -.Pp -The -.Fn strheight -function returns the height of string in -.Va p , -counting newlines. -.Pp -The -.Fn strwidth -function returns the width of string in -.Va p , -counting newlines. -.Pp -The -.Fn dialog_create_rc -function dumps dialog library settings into -.Pa filename -for later retrieval as defaults. -Returns 0 on success, -1 on failure. -.Pp -The -.Fn dialog_yesno -function displays a text box using -.Va title -and -.Va prompt -strings of dimensions -.Va height -and -.Va width . -Also paint a pair of -.Em Yes -and -.Em \&No -buttons at the bottom. -The default selection is -.Em Yes . -If the -.Em Yes -button is chosen, return FALSE. -If -.Em \&No , -return TRUE. -.Pp -The -.Fn dialog_noyes -function is the same as -.Fn dialog_yesno , -except the default selection is -.Em \&No . -.Pp -The -.Fn dialog_prgbox -function displays a text box of dimensions -.Va height -and -.Va width -containing the output of command -.Va line . -If -.Va use_shell -is TRUE, -.Va line -is passed as an argument to -.Xr sh 1 , -otherwise it is simply passed to -.Xr exec 3 . -If -.Va pause -is TRUE, a final confirmation requestor will be put up when execution -terminates. -Returns 0 on success, -1 on failure. -.Pp -The -.Fn dialog_textbox -function displays a text box containing the contents of -.Va file -with dimensions of -.Va height -and -.Va width . -.Pp -The -.Fn dialog_menu -function displays a menu of dimensions -.Va height -and -.Va width -with an optional internal menu height of -.Va menu_height . -The -.Va cnt -and -.Va it -arguments are of particular importance since they, -together, determine which of the 2 available APIs to use. -To use the -older and traditional interface, -.Va cnt -should be a positive -integer representing the number of string pointer pairs to find in -.Va it -(which should be of type -.Ft char "**" ) , -the strings are -expected to be in prompt and title order for each item and the -.Va result -parameter is expected to point to an array where the -prompt string of the item selected will be copied. -To use the newer -interface, -.Va cnt -should be a -.Va negative -integer representing the number of -.Va dialogMenuItem -structures pointed to by -.Va it -(which should be of type -.Vt dialogMenuItem "*" ) , -one structure per item. -In the new interface, the -.Va result -variable is used as a simple boolean (not a pointer) and should be NULL if -.Va it -only points to menu items and the default OK and Cancel buttons are desired. -If -.Va result -is non-NULL, then -.Va it -is actually expected to point 2 locations -.Va past -the start of the menu item list. -.Va it -is then expected to -point to an item representing the Cancel button, from which the -.Va prompt -and -.Va fire -actions are used to override the default behavior, and -.Va it -to the same for the OK button. -.Pp -Using either API behavior, the -.Va ch -and -.Va sc -values may be passed in to preserve current -item selection and scroll position values across calls. -.Pp -The -.Fn dialog_checklist -function displays a menu of dimensions -.Va height -and -.Va width -with an -optional internal menu height of -.Va list_height . -The -.Va cnt -and -.Va it -arguments are of particular importance since they, -together, determine which of the 2 available APIs to use. -To use the -older and traditional interface, -.Va cnt -should be a positive -integer representing the number of string pointer tuples to find in -.Va it -(which should be of type -.Ft "char **" ) , -the strings are -expected to be in prompt, title and state ("on" or "off") order for -each item and the -.Va result -parameter is expected to point to an -array where the prompt string of the item(s) selected will be -copied. -To use the newer interface, -.Va cnt -should be a -.Em negative -integer representing the number of -.Ft dialogMenuItem -structures pointed to by -.Va it -(which should be of type -.Ft "dialogMenuItem *" ) , -one structure per item. -In the new interface, -the -.Va result -variable is used as a simple boolean (not a pointer) -and should be NULL if -.Va it -only points to menu items and the default OK and Cancel -buttons are desired. -If -.Va result -is non-NULL, then -.Va it -is actually expected to -point 2 locations -.Va past -the start of the menu item list. -.Va it -is then expected to point to an item representing the Cancel -button, from which the -.Va prompt -and -.Va fire -actions are used to override the default behavior, and -.Va it -to the same for the OK button. -.Pp -In the standard API model, the menu supports the selection of multiple items, -each of which is marked with an `X' character to denote selection. -When -the OK button is selected, the prompt values for all items selected are -concatenated into the -.Va result -string. -.Pp -In the new API model, it is not actually necessary to preserve -"checklist" semantics at all since practically everything about how -each item is displayed or marked as "selected" is fully configurable. -You could have a single checklist menu that actually contained a group -of items with "radio" behavior, "checklist" behavior and standard menu -item behavior. -The only reason to call -.Fn dialog_checklist -over -.Fn dialog_radiolist -in the new API model is to inherit the base -behavior, you are no longer constrained by it. -.Pp -Returns 0 on success, 1 on Cancel, and -1 on failure or ESC. -.Pp -The -.Fn dialog_radiolist -function displays a menu of dimensions -.Va height -and -.Va width -with an -optional internal menu height of -.Va list_height . -The -.Va cnt -and -.Va it -arguments are of particular importance since they, -together, determine which of the 2 available APIs to use. -To use the -older and traditional interface, -.Va cnt -should be a positive -integer representing the number of string pointer tuples to find in -.Va it -(which should be of type -.Ft "char **" ) , -the strings are -expected to be in prompt, title and state ("on" or "off") order for -each item and the -.Va result -parameter is expected to point to an -array where the prompt string of the item(s) selected will be -copied. -To use the newer interface, -.Va cnt -should be a -.Dv negative -integer representing the number of -.Ft dialogMenuItem -structures pointed to by -.Va it -(which should be of type -.Ft "dialogMenuItem *" , -one structure per item. -In the new interface, -the -.Va result -variable is used as a simple boolean (not a pointer) -and should be NULL if -.Va it -only points to menu items and the default OK and Cancel -buttons are desired. -If -.Va result -is non-NULL, then -.Va it -is actually expected to point 2 locations -.Va past -the start of the menu item list. -.Va it -is then expected to point to an item representing the Cancel -button, from which the -.Va prompt -and -.Va fire -actions are used to override the default behavior, and -.Va it -does the same for the traditional OK button. -.Pp -In the standard API model, the menu supports the selection of only one -of multiple items, the currently active item marked with an `*' -character to denote selection. -When the OK button is selected, the -prompt value for this item is copied into the -.Va result -string. -.Pp -In the new API model, it is not actually necessary to preserve -"radio button" semantics at all since practically everything about how -each item is displayed or marked as "selected" is fully configurable. -You could have a single radio menu that actually contained a group -of items with "checklist" behavior, "radio" behavior and standard menu -item behavior. -The only reason to call -.Fn dialog_radiolist -over -.Fn dialog_checklistlist -in the new API model is to inherit the base -behavior. -.Pp -Returns 0 on success, 1 on Cancel and -1 on failure or ESC. -.Pp -The -.Fn dialog_inputbox -function displays a single-line text input field in a box displaying -.Va title -and -.Va prompt -of dimensions -.Va height -and -.Va width . -The field entered is stored in -.Va result . -.Pp -Returns 0 on success, -1 on failure or ESC. -.Pp -The -.Fn dialog_fselect -function brings up a file selector dialog starting at -.Va dir -and showing only those file names -matching -.Va fmask . -.Pp -Returns filename selected or NULL. -.Pp -The -.Fn dialog_dselect -function brings up a directory selector dialog starting at -.Va dir -and showing only those directory names -matching -.Va fmask . -.Pp -Returns directory name selected or NULL. -.Pp -The -.Fn dialog_notify -function brings up a generic "hey, you!" notifier dialog containing -.Va msg . -.Pp -The -.Fn dialog_mesgbox -function displays a notifier dialog, but with more control over -.Va title , -.Va prompt , -.Va width -and -.Va height . -This object will also wait for user confirmation, unlike -.Fn dialog_notify . -.Pp -Returns 0 on success, -1 on failure. -.Pp -The -.Fn dialog_gauge -function displays a horizontal bar-graph style gauge. -A value of -.Em 100 -for -.Em perc -constitutes a full gauge, a value of -.Em 0 -an empty one. -.Pp -The -.Fn use_helpfile -function for any menu supporting context sensitive help, invokes the text box -object on this file whenever the -.Em F1 -key is pressed. -.Pp -The -.Fn use_helpline -function displays this line of helpful text below any menu being displayed. -.Pp -The -.Fn get_helpline -function gets the current value of the helpful text line. -.Pp -The -.Fn dialog_clear_norefresh -function clears the screen back to the dialog background color, but do not -refresh the contents just yet. -.Pp -The -.Fn dialog_clear -function clears the screen back to the dialog background color immediately. -.Pp -The -.Fn dialog_update -function does any pending screen refreshes now. -.Pp -The -.Fn init_dialog -function initializes the dialog library (call this routine before any other -dialog API calls). -.Pp -The -.Fn end_dialog -function shuts down the dialog library (call this if you need to get back to -sanity). -.Pp -The -.Fn dialog_ftree -function shows a tree described by the data from the file -.Pa filename . -The data in the file should look like -.Xr find 1 -output. -For the -.Xr find 1 -output, the field separator -.Va FS -will be -.Dq \&/ . -If -.Va height -and -.Va width -are positive numbers, they set the absolute -size of the whole -.Fn dialog_ftree -box. -If -.Va height -and -.Va width -are negative numbers, the size of the -.Fn dialog_ftree -box will be calculated automatically. -.Va menu_height -sets the height of the tree subwindow inside the -.Fn dialog_ftree -box and must be set. -.Va title -is shown centered on the upper border of the -.Fn dialog_ftree -box. -.Va prompt -is shown inside the -.Fn dialog_ftree -box above the tree subwindow and can contain -.Ql \e\&n -to split lines. -One can navigate in -the tree by pressing UP/DOWN or -.Sm off -.So \&+ Sc \&/ So \&- Sc , -.Sm on -PG_UP/PG_DOWN or -.Sm off -.So b Sc \&/SPACE -.Sm on -and -HOME/END or -.Sm off -.So g Sc \&/ So G Sc . -.Sm on -A leaf of the -tree is selected by pressing TAB or LEFT/RIGHT the OK -button and pressing ENTER. -filename may contain data like -.Xr find 1 -output, as well as like the output of -.Xr find 1 -with -.Fl d -option. -Some of the transient paths to the leaves of the tree may -be absent. -Such data is corrected when fed from filename. -.Pp -The function returns 0 and a pointer to the selected leaf (to the path to -the leaf from the root of the tree) into result, if the OK button was -selected. -The memory allocated for the building of the tree is freed on -exiting -.Fn dialog_ftree . -The memory for the result line should be freed -later manually, if necessary. -If the Cancel button was selected, the -function returns 1. -In case of exiting -.Fn dialog_ftree -on ESC, the function returns -1. -.Pp -The -.Fn dialog_tree -function returns the same results as -.Fn dialog_ftree . -If 0 is returned, result will contain a pointer from the array -.Va names . -.\" \fBdialog_tree\fR displays the tree very much like \fBdialog_ftree\fR does, -.\" with some exceptions. The source data for the building of the tree is an -.\" array \fBnames\fR of paths to the leaves (should be similar to \fBfind(1)\fR -.\" output) of the size \fBsize\fR. However, there is no correction of data like -.\" in \fBdialog_ftree\fR. Thus, to display a correct tree, the array must -.\" already contain correct data. Besides, in each session every unique use of -.\" \fBdialog_tree\fR is kept in memory, and later, when calling -.\" \fBdialog_tree\fR with the same \fBnames\fR, \fBsize\fR, \fBFS\fR, -.\" \fBheight\fR, \fBwidth\fR and \fBmenu_height\fR the position of the cursor -.\" in the tree subwindow is restored. -.Sh SEE ALSO -.Xr dialog 1 , -.Xr ncurses 3 -.Sh HISTORY -These functions appeared in -.Fx 2.0 -as the -.Xr dialog 1 -command and were soon split into a separate library -and command by -.An Andrey Chernov . -.An Marc van Kempen -implemented most of the extra controls and objects, -.An Jordan Hubbard -added the dialogMenuItem renovations and this man page and -.An Anatoly A. Orehovsky -implemented -.Fn dialog_ftree -and -.Fn dialog_tree . -.Sh AUTHORS -.An -nosplit -The primary author would appear to be -.An Savio Lam Aq lam836@cs.cuhk.hk -with contributions over the years by -.An Stuart Herbert Aq S.Herbert@sheffield.ac.uk , -.An Marc van Kempen Aq wmbfmk@urc.tue.nl , -.An Andrey Chernov Aq ache@FreeBSD.org , -.An Jordan Hubbard Aq jkh@FreeBSD.org -and -.An Anatoly A. Orehovsky Aq tolik@mpeks.tomsk.su . -.Sh BUGS -Sure! Index: gnu/lib/libdialog/kernel.c =================================================================== --- gnu/lib/libdialog/kernel.c (revision 216873) +++ gnu/lib/libdialog/kernel.c (working copy) @@ -1,536 +0,0 @@ -/* - * dialog - Display simple dialog boxes from shell scripts - * - * AUTHOR: Savio Lam (lam836@cs.cuhk.hk) - * - * 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. - * - * - * HISTORY: - * - * 17/12/93 - Version 0.1 released. - * - * 19/12/93 - menu will now scroll if there are more items than can fit - * on the screen. - * - added 'checklist', a dialog box with a list of options that - * can be turned on or off. A list of options that are on is - * returned on exit. - * - * 20/12/93 - Version 0.15 released. - * - * 29/12/93 - Incorporated patch from Patrick J. Volkerding - * (volkerdi@mhd1.moorhead.msus.edu) that made these changes: - * - increased MAX_LEN to 2048 - * - added 'infobox', equivalent to a message box without pausing - * - added option '--clear' that will clear the screen - * - Explicit line breaking when printing prompt text can be - * invoked by real newline '\n' besides the string "\n" - * - an optional parameter '--title <string>' can be used to - * specify a title string for the dialog box - * - * 03/01/94 - added 'textbox', a dialog box for displaying text from a file. - * - Version 0.2 released. - * - * 04/01/94 - some fixes and improvements for 'textbox': - * - fixed a bug that will cause a segmentation violation when a - * line is longer than MAX_LEN characters. Lines will now be - * truncated if they are longer than MAX_LEN characters. - * - removed wrefresh() from print_line(). This will increase - * efficiency of print_page() which calls print_line(). - * - display current position in the form of percentage into file. - * - Version 0.21 released. - * - * 05/01/94 - some changes for faster screen update. - * - * 07/01/94 - much more flexible color settings. Can use all 16 colors - * (8 normal, 8 highlight) of the Linux console. - * - * 08/01/94 - added run-time configuration using configuration file. - * - * 09/01/94 - some minor bug fixes and cleanups for menubox, checklist and - * textbox. - * - * 11/01/94 - added a man page. - * - * 13/01/94 - some changes for easier porting to other Unix systems (tested - * on Ultrix, SunOS and HPUX) - * - Version 0.3 released. - * - * 08/06/94 - Patches by Stuart Herbert - S.Herbert@shef.ac.uk - * Fixed attr_clear and the textbox stuff to work with ncurses 1.8.5 - * Fixed the wordwrap routine - it'll actually wrap properly now - * Added a more 3D look to everything - having your own rc file could - * prove 'interesting' to say the least :-) - * Added radiolist option - * - Version 0.4 released. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#define __DIALOG_MAIN__ - -#include <dialog.h> -#include <err.h> -#include "dialog.priv.h" -#ifdef HAVE_NCURSES -#include "colors.h" -#endif - -/* These are two "secret" globals that can be fiddled to make a dialog - * come up someplace other than a "centered" calculation for X,Y - */ -int DialogX, DialogY; - -/* This "secret" global allows you to change the behavior of an input field */ -int DialogInputAttrs; - -/* - * Do some initialization for dialog - */ -void init_dialog(void) -{ - - if (issetugid()) { - errx(1, "libdialog is unsafe to use in setugid applications"); - } - -#if defined(LOCALE) - (void) setlocale(LC_ALL, ""); -#endif - -#ifdef HAVE_NCURSES - if (parse_rc() == -1) /* Read the configuration file */ - exit(-1); -#endif - - if (initscr() == NULL) { /* Init curses */ - fprintf(stderr, "\nCurses initialization error.\n"); - exit(-1); - } - keypad(stdscr, TRUE); - cbreak(); - noecho(); - -#ifdef HAVE_NCURSES - if (use_colors || use_shadow) /* Set up colors */ - color_setup(); -#endif - - /* Set screen to screen attribute */ - dialog_clear_norefresh(); - DialogX = DialogY = 0; -} -/* End of init_dialog() */ - - -#ifdef HAVE_NCURSES -/* - * 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 of color_setup() */ -#endif - - -/* - * Set window to attribute 'attr' - */ -void attr_clear(WINDOW *win, int height, int width, chtype attr) -{ - int i, j; - - wattrset(win, attr); /* Set window to attribute 'attr' */ - for (i = 0; i < height; i++) { - wmove(win, i, 0); - for (j = 0; j < width; j++) - waddch(win, ' '); - } -} -/* End of attr_clear() */ - - -/* - * 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. Note that the - * string may contain "\n" to represent a newline character or the real - * newline '\n', but in that case, auto wrap around will be disabled. - */ -void print_autowrap(WINDOW *win, unsigned char *prompt, int height, int width, int maxwidth, int y, int x, int center, int rawmode) -{ - int cur_x, cur_y, i; - unsigned char tempstr[MAX_LEN+1], *word, *tempptr, *tempptr1; - chtype ostuff[132], attrs = 0, init_bottom = 0; - - wsetscrreg(win, y, height); - getyx(win, cur_y, cur_x); - - strncpy(tempstr, prompt, MAX_LEN); - tempstr[MAX_LEN] = '\0'; - if ((!rawmode && strstr(tempstr, "\\n") != NULL) || - (strchr(tempstr, '\n') != NULL)) { /* Prompt contains "\n" or '\n' */ - word = tempstr; - while (1) { - tempptr = rawmode ? NULL : strstr(word, "\\n"); - tempptr1 = strchr(word, '\n'); - if (tempptr == NULL && tempptr1 == NULL) - break; - else if (tempptr == NULL) { /* No more "\n" */ - tempptr = tempptr1; - tempptr[0] = '\0'; - } - else if (tempptr1 == NULL) { /* No more '\n' */ - tempptr[0] = '\0'; - tempptr++; - } - else { /* Prompt contains both "\n" and '\n' */ - if (strlen(tempptr)-2 < strlen(tempptr1)-1) { - tempptr = tempptr1; - tempptr[0] = '\0'; - } - else { - tempptr[0] = '\0'; - tempptr++; - } - } - - waddstr(win, word); - word = tempptr + 1; - if (++cur_y > height) { - cur_y--; - if (!init_bottom) { - for (i = 0; i < x; i++) - ostuff[i] = mvwinch(win, cur_y, i); - for (i = width; i < maxwidth; i++) - ostuff[i] = mvwinch(win, cur_y, i); - attrs = getattrs(win); - init_bottom = 1; - } - scrollok(win, TRUE); - scroll(win); - scrollok(win, FALSE); - wmove(win, cur_y, 0); - for (i = 0; i < x; i++) { - wattrset(win, ostuff[i]&A_ATTRIBUTES); - waddch(win, ostuff[i]); - } - wattrset(win, attrs); - for ( ; i < width; i++) - waddch(win, ' '); - for ( ; i < maxwidth; i++) { - wattrset(win, ostuff[i]&A_ATTRIBUTES); - waddch(win, ostuff[i]); - } - wattrset(win, attrs); - wrefresh(win); - } - wmove(win, cur_y, cur_x = x); - } - waddstr(win, word); - } - else if (center && strlen(tempstr) <= width-x*2) { /* If prompt is short */ - wmove(win, cur_y, (width - strlen(tempstr)) / 2); - waddstr(win, tempstr); - } - else if (!center && strlen(tempstr) <= width-cur_x) { /* If prompt is short */ - waddstr(win, tempstr); - } - else { - char *p = tempstr; - - /* Print prompt word by word, wrap around if necessary */ - while ((word = strsep(&p, "\t\n ")) != NULL) { - int loop; - unsigned char sc; - - if (*word == '\0') - continue; - do { - loop = 0; - if (cur_x+strlen(word) >= width+1) { /* wrap around to next line */ - if (x+strlen(word) >= width+1) { - sc = word[width-cur_x-1]; - word[width-cur_x-1] = '\0'; - wmove(win, cur_y, cur_x); - waddstr(win, word); - word[width-cur_x-1] = sc; - word += width-cur_x-1; - getyx(win, cur_y, cur_x); - loop = 1; - } - cur_y++; - cur_x = x; - if (cur_y > height) { - cur_y--; - if (!init_bottom) { - for (i = 0; i < x; i++) - ostuff[i] = mvwinch(win, cur_y, i); - for (i = width; i < maxwidth; i++) - ostuff[i] = mvwinch(win, cur_y, i); - attrs = getattrs(win); - init_bottom = 1; - } - scrollok(win, TRUE); - scroll(win); - scrollok(win, FALSE); - wmove(win, cur_y, 0); - for (i = 0; i < x; i++) { - wattrset(win, ostuff[i]&A_ATTRIBUTES); - waddch(win, ostuff[i]); - } - wattrset(win, attrs); - for ( ; i < width; i++) - waddch(win, ' '); - for ( ; i < maxwidth; i++) { - wattrset(win, ostuff[i]&A_ATTRIBUTES); - waddch(win, ostuff[i]); - } - wattrset(win, attrs); - wrefresh(win); - } - } - } - while(loop); - wmove(win, cur_y, cur_x); - waddstr(win, word); - getyx(win, cur_y, cur_x); - cur_x++; - } - } -} -/* End of print_autowrap() */ - - -/* - * Print a button - */ -void print_button(WINDOW *win, unsigned 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, selected ? "[" : " "); - temp = strspn(label, " "); - label += temp; - 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_active_attr : button_inactive_attr); - waddstr(win, label+1); - waddstr(win, selected ? "]" : " "); - wmove(win, y, x+temp+1); -} -/* End of print_button() */ - - -/* - * 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 | ' '); - } -} -/* End of draw_box() */ - - -#ifdef HAVE_NCURSES -/* - * 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,sx,sy; - chtype attrs; - - if (has_colors()) { /* Whether terminal supports color? */ - getbegyx(win,sy,sx); - attrs = getattrs(win); - if (y+height < getmaxy(win)) { - /* small touch */ - wattrset(win, A_INVIS); - wmove(win, y + height, x + 2); - for (i = 0; i < width; i++) - if (i+x+2 < getmaxx(win)) - waddch(win, ' '); - /* end touch */ - wattrset(win, shadow_attr); - wmove(win, y + height, x + 2); - for (i = 0; i < width; i++) - if (i+x+2 < getmaxx(win)) - waddch(win, mvwinch(newscr, sy+y+height, sx+x+2+i) & A_CHARTEXT); - } - if (x+width < getmaxx(win)) { - for (i = y + 1; i < y + height + 1; i++) { - if (i < getmaxy(win)) { - /* small touch */ - wattrset(win, A_INVIS); - wmove(win, i, x + width); - waddch(win, ' '); - if (x+width+1 < getmaxx(win)) - waddch(win, ' '); - /* end touch */ - wattrset(win, shadow_attr); - wmove(win, i, x + width); - waddch(win, mvwinch(newscr, sy+i, sx+x+width) & A_CHARTEXT); - if (x+width+1 < getmaxx(win)) - waddch(win, mvwinch(newscr, sy+i, sx+x+width+1) & A_CHARTEXT); - } - } - } - wattrset(win, attrs); - wnoutrefresh(win); - } -} -/* End of draw_shadow() */ -#endif - -void dialog_clear_norefresh(void) -{ - attr_clear(stdscr, LINES, COLS, screen_attr); - touchwin(stdscr); - wnoutrefresh(stdscr); -} - -void dialog_clear(void) -{ - dialog_clear_norefresh(); - doupdate(); -} - -void dialog_update(void) -{ - refresh(); -} - -void end_dialog(void) -{ - endwin(); -} - -int strwidth(const char *p) -{ - int i = 0, len, incr; - const char *start, *s, *s1, *s2; - - for (start = s = p; ; start = (s += incr)) { - s1 = strchr(s, '\n'); - s2 = strstr(s, "\\n"); - if (s2 == NULL) - s = s1; - else if (s1 == NULL) - s = s2; - else - s = MIN(s1, s2); - if (s == NULL) - break; - incr = 1 + (s == s2); - len = s - start; - if (len > i) - i = len; - } - len = strlen(start); - if (len > i) - i = len; - return i; -} - -int strheight(const char *p) -{ - int i = 1, incr; - const char *s, *s1, *s2; - - for (s = p; ; s += incr) { - s1 = strchr(s, '\n'); - s2 = strstr(s, "\\n"); - if (s2 == NULL) - s = s1; - else if (s1 == NULL) - s = s2; - else - s = MIN(s1, s2); - if (s == NULL) - break; - incr = 1 + (s == s2); - i++; - } - return i; -} - -void print_arrows(WINDOW *dialog, int scroll, int menu_height, int item_no, - int box_x, int box_y, int tag_x, int cur_x, int cur_y) -{ - wmove(dialog, box_y, box_x + tag_x + 1); - wattrset(dialog, scroll ? uarrow_attr : menubox_attr); - waddch(dialog, scroll ? ACS_UARROW : ACS_HLINE); - wmove(dialog, box_y, box_x + tag_x + 2); - waddch(dialog, scroll ? '(' : ACS_HLINE); - wmove(dialog, box_y, box_x + tag_x + 3); - waddch(dialog, scroll ? '-' : ACS_HLINE); - wmove(dialog, box_y, box_x + tag_x + 4); - waddch(dialog, scroll ? ')' : ACS_HLINE); - wmove(dialog, box_y + menu_height + 1, box_x + tag_x + 1); - wattrset(dialog, scroll+menu_height < item_no ? darrow_attr : menubox_border_attr); - waddch(dialog, scroll+menu_height < item_no ? ACS_DARROW : ACS_HLINE); - wmove(dialog, box_y + menu_height + 1, box_x + tag_x + 2); - waddch(dialog, scroll+menu_height < item_no ? '(' : ACS_HLINE); - wmove(dialog, box_y + menu_height + 1, box_x + tag_x + 3); - waddch(dialog, scroll+menu_height < item_no ? '+' : ACS_HLINE); - wmove(dialog, box_y + menu_height + 1, box_x + tag_x + 4); - waddch(dialog, scroll+menu_height < item_no ? ')' : ACS_HLINE); - wmove(dialog, cur_y, cur_x); /* Restore cursor position */ -} - Index: gnu/lib/libdialog/dialog.priv.h =================================================================== --- gnu/lib/libdialog/dialog.priv.h (revision 216873) +++ gnu/lib/libdialog/dialog.priv.h (working copy) @@ -1,183 +0,0 @@ -/* - * dialog.h -- common declarations for all dialog modules - * - * AUTHOR: Savio Lam (lam836@cs.cuhk.hk) - * - * 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. - */ - - -#include <sys/types.h> -#include <fcntl.h> -#include <unistd.h> -#include <ctype.h> -#include <stdlib.h> -#include <string.h> -#include <termios.h> - -#if defined(LOCALE) -#include <locale.h> -#endif - - -/* - * Change these if you want - */ -#define USE_SHADOW TRUE -#define USE_COLORS TRUE - -#define ESC 27 -#define TAB 9 -#define BUF_SIZE (10*1024) - -#ifndef MIN -#define MIN(x,y) (x < y ? x : y) -#endif -#ifndef MAX -#define MAX(x,y) (x > y ? x : y) -#endif - -#ifndef ctrl -#define ctrl(a) ((a) - 'a' + 1) -#endif - -#ifndef HAVE_NCURSES -#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 -#endif /* HAVE_NCURSES */ - -/* Travel key conventions */ -#define KEY_IS_UP(key) ((key) == KEY_UP || (key) == '-' || key == '\020' /* ^P */) -#define KEY_IS_DOWN(key) ((key) == KEY_DOWN || (key) == '+' || key == '\016' /* ^N */) - -/* - * Global variables - */ -#ifdef __DIALOG_MAIN__ - -#ifdef HAVE_NCURSES - -/* use colors by default? */ -bool use_colors = USE_COLORS; - -/* shadow dialog boxes by default? - Note that 'use_shadow' implies 'use_colors' */ -bool use_shadow = USE_SHADOW; - -#endif - - -/* - * Attribute values, default is for mono display - */ -chtype attributes[] = { - A_NORMAL, /* screen_attr */ - A_NORMAL, /* shadow_attr */ - A_REVERSE, /* dialog_attr */ - A_REVERSE, /* title_attr */ - A_REVERSE, /* border_attr */ - A_BOLD, /* button_active_attr */ - A_DIM, /* button_inactive_attr */ - A_UNDERLINE, /* button_key_active_attr */ - A_UNDERLINE, /* button_key_inactive_attr */ - A_NORMAL, /* button_label_active_attr */ - A_NORMAL, /* button_label_inactive_attr */ - A_REVERSE, /* inputbox_attr */ - A_REVERSE, /* inputbox_border_attr */ - A_REVERSE, /* searchbox_attr */ - A_REVERSE, /* searchbox_title_attr */ - A_REVERSE, /* searchbox_border_attr */ - A_REVERSE, /* position_indicator_attr */ - A_REVERSE, /* menubox_attr */ - A_REVERSE, /* menubox_border_attr */ - A_REVERSE, /* item_attr */ - A_NORMAL, /* item_selected_attr */ - A_REVERSE, /* tag_attr */ - A_REVERSE, /* tag_selected_attr */ - A_NORMAL, /* tag_key_attr */ - A_BOLD, /* tag_key_selected_attr */ - A_REVERSE, /* check_attr */ - A_REVERSE, /* check_selected_attr */ - A_REVERSE, /* uarrow_attr */ - A_REVERSE /* darrow_attr */ -}; - -#else - -#ifdef HAVE_NCURSES -extern bool use_colors; -#endif - -#endif /* __DIALOG_MAIN__ */ - - - -#ifdef HAVE_NCURSES - -/* - * Function prototypes - */ -#ifdef __DIALOG_MAIN__ - -extern int parse_rc(void); - -#endif /* __DIALOG_MAIN__ */ - -#endif - - -#ifdef HAVE_NCURSES -void color_setup(void); -#endif - -void attr_clear(WINDOW *win, int height, int width, chtype attr); -void print_autowrap(WINDOW *win, unsigned char *prompt, int height, int width, int maxwidth, - int y, int x, int center, int rawmode); -void print_button(WINDOW *win, unsigned char *label, int y, int x, int selected); -FILE *raw_popen(const char *program, char * const *argv, const char *type); -int raw_pclose(FILE *iop); -void display_helpfile(void); -void display_helpline(WINDOW *w, int y, int width); -void print_arrows(WINDOW *dialog, int scroll, int menu_height, int item_no, int box_x, - int box_y, int tag_x, int cur_x, int cur_y); - Index: gnu/lib/libdialog/ui_objects.c =================================================================== --- gnu/lib/libdialog/ui_objects.c (revision 216873) +++ gnu/lib/libdialog/ui_objects.c (working copy) @@ -1,829 +0,0 @@ -/* - * Program: objects.c - * Author: Marc van Kempen - * Desc: Implementation of UI-objects: - * - String input fields - * - List selection - * - Buttons - * - * Copyright (c) 1995, Marc van Kempen - * - * All rights reserved. - * - * This software may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of this software, nor does - * the author assume any responsibility for damages incurred with - * its use. - * - */ - -#include <stdlib.h> -#include <sys/param.h> -#include <ncurses.h> -#include <dialog.h> -#include "dialog.priv.h" -#include "ui_objects.h" - -#define ESC 27 - -/*********************************************************************** - * - * Obj routines - * - ***********************************************************************/ - -void -AddObj(ComposeObj **Obj, int objtype, void *obj) -/* - * Desc: Add the object <obj> to the list of objects <Obj> - */ -{ - if (*Obj == NULL) { - /* Create the root object */ - *Obj = (ComposeObj *) malloc( sizeof(ComposeObj) ); - if (!Obj) { - printf("AddObj: Error malloc'ing ComposeObj\n"); - exit(-1); - } - (*Obj)->objtype = objtype; - (*Obj)->obj = obj; - (*Obj)->next = NULL; - (*Obj)->prev = NULL; - } else { - ComposeObj *o = *Obj; - - /* create the next object */ - while (o->next) o = (ComposeObj *) o->next; - o->next = (struct ComposeObj *) malloc( sizeof(ComposeObj) ); - if (!o->next) { - printf("AddObj: Error malloc'ing o->next\n"); - exit(-1); - } - o->next->objtype = objtype; - o->next->obj = obj; - o->next->next = NULL; - o->next->prev = o; - } - - return; -} /* AddObj() */ - -void -FreeObj(ComposeObj *Obj) -/* - * Desc: free the memory occupied by *Obj - */ -{ - ComposeObj *o = Obj; - - o = Obj; - while (o) { - o = Obj->next; - free(Obj); - Obj = o; - } - - return; -} /* FreeObj() */ - - -int -ReadObj(ComposeObj *Obj) -/* - * Desc: navigate through the different objects calling their - * respective navigation routines as necessary - * Pre: Obj != NULL - */ -{ - ComposeObj *o; - ComposeObj *last; /* the last object in the list */ - int ret; /* the return value from the selection routine */ - - /* find the last object in the list */ - last = Obj; - while (last->next) last = last->next; - - ret = 0; - o = Obj; - while ((ret != SEL_BUTTON) && (ret != SEL_ESC)) { - switch(o->objtype) { - case STRINGOBJ: - ret = SelectStringObj((StringObj *) o->obj); - break; - case LISTOBJ: - ret = SelectListObj((ListObj *) o->obj); - break; - case BUTTONOBJ: - ret = SelectButtonObj((ButtonObj *) o->obj); - break; - } - switch(ret) { - case KEY_DOWN: - case SEL_CR: - case SEL_TAB: /* move to the next object in the list */ - if (o->next != NULL) { - o = o->next; /* next object */ - } else { - o = Obj; /* beginning of the list */ - } - break; - - case KEY_UP: - case SEL_BACKTAB: /* move to the previous object in the list */ - if (o->prev != NULL) { - o = o->prev; /* previous object */ - } else { - o = last; /* end of the list */ - } - break; - - case KEY_F(1): /* display help_file */ - case '?': - display_helpfile(); - break; - } - } - - return(ret); - -} /* ReadObj() */ - - -int -PollObj(ComposeObj **Obj) -{ - ComposeObj *last; /* the last object in the list */ - ComposeObj *first; /* the first object in the list */ - int ret; /* the return value from the selection routine */ - - /* find the last object in the list */ - last = *Obj; - while (last->next) last = last->next; - - /* find the first object in the list */ - first = *Obj; - while (first->prev) first = first->prev; - - ret = 0; - switch((*Obj)->objtype) { - case STRINGOBJ: - ret = SelectStringObj((StringObj *) (*Obj)->obj); - break; - case LISTOBJ: - ret = SelectListObj((ListObj *) (*Obj)->obj); - break; - case BUTTONOBJ: - ret = SelectButtonObj((ButtonObj *) (*Obj)->obj); - break; - } - switch(ret) { - case KEY_DOWN: - case SEL_CR: - case SEL_TAB: /* move to the next object in the list */ - if ((*Obj)->next != NULL) { - *Obj = (*Obj)->next; /* next object */ - } else { - *Obj = first; /* beginning of the list */ - } - break; - - case KEY_UP: - case SEL_BACKTAB: /* move to the previous object in the list */ - if ((*Obj)->prev != NULL) { - *Obj = (*Obj)->prev; /* previous object */ - } else { - *Obj = last; /* end of the list */ - } - break; - } - - return(ret); - -} /* PollObj() */ - - -void -DelObj(ComposeObj *Obj) -/* - * Desc: Free all objects - */ -{ - ComposeObj *o; - - o = Obj; - while (Obj != NULL) { - switch(Obj->objtype) { - case STRINGOBJ: - DelStringObj((StringObj *) Obj->obj); - break; - case LISTOBJ: - DelListObj((ListObj *) Obj->obj); - break; - case BUTTONOBJ: - DelButtonObj((ButtonObj *) Obj->obj); - break; - } - Obj = Obj->next; - } - - FreeObj(o); -} /* DelObj() */ - -/*********************************************************************** - * - * StringObj routines - * - ***********************************************************************/ - -static void -outstr(WINDOW *win, char *str, int attrs) -{ - if (attrs & DITEM_NO_ECHO) { - char *cpy; - int n = strlen(str); - - cpy = alloca(n + 1); - memset(cpy, '*', n); - cpy[n] = '\0'; - waddstr(win, cpy); - } - else - waddstr(win, str); -} - -void -RefreshStringObj(StringObj *so) -/* - * Desc: redraw the object - */ -{ - char tmp[512]; - - wmove(so->win, so->y, so->x+1); - wattrset(so->win, dialog_attr); - waddstr(so->win, so->title); - - draw_box(so->win, so->y+1, so->x, 3, so->w, dialog_attr, border_attr); - wattrset(so->win, item_attr); - wmove(so->win, so->y+2, so->x+1); - if (strlen(so->s) > so->w-2) { - strncpy(tmp, (char *) so->s + strlen(so->s) - so->w + 2, so->w - 1); - outstr(so->win, tmp, so->attr_mask); - } else { - outstr(so->win, so->s, so->attr_mask); - } - - return; -} /* RefreshStringObj() */ - -StringObj * -NewStringObj(WINDOW *win, char *title, char *s, int y, int x, int w, int len) -/* - * Desc: Initialize a new stringobj and return a pointer to it. - * Draw the object on the screen at the specified coordinates - */ -{ - StringObj *so; - - /* Initialize a new object */ - so = (StringObj *) malloc( sizeof(StringObj) ); - if (!so) { - printf("NewStringObj: Error malloc'ing StringObj\n"); - exit(-1); - } - so->title = (char *) malloc( strlen(title) + 1); - if (!so->title) { - printf("NewStringObj: Error malloc'ing so->title\n"); - exit(-1); - } - strcpy(so->title, title); - so->s = s; - strcpy(so->s, s); - so->x = x; - so->y = y; - so->w = w; - so->len = len; - so->win = win; - so->attr_mask = DialogInputAttrs; /* Grossly use a global to avoid changing API */ - - /* Draw it on the screen */ - RefreshStringObj(so); - - return(so); -} /* NewStringObj() */ - -int -SelectStringObj(StringObj *so) -/* - * Desc: get input using the info in <so> - */ -{ - int key; - char tmp[so->len+1]; - - strcpy(tmp, so->s); - key = line_edit(so->win, so->y+2, so->x+1, - so->len, so->w-2, inputbox_attr, TRUE, tmp, so->attr_mask); - if ((key == '\n') || (key == '\r') || (key == '\t') || key == (KEY_BTAB) ) { - strcpy(so->s, tmp); - } - RefreshStringObj(so); - if (key == ESC) { - return(SEL_ESC); - } - if (key == '\t') { - return(SEL_TAB); - } - if ( (key == KEY_BTAB) || (key == KEY_F(2)) ) { - return(SEL_BACKTAB); - } - if ((key == '\n') || (key == '\r')) { - return(SEL_CR); - } - return(key); -} /* SelectStringObj() */ - - -void -DelStringObj(StringObj *so) -/* - * Desc: Free the space occupied by <so> - */ -{ - free(so->title); - free(so); - - return; -} - -/*********************************************************************** - * - * ListObj routines - * - ***********************************************************************/ - -void -DrawNames(ListObj *lo) -/* - * Desc: Just refresh the names, not the surrounding box and title - */ -{ - int i, j, h, x, y; - char tmp[MAXPATHLEN]; - - x = lo->x + 1; - y = lo->y + 2; - h = lo->h - 2; - for (i=lo->scroll; i<lo->n && i<lo->scroll+h; i++) { - wmove(lo->win, y+i-lo->scroll, x); - if (lo->seld[i]) { - wattrset(lo->win, A_BOLD); - } else { - wattrset(lo->win, item_attr); - } - if (strlen(lo->name[i]) > lo->w-2) { - strncpy(tmp, lo->name[i], lo->w-2); - tmp[lo->w - 2] = 0; - waddstr(lo->win, tmp); - } else { - waddstr(lo->win, lo->name[i]); - for (j=strlen(lo->name[i]); j<lo->w-2; j++) waddstr(lo->win, " "); - } - } - wattrset(lo->win, item_attr); - while (i<lo->scroll+h) { - wmove(lo->win, y+i-lo->scroll, x); - for (j=0; j<lo->w-2; j++) waddstr(lo->win, " "); - i++; - } - - return; -} /* DrawNames() */ - -void -RefreshListObj(ListObj *lo) -/* - * Desc: redraw the list object - */ -{ - char perc[7]; - - /* setup the box */ - wmove(lo->win, lo->y, lo->x+1); - wattrset(lo->win, dialog_attr); - waddstr(lo->win, lo->title); - draw_box(lo->win, lo->y+1, lo->x, lo->h, lo->w, dialog_attr, border_attr); - - /* draw the names */ - DrawNames(lo); - - /* Draw % indication */ - sprintf(perc, "(%3d%%)", MIN(100, (int) (100 * (lo->sel+lo->h-2) / MAX(1, lo->n)))); - wmove(lo->win, lo->y + lo->h, lo->x + lo->w - 8); - wattrset(lo->win, dialog_attr); - waddstr(lo->win, perc); - - - return; -} /* RefreshListObj() */ - -ListObj * -NewListObj(WINDOW *win, char *title, char **list, char *listelt, int y, int x, - int h, int w, int n) -/* - * Desc: create a listobj, draw it on the screen and return a pointer to it. - */ -{ - ListObj *lo; - int i; - - /* Initialize a new object */ - lo = (ListObj *) malloc( sizeof(ListObj) ); - if (!lo) { - fprintf(stderr, "NewListObj: Error malloc'ing ListObj\n"); - exit(-1); - } - lo->title = (char *) malloc( strlen(title) + 1); - if (!lo->title) { - fprintf(stderr, "NewListObj: Error malloc'ing lo->title\n"); - exit(-1); - } - strcpy(lo->title, title); - lo->name = list; - if (n>0) { - lo->seld = (int *) malloc( n * sizeof(int) ); - if (!lo->seld) { - fprintf(stderr, "NewListObj: Error malloc'ing lo->seld\n"); - exit(-1); - } - for (i=0; i<n; i++) { - lo->seld[i] = FALSE; - } - } else { - lo->seld = NULL; - } - lo->y = y; - lo->x = x; - lo->w = w; - lo->h = h; - lo->n = n; - lo->scroll = 0; - lo->sel = 0; - lo->elt = listelt; - lo->win = win; - - /* Draw the object on the screen */ - RefreshListObj(lo); - - return(lo); -} /* NewListObj() */ - -void -UpdateListObj(ListObj *lo, char **list, int n) -/* - * Desc: Update the list in the listobject with the provided list - * Pre: lo->name "has been freed" - * "(A i: 0<=i<lo->n: "lo->name[i] has been freed")" - */ -{ - int i; - - if (lo->seld) { - free(lo->seld); - } - - /* Rewrite the list in the object */ - lo->name = list; - if (n>0) { - lo->seld = (int *) malloc( n * sizeof(int) ); - if (!lo->seld) { - fprintf(stderr, "UpdateListObj: Error malloc'ing lo->seld\n"); - exit(-1); - } - for (i=0; i<n; i++) { - lo->seld[i] = FALSE; - } - } else { - lo->seld = NULL; - } - lo->n = n; - lo->scroll = 0; - lo->sel = 0; - - /* Draw the object on the screen */ - RefreshListObj(lo); - - return; -} /* UpdateListObj() */ - -int -SelectListObj(ListObj *lo) -/* - * Desc: get a listname (or listnames), TAB to move on, or ESC ESC to exit - * Pre: lo->n >= 1 - */ -{ - int key, sel_x, sel_y, quit; - char tmp[MAXPATHLEN]; - char perc[4]; - - sel_x = lo->x+1; - sel_y = lo->y + 2 + lo->sel - lo->scroll; - - if (lo->n == 0) return(SEL_TAB); - - keypad(lo->win, TRUE); - - /* Draw current selection in inverse video */ - wmove(lo->win, sel_y, sel_x); - wattrset(lo->win, item_selected_attr); - waddstr(lo->win, lo->name[lo->sel]); - - key = wgetch(lo->win); - quit = FALSE; - while ((key != '\t') && (key != '\n') && (key != '\r') - && (key != ESC) && (key != KEY_F(1)) && (key != '?') && !quit) { - /* first draw current item in normal video */ - wmove(lo->win, sel_y, sel_x); - if (lo->seld[lo->sel]) { - wattrset(lo->win, A_BOLD); - } else { - wattrset(lo->win, item_attr); - } - if (strlen(lo->name[lo->sel]) > lo->w - 2) { - strncpy(tmp, lo->name[lo->sel], lo->w - 2); - tmp[lo->w - 2] = 0; - waddstr(lo->win, tmp); - } else { - waddstr(lo->win, lo->name[lo->sel]); - } - - switch (key) { - case KEY_DOWN: - case ctrl('n'): - if (sel_y < lo->y + lo->h-1) { - if (lo->sel < lo->n-1) { - sel_y++; - lo->sel++; - } - } else { - if (lo->sel < lo->n-1) { - lo->sel++; - lo->scroll++; - DrawNames(lo); - wrefresh(lo->win); - } - } - break; - case KEY_UP: - case ctrl('p'): - if (sel_y > lo->y+2) { - if (lo->sel > 0) { - sel_y--; - lo->sel--; - } - } else { - if (lo->sel > 0) { - lo->sel--; - lo->scroll--; - DrawNames(lo); - wrefresh(lo->win); - } - } - break; - case KEY_HOME: - case ctrl('a'): - lo->sel = 0; - lo->scroll = 0; - sel_y = lo->y + 2; - DrawNames(lo); - wrefresh(lo->win); - break; - case KEY_END: - case ctrl('e'): - if (lo->n < lo->h - 3) { - lo->sel = lo->n-1; - lo->scroll = 0; - sel_y = lo->y + 2 + lo->sel - lo->scroll; - } else { - /* more than one page of list */ - lo->sel = lo->n-1; - lo->scroll = lo->n-1 - (lo->h-3); - sel_y = lo->y + 2 + lo->sel - lo->scroll; - DrawNames(lo); - wrefresh(lo->win); - } - break; - case KEY_NPAGE: - case ctrl('f'): - lo->sel += lo->h - 2; - if (lo->sel >= lo->n) lo->sel = lo->n - 1; - lo->scroll += lo->h - 2; - if (lo->scroll >= lo->n - 1) lo->scroll = lo->n - 1; - if (lo->scroll < 0) lo->scroll = 0; - sel_y = lo->y + 2 + lo->sel - lo->scroll; - DrawNames(lo); - wrefresh(lo->win); - break; - case KEY_PPAGE: - case ctrl('b'): - lo->sel -= lo->h - 2; - if (lo->sel < 0) lo->sel = 0; - lo->scroll -= lo->h - 2; - if (lo->scroll < 0) lo->scroll = 0; - sel_y = lo->y + 2 + lo->sel - lo->scroll; - DrawNames(lo); - wrefresh(lo->win); - break; - default: - quit = TRUE; - break; - } - /* Draw % indication */ - sprintf(perc, "(%3d%%)", MIN(100, (int) - (100 * (lo->sel+lo->h - 2) / MAX(1, lo->n)))); - wmove(lo->win, lo->y + lo->h, lo->x + lo->w - 8); - wattrset(lo->win, dialog_attr); - waddstr(lo->win, perc); - - /* draw current item in inverse */ - wmove(lo->win, sel_y, sel_x); - wattrset(lo->win, item_selected_attr); - if (strlen(lo->name[lo->sel]) > lo->w - 2) { - /* when printing in inverse video show the last characters in the */ - /* name that will fit in the window */ - strncpy(tmp, - lo->name[lo->sel] + strlen(lo->name[lo->sel]) - (lo->w - 2), - lo->w - 2); - tmp[lo->w - 2] = 0; - waddstr(lo->win, tmp); - } else { - waddstr(lo->win, lo->name[lo->sel]); - } - if (!quit) key = wgetch(lo->win); - } - - if (key == ESC) { - return(SEL_ESC); - } - if (key == '\t') { - return(SEL_TAB); - } - if ((key == KEY_BTAB) || (key == ctrl('b'))) { - return(SEL_BACKTAB); - } - if ((key == '\n') || (key == '\r')) { - strcpy(lo->elt, lo->name[lo->sel]); - return(SEL_CR); - } - return(key); -} /* SelectListObj() */ - -void -DelListObj(ListObj *lo) -/* - * Desc: Free the space occupied by the listobject - */ -{ - free(lo->title); - if (lo->seld != NULL) free(lo->seld); - free(lo); - - return; -} /* DelListObj() */ - -void -MarkCurrentListObj(ListObj *lo) -/* - * Desc: mark the current item for the selection list - */ -{ - lo->seld[lo->sel] = !(lo->seld[lo->sel]); - DrawNames(lo); - - return; -} /* MarkCurrentListObj() */ - -void -MarkAllListObj(ListObj *lo) -/* - * Desc: mark all items - */ -{ - int i; - - for (i=0; i<lo->n; i++) { - lo->seld[i] = TRUE; - } - DrawNames(lo); - - return; -} /* MarkAllListObj() */ - -void -UnMarkAllListObj(ListObj *lo) -/* - * Desc: unmark all items - */ -{ - int i; - - for (i=0; i<lo->n; i++) { - lo->seld[i] = FALSE; - } - DrawNames(lo); - - return; -} /* UnMarkAllListObj() */ - - -/*********************************************************************** - * - * ButtonObj routines - * - ***********************************************************************/ - - -void -RefreshButtonObj(ButtonObj *bo) -/* - * Desc: redraw the button - */ -{ - draw_box(bo->win, bo->y, bo->x, 3, bo->w, dialog_attr, border_attr); - print_button(bo->win, bo->title, bo->y+1, bo->x+2, FALSE); - - return; -} /* RefreshButtonObj() */ - -ButtonObj * -NewButtonObj(WINDOW *win, char *title, int *pushed, int y, int x) -/* - * Desc: Create a new button object - */ -{ - ButtonObj *bo; - - bo = (ButtonObj *) malloc( sizeof(ButtonObj) ); - - bo->win = win; - bo->title = (char *) malloc( strlen(title) + 1); - strcpy(bo->title, title); - bo->x = x; - bo->y = y; - bo->w = strlen(title) + 6; - bo->h = 3; - bo->pushed = pushed; - - RefreshButtonObj(bo); - - return(bo); -} /* NewButtonObj() */ - -int -SelectButtonObj(ButtonObj *bo) -/* - * Desc: Wait for buttonpresses or TAB's to move on, or ESC ESC - */ -{ - int key; - - print_button(bo->win, bo->title, bo->y+1, bo->x+2, TRUE); - wmove(bo->win, bo->y+1, bo->x+(bo->w/2)-1); - key = wgetch(bo->win); - print_button(bo->win, bo->title, bo->y+1, bo->x+2, FALSE); - switch(key) { - case '\t': - return(SEL_TAB); - break; - case KEY_BTAB: - case ctrl('b'): - return(SEL_BACKTAB); - case '\n': - case '\r': - *(bo->pushed) = TRUE; - return(SEL_BUTTON); - break; - case ESC: - return(SEL_ESC); - break; - default: - return(key); - break; - } -} /* SelectButtonObj() */ - -void -DelButtonObj(ButtonObj *bo) -/* - * Desc: Free the space occupied by <bo> - */ -{ - free(bo->title); - free(bo); - - return; -} /* DelButtonObj() */ Index: gnu/lib/libdialog/CHANGES =================================================================== --- gnu/lib/libdialog/CHANGES (revision 216873) +++ gnu/lib/libdialog/CHANGES (working copy) @@ -1,9 +0,0 @@ -- Added two variables to call to dialog_menu() to save the position - in the menu when choosing a menu-option. - -- Added dialog_fselect(), implements a fileselector dialog -- Added ui-interface objects: Stringobject, Listobject and Buttonobject. - The fileselector dialog was built using these objects. -- changed dialog_menu to use PGUP and PGDN -- Added dialog_mesgbox, which display text given in a char buffer. -- Index: gnu/lib/libdialog/COPYING =================================================================== --- gnu/lib/libdialog/COPYING (revision 216873) +++ gnu/lib/libdialog/COPYING (working copy) @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - Appendix: How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) 19yy <name of author> - - 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. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) 19yy name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. Index: gnu/lib/libdialog/gauge.c =================================================================== --- gnu/lib/libdialog/gauge.c (revision 216873) +++ gnu/lib/libdialog/gauge.c (working copy) @@ -1,79 +0,0 @@ -/* - * gauge.c - * - * progress indicator for libdialog - * - * - * Copyright (c) 1995, Marc van Kempen - * - * All rights reserved. - * - * This software may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of this software, nor does - * the author assume any responsibility for damages incurred with - * its use. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stdlib.h> -#include <string.h> - -#include "dialog.h" - -void -dialog_gauge(char *title, char *prompt, int y, int x, - int height, int width, int perc) -/* - * Desc: display a progress bar, progress indicated by <perc> - */ -{ - WINDOW *gw; - int glen, i; - char percs[5]; - - gw = newwin(height, width, y, x); - if (!gw) { - fprintf(stderr, "dialog_gauge: Error creating window (%d, %d, %d, %d)", - height, width, y, x); - exit(-1); - } - - draw_box(gw, 0, 0, height, width, dialog_attr, border_attr); - draw_shadow(stdscr, y, x, height, width); - - wattrset(gw, title_attr); - if (title) { - wmove(gw, 0, (width - strlen(title))/2 - 1); - waddstr(gw, "[ "); - waddstr(gw, title); - waddstr(gw, " ]"); - } - wattrset(gw, dialog_attr); - if (prompt) { - wmove(gw, 1, (width - strlen(prompt))/2 - 1); - waddstr(gw, prompt); - } - - draw_box(gw, 2, 2, 3, width-4, dialog_attr, border_attr); - glen = (int) ((float) perc/100 * (width-6)); - - wattrset(gw, dialog_attr); - sprintf(percs, "%3d%%", perc); - wmove(gw, 5, width/2 - 2); - waddstr(gw, percs); - - wattrset(gw, A_BOLD); - wmove(gw, 3, 3); - for (i=0; i<glen; i++) waddch(gw, ' '); - - wrefresh(gw); - delwin(gw); - - return; -} /* dialog_gauge() */ - Index: gnu/lib/libdialog/raw_popen.c =================================================================== --- gnu/lib/libdialog/raw_popen.c (revision 216873) +++ gnu/lib/libdialog/raw_popen.c (working copy) @@ -1,161 +0,0 @@ -/* - * Copyright (c) 1988, 1993 - * The Regents of the University of California. All rights reserved. - * - * This code is derived from software written by Ken Arnold and - * published in UNIX Review, Vol. 6, No. 8. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -static char sccsid[] = "@(#)popen.c 8.1 (Berkeley) 6/4/93"; -#endif /* LIBC_SCCS and not lint */ -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <sys/param.h> -#include <sys/wait.h> - -#include <signal.h> -#include <errno.h> -#include <unistd.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <paths.h> - -static struct pid { - struct pid *next; - FILE *fp; - pid_t pid; -} *pidlist; - -FILE * -raw_popen(const char *program, char * const *argv, const char *type) -{ - struct pid *cur; - FILE *iop; - int pdes[2], pid; - - if ((*type != 'r' && *type != 'w') || type[1]) - return (NULL); - - if ((cur = malloc(sizeof(struct pid))) == NULL) - return (NULL); - - if (pipe(pdes) < 0) { - (void)free(cur); - return (NULL); - } - - switch (pid = vfork()) { - case -1: /* Error. */ - (void)close(pdes[0]); - (void)close(pdes[1]); - (void)free(cur); - return (NULL); - /* NOTREACHED */ - case 0: /* Child. */ - if (*type == 'r') { - if (pdes[1] != STDOUT_FILENO) { - (void)dup2(pdes[1], STDOUT_FILENO); - (void)close(pdes[1]); - } - (void) close(pdes[0]); - } else { - if (pdes[0] != STDIN_FILENO) { - (void)dup2(pdes[0], STDIN_FILENO); - (void)close(pdes[0]); - } - (void)close(pdes[1]); - } - if (argv == NULL) - execl(_PATH_BSHELL, "sh", "-c", program, (char *)NULL); - else - execvp(program, argv); - _exit(127); - /* NOTREACHED */ - } - - /* Parent; assume fdopen can't fail. */ - if (*type == 'r') { - iop = fdopen(pdes[0], type); - (void)close(pdes[1]); - } else { - iop = fdopen(pdes[1], type); - (void)close(pdes[0]); - } - - /* Link into list of file descriptors. */ - cur->fp = iop; - cur->pid = pid; - cur->next = pidlist; - pidlist = cur; - - return (iop); -} - -/* - * pclose -- - * Pclose returns -1 if stream is not associated with a `popened' command, - * if already `pclosed', or waitpid returns an error. - */ -int -raw_pclose(FILE *iop) -{ - register struct pid *cur, *last; - int omask, pstat; - pid_t pid; - - (void)fclose(iop); - - /* Find the appropriate file pointer. */ - for (last = NULL, cur = pidlist; cur; last = cur, cur = cur->next) - if (cur->fp == iop) - break; - if (cur == NULL) - return (-1); - - /* Get the status of the process. */ - omask = sigblock(sigmask(SIGINT)|sigmask(SIGQUIT)|sigmask(SIGHUP)); - do { - pid = waitpid(cur->pid, (int *) &pstat, 0); - } while (pid == -1 && errno == EINTR); - (void)sigsetmask(omask); - - /* Remove the entry from the linked list. */ - if (last == NULL) - pidlist = cur->next; - else - last->next = cur->next; - free(cur); - - return (pid == -1 ? -1 : pstat); -} Index: gnu/lib/libdialog/ui_objects.h =================================================================== --- gnu/lib/libdialog/ui_objects.h (revision 216873) +++ gnu/lib/libdialog/ui_objects.h (working copy) @@ -1,114 +0,0 @@ -/* - * Author: Marc van Kempen - * Desc: include file for UI-objects - * - * Copyright (c) 1995, Marc van Kempen - * - * All rights reserved. - * - * This software may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of this software, nor does - * the author assume any responsibility for damages incurred with - * its use. - * - */ - -#include "dialog.h" -#include <ncurses.h> - -/*********************************************************************** - * - * Defines - * - ***********************************************************************/ - -#define ctrl(a) ((a) - 'a' + 1) - -/* the Object types */ -#define STRINGOBJ 1 -#define LISTOBJ 2 -#define BUTTONOBJ 3 - -/* the return signals from the selection routines */ -/* 1000 and higher should avoid conflicts with keys pressed */ -#define SEL_CR 1001 /* return was pressed */ -#define SEL_ESC 1002 /* ESC pressed */ -#define SEL_TAB 1003 /* TAB pressed */ -#define SEL_BACKTAB 1004 /* SHIFT-TAB pressed */ -#define SEL_BUTTON 1005 /* a button was pressed */ - -/*********************************************************************** - * - * Typedefs - * - ***********************************************************************/ - -typedef struct { - WINDOW *win; /* the window it's contained in */ - char *title; /* the prompt for the input field */ - char *s; /* initial value of the input field */ - int x, y, w, len; /* the (y, x) position of the upperleft */ - /* corner and the width <w> of the display */ - /* and length <len> of the field */ - int attr_mask; /* special attributes */ -} StringObj; - -typedef struct { - WINDOW *win; /* the windows it's contained in */ - char *title; /* the title of the list */ - char **name; /* the names of the list */ - int *seld; /* the currently selected names */ - char *elt; /* the current element in the list list[sel] */ - int x, y, w, h, n; /* dimensions of list and # of elements (n) */ - int scroll, sel; /* current position in the list */ -} ListObj; - -typedef struct { - WINDOW *win; /* the window it's contained in */ - char *title; /* title for the button */ - int x, y, w, h; /* its dimensions */ - int *pushed; /* boolean that determines wether button was pushed */ -} ButtonObj; - -typedef struct ComposeObj { - int objtype; - void *obj; - struct ComposeObj *next, *prev; -} ComposeObj; - -/********************************************************************** - * - * Prototypes - * - **********************************************************************/ - -void RefreshStringObj(StringObj *so); -StringObj *NewStringObj(WINDOW *win, char *title, char *s, - int y, int x, int w, int len); -int SelectStringObj(StringObj *so); -void DelStringObj(StringObj *so); - -void RefreshListObj(ListObj *lo); -ListObj *NewListObj(WINDOW *win, char *title, char **list, - char *listelt, int y, int x, int h, int w, int n); -void UpdateListObj(ListObj *lo, char **list, int n); -int SelectListObj(ListObj *lo); -void DelListObj(ListObj *obj); -void MarkCurrentListObj(ListObj *lo); -void MarkAllListObj(ListObj *lo); -void UnMarkAllListObj(ListObj *lo); - -void RefreshButtonObj(ButtonObj *bo); -ButtonObj *NewButtonObj(WINDOW *win, char *title, int *pushed, - int y, int x); -int SelectButtonObj(ButtonObj *bo); -void DelButtonObj(ButtonObj *bo); -void AddObj(ComposeObj **Obj, int objtype, void *obj); -void FreeObj(ComposeObj *Obj); -int ReadObj(ComposeObj *Obj); -int PollObj(ComposeObj **Obj); -void DelObj(ComposeObj *Obj); - Index: gnu/lib/libdialog/Makefile =================================================================== --- gnu/lib/libdialog/Makefile (revision 216873) +++ gnu/lib/libdialog/Makefile (working copy) @@ -1,47 +1,19 @@ -# Makefile for libdialog # $FreeBSD$ -.include <bsd.own.mk> +DIALOG= ${.CURDIR}/../../../contrib/dialog -LIB= dialog -INCS= dialog.h -MAN= dialog.3 +LIB= dialog +SHLIB_MAJOR= 7 +SRCS= arrows.c buttons.c calendar.c checklist.c columns.c dlg_keys.c \ + editbox.c fselect.c formbox.c guage.c inputbox.c inputstr.c \ + menubox.c mixedform.c mixedgauge.c mouse.c mousewget.c \ + msgbox.c pause.c progressbox.c rc.c tailbox.c textbox.c \ + timebox.c trace.c ui_getc.c util.c version.c yesno.c +INCS= dialog.h dlg_colors.h dlg_config.h dlg_keys.h +MAN= dialog.3 -SHLIB_MAJOR= 7 -SRCS= kernel.c rc.c checklist.c inputbox.c menubox.c msgbox.c \ - lineedit.c radiolist.c textbox.c yesno.c prgbox.c raw_popen.c \ - fselect.c ui_objects.c dir.c notify.c help.c gauge.c tree.c +CFLAGS+= -I${.CURDIR} -I${DIALOG} +.PATH: ${DIALOG} +WARNS?= 3 -EXAMPLES= Makefile check1.c check2.c check3.c dselect.c fselect.c \ - ftree1.c ftree1.test ftree2.c ftree2.test gauge.c input1.c \ - input2.c menu1.c menu2.c menu3.c msg.c prgbox.c radio1.c \ - radio2.c radio3.c text.c tree.c yesno.c - -CFLAGS+= -I${.CURDIR} -Wall -Wstrict-prototypes -DLOCALE - -DPADD= ${LIBNCURSES} -LDADD= -lncurses - -.if ${MK_HTML} != "no" -FILES= ${EXAMPLES:C;^;${.CURDIR}/TESTS/;} -FILESDIR= ${SHAREDIR}/examples/libdialog -.endif - -MLINKS+=dialog.3 draw_shadow.3 dialog.3 draw_box.3 \ - dialog.3 line_edit.3 dialog.3 strheight.3 \ - dialog.3 strwidth.3 dialog.3 dialog_create_rc.3 \ - dialog.3 dialog_yesno.3 dialog.3 dialog_noyes.3 \ - dialog.3 dialog_prgbox.3 \ - dialog.3 dialog_textbox.3 dialog.3 dialog_menu.3 \ - dialog.3 dialog_checklist.3 dialog.3 dialog_radiolist.3 \ - dialog.3 dialog_inputbox.3 dialog.3 dialog_clear_norefresh.3 \ - dialog.3 dialog_clear.3 dialog.3 dialog_update.3 \ - dialog.3 dialog_fselect.3 dialog.3 dialog_notify.3 \ - dialog.3 dialog_mesgbox.3 dialog.3 dialog_gauge.3 \ - dialog.3 init_dialog.3 dialog.3 end_dialog.3 \ - dialog.3 use_helpfile.3 dialog.3 use_helpline.3 \ - dialog.3 get_helpline.3 dialog.3 restore_helpline.3 \ - dialog.3 dialog_msgbox.3 dialog.3 dialog_ftree.3 \ - dialog.3 dialog_tree.3 - .include <bsd.lib.mk> Index: gnu/lib/libdialog/lineedit.c =================================================================== --- gnu/lib/libdialog/lineedit.c (revision 216873) +++ gnu/lib/libdialog/lineedit.c (working copy) @@ -1,213 +0,0 @@ -/* - * Changes Copyright (C) 1995 by Andrey A. Chernov, Moscow - * - * Original Copyright: - * - * AUTHOR: Savio Lam (lam836@cs.cuhk.hk) - * - * 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. - */ - - -#include <dialog.h> -#include "dialog.priv.h" - -static void redraw_field(WINDOW *dialog, int box_y, int box_x, int flen, int box_width, unsigned char instr[], int input_x, int scroll, chtype attr, chtype old_attr, int fexit, int attr_mask); - -/* - * Line editor - */ -int line_edit(WINDOW* dialog, int box_y, int box_x, int flen, int box_width, chtype attr, int first, unsigned char *result, int attr_mask) -{ - int i, key; - chtype old_attr; - static int input_x, scroll; - static unsigned char instr[MAX_LEN+1]; - unsigned char erase_char = erasechar(); - unsigned char kill_char = killchar(); -#ifdef notyet - unsignec char werase_char = cur_term->Ottyb.c_cc[VWERASE]; -#endif - - old_attr = getattrs(dialog); - keypad(dialog, TRUE); - - if (first) { - memset(instr, 0, sizeof(instr)); - strcpy(instr, result); - i = strlen(instr); -/* input_x = i % box_width;*/ - input_x = (i > box_width) ? box_width - 1 : i; -/* scroll = i - input_x;*/ - scroll = (i > box_width) ? i - box_width + 1: 0; - } - redraw_field(dialog, box_y, box_x, flen, box_width, instr, input_x, scroll, attr, old_attr, FALSE, attr_mask); - - for (;;) { - wattrset(dialog, attr); - wrefresh(dialog); - key = wgetch(dialog); - switch (key) { - case ctrl('q'): - goto ret; - break; - case KEY_F(1): - display_helpfile(); - break; - case TAB: - case KEY_BTAB: - case KEY_UP: - case KEY_DOWN: - case ESC: - case '\r': - case '\n': - for (i = strlen(instr) - 1; i >= scroll + input_x && instr[i] == ' '; i--) - instr[i] = '\0'; - if (key == '\r') - key = '\n'; - goto ret; - case '\025': - case '\030': - kill_it: - input_x = scroll = 0; - /* fall through */ - case '\013': - case KEY_EOL: - memset(instr + scroll + input_x, '\0', sizeof(instr) - scroll - input_x); - redraw_field(dialog, box_y, box_x, flen, box_width, instr, input_x, scroll, attr, old_attr, FALSE, attr_mask); - continue; - case '\001': - case KEY_HOME: - input_x = scroll = 0; - redraw_field(dialog, box_y, box_x, flen, box_width, instr, input_x, scroll, attr, old_attr, FALSE, attr_mask); - continue; - case '\005': - case KEY_END: - for (i = strlen(instr) - 1; i >= scroll + input_x && instr[i] == ' '; i--) - instr[i] = '\0'; - i++; - input_x = i % box_width; - scroll = i - input_x; - redraw_field(dialog, box_y, box_x, flen, box_width, instr, input_x, scroll, attr, old_attr, FALSE, attr_mask); - continue; - case '\002': - case KEY_LEFT: - if (input_x || scroll) { - if (!input_x) { - int oldscroll = scroll; - scroll = scroll < box_width-1 ? 0 : scroll-(box_width-1); - input_x = oldscroll - 1 - scroll; - redraw_field(dialog, box_y, box_x, flen, box_width, instr, input_x, scroll, attr, old_attr, FALSE, attr_mask); - } else { - input_x--; - wmove(dialog, box_y, input_x + box_x); - } - } else - beep(); - continue; - case '\006': - case KEY_RIGHT: - if ( scroll+input_x < MAX_LEN - && (flen < 0 || scroll+input_x < flen) - ) { - if (!instr[scroll+input_x]) - instr[scroll+input_x] = ' '; - if (input_x == box_width-1) { - scroll++; - redraw_field(dialog, box_y, box_x, flen, box_width, instr, input_x, scroll, attr, old_attr, FALSE, attr_mask); - } - else { - wmove(dialog, box_y, input_x + box_x); - waddch(dialog, instr[scroll+input_x]); - input_x++; - } - } else - beep(); /* Alarm user about overflow */ - continue; - case '\b': - case '\177': - case KEY_BACKSPACE: - erase_it: - if (input_x || scroll) { - i = strlen(instr); - memmove(instr+scroll+input_x-1, instr+scroll+input_x, i-(scroll+input_x)+1); - if (!input_x) { - int oldscroll = scroll; - scroll = scroll < box_width-1 ? 0 : scroll-(box_width-1); - input_x = oldscroll - 1 - scroll; - } else - input_x--; - redraw_field(dialog, box_y, box_x, flen, box_width, instr, input_x, scroll, attr, old_attr, FALSE, attr_mask); - } else - beep(); - continue; - case '\004': - case KEY_DC: - for (i = strlen(instr) - 1; i >= scroll + input_x && instr[i] == ' '; i--) - instr[i] = '\0'; - i++; - if (i == 0) { - beep(); - continue; - } - memmove(instr+scroll+input_x, instr+scroll+input_x+1, i-(scroll+input_x)); - redraw_field(dialog, box_y, box_x, flen, box_width, instr, input_x, scroll, attr, old_attr, FALSE, attr_mask); - continue; - default: - if (CCEQ(key, erase_char)) - goto erase_it; - if (CCEQ(key, kill_char)) - goto kill_it; - if (key < 0x100 && isprint(key)) { - for (i = strlen(instr) - 1; i >= scroll + input_x && instr[i] == ' '; i--) - instr[i] = '\0'; - i++; - if (i < MAX_LEN && (flen < 0 || scroll+input_x < flen)) { - if (flen < 0 || i < flen) - memmove(instr+scroll+input_x+1, instr+scroll+input_x, i-(scroll+input_x)); - instr[scroll+input_x] = key; - if (input_x == box_width-1 && (flen < 0 || i < flen)) - scroll++; - else - input_x++; - redraw_field(dialog, box_y, box_x, flen, box_width, instr, input_x, scroll, attr, old_attr, FALSE, attr_mask); - } else - beep(); /* Alarm user about overflow */ - continue; - } - } - } -ret: - redraw_field(dialog, box_y, box_x, flen, box_width, instr, input_x, scroll, attr, old_attr, TRUE, attr_mask); - wrefresh(dialog); - strcpy(result, instr); - return key; -} - -static void -redraw_field(WINDOW *dialog, int box_y, int box_x, int flen, int box_width, unsigned char instr[], int input_x, int scroll, chtype attr, chtype old_attr, int fexit, int attr_mask) -{ - int i, fix_len; - - wattrset(dialog, fexit ? old_attr : attr); - wmove(dialog, box_y, box_x); - fix_len = flen >= 0 ? MIN(flen-scroll,box_width) : box_width; - for (i = 0; i < fix_len; i++) - waddch(dialog, instr[scroll+i] ? ((attr_mask & DITEM_NO_ECHO) ? '*' : instr[scroll+i]) : ' '); - wattrset(dialog, old_attr); - for ( ; i < box_width; i++) - waddch(dialog, instr[scroll+i] ? ((attr_mask & DITEM_NO_ECHO) ? '*' : instr[scroll+i]) : ' '); - wmove(dialog, box_y, input_x + box_x); -} Index: gnu/lib/libdialog/textbox.c =================================================================== --- gnu/lib/libdialog/textbox.c (revision 216873) +++ gnu/lib/libdialog/textbox.c (working copy) @@ -1,699 +0,0 @@ -/* - * textbox.c -- implements the text box - * - * AUTHOR: Savio Lam (lam836@cs.cuhk.hk) - * - * 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. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <dialog.h> -#include "dialog.priv.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 unsigned char *get_line(void); -static int get_search_term(WINDOW *win, unsigned char *search_term, int height, int width); -static void print_position(WINDOW *win, int height, int width); - - -static int hscroll = 0, fd, file_size, bytes_read, begin_reached = 1, - end_reached = 0, page_length; -static unsigned char *buf, *page; - - -/* - * Display text from a file in a dialog box. - */ -int dialog_textbox(unsigned char *title, unsigned char *file, int height, int width) -{ - int i, x, y, cur_x, cur_y, fpos, key = 0, dir, temp, temp1; -#ifdef HAVE_NCURSES - int passed_end; -#endif - unsigned char search_term[MAX_LEN+1], *tempptr, *found; - WINDOW *dialog, *text; - - if (height < 0 || width < 0) { - fprintf(stderr, "\nAutosizing is impossible in dialog_textbox().\n"); - return(-1); - } - - search_term[0] = '\0'; /* no search term entered yet */ - - /* Open input file for reading */ - if ((fd = open(file, O_RDONLY)) == -1) { - fprintf(stderr, "\nCan't open input file <%s>in dialog_textbox().\n", file); - return(-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) { - fprintf(stderr, "\nError getting file size in dialog_textbox().\n"); - return(-1); - } - /* Restore file pointer to beginning of file after getting file size */ - if (lseek(fd, 0, SEEK_SET) == -1) { - fprintf(stderr, "\nError moving file pointer in dialog_textbox().\n"); - return(-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) { - fprintf(stderr, "\nError reading file in dialog_textbox().\n"); - return(-1); - } - buf[bytes_read] = '\0'; /* mark end of valid data */ - page = buf; /* page is pointer to start of page to be displayed */ - - if (width > COLS) - width = COLS; - if (height > LINES) - height = LINES; - /* center dialog box on screen */ - x = DialogX ? DialogX : (COLS - width)/2; - y = DialogY ? DialogY : (LINES - height)/2; - -#ifdef HAVE_NCURSES - if (use_shadow) - draw_shadow(stdscr, y, x, height, width); -#endif - dialog = newwin(height, width, y, x); - if (dialog == NULL) { - endwin(); - fprintf(stderr, "\nnewwin(%d,%d,%d,%d) failed, maybe wrong dims\n", height,width,y,x); - exit(1); - } - keypad(dialog, TRUE); - - /* Create window for text region, used for scrolling text */ -/* text = newwin(height-4, width-2, y+1, x+1); */ - text = subwin(dialog, height-4, width-2, y+1, x+1); - if (text == NULL) { - endwin(); - fprintf(stderr, "\nsubwin(dialog,%d,%d,%d,%d) failed, maybe wrong dims\n", height-4,width-2,y+1,x+1); - exit(1); - } - keypad(text, TRUE); - - draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); - - wattrset(dialog, border_attr); - wmove(dialog, height-3, 0); - waddch(dialog, ACS_LTEE); - for (i = 0; i < width-2; i++) - waddch(dialog, ACS_HLINE); - wattrset(dialog, dialog_attr); - waddch(dialog, ACS_RTEE); - wmove(dialog, height-2, 1); - for (i = 0; i < width-2; i++) - waddch(dialog, ' '); - - if (title != NULL) { - wattrset(dialog, title_attr); - wmove(dialog, 0, (width - strlen(title))/2 - 1); - waddch(dialog, ' '); - waddstr(dialog, title); - waddch(dialog, ' '); - } - display_helpline(dialog, height-1, width); - - print_button(dialog, " OK ", height-2, width/2-6, 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 != '\r') && (key != ' ')) { - key = wgetch(dialog); - switch (key) { - case 'E': /* Exit */ - case 'e': - delwin(dialog); - free(buf); - close(fd); - return 0; - 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 */ -#ifdef HAVE_NCURSES - case KEY_END: -#endif - 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 '\020': /* ^P */ - case KEY_UP: - if (!begin_reached) { - back_lines(page_length+1); -#ifdef HAVE_NCURSES - /* 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_line(text, 0, width-2); /* print first line of page */ - wnoutrefresh(text); - } - else - get_line(); /* Called to update 'end_reached' and 'page' */ - if (!passed_end) - page_length++; - if (end_reached && !passed_end) - passed_end = 1; - } -#else - print_page(text, height-4, width-2); -#endif - 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) { - back_lines(page_length + 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 'J': /* Next line */ - case 'j': - case '\016': /* ^N */ - 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); -#ifndef HAVE_NCURSES - wmove(text, height-5, 0); - waddch(text, ' '); - wmove(text, height-5, width-3); - waddch(text, ' '); -#endif - wnoutrefresh(text); - print_position(dialog, height, width); - wmove(dialog, cur_y, cur_x); /* Restore cursor position */ - wrefresh(dialog); - } - break; - case 'F': /* Next page */ - case 'f': - case KEY_NPAGE: - if (!end_reached) { - begin_reached = 0; - 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 '0': /* Beginning of line */ - case 'H': /* Scroll left */ - case 'h': - case KEY_LEFT: - if (hscroll > 0) { - 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); /* Restore cursor position */ - wrefresh(dialog); - } - break; - case 'L': /* Scroll right */ - case 'l': - case KEY_RIGHT: - if (hscroll < MAX_LEN) { - hscroll++; - /* Reprint current page to scroll horizontally */ - back_lines(page_length); - print_page(text, height-4, width-2); - wmove(dialog, cur_y, cur_x); /* Restore cursor position */ - wrefresh(dialog); - } - break; - case '/': /* Forward search */ - case 'n': /* Repeat forward search */ - case '?': /* Backward search */ - case 'N': /* Repeat backward search */ - /* set search direction */ - dir = (key == '/' || key == 'n') ? 1 : 0; - if (dir ? !end_reached : !begin_reached) { - if (key == 'n' || key == 'N') { - if (search_term[0] == '\0') { /* No search term yet */ - fprintf(stderr, "\a"); /* beep */ - break; - } - } - else /* Get search term from user */ - if (get_search_term(text, search_term, height-4, width-2) == -1) { - /* ESC pressed in get_search_term(). Reprint page to clear box */ - wattrset(text, dialog_attr); - back_lines(page_length); - print_page(text, height-4, width-2); - wmove(dialog, cur_y, cur_x); /* Restore cursor position */ - wrefresh(dialog); - break; - } - /* Save variables for restoring in case search term can't be found */ - tempptr = page; - temp = begin_reached; - temp1 = end_reached; - if ((fpos = lseek(fd, 0, SEEK_CUR)) == -1) { - endwin(); - fprintf(stderr, "\nError moving file pointer in dialog_textbox().\n"); - exit(-1); - } - fpos -= bytes_read; - /* update 'page' to point to next (previous) line before - forward (backward) searching */ - back_lines(dir ? page_length-1 : page_length+1); - found = NULL; - if (dir) /* Forward search */ - while((found = strstr(get_line(), search_term)) == NULL) { - if (end_reached) - break; - } - else /* Backward search */ - while((found = strstr(get_line(), search_term)) == NULL) { - if (begin_reached) - break; - back_lines(2); - } - if (found == NULL) { /* not found */ - fprintf(stderr, "\a"); /* beep */ - /* Restore program state to that before searching */ - if (lseek(fd, fpos, 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 = tempptr; - begin_reached = temp; - end_reached = temp1; - /* move 'page' to point to start of current page in order to - re-print current page. Note that 'page' always points to - start of next page, so this is necessary */ - back_lines(page_length); - } - else /* Search term found */ - back_lines(1); - /* Reprint page */ - wattrset(text, dialog_attr); - print_page(text, height-4, width-2); - if (found != NULL) - print_position(dialog, height, width); - wmove(dialog, cur_y, cur_x); /* Restore cursor position */ - wrefresh(dialog); - } - else /* no need to find */ - fprintf(stderr, "\a"); /* beep */ - break; - case ESC: - break; - case KEY_F(1): - display_helpfile(); - break; - } - } - - delwin(dialog); - free(buf); - close(fd); - return (key == ESC ? -1 : 0); -} -/* End of dialog_textbox() */ - - -/* - * 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++; -} -/* End of back_lines() */ - - -/* - * 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); -} -/* End of print_page() */ - - -/* - * Print a new line of text. Called by dialog_textbox() and print_page(). - */ -static void print_line(WINDOW *win, int row, int width) -{ - int i, y, x; - unsigned char *line; - - line = get_line(); - line += MIN(strlen(line),hscroll); /* Scroll horizontally */ - wmove(win, row, 0); /* move cursor to correct line */ - waddch(win,' '); -#ifdef HAVE_NCURSES - waddnstr(win, line, MIN(strlen(line),width-2)); -#else - line[MIN(strlen(line),width-2)] = '\0'; - waddstr(win, line); -#endif - - getyx(win, y, x); - /* Clear 'residue' of previous line */ - for (i = 0; i < width-x; i++) - waddch(win, ' '); -} -/* End of print_line() */ - - -/* - * 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 unsigned char *get_line(void) -{ - int i = 0, fpos; - static unsigned 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 { - if (i == MAX_LEN) /* Truncate lines longer than MAX_LEN characters */ - line[i++] = '\0'; - page++; - } - } - if (i <= MAX_LEN) - line[i] = '\0'; - if (!end_reached) - page++; /* move pass '\n' */ - - return line; -} -/* End of get_line() */ - - -/* - * Display a dialog box and get the search term from user - */ -static int get_search_term(WINDOW *win, unsigned char *search_term, int height, int width) -{ - int x, y, key = 0, first, - box_height = 3, box_width = 30; - - x = (width - box_width)/2; - y = (height - box_height)/2; -#ifdef HAVE_NCURSES - if (use_shadow) - draw_shadow(win, y, x, box_height, box_width); -#endif - draw_box(win, y, x, box_height, box_width, dialog_attr, searchbox_border_attr); - wattrset(win, searchbox_title_attr); - wmove(win, y, x+box_width/2-4); - waddstr(win, " Search "); - wattrset(win, dialog_attr); - - search_term[0] = '\0'; - - first = 1; - while (key != ESC) { - key = line_edit(win, y+1, x+1, -1, box_width-2, searchbox_attr, first, search_term, 0); - first = 0; - switch (key) { - case '\n': - if (search_term[0] != '\0') - return 0; - break; - case ESC: - break; - } - } - - return -1; /* ESC pressed */ -} -/* End of get_search_term() */ - - -/* - * 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); - percent = !file_size ? 100 : ((fpos-bytes_read+page-buf)*100)/file_size; - wmove(win, height-3, width-9); - wprintw(win, "(%3d%%)", percent); -} -/* End of print_position() */ Index: gnu/lib/libdialog/yesno.c =================================================================== --- gnu/lib/libdialog/yesno.c (revision 216873) +++ gnu/lib/libdialog/yesno.c (working copy) @@ -1,169 +0,0 @@ -/* - * yesno.c -- implements the yes/no box - * - * AUTHOR: Savio Lam (lam836@cs.cuhk.hk) - * - * 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. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <dialog.h> -#include "dialog.priv.h" - -/* Actual work function */ -static int dialog_yesno_proc(unsigned char *title, unsigned char *prompt, - int height, int width, int yesdefault); - -/* - * Display a dialog box with two buttons - Yes and No - */ -int -dialog_yesno(unsigned char *title, unsigned char *prompt, int height, int width) -{ - return dialog_yesno_proc(title, prompt, height, width, TRUE); -} - -/* - * Display a dialog box with two buttons - No and Yes - */ -int -dialog_noyes(unsigned char *title, unsigned char *prompt, int height, int width) -{ - return dialog_yesno_proc(title, prompt, height, width, FALSE); -} - -static int -dialog_yesno_proc(unsigned char *title, unsigned char *prompt, int height, int width, int yesdefault) -{ - int i, j, x, y, key, button; - WINDOW *dialog; - char *tmphlp; - - /* disable helpline */ - tmphlp = get_helpline(); - use_helpline(NULL); - - if (height < 0) - height = strheight(prompt)+4; - if (width < 0) { - i = strwidth(prompt); - j = ((title != NULL) ? strwidth(title) : 0); - width = MAX(i,j)+4; - } - width = MAX(width,23); - - if (width > COLS) - width = COLS; - if (height > LINES) - height = LINES; - /* center dialog box on screen */ - x = DialogX ? DialogX : (COLS - width)/2; - y = DialogY ? DialogY : (LINES - height)/2; - -#ifdef HAVE_NCURSES - if (use_shadow) - draw_shadow(stdscr, y, x, height, width); -#endif - dialog = newwin(height, width, y, x); - if (dialog == NULL) { - endwin(); - fprintf(stderr, "\nnewwin(%d,%d,%d,%d) failed, maybe wrong dims\n", height,width,y,x); - exit(1); - } - keypad(dialog, TRUE); - - draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); - wattrset(dialog, border_attr); - wmove(dialog, height-3, 0); - waddch(dialog, ACS_LTEE); - for (i = 0; i < width-2; i++) - waddch(dialog, ACS_HLINE); - wattrset(dialog, dialog_attr); - waddch(dialog, ACS_RTEE); - wmove(dialog, height-2, 1); - for (i = 0; i < width-2; i++) - waddch(dialog, ' '); - - if (title != NULL) { - wattrset(dialog, title_attr); - wmove(dialog, 0, (width - strlen(title))/2 - 1); - waddch(dialog, ' '); - waddstr(dialog, title); - waddch(dialog, ' '); - } - wattrset(dialog, dialog_attr); - wmove(dialog, 1, 2); - print_autowrap(dialog, prompt, height-1, width-2, width, 1, 2, TRUE, FALSE); - - display_helpline(dialog, height-1, width); - - x = width/2-10; - y = height-2; - - /* preset button 0 or 1 for YES or NO as the default */ - key = 0; - button = !yesdefault; - while (key != ESC) { - print_button(dialog, " No ", y, x+13, button); - print_button(dialog, " Yes " , y, x, !button); - if (button) - wmove(dialog, y, x+16); - else - wmove(dialog, y, x+2); - wrefresh(dialog); - - key = wgetch(dialog); - switch (key) { - case 'Y': - case 'y': - delwin(dialog); - restore_helpline(tmphlp); - return 0; - case 'N': - case 'n': - delwin(dialog); - restore_helpline(tmphlp); - return 1; - case KEY_BTAB: - case TAB: - case KEY_UP: - case KEY_DOWN: - case KEY_LEFT: - case KEY_RIGHT: - button = !button; - /* redrawn at the loop's entry */ - break; - case ' ': - case '\r': - case '\n': - delwin(dialog); - restore_helpline(tmphlp); - return button; - case ESC: - break; - case KEY_F(1): - case '?': - display_helpfile(); - break; - } - } - - delwin(dialog); - restore_helpline(tmphlp); - return -1; /* ESC pressed */ -} -/* End of dialog_yesno() */ Index: gnu/lib/libdialog/tree.c =================================================================== --- gnu/lib/libdialog/tree.c (revision 216873) +++ gnu/lib/libdialog/tree.c (working copy) @@ -1,1133 +0,0 @@ -/* - * tree.c -- implements the 'tree' interface element for libdialog - * - * Author: Anatoly A. Orehovsky (tolik@mpeks.tomsk.su) - * - * Copyright (c) 1997, Anatoly A. Orehovsky - * 09/28/98 - patched by Anatoly A. Orehovsky (smart_tree()) - * - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stdlib.h> -#include <strings.h> -#include <stdio.h> -#include <dialog.h> -#include "dialog.priv.h" -#include <ncurses.h> - -/* static utils for make tree */ -struct leaf { - unsigned char *name; /* name of leaf */ - unsigned char *branches; /* branches that going by leaf */ - unsigned char slip; /* slip of leaf*/ - int shift; /* shift relative root of tree */ -}; - -static int mk_slip(struct leaf array[], int arr_size, - int number, int shift); - -/* make tree from file - * - * filename - name of file with like find(1) output - * p_names - pointer to array of strings - * p_size - pointer to size of array - * FS - fields separator - * p_array - pointer to array of leafs - * - * return values: - * 0 - ok and names by p_names, size by p_size, array by p_array set - * -1 - memory allocation error (errno set) - */ - -static int mk_ftree(char *filename, - unsigned char ***p_names, int *p_size, unsigned char FS, - struct leaf **p_array); - -/* make tree from array - * - * names - array of strings - * size - size of array - * FS - fields separator - * p_array - pointer to array of leafs - * - * return values: - * 0 - ok and array by p_array set - * -1 - memory allocation error (errno set) - */ - -static int mk_tree(unsigned char **names, int size, unsigned char FS, - struct leaf **p_array); - -/* free memory from tree (leafs) - * - * return values: - * nothing - */ - -static void free_leafs(struct leaf *array, int size); - -/* free memory from source data for tree (names) - * - * return values: - * if 0 <= choice <= size - pointer to name from names, - * and memory for name not released (must be freed later) - * else - NULL (recomended choice -1 for it) - */ - -static unsigned char *free_names(unsigned char **names, - int size, int choice); - -/* end of static utils for make tree */ - -/* static utils for ftree */ - -/* control struct for queue */ -struct queue { - int size; /* size of queue */ - struct m_queue *first; /* begin of queue */ - struct m_queue *last; /* end of queue */ -}; - -/* queue member */ -struct m_queue { - void *pointer; /* queue member */ - struct m_queue *next; /* next queue member */ -}; - -/* init struct queue by zeros */ -static void init_queue(struct queue *queue); - -/* add pointer to queue */ -/* return - pointer or NULL if error */ -static void *p2_queue(struct queue *queue, void *pointer); - -/* get first from queue */ -/* return - pointer or NULL if queue is empty */ -static void *first_queue(struct queue *queue); - -/* make zero terminated array from queue */ -/* return - pointer to array or NULL if error */ -static void **q2arr(struct queue *queue, int depth); - -/* smart_tree (for like find(1) with -d flag output compliance) */ -/* return - not NULL or NULL if malloc error */ -static unsigned char *smart_tree(struct queue *queue, unsigned char FS, - unsigned char *current, - unsigned char *prev); - -/* end of static utils for ftree */ - -/* static utils for saved_tree */ - -/* saved values for unique tree */ -struct saved_tree { - unsigned char **names; /* names + */ - int size; /* size + */ - unsigned char FS; /* FS + */ - int height; /* height + */ - int width; /* width + */ - int menu_height; /* menu_height - unique for treebox ? */ - int ch; /* saved ch - choice */ - int sc; /* saved sc - scroll */ -}; - -/* search saved tree within queue */ -/* return - struct saved_tree * or NULL if not found */ -static struct saved_tree *search_saved_tree(struct queue *queue, - unsigned char **names, - int size, - unsigned char FS, - int height, - int width, - int menu_height); - -/* end of static utils for saved_tree */ - -static void print_item(WINDOW *win, struct leaf item, int choice, int selected); - -static void print_position(WINDOW *win, int x, int y, - int cur_pos, int size); - -static int menu_width, item_x; - -static int dialog_treemenu(unsigned char *title, unsigned char *prompt, - int height, int width, int menu_height, - int item_no, struct leaf items[], - int *result, - int *ch, int *sc); - -/* - * Display a menu for choosing among a number of options - */ -static -int dialog_treemenu(unsigned char *title, unsigned char *prompt, - int height, int width, int menu_height, - int item_no, struct leaf items[], - int *result, - int *ch, int *sc) -{ - int i, j, x, y, cur_x, cur_y, box_x, box_y, key = 0, button = 0, choice = 0, - l, scroll = 0, max_choice, redraw_menu = FALSE; - WINDOW *dialog, *menu; - - if (ch) /* restore menu item info */ - choice = *ch; - if (sc) - scroll = *sc; - - max_choice = MIN(menu_height, item_no); - - item_x = 0; - /* Find length of longest item in order to center menu */ - for (i = 0; i < item_no; i++) { - l = strlen(items[i].name) + strlen(items[i].branches) * 4 + 4; - item_x = MAX(item_x, l); - } - - if (height < 0) - height = strheight(prompt)+menu_height+4+2; - if (width < 0) { - i = strwidth(prompt); - j = ((title != NULL) ? strwidth(title) : 0); - width = MAX(i,j); - width = MAX(width,item_x+4)+4; - } - width = MAX(width,24); - - if (width > COLS) - width = COLS; - if (height > LINES) - height = LINES; - /* center dialog box on screen */ - x = (COLS - width)/2; - y = (LINES - height)/2; - -#ifdef HAVE_NCURSES - if (use_shadow) - draw_shadow(stdscr, y, x, height, width); -#endif - dialog = newwin(height, width, y, x); - if (dialog == NULL) { - endwin(); - fprintf(stderr, "\nnewwin(%d,%d,%d,%d) failed, maybe wrong dims\n", height,width,y,x); - exit(1); - } - keypad(dialog, TRUE); - - draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); - wattrset(dialog, border_attr); - wmove(dialog, height-3, 0); - waddch(dialog, ACS_LTEE); - for (i = 0; i < width-2; i++) - waddch(dialog, ACS_HLINE); - wattrset(dialog, dialog_attr); - waddch(dialog, ACS_RTEE); - wmove(dialog, height-2, 1); - for (i = 0; i < width-2; i++) - waddch(dialog, ' '); - - if (title != NULL) { - wattrset(dialog, title_attr); - wmove(dialog, 0, (width - strlen(title))/2 - 1); - waddch(dialog, ' '); - waddstr(dialog, title); - waddch(dialog, ' '); - } - wattrset(dialog, dialog_attr); - wmove(dialog, 1, 2); - print_autowrap(dialog, prompt, height-1, width-2, width, 1, 2, TRUE, FALSE); - - menu_width = width-6; - getyx(dialog, cur_y, cur_x); - box_y = cur_y + 1; - 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); - if (menu == NULL) { - endwin(); - fprintf(stderr, "\nsubwin(dialog,%d,%d,%d,%d) failed, maybe wrong dims\n", menu_height,menu_width,y+box_y+1,x+box_x+1); - exit(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); - - item_x = 1; - - /* Print the menu */ - for (i = 0; i < max_choice; i++) - print_item(menu, items[(scroll+i)], i, i == choice); - wnoutrefresh(menu); - print_arrows(dialog, scroll, menu_height, item_no, box_x, box_y, item_x, cur_x, cur_y); - print_position(dialog, box_x+menu_width, box_y+menu_height, scroll+choice, item_no); - - display_helpline(dialog, height-1, width); - - x = width/2-11; - y = height-2; - print_button(dialog, "Cancel", y, x+14, FALSE); - print_button(dialog, " OK ", y, x, TRUE); - - wrefresh(dialog); - - while (key != ESC) { - key = wgetch(dialog); - /* Check if key pressed matches first character of any item tag in menu */ - - if (key == KEY_UP || key == KEY_DOWN || key == '-' || key == '+') { - if (key == KEY_UP || key == '-') { - if (!choice) { - if (scroll) { -#ifdef BROKEN_WSCRL - /* wscrl() in ncurses 1.8.1 seems to be broken, causing a segmentation - violation when scrolling windows of height = 4, so scrolling is not - used for now */ - scroll--; - getyx(dialog, cur_y, cur_x); /* Save cursor position */ - /* Reprint menu to scroll down */ - for (i = 0; i < max_choice; i++) - print_item(menu, items[(scroll+i)], i, i == choice); - -#else - - /* Scroll menu down */ - getyx(dialog, cur_y, cur_x); /* Save cursor position */ - if (menu_height > 1) { - /* De-highlight current first item before scrolling down */ - print_item(menu, items[scroll], 0, FALSE); - scrollok(menu, TRUE); - wscrl(menu, -1); - scrollok(menu, FALSE); - } - scroll--; - print_item(menu, items[scroll], 0, TRUE); -#endif - wnoutrefresh(menu); - print_arrows(dialog, scroll, menu_height, item_no, box_x, box_y, item_x, cur_x, cur_y); - print_position(dialog, box_x+menu_width, box_y+menu_height, scroll+choice, item_no); - wmove(dialog, cur_y, cur_x); /* Restore cursor to previous position */ - 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+choice < item_no-1) { -#ifdef BROKEN_WSCRL - /* wscrl() in ncurses 1.8.1 seems to be broken, causing a segmentation - violation when scrolling windows of height = 4, so scrolling is not - used for now */ - scroll++; - getyx(dialog, cur_y, cur_x); /* Save cursor position */ - /* Reprint menu to scroll up */ - for (i = 0; i < max_choice; i++) - print_item(menu, items[(scroll+i)], i, i == choice); - -#else - - /* Scroll menu up */ - getyx(dialog, cur_y, cur_x); /* Save cursor position */ - if (menu_height > 1) { - /* De-highlight current last item before scrolling up */ - print_item(menu, items[(scroll+max_choice-1)], max_choice-1, FALSE); - scrollok(menu, TRUE); - scroll(menu); - scrollok(menu, FALSE); - } - scroll++; - print_item(menu, items[(scroll+max_choice-1)], max_choice-1, TRUE); -#endif - wnoutrefresh(menu); - print_arrows(dialog, scroll, menu_height, item_no, box_x, box_y, item_x, cur_x, cur_y); - print_position(dialog, box_x+menu_width, box_y+menu_height, scroll+choice, item_no); - wmove(dialog, cur_y, cur_x); /* Restore cursor to previous position */ - wrefresh(dialog); - } - continue; /* wait for another key press */ - } - else - i = choice + 1; - } - - if (i != choice) { - /* De-highlight current item */ - getyx(dialog, cur_y, cur_x); /* Save cursor position */ - print_item(menu, items[(scroll+choice)], choice, FALSE); - - /* Highlight new item */ - choice = i; - print_item(menu, items[(scroll+choice)], choice, TRUE); - wnoutrefresh(menu); - print_position(dialog, box_x+menu_width, box_y+menu_height, scroll+choice, item_no); - wmove(dialog, cur_y, cur_x); /* Restore cursor to previous position */ - wrefresh(dialog); - } - continue; /* wait for another key press */ - } - - /* save info about menu item position */ - if (ch) - *ch = choice; - if (sc) - *sc = scroll; - - switch (key) { - case KEY_PPAGE: - case 'B' : - case 'b' : - if (scroll > menu_height) { /* can we go up? */ - scroll -= (menu_height); - } else { - scroll = 0; - } - redraw_menu = TRUE; - break; - case KEY_NPAGE: - case 'F' : - case 'f' : - if (scroll + menu_height >= item_no-1 - menu_height) { /* can we go down a full page? */ - scroll = item_no - menu_height; - if (scroll < 0) scroll = 0; - } else { - scroll += menu_height; - } - redraw_menu = TRUE; - break; - case KEY_HOME: - case 'g' : - scroll = 0; - choice = 0; - redraw_menu = TRUE; - break; - case KEY_END: - case 'G' : - scroll = item_no - menu_height; - if (scroll < 0) scroll = 0; - choice = max_choice - 1; - redraw_menu = TRUE; - break; - case 'O': - case 'o': - delwin(dialog); - *result = scroll+choice; - return 0; - case 'C': - case 'c': - delwin(dialog); - return 1; - case KEY_BTAB: - case TAB: - case KEY_LEFT: - case KEY_RIGHT: - if (!button) { - button = 1; /* Indicates "Cancel" button is selected */ - print_button(dialog, " OK ", y, x, FALSE); - print_button(dialog, "Cancel", y, x+14, TRUE); - } - else { - button = 0; /* Indicates "OK" button is selected */ - print_button(dialog, "Cancel", y, x+14, FALSE); - print_button(dialog, " OK ", y, x, TRUE); - } - wrefresh(dialog); - break; - case ' ': - case '\r': - case '\n': - delwin(dialog); - if (!button) - *result = scroll+choice; - return button; - case ESC: - break; - case KEY_F(1): - case '?': - display_helpfile(); - break; - } - if (redraw_menu) { - for (i = 0; i < max_choice; i++) { - print_item(menu, items[(scroll+i)], - i, i == choice); - } - wnoutrefresh(menu); - getyx(dialog, cur_y, cur_x); /* Save cursor position */ - print_arrows(dialog, scroll, menu_height, item_no, box_x, box_y, item_x, cur_x, cur_y); - print_position(dialog, box_x+menu_width, box_y+menu_height, scroll+choice, item_no); - wmove(dialog, cur_y, cur_x); /* Restore cursor to previous position */ - wrefresh(dialog); - redraw_menu = FALSE; - } - } - - delwin(dialog); - return -1; /* ESC pressed */ -} -/* End of dialog_treemenu() */ - - -/* - * Print menu item - */ -static void print_item(WINDOW *win, struct leaf item, int choice, int selected) -{ - int i, j = menu_width - 2; - char *branches = item.branches; - - /* Clear 'residue' of last item */ - wattrset(win, menubox_attr); - wmove(win, choice, 0); - for (i = 0; i < menu_width; i++) - waddch(win, ' '); - wmove(win, choice, item_x); - - while(*branches && j) - { - switch (*branches++) { - case ' ' : waddch(win, ' '); - break; - case '|' : waddch(win, ACS_VLINE); - } - - j--; - i = 3; - while(i-- && j) - { - waddch(win, ' '); - j--; - } - } - - if (j) - { - switch (item.slip) { - case '+' : waddch(win, ACS_LTEE); - break; - case '`' : waddch(win, ACS_LLCORNER); - } - j--; - } - - i = 3; - while(i-- && j) - { - waddch(win, ACS_HLINE); - j--; - } - - wattrset(win, selected ? item_selected_attr : item_attr); - if (j) - waddnstr(win, item.name, j); -} -/* End of print_item() */ - -/* - * Print current position - */ -static void print_position(WINDOW *win, int x, int y, - int cur_pos, int size) -{ - int percent; - - wattrset(win, position_indicator_attr); - percent = cur_pos == size - 1 ? 100 : (cur_pos * 100)/(size - 1); - wmove(win, y + 1, x - 6); - wprintw(win, "(%3d%%)", percent); -} -/* End of print_position() */ - -/* - * Display a tree menu from file - * - * filename - file with like find(1) output - * FS - fields separator - * title - title of dialog box - * prompt - prompt text into dialog box - * height - height of dialog box - * width - width of dialog box - * menu_height - height of menu box - * result - pointer to char array - * - * return values: - * -1 - ESC pressed - * 0 - Ok, result set (must be freed later) - * 1 - Cancel - */ - -int dialog_ftree(unsigned char *filename, unsigned char FS, - unsigned char *title, unsigned char *prompt, - int height, int width, int menu_height, - unsigned char **result) -{ - int retcode, choice, size; - struct leaf *items; - unsigned char **names; - - if (mk_ftree(filename, &names, &size, FS, &items)) - { - perror("dialog_ftree"); - end_dialog(); - exit(-1); - } - - if (!size) - { - fprintf(stderr, "\ndialog_ftree: file %s is empty\n", filename); - end_dialog(); - exit(-1); - } - - retcode = dialog_treemenu(title, prompt, height, width, menu_height, - size, items, &choice, NULL, NULL); - - free_leafs(items, size); - - if (!retcode) - *result = free_names(names, size, choice); - else - (void)free_names(names, size, -1); - - return retcode; -} -/* End of dialog_ftree() */ - -/* - * Display a tree menu from array - * - * names - array with like find(1) output - * size - size of array - * FS - fields separator - * title - title of dialog box - * prompt - prompt text into dialog box - * height - height of dialog box - * width - width of dialog box - * menu_height - height of menu box - * result - pointer to char array - * - * return values: - * -1 - ESC pressed - * 0 - Ok, result set - * 1 - Cancel - */ - -int dialog_tree(unsigned char **names, int size, unsigned char FS, - unsigned char *title, unsigned char *prompt, - int height, int width, int menu_height, - unsigned char **result) -{ - int retcode, choice; - struct leaf *items; - struct saved_tree *st; - static struct queue *q_saved_tree = NULL; - - if (!size) - { - fprintf(stderr, "\ndialog_tree: source array is empty\n"); - end_dialog(); - exit(-1); - } - - if (mk_tree(names, size, FS, &items)) - { - perror("dialog_tree"); - end_dialog(); - exit(-1); - } - -/* is tree saved ? */ - if (!(st = search_saved_tree(q_saved_tree, names, - size, FS, - height, width, menu_height))) { - if (!q_saved_tree) { - if (!(q_saved_tree = - calloc(sizeof (struct queue), 1))) { - perror("dialog_tree"); - end_dialog(); - exit(-1); - } - } - - if (!(st = calloc(sizeof (struct saved_tree), 1))) { - perror("dialog_tree"); - end_dialog(); - exit(-1); - } - - st->names = names; - st->size = size; - st->FS = FS; - st->height = height; - st->width = width; - st->menu_height = menu_height; - - if (!p2_queue(q_saved_tree, st)) { - perror("dialog_tree"); - end_dialog(); - exit(-1); - } - } - - retcode = dialog_treemenu(title, prompt, height, width, menu_height, - size, items, &choice, - &(st->ch), &(st->sc)); - - free_leafs(items, size); - - if (!retcode) - *result = names[choice]; - - return retcode; -} -/* End of dialog_tree() */ - -/* utils for ftree */ - -/* init struct queue by zeros */ -static void -init_queue(struct queue *queue) -{ - bzero((void *)queue, sizeof(struct queue)); -} - -/* add pointer to queue */ -/* return - pointer or NULL if error */ -static void * -p2_queue(struct queue *queue, void *pointer) -{ - if (!queue) - return NULL; - - if (!queue->first) - { - if (!(queue->first = queue->last = - calloc(1, sizeof(struct m_queue)))) - return NULL; - - } - else - { - if (!(queue->last->next = - calloc(1, sizeof(struct m_queue)))) - return NULL; - - queue->last = queue->last->next; - } - - queue->size++; - return queue->last->pointer = pointer; -} - -/* get first from queue */ -/* return - pointer or NULL if queue is empty */ -static void * -first_queue(struct queue *queue) -{ - void *retval; - struct m_queue *new_first; - - if (!queue || - !queue->first || - !queue->size) - return NULL; - - retval = queue->first->pointer; - new_first = queue->first->next; - free(queue->first); - queue->first = new_first; - queue->size--; - - return retval; - -} - -/* make zero terminated array from queue */ -/* return - pointer to array or NULL if error */ -static void ** -q2arr(struct queue *queue, int depth) -{ - void **mono, **end; - - if (!queue || - !queue->first || - !queue->size) - return NULL; - - /* memory allocation for array */ - if (!(mono = end = malloc(depth * sizeof(void *) + 1))) - return NULL; - - while(depth--) - { - if (!(*end++ = first_queue(queue))) - break; - } - - *end = NULL; - - return mono; - -} - -/* - * smart_tree (for like find(1) with -d flag output compliance) - * - * return values: - * NULL - malloc error - * not NULL - ok - * - */ -static -unsigned char * -smart_tree(struct queue *queue, - unsigned char FS, - unsigned char *current, - unsigned char *prev) { - unsigned char *pcurrent = current, *pprev = prev, *toqueue; - register char break_flag = 0; - - while(*pcurrent && *pprev) { - if (*pcurrent == *pprev) { - pcurrent++; - pprev++; - } - else { - break_flag = 1; - break; - } - } - - if (!*pprev || break_flag) { - if (*pcurrent == FS) { - pcurrent++; - - if ((!*prev) && (*pcurrent)) { - unsigned char tchar = *pcurrent; - - *pcurrent = '\0'; - if (!(toqueue = strdup(current))) { - *pcurrent = tchar; - return NULL; - } - if (!p2_queue(queue, toqueue)) { - *pcurrent = tchar; - return NULL; - } - *pcurrent = tchar; - } - } - - while(*pcurrent) { - if (*pcurrent == FS) { - *pcurrent = '\0'; - if (!(toqueue = strdup(current))) { - *pcurrent = FS; - return NULL; - } - if (!p2_queue(queue, toqueue)) { - *pcurrent = FS; - return NULL; - } - *pcurrent = FS; - } - pcurrent++; - } - if (!p2_queue(queue, current)) - return NULL; - } - return current; -} - -/* end of utils for ftree */ - -/* utils for make tree */ - -/* if error - return -1 */ -static -int -mk_slip(struct leaf array[], int arr_size, int number, int shift) -{ - int t_number; - int t_shift; - - if (number > arr_size - 1) - return number - 1; - - t_shift = shift; - - if (!(array[number].branches = calloc(1, t_shift + 1))) - return -1; - - (void)memset(array[number].branches, ' ', t_shift); - - t_number = number; - - while (array[number].shift < array[t_number + 1].shift) - { - t_number = mk_slip(array, arr_size, t_number + 1, t_shift + 1); - if (t_number < 0) - return -1; - if (t_number == arr_size - 1) - break; - } - - if (array[number].shift == array[t_number + 1].shift) - array[number].slip = '+'; - - if ((array[number].shift > array[t_number + 1].shift) || - t_number == arr_size - 1) - array[number].slip = '`'; - - return t_number; - -} /* mk_slip() */ - -/* make tree from file - * - * filename - name of file with like find(1) output - * p_names - pointer to array of strings - * p_size - pointer to size of array - * FS - fields separator - * p_array - pointer to array of leafs - * - * return values: - * 0 - ok and names by p_names, size by p_size, array by p_array set - * -1 - memory allocation error (errno set) - */ - -static -int -mk_ftree(char *filename, - unsigned char ***p_names, int *p_size, unsigned char FS, - struct leaf **p_array) -{ - int NR; /* number of input records */ - struct queue queue; - unsigned char *string, *sstring = ""; - unsigned char **names; - - FILE *input_file; - - if (!(input_file = fopen(filename, "r"))) - return -1; - - init_queue(&queue); - - if (!(string = malloc(BUFSIZ))) - return -1; - - /* read input file into queue */ - while(fgets(string, BUFSIZ, input_file)) - { - if (strchr(string, '\n')) - *strchr(string, '\n') = '\0'; - - if (!(string = realloc(string, strlen(string) + 1))) - return -1; - - if (!smart_tree(&queue, FS, string, sstring)) - return -1; - sstring = string; - - if (!(string = malloc(BUFSIZ))) - return -1; - } /* read input file into queue */ - - if (fclose(input_file) == EOF) - return -1; - - if (!(NR = queue.size)) - { - *p_size = 0; - return 0; - } - - /* make array from queue */ - if (!(names = (unsigned char **)q2arr(&queue, NR))) - return -1; - - *p_names = names; - *p_size = NR; - - /* make tree from array */ - return mk_tree(names, NR, FS, p_array); - -} /* mk_ftree */ - -/* make tree from array - * - * names - array of strings - * size - size of array - * FS - fields separator - * p_array - pointer to array of leafs - * - * return values: - * 0 - ok and array by p_array set - * -1 - memory allocation error (errno set) - */ - -static -int -mk_tree(unsigned char **names, int size, unsigned char FS, - struct leaf **p_array) -{ - int i; - struct leaf *array; - - /* make array of leafs */ - if (!(array = calloc(size, sizeof(struct leaf)))) - return -1; - - /* init leafs */ - for (i = 0; i < size; i++) - { - unsigned char *in_string, *name; - int shift = 0; - - in_string = name = names[i]; - while(*in_string) - { - if (*in_string == FS) { - if (!i && !*(in_string + 1)) - name = in_string; - else - { - shift++; - name = in_string + 1; - } - } - in_string++; - } - array[i].name = name; - array[i].shift = shift; - array[i].slip = '\0'; - array[i].branches = NULL; - } /* init leafs */ - - /* make slips */ - for (i = 0;i < size; i++) - { - i = mk_slip(array, size, i, 0); - if (i < 0) - return -1; - } /* make slips */ - - /* make branches */ - for (i = 1;i < size; i++) - { - unsigned char *src = array[i - 1].branches; - unsigned char *dst = array[i].branches; - - while(*src && *dst) - *dst++ = *src++; - - if (*dst) - switch (array[i - 1].slip) { - case '+' : *dst = '|'; - break; - case '`' : *dst = ' '; - } - } /* make branches */ - - *p_array = array; - return 0; - -} /* mk_tree() */ - -/* free memory from tree (leafs) - * - * return values: - * nothing - */ - -static -void -free_leafs(struct leaf *array, int size) -{ - struct leaf *p_array = array; - - while (size--) - free(array++->branches); - - free(p_array); -} /* free_leafs() */ - -/* free memory from source data for tree (names) - * - * return values: - * if 0 <= choice <= size - pointer to name from names, - * and memory for name not released (must be freed later) - * else - NULL (recomended choice -1 for it) - */ - -static -unsigned char * -free_names(unsigned char **names, int size, int choice) -{ - unsigned char *retval = NULL; - unsigned char **p_names = names; - - while (size--) - { - if (!choice--) - retval = *names++; - else - free(*names++); - } - free(p_names); - return retval; -} /* free_names() */ - -/* end of utils for make tree */ - -/* static utils for saved_tree */ - -/* search saved tree within queue */ -/* return - struct *saved_tree or NULL if not found */ -static -struct saved_tree * -search_saved_tree(struct queue *queue, unsigned char **names, int size, - unsigned char FS, - int height, int width, - int menu_height) -{ - struct m_queue *member; - struct saved_tree *retval; - - if (!queue || !names || !FS || - !height || !width || !menu_height) - return NULL; - - if (!(member = queue->first)) - return NULL; - - while (member->next) { - retval = member->pointer; - if ((names == retval->names) && - (size == retval->size) && - (FS == retval->FS) && - (height == retval->height) && - (width == retval->width) && - (menu_height == retval->menu_height)) - return retval; - member = member->next; - } - retval = member->pointer; - if ((names == retval->names) && - (size == retval->size) && - (FS == retval->FS) && - (height == retval->height) && - (width == retval->width) && - (menu_height == retval->menu_height)) - return retval; - return NULL; -} - -/* end of static utils for saved_tree */ Index: gnu/lib/libdialog/prgbox.c =================================================================== --- gnu/lib/libdialog/prgbox.c (revision 216873) +++ gnu/lib/libdialog/prgbox.c (working copy) @@ -1,152 +0,0 @@ -/* - * prgbox.c -- implements the message box and info box - * - * AUTHOR: Savio Lam (lam836@cs.cuhk.hk) - * - * 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. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <sys/types.h> - -#include <dialog.h> -#include <errno.h> -#include <sys/wait.h> -#include "dialog.priv.h" - -/* - * Display a message box. Program will pause and display an "OK" button - * if the parameter 'pause' is non-zero. - */ -int dialog_prgbox(unsigned char *title, const unsigned char *line, int height, int width, int pause, int use_shell) -{ - int i, x, y, key = 0; - WINDOW *dialog; - FILE *f; - const unsigned char *name; - unsigned char *s, buf[MAX_LEN]; - int status; - - if (height < 0 || width < 0) { - endwin(); - fprintf(stderr, "\nAutosizing is impossible in dialog_prgbox().\n"); - exit(-1); - } - width = MAX(width,10); - - if (width > COLS) - width = COLS; - if (height > LINES) - height = LINES; - /* center dialog box on screen */ - x = DialogX ? DialogX : (COLS - width)/2; - y = DialogY ? DialogY : (LINES - height)/2; - -#ifdef HAVE_NCURSES - if (use_shadow) - draw_shadow(stdscr, y, x, height, width); -#endif - dialog = newwin(height, width, y, x); - if (dialog == NULL) { - endwin(); - fprintf(stderr, "\nnewwin(%d,%d,%d,%d) failed, maybe wrong dims\n", height,width,y,x); - exit(1); - } - keypad(dialog, TRUE); - - draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); - - if (title != NULL) { - wattrset(dialog, title_attr); - wmove(dialog, 0, (width - strlen(title))/2 - 1); - waddch(dialog, ' '); - waddstr(dialog, title); - waddch(dialog, ' '); - } - wattrset(dialog, dialog_attr); - wmove(dialog, 1, 2); - - if (!use_shell) { - char cmdline[MAX_LEN]; - char *av[51], **ap = av, *val, *p; - - strcpy(cmdline, line); - p = cmdline; - while ((val = strsep(&p," \t")) != NULL) { - if (*val != '\0') - *ap++ = val; - } - *ap = NULL; - f = raw_popen(name = av[0], av, "r"); - } else - f = raw_popen(name = line, NULL, "r"); - - status = -1; - if (f == NULL) { - err: - sprintf(buf, "%s: %s\n", name, strerror(errno)); - prr: - print_autowrap(dialog, buf, height-(pause?3:1), width-2, width, 1, 2, FALSE, TRUE); - wrefresh(dialog); - } else { - while (fgets(buf, sizeof(buf), f) != NULL) { - i = strlen(buf); - if (buf[i-1] == '\n') - buf[i-1] = '\0'; - s = buf; - while ((s = strchr(s, '\t')) != NULL) - *s++ = ' '; - print_autowrap(dialog, buf, height-(pause?3:1), width-2, width, 1, 2, FALSE, TRUE); - print_autowrap(dialog, "\n", height-(pause?3:1), width-2, width, 1, 2, FALSE, FALSE); - wrefresh(dialog); - } - if ((status = raw_pclose(f)) == -1) - goto err; - if (WIFEXITED(status) && WEXITSTATUS(status) == 127) { - sprintf(buf, "%s: program not found\n", name); - goto prr; - } - } - - if (pause) { - wattrset(dialog, border_attr); - wmove(dialog, height-3, 0); - waddch(dialog, ACS_LTEE); - for (i = 0; i < width-2; i++) - waddch(dialog, ACS_HLINE); - wattrset(dialog, dialog_attr); - waddch(dialog, ACS_RTEE); - wmove(dialog, height-2, 1); - for (i = 0; i < width-2; i++) - waddch(dialog, ' '); - display_helpline(dialog, height-1, width); - print_button(dialog, " OK ", height-2, width/2-6, TRUE); - wrefresh(dialog); - while (key != ESC && key != '\n' && key != ' ' && key != '\r') - key = wgetch(dialog); - if (key == '\r') - key = '\n'; - } - else { - key = '\n'; - wrefresh(dialog); - } - - delwin(dialog); - return (status); -} -/* End of dialog_msgbox() */ Index: gnu/lib/libdialog/rc.c =================================================================== --- gnu/lib/libdialog/rc.c (revision 216873) +++ gnu/lib/libdialog/rc.c (working copy) @@ -1,375 +0,0 @@ -/* - * rc.c -- routines for processing the configuration file - * - * AUTHOR: Savio Lam (lam836@cs.cuhk.hk) - * - * 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. - */ - -#include <dialog.h> -#include "dialog.priv.h" -#include "colors.h" -#include "rc.h" - - -static unsigned char *attr_to_str(int fg, int bg, int hl); -static int str_to_attr(unsigned char *str, int *fg, int *bg, int *hl); -static int parse_line(unsigned char *line, unsigned char **var, unsigned char **value); - - -/* - * Create the configuration file - */ -void dialog_create_rc(unsigned char *filename) -{ - int i; - FILE *rc_file; - - if ((rc_file = fopen(filename, "wt")) == NULL) { - fprintf(stderr, "\nError opening file for writing in create_rc().\n"); - exit(-1); - } - - fprintf(rc_file, "#\ -\n# Run-time configuration file for dialog\ -\n#\ -\n# Automatically generated by \"dialog --create-rc <file>\"\ -\n#\ -\n#\ -\n# Types of values:\ -\n#\ -\n# Number - <number>\ -\n# String - \"string\"\ -\n# Boolean - <ON|OFF>\ -\n# Attribute - (foreground,background,highlight?)\ -\n#\n\n"); - - /* Print an entry for each configuration variable */ - for (i = 0; i < VAR_COUNT; i++) { - fprintf(rc_file, "\n# %s\n", vars[i].comment); /* print comment */ - switch (vars[i].type) { - case VAL_INT: - fprintf(rc_file, "%s = %d\n", vars[i].name, *((int *) vars[i].var)); - break; - case VAL_STR: - fprintf(rc_file, "%s = \"%s\"\n", vars[i].name, (unsigned char *) vars[i].var); - break; - case VAL_BOOL: - fprintf(rc_file, "%s = %s\n", vars[i].name, *((bool *) vars[i].var) ? "ON" : "OFF"); - break; - case VAL_ATTR: - fprintf(rc_file, "%s = %s\n", vars[i].name, attr_to_str(((int *) vars[i].var)[0], ((int *) vars[i].var)[1], ((int *) vars[i].var)[2])); - break; - } - } - - fclose(rc_file); -} -/* End of create_rc() */ - - -/* - * Parse the configuration file and set up variables - */ -int parse_rc(void) -{ - int i, l = 1, parse, fg, bg, hl; - unsigned char str[MAX_LEN+1], *var, *value, *tempptr; - FILE *rc_file; - - /* - * - * At start, 'dialog' determines the settings to use as follows: - * - * a) if environment variable DIALOGRC is set, it's value determines the - * name of the configuration file. - * - * b) if the file in (a) can't be found, use the file $HOME/.dialogrc - * as the configuration file. - * - * c) if the file in (b) can't be found, use compiled in defaults. - * - */ - - if ((tempptr = getenv("DIALOGRC")) != NULL) - rc_file = fopen(tempptr, "rt"); - - if (tempptr == NULL || rc_file == NULL) { /* step (a) failed? */ - /* try step (b) */ - if ((tempptr = getenv("HOME")) == NULL) - return 0; /* step (b) failed, use default values */ - - if (tempptr[0] == '\0' || lastch(tempptr) == '/') - sprintf(str, "%s%s", tempptr, DIALOGRC); - else - sprintf(str, "%s/%s", tempptr, DIALOGRC); - - if ((rc_file = fopen(str, "rt")) == NULL) - return 0; /* step (b) failed, use default values */ - } - - /* Scan each line and set variables */ - while (fgets(str, MAX_LEN, rc_file) != NULL) { - if (lastch(str) != '\n') { /* ignore rest of file if line too long */ - fprintf(stderr, "\nParse error: line %d of configuration file too long.\n", l); - fclose(rc_file); - return -1; /* parse aborted */ - } - else { - lastch(str) = '\0'; - parse = parse_line(str, &var, &value); /* parse current line */ - - switch (parse) { - case LINE_BLANK: /* ignore blank lines and comments */ - case LINE_COMMENT: - break; - case LINE_OK: - /* search table for matching config variable name */ - for (i = 0; i < VAR_COUNT && strcmp(vars[i].name, var); i++); - - if (i == VAR_COUNT) { /* no match */ - fprintf(stderr, "\nParse error: unknown variable at line %d of configuration file.\n", l); - return -1; /* parse aborted */ - } - else { /* variable found in table, set run time variables */ - switch (vars[i].type) { - case VAL_INT: - *((int *) vars[i].var) = atoi(value); - break; - case VAL_STR: - if (!isquote(value[0]) || !isquote(lastch(value)) || strlen(value) < 2) { - fprintf(stderr, "\nParse error: string value expected at line %d of configuration file.\n", l); - return -1; /* parse aborted */ - } - else { - /* remove the (") quotes */ - value++; - lastch(value) = '\0'; - strcpy((unsigned char *) vars[i].var, value); - } - break; - case VAL_BOOL: - if (!strcasecmp(value, "ON")) - *((bool *) vars[i].var) = TRUE; - else if (!strcasecmp(value, "OFF")) - *((bool *) vars[i].var) = FALSE; - else { - fprintf(stderr, "\nParse error: boolean value expected at line %d of configuration file.\n", l); - return -1; /* parse aborted */ - } - break; - case VAL_ATTR: - if (str_to_attr(value, &fg, &bg, &hl) == -1) { - fprintf(stderr, "\nParse error: attribute value expected at line %d of configuration file.\n", l); - return -1; /* parse aborted */ - } - ((int *) vars[i].var)[0] = fg; - ((int *) vars[i].var)[1] = bg; - ((int *) vars[i].var)[2] = hl; - break; - } - } - break; - case LINE_ERROR: - fprintf(stderr, "\nParse error: syntax error at line %d of configuration file.\n", l); - return -1; /* parse aborted */ - } - } - - l++; /* next line */ - } - - fclose(rc_file); - return 0; /* parse successful */ -} -/* End of parse_rc() */ - - -/* - * Convert an attribute to a string representation like this: - * - * "(foreground,background,highlight)" - */ -static unsigned char *attr_to_str(int fg, int bg, int hl) -{ - int i; - static unsigned char str[MAX_LEN+1]; - - strcpy(str, "("); - /* foreground */ - for (i = 0; fg != color_names[i].value; i++); - strcat(str, color_names[i].name); - strcat(str, ","); - - /* background */ - for (i = 0; bg != color_names[i].value; i++); - strcat(str, color_names[i].name); - - /* highlight */ - strcat(str, hl ? ",ON)" : ",OFF)"); - - return str; -} -/* End of attr_to_str() */ - - -/* - * Extract the foreground, background and highlight values from an attribute - * represented as a string in this form: - * - * "(foreground,background,highlight)" - */ -static int str_to_attr(unsigned char *str, int *fg, int *bg, int *hl) -{ - int i = 0, j, get_fg = 1; - unsigned char tempstr[MAX_LEN+1], *part; - - if (str[0] != '(' || lastch(str) != ')') - return -1; /* invalid representation */ - - /* remove the parenthesis */ - strcpy(tempstr, str + 1); - lastch(tempstr) = '\0'; - - - /* get foreground and background */ - - while (1) { - /* skip white space before fg/bg string */ - while (whitespace(tempstr[i]) && tempstr[i] != '\0') i++; - if (tempstr[i] == '\0') - return -1; /* invalid representation */ - part = tempstr + i; /* set 'part' to start of fg/bg string */ - - /* find end of fg/bg string */ - while(!whitespace(tempstr[i]) && tempstr[i] != ',' && tempstr[i] != '\0') i++; - - if (tempstr[i] == '\0') - return -1; /* invalid representation */ - else if (whitespace(tempstr[i])) { /* not yet ',' */ - tempstr[i++] = '\0'; - - /* skip white space before ',' */ - while(whitespace(tempstr[i]) && tempstr[i] != '\0') i++; - - if (tempstr[i] != ',') - return -1; /* invalid representation */ - } - - tempstr[i++] = '\0'; /* skip the ',' */ - for (j = 0; j < COLOR_COUNT && strcasecmp(part, color_names[j].name); j++); - if (j == COLOR_COUNT) /* invalid color name */ - return -1; - if (get_fg) { - *fg = color_names[j].value; - get_fg = 0; /* next we have to get the background */ - } - else { - *bg = color_names[j].value; - break; - } - } /* got foreground and background */ - - - /* get highlight */ - - /* skip white space before highlight string */ - while (whitespace(tempstr[i]) && tempstr[i] != '\0') i++; - if (tempstr[i] == '\0') - return -1; /* invalid representation */ - part = tempstr + i; /* set 'part' to start of highlight string */ - - /* trim trailing white space from highlight string */ - i = strlen(part) - 1; - while(whitespace(part[i])) i--; - part[i+1] = '\0'; - - if (!strcasecmp(part, "ON")) - *hl = TRUE; - else if (!strcasecmp(part, "OFF")) - *hl = FALSE; - else - return -1; /* invalid highlight value */ - - return 0; -} -/* End of str_to_attr() */ - - -/* - * Parse a line in the configuration file - * - * Each line is of the form: "variable = value". On exit, 'var' will contain - * the variable name, and 'value' will contain the value string. - * - * Return values: - * - * LINE_BLANK - line is blank - * LINE_COMMENT - line is comment - * LINE_OK - line is ok - * LINE_ERROR - syntax error in line - */ -static int parse_line(unsigned char *line, unsigned char **var, unsigned char **value) -{ - int i = 0; - - /* ignore white space at beginning of line */ - while(whitespace(line[i]) && line[i] != '\0') i++; - - if (line[i] == '\0') /* line is blank */ - return LINE_BLANK; - else if (line[i] == '#') /* line is comment */ - return LINE_COMMENT; - else if (line[i] == '=') /* variables names can't strart with a '=' */ - return LINE_ERROR; - - /* set 'var' to variable name */ - *var = line + i++; /* skip to next character */ - - /* find end of variable name */ - while(!whitespace(line[i]) && line[i] != '=' && line[i] != '\0') i++; - - if (line[i] == '\0') /* syntax error */ - return LINE_ERROR; - else if (line[i] == '=') - line[i++] = '\0'; - else { - line[i++] = '\0'; - - /* skip white space before '=' */ - while(whitespace(line[i]) && line[i] != '\0') i++; - - if (line[i] != '=') /* syntax error */ - return LINE_ERROR; - else - i++; /* skip the '=' */ - } - - /* skip white space after '=' */ - while(whitespace(line[i]) && line[i] != '\0') i++; - - if (line[i] == '\0') - return LINE_ERROR; - else - *value = line + i; /* set 'value' to value string */ - - /* trim trailing white space from 'value' */ - i = strlen(*value) - 1; - while(whitespace((*value)[i])) i--; - (*value)[i+1] = '\0'; - - return LINE_OK; /* no syntax error in line */ -} -/* End of parse_line() */ Index: gnu/lib/libdialog/notify.c =================================================================== --- gnu/lib/libdialog/notify.c (revision 216873) +++ gnu/lib/libdialog/notify.c (working copy) @@ -1,53 +0,0 @@ -/* - * File: notify.c - * Author: Marc van Kempen - * Desc: display a notify box with a message - * - * Copyright (c) 1995, Marc van Kempen - * - * All rights reserved. - * - * This software may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of this software, nor does - * the author assume any responsibility for damages incurred with - * its use. - * - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <dialog.h> -#include <stdio.h> -#include <stdlib.h> - -void -dialog_notify(char *msg) -/* - * Desc: display an error message - */ -{ - char *tmphlp; - WINDOW *w; - - w = dupwin(newscr); - if (w == NULL) { - endwin(); - fprintf(stderr, "\ndupwin(newscr) failed, malloc memory corrupted\n"); - exit(1); - } - tmphlp = get_helpline(); - use_helpline("Press enter or space"); - dialog_mesgbox("Message", msg, -1, -1); - restore_helpline(tmphlp); - touchwin(w); - wrefresh(w); - delwin(w); - - return; - -} /* dialog_notify() */ - Index: gnu/lib/libdialog/rc.h =================================================================== --- gnu/lib/libdialog/rc.h (revision 216873) +++ gnu/lib/libdialog/rc.h (working copy) @@ -1,222 +0,0 @@ -/* - * rc.h -- declarations for configuration file processing - * - * AUTHOR: Savio Lam (lam836@cs.cuhk.hk) - * - * 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. - */ - - -#define DIALOGRC ".dialogrc" -#define VAR_LEN 30 -#define COMMENT_LEN 70 - -/* Types of values */ -#define VAL_INT 0 -#define VAL_STR 1 -#define VAL_BOOL 2 -#define VAL_ATTR 3 - -/* Type of line in configuration file */ -#define LINE_BLANK 2 -#define LINE_COMMENT 1 -#define LINE_OK 0 -#define LINE_ERROR -1 - -/* number of configuration variables */ -#define VAR_COUNT (sizeof(vars) / sizeof(vars_st)) - -/* check if character is white space */ -#define whitespace(c) (c == ' ' || c == '\t') - -/* check if character is string quoting characters */ -#define isquote(c) (c == '"' || c == '\'') - -/* get last character of string */ -#define lastch(str) str[strlen(str)-1] - -/* - * Configuration variables - */ -typedef struct { - unsigned char name[VAR_LEN]; /* name of configuration variable as in DIALOGRC */ - void *var; /* address of actually variable to change */ - int type; /* type of value */ - unsigned char comment[COMMENT_LEN]; /* comment to put in "rc" file */ -} vars_st; - -vars_st vars[] = { - { "use_shadow", - &use_shadow, - VAL_BOOL, - "Shadow dialog boxes? This also turns on color." }, - - { "use_colors", - &use_colors, - VAL_BOOL, - "Turn color support ON or OFF" }, - - { "screen_color", - color_table[0], - VAL_ATTR, - "Screen color" }, - - { "shadow_color", - color_table[1], - VAL_ATTR, - "Shadow color" }, - - { "dialog_color", - color_table[2], - VAL_ATTR, - "Dialog box color" }, - - { "title_color", - color_table[3], - VAL_ATTR, - "Dialog box title color" }, - - { "border_color", - color_table[4], - VAL_ATTR, - "Dialog box border color" }, - - { "button_active_color", - color_table[5], - VAL_ATTR, - "Active button color" }, - - { "button_inactive_color", - color_table[6], - VAL_ATTR, - "Inactive button color" }, - - { "button_key_active_color", - color_table[7], - VAL_ATTR, - "Active button key color" }, - - { "button_key_inactive_color", - color_table[8], - VAL_ATTR, - "Inactive button key color" }, - - { "button_label_active_color", - color_table[9], - VAL_ATTR, - "Active button label color" }, - - { "button_label_inactive_color", - color_table[10], - VAL_ATTR, - "Inactive button label color" }, - - { "inputbox_color", - color_table[11], - VAL_ATTR, - "Input box color" }, - - { "inputbox_border_color", - color_table[12], - VAL_ATTR, - "Input box border color" }, - - { "searchbox_color", - color_table[13], - VAL_ATTR, - "Search box color" }, - - { "searchbox_title_color", - color_table[14], - VAL_ATTR, - "Search box title color" }, - - { "searchbox_border_color", - color_table[15], - VAL_ATTR, - "Search box border color" }, - - { "position_indicator_color", - color_table[16], - VAL_ATTR, - "File position indicator color" }, - - { "menubox_color", - color_table[17], - VAL_ATTR, - "Menu box color" }, - - { "menubox_border_color", - color_table[18], - VAL_ATTR, - "Menu box border color" }, - - { "item_color", - color_table[19], - VAL_ATTR, - "Item color" }, - - { "item_selected_color", - color_table[20], - VAL_ATTR, - "Selected item color" }, - - { "tag_color", - color_table[21], - VAL_ATTR, - "Tag color" }, - - { "tag_selected_color", - color_table[22], - VAL_ATTR, - "Selected tag color" }, - - { "tag_key_color", - color_table[23], - VAL_ATTR, - "Tag key color" }, - - { "tag_key_selected_color", - color_table[24], - VAL_ATTR, - "Selected tag key color" }, - - { "check_color", - color_table[25], - VAL_ATTR, - "Check box color" }, - - { "check_selected_color", - color_table[26], - VAL_ATTR, - "Selected check box color" }, - - { "uarrow_color", - color_table[27], - VAL_ATTR, - "Up arrow color" }, - - { "darrow_color", - color_table[28], - VAL_ATTR, - "Down arrow color" } -}; /* vars */ - - - -/* - * Routines to process configuration file - */ -int parse_rc(void); Index: gnu/lib/libdialog/README =================================================================== --- gnu/lib/libdialog/README (revision 216873) +++ gnu/lib/libdialog/README (working copy) @@ -1,8 +0,0 @@ -This library was split out from the `dialog' program for use -in C programs. For a list of interface functions, see dialog.h. -For usage examples, see the `dialog' program sources in -/usr/src/gnu/usr.bin/dialog. - -You can additionally use any ncurses functions after init_dialog(). - - Ache. Index: gnu/lib/libdialog/menubox.c =================================================================== --- gnu/lib/libdialog/menubox.c (revision 216873) +++ gnu/lib/libdialog/menubox.c (working copy) @@ -1,469 +0,0 @@ -/* - * menubox.c -- implements the menu box - * - * AUTHOR: Savio Lam (lam836@cs.cuhk.hk) - * - * Substantial rennovation: 12/18/95, Jordan K. Hubbard - * - * 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. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <dialog.h> -#include "dialog.priv.h" -#include <err.h> -#include <ncurses.h> - -static void print_item(WINDOW *win, unsigned char *tag, unsigned char *item, int choice, int selected, dialogMenuItem *me, int menu_width, int tag_x, int item_x); - -#define DREF(di, item) ((di) ? &((di)[(item)]) : NULL) - -/* - * Display a menu for choosing among a number of options - */ -int -dialog_menu(unsigned char *title, unsigned char *prompt, int height, int width, int menu_height, int cnt, void *it, unsigned char *result, int *ch, int *sc) -{ - int i, j, x, y, cur_x, cur_y, box_x, box_y, key = 0, button, choice, - l, k, scroll, max_choice, item_no, redraw_menu = FALSE; - char okButton, cancelButton; - int rval = 0, ok_space, cancel_space; - WINDOW *dialog, *menu; - unsigned char **items = NULL; - dialogMenuItem *ditems; - int menu_width, tag_x, item_x; - -draw: - choice = ch ? *ch : 0; - scroll = sc ? *sc : 0; - button = 0; - - /* If item_no is a positive integer, use old item specification format */ - if (cnt >= 0) { - items = it; - ditems = NULL; - item_no = cnt; - } - /* It's the new specification format - fake the rest of the code out */ - else { - item_no = abs(cnt); - ditems = it; - if (!items) - items = (unsigned char **)alloca((item_no * 2) * sizeof(unsigned char *)); - - /* Initializes status */ - for (i = 0; i < item_no; i++) { - items[i*2] = ditems[i].prompt; - items[i*2 + 1] = ditems[i].title; - } - } - max_choice = MIN(menu_height, item_no); - - tag_x = 0; - item_x = 0; - /* Find length of longest item in order to center menu */ - for (i = 0; i < item_no; i++) { - l = strlen(items[i * 2]); - for (j = 0; j < item_no; j++) { - k = strlen(items[j * 2 + 1]); - tag_x = MAX(tag_x, l + k + 2); - } - item_x = MAX(item_x, l); - } - if (height < 0) - height = strheight(prompt) + menu_height + 4 + 2; - if (width < 0) { - i = strwidth(prompt); - j = ((title != NULL) ? strwidth(title) : 0); - width = MAX(i, j); - width = MAX(width, tag_x + 4) + 4; - } - width = MAX(width, 24); - - if (width > COLS) - width = COLS; - if (height > LINES) - height = LINES; - /* center dialog box on screen */ - x = DialogX ? DialogX : (COLS - width) / 2; - y = DialogY ? DialogY : (LINES - height) / 2; - -#ifdef HAVE_NCURSES - if (use_shadow) - draw_shadow(stdscr, y, x, height, width); -#endif - dialog = newwin(height, width, y, x); - if (dialog == NULL) { - endwin(); - fprintf(stderr, "\nnewwin(%d,%d,%d,%d) failed, maybe wrong dims\n", height, width, y, x); - return -1; - } - keypad(dialog, TRUE); - - draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); - wattrset(dialog, border_attr); - wmove(dialog, height - 3, 0); - waddch(dialog, ACS_LTEE); - for (i = 0; i < width - 2; i++) - waddch(dialog, ACS_HLINE); - wattrset(dialog, dialog_attr); - waddch(dialog, ACS_RTEE); - wmove(dialog, height - 2, 1); - for (i = 0; i < width - 2; i++) - waddch(dialog, ' '); - - if (title != NULL) { - wattrset(dialog, title_attr); - wmove(dialog, 0, (width - strlen(title)) / 2 - 1); - waddch(dialog, ' '); - waddstr(dialog, title); - waddch(dialog, ' '); - } - wattrset(dialog, dialog_attr); - wmove(dialog, 1, 2); - print_autowrap(dialog, prompt, height - 1, width - 2, width, 1, 2, TRUE, FALSE); - - menu_width = width - 6; - getyx(dialog, cur_y, cur_x); - box_y = cur_y + 1; - 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); - if (menu == NULL) { - delwin(dialog); - endwin(); - fprintf(stderr, "\nsubwin(dialog,%d,%d,%d,%d) failed, maybe wrong dims\n", menu_height, menu_width, - y + box_y + 1, x + box_x + 1); - return -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); - - tag_x = menu_width > tag_x + 1 ? (menu_width - tag_x) / 2 : 1; - item_x = menu_width > item_x + 4 ? tag_x + item_x + 2 : menu_width - 3; - - /* Print the menu */ - for (i = 0; i < max_choice; i++) - print_item(menu, items[(scroll + i) * 2], items[(scroll + i) * 2 + 1], i, i == choice, DREF(ditems, scroll + i), menu_width, tag_x, item_x); - wnoutrefresh(menu); - print_arrows(dialog, scroll, menu_height, item_no, box_x, box_y, tag_x, cur_x, cur_y); - - display_helpline(dialog, height - 1, width); - - x = width / 2 - 11; - y = height - 2; - - if (ditems && result) { - cancelButton = toupper(ditems[CANCEL_BUTTON].prompt[0]); - print_button(dialog, ditems[CANCEL_BUTTON].prompt, y, x + strlen(ditems[OK_BUTTON].prompt) + 5, ditems[CANCEL_BUTTON].checked ? ditems[CANCEL_BUTTON].checked(&ditems[CANCEL_BUTTON]) : FALSE); - okButton = toupper(ditems[OK_BUTTON].prompt[0]); - print_button(dialog, ditems[OK_BUTTON].prompt, y, x, ditems[OK_BUTTON].checked ? ditems[OK_BUTTON].checked(&ditems[OK_BUTTON]) : TRUE); - } - else { - cancelButton = 'C'; - print_button(dialog, "Cancel", y, x + 14, FALSE); - okButton = 'O'; - print_button(dialog, " OK ", y, x, TRUE); - } - - wrefresh(dialog); - while (key != ESC) { - key = wgetch(dialog); - - /* Shortcut to OK? */ - if (toupper(key) == okButton) { - if (ditems) { - if (result && ditems[OK_BUTTON].fire) { - int status; - WINDOW *save; - - save = dupwin(newscr); - status = ditems[OK_BUTTON].fire(&ditems[OK_BUTTON]); - if (status & DITEM_RESTORE) { - touchwin(save); - wrefresh(save); - } - delwin(save); - } - } - else if (result) - strcpy(result, items[(scroll + choice) * 2]); - rval = 0; - key = ESC; /* Punt! */ - break; - } - - /* Shortcut to cancel? */ - if (toupper(key) == cancelButton) { - if (ditems && result && ditems[CANCEL_BUTTON].fire) { - int status; - WINDOW *save; - - save = dupwin(newscr); - status = ditems[CANCEL_BUTTON].fire(&ditems[CANCEL_BUTTON]); - if (status & DITEM_RESTORE) { - touchwin(save); - wrefresh(save); - } - delwin(save); - } - rval = 1; - key = ESC; /* Run away! */ - break; - } - - /* Check if key pressed matches first character of any item tag in menu */ - for (i = 0; i < max_choice; i++) - if (key < 0x100 && key != ' ' && toupper(key) == toupper(items[(scroll + i) * 2][0])) - break; - - if (i < max_choice || (key >= '1' && key <= MIN('9', '0'+max_choice)) || KEY_IS_UP(key) || KEY_IS_DOWN(key)) { - if (key >= '1' && key <= MIN('9', '0'+max_choice)) - i = key - '1'; - else if (KEY_IS_UP(key)) { - if (!choice) { - if (scroll) { - /* Scroll menu down */ - getyx(dialog, cur_y, cur_x); /* Save cursor position */ - if (menu_height > 1) { - /* De-highlight current first item before scrolling down */ - print_item(menu, items[scroll * 2], items[scroll * 2 + 1], 0, FALSE, DREF(ditems, scroll), menu_width, tag_x, item_x); - scrollok(menu, TRUE); - wscrl(menu, -1); - scrollok(menu, FALSE); - } - scroll--; - print_item(menu, items[scroll * 2], items[scroll * 2 + 1], 0, TRUE, DREF(ditems, scroll), menu_width, tag_x, item_x); - wnoutrefresh(menu); - print_arrows(dialog, scroll, menu_height, item_no, box_x, box_y, tag_x, cur_x, cur_y); - wrefresh(dialog); - } - continue; /* wait for another key press */ - } - else - i = choice - 1; - } - else if (KEY_IS_DOWN(key)) { - if (choice == max_choice - 1) { - if (scroll + choice < item_no - 1) { - /* Scroll menu up */ - getyx(dialog, cur_y, cur_x); /* Save cursor position */ - if (menu_height > 1) { - /* De-highlight current last item before scrolling up */ - print_item(menu, items[(scroll + max_choice - 1) * 2], - items[(scroll + max_choice - 1) * 2 + 1], - max_choice-1, FALSE, DREF(ditems, scroll + max_choice - 1), menu_width, tag_x, item_x); - scrollok(menu, TRUE); - scroll(menu); - scrollok(menu, FALSE); - } - scroll++; - print_item(menu, items[(scroll + max_choice - 1) * 2], - items[(scroll + max_choice - 1) * 2 + 1], - max_choice - 1, TRUE, DREF(ditems, scroll + max_choice - 1), menu_width, tag_x, item_x); - wnoutrefresh(menu); - print_arrows(dialog, scroll, menu_height, item_no, box_x, box_y, tag_x, cur_x, cur_y); - wrefresh(dialog); - } - continue; /* wait for another key press */ - } - else - i = choice + 1; - } - - if (i != choice) { - /* De-highlight current item */ - getyx(dialog, cur_y, cur_x); /* Save cursor position */ - print_item(menu, items[(scroll + choice) * 2], items[(scroll + choice) * 2 + 1], choice, FALSE, DREF(ditems, scroll + choice), menu_width, tag_x, item_x); - - /* Highlight new item */ - choice = i; - print_item(menu, items[(scroll + choice) * 2], items[(scroll + choice) * 2 + 1], choice, TRUE, DREF(ditems, scroll + choice), menu_width, tag_x, item_x); - wnoutrefresh(menu); - wmove(dialog, cur_y, cur_x); /* Restore cursor to previous position */ - wrefresh(dialog); - } - continue; /* wait for another key press */ - } - - switch (key) { - case KEY_PPAGE: - if (scroll > height - 4) { /* can we go up? */ - scroll -= (height - 4); - } else { - scroll = 0; - } - redraw_menu = TRUE; - break; - - case KEY_NPAGE: - if (scroll + menu_height >= item_no-1 - menu_height) { /* can we go down a full page? */ - scroll = item_no - menu_height; - if (scroll < 0) - scroll = 0; - } else { - scroll += menu_height; - } - redraw_menu = TRUE; - break; - - case KEY_HOME: - scroll = 0; - choice = 0; - redraw_menu = TRUE; - break; - - case KEY_END: - scroll = item_no - menu_height; - if (scroll < 0) - scroll = 0; - choice = max_choice - 1; - redraw_menu = TRUE; - break; - - case KEY_BTAB: - case TAB: - case KEY_LEFT: - case KEY_RIGHT: - button = !button; - if (ditems && result) { - print_button(dialog, ditems[CANCEL_BUTTON].prompt, y, x + strlen(ditems[OK_BUTTON].prompt) + 5, ditems[CANCEL_BUTTON].checked ? ditems[CANCEL_BUTTON].checked(&ditems[CANCEL_BUTTON]) : button); - print_button(dialog, ditems[OK_BUTTON].prompt, y, x, ditems[OK_BUTTON].checked ? ditems[OK_BUTTON].checked(&ditems[OK_BUTTON]) : !button); - ok_space = 1; - cancel_space = strlen(ditems[OK_BUTTON].prompt) + 6; - } - else { - print_button(dialog, "Cancel", y, x + 14, button); - print_button(dialog, " OK ", y, x, !button); - ok_space = 3; - cancel_space = 15; - } - if (button) - wmove(dialog, y, x+cancel_space); - else - wmove(dialog, y, x+ok_space); - wrefresh(dialog); - break; - - case ' ': - case '\r': - case '\n': - if (!button) { - /* A fire routine can do just about anything to the screen, so be prepared - to accept some hints as to what to do in the aftermath. */ - if (ditems) { - if (ditems[scroll + choice].fire) { - int status; - WINDOW *save; - - save = dupwin(newscr); - status = ditems[scroll + choice].fire(&ditems[scroll + choice]); - if (status & DITEM_RESTORE) { - touchwin(save); - wrefresh(save); - } - delwin(save); - if (status & DITEM_CONTINUE) - continue; - else if (status & DITEM_LEAVE_MENU) { - /* Allow a fire action to take us out of the menu */ - key = ESC; - break; - } - else if (status & DITEM_RECREATE) { - delwin(menu); - delwin(dialog); - dialog_clear(); - goto draw; - } - } - } - else if (result) - strcpy(result, items[(scroll+choice)*2]); - } - rval = button; - key = ESC; - break; - - case ESC: - rval = -1; - break; - - case KEY_F(1): - case '?': - display_helpfile(); - break; - } - - /* save info about menu item position */ - if (ch) - *ch = choice; - if (sc) - *sc = scroll; - - if (redraw_menu) { - for (i = 0; i < max_choice; i++) { - print_item(menu, items[(scroll + i) * 2], items[(scroll + i) * 2 + 1], i, i == choice, DREF(ditems, scroll + i), menu_width, tag_x, item_x); - } - wnoutrefresh(menu); - getyx(dialog, cur_y, cur_x); /* Save cursor position */ - print_arrows(dialog, scroll, menu_height, item_no, box_x, box_y, tag_x, cur_x, cur_y); - wmove(dialog, cur_y, cur_x); /* Restore cursor to previous position */ - wrefresh(dialog); - redraw_menu = FALSE; - } - } - delwin(menu); - delwin(dialog); - return rval; -} - - -/* - * Print menu item - */ -static void -print_item(WINDOW *win, unsigned char *tag, unsigned char *item, int choice, int selected, dialogMenuItem *me, int menu_width, int tag_x, int item_x) -{ - int i; - - if (tag == NULL) - errx(1, "bad parameter to print_item()\n"); - - /* Clear 'residue' of last item */ - wattrset(win, menubox_attr); - wmove(win, choice, 0); - for (i = 0; i < menu_width; i++) - waddch(win, ' '); - wmove(win, choice, tag_x); - wattrset(win, selected ? tag_key_selected_attr : tag_key_attr); - waddch(win, tag[0]); - wattrset(win, selected ? tag_selected_attr : tag_attr); - waddnstr(win, tag + 1, item_x - tag_x - 3); - wmove(win, choice, item_x); - wattrset(win, selected ? item_selected_attr : item_attr); - waddnstr(win, item, menu_width - item_x - 1); - /* If have a selection handler for this, call it */ - if (me && me->selected) { - wrefresh(win); - me->selected(me, selected); - } -} -/* End of print_item() */ Index: gnu/lib/libdialog/dir.c =================================================================== --- gnu/lib/libdialog/dir.c (revision 216873) +++ gnu/lib/libdialog/dir.c (working copy) @@ -1,549 +0,0 @@ -/**************************************************************************** - * - * Program: dir.c - * Author: Marc van Kempen - * desc: Directory routines, sorting and reading - * - * Copyright (c) 1995, Marc van Kempen - * - * All rights reserved. - * - * This software may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of this software, nor does - * the author assume any responsibility for damages incurred with - * its use. - * - ****************************************************************************/ - -#include <sys/types.h> -#include <sys/stat.h> - -#include <unistd.h> /* XXX for _POSIX_VERSION ifdefs */ - -#if !defined sgi && !defined _POSIX_VERSION -#include <sys/dir.h> -#endif -#if defined __sun__ -#include <sys/dirent.h> -#endif -#if defined sgi || defined _POSIX_VERSION -#include <dirent.h> -#endif - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <fnmatch.h> -#include <sys/param.h> -#include "dir.h" - -/**************************************************************************** - * - * local prototypes - * - ****************************************************************************/ - -void toggle_dotfiles(void); -int show_dotfiles(void); -int dir_alphasort(const void *d1, const void *d2); -int dir_sizesort(const void *d1, const void *d2); -int dir_datesort(const void *d1, const void *d2); -int dir_extsort(const void *d1, const void *d2); - -/**************************************************************************** - * - * global variables - * - ****************************************************************************/ - - -/* This is user-selectable, I've set them fixed for now however */ - -void *_sort_func = dir_alphasort; -static int _showdotfiles = TRUE; - -/**************************************************************************** - * - * Functions - * - ****************************************************************************/ - -int -dir_select_nd( -#if defined __linux__ - const struct dirent *d -#else - struct dirent *d -#endif -) -/* - * desc: allways include a directory entry <d>, except - * for the current directory and other dot-files - * keep '..' however. - * pre: <d> points to a dirent - * post: returns TRUE if d->d_name != "." else FALSE - */ -{ - if (strcmp(d->d_name, ".")==0 || - (d->d_name[0] == '.' && strlen(d->d_name) > 1 && d->d_name[1] != '.')) { - return(FALSE); - } else { - return(TRUE); - } -}/* dir_select_nd() */ - - -int -dir_select( -#ifdef __linux__ - const struct dirent *d -#else - struct dirent *d -#endif -) -/* - * desc: allways include a directory entry <d>, except - * for the current directory - * pre: <d> points to a dirent - * post: returns TRUE if d->d_name != "." else FALSE - */ -{ - if (strcmp(d->d_name, ".")==0) { /* don't include the current directory */ - return(FALSE); - } else { - return(TRUE); - } -} /* dir_select() */ - -int -dir_select_root_nd( -#ifdef __linux__ - const struct dirent *d -#else - struct dirent *d -#endif -) -/* - * desc: allways include a directory entry <d>, except - * for the current directory and the parent directory. - * Also skip any other dot-files. - * pre: <d> points to a dirent - * post: returns TRUE if d->d_name[0] != "." else FALSE - */ -{ - if (d->d_name[0] == '.') { /* don't include the current directory */ - return(FALSE); /* nor the parent directory */ - } else { - return(TRUE); - } -} /* dir_select_root_nd() */ - - -int -dir_select_root( -#ifdef __linux__ - const struct dirent *d -#else - struct dirent *d -#endif -) -/* - * desc: allways include a directory entry <d>, except - * for the current directory and the parent directory - * pre: <d> points to a dirent - * post: returns TRUE if d->d_name[0] != "." else FALSE - */ -{ - if (strcmp(d->d_name, ".") == 0 || strcmp(d->d_name, "..") == 0) { - return(FALSE); - } else { - return(TRUE); - } -}/* dir_select_root() */ - - -#ifdef NO_ALPHA_SORT -int -alphasort(const void *d1, const void *d2) -/* - * desc: a replacement for what should be in the library - */ -{ - return(strcmp(((struct dirent *) d1)->d_name, - ((struct dirent *) d2)->d_name)); -} /* alphasort() */ -#endif - -int -dir_alphasort(const void *d1, const void *d2) -/* - * desc: compare d1 and d2, but put directories always first - * put '..' always on top - * - */ -{ - DirList *f1 = ((DirList *) d1), - *f2 = ((DirList *) d2); - struct stat *s1 = &(f1->filestatus); - struct stat *s2 = &(f2->filestatus); - - /* check for '..' */ - if (strcmp(((DirList *) d1)->filename, "..") == 0) { - return(-1); - } - if (strcmp(((DirList *) d2)->filename, "..") == 0) { - return(1); - } - - /* put directories first */ - if ((s1->st_mode & S_IFDIR) && (s2->st_mode & S_IFDIR)) { - return(strcmp(f1->filename, f2->filename)); - }; - if (s1->st_mode & S_IFDIR) { - return(-1); - } - if (s2->st_mode & S_IFDIR) { - return(1); - } - return(strcmp(f1->filename, f2->filename)); - -} /* dir_alphasort() */ - - -int -dir_sizesort(const void *d1, const void *d2) -/* - * desc: compare d1 and d2, but put directories always first - * - */ -{ - DirList *f1 = ((DirList *) d1), - *f2 = ((DirList *) d2); - struct stat *s1 = &(f1->filestatus); - struct stat *s2 = &(f2->filestatus); - - /* check for '..' */ - if (strcmp(((DirList *) d1)->filename, "..") == 0) { - return(-1); - } - if (strcmp(((DirList *) d2)->filename, "..") == 0) { - return(1); - } - - /* put directories first */ - if ((s1->st_mode & S_IFDIR) && (s2->st_mode & S_IFDIR)) { - return(s1->st_size < s2->st_size ? - -1 - : - s1->st_size >= s2->st_size); - }; - if (s1->st_mode & S_IFDIR) { - return(-1); - } - if (s2->st_mode & S_IFDIR) { - return(1); - } - return(s1->st_size < s2->st_size ? - -1 - : - s1->st_size >= s2->st_size); - -} /* dir_sizesort() */ - -int -dir_datesort(const void *d1, const void *d2) -/* - * desc: compare d1 and d2 on date, but put directories always first - */ -{ - DirList *f1 = ((DirList *) d1), - *f2 = ((DirList *) d2); - struct stat *s1 = &(f1->filestatus); - struct stat *s2 = &(f2->filestatus); - - - /* check for '..' */ - if (strcmp(((DirList *) d1)->filename, "..") == 0) { - return(-1); - } - if (strcmp(((DirList *) d2)->filename, "..") == 0) { - return(1); - } - - /* put directories first */ - if ((s1->st_mode & S_IFDIR) && (s2->st_mode & S_IFDIR)) { - return(s1->st_mtime < s2->st_mtime ? - -1 - : - s1->st_mtime >= s2->st_mtime); - }; - if (s1->st_mode & S_IFDIR) { - return(-1); - } - if (s2->st_mode & S_IFDIR) { - return(1); - } - return(s1->st_mtime < s2->st_mtime ? - -1 - : - s1->st_mtime >= s2->st_mtime); - -} /* dir_datesort() */ - - -int -null_strcmp(char *s1, char *s2) -/* - * desc: compare strings allowing NULL pointers - */ -{ - if ((s1 == NULL) && (s2 == NULL)) { - return(0); - } - if (s1 == NULL) { - return(-1); - } - if (s2 == NULL) { - return(1); - } - return(strcmp(s1, s2)); -} /* null_strcmp() */ - - -int -dir_extsort(const void *d1, const void *d2) -/* - * desc: compare d1 and d2 on extension, but put directories always first - * extension = "the characters after the last dot in the filename" - * pre: d1 and d2 are pointers to DirList type records - * post: see code - */ -{ - DirList *f1 = ((DirList *) d1), - *f2 = ((DirList *) d2); - struct stat *s1 = &(f1->filestatus); - struct stat *s2 = &(f2->filestatus); - char *ext1, *ext2; - int extf, ret; - - - /* check for '..' */ - if (strcmp(((DirList *) d1)->filename, "..") == 0) { - return(-1); - } - if (strcmp(((DirList *) d2)->filename, "..") == 0) { - return(1); - } - - - /* find the first extension */ - - ext1 = f1->filename + strlen(f1->filename); - extf = FALSE; - while (!extf && (ext1 > f1->filename)) { - extf = (*--ext1 == '.'); - } - if (!extf) { - ext1 = NULL; - } else { - ext1++; - } - /* ext1 == NULL if there's no "extension" else ext1 points */ - /* to the first character of the extension string */ - - /* find the second extension */ - - ext2 = f2->filename + strlen(f2->filename); - extf = FALSE; - while (!extf && (ext2 > f2->filename)) { - extf = (*--ext2 == '.'); - } - if (!extf) { - ext2 = NULL; - } else { - ext2++; - } - /* idem as for ext1 */ - - if ((s1->st_mode & S_IFDIR) && (s2->st_mode & S_IFDIR)) { - ret = null_strcmp(ext1, ext2); - if (ret == 0) { - return(strcmp(f1->filename, f2->filename)); - } else { - return(ret); - } - }; - if (s1->st_mode & S_IFDIR) { - return(-1); - } - if (s2->st_mode & S_IFDIR) { - return(1); - } - ret = null_strcmp(ext1, ext2); - if (ret == 0) { - return(strcmp(f1->filename, f2->filename)); - } else { - return(ret); - } - -} /* dir_extsort() */ - - -void -get_dir(char *dirname, char *fmask, DirList **dir, int *n) -/* - * desc: get the files in the current directory - * pre: <dir> == NULL - * post: <dir> contains <n> dir-entries - */ -{ - char cwd[MAXPATHLEN]; - char buf[256]; - struct dirent **dire; - struct stat status; - int i, j, nb; - long d; - - - getcwd(cwd, MAXPATHLEN); - if (strcmp(cwd, "/") == 0) { /* we are in the root directory */ - if (show_dotfiles()) { - *n = scandir(dirname, &dire, dir_select_root, alphasort); - } else { - *n = scandir(dirname, &dire, dir_select_root_nd, alphasort); - } - } else { - if (show_dotfiles()) { - *n = scandir(dirname, &dire, dir_select, alphasort); - } else { - *n = scandir(dirname, &dire, dir_select_nd, alphasort); - } - } - - /* There is the possibility that we have entered a directory */ - /* which we are not allowed to read, scandir thus returning */ - /* -1 for *n. */ - /* Actually I should also check for lack of memory, but I'll */ - /* let my application happily crash if this is the case */ - /* Solution: */ - /* manually insert the parent directory as the only */ - /* directory entry, and return. */ - - if (*n == -1) { - *n = 1; - *dir = (DirList *) malloc(sizeof(DirList)); - strcpy((*dir)[0].filename, ".."); - lstat("..", &status); - (*dir)[0].filestatus = status; - (*dir)[0].link = FALSE; - return; - } - - *dir = (DirList *) malloc( *n * sizeof(DirList) ); - d = 0; - i = 0; - j = 0; - while (j<*n) { - lstat(dire[j]->d_name, &status); - /* check if this file is to be included */ - /* always include directories, the rest is subject to fmask */ - if (S_ISDIR(status.st_mode) - || fnmatch(fmask, dire[j]->d_name, FNM_NOESCAPE) != FNM_NOMATCH) { - strcpy((*dir)[i].filename, dire[j]->d_name); - (*dir)[i].filestatus = status; - if ((S_IFMT & status.st_mode) == S_IFLNK) { /* handle links */ - (*dir)[i].link = TRUE; - stat(dire[j]->d_name, &status); - nb = readlink(dire[j]->d_name, buf, sizeof(buf) - 1); - if (nb == -1) { - printf("get_dir(): Error reading link: %s\n", dire[j]->d_name); - exit(-1); - } else { - (*dir)[i].linkname = malloc(sizeof(char) * nb + 1); - strncpy((*dir)[i].linkname, buf, nb); - (*dir)[i].linkname[nb] = 0; - } - (*dir)[i].filestatus = status; - } else { - (*dir)[i].link = FALSE; - (*dir)[i].linkname = NULL; - } - i++; - } else { - /* skip this entry */ - } - j++; - } - *n = i; - - /* sort the directory with the directory names on top */ - qsort((*dir), *n, sizeof(DirList), _sort_func); - - /* Free the allocated memory */ - for (i=0; i<*n; i++) { - free(dire[i]); - } - free(dire); - - return; -}/* get_dir() */ - - -void -FreeDir(DirList *d, int n) -/* - * desc: free the dirlist d - * pre: d != NULL - * post: memory allocated to d has been released - */ -{ - int i; - - if (d) { - for (i=0; i<n; i++) { - if (d[i].linkname) { - free(d[i].linkname); - } - } - free(d); - } else { - printf("dir.c:FreeDir(): d == NULL\n"); - exit(-1); - } - - return; -} /* FreeDir() */ - -void -toggle_dotfiles(void) -/* - * desc: toggle visibility of dot-files - */ -{ - _showdotfiles = !_showdotfiles; - - return; -} /* toggle_dotfiles() */ - -int -show_dotfiles(void) -/* - * desc: return the value of _showdotfiles - */ -{ - return(_showdotfiles); -} /* show_dotfiles() */ - -void -set_dotfiles(int b) -/* - * desc: set the value of _showdotfiles - */ -{ - _showdotfiles = b; - - return; -} /* set_dotfiles() */ Index: gnu/lib/libdialog/TESTS/check1.c =================================================================== --- gnu/lib/libdialog/TESTS/check1.c (revision 216873) +++ gnu/lib/libdialog/TESTS/check1.c (working copy) @@ -1,83 +0,0 @@ -/* - * small test-driver for new dialog functionality - * - * Copyright (c) 1995, Jordan Hubbard - * - * All rights reserved. - * - * This source code may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of the software nor does - * the author assume any responsibility for damages incurred with - * its use. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <sys/wait.h> -#include <dialog.h> - -/* Hook functions */ - -static int -getBool(dialogMenuItem *self) -{ - if (self->data && *((int *)self->data)) - return TRUE; - return FALSE; -} - -static int -setBool(dialogMenuItem *self) -{ - if (self->data) { - *((int *)self->data) = !*((int *)self->data); - return DITEM_SUCCESS; - } - return DITEM_FAILURE; -} - -static int german_book, italian_book, slang_book; - -static int -clearBooks(dialogMenuItem *self) -{ - german_book = italian_book = slang_book = FALSE; - return DITEM_SUCCESS | DITEM_REDRAW; -} - -/* menu2 - A more advanced way of using checked and fire hooks to manipulate the backing-variables directly */ -/* prompt title checked fire sel data */ -static dialogMenuItem menu2[] = { - { "German", "Buy book on learning German", getBool, setBool, NULL, &german_book}, - { "Italian", "Buy book on learning Italian", getBool, setBool, NULL, &italian_book }, - { "Slang", "Buy book on commonly used insults", getBool, setBool, NULL, &slang_book }, - { "Clear", "Clear book list", NULL, clearBooks, NULL, NULL, ' ', ' ', ' ' }, -}; - -/* End of hook functions */ - -/* Kick it off, James! */ -int -main(int argc, char **argv) -{ - int retval; - - init_dialog(); - - retval = dialog_checklist("this is a dialog_checklist() in action, test #1", - "this checklist menu shows off some of the straight-forward features\n" - "of the new menu system's check & fire dispatch hooks", -1, -1, 4, -4, menu2, NULL); - dialog_clear(); - fprintf(stderr, "returned value for dialog_checklist was %d (%d %d %d)\n", retval, german_book, italian_book, slang_book); - - end_dialog(); - return 0; -} Index: gnu/lib/libdialog/TESTS/check2.c =================================================================== --- gnu/lib/libdialog/TESTS/check2.c (revision 216873) +++ gnu/lib/libdialog/TESTS/check2.c (working copy) @@ -1,105 +0,0 @@ -/* - * small test-driver for new dialog functionality - * - * Copyright (c) 1995, Jordan Hubbard - * - * All rights reserved. - * - * This source code may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of the software nor does - * the author assume any responsibility for damages incurred with - * its use. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <sys/wait.h> -#include <dialog.h> - -/* Hook functions */ - -static int -getBool(dialogMenuItem *self) -{ - if (self->data && *((int *)self->data)) - return TRUE; - return FALSE; -} - -static int -setBool(dialogMenuItem *self) -{ - if (self->data) { - *((int *)self->data) = !*((int *)self->data); - return DITEM_SUCCESS; - } - return DITEM_FAILURE; -} - -static int german_book, italian_book, slang_book; - -static int -clearBooks(dialogMenuItem *self) -{ - german_book = italian_book = slang_book = FALSE; - return DITEM_SUCCESS | DITEM_REDRAW; -} - -static int -buyBooks(dialogMenuItem *self) -{ - char foo[256]; - - if (german_book || italian_book || slang_book) { - strcpy(foo, "Ok, you're buying books on"); - if (german_book) - strcat(foo, " german"); - if (italian_book) - strcat(foo, " italian"); - if (slang_book) - strcat(foo, " slang"); - } - else - strcpy(foo, "You're not buying any books?"); - dialog_mesgbox("This is a direct callback for the `Buy' button", foo, -1, -1); - return DITEM_SUCCESS; -} - -/* menu3 - Look mom! We can finally use our own OK and Cancel buttons! */ -/* prompt title checked fire sel data */ -static dialogMenuItem menu3[] = { - { "Buy!", NULL, NULL, buyBooks }, /* New "OK" button */ - { "No Way!", NULL, NULL, NULL }, /* New "Cancel" button */ - { "German", "Buy books on learning German", getBool, setBool, NULL, &german_book }, - { "Italian", "Buy books on learning Italian", getBool, setBool, NULL, &italian_book }, - { "Slang", "Buy books on commonly used insults", getBool, setBool, NULL, &slang_book }, - { "Clear", "Clear book list", NULL, clearBooks, NULL, NULL, ' ', ' ', ' ' }, -}; - -/* End of hook functions */ - -/* Kick it off, James! */ -int -main(int argc, char **argv) -{ - int retval; - - init_dialog(); - - retval = dialog_checklist("this is dialog_checklist() in action, test #2", - "Same as before, but now we relabel the buttons and override the OK action.", - -1, -1, 4, -4, menu3 + 2, (char *)TRUE); - dialog_clear(); - fprintf(stderr, "returned value for dialog_checklist was %d\n", retval); - - end_dialog(); - return 0; -} Index: gnu/lib/libdialog/TESTS/tree.c =================================================================== --- gnu/lib/libdialog/TESTS/tree.c (revision 216873) +++ gnu/lib/libdialog/TESTS/tree.c (working copy) @@ -1,111 +0,0 @@ -/* - * tree.c - * - * small test-driver for new dialog functionality - * - * Copyright (c) 1998, Anatoly A. Orehovsky - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stdio.h> -#include <stdlib.h> -#include <dialog.h> - -unsigned char *names[] = { - "/", - "/dev", - "/dev/fd", - "/tmp", - "/usr", - "/var", - "/home", - "/stand", - "/stand/etc", - "/stand/en_US.ISO8859-1", - "/stand/info", - "/stand/info/bin", - "/stand/info/des", - "/stand/info/games", - "/stand/info/manpages", - "/stand/info/proflibs", - "/stand/info/dict", - "/stand/info/info", - "/stand/info/src", - "/etc", - "/etc/gnats", - "/etc/kerberosIV", - "/etc/mtree", - "/etc/namedb", - "/etc/ppp", - "/etc/uucp", - "/etc/sliphome", - "/proc", - "/lkm", - "/mnt", - "/root", - "/sbin", - "/bin", - 0 -}; - -unsigned char *names1[] = { - "a", - "a:b", - "a:b:c", - "a:d" -}; - -int -main(int argc, char **argv) -{ - int retval; - unsigned char *tresult; - char comstr[BUFSIZ]; - - init_dialog(); - do { - use_helpline("Press OK for listing directory"); - retval = dialog_tree(names, - sizeof(names)/sizeof(unsigned char *) - 1, - '/', - "tree dialog box example", - "Typical find -x / -type d output", - -1, -1, 15, - &tresult); - - if (retval) - break; - - use_helpline(NULL); - (void)snprintf(comstr, sizeof(comstr), - "ls -CF %s", tresult); - - retval = dialog_prgbox( - comstr, - comstr, 20, 60, TRUE, TRUE); - - dialog_clear(); - - retval = dialog_tree(names1, - sizeof(names1)/sizeof(unsigned char *), - ':', - "tree dialog box example", - "Other tree", - -1, -1, 5, - &tresult); - if (!retval) - { - dialog_clear(); - } - } while (!retval); - - dialog_update(); - - dialog_clear(); - - end_dialog(); - - exit(retval); -} Index: gnu/lib/libdialog/TESTS/check3.c =================================================================== --- gnu/lib/libdialog/TESTS/check3.c (revision 216873) +++ gnu/lib/libdialog/TESTS/check3.c (working copy) @@ -1,92 +0,0 @@ -/* - * small test-driver for new dialog functionality - * - * Copyright (c) 1995, Jordan Hubbard - * - * All rights reserved. - * - * This source code may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of the software nor does - * the author assume any responsibility for damages incurred with - * its use. - * - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <sys/wait.h> -#include <dialog.h> - -/* Hook functions */ - -static int -getBool(dialogMenuItem *self) -{ - if (self->data && *((int *)self->data)) - return TRUE; - return FALSE; -} - -static int -setBool(dialogMenuItem *self) -{ - if (self->data) { - *((int *)self->data) = !*((int *)self->data); - return DITEM_SUCCESS; - } - return DITEM_FAILURE; -} - -static int german_book, italian_book, slang_book; -static int spending; - -static int -check(dialogMenuItem *self) -{ - return ((int)(intptr_t)self->data == spending); -} - -static int -spend(dialogMenuItem *self) -{ - spending = (int)(intptr_t)self->data; - return DITEM_SUCCESS | DITEM_REDRAW; -} - -/* menu4 - Show off a simulated compound menu (group at top is checklist, group at bottom radio) */ -/* prompt title checked fire sel, data lbra mark rbra */ -static dialogMenuItem menu4[] = { - { "German", "Buy books on learning German", getBool, setBool, NULL, &german_book }, - { "Italian","Buy books on learning Italian", getBool, setBool, NULL, &italian_book }, - { "Slang", "Buy books on commonly used insults", getBool, setBool, NULL, &slang_book }, - { "-----", "----------------------------------", NULL, NULL, NULL, NULL, ' ', ' ', ' ' }, - { "1000", "Spend $1,000", check, spend, NULL, (void *)1000, '(', '*', ')' }, - { "500", "Spend $500", check, spend, NULL, (void *)500, '(', '*', ')' }, - { "100", "Spend $100", check, spend, NULL, (void *)100, '(', '*', ')' }, -}; - -/* End of hook functions */ - -/* Kick it off, James! */ -int -main(int argc, char **argv) -{ - int retval; - - init_dialog(); - - - retval = dialog_checklist("this is dialog_checklist() in action, test #3", - "Now we show off some of the button 'styles' one can create.", - -1, -1, 7, -7, menu4, NULL); - dialog_clear(); - fprintf(stderr, "spent $%d on %s%s%s books\n", spending, german_book ? " german" : "", - italian_book ? " italian" : "", slang_book ? " slang" : ""); - - end_dialog(); - return 0; -} Index: gnu/lib/libdialog/TESTS/prgbox.c =================================================================== --- gnu/lib/libdialog/TESTS/prgbox.c (revision 216873) +++ gnu/lib/libdialog/TESTS/prgbox.c (working copy) @@ -1,41 +0,0 @@ -/* - * small test-driver for new dialog functionality - * - * Copyright (c) 1995, Jordan Hubbard - * - * All rights reserved. - * - * This source code may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of the software nor does - * the author assume any responsibility for damages incurred with - * its use. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <sys/wait.h> -#include <dialog.h> - -/* Kick it off, James! */ -int -main(int argc, char **argv) -{ - int retval; - - init_dialog(); - - retval = dialog_prgbox("This is dialog_prgbox() in action with cal(1)", "cal", 14, 50, TRUE, TRUE); - dialog_clear(); - fprintf(stderr, "returned value for dialog_prgbox was %d\n", retval); - - end_dialog(); - return 0; -} Index: gnu/lib/libdialog/TESTS/radio1.c =================================================================== --- gnu/lib/libdialog/TESTS/radio1.c (revision 216873) +++ gnu/lib/libdialog/TESTS/radio1.c (working copy) @@ -1,71 +0,0 @@ -/* - * small test-driver for new dialog functionality - * - * Copyright (c) 1995, Jordan Hubbard - * - * All rights reserved. - * - * This source code may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of the software nor does - * the author assume any responsibility for damages incurred with - * its use. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <sys/wait.h> -#include <dialog.h> - -/* Hook functions */ - -static int spending; - -static int -check(dialogMenuItem *self) -{ - return ((int)(intptr_t)self->data == spending); -} - -static int -spend(dialogMenuItem *self) -{ - spending = (int)(intptr_t)self->data; - return DITEM_SUCCESS | DITEM_REDRAW; -} - -/* menu5 - Show a simple radiolist menu that inherits the radio appearance by default */ -/* prompt title checked fire sel data */ -static dialogMenuItem menu5[] = { - { "1000", "Spend $1,000", check, spend, NULL, (void *)1000 }, - { "500", "Spend $500", check, spend, NULL, (void *)500 }, - { "100", "Spend $100", check, spend, NULL, (void *)100 }, -}; - -/* End of hook functions */ - -/* Kick it off, James! */ -int -main(int argc, char **argv) -{ - int retval; - - init_dialog(); - - - retval = dialog_radiolist("this is dialog_radiolist() in action, test #1", - "this radio menu shows off some of the straight-forward features\n" - "of the new menu system's check & fire dispatch hooks", -1, -1, 3, -3, menu5, NULL); - dialog_clear(); - fprintf(stderr, "returned value for dialog_radiolist was %d (money set to %d)\n", retval, spending); - - end_dialog(); - return 0; -} Index: gnu/lib/libdialog/TESTS/input1.c =================================================================== --- gnu/lib/libdialog/TESTS/input1.c (revision 216873) +++ gnu/lib/libdialog/TESTS/input1.c (working copy) @@ -1,45 +0,0 @@ -/* - * small test-driver for new dialog functionality - * - * Copyright (c) 1995, Jordan Hubbard - * - * All rights reserved. - * - * This source code may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of the software nor does - * the author assume any responsibility for damages incurred with - * its use. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <sys/wait.h> -#include <dialog.h> - -/* Kick it off, James! */ -int -main(int argc, char **argv) -{ - int retval; - unsigned char result[128]; - - init_dialog(); - - strcpy(result, "not this!"); - retval = dialog_inputbox("this is dialog_inputbox() in action, test #1", - "Enter something really profound below, please.", - -1, -1, result); - dialog_clear(); - fprintf(stderr, "returned value for dialog_inputbox was %d (%s)\n", retval, result); - - end_dialog(); - return 0; -} Index: gnu/lib/libdialog/TESTS/radio2.c =================================================================== --- gnu/lib/libdialog/TESTS/radio2.c (revision 216873) +++ gnu/lib/libdialog/TESTS/radio2.c (working copy) @@ -1,89 +0,0 @@ -/* - * small test-driver for new dialog functionality - * - * Copyright (c) 1995, Jordan Hubbard - * - * All rights reserved. - * - * This source code may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of the software nor does - * the author assume any responsibility for damages incurred with - * its use. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <sys/wait.h> -#include <dialog.h> - -/* Hook functions */ - -static char bachelor[10], bachelette[10]; - -static int -getBachelor(dialogMenuItem *self) -{ - return !strcmp(bachelor, self->prompt); -} - -static int -setBachelor(dialogMenuItem *self) -{ - strcpy(bachelor, self->prompt); - return DITEM_SUCCESS | DITEM_REDRAW; -} - -static int -getBachelette(dialogMenuItem *self) -{ - return !strcmp(bachelette, self->prompt); -} - -static int -setBachelette(dialogMenuItem *self) -{ - strcpy(bachelette, self->prompt); - return DITEM_SUCCESS | DITEM_REDRAW; -} - -/* menu6- More complex radiolist menu that creates two groups in a single menu */ -/* prompt title checked fire */ -static dialogMenuItem menu6[] = { - { "Tom", "Tom's a dynamic shoe salesman from Tulsa, OK!", getBachelor, setBachelor }, - { "Dick", "Dick's a retired engine inspector from McDonnell-Douglas!", getBachelor, setBachelor }, - { "Harry", "Harry's a professional female impersonator from Las Vegas!", getBachelor, setBachelor }, - { "-----", "----------------------------------", NULL, NULL, NULL, NULL, ' ', ' ', ' ' }, - { "Jane", "Jane's a twice-divorced housewife from Moose, Oregon!", getBachelette, setBachelette }, - { "Sally", "Sally's a shy Human Resources Manager for IBM!", getBachelette, setBachelette }, - { "Mary", "Mary's an energetic serial killer on the lam!", getBachelette, setBachelette }, -}; - -/* End of hook functions */ - -/* Kick it off, James! */ -int -main(int argc, char **argv) -{ - int retval; - - init_dialog(); - - retval = dialog_radiolist("this is dialog_radiolist() in action, test #2", - "Welcome to \"The Love Blender!\" - America's favorite game show\n" - "where YOU, the contestant, get to choose which of these two\n" - "fine specimens of humanity will go home together, whether they\n" - "like it or not!", -1, -1, 7, -7, menu6, NULL); - dialog_clear(); - fprintf(stderr, "I'm sure that %s and %s will be very happy together!\n", bachelor, bachelette); - - end_dialog(); - return 0; -} Index: gnu/lib/libdialog/TESTS/input2.c =================================================================== --- gnu/lib/libdialog/TESTS/input2.c (revision 216873) +++ gnu/lib/libdialog/TESTS/input2.c (working copy) @@ -1,47 +0,0 @@ -/* - * small test-driver for new dialog functionality - * - * Copyright (c) 1995, Jordan Hubbard - * - * All rights reserved. - * - * This source code may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of the software nor does - * the author assume any responsibility for damages incurred with - * its use. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <sys/wait.h> -#include <dialog.h> - -/* Kick it off, James! */ -int -main(int argc, char **argv) -{ - int retval; - unsigned char result[128]; - - init_dialog(); - - result[0]='\0'; - DialogInputAttrs |= DITEM_NO_ECHO; - retval = dialog_inputbox("this is dialog_inputbox() in action, test #2 (no echo)", - "Enter something really secret below, please.", - -1, -1, result); - DialogInputAttrs &= DITEM_NO_ECHO; - dialog_clear(); - fprintf(stderr, "returned value for dialog_inputbox was %d (%s)\n", retval, result); - - end_dialog(); - return 0; -} Index: gnu/lib/libdialog/TESTS/radio3.c =================================================================== --- gnu/lib/libdialog/TESTS/radio3.c (revision 216873) +++ gnu/lib/libdialog/TESTS/radio3.c (working copy) @@ -1,98 +0,0 @@ -/* - * small test-driver for new dialog functionality - * - * Copyright (c) 1995, Jordan Hubbard - * - * All rights reserved. - * - * This source code may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of the software nor does - * the author assume any responsibility for damages incurred with - * its use. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <sys/wait.h> -#include <dialog.h> - -/* Hook functions */ - -static int spending; - -static int -check(dialogMenuItem *self) -{ - return ((int)(intptr_t)self->data == spending); -} - -static int -spend(dialogMenuItem *self) -{ - spending = (int)(intptr_t)self->data; - return DITEM_SUCCESS | DITEM_REDRAW; -} - -static void -ask(dialogMenuItem *self, int is_selected) -{ - if (is_selected) { - char *str; - - if (!strcmp(self->prompt, "1000")) - str = "You'd better ask both your parents first! "; - else if (!strcmp(self->prompt, "500")) - str = "You'd better at least ask your Dad! "; - else - str = "Yes, being frugal is probably a good idea!"; - DialogX = 15; - DialogY = 17; - dialog_msgbox("Free Advice", str, -1, -1, 0); - } -} - -/* - * menu5 - Show a simple radiolist menu that inherits the radio appearance by default and appears at - * a different location, leaving room for a msg box below it. This shows off the DialogX/DialogY extensions. - */ - -/* prompt title checked fire sel data */ -static dialogMenuItem menu5[] = { - { "1000", "Spend $1,000", check, spend, ask, (void *)1000 }, - { "500", "Spend $500", check, spend, ask, (void *)500 }, - { "100", "Spend $100", check, spend, ask, (void *)100 }, -}; - -/* End of hook functions */ - -/* Kick it off, James! */ -int -main(int argc, char **argv) -{ - int retval; - - init_dialog(); - - - DialogX = 5; - DialogY = 1; - retval = dialog_radiolist("this is dialog_radiolist() in action, test #3", - "This radio menu shows off the ability to put dialog menus and other\n" - "controls at different locations, as well as the `selected' hook which\n" - "lets you follow the traversal of the selection bar as well as what's\n" - "selected.", - -1, -1, 3, -3, menu5, NULL); - dialog_clear(); - fprintf(stderr, "returned value for dialog_radiolist was %d (money set to %d)\n", retval, spending); - - end_dialog(); - return 0; -} Index: gnu/lib/libdialog/TESTS/ftree1.test =================================================================== --- gnu/lib/libdialog/TESTS/ftree1.test (revision 216873) +++ gnu/lib/libdialog/TESTS/ftree1.test (working copy) @@ -1,73 +0,0 @@ -XTerm login - VendorShellExt shellext - VT100 vt100 - SimpleMenu fontMenu - SmeBSB menuLabel - SmeBSB fontdefault - SmeBSB font1 - SmeBSB font2 - SmeBSB font3 - SmeBSB font4 - SmeBSB font5 - SmeBSB font6 - SmeBSB fontescape - SmeBSB fontsel - SimpleMenu mainMenu - SmeBSB menuLabel - SmeBSB securekbd - SmeBSB allowsends - SmeBSB redraw - SmeLine line1 - SmeBSB 8-bit control - SmeBSB sun function-keys - SmeLine line2 - SmeBSB suspend - SmeBSB continue - SmeBSB interrupt - SmeBSB hangup - SmeBSB terminate - SmeBSB kill - SmeLine line3 - SmeBSB quit - SimpleMenu vtMenu - SmeBSB menuLabel - SmeBSB scrollbar - SmeBSB jumpscroll - SmeBSB reversevideo - SmeBSB autowrap - SmeBSB reversewrap - SmeBSB autolinefeed - SmeBSB appcursor - SmeBSB appkeypad - SmeBSB scrollkey - SmeBSB scrollttyoutput - SmeBSB allow132 - SmeBSB cursesemul - SmeBSB visualbell - SmeBSB marginbell - SmeBSB altscreen - SmeLine line1 - SmeBSB softreset - SmeBSB hardreset - SmeBSB clearsavedlines - SmeLine line2 - SmeBSB tekshow - SmeBSB tekmode - SmeBSB vthide - TopLevelShell tektronix - VendorShellExt shellext - Tek4014 tek4014 - SimpleMenu tekMenu - SmeBSB menuLabel - SmeBSB tektextlarge - SmeBSB tektext2 - SmeBSB tektext3 - SmeBSB tektextsmall - SmeLine line1 - SmeBSB tekpage - SmeBSB tekreset - SmeBSB tekcopy - SmeLine line2 - SmeBSB vtshow - SmeBSB vtmode - SmeBSB tekhide Index: gnu/lib/libdialog/TESTS/dselect.c =================================================================== --- gnu/lib/libdialog/TESTS/dselect.c (revision 216873) +++ gnu/lib/libdialog/TESTS/dselect.c (working copy) @@ -1,41 +0,0 @@ -/* - * small test-driver for new dialog functionality - * - * Copyright (c) 1995, Jordan Hubbard - * - * All rights reserved. - * - * This source code may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of the software nor does - * the author assume any responsibility for damages incurred with - * its use. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <sys/wait.h> -#include <dialog.h> - -/* Kick it off, James! */ -int -main(int argc, char **argv) -{ - int retval; - - init_dialog(); - - retval = dialog_dselect(".", "*"); - dialog_clear(); - fprintf(stderr, "returned value for dialog_dselect was %d\n", retval); - - end_dialog(); - return 0; -} Index: gnu/lib/libdialog/TESTS/ftree2.test =================================================================== --- gnu/lib/libdialog/TESTS/ftree2.test (revision 216873) +++ gnu/lib/libdialog/TESTS/ftree2.test (working copy) @@ -1,73 +0,0 @@ -XTerm login -XTerm login VendorShellExt shellext -XTerm login VT100 vt100 -XTerm login SimpleMenu fontMenu -XTerm login SimpleMenu fontMenu SmeBSB menuLabel -XTerm login SimpleMenu fontMenu SmeBSB fontdefault -XTerm login SimpleMenu fontMenu SmeBSB font1 -XTerm login SimpleMenu fontMenu SmeBSB font2 -XTerm login SimpleMenu fontMenu SmeBSB font3 -XTerm login SimpleMenu fontMenu SmeBSB font4 -XTerm login SimpleMenu fontMenu SmeBSB font5 -XTerm login SimpleMenu fontMenu SmeBSB font6 -XTerm login SimpleMenu fontMenu SmeBSB fontescape -XTerm login SimpleMenu fontMenu SmeBSB fontsel -XTerm login SimpleMenu mainMenu -XTerm login SimpleMenu mainMenu SmeBSB menuLabel -XTerm login SimpleMenu mainMenu SmeBSB securekbd -XTerm login SimpleMenu mainMenu SmeBSB allowsends -XTerm login SimpleMenu mainMenu SmeBSB redraw -XTerm login SimpleMenu mainMenu SmeLine line1 -XTerm login SimpleMenu mainMenu SmeBSB 8-bit control -XTerm login SimpleMenu mainMenu SmeBSB sun function-keys -XTerm login SimpleMenu mainMenu SmeLine line2 -XTerm login SimpleMenu mainMenu SmeBSB suspend -XTerm login SimpleMenu mainMenu SmeBSB continue -XTerm login SimpleMenu mainMenu SmeBSB interrupt -XTerm login SimpleMenu mainMenu SmeBSB hangup -XTerm login SimpleMenu mainMenu SmeBSB terminate -XTerm login SimpleMenu mainMenu SmeBSB kill -XTerm login SimpleMenu mainMenu SmeLine line3 -XTerm login SimpleMenu mainMenu SmeBSB quit -XTerm login SimpleMenu vtMenu -XTerm login SimpleMenu vtMenu SmeBSB menuLabel -XTerm login SimpleMenu vtMenu SmeBSB scrollbar -XTerm login SimpleMenu vtMenu SmeBSB jumpscroll -XTerm login SimpleMenu vtMenu SmeBSB reversevideo -XTerm login SimpleMenu vtMenu SmeBSB autowrap -XTerm login SimpleMenu vtMenu SmeBSB reversewrap -XTerm login SimpleMenu vtMenu SmeBSB autolinefeed -XTerm login SimpleMenu vtMenu SmeBSB appcursor -XTerm login SimpleMenu vtMenu SmeBSB appkeypad -XTerm login SimpleMenu vtMenu SmeBSB scrollkey -XTerm login SimpleMenu vtMenu SmeBSB scrollttyoutput -XTerm login SimpleMenu vtMenu SmeBSB allow132 -XTerm login SimpleMenu vtMenu SmeBSB cursesemul -XTerm login SimpleMenu vtMenu SmeBSB visualbell -XTerm login SimpleMenu vtMenu SmeBSB marginbell -XTerm login SimpleMenu vtMenu SmeBSB altscreen -XTerm login SimpleMenu vtMenu SmeLine line1 -XTerm login SimpleMenu vtMenu SmeBSB softreset -XTerm login SimpleMenu vtMenu SmeBSB hardreset -XTerm login SimpleMenu vtMenu SmeBSB clearsavedlines -XTerm login SimpleMenu vtMenu SmeLine line2 -XTerm login SimpleMenu vtMenu SmeBSB tekshow -XTerm login SimpleMenu vtMenu SmeBSB tekmode -XTerm login SimpleMenu vtMenu SmeBSB vthide -XTerm login TopLevelShell tektronix -XTerm login TopLevelShell tektronix VendorShellExt shellext -XTerm login TopLevelShell tektronix Tek4014 tek4014 -XTerm login SimpleMenu tekMenu -XTerm login SimpleMenu tekMenu SmeBSB menuLabel -XTerm login SimpleMenu tekMenu SmeBSB tektextlarge -XTerm login SimpleMenu tekMenu SmeBSB tektext2 -XTerm login SimpleMenu tekMenu SmeBSB tektext3 -XTerm login SimpleMenu tekMenu SmeBSB tektextsmall -XTerm login SimpleMenu tekMenu SmeLine line1 -XTerm login SimpleMenu tekMenu SmeBSB tekpage -XTerm login SimpleMenu tekMenu SmeBSB tekreset -XTerm login SimpleMenu tekMenu SmeBSB tekcopy -XTerm login SimpleMenu tekMenu SmeLine line2 -XTerm login SimpleMenu tekMenu SmeBSB vtshow -XTerm login SimpleMenu tekMenu SmeBSB vtmode -XTerm login SimpleMenu tekMenu SmeBSB tekhide Index: gnu/lib/libdialog/TESTS/text.c =================================================================== --- gnu/lib/libdialog/TESTS/text.c (revision 216873) +++ gnu/lib/libdialog/TESTS/text.c (working copy) @@ -1,41 +0,0 @@ -/* - * small test-driver for new dialog functionality - * - * Copyright (c) 1995, Jordan Hubbard - * - * All rights reserved. - * - * This source code may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of the software nor does - * the author assume any responsibility for damages incurred with - * its use. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <sys/wait.h> -#include <dialog.h> - -/* Kick it off, James! */ -int -main(int argc, char **argv) -{ - int retval; - - init_dialog(); - - retval = dialog_textbox("This is dialog_textbox() in action with /etc/passwd", "/etc/passwd", 10, 60); - dialog_clear(); - fprintf(stderr, "returned value for dialog_textbox was %d\n", retval); - - end_dialog(); - return 0; -} Index: gnu/lib/libdialog/TESTS/fselect.c =================================================================== --- gnu/lib/libdialog/TESTS/fselect.c (revision 216873) +++ gnu/lib/libdialog/TESTS/fselect.c (working copy) @@ -1,44 +0,0 @@ -/* - * small test-driver for new dialog functionality - * - * Copyright (c) 1995, Jordan Hubbard - * - * All rights reserved. - * - * This source code may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of the software nor does - * the author assume any responsibility for damages incurred with - * its use. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <sys/wait.h> -#include <dialog.h> - -/* Kick it off, James! */ -int -main(int argc, char **argv) -{ - char *retval; - - init_dialog(); - - retval = dialog_fselect(".", "*.[ch]"); - dialog_clear(); - if (retval) - fprintf(stderr, "returned value for dialog_fselect was %s\n", retval); - else - fprintf(stderr, "returned value for dialog_fselect was NULL\n"); - - end_dialog(); - return 0; -} Index: gnu/lib/libdialog/TESTS/menu1.c =================================================================== --- gnu/lib/libdialog/TESTS/menu1.c (revision 216873) +++ gnu/lib/libdialog/TESTS/menu1.c (working copy) @@ -1,96 +0,0 @@ -/* - * small test-driver for new dialog functionality - * - * Copyright (c) 1995, Jordan Hubbard - * - * All rights reserved. - * - * This source code may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of the software nor does - * the author assume any responsibility for damages incurred with - * its use. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <sys/wait.h> -#include <dialog.h> - -/* Start of hook functions */ -static enum { nowhere, berlin, rome, ny } where; - -static int -_menu1_berlin_action(dialogMenuItem *self) -{ - if (where == berlin) { - dialog_mesgbox("excuse me?", "But you're already *in* Berlin!", -1, -1); - } - else { - where = berlin; - dialog_mesgbox("whoosh!", "Welcome to Berlin! Have a beer!", -1, -1); - } - return DITEM_SUCCESS | DITEM_RESTORE | DITEM_CONTINUE; -} - -static int -_menu1_rome_action(dialogMenuItem *self) -{ - if (where == rome) { - dialog_mesgbox("The wine must be getting to you..", "You're already in Rome!", -1, -1); - } - else { - where = rome; - dialog_mesgbox("whoosh!", "Welcome to Rome! Have a coffee!", -1, -1); - } - return DITEM_SUCCESS | DITEM_RESTORE | DITEM_CONTINUE; -} - -static int -_menu1_ny_action(dialogMenuItem *self) -{ - if (where == ny) { - dialog_mesgbox("Say what?", "You're already there!", -1, -1); - } - else { - where = ny; - dialog_mesgbox("whoosh!", "Welcome to New York! Now go someplace else!", -1, -1); - } - return DITEM_SUCCESS | DITEM_RESTORE | DITEM_CONTINUE; -} - -/* menu1 - show off the "fire" action hook */ -/* prompt title checked fire */ -static dialogMenuItem menu1[] = { - { "Berlin", "Go visit Germany's new capitol", NULL, _menu1_berlin_action }, - { "Rome", "Go visit the Roman ruins", NULL, _menu1_rome_action }, - { "New York", "Go visit the streets of New York", NULL, _menu1_ny_action }, -}; - -/* End of hook functions */ - -/* Kick it off, James! */ -int -main(int argc, char **argv) -{ - int retval; - - init_dialog(); - - retval = dialog_menu("this is dialog_menu() in action, test #1", - "this simple menu shows off some of the straight-forward features\n" - "of the new menu system's action dispatch hooks. Select Cancel to leave", - -1, -1, 3, -3, menu1, NULL, NULL, NULL); - dialog_clear(); - fprintf(stderr, "returned value for dialog_menu was %d\n", retval); - - end_dialog(); - return 0; -} Index: gnu/lib/libdialog/TESTS/menu2.c =================================================================== --- gnu/lib/libdialog/TESTS/menu2.c (revision 216873) +++ gnu/lib/libdialog/TESTS/menu2.c (working copy) @@ -1,96 +0,0 @@ -/* - * small test-driver for new dialog functionality - * - * Copyright (c) 1995, Jordan Hubbard - * - * All rights reserved. - * - * This source code may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of the software nor does - * the author assume any responsibility for damages incurred with - * its use. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <sys/wait.h> -#include <dialog.h> - -/* Start of hook functions */ -static enum { nowhere, berlin, rome, ny } where; - -static int -_menu1_berlin_action(dialogMenuItem *self) -{ - if (where == berlin) - dialog_mesgbox("excuse me?", "But you're already *in* Berlin!", -1, -1); - else { - where = berlin; - dialog_mesgbox("whoosh!", "Welcome to Berlin! Have a beer!", -1, -1); - } - return DITEM_SUCCESS | DITEM_RESTORE | DITEM_CONTINUE; -} - -static int -_menu1_rome_action(dialogMenuItem *self) -{ - if (where == rome) - dialog_mesgbox("The wine must be getting to you..", "You're already in Rome!", -1, -1); - else { - where = rome; - dialog_mesgbox("whoosh!", "Welcome to Rome! Have a coffee!", -1, -1); - } - return DITEM_SUCCESS | DITEM_RESTORE | DITEM_CONTINUE; -} - -static int -_menu1_ny_action(dialogMenuItem *self) -{ - if (where == ny) - dialog_mesgbox("Say what?", "You're already there!", -1, -1); - else { - where = ny; - dialog_mesgbox("whoosh!", "Welcome to New York! Now go someplace else!", -1, -1); - } - return DITEM_SUCCESS | DITEM_RESTORE | DITEM_CONTINUE; -} - -/* menu1 - show off the "fire" action hook */ -/* prompt title checked fire */ -static dialogMenuItem menu1[] = { - { "Berlin", "Go visit Germany's new capitol", NULL, _menu1_berlin_action }, - { "Rome", "Go visit the Roman ruins", NULL, _menu1_rome_action }, - { "New York", "Go visit the streets of New York", NULL, _menu1_ny_action }, -}; - -/* End of hook functions */ - -/* Kick it off, James! */ -int -main(int argc, char **argv) -{ - int retval; - - init_dialog(); - - use_helpfile("menu2.c"); - use_helpline("Type F1 to view the source for this demo"); - retval = dialog_menu("this is dialog_menu() in action, test #2", - "this simple menu shows off some of the straight-forward features\n" - "of the new menu system's action dispatch hooks as well as a helpline\n" - "and a helpfile. Select Cancel to leave", - -1, -1, 3, -3, menu1, NULL, NULL, NULL); - dialog_clear(); - fprintf(stderr, "returned value for dialog_menu was %d\n", retval); - - end_dialog(); - return 0; -} Index: gnu/lib/libdialog/TESTS/ftree1.c =================================================================== --- gnu/lib/libdialog/TESTS/ftree1.c (revision 216873) +++ gnu/lib/libdialog/TESTS/ftree1.c (working copy) @@ -1,45 +0,0 @@ -/* - * ftree1.c - * - * small test-driver for new dialog functionality - * - * Copyright (c) 1998, Anatoly A. Orehovsky - * - * file ./ftree1.test with xterm widget tree from - * direct editres(1) dump needed !!! - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stdio.h> -#include <stdlib.h> -#include <dialog.h> - -int -main(int argc, char **argv) -{ - int retval; - unsigned char *tresult; - - init_dialog(); - retval = dialog_ftree("ftree1.test", '\t', - "ftree dialog box example", - "xterm widget tree from direct editres(1) dump", - -1, -1, 15, - &tresult); - - dialog_update(); - - dialog_clear(); - - end_dialog(); - - if (!retval) - { - puts(tresult); - free(tresult); - } - - exit(retval); -} Index: gnu/lib/libdialog/TESTS/msg.c =================================================================== --- gnu/lib/libdialog/TESTS/msg.c (revision 216873) +++ gnu/lib/libdialog/TESTS/msg.c (working copy) @@ -1,42 +0,0 @@ -/* - * small test-driver for new dialog functionality - * - * Copyright (c) 1995, Jordan Hubbard - * - * All rights reserved. - * - * This source code may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of the software nor does - * the author assume any responsibility for damages incurred with - * its use. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <sys/wait.h> -#include <dialog.h> - -/* Kick it off, James! */ -int -main(int argc, char **argv) -{ - int retval; - - init_dialog(); - - retval = dialog_msgbox("This is dialog_msgbox() in action with pause on", "Hi there. Please press return now.", - -1, -1, 1); - dialog_clear(); - fprintf(stderr, "returned value for dialog_msgbox was %d\n", retval); - - end_dialog(); - return 0; -} Index: gnu/lib/libdialog/TESTS/menu3.c =================================================================== --- gnu/lib/libdialog/TESTS/menu3.c (revision 216873) +++ gnu/lib/libdialog/TESTS/menu3.c (working copy) @@ -1,107 +0,0 @@ -/* - * small test-driver for new dialog functionality - * - * Copyright (c) 1995, Jordan Hubbard - * - * All rights reserved. - * - * This source code may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of the software nor does - * the author assume any responsibility for damages incurred with - * its use. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <sys/wait.h> -#include <dialog.h> - -/* Hook functions */ - -static int -stop(dialogMenuItem *self) -{ - dialog_mesgbox("!", "I'm no idiot!", -1, -1); - return DITEM_SUCCESS; -} - -static int -maybe(dialogMenuItem *self) -{ - dialog_mesgbox("!", "I said don't rush me! I'm THINKING!", -1, -1); - return DITEM_SUCCESS | DITEM_RESTORE | DITEM_CONTINUE; -} - -/* Dummy menu just to show of the ability */ -static char *insurance[] = { - "1,000,000", "Mondo insurance policy", "Off", - "5,000,000", "Mega insurance policy", "Off", - "10,000,000", "Friend! Most Favored customer!", "On" -}; - -static void -preinsure(dialogMenuItem *self, int is_selected) -{ - if (is_selected) { - static WINDOW *w; - - /* This has to be here first if you want to see selection traverse properly in the invoking menu */ - refresh(); - - w = dupwin(newscr); - DialogX = 1; - DialogY = 13; - dialog_radiolist("How much insurance would you like to take out?", - "If you're really going to do this, we recommend some insurance\n" - "first! What kind of life insurance policy would you like?", - -1, -1, 3, 3, insurance, NULL); - touchwin(w); - wrefresh(w); - delwin(w); - } -} - -/* - * Show a simple menu that puts up a sub menu when a certain item is traversed to - */ - -/* prompt title checked fire sel */ -static dialogMenuItem doit[] = { - { "Rah!" }, - { "No way!" }, - { "Stop", "No, I'm not going to do that!", NULL, stop, NULL }, - { "Maybe", "I'm still thinking about it, don't rush me!", NULL, maybe, NULL, }, - { "Go", "Yes! Yes! I want to do it!", NULL, NULL, preinsure }, -}; - -/* End of hook functions */ - -/* Kick it off, James! */ -int -main(int argc, char **argv) -{ - int retval; - - init_dialog(); - - - DialogX = 5; - DialogY = 1; - retval = dialog_menu("Do you have the GUTS?", - "C'mon, macho man! Do you have what it takes to do something REALLY\n" - "dangerous and stupid? WHAT ARE YOU WAITING FOR?!", - -1, -1, 3, -3, doit + 2, (char *)TRUE, NULL, NULL); - dialog_clear(); - fprintf(stderr, "returned value for dialog_menu was %d\n", retval); - - end_dialog(); - return 0; -} Index: gnu/lib/libdialog/TESTS/ftree2.c =================================================================== --- gnu/lib/libdialog/TESTS/ftree2.c (revision 216873) +++ gnu/lib/libdialog/TESTS/ftree2.c (working copy) @@ -1,47 +0,0 @@ -/* - * ftree2.c - * - * small test-driver for new dialog functionality - * - * Copyright (c) 1998, Anatoly A. Orehovsky - * - * file ./ftree2.test with xterm widget tree from - * preprocess editres(1) dump needed !!! - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stdio.h> -#include <stdlib.h> -#include <dialog.h> - -int -main(int argc, char **argv) -{ - int retval; - unsigned char *tresult; - - init_dialog(); - use_helpfile("ftree2.test"); - use_helpline("Press Arrows, Tab, Enter or F1"); - retval = dialog_ftree("ftree2.test", '\t', - "ftree dialog box example", - "xterm widget tree from preprocess editres(1) dump", - -1, -1, 15, - &tresult); - - dialog_update(); - - dialog_clear(); - - end_dialog(); - - if (!retval) - { - puts(tresult); - free(tresult); - } - - exit(retval); -} Index: gnu/lib/libdialog/TESTS/gauge.c =================================================================== --- gnu/lib/libdialog/TESTS/gauge.c (revision 216873) +++ gnu/lib/libdialog/TESTS/gauge.c (working copy) @@ -1,41 +0,0 @@ -/* - * small test-driver for new dialog functionality - * - * Copyright (c) 1995, Jordan Hubbard - * - * All rights reserved. - * - * This source code may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of the software nor does - * the author assume any responsibility for damages incurred with - * its use. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <sys/wait.h> -#include <dialog.h> - -/* Kick it off, James! */ -int -main(int argc, char **argv) -{ - int i; - - init_dialog(); - - for (i = 0; i <= 100; i++) { - dialog_gauge("Gas tank", "When this gets 100% full, you'd better yank out the nozzle!", 10, 1, 7, 70, i); - usleep(30000); - } - end_dialog(); - return 0; -} Index: gnu/lib/libdialog/TESTS/Makefile =================================================================== --- gnu/lib/libdialog/TESTS/Makefile (revision 216873) +++ gnu/lib/libdialog/TESTS/Makefile (working copy) @@ -1,20 +0,0 @@ -# Really quick and evil Makefile for building all the tests. I wish that -# bmake was friendlier to the concept of multiple progs/libs in the same -# directory. -# -# $FreeBSD$ - -PROGS= msg yesno prgbox gauge dselect fselect text menu1 menu2 menu3 \ - input1 input2 check1 check2 check3 radio1 radio2 radio3 \ - ftree1 ftree2 tree - -WARNS?= 2 -CFLAGS+= -Wall -Wstrict-prototypes -LDFLAGS+= -ldialog - -all: ${PROGS} - -clean: - rm -f ${PROGS} - -.include <bsd.prog.mk> Index: gnu/lib/libdialog/TESTS/yesno.c =================================================================== --- gnu/lib/libdialog/TESTS/yesno.c (revision 216873) +++ gnu/lib/libdialog/TESTS/yesno.c (working copy) @@ -1,45 +0,0 @@ -/* - * small test-driver for new dialog functionality - * - * Copyright (c) 1995, Jordan Hubbard - * - * All rights reserved. - * - * This source code may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of the software nor does - * the author assume any responsibility for damages incurred with - * its use. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <sys/wait.h> -#include <dialog.h> - -/* Kick it off, James! */ -int -main(int argc, char **argv) -{ - int rval1, rval2; - - init_dialog(); - - rval1 = dialog_yesno("This is dialog_yesno() in action", - "Have you stopped deliberately putting bugs into your code?", -1, -1); - dialog_clear(); - rval2 = dialog_noyes("This is dialog_noyes() in action", - "Have you stopped beating your wife?", -1, -1); - dialog_clear(); - end_dialog(); - fprintf(stderr, "returned value for dialog_yesno was %d\n", rval1); - fprintf(stderr, "returned value for dialog_noyes was %d\n", rval2); - return 0; -} Index: gnu/lib/libdialog/dir.h =================================================================== --- gnu/lib/libdialog/dir.h (revision 216873) +++ gnu/lib/libdialog/dir.h (working copy) @@ -1,38 +0,0 @@ -/* - * include file for dir.c - * - * Copyright (c) 1995, Marc van Kempen - * - * All rights reserved. - * - * This software may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of this software, nor does - * the author assume any responsibility for damages incurred with - * its use. - * - */ - -#include <sys/types.h> -#include <sys/stat.h> -#include <sys/dirent.h> - -typedef struct DirList { /* structure to hold the directory entries */ - char filename[MAXNAMLEN]; /* together with the stat-info per file */ - struct stat filestatus; /* filename, or the name to which it points */ - int link; /* is it a link ? */ - char *linkname; /* the name of the file the link points to */ -} DirList; - -#ifndef TRUE -#define TRUE (1) -#endif -#ifndef FALSE -#define FALSE (0) -#endif - -void get_dir(char *dirname, char *fmask, DirList **dir, int *n); -void get_filenames(DirList *d, int n, char ***names, int *nf); -void FreeDir(DirList *d, int n); Index: gnu/lib/libdialog/TODO =================================================================== --- gnu/lib/libdialog/TODO (revision 216873) +++ gnu/lib/libdialog/TODO (working copy) @@ -1,36 +0,0 @@ -- cut off names in the listbox that are to long -done 27Jan95 - The current behaviour may not be desirable. When browsing through - long names these, when highlighted, will be shown with the first - characters cut off, when not highlighted the last characters will - be cut off. - -- look at behaviour of TAB key when browsing through directories. -done 28Jan95 - -- make sure the full name of the directory is written to the - "Directory:"-box -done 28Jan95 - -- mark current selections in listbox when initializing the listobject -Idontknow -- test and use Notify() when checking for error conditions -ok -- test overall -- adapt color of buttons when changing focus to the button. -done 28Jan95 -- add shade to dialog_fselect()-window -done 29Jan95 -- add (nn%) indication to lists. -done 30Jan95 -- add use_helpfile() -done 13Feb95 -- add use_helpline() - -NOTE: apparently there is a bug (or a strange interaction between pkg_manage -and dialog_textbox) in dialog_textbox. When I use this routine to display -the helpfile in display_helpfile() the program gets mysterious segmentation -faults and bus errors. -I now use dialog_mesgbox, after I have read the file into a buffer. - - Index: gnu/lib/libdialog/fselect.c =================================================================== --- gnu/lib/libdialog/fselect.c (revision 216873) +++ gnu/lib/libdialog/fselect.c (working copy) @@ -1,402 +0,0 @@ -/* - * program: fselect.c - * author: Marc van Kempen (wmbfmk@urc.tue.nl) - * Desc: File selection routine - * - * Copyright (c) 1995, Marc van Kempen - * - * All rights reserved. - * - * This software may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of this software, nor does - * the author assume any responsibility for damages incurred with - * its use. - * - */ - -#include <stdlib.h> -#include <unistd.h> -#include <sys/param.h> -#include <dialog.h> -#include "ui_objects.h" -#include "dir.h" -#include "dialog.priv.h" - -/* - * Local prototypes - */ - -char *dialog_dfselect(char *dir, char *fmask, int is_fselect); - -/* - * Functions - */ - -void -get_directories(DirList *d, int n, char ***names, int *nd) -/* - * Desc: return the directorienames in <dir> as an array in - * <names>, the # of entries in <nd>, memory allocated - * to *names should be freed when done with it. - */ -{ - int i; - - /* count the directories, which are in front */ - *nd = 0; - while ((*nd < n) && (S_ISDIR(d[*nd].filestatus.st_mode))) (*nd)++; - *names = (char **) malloc( *nd * sizeof(char *) ); - for (i=0; i<*nd; i++) { - (*names)[i] = (char *) malloc( strlen(d[i].filename) + 1); - strcpy((*names)[i], d[i].filename); - } - - return; -} /* get_directories() */ - -void -get_filenames(DirList *d, int n, char ***names, int *nf) -/* - * Desc: return the filenames in <dir> as an arry in - * <names>, the # of entries in <nf>, memory allocated - * to *names should be freed when done. - */ -{ - int nd, i; - - /* the # of regular files is the total # of files - # of directories */ - /* count the # of directories */ - nd = 0; - while ((nd < n) && (S_ISDIR(d[nd].filestatus.st_mode))) nd++; - - *names = (char **) malloc( (n-nd) * sizeof(char *) ); - *nf = n - nd; - for (i=0; i<*nf; i++) { - (*names)[i] = (char *) malloc( strlen(d[i+nd].filename) + 1); - strcpy((*names)[i], d[i+nd].filename); - } - - return; -} /* get_filenames() */ - -void -FreeNames(char **names, int n) -/* - * Desc: free the space occupied by names - */ -{ - int i; - - /* free the space occupied by names */ - for (i=0; i<n; i++) { - free(names[i]); - } - free(names); - - return; -} /* FreeNames() */ - -int -dialog_dselect_old(void) -/* - * Desc: starting from the current directory, - * choose a new current directory - */ -{ - DirList *d = NULL; - char **names, old_dir[MAXPATHLEN]; - WINDOW *ds_win; - ButtonObj *okbut, *cancelbut; - ListObj *dirs_obj; - StringObj *dir_obj; - char o_dir[MAXPATHLEN]; - struct ComposeObj *obj = NULL; - int n, nd, okbutton, cancelbutton, - quit, cancel, ret; - - ds_win = newwin(LINES-8, COLS-30, 4, 15); - if (ds_win == NULL) { - fprintf(stderr, "\nnewwin(%d,%d,%d,%d) failed, maybe wrong dims\n", - LINES-8, COLS-30, 4, 15); - exit(1); - } - draw_box(ds_win, 0, 0, LINES-8, COLS-30, dialog_attr, border_attr); - wattrset(ds_win, dialog_attr); - mvwaddstr(ds_win, 0, (COLS-30)/2 - 9, " Directory Select "); - draw_shadow(stdscr, 4, 15, LINES-8, COLS-30); - display_helpline(ds_win, LINES-9, COLS-30); - - /* the Directory string input field */ - getcwd(o_dir, MAXPATHLEN); - dir_obj = NewStringObj(ds_win, "Directory:", o_dir, 1, 2, COLS-34, MAXPATHLEN-1); - AddObj(&obj, STRINGOBJ, (void *) dir_obj); - - /* the list of directories */ - get_dir(".", "*", &d, &n); - get_directories(d, n, &names, &nd); - dirs_obj = NewListObj(ds_win, "Directories:", names, o_dir, 5, 2, - LINES-15, COLS-48, nd); - AddObj(&obj, LISTOBJ, (void *) dirs_obj); - - /* the Ok-button */ - okbutton = FALSE; - okbut = NewButtonObj(ds_win, "Continue", &okbutton, 7, COLS-45); - AddObj(&obj, BUTTONOBJ, (void *) okbut); - - /* the Cancel-button */ - cancelbutton = FALSE; - cancelbut = NewButtonObj(ds_win, "Return", &cancelbutton, 11, COLS-44); - AddObj(&obj, BUTTONOBJ, (void *) cancelbut); - - quit = FALSE; - cancel = FALSE; - strcpy(old_dir, o_dir); - while (!quit) { - ret = PollObj(&obj); - switch(ret) { - case SEL_BUTTON: - if (okbutton) { - quit = TRUE; - } - if (cancelbutton) { - quit = TRUE; - cancel = TRUE; - } - break; - case SEL_CR: - if (strcmp(old_dir, o_dir)) { - /* the directory was changed, cd into it */ - if (chdir(o_dir)) { - dialog_notify("Could not change into directory"); - strcpy(o_dir, old_dir); - } else { - getcwd(o_dir, MAXPATHLEN); - strcpy(old_dir, o_dir); - } - RefreshStringObj(dir_obj); - } - get_dir(".", "*", &d, &n); - FreeNames(names, nd); - get_directories(d, n, &names, &nd); - UpdateListObj(dirs_obj, names, nd); - if (((obj->prev)->obj == (void *) dirs_obj)) { - obj=obj->prev; - } - break; - case SEL_ESC: - quit = TRUE; - cancel = TRUE; - break; - case KEY_F(1): - display_helpfile(); - break; - } - } - - FreeNames(names, nd); - DelObj(obj); - delwin(ds_win); - - return(cancel); - -} /* dialog_dselect() */ - -int -dialog_dselect(char *dir, char *fmask) -/* - * Desc: Choose a directory - */ -{ - if (dialog_dfselect(dir, fmask, FALSE)) { - return(FALSE); /* esc or cancel was pressed */ - } else { - return(TRUE); /* directory was selected */ - } -} /* dialog_dselect() */ - -char * -dialog_fselect(char *dir, char *fmask) -/* - * Desc: Choose a file from a directory - */ -{ - return(dialog_dfselect(dir, fmask, TRUE)); -} /* dialog_fselect() */ - -char * -dialog_dfselect(char *dir, char *fmask, int is_fselect) -/* - * Desc: choose a file from the directory <dir>, which - * initially display files with the mask <filemask> - * pre: <dir> is the initial directory - * only files corresponding to the mask <fmask> are displayed - * post: returns NULL if no file was selected - * else returns pointer to filename, space is allocated, should - * be freed after use. - */ -{ - DirList *d = NULL; - char msg[512]; - char **fnames, **dnames, *ret_name; - WINDOW *fs_win; - int n, nd, nf, ret; - StringObj *fm_obj, *dir_obj, *sel_obj; - char o_fm[255], o_dir[MAXPATHLEN], o_sel[MAXPATHLEN]; - char old_fmask[255], old_dir[MAXPATHLEN]; - ListObj *dirs_obj, *files_obj; - struct ComposeObj *obj = NULL, *o; - int quit, cancel; - ButtonObj *okbut_obj, *canbut_obj; - int ok_button, cancel_button; - - if (chdir(dir)) { - sprintf(msg, "Could not move into specified directory: %s", dir); - dialog_notify(msg); - return(NULL); - } - getcwd(o_dir, MAXPATHLEN); - - /* setup the fileselect-window and initialize its components */ - fs_win = newwin(LINES-2, COLS-20, 1, 10); - if (fs_win == NULL) { - endwin(); - fprintf(stderr, "\nnewwin(%d,%d,%d,%d) failed, maybe wrong dims\n", - LINES-2, COLS-20, 2, 10); - exit(1); - } - draw_box(fs_win, 0, 0, LINES-2, COLS-20, dialog_attr, border_attr); - wattrset(fs_win, dialog_attr); - if (is_fselect) { - mvwaddstr(fs_win, 0, (COLS-20)/2 - 7, " File Select "); - } else { - mvwaddstr(fs_win, 0, (COLS-20)/2 - 9, " Directory Select "); - } - draw_shadow(stdscr, 1, 10, LINES-2, COLS-20); - display_helpline(fs_win, LINES-3, COLS-20); - - /* Filemask entry */ - strcpy(o_fm, fmask); - fm_obj = NewStringObj(fs_win, "Filemask:", o_fm, 1, 2, 19, 255); - AddObj(&obj, STRINGOBJ, (void *) fm_obj); - - /* Directory entry */ - dir_obj = NewStringObj(fs_win, "Directory:", o_dir, 1, 22, COLS-44, 255); - AddObj(&obj, STRINGOBJ, (void *) dir_obj); - - /* Directory list */ - get_dir(".", fmask, &d, &n); /* read the entire directory */ - get_directories(d, n, &dnames, &nd); /* extract the dir-entries */ - if (is_fselect) { - dirs_obj = NewListObj(fs_win, "Directories:", dnames, o_dir, 5, 2, - LINES-16, (COLS-20)/2-2, nd); - } else { - dirs_obj = NewListObj(fs_win, "Directories:", dnames, o_dir, 5, 2, - LINES-12, (COLS-20)/2-2, nd); - } - AddObj(&obj, LISTOBJ, (void *) dirs_obj); - - /* Filenames list */ - get_filenames(d, n, &fnames, &nf); /* extract the filenames */ - if (is_fselect) { - files_obj = NewListObj(fs_win, "Files:", fnames, o_sel, 5, (COLS-20)/2+1, - LINES-16, (COLS-20)/2-3, nf); - } else { - files_obj = NewListObj(fs_win, "Files:", fnames, o_sel, 5, (COLS-20)/2+1, - LINES-12, (COLS-20)/2-3, nf); - } - AddObj(&obj, LISTOBJ, (void *) files_obj); - - if (is_fselect) { - /* Selection entry */ - o_sel[0] = '\0'; - sel_obj = NewStringObj(fs_win, "Selection:", o_sel, LINES-10, 2, COLS-24, 255); - AddObj(&obj, STRINGOBJ, (void *) sel_obj); - } - - /* Ok button */ - ok_button = FALSE; - okbut_obj = NewButtonObj(fs_win, "Ok", &ok_button, LINES-6, 20); - AddObj(&obj, BUTTONOBJ, (void *) okbut_obj); - - /* Cancel button */ - cancel_button = FALSE; - canbut_obj = NewButtonObj(fs_win, "Cancel", &cancel_button, LINES-6, 30); - AddObj(&obj, BUTTONOBJ, (void *) canbut_obj); - - /* Make sure all objects on the window are drawn */ - wrefresh(fs_win); - keypad(fs_win, TRUE); - - /* Start the reading */ - o = obj; - strcpy(old_fmask, o_fm); - strcpy(old_dir, o_dir); - quit = FALSE; - cancel = FALSE; - while (!quit) { - ret = PollObj(&o); - switch(ret) { - case SEL_CR: - if (strcmp(old_fmask, o_fm) || strcmp(old_dir, o_dir)) { - /* reread directory and update the listobjects */ - if (strcmp(old_dir, o_dir)) { /* dir entry was changed */ - if (chdir(o_dir)) { - dialog_notify("Could not change into directory"); - strcpy(o_dir, old_dir); - } else { - getcwd(o_dir, MAXPATHLEN); - strcpy(old_dir, o_dir); - } - RefreshStringObj(dir_obj); - } else { /* fmask entry was changed */ - strcpy(old_fmask, o_fm); - } - get_dir(".", o_fm, &d, &n); - FreeNames(dnames, nd); - get_directories(d, n, &dnames, &nd); - UpdateListObj(dirs_obj, dnames, nd); - FreeNames(fnames, nf); - get_filenames(d, n, &fnames, &nf); - UpdateListObj(files_obj, fnames, nf); - if (((o->prev)->obj == (void *) dirs_obj)) { - o=o->prev; - } - } - break; - case SEL_BUTTON: - /* check which button was pressed */ - if (ok_button) { - quit = TRUE; - } - if (cancel_button) { - quit = TRUE; - cancel = TRUE; - } - break; - case SEL_ESC: - quit = TRUE; - cancel = TRUE; - break; - case KEY_F(1): - case '?': - display_helpfile(); - break; - } - } - DelObj(obj); - FreeNames(dnames, nd); - FreeNames(fnames, nf); - delwin(fs_win); - - if (cancel || (strlen(o_sel) == 0)) { - return(NULL); - } else { - ret_name = (char *) malloc( strlen(o_sel) + 1 ); - strcpy(ret_name, o_sel); - return(ret_name); - } -} /* dialog_fselect() */ - Index: gnu/lib/libdialog/help.c =================================================================== --- gnu/lib/libdialog/help.c (revision 216873) +++ gnu/lib/libdialog/help.c (working copy) @@ -1,194 +0,0 @@ -/*************************************************************** - * - * Program: help.c - * Author: Marc van Kempen - * Desc: get help - * - * - * Copyright (c) 1995, Marc van Kempen - * - * All rights reserved. - * - * This software may be used, modified, copied, distributed, and - * sold, in both source and binary form provided that the above - * copyright and these terms are retained, verbatim, as the first - * lines of this file. Under no circumstances is the author - * responsible for the proper functioning of this software, nor does - * the author assume any responsibility for damages incurred with - * its use. - * - ***************************************************************/ - -#include <stdlib.h> -#include <sys/param.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <string.h> -#include <dialog.h> - -static char _helpfilebuf[MAXPATHLEN]; -static char _helplinebuf[77]; /* limit the helpline to 76 characters */ -static char *_helpfile = NULL; -static char *_helpline = NULL; - -/****************************************************************** - * - * helpfile routines - * - ******************************************************************/ - -void -use_helpfile(char *hfile) -/* - * desc: set the helpfile to be opened on pressing F1 to <helpfile> - */ -{ - if (hfile != NULL) { - _helpfile = _helpfilebuf; - strcpy(_helpfile, hfile); - } else { - _helpfile = NULL; - } - - return; -} /* use_helpfile() */ - -void -display_helpfile(void) -/* - * desc: display the current helpfile in a window - */ -{ - WINDOW *w; - FILE *f; - struct stat sb; - char msg[80], *buf; - static int in_help = FALSE; - char *savehline = NULL; - - if (in_help) return; /* dont call help when you're in help */ - - if (_helpfile != NULL) { - if ((w = dupwin(newscr)) == NULL) { - dialog_notify("No memory to dup previous screen\n"); - return; - } - if ((f = fopen(_helpfile, "r")) == NULL) { - sprintf(msg, "Can't open helpfile : %s\n", _helpfile); - dialog_notify(msg); - return; - } - if (fstat(fileno(f), &sb)) { - sprintf(msg, "Can't stat helpfile : %s\n", _helpfile); - dialog_notify(msg); - return; - } - if ((buf = (char *) malloc( sb.st_size )) == NULL) { - sprintf(msg, "Could not malloc space for helpfile : %s\n", _helpfile); - dialog_notify(msg); - return; - } - if (fread(buf, 1, sb.st_size, f) != sb.st_size) { - sprintf(msg, "Could not read entire help file : %s", _helpfile); - dialog_notify(msg); - free(buf); - return; - } - buf[sb.st_size] = 0; - in_help = TRUE; - savehline = get_helpline(); - use_helpline("Use arrowkeys, PgUp, PgDn, Home and End to move through text"); - dialog_mesgbox("Online help", buf, LINES-4, COLS-4); - restore_helpline(savehline); - in_help = FALSE; - touchwin(w); - wrefresh(w); - delwin(w); - free(buf); - } else { - /* do nothing */ - } - - return; -} /* display_helpfile() */ - - -/****************************************************************** - * - * helpline routines - * - ******************************************************************/ - -void -use_helpline(char *hline) -/* - * desc: set the helpline to printed in dialogs - */ -{ - if (hline) { - _helpline = _helplinebuf; - if (strlen(hline) > 76) { - /* only display the first 76 characters in the helpline */ - strncpy(_helpline, hline, 76); - _helpline[76] = 0; - } else { - strcpy(_helpline, hline); - } - } else { - _helpline = NULL; - } - - return; -} /* use_helpline() */ - -void -display_helpline(WINDOW *w, int y, int width) -/* - * desc: display the helpline at the given coordinates <y, x> in the window <w> - */ -{ - if (_helpline != NULL) { - if (strlen(_helpline) > width - 6) { - _helpline[width - 6] = 0; - } - wmove(w, y, (int) (width - strlen(_helpline)- 4) / 2); - wattrset(w, title_attr); - waddstr(w, "[ "); - waddstr(w, _helpline); - waddstr(w, " ]"); - } else { - /* do nothing */ - } - - return; -} - -char * -get_helpline(void) -/* - * desc: allocate new space, copy the helpline to it and return a pointer to it - */ -{ - char *hlp; - - if (_helpline) { - hlp = (char *) malloc( strlen(_helpline) + 1 ); - strcpy(hlp, _helpline); - } else { - hlp = NULL; - } - - return(hlp); -} /* get_helpline() */ - -void -restore_helpline(char *helpline) -/* - * Desc: set the helpline to <helpline> and free the space allocated to it - */ -{ - use_helpline(helpline); - free(helpline); - - return; -} /* restore_helpline() */ Index: gnu/lib/libdialog/radiolist.c =================================================================== --- gnu/lib/libdialog/radiolist.c (revision 216873) +++ gnu/lib/libdialog/radiolist.c (working copy) @@ -1,628 +0,0 @@ -/* - * radiolist.c -- implements the radiolist box - * - * AUTHOR: Stuart Herbert - S.Herbert@sheffield.ac.uk - * (from checklist.c by Savio Lam (lam836@cs.cuhk.hk)) - * - * Substantial rennovation: 12/18/95, Jordan K. Hubbard - * - * 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. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <dialog.h> -#include "dialog.priv.h" - - -static void print_item(WINDOW *win, char *tag, char *item, int status, int choice, int selected, dialogMenuItem *me); - -#define DREF(di, item) ((di) ? &((di)[(item)]) : NULL) - -static int list_width, check_x, item_x; - - -/* - * Display a dialog box with a list of options that can be turned on or off - */ -int -dialog_radiolist(unsigned char *title, unsigned char *prompt, int height, int width, int list_height, - int cnt, void *it, unsigned char *result) -{ - int i, j, x, y, cur_x, cur_y, old_x, old_y, box_x, box_y, key = 0, button, - choice, l, k, scroll, max_choice, *status, item_no = 0, was_on = 0; - int redraw_menu = FALSE, cursor_reset = FALSE; - int rval = 0, onlist = 1, ok_space, cancel_space; - char okButton, cancelButton; - WINDOW *dialog, *list; - unsigned char **items = NULL; - dialogMenuItem *ditems; - - /* Allocate space for storing item on/off status */ - if ((status = alloca(sizeof(int) * abs(cnt))) == NULL) { - endwin(); - fprintf(stderr, "\nCan't allocate memory in dialog_radiolist().\n"); - exit(-1); - } - -draw: - button = choice = scroll = 0; - /* Previous calling syntax, e.g. just a list of strings? */ - if (cnt >= 0) { - items = it; - ditems = NULL; - item_no = cnt; - /* Initializes status */ - for (i = 0; i < item_no; i++) { - status[i] = !strcasecmp(items[i*3 + 2], "on"); - if (status[i]) { - if (was_on) - status[i] = FALSE; - else - was_on = 1; - } - } - } - /* It's the new specification format - fake the rest of the code out */ - else { - item_no = abs(cnt); - ditems = it; - if (!items) - items = (unsigned char **)alloca((item_no * 3) * sizeof(unsigned char *)); - /* Initializes status */ - for (i = 0; i < item_no; i++) { - status[i] = ditems[i].checked ? ditems[i].checked(&ditems[i]) : FALSE; - if (status[i]) { - if (was_on) - status[i] = FALSE; - else - was_on = 1; - } - items[i*3] = ditems[i].prompt; - items[i*3 + 1] = ditems[i].title; - items[i*3 + 2] = status[i] ? "on" : "off"; - } - } - max_choice = MIN(list_height, item_no); - - check_x = 0; - item_x = 0; - /* Find length of longest item in order to center radiolist */ - for (i = 0; i < item_no; i++) { - l = strlen(items[i * 3]); - for (j = 0; j < item_no; j++) { - k = strlen(items[j * 3 + 1]); - check_x = MAX(check_x, l + k + 6); - } - item_x = MAX(item_x, l); - } - if (height < 0) - height = strheight(prompt) + list_height + 4 + 2; - if (width < 0) { - i = strwidth(prompt); - j = ((title != NULL) ? strwidth(title) : 0); - width = MAX(i, j); - width = MAX(width, check_x + 4) + 4; - } - width = MAX(width, 24); - - if (width > COLS) - width = COLS; - if (height > LINES) - height = LINES; - /* center dialog box on screen */ - x = DialogX ? DialogX : (COLS - width) / 2; - y = DialogY ? DialogY : (LINES - height) / 2; - -#ifdef HAVE_NCURSES - if (use_shadow) - draw_shadow(stdscr, y, x, height, width); -#endif - dialog = newwin(height, width, y, x); - if (dialog == NULL) { - endwin(); - fprintf(stderr, "\nnewwin(%d,%d,%d,%d) failed, maybe wrong dims\n", height, width, y, x); - return -1; - } - keypad(dialog, TRUE); - - draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); - wattrset(dialog, border_attr); - wmove(dialog, height - 3, 0); - waddch(dialog, ACS_LTEE); - for (i = 0; i < width - 2; i++) - waddch(dialog, ACS_HLINE); - wattrset(dialog, dialog_attr); - waddch(dialog, ACS_RTEE); - wmove(dialog, height - 2, 1); - for (i = 0; i < width - 2; i++) - waddch(dialog, ' '); - - if (title != NULL) { - wattrset(dialog, title_attr); - wmove(dialog, 0, (width - strlen(title)) / 2 - 1); - waddch(dialog, ' '); - waddstr(dialog, title); - waddch(dialog, ' '); - } - wattrset(dialog, dialog_attr); - wmove(dialog, 1, 2); - print_autowrap(dialog, prompt, height - 1, width - 2, width, 1, 2, TRUE, FALSE); - - list_width = width - 6; - getyx(dialog, cur_y, cur_x); - box_y = cur_y + 1; - 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); - if (list == NULL) { - delwin(dialog); - endwin(); - fprintf(stderr, "\nsubwin(dialog,%d,%d,%d,%d) failed, maybe wrong dims\n", list_height, list_width, - y + box_y + 1,x + box_x + 1); - return -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); - - check_x = (list_width - check_x) / 2; - item_x = check_x + item_x + 6; - - /* Print the list */ - for (i = 0; i < max_choice; i++) - print_item(list, items[i * 3], items[i * 3 + 1], status[i], i, i == choice, DREF(ditems, i)); - wnoutrefresh(list); - print_arrows(dialog, scroll, list_height, item_no, box_x, box_y, check_x + 4, cur_x, cur_y); - - display_helpline(dialog, height-1, width); - - x = width/ 2 - 11; - y = height - 2; - if (ditems && result) { - cancelButton = toupper(ditems[CANCEL_BUTTON].prompt[0]); - print_button(dialog, ditems[CANCEL_BUTTON].prompt, y, x + strlen(ditems[OK_BUTTON].prompt) + 5, - ditems[CANCEL_BUTTON].checked ? ditems[CANCEL_BUTTON].checked(&ditems[CANCEL_BUTTON]) : FALSE); - okButton = toupper(ditems[OK_BUTTON].prompt[0]); - print_button(dialog, ditems[OK_BUTTON].prompt, y, x, - ditems[OK_BUTTON].checked ? ditems[OK_BUTTON].checked(&ditems[OK_BUTTON]) : TRUE); - } - else { - cancelButton = 'C'; - print_button(dialog, "Cancel", y, x + 14, FALSE); - okButton = 'O'; - print_button(dialog, " OK ", y, x, TRUE); - } - wnoutrefresh(dialog); - wmove(list, choice, check_x+1); - wrefresh(list); - - while (key != ESC) { - key = wgetch(dialog); - - /* See if its the short-cut to "OK" */ - if (toupper(key) == okButton) { - if (ditems) { - if (result && ditems[OK_BUTTON].fire) { - int st; - WINDOW *save; - - save = dupwin(newscr); - st = ditems[OK_BUTTON].fire(&ditems[OK_BUTTON]); - if (st & DITEM_RESTORE) { - touchwin(save); - wrefresh(save); - } - delwin(save); - } - } - else if (result) { - *result = '\0'; - for (i = 0; i < item_no; i++) { - if (status[i]) { - strcat(result, items[i*3]); - break; - } - } - } - rval = 0; - key = ESC; - break; - } - - /* Shortcut to cancel */ - if (toupper(key) == cancelButton) { - if (ditems && result && ditems[CANCEL_BUTTON].fire) { - int st; - WINDOW *save; - - save = dupwin(newscr); - st = ditems[CANCEL_BUTTON].fire(&ditems[CANCEL_BUTTON]); - if (st & DITEM_RESTORE) { - touchwin(save); - wrefresh(save); - } - delwin(save); - } - rval = 1; - key = ESC; - break; - } - - /* Check if key pressed matches first character of any item tag in list */ - for (i = 0; i < max_choice; i++) - if (key != ' ' && toupper(key) == toupper(items[(scroll + i) * 3][0])) - break; - - if (i < max_choice || (key >= '1' && key <= MIN('9', '0' + max_choice)) || - KEY_IS_UP(key) || KEY_IS_DOWN(key) || ((key == ' ' || key == '\r' || key == '\n') && onlist == 1)) { - - /* if moving from buttons to the list, reset and redraw buttons */ - if (!onlist) { - onlist = 1; - button = 0; - - if (ditems && result ) { - print_button(dialog, ditems[CANCEL_BUTTON].prompt, y, x + strlen(ditems[OK_BUTTON].prompt) + 5, - ditems[CANCEL_BUTTON].checked ? ditems[CANCEL_BUTTON].checked(&ditems[CANCEL_BUTTON]) : button); - print_button(dialog, ditems[OK_BUTTON].prompt, y, x, - ditems[OK_BUTTON].checked ? ditems[OK_BUTTON].checked(&ditems[OK_BUTTON]) : !button); - } - else { - print_button(dialog, "Cancel", y, x + 14, button); - print_button(dialog, " OK ", y, x, !button); - } - } - wmove(list, choice, check_x+1); - wnoutrefresh(dialog); - wrefresh(list); - - if (key >= '1' && key <= MIN('9', '0' + max_choice)) - i = key - '1'; - else if (KEY_IS_UP(key)) { - if (!choice) { - if (scroll) { - /* Scroll list down */ - getyx(dialog, cur_y, cur_x); /* Save cursor position */ - if (list_height > 1) { - /* De-highlight current first item before scrolling down */ - print_item(list, items[scroll*3], items[scroll*3 + 1], status[scroll], 0, - FALSE, DREF(ditems, scroll)); - scrollok(list, TRUE); - wscrl(list, -1); - scrollok(list, FALSE); - } - scroll--; - print_item(list, items[scroll*3], items[scroll*3 + 1], status[scroll], 0, - TRUE, DREF(ditems, scroll)); - print_arrows(dialog, scroll, list_height, item_no, box_x, box_y, check_x + 4, cur_x, cur_y); - wmove(list, choice, check_x+1); - wnoutrefresh(dialog); - wrefresh(list); - } - continue; /* wait for another key press */ - } - else - i = choice - 1; - } - else if (KEY_IS_DOWN(key)) { - if (choice == max_choice - 1) { - if (scroll + choice < item_no - 1) { - /* Scroll list up */ - getyx(dialog, cur_y, cur_x); /* Save cursor position */ - if (list_height > 1) { - /* De-highlight current last item before scrolling up */ - print_item(list, items[(scroll + max_choice - 1) * 3], - items[(scroll + max_choice - 1) * 3 + 1], - status[scroll + max_choice - 1], max_choice - 1, - FALSE, DREF(ditems, scroll + max_choice - 1)); - scrollok(list, TRUE); - scroll(list); - scrollok(list, FALSE); - } - scroll++; - print_item(list, items[(scroll + max_choice - 1) * 3], - items[(scroll + max_choice - 1) * 3 + 1], - status[scroll + max_choice - 1], max_choice - 1, - TRUE, DREF(ditems, scroll + max_choice - 1)); - print_arrows(dialog, scroll, list_height, item_no, box_x, box_y, check_x + 4, cur_x, cur_y); - wmove(list, choice, check_x+1); - wnoutrefresh(dialog); - wrefresh(list); - } - continue; /* wait for another key press */ - } - else - i = choice + 1; - } - else if ((key == ' ' || key == '\r' || key == '\n') && onlist) { /* Toggle item status */ - getyx(list, old_y, old_x); /* Save cursor position */ - if (status[scroll + choice]) - continue; - else if (ditems) { - if (ditems[scroll + choice].fire) { - int st; - WINDOW *save; - - save = dupwin(newscr); - st = ditems[scroll + choice].fire(&ditems[scroll + choice]); - if (st & DITEM_RESTORE) { - touchwin(save); - wrefresh(save); - } - delwin(save); - if (st & DITEM_REDRAW) { - wclear(list); - for (i = 0; i < item_no; i++) - status[i] = ditems[i].checked ? ditems[i].checked(&ditems[i]) : FALSE; - - for (i = 0; i < max_choice; i++) { - print_item(list, items[(scroll + i) * 3], items[(scroll + i) * 3 + 1], - status[scroll + i], i, i == choice, - DREF(ditems, scroll + i)); - } -/* wmove(list, old_y, old_x);*/ /* Restore cursor to previous position */ -/* wrefresh(list); */ - } - if (st & DITEM_LEAVE_MENU) { - /* Allow a fire action to take us out of the menu */ - key = ESC; - break; - } - else if (st & DITEM_RECREATE) { - delwin(list); - delwin(dialog); - dialog_clear(); - goto draw; - } - } - for (i = 0; i < item_no; i++) - status[i] = ditems[i].checked ? ditems[i].checked(&ditems[i]) : FALSE; - } - else { - for (i = 0; i < item_no; i++) - status[i] = 0; - status[scroll + choice] = TRUE; - } - for (i = 0; i < max_choice; i++) - print_item(list, items[(scroll + i) * 3], items[(scroll + i) * 3 + 1], - status[scroll + i], i, i == choice, DREF(ditems, scroll + i)); - wmove(list, choice, check_x+1); /* Restore cursor position */ - wrefresh(list); - continue; /* wait for another key press */ - } - - if (i != choice) { - /* De-highlight current item */ - print_item(list, items[(scroll + choice) * 3], items[(scroll + choice) * 3 +1], - status[scroll + choice], choice, FALSE, DREF(ditems, scroll + choice)); - /* Highlight new item */ - choice = i; - print_item(list, items[(scroll + choice) * 3], items[(scroll + choice) * 3 + 1], - status[scroll + choice], choice, TRUE, DREF(ditems, scroll + choice)); - wmove(list, choice, check_x+1); /* Restore cursor position */ - wrefresh(list); - } - continue; /* wait for another key press */ - } - - switch (key) { - case KEY_PPAGE: - if (scroll > height-4) /* can we go up? */ - scroll -= (height-4); - else - scroll = 0; - redraw_menu = TRUE; - if (!onlist) { - onlist = 1; - button = 0; - } - break; - - case KEY_NPAGE: - if (scroll + list_height >= item_no-1 - list_height) { /* can we go down a full page? */ - scroll = item_no - list_height; - if (scroll < 0) - scroll = 0; - } - else - scroll += list_height; - redraw_menu = TRUE; - if (!onlist) { - onlist = 1; - button = 0; - } - break; - - case KEY_HOME: - scroll = 0; - choice = 0; - redraw_menu = TRUE; - cursor_reset = TRUE; - onlist = 1; - break; - - case KEY_END: - scroll = item_no - list_height; - if (scroll < 0) - scroll = 0; - choice = max_choice - 1; - redraw_menu = TRUE; - cursor_reset = TRUE; - onlist = 1; - break; - - case TAB: - case KEY_BTAB: - /* move to next component */ - if (onlist) { /* on list, next is ok button */ - onlist = 0; - if (ditems && result) - ok_space = 1; - else - ok_space = 3; - wmove(dialog, y, x + ok_space); - wrefresh(dialog); - break; - } - else if (button) { /* on cancel button, next is list */ - button = 0; - onlist = 1; - redraw_menu = TRUE; - break; - } - /* on ok button, next is cancel button, same as left/right case */ - - case KEY_LEFT: - case KEY_RIGHT: - onlist = 0; - button = !button; - if (ditems && result) { - print_button(dialog, ditems[CANCEL_BUTTON].prompt, y, x + strlen(ditems[OK_BUTTON].prompt) + 5, - ditems[CANCEL_BUTTON].checked ? ditems[CANCEL_BUTTON].checked(&ditems[CANCEL_BUTTON]) : button); - print_button(dialog, ditems[OK_BUTTON].prompt, y, x, - ditems[OK_BUTTON].checked ? ditems[OK_BUTTON].checked(&ditems[OK_BUTTON]) : !button); - ok_space = 1; - cancel_space = strlen(ditems[OK_BUTTON].prompt) + 6; - } - else { - print_button(dialog, "Cancel", y, x + 14, button); - print_button(dialog, " OK ", y, x, !button); - ok_space = 3; - cancel_space = 15; - } - if (button) - wmove(dialog, y, x + cancel_space); - else - wmove(dialog, y, x + ok_space); - wrefresh(dialog); - break; - - case ' ': - case '\r': - case '\n': - if (!onlist) { - if (ditems) { - if (result && ditems[button ? CANCEL_BUTTON : OK_BUTTON].fire) { - int st; - WINDOW *save; - - save = dupwin(newscr); - st = ditems[button ? CANCEL_BUTTON : OK_BUTTON].fire(&ditems[button ? CANCEL_BUTTON : OK_BUTTON]); - if (st & DITEM_RESTORE) { - touchwin(save); - wrefresh(save); - } - delwin(save); - } - } - else if (result) { - *result = '\0'; - for (i = 0; i < item_no; i++) { - if (status[i]) { - strcpy(result, items[i*3]); - break; - } - } - } - rval = button; - key = ESC; - break; - } - - case ESC: - rval = -1; - break; - - case KEY_F(1): - case '?': - display_helpfile(); - break; - } - - if (redraw_menu) { - getyx(list, old_y, old_x); - wclear(list); - for (i = 0; i < max_choice; i++) - print_item(list, items[(scroll + i) * 3], items[(scroll + i) * 3 + 1], status[scroll + i], - i, i == choice, DREF(ditems, scroll + i)); - print_arrows(dialog, scroll, list_height, item_no, box_x, box_y, check_x + 4, cur_x, cur_y); - - /* redraw buttons to fix highlighting */ - if (ditems && result) { - print_button(dialog, ditems[CANCEL_BUTTON].prompt, y, x + strlen(ditems[OK_BUTTON].prompt) + 5, - ditems[CANCEL_BUTTON].checked ? ditems[CANCEL_BUTTON].checked(&ditems[CANCEL_BUTTON]) : button); - print_button(dialog, ditems[OK_BUTTON].prompt, y, x, - ditems[OK_BUTTON].checked ? ditems[OK_BUTTON].checked(&ditems[OK_BUTTON]) : !button); - } - else { - print_button(dialog, "Cancel", y, x + 14, button); - print_button(dialog, " OK ", y, x, !button); - } - wnoutrefresh(dialog); - if (cursor_reset) { - wmove(list, choice, check_x+1); - cursor_reset = FALSE; - } - else { - wmove(list, old_y, old_x); - } - wrefresh(list); - redraw_menu = FALSE; - } - } - - delwin(list); - delwin(dialog); - return rval; /* ESC pressed */ -} - -/* - * Print list item - */ -static void -print_item(WINDOW *win, char *tag, char *item, int status, int choice, int selected, dialogMenuItem *me) -{ - 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); - wprintw(win, "%c%c%c", me && me->lbra ? me->lbra : '(', - status ? me && me->mark ? me->mark : '*' : ' ', - me && me->rbra ? me->rbra : ')'); - wattrset(win, menubox_attr); - waddch(win, ' '); - wattrset(win, selected ? tag_key_selected_attr : tag_key_attr); - waddch(win, tag[0]); - wattrset(win, selected ? tag_selected_attr : tag_attr); - waddstr(win, tag + 1); - wmove(win, choice, item_x); - wattrset(win, selected ? item_selected_attr : item_attr); - waddstr(win, item); - /* If have a selection handler for this, call it */ - if (me && me->selected) { - wrefresh(win); - me->selected(me, selected); - } -} -/* End of print_item() */ Index: gnu/lib/libodialog/Makefile =================================================================== --- gnu/lib/libodialog/Makefile (revision 216873) +++ gnu/lib/libodialog/Makefile (working copy) @@ -3,20 +3,14 @@ .include <bsd.own.mk> -LIB= dialog -INCS= dialog.h -MAN= dialog.3 +LIB= odialog +#MAN= NOMAN SHLIB_MAJOR= 7 SRCS= kernel.c rc.c checklist.c inputbox.c menubox.c msgbox.c \ lineedit.c radiolist.c textbox.c yesno.c prgbox.c raw_popen.c \ fselect.c ui_objects.c dir.c notify.c help.c gauge.c tree.c -EXAMPLES= Makefile check1.c check2.c check3.c dselect.c fselect.c \ - ftree1.c ftree1.test ftree2.c ftree2.test gauge.c input1.c \ - input2.c menu1.c menu2.c menu3.c msg.c prgbox.c radio1.c \ - radio2.c radio3.c text.c tree.c yesno.c - CFLAGS+= -I${.CURDIR} -Wall -Wstrict-prototypes -DLOCALE DPADD= ${LIBNCURSES} @@ -27,21 +21,4 @@ FILESDIR= ${SHAREDIR}/examples/libdialog .endif -MLINKS+=dialog.3 draw_shadow.3 dialog.3 draw_box.3 \ - dialog.3 line_edit.3 dialog.3 strheight.3 \ - dialog.3 strwidth.3 dialog.3 dialog_create_rc.3 \ - dialog.3 dialog_yesno.3 dialog.3 dialog_noyes.3 \ - dialog.3 dialog_prgbox.3 \ - dialog.3 dialog_textbox.3 dialog.3 dialog_menu.3 \ - dialog.3 dialog_checklist.3 dialog.3 dialog_radiolist.3 \ - dialog.3 dialog_inputbox.3 dialog.3 dialog_clear_norefresh.3 \ - dialog.3 dialog_clear.3 dialog.3 dialog_update.3 \ - dialog.3 dialog_fselect.3 dialog.3 dialog_notify.3 \ - dialog.3 dialog_mesgbox.3 dialog.3 dialog_gauge.3 \ - dialog.3 init_dialog.3 dialog.3 end_dialog.3 \ - dialog.3 use_helpfile.3 dialog.3 use_helpline.3 \ - dialog.3 get_helpline.3 dialog.3 restore_helpline.3 \ - dialog.3 dialog_msgbox.3 dialog.3 dialog_ftree.3 \ - dialog.3 dialog_tree.3 - .include <bsd.lib.mk> Index: gnu/lib/Makefile =================================================================== --- gnu/lib/Makefile (revision 216873) +++ gnu/lib/Makefile (working copy) @@ -2,7 +2,8 @@ .include <bsd.own.mk> -SUBDIR= csu libgcc libgcov libdialog libgomp libregex libreadline libssp +SUBDIR= csu libgcc libgcov libdialog libgomp libodialog libregex libreadline \ + libssp # libsupc++ uses libstdc++ headers, although 'make includes' should # have taken care of that already. Index: contrib/dialog/buttons.c =================================================================== --- contrib/dialog/buttons.c (revision 0) +++ contrib/dialog/buttons.c (revision 0) @@ -0,0 +1,657 @@ +/* + * $Id: buttons.c,v 1.81 2010/04/28 20:57:29 tom Exp $ + * + * buttons.c -- draw buttons, e.g., OK/Cancel + * + * Copyright 2000-2007,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + */ + +#include <dialog.h> +#include <dlg_keys.h> + +#ifdef NEED_WCHAR_H +#include <wchar.h> +#endif + +#define MIN_BUTTON (dialog_state.visit_items ? -1 : 0) + +static void +center_label(char *buffer, int longest, const char *label) +{ + int len = dlg_count_columns(label); + int left = 0, right = 0; + + *buffer = 0; + if (len < longest) { + left = (longest - len) / 2; + right = (longest - len - left); + if (left > 0) + sprintf(buffer, "%*s", left, " "); + } + strcat(buffer, label); + if (right > 0) + sprintf(buffer + strlen(buffer), "%*s", right, " "); +} + +/* + * Parse a multibyte character out of the string, set it past the parsed + * character. + */ +static int +string_to_char(const char **stringp) +{ + int result; +#ifdef USE_WIDE_CURSES + const char *string = *stringp; + size_t have = strlen(string); + size_t check; + size_t len; + wchar_t cmp2[2]; + mbstate_t state; + + memset(&state, 0, sizeof(state)); + len = mbrlen(string, have, &state); + if ((int) len > 0 && len <= have) { + memset(&state, 0, sizeof(state)); + memset(cmp2, 0, sizeof(cmp2)); + check = mbrtowc(cmp2, string, len, &state); + if ((int) check <= 0) + cmp2[0] = 0; + *stringp += len; + } else { + cmp2[0] = UCH(*string); + *stringp += 1; + } + result = cmp2[0]; +#else + const char *string = *stringp; + result = UCH(*string); + *stringp += 1; +#endif + return result; +} + +/* + * Print a button + */ +static void +print_button(WINDOW *win, char *label, int y, int x, int selected) +{ + int i; + int state = 0; + const int *indx = dlg_index_wchars(label); + int limit = dlg_count_wchars(label); + chtype key_attr = (selected + ? button_key_active_attr + : button_key_inactive_attr); + chtype label_attr = (selected + ? button_label_active_attr + : button_label_inactive_attr); + + (void) wmove(win, y, x); + wattrset(win, selected + ? button_active_attr + : button_inactive_attr); + (void) waddstr(win, "<"); + wattrset(win, label_attr); + for (i = 0; i < limit; ++i) { + int first = indx[i]; + int last = indx[i + 1]; + + switch (state) { + case 0: +#ifdef USE_WIDE_CURSES + if ((last - first) != 1) { + const char *temp = (label + first); + int cmp = string_to_char(&temp); + if (dlg_isupper(cmp)) { + wattrset(win, key_attr); + state = 1; + } + break; + } +#endif + if (dlg_isupper(UCH(label[first]))) { + wattrset(win, key_attr); + state = 1; + } + break; + case 1: + wattrset(win, label_attr); + state = 2; + break; + } + waddnstr(win, label + first, last - first); + } + wattrset(win, selected + ? button_active_attr + : button_inactive_attr); + (void) waddstr(win, ">"); + (void) wmove(win, y, x + ((int) strspn(label, " ")) + 1); +} + +/* + * Count the buttons in the list. + */ +int +dlg_button_count(const char **labels) +{ + int result = 0; + while (*labels++ != 0) + ++result; + return result; +} + +/* + * Compute the size of the button array in columns. Return the total number of + * columns in *length, and the longest button's columns in *longest + */ +void +dlg_button_sizes(const char **labels, + int vertical, + int *longest, + int *length) +{ + int n; + + *length = 0; + *longest = 0; + for (n = 0; labels[n] != 0; n++) { + if (vertical) { + *length += 1; + *longest = 1; + } else { + int len = dlg_count_columns(labels[n]); + if (len > *longest) + *longest = len; + *length += len; + } + } + /* + * If we can, make all of the buttons the same size. This is only optional + * for buttons laid out horizontally. + */ + if (*longest < 6 - (*longest & 1)) + *longest = 6 - (*longest & 1); + if (!vertical) + *length = *longest * n; +} + +/* + * Compute the size of the button array. + */ +int +dlg_button_x_step(const char **labels, int limit, int *gap, int *margin, int *step) +{ + int count = dlg_button_count(labels); + int longest; + int length; + int unused; + int used; + + if (count == 0) + return 0; + dlg_button_sizes(labels, FALSE, &longest, &length); + used = (length + (count * 2)); + unused = limit - used; + + if ((*gap = unused / (count + 3)) <= 0) { + if ((*gap = unused / (count + 1)) <= 0) + *gap = 1; + *margin = *gap; + } else { + *margin = *gap * 2; + } + *step = *gap + (used + count - 1) / count; + return (*gap > 0) && (unused >= 0); +} + +/* + * Make sure there is enough space for the buttons + */ +void +dlg_button_layout(const char **labels, int *limit) +{ + int width = 1; + int gap, margin, step; + + if (labels != 0 && dlg_button_count(labels)) { + while (!dlg_button_x_step(labels, width, &gap, &margin, &step)) + ++width; + width += (4 * MARGIN); + if (width > COLS) + width = COLS; + if (width > *limit) + *limit = width; + } +} + +/* + * Print a list of buttons at the given position. + */ +void +dlg_draw_buttons(WINDOW *win, + int y, int x, + const char **labels, + int selected, + int vertical, + int limit) +{ + chtype save = getattrs(win); + int n; + int step = 0; + int length; + int longest; + int final_x; + int final_y; + int gap; + int margin; + size_t need; + char *buffer; + + dlg_mouse_setbase(getbegx(win), getbegy(win)); + + getyx(win, final_y, final_x); + + dlg_button_sizes(labels, vertical, &longest, &length); + + if (vertical) { + y += 1; + step = 1; + } else { + dlg_button_x_step(labels, limit, &gap, &margin, &step); + x += margin; + } + + /* + * Allocate a buffer big enough for any label. + */ + need = (size_t) longest; + for (n = 0; labels[n] != 0; ++n) { + need += strlen(labels[n]) + 1; + } + buffer = dlg_malloc(char, need); + assert_ptr(buffer, "dlg_draw_buttons"); + + /* + * Draw the labels. + */ + for (n = 0; labels[n] != 0; n++) { + center_label(buffer, longest, labels[n]); + mouse_mkbutton(y, x, dlg_count_columns(buffer), n); + print_button(win, buffer, y, x, + (selected == n) || (n == 0 && selected < 0)); + if (selected == n) + getyx(win, final_y, final_x); + + if (vertical) { + if ((y += step) > limit) + break; + } else { + if ((x += step) > limit) + break; + } + } + (void) wmove(win, final_y, final_x); + wrefresh(win); + free(buffer); + wattrset(win, save); +} + +/* + * Match a given character against the beginning of the string, ignoring case + * of the given character. The matching string must begin with an uppercase + * character. + */ +int +dlg_match_char(int ch, const char *string) +{ + if (string != 0) { + int cmp2 = string_to_char(&string); +#ifdef USE_WIDE_CURSES + wint_t cmp1 = dlg_toupper(ch); + if (cmp2 != 0 && (wchar_t) cmp1 == (wchar_t) dlg_toupper(cmp2)) { + return TRUE; + } +#else + if (ch > 0 && ch < 256) { + if (dlg_toupper(ch) == dlg_toupper(cmp2)) + return TRUE; + } +#endif + } + return FALSE; +} + +/* + * Find the first uppercase character in the label, which we may use for an + * abbreviation. + */ +int +dlg_button_to_char(const char *label) +{ + int cmp = -1; + + while (*label != 0) { + cmp = string_to_char(&label); + if (dlg_isupper(cmp)) { + break; + } + } + return cmp; +} + +/* + * Given a list of button labels, and a character which may be the abbreviation + * for one, find it, if it exists. An abbreviation will be the first character + * which happens to be capitalized in the label. + */ +int +dlg_char_to_button(int ch, const char **labels) +{ + if (labels != 0) { + int j; + + ch = (int) dlg_toupper(dlg_last_getc()); + for (j = 0; labels[j] != 0; ++j) { + int cmp = dlg_button_to_char(labels[j]); + if (ch == cmp) { + dlg_flush_getc(); + return j; + } + } + } + return DLG_EXIT_UNKNOWN; +} + +static const char * +my_yes_label(void) +{ + return (dialog_vars.yes_label != NULL) + ? dialog_vars.yes_label + : _("Yes"); +} + +static const char * +my_no_label(void) +{ + return (dialog_vars.no_label != NULL) + ? dialog_vars.no_label + : _("No"); +} + +static const char * +my_ok_label(void) +{ + return (dialog_vars.ok_label != NULL) + ? dialog_vars.ok_label + : _("OK"); +} + +static const char * +my_cancel_label(void) +{ + return (dialog_vars.cancel_label != NULL) + ? dialog_vars.cancel_label + : _("Cancel"); +} + +static const char * +my_exit_label(void) +{ + return (dialog_vars.exit_label != NULL) + ? dialog_vars.exit_label + : _("EXIT"); +} + +static const char * +my_extra_label(void) +{ + return (dialog_vars.extra_label != NULL) + ? dialog_vars.extra_label + : _("Extra"); +} + +static const char * +my_help_label(void) +{ + return (dialog_vars.help_label != NULL) + ? dialog_vars.help_label + : _("Help"); +} + +/* + * Return a list of button labels. + */ +const char ** +dlg_exit_label(void) +{ + const char **result; + + if (dialog_vars.extra_button) { + result = dlg_ok_labels(); + } else { + static const char *labels[3]; + int n = 0; + + labels[n++] = my_exit_label(); + if (dialog_vars.help_button) + labels[n++] = my_help_label(); + labels[n] = 0; + + result = labels; + } + return result; +} + +/* + * Map the given button index for dlg_exit_label() into our exit-code. + */ +int +dlg_exit_buttoncode(int button) +{ + int result = DLG_EXIT_ERROR; + + if (dialog_vars.extra_button) { + result = dlg_ok_buttoncode(button); + } else if (button == 0) { + result = DLG_EXIT_OK; + } else if (button == 1 && dialog_vars.help_button) { + result = DLG_EXIT_HELP; + } + return result; +} + +const char ** +dlg_ok_label(void) +{ + static const char *labels[3]; + int n = 0; + + labels[n++] = my_ok_label(); + if (dialog_vars.help_button) + labels[n++] = my_help_label(); + labels[n] = 0; + return labels; +} + +/* + * Return a list of button labels for the OK/Cancel group. + */ +const char ** +dlg_ok_labels(void) +{ + static const char *labels[5]; + int n = 0; + + if (!dialog_vars.nook) + labels[n++] = my_ok_label(); + if (dialog_vars.extra_button) + labels[n++] = my_extra_label(); + if (!dialog_vars.nocancel) + labels[n++] = my_cancel_label(); + if (dialog_vars.help_button) + labels[n++] = my_help_label(); + labels[n] = 0; + return labels; +} + +/* + * Map the given button index for dlg_ok_labels() into our exit-code + */ +int +dlg_ok_buttoncode(int button) +{ + int result = DLG_EXIT_ERROR; + int n = !dialog_vars.nook; + + if (!dialog_vars.nook && (button <= 0)) { + result = DLG_EXIT_OK; + } else if (dialog_vars.extra_button && (button == n++)) { + result = DLG_EXIT_EXTRA; + } else if (!dialog_vars.nocancel && (button == n++)) { + result = DLG_EXIT_CANCEL; + } else if (dialog_vars.help_button && (button == n)) { + result = DLG_EXIT_HELP; + } + return result; +} + +/* + * Given that we're using dlg_ok_labels() to list buttons, find the next index + * in the list of buttons. The 'extra' parameter if negative provides a way to + * enumerate extra active areas on the widget. + */ +int +dlg_next_ok_buttonindex(int current, int extra) +{ + int result = current + 1; + + if (current >= 0 + && dlg_ok_buttoncode(result) < 0) + result = extra; + return result; +} + +/* + * Similarly, find the previous button index. + */ +int +dlg_prev_ok_buttonindex(int current, int extra) +{ + int result = current - 1; + + if (result < extra) { + for (result = 0; dlg_ok_buttoncode(result + 1) >= 0; ++result) { + ; + } + } + return result; +} + +/* + * Find the button-index for the "OK" or "Cancel" button, according to + * whether --defaultno is given. If --nocancel was given, we always return + * the index for "OK". + */ +int +dlg_defaultno_button(void) +{ + int result = 0; + + if (dialog_vars.defaultno && !dialog_vars.nocancel) { + while (dlg_ok_buttoncode(result) != DLG_EXIT_CANCEL) + ++result; + } + return result; +} + +/* + * Return a list of buttons for Yes/No labels. + */ +const char ** +dlg_yes_labels(void) +{ + const char **result; + + if (dialog_vars.extra_button) { + result = dlg_ok_labels(); + } else { + static const char *labels[4]; + int n = 0; + + labels[n++] = my_yes_label(); + labels[n++] = my_no_label(); + if (dialog_vars.help_button) + labels[n++] = my_help_label(); + labels[n] = 0; + + result = labels; + } + + return result; +} + +/* + * Map the given button index for dlg_yes_labels() into our exit-code. + */ +int +dlg_yes_buttoncode(int button) +{ + int result = DLG_EXIT_ERROR; + + if (dialog_vars.extra_button) { + result = dlg_ok_buttoncode(button); + } else if (button == 0) { + result = DLG_EXIT_OK; + } else if (button == 1) { + result = DLG_EXIT_CANCEL; + } else if (button == 2 && dialog_vars.help_button) { + result = DLG_EXIT_HELP; + } + + return result; +} + +/* + * Return the next index in labels[]; + */ +int +dlg_next_button(const char **labels, int button) +{ + if (labels[button + 1] != 0) + ++button; + else + button = MIN_BUTTON; + return button; +} + +/* + * Return the previous index in labels[]; + */ +int +dlg_prev_button(const char **labels, int button) +{ + if (button > MIN_BUTTON) + --button; + else { + while (labels[button + 1] != 0) + ++button; + } + return button; +} Index: contrib/dialog/trace.c =================================================================== --- contrib/dialog/trace.c (revision 0) +++ contrib/dialog/trace.c (revision 0) @@ -0,0 +1,156 @@ +/* + * $Id: trace.c,v 1.11 2010/01/17 15:36:26 tom Exp $ + * + * trace.c -- implements screen-dump and keystroke-logging + * + * Copyright 2007-2008,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + */ + +#include <dialog.h> + +#ifdef HAVE_DLG_TRACE + +#include <dlg_keys.h> +#include <time.h> + +#define myFP dialog_state.trace_output + +void +dlg_trace_msg(const char *fmt,...) +{ + if (myFP != 0) { + va_list ap; + va_start(ap, fmt); + vfprintf(myFP, fmt, ap); + va_end(ap); + fflush(myFP); + } +} + +void +dlg_trace_win(WINDOW *win) +{ + if (myFP != 0) { + int y, x; + int j, k; + int rc = getmaxy(win); + int cc = getmaxx(win); + chtype ch, c2; + + fprintf(myFP, "window %dx%d at %d,%d\n", + rc, cc, getbegy(win), getbegx(win)); + + getyx(win, y, x); + for (j = 0; j < rc; ++j) { + fprintf(myFP, "%3d:", j); + for (k = 0; k < cc; ++k) { + ch = mvwinch(win, j, k) & (A_CHARTEXT | A_ALTCHARSET); + c2 = dlg_asciibox(ch); + if (c2 != 0) { + ch = c2; + } else if (unctrl(ch) == 0 || strlen(unctrl(ch)) > 1) { + ch = '.'; + } + fputc((int) (ch & 0xff), myFP); + } + fputc('\n', myFP); + } + wmove(win, y, x); + fflush(myFP); + } +} + +void +dlg_trace_chr(int ch, int fkey) +{ + if (myFP != 0) { + const char *fkey_name = "?"; + if (fkey) { + if (fkey > KEY_MAX || (fkey_name = keyname(fkey)) == 0) { +#define CASE(name) case name: fkey_name = #name; break + switch ((DLG_KEYS_ENUM) fkey) { + CASE(DLGK_MIN); + CASE(DLGK_OK); + CASE(DLGK_CANCEL); + CASE(DLGK_EXTRA); + CASE(DLGK_HELP); + CASE(DLGK_ESC); + CASE(DLGK_PAGE_FIRST); + CASE(DLGK_PAGE_LAST); + CASE(DLGK_PAGE_NEXT); + CASE(DLGK_PAGE_PREV); + CASE(DLGK_ITEM_FIRST); + CASE(DLGK_ITEM_LAST); + CASE(DLGK_ITEM_NEXT); + CASE(DLGK_ITEM_PREV); + CASE(DLGK_FIELD_FIRST); + CASE(DLGK_FIELD_LAST); + CASE(DLGK_FIELD_NEXT); + CASE(DLGK_FIELD_PREV); + CASE(DLGK_GRID_UP); + CASE(DLGK_GRID_DOWN); + CASE(DLGK_GRID_LEFT); + CASE(DLGK_GRID_RIGHT); + CASE(DLGK_DELETE_LEFT); + CASE(DLGK_DELETE_RIGHT); + CASE(DLGK_DELETE_ALL); + CASE(DLGK_ENTER); + CASE(DLGK_BEGIN); + CASE(DLGK_FINAL); + CASE(DLGK_SELECT); + CASE(DLGK_TRACE); + } + } + } else { + fkey_name = unctrl((chtype) ch); + if (fkey_name == 0) + fkey_name = "UNKNOWN"; + } + fprintf(myFP, "chr %s (ch=%#x, fkey=%d)\n", + fkey_name, + ch, fkey); + fflush(myFP); + } +} + +void +dlg_trace(const char *fname) +{ + if (fname != 0) { + if (myFP == 0) { + myFP = fopen(fname, "a"); + if (myFP != 0) { + time_t now = time((time_t *) 0); + fprintf(myFP, "** opened at %s", ctime(&now)); + } + } + } else if (myFP != 0) { + time_t now = time((time_t *) 0); + fprintf(myFP, "** closed at %s", ctime(&now)); + fclose(myFP); + myFP = 0; + } +} +#else +#undef dlg_trace +extern void dlg_trace(const char *); +void +dlg_trace(const char *fname) +{ + (void) fname; +} +#endif Index: contrib/dialog/dialog.c =================================================================== --- contrib/dialog/dialog.c (revision 0) +++ contrib/dialog/dialog.c (revision 0) @@ -0,0 +1,1710 @@ +/* + * $Id: dialog.c,v 1.177 2010/01/18 09:21:14 tom Exp $ + * + * cdialog - Display simple dialog boxes from shell scripts + * + * Copyright 2000-2008,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + * + * An earlier version of this program lists as authors + * Savio Lam (lam836@cs.cuhk.hk) + */ + +#include <dialog.h> +#include <string.h> +#include <sys/types.h> +#include <sys/stat.h> + +#ifdef HAVE_SETLOCALE +#include <locale.h> +#endif + +#define PASSARGS t, av, offset_add +#define CALLARGS const char *t, char *av[], int *offset_add +typedef int (callerFn) (CALLARGS); + +typedef enum { + o_unknown = 0 + ,o_allow_close + ,o_and_widget + ,o_ascii_lines + ,o_aspect + ,o_auto_placement + ,o_backtitle + ,o_beep + ,o_beep_after + ,o_begin + ,o_calendar + ,o_cancel_label + ,o_checklist + ,o_clear + ,o_colors + ,o_column_separator + ,o_cr_wrap + ,o_create_rc + ,o_date_format + ,o_default_item + ,o_defaultno + ,o_dselect + ,o_editbox + ,o_exit_label + ,o_extra_button + ,o_extra_label + ,o_fixed_font + ,o_form + ,o_fselect + ,o_fullbutton + ,o_gauge + ,o_help + ,o_help_button + ,o_help_label + ,o_help_status + ,o_icon + ,o_ignore + ,o_infobox + ,o_input_fd + ,o_inputbox + ,o_inputmenu + ,o_insecure + ,o_item_help + ,o_keep_colors + ,o_keep_tite + ,o_keep_window + ,o_max_input + ,o_menu + ,o_mixedform + ,o_mixedgauge + ,o_msgbox + ,o_no_close + ,o_no_collapse + ,o_no_cr_wrap + ,o_no_kill + ,o_no_label + ,o_no_lines + ,o_no_shadow + ,o_nocancel + ,o_noitem + ,o_nook + ,o_ok_label + ,o_output_fd + ,o_output_separator + ,o_passwordbox + ,o_passwordform + ,o_pause + ,o_print_maxsize + ,o_print_size + ,o_print_version + ,o_progressbox + ,o_quoted + ,o_radiolist + ,o_screen_center + ,o_scrollbar + ,o_separate_output + ,o_separate_widget + ,o_separator + ,o_shadow + ,o_single_quoted + ,o_size_err + ,o_sleep + ,o_smooth + ,o_stderr + ,o_stdout + ,o_tab_correct + ,o_tab_len + ,o_tailbox + ,o_tailboxbg + ,o_textbox + ,o_time_format + ,o_timebox + ,o_timeout + ,o_title + ,o_trim + ,o_under_mouse + ,o_visit_items + ,o_wmclass + ,o_yes_label + ,o_yesno +#ifdef HAVE_DLG_TRACE + ,o_trace +#endif +} eOptions; + +/* + * The bits in 'pass' are used to decide which options are applicable at + * different stages in the program: + * 1 flags before widgets + * 2 widgets + * 4 non-widget options + */ +typedef struct { + const char *name; + eOptions code; + int pass; /* 1,2,4 or combination */ + const char *help; /* NULL to suppress, non-empty to display params */ +} Options; + +typedef struct { + eOptions code; + int argmin, argmax; + callerFn *jumper; +} Mode; + +static bool *dialog_opts; +static char **dialog_argv; + +static bool ignore_unknown = FALSE; + +static const char *program = "dialog"; + +/* + * The options[] table is organized this way to make it simple to maintain + * a sorted list of options for the help-message. + */ +/* *INDENT-OFF* */ +static const Options options[] = { + { "allow-close", o_allow_close, 1, NULL }, + { "and-widget", o_and_widget, 4, NULL }, + { "ascii-lines", o_ascii_lines, 1, "" }, + { "aspect", o_aspect, 1, "<ratio>" }, + { "auto-placement", o_auto_placement, 1, NULL }, + { "backtitle", o_backtitle, 1, "<backtitle>" }, + { "beep", o_beep, 1, NULL }, + { "beep-after", o_beep_after, 1, NULL }, + { "begin", o_begin, 1, "<y> <x>" }, + { "calendar", o_calendar, 2, "<text> <height> <width> <day> <month> <year>" }, + { "cancel-label", o_cancel_label, 1, "<str>" }, + { "checklist", o_checklist, 2, "<text> <height> <width> <list height> <tag1> <item1> <status1>..." }, + { "clear", o_clear, 1, "" }, + { "colors", o_colors, 1, "" }, + { "column-separator",o_column_separator, 1, "<str>" }, + { "cr-wrap", o_cr_wrap, 1, "" }, + { "create-rc", o_create_rc, 1, NULL }, + { "date-format", o_date_format, 1, "<str>" }, + { "default-item", o_default_item, 1, "<str>" }, + { "defaultno", o_defaultno, 1, "" }, + { "dselect", o_dselect, 2, "<directory> <height> <width>" }, + { "editbox", o_editbox, 2, "<file> <height> <width>" }, + { "exit-label", o_exit_label, 1, "<str>" }, + { "extra-button", o_extra_button, 1, "" }, + { "extra-label", o_extra_label, 1, "<str>" }, + { "fb", o_fullbutton, 1, NULL }, + { "fixed-font", o_fixed_font, 1, NULL }, + { "form", o_form, 2, "<text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1>..." }, + { "fselect", o_fselect, 2, "<filepath> <height> <width>" }, + { "fullbutton", o_fullbutton, 1, NULL }, + { "gauge", o_gauge, 2, "<text> <height> <width> [<percent>]" }, + { "guage", o_gauge, 2, NULL }, + { "help", o_help, 4, "" }, + { "help-button", o_help_button, 1, "" }, + { "help-label", o_help_label, 1, "<str>" }, + { "help-status", o_help_status, 1, "" }, + { "icon", o_icon, 1, NULL }, + { "ignore", o_ignore, 1, "" }, + { "infobox", o_infobox, 2, "<text> <height> <width>" }, + { "input-fd", o_input_fd, 1, "<fd>" }, + { "inputbox", o_inputbox, 2, "<text> <height> <width> [<init>]" }, + { "inputmenu", o_inputmenu, 2, "<text> <height> <width> <menu height> <tag1> <item1>..." }, + { "insecure", o_insecure, 1, "" }, + { "item-help", o_item_help, 1, "" }, + { "keep-colors", o_keep_colors, 1, NULL }, + { "keep-tite", o_keep_tite, 1, "" }, + { "keep-window", o_keep_window, 1, "" }, + { "max-input", o_max_input, 1, "<n>" }, + { "menu", o_menu, 2, "<text> <height> <width> <menu height> <tag1> <item1>..." }, + { "mixedform", o_mixedform, 2, "<text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1> <itype>..." }, + { "mixedgauge", o_mixedgauge, 2, "<text> <height> <width> <percent> <tag1> <item1>..." }, + { "msgbox", o_msgbox, 2, "<text> <height> <width>" }, + { "no-cancel", o_nocancel, 1, "" }, + { "no-close", o_no_close, 1, NULL }, + { "no-collapse", o_no_collapse, 1, "" }, + { "no-cr-wrap", o_no_cr_wrap, 1, NULL }, + { "no-kill", o_no_kill, 1, "" }, + { "no-label", o_no_label, 1, "<str>" }, + { "no-lines", o_no_lines, 1, "" }, + { "no-ok", o_nook, 1, "" }, + { "no-shadow", o_no_shadow, 1, "" }, + { "nocancel", o_nocancel, 1, NULL }, /* see --no-cancel */ + { "noitem", o_noitem, 1, NULL }, + { "nook", o_nook, 1, "" }, /* See no-ok */ + { "ok-label", o_ok_label, 1, "<str>" }, + { "output-fd", o_output_fd, 1, "<fd>" }, + { "output-separator",o_output_separator, 1, "<str>" }, + { "passwordbox", o_passwordbox, 2, "<text> <height> <width> [<init>]" }, + { "passwordform", o_passwordform, 2, "<text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1>..." }, + { "pause", o_pause, 2, "<text> <height> <width> <seconds>" }, + { "print-maxsize", o_print_maxsize, 1, "" }, + { "print-size", o_print_size, 1, "" }, + { "print-version", o_print_version, 5, "" }, + { "progressbox", o_progressbox, 2, "<height> <width>" }, + { "quoted", o_quoted, 1, "" }, + { "radiolist", o_radiolist, 2, "<text> <height> <width> <list height> <tag1> <item1> <status1>..." }, + { "screen-center", o_screen_center, 1, NULL }, + { "scrollbar", o_scrollbar, 1, "" }, + { "separate-output",o_separate_output, 1, "" }, + { "separate-widget",o_separate_widget, 1, "<str>" }, + { "separator", o_separator, 1, NULL }, + { "shadow", o_shadow, 1, "" }, + { "single-quoted", o_single_quoted, 1, "" }, + { "size-err", o_size_err, 1, "" }, + { "sleep", o_sleep, 1, "<secs>" }, + { "smooth", o_smooth, 1, NULL }, + { "stderr", o_stderr, 1, "" }, + { "stdout", o_stdout, 1, "" }, + { "tab-correct", o_tab_correct, 1, "" }, + { "tab-len", o_tab_len, 1, "<n>" }, + { "tailbox", o_tailbox, 2, "<file> <height> <width>" }, + { "tailboxbg", o_tailboxbg, 2, "<file> <height> <width>" }, + { "textbox", o_textbox, 2, "<file> <height> <width>" }, + { "time-format", o_time_format, 1, "<str>" }, + { "timebox", o_timebox, 2, "<text> <height> <width> <hour> <minute> <second>" }, + { "timeout", o_timeout, 1, "<secs>" }, + { "title", o_title, 1, "<title>" }, + { "trim", o_trim, 1, "" }, + { "under-mouse", o_under_mouse, 1, NULL }, + { "version", o_print_version, 5, "" }, + { "visit-items", o_visit_items, 1, "" }, + { "wmclass", o_wmclass, 1, NULL }, + { "yes-label", o_yes_label, 1, "<str>" }, + { "yesno", o_yesno, 2, "<text> <height> <width>" }, +#ifdef HAVE_DLG_TRACE + { "trace", o_trace, 1, "<file>" }, +#endif +}; +/* *INDENT-ON* */ + +/* + * Convert a string to an argv[], returning a char** index (which must be + * freed by the caller). The string is modified (replacing gaps between + * tokens with nulls). + */ +static char ** +string_to_argv(char *blob) +{ + size_t n; + int pass; + size_t length = strlen(blob); + char **result = 0; + + for (pass = 0; pass < 2; ++pass) { + bool inparm = FALSE; + bool quoted = FALSE; + char *param = blob; + size_t count = 0; + + for (n = 0; n < length; ++n) { + if (quoted && blob[n] == '"') { + quoted = FALSE; + } else if (blob[n] == '"') { + quoted = TRUE; + if (!inparm) { + if (pass) + result[count] = param; + ++count; + inparm = TRUE; + } + } else if (blob[n] == '\\') { + if (quoted && !isspace(UCH(blob[n + 1]))) { + if (!inparm) { + if (pass) + result[count] = param; + ++count; + inparm = TRUE; + } + if (pass) { + *param++ = blob[n]; + *param++ = blob[n + 1]; + } + } + ++n; + } else if (!quoted && isspace(UCH(blob[n]))) { + inparm = FALSE; + if (pass) { + *param++ = '\0'; + } + } else { + if (!inparm) { + if (pass) + result[count] = param; + ++count; + inparm = TRUE; + } + if (pass) { + *param++ = blob[n]; + } + } + } + + if (!pass) { + if (count) { + result = dlg_calloc(char *, count + 1); + assert_ptr(result, "string_to_argv"); + } else { + break; /* no tokens found */ + } + } else { + *param = '\0'; + } + } + return result; +} + +/* + * Count the entries in an argv list. + */ +static int +count_argv(char **argv) +{ + int result = 0; + + if (argv != 0) { + while (argv[result] != 0) + ++result; + } + return result; +} + +static int +eat_argv(int *argcp, char ***argvp, int start, int count) +{ + int k; + + *argcp -= count; + for (k = start; k <= *argcp; k++) + (*argvp)[k] = (*argvp)[k + count]; + (*argvp)[*argcp] = 0; + return TRUE; +} + +/* + * Make an array showing which argv[] entries are options. Use "--" as a + * special token to escape the next argument, allowing it to begin with "--". + * When we find a "--" argument, also remove it from argv[] and adjust argc. + * That appears to be an undocumented feature of the popt library. + * + * Also, if we see a "--file", expand it into the parameter list by reading the + * text from the given file and stripping quotes, treating whitespace outside + * quotes as a parameter delimiter. + * + * Finally, if we see a "--args", dump the current list of arguments to the + * standard error. This is used for debugging complex --file combinations. + */ +static void +unescape_argv(int *argcp, char ***argvp) +{ + int j, k; + int limit_includes = 20 + *argcp; + int count_includes = 0; + bool changed = FALSE; + bool doalloc = FALSE; + char *filename; + + dialog_opts = dlg_calloc(bool, (size_t) *argcp + 1); + assert_ptr(dialog_opts, "unescape_argv"); + + for (j = 1; j < *argcp; j++) { + bool escaped = FALSE; + if (!strcmp((*argvp)[j], "--")) { + escaped = TRUE; + changed = eat_argv(argcp, argvp, j, 1); + } else if (!strcmp((*argvp)[j], "--args")) { + fprintf(stderr, "Showing arguments at arg%d\n", j); + for (k = 0; k < *argcp; ++k) { + fprintf(stderr, " arg%d:%s\n", k, (*argvp)[k]); + } + changed = eat_argv(argcp, argvp, j, 1); + } else if (!strcmp((*argvp)[j], "--file")) { + if (++count_includes > limit_includes) + dlg_exiterr("Too many --file options"); + + if ((filename = (*argvp)[j + 1]) != 0) { + FILE *fp; + char **list; + char *blob; + int added; + size_t bytes_read; + size_t length; + int n; + + if (*filename == '&') { + fp = fdopen(atoi(filename + sizeof(char)), "r"); + } else { + fp = fopen(filename, "r"); + } + + if (fp) { + blob = NULL; + length = 0; + do { + blob = dlg_realloc(char, length + BUFSIZ + 1, blob); + assert_ptr(blob, "unescape_argv"); + bytes_read = fread(blob + length, + sizeof(char), + BUFSIZ, + fp); + length += bytes_read; + if (ferror(fp)) + dlg_exiterr("error on filehandle in unescape_argv"); + } while (bytes_read == BUFSIZ); + fclose(fp); + + blob[length] = '\0'; + + list = string_to_argv(blob); + if ((added = count_argv(list)) != 0) { + if (added > 2) { + size_t need = (size_t) (*argcp + added + 1); + if (doalloc) { + *argvp = dlg_realloc(char *, need, *argvp); + assert_ptr(*argvp, "unescape_argv"); + } else { + char **newp = dlg_malloc(char *, need); + assert_ptr(newp, "unescape_argv"); + for (n = 0; n < *argcp; ++n) { + newp[n] = (*argvp)[n]; + } + *argvp = newp; + doalloc = TRUE; + } + dialog_opts = dlg_realloc(bool, need, dialog_opts); + assert_ptr(dialog_opts, "unescape_argv"); + } + for (n = *argcp; n >= j + 2; --n) { + (*argvp)[n + added - 2] = (*argvp)[n]; + dialog_opts[n + added - 2] = dialog_opts[n]; + } + for (n = 0; n < added; ++n) { + (*argvp)[n + j] = list[n]; + dialog_opts[n + j] = FALSE; + } + *argcp += added - 2; + free(list); + } + } else { + dlg_exiterr("Cannot open --file %s", filename); + } + (*argvp)[*argcp] = 0; + ++j; + continue; + } else { + dlg_exiterr("No value given for --file"); + } + } + if (!escaped + && (*argvp)[j] != 0 + && !strncmp((*argvp)[j], "--", 2) + && isalpha(UCH((*argvp)[j][2]))) { + dialog_opts[j] = TRUE; + } + } + + /* if we didn't find any "--" tokens, there's no reason to do the table + * lookup in isOption() + */ + if (!changed) { + free(dialog_opts); + dialog_opts = 0; + } + dialog_argv = (*argvp); +} + +/* + * Check if the given string from main's argv is an option. + */ +static bool +isOption(const char *arg) +{ + bool result = FALSE; + + if (arg != 0) { + if (dialog_opts != 0) { + int n; + for (n = 1; dialog_argv[n] != 0; ++n) { + if (dialog_argv[n] == arg) { + result = dialog_opts[n]; + break; + } + } + } else if (!strncmp(arg, "--", 2) && isalpha(UCH(arg[2]))) { + result = TRUE; + } + } + return result; +} + +static eOptions +lookupOption(const char *name, int pass) +{ + unsigned n; + + if (isOption(name)) { + name += 2; + for (n = 0; n < sizeof(options) / sizeof(options[0]); n++) { + if ((pass & options[n].pass) != 0 + && !strcmp(name, options[n].name)) { + return options[n].code; + } + } + } + return o_unknown; +} + +static void +Usage(const char *msg) +{ + dlg_exiterr("Error: %s.\nUse --help to list options.\n\n", msg); +} + +/* + * Count arguments, stopping at the end of the argument list, or on any of our + * "--" tokens. + */ +static int +arg_rest(char *argv[]) +{ + int i = 1; /* argv[0] points to a "--" token */ + + while (argv[i] != 0 + && (!isOption(argv[i]) || lookupOption(argv[i], 7) == o_unknown)) + i++; + return i; +} + +/* + * In MultiWidget this function is needed to count how many tags + * a widget (menu, checklist, radiolist) has + */ +static int +howmany_tags(char *argv[], int group) +{ + int result = 0; + int have; + const char *format = "Expected %d arguments, found only %d"; + char temp[80]; + + while (argv[0] != 0) { + if (isOption(argv[0])) + break; + if ((have = arg_rest(argv)) < group) { + sprintf(temp, format, group, have); + Usage(temp); + } + + argv += group; + result++; + } + + return result; +} + +static int +numeric_arg(char **av, int n) +{ + char *last = 0; + int result = strtol(av[n], &last, 10); + char msg[80]; + + if (last == 0 || *last != 0) { + sprintf(msg, "Expected a number for token %d of %.20s", n, av[0]); + Usage(msg); + } + return result; +} + +static char * +optional_str(char **av, int n, char *dft) +{ + char *ret = dft; + if (arg_rest(av) > n) + ret = av[n]; + return ret; +} + +#if defined(HAVE_DLG_GAUGE) || defined(HAVE_XDIALOG) +static int +optional_num(char **av, int n, int dft) +{ + int ret = dft; + if (arg_rest(av) > n) + ret = numeric_arg(av, n); + return ret; +} +#endif + +/* + * On AIX 4.x, we have to flush the output right away since there is a bug in + * the curses package which discards stdout even when we've used newterm to + * redirect output to /dev/tty. + */ +static int +show_result(int ret) +{ + bool either = FALSE; + + switch (ret) { + case DLG_EXIT_OK: + case DLG_EXIT_EXTRA: + case DLG_EXIT_HELP: + case DLG_EXIT_ITEM_HELP: + if ((dialog_state.output_count > 1) && !dialog_vars.separate_output) { + fputs((dialog_state.separate_str + ? dialog_state.separate_str + : DEFAULT_SEPARATE_STR), + dialog_state.output); + either = TRUE; + } + if (dialog_vars.input_result[0] != '\0') { + fputs(dialog_vars.input_result, dialog_state.output); + either = TRUE; + } + if (either) { + fflush(dialog_state.output); + } + break; + } + return ret; +} + +/* + * These are the widget callers. + */ + +static int +call_yesno(CALLARGS) +{ + *offset_add = 4; + return dialog_yesno(t, + av[1], + numeric_arg(av, 2), + numeric_arg(av, 3)); +} + +static int +call_msgbox(CALLARGS) +{ + *offset_add = 4; + return dialog_msgbox(t, + av[1], + numeric_arg(av, 2), + numeric_arg(av, 3), 1); +} + +static int +call_infobox(CALLARGS) +{ + *offset_add = 4; + return dialog_msgbox(t, + av[1], + numeric_arg(av, 2), + numeric_arg(av, 3), 0); +} + +static int +call_textbox(CALLARGS) +{ + *offset_add = 4; + return dialog_textbox(t, + av[1], + numeric_arg(av, 2), + numeric_arg(av, 3)); +} + +static int +call_menu(CALLARGS) +{ + int tags = howmany_tags(av + 5, MENUBOX_TAGS); + *offset_add = 5 + tags * MENUBOX_TAGS; + + return dialog_menu(t, + av[1], + numeric_arg(av, 2), + numeric_arg(av, 3), + numeric_arg(av, 4), + tags, av + 5); +} + +static int +call_inputmenu(CALLARGS) +{ + int tags = howmany_tags(av + 5, MENUBOX_TAGS); + + dialog_vars.input_menu = TRUE; + + if (dialog_vars.max_input == 0) + dialog_vars.max_input = MAX_LEN / 2; + + if (dialog_vars.extra_label == 0) + dialog_vars.extra_label = _("Rename"); + + dialog_vars.extra_button = TRUE; + + *offset_add = 5 + tags * MENUBOX_TAGS; + return dialog_menu(t, + av[1], + numeric_arg(av, 2), + numeric_arg(av, 3), + numeric_arg(av, 4), + tags, av + 5); +} + +static int +call_checklist(CALLARGS) +{ + int tags = howmany_tags(av + 5, CHECKBOX_TAGS); + int code; + bool save_quoted = dialog_vars.quoted; + + dialog_vars.quoted = !dialog_vars.separate_output; + *offset_add = 5 + tags * CHECKBOX_TAGS; + code = dialog_checklist(t, + av[1], + numeric_arg(av, 2), + numeric_arg(av, 3), + numeric_arg(av, 4), + tags, av + 5, FLAG_CHECK); + dialog_vars.quoted = save_quoted; + return code; +} + +static int +call_radiolist(CALLARGS) +{ + int tags = howmany_tags(av + 5, CHECKBOX_TAGS); + *offset_add = 5 + tags * CHECKBOX_TAGS; + return dialog_checklist(t, + av[1], + numeric_arg(av, 2), + numeric_arg(av, 3), + numeric_arg(av, 4), + tags, av + 5, FLAG_RADIO); +} + +static int +call_inputbox(CALLARGS) +{ + *offset_add = arg_rest(av); + return dialog_inputbox(t, + av[1], + numeric_arg(av, 2), + numeric_arg(av, 3), + optional_str(av, 4, 0), 0); +} + +static int +call_passwordbox(CALLARGS) +{ + *offset_add = arg_rest(av); + return dialog_inputbox(t, + av[1], + numeric_arg(av, 2), + numeric_arg(av, 3), + optional_str(av, 4, 0), 1); +} + +#ifdef HAVE_XDIALOG +static int +call_calendar(CALLARGS) +{ + *offset_add = arg_rest(av); + return dialog_calendar(t, + av[1], + numeric_arg(av, 2), + numeric_arg(av, 3), + optional_num(av, 4, -1), + optional_num(av, 5, -1), + optional_num(av, 6, -1)); +} + +static int +call_dselect(CALLARGS) +{ + *offset_add = arg_rest(av); + return dialog_dselect(t, + av[1], + numeric_arg(av, 2), + numeric_arg(av, 3)); +} + +static int +call_editbox(CALLARGS) +{ + *offset_add = 4; + return dialog_editbox(t, + av[1], + numeric_arg(av, 2), + numeric_arg(av, 3)); +} + +static int +call_fselect(CALLARGS) +{ + *offset_add = arg_rest(av); + return dialog_fselect(t, + av[1], + numeric_arg(av, 2), + numeric_arg(av, 3)); +} + +static int +call_timebox(CALLARGS) +{ + *offset_add = arg_rest(av); + return dialog_timebox(t, + av[1], + numeric_arg(av, 2), + numeric_arg(av, 3), + optional_num(av, 4, -1), + optional_num(av, 5, -1), + optional_num(av, 6, -1)); +} +#endif /* HAVE_XDIALOG */ + +#ifdef HAVE_DLG_FORMBOX +static int +call_form(CALLARGS) +{ + int group = FORMBOX_TAGS; + int tags = howmany_tags(av + 5, group); + *offset_add = 5 + tags * group; + + return dialog_form(t, + av[1], + numeric_arg(av, 2), + numeric_arg(av, 3), + numeric_arg(av, 4), + tags, av + 5); +} + +static int +call_password_form(CALLARGS) +{ + unsigned save = dialog_vars.formitem_type; + int result; + + dialog_vars.formitem_type = 1; + result = call_form(PASSARGS); + dialog_vars.formitem_type = save; + + return result; +} +#endif /* HAVE_DLG_FORMBOX */ + +#ifdef HAVE_DLG_MIXEDFORM +static int +call_mixed_form(CALLARGS) +{ + int group = MIXEDFORM_TAGS; + int tags = howmany_tags(av + 5, group); + *offset_add = 5 + tags * group; + + return dialog_mixedform(t, + av[1], + numeric_arg(av, 2), + numeric_arg(av, 3), + numeric_arg(av, 4), + tags, av + 5); +} +#endif /* HAVE_DLG_MIXEDFORM */ + +#ifdef HAVE_DLG_GAUGE +static int +call_gauge(CALLARGS) +{ + *offset_add = arg_rest(av); + return dialog_gauge(t, + av[1], + numeric_arg(av, 2), + numeric_arg(av, 3), + optional_num(av, 4, 0)); +} + +static int +call_pause(CALLARGS) +{ + *offset_add = arg_rest(av); + return dialog_pause(t, + av[1], + numeric_arg(av, 2), + numeric_arg(av, 3), + numeric_arg(av, 4)); +} +#endif + +#ifdef HAVE_MIXEDGAUGE +static int +call_mixed_gauge(CALLARGS) +{ +#define MIXEDGAUGE_BASE 5 + int tags = howmany_tags(av + MIXEDGAUGE_BASE, MIXEDGAUGE_TAGS); + *offset_add = MIXEDGAUGE_BASE + tags * MIXEDGAUGE_TAGS; + return dialog_mixedgauge(t, + av[1], + numeric_arg(av, 2), + numeric_arg(av, 3), + numeric_arg(av, 4), + tags, av + MIXEDGAUGE_BASE); +} +#endif + +#ifdef HAVE_DLG_GAUGE +static int +call_progressbox(CALLARGS) +{ + *offset_add = arg_rest(av); + /* the original version does not accept a prompt string, but for + * consistency we allow it. + */ + return ((*offset_add == 4) + ? dialog_progressbox(t, + av[1], + numeric_arg(av, 2), + numeric_arg(av, 3)) + : dialog_progressbox(t, + "", + numeric_arg(av, 1), + numeric_arg(av, 2))); +} +#endif + +#ifdef HAVE_DLG_TAILBOX +static int +call_tailbox(CALLARGS) +{ + *offset_add = 4; + return dialog_tailbox(t, + av[1], + numeric_arg(av, 2), + numeric_arg(av, 3), + FALSE); +} + +static int +call_tailboxbg(CALLARGS) +{ + *offset_add = 4; + return dialog_tailbox(t, + av[1], + numeric_arg(av, 2), + numeric_arg(av, 3), + TRUE); +} +#endif +/* *INDENT-OFF* */ +static const Mode modes[] = +{ + {o_yesno, 4, 4, call_yesno}, + {o_msgbox, 4, 4, call_msgbox}, + {o_infobox, 4, 4, call_infobox}, + {o_textbox, 4, 4, call_textbox}, + {o_menu, 7, 0, call_menu}, + {o_inputmenu, 7, 0, call_inputmenu}, + {o_checklist, 8, 0, call_checklist}, + {o_radiolist, 8, 0, call_radiolist}, + {o_inputbox, 4, 5, call_inputbox}, + {o_passwordbox, 4, 5, call_passwordbox}, +#ifdef HAVE_DLG_GAUGE + {o_gauge, 4, 5, call_gauge}, + {o_pause, 5, 5, call_pause}, + {o_progressbox, 3, 4, call_progressbox}, +#endif +#ifdef HAVE_DLG_FORMBOX + {o_passwordform, 13, 0, call_password_form}, + {o_form, 13, 0, call_form}, +#endif +#ifdef HAVE_MIXEDGAUGE + {o_mixedgauge, MIXEDGAUGE_BASE, 0, call_mixed_gauge}, +#endif +#ifdef HAVE_DLG_MIXEDFORM + {o_mixedform, 13, 0, call_mixed_form}, +#endif +#ifdef HAVE_DLG_TAILBOX + {o_tailbox, 4, 4, call_tailbox}, + {o_tailboxbg, 4, 4, call_tailboxbg}, +#endif +#ifdef HAVE_XDIALOG + {o_calendar, 4, 7, call_calendar}, + {o_dselect, 4, 5, call_dselect}, + {o_editbox, 4, 4, call_editbox}, + {o_fselect, 4, 5, call_fselect}, + {o_timebox, 4, 7, call_timebox}, +#endif +}; +/* *INDENT-ON* */ + +static char * +optionString(char **argv, int *num) +{ + int next = *num + 1; + char *result = argv[next]; + if (result == 0) { + char temp[80]; + sprintf(temp, "Expected a string-parameter for %.20s", argv[*num]); + Usage(temp); + } + *num = next; + return result; +} + +static int +optionValue(char **argv, int *num) +{ + int next = *num + 1; + char *src = argv[next]; + char *tmp = 0; + int result = 0; + + if (src != 0) { + result = strtol(src, &tmp, 0); + if (tmp == 0 || *tmp != 0) + src = 0; + } + + if (src == 0) { + char temp[80]; + sprintf(temp, "Expected a numeric-parameter for %.20s", argv[*num]); + Usage(temp); + } + *num = next; + return result; +} + +/* + * Print parts of a message + */ +static void +PrintList(const char *const *list) +{ + const char *leaf = strrchr(program, '/'); + unsigned n = 0; + + if (leaf != 0) + leaf++; + else + leaf = program; + + while (*list != 0) { + fprintf(dialog_state.output, *list, n ? leaf : dialog_version()); + (void) fputc('\n', dialog_state.output); + n = 1; + list++; + } +} + +static const Mode * +lookupMode(eOptions code) +{ + const Mode *modePtr = 0; + unsigned n; + + for (n = 0; n < sizeof(modes) / sizeof(modes[0]); n++) { + if (modes[n].code == code) { + modePtr = &modes[n]; + break; + } + } + return modePtr; +} + +static int +compare_opts(const void *a, const void *b) +{ + Options *const *p = (Options * const *) a; + Options *const *q = (Options * const *) b; + return strcmp((*p)->name, (*q)->name); +} + +/* + * Print program help-message + */ +static void +Help(void) +{ + static const char *const tbl_1[] = + { + "cdialog (ComeOn Dialog!) version %s", + "Copyright 2000-2007,2008 Thomas E. Dickey", + "This is free software; see the source for copying conditions. There is NO", + "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.", + "", + "* Display dialog boxes from shell scripts *", + "", + "Usage: %s <options> { --and-widget <options> }", + "where options are \"common\" options, followed by \"box\" options", + "", +#ifdef HAVE_RC_FILE + "Special options:", + " [--create-rc \"file\"]", +#endif + 0 + }, *const tbl_3[] = + { + "", + "Auto-size with height and width = 0. Maximize with height and width = -1.", + "Global-auto-size if also menu_height/list_height = 0.", + 0 + }; + unsigned limit = sizeof(options) / sizeof(options[0]); + unsigned j, k; + const Options **opts; + + opts = dlg_calloc(const Options *, limit); + assert_ptr(opts, "Help"); + for (j = 0; j < limit; ++j) { + opts[j] = &(options[j]); + } + qsort(opts, limit, sizeof(Options *), compare_opts); + + PrintList(tbl_1); + fprintf(dialog_state.output, "Common options:\n "); + for (j = k = 0; j < limit; j++) { + if ((opts[j]->pass & 1) + && opts[j]->help != 0) { + unsigned len = 6 + strlen(opts[j]->name) + strlen(opts[j]->help); + k += len; + if (k > 75) { + fprintf(dialog_state.output, "\n "); + k = len; + } + fprintf(dialog_state.output, " [--%s%s%s]", opts[j]->name, + *(opts[j]->help) ? " " : "", opts[j]->help); + } + } + fprintf(dialog_state.output, "\nBox options:\n"); + for (j = 0; j < limit; j++) { + if ((opts[j]->pass & 2) != 0 + && opts[j]->help != 0 + && lookupMode(opts[j]->code)) + fprintf(dialog_state.output, " --%-12s %s\n", opts[j]->name, + opts[j]->help); + } + PrintList(tbl_3); + + free(opts); + dlg_exit(DLG_EXIT_OK); +} + +/* + * "Common" options apply to all widgets more/less. Most of the common options + * set values in dialog_vars, a few set dialog_state and a couple write to the + * output stream. + */ +static int +process_common_options(int argc, char **argv, int offset, bool output) +{ + bool done = FALSE; + + while (offset < argc && !done) { /* Common options */ + switch (lookupOption(argv[offset], 1)) { + case o_title: + dialog_vars.title = optionString(argv, &offset); + break; + case o_backtitle: + dialog_vars.backtitle = optionString(argv, &offset); + break; + case o_separate_widget: + dialog_state.separate_str = optionString(argv, &offset); + break; + case o_separate_output: + dialog_vars.separate_output = TRUE; + break; + case o_colors: + dialog_vars.colors = TRUE; + break; + case o_cr_wrap: + dialog_vars.cr_wrap = TRUE; + break; + case o_no_collapse: + dialog_vars.nocollapse = TRUE; + break; + case o_no_kill: + dialog_vars.cant_kill = TRUE; + break; + case o_nocancel: + dialog_vars.nocancel = TRUE; + break; + case o_nook: + dialog_vars.nook = TRUE; + break; + case o_quoted: + dialog_vars.quoted = TRUE; + break; + case o_single_quoted: + dialog_vars.single_quoted = TRUE; + break; + case o_size_err: + dialog_vars.size_err = TRUE; + break; + case o_beep: + dialog_vars.beep_signal = TRUE; + break; + case o_beep_after: + dialog_vars.beep_after_signal = TRUE; + break; + case o_scrollbar: + dialog_state.use_scrollbar = TRUE; + break; + case o_shadow: + dialog_state.use_shadow = TRUE; + break; + case o_defaultno: + dialog_vars.defaultno = TRUE; + break; + case o_default_item: + dialog_vars.default_item = optionString(argv, &offset); + break; + case o_insecure: + dialog_vars.insecure = TRUE; + break; + case o_item_help: + dialog_vars.item_help = TRUE; + break; + case o_help_button: + dialog_vars.help_button = TRUE; + break; + case o_help_status: + dialog_vars.help_status = TRUE; + break; + case o_extra_button: + dialog_vars.extra_button = TRUE; + break; + case o_ignore: + ignore_unknown = TRUE; + break; + case o_keep_window: + dialog_vars.keep_window = TRUE; + break; + case o_no_shadow: + dialog_state.use_shadow = FALSE; + break; + case o_print_size: + dialog_vars.print_siz = TRUE; + break; + case o_print_maxsize: + if (output) { + /* + * If this is the last option, we do not want any error + * messages - just our output. Calling end_dialog() cancels + * the refresh() at the end of the program as well. + */ + if (argv[offset + 1] == 0) { + ignore_unknown = TRUE; + end_dialog(); + } + fflush(dialog_state.output); + fprintf(dialog_state.output, "MaxSize: %d, %d\n", SLINES, SCOLS); + } + break; + case o_print_version: + if (output) { + fprintf(stdout, "Version: %s\n", dialog_version()); + } + break; + case o_separator: + case o_output_separator: + dialog_vars.output_separator = optionString(argv, &offset); + break; + case o_column_separator: + dialog_vars.column_separator = optionString(argv, &offset); + break; + case o_tab_correct: + dialog_vars.tab_correct = TRUE; + break; + case o_sleep: + dialog_vars.sleep_secs = optionValue(argv, &offset); + break; + case o_timeout: + dialog_vars.timeout_secs = optionValue(argv, &offset); + break; + case o_max_input: + dialog_vars.max_input = optionValue(argv, &offset); + break; + case o_tab_len: + dialog_state.tab_len = optionValue(argv, &offset); + break; + case o_trim: + dialog_vars.trim_whitespace = TRUE; + break; + case o_visit_items: + dialog_state.visit_items = TRUE; + break; + case o_aspect: + dialog_state.aspect_ratio = optionValue(argv, &offset); + break; + case o_begin: + dialog_vars.begin_set = TRUE; + dialog_vars.begin_y = optionValue(argv, &offset); + dialog_vars.begin_x = optionValue(argv, &offset); + break; + case o_clear: + dialog_vars.dlg_clear_screen = TRUE; + break; + case o_yes_label: + dialog_vars.yes_label = optionString(argv, &offset); + break; + case o_no_label: + dialog_vars.no_label = optionString(argv, &offset); + break; + case o_ok_label: + dialog_vars.ok_label = optionString(argv, &offset); + break; + case o_cancel_label: + dialog_vars.cancel_label = optionString(argv, &offset); + break; + case o_extra_label: + dialog_vars.extra_label = optionString(argv, &offset); + break; + case o_exit_label: + dialog_vars.exit_label = optionString(argv, &offset); + break; + case o_help_label: + dialog_vars.help_label = optionString(argv, &offset); + break; + case o_date_format: + dialog_vars.date_format = optionString(argv, &offset); + break; + case o_time_format: + dialog_vars.time_format = optionString(argv, &offset); + break; + case o_keep_tite: + dialog_vars.keep_tite = TRUE; + break; + case o_ascii_lines: + dialog_vars.ascii_lines = TRUE; + dialog_vars.no_lines = FALSE; + break; + case o_no_lines: + dialog_vars.no_lines = TRUE; + dialog_vars.ascii_lines = FALSE; + break; + case o_noitem: + case o_fullbutton: + /* ignore */ + break; + /* options of Xdialog which we ignore */ + case o_icon: + case o_wmclass: + (void) optionString(argv, &offset); + /* FALLTHRU */ + case o_allow_close: + case o_auto_placement: + case o_fixed_font: + case o_keep_colors: + case o_no_close: + case o_no_cr_wrap: + case o_screen_center: + case o_smooth: + case o_under_mouse: + break; + case o_unknown: + if (ignore_unknown) + break; + /* FALLTHRU */ + default: /* no more common options */ + done = TRUE; + break; +#ifdef HAVE_DLG_TRACE + case o_trace: + dlg_trace(optionString(argv, &offset)); + break; +#endif + } + if (!done) + offset++; + } + return offset; +} + +/* + * Initialize options at the start of a series of common options culminating + * in a widget. + */ +static void +init_result(char *buffer) +{ + static bool first = TRUE; + static char **special_argv = 0; + static int special_argc = 0; + + /* clear everything we do not save for the next widget */ + memset(&dialog_vars, 0, sizeof(dialog_vars)); + + dialog_vars.input_result = buffer; + dialog_vars.input_result[0] = '\0'; + + /* + * The first time this is called, check for common options given by an + * environment variable. + */ + if (first) { + char *env = getenv("DIALOGOPTS"); + if (env != 0) + env = dlg_strclone(env); + if (env != 0) { + special_argv = string_to_argv(env); + special_argc = count_argv(special_argv); + } + } + if (special_argv != 0) { + process_common_options(special_argc, special_argv, 0, FALSE); +#ifdef NO_LEAKS + free(special_argv[0]); + free(special_argv); + first = TRUE; +#endif + } +} + +int +main(int argc, char *argv[]) +{ + char temp[256]; + bool esc_pressed = FALSE; + bool keep_tite = FALSE; + int offset = 1; + int offset_add; + int retval = DLG_EXIT_OK; + int j, have; + eOptions code; + const Mode *modePtr; + char my_buffer[MAX_LEN + 1]; + + memset(&dialog_state, 0, sizeof(dialog_state)); + memset(&dialog_vars, 0, sizeof(dialog_vars)); + +#if defined(ENABLE_NLS) + /* initialize locale support */ + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); +#elif defined(HAVE_SETLOCALE) + (void) setlocale(LC_ALL, ""); +#endif + + unescape_argv(&argc, &argv); + program = argv[0]; + dialog_state.output = stderr; + dialog_state.input = stdin; + + /* + * Look for the last --stdout, --stderr or --output-fd option, and use + * that. We can only write to one of them. If --stdout is used, that + * can interfere with initializing the curses library, so we want to + * know explicitly if it is used. + */ + while (offset < argc) { + int base = offset; + switch (lookupOption(argv[offset], 7)) { + case o_stdout: + dialog_state.output = stdout; + break; + case o_stderr: + dialog_state.output = stderr; + break; + case o_input_fd: + if ((j = optionValue(argv, &offset)) < 0 + || (dialog_state.input = fdopen(j, "r")) == 0) + dlg_exiterr("Cannot open input-fd\n"); + break; + case o_output_fd: + if ((j = optionValue(argv, &offset)) < 0 + || (dialog_state.output = fdopen(j, "w")) == 0) + dlg_exiterr("Cannot open output-fd\n"); + break; + case o_keep_tite: + keep_tite = TRUE; + break; + default: + ++offset; + continue; + } + for (j = base; j < argc; ++j) { + dialog_argv[j] = dialog_argv[j + 1 + (offset - base)]; + if (dialog_opts != 0) + dialog_opts[j] = dialog_opts[j + 1 + (offset - base)]; + } + argc -= (1 + offset - base); + offset = base; + } + offset = 1; + init_result(my_buffer); + + if (argc == 2) { /* if we don't want clear screen */ + switch (lookupOption(argv[1], 7)) { + case o_print_maxsize: + (void) initscr(); + endwin(); + fflush(dialog_state.output); + fprintf(dialog_state.output, "MaxSize: %d, %d\n", SLINES, SCOLS); + break; + case o_print_version: + fprintf(stdout, "Version: %s\n", dialog_version()); + break; + case o_clear: + initscr(); + refresh(); + endwin(); + break; + case o_ignore: + break; + default: + case o_help: + dialog_state.output = stdout; + Help(); + break; + } + return DLG_EXIT_OK; + } + + if (argc < 2) { + Help(); + } +#ifdef HAVE_RC_FILE + if (lookupOption(argv[1], 7) == o_create_rc) { + if (argc != 3) { + sprintf(temp, "Expected a filename for %.50s", argv[1]); + Usage(temp); + } + if (dlg_parse_rc() == -1) /* Read the configuration file */ + dlg_exiterr("dialog: dlg_parse_rc"); + dlg_create_rc(argv[2]); + return DLG_EXIT_OK; + } +#endif + + dialog_vars.keep_tite = keep_tite; /* init_result() cleared global */ + + init_dialog(dialog_state.input, dialog_state.output); + + while (offset < argc && !esc_pressed) { + init_result(my_buffer); + + offset = process_common_options(argc, argv, offset, TRUE); + + if (argv[offset] == NULL) { + if (ignore_unknown) + break; + Usage("Expected a box option"); + } + + if (lookupOption(argv[offset], 2) != o_checklist + && dialog_vars.separate_output) { + sprintf(temp, "Expected --checklist, not %.20s", argv[offset]); + Usage(temp); + } + + if (dialog_state.aspect_ratio == 0) + dialog_state.aspect_ratio = DEFAULT_ASPECT_RATIO; + + dlg_put_backtitle(); + + /* use a table to look for the requested mode, to avoid code duplication */ + + modePtr = 0; + if ((code = lookupOption(argv[offset], 2)) != o_unknown) + modePtr = lookupMode(code); + if (modePtr == 0) { + sprintf(temp, "%s option %.20s", + lookupOption(argv[offset], 7) != o_unknown + ? "Unexpected" + : "Unknown", + argv[offset]); + Usage(temp); + } + + have = arg_rest(&argv[offset]); + if (have < modePtr->argmin) { + sprintf(temp, "Expected at least %d tokens for %.20s, have %d", + modePtr->argmin - 1, argv[offset], + have - 1); + Usage(temp); + } + if (modePtr->argmax && have > modePtr->argmax) { + sprintf(temp, + "Expected no more than %d tokens for %.20s, have %d", + modePtr->argmax - 1, argv[offset], + have - 1); + Usage(temp); + } + + /* + * Trim whitespace from non-title option values, e.g., the ones that + * will be used as captions or prompts. Do that only for the widget + * we are about to process, since the "--trim" option is reset before + * accumulating options for each widget. + */ + for (j = offset + 1; j <= offset + have; j++) { + switch (lookupOption(argv[j - 1], 7)) { + case o_unknown: + case o_title: + case o_backtitle: + break; + default: + if (argv[j] != 0) { + dlg_trim_string(argv[j]); + } + break; + } + } + + retval = show_result((*(modePtr->jumper)) (dialog_vars.title, + argv + offset, + &offset_add)); + offset += offset_add; + + if (dialog_vars.input_result != my_buffer) + free(dialog_vars.input_result); + + if (retval == DLG_EXIT_ESC) { + esc_pressed = TRUE; + } else { + + if (dialog_vars.beep_after_signal) + (void) beep(); + + if (dialog_vars.sleep_secs) + (void) napms(dialog_vars.sleep_secs * 1000); + + if (offset < argc) { + switch (lookupOption(argv[offset], 7)) { + case o_and_widget: + offset++; + break; + case o_unknown: + sprintf(temp, "Expected --and-widget, not %.20s", + argv[offset]); + Usage(temp); + break; + default: + /* if we got a cancel, etc., stop chaining */ + if (retval != DLG_EXIT_OK) + esc_pressed = TRUE; + else + dialog_vars.dlg_clear_screen = TRUE; + break; + } + } + if (dialog_vars.dlg_clear_screen) + dlg_clear(); + } + } + + dlg_killall_bg(&retval); + if (dialog_state.screen_initialized) { + (void) refresh(); + end_dialog(); + } + dlg_exit(retval); +} Index: contrib/dialog/msgbox.c =================================================================== --- contrib/dialog/msgbox.c (revision 0) +++ contrib/dialog/msgbox.c (revision 0) @@ -0,0 +1,183 @@ +/* + * $Id: msgbox.c,v 1.64 2010/01/15 10:50:17 tom Exp $ + * + * msgbox.c -- implements the message box and info box + * + * Copyright 2000-2009,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + * + * An earlier version of this program lists as authors: + * Savio Lam (lam836@cs.cuhk.hk) + */ + +#include <dialog.h> +#include <dlg_keys.h> + +/* + * Display a message box. Program will pause and display an "OK" button + * if the parameter 'pauseopt' is non-zero. + */ +int +dialog_msgbox(const char *title, const char *cprompt, int height, int width, + int pauseopt) +{ + /* *INDENT-OFF* */ + static DLG_KEYS_BINDING binding[] = { + ENTERKEY_BINDINGS, + DLG_KEYS_DATA( DLGK_ENTER, ' ' ), + SCROLLKEY_BINDINGS, + DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_DOWN ), + DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_RIGHT ), + DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), + DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_UP ), + DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), + DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_LEFT ), + END_KEYS_BINDING + }; + /* *INDENT-ON* */ + + int x, y, last = 0, page; + int button = 0; + int key = 0, fkey; + int result = DLG_EXIT_UNKNOWN; + WINDOW *dialog = 0; + char *prompt = dlg_strclone(cprompt); + const char **buttons = dlg_ok_label(); + int offset = 0; + int check; + bool show = TRUE; + int min_width = (pauseopt == 1 ? 12 : 0); + +#ifdef KEY_RESIZE + int req_high = height; + int req_wide = width; + restart: +#endif + + dlg_button_layout(buttons, &min_width); + + dlg_tab_correct_str(prompt); + dlg_auto_size(title, prompt, &height, &width, + (pauseopt == 1 ? 2 : 0), + min_width); + dlg_print_size(height, width); + dlg_ctl_size(height, width); + + x = dlg_box_x_ordinate(width); + y = dlg_box_y_ordinate(height); + +#ifdef KEY_RESIZE + if (dialog != 0) + dlg_move_window(dialog, height, width, y, x); + else +#endif + { + dialog = dlg_new_window(height, width, y, x); + dlg_register_window(dialog, "msgbox", binding); + dlg_register_buttons(dialog, "msgbox", buttons); + } + page = height - (1 + 3 * MARGIN); + + dlg_mouse_setbase(x, y); + + dlg_draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); + dlg_draw_title(dialog, title); + + wattrset(dialog, dialog_attr); + + if (pauseopt) { + dlg_draw_bottom_box(dialog); + mouse_mkbutton(height - 2, width / 2 - 4, 6, '\n'); + dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); + + while (result == DLG_EXIT_UNKNOWN) { + if (show) { + last = dlg_print_scrolled(dialog, prompt, offset, + page, width, pauseopt); + show = FALSE; + } + key = dlg_mouse_wgetch(dialog, &fkey); + if (dlg_result_key(key, fkey, &result)) + break; + + if (!fkey && (check = dlg_char_to_button(key, buttons)) >= 0) { + result = check ? DLG_EXIT_HELP : DLG_EXIT_OK; + break; + } + + if (fkey) { + switch (key) { +#ifdef KEY_RESIZE + case KEY_RESIZE: + dlg_clear(); + height = req_high; + width = req_wide; + show = TRUE; + goto restart; +#endif + case DLGK_FIELD_NEXT: + button = dlg_next_button(buttons, button); + if (button < 0) + button = 0; + dlg_draw_buttons(dialog, + height - 2, 0, + buttons, button, + FALSE, width); + break; + case DLGK_FIELD_PREV: + button = dlg_prev_button(buttons, button); + if (button < 0) + button = 0; + dlg_draw_buttons(dialog, + height - 2, 0, + buttons, button, + FALSE, width); + break; + case DLGK_ENTER: + result = button ? DLG_EXIT_HELP : DLG_EXIT_OK; + break; + case DLGK_MOUSE(0): + result = DLG_EXIT_OK; + break; + case DLGK_MOUSE(1): + result = DLG_EXIT_HELP; + break; + default: + if (dlg_check_scrolled(key, + last, + page, + &show, + &offset) == 0) + break; + beep(); + break; + } + } else { + beep(); + } + } + } else { + dlg_print_scrolled(dialog, prompt, offset, page, width, pauseopt); + wrefresh(dialog); + result = DLG_EXIT_OK; + } + + dlg_del_window(dialog); + dlg_mouse_free_regions(); + free(prompt); + return result; +} Index: contrib/dialog/configure =================================================================== --- contrib/dialog/configure (revision 0) +++ contrib/dialog/configure (revision 0) @@ -0,0 +1,14272 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by Autoconf 2.52.20100320. +# +# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi + +# Name of the executable. +as_me=`echo "$0" |sed 's,.*[\\/],,'` + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +as_executable_p="test -f" + +# Support unset when possible. +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + +# NLS nuisances. +$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; } +$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; } +$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; } +$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; } +$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; } +$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; } +$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; } +$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; } + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; } + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +exec 6>&1 + +# +# Initializations. +# +ac_default_prefix=/usr/local +cross_compiling=no +subdirs= +MFLAGS= MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Maximum number of lines to put in a shell here document. +# This variable seems obsolete. It should probably be removed, and +# only ac_max_sed_lines should be used. +: ${ac_max_here_lines=38} + +ac_unique_file="dialog.h" +# Factoring default headers for most tests. +ac_includes_default="\ +#include <stdio.h> +#if HAVE_SYS_TYPES_H +# include <sys/types.h> +#endif +#if HAVE_SYS_STAT_H +# include <sys/stat.h> +#endif +#if STDC_HEADERS +# include <stdlib.h> +# include <stddef.h> +#else +# if HAVE_STDLIB_H +# include <stdlib.h> +# endif +#endif +#if HAVE_STRING_H +# if !STDC_HEADERS && HAVE_MEMORY_H +# include <memory.h> +# endif +# include <string.h> +#endif +#if HAVE_STRINGS_H +# include <strings.h> +#endif +#if HAVE_INTTYPES_H +# include <inttypes.h> +#else +# if HAVE_STDINT_H +# include <stdint.h> +# endif +#endif +#if HAVE_UNISTD_H +# include <unistd.h> +#endif" + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= + +ac_prev= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_option in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + eval "enable_$ac_feature=no" ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "enable_$ac_feature='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package| sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "with_$ac_package='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/-/_/g'` + eval "with_$ac_package=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` + eval "$ac_envvar='$ac_optarg'" + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +# Be sure to have absolute paths. +for ac_var in exec_prefix prefix +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* | NONE | '' ) ;; + *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# Be sure to have absolute paths. +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ + localstatedir libdir includedir oldincludedir infodir mandir +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* ) ;; + *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: should be removed in autoconf 3.0. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_prog=$0 + ac_confdir=`echo "$ac_prog" | sed 's%[\\/][^\\/][^\\/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "$as_me: error: cannot find sources in $ac_confdir or .." >&2 + { (exit 1); exit 1; }; } + else + { echo "$as_me: error: cannot find sources in $srcdir" >&2 + { (exit 1); exit 1; }; } + fi +fi +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +ac_env_build_alias_set=${build_alias+set} +ac_env_build_alias_value=$build_alias +ac_cv_env_build_alias_set=${build_alias+set} +ac_cv_env_build_alias_value=$build_alias +ac_env_host_alias_set=${host_alias+set} +ac_env_host_alias_value=$host_alias +ac_cv_env_host_alias_set=${host_alias+set} +ac_cv_env_host_alias_value=$host_alias +ac_env_target_alias_set=${target_alias+set} +ac_env_target_alias_value=$target_alias +ac_cv_env_target_alias_set=${target_alias+set} +ac_cv_env_target_alias_value=$target_alias +ac_env_CC_set=${CC+set} +ac_env_CC_value=$CC +ac_cv_env_CC_set=${CC+set} +ac_cv_env_CC_value=$CC +ac_env_CFLAGS_set=${CFLAGS+set} +ac_env_CFLAGS_value=$CFLAGS +ac_cv_env_CFLAGS_set=${CFLAGS+set} +ac_cv_env_CFLAGS_value=$CFLAGS +ac_env_LDFLAGS_set=${LDFLAGS+set} +ac_env_LDFLAGS_value=$LDFLAGS +ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +ac_cv_env_LDFLAGS_value=$LDFLAGS +ac_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_env_CPPFLAGS_value=$CPPFLAGS +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_cv_env_CPPFLAGS_value=$CPPFLAGS +ac_env_CPP_set=${CPP+set} +ac_env_CPP_value=$CPP +ac_cv_env_CPP_set=${CPP+set} +ac_cv_env_CPP_value=$CPP + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<EOF +\`configure' configures this package to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +EOF + + cat <<EOF +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data [PREFIX/share] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --infodir=DIR info documentation [PREFIX/info] + --mandir=DIR man documentation [PREFIX/man] +EOF + + cat <<\EOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST build programs to run on HOST [BUILD] +EOF +fi + +if test -n "$ac_init_help"; then + + cat <<\EOF + +Optional Features: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + + --disable-echo display "compiling" commands + --disable-largefile omit support for large files + --with-warnings test: turn on gcc warnings + --with-libiconv-prefix=DIR + search for libiconv in DIR/include and DIR/lib + --enable-nls use Native Language Support + --with-included-gettext use the GNU gettext library included here + --disable-included-msgs use included messages, for i18n support + --with-dmalloc test: use Gray Watson's dmalloc library + --with-dbmalloc test: use Conor Cahill's dbmalloc library + --with-purify test: use Purify + --with-valgrind test: use valgrind + --with-no-leaks test: free permanent memory, analyze leaks + --disable-trace do not support --trace option + --with-libtool generate libraries with libtool + --with-libtool-opts=XXX specify additional libtool options + --with-ncurses compile/link with ncurses library + --with-ncursesw compile/link with wide-char ncurses library + --with-curses-dir=DIR directory in which (n)curses is installed + --disable-extras do not include extra dialogs + --disable-rc-file do not include config-file support + --disable-Xdialog do not include Xdialog-style dialogs + --disable-form do not include the form dialog + --disable-gauge do not include the gauge dialogs + --disable-tailbox do not include the tailbox dialog + --disable-mixedform do not include the mixedform dialog + --disable-mixedgauge do not include the mixedgauge dialog + --enable-widec enable wide-curses features + --disable-rpath-hack don't add rpath options for additional libraries + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a + nonstandard directory <lib dir> + CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have + headers in a nonstandard directory <include dir> + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +EOF +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + ac_popdir=`pwd` + for ac_subdir in : $ac_subdirs_all; do test "x$ac_subdir" = x: && continue + cd $ac_subdir + # A "../" for each directory in /$ac_subdir. + ac_dots=`echo $ac_subdir | + sed 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g'` + + case $srcdir in + .) # No --srcdir option. We are building in place. + ac_sub_srcdir=$srcdir ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_sub_srcdir=$srcdir/$ac_subdir ;; + *) # Relative path. + ac_sub_srcdir=$ac_dots$srcdir/$ac_subdir ;; + esac + + # Check for guested configure; otherwise get Cygnus style configure. + if test -f $ac_sub_srcdir/configure.gnu; then + echo + $SHELL $ac_sub_srcdir/configure.gnu --help=recursive + elif test -f $ac_sub_srcdir/configure; then + echo + $SHELL $ac_sub_srcdir/configure --help=recursive + elif test -f $ac_sub_srcdir/configure.ac || + test -f $ac_sub_srcdir/configure.in; then + echo + $ac_configure --help + else + echo "$as_me: WARNING: no configuration information is in $ac_subdir" >&2 + fi + cd $ac_popdir + done +fi + +test -n "$ac_init_help" && exit 0 +if $ac_init_version; then + cat <<\EOF + +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +EOF + exit 0 +fi +exec 5>config.log +cat >&5 <<EOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by $as_me, which was +generated by GNU Autoconf 2.52.20100320. Invocation command line was + + $ $0 $@ + +EOF +{ +cat <<_ASUNAME +## ---------- ## +## Platform. ## +## ---------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +hostinfo = `(hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +PATH = $PATH + +_ASUNAME +} >&5 + +cat >&5 <<EOF +## ------------ ## +## Core tests. ## +## ------------ ## + +EOF + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell meta-characters. +ac_configure_args= +ac_sep= +for ac_arg +do + case $ac_arg in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` + ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" + ac_sep=" " ;; + *) ac_configure_args="$ac_configure_args$ac_sep$ac_arg" + ac_sep=" " ;; + esac + # Get rid of the leading space. +done + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + echo >&5 + echo "## ----------------- ##" >&5 + echo "## Cache variables. ##" >&5 + echo "## ----------------- ##" >&5 + echo >&5 + # The following way of writing the cache mishandles newlines in values, +{ + (set) 2>&1 | + case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in + *ac_space=\ *) + sed -n \ + "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" + ;; + *) + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} >&5 + sed "/^$/d" confdefs.h >conftest.log + if test -s conftest.log; then + echo >&5 + echo "## ------------ ##" >&5 + echo "## confdefs.h. ##" >&5 + echo "## ------------ ##" >&5 + echo >&5 + cat conftest.log >&5 + fi + (echo; echo) >&5 + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" >&5 + echo "$as_me: exit $exit_status" >&5 + rm -rf conftest* confdefs* core core.* *.core conf$$* $ac_clean_files && + exit $exit_status + ' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo >confdefs.h + +# Let the site file select an alternate cache file if it wants to. +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + { echo "$as_me:902: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + cat "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:913: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . $cache_file;; + *) . ./$cache_file;; + esac + fi +else + { echo "$as_me:921: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in `(set) 2>&1 | + sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val="\$ac_cv_env_${ac_var}_value" + eval ac_new_val="\$ac_env_${ac_var}_value" + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:937: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:941: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + { echo "$as_me:947: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:949: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:951: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. It doesn't matter if + # we pass some twice (in addition to the command line arguments). + if test "$ac_new_set" = set; then + case $ac_new_val in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` + ac_configure_args="$ac_configure_args '$ac_arg'" + ;; + *) ac_configure_args="$ac_configure_args $ac_var=$ac_new_val" + ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:970: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:972: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +ac_main_return=return + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac +echo "#! $SHELL" >conftest.sh +echo "exit 0" >>conftest.sh +chmod +x conftest.sh +if { (echo "$as_me:993: PATH=\".;.\"; conftest.sh") >&5 + (PATH=".;."; conftest.sh) 2>&5 + ac_status=$? + echo "$as_me:996: \$? = $ac_status" >&5 + (exit $ac_status); }; then + ac_path_separator=';' +else + ac_path_separator=: +fi +PATH_SEPARATOR="$ac_path_separator" +rm -f conftest.sh + +ac_config_headers="$ac_config_headers dlg_config.h:config.hin" + +if test -f $srcdir/VERSION ; then + echo "$as_me:1008: checking for package version" >&5 +echo $ECHO_N "checking for package version... $ECHO_C" >&6 + + # if there are not enough fields, cut returns the last one... + cf_field1=`sed -e '2,$d' $srcdir/VERSION|cut -f1` + cf_field2=`sed -e '2,$d' $srcdir/VERSION|cut -f2` + cf_field3=`sed -e '2,$d' $srcdir/VERSION|cut -f3` + + # this is how CF_BUNDLED_INTL uses $VERSION: + VERSION="$cf_field1" + + VERSION_MAJOR=`echo "$cf_field2" | sed -e 's/\..*//'` + test -z "$VERSION_MAJOR" && { { echo "$as_me:1020: error: missing major-version" >&5 +echo "$as_me: error: missing major-version" >&2;} + { (exit 1); exit 1; }; } + + VERSION_MINOR=`echo "$cf_field2" | sed -e 's/^[^.]*\.//' -e 's/-.*//'` + test -z "$VERSION_MINOR" && { { echo "$as_me:1025: error: missing minor-version" >&5 +echo "$as_me: error: missing minor-version" >&2;} + { (exit 1); exit 1; }; } + + echo "$as_me:1029: result: ${VERSION_MAJOR}.${VERSION_MINOR}" >&5 +echo "${ECHO_T}${VERSION_MAJOR}.${VERSION_MINOR}" >&6 + + echo "$as_me:1032: checking for package patch date" >&5 +echo $ECHO_N "checking for package patch date... $ECHO_C" >&6 + VERSION_PATCH=`echo "$cf_field3" | sed -e 's/^[^-]*-//'` + case .$VERSION_PATCH in + .) + { { echo "$as_me:1037: error: missing patch-date $VERSION_PATCH" >&5 +echo "$as_me: error: missing patch-date $VERSION_PATCH" >&2;} + { (exit 1); exit 1; }; } + ;; + .[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]) + ;; + *) + { { echo "$as_me:1044: error: illegal patch-date $VERSION_PATCH" >&5 +echo "$as_me: error: illegal patch-date $VERSION_PATCH" >&2;} + { (exit 1); exit 1; }; } + ;; + esac + echo "$as_me:1049: result: $VERSION_PATCH" >&5 +echo "${ECHO_T}$VERSION_PATCH" >&6 +else + { { echo "$as_me:1052: error: did not find $srcdir/VERSION" >&5 +echo "$as_me: error: did not find $srcdir/VERSION" >&2;} + { (exit 1); exit 1; }; } +fi + +# show the actual data that we have for versions: +test -n "$verbose" && echo " VERSION $VERSION" 1>&6 + +echo "${as_me-configure}:1060: testing VERSION $VERSION ..." 1>&5 + +test -n "$verbose" && echo " VERSION_MAJOR $VERSION_MAJOR" 1>&6 + +echo "${as_me-configure}:1064: testing VERSION_MAJOR $VERSION_MAJOR ..." 1>&5 + +test -n "$verbose" && echo " VERSION_MINOR $VERSION_MINOR" 1>&6 + +echo "${as_me-configure}:1068: testing VERSION_MINOR $VERSION_MINOR ..." 1>&5 + +test -n "$verbose" && echo " VERSION_PATCH $VERSION_PATCH" 1>&6 + +echo "${as_me-configure}:1072: testing VERSION_PATCH $VERSION_PATCH ..." 1>&5 + + PACKAGE=dialog + cat >>confdefs.h <<EOF +#define PACKAGE "$PACKAGE" +EOF + +cf_PACKAGE=`echo "$PACKAGE" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` + + cat >>confdefs.h <<EOF +#define ${cf_PACKAGE}_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}" +EOF + + cat >>confdefs.h <<EOF +#define ${cf_PACKAGE}_PATCHDATE ${VERSION_PATCH} +EOF + +test "$program_prefix" != NONE && + program_transform_name="s,^,$program_prefix,;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s,\$,$program_suffix,;$program_transform_name" +# Double any \ or $. echo might interpret backslashes. +# By default was `s,x,x', remove it if useless. +cat <<\_ACEOF >conftest.sed +s/[\\$]/&&/g;s/;s,x,x,$// +_ACEOF +program_transform_name=`echo $program_transform_name | sed -f conftest.sed` +rm conftest.sed + +DESTDIR= + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +ac_main_return=return +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +echo "$as_me:1113: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_CC="${ac_tool_prefix}gcc" +echo "$as_me:1128: found $ac_dir/$ac_word" >&5 +break +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:1136: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:1139: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo "$as_me:1148: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_ac_ct_CC="gcc" +echo "$as_me:1163: found $ac_dir/$ac_word" >&5 +break +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:1171: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:1174: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +echo "$as_me:1187: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_CC="${ac_tool_prefix}cc" +echo "$as_me:1202: found $ac_dir/$ac_word" >&5 +break +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:1210: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:1213: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:1222: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_ac_ct_CC="cc" +echo "$as_me:1237: found $ac_dir/$ac_word" >&5 +break +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:1245: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:1248: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:1261: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue +fi +ac_cv_prog_CC="cc" +echo "$as_me:1281: found $ac_dir/$ac_word" >&5 +break +done + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + set dummy "$ac_dir/$ac_word" ${1+"$@"} + shift + ac_cv_prog_CC="$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:1303: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:1306: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:1317: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_CC="$ac_tool_prefix$ac_prog" +echo "$as_me:1332: found $ac_dir/$ac_word" >&5 +break +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:1340: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:1343: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:1356: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_ac_ct_CC="$ac_prog" +echo "$as_me:1371: found $ac_dir/$ac_word" >&5 +break +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:1379: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:1382: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_CC" && break +done + + CC=$ac_ct_CC +fi + +fi + +test -z "$CC" && { { echo "$as_me:1394: error: no acceptable cc found in \$PATH" >&5 +echo "$as_me: error: no acceptable cc found in \$PATH" >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:1399:" \ + "checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:1402: \"$ac_compiler --version </dev/null >&5\"") >&5 + (eval $ac_compiler --version </dev/null >&5) 2>&5 + ac_status=$? + echo "$as_me:1405: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:1407: \"$ac_compiler -v </dev/null >&5\"") >&5 + (eval $ac_compiler -v </dev/null >&5) 2>&5 + ac_status=$? + echo "$as_me:1410: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:1412: \"$ac_compiler -V </dev/null >&5\"") >&5 + (eval $ac_compiler -V </dev/null >&5) 2>&5 + ac_status=$? + echo "$as_me:1415: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +#line 1419 "configure" +#include "confdefs.h" + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.exe" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +echo "$as_me:1435: checking for C compiler default output" >&5 +echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6 +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +if { (eval echo "$as_me:1438: \"$ac_link_default\"") >&5 + (eval $ac_link_default) 2>&5 + ac_status=$? + echo "$as_me:1441: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Find the output, starting from the most likely. This scheme is +# not robust to junk in `.', hence go to wildcards (a.*) only as a last +# resort. +for ac_file in `ls a.exe conftest.exe 2>/dev/null; + ls a.out conftest 2>/dev/null; + ls a.* conftest.* 2>/dev/null`; do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.dbg | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + a.out ) # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + # FIXME: I believe we export ac_cv_exeext for Libtool --akim. + export ac_cv_exeext + break;; + * ) break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +{ { echo "$as_me:1464: error: C compiler cannot create executables" >&5 +echo "$as_me: error: C compiler cannot create executables" >&2;} + { (exit 77); exit 77; }; } +fi + +ac_exeext=$ac_cv_exeext +echo "$as_me:1470: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6 + +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:1475: checking whether the C compiler works" >&5 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (eval echo "$as_me:1481: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:1484: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { echo "$as_me:1491: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'." >&5 +echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'." >&2;} + { (exit 1); exit 1; }; } + fi + fi +fi +echo "$as_me:1499: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + +rm -f a.out a.exe conftest$ac_cv_exeext +ac_clean_files=$ac_clean_files_save +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:1506: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 +echo "$as_me:1508: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6 + +echo "$as_me:1511: checking for executable suffix" >&5 +echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6 +if { (eval echo "$as_me:1513: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:1516: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.dbg | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + export ac_cv_exeext + break;; + * ) break;; + esac +done +else + { { echo "$as_me:1532: error: cannot compute EXEEXT: cannot compile and link" >&5 +echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest$ac_cv_exeext +echo "$as_me:1538: result: $ac_cv_exeext" >&5 +echo "${ECHO_T}$ac_cv_exeext" >&6 + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +echo "$as_me:1544: checking for object suffix" >&5 +echo $ECHO_N "checking for object suffix... $ECHO_C" >&6 +if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 1550 "configure" +#include "confdefs.h" + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (eval echo "$as_me:1562: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:1565: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.dbg | *.pdb | *.xSYM | *.map | *.inf ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +{ { echo "$as_me:1577: error: cannot compute OBJEXT: cannot compile" >&5 +echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +echo "$as_me:1584: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6 +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +echo "$as_me:1588: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 1594 "configure" +#include "confdefs.h" + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:1609: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:1612: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:1615: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:1618: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_compiler_gnu=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:1630: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +CFLAGS="-g" +echo "$as_me:1636: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 1642 "configure" +#include "confdefs.h" + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:1654: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:1657: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:1660: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:1663: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_prog_cc_g=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:1673: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +# Some people use a C++ compiler to compile C. Since we use `exit', +# in C++ we need to declare it. In case someone uses the same compiler +# for both compiling C and C++ we need to have the C++ compiler decide +# the declaration of exit, since it's the most demanding environment. +cat >conftest.$ac_ext <<_ACEOF +#ifndef __cplusplus + choke me +#endif +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:1700: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:1703: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:1706: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:1709: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + for ac_declaration in \ + ''\ + '#include <stdlib.h>' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +#line 1721 "configure" +#include "confdefs.h" +#include <stdlib.h> +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:1734: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:1737: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:1740: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:1743: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +continue +fi +rm -f conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +#line 1753 "configure" +#include "confdefs.h" +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:1765: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:1768: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:1771: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:1774: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi + +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext conftest.$ac_ext +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +ac_main_return=return + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +ac_main_return=return +echo "$as_me:1808: checking how to run the C preprocessor" >&5 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +#line 1829 "configure" +#include "confdefs.h" +#include <assert.h> + Syntax error +_ACEOF +if { (eval echo "$as_me:1834: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:1840: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +#line 1863 "configure" +#include "confdefs.h" +#include <ac_nonexistent.h> +_ACEOF +if { (eval echo "$as_me:1867: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:1873: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +echo "$as_me:1910: result: $CPP" >&5 +echo "${ECHO_T}$CPP" >&6 +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +#line 1920 "configure" +#include "confdefs.h" +#include <assert.h> + Syntax error +_ACEOF +if { (eval echo "$as_me:1925: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:1931: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +#line 1954 "configure" +#include "confdefs.h" +#include <ac_nonexistent.h> +_ACEOF +if { (eval echo "$as_me:1958: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:1964: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:1992: error: C preprocessor \"$CPP\" fails sanity check" >&5 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +ac_main_return=return + +if test $ac_cv_c_compiler_gnu = yes; then + echo "$as_me:2005: checking whether $CC needs -traditional" >&5 +echo $ECHO_N "checking whether $CC needs -traditional... $ECHO_C" >&6 +if test "${ac_cv_prog_gcc_traditional+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_pattern="Autoconf.*'x'" + cat >conftest.$ac_ext <<_ACEOF +#line 2012 "configure" +#include "confdefs.h" +#include <sgtty.h> +int Autoconf = TIOCGETP; +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "$ac_pattern" >/dev/null 2>&1; then + ac_cv_prog_gcc_traditional=yes +else + ac_cv_prog_gcc_traditional=no +fi +rm -f conftest* + + if test $ac_cv_prog_gcc_traditional = no; then + cat >conftest.$ac_ext <<_ACEOF +#line 2027 "configure" +#include "confdefs.h" +#include <termio.h> +int Autoconf = TCGETA; +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "$ac_pattern" >/dev/null 2>&1; then + ac_cv_prog_gcc_traditional=yes +fi +rm -f conftest* + + fi +fi +echo "$as_me:2040: result: $ac_cv_prog_gcc_traditional" >&5 +echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6 + if test $ac_cv_prog_gcc_traditional = yes; then + CC="$CC -traditional" + fi +fi + +echo "$as_me:2047: checking whether ${MAKE-make} sets \${MAKE}" >&5 +echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" >&6 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'` +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.make <<\EOF +all: + @echo 'ac_maketemp="${MAKE}"' +EOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftest.make +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$as_me:2067: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + SET_MAKE= +else + echo "$as_me:2071: result: no" >&5 +echo "${ECHO_T}no" >&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +echo "$as_me:2079: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" +echo "$as_me:2094: found $ac_dir/$ac_word" >&5 +break +done + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + echo "$as_me:2102: result: $RANLIB" >&5 +echo "${ECHO_T}$RANLIB" >&6 +else + echo "$as_me:2105: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo "$as_me:2114: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_ac_ct_RANLIB="ranlib" +echo "$as_me:2129: found $ac_dir/$ac_word" >&5 +break +done + + test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + echo "$as_me:2138: result: $ac_ct_RANLIB" >&5 +echo "${ECHO_T}$ac_ct_RANLIB" >&6 +else + echo "$as_me:2141: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + RANLIB=$ac_ct_RANLIB +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f $ac_dir/shtool; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:2167: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} + { (exit 1); exit 1; }; } +fi +ac_config_guess="$SHELL $ac_aux_dir/config.guess" +ac_config_sub="$SHELL $ac_aux_dir/config.sub" +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# ./install, which can be erroneously created by make from ./install.sh. +echo "$as_me:2187: checking for a BSD compatible install" >&5 +echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6 +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_save_IFS=$IFS; IFS=$ac_path_separator + for ac_dir in $PATH; do + IFS=$ac_save_IFS + # Account for people who put trailing slashes in PATH elements. + case $ac_dir/ in + / | ./ | .// | /cC/* \ + | /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* \ + | /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + if $as_executable_p "$ac_dir/$ac_prog"; then + if test $ac_prog = install && + grep dspmsg "$ac_dir/$ac_prog" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$ac_dir/$ac_prog" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" + break 2 + fi + fi + done + ;; + esac + done + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL=$ac_install_sh + fi +fi +echo "$as_me:2236: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +echo "$as_me:2250: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_AR="${ac_tool_prefix}ar" +echo "$as_me:2265: found $ac_dir/$ac_word" >&5 +break +done + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + echo "$as_me:2273: result: $AR" >&5 +echo "${ECHO_T}$AR" >&6 +else + echo "$as_me:2276: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +echo "$as_me:2285: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_ac_ct_AR="ar" +echo "$as_me:2300: found $ac_dir/$ac_word" >&5 +break +done + + test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="ar" +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + echo "$as_me:2309: result: $ac_ct_AR" >&5 +echo "${ECHO_T}$ac_ct_AR" >&6 +else + echo "$as_me:2312: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + AR=$ac_ct_AR +else + AR="$ac_cv_prog_AR" +fi + +echo "$as_me:2321: checking for POSIXized ISC" >&5 +echo $ECHO_N "checking for POSIXized ISC... $ECHO_C" >&6 +if test -d /etc/conf/kconfig.d && + grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 +then + echo "$as_me:2326: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + ISC=yes # If later tests want to check for ISC. + +cat >>confdefs.h <<\EOF +#define _POSIX_SOURCE 1 +EOF + + if test "$GCC" = yes; then + CC="$CC -posix" + else + CC="$CC -Xp" + fi +else + echo "$as_me:2340: result: no" >&5 +echo "${ECHO_T}no" >&6 + ISC= +fi + +echo "$as_me:2345: checking for $CC option to accept ANSI C" >&5 +echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_stdc=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +#line 2353 "configure" +#include "confdefs.h" +#include <stdarg.h> +#include <stdio.h> +#include <sys/types.h> +#include <sys/stat.h> +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX 10.20 and later -Ae +# HP-UX older versions -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (eval echo "$as_me:2402: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:2405: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:2408: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:2411: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_stdc=$ac_arg +break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext +done +rm -f conftest.$ac_ext conftest.$ac_objext +CC=$ac_save_CC + +fi + +case "x$ac_cv_prog_cc_stdc" in + x|xno) + echo "$as_me:2428: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6 ;; + *) + echo "$as_me:2431: result: $ac_cv_prog_cc_stdc" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 + CC="$CC $ac_cv_prog_cc_stdc" ;; +esac + +echo "$as_me:2436: checking for an ANSI C-conforming const" >&5 +echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 +if test "${ac_cv_c_const+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 2442 "configure" +#include "confdefs.h" + +int +main () +{ +/* FIXME: Include the comments suggested by Paul. */ +#ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; + const charset x; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *ccp; + char **p; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + ccp = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++ccp; + p = (char**) ccp; + ccp = (char const *const *) p; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + } +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:2500: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:2503: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:2506: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:2509: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_c_const=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_c_const=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:2519: result: $ac_cv_c_const" >&5 +echo "${ECHO_T}$ac_cv_c_const" >&6 +if test $ac_cv_c_const = no; then + +cat >>confdefs.h <<\EOF +#define const +EOF + +fi + +echo "$as_me:2529: checking for makeflags variable" >&5 +echo $ECHO_N "checking for makeflags variable... $ECHO_C" >&6 +if test "${cf_cv_makeflags+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cf_cv_makeflags='' + for cf_option in '-${MAKEFLAGS}' '${MFLAGS}' + do + cat >cf_makeflags.tmp <<CF_EOF +SHELL = /bin/sh +all : + @ echo '.$cf_option' +CF_EOF + cf_result=`${MAKE-make} -k -f cf_makeflags.tmp 2>/dev/null | sed -e 's,[ ]*$,,'` + case "$cf_result" in + .*k) + cf_result=`${MAKE-make} -k -f cf_makeflags.tmp CC=cc 2>/dev/null` + case "$cf_result" in + .*CC=*) cf_cv_makeflags= + ;; + *) cf_cv_makeflags=$cf_option + ;; + esac + break + ;; + .-) ;; + *) echo "given option \"$cf_option\", no match \"$cf_result\"" + ;; + esac + done + rm -f cf_makeflags.tmp + +fi +echo "$as_me:2563: result: $cf_cv_makeflags" >&5 +echo "${ECHO_T}$cf_cv_makeflags" >&6 + +echo "$as_me:2566: checking if filesystem supports mixed-case filenames" >&5 +echo $ECHO_N "checking if filesystem supports mixed-case filenames... $ECHO_C" >&6 +if test "${cf_cv_mixedcase+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +if test "$cross_compiling" = yes ; then + case $target_alias in #(vi + *-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-mingw32*|*-uwin*) #(vi + cf_cv_mixedcase=no + ;; + *) + cf_cv_mixedcase=yes + ;; + esac +else + rm -f conftest CONFTEST + echo test >conftest + if test -f CONFTEST ; then + cf_cv_mixedcase=no + else + cf_cv_mixedcase=yes + fi + rm -f conftest CONFTEST +fi + +fi +echo "$as_me:2593: result: $cf_cv_mixedcase" >&5 +echo "${ECHO_T}$cf_cv_mixedcase" >&6 +test "$cf_cv_mixedcase" = yes && cat >>confdefs.h <<\EOF +#define MIXEDCASE_FILENAMES 1 +EOF + +for ac_prog in exctags ctags +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:2603: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CTAGS+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CTAGS"; then + ac_cv_prog_CTAGS="$CTAGS" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_CTAGS="$ac_prog" +echo "$as_me:2618: found $ac_dir/$ac_word" >&5 +break +done + +fi +fi +CTAGS=$ac_cv_prog_CTAGS +if test -n "$CTAGS"; then + echo "$as_me:2626: result: $CTAGS" >&5 +echo "${ECHO_T}$CTAGS" >&6 +else + echo "$as_me:2629: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$CTAGS" && break +done + +for ac_prog in exetags etags +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:2640: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ETAGS+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ETAGS"; then + ac_cv_prog_ETAGS="$ETAGS" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_ETAGS="$ac_prog" +echo "$as_me:2655: found $ac_dir/$ac_word" >&5 +break +done + +fi +fi +ETAGS=$ac_cv_prog_ETAGS +if test -n "$ETAGS"; then + echo "$as_me:2663: result: $ETAGS" >&5 +echo "${ECHO_T}$ETAGS" >&6 +else + echo "$as_me:2666: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ETAGS" && break +done + +# Extract the first word of "${CTAGS-ctags}", so it can be a program name with args. +set dummy ${CTAGS-ctags}; ac_word=$2 +echo "$as_me:2675: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_MAKE_LOWER_TAGS+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$MAKE_LOWER_TAGS"; then + ac_cv_prog_MAKE_LOWER_TAGS="$MAKE_LOWER_TAGS" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_MAKE_LOWER_TAGS="yes" +echo "$as_me:2690: found $ac_dir/$ac_word" >&5 +break +done + + test -z "$ac_cv_prog_MAKE_LOWER_TAGS" && ac_cv_prog_MAKE_LOWER_TAGS="no" +fi +fi +MAKE_LOWER_TAGS=$ac_cv_prog_MAKE_LOWER_TAGS +if test -n "$MAKE_LOWER_TAGS"; then + echo "$as_me:2699: result: $MAKE_LOWER_TAGS" >&5 +echo "${ECHO_T}$MAKE_LOWER_TAGS" >&6 +else + echo "$as_me:2702: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +if test "$cf_cv_mixedcase" = yes ; then + # Extract the first word of "${ETAGS-etags}", so it can be a program name with args. +set dummy ${ETAGS-etags}; ac_word=$2 +echo "$as_me:2709: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_MAKE_UPPER_TAGS+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$MAKE_UPPER_TAGS"; then + ac_cv_prog_MAKE_UPPER_TAGS="$MAKE_UPPER_TAGS" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_MAKE_UPPER_TAGS="yes" +echo "$as_me:2724: found $ac_dir/$ac_word" >&5 +break +done + + test -z "$ac_cv_prog_MAKE_UPPER_TAGS" && ac_cv_prog_MAKE_UPPER_TAGS="no" +fi +fi +MAKE_UPPER_TAGS=$ac_cv_prog_MAKE_UPPER_TAGS +if test -n "$MAKE_UPPER_TAGS"; then + echo "$as_me:2733: result: $MAKE_UPPER_TAGS" >&5 +echo "${ECHO_T}$MAKE_UPPER_TAGS" >&6 +else + echo "$as_me:2736: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +else + MAKE_UPPER_TAGS=no +fi + +if test "$MAKE_UPPER_TAGS" = yes ; then + MAKE_UPPER_TAGS= +else + MAKE_UPPER_TAGS="#" +fi + +if test "$MAKE_LOWER_TAGS" = yes ; then + MAKE_LOWER_TAGS= +else + MAKE_LOWER_TAGS="#" +fi + +echo "$as_me:2756: checking if you want to see long compiling messages" >&5 +echo $ECHO_N "checking if you want to see long compiling messages... $ECHO_C" >&6 + +# Check whether --enable-echo or --disable-echo was given. +if test "${enable_echo+set}" = set; then + enableval="$enable_echo" + test "$enableval" != no && enableval=yes + if test "$enableval" != "yes" ; then + + ECHO_LT='--silent' + ECHO_LD='@echo linking $@;' + RULE_CC='@echo compiling $<' + SHOW_CC='@echo compiling $@' + ECHO_CC='@' + + else + + ECHO_LT='' + ECHO_LD='' + RULE_CC='' + SHOW_CC='' + ECHO_CC='' + + fi +else + enableval=yes + + ECHO_LT='' + ECHO_LD='' + RULE_CC='' + SHOW_CC='' + ECHO_CC='' + +fi; +echo "$as_me:2790: result: $enableval" >&5 +echo "${ECHO_T}$enableval" >&6 + +# Make sure we can run config.sub. +$ac_config_sub sun4 >/dev/null 2>&1 || + { { echo "$as_me:2795: error: cannot run $ac_config_sub" >&5 +echo "$as_me: error: cannot run $ac_config_sub" >&2;} + { (exit 1); exit 1; }; } + +echo "$as_me:2799: checking build system type" >&5 +echo $ECHO_N "checking build system type... $ECHO_C" >&6 +if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_build_alias=$build_alias +test -z "$ac_cv_build_alias" && + ac_cv_build_alias=`$ac_config_guess` +test -z "$ac_cv_build_alias" && + { { echo "$as_me:2808: error: cannot guess build type; you must specify one" >&5 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || + { { echo "$as_me:2812: error: $ac_config_sub $ac_cv_build_alias failed." >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed." >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:2817: result: $ac_cv_build" >&5 +echo "${ECHO_T}$ac_cv_build" >&6 +build=$ac_cv_build +build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +if test -f $srcdir/config.guess || test -f $ac_aux_dir/config.guess ; then + echo "$as_me:2825: checking host system type" >&5 +echo $ECHO_N "checking host system type... $ECHO_C" >&6 +if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_host_alias=$host_alias +test -z "$ac_cv_host_alias" && + ac_cv_host_alias=$ac_cv_build_alias +ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || + { { echo "$as_me:2834: error: $ac_config_sub $ac_cv_host_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:2839: result: $ac_cv_host" >&5 +echo "${ECHO_T}$ac_cv_host" >&6 +host=$ac_cv_host +host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + system_name="$host_os" +else + system_name="`(uname -s -r) 2>/dev/null`" + if test -z "$system_name" ; then + system_name="`(hostname) 2>/dev/null`" + fi +fi +test -n "$system_name" && cat >>confdefs.h <<EOF +#define SYSTEM_NAME "$system_name" +EOF + +if test "${cf_cv_system_name+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cf_cv_system_name="$system_name" +fi + +test -z "$system_name" && system_name="$cf_cv_system_name" +test -n "$cf_cv_system_name" && echo "$as_me:2864: result: Configuring for $cf_cv_system_name" >&5 +echo "${ECHO_T}Configuring for $cf_cv_system_name" >&6 + +if test ".$system_name" != ".$cf_cv_system_name" ; then + echo "$as_me:2868: result: Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)" >&5 +echo "${ECHO_T}Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)" >&6 + { { echo "$as_me:2870: error: \"Please remove config.cache and try again.\"" >&5 +echo "$as_me: error: \"Please remove config.cache and try again.\"" >&2;} + { (exit 1); exit 1; }; } +fi + +case $cf_cv_system_name in +os2*) + CFLAGS="$CFLAGS -Zmt" + CPPFLAGS="$CPPFLAGS -D__ST_MT_ERRNO__" + CXXFLAGS="$CXXFLAGS -Zmt" + # autoconf's macro sets -Zexe and suffix both, which conflict:w + LDFLAGS="$LDFLAGS -Zmt -Zcrtdll" + ac_cv_exeext=.exe + ;; +esac + +PROG_EXT="$EXEEXT" + +test -n "$PROG_EXT" && cat >>confdefs.h <<EOF +#define PROG_EXT "$PROG_EXT" +EOF + + case $cf_cv_system_name in + os2*) PATH_SEPARATOR=';' ;; + *) PATH_SEPARATOR=':' ;; + esac + + case $cf_cv_system_name in #(vi + OS/2*|os2*) #(vi + LIB_PREFIX='' + ;; + *) LIB_PREFIX='lib' + ;; + esac + +cf_XOPEN_SOURCE=500 +cf_POSIX_C_SOURCE=199506L +cf_xopen_source= + +case $host_os in #(vi +aix[456]*) #(vi + cf_xopen_source="-D_ALL_SOURCE" + ;; +darwin[0-8].*) #(vi + cf_xopen_source="-D_APPLE_C_SOURCE" + ;; +darwin*) #(vi + cf_xopen_source="-D_DARWIN_C_SOURCE" + ;; +freebsd*|dragonfly*) #(vi + # 5.x headers associate + # _XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L + # _XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L + cf_POSIX_C_SOURCE=200112L + cf_XOPEN_SOURCE=600 + cf_xopen_source="-D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" + ;; +hpux11*) #(vi + cf_xopen_source="-D_HPUX_SOURCE -D_XOPEN_SOURCE=500" + ;; +hpux*) #(vi + cf_xopen_source="-D_HPUX_SOURCE" + ;; +irix[56].*) #(vi + cf_xopen_source="-D_SGI_SOURCE" + ;; +linux*|gnu*|mint*|k*bsd*-gnu) #(vi + +echo "$as_me:2938: checking if we must define _GNU_SOURCE" >&5 +echo $ECHO_N "checking if we must define _GNU_SOURCE... $ECHO_C" >&6 +if test "${cf_cv_gnu_source+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +cat >conftest.$ac_ext <<_ACEOF +#line 2945 "configure" +#include "confdefs.h" +#include <sys/types.h> +int +main () +{ + +#ifndef _XOPEN_SOURCE +make an error +#endif + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:2960: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:2963: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:2966: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:2969: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_cv_gnu_source=no +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_save="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" + cat >conftest.$ac_ext <<_ACEOF +#line 2978 "configure" +#include "confdefs.h" +#include <sys/types.h> +int +main () +{ + +#ifdef _XOPEN_SOURCE +make an error +#endif + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:2993: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:2996: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:2999: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3002: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_cv_gnu_source=no +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_cv_gnu_source=yes +fi +rm -f conftest.$ac_objext conftest.$ac_ext + CPPFLAGS="$cf_save" + +fi +rm -f conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:3017: result: $cf_cv_gnu_source" >&5 +echo "${ECHO_T}$cf_cv_gnu_source" >&6 +test "$cf_cv_gnu_source" = yes && CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" + + ;; +mirbsd*) #(vi + # setting _XOPEN_SOURCE or _POSIX_SOURCE breaks <arpa/inet.h> + ;; +netbsd*) #(vi + # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw + ;; +openbsd*) #(vi + # setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw + ;; +osf[45]*) #(vi + cf_xopen_source="-D_OSF_SOURCE" + ;; +nto-qnx*) #(vi + cf_xopen_source="-D_QNX_SOURCE" + ;; +sco*) #(vi + # setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer + ;; +solaris2.1[0-9]) #(vi + cf_xopen_source="-D__EXTENSIONS__ -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" + ;; +solaris2.[1-9]) #(vi + cf_xopen_source="-D__EXTENSIONS__" + ;; +*) + echo "$as_me:3047: checking if we should define _XOPEN_SOURCE" >&5 +echo $ECHO_N "checking if we should define _XOPEN_SOURCE... $ECHO_C" >&6 +if test "${cf_cv_xopen_source+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +#line 3054 "configure" +#include "confdefs.h" +#include <sys/types.h> +int +main () +{ + +#ifndef _XOPEN_SOURCE +make an error +#endif + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:3069: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:3072: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:3075: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3078: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_cv_xopen_source=no +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_save="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" + cat >conftest.$ac_ext <<_ACEOF +#line 3087 "configure" +#include "confdefs.h" +#include <sys/types.h> +int +main () +{ + +#ifdef _XOPEN_SOURCE +make an error +#endif + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:3102: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:3105: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:3108: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3111: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_cv_xopen_source=no +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_cv_xopen_source=$cf_XOPEN_SOURCE +fi +rm -f conftest.$ac_objext conftest.$ac_ext + CPPFLAGS="$cf_save" + +fi +rm -f conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:3126: result: $cf_cv_xopen_source" >&5 +echo "${ECHO_T}$cf_cv_xopen_source" >&6 + if test "$cf_cv_xopen_source" != no ; then + +CFLAGS=`echo "$CFLAGS" | \ + sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ + -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'` + +CPPFLAGS=`echo "$CPPFLAGS" | \ + sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ + -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'` + + cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source" + +cf_fix_cppflags=no +cf_new_cflags= +cf_new_cppflags= +cf_new_extra_cppflags= + +for cf_add_cflags in $cf_temp_xopen_source +do +case $cf_fix_cppflags in +no) + case $cf_add_cflags in #(vi + -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi + case $cf_add_cflags in + -D*) + cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + + test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=yes + + if test $cf_fix_cppflags = yes ; then + cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + continue + elif test "${cf_tst_cflags}" = "\"'" ; then + cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + continue + fi + ;; + esac + case "$CPPFLAGS" in + *$cf_add_cflags) #(vi + ;; + *) #(vi + case $cf_add_cflags in #(vi + -D*) + cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` + +CPPFLAGS=`echo "$CPPFLAGS" | \ + sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ + -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` + + ;; + esac + cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" + ;; + esac + ;; + *) + cf_new_cflags="$cf_new_cflags $cf_add_cflags" + ;; + esac + ;; +yes) + cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + + test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=no + ;; +esac +done + +if test -n "$cf_new_cflags" ; then + + CFLAGS="$CFLAGS $cf_new_cflags" +fi + +if test -n "$cf_new_cppflags" ; then + + CPPFLAGS="$CPPFLAGS $cf_new_cppflags" +fi + +if test -n "$cf_new_extra_cppflags" ; then + + EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" +fi + + fi + +cf_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE + +cf_save_CFLAGS="$CFLAGS" +cf_save_CPPFLAGS="$CPPFLAGS" + +cf_trim_CFLAGS=`echo "$cf_save_CFLAGS" | \ + sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ + -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'` + +cf_trim_CPPFLAGS=`echo "$cf_save_CPPFLAGS" | \ + sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ + -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'` + +echo "$as_me:3233: checking if we should define _POSIX_C_SOURCE" >&5 +echo $ECHO_N "checking if we should define _POSIX_C_SOURCE... $ECHO_C" >&6 +if test "${cf_cv_posix_c_source+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +echo "${as_me-configure}:3239: testing if the symbol is already defined go no further ..." 1>&5 + + cat >conftest.$ac_ext <<_ACEOF +#line 3242 "configure" +#include "confdefs.h" +#include <sys/types.h> +int +main () +{ + +#ifndef _POSIX_C_SOURCE +make an error +#endif + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:3257: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:3260: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:3263: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3266: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_cv_posix_c_source=no +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_want_posix_source=no + case .$cf_POSIX_C_SOURCE in #(vi + .[12]??*) #(vi + cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" + ;; + .2) #(vi + cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" + cf_want_posix_source=yes + ;; + .*) + cf_want_posix_source=yes + ;; + esac + if test "$cf_want_posix_source" = yes ; then + cat >conftest.$ac_ext <<_ACEOF +#line 3287 "configure" +#include "confdefs.h" +#include <sys/types.h> +int +main () +{ + +#ifdef _POSIX_SOURCE +make an error +#endif + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:3302: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:3305: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:3308: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3311: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE" +fi +rm -f conftest.$ac_objext conftest.$ac_ext + fi + +echo "${as_me-configure}:3322: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5 + + CFLAGS="$cf_trim_CFLAGS" + CPPFLAGS="$cf_trim_CPPFLAGS $cf_cv_posix_c_source" + +echo "${as_me-configure}:3327: testing if the second compile does not leave our definition intact error ..." 1>&5 + + cat >conftest.$ac_ext <<_ACEOF +#line 3330 "configure" +#include "confdefs.h" +#include <sys/types.h> +int +main () +{ + +#ifndef _POSIX_C_SOURCE +make an error +#endif + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:3345: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:3348: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:3351: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3354: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_cv_posix_c_source=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext + CFLAGS="$cf_save_CFLAGS" + CPPFLAGS="$cf_save_CPPFLAGS" + +fi +rm -f conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:3370: result: $cf_cv_posix_c_source" >&5 +echo "${ECHO_T}$cf_cv_posix_c_source" >&6 + +if test "$cf_cv_posix_c_source" != no ; then + CFLAGS="$cf_trim_CFLAGS" + CPPFLAGS="$cf_trim_CPPFLAGS" + +cf_fix_cppflags=no +cf_new_cflags= +cf_new_cppflags= +cf_new_extra_cppflags= + +for cf_add_cflags in $cf_cv_posix_c_source +do +case $cf_fix_cppflags in +no) + case $cf_add_cflags in #(vi + -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi + case $cf_add_cflags in + -D*) + cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + + test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=yes + + if test $cf_fix_cppflags = yes ; then + cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + continue + elif test "${cf_tst_cflags}" = "\"'" ; then + cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + continue + fi + ;; + esac + case "$CPPFLAGS" in + *$cf_add_cflags) #(vi + ;; + *) #(vi + case $cf_add_cflags in #(vi + -D*) + cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` + +CPPFLAGS=`echo "$CPPFLAGS" | \ + sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ + -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` + + ;; + esac + cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" + ;; + esac + ;; + *) + cf_new_cflags="$cf_new_cflags $cf_add_cflags" + ;; + esac + ;; +yes) + cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + + test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=no + ;; +esac +done + +if test -n "$cf_new_cflags" ; then + + CFLAGS="$CFLAGS $cf_new_cflags" +fi + +if test -n "$cf_new_cppflags" ; then + + CPPFLAGS="$CPPFLAGS $cf_new_cppflags" +fi + +if test -n "$cf_new_extra_cppflags" ; then + + EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" +fi + +fi + + ;; +esac + +if test -n "$cf_xopen_source" ; then + +cf_fix_cppflags=no +cf_new_cflags= +cf_new_cppflags= +cf_new_extra_cppflags= + +for cf_add_cflags in $cf_xopen_source +do +case $cf_fix_cppflags in +no) + case $cf_add_cflags in #(vi + -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi + case $cf_add_cflags in + -D*) + cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + + test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=yes + + if test $cf_fix_cppflags = yes ; then + cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + continue + elif test "${cf_tst_cflags}" = "\"'" ; then + cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + continue + fi + ;; + esac + case "$CPPFLAGS" in + *$cf_add_cflags) #(vi + ;; + *) #(vi + case $cf_add_cflags in #(vi + -D*) + cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` + +CPPFLAGS=`echo "$CPPFLAGS" | \ + sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ + -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` + + ;; + esac + cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" + ;; + esac + ;; + *) + cf_new_cflags="$cf_new_cflags $cf_add_cflags" + ;; + esac + ;; +yes) + cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + + test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=no + ;; +esac +done + +if test -n "$cf_new_cflags" ; then + + CFLAGS="$CFLAGS $cf_new_cflags" +fi + +if test -n "$cf_new_cppflags" ; then + + CPPFLAGS="$CPPFLAGS $cf_new_cppflags" +fi + +if test -n "$cf_new_extra_cppflags" ; then + + EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" +fi + +fi + +# Check whether --enable-largefile or --disable-largefile was given. +if test "${enable_largefile+set}" = set; then + enableval="$enable_largefile" + +fi; +if test "$enable_largefile" != no; then + + echo "$as_me:3549: checking for special C compiler options needed for large files" >&5 +echo $ECHO_N "checking for special C compiler options needed for large files... $ECHO_C" >&6 +if test "${ac_cv_sys_largefile_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat >conftest.$ac_ext <<_ACEOF +#line 3561 "configure" +#include "confdefs.h" +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF + rm -f conftest.$ac_objext +if { (eval echo "$as_me:3581: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:3584: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:3587: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3590: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext + CC="$CC -n32" + rm -f conftest.$ac_objext +if { (eval echo "$as_me:3600: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:3603: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:3606: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3609: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sys_largefile_CC=' -n32'; break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +echo "$as_me:3623: result: $ac_cv_sys_largefile_CC" >&5 +echo "${ECHO_T}$ac_cv_sys_largefile_CC" >&6 + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + echo "$as_me:3629: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +echo $ECHO_N "checking for _FILE_OFFSET_BITS value needed for large files... $ECHO_C" >&6 +if test "${ac_cv_sys_file_offset_bits+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + while :; do + ac_cv_sys_file_offset_bits=no + cat >conftest.$ac_ext <<_ACEOF +#line 3637 "configure" +#include "confdefs.h" +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:3657: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:3660: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:3663: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3666: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +#line 3675 "configure" +#include "confdefs.h" +#define _FILE_OFFSET_BITS 64 +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:3696: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:3699: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:3702: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3705: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sys_file_offset_bits=64; break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext conftest.$ac_ext + break +done +fi +echo "$as_me:3716: result: $ac_cv_sys_file_offset_bits" >&5 +echo "${ECHO_T}$ac_cv_sys_file_offset_bits" >&6 +if test "$ac_cv_sys_file_offset_bits" != no; then + +cat >>confdefs.h <<EOF +#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits +EOF + +fi +rm -f conftest* + echo "$as_me:3726: checking for _LARGE_FILES value needed for large files" >&5 +echo $ECHO_N "checking for _LARGE_FILES value needed for large files... $ECHO_C" >&6 +if test "${ac_cv_sys_large_files+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + while :; do + ac_cv_sys_large_files=no + cat >conftest.$ac_ext <<_ACEOF +#line 3734 "configure" +#include "confdefs.h" +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:3754: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:3757: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:3760: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3763: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +#line 3772 "configure" +#include "confdefs.h" +#define _LARGE_FILES 1 +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:3793: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:3796: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:3799: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3802: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sys_large_files=1; break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext conftest.$ac_ext + break +done +fi +echo "$as_me:3813: result: $ac_cv_sys_large_files" >&5 +echo "${ECHO_T}$ac_cv_sys_large_files" >&6 +if test "$ac_cv_sys_large_files" != no; then + +cat >>confdefs.h <<EOF +#define _LARGE_FILES $ac_cv_sys_large_files +EOF + +fi +rm -f conftest* +fi + + if test "$enable_largefile" != no ; then + echo "$as_me:3826: checking for _LARGEFILE_SOURCE value needed for large files" >&5 +echo $ECHO_N "checking for _LARGEFILE_SOURCE value needed for large files... $ECHO_C" >&6 +if test "${ac_cv_sys_largefile_source+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + while :; do + ac_cv_sys_largefile_source=no + cat >conftest.$ac_ext <<_ACEOF +#line 3834 "configure" +#include "confdefs.h" +#include <stdio.h> +int +main () +{ +return !fseeko; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:3846: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:3849: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:3852: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3855: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +#line 3864 "configure" +#include "confdefs.h" +#define _LARGEFILE_SOURCE 1 +#include <stdio.h> +int +main () +{ +return !fseeko; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:3877: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:3880: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:3883: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3886: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sys_largefile_source=1; break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext conftest.$ac_ext + break +done +fi +echo "$as_me:3897: result: $ac_cv_sys_largefile_source" >&5 +echo "${ECHO_T}$ac_cv_sys_largefile_source" >&6 +if test "$ac_cv_sys_largefile_source" != no; then + +cat >>confdefs.h <<EOF +#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source +EOF + +fi +rm -f conftest* + +# We used to try defining _XOPEN_SOURCE=500 too, to work around a bug +# in glibc 2.1.3, but that breaks too many other things. +# If you want fseeko and ftello with glibc, upgrade to a fixed glibc. +echo "$as_me:3911: checking for fseeko" >&5 +echo $ECHO_N "checking for fseeko... $ECHO_C" >&6 +if test "${ac_cv_func_fseeko+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 3917 "configure" +#include "confdefs.h" +#include <stdio.h> +int +main () +{ +return fseeko && fseeko (stdin, 0, 0); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:3929: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:3932: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:3935: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3938: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_fseeko=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_func_fseeko=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:3948: result: $ac_cv_func_fseeko" >&5 +echo "${ECHO_T}$ac_cv_func_fseeko" >&6 +if test $ac_cv_func_fseeko = yes; then + +cat >>confdefs.h <<\EOF +#define HAVE_FSEEKO 1 +EOF + +fi + + # Normally we would collect these definitions in the config.h, + # but (like _XOPEN_SOURCE), some environments rely on having these + # defined before any of the system headers are included. Another + # case comes up with C++, e.g., on AIX the compiler compiles the + # header files by themselves before looking at the body files it is + # told to compile. For ncurses, those header files do not include + # the config.h + test "$ac_cv_sys_large_files" != no && CPPFLAGS="$CPPFLAGS -D_LARGE_FILES " + test "$ac_cv_sys_largefile_source" != no && CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE " + test "$ac_cv_sys_file_offset_bits" != no && CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits " + + echo "$as_me:3969: checking whether to use struct dirent64" >&5 +echo $ECHO_N "checking whether to use struct dirent64... $ECHO_C" >&6 +if test "${cf_cv_struct_dirent64+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +#line 3976 "configure" +#include "confdefs.h" + +#include <sys/types.h> +#include <dirent.h> + +int +main () +{ + + /* if transitional largefile support is setup, this is true */ + extern struct dirent64 * readdir(DIR *); + struct dirent64 *x = readdir((DIR *)0); + struct dirent *y = readdir((DIR *)0); + int z = x - y; + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:3997: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:4000: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:4003: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:4006: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_cv_struct_dirent64=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_cv_struct_dirent64=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:4017: result: $cf_cv_struct_dirent64" >&5 +echo "${ECHO_T}$cf_cv_struct_dirent64" >&6 + test "$cf_cv_struct_dirent64" = yes && cat >>confdefs.h <<\EOF +#define HAVE_STRUCT_DIRENT64 1 +EOF + + fi + +GCC_VERSION=none +if test "$GCC" = yes ; then + echo "$as_me:4027: checking version of $CC" >&5 +echo $ECHO_N "checking version of $CC... $ECHO_C" >&6 + GCC_VERSION="`${CC} --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(GCC) //' -e 's/^[^0-9.]*//' -e 's/[^0-9.].*//'`" + test -z "$GCC_VERSION" && GCC_VERSION=unknown + echo "$as_me:4031: result: $GCC_VERSION" >&5 +echo "${ECHO_T}$GCC_VERSION" >&6 +fi + +if ( test "$GCC" = yes || test "$GXX" = yes ) +then +echo "$as_me:4037: checking if you want to check for gcc warnings" >&5 +echo $ECHO_N "checking if you want to check for gcc warnings... $ECHO_C" >&6 + +# Check whether --with-warnings or --without-warnings was given. +if test "${with_warnings+set}" = set; then + withval="$with_warnings" + cf_opt_with_warnings=$withval +else + cf_opt_with_warnings=no +fi; +echo "$as_me:4047: result: $cf_opt_with_warnings" >&5 +echo "${ECHO_T}$cf_opt_with_warnings" >&6 +if test "$cf_opt_with_warnings" != no ; then + +if test "$GCC" = yes +then +cat > conftest.i <<EOF +#ifndef GCC_PRINTF +#define GCC_PRINTF 0 +#endif +#ifndef GCC_SCANF +#define GCC_SCANF 0 +#endif +#ifndef GCC_NORETURN +#define GCC_NORETURN /* nothing */ +#endif +#ifndef GCC_UNUSED +#define GCC_UNUSED /* nothing */ +#endif +EOF +if test "$GCC" = yes +then + { echo "$as_me:4069: checking for $CC __attribute__ directives..." >&5 +echo "$as_me: checking for $CC __attribute__ directives..." >&6;} +cat > conftest.$ac_ext <<EOF +#line 4072 "${as_me-configure}" +#include "confdefs.h" +#include "conftest.h" +#include "conftest.i" +#if GCC_PRINTF +#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var))) +#else +#define GCC_PRINTFLIKE(fmt,var) /*nothing*/ +#endif +#if GCC_SCANF +#define GCC_SCANFLIKE(fmt,var) __attribute__((format(scanf,fmt,var))) +#else +#define GCC_SCANFLIKE(fmt,var) /*nothing*/ +#endif +extern void wow(char *,...) GCC_SCANFLIKE(1,2); +extern void oops(char *,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN; +extern void foo(void) GCC_NORETURN; +int main(int argc GCC_UNUSED, char *argv[] GCC_UNUSED) { return 0; } +EOF + cf_printf_attribute=no + cf_scanf_attribute=no + for cf_attribute in scanf printf unused noreturn + do + +cf_ATTRIBUTE=`echo "$cf_attribute" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` + + cf_directive="__attribute__(($cf_attribute))" + echo "checking for $CC $cf_directive" 1>&5 + + case $cf_attribute in #(vi + printf) #(vi + cf_printf_attribute=yes + cat >conftest.h <<EOF +#define GCC_$cf_ATTRIBUTE 1 +EOF + ;; + scanf) #(vi + cf_scanf_attribute=yes + cat >conftest.h <<EOF +#define GCC_$cf_ATTRIBUTE 1 +EOF + ;; + *) #(vi + cat >conftest.h <<EOF +#define GCC_$cf_ATTRIBUTE $cf_directive +EOF + ;; + esac + + if { (eval echo "$as_me:4121: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:4124: \$? = $ac_status" >&5 + (exit $ac_status); }; then + test -n "$verbose" && echo "$as_me:4126: result: ... $cf_attribute" >&5 +echo "${ECHO_T}... $cf_attribute" >&6 + cat conftest.h >>confdefs.h + case $cf_attribute in #(vi + printf) #(vi + if test "$cf_printf_attribute" = no ; then + cat >>confdefs.h <<EOF +#define GCC_PRINTFLIKE(fmt,var) /* nothing */ +EOF + else + cat >>confdefs.h <<EOF +#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var))) +EOF + fi + ;; + scanf) #(vi + if test "$cf_scanf_attribute" = no ; then + cat >>confdefs.h <<EOF +#define GCC_SCANFLIKE(fmt,var) /* nothing */ +EOF + else + cat >>confdefs.h <<EOF +#define GCC_SCANFLIKE(fmt,var) __attribute__((format(scanf,fmt,var))) +EOF + fi + ;; + esac + fi + done +else + fgrep define conftest.i >>confdefs.h +fi +rm -rf conftest* +fi + +INTEL_COMPILER=no + +if test "$GCC" = yes ; then + case $host_os in + linux*|gnu*) + echo "$as_me:4166: checking if this is really Intel C compiler" >&5 +echo $ECHO_N "checking if this is really Intel C compiler... $ECHO_C" >&6 + cf_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -no-gcc" + cat >conftest.$ac_ext <<_ACEOF +#line 4171 "configure" +#include "confdefs.h" + +int +main () +{ + +#ifdef __INTEL_COMPILER +#else +make an error +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:4188: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:4191: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:4194: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:4197: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + INTEL_COMPILER=yes +cf_save_CFLAGS="$cf_save_CFLAGS -we147 -no-gcc" + +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext conftest.$ac_ext + CFLAGS="$cf_save_CFLAGS" + echo "$as_me:4208: result: $INTEL_COMPILER" >&5 +echo "${ECHO_T}$INTEL_COMPILER" >&6 + ;; + esac +fi + +cat > conftest.$ac_ext <<EOF +#line 4215 "${as_me-configure}" +int main(int argc, char *argv[]) { return (argv[argc-1] == 0) ; } +EOF + +if test "$INTEL_COMPILER" = yes +then +# The "-wdXXX" options suppress warnings: +# remark #1419: external declaration in primary source file +# remark #1683: explicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem) +# remark #1684: conversion from pointer to same-sized integral type (potential portability problem) +# remark #193: zero used for undefined preprocessing identifier +# remark #593: variable "curs_sb_left_arrow" was set but never used +# remark #810: conversion from "int" to "Dimension={unsigned short}" may lose significant bits +# remark #869: parameter "tw" was never referenced +# remark #981: operands are evaluated in unspecified order +# warning #279: controlling expression is constant + + { echo "$as_me:4232: checking for $CC warning options..." >&5 +echo "$as_me: checking for $CC warning options..." >&6;} + cf_save_CFLAGS="$CFLAGS" + EXTRA_CFLAGS="-Wall" + for cf_opt in \ + wd1419 \ + wd1683 \ + wd1684 \ + wd193 \ + wd593 \ + wd279 \ + wd810 \ + wd869 \ + wd981 + do + CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt" + if { (eval echo "$as_me:4248: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:4251: \$? = $ac_status" >&5 + (exit $ac_status); }; then + test -n "$verbose" && echo "$as_me:4253: result: ... -$cf_opt" >&5 +echo "${ECHO_T}... -$cf_opt" >&6 + EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt" + fi + done + CFLAGS="$cf_save_CFLAGS" + +elif test "$GCC" = yes +then + { echo "$as_me:4262: checking for $CC warning options..." >&5 +echo "$as_me: checking for $CC warning options..." >&6;} + cf_save_CFLAGS="$CFLAGS" + EXTRA_CFLAGS= + cf_warn_CONST="" + test "$with_ext_const" = yes && cf_warn_CONST="Wwrite-strings" + for cf_opt in W Wall \ + Wbad-function-cast \ + Wcast-align \ + Wcast-qual \ + Winline \ + Wmissing-declarations \ + Wmissing-prototypes \ + Wnested-externs \ + Wpointer-arith \ + Wshadow \ + Wstrict-prototypes \ + Wundef $cf_warn_CONST + do + CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt" + if { (eval echo "$as_me:4282: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:4285: \$? = $ac_status" >&5 + (exit $ac_status); }; then + test -n "$verbose" && echo "$as_me:4287: result: ... -$cf_opt" >&5 +echo "${ECHO_T}... -$cf_opt" >&6 + case $cf_opt in #(vi + Wcast-qual) #(vi + CPPFLAGS="$CPPFLAGS -DXTSTRINGDEFINES" + ;; + Winline) #(vi + case $GCC_VERSION in + [34].*) + test -n "$verbose" && echo " feature is broken in gcc $GCC_VERSION" 1>&6 + +echo "${as_me-configure}:4298: testing feature is broken in gcc $GCC_VERSION ..." 1>&5 + + continue;; + esac + ;; + esac + EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt" + fi + done + CFLAGS="$cf_save_CFLAGS" +fi +rm -f conftest* + +fi +fi + +EXTRAOBJS="" +echo "$as_me:4315: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 4321 "configure" +#include "confdefs.h" +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <float.h> + +_ACEOF +if { (eval echo "$as_me:4329: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:4335: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_header_stdc=no +fi +rm -f conftest.err conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +#line 4357 "configure" +#include "confdefs.h" +#include <string.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +#line 4375 "configure" +#include "confdefs.h" +#include <stdlib.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +#line 4396 "configure" +#include "confdefs.h" +#include <ctype.h> +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + $ac_main_return(2); + $ac_main_return (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:4422: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:4425: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:4427: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:4430: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_header_stdc=no +fi +rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +fi +echo "$as_me:4443: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6 +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\EOF +#define STDC_HEADERS 1 +EOF + +fi + +echo "$as_me:4453: checking for inline" >&5 +echo $ECHO_N "checking for inline... $ECHO_C" >&6 +if test "${ac_cv_c_inline+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat >conftest.$ac_ext <<_ACEOF +#line 4461 "configure" +#include "confdefs.h" +#ifndef __cplusplus +static $ac_kw int static_foo () {return 0; } +$ac_kw int foo () {return 0; } +#endif + +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:4470: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:4473: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:4476: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:4479: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_c_inline=$ac_kw; break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext conftest.$ac_ext +done + +fi +echo "$as_me:4490: result: $ac_cv_c_inline" >&5 +echo "${ECHO_T}$ac_cv_c_inline" >&6 +case $ac_cv_c_inline in + inline | yes) ;; + no) +cat >>confdefs.h <<\EOF +#define inline +EOF + ;; + *) cat >>confdefs.h <<EOF +#define inline $ac_cv_c_inline +EOF + ;; +esac + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:4511: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 4517 "configure" +#include "confdefs.h" +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:4523: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:4526: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:4529: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:4532: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +eval "$as_ac_Header=no" +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:4542: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<EOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +EOF + +fi +done + +echo "$as_me:4552: checking for off_t" >&5 +echo $ECHO_N "checking for off_t... $ECHO_C" >&6 +if test "${ac_cv_type_off_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 4558 "configure" +#include "confdefs.h" +$ac_includes_default +int +main () +{ +if ((off_t *) 0) + return 0; +if (sizeof (off_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:4573: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:4576: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:4579: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:4582: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_off_t=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_type_off_t=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:4592: result: $ac_cv_type_off_t" >&5 +echo "${ECHO_T}$ac_cv_type_off_t" >&6 +if test $ac_cv_type_off_t = yes; then + : +else + +cat >>confdefs.h <<EOF +#define off_t long +EOF + +fi + +echo "$as_me:4604: checking for size_t" >&5 +echo $ECHO_N "checking for size_t... $ECHO_C" >&6 +if test "${ac_cv_type_size_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 4610 "configure" +#include "confdefs.h" +$ac_includes_default +int +main () +{ +if ((size_t *) 0) + return 0; +if (sizeof (size_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:4625: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:4628: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:4631: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:4634: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_size_t=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_type_size_t=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:4644: result: $ac_cv_type_size_t" >&5 +echo "${ECHO_T}$ac_cv_type_size_t" >&6 +if test $ac_cv_type_size_t = yes; then + : +else + +cat >>confdefs.h <<EOF +#define size_t unsigned +EOF + +fi + +# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +# for constant arguments. Useless! +echo "$as_me:4658: checking for working alloca.h" >&5 +echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6 +if test "${ac_cv_working_alloca_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 4664 "configure" +#include "confdefs.h" +#include <alloca.h> +int +main () +{ +char *p = (char *) alloca (2 * sizeof (int)); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:4676: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:4679: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:4682: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:4685: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_working_alloca_h=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_working_alloca_h=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:4695: result: $ac_cv_working_alloca_h" >&5 +echo "${ECHO_T}$ac_cv_working_alloca_h" >&6 +if test $ac_cv_working_alloca_h = yes; then + +cat >>confdefs.h <<\EOF +#define HAVE_ALLOCA_H 1 +EOF + +fi + +echo "$as_me:4705: checking for alloca" >&5 +echo $ECHO_N "checking for alloca... $ECHO_C" >&6 +if test "${ac_cv_func_alloca_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 4711 "configure" +#include "confdefs.h" +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# ifdef _MSC_VER +# include <malloc.h> +# define alloca _alloca +# else +# if HAVE_ALLOCA_H +# include <alloca.h> +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +char *alloca (); +# endif +# endif +# endif +# endif +#endif + +int +main () +{ +char *p = (char *) alloca (1); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:4743: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:4746: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:4749: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:4752: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_alloca_works=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_func_alloca_works=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:4762: result: $ac_cv_func_alloca_works" >&5 +echo "${ECHO_T}$ac_cv_func_alloca_works" >&6 + +if test $ac_cv_func_alloca_works = yes; then + +cat >>confdefs.h <<\EOF +#define HAVE_ALLOCA 1 +EOF + +else + # The SVR3 libPW and SVR4 libucb both contain incompatible functions +# that cause trouble. Some versions do not even contain alloca or +# contain a buggy version. If you still want to use their alloca, +# use ar to extract alloca.o from them instead of compiling alloca.c. + +ALLOCA=alloca.$ac_objext + +cat >>confdefs.h <<\EOF +#define C_ALLOCA 1 +EOF + +echo "$as_me:4783: checking whether \`alloca.c' needs Cray hooks" >&5 +echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6 +if test "${ac_cv_os_cray+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 4789 "configure" +#include "confdefs.h" +#if defined(CRAY) && ! defined(CRAY2) +webecray +#else +wenotbecray +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "webecray" >/dev/null 2>&1; then + ac_cv_os_cray=yes +else + ac_cv_os_cray=no +fi +rm -f conftest* + +fi +echo "$as_me:4807: result: $ac_cv_os_cray" >&5 +echo "${ECHO_T}$ac_cv_os_cray" >&6 +if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:4812: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 4818 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +char (*f) (); + +int +main () +{ +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +f = $ac_func; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:4849: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:4852: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:4855: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:4858: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +eval "$as_ac_var=no" +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:4868: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + +cat >>confdefs.h <<EOF +#define CRAY_STACKSEG_END $ac_func +EOF + + break +fi + + done +fi + +echo "$as_me:4882: checking stack direction for C alloca" >&5 +echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6 +if test "${ac_cv_c_stack_direction+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_c_stack_direction=0 +else + cat >conftest.$ac_ext <<_ACEOF +#line 4891 "configure" +#include "confdefs.h" +int +find_stack_direction () +{ + static char *addr = 0; + auto char dummy; + if (addr == 0) + { + addr = &dummy; + return find_stack_direction (); + } + else + return (&dummy > addr) ? 1 : -1; +} + +int +main () +{ + $ac_main_return (find_stack_direction () < 0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:4914: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:4917: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:4919: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:4922: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_c_stack_direction=1 +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_c_stack_direction=-1 +fi +rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +echo "$as_me:4934: result: $ac_cv_c_stack_direction" >&5 +echo "${ECHO_T}$ac_cv_c_stack_direction" >&6 + +cat >>confdefs.h <<EOF +#define STACK_DIRECTION $ac_cv_c_stack_direction +EOF + +fi + +for ac_header in stdlib.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:4946: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 4952 "configure" +#include "confdefs.h" +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:4956: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:4962: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_ext +fi +echo "$as_me:4981: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<EOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +EOF + +fi +done + +for ac_func in getpagesize +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:4994: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 5000 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +char (*f) (); + +int +main () +{ +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +f = $ac_func; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:5031: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:5034: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:5037: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:5040: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +eval "$as_ac_var=no" +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:5050: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<EOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +EOF + +fi +done + +echo "$as_me:5060: checking for working mmap" >&5 +echo $ECHO_N "checking for working mmap... $ECHO_C" >&6 +if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_mmap_fixed_mapped=no +else + cat >conftest.$ac_ext <<_ACEOF +#line 5069 "configure" +#include "confdefs.h" +$ac_includes_default +/* Thanks to Mike Haertel and Jim Avera for this test. + Here is a matrix of mmap possibilities: + mmap private not fixed + mmap private fixed at somewhere currently unmapped + mmap private fixed at somewhere already mapped + mmap shared not fixed + mmap shared fixed at somewhere currently unmapped + mmap shared fixed at somewhere already mapped + For private mappings, we should verify that changes cannot be read() + back from the file, nor mmap's back from the file at a different + address. (There have been systems where private was not correctly + implemented like the infamous i386 svr4.0, and systems where the + VM page cache was not coherent with the file system buffer cache + like early versions of FreeBSD and possibly contemporary NetBSD.) + For shared mappings, we should conversely verify that changes get + propogated back to all the places they're supposed to be. + + Grep wants private fixed already mapped. + The main things grep needs to know about mmap are: + * does it exist and is it safe to write into the mmap'd area + * how to use it (BSD variants) */ + +#include <fcntl.h> +#include <sys/mman.h> + +#if !STDC_HEADERS && !HAVE_STDLIB_H +char *malloc (); +#endif + +/* This mess was copied from the GNU getpagesize.h. */ +#if !HAVE_GETPAGESIZE +/* Assume that all systems that can run configure have sys/param.h. */ +# if !HAVE_SYS_PARAM_H +# define HAVE_SYS_PARAM_H 1 +# endif + +# ifdef _SC_PAGESIZE +# define getpagesize() sysconf(_SC_PAGESIZE) +# else /* no _SC_PAGESIZE */ +# if HAVE_SYS_PARAM_H +# include <sys/param.h> +# ifdef EXEC_PAGESIZE +# define getpagesize() EXEC_PAGESIZE +# else /* no EXEC_PAGESIZE */ +# ifdef NBPG +# define getpagesize() NBPG * CLSIZE +# ifndef CLSIZE +# define CLSIZE 1 +# endif /* no CLSIZE */ +# else /* no NBPG */ +# ifdef NBPC +# define getpagesize() NBPC +# else /* no NBPC */ +# ifdef PAGESIZE +# define getpagesize() PAGESIZE +# endif /* PAGESIZE */ +# endif /* no NBPC */ +# endif /* no NBPG */ +# endif /* no EXEC_PAGESIZE */ +# else /* no HAVE_SYS_PARAM_H */ +# define getpagesize() 8192 /* punt totally */ +# endif /* no HAVE_SYS_PARAM_H */ +# endif /* no _SC_PAGESIZE */ + +#endif /* no HAVE_GETPAGESIZE */ + +int +main () +{ + char *data, *data2, *data3; + int i, pagesize; + int fd; + + pagesize = getpagesize (); + + /* First, make a file with some known garbage in it. */ + data = (char *) malloc (pagesize); + if (!data) + $ac_main_return (1); + for (i = 0; i < pagesize; ++i) + *(data + i) = rand (); + umask (0); + fd = creat ("conftest.mmap", 0600); + if (fd < 0) + $ac_main_return (1); + if (write (fd, data, pagesize) != pagesize) + $ac_main_return (1); + close (fd); + + /* Next, try to mmap the file at a fixed address which already has + something else allocated at it. If we can, also make sure that + we see the same garbage. */ + fd = open ("conftest.mmap", O_RDWR); + if (fd < 0) + $ac_main_return (1); + data2 = (char *) malloc (2 * pagesize); + if (!data2) + $ac_main_return (1); + data2 += (pagesize - ((int) data2 & (pagesize - 1))) & (pagesize - 1); + if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED, fd, 0L)) + $ac_main_return (1); + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data2 + i)) + $ac_main_return (1); + + /* Finally, make sure that changes to the mapped area do not + percolate back to the file as seen by read(). (This is a bug on + some variants of i386 svr4.0.) */ + for (i = 0; i < pagesize; ++i) + *(data2 + i) = *(data2 + i) + 1; + data3 = (char *) malloc (pagesize); + if (!data3) + $ac_main_return (1); + if (read (fd, data3, pagesize) != pagesize) + $ac_main_return (1); + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data3 + i)) + $ac_main_return (1); + close (fd); + $ac_main_return (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:5196: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:5199: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:5201: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:5204: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_mmap_fixed_mapped=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_func_mmap_fixed_mapped=no +fi +rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +echo "$as_me:5216: result: $ac_cv_func_mmap_fixed_mapped" >&5 +echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6 +if test $ac_cv_func_mmap_fixed_mapped = yes; then + +cat >>confdefs.h <<\EOF +#define HAVE_MMAP 1 +EOF + +fi +rm -f conftest.mmap + + echo "$as_me:5227: checking whether we are using the GNU C Library 2.1 or newer" >&5 +echo $ECHO_N "checking whether we are using the GNU C Library 2.1 or newer... $ECHO_C" >&6 +if test "${ac_cv_gnu_library_2_1+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 5233 "configure" +#include "confdefs.h" + +#include <features.h> +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) + Lucky GNU user + #endif +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "Lucky GNU user" >/dev/null 2>&1; then + ac_cv_gnu_library_2_1=yes +else + ac_cv_gnu_library_2_1=no +fi +rm -f conftest* + +fi +echo "$as_me:5253: result: $ac_cv_gnu_library_2_1" >&5 +echo "${ECHO_T}$ac_cv_gnu_library_2_1" >&6 + + GLIBC21="$ac_cv_gnu_library_2_1" + +cf_makefile=makefile + +test -z "$ALL_LINGUAS" && ALL_LINGUAS=`test -d $srcdir/po && cd $srcdir/po && echo *.po|sed -e 's/\.po//g' -e 's/*//'` + +# Allow override of "config.h" definition: +: ${CONFIG_H=config.h} + +if test -z "$VERSION" ; then +if test -f $srcdir/VERSION ; then + VERSION=`sed -e '2,$d' $srcdir/VERSION|cut -f1` +else + VERSION=unknown +fi +fi + +for ac_header in argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ +stdlib.h string.h unistd.h sys/param.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:5277: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 5283 "configure" +#include "confdefs.h" +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:5287: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:5293: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_ext +fi +echo "$as_me:5312: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<EOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +EOF + +fi +done + +for ac_func in feof_unlocked fgets_unlocked getcwd getegid geteuid \ +getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \ +strdup strtoul tsearch __argz_count __argz_stringify __argz_next +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:5327: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 5333 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +char (*f) (); + +int +main () +{ +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +f = $ac_func; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:5364: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:5367: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:5370: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:5373: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +eval "$as_ac_var=no" +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:5383: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<EOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +EOF + +fi +done + +# Check whether --with-libiconv-prefix or --without-libiconv-prefix was given. +if test "${with_libiconv_prefix+set}" = set; then + withval="$with_libiconv_prefix" + + case "$withval" in #(vi + no) #(vi + ;; + yes) #(vi + ;; + *) + +for cf_searchpath in `echo "$withval" | tr $PATH_SEPARATOR ' '`; do + if test -d $cf_searchpath/include; then + +if test -n "$cf_searchpath/include" ; then + for cf_add_incdir in $cf_searchpath/include + do + while test $cf_add_incdir != /usr/include + do + if test -d $cf_add_incdir + then + cf_have_incdir=no + if test -n "$CFLAGS$CPPFLAGS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_incdir in $CFLAGS $CPPFLAGS ; do + if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then + cf_have_incdir=yes; break + fi + done + fi + + if test "$cf_have_incdir" = no ; then + if test "$cf_add_incdir" = /usr/local/include ; then + if test "$GCC" = yes + then + cf_save_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + cat >conftest.$ac_ext <<_ACEOF +#line 5431 "configure" +#include "confdefs.h" +#include <stdio.h> +int +main () +{ +printf("Hello") + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:5443: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:5446: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:5449: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:5452: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_have_incdir=yes +fi +rm -f conftest.$ac_objext conftest.$ac_ext + CPPFLAGS=$cf_save_CPPFLAGS + fi + fi + fi + + if test "$cf_have_incdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 + +echo "${as_me-configure}:5469: testing adding $cf_add_incdir to include-path ..." 1>&5 + + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + + cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` + test "$cf_top_incdir" = "$cf_add_incdir" && break + cf_add_incdir="$cf_top_incdir" + else + break + fi + fi + done + done +fi + + elif test -d $cf_searchpath/../include ; then + +if test -n "$cf_searchpath/../include" ; then + for cf_add_incdir in $cf_searchpath/../include + do + while test $cf_add_incdir != /usr/include + do + if test -d $cf_add_incdir + then + cf_have_incdir=no + if test -n "$CFLAGS$CPPFLAGS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_incdir in $CFLAGS $CPPFLAGS ; do + if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then + cf_have_incdir=yes; break + fi + done + fi + + if test "$cf_have_incdir" = no ; then + if test "$cf_add_incdir" = /usr/local/include ; then + if test "$GCC" = yes + then + cf_save_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + cat >conftest.$ac_ext <<_ACEOF +#line 5510 "configure" +#include "confdefs.h" +#include <stdio.h> +int +main () +{ +printf("Hello") + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:5522: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:5525: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:5528: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:5531: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_have_incdir=yes +fi +rm -f conftest.$ac_objext conftest.$ac_ext + CPPFLAGS=$cf_save_CPPFLAGS + fi + fi + fi + + if test "$cf_have_incdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 + +echo "${as_me-configure}:5548: testing adding $cf_add_incdir to include-path ..." 1>&5 + + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + + cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` + test "$cf_top_incdir" = "$cf_add_incdir" && break + cf_add_incdir="$cf_top_incdir" + else + break + fi + fi + done + done +fi + + else +{ { echo "$as_me:5564: error: cannot find libiconv under $withval" >&5 +echo "$as_me: error: cannot find libiconv under $withval" >&2;} + { (exit 1); exit 1; }; } + fi + if test -d $cf_searchpath/lib; then + +if test -n "$cf_searchpath/lib" ; then + for cf_add_libdir in $cf_searchpath/lib + do + if test $cf_add_libdir = /usr/lib ; then + : + elif test -d $cf_add_libdir + then + cf_have_libdir=no + if test -n "$LDFLAGS$LIBS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_libdir in $LDFLAGS $LIBS ; do + if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then + cf_have_libdir=yes; break + fi + done + fi + if test "$cf_have_libdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 + +echo "${as_me-configure}:5589: testing adding $cf_add_libdir to library-path ..." 1>&5 + + LDFLAGS="-L$cf_add_libdir $LDFLAGS" + fi + fi + done +fi + + elif test -d $cf_searchpath ; then + +if test -n "$cf_searchpath" ; then + for cf_add_libdir in $cf_searchpath + do + if test $cf_add_libdir = /usr/lib ; then + : + elif test -d $cf_add_libdir + then + cf_have_libdir=no + if test -n "$LDFLAGS$LIBS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_libdir in $LDFLAGS $LIBS ; do + if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then + cf_have_libdir=yes; break + fi + done + fi + if test "$cf_have_libdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 + +echo "${as_me-configure}:5618: testing adding $cf_add_libdir to library-path ..." 1>&5 + + LDFLAGS="-L$cf_add_libdir $LDFLAGS" + fi + fi + done +fi + + else +{ { echo "$as_me:5627: error: cannot find libiconv under $withval" >&5 +echo "$as_me: error: cannot find libiconv under $withval" >&2;} + { (exit 1); exit 1; }; } + fi +done + + ;; + esac + +fi; + + echo "$as_me:5638: checking for iconv" >&5 +echo $ECHO_N "checking for iconv... $ECHO_C" >&6 +if test "${am_cv_func_iconv+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +# If the linkage is not already in the $CPPFLAGS/$LDFLAGS configuration, these +# will be set on completion of the AC_TRY_LINK below. +cf_cv_header_path_iconv= +cf_cv_library_path_iconv= + +echo "${as_me-configure}:5649: testing Starting FIND_LINKAGE(iconv,) ..." 1>&5 + +cat >conftest.$ac_ext <<_ACEOF +#line 5652 "configure" +#include "confdefs.h" + +#include <stdlib.h> +#include <iconv.h> + +int +main () +{ + + iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:5671: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:5674: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:5677: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:5680: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + + cf_cv_find_linkage_iconv=yes + +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 + +cf_save_LIBS="$LIBS" +LIBS="-liconv $cf_save_LIBS" + +cat >conftest.$ac_ext <<_ACEOF +#line 5693 "configure" +#include "confdefs.h" + +#include <stdlib.h> +#include <iconv.h> + +int +main () +{ + + iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:5712: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:5715: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:5718: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:5721: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + + cf_cv_find_linkage_iconv=yes + cf_cv_library_file_iconv="-liconv" + +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 + + cf_cv_find_linkage_iconv=no + LIBS="$cf_save_LIBS" + + test -n "$verbose" && echo " find linkage for iconv library" 1>&6 + +echo "${as_me-configure}:5736: testing find linkage for iconv library ..." 1>&5 + +echo "${as_me-configure}:5738: testing Searching for headers in FIND_LINKAGE(iconv,) ..." 1>&5 + + cf_save_CPPFLAGS="$CPPFLAGS" + cf_test_CPPFLAGS="$CPPFLAGS" + +cf_search= + +# collect the current set of include-directories from compiler flags +cf_header_path_list="" +if test -n "${CFLAGS}${CPPFLAGS}" ; then + for cf_header_path in $CPPFLAGS $CFLAGS + do + case $cf_header_path in #(vi + -I*) + cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` + cf_header_path_list="$cf_header_path_list $cf_header_path" + ;; + esac + done +fi + +# add the variations for the package we are looking for + +cf_search= + +test "/usr" != "$prefix" && \ +test -d "/usr" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for include-directories under /usr" + test -d /usr/include && cf_search="$cf_search /usr/include" + test -d /usr/include/iconv && cf_search="$cf_search /usr/include/iconv" + test -d /usr/include/iconv/include && cf_search="$cf_search /usr/include/iconv/include" + test -d /usr/iconv/include && cf_search="$cf_search /usr/iconv/include" + test -d /usr/iconv/include/iconv && cf_search="$cf_search /usr/iconv/include/iconv" +} + +test "$prefix" != "NONE" && \ +test -d "$prefix" && \ + { + test -n "$verbose" && echo " ... testing for include-directories under $prefix" + test -d $prefix/include && cf_search="$cf_search $prefix/include" + test -d $prefix/include/iconv && cf_search="$cf_search $prefix/include/iconv" + test -d $prefix/include/iconv/include && cf_search="$cf_search $prefix/include/iconv/include" + test -d $prefix/iconv/include && cf_search="$cf_search $prefix/iconv/include" + test -d $prefix/iconv/include/iconv && cf_search="$cf_search $prefix/iconv/include/iconv" +} + +test "/usr/local" != "$prefix" && \ +test -d "/usr/local" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for include-directories under /usr/local" + test -d /usr/local/include && cf_search="$cf_search /usr/local/include" + test -d /usr/local/include/iconv && cf_search="$cf_search /usr/local/include/iconv" + test -d /usr/local/include/iconv/include && cf_search="$cf_search /usr/local/include/iconv/include" + test -d /usr/local/iconv/include && cf_search="$cf_search /usr/local/iconv/include" + test -d /usr/local/iconv/include/iconv && cf_search="$cf_search /usr/local/iconv/include/iconv" +} + +test "/opt" != "$prefix" && \ +test -d "/opt" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for include-directories under /opt" + test -d /opt/include && cf_search="$cf_search /opt/include" + test -d /opt/include/iconv && cf_search="$cf_search /opt/include/iconv" + test -d /opt/include/iconv/include && cf_search="$cf_search /opt/include/iconv/include" + test -d /opt/iconv/include && cf_search="$cf_search /opt/iconv/include" + test -d /opt/iconv/include/iconv && cf_search="$cf_search /opt/iconv/include/iconv" +} + +test "$HOME" != "$prefix" && \ +test -d "$HOME" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for include-directories under $HOME" + test -d $HOME/include && cf_search="$cf_search $HOME/include" + test -d $HOME/include/iconv && cf_search="$cf_search $HOME/include/iconv" + test -d $HOME/include/iconv/include && cf_search="$cf_search $HOME/include/iconv/include" + test -d $HOME/iconv/include && cf_search="$cf_search $HOME/iconv/include" + test -d $HOME/iconv/include/iconv && cf_search="$cf_search $HOME/iconv/include/iconv" +} + +test "$includedir" != NONE && \ +test "$includedir" != "/usr/include" && \ +test -d "$includedir" && { + test -d $includedir && cf_search="$cf_search $includedir" + test -d $includedir/iconv && cf_search="$cf_search $includedir/iconv" +} + +test "$oldincludedir" != NONE && \ +test "$oldincludedir" != "/usr/include" && \ +test -d "$oldincludedir" && { + test -d $oldincludedir && cf_search="$cf_search $oldincludedir" + test -d $oldincludedir/iconv && cf_search="$cf_search $oldincludedir/iconv" +} + +cf_search="$cf_search $cf_header_path_list" + + for cf_cv_header_path_iconv in $cf_search + do + if test -d $cf_cv_header_path_iconv ; then + test -n "$verbose" && echo " ... testing $cf_cv_header_path_iconv" 1>&6 + +echo "${as_me-configure}:5839: testing ... testing $cf_cv_header_path_iconv ..." 1>&5 + + CPPFLAGS="$cf_save_CPPFLAGS -I$cf_cv_header_path_iconv" + cat >conftest.$ac_ext <<_ACEOF +#line 5843 "configure" +#include "confdefs.h" + +#include <stdlib.h> +#include <iconv.h> + +int +main () +{ + + iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:5862: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:5865: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:5868: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:5871: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + + test -n "$verbose" && echo " ... found iconv headers in $cf_cv_header_path_iconv" 1>&6 + +echo "${as_me-configure}:5876: testing ... found iconv headers in $cf_cv_header_path_iconv ..." 1>&5 + + cf_cv_find_linkage_iconv=maybe + cf_test_CPPFLAGS="$CPPFLAGS" + break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 + + CPPFLAGS="$cf_save_CPPFLAGS" + +fi +rm -f conftest.$ac_objext conftest.$ac_ext + fi + done + + if test "$cf_cv_find_linkage_iconv" = maybe ; then + +echo "${as_me-configure}:5894: testing Searching for iconv library in FIND_LINKAGE(iconv,) ..." 1>&5 + + cf_save_LIBS="$LIBS" + cf_save_LDFLAGS="$LDFLAGS" + + if test "$cf_cv_find_linkage_iconv" != yes ; then + +cf_search= +cf_library_path_list="" +if test -n "${LDFLAGS}${LIBS}" ; then + for cf_library_path in $LDFLAGS $LIBS + do + case $cf_library_path in #(vi + -L*) + cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` + +test "$cf_library_path" != "NONE" && \ +test -d "$cf_library_path" && \ + { + test -n "$verbose" && echo " ... testing for lib-directories under $cf_library_path" + test -d $cf_library_path/lib && cf_search="$cf_search $cf_library_path/lib" + test -d $cf_library_path/lib/iconv && cf_search="$cf_search $cf_library_path/lib/iconv" + test -d $cf_library_path/lib/iconv/lib && cf_search="$cf_search $cf_library_path/lib/iconv/lib" + test -d $cf_library_path/iconv/lib && cf_search="$cf_search $cf_library_path/iconv/lib" + test -d $cf_library_path/iconv/lib/iconv && cf_search="$cf_search $cf_library_path/iconv/lib/iconv" +} + + cf_library_path_list="$cf_library_path_list $cf_search" + ;; + esac + done +fi + +cf_search= + +test "/usr" != "$prefix" && \ +test -d "/usr" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for lib-directories under /usr" + test -d /usr/lib && cf_search="$cf_search /usr/lib" + test -d /usr/lib/iconv && cf_search="$cf_search /usr/lib/iconv" + test -d /usr/lib/iconv/lib && cf_search="$cf_search /usr/lib/iconv/lib" + test -d /usr/iconv/lib && cf_search="$cf_search /usr/iconv/lib" + test -d /usr/iconv/lib/iconv && cf_search="$cf_search /usr/iconv/lib/iconv" +} + +test "$prefix" != "NONE" && \ +test -d "$prefix" && \ + { + test -n "$verbose" && echo " ... testing for lib-directories under $prefix" + test -d $prefix/lib && cf_search="$cf_search $prefix/lib" + test -d $prefix/lib/iconv && cf_search="$cf_search $prefix/lib/iconv" + test -d $prefix/lib/iconv/lib && cf_search="$cf_search $prefix/lib/iconv/lib" + test -d $prefix/iconv/lib && cf_search="$cf_search $prefix/iconv/lib" + test -d $prefix/iconv/lib/iconv && cf_search="$cf_search $prefix/iconv/lib/iconv" +} + +test "/usr/local" != "$prefix" && \ +test -d "/usr/local" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for lib-directories under /usr/local" + test -d /usr/local/lib && cf_search="$cf_search /usr/local/lib" + test -d /usr/local/lib/iconv && cf_search="$cf_search /usr/local/lib/iconv" + test -d /usr/local/lib/iconv/lib && cf_search="$cf_search /usr/local/lib/iconv/lib" + test -d /usr/local/iconv/lib && cf_search="$cf_search /usr/local/iconv/lib" + test -d /usr/local/iconv/lib/iconv && cf_search="$cf_search /usr/local/iconv/lib/iconv" +} + +test "/opt" != "$prefix" && \ +test -d "/opt" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for lib-directories under /opt" + test -d /opt/lib && cf_search="$cf_search /opt/lib" + test -d /opt/lib/iconv && cf_search="$cf_search /opt/lib/iconv" + test -d /opt/lib/iconv/lib && cf_search="$cf_search /opt/lib/iconv/lib" + test -d /opt/iconv/lib && cf_search="$cf_search /opt/iconv/lib" + test -d /opt/iconv/lib/iconv && cf_search="$cf_search /opt/iconv/lib/iconv" +} + +test "$HOME" != "$prefix" && \ +test -d "$HOME" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for lib-directories under $HOME" + test -d $HOME/lib && cf_search="$cf_search $HOME/lib" + test -d $HOME/lib/iconv && cf_search="$cf_search $HOME/lib/iconv" + test -d $HOME/lib/iconv/lib && cf_search="$cf_search $HOME/lib/iconv/lib" + test -d $HOME/iconv/lib && cf_search="$cf_search $HOME/iconv/lib" + test -d $HOME/iconv/lib/iconv && cf_search="$cf_search $HOME/iconv/lib/iconv" +} + +cf_search="$cf_library_path_list $cf_search" + + for cf_cv_library_path_iconv in $cf_search + do + if test -d $cf_cv_library_path_iconv ; then + test -n "$verbose" && echo " ... testing $cf_cv_library_path_iconv" 1>&6 + +echo "${as_me-configure}:5991: testing ... testing $cf_cv_library_path_iconv ..." 1>&5 + + CPPFLAGS="$cf_test_CPPFLAGS" + LIBS="-liconv $cf_save_LIBS" + LDFLAGS="$cf_save_LDFLAGS -L$cf_cv_library_path_iconv" + cat >conftest.$ac_ext <<_ACEOF +#line 5997 "configure" +#include "confdefs.h" + +#include <stdlib.h> +#include <iconv.h> + +int +main () +{ + + iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:6016: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:6019: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:6022: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:6025: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + + test -n "$verbose" && echo " ... found iconv library in $cf_cv_library_path_iconv" 1>&6 + +echo "${as_me-configure}:6030: testing ... found iconv library in $cf_cv_library_path_iconv ..." 1>&5 + + cf_cv_find_linkage_iconv=yes + cf_cv_library_file_iconv="-liconv" + break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 + + CPPFLAGS="$cf_save_CPPFLAGS" + LIBS="$cf_save_LIBS" + LDFLAGS="$cf_save_LDFLAGS" + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + fi + done + LIBS="$cf_save_LIBS" + CPPFLAGS="$cf_save_CPPFLAGS" + LDFLAGS="$cf_save_LDFLAGS" + fi + + else + cf_cv_find_linkage_iconv=no + fi + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + +if test "$cf_cv_find_linkage_iconv" = yes ; then +am_cv_func_iconv=yes +else +am_cv_func_iconv="no, consider installing GNU libiconv" +fi + +fi +echo "$as_me:6069: result: $am_cv_func_iconv" >&5 +echo "${ECHO_T}$am_cv_func_iconv" >&6 + + if test "$am_cv_func_iconv" = yes; then + +cat >>confdefs.h <<\EOF +#define HAVE_ICONV 1 +EOF + + echo "$as_me:6078: checking if the declaration of iconv() needs const." >&5 +echo $ECHO_N "checking if the declaration of iconv() needs const.... $ECHO_C" >&6 +if test "${am_cv_proto_iconv_const+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +#line 6085 "configure" +#include "confdefs.h" + +#include <stdlib.h> +#include <iconv.h> + +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:6110: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:6113: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:6116: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:6119: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + am_cv_proto_iconv_const=no +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +am_cv_proto_iconv_const=yes +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:6129: result: $am_cv_proto_iconv_const" >&5 +echo "${ECHO_T}$am_cv_proto_iconv_const" >&6 + + if test "$am_cv_proto_iconv_const" = yes ; then + am_cv_proto_iconv_arg1="const" + else + am_cv_proto_iconv_arg1="" + fi + +cat >>confdefs.h <<EOF +#define ICONV_CONST $am_cv_proto_iconv_arg1 +EOF + + fi + + LIBICONV= + if test "$cf_cv_find_linkage_iconv" = yes; then + +if test -n "$cf_cv_header_path_iconv" ; then + for cf_add_incdir in $cf_cv_header_path_iconv + do + while test $cf_add_incdir != /usr/include + do + if test -d $cf_add_incdir + then + cf_have_incdir=no + if test -n "$CFLAGS$CPPFLAGS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_incdir in $CFLAGS $CPPFLAGS ; do + if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then + cf_have_incdir=yes; break + fi + done + fi + + if test "$cf_have_incdir" = no ; then + if test "$cf_add_incdir" = /usr/local/include ; then + if test "$GCC" = yes + then + cf_save_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + cat >conftest.$ac_ext <<_ACEOF +#line 6171 "configure" +#include "confdefs.h" +#include <stdio.h> +int +main () +{ +printf("Hello") + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:6183: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:6186: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:6189: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:6192: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_have_incdir=yes +fi +rm -f conftest.$ac_objext conftest.$ac_ext + CPPFLAGS=$cf_save_CPPFLAGS + fi + fi + fi + + if test "$cf_have_incdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 + +echo "${as_me-configure}:6209: testing adding $cf_add_incdir to include-path ..." 1>&5 + + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + + cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` + test "$cf_top_incdir" = "$cf_add_incdir" && break + cf_add_incdir="$cf_top_incdir" + else + break + fi + fi + done + done +fi + + if test -n "$cf_cv_library_file_iconv" ; then + LIBICONV="-liconv" + +if test -n "$cf_cv_library_path_iconv" ; then + for cf_add_libdir in $cf_cv_library_path_iconv + do + if test $cf_add_libdir = /usr/lib ; then + : + elif test -d $cf_add_libdir + then + cf_have_libdir=no + if test -n "$LDFLAGS$LIBS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_libdir in $LDFLAGS $LIBS ; do + if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then + cf_have_libdir=yes; break + fi + done + fi + if test "$cf_have_libdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 + +echo "${as_me-configure}:6246: testing adding $cf_add_libdir to library-path ..." 1>&5 + + LDFLAGS="-L$cf_add_libdir $LDFLAGS" + fi + fi + done +fi + + fi + fi + + echo "$as_me:6257: checking for nl_langinfo and CODESET" >&5 +echo $ECHO_N "checking for nl_langinfo and CODESET... $ECHO_C" >&6 +if test "${am_cv_langinfo_codeset+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 6263 "configure" +#include "confdefs.h" +#include <langinfo.h> +int +main () +{ +char* cs = nl_langinfo(CODESET); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:6275: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:6278: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:6281: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:6284: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + am_cv_langinfo_codeset=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +am_cv_langinfo_codeset=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + +fi +echo "$as_me:6295: result: $am_cv_langinfo_codeset" >&5 +echo "${ECHO_T}$am_cv_langinfo_codeset" >&6 + if test $am_cv_langinfo_codeset = yes; then + +cat >>confdefs.h <<\EOF +#define HAVE_LANGINFO_CODESET 1 +EOF + + fi + + if test $ac_cv_header_locale_h = yes; then + echo "$as_me:6306: checking for LC_MESSAGES" >&5 +echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6 +if test "${am_cv_val_LC_MESSAGES+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 6312 "configure" +#include "confdefs.h" +#include <locale.h> +int +main () +{ +return LC_MESSAGES + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:6324: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:6327: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:6330: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:6333: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + am_cv_val_LC_MESSAGES=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +am_cv_val_LC_MESSAGES=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:6343: result: $am_cv_val_LC_MESSAGES" >&5 +echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6 + if test $am_cv_val_LC_MESSAGES = yes; then + +cat >>confdefs.h <<\EOF +#define HAVE_LC_MESSAGES 1 +EOF + + fi + fi + echo "$as_me:6353: checking whether NLS is requested" >&5 +echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6 + +# Check whether --enable-nls or --disable-nls was given. +if test "${enable_nls+set}" = set; then + enableval="$enable_nls" + USE_NLS=$enableval +else + USE_NLS=no +fi; + echo "$as_me:6363: result: $USE_NLS" >&5 +echo "${ECHO_T}$USE_NLS" >&6 + + BUILD_INCLUDED_LIBINTL=no + USE_INCLUDED_LIBINTL=no + INTLLIBS= + + if test "$USE_NLS" = "yes"; then + +cat >>confdefs.h <<\EOF +#define ENABLE_NLS 1 +EOF + + echo "$as_me:6376: checking whether included gettext is requested" >&5 +echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6 + +# Check whether --with-included-gettext or --without-included-gettext was given. +if test "${with_included_gettext+set}" = set; then + withval="$with_included_gettext" + nls_cv_force_use_gnu_gettext=$withval +else + nls_cv_force_use_gnu_gettext=no +fi; + echo "$as_me:6386: result: $nls_cv_force_use_gnu_gettext" >&5 +echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6 + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then + CATOBJEXT=NONE + + cf_save_LIBS_1="$LIBS" + LIBS="$LIBICONV $LIBS" + echo "$as_me:6395: checking for libintl.h and gettext()" >&5 +echo $ECHO_N "checking for libintl.h and gettext()... $ECHO_C" >&6 +if test "${cf_cv_func_gettext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +# If the linkage is not already in the $CPPFLAGS/$LDFLAGS configuration, these +# will be set on completion of the AC_TRY_LINK below. +cf_cv_header_path_intl= +cf_cv_library_path_intl= + +echo "${as_me-configure}:6406: testing Starting FIND_LINKAGE(intl,) ..." 1>&5 + +cat >conftest.$ac_ext <<_ACEOF +#line 6409 "configure" +#include "confdefs.h" + +#include <libintl.h> +extern int _nl_msg_cat_cntr; + +int +main () +{ + + bindtextdomain ("", ""); + return (int) gettext ("") + + + _nl_msg_cat_cntr + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:6429: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:6432: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:6435: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:6438: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + + cf_cv_find_linkage_intl=yes + +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 + +cf_save_LIBS="$LIBS" +LIBS="-lintl $cf_save_LIBS" + +cat >conftest.$ac_ext <<_ACEOF +#line 6451 "configure" +#include "confdefs.h" + +#include <libintl.h> +extern int _nl_msg_cat_cntr; + +int +main () +{ + + bindtextdomain ("", ""); + return (int) gettext ("") + + + _nl_msg_cat_cntr + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:6471: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:6474: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:6477: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:6480: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + + cf_cv_find_linkage_intl=yes + cf_cv_library_file_intl="-lintl" + +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 + + cf_cv_find_linkage_intl=no + LIBS="$cf_save_LIBS" + + test -n "$verbose" && echo " find linkage for intl library" 1>&6 + +echo "${as_me-configure}:6495: testing find linkage for intl library ..." 1>&5 + +echo "${as_me-configure}:6497: testing Searching for headers in FIND_LINKAGE(intl,) ..." 1>&5 + + cf_save_CPPFLAGS="$CPPFLAGS" + cf_test_CPPFLAGS="$CPPFLAGS" + +cf_search= + +# collect the current set of include-directories from compiler flags +cf_header_path_list="" +if test -n "${CFLAGS}${CPPFLAGS}" ; then + for cf_header_path in $CPPFLAGS $CFLAGS + do + case $cf_header_path in #(vi + -I*) + cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` + cf_header_path_list="$cf_header_path_list $cf_header_path" + ;; + esac + done +fi + +# add the variations for the package we are looking for + +cf_search= + +test "/usr" != "$prefix" && \ +test -d "/usr" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for include-directories under /usr" + test -d /usr/include && cf_search="$cf_search /usr/include" + test -d /usr/include/intl && cf_search="$cf_search /usr/include/intl" + test -d /usr/include/intl/include && cf_search="$cf_search /usr/include/intl/include" + test -d /usr/intl/include && cf_search="$cf_search /usr/intl/include" + test -d /usr/intl/include/intl && cf_search="$cf_search /usr/intl/include/intl" +} + +test "$prefix" != "NONE" && \ +test -d "$prefix" && \ + { + test -n "$verbose" && echo " ... testing for include-directories under $prefix" + test -d $prefix/include && cf_search="$cf_search $prefix/include" + test -d $prefix/include/intl && cf_search="$cf_search $prefix/include/intl" + test -d $prefix/include/intl/include && cf_search="$cf_search $prefix/include/intl/include" + test -d $prefix/intl/include && cf_search="$cf_search $prefix/intl/include" + test -d $prefix/intl/include/intl && cf_search="$cf_search $prefix/intl/include/intl" +} + +test "/usr/local" != "$prefix" && \ +test -d "/usr/local" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for include-directories under /usr/local" + test -d /usr/local/include && cf_search="$cf_search /usr/local/include" + test -d /usr/local/include/intl && cf_search="$cf_search /usr/local/include/intl" + test -d /usr/local/include/intl/include && cf_search="$cf_search /usr/local/include/intl/include" + test -d /usr/local/intl/include && cf_search="$cf_search /usr/local/intl/include" + test -d /usr/local/intl/include/intl && cf_search="$cf_search /usr/local/intl/include/intl" +} + +test "/opt" != "$prefix" && \ +test -d "/opt" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for include-directories under /opt" + test -d /opt/include && cf_search="$cf_search /opt/include" + test -d /opt/include/intl && cf_search="$cf_search /opt/include/intl" + test -d /opt/include/intl/include && cf_search="$cf_search /opt/include/intl/include" + test -d /opt/intl/include && cf_search="$cf_search /opt/intl/include" + test -d /opt/intl/include/intl && cf_search="$cf_search /opt/intl/include/intl" +} + +test "$HOME" != "$prefix" && \ +test -d "$HOME" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for include-directories under $HOME" + test -d $HOME/include && cf_search="$cf_search $HOME/include" + test -d $HOME/include/intl && cf_search="$cf_search $HOME/include/intl" + test -d $HOME/include/intl/include && cf_search="$cf_search $HOME/include/intl/include" + test -d $HOME/intl/include && cf_search="$cf_search $HOME/intl/include" + test -d $HOME/intl/include/intl && cf_search="$cf_search $HOME/intl/include/intl" +} + +test "$includedir" != NONE && \ +test "$includedir" != "/usr/include" && \ +test -d "$includedir" && { + test -d $includedir && cf_search="$cf_search $includedir" + test -d $includedir/intl && cf_search="$cf_search $includedir/intl" +} + +test "$oldincludedir" != NONE && \ +test "$oldincludedir" != "/usr/include" && \ +test -d "$oldincludedir" && { + test -d $oldincludedir && cf_search="$cf_search $oldincludedir" + test -d $oldincludedir/intl && cf_search="$cf_search $oldincludedir/intl" +} + +cf_search="$cf_search $cf_header_path_list" + + for cf_cv_header_path_intl in $cf_search + do + if test -d $cf_cv_header_path_intl ; then + test -n "$verbose" && echo " ... testing $cf_cv_header_path_intl" 1>&6 + +echo "${as_me-configure}:6598: testing ... testing $cf_cv_header_path_intl ..." 1>&5 + + CPPFLAGS="$cf_save_CPPFLAGS -I$cf_cv_header_path_intl" + cat >conftest.$ac_ext <<_ACEOF +#line 6602 "configure" +#include "confdefs.h" + +#include <libintl.h> +extern int _nl_msg_cat_cntr; + +int +main () +{ + + bindtextdomain ("", ""); + return (int) gettext ("") + + + _nl_msg_cat_cntr + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:6622: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:6625: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:6628: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:6631: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + + test -n "$verbose" && echo " ... found intl headers in $cf_cv_header_path_intl" 1>&6 + +echo "${as_me-configure}:6636: testing ... found intl headers in $cf_cv_header_path_intl ..." 1>&5 + + cf_cv_find_linkage_intl=maybe + cf_test_CPPFLAGS="$CPPFLAGS" + break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 + + CPPFLAGS="$cf_save_CPPFLAGS" + +fi +rm -f conftest.$ac_objext conftest.$ac_ext + fi + done + + if test "$cf_cv_find_linkage_intl" = maybe ; then + +echo "${as_me-configure}:6654: testing Searching for intl library in FIND_LINKAGE(intl,) ..." 1>&5 + + cf_save_LIBS="$LIBS" + cf_save_LDFLAGS="$LDFLAGS" + + if test "$cf_cv_find_linkage_intl" != yes ; then + +cf_search= +cf_library_path_list="" +if test -n "${LDFLAGS}${LIBS}" ; then + for cf_library_path in $LDFLAGS $LIBS + do + case $cf_library_path in #(vi + -L*) + cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` + +test "$cf_library_path" != "NONE" && \ +test -d "$cf_library_path" && \ + { + test -n "$verbose" && echo " ... testing for lib-directories under $cf_library_path" + test -d $cf_library_path/lib && cf_search="$cf_search $cf_library_path/lib" + test -d $cf_library_path/lib/intl && cf_search="$cf_search $cf_library_path/lib/intl" + test -d $cf_library_path/lib/intl/lib && cf_search="$cf_search $cf_library_path/lib/intl/lib" + test -d $cf_library_path/intl/lib && cf_search="$cf_search $cf_library_path/intl/lib" + test -d $cf_library_path/intl/lib/intl && cf_search="$cf_search $cf_library_path/intl/lib/intl" +} + + cf_library_path_list="$cf_library_path_list $cf_search" + ;; + esac + done +fi + +cf_search= + +test "/usr" != "$prefix" && \ +test -d "/usr" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for lib-directories under /usr" + test -d /usr/lib && cf_search="$cf_search /usr/lib" + test -d /usr/lib/intl && cf_search="$cf_search /usr/lib/intl" + test -d /usr/lib/intl/lib && cf_search="$cf_search /usr/lib/intl/lib" + test -d /usr/intl/lib && cf_search="$cf_search /usr/intl/lib" + test -d /usr/intl/lib/intl && cf_search="$cf_search /usr/intl/lib/intl" +} + +test "$prefix" != "NONE" && \ +test -d "$prefix" && \ + { + test -n "$verbose" && echo " ... testing for lib-directories under $prefix" + test -d $prefix/lib && cf_search="$cf_search $prefix/lib" + test -d $prefix/lib/intl && cf_search="$cf_search $prefix/lib/intl" + test -d $prefix/lib/intl/lib && cf_search="$cf_search $prefix/lib/intl/lib" + test -d $prefix/intl/lib && cf_search="$cf_search $prefix/intl/lib" + test -d $prefix/intl/lib/intl && cf_search="$cf_search $prefix/intl/lib/intl" +} + +test "/usr/local" != "$prefix" && \ +test -d "/usr/local" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for lib-directories under /usr/local" + test -d /usr/local/lib && cf_search="$cf_search /usr/local/lib" + test -d /usr/local/lib/intl && cf_search="$cf_search /usr/local/lib/intl" + test -d /usr/local/lib/intl/lib && cf_search="$cf_search /usr/local/lib/intl/lib" + test -d /usr/local/intl/lib && cf_search="$cf_search /usr/local/intl/lib" + test -d /usr/local/intl/lib/intl && cf_search="$cf_search /usr/local/intl/lib/intl" +} + +test "/opt" != "$prefix" && \ +test -d "/opt" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for lib-directories under /opt" + test -d /opt/lib && cf_search="$cf_search /opt/lib" + test -d /opt/lib/intl && cf_search="$cf_search /opt/lib/intl" + test -d /opt/lib/intl/lib && cf_search="$cf_search /opt/lib/intl/lib" + test -d /opt/intl/lib && cf_search="$cf_search /opt/intl/lib" + test -d /opt/intl/lib/intl && cf_search="$cf_search /opt/intl/lib/intl" +} + +test "$HOME" != "$prefix" && \ +test -d "$HOME" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for lib-directories under $HOME" + test -d $HOME/lib && cf_search="$cf_search $HOME/lib" + test -d $HOME/lib/intl && cf_search="$cf_search $HOME/lib/intl" + test -d $HOME/lib/intl/lib && cf_search="$cf_search $HOME/lib/intl/lib" + test -d $HOME/intl/lib && cf_search="$cf_search $HOME/intl/lib" + test -d $HOME/intl/lib/intl && cf_search="$cf_search $HOME/intl/lib/intl" +} + +cf_search="$cf_library_path_list $cf_search" + + for cf_cv_library_path_intl in $cf_search + do + if test -d $cf_cv_library_path_intl ; then + test -n "$verbose" && echo " ... testing $cf_cv_library_path_intl" 1>&6 + +echo "${as_me-configure}:6751: testing ... testing $cf_cv_library_path_intl ..." 1>&5 + + CPPFLAGS="$cf_test_CPPFLAGS" + LIBS="-lintl $cf_save_LIBS" + LDFLAGS="$cf_save_LDFLAGS -L$cf_cv_library_path_intl" + cat >conftest.$ac_ext <<_ACEOF +#line 6757 "configure" +#include "confdefs.h" + +#include <libintl.h> +extern int _nl_msg_cat_cntr; + +int +main () +{ + + bindtextdomain ("", ""); + return (int) gettext ("") + + + _nl_msg_cat_cntr + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:6777: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:6780: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:6783: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:6786: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + + test -n "$verbose" && echo " ... found intl library in $cf_cv_library_path_intl" 1>&6 + +echo "${as_me-configure}:6791: testing ... found intl library in $cf_cv_library_path_intl ..." 1>&5 + + cf_cv_find_linkage_intl=yes + cf_cv_library_file_intl="-lintl" + break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 + + CPPFLAGS="$cf_save_CPPFLAGS" + LIBS="$cf_save_LIBS" + LDFLAGS="$cf_save_LDFLAGS" + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + fi + done + LIBS="$cf_save_LIBS" + CPPFLAGS="$cf_save_CPPFLAGS" + LDFLAGS="$cf_save_LDFLAGS" + fi + + else + cf_cv_find_linkage_intl=no + fi + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + +if test "$cf_cv_find_linkage_intl" = yes ; then +cf_cv_func_gettext=yes +else +cf_cv_func_gettext=no +fi + +fi +echo "$as_me:6830: result: $cf_cv_func_gettext" >&5 +echo "${ECHO_T}$cf_cv_func_gettext" >&6 + LIBS="$cf_save_LIBS_1" + + if test "$cf_cv_func_gettext" = yes ; then + cat >>confdefs.h <<\EOF +#define HAVE_LIBINTL_H 1 +EOF + + if test "$PACKAGE" != gettext; then + +cat >>confdefs.h <<\EOF +#define HAVE_GETTEXT 1 +EOF + +if test -n "$cf_cv_header_path_intl" ; then + for cf_add_incdir in $cf_cv_header_path_intl + do + while test $cf_add_incdir != /usr/include + do + if test -d $cf_add_incdir + then + cf_have_incdir=no + if test -n "$CFLAGS$CPPFLAGS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_incdir in $CFLAGS $CPPFLAGS ; do + if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then + cf_have_incdir=yes; break + fi + done + fi + + if test "$cf_have_incdir" = no ; then + if test "$cf_add_incdir" = /usr/local/include ; then + if test "$GCC" = yes + then + cf_save_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + cat >conftest.$ac_ext <<_ACEOF +#line 6869 "configure" +#include "confdefs.h" +#include <stdio.h> +int +main () +{ +printf("Hello") + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:6881: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:6884: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:6887: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:6890: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_have_incdir=yes +fi +rm -f conftest.$ac_objext conftest.$ac_ext + CPPFLAGS=$cf_save_CPPFLAGS + fi + fi + fi + + if test "$cf_have_incdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 + +echo "${as_me-configure}:6907: testing adding $cf_add_incdir to include-path ..." 1>&5 + + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + + cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` + test "$cf_top_incdir" = "$cf_add_incdir" && break + cf_add_incdir="$cf_top_incdir" + else + break + fi + fi + done + done +fi + + if test -n "$cf_cv_library_file_intl" ; then + INTLLIBS="$cf_cv_library_file_intl $LIBICONV" + +if test -n "$cf_cv_library_path_intl" ; then + for cf_add_libdir in $cf_cv_library_path_intl + do + if test $cf_add_libdir = /usr/lib ; then + : + elif test -d $cf_add_libdir + then + cf_have_libdir=no + if test -n "$LDFLAGS$LIBS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_libdir in $LDFLAGS $LIBS ; do + if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then + cf_have_libdir=yes; break + fi + done + fi + if test "$cf_have_libdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 + +echo "${as_me-configure}:6944: testing adding $cf_add_libdir to library-path ..." 1>&5 + + INTLLIBS="-L$cf_add_libdir $INTLLIBS" + fi + fi + done +fi + + fi + + gt_save_LIBS="$LIBS" + LIBS="$LIBS $INTLLIBS" + +for ac_func in dcgettext +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:6960: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 6966 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +char (*f) (); + +int +main () +{ +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +f = $ac_func; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:6997: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:7000: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:7003: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:7006: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +eval "$as_ac_var=no" +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:7016: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<EOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +EOF + +fi +done + + LIBS="$gt_save_LIBS" + + # Extract the first word of "msgfmt", so it can be a program name with args. + +set dummy msgfmt; ac_word=$2 +echo "$as_me:7031: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_MSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case "$MSGFMT" in + [\\/]*|?:[\\/]*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word$ac_exeext; then + if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1; then + ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exeext" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" + ;; +esac +fi +MSGFMT="$ac_cv_path_MSGFMT" +if test "$MSGFMT" != ":"; then + echo "$as_me:7058: result: $MSGFMT" >&5 +echo "${ECHO_T}$MSGFMT" >&6 +else + echo "$as_me:7061: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +echo "$as_me:7067: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_GMSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $GMSGFMT in + [\\/]* | ?:[\\/]*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + if $as_executable_p "$ac_dir/$ac_word"; then + ac_cv_path_GMSGFMT="$ac_dir/$ac_word" + echo "$as_me:7084: found $ac_dir/$ac_word" >&5 + break +fi +done + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; +esac +fi +GMSGFMT=$ac_cv_path_GMSGFMT + +if test -n "$GMSGFMT"; then + echo "$as_me:7096: result: $GMSGFMT" >&5 +echo "${ECHO_T}$GMSGFMT" >&6 +else + echo "$as_me:7099: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + # Extract the first word of "xgettext", so it can be a program name with args. + +set dummy xgettext; ac_word=$2 +echo "$as_me:7106: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_XGETTEXT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case "$XGETTEXT" in + [\\/]*|?:[\\/]*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word$ac_exeext; then + if $ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1; then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exeext" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test "$XGETTEXT" != ":"; then + echo "$as_me:7133: result: $XGETTEXT" >&5 +echo "${ECHO_T}$XGETTEXT" >&6 +else + echo "$as_me:7136: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CATOBJEXT=.gmo + fi + fi + + if test "$CATOBJEXT" = "NONE"; then + nls_cv_use_gnu_gettext=yes + fi + fi + + if test "$nls_cv_use_gnu_gettext" = "yes"; then + if test ! -d $srcdir/intl ; then + { { echo "$as_me:7151: error: no NLS library is packaged with this application" >&5 +echo "$as_me: error: no NLS library is packaged with this application" >&2;} + { (exit 1); exit 1; }; } + fi + INTLOBJS="\$(GETTOBJS)" + # Extract the first word of "msgfmt", so it can be a program name with args. + +set dummy msgfmt; ac_word=$2 +echo "$as_me:7159: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_MSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case "$MSGFMT" in + [\\/]*|?:[\\/]*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word$ac_exeext; then + if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1; then + ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exeext" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" + ;; +esac +fi +MSGFMT="$ac_cv_path_MSGFMT" +if test "$MSGFMT" != ":"; then + echo "$as_me:7186: result: $MSGFMT" >&5 +echo "${ECHO_T}$MSGFMT" >&6 +else + echo "$as_me:7189: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +echo "$as_me:7195: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_GMSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $GMSGFMT in + [\\/]* | ?:[\\/]*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + if $as_executable_p "$ac_dir/$ac_word"; then + ac_cv_path_GMSGFMT="$ac_dir/$ac_word" + echo "$as_me:7212: found $ac_dir/$ac_word" >&5 + break +fi +done + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; +esac +fi +GMSGFMT=$ac_cv_path_GMSGFMT + +if test -n "$GMSGFMT"; then + echo "$as_me:7224: result: $GMSGFMT" >&5 +echo "${ECHO_T}$GMSGFMT" >&6 +else + echo "$as_me:7227: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + # Extract the first word of "xgettext", so it can be a program name with args. + +set dummy xgettext; ac_word=$2 +echo "$as_me:7234: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_XGETTEXT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case "$XGETTEXT" in + [\\/]*|?:[\\/]*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word$ac_exeext; then + if $ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1; then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exeext" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test "$XGETTEXT" != ":"; then + echo "$as_me:7261: result: $XGETTEXT" >&5 +echo "${ECHO_T}$XGETTEXT" >&6 +else + echo "$as_me:7264: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + BUILD_INCLUDED_LIBINTL=yes + USE_INCLUDED_LIBINTL=yes + CATOBJEXT=.gmo + INTLLIBS="\$(top_builddir)/intl/libintl.a $LIBICONV" + LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` + fi + + if test "$GMSGFMT" != ":"; then + if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then + : ; + else + echo "$as_me:7279: result: found msgfmt program is not GNU msgfmt; ignore it" >&5 +echo "${ECHO_T}found msgfmt program is not GNU msgfmt; ignore it" >&6 + GMSGFMT=":" + fi + fi + + if test "$XGETTEXT" != ":"; then + if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then + : ; + else + echo "$as_me:7289: result: found xgettext program is not GNU xgettext; ignore it" >&5 +echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6 + XGETTEXT=":" + fi + fi + + POSUB=po + fi + + ac_config_commands="$ac_config_commands default-1" + + if test "$PACKAGE" = gettext; then + BUILD_INCLUDED_LIBINTL=yes + fi + + if test "$nls_cv_use_gnu_gettext" = "yes"; then + for ac_prog in bison +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:7309: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_INTLBISON+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$INTLBISON"; then + ac_cv_prog_INTLBISON="$INTLBISON" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_INTLBISON="$ac_prog" +echo "$as_me:7324: found $ac_dir/$ac_word" >&5 +break +done + +fi +fi +INTLBISON=$ac_cv_prog_INTLBISON +if test -n "$INTLBISON"; then + echo "$as_me:7332: result: $INTLBISON" >&5 +echo "${ECHO_T}$INTLBISON" >&6 +else + echo "$as_me:7335: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$INTLBISON" && break +done + + if test -z "$INTLBISON"; then + ac_verc_fail=yes + else + echo "$as_me:7345: checking version of bison" >&5 +echo $ECHO_N "checking version of bison... $ECHO_C" >&6 + ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` + case $ac_prog_version in + '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; + 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) + ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; + *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; + esac + echo "$as_me:7354: result: $ac_prog_version" >&5 +echo "${ECHO_T}$ac_prog_version" >&6 + fi + if test $ac_verc_fail = yes; then + INTLBISON=: + fi + fi + + for lang in $ALL_LINGUAS; do + GMOFILES="$GMOFILES $lang.gmo" + POFILES="$POFILES $lang.po" + done + + nls_cv_header_intl= + nls_cv_header_libgt= + + DATADIRNAME=share + + INSTOBJEXT=.mo + + GENCAT=gencat + + if test "x$CATOBJEXT" != "x"; then + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else + echo "$as_me:7380: checking for catalogs to be installed" >&5 +echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6 + NEW_LINGUAS= + for presentlang in $ALL_LINGUAS; do + useit=no + for desiredlang in ${LINGUAS-$ALL_LINGUAS}; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + NEW_LINGUAS="$NEW_LINGUAS $presentlang" + fi + done + LINGUAS=$NEW_LINGUAS + echo "$as_me:7400: result: $LINGUAS" >&5 +echo "${ECHO_T}$LINGUAS" >&6 + fi + + if test -n "$LINGUAS"; then + for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done + fi + fi + + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + MKINSTALLDIRS="$ac_aux_dir/mkdirs.sh" + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkdirs.sh" + fi + if test -n "$GNUSYSTEM_AUX_DIR" ; then + if test -e "${GNUSYSTEM_AUX_DIR}/mkinstalldirs"; then + MKINSTALLDIRS="${GNUSYSTEM_AUX_DIR}/mkinstalldirs" + fi + fi + + INTL_LIBTOOL_SUFFIX_PREFIX= + +INTLDIR_MAKE= +MSG_DIR_MAKE= +SUB_MAKEFILE= + +cf_makefile=makefile + +use_our_messages=no +if test "$USE_NLS" = yes ; then +if test -d $srcdir/po ; then +echo "$as_me:7433: checking if we should use included message-library" >&5 +echo $ECHO_N "checking if we should use included message-library... $ECHO_C" >&6 + +# Check whether --enable-included-msgs or --disable-included-msgs was given. +if test "${enable_included_msgs+set}" = set; then + enableval="$enable_included_msgs" + use_our_messages=$enableval +else + use_our_messages=yes +fi; +fi +echo "$as_me:7444: result: $use_our_messages" >&5 +echo "${ECHO_T}$use_our_messages" >&6 +fi + +MSG_DIR_MAKE="#" +if test "$use_our_messages" = yes +then + SUB_MAKEFILE="$SUB_MAKEFILE po/$cf_makefile.in:$srcdir/po/$cf_makefile.inn" + MSG_DIR_MAKE= +fi + +if test "$USE_INCLUDED_LIBINTL" = yes ; then + if test "$nls_cv_force_use_gnu_gettext" = yes ; then + : + elif test "$nls_cv_use_gnu_gettext" = yes ; then + : + else + INTLDIR_MAKE="#" + fi + if test -z "$INTLDIR_MAKE"; then + cat >>confdefs.h <<\EOF +#define HAVE_LIBGETTEXT_H 1 +EOF + + for cf_makefile in \ + $srcdir/intl/Makefile.in \ + $srcdir/intl/makefile.in + do + if test -f "$cf_makefile" ; then + SUB_MAKEFILE="$SUB_MAKEFILE `echo \"${cf_makefile}\"|sed -e 's,^'$srcdir/',,' -e 's/\.in$//'`:${cf_makefile}" + break + fi + done + fi +else + INTLDIR_MAKE="#" + if test "$USE_NLS" = yes ; then + +for ac_header in libintl.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:7485: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 7491 "configure" +#include "confdefs.h" +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:7495: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:7501: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_ext +fi +echo "$as_me:7520: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<EOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +EOF + +fi +done + + fi +fi + +if test -z "$INTLDIR_MAKE" ; then + CPPFLAGS="$CPPFLAGS -I../intl" +fi + +if test "$BUILD_INCLUDED_LIBINTL" = yes ; then + GT_YES="#" + GT_NO= +else + GT_YES= + GT_NO="#" +fi + +if test "$USE_INCLUDED_LIBINTL" = yes ; then + if test "$nls_cv_force_use_gnu_gettext" = yes ; then + cat >>confdefs.h <<\EOF +#define HAVE_GETTEXT 1 +EOF + + elif test "$nls_cv_use_gnu_gettext" = yes ; then + cat >>confdefs.h <<\EOF +#define HAVE_GETTEXT 1 +EOF + + fi + if test -n "$nls_cv_header_intl" ; then + cat >>confdefs.h <<\EOF +#define HAVE_LIBINTL_H 1 +EOF + + fi +fi + +echo "$as_me:7565: checking if -lm needed for math functions" >&5 +echo $ECHO_N "checking if -lm needed for math functions... $ECHO_C" >&6 +if test "${cf_cv_need_libm+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +#line 7572 "configure" +#include "confdefs.h" + + #include <stdio.h> + #include <math.h> + +int +main () +{ +double x = rand(); printf("result = %g\n", sqrt(x)) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:7587: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:7590: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:7593: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:7596: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_cv_need_libm=no +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_cv_need_libm=yes +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:7606: result: $cf_cv_need_libm" >&5 +echo "${ECHO_T}$cf_cv_need_libm" >&6 +if test "$cf_cv_need_libm" = yes +then + + LIBS="-lm $LIBS" + +fi + +echo "$as_me:7615: checking if you want to use dmalloc for testing" >&5 +echo $ECHO_N "checking if you want to use dmalloc for testing... $ECHO_C" >&6 + +# Check whether --with-dmalloc or --without-dmalloc was given. +if test "${with_dmalloc+set}" = set; then + withval="$with_dmalloc" + cat >>confdefs.h <<\EOF +#define USE_DMALLOC 1 +EOF + + : ${with_cflags:=-g} + : ${with_no_leaks:=yes} + with_dmalloc=yes +else + with_dmalloc= +fi; +echo "$as_me:7631: result: ${with_dmalloc:-no}" >&5 +echo "${ECHO_T}${with_dmalloc:-no}" >&6 + +case .$with_cflags in #(vi +.*-g*) + case .$CFLAGS in #(vi + .*-g*) #(vi + ;; + *) + +cf_fix_cppflags=no +cf_new_cflags= +cf_new_cppflags= +cf_new_extra_cppflags= + +for cf_add_cflags in -g +do +case $cf_fix_cppflags in +no) + case $cf_add_cflags in #(vi + -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi + case $cf_add_cflags in + -D*) + cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + + test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=yes + + if test $cf_fix_cppflags = yes ; then + cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + continue + elif test "${cf_tst_cflags}" = "\"'" ; then + cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + continue + fi + ;; + esac + case "$CPPFLAGS" in + *$cf_add_cflags) #(vi + ;; + *) #(vi + case $cf_add_cflags in #(vi + -D*) + cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` + +CPPFLAGS=`echo "$CPPFLAGS" | \ + sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ + -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` + + ;; + esac + cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" + ;; + esac + ;; + *) + cf_new_cflags="$cf_new_cflags $cf_add_cflags" + ;; + esac + ;; +yes) + cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + + test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=no + ;; +esac +done + +if test -n "$cf_new_cflags" ; then + + CFLAGS="$CFLAGS $cf_new_cflags" +fi + +if test -n "$cf_new_cppflags" ; then + + CPPFLAGS="$CPPFLAGS $cf_new_cppflags" +fi + +if test -n "$cf_new_extra_cppflags" ; then + + EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" +fi + + ;; + esac + ;; +esac + +if test "$with_dmalloc" = yes ; then + echo "$as_me:7725: checking for dmalloc.h" >&5 +echo $ECHO_N "checking for dmalloc.h... $ECHO_C" >&6 +if test "${ac_cv_header_dmalloc_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 7731 "configure" +#include "confdefs.h" +#include <dmalloc.h> +_ACEOF +if { (eval echo "$as_me:7735: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:7741: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_cv_header_dmalloc_h=yes +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_header_dmalloc_h=no +fi +rm -f conftest.err conftest.$ac_ext +fi +echo "$as_me:7760: result: $ac_cv_header_dmalloc_h" >&5 +echo "${ECHO_T}$ac_cv_header_dmalloc_h" >&6 +if test $ac_cv_header_dmalloc_h = yes; then + +echo "$as_me:7764: checking for dmalloc_debug in -ldmalloc" >&5 +echo $ECHO_N "checking for dmalloc_debug in -ldmalloc... $ECHO_C" >&6 +if test "${ac_cv_lib_dmalloc_dmalloc_debug+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldmalloc $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line 7772 "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dmalloc_debug (); +int +main () +{ +dmalloc_debug (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:7791: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:7794: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:7797: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:7800: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dmalloc_dmalloc_debug=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_dmalloc_dmalloc_debug=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:7811: result: $ac_cv_lib_dmalloc_dmalloc_debug" >&5 +echo "${ECHO_T}$ac_cv_lib_dmalloc_dmalloc_debug" >&6 +if test $ac_cv_lib_dmalloc_dmalloc_debug = yes; then + cat >>confdefs.h <<EOF +#define HAVE_LIBDMALLOC 1 +EOF + + LIBS="-ldmalloc $LIBS" + +fi + +fi + +fi + +echo "$as_me:7826: checking if you want to use dbmalloc for testing" >&5 +echo $ECHO_N "checking if you want to use dbmalloc for testing... $ECHO_C" >&6 + +# Check whether --with-dbmalloc or --without-dbmalloc was given. +if test "${with_dbmalloc+set}" = set; then + withval="$with_dbmalloc" + cat >>confdefs.h <<\EOF +#define USE_DBMALLOC 1 +EOF + + : ${with_cflags:=-g} + : ${with_no_leaks:=yes} + with_dbmalloc=yes +else + with_dbmalloc= +fi; +echo "$as_me:7842: result: ${with_dbmalloc:-no}" >&5 +echo "${ECHO_T}${with_dbmalloc:-no}" >&6 + +case .$with_cflags in #(vi +.*-g*) + case .$CFLAGS in #(vi + .*-g*) #(vi + ;; + *) + +cf_fix_cppflags=no +cf_new_cflags= +cf_new_cppflags= +cf_new_extra_cppflags= + +for cf_add_cflags in -g +do +case $cf_fix_cppflags in +no) + case $cf_add_cflags in #(vi + -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi + case $cf_add_cflags in + -D*) + cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + + test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=yes + + if test $cf_fix_cppflags = yes ; then + cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + continue + elif test "${cf_tst_cflags}" = "\"'" ; then + cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + continue + fi + ;; + esac + case "$CPPFLAGS" in + *$cf_add_cflags) #(vi + ;; + *) #(vi + case $cf_add_cflags in #(vi + -D*) + cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` + +CPPFLAGS=`echo "$CPPFLAGS" | \ + sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ + -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` + + ;; + esac + cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" + ;; + esac + ;; + *) + cf_new_cflags="$cf_new_cflags $cf_add_cflags" + ;; + esac + ;; +yes) + cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + + test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=no + ;; +esac +done + +if test -n "$cf_new_cflags" ; then + + CFLAGS="$CFLAGS $cf_new_cflags" +fi + +if test -n "$cf_new_cppflags" ; then + + CPPFLAGS="$CPPFLAGS $cf_new_cppflags" +fi + +if test -n "$cf_new_extra_cppflags" ; then + + EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" +fi + + ;; + esac + ;; +esac + +if test "$with_dbmalloc" = yes ; then + echo "$as_me:7936: checking for dbmalloc.h" >&5 +echo $ECHO_N "checking for dbmalloc.h... $ECHO_C" >&6 +if test "${ac_cv_header_dbmalloc_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 7942 "configure" +#include "confdefs.h" +#include <dbmalloc.h> +_ACEOF +if { (eval echo "$as_me:7946: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:7952: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_cv_header_dbmalloc_h=yes +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_header_dbmalloc_h=no +fi +rm -f conftest.err conftest.$ac_ext +fi +echo "$as_me:7971: result: $ac_cv_header_dbmalloc_h" >&5 +echo "${ECHO_T}$ac_cv_header_dbmalloc_h" >&6 +if test $ac_cv_header_dbmalloc_h = yes; then + +echo "$as_me:7975: checking for debug_malloc in -ldbmalloc" >&5 +echo $ECHO_N "checking for debug_malloc in -ldbmalloc... $ECHO_C" >&6 +if test "${ac_cv_lib_dbmalloc_debug_malloc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldbmalloc $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line 7983 "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char debug_malloc (); +int +main () +{ +debug_malloc (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:8002: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:8005: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:8008: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:8011: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dbmalloc_debug_malloc=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_dbmalloc_debug_malloc=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:8022: result: $ac_cv_lib_dbmalloc_debug_malloc" >&5 +echo "${ECHO_T}$ac_cv_lib_dbmalloc_debug_malloc" >&6 +if test $ac_cv_lib_dbmalloc_debug_malloc = yes; then + cat >>confdefs.h <<EOF +#define HAVE_LIBDBMALLOC 1 +EOF + + LIBS="-ldbmalloc $LIBS" + +fi + +fi + +fi + +echo "$as_me:8037: checking if you want to use purify for testing" >&5 +echo $ECHO_N "checking if you want to use purify for testing... $ECHO_C" >&6 + +# Check whether --with-purify or --without-purify was given. +if test "${with_purify+set}" = set; then + withval="$with_purify" + cat >>confdefs.h <<\EOF +#define USE_PURIFY 1 +EOF + + : ${with_cflags:=-g} + : ${with_no_leaks:=yes} + with_purify=yes +else + with_purify= +fi; +echo "$as_me:8053: result: ${with_purify:-no}" >&5 +echo "${ECHO_T}${with_purify:-no}" >&6 + +case .$with_cflags in #(vi +.*-g*) + case .$CFLAGS in #(vi + .*-g*) #(vi + ;; + *) + +cf_fix_cppflags=no +cf_new_cflags= +cf_new_cppflags= +cf_new_extra_cppflags= + +for cf_add_cflags in -g +do +case $cf_fix_cppflags in +no) + case $cf_add_cflags in #(vi + -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi + case $cf_add_cflags in + -D*) + cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + + test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=yes + + if test $cf_fix_cppflags = yes ; then + cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + continue + elif test "${cf_tst_cflags}" = "\"'" ; then + cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + continue + fi + ;; + esac + case "$CPPFLAGS" in + *$cf_add_cflags) #(vi + ;; + *) #(vi + case $cf_add_cflags in #(vi + -D*) + cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` + +CPPFLAGS=`echo "$CPPFLAGS" | \ + sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ + -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` + + ;; + esac + cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" + ;; + esac + ;; + *) + cf_new_cflags="$cf_new_cflags $cf_add_cflags" + ;; + esac + ;; +yes) + cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + + test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=no + ;; +esac +done + +if test -n "$cf_new_cflags" ; then + + CFLAGS="$CFLAGS $cf_new_cflags" +fi + +if test -n "$cf_new_cppflags" ; then + + CPPFLAGS="$CPPFLAGS $cf_new_cppflags" +fi + +if test -n "$cf_new_extra_cppflags" ; then + + EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" +fi + + ;; + esac + ;; +esac + +echo "$as_me:8146: checking if you want to use valgrind for testing" >&5 +echo $ECHO_N "checking if you want to use valgrind for testing... $ECHO_C" >&6 + +# Check whether --with-valgrind or --without-valgrind was given. +if test "${with_valgrind+set}" = set; then + withval="$with_valgrind" + cat >>confdefs.h <<\EOF +#define USE_VALGRIND 1 +EOF + + : ${with_cflags:=-g} + : ${with_no_leaks:=yes} + with_valgrind=yes +else + with_valgrind= +fi; +echo "$as_me:8162: result: ${with_valgrind:-no}" >&5 +echo "${ECHO_T}${with_valgrind:-no}" >&6 + +case .$with_cflags in #(vi +.*-g*) + case .$CFLAGS in #(vi + .*-g*) #(vi + ;; + *) + +cf_fix_cppflags=no +cf_new_cflags= +cf_new_cppflags= +cf_new_extra_cppflags= + +for cf_add_cflags in -g +do +case $cf_fix_cppflags in +no) + case $cf_add_cflags in #(vi + -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi + case $cf_add_cflags in + -D*) + cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` + + test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=yes + + if test $cf_fix_cppflags = yes ; then + cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + continue + elif test "${cf_tst_cflags}" = "\"'" ; then + cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + continue + fi + ;; + esac + case "$CPPFLAGS" in + *$cf_add_cflags) #(vi + ;; + *) #(vi + case $cf_add_cflags in #(vi + -D*) + cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` + +CPPFLAGS=`echo "$CPPFLAGS" | \ + sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ + -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` + + ;; + esac + cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" + ;; + esac + ;; + *) + cf_new_cflags="$cf_new_cflags $cf_add_cflags" + ;; + esac + ;; +yes) + cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` + + test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=no + ;; +esac +done + +if test -n "$cf_new_cflags" ; then + + CFLAGS="$CFLAGS $cf_new_cflags" +fi + +if test -n "$cf_new_cppflags" ; then + + CPPFLAGS="$CPPFLAGS $cf_new_cppflags" +fi + +if test -n "$cf_new_extra_cppflags" ; then + + EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" +fi + + ;; + esac + ;; +esac + +echo "$as_me:8255: checking if you want to perform memory-leak testing" >&5 +echo $ECHO_N "checking if you want to perform memory-leak testing... $ECHO_C" >&6 + +# Check whether --with-no-leaks or --without-no-leaks was given. +if test "${with_no_leaks+set}" = set; then + withval="$with_no_leaks" + cat >>confdefs.h <<\EOF +#define NO_LEAKS 1 +EOF + + cf_doalloc=".${with_dmalloc}${with_dbmalloc}${with_purify}${with_valgrind}" + case ${cf_doalloc} in #(vi + *yes*) ;; + *) cat >>confdefs.h <<\EOF +#define DOALLOC 10000 +EOF + ;; + esac + with_no_leaks=yes +else + with_no_leaks= +fi; +echo "$as_me:8277: result: $with_no_leaks" >&5 +echo "${ECHO_T}$with_no_leaks" >&6 + +echo "$as_me:8280: checking if you want --trace option" >&5 +echo $ECHO_N "checking if you want --trace option... $ECHO_C" >&6 + +# Check whether --enable-trace or --disable-trace was given. +if test "${enable_trace+set}" = set; then + enableval="$enable_trace" + +else + enableval=yes +fi; +echo "$as_me:8290: result: $enableval" >&5 +echo "${ECHO_T}$enableval" >&6 +if test "$enableval" != no ; then +EXTRAOBJS="$EXTRAOBJS trace\$o" + cat >>confdefs.h <<\EOF +#define HAVE_DLG_TRACE 1 +EOF + +else + : +fi + +LIBTOOL_MAKE="#" + +LIBTOOL= + +# common library maintenance symbols that are convenient for libtool scripts: +LIB_CREATE='${AR} -cr' +LIB_OBJECT='${OBJECTS}' +LIB_SUFFIX=.a +LIB_PREP="$RANLIB" + +# symbols used to prop libtool up to enable it to determine what it should be +# doing: +LIB_CLEAN= +LIB_COMPILE= +LIB_LINK='${CC}' +LIB_INSTALL= +LIB_UNINSTALL= + +echo "$as_me:8320: checking if you want to build libraries with libtool" >&5 +echo $ECHO_N "checking if you want to build libraries with libtool... $ECHO_C" >&6 + +# Check whether --with-libtool or --without-libtool was given. +if test "${with_libtool+set}" = set; then + withval="$with_libtool" + with_libtool=$withval +else + with_libtool=no +fi; +echo "$as_me:8330: result: $with_libtool" >&5 +echo "${ECHO_T}$with_libtool" >&6 +if test "$with_libtool" != "no"; then + + if test "$with_libtool" != "yes" ; then + +if test "x$prefix" != xNONE; then + cf_path_syntax="$prefix" +else + cf_path_syntax="$ac_default_prefix" +fi + +case ".$with_libtool" in #(vi +.\$\(*\)*|.\'*\'*) #(vi + ;; +..|./*|.\\*) #(vi + ;; +.[a-zA-Z]:[\\/]*) #(vi OS/2 EMX + ;; +.\${*prefix}*) #(vi + eval with_libtool="$with_libtool" + case ".$with_libtool" in #(vi + .NONE/*) + with_libtool=`echo $with_libtool | sed -e s%NONE%$cf_path_syntax%` + ;; + esac + ;; #(vi +.no|.NONE/*) + with_libtool=`echo $with_libtool | sed -e s%NONE%$cf_path_syntax%` + ;; +*) + { { echo "$as_me:8361: error: expected a pathname, not \"$with_libtool\"" >&5 +echo "$as_me: error: expected a pathname, not \"$with_libtool\"" >&2;} + { (exit 1); exit 1; }; } + ;; +esac + + LIBTOOL=$with_libtool + else + # Extract the first word of "libtool", so it can be a program name with args. +set dummy libtool; ac_word=$2 +echo "$as_me:8371: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_LIBTOOL+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $LIBTOOL in + [\\/]* | ?:[\\/]*) + ac_cv_path_LIBTOOL="$LIBTOOL" # Let the user override the test with a path. + ;; + *) + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + if $as_executable_p "$ac_dir/$ac_word"; then + ac_cv_path_LIBTOOL="$ac_dir/$ac_word" + echo "$as_me:8388: found $ac_dir/$ac_word" >&5 + break +fi +done + + ;; +esac +fi +LIBTOOL=$ac_cv_path_LIBTOOL + +if test -n "$LIBTOOL"; then + echo "$as_me:8399: result: $LIBTOOL" >&5 +echo "${ECHO_T}$LIBTOOL" >&6 +else + echo "$as_me:8402: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + fi + if test -z "$LIBTOOL" ; then + { { echo "$as_me:8408: error: Cannot find libtool" >&5 +echo "$as_me: error: Cannot find libtool" >&2;} + { (exit 1); exit 1; }; } + fi + LIB_CREATE='${LIBTOOL} --mode=link ${CC} -rpath ${DESTDIR}${libdir} -version-info `cut -f1 ${srcdir}/VERSION` ${LIBTOOL_OPTS} ${LT_UNDEF} -o' + LIB_OBJECT='${OBJECTS:.o=.lo}' + LIB_SUFFIX=.la + LIB_CLEAN='${LIBTOOL} --mode=clean' + LIB_COMPILE='${LIBTOOL} --mode=compile' + LIB_LINK='${LIBTOOL} --mode=link ${CC} ${LIBTOOL_OPTS}' + LIB_INSTALL='${LIBTOOL} --mode=install' + LIB_UNINSTALL='${LIBTOOL} --mode=uninstall' + LIB_PREP=: + + # Show the version of libtool + echo "$as_me:8423: checking version of libtool" >&5 +echo $ECHO_N "checking version of libtool... $ECHO_C" >&6 + + # Save the version in a cache variable - this is not entirely a good + # thing, but the version string from libtool is very ugly, and for + # bug reports it might be useful to have the original string. "(" + cf_cv_libtool_version=`$LIBTOOL --version 2>&1 | sed -e '/^$/d' |sed -e '2,$d' -e 's/([^)]*)//g' -e 's/^[^1-9]*//' -e 's/[^0-9.].*//'` + echo "$as_me:8430: result: $cf_cv_libtool_version" >&5 +echo "${ECHO_T}$cf_cv_libtool_version" >&6 + if test -z "$cf_cv_libtool_version" ; then + { { echo "$as_me:8433: error: This is not GNU libtool" >&5 +echo "$as_me: error: This is not GNU libtool" >&2;} + { (exit 1); exit 1; }; } + fi + + # special hack to add -no-undefined (which libtool should do for itself) + LT_UNDEF= + case "$cf_cv_system_name" in #(vi + cygwin*|mingw32*|uwin*|aix[456]) #(vi + LT_UNDEF=-no-undefined + ;; + esac + + # special hack to add --tag option for C++ compiler + case $cf_cv_libtool_version in #(vi + 1.[5-9]*|[2-9].[0-9.a-z]*) #(vi + LIBTOOL_CXX="$LIBTOOL --tag=CXX" + LIBTOOL="$LIBTOOL --tag=CC" + ;; + *) + LIBTOOL_CXX="$LIBTOOL" + ;; + esac +else + LIBTOOL="" + LIBTOOL_CXX="" +fi + +test -z "$LIBTOOL" && ECHO_LT= + +if test "$with_libtool" = "yes" ; then + OBJEXT="lo" + LIBTOOL_MAKE= + +echo "$as_me:8467: checking for additional libtool options" >&5 +echo $ECHO_N "checking for additional libtool options... $ECHO_C" >&6 + +# Check whether --with-libtool-opts or --without-libtool-opts was given. +if test "${with_libtool_opts+set}" = set; then + withval="$with_libtool_opts" + with_libtool_opts=$withval +else + with_libtool_opts=no +fi; +echo "$as_me:8477: result: $with_libtool_opts" >&5 +echo "${ECHO_T}$with_libtool_opts" >&6 + +case .$with_libtool_opts in +.yes|.no|.) + ;; +*) + LIBTOOL_OPTS=$with_libtool_opts + ;; +esac + +fi + +use_ncurses=no + +# Check whether --with-ncurses or --without-ncurses was given. +if test "${with_ncurses+set}" = set; then + withval="$with_ncurses" + use_ncurses=ncurses +fi; + +# Check whether --with-ncursesw or --without-ncursesw was given. +if test "${with_ncursesw+set}" = set; then + withval="$with_ncursesw" + use_ncurses=ncursesw +fi; +if test $use_ncurses != no ; then + cf_wide_curses=yes + if test $use_ncurses = ncursesw ; then + +echo "$as_me:8507: checking for multibyte character support" >&5 +echo $ECHO_N "checking for multibyte character support... $ECHO_C" >&6 +if test "${cf_cv_utf8_lib+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cf_save_LIBS="$LIBS" + cat >conftest.$ac_ext <<_ACEOF +#line 8515 "configure" +#include "confdefs.h" + +#include <stdlib.h> +int +main () +{ +putwc(0,0); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:8528: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:8531: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:8534: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:8537: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_cv_utf8_lib=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 + +# If the linkage is not already in the $CPPFLAGS/$LDFLAGS configuration, these +# will be set on completion of the AC_TRY_LINK below. +cf_cv_header_path_utf8= +cf_cv_library_path_utf8= + +echo "${as_me-configure}:8549: testing Starting FIND_LINKAGE(utf8,) ..." 1>&5 + +cat >conftest.$ac_ext <<_ACEOF +#line 8552 "configure" +#include "confdefs.h" + +#include <libutf8.h> +int +main () +{ +putwc(0,0); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:8565: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:8568: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:8571: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:8574: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + + cf_cv_find_linkage_utf8=yes + +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 + +cf_save_LIBS="$LIBS" +LIBS="-lutf8 $cf_save_LIBS" + +cat >conftest.$ac_ext <<_ACEOF +#line 8587 "configure" +#include "confdefs.h" + +#include <libutf8.h> +int +main () +{ +putwc(0,0); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:8600: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:8603: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:8606: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:8609: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + + cf_cv_find_linkage_utf8=yes + cf_cv_library_file_utf8="-lutf8" + +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 + + cf_cv_find_linkage_utf8=no + LIBS="$cf_save_LIBS" + + test -n "$verbose" && echo " find linkage for utf8 library" 1>&6 + +echo "${as_me-configure}:8624: testing find linkage for utf8 library ..." 1>&5 + +echo "${as_me-configure}:8626: testing Searching for headers in FIND_LINKAGE(utf8,) ..." 1>&5 + + cf_save_CPPFLAGS="$CPPFLAGS" + cf_test_CPPFLAGS="$CPPFLAGS" + +cf_search= + +# collect the current set of include-directories from compiler flags +cf_header_path_list="" +if test -n "${CFLAGS}${CPPFLAGS}" ; then + for cf_header_path in $CPPFLAGS $CFLAGS + do + case $cf_header_path in #(vi + -I*) + cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` + cf_header_path_list="$cf_header_path_list $cf_header_path" + ;; + esac + done +fi + +# add the variations for the package we are looking for + +cf_search= + +test "/usr" != "$prefix" && \ +test -d "/usr" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for include-directories under /usr" + test -d /usr/include && cf_search="$cf_search /usr/include" + test -d /usr/include/utf8 && cf_search="$cf_search /usr/include/utf8" + test -d /usr/include/utf8/include && cf_search="$cf_search /usr/include/utf8/include" + test -d /usr/utf8/include && cf_search="$cf_search /usr/utf8/include" + test -d /usr/utf8/include/utf8 && cf_search="$cf_search /usr/utf8/include/utf8" +} + +test "$prefix" != "NONE" && \ +test -d "$prefix" && \ + { + test -n "$verbose" && echo " ... testing for include-directories under $prefix" + test -d $prefix/include && cf_search="$cf_search $prefix/include" + test -d $prefix/include/utf8 && cf_search="$cf_search $prefix/include/utf8" + test -d $prefix/include/utf8/include && cf_search="$cf_search $prefix/include/utf8/include" + test -d $prefix/utf8/include && cf_search="$cf_search $prefix/utf8/include" + test -d $prefix/utf8/include/utf8 && cf_search="$cf_search $prefix/utf8/include/utf8" +} + +test "/usr/local" != "$prefix" && \ +test -d "/usr/local" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for include-directories under /usr/local" + test -d /usr/local/include && cf_search="$cf_search /usr/local/include" + test -d /usr/local/include/utf8 && cf_search="$cf_search /usr/local/include/utf8" + test -d /usr/local/include/utf8/include && cf_search="$cf_search /usr/local/include/utf8/include" + test -d /usr/local/utf8/include && cf_search="$cf_search /usr/local/utf8/include" + test -d /usr/local/utf8/include/utf8 && cf_search="$cf_search /usr/local/utf8/include/utf8" +} + +test "/opt" != "$prefix" && \ +test -d "/opt" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for include-directories under /opt" + test -d /opt/include && cf_search="$cf_search /opt/include" + test -d /opt/include/utf8 && cf_search="$cf_search /opt/include/utf8" + test -d /opt/include/utf8/include && cf_search="$cf_search /opt/include/utf8/include" + test -d /opt/utf8/include && cf_search="$cf_search /opt/utf8/include" + test -d /opt/utf8/include/utf8 && cf_search="$cf_search /opt/utf8/include/utf8" +} + +test "$HOME" != "$prefix" && \ +test -d "$HOME" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for include-directories under $HOME" + test -d $HOME/include && cf_search="$cf_search $HOME/include" + test -d $HOME/include/utf8 && cf_search="$cf_search $HOME/include/utf8" + test -d $HOME/include/utf8/include && cf_search="$cf_search $HOME/include/utf8/include" + test -d $HOME/utf8/include && cf_search="$cf_search $HOME/utf8/include" + test -d $HOME/utf8/include/utf8 && cf_search="$cf_search $HOME/utf8/include/utf8" +} + +test "$includedir" != NONE && \ +test "$includedir" != "/usr/include" && \ +test -d "$includedir" && { + test -d $includedir && cf_search="$cf_search $includedir" + test -d $includedir/utf8 && cf_search="$cf_search $includedir/utf8" +} + +test "$oldincludedir" != NONE && \ +test "$oldincludedir" != "/usr/include" && \ +test -d "$oldincludedir" && { + test -d $oldincludedir && cf_search="$cf_search $oldincludedir" + test -d $oldincludedir/utf8 && cf_search="$cf_search $oldincludedir/utf8" +} + +cf_search="$cf_search $cf_header_path_list" + + for cf_cv_header_path_utf8 in $cf_search + do + if test -d $cf_cv_header_path_utf8 ; then + test -n "$verbose" && echo " ... testing $cf_cv_header_path_utf8" 1>&6 + +echo "${as_me-configure}:8727: testing ... testing $cf_cv_header_path_utf8 ..." 1>&5 + + CPPFLAGS="$cf_save_CPPFLAGS -I$cf_cv_header_path_utf8" + cat >conftest.$ac_ext <<_ACEOF +#line 8731 "configure" +#include "confdefs.h" + +#include <libutf8.h> +int +main () +{ +putwc(0,0); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:8744: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:8747: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:8750: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:8753: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + + test -n "$verbose" && echo " ... found utf8 headers in $cf_cv_header_path_utf8" 1>&6 + +echo "${as_me-configure}:8758: testing ... found utf8 headers in $cf_cv_header_path_utf8 ..." 1>&5 + + cf_cv_find_linkage_utf8=maybe + cf_test_CPPFLAGS="$CPPFLAGS" + break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 + + CPPFLAGS="$cf_save_CPPFLAGS" + +fi +rm -f conftest.$ac_objext conftest.$ac_ext + fi + done + + if test "$cf_cv_find_linkage_utf8" = maybe ; then + +echo "${as_me-configure}:8776: testing Searching for utf8 library in FIND_LINKAGE(utf8,) ..." 1>&5 + + cf_save_LIBS="$LIBS" + cf_save_LDFLAGS="$LDFLAGS" + + if test "$cf_cv_find_linkage_utf8" != yes ; then + +cf_search= +cf_library_path_list="" +if test -n "${LDFLAGS}${LIBS}" ; then + for cf_library_path in $LDFLAGS $LIBS + do + case $cf_library_path in #(vi + -L*) + cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` + +test "$cf_library_path" != "NONE" && \ +test -d "$cf_library_path" && \ + { + test -n "$verbose" && echo " ... testing for lib-directories under $cf_library_path" + test -d $cf_library_path/lib && cf_search="$cf_search $cf_library_path/lib" + test -d $cf_library_path/lib/utf8 && cf_search="$cf_search $cf_library_path/lib/utf8" + test -d $cf_library_path/lib/utf8/lib && cf_search="$cf_search $cf_library_path/lib/utf8/lib" + test -d $cf_library_path/utf8/lib && cf_search="$cf_search $cf_library_path/utf8/lib" + test -d $cf_library_path/utf8/lib/utf8 && cf_search="$cf_search $cf_library_path/utf8/lib/utf8" +} + + cf_library_path_list="$cf_library_path_list $cf_search" + ;; + esac + done +fi + +cf_search= + +test "/usr" != "$prefix" && \ +test -d "/usr" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for lib-directories under /usr" + test -d /usr/lib && cf_search="$cf_search /usr/lib" + test -d /usr/lib/utf8 && cf_search="$cf_search /usr/lib/utf8" + test -d /usr/lib/utf8/lib && cf_search="$cf_search /usr/lib/utf8/lib" + test -d /usr/utf8/lib && cf_search="$cf_search /usr/utf8/lib" + test -d /usr/utf8/lib/utf8 && cf_search="$cf_search /usr/utf8/lib/utf8" +} + +test "$prefix" != "NONE" && \ +test -d "$prefix" && \ + { + test -n "$verbose" && echo " ... testing for lib-directories under $prefix" + test -d $prefix/lib && cf_search="$cf_search $prefix/lib" + test -d $prefix/lib/utf8 && cf_search="$cf_search $prefix/lib/utf8" + test -d $prefix/lib/utf8/lib && cf_search="$cf_search $prefix/lib/utf8/lib" + test -d $prefix/utf8/lib && cf_search="$cf_search $prefix/utf8/lib" + test -d $prefix/utf8/lib/utf8 && cf_search="$cf_search $prefix/utf8/lib/utf8" +} + +test "/usr/local" != "$prefix" && \ +test -d "/usr/local" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for lib-directories under /usr/local" + test -d /usr/local/lib && cf_search="$cf_search /usr/local/lib" + test -d /usr/local/lib/utf8 && cf_search="$cf_search /usr/local/lib/utf8" + test -d /usr/local/lib/utf8/lib && cf_search="$cf_search /usr/local/lib/utf8/lib" + test -d /usr/local/utf8/lib && cf_search="$cf_search /usr/local/utf8/lib" + test -d /usr/local/utf8/lib/utf8 && cf_search="$cf_search /usr/local/utf8/lib/utf8" +} + +test "/opt" != "$prefix" && \ +test -d "/opt" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for lib-directories under /opt" + test -d /opt/lib && cf_search="$cf_search /opt/lib" + test -d /opt/lib/utf8 && cf_search="$cf_search /opt/lib/utf8" + test -d /opt/lib/utf8/lib && cf_search="$cf_search /opt/lib/utf8/lib" + test -d /opt/utf8/lib && cf_search="$cf_search /opt/utf8/lib" + test -d /opt/utf8/lib/utf8 && cf_search="$cf_search /opt/utf8/lib/utf8" +} + +test "$HOME" != "$prefix" && \ +test -d "$HOME" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for lib-directories under $HOME" + test -d $HOME/lib && cf_search="$cf_search $HOME/lib" + test -d $HOME/lib/utf8 && cf_search="$cf_search $HOME/lib/utf8" + test -d $HOME/lib/utf8/lib && cf_search="$cf_search $HOME/lib/utf8/lib" + test -d $HOME/utf8/lib && cf_search="$cf_search $HOME/utf8/lib" + test -d $HOME/utf8/lib/utf8 && cf_search="$cf_search $HOME/utf8/lib/utf8" +} + +cf_search="$cf_library_path_list $cf_search" + + for cf_cv_library_path_utf8 in $cf_search + do + if test -d $cf_cv_library_path_utf8 ; then + test -n "$verbose" && echo " ... testing $cf_cv_library_path_utf8" 1>&6 + +echo "${as_me-configure}:8873: testing ... testing $cf_cv_library_path_utf8 ..." 1>&5 + + CPPFLAGS="$cf_test_CPPFLAGS" + LIBS="-lutf8 $cf_save_LIBS" + LDFLAGS="$cf_save_LDFLAGS -L$cf_cv_library_path_utf8" + cat >conftest.$ac_ext <<_ACEOF +#line 8879 "configure" +#include "confdefs.h" + +#include <libutf8.h> +int +main () +{ +putwc(0,0); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:8892: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:8895: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:8898: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:8901: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + + test -n "$verbose" && echo " ... found utf8 library in $cf_cv_library_path_utf8" 1>&6 + +echo "${as_me-configure}:8906: testing ... found utf8 library in $cf_cv_library_path_utf8 ..." 1>&5 + + cf_cv_find_linkage_utf8=yes + cf_cv_library_file_utf8="-lutf8" + break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 + + CPPFLAGS="$cf_save_CPPFLAGS" + LIBS="$cf_save_LIBS" + LDFLAGS="$cf_save_LDFLAGS" + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + fi + done + LIBS="$cf_save_LIBS" + CPPFLAGS="$cf_save_CPPFLAGS" + LDFLAGS="$cf_save_LDFLAGS" + fi + + else + cf_cv_find_linkage_utf8=no + fi + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + +if test "$cf_cv_find_linkage_utf8" = yes ; then +cf_cv_utf8_lib=add-on +else +cf_cv_utf8_lib=no +fi + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:8947: result: $cf_cv_utf8_lib" >&5 +echo "${ECHO_T}$cf_cv_utf8_lib" >&6 + +# HAVE_LIBUTF8_H is used by ncurses if curses.h is shared between +# ncurses/ncursesw: +if test "$cf_cv_utf8_lib" = "add-on" ; then + cat >>confdefs.h <<\EOF +#define HAVE_LIBUTF8_H 1 +EOF + +if test -n "$cf_cv_header_path_utf8" ; then + for cf_add_incdir in $cf_cv_header_path_utf8 + do + while test $cf_add_incdir != /usr/include + do + if test -d $cf_add_incdir + then + cf_have_incdir=no + if test -n "$CFLAGS$CPPFLAGS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_incdir in $CFLAGS $CPPFLAGS ; do + if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then + cf_have_incdir=yes; break + fi + done + fi + + if test "$cf_have_incdir" = no ; then + if test "$cf_add_incdir" = /usr/local/include ; then + if test "$GCC" = yes + then + cf_save_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + cat >conftest.$ac_ext <<_ACEOF +#line 8981 "configure" +#include "confdefs.h" +#include <stdio.h> +int +main () +{ +printf("Hello") + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:8993: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:8996: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:8999: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:9002: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_have_incdir=yes +fi +rm -f conftest.$ac_objext conftest.$ac_ext + CPPFLAGS=$cf_save_CPPFLAGS + fi + fi + fi + + if test "$cf_have_incdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 + +echo "${as_me-configure}:9019: testing adding $cf_add_incdir to include-path ..." 1>&5 + + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + + cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` + test "$cf_top_incdir" = "$cf_add_incdir" && break + cf_add_incdir="$cf_top_incdir" + else + break + fi + fi + done + done +fi + +if test -n "$cf_cv_library_path_utf8" ; then + for cf_add_libdir in $cf_cv_library_path_utf8 + do + if test $cf_add_libdir = /usr/lib ; then + : + elif test -d $cf_add_libdir + then + cf_have_libdir=no + if test -n "$LDFLAGS$LIBS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_libdir in $LDFLAGS $LIBS ; do + if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then + cf_have_libdir=yes; break + fi + done + fi + if test "$cf_have_libdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 + +echo "${as_me-configure}:9053: testing adding $cf_add_libdir to library-path ..." 1>&5 + + LDFLAGS="-L$cf_add_libdir $LDFLAGS" + fi + fi + done +fi + + LIBS="$cf_cv_library_file_utf8 $LIBS" +fi + + fi + +# Check whether --with-curses-dir or --without-curses-dir was given. +if test "${with_curses_dir+set}" = set; then + withval="$with_curses_dir" + +if test "x$prefix" != xNONE; then + cf_path_syntax="$prefix" +else + cf_path_syntax="$ac_default_prefix" +fi + +case ".$withval" in #(vi +.\$\(*\)*|.\'*\'*) #(vi + ;; +..|./*|.\\*) #(vi + ;; +.[a-zA-Z]:[\\/]*) #(vi OS/2 EMX + ;; +.\${*prefix}*) #(vi + eval withval="$withval" + case ".$withval" in #(vi + .NONE/*) + withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%` + ;; + esac + ;; #(vi +.no|.NONE/*) + withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%` + ;; +*) + { { echo "$as_me:9095: error: expected a pathname, not \"$withval\"" >&5 +echo "$as_me: error: expected a pathname, not \"$withval\"" >&2;} + { (exit 1); exit 1; }; } + ;; +esac + + cf_cv_curses_dir=$withval +else + cf_cv_curses_dir=no +fi; + +cf_ncuconfig_root=$use_ncurses + +echo "Looking for ${cf_ncuconfig_root}-config" +for ac_prog in ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:9113: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_NCURSES_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $NCURSES_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_NCURSES_CONFIG="$NCURSES_CONFIG" # Let the user override the test with a path. + ;; + *) + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + if $as_executable_p "$ac_dir/$ac_word"; then + ac_cv_path_NCURSES_CONFIG="$ac_dir/$ac_word" + echo "$as_me:9130: found $ac_dir/$ac_word" >&5 + break +fi +done + + ;; +esac +fi +NCURSES_CONFIG=$ac_cv_path_NCURSES_CONFIG + +if test -n "$NCURSES_CONFIG"; then + echo "$as_me:9141: result: $NCURSES_CONFIG" >&5 +echo "${ECHO_T}$NCURSES_CONFIG" >&6 +else + echo "$as_me:9144: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$NCURSES_CONFIG" && break +done +test -n "$NCURSES_CONFIG" || NCURSES_CONFIG="none" + +if test "$NCURSES_CONFIG" != none ; then + +CPPFLAGS="$CPPFLAGS `$NCURSES_CONFIG --cflags`" +LIBS="`$NCURSES_CONFIG --libs` $LIBS" + +# even with config script, some packages use no-override for curses.h + +echo "$as_me:9159: checking if we have identified curses headers" >&5 +echo $ECHO_N "checking if we have identified curses headers... $ECHO_C" >&6 +if test "${cf_cv_ncurses_header+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +cf_cv_ncurses_header=none +for cf_header in \ + $use_ncurses/curses.h \ + $use_ncurses/ncurses.h \ + curses.h \ + ncurses.h +do +cat >conftest.$ac_ext <<_ACEOF +#line 9173 "configure" +#include "confdefs.h" +#include <${cf_header}> +int +main () +{ +initscr(); tgoto("?", 0,0) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:9185: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:9188: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:9191: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:9194: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_cv_ncurses_header=$cf_header; break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext conftest.$ac_ext +done + +fi +echo "$as_me:9205: result: $cf_cv_ncurses_header" >&5 +echo "${ECHO_T}$cf_cv_ncurses_header" >&6 + +if test "$cf_cv_ncurses_header" = none ; then + { { echo "$as_me:9209: error: No curses header-files found" >&5 +echo "$as_me: error: No curses header-files found" >&2;} + { (exit 1); exit 1; }; } +fi + +# cheat, to get the right #define's for HAVE_NCURSES_H, etc. + +for ac_header in $cf_cv_ncurses_header +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:9219: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 9225 "configure" +#include "confdefs.h" +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:9229: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:9235: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_ext +fi +echo "$as_me:9254: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<EOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +EOF + +fi +done + +cat >>confdefs.h <<\EOF +#define NCURSES 1 +EOF + +cf_nculib_ROOT=`echo "HAVE_LIB$cf_ncuconfig_root" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` + +cat >>confdefs.h <<EOF +#define $cf_nculib_ROOT 1 +EOF + +cf_cv_ncurses_version=`$NCURSES_CONFIG --version` + +else + +cf_ncuhdr_root=$use_ncurses + +test -n "$cf_cv_curses_dir" && \ +test "$cf_cv_curses_dir" != "no" && { \ + +if test -n "$cf_cv_curses_dir/include $cf_cv_curses_dir/include/$cf_ncuhdr_root" ; then + for cf_add_incdir in $cf_cv_curses_dir/include $cf_cv_curses_dir/include/$cf_ncuhdr_root + do + while test $cf_add_incdir != /usr/include + do + if test -d $cf_add_incdir + then + cf_have_incdir=no + if test -n "$CFLAGS$CPPFLAGS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_incdir in $CFLAGS $CPPFLAGS ; do + if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then + cf_have_incdir=yes; break + fi + done + fi + + if test "$cf_have_incdir" = no ; then + if test "$cf_add_incdir" = /usr/local/include ; then + if test "$GCC" = yes + then + cf_save_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + cat >conftest.$ac_ext <<_ACEOF +#line 9307 "configure" +#include "confdefs.h" +#include <stdio.h> +int +main () +{ +printf("Hello") + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:9319: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:9322: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:9325: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:9328: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_have_incdir=yes +fi +rm -f conftest.$ac_objext conftest.$ac_ext + CPPFLAGS=$cf_save_CPPFLAGS + fi + fi + fi + + if test "$cf_have_incdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 + +echo "${as_me-configure}:9345: testing adding $cf_add_incdir to include-path ..." 1>&5 + + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + + cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` + test "$cf_top_incdir" = "$cf_add_incdir" && break + cf_add_incdir="$cf_top_incdir" + else + break + fi + fi + done + done +fi + +} + +echo "$as_me:9362: checking for $cf_ncuhdr_root header in include-path" >&5 +echo $ECHO_N "checking for $cf_ncuhdr_root header in include-path... $ECHO_C" >&6 +if test "${cf_cv_ncurses_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cf_header_list="$cf_ncuhdr_root/curses.h $cf_ncuhdr_root/ncurses.h" + ( test "$cf_ncuhdr_root" = ncurses || test "$cf_ncuhdr_root" = ncursesw ) && cf_header_list="$cf_header_list curses.h ncurses.h" + for cf_header in $cf_header_list + do + + cat >conftest.$ac_ext <<_ACEOF +#line 9374 "configure" +#include "confdefs.h" + +#include <$cf_header> +int +main () +{ + +#ifdef NCURSES_VERSION + +printf("%s\n", NCURSES_VERSION); +#else +#ifdef __NCURSES_H +printf("old\n"); +#else + make an error +#endif +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:9398: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:9401: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:9404: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:9407: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_cv_ncurses_h=$cf_header + +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_cv_ncurses_h=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext + + test "$cf_cv_ncurses_h" != no && break + done + +fi +echo "$as_me:9422: result: $cf_cv_ncurses_h" >&5 +echo "${ECHO_T}$cf_cv_ncurses_h" >&6 + +if test "$cf_cv_ncurses_h" != no ; then + cf_cv_ncurses_header=$cf_cv_ncurses_h +else + +echo "$as_me:9429: checking for $cf_ncuhdr_root include-path" >&5 +echo $ECHO_N "checking for $cf_ncuhdr_root include-path... $ECHO_C" >&6 +if test "${cf_cv_ncurses_h2+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + test -n "$verbose" && echo + +cf_search= + +# collect the current set of include-directories from compiler flags +cf_header_path_list="" +if test -n "${CFLAGS}${CPPFLAGS}" ; then + for cf_header_path in $CPPFLAGS $CFLAGS + do + case $cf_header_path in #(vi + -I*) + cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` + cf_header_path_list="$cf_header_path_list $cf_header_path" + ;; + esac + done +fi + +# add the variations for the package we are looking for + +cf_search= + +test "/usr" != "$prefix" && \ +test -d "/usr" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for include-directories under /usr" + test -d /usr/include && cf_search="$cf_search /usr/include" + test -d /usr/include/$cf_ncuhdr_root && cf_search="$cf_search /usr/include/$cf_ncuhdr_root" + test -d /usr/include/$cf_ncuhdr_root/include && cf_search="$cf_search /usr/include/$cf_ncuhdr_root/include" + test -d /usr/$cf_ncuhdr_root/include && cf_search="$cf_search /usr/$cf_ncuhdr_root/include" + test -d /usr/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search /usr/$cf_ncuhdr_root/include/$cf_ncuhdr_root" +} + +test "$prefix" != "NONE" && \ +test -d "$prefix" && \ + { + test -n "$verbose" && echo " ... testing for include-directories under $prefix" + test -d $prefix/include && cf_search="$cf_search $prefix/include" + test -d $prefix/include/$cf_ncuhdr_root && cf_search="$cf_search $prefix/include/$cf_ncuhdr_root" + test -d $prefix/include/$cf_ncuhdr_root/include && cf_search="$cf_search $prefix/include/$cf_ncuhdr_root/include" + test -d $prefix/$cf_ncuhdr_root/include && cf_search="$cf_search $prefix/$cf_ncuhdr_root/include" + test -d $prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search $prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root" +} + +test "/usr/local" != "$prefix" && \ +test -d "/usr/local" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for include-directories under /usr/local" + test -d /usr/local/include && cf_search="$cf_search /usr/local/include" + test -d /usr/local/include/$cf_ncuhdr_root && cf_search="$cf_search /usr/local/include/$cf_ncuhdr_root" + test -d /usr/local/include/$cf_ncuhdr_root/include && cf_search="$cf_search /usr/local/include/$cf_ncuhdr_root/include" + test -d /usr/local/$cf_ncuhdr_root/include && cf_search="$cf_search /usr/local/$cf_ncuhdr_root/include" + test -d /usr/local/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search /usr/local/$cf_ncuhdr_root/include/$cf_ncuhdr_root" +} + +test "/opt" != "$prefix" && \ +test -d "/opt" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for include-directories under /opt" + test -d /opt/include && cf_search="$cf_search /opt/include" + test -d /opt/include/$cf_ncuhdr_root && cf_search="$cf_search /opt/include/$cf_ncuhdr_root" + test -d /opt/include/$cf_ncuhdr_root/include && cf_search="$cf_search /opt/include/$cf_ncuhdr_root/include" + test -d /opt/$cf_ncuhdr_root/include && cf_search="$cf_search /opt/$cf_ncuhdr_root/include" + test -d /opt/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search /opt/$cf_ncuhdr_root/include/$cf_ncuhdr_root" +} + +test "$HOME" != "$prefix" && \ +test -d "$HOME" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for include-directories under $HOME" + test -d $HOME/include && cf_search="$cf_search $HOME/include" + test -d $HOME/include/$cf_ncuhdr_root && cf_search="$cf_search $HOME/include/$cf_ncuhdr_root" + test -d $HOME/include/$cf_ncuhdr_root/include && cf_search="$cf_search $HOME/include/$cf_ncuhdr_root/include" + test -d $HOME/$cf_ncuhdr_root/include && cf_search="$cf_search $HOME/$cf_ncuhdr_root/include" + test -d $HOME/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search $HOME/$cf_ncuhdr_root/include/$cf_ncuhdr_root" +} + +test "$includedir" != NONE && \ +test "$includedir" != "/usr/include" && \ +test -d "$includedir" && { + test -d $includedir && cf_search="$cf_search $includedir" + test -d $includedir/$cf_ncuhdr_root && cf_search="$cf_search $includedir/$cf_ncuhdr_root" +} + +test "$oldincludedir" != NONE && \ +test "$oldincludedir" != "/usr/include" && \ +test -d "$oldincludedir" && { + test -d $oldincludedir && cf_search="$cf_search $oldincludedir" + test -d $oldincludedir/$cf_ncuhdr_root && cf_search="$cf_search $oldincludedir/$cf_ncuhdr_root" +} + +cf_search="$cf_search $cf_header_path_list" + + test -n "$verbose" && echo search path $cf_search + cf_save2_CPPFLAGS="$CPPFLAGS" + for cf_incdir in $cf_search + do + +if test -n "$cf_incdir" ; then + for cf_add_incdir in $cf_incdir + do + while test $cf_add_incdir != /usr/include + do + if test -d $cf_add_incdir + then + cf_have_incdir=no + if test -n "$CFLAGS$CPPFLAGS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_incdir in $CFLAGS $CPPFLAGS ; do + if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then + cf_have_incdir=yes; break + fi + done + fi + + if test "$cf_have_incdir" = no ; then + if test "$cf_add_incdir" = /usr/local/include ; then + if test "$GCC" = yes + then + cf_save_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + cat >conftest.$ac_ext <<_ACEOF +#line 9557 "configure" +#include "confdefs.h" +#include <stdio.h> +int +main () +{ +printf("Hello") + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:9569: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:9572: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:9575: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:9578: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_have_incdir=yes +fi +rm -f conftest.$ac_objext conftest.$ac_ext + CPPFLAGS=$cf_save_CPPFLAGS + fi + fi + fi + + if test "$cf_have_incdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 + +echo "${as_me-configure}:9595: testing adding $cf_add_incdir to include-path ..." 1>&5 + + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + + cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` + test "$cf_top_incdir" = "$cf_add_incdir" && break + cf_add_incdir="$cf_top_incdir" + else + break + fi + fi + done + done +fi + + for cf_header in \ + ncurses.h \ + curses.h + do + + cat >conftest.$ac_ext <<_ACEOF +#line 9616 "configure" +#include "confdefs.h" + +#include <$cf_header> +int +main () +{ + +#ifdef NCURSES_VERSION + +printf("%s\n", NCURSES_VERSION); +#else +#ifdef __NCURSES_H +printf("old\n"); +#else + make an error +#endif +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:9640: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:9643: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:9646: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:9649: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_cv_ncurses_h2=$cf_header + +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_cv_ncurses_h2=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext + + if test "$cf_cv_ncurses_h2" != no ; then + cf_cv_ncurses_h2=$cf_incdir/$cf_header + test -n "$verbose" && echo $ac_n " ... found $ac_c" 1>&6 + break + fi + test -n "$verbose" && echo " ... tested $cf_incdir/$cf_header" 1>&6 + done + CPPFLAGS="$cf_save2_CPPFLAGS" + test "$cf_cv_ncurses_h2" != no && break + done + test "$cf_cv_ncurses_h2" = no && { { echo "$as_me:9670: error: not found" >&5 +echo "$as_me: error: not found" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:9675: result: $cf_cv_ncurses_h2" >&5 +echo "${ECHO_T}$cf_cv_ncurses_h2" >&6 + + cf_1st_incdir=`echo $cf_cv_ncurses_h2 | sed -e 's%/[^/]*$%%'` + cf_cv_ncurses_header=`basename $cf_cv_ncurses_h2` + if test `basename $cf_1st_incdir` = $cf_ncuhdr_root ; then + cf_cv_ncurses_header=$cf_ncuhdr_root/$cf_cv_ncurses_header + fi + +if test -n "$cf_1st_incdir" ; then + for cf_add_incdir in $cf_1st_incdir + do + while test $cf_add_incdir != /usr/include + do + if test -d $cf_add_incdir + then + cf_have_incdir=no + if test -n "$CFLAGS$CPPFLAGS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_incdir in $CFLAGS $CPPFLAGS ; do + if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then + cf_have_incdir=yes; break + fi + done + fi + + if test "$cf_have_incdir" = no ; then + if test "$cf_add_incdir" = /usr/local/include ; then + if test "$GCC" = yes + then + cf_save_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + cat >conftest.$ac_ext <<_ACEOF +#line 9708 "configure" +#include "confdefs.h" +#include <stdio.h> +int +main () +{ +printf("Hello") + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:9720: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:9723: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:9726: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:9729: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_have_incdir=yes +fi +rm -f conftest.$ac_objext conftest.$ac_ext + CPPFLAGS=$cf_save_CPPFLAGS + fi + fi + fi + + if test "$cf_have_incdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 + +echo "${as_me-configure}:9746: testing adding $cf_add_incdir to include-path ..." 1>&5 + + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + + cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` + test "$cf_top_incdir" = "$cf_add_incdir" && break + cf_add_incdir="$cf_top_incdir" + else + break + fi + fi + done + done +fi + +fi + +# Set definitions to allow ifdef'ing for ncurses.h + +case $cf_cv_ncurses_header in # (vi +*ncurses.h) + cat >>confdefs.h <<\EOF +#define HAVE_NCURSES_H 1 +EOF + + ;; +esac + +case $cf_cv_ncurses_header in # (vi +ncurses/curses.h|ncurses/ncurses.h) + cat >>confdefs.h <<\EOF +#define HAVE_NCURSES_NCURSES_H 1 +EOF + + ;; +ncursesw/curses.h|ncursesw/ncurses.h) + cat >>confdefs.h <<\EOF +#define HAVE_NCURSESW_NCURSES_H 1 +EOF + + ;; +esac + +echo "$as_me:9789: checking for terminfo header" >&5 +echo $ECHO_N "checking for terminfo header... $ECHO_C" >&6 +if test "${cf_cv_term_header+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +case ${cf_cv_ncurses_header} in #(vi +*/ncurses.h|*/ncursesw.h) #(vi + cf_term_header=`echo "$cf_cv_ncurses_header" | sed -e 's%ncurses[^.]*\.h$%term.h%'` + ;; +*) + cf_term_header=term.h + ;; +esac + +for cf_test in $cf_term_header "ncurses/term.h" "ncursesw/term.h" +do +cat >conftest.$ac_ext <<_ACEOF +#line 9807 "configure" +#include "confdefs.h" +#include <stdio.h> +#include <${cf_cv_ncurses_header-curses.h}> +#include <$cf_test> + +int +main () +{ +int x = auto_left_margin + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:9822: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:9825: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:9828: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:9831: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + + cf_cv_term_header="$cf_test" +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 + + cf_cv_term_header=unknown + +fi +rm -f conftest.$ac_objext conftest.$ac_ext + test "$cf_cv_term_header" != unknown && break +done + +fi +echo "$as_me:9847: result: $cf_cv_term_header" >&5 +echo "${ECHO_T}$cf_cv_term_header" >&6 + +# Set definitions to allow ifdef'ing to accommodate subdirectories + +case $cf_cv_term_header in # (vi +*term.h) + cat >>confdefs.h <<\EOF +#define HAVE_TERM_H 1 +EOF + + ;; +esac + +case $cf_cv_term_header in # (vi +ncurses/term.h) #(vi + cat >>confdefs.h <<\EOF +#define HAVE_NCURSES_TERM_H 1 +EOF + + ;; +ncursesw/term.h) + cat >>confdefs.h <<\EOF +#define HAVE_NCURSESW_TERM_H 1 +EOF + + ;; +esac + +# some applications need this, but should check for NCURSES_VERSION +cat >>confdefs.h <<\EOF +#define NCURSES 1 +EOF + +echo "$as_me:9881: checking for ncurses version" >&5 +echo $ECHO_N "checking for ncurses version... $ECHO_C" >&6 +if test "${cf_cv_ncurses_version+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cf_cv_ncurses_version=no + cf_tempfile=out$$ + rm -f $cf_tempfile + if test "$cross_compiling" = yes; then + + # This will not work if the preprocessor splits the line after the + # Autoconf token. The 'unproto' program does that. + cat > conftest.$ac_ext <<EOF +#include <${cf_cv_ncurses_header-curses.h}> +#undef Autoconf +#ifdef NCURSES_VERSION +Autoconf NCURSES_VERSION +#else +#ifdef __NCURSES_H +Autoconf "old" +#endif +; +#endif +EOF + cf_try="$ac_cpp conftest.$ac_ext 2>&5 | grep '^Autoconf ' >conftest.out" + { (eval echo "$as_me:9907: \"$cf_try\"") >&5 + (eval $cf_try) 2>&5 + ac_status=$? + echo "$as_me:9910: \$? = $ac_status" >&5 + (exit $ac_status); } + if test -f conftest.out ; then + cf_out=`cat conftest.out | sed -e 's%^Autoconf %%' -e 's%^[^"]*"%%' -e 's%".*%%'` + test -n "$cf_out" && cf_cv_ncurses_version="$cf_out" + rm -f conftest.out + fi + +else + cat >conftest.$ac_ext <<_ACEOF +#line 9920 "configure" +#include "confdefs.h" + +#include <${cf_cv_ncurses_header-curses.h}> +#include <stdio.h> +int main() +{ + FILE *fp = fopen("$cf_tempfile", "w"); +#ifdef NCURSES_VERSION +# ifdef NCURSES_VERSION_PATCH + fprintf(fp, "%s.%d\n", NCURSES_VERSION, NCURSES_VERSION_PATCH); +# else + fprintf(fp, "%s\n", NCURSES_VERSION); +# endif +#else +# ifdef __NCURSES_H + fprintf(fp, "old\n"); +# else + make an error +# endif +#endif + ${cf_cv_main_return-return}(0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:9945: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:9948: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:9950: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:9953: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + + cf_cv_ncurses_version=`cat $cf_tempfile` +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + rm -f $cf_tempfile + +fi +echo "$as_me:9967: result: $cf_cv_ncurses_version" >&5 +echo "${ECHO_T}$cf_cv_ncurses_version" >&6 +test "$cf_cv_ncurses_version" = no || cat >>confdefs.h <<\EOF +#define NCURSES 1 +EOF + +cf_nculib_root=$use_ncurses + # This works, except for the special case where we find gpm, but + # ncurses is in a nonstandard location via $LIBS, and we really want + # to link gpm. +cf_ncurses_LIBS="" +cf_ncurses_SAVE="$LIBS" +echo "$as_me:9979: checking for Gpm_Open in -lgpm" >&5 +echo $ECHO_N "checking for Gpm_Open in -lgpm... $ECHO_C" >&6 +if test "${ac_cv_lib_gpm_Gpm_Open+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lgpm $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line 9987 "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char Gpm_Open (); +int +main () +{ +Gpm_Open (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:10006: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:10009: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:10012: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:10015: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_gpm_Gpm_Open=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_gpm_Gpm_Open=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:10026: result: $ac_cv_lib_gpm_Gpm_Open" >&5 +echo "${ECHO_T}$ac_cv_lib_gpm_Gpm_Open" >&6 +if test $ac_cv_lib_gpm_Gpm_Open = yes; then + echo "$as_me:10029: checking for initscr in -lgpm" >&5 +echo $ECHO_N "checking for initscr in -lgpm... $ECHO_C" >&6 +if test "${ac_cv_lib_gpm_initscr+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lgpm $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line 10037 "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char initscr (); +int +main () +{ +initscr (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:10056: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:10059: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:10062: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:10065: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_gpm_initscr=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_gpm_initscr=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:10076: result: $ac_cv_lib_gpm_initscr" >&5 +echo "${ECHO_T}$ac_cv_lib_gpm_initscr" >&6 +if test $ac_cv_lib_gpm_initscr = yes; then + LIBS="$cf_ncurses_SAVE" +else + cf_ncurses_LIBS="-lgpm" +fi + +fi + +case $host_os in #(vi +freebsd*) + # This is only necessary if you are linking against an obsolete + # version of ncurses (but it should do no harm, since it's static). + if test "$cf_nculib_root" = ncurses ; then + echo "$as_me:10091: checking for tgoto in -lmytinfo" >&5 +echo $ECHO_N "checking for tgoto in -lmytinfo... $ECHO_C" >&6 +if test "${ac_cv_lib_mytinfo_tgoto+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lmytinfo $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line 10099 "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char tgoto (); +int +main () +{ +tgoto (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:10118: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:10121: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:10124: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:10127: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_mytinfo_tgoto=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_mytinfo_tgoto=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:10138: result: $ac_cv_lib_mytinfo_tgoto" >&5 +echo "${ECHO_T}$ac_cv_lib_mytinfo_tgoto" >&6 +if test $ac_cv_lib_mytinfo_tgoto = yes; then + cf_ncurses_LIBS="-lmytinfo $cf_ncurses_LIBS" +fi + + fi + ;; +esac + +LIBS="$cf_ncurses_LIBS $LIBS" + +if ( test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" ) +then + +if test -n "$cf_cv_curses_dir/lib" ; then + for cf_add_libdir in $cf_cv_curses_dir/lib + do + if test $cf_add_libdir = /usr/lib ; then + : + elif test -d $cf_add_libdir + then + cf_have_libdir=no + if test -n "$LDFLAGS$LIBS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_libdir in $LDFLAGS $LIBS ; do + if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then + cf_have_libdir=yes; break + fi + done + fi + if test "$cf_have_libdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 + +echo "${as_me-configure}:10172: testing adding $cf_add_libdir to library-path ..." 1>&5 + + LDFLAGS="-L$cf_add_libdir $LDFLAGS" + fi + fi + done +fi + + LIBS="-l$cf_nculib_root $LIBS" +else + + eval 'cf_cv_have_lib_'$cf_nculib_root'=no' + cf_libdir="" + echo "$as_me:10185: checking for initscr" >&5 +echo $ECHO_N "checking for initscr... $ECHO_C" >&6 +if test "${ac_cv_func_initscr+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 10191 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char initscr (); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char initscr (); +char (*f) (); + +int +main () +{ +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_initscr) || defined (__stub___initscr) +choke me +#else +f = initscr; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:10222: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:10225: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:10228: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:10231: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_initscr=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_func_initscr=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:10241: result: $ac_cv_func_initscr" >&5 +echo "${ECHO_T}$ac_cv_func_initscr" >&6 +if test $ac_cv_func_initscr = yes; then + eval 'cf_cv_have_lib_'$cf_nculib_root'=yes' +else + + cf_save_LIBS="$LIBS" + echo "$as_me:10248: checking for initscr in -l$cf_nculib_root" >&5 +echo $ECHO_N "checking for initscr in -l$cf_nculib_root... $ECHO_C" >&6 + LIBS="-l$cf_nculib_root $LIBS" + cat >conftest.$ac_ext <<_ACEOF +#line 10252 "configure" +#include "confdefs.h" +#include <${cf_cv_ncurses_header-curses.h}> +int +main () +{ +initscr() + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:10264: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:10267: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:10270: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:10273: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + echo "$as_me:10275: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + eval 'cf_cv_have_lib_'$cf_nculib_root'=yes' + +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +echo "$as_me:10282: result: no" >&5 +echo "${ECHO_T}no" >&6 + +cf_search= +cf_library_path_list="" +if test -n "${LDFLAGS}${LIBS}" ; then + for cf_library_path in $LDFLAGS $LIBS + do + case $cf_library_path in #(vi + -L*) + cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` + +test "$cf_library_path" != "NONE" && \ +test -d "$cf_library_path" && \ + { + test -n "$verbose" && echo " ... testing for lib-directories under $cf_library_path" + test -d $cf_library_path/lib && cf_search="$cf_search $cf_library_path/lib" + test -d $cf_library_path/lib/$cf_nculib_root && cf_search="$cf_search $cf_library_path/lib/$cf_nculib_root" + test -d $cf_library_path/lib/$cf_nculib_root/lib && cf_search="$cf_search $cf_library_path/lib/$cf_nculib_root/lib" + test -d $cf_library_path/$cf_nculib_root/lib && cf_search="$cf_search $cf_library_path/$cf_nculib_root/lib" + test -d $cf_library_path/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search $cf_library_path/$cf_nculib_root/lib/$cf_nculib_root" +} + + cf_library_path_list="$cf_library_path_list $cf_search" + ;; + esac + done +fi + +cf_search= + +test "/usr" != "$prefix" && \ +test -d "/usr" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for lib-directories under /usr" + test -d /usr/lib && cf_search="$cf_search /usr/lib" + test -d /usr/lib/$cf_nculib_root && cf_search="$cf_search /usr/lib/$cf_nculib_root" + test -d /usr/lib/$cf_nculib_root/lib && cf_search="$cf_search /usr/lib/$cf_nculib_root/lib" + test -d /usr/$cf_nculib_root/lib && cf_search="$cf_search /usr/$cf_nculib_root/lib" + test -d /usr/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search /usr/$cf_nculib_root/lib/$cf_nculib_root" +} + +test "$prefix" != "NONE" && \ +test -d "$prefix" && \ + { + test -n "$verbose" && echo " ... testing for lib-directories under $prefix" + test -d $prefix/lib && cf_search="$cf_search $prefix/lib" + test -d $prefix/lib/$cf_nculib_root && cf_search="$cf_search $prefix/lib/$cf_nculib_root" + test -d $prefix/lib/$cf_nculib_root/lib && cf_search="$cf_search $prefix/lib/$cf_nculib_root/lib" + test -d $prefix/$cf_nculib_root/lib && cf_search="$cf_search $prefix/$cf_nculib_root/lib" + test -d $prefix/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search $prefix/$cf_nculib_root/lib/$cf_nculib_root" +} + +test "/usr/local" != "$prefix" && \ +test -d "/usr/local" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for lib-directories under /usr/local" + test -d /usr/local/lib && cf_search="$cf_search /usr/local/lib" + test -d /usr/local/lib/$cf_nculib_root && cf_search="$cf_search /usr/local/lib/$cf_nculib_root" + test -d /usr/local/lib/$cf_nculib_root/lib && cf_search="$cf_search /usr/local/lib/$cf_nculib_root/lib" + test -d /usr/local/$cf_nculib_root/lib && cf_search="$cf_search /usr/local/$cf_nculib_root/lib" + test -d /usr/local/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search /usr/local/$cf_nculib_root/lib/$cf_nculib_root" +} + +test "/opt" != "$prefix" && \ +test -d "/opt" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for lib-directories under /opt" + test -d /opt/lib && cf_search="$cf_search /opt/lib" + test -d /opt/lib/$cf_nculib_root && cf_search="$cf_search /opt/lib/$cf_nculib_root" + test -d /opt/lib/$cf_nculib_root/lib && cf_search="$cf_search /opt/lib/$cf_nculib_root/lib" + test -d /opt/$cf_nculib_root/lib && cf_search="$cf_search /opt/$cf_nculib_root/lib" + test -d /opt/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search /opt/$cf_nculib_root/lib/$cf_nculib_root" +} + +test "$HOME" != "$prefix" && \ +test -d "$HOME" && \ +(test $prefix = NONE || test -d $prefix) && { + test -n "$verbose" && echo " ... testing for lib-directories under $HOME" + test -d $HOME/lib && cf_search="$cf_search $HOME/lib" + test -d $HOME/lib/$cf_nculib_root && cf_search="$cf_search $HOME/lib/$cf_nculib_root" + test -d $HOME/lib/$cf_nculib_root/lib && cf_search="$cf_search $HOME/lib/$cf_nculib_root/lib" + test -d $HOME/$cf_nculib_root/lib && cf_search="$cf_search $HOME/$cf_nculib_root/lib" + test -d $HOME/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search $HOME/$cf_nculib_root/lib/$cf_nculib_root" +} + +cf_search="$cf_library_path_list $cf_search" + + for cf_libdir in $cf_search + do + echo "$as_me:10372: checking for -l$cf_nculib_root in $cf_libdir" >&5 +echo $ECHO_N "checking for -l$cf_nculib_root in $cf_libdir... $ECHO_C" >&6 + LIBS="-L$cf_libdir -l$cf_nculib_root $cf_save_LIBS" + cat >conftest.$ac_ext <<_ACEOF +#line 10376 "configure" +#include "confdefs.h" +#include <${cf_cv_ncurses_header-curses.h}> +int +main () +{ +initscr() + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:10388: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:10391: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:10394: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:10397: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + echo "$as_me:10399: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + eval 'cf_cv_have_lib_'$cf_nculib_root'=yes' + break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +echo "$as_me:10406: result: no" >&5 +echo "${ECHO_T}no" >&6 + LIBS="$cf_save_LIBS" +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + done + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + +fi + +eval 'cf_found_library=$cf_cv_have_lib_'$cf_nculib_root + +if test $cf_found_library = no ; then + { { echo "$as_me:10421: error: Cannot link $cf_nculib_root library" >&5 +echo "$as_me: error: Cannot link $cf_nculib_root library" >&2;} + { (exit 1); exit 1; }; } +fi + +fi + +if test -n "$cf_ncurses_LIBS" ; then + echo "$as_me:10429: checking if we can link $cf_nculib_root without $cf_ncurses_LIBS" >&5 +echo $ECHO_N "checking if we can link $cf_nculib_root without $cf_ncurses_LIBS... $ECHO_C" >&6 + cf_ncurses_SAVE="$LIBS" + for p in $cf_ncurses_LIBS ; do + q=`echo $LIBS | sed -e "s%$p %%" -e "s%$p$%%"` + if test "$q" != "$LIBS" ; then + LIBS="$q" + fi + done + cat >conftest.$ac_ext <<_ACEOF +#line 10439 "configure" +#include "confdefs.h" +#include <${cf_cv_ncurses_header-curses.h}> +int +main () +{ +initscr(); mousemask(0,0); tgoto((char *)0, 0, 0); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:10451: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:10454: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:10457: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:10460: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + echo "$as_me:10462: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +echo "$as_me:10467: result: no" >&5 +echo "${ECHO_T}no" >&6 + LIBS="$cf_ncurses_SAVE" +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + +cf_nculib_ROOT=`echo "HAVE_LIB$cf_nculib_root" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` + +cat >>confdefs.h <<EOF +#define $cf_nculib_ROOT 1 +EOF + +fi + +else + cf_wide_curses=no + +echo "$as_me:10485: checking for extra include directories" >&5 +echo $ECHO_N "checking for extra include directories... $ECHO_C" >&6 +if test "${cf_cv_curses_incdir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +cf_cv_curses_incdir=no +case $host_os in #(vi +hpux10.*) #(vi + test -d /usr/include/curses_colr && \ + cf_cv_curses_incdir="-I/usr/include/curses_colr" + ;; +sunos3*|sunos4*) + test -d /usr/5lib && \ + test -d /usr/5include && \ + cf_cv_curses_incdir="-I/usr/5include" + ;; +esac + +fi +echo "$as_me:10505: result: $cf_cv_curses_incdir" >&5 +echo "${ECHO_T}$cf_cv_curses_incdir" >&6 +test "$cf_cv_curses_incdir" != no && CPPFLAGS="$CPPFLAGS $cf_cv_curses_incdir" + +echo "$as_me:10509: checking if we have identified curses headers" >&5 +echo $ECHO_N "checking if we have identified curses headers... $ECHO_C" >&6 +if test "${cf_cv_ncurses_header+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +cf_cv_ncurses_header=none +for cf_header in \ + curses.h \ + ncurses.h ncurses/curses.h ncurses/ncurses.h +do +cat >conftest.$ac_ext <<_ACEOF +#line 10521 "configure" +#include "confdefs.h" +#include <${cf_header}> +int +main () +{ +initscr(); tgoto("?", 0,0) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:10533: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:10536: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:10539: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:10542: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_cv_ncurses_header=$cf_header; break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext conftest.$ac_ext +done + +fi +echo "$as_me:10553: result: $cf_cv_ncurses_header" >&5 +echo "${ECHO_T}$cf_cv_ncurses_header" >&6 + +if test "$cf_cv_ncurses_header" = none ; then + { { echo "$as_me:10557: error: No curses header-files found" >&5 +echo "$as_me: error: No curses header-files found" >&2;} + { (exit 1); exit 1; }; } +fi + +# cheat, to get the right #define's for HAVE_NCURSES_H, etc. + +for ac_header in $cf_cv_ncurses_header +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:10567: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 10573 "configure" +#include "confdefs.h" +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:10577: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:10583: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_ext +fi +echo "$as_me:10602: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<EOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +EOF + +fi +done + +echo "$as_me:10612: checking for terminfo header" >&5 +echo $ECHO_N "checking for terminfo header... $ECHO_C" >&6 +if test "${cf_cv_term_header+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +case ${cf_cv_ncurses_header} in #(vi +*/ncurses.h|*/ncursesw.h) #(vi + cf_term_header=`echo "$cf_cv_ncurses_header" | sed -e 's%ncurses[^.]*\.h$%term.h%'` + ;; +*) + cf_term_header=term.h + ;; +esac + +for cf_test in $cf_term_header "ncurses/term.h" "ncursesw/term.h" +do +cat >conftest.$ac_ext <<_ACEOF +#line 10630 "configure" +#include "confdefs.h" +#include <stdio.h> +#include <${cf_cv_ncurses_header-curses.h}> +#include <$cf_test> + +int +main () +{ +int x = auto_left_margin + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:10645: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:10648: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:10651: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:10654: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + + cf_cv_term_header="$cf_test" +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 + + cf_cv_term_header=unknown + +fi +rm -f conftest.$ac_objext conftest.$ac_ext + test "$cf_cv_term_header" != unknown && break +done + +fi +echo "$as_me:10670: result: $cf_cv_term_header" >&5 +echo "${ECHO_T}$cf_cv_term_header" >&6 + +# Set definitions to allow ifdef'ing to accommodate subdirectories + +case $cf_cv_term_header in # (vi +*term.h) + cat >>confdefs.h <<\EOF +#define HAVE_TERM_H 1 +EOF + + ;; +esac + +case $cf_cv_term_header in # (vi +ncurses/term.h) #(vi + cat >>confdefs.h <<\EOF +#define HAVE_NCURSES_TERM_H 1 +EOF + + ;; +ncursesw/term.h) + cat >>confdefs.h <<\EOF +#define HAVE_NCURSESW_TERM_H 1 +EOF + + ;; +esac + +echo "$as_me:10699: checking for ncurses version" >&5 +echo $ECHO_N "checking for ncurses version... $ECHO_C" >&6 +if test "${cf_cv_ncurses_version+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cf_cv_ncurses_version=no + cf_tempfile=out$$ + rm -f $cf_tempfile + if test "$cross_compiling" = yes; then + + # This will not work if the preprocessor splits the line after the + # Autoconf token. The 'unproto' program does that. + cat > conftest.$ac_ext <<EOF +#include <${cf_cv_ncurses_header-curses.h}> +#undef Autoconf +#ifdef NCURSES_VERSION +Autoconf NCURSES_VERSION +#else +#ifdef __NCURSES_H +Autoconf "old" +#endif +; +#endif +EOF + cf_try="$ac_cpp conftest.$ac_ext 2>&5 | grep '^Autoconf ' >conftest.out" + { (eval echo "$as_me:10725: \"$cf_try\"") >&5 + (eval $cf_try) 2>&5 + ac_status=$? + echo "$as_me:10728: \$? = $ac_status" >&5 + (exit $ac_status); } + if test -f conftest.out ; then + cf_out=`cat conftest.out | sed -e 's%^Autoconf %%' -e 's%^[^"]*"%%' -e 's%".*%%'` + test -n "$cf_out" && cf_cv_ncurses_version="$cf_out" + rm -f conftest.out + fi + +else + cat >conftest.$ac_ext <<_ACEOF +#line 10738 "configure" +#include "confdefs.h" + +#include <${cf_cv_ncurses_header-curses.h}> +#include <stdio.h> +int main() +{ + FILE *fp = fopen("$cf_tempfile", "w"); +#ifdef NCURSES_VERSION +# ifdef NCURSES_VERSION_PATCH + fprintf(fp, "%s.%d\n", NCURSES_VERSION, NCURSES_VERSION_PATCH); +# else + fprintf(fp, "%s\n", NCURSES_VERSION); +# endif +#else +# ifdef __NCURSES_H + fprintf(fp, "old\n"); +# else + make an error +# endif +#endif + ${cf_cv_main_return-return}(0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:10763: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:10766: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:10768: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:10771: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + + cf_cv_ncurses_version=`cat $cf_tempfile` +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + rm -f $cf_tempfile + +fi +echo "$as_me:10785: result: $cf_cv_ncurses_version" >&5 +echo "${ECHO_T}$cf_cv_ncurses_version" >&6 +test "$cf_cv_ncurses_version" = no || cat >>confdefs.h <<\EOF +#define NCURSES 1 +EOF + +echo "$as_me:10791: checking if we have identified curses libraries" >&5 +echo $ECHO_N "checking if we have identified curses libraries... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line 10794 "configure" +#include "confdefs.h" +#include <${cf_cv_ncurses_header-curses.h}> +int +main () +{ +initscr(); tgoto("?", 0,0) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:10806: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:10809: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:10812: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:10815: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_result=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_result=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +echo "$as_me:10824: result: $cf_result" >&5 +echo "${ECHO_T}$cf_result" >&6 + +if test "$cf_result" = no ; then +case $host_os in #(vi +freebsd*) #(vi + echo "$as_me:10830: checking for tgoto in -lmytinfo" >&5 +echo $ECHO_N "checking for tgoto in -lmytinfo... $ECHO_C" >&6 +if test "${ac_cv_lib_mytinfo_tgoto+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lmytinfo $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line 10838 "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char tgoto (); +int +main () +{ +tgoto (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:10857: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:10860: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:10863: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:10866: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_mytinfo_tgoto=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_mytinfo_tgoto=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:10877: result: $ac_cv_lib_mytinfo_tgoto" >&5 +echo "${ECHO_T}$ac_cv_lib_mytinfo_tgoto" >&6 +if test $ac_cv_lib_mytinfo_tgoto = yes; then + LIBS="-lmytinfo $LIBS" +fi + + ;; +hpux10.*) #(vi + echo "$as_me:10885: checking for initscr in -lcur_colr" >&5 +echo $ECHO_N "checking for initscr in -lcur_colr... $ECHO_C" >&6 +if test "${ac_cv_lib_cur_colr_initscr+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcur_colr $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line 10893 "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char initscr (); +int +main () +{ +initscr (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:10912: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:10915: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:10918: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:10921: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_cur_colr_initscr=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_cur_colr_initscr=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:10932: result: $ac_cv_lib_cur_colr_initscr" >&5 +echo "${ECHO_T}$ac_cv_lib_cur_colr_initscr" >&6 +if test $ac_cv_lib_cur_colr_initscr = yes; then + + LIBS="-lcur_colr $LIBS" + ac_cv_func_initscr=yes + +else + + echo "$as_me:10941: checking for initscr in -lHcurses" >&5 +echo $ECHO_N "checking for initscr in -lHcurses... $ECHO_C" >&6 +if test "${ac_cv_lib_Hcurses_initscr+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lHcurses $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line 10949 "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char initscr (); +int +main () +{ +initscr (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:10968: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:10971: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:10974: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:10977: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_Hcurses_initscr=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_Hcurses_initscr=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:10988: result: $ac_cv_lib_Hcurses_initscr" >&5 +echo "${ECHO_T}$ac_cv_lib_Hcurses_initscr" >&6 +if test $ac_cv_lib_Hcurses_initscr = yes; then + + # HP's header uses __HP_CURSES, but user claims _HP_CURSES. + LIBS="-lHcurses $LIBS" + CPPFLAGS="$CPPFLAGS -D__HP_CURSES -D_HP_CURSES" + ac_cv_func_initscr=yes + +fi + +fi + + ;; +linux*) # Suse Linux does not follow /usr/lib convention + +if test -n "/lib" ; then + for cf_add_libdir in /lib + do + if test $cf_add_libdir = /usr/lib ; then + : + elif test -d $cf_add_libdir + then + cf_have_libdir=no + if test -n "$LDFLAGS$LIBS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_libdir in $LDFLAGS $LIBS ; do + if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then + cf_have_libdir=yes; break + fi + done + fi + if test "$cf_have_libdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 + +echo "${as_me-configure}:11023: testing adding $cf_add_libdir to library-path ..." 1>&5 + + LDFLAGS="-L$cf_add_libdir $LDFLAGS" + fi + fi + done +fi + + ;; +sunos3*|sunos4*) + if test -d /usr/5lib ; then + +if test -n "/usr/5lib" ; then + for cf_add_libdir in /usr/5lib + do + if test $cf_add_libdir = /usr/lib ; then + : + elif test -d $cf_add_libdir + then + cf_have_libdir=no + if test -n "$LDFLAGS$LIBS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_libdir in $LDFLAGS $LIBS ; do + if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then + cf_have_libdir=yes; break + fi + done + fi + if test "$cf_have_libdir" = no ; then + test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 + +echo "${as_me-configure}:11054: testing adding $cf_add_libdir to library-path ..." 1>&5 + + LDFLAGS="-L$cf_add_libdir $LDFLAGS" + fi + fi + done +fi + + LIBS="$LIBS -lcurses -ltermcap" + fi + ac_cv_func_initscr=yes + ;; +esac + +if test ".$ac_cv_func_initscr" != .yes ; then + cf_save_LIBS="$LIBS" + cf_term_lib="" + cf_curs_lib="" + + if test ".${cf_cv_ncurses_version-no}" != .no + then + cf_check_list="ncurses curses cursesX" + else + cf_check_list="cursesX curses ncurses" + fi + + # Check for library containing tgoto. Do this before curses library + # because it may be needed to link the test-case for initscr. + echo "$as_me:11082: checking for tgoto" >&5 +echo $ECHO_N "checking for tgoto... $ECHO_C" >&6 +if test "${ac_cv_func_tgoto+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 11088 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char tgoto (); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char tgoto (); +char (*f) (); + +int +main () +{ +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_tgoto) || defined (__stub___tgoto) +choke me +#else +f = tgoto; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:11119: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:11122: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:11125: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:11128: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_tgoto=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_func_tgoto=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:11138: result: $ac_cv_func_tgoto" >&5 +echo "${ECHO_T}$ac_cv_func_tgoto" >&6 +if test $ac_cv_func_tgoto = yes; then + cf_term_lib=predefined +else + + for cf_term_lib in $cf_check_list termcap termlib unknown + do + as_ac_Lib=`echo "ac_cv_lib_$cf_term_lib''_tgoto" | $as_tr_sh` +echo "$as_me:11147: checking for tgoto in -l$cf_term_lib" >&5 +echo $ECHO_N "checking for tgoto in -l$cf_term_lib... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Lib+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$cf_term_lib $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line 11155 "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char tgoto (); +int +main () +{ +tgoto (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:11174: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:11177: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:11180: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:11183: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_Lib=yes" +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +eval "$as_ac_Lib=no" +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:11194: result: `eval echo '${'$as_ac_Lib'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Lib'}'`" >&6 +if test `eval echo '${'$as_ac_Lib'}'` = yes; then + break +fi + + done + +fi + + # Check for library containing initscr + test "$cf_term_lib" != predefined && test "$cf_term_lib" != unknown && LIBS="-l$cf_term_lib $cf_save_LIBS" + for cf_curs_lib in $cf_check_list xcurses jcurses pdcurses unknown + do + as_ac_Lib=`echo "ac_cv_lib_$cf_curs_lib''_initscr" | $as_tr_sh` +echo "$as_me:11209: checking for initscr in -l$cf_curs_lib" >&5 +echo $ECHO_N "checking for initscr in -l$cf_curs_lib... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Lib+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$cf_curs_lib $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line 11217 "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char initscr (); +int +main () +{ +initscr (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:11236: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:11239: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:11242: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:11245: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_Lib=yes" +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +eval "$as_ac_Lib=no" +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:11256: result: `eval echo '${'$as_ac_Lib'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Lib'}'`" >&6 +if test `eval echo '${'$as_ac_Lib'}'` = yes; then + break +fi + + done + test $cf_curs_lib = unknown && { { echo "$as_me:11263: error: no curses library found" >&5 +echo "$as_me: error: no curses library found" >&2;} + { (exit 1); exit 1; }; } + + LIBS="-l$cf_curs_lib $cf_save_LIBS" + if test "$cf_term_lib" = unknown ; then + echo "$as_me:11269: checking if we can link with $cf_curs_lib library" >&5 +echo $ECHO_N "checking if we can link with $cf_curs_lib library... $ECHO_C" >&6 + cat >conftest.$ac_ext <<_ACEOF +#line 11272 "configure" +#include "confdefs.h" +#include <${cf_cv_ncurses_header-curses.h}> +int +main () +{ +initscr() + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:11284: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:11287: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:11290: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:11293: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_result=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_result=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + echo "$as_me:11302: result: $cf_result" >&5 +echo "${ECHO_T}$cf_result" >&6 + test $cf_result = no && { { echo "$as_me:11304: error: Cannot link curses library" >&5 +echo "$as_me: error: Cannot link curses library" >&2;} + { (exit 1); exit 1; }; } + elif test "$cf_curs_lib" = "$cf_term_lib" ; then + : + elif test "$cf_term_lib" != predefined ; then + echo "$as_me:11310: checking if we need both $cf_curs_lib and $cf_term_lib libraries" >&5 +echo $ECHO_N "checking if we need both $cf_curs_lib and $cf_term_lib libraries... $ECHO_C" >&6 + cat >conftest.$ac_ext <<_ACEOF +#line 11313 "configure" +#include "confdefs.h" +#include <${cf_cv_ncurses_header-curses.h}> +int +main () +{ +initscr(); tgoto((char *)0, 0, 0); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:11325: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:11328: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:11331: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:11334: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_result=no +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 + + LIBS="-l$cf_curs_lib -l$cf_term_lib $cf_save_LIBS" + cat >conftest.$ac_ext <<_ACEOF +#line 11343 "configure" +#include "confdefs.h" +#include <${cf_cv_ncurses_header-curses.h}> +int +main () +{ +initscr() + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:11355: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:11358: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:11361: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:11364: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_result=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_result=error +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + echo "$as_me:11376: result: $cf_result" >&5 +echo "${ECHO_T}$cf_result" >&6 + fi +fi +fi + +fi + +cf_all_widgets=yes + +echo "$as_me:11386: checking if you want extra dialogs" >&5 +echo $ECHO_N "checking if you want extra dialogs... $ECHO_C" >&6 + +# Check whether --enable-extras or --disable-extras was given. +if test "${enable_extras+set}" = set; then + enableval="$enable_extras" + +else + enableval=yes +fi; +echo "$as_me:11396: result: $enableval" >&5 +echo "${ECHO_T}$enableval" >&6 +if test "$enableval" != no ; then +cf_all_widgets=yes +else +cf_all_widgets=no +fi + +echo "$as_me:11404: checking if you want config-file support" >&5 +echo $ECHO_N "checking if you want config-file support... $ECHO_C" >&6 + +# Check whether --enable-rc-file or --disable-rc-file was given. +if test "${enable_rc_file+set}" = set; then + enableval="$enable_rc_file" + +else + enableval=$cf_all_widgets +fi; +echo "$as_me:11414: result: $enableval" >&5 +echo "${ECHO_T}$enableval" >&6 +if test "$enableval" != no ; then +EXTRAOBJS="$EXTRAOBJS rc\$o" + cat >>confdefs.h <<\EOF +#define HAVE_RC_FILE 1 +EOF + +else + : +fi + +echo "$as_me:11426: checking if you want Xdialog-style dialogs" >&5 +echo $ECHO_N "checking if you want Xdialog-style dialogs... $ECHO_C" >&6 + +# Check whether --enable-Xdialog or --disable-Xdialog was given. +if test "${enable_Xdialog+set}" = set; then + enableval="$enable_Xdialog" + +else + enableval=$cf_all_widgets +fi; +echo "$as_me:11436: result: $enableval" >&5 +echo "${ECHO_T}$enableval" >&6 +if test "$enableval" != no ; then +EXTRAOBJS="$EXTRAOBJS calendar\$o fselect\$o timebox\$o" + cat >>confdefs.h <<\EOF +#define HAVE_XDIALOG 1 +EOF + +else + : +fi + +echo "$as_me:11448: checking if you want the form dialog" >&5 +echo $ECHO_N "checking if you want the form dialog... $ECHO_C" >&6 + +# Check whether --enable-form or --disable-form was given. +if test "${enable_form+set}" = set; then + enableval="$enable_form" + +else + enableval=$cf_all_widgets +fi; +echo "$as_me:11458: result: $enableval" >&5 +echo "${ECHO_T}$enableval" >&6 +if test "$enableval" != no ; then +EXTRAOBJS="$EXTRAOBJS formbox\$o" + cat >>confdefs.h <<\EOF +#define HAVE_DLG_FORMBOX 1 +EOF + +else + : +fi + +echo "$as_me:11470: checking if you want the gauge dialog" >&5 +echo $ECHO_N "checking if you want the gauge dialog... $ECHO_C" >&6 + +# Check whether --enable-gauge or --disable-gauge was given. +if test "${enable_gauge+set}" = set; then + enableval="$enable_gauge" + +else + enableval=$cf_all_widgets +fi; +echo "$as_me:11480: result: $enableval" >&5 +echo "${ECHO_T}$enableval" >&6 +if test "$enableval" != no ; then +EXTRAOBJS="$EXTRAOBJS guage\$o pause\$o progressbox\$o" + cat >>confdefs.h <<\EOF +#define HAVE_DLG_GAUGE 1 +EOF + +else + : +fi + +echo "$as_me:11492: checking if you want the tailbox dialog" >&5 +echo $ECHO_N "checking if you want the tailbox dialog... $ECHO_C" >&6 + +# Check whether --enable-tailbox or --disable-tailbox was given. +if test "${enable_tailbox+set}" = set; then + enableval="$enable_tailbox" + +else + enableval=$cf_all_widgets +fi; +echo "$as_me:11502: result: $enableval" >&5 +echo "${ECHO_T}$enableval" >&6 +if test "$enableval" != no ; then +EXTRAOBJS="$EXTRAOBJS tailbox\$o" + cat >>confdefs.h <<\EOF +#define HAVE_DLG_TAILBOX 1 +EOF + +else + : +fi + +echo "$as_me:11514: checking if you want the mixedform dialog" >&5 +echo $ECHO_N "checking if you want the mixedform dialog... $ECHO_C" >&6 + +# Check whether --enable-mixedform or --disable-mixedform was given. +if test "${enable_mixedform+set}" = set; then + enableval="$enable_mixedform" + +else + enableval=$cf_all_widgets +fi; +echo "$as_me:11524: result: $enableval" >&5 +echo "${ECHO_T}$enableval" >&6 +if test "$enableval" != no ; then +EXTRAOBJS="$EXTRAOBJS mixedform\$o" + cat >>confdefs.h <<\EOF +#define HAVE_DLG_MIXEDFORM 1 +EOF + +else + : +fi + +echo "$as_me:11536: checking if you want the mixedgauge dialog" >&5 +echo $ECHO_N "checking if you want the mixedgauge dialog... $ECHO_C" >&6 + +# Check whether --enable-mixedgauge or --disable-mixedgauge was given. +if test "${enable_mixedgauge+set}" = set; then + enableval="$enable_mixedgauge" + +else + enableval=$cf_all_widgets +fi; +echo "$as_me:11546: result: $enableval" >&5 +echo "${ECHO_T}$enableval" >&6 +if test "$enableval" != no ; then +EXTRAOBJS="$EXTRAOBJS mixedgauge\$o" + cat >>confdefs.h <<\EOF +#define HAVE_MIXEDGAUGE 1 +EOF + +else + : +fi + +echo "$as_me:11558: checking if you want the wide-curses features" >&5 +echo $ECHO_N "checking if you want the wide-curses features... $ECHO_C" >&6 + +# Check whether --enable-widec or --disable-widec was given. +if test "${enable_widec+set}" = set; then + enableval="$enable_widec" + +else + enableval=$cf_wide_curses +fi; +echo "$as_me:11568: result: $enableval" >&5 +echo "${ECHO_T}$enableval" >&6 +if test "$enableval" != no ; then +cat >>confdefs.h <<\EOF +#define USE_WIDE_CURSES 1 +EOF + +else + : +fi + +echo "$as_me:11579: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 11585 "configure" +#include "confdefs.h" +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <float.h> + +_ACEOF +if { (eval echo "$as_me:11593: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:11599: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_header_stdc=no +fi +rm -f conftest.err conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +#line 11621 "configure" +#include "confdefs.h" +#include <string.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +#line 11639 "configure" +#include "confdefs.h" +#include <stdlib.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +#line 11660 "configure" +#include "confdefs.h" +#include <ctype.h> +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + $ac_main_return(2); + $ac_main_return (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:11686: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:11689: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:11691: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:11694: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_header_stdc=no +fi +rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +fi +echo "$as_me:11707: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6 +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\EOF +#define STDC_HEADERS 1 +EOF + +fi + +echo "$as_me:11717: checking whether time.h and sys/time.h may both be included" >&5 +echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6 +if test "${ac_cv_header_time+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 11723 "configure" +#include "confdefs.h" +#include <sys/types.h> +#include <sys/time.h> +#include <time.h> + +int +main () +{ +if ((struct tm *) 0) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:11739: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:11742: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:11745: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:11748: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_time=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_header_time=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:11758: result: $ac_cv_header_time" >&5 +echo "${ECHO_T}$ac_cv_header_time" >&6 +if test $ac_cv_header_time = yes; then + +cat >>confdefs.h <<\EOF +#define TIME_WITH_SYS_TIME 1 +EOF + +fi + +ac_header_dirent=no +for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do + as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` +echo "$as_me:11771: checking for $ac_hdr that defines DIR" >&5 +echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 11777 "configure" +#include "confdefs.h" +#include <sys/types.h> +#include <$ac_hdr> + +int +main () +{ +if ((DIR *) 0) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:11792: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:11795: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:11798: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:11801: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +eval "$as_ac_Header=no" +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:11811: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<EOF +#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 +EOF + +ac_header_dirent=$ac_hdr; break +fi + +done +# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. +if test $ac_header_dirent = dirent.h; then + echo "$as_me:11824: checking for opendir in -ldir" >&5 +echo $ECHO_N "checking for opendir in -ldir... $ECHO_C" >&6 +if test "${ac_cv_lib_dir_opendir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldir $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line 11832 "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char opendir (); +int +main () +{ +opendir (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:11851: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:11854: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:11857: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:11860: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dir_opendir=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_dir_opendir=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:11871: result: $ac_cv_lib_dir_opendir" >&5 +echo "${ECHO_T}$ac_cv_lib_dir_opendir" >&6 +if test $ac_cv_lib_dir_opendir = yes; then + LIBS="$LIBS -ldir" +fi + +else + echo "$as_me:11878: checking for opendir in -lx" >&5 +echo $ECHO_N "checking for opendir in -lx... $ECHO_C" >&6 +if test "${ac_cv_lib_x_opendir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lx $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line 11886 "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char opendir (); +int +main () +{ +opendir (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:11905: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:11908: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:11911: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:11914: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_x_opendir=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_x_opendir=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:11925: result: $ac_cv_lib_x_opendir" >&5 +echo "${ECHO_T}$ac_cv_lib_x_opendir" >&6 +if test $ac_cv_lib_x_opendir = yes; then + LIBS="$LIBS -lx" +fi + +fi + +for ac_header in search.h unctrl.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:11936: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 11942 "configure" +#include "confdefs.h" +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:11946: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:11952: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_ext +fi +echo "$as_me:11971: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<EOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +EOF + +fi +done + +echo "$as_me:11981: checking for term.h" >&5 +echo $ECHO_N "checking for term.h... $ECHO_C" >&6 +if test "${cf_cv_term_header+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +# If we found <ncurses/curses.h>, look for <ncurses/term.h>, but always look +# for <term.h> if we do not find the variant. +for cf_header in \ + `echo ${cf_cv_ncurses_header-curses.h} | sed -e 's%/.*%/%'`term.h \ + term.h +do + cat >conftest.$ac_ext <<_ACEOF +#line 11994 "configure" +#include "confdefs.h" + +#include <${cf_cv_ncurses_header-curses.h}> +#include <${cf_header}> +int +main () +{ +WINDOW *x + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:12008: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:12011: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:12014: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:12017: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_cv_term_header=$cf_header + break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_cv_term_header=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +done + +case $cf_cv_term_header in #(vi +no) + # If curses is ncurses, some packagers still mess it up by trying to make + # us use GNU termcap. This handles the most common case. + for cf_header in ncurses/term.h ncursesw/term.h + do + cat >conftest.$ac_ext <<_ACEOF +#line 12036 "configure" +#include "confdefs.h" + +#include <${cf_cv_ncurses_header-curses.h}> +#ifdef NCURSES_VERSION +#include <${cf_header}> +#else +make an error +#endif +int +main () +{ +WINDOW *x + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:12054: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:12057: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:12060: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:12063: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_cv_term_header=$cf_header + break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_cv_term_header=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext + done + ;; +esac + +fi +echo "$as_me:12078: result: $cf_cv_term_header" >&5 +echo "${ECHO_T}$cf_cv_term_header" >&6 + +case $cf_cv_term_header in #(vi +term.h) #(vi + cat >>confdefs.h <<\EOF +#define HAVE_TERM_H 1 +EOF + + ;; +ncurses/term.h) #(vi + cat >>confdefs.h <<\EOF +#define HAVE_NCURSES_TERM_H 1 +EOF + + ;; +ncursesw/term.h) + cat >>confdefs.h <<\EOF +#define HAVE_NCURSESW_TERM_H 1 +EOF + + ;; +esac + +echo "$as_me:12102: checking return type of signal handlers" >&5 +echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6 +if test "${ac_cv_type_signal+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 12108 "configure" +#include "confdefs.h" +#include <sys/types.h> +#include <signal.h> +#ifdef signal +# undef signal +#endif +#ifdef __cplusplus +extern "C" void (*signal (int, void (*)(int)))(int); +#else +void (*signal ()) (); +#endif + +int +main () +{ +int i; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:12130: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:12133: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:12136: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:12139: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_signal=void +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_type_signal=int +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:12149: result: $ac_cv_type_signal" >&5 +echo "${ECHO_T}$ac_cv_type_signal" >&6 + +cat >>confdefs.h <<EOF +#define RETSIGTYPE $ac_cv_type_signal +EOF + +for ac_func in \ +_nc_free_and_exit \ +strcasecmp \ +strftime \ +tsearch \ +waitpid \ + +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:12165: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 12171 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +char (*f) (); + +int +main () +{ +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +f = $ac_func; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:12202: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:12205: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:12208: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:12211: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +eval "$as_ac_var=no" +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:12221: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<EOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +EOF + +fi +done + +echo "$as_me:12231: checking if we must define _XOPEN_SOURCE_EXTENDED" >&5 +echo $ECHO_N "checking if we must define _XOPEN_SOURCE_EXTENDED... $ECHO_C" >&6 +if test "${cf_cv_need_xopen_extension+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +cat >conftest.$ac_ext <<_ACEOF +#line 12238 "configure" +#include "confdefs.h" + +#include <stdlib.h> +#include <${cf_cv_ncurses_header-curses.h}> +int +main () +{ + +#if defined(NCURSES_VERSION_PATCH) +if (NCURSES_VERSION_PATCH < 20100501) && (NCURSES_VERSION_PATCH >= 20100403) + make an error +#endif +#endif + long x = winnstr(stdscr, "", 0); + int x1, y1; + getbegyx(stdscr, y1, x1) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:12260: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:12263: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:12266: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:12269: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_cv_need_xopen_extension=no +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cat >conftest.$ac_ext <<_ACEOF +#line 12276 "configure" +#include "confdefs.h" + +#define _XOPEN_SOURCE_EXTENDED +#include <stdlib.h> +#include <${cf_cv_ncurses_header-curses.h}> +int +main () +{ + +#ifdef NCURSES_VERSION + cchar_t check; + int check2 = curs_set((int)sizeof(check)); +#endif + long x = winnstr(stdscr, "", 0); + int x1, y1; + getbegyx(stdscr, y1, x1) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:12298: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:12301: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:12304: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:12307: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_cv_need_xopen_extension=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_cv_need_xopen_extension=unknown +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:12319: result: $cf_cv_need_xopen_extension" >&5 +echo "${ECHO_T}$cf_cv_need_xopen_extension" >&6 +test $cf_cv_need_xopen_extension = yes && CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED" + +for cf_func in \ +flushinp \ +getbegx \ +getbegy \ +getbegyx \ +getcurx \ +getcury \ +getmaxx \ +getmaxy \ +getmaxyx \ +getparx \ +getpary \ +getparyx \ +use_default_colors \ +wget_wch \ + +do + +cf_tr_func=`echo "$cf_func" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` + + echo "$as_me:12343: checking for ${cf_func}" >&5 +echo $ECHO_N "checking for ${cf_func}... $ECHO_C" >&6 + +echo "${as_me-configure}:12346: testing ${cf_func} ..." 1>&5 + + if eval "test \"\${cf_cv_func_$cf_func+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + eval cf_result='$ac_cv_func_'$cf_func + if test ".$cf_result" != ".no"; then + cat >conftest.$ac_ext <<_ACEOF +#line 12355 "configure" +#include "confdefs.h" + +#ifdef HAVE_XCURSES +#include <xcurses.h> +char * XCursesProgramName = "test"; +#else +#include <${cf_cv_ncurses_header-curses.h}> +#if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H) +#include <ncursesw/term.h> +#elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H) +#include <ncurses/term.h> +#elif defined(HAVE_TERM_H) +#include <term.h> +#endif +#endif + +int +main () +{ + +#ifndef ${cf_func} +long foo = (long)(&${cf_func}); +${cf_cv_main_return-return}(foo == 0); +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:12386: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:12389: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:12392: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:12395: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_result=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_result=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + fi + eval 'cf_cv_func_'$cf_func'=$cf_result' + +fi + + # use the computed/retrieved cache-value: + eval 'cf_result=$cf_cv_func_'$cf_func + echo "$as_me:12411: result: $cf_result" >&5 +echo "${ECHO_T}$cf_result" >&6 + if test $cf_result != no; then + cat >>confdefs.h <<EOF +#define HAVE_${cf_tr_func} 1 +EOF + + fi +done + +echo "$as_me:12421: checking for start_color" >&5 +echo $ECHO_N "checking for start_color... $ECHO_C" >&6 +if test "${ac_cv_func_start_color+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 12427 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char start_color (); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char start_color (); +char (*f) (); + +int +main () +{ +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_start_color) || defined (__stub___start_color) +choke me +#else +f = start_color; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:12458: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:12461: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:12464: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:12467: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_start_color=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_func_start_color=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:12477: result: $ac_cv_func_start_color" >&5 +echo "${ECHO_T}$ac_cv_func_start_color" >&6 +if test $ac_cv_func_start_color = yes; then + cat >>confdefs.h <<\EOF +#define HAVE_COLOR 1 +EOF + +fi + +echo "$as_me:12486: checking for chtype typedef" >&5 +echo $ECHO_N "checking for chtype typedef... $ECHO_C" >&6 +if test "${cf_cv_chtype_decl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +#line 12493 "configure" +#include "confdefs.h" +#include <${cf_cv_ncurses_header-curses.h}> +int +main () +{ +chtype foo + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:12505: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:12508: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:12511: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:12514: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_cv_chtype_decl=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_cv_chtype_decl=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:12524: result: $cf_cv_chtype_decl" >&5 +echo "${ECHO_T}$cf_cv_chtype_decl" >&6 +if test $cf_cv_chtype_decl = yes ; then + cat >>confdefs.h <<\EOF +#define HAVE_TYPE_CHTYPE 1 +EOF + + echo "$as_me:12531: checking if chtype is scalar or struct" >&5 +echo $ECHO_N "checking if chtype is scalar or struct... $ECHO_C" >&6 +if test "${cf_cv_chtype_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +#line 12538 "configure" +#include "confdefs.h" +#include <${cf_cv_ncurses_header-curses.h}> +int +main () +{ +chtype foo; long x = foo + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:12550: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:12553: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:12556: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:12559: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_cv_chtype_type=scalar +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_cv_chtype_type=struct +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:12569: result: $cf_cv_chtype_type" >&5 +echo "${ECHO_T}$cf_cv_chtype_type" >&6 + if test $cf_cv_chtype_type = scalar ; then + cat >>confdefs.h <<\EOF +#define TYPE_CHTYPE_IS_SCALAR 1 +EOF + + fi +fi + +for ac_header in sys/wait.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:12582: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 12588 "configure" +#include "confdefs.h" +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:12592: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:12598: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_ext +fi +echo "$as_me:12617: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<EOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +EOF + +fi +done + +cf_wait_headers="#include <sys/types.h> +" +if test $ac_cv_header_sys_wait_h = yes; then +cf_wait_headers="$cf_wait_headers +#include <sys/wait.h> +" +else + +for ac_header in wait.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:12638: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 12644 "configure" +#include "confdefs.h" +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:12648: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:12654: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_ext +fi +echo "$as_me:12673: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<EOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +EOF + +fi +done + +for ac_header in waitstatus.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:12686: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 12692 "configure" +#include "confdefs.h" +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:12696: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:12702: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_ext +fi +echo "$as_me:12721: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<EOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +EOF + +fi +done + +if test $ac_cv_header_wait_h = yes; then +cf_wait_headers="$cf_wait_headers +#include <wait.h> +" +fi +if test $ac_cv_header_waitstatus_h = yes; then +cf_wait_headers="$cf_wait_headers +#include <waitstatus.h> +" +fi +fi + +echo "$as_me:12743: checking for union wait" >&5 +echo $ECHO_N "checking for union wait... $ECHO_C" >&6 +if test "${cf_cv_type_unionwait+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +#line 12750 "configure" +#include "confdefs.h" +$cf_wait_headers +int +main () +{ +int x; + int y = WEXITSTATUS(x); + int z = WTERMSIG(x); + wait(&x); + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:12766: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:12769: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:12772: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:12775: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_cv_type_unionwait=no + echo compiles ok w/o union wait 1>&5 + +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF +#line 12785 "configure" +#include "confdefs.h" +$cf_wait_headers +int +main () +{ +union wait x; +#ifdef WEXITSTATUS + int y = WEXITSTATUS(x); +#endif +#ifdef WTERMSIG + int z = WTERMSIG(x); +#endif + wait(&x); + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:12805: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:12808: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:12811: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:12814: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_cv_type_unionwait=yes + echo compiles ok with union wait and possibly macros too 1>&5 + +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_cv_type_unionwait=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + +echo "$as_me:12829: result: $cf_cv_type_unionwait" >&5 +echo "${ECHO_T}$cf_cv_type_unionwait" >&6 +test $cf_cv_type_unionwait = yes && cat >>confdefs.h <<\EOF +#define HAVE_TYPE_UNIONWAIT 1 +EOF + +if test $cf_cv_type_unionwait = yes; then + + echo "$as_me:12837: checking if union wait can be used as wait-arg" >&5 +echo $ECHO_N "checking if union wait can be used as wait-arg... $ECHO_C" >&6 + if test "${cf_cv_arg_union_wait+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +#line 12844 "configure" +#include "confdefs.h" +$cf_wait_headers +int +main () +{ +union wait x; wait(&x) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:12856: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:12859: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:12862: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:12865: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_cv_arg_union_wait=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_cv_arg_union_wait=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext + +fi + + echo "$as_me:12877: result: $cf_cv_arg_union_wait" >&5 +echo "${ECHO_T}$cf_cv_arg_union_wait" >&6 + test $cf_cv_arg_union_wait = yes && cat >>confdefs.h <<\EOF +#define WAIT_USES_UNION 1 +EOF + + echo "$as_me:12883: checking if union wait can be used as waitpid-arg" >&5 +echo $ECHO_N "checking if union wait can be used as waitpid-arg... $ECHO_C" >&6 + if test "${cf_cv_arg_union_waitpid+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +#line 12890 "configure" +#include "confdefs.h" +$cf_wait_headers +int +main () +{ +union wait x; waitpid(0, &x, 0) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:12902: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:12905: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:12908: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:12911: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_cv_arg_union_waitpid=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_cv_arg_union_waitpid=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext + +fi + + echo "$as_me:12923: result: $cf_cv_arg_union_waitpid" >&5 +echo "${ECHO_T}$cf_cv_arg_union_waitpid" >&6 + test $cf_cv_arg_union_waitpid = yes && cat >>confdefs.h <<\EOF +#define WAITPID_USES_UNION 1 +EOF + +fi + +echo "$as_me:12931: checking if we must include wchar.h to declare mbstate_t" >&5 +echo $ECHO_N "checking if we must include wchar.h to declare mbstate_t... $ECHO_C" >&6 +if test "${cf_cv_mbstate_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +cat >conftest.$ac_ext <<_ACEOF +#line 12938 "configure" +#include "confdefs.h" + +#include <stdlib.h> +#include <stdio.h> +#ifdef HAVE_LIBUTF8_H +#include <libutf8.h> +#endif +int +main () +{ +mbstate_t state + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:12955: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:12958: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:12961: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:12964: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_cv_mbstate_t=no +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cat >conftest.$ac_ext <<_ACEOF +#line 12971 "configure" +#include "confdefs.h" + +#include <stdlib.h> +#include <stdio.h> +#include <wchar.h> +#ifdef HAVE_LIBUTF8_H +#include <libutf8.h> +#endif +int +main () +{ +mbstate_t value + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:12989: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:12992: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:12995: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:12998: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_cv_mbstate_t=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_cv_mbstate_t=unknown +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:13010: result: $cf_cv_mbstate_t" >&5 +echo "${ECHO_T}$cf_cv_mbstate_t" >&6 + +if test "$cf_cv_mbstate_t" = yes ; then + cat >>confdefs.h <<\EOF +#define NEED_WCHAR_H 1 +EOF + +fi + +if test "$cf_cv_mbstate_t" != unknown ; then + cat >>confdefs.h <<\EOF +#define HAVE_MBSTATE_T 1 +EOF + +fi + +PACKAGE_PREFIX=DLG +PACKAGE_CONFIG=dlg_config.h + +EXTRA_OUTPUT="$EXTRA_OUTPUT headers-sh:$srcdir/headers-sh.in" + +cat >conftest.$ac_ext <<_ACEOF +#line 13033 "configure" +#include "confdefs.h" +#include <locale.h> +int +main () +{ +setlocale(LC_ALL, "") + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:13045: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:13048: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:13051: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:13054: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cat >>confdefs.h <<\EOF +#define HAVE_SETLOCALE 1 +EOF + +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + +LD_RPATH_OPT= +echo "$as_me:13067: checking for an rpath option" >&5 +echo $ECHO_N "checking for an rpath option... $ECHO_C" >&6 +case $cf_cv_system_name in #(vi +irix*) #(vi + if test "$GCC" = yes; then + LD_RPATH_OPT="-Wl,-rpath," + else + LD_RPATH_OPT="-rpath " + fi + ;; +linux*|gnu*|k*bsd*-gnu) #(vi + LD_RPATH_OPT="-Wl,-rpath," + ;; +openbsd[2-9].*) #(vi + LD_RPATH_OPT="-Wl,-rpath," + ;; +freebsd*) #(vi + LD_RPATH_OPT="-rpath " + ;; +netbsd*) #(vi + LD_RPATH_OPT="-Wl,-rpath," + ;; +osf*|mls+*) #(vi + LD_RPATH_OPT="-rpath " + ;; +solaris2*) #(vi + LD_RPATH_OPT="-R" + ;; +*) + ;; +esac +echo "$as_me:13098: result: $LD_RPATH_OPT" >&5 +echo "${ECHO_T}$LD_RPATH_OPT" >&6 + +case "x$LD_RPATH_OPT" in #(vi +x-R*) + echo "$as_me:13103: checking if we need a space after rpath option" >&5 +echo $ECHO_N "checking if we need a space after rpath option... $ECHO_C" >&6 + cf_save_LIBS="$LIBS" + LIBS="${LD_RPATH_OPT}$libdir $LIBS" + cat >conftest.$ac_ext <<_ACEOF +#line 13108 "configure" +#include "confdefs.h" + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:13120: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:13123: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:13126: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:13129: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_rpath_space=no +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +cf_rpath_space=yes +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + LIBS="$cf_save_LIBS" + echo "$as_me:13139: result: $cf_rpath_space" >&5 +echo "${ECHO_T}$cf_rpath_space" >&6 + test "$cf_rpath_space" = yes && LD_RPATH_OPT="$LD_RPATH_OPT " + ;; +esac + +echo "$as_me:13145: checking if rpath should be not be set" >&5 +echo $ECHO_N "checking if rpath should be not be set... $ECHO_C" >&6 + +# Check whether --enable-rpath-hack or --disable-rpath-hack was given. +if test "${enable_rpath_hack+set}" = set; then + enableval="$enable_rpath_hack" + test "$enableval" != no && enableval=yes + if test "$enableval" != "yes" ; then + cf_disable_rpath_hack=yes + else + cf_disable_rpath_hack=no + fi +else + enableval=yes + cf_disable_rpath_hack=no + +fi; +echo "$as_me:13162: result: $cf_disable_rpath_hack" >&5 +echo "${ECHO_T}$cf_disable_rpath_hack" >&6 +if test "$cf_disable_rpath_hack" = no ; then + +echo "$as_me:13166: checking for updated LDFLAGS" >&5 +echo $ECHO_N "checking for updated LDFLAGS... $ECHO_C" >&6 +if test -n "$LD_RPATH_OPT" ; then + echo "$as_me:13169: result: maybe" >&5 +echo "${ECHO_T}maybe" >&6 + + for ac_prog in ldd +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:13176: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_cf_ldd_prog+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$cf_ldd_prog"; then + ac_cv_prog_cf_ldd_prog="$cf_ldd_prog" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_cf_ldd_prog="$ac_prog" +echo "$as_me:13191: found $ac_dir/$ac_word" >&5 +break +done + +fi +fi +cf_ldd_prog=$ac_cv_prog_cf_ldd_prog +if test -n "$cf_ldd_prog"; then + echo "$as_me:13199: result: $cf_ldd_prog" >&5 +echo "${ECHO_T}$cf_ldd_prog" >&6 +else + echo "$as_me:13202: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$cf_ldd_prog" && break +done +test -n "$cf_ldd_prog" || cf_ldd_prog="no" + + cf_rpath_list="/usr/lib /lib" + if test "$cf_ldd_prog" != no + then +cat >conftest.$ac_ext <<_ACEOF +#line 13214 "configure" +#include "confdefs.h" +#include <stdio.h> +int +main () +{ +printf("Hello"); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:13226: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:13229: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:13232: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:13235: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cf_rpath_list=`$cf_ldd_prog conftest$ac_exeext | fgrep / | sed -e 's%^.*[ ]/%/%' -e 's%/[^/][^/]*$%%' |sort -u` +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + fi + + test -n "$verbose" && echo " ...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS" 1>&6 + +echo "${as_me-configure}:13247: testing ...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS ..." 1>&5 + +test -n "$verbose" && echo " ...checking LDFLAGS $LDFLAGS" 1>&6 + +echo "${as_me-configure}:13251: testing ...checking LDFLAGS $LDFLAGS ..." 1>&5 + +cf_rpath_dst= +for cf_rpath_src in $LDFLAGS +do + case $cf_rpath_src in #(vi + -L*) #(vi + + # check if this refers to a directory which we will ignore + cf_rpath_skip=no + if test -n "$cf_rpath_list" + then + for cf_rpath_item in $cf_rpath_list + do + if test "x$cf_rpath_src" = "x-L$cf_rpath_item" + then + cf_rpath_skip=yes + break + fi + done + fi + + if test "$cf_rpath_skip" = no + then + # transform the option + if test "$LD_RPATH_OPT" = "-R " ; then + cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%-R %"` + else + cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%$LD_RPATH_OPT%"` + fi + + # if we have not already added this, add it now + cf_rpath_tst=`echo "$EXTRA_LDFLAGS" | sed -e "s%$cf_rpath_tmp %%"` + if test "x$cf_rpath_tst" = "x$EXTRA_LDFLAGS" + then + test -n "$verbose" && echo " ...Filter $cf_rpath_src ->$cf_rpath_tmp" 1>&6 + +echo "${as_me-configure}:13288: testing ...Filter $cf_rpath_src ->$cf_rpath_tmp ..." 1>&5 + + EXTRA_LDFLAGS="$cf_rpath_tmp $EXTRA_LDFLAGS" + fi + fi + ;; + esac + cf_rpath_dst="$cf_rpath_dst $cf_rpath_src" +done +LDFLAGS=$cf_rpath_dst + +test -n "$verbose" && echo " ...checked LDFLAGS $LDFLAGS" 1>&6 + +echo "${as_me-configure}:13301: testing ...checked LDFLAGS $LDFLAGS ..." 1>&5 + +test -n "$verbose" && echo " ...checking LIBS $LIBS" 1>&6 + +echo "${as_me-configure}:13305: testing ...checking LIBS $LIBS ..." 1>&5 + +cf_rpath_dst= +for cf_rpath_src in $LIBS +do + case $cf_rpath_src in #(vi + -L*) #(vi + + # check if this refers to a directory which we will ignore + cf_rpath_skip=no + if test -n "$cf_rpath_list" + then + for cf_rpath_item in $cf_rpath_list + do + if test "x$cf_rpath_src" = "x-L$cf_rpath_item" + then + cf_rpath_skip=yes + break + fi + done + fi + + if test "$cf_rpath_skip" = no + then + # transform the option + if test "$LD_RPATH_OPT" = "-R " ; then + cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%-R %"` + else + cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%$LD_RPATH_OPT%"` + fi + + # if we have not already added this, add it now + cf_rpath_tst=`echo "$EXTRA_LDFLAGS" | sed -e "s%$cf_rpath_tmp %%"` + if test "x$cf_rpath_tst" = "x$EXTRA_LDFLAGS" + then + test -n "$verbose" && echo " ...Filter $cf_rpath_src ->$cf_rpath_tmp" 1>&6 + +echo "${as_me-configure}:13342: testing ...Filter $cf_rpath_src ->$cf_rpath_tmp ..." 1>&5 + + EXTRA_LDFLAGS="$cf_rpath_tmp $EXTRA_LDFLAGS" + fi + fi + ;; + esac + cf_rpath_dst="$cf_rpath_dst $cf_rpath_src" +done +LIBS=$cf_rpath_dst + +test -n "$verbose" && echo " ...checked LIBS $LIBS" 1>&6 + +echo "${as_me-configure}:13355: testing ...checked LIBS $LIBS ..." 1>&5 + + test -n "$verbose" && echo " ...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS" 1>&6 + +echo "${as_me-configure}:13359: testing ...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS ..." 1>&5 + +fi + +fi + +ac_config_files="$ac_config_files dialog-config makefile $EXTRA_OUTPUT $SUB_MAKEFILE samples/install/makefile" +ac_config_commands="$ac_config_commands default" +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overriden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +{ + (set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} | + sed ' + t clear + : clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + : end' >>confcache +if cmp -s $cache_file confcache; then :; else + if test -w $cache_file; then + test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" + cat confcache >$cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/; +s/:*\${srcdir}:*/:/; +s/:*@srcdir@:*/:/; +s/^\([^=]*=[ ]*\):*/\1/; +s/:*$//; +s/^[^=]*=[ ]*$//; +}' +fi + +DEFS=-DHAVE_CONFIG_H + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:13446: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated automatically by configure. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +SHELL=\${CONFIG_SHELL-$SHELL} +ac_cs_invocation="\$0 \$@" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi + +# Name of the executable. +as_me=`echo "$0" |sed 's,.*[\\/],,'` + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +as_executable_p="test -f" + +# Support unset when possible. +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + +# NLS nuisances. +$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; } +$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; } +$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; } +$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; } +$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; } +$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; } +$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; } +$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; } + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; } + +exec 6>&1 + +_ACEOF + +# Files that config.status was made for. +if test -n "$ac_config_files"; then + echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_headers"; then + echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_links"; then + echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_commands"; then + echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +fi + +cat >>$CONFIG_STATUS <<\EOF + +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number, then exit + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to <bug-autoconf@gnu.org>." +EOF + +cat >>$CONFIG_STATUS <<EOF +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.52.20100320, + with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" + +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." +srcdir=$srcdir +INSTALL="$INSTALL" +EOF + +cat >>$CONFIG_STATUS <<\EOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "x$1" : 'x\([^=]*\)='` + ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + shift + set dummy "$ac_option" "$ac_optarg" ${1+"$@"} + shift + ;; + -*);; + *) # This is not an option, so the user has probably given explicit + # arguments. + ac_need_defaults=false;; + esac + + case $1 in + # Handling of the options. +EOF +cat >>$CONFIG_STATUS <<EOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion" + exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;; +EOF +cat >>$CONFIG_STATUS <<\EOF + --version | --vers* | -V ) + echo "$ac_cs_version"; exit 0 ;; + --he | --h) + # Conflict between --help and --header + { { echo "$as_me:13622: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + shift + CONFIG_FILES="$CONFIG_FILES $1" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + shift + CONFIG_HEADERS="$CONFIG_HEADERS $1" + ac_need_defaults=false;; + + # This is an error. + -*) { { echo "$as_me:13641: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" ;; + + esac + shift +done + +exec 5>>config.log +cat >&5 << _ACEOF + +## ----------------------- ## +## Running config.status. ## +## ----------------------- ## + +This file was extended by $as_me 2.52.20100320, executed with + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + > $ac_cs_invocation +on `(hostname || uname -n) 2>/dev/null | sed 1q` + +_ACEOF +EOF + +cat >>$CONFIG_STATUS <<EOF +# +# INIT-COMMANDS section. +# + +EOF + +cat >>$CONFIG_STATUS <<\EOF +for ac_config_target in $ac_config_targets +do + case "$ac_config_target" in + # Handling of arguments. + "dialog-config" ) CONFIG_FILES="$CONFIG_FILES dialog-config" ;; + "makefile" ) CONFIG_FILES="$CONFIG_FILES makefile" ;; + "$EXTRA_OUTPUT" ) CONFIG_FILES="$CONFIG_FILES $EXTRA_OUTPUT" ;; + "$SUB_MAKEFILE" ) CONFIG_FILES="$CONFIG_FILES $SUB_MAKEFILE" ;; + "samples/install/makefile" ) CONFIG_FILES="$CONFIG_FILES samples/install/makefile" ;; + "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; + "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; + "dlg_config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS dlg_config.h:config.hin" ;; + *) { { echo "$as_me:13691: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} + +# Create a (secure) tmp directory for tmp files. +: ${TMPDIR=/tmp} +{ + tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=$TMPDIR/cs$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in $TMPDIR" >&2 + { (exit 1); exit 1; } +} + +EOF + +cat >>$CONFIG_STATUS <<EOF + +# +# CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "\$CONFIG_FILES"; then + # Protect against being on the right side of a sed subst in config.status. + sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; + s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +s,@SHELL@,$SHELL,;t t +s,@exec_prefix@,$exec_prefix,;t t +s,@prefix@,$prefix,;t t +s,@program_transform_name@,$program_transform_name,;t t +s,@bindir@,$bindir,;t t +s,@sbindir@,$sbindir,;t t +s,@libexecdir@,$libexecdir,;t t +s,@datadir@,$datadir,;t t +s,@sysconfdir@,$sysconfdir,;t t +s,@sharedstatedir@,$sharedstatedir,;t t +s,@localstatedir@,$localstatedir,;t t +s,@libdir@,$libdir,;t t +s,@includedir@,$includedir,;t t +s,@oldincludedir@,$oldincludedir,;t t +s,@infodir@,$infodir,;t t +s,@mandir@,$mandir,;t t +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +s,@build_alias@,$build_alias,;t t +s,@host_alias@,$host_alias,;t t +s,@target_alias@,$target_alias,;t t +s,@ECHO_C@,$ECHO_C,;t t +s,@ECHO_N@,$ECHO_N,;t t +s,@ECHO_T@,$ECHO_T,;t t +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +s,@DEFS@,$DEFS,;t t +s,@LIBS@,$LIBS,;t t +s,@VERSION@,$VERSION,;t t +s,@VERSION_MAJOR@,$VERSION_MAJOR,;t t +s,@VERSION_MINOR@,$VERSION_MINOR,;t t +s,@VERSION_PATCH@,$VERSION_PATCH,;t t +s,@PACKAGE@,$PACKAGE,;t t +s,@DESTDIR@,$DESTDIR,;t t +s,@CC@,$CC,;t t +s,@CFLAGS@,$CFLAGS,;t t +s,@LDFLAGS@,$LDFLAGS,;t t +s,@CPPFLAGS@,$CPPFLAGS,;t t +s,@ac_ct_CC@,$ac_ct_CC,;t t +s,@EXEEXT@,$EXEEXT,;t t +s,@OBJEXT@,$OBJEXT,;t t +s,@CPP@,$CPP,;t t +s,@SET_MAKE@,$SET_MAKE,;t t +s,@RANLIB@,$RANLIB,;t t +s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t +s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +s,@INSTALL_DATA@,$INSTALL_DATA,;t t +s,@AR@,$AR,;t t +s,@ac_ct_AR@,$ac_ct_AR,;t t +s,@cf_cv_makeflags@,$cf_cv_makeflags,;t t +s,@CTAGS@,$CTAGS,;t t +s,@ETAGS@,$ETAGS,;t t +s,@MAKE_LOWER_TAGS@,$MAKE_LOWER_TAGS,;t t +s,@MAKE_UPPER_TAGS@,$MAKE_UPPER_TAGS,;t t +s,@ECHO_LT@,$ECHO_LT,;t t +s,@ECHO_LD@,$ECHO_LD,;t t +s,@RULE_CC@,$RULE_CC,;t t +s,@SHOW_CC@,$SHOW_CC,;t t +s,@ECHO_CC@,$ECHO_CC,;t t +s,@build@,$build,;t t +s,@build_cpu@,$build_cpu,;t t +s,@build_vendor@,$build_vendor,;t t +s,@build_os@,$build_os,;t t +s,@host@,$host,;t t +s,@host_cpu@,$host_cpu,;t t +s,@host_vendor@,$host_vendor,;t t +s,@host_os@,$host_os,;t t +s,@PROG_EXT@,$PROG_EXT,;t t +s,@LIB_PREFIX@,$LIB_PREFIX,;t t +s,@EXTRA_CPPFLAGS@,$EXTRA_CPPFLAGS,;t t +s,@EXTRA_CFLAGS@,$EXTRA_CFLAGS,;t t +s,@CONFIG_H@,$CONFIG_H,;t t +s,@ALLOCA@,$ALLOCA,;t t +s,@GLIBC21@,$GLIBC21,;t t +s,@LIBICONV@,$LIBICONV,;t t +s,@USE_NLS@,$USE_NLS,;t t +s,@MSGFMT@,$MSGFMT,;t t +s,@GMSGFMT@,$GMSGFMT,;t t +s,@XGETTEXT@,$XGETTEXT,;t t +s,@INTLBISON@,$INTLBISON,;t t +s,@BUILD_INCLUDED_LIBINTL@,$BUILD_INCLUDED_LIBINTL,;t t +s,@USE_INCLUDED_LIBINTL@,$USE_INCLUDED_LIBINTL,;t t +s,@CATALOGS@,$CATALOGS,;t t +s,@CATOBJEXT@,$CATOBJEXT,;t t +s,@GMOFILES@,$GMOFILES,;t t +s,@INTLLIBS@,$INTLLIBS,;t t +s,@INTLOBJS@,$INTLOBJS,;t t +s,@POFILES@,$POFILES,;t t +s,@POSUB@,$POSUB,;t t +s,@DATADIRNAME@,$DATADIRNAME,;t t +s,@INSTOBJEXT@,$INSTOBJEXT,;t t +s,@GENCAT@,$GENCAT,;t t +s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t +s,@INTL_LIBTOOL_SUFFIX_PREFIX@,$INTL_LIBTOOL_SUFFIX_PREFIX,;t t +s,@MSG_DIR_MAKE@,$MSG_DIR_MAKE,;t t +s,@SUB_MAKEFILE@,$SUB_MAKEFILE,;t t +s,@INTLDIR_MAKE@,$INTLDIR_MAKE,;t t +s,@GT_YES@,$GT_YES,;t t +s,@GT_NO@,$GT_NO,;t t +s,@LINK_PREFIX@,$LINK_PREFIX,;t t +s,@LIBTOOL@,$LIBTOOL,;t t +s,@LT_UNDEF@,$LT_UNDEF,;t t +s,@LIBTOOL_CXX@,$LIBTOOL_CXX,;t t +s,@LIBTOOL_OPTS@,$LIBTOOL_OPTS,;t t +s,@LIB_CREATE@,$LIB_CREATE,;t t +s,@LIB_OBJECT@,$LIB_OBJECT,;t t +s,@LIB_SUFFIX@,$LIB_SUFFIX,;t t +s,@LIB_PREP@,$LIB_PREP,;t t +s,@LIB_CLEAN@,$LIB_CLEAN,;t t +s,@LIB_COMPILE@,$LIB_COMPILE,;t t +s,@LIB_LINK@,$LIB_LINK,;t t +s,@LIB_INSTALL@,$LIB_INSTALL,;t t +s,@LIB_UNINSTALL@,$LIB_UNINSTALL,;t t +s,@LIBTOOL_MAKE@,$LIBTOOL_MAKE,;t t +s,@NCURSES_CONFIG@,$NCURSES_CONFIG,;t t +s,@EXTRAOBJS@,$EXTRAOBJS,;t t +s,@PACKAGE_PREFIX@,$PACKAGE_PREFIX,;t t +s,@PACKAGE_CONFIG@,$PACKAGE_CONFIG,;t t +s,@cf_ldd_prog@,$cf_ldd_prog,;t t +s,@EXTRA_LDFLAGS@,$EXTRA_LDFLAGS,;t t +CEOF + +EOF + + cat >>$CONFIG_STATUS <<\EOF + # Split the substitutions into bite-sized pieces for seds with + # small command number limits, like on Digital OSF/1 and HP-UX. + ac_max_sed_lines=48 + ac_sed_frag=1 # Number of current file. + ac_beg=1 # First line for current file. + ac_end=$ac_max_sed_lines # Line after last line for current file. + ac_more_lines=: + ac_sed_cmds= + while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + else + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + fi + if test ! -s $tmp/subs.frag; then + ac_more_lines=false + else + # The purpose of the label and of the branching condition is to + # speed up the sed processing (if there are no `@' at all, there + # is no need to browse any of the substitutions). + # These are the two extra sed commands mentioned above. + (echo ':t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + else + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + fi + ac_sed_frag=`expr $ac_sed_frag + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_lines` + fi + done + if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat + fi +fi # test -n "$CONFIG_FILES" + +EOF +cat >>$CONFIG_STATUS <<\EOF +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. + ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + { case "$ac_dir" in + [\\/]* | ?:[\\/]* ) as_incr_dir=;; + *) as_incr_dir=.;; +esac +as_dummy="$ac_dir" +for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do + case $as_mkdir_dir in + # Skip DOS drivespec + ?:) as_incr_dir=$as_mkdir_dir ;; + *) + as_incr_dir=$as_incr_dir/$as_mkdir_dir + test -d "$as_incr_dir" || mkdir "$as_incr_dir" + ;; + esac +done; } + + ac_dir_suffix="/`echo $ac_dir|sed 's,^\./,,'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'` + else + ac_dir_suffix= ac_dots= + fi + + case $srcdir in + .) ac_srcdir=. + if test -z "$ac_dots"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_dots | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_dots$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_dots$srcdir ;; + esac + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_dots$INSTALL ;; + esac + + if test x"$ac_file" != x-; then + { echo "$as_me:13980: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated automatically by config.status. */ + configure_input="Generated automatically from `echo $ac_file_in | + sed 's,.*/,,'` by configure." + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:13998: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo $f;; + *) # Relative + if test -f "$f"; then + # Build tree + echo $f + elif test -f "$srcdir/$f"; then + # Source tree + echo $srcdir/$f + else + # /dev/null tree + { { echo "$as_me:14011: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } +EOF +cat >>$CONFIG_STATUS <<EOF + sed "$ac_vpsub +$extrasub +EOF +cat >>$CONFIG_STATUS <<\EOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s,@configure_input@,$configure_input,;t t +s,@srcdir@,$ac_srcdir,;t t +s,@top_srcdir@,$ac_top_srcdir,;t t +s,@INSTALL@,$ac_INSTALL,;t t +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out + rm -f $tmp/stdin + if test x"$ac_file" != x-; then + mv $tmp/out $ac_file + else + cat $tmp/out + rm -f $tmp/out + fi + +done +EOF +cat >>$CONFIG_STATUS <<\EOF + +# +# CONFIG_HEADER section. +# + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='[ ].*$,\1#\2' +ac_dC=' ' +ac_dD=',;t' +# ac_i turns "#undef NAME" with trailing blanks into "#define NAME VALUE". +ac_iA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_iB='\([ ]\),\1#\2define\3' +ac_iC=' ' +ac_iD='\4,;t' +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='$,\1#\2define\3' +ac_uC=' ' +ac_uD=',;t' + +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + test x"$ac_file" != x- && { echo "$as_me:14077: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:14088: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo $f;; + *) # Relative + if test -f "$f"; then + # Build tree + echo $f + elif test -f "$srcdir/$f"; then + # Source tree + echo $srcdir/$f + else + # /dev/null tree + { { echo "$as_me:14101: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + # Remove the trailing spaces. + sed 's/[ ]*$//' $ac_file_inputs >$tmp/in + +EOF + +# Transform confdefs.h into a list of #define's. We won't use it as a sed +# script, but as data to insert where we see @DEFS@. We expect AC_SAVE_DEFS to +# be either 'cat' or 'sort'. +sort -u confdefs.h | uniq >conftest.vals + +# Break up conftest.vals because some shells have a limit on +# the size of here documents, and old seds have small limits too. + +rm -f conftest.tail +echo ' rm -f conftest.frag' >> $CONFIG_STATUS +while grep . conftest.vals >/dev/null +do + # Write chunks of a limited-size here document to conftest.frag. + echo ' cat >> conftest.frag <<CEOF' >> $CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.vals | sed -e 's/#ifdef.*/#if 0/' >> $CONFIG_STATUS + echo 'CEOF' >> $CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail + rm -f conftest.vals + mv conftest.tail conftest.vals +done +rm -f conftest.vals + +# Run sed to substitute the contents of conftest.frag into $tmp/in at the +# marker @DEFS@. +echo ' cat >> conftest.edit <<CEOF +/@DEFS@/r conftest.frag +/@DEFS@/d +CEOF +sed -f conftest.edit $tmp/in > $tmp/out +rm -f $tmp/in +mv $tmp/out $tmp/in +rm -f conftest.edit conftest.frag +' >> $CONFIG_STATUS + +cat >>$CONFIG_STATUS <<\EOF + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated automatically by config.status. */ + if test x"$ac_file" = x-; then + echo "/* Generated automatically by configure. */" >$tmp/config.h + else + echo "/* $ac_file. Generated automatically by configure. */" >$tmp/config.h + fi + cat $tmp/in >>$tmp/config.h + rm -f $tmp/in + if test x"$ac_file" != x-; then + if cmp -s $ac_file $tmp/config.h 2>/dev/null; then + { echo "$as_me:14159: $ac_file is unchanged" >&5 +echo "$as_me: $ac_file is unchanged" >&6;} + else + ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + { case "$ac_dir" in + [\\/]* | ?:[\\/]* ) as_incr_dir=;; + *) as_incr_dir=.;; +esac +as_dummy="$ac_dir" +for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do + case $as_mkdir_dir in + # Skip DOS drivespec + ?:) as_incr_dir=$as_mkdir_dir ;; + *) + as_incr_dir=$as_incr_dir/$as_mkdir_dir + test -d "$as_incr_dir" || mkdir "$as_incr_dir" + ;; + esac +done; } + + fi + rm -f $ac_file + mv $tmp/config.h $ac_file + fi + else + cat $tmp/config.h + rm -f $tmp/config.h + fi +done +EOF +cat >>$CONFIG_STATUS <<\EOF + +# +# CONFIG_COMMANDS section. +# +for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue + ac_dest=`echo "$ac_file" | sed 's,:.*,,'` + ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` + + case $ac_dest in + default-1 ) for ac_file in $CONFIG_FILES; do + + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + + # PO directories have a Makefile.in generated from Makefile.inn. + case "$ac_file" in */[Mm]akefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + ac_base=`basename $ac_file .in` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$ac_given_srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/$ac_base" || echo "creating $ac_dir/$ac_base" + sed -e "/POTFILES =/r $ac_dir/POTFILES" "$ac_dir/$ac_base.in" > "$ac_dir/$ac_base" + fi + ;; + esac + done ;; + esac +done +EOF + +cat >>$CONFIG_STATUS <<\EOF + +{ (exit 0); exit 0; } +EOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + exec 5>/dev/null + $SHELL $CONFIG_STATUS || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi + Property changes on: contrib/dialog/configure ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/dlg_keys.c =================================================================== --- contrib/dialog/dlg_keys.c (revision 0) +++ contrib/dialog/dlg_keys.c (revision 0) @@ -0,0 +1,729 @@ +/* + * $Id: dlg_keys.c,v 1.26 2009/02/22 16:19:51 tom Exp $ + * + * dlg_keys.c -- runtime binding support for dialog + * + * Copyright 2006-2007,2009 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + */ + +#include <dialog.h> +#include <dlg_keys.h> + +#define LIST_BINDINGS struct _list_bindings + +LIST_BINDINGS { + LIST_BINDINGS *link; + WINDOW *win; /* window on which widget gets input */ + const char *name; /* widget name */ + bool buttons; /* true only for dlg_register_buttons() */ + DLG_KEYS_BINDING *binding; /* list of bindings */ +}; + +static LIST_BINDINGS *all_bindings; +static const DLG_KEYS_BINDING end_keys_binding = END_KEYS_BINDING; + +/* + * For a given named widget's window, associate a binding table. + */ +void +dlg_register_window(WINDOW *win, const char *name, DLG_KEYS_BINDING * binding) +{ + LIST_BINDINGS *p, *q; + + for (p = all_bindings, q = 0; p != 0; q = p, p = p->link) { + if (p->win == win && !strcmp(p->name, name)) { + p->binding = binding; + return; + } + } + /* add built-in bindings at the end of the list (see compare_bindings). */ + if ((p = dlg_calloc(LIST_BINDINGS, 1)) != 0) { + p->win = win; + p->name = name; + p->binding = binding; + if (q != 0) + q->link = p; + else + all_bindings = p; + } +} + +/* + * Unlike dlg_lookup_key(), this looks for either widget-builtin or rc-file + * definitions, depending on whether 'win' is null. + */ +static int +key_is_bound(WINDOW *win, const char *name, int curses_key, int function_key) +{ + LIST_BINDINGS *p; + + for (p = all_bindings; p != 0; p = p->link) { + if (p->win == win && !dlg_strcmp(p->name, name)) { + int n; + for (n = 0; p->binding[n].is_function_key >= 0; ++n) { + if (p->binding[n].curses_key == curses_key + && p->binding[n].is_function_key == function_key) { + return TRUE; + } + } + } + } + return FALSE; +} + +/* + * Call this function after dlg_register_window(), for the list of button + * labels associated with the widget. + * + * Ensure that dlg_lookup_key() will not accidentally translate a key that + * we would like to use for a button abbreviation to some other key, e.g., + * h/j/k/l for navigation into a cursor key. Do this by binding the key + * to itself. + * + * See dlg_char_to_button(). + */ +void +dlg_register_buttons(WINDOW *win, const char *name, const char **buttons) +{ + int n; + LIST_BINDINGS *p; + DLG_KEYS_BINDING *q; + + if (buttons == 0) + return; + + for (n = 0; buttons[n] != 0; ++n) { + int curses_key = dlg_button_to_char(buttons[n]); + + /* ignore multibyte characters */ + if (curses_key >= KEY_MIN) + continue; + + /* if it is not bound in the widget, skip it (no conflicts) */ + if (!key_is_bound(win, name, curses_key, FALSE)) + continue; + +#ifdef HAVE_RC_FILE + /* if it is bound in the rc-file, skip it */ + if (key_is_bound(0, name, curses_key, FALSE)) + continue; +#endif + + if ((p = dlg_calloc(LIST_BINDINGS, 1)) != 0) { + if ((q = dlg_calloc(DLG_KEYS_BINDING, 2)) != 0) { + q[0].is_function_key = 0; + q[0].curses_key = curses_key; + q[0].dialog_key = curses_key; + q[1] = end_keys_binding; + + p->win = win; + p->name = name; + p->buttons = TRUE; + p->binding = q; + + /* put these at the beginning, to override the widget's table */ + p->link = all_bindings; + all_bindings = p; + } else { + free(p); + } + } + } +} + +/* + * Remove the bindings for a given window. + */ +void +dlg_unregister_window(WINDOW *win) +{ + LIST_BINDINGS *p, *q; + + for (p = all_bindings, q = 0; p != 0; p = p->link) { + if (p->win == win) { + if (q != 0) { + q->link = p->link; + } else { + all_bindings = p->link; + } + /* the user-defined and buttons-bindings all are length=1 */ + if (p->binding[1].is_function_key < 0) + free(p->binding); + free(p); + dlg_unregister_window(win); + break; + } + q = p; + } +} + +/* + * Call this after wgetch(), using the same window pointer and passing + * the curses-key. + * + * If there is no binding associated with the widget, it simply returns + * the given curses-key. + * + * Parameters: + * win is the window on which the wgetch() was done. + * curses_key is the value returned by wgetch(). + * fkey in/out (on input, it is true if curses_key is a function key, + * and on output, it is true if the result is a function key). + */ +int +dlg_lookup_key(WINDOW *win, int curses_key, int *fkey) +{ + LIST_BINDINGS *p; + int n; + + /* + * Ignore mouse clicks, since they are already encoded properly. + */ +#ifdef KEY_MOUSE + if (*fkey != 0 && curses_key == KEY_MOUSE) { + ; + } else +#endif + /* + * Ignore resize events, since they are already encoded properly. + */ +#ifdef KEY_RESIZE + if (*fkey != 0 && curses_key == KEY_RESIZE) { + ; + } else +#endif + if (*fkey == 0 || curses_key < KEY_MAX) { + for (p = all_bindings; p != 0; p = p->link) { + if (p->win == win || p->win == 0) { + int function_key = (*fkey != 0); + for (n = 0; p->binding[n].is_function_key >= 0; ++n) { + if (p->buttons + && !function_key + && p->binding[n].curses_key == (int) dlg_toupper(curses_key)) { + *fkey = 0; + return p->binding[n].dialog_key; + } + if (p->binding[n].curses_key == curses_key + && p->binding[n].is_function_key == function_key) { + *fkey = p->binding[n].dialog_key; + return *fkey; + } + } + } + } + } + return curses_key; +} + +/* + * Test a dialog internal keycode to see if it corresponds to one of the push + * buttons on the widget such as "OK". + * + * This is only useful if there are user-defined key bindings, since there are + * no built-in bindings that map directly to DLGK_OK, etc. + * + * See also dlg_ok_buttoncode(). + */ +int +dlg_result_key(int dialog_key, int fkey GCC_UNUSED, int *resultp) +{ + int done = FALSE; + +#ifdef HAVE_RC_FILE + if (fkey) { + switch ((DLG_KEYS_ENUM) dialog_key) { + case DLGK_OK: + *resultp = DLG_EXIT_OK; + done = TRUE; + break; + case DLGK_CANCEL: + if (!dialog_vars.nocancel) { + *resultp = DLG_EXIT_CANCEL; + done = TRUE; + } + break; + case DLGK_EXTRA: + if (dialog_vars.extra_button) { + *resultp = DLG_EXIT_EXTRA; + done = TRUE; + } + break; + case DLGK_HELP: + if (dialog_vars.help_button) { + *resultp = DLG_EXIT_HELP; + done = TRUE; + } + break; + case DLGK_ESC: + *resultp = DLG_EXIT_ESC; + done = TRUE; + break; + default: + break; + } + } else +#endif + if (dialog_key == ESC) { + *resultp = DLG_EXIT_ESC; + done = TRUE; + } else if (dialog_key == ERR) { + *resultp = DLG_EXIT_ERROR; + done = TRUE; + } + + return done; +} + +#ifdef HAVE_RC_FILE +typedef struct { + const char *name; + int code; +} CODENAME; + +#define CURSES_NAME(upper) { #upper, KEY_ ## upper } +#define COUNT_CURSES sizeof(curses_names)/sizeof(curses_names[0]) +static const CODENAME curses_names[] = +{ + CURSES_NAME(DOWN), + CURSES_NAME(UP), + CURSES_NAME(LEFT), + CURSES_NAME(RIGHT), + CURSES_NAME(HOME), + CURSES_NAME(BACKSPACE), + CURSES_NAME(F0), + CURSES_NAME(DL), + CURSES_NAME(IL), + CURSES_NAME(DC), + CURSES_NAME(IC), + CURSES_NAME(EIC), + CURSES_NAME(CLEAR), + CURSES_NAME(EOS), + CURSES_NAME(EOL), + CURSES_NAME(SF), + CURSES_NAME(SR), + CURSES_NAME(NPAGE), + CURSES_NAME(PPAGE), + CURSES_NAME(STAB), + CURSES_NAME(CTAB), + CURSES_NAME(CATAB), + CURSES_NAME(ENTER), + CURSES_NAME(PRINT), + CURSES_NAME(LL), + CURSES_NAME(A1), + CURSES_NAME(A3), + CURSES_NAME(B2), + CURSES_NAME(C1), + CURSES_NAME(C3), + CURSES_NAME(BTAB), + CURSES_NAME(BEG), + CURSES_NAME(CANCEL), + CURSES_NAME(CLOSE), + CURSES_NAME(COMMAND), + CURSES_NAME(COPY), + CURSES_NAME(CREATE), + CURSES_NAME(END), + CURSES_NAME(EXIT), + CURSES_NAME(FIND), + CURSES_NAME(HELP), + CURSES_NAME(MARK), + CURSES_NAME(MESSAGE), + CURSES_NAME(MOVE), + CURSES_NAME(NEXT), + CURSES_NAME(OPEN), + CURSES_NAME(OPTIONS), + CURSES_NAME(PREVIOUS), + CURSES_NAME(REDO), + CURSES_NAME(REFERENCE), + CURSES_NAME(REFRESH), + CURSES_NAME(REPLACE), + CURSES_NAME(RESTART), + CURSES_NAME(RESUME), + CURSES_NAME(SAVE), + CURSES_NAME(SBEG), + CURSES_NAME(SCANCEL), + CURSES_NAME(SCOMMAND), + CURSES_NAME(SCOPY), + CURSES_NAME(SCREATE), + CURSES_NAME(SDC), + CURSES_NAME(SDL), + CURSES_NAME(SELECT), + CURSES_NAME(SEND), + CURSES_NAME(SEOL), + CURSES_NAME(SEXIT), + CURSES_NAME(SFIND), + CURSES_NAME(SHELP), + CURSES_NAME(SHOME), + CURSES_NAME(SIC), + CURSES_NAME(SLEFT), + CURSES_NAME(SMESSAGE), + CURSES_NAME(SMOVE), + CURSES_NAME(SNEXT), + CURSES_NAME(SOPTIONS), + CURSES_NAME(SPREVIOUS), + CURSES_NAME(SPRINT), + CURSES_NAME(SREDO), + CURSES_NAME(SREPLACE), + CURSES_NAME(SRIGHT), + CURSES_NAME(SRSUME), + CURSES_NAME(SSAVE), + CURSES_NAME(SSUSPEND), + CURSES_NAME(SUNDO), + CURSES_NAME(SUSPEND), + CURSES_NAME(UNDO), +}; + +#define DIALOG_NAME(upper) { #upper, DLGK_ ## upper } +#define COUNT_DIALOG sizeof(dialog_names)/sizeof(dialog_names[0]) +static const CODENAME dialog_names[] = +{ + DIALOG_NAME(OK), + DIALOG_NAME(CANCEL), + DIALOG_NAME(EXTRA), + DIALOG_NAME(HELP), + DIALOG_NAME(ESC), + DIALOG_NAME(PAGE_FIRST), + DIALOG_NAME(PAGE_LAST), + DIALOG_NAME(PAGE_NEXT), + DIALOG_NAME(PAGE_PREV), + DIALOG_NAME(ITEM_FIRST), + DIALOG_NAME(ITEM_LAST), + DIALOG_NAME(ITEM_NEXT), + DIALOG_NAME(ITEM_PREV), + DIALOG_NAME(FIELD_FIRST), + DIALOG_NAME(FIELD_LAST), + DIALOG_NAME(FIELD_NEXT), + DIALOG_NAME(FIELD_PREV), + DIALOG_NAME(GRID_UP), + DIALOG_NAME(GRID_DOWN), + DIALOG_NAME(GRID_LEFT), + DIALOG_NAME(GRID_RIGHT), + DIALOG_NAME(DELETE_LEFT), + DIALOG_NAME(DELETE_RIGHT), + DIALOG_NAME(DELETE_ALL), + DIALOG_NAME(ENTER), + DIALOG_NAME(BEGIN), + DIALOG_NAME(FINAL), + DIALOG_NAME(SELECT) +}; + +static char * +skip_white(char *s) +{ + while (*s != '\0' && isspace(UCH(*s))) + ++s; + return s; +} + +static char * +skip_black(char *s) +{ + while (*s != '\0' && !isspace(UCH(*s))) + ++s; + return s; +} + +/* + * Find a user-defined binding, given the curses key code. + */ +static DLG_KEYS_BINDING * +find_binding(char *widget, int curses_key) +{ + LIST_BINDINGS *p; + DLG_KEYS_BINDING *result = 0; + + for (p = all_bindings; p != 0; p = p->link) { + if (p->win == 0 + && !dlg_strcmp(p->name, widget) + && p->binding->curses_key == curses_key) { + result = p->binding; + break; + } + } + return result; +} + +/* + * Built-in bindings have a nonzero "win" member, and the associated binding + * table can have more than one entry. We keep those last, since lookups will + * find the user-defined bindings first and use those. + * + * Sort "*" (all-widgets) entries past named widgets, since those are less + * specific. + */ +static int +compare_bindings(LIST_BINDINGS * a, LIST_BINDINGS * b) +{ + int result = 0; + if (a->win == b->win) { + if (!strcmp(a->name, b->name)) { + result = a->binding[0].curses_key - b->binding[0].curses_key; + } else if (!strcmp(b->name, "*")) { + result = -1; + } else if (!strcmp(a->name, "*")) { + result = 1; + } else { + result = dlg_strcmp(a->name, b->name); + } + } else if (b->win) { + result = -1; + } else { + result = 1; + } + return result; +} + +/* + * Find a user-defined binding, given the curses key code. If it does not + * exist, create a new one, inserting it into the linked list, keeping it + * sorted to simplify lookups for user-defined bindings that can override + * the built-in bindings. + */ +static DLG_KEYS_BINDING * +make_binding(char *widget, int curses_key, int is_function, int dialog_key) +{ + LIST_BINDINGS *entry = 0; + DLG_KEYS_BINDING *data = 0; + char *name; + LIST_BINDINGS *p, *q; + DLG_KEYS_BINDING *result = find_binding(widget, curses_key); + + if (result == 0 + && (entry = dlg_calloc(LIST_BINDINGS, 1)) != 0 + && (data = dlg_calloc(DLG_KEYS_BINDING, 2)) != 0 + && (name = dlg_strclone(widget)) != 0) { + + entry->name = name; + entry->binding = data; + + data[0].is_function_key = is_function; + data[0].curses_key = curses_key; + data[0].dialog_key = dialog_key; + + data[1] = end_keys_binding; + + for (p = all_bindings, q = 0; p != 0; q = p, p = p->link) { + if (compare_bindings(entry, p) < 0) { + break; + } + } + if (q != 0) { + q->link = entry; + } else { + all_bindings = entry; + } + if (p != 0) { + entry->link = p; + } + result = data; + } else if (entry != 0) { + free(entry); + if (data) + free(data); + } + + return result; +} + +/* + * Parse the parameters of the "bindkeys" configuration-file entry. This + * expects widget name which may be "*", followed by curses key definition and + * then dialog key definition. + * + * The curses key "should" be one of the names (ignoring case) from + * curses_names[], but may also be a single control character (prefix "^" or + * "~" depending on whether it is C0 or C1), or an escaped single character. + * Binding a printable character with dialog is possible but not useful. + * + * The dialog key must be one of the names from dialog_names[]. + */ +int +dlg_parse_bindkey(char *params) +{ + char *p = skip_white(params); + char *q; + bool escaped = FALSE; + int modified = 0; + int result = FALSE; + unsigned xx; + char *widget; + int is_function = FALSE; + int curses_key; + int dialog_key; + + curses_key = -1; + dialog_key = -1; + widget = p; + + p = skip_black(p); + if (p != widget && *p != '\0') { + *p++ = '\0'; + q = p; + while (*p != '\0' && curses_key < 0) { + if (escaped) { + escaped = FALSE; + curses_key = *p; + } else if (*p == '\\') { + escaped = TRUE; + } else if (modified) { + if (*p == '?') { + curses_key = ((modified == '^') + ? 127 + : 255); + } else { + curses_key = ((modified == '^') + ? (*p & 0x1f) + : ((*p & 0x1f) | 0x80)); + } + } else if (*p == '^') { + modified = *p; + } else if (*p == '~') { + modified = *p; + } else if (isspace(UCH(*p))) { + break; + } + ++p; + } + if (!isspace(UCH(*p))) { + ; + } else { + *p++ = '\0'; + if (curses_key < 0) { + char fprefix[2]; + char check[2]; + int keynumber; + if (sscanf(q, "%[Ff]%d%c", fprefix, &keynumber, check) == 2) { + curses_key = KEY_F(keynumber); + is_function = TRUE; + } else { + for (xx = 0; xx < COUNT_CURSES; ++xx) { + if (!dlg_strcmp(curses_names[xx].name, q)) { + curses_key = curses_names[xx].code; + is_function = TRUE; + break; + } + } + } + } + } + q = skip_white(p); + p = skip_black(q); + if (p != q) { + for (xx = 0; xx < COUNT_DIALOG; ++xx) { + if (!dlg_strcmp(dialog_names[xx].name, q)) { + dialog_key = dialog_names[xx].code; + break; + } + } + } + if (*widget != '\0' + && curses_key >= 0 + && dialog_key >= 0 + && make_binding(widget, curses_key, is_function, dialog_key) != 0) { + result = TRUE; + } + } + return result; +} + +static void +dump_curses_key(FILE *fp, int curses_key) +{ + if (curses_key > KEY_MIN) { + unsigned n; + bool found = FALSE; + for (n = 0; n < COUNT_CURSES; ++n) { + if (curses_names[n].code == curses_key) { + fprintf(fp, "%s", curses_names[n].name); + found = TRUE; + break; + } + } + if (!found) { + if (curses_key >= KEY_F(0)) { + fprintf(fp, "F%d", curses_key - KEY_F(0)); + } else { + fprintf(fp, "curses%d", curses_key); + } + } + } else if (curses_key >= 0 && curses_key < 32) { + fprintf(fp, "^%c", curses_key + 64); + } else if (curses_key == 127) { + fprintf(fp, "^?"); + } else if (curses_key >= 128 && curses_key < 160) { + fprintf(fp, "~%c", curses_key - 64); + } else if (curses_key == 255) { + fprintf(fp, "~?"); + } else { + fprintf(fp, "\\%c", curses_key); + } +} + +static void +dump_dialog_key(FILE *fp, int dialog_key) +{ + unsigned n; + bool found = FALSE; + for (n = 0; n < COUNT_DIALOG; ++n) { + if (dialog_names[n].code == dialog_key) { + fputs(dialog_names[n].name, fp); + found = TRUE; + break; + } + } + if (!found) { + fprintf(fp, "dialog%d", dialog_key); + } +} + +static void +dump_one_binding(FILE *fp, const char *widget, DLG_KEYS_BINDING * binding) +{ + fprintf(fp, "bindkey %s ", widget); + dump_curses_key(fp, binding->curses_key); + fputc(' ', fp); + dump_dialog_key(fp, binding->dialog_key); + fputc('\n', fp); +} + +void +dlg_dump_keys(FILE *fp) +{ + LIST_BINDINGS *p; + const char *last = ""; + unsigned n; + unsigned count = 0; + + for (p = all_bindings; p != 0; p = p->link) { + if (p->win == 0) { + ++count; + } + } + if (count != 0) { + for (p = all_bindings, n = 0; p != 0; p = p->link) { + if (p->win == 0) { + if (dlg_strcmp(last, p->name)) { + fprintf(fp, "\n# key bindings for %s widgets\n", + !strcmp(p->name, "*") ? "all" : p->name); + last = p->name; + } + dump_one_binding(fp, p->name, p->binding); + } + } + } +} +#endif /* HAVE_RC_FILE */ Index: contrib/dialog/config.hin =================================================================== --- contrib/dialog/config.hin (revision 0) +++ contrib/dialog/config.hin (revision 0) @@ -0,0 +1,4 @@ +/* + * The configure script expands this as a set of definitions + */ +@DEFS@ Index: contrib/dialog/tailbox.c =================================================================== --- contrib/dialog/tailbox.c (revision 0) +++ contrib/dialog/tailbox.c (revision 0) @@ -0,0 +1,368 @@ +/* + * $Id: tailbox.c,v 1.56 2010/04/28 20:52:20 tom Exp $ + * + * tailbox.c -- implements the tail box + * + * Copyright 2000-2009,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + * + * An earlier version of this program lists as authors + * Pasquale De Marco (demarco_p@abramo.it) + */ + +#include <dialog.h> +#include <dlg_keys.h> + +typedef struct { + DIALOG_CALLBACK obj; + WINDOW *text; + const char **buttons; + int hscroll; + int old_hscroll; + char line[MAX_LEN + 1]; +} MY_OBJ; + +/* + * Return current line of text. + */ +static char * +get_line(MY_OBJ * obj) +{ + FILE *fp = obj->obj.input; + int col = -(obj->hscroll); + int j, tmpint, ch; + + do { + if (((ch = getc(fp)) == EOF) && !feof(fp)) + dlg_exiterr("Error moving file pointer in get_line()."); + else if (!feof(fp) && (ch != '\n')) { + if ((ch == TAB) && (dialog_vars.tab_correct)) { + tmpint = dialog_state.tab_len + - ((col + obj->hscroll) % dialog_state.tab_len); + for (j = 0; j < tmpint; j++) { + if (col >= 0 && col < MAX_LEN) + obj->line[col] = ' '; + ++col; + } + } else { + if (col >= 0) + obj->line[col] = (char) ch; + ++col; + } + if (col >= MAX_LEN) + break; + } + } while (!feof(fp) && (ch != '\n')); + + if (col < 0) + col = 0; + obj->line[col] = '\0'; + + return obj->line; +} + +/* + * Print a new line of text. + */ +static void +print_line(MY_OBJ * obj, WINDOW *win, int row, int width) +{ + int i, y, x; + char *line = get_line(obj); + + (void) wmove(win, row, 0); /* move cursor to correct line */ + (void) waddch(win, ' '); +#ifdef NCURSES_VERSION + (void) waddnstr(win, line, MIN((int) strlen(line), width - 2)); +#else + line[MIN((int) strlen(line), width - 2)] = '\0'; + waddstr(win, line); +#endif + + getyx(win, y, x); + /* Clear 'residue' of previous line */ + for (i = 0; i < width - x; i++) + (void) waddch(win, ' '); +} + +/* + * Go back 'target' lines in text file. BUFSIZ has to be in 'size_t' range. + */ +static void +last_lines(MY_OBJ * obj, int target) +{ + FILE *fp = obj->obj.input; + long inx; + int count = 0; + char buf[BUFSIZ + 1]; + long size_to_read; + long offset = 0; + long fpos = 0; + + if (fseek(fp, 0, SEEK_END) == -1 + || (fpos = ftell(fp)) < 0) + dlg_exiterr("Error moving file pointer in last_lines()."); + + if (fpos != 0) { + ++target; + for (;;) { + if (fpos >= BUFSIZ) { + size_to_read = BUFSIZ; + } else { + size_to_read = fpos; + } + fpos = fpos - size_to_read; + if (fseek(fp, fpos, SEEK_SET) == -1) + dlg_exiterr("Error moving file pointer in last_lines()."); + (void) fread(buf, (size_t) size_to_read, 1, fp); + if (ferror(fp)) + dlg_exiterr("Error reading file in last_lines()."); + + offset += size_to_read; + for (inx = size_to_read - 1; inx >= 0; --inx) { + if (buf[inx] == '\n') { + if (++count > target) + break; + offset = inx + 1; + } + } + + if (count > target) { + break; + } else if (fpos == 0) { + offset = 0; + break; + } + } + + if (fseek(fp, fpos + offset, SEEK_SET) == -1) + dlg_exiterr("Error moving file pointer in last_lines()."); + } +} + +/* + * Print a new page of text. + */ +static void +print_page(MY_OBJ * obj, int height, int width) +{ + int i; + + for (i = 0; i < height; i++) { + print_line(obj, obj->text, i, width); + } + (void) wnoutrefresh(obj->text); +} + +static void +print_last_page(MY_OBJ * obj) +{ + int high = getmaxy(obj->obj.win) - (2 * MARGIN + (obj->obj.bg_task ? 1 : 3)); + int wide = getmaxx(obj->text); + + last_lines(obj, high); + print_page(obj, high, wide); +} + +static void +repaint_text(MY_OBJ * obj) +{ + int cur_y, cur_x; + + getyx(obj->obj.win, cur_y, cur_x); + obj->old_hscroll = obj->hscroll; + print_last_page(obj); + (void) wmove(obj->obj.win, cur_y, cur_x); /* Restore cursor position */ + wrefresh(obj->obj.win); +} + +static bool +handle_my_getc(DIALOG_CALLBACK * cb, int ch, int fkey, int *result) +{ + MY_OBJ *obj = (MY_OBJ *) cb; + bool done = FALSE; + + if (!fkey && dlg_char_to_button(ch, obj->buttons) == 0) { + ch = DLGK_ENTER; + fkey = TRUE; + } + + if (fkey) { + switch (ch) { + case DLGK_ENTER: + *result = DLG_EXIT_OK; + done = TRUE; + break; + case DLGK_BEGIN: /* Beginning of line */ + obj->hscroll = 0; + break; + case DLGK_GRID_LEFT: /* Scroll left */ + if (obj->hscroll > 0) { + obj->hscroll -= 1; + } + break; + case DLGK_GRID_RIGHT: /* Scroll right */ + if (obj->hscroll < MAX_LEN) + obj->hscroll += 1; + break; + default: + beep(); + break; + } + if ((obj->hscroll != obj->old_hscroll)) + repaint_text(obj); + } else { + switch (ch) { + case ERR: + clearerr(cb->input); + ch = getc(cb->input); + (void) ungetc(ch, cb->input); + if ((ch != EOF) || (obj->hscroll != obj->old_hscroll)) { + repaint_text(obj); + } + break; + case ESC: + done = TRUE; + *result = DLG_EXIT_ESC; + break; + default: + beep(); + break; + } + } + + return !done; +} + +/* + * Display text from a file in a dialog box, like in a "tail -f". + */ +int +dialog_tailbox(const char *title, const char *file, int height, int width, int bg_task) +{ + /* *INDENT-OFF* */ + static DLG_KEYS_BINDING binding[] = { + ENTERKEY_BINDINGS, + DLG_KEYS_DATA( DLGK_BEGIN, '0' ), + DLG_KEYS_DATA( DLGK_BEGIN, KEY_BEG ), + DLG_KEYS_DATA( DLGK_GRID_LEFT, 'H' ), + DLG_KEYS_DATA( DLGK_GRID_LEFT, 'h' ), + DLG_KEYS_DATA( DLGK_GRID_LEFT, KEY_LEFT ), + DLG_KEYS_DATA( DLGK_GRID_RIGHT, 'L' ), + DLG_KEYS_DATA( DLGK_GRID_RIGHT, 'l' ), + DLG_KEYS_DATA( DLGK_GRID_RIGHT, KEY_RIGHT ), + END_KEYS_BINDING + }; + /* *INDENT-ON* */ + +#ifdef KEY_RESIZE + int old_height = height; + int old_width = width; +#endif + int fkey; + int x, y, result, thigh; + WINDOW *dialog, *text; + const char **buttons = 0; + MY_OBJ *obj; + FILE *fd; + int min_width = 12; + + /* Open input file for reading */ + if ((fd = fopen(file, "rb")) == NULL) + dlg_exiterr("Can't open input file in dialog_tailbox()."); + +#ifdef KEY_RESIZE + retry: +#endif + dlg_auto_sizefile(title, file, &height, &width, 2, min_width); + dlg_print_size(height, width); + dlg_ctl_size(height, width); + + x = dlg_box_x_ordinate(width); + y = dlg_box_y_ordinate(height); + thigh = height - ((2 * MARGIN) + (bg_task ? 0 : 2)); + + dialog = dlg_new_window(height, width, y, x); + + dlg_mouse_setbase(x, y); + + /* Create window for text region, used for scrolling text */ + text = dlg_sub_window(dialog, + thigh, + width - (2 * MARGIN), + y + MARGIN, + x + MARGIN); + + dlg_draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); + dlg_draw_bottom_box(dialog); + dlg_draw_title(dialog, title); + + if (!bg_task) { + buttons = dlg_exit_label(); + dlg_button_layout(buttons, &min_width); + dlg_draw_buttons(dialog, height - (2 * MARGIN), 0, buttons, FALSE, + FALSE, width); + } + + (void) wmove(dialog, thigh, (MARGIN + 1)); + (void) wnoutrefresh(dialog); + + obj = dlg_calloc(MY_OBJ, 1); + assert_ptr(obj, "dialog_tailbox"); + + obj->obj.input = fd; + obj->obj.win = dialog; + obj->obj.handle_getc = handle_my_getc; + obj->obj.keep_bg = bg_task && dialog_vars.cant_kill; + obj->obj.bg_task = bg_task; + obj->text = text; + obj->buttons = buttons; + dlg_add_callback(&(obj->obj)); + + dlg_register_window(dialog, "tailbox", binding); + dlg_register_buttons(dialog, "tailbox", buttons); + + /* Print last page of text */ + dlg_attr_clear(text, thigh, getmaxx(text), dialog_attr); + repaint_text(obj); + + if (bg_task) { + result = DLG_EXIT_OK; + } else { + int ch; + do { + ch = dlg_getc(dialog, &fkey); +#ifdef KEY_RESIZE + if (fkey && ch == KEY_RESIZE) { + /* reset data */ + height = old_height; + width = old_width; + /* repaint */ + dlg_clear(); + dlg_del_window(dialog); + refresh(); + dlg_mouse_free_regions(); + dlg_button_layout(buttons, &min_width); + goto retry; + } +#endif + } + while (handle_my_getc(&(obj->obj), ch, fkey, &result)); + } + dlg_mouse_free_regions(); + return result; +} Index: contrib/dialog/dialog.h =================================================================== --- contrib/dialog/dialog.h (revision 0) +++ contrib/dialog/dialog.h (revision 0) @@ -0,0 +1,784 @@ +/* + * $Id: dialog.h,v 1.214 2010/04/28 21:11:49 tom Exp $ + * + * dialog.h -- common declarations for all dialog modules + * + * Copyright 2000-2008,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + * + * An earlier version of this program lists as authors + * Savio Lam (lam836@cs.cuhk.hk) + */ + +#ifndef DIALOG_H_included +#define DIALOG_H_included 1 + +#include <dlg_config.h> + +#ifdef __hpux +#define __HP_CURSES_COMPAT /* workaround for getattrs, etc. */ +#endif + +#include <sys/types.h> +#include <fcntl.h> +#include <unistd.h> +#include <ctype.h> +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <signal.h> /* fork() etc. */ +#include <math.h> /* sqrt() */ + +#if defined(HAVE_NCURSESW_NCURSES_H) +#include <ncursesw/ncurses.h> +#elif defined(HAVE_NCURSES_NCURSES_H) +#include <ncurses/ncurses.h> +#elif defined(HAVE_NCURSES_CURSES_H) +#include <ncurses/curses.h> +#elif defined(HAVE_NCURSES_H) +#include <ncurses.h> +#else +#include <curses.h> +#endif + +/* most curses.h headers include this, some do not */ +#if defined(HAVE_UNCTRL_H) +#include <unctrl.h> +#endif + +/* possible conflicts with <term.h> which may be included in <curses.h> */ +#ifdef color_names +#undef color_names +#endif + +#ifdef buttons +#undef buttons +#endif + +#ifdef ENABLE_NLS +#include <libintl.h> +#include <langinfo.h> +#define _(s) dgettext(PACKAGE, s) +#else +#undef _ +#define _(s) s +#endif + +#ifndef GCC_NORETURN +#define GCC_NORETURN /*nothing*/ +#endif + +#ifndef GCC_UNUSED +#define GCC_UNUSED /*nothing*/ +#endif + +#ifndef HAVE_WGET_WCH +#undef USE_WIDE_CURSES +#endif + +/* + * FIXME: a configure check would be useful + */ +#ifdef __hpux +#undef ACS_UARROW +#undef ACS_DARROW +#undef ACS_BLOCK +#endif + +/* + * Change these if you want + */ +#define USE_SHADOW TRUE +#define USE_COLORS TRUE + +#ifdef HAVE_COLOR +#define SCOLS (COLS - (dialog_state.use_shadow ? 2 : 0)) +#define SLINES (LINES - (dialog_state.use_shadow ? 1 : 0)) +#else +#define SCOLS COLS +#define SLINES LINES +#endif + +#define DLG_EXIT_ESC 255 +#define DLG_EXIT_UNKNOWN -2 /* never return this (internal use) */ +#define DLG_EXIT_ERROR -1 /* the shell sees this as 255 */ +#define DLG_EXIT_OK 0 +#define DLG_EXIT_CANCEL 1 +#define DLG_EXIT_HELP 2 +#define DLG_EXIT_EXTRA 3 +#define DLG_EXIT_ITEM_HELP 4 /* actually DLG_EXIT_HELP */ + +#define DLG_CTRL(n) ((n) & 0x1f) /* CTRL is preferred, but conflicts */ + +#define CHR_BACKSPACE DLG_CTRL('H') +#define CHR_REPAINT DLG_CTRL('L') +#define CHR_KILL DLG_CTRL('U') +#define CHR_LITERAL DLG_CTRL('V') +#define CHR_DELETE 127 +#define CHR_NEXT DLG_CTRL('N') +#define CHR_PREVIOUS DLG_CTRL('P') +#define CHR_TRACE DLG_CTRL('T') + +#define ESC 27 +#define TAB DLG_CTRL('I') + +#define MARGIN 1 +#define GUTTER 2 +#define SHADOW_ROWS 1 +#define SHADOW_COLS 2 +#define ARROWS_COL 5 + +#define MAX_LEN 2048 +#define BUF_SIZE (10*1024) + +#undef MIN +#define MIN(x,y) ((x) < (y) ? (x) : (y)) + +#undef MAX +#define MAX(x,y) ((x) > (y) ? (x) : (y)) + +#define DEFAULT_SEPARATE_STR "\t" +#define DEFAULT_ASPECT_RATIO 9 +/* how many spaces is a tab long (default)? */ +#define TAB_LEN 8 +#define WTIMEOUT_VAL 10 + +#ifndef A_CHARTEXT +#define A_CHARTEXT 0xff +#endif + +#define CharOf(ch) ((ch) & 0xff) + +#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 +#ifndef ACS_BLOCK +#define ACS_BLOCK '#' +#endif + +/* these definitions may work for antique versions of curses */ +#ifndef HAVE_GETBEGYX +#undef getbegyx +#define getbegyx(win,y,x) (y = (win)?(win)->_begy:ERR, x = (win)?(win)->_begx:ERR) +#endif + +#ifndef HAVE_GETMAXYX +#undef getmaxyx +#define getmaxyx(win,y,x) (y = (win)?(win)->_maxy:ERR, x = (win)?(win)->_maxx:ERR) +#endif + +#ifndef HAVE_GETPARYX +#undef getparyx +#define getparyx(win,y,x) (y = (win)?(win)->_pary:ERR, x = (win)?(win)->_parx:ERR) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* these definitions may be needed for bleeding-edge curses implementations */ +#if !(defined(HAVE_GETBEGX) && defined(HAVE_GETBEGY)) +#undef getbegx +#undef getbegy +#define getbegx(win) dlg_getbegx(win) +#define getbegy(win) dlg_getbegy(win) +extern int dlg_getbegx(WINDOW * /*win*/); +extern int dlg_getbegy(WINDOW * /*win*/); +#endif + +#if !(defined(HAVE_GETCURX) && defined(HAVE_GETCURY)) +#undef getcurx +#undef getcury +#define getcurx(win) dlg_getcurx(win) +#define getcury(win) dlg_getcury(win) +extern int dlg_getcurx(WINDOW * /*win*/); +extern int dlg_getcury(WINDOW * /*win*/); +#endif + +#if !(defined(HAVE_GETMAXX) && defined(HAVE_GETMAXY)) +#undef getmaxx +#undef getmaxy +#define getmaxx(win) dlg_getmaxx(win) +#define getmaxy(win) dlg_getmaxy(win) +extern int dlg_getmaxx(WINDOW * /*win*/); +extern int dlg_getmaxy(WINDOW * /*win*/); +#endif + +#if !(defined(HAVE_GETPARX) && defined(HAVE_GETPARY)) +#undef getparx +#undef getpary +#define getparx(win) dlg_getparx(win) +#define getpary(win) dlg_getpary(win) +extern int dlg_getparx(WINDOW * /*win*/); +extern int dlg_getpary(WINDOW * /*win*/); +#endif + +/* + * This is a list of "old" names, which should be helpful in updating + * applications that use libdialog. Starting with 2003/11/26, all exported + * symbols from libdialog have "dlg_" prefix, or "dialog_" prefix or "_dialog" + * suffix (or suffix "_dialog", e.g., init_dialog). + */ +#ifdef __DIALOG_OLD_NAMES__ +#define color_table dlg_color_table +#define attr_clear(win,h,w,a) dlg_attr_clear(win,h,w,a) +#define auto_size(t,s,h,w,xl,mc) dlg_auto_size(t,s,h,w,xl,mc) +#define auto_sizefile(t,f,h,w,xl,mc) dlg_auto_sizefile(t,f,h,w,xl,mc) +#define beeping() dlg_beeping() +#define box_x_ordinate(w) dlg_box_x_ordinate(w) +#define box_y_ordinate(h) dlg_box_y_ordinate(h) +#define calc_listh(h,lh,in) dlg_calc_listh(h,lh,in) +#define calc_listw(in,items,group) dlg_calc_listw(in,items,group) +#define color_setup() dlg_color_setup() +#define create_rc(f) dlg_create_rc(f) +#define ctl_size(h,w) dlg_ctl_size(h,w) +#define del_window(win) dlg_del_window(win) +#define dialog_clear() dlg_clear() +#define draw_bottom_box(win) dlg_draw_bottom_box(win) +#define draw_box(win,y,x,h,w,xc,bc) dlg_draw_box(win,y,x,h,w,xc,bc) +#define draw_shadow(win,h,w,y,x) dlg_draw_shadow(win,h,w,y,x) +#define draw_title(win,t) dlg_draw_title(win,t) +#define exiterr dlg_exiterr +#define killall_bg(n) dlg_killall_bg(n) +#define mouse_bigregion(y,x) dlg_mouse_bigregion(y,x) +#define mouse_free_regions() dlg_mouse_free_regions() +#define mouse_mkbigregion(y,x,h,w,n,ix,iy,m) dlg_mouse_mkbigregion(y,x,h,w,n,ix,iy,m) +#define mouse_mkregion(y,x,h,w,n) dlg_mouse_mkregion(y,x,h,w,n) +#define mouse_region(y,x) dlg_mouse_region(y,x) +#define mouse_setbase(x,y) dlg_mouse_setbase(x,y) +#define mouse_wgetch(w,c) dlg_mouse_wgetch(w,c) +#define new_window(h,w,y,x) dlg_new_window(h,w,y,x) +#define parse_rc() dlg_parse_rc() +#define print_autowrap(win,s,h,w) dlg_print_autowrap(win,s,h,w) +#define print_size(h,w) dlg_print_size(h,w) +#define put_backtitle() dlg_put_backtitle() +#define strclone(cprompt) dlg_strclone(cprompt) +#define sub_window(win,h,w,y,x) dlg_sub_window(win,h,w,y,x) +#define tab_correct_str(s) dlg_tab_correct_str(s) +#endif + +/* + * Attribute names + */ +#define DIALOG_ATR(n) dlg_color_table[n].atr + +#define screen_attr DIALOG_ATR(0) +#define shadow_attr DIALOG_ATR(1) +#define dialog_attr DIALOG_ATR(2) +#define title_attr DIALOG_ATR(3) +#define border_attr DIALOG_ATR(4) +#define button_active_attr DIALOG_ATR(5) +#define button_inactive_attr DIALOG_ATR(6) +#define button_key_active_attr DIALOG_ATR(7) +#define button_key_inactive_attr DIALOG_ATR(8) +#define button_label_active_attr DIALOG_ATR(9) +#define button_label_inactive_attr DIALOG_ATR(10) +#define inputbox_attr DIALOG_ATR(11) +#define inputbox_border_attr DIALOG_ATR(12) +#define searchbox_attr DIALOG_ATR(13) +#define searchbox_title_attr DIALOG_ATR(14) +#define searchbox_border_attr DIALOG_ATR(15) +#define position_indicator_attr DIALOG_ATR(16) +#define menubox_attr DIALOG_ATR(17) +#define menubox_border_attr DIALOG_ATR(18) +#define item_attr DIALOG_ATR(19) +#define item_selected_attr DIALOG_ATR(20) +#define tag_attr DIALOG_ATR(21) +#define tag_selected_attr DIALOG_ATR(22) +#define tag_key_attr DIALOG_ATR(23) +#define tag_key_selected_attr DIALOG_ATR(24) +#define check_attr DIALOG_ATR(25) +#define check_selected_attr DIALOG_ATR(26) +#define uarrow_attr DIALOG_ATR(27) +#define darrow_attr DIALOG_ATR(28) +#define itemhelp_attr DIALOG_ATR(29) +#define form_active_text_attr DIALOG_ATR(30) +#define form_text_attr DIALOG_ATR(31) +#define form_item_readonly_attr DIALOG_ATR(32) + +#define DLGK_max (KEY_MAX + 256) + +/* + * Callbacks are used to implement the "background" tailbox. + */ +struct _dlg_callback; + +typedef void (*DIALOG_FREEBACK) (struct _dlg_callback * /* p */); + +typedef struct _dlg_callback { + struct _dlg_callback *next; + FILE *input; + WINDOW *win; + bool keep_bg; /* keep in background, on exit */ + bool bg_task; /* true if this is background task */ + bool (*handle_getc)(struct _dlg_callback *p, int ch, int fkey, int *result); + bool keep_win; /* true to not erase window on exit */ + /* data for dlg_add_callback_ref */ + struct _dlg_callback **caller; + DIALOG_FREEBACK freeback; +} DIALOG_CALLBACK; + +typedef struct _dlg_windows { + struct _dlg_windows *next; + WINDOW *normal; + WINDOW *shadow; +} DIALOG_WINDOWS; + +/* + * Global variables, which are initialized as needed + */ +typedef struct { + DIALOG_CALLBACK *getc_callbacks; + DIALOG_CALLBACK *getc_redirect; + DIALOG_WINDOWS *all_windows; + FILE *output; /* option "--output-fd fd" */ + FILE *pipe_input; /* used for gauge widget */ + FILE *screen_output; /* newterm(), etc. */ + bool screen_initialized; + bool use_colors; /* use colors by default? */ + bool use_scrollbar; /* option "--scrollbar" */ + bool use_shadow; /* shadow dialog boxes by default? */ + bool visit_items; /* option "--visit-items" */ + char *separate_str; /* option "--separate-widget string" */ + int aspect_ratio; /* option "--aspect ratio" */ + int output_count; /* # of widgets that may have done output */ + int tab_len; /* option "--tab-len n" */ + /* 1.0-20070227 */ + FILE *input; /* option "--input-fd fd" */ +#ifdef HAVE_DLG_TRACE + FILE *trace_output; /* option "--trace file" */ +#endif +} DIALOG_STATE; + +extern DIALOG_STATE dialog_state; + +/* + * Global variables, which dialog resets before each widget + */ +typedef struct { + bool beep_after_signal; /* option "--beep-after" */ + bool beep_signal; /* option "--beep" */ + bool begin_set; /* option "--begin y x" was used */ + bool cant_kill; /* option "--no-kill" */ + bool colors; /* option "--colors" */ + bool cr_wrap; /* option "--cr-wrap" */ + bool defaultno; /* option "--defaultno" */ + bool dlg_clear_screen; /* option "--clear" */ + bool extra_button; /* option "--extra-button" */ + bool help_button; /* option "--help-button" */ + bool help_status; /* option "--help-status" */ + bool input_menu; /* menu vs inputmenu widget */ + bool insecure; /* option "--insecure" */ + bool item_help; /* option "--item-help" */ + bool keep_window; /* option "--keep-window" */ + bool nocancel; /* option "--no-cancel" */ + bool nocollapse; /* option "--no-collapse" */ + bool print_siz; /* option "--print-size" */ + bool separate_output; /* option "--separate-output" */ + bool single_quoted; /* option "--single-quoted" */ + bool size_err; /* option "--size-err" */ + bool tab_correct; /* option "--tab-correct" */ + bool trim_whitespace; /* option "--trim" */ + char *backtitle; /* option "--backtitle backtitle" */ + char *cancel_label; /* option "--cancel-label string" */ + char *default_item; /* option "--default-item string" */ + char *exit_label; /* option "--exit-label string" */ + char *extra_label; /* option "--extra-label string" */ + char *help_label; /* option "--help-label string" */ + char *input_result; + char *no_label; /* option "--no-label string" */ + char *ok_label; /* option "--ok-label string" */ + char *title; /* option "--title title" */ + char *yes_label; /* option "--yes-label string" */ + int begin_x; /* option "--begin y x" (second value) */ + int begin_y; /* option "--begin y x" (first value) */ + int max_input; /* option "--max-input size" */ + int scale_factor; /* RESERVED */ + int sleep_secs; /* option "--sleep secs" */ + int timeout_secs; /* option "--timeout secs" */ + unsigned input_length; /* nonzero if input_result is allocated */ + /* 1.0-20051207 */ + unsigned formitem_type; /* DIALOG_FORMITEM.type in dialog_form() */ + /* 1.1-20070227 */ + bool keep_tite; /* option "--keep-tite" */ + bool ascii_lines; /* option "--ascii-lines" */ + bool no_lines; /* option "--no-lines" */ + /* 1.1-20070930 */ + bool nook; /* option "--no-ok" */ + /* 1.1-20080727 */ + bool quoted; /* option "--quoted" */ + char *column_header; /* RESERVED "--column-header" */ + char *column_separator; /* option "--column-separator" */ + char *output_separator; /* option "--output-separator" */ + /* 1.1-20100118 */ + char *date_format; /* option "--date-format" */ + char *time_format; /* option "--time-format" */ +} DIALOG_VARS; + +#define USE_ITEM_HELP(s) (dialog_vars.item_help && (s) != 0) +#define CHECKBOX_TAGS (dialog_vars.item_help ? 4 : 3) +#define MENUBOX_TAGS (dialog_vars.item_help ? 3 : 2) +#define FORMBOX_TAGS (dialog_vars.item_help ? 9 : 8) +#define MIXEDFORM_TAGS (FORMBOX_TAGS + 1) +#define MIXEDGAUGE_TAGS 2 + +extern DIALOG_VARS dialog_vars; + +#ifndef HAVE_TYPE_CHTYPE +#define chtype long +#endif + +#define UCH(ch) ((unsigned char)(ch)) + +#define assert_ptr(ptr,msg) if ((ptr) == 0) dlg_exiterr("cannot allocate memory in " msg) + +#define dlg_malloc(t,n) (t *) malloc((n) * sizeof(t)) +#define dlg_calloc(t,n) (t *) calloc((n), sizeof(t)) +#define dlg_realloc(t,n,p) (t *) realloc((p), (n) * sizeof(t)) + +/* + * Table for attribute- and color-values. + */ +typedef struct { + chtype atr; +#ifdef HAVE_COLOR + int fg; + int bg; + int hilite; +#endif +#ifdef HAVE_RC_FILE + const char *name; + const char *comment; +#endif +} DIALOG_COLORS; + +extern DIALOG_COLORS dlg_color_table[]; + +/* + * Function prototypes + */ +extern const char *dialog_version(void); + +/* widgets, each in separate files */ +extern int dialog_calendar(const char * /*title*/, const char * /*subtitle*/, int /*height*/, int /*width*/, int /*day*/, int /*month*/, int /*year*/); +extern int dialog_checklist(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*list_height*/, int /*item_no*/, char ** /*items*/, int /*flag*/); +extern int dialog_dselect(const char * /*title*/, const char * /*path*/, int /*height*/, int /*width*/); +extern int dialog_editbox(const char * /*title*/, const char * /*file*/, int /*height*/, int /*width*/); +extern int dialog_form(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*form_height*/, int /*item_no*/, char ** /*items*/); +extern int dialog_fselect(const char * /*title*/, const char * /*path*/, int /*height*/, int /*width*/); +extern int dialog_gauge(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*percent*/); +extern int dialog_inputbox(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, const char * /*init*/, const int /*password*/); +extern int dialog_menu(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*menu_height*/, int /*item_no*/, char ** /*items*/); +extern int dialog_mixedform(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*form_height*/, int /*item_no*/, char ** /*items*/); +extern int dialog_mixedgauge(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*percent*/, int /*item_no*/, char ** /*items*/); +extern int dialog_msgbox(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*pauseopt*/); +extern int dialog_pause(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*seconds*/); +extern int dialog_progressbox(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/); +extern int dialog_tailbox(const char * /*title*/, const char * /*file*/, int /*height*/, int /*width*/, int /*bg_task*/); +extern int dialog_textbox(const char * /*title*/, const char * /*file*/, int /*height*/, int /*width*/); +extern int dialog_timebox(const char * /*title*/, const char * /*subtitle*/, int /*height*/, int /*width*/, int /*hour*/, int /*minute*/, int /*second*/); +extern int dialog_yesno(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/); + +/* some widgets have alternate entrypoints, to allow list manipulation */ +typedef struct { + char *name; + char *text; + char *help; + int state; +} DIALOG_LISTITEM; + +typedef struct { + unsigned type; /* the field type (0=input, 1=password) */ + char *name; /* the field label */ + int name_len; /* ...its length */ + int name_y; /* ...its y-ordinate */ + int name_x; /* ...its x-ordinate */ + bool name_free; /* ...true if .name can be freed */ + char *text; /* the field contents */ + int text_len; /* ...its length on the screen */ + int text_y; /* ...its y-ordinate */ + int text_x; /* ...its x-ordinate */ + int text_flen; /* ...its length on screen, or 0 if no input allowed */ + int text_ilen; /* ...its limit on amount to be entered */ + bool text_free; /* ...true if .text can be freed */ + char *help; /* help-message, if any */ + bool help_free; /* ...true if .help can be freed */ +} DIALOG_FORMITEM; + +typedef int (DIALOG_INPUTMENU) (DIALOG_LISTITEM * /*items*/, int /*current*/, char * /*newtext*/); + +extern int dlg_checklist(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*list_height*/, int /*item_no*/, DIALOG_LISTITEM * /*items*/, const char * /*states*/, int /*flag*/, int * /*current_item*/); +extern int dlg_form(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*form_height*/, int /*item_no*/, DIALOG_FORMITEM * /*items*/, int * /*current_item*/); +extern int dlg_menu(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*menu_height*/, int /*item_no*/, DIALOG_LISTITEM * /*items*/, int * /*current_item*/, DIALOG_INPUTMENU /*rename_menu*/); + +/* arrows.c */ +extern void dlg_draw_arrows(WINDOW * /*dialog*/, int /*top_arrow*/, int /*bottom_arrow*/, int /*x*/, int /*top*/, int /*bottom*/); +extern void dlg_draw_arrows2(WINDOW * /*dialog*/, int /*top_arrow*/, int /*bottom_arrow*/, int /*x*/, int /*top*/, int /*bottom*/, chtype /*attr*/, chtype /*borderattr*/); +extern void dlg_draw_scrollbar(WINDOW * /*dialog*/, long /* first_data */, long /* this_data */, long /* next_data */, long /* total_data */, int /* left */, int /* right */, int /*top*/, int /*bottom*/, chtype /*attr*/, chtype /*borderattr*/); + +/* buttons.c */ +extern const char ** dlg_exit_label(void); +extern const char ** dlg_ok_label(void); +extern const char ** dlg_ok_labels(void); +extern const char ** dlg_yes_labels(void); +extern int dlg_button_count(const char ** /*labels*/); +extern int dlg_button_to_char(const char * /*label*/); +extern int dlg_button_x_step(const char ** /*labels*/, int /*limit*/, int * /*gap*/, int * /*margin*/, int * /*step*/); +extern int dlg_char_to_button(int /*ch*/, const char ** /*labels*/); +extern int dlg_exit_buttoncode(int /*button*/); +extern int dlg_match_char(int /*ch*/, const char * /*string*/); +extern int dlg_next_button(const char ** /*labels*/, int /*button*/); +extern int dlg_next_ok_buttonindex(int /*current*/, int /*extra*/); +extern int dlg_ok_buttoncode(int /*button*/); +extern int dlg_prev_button(const char ** /*labels*/, int /*button*/); +extern int dlg_prev_ok_buttonindex(int /*current*/, int /*extra*/); +extern int dlg_yes_buttoncode(int /*button*/); +extern void dlg_button_layout(const char ** /*labels*/, int * /*limit*/); +extern void dlg_button_sizes(const char ** /*labels*/, int /*vertical*/, int * /*longest*/, int * /*length*/); +extern void dlg_draw_buttons(WINDOW * /*win*/, int /*y*/, int /*x*/, const char ** /*labels*/, int /*selected*/, int /*vertical*/, int /*limit*/); + +/* columns.c */ +extern void dlg_align_columns(char ** /* target */, int /* per_row */, int /* num_rows */); +extern void dlg_free_columns(char ** /* target */, int /* per_row */, int /* num_rows */); + +/* editbox.c */ +extern int dlg_editbox(const char */*title*/, char ***/*list*/, int */*rows*/, int /*height*/, int /*width*/); + +/* formbox.c */ +extern int dlg_default_formitem(DIALOG_FORMITEM * /*items*/); +extern int dlg_ordinate(const char * /*s*/); +extern void dlg_free_formitems(DIALOG_FORMITEM * /*items*/); + +/* inputstr.c */ +extern bool dlg_edit_string(char * /*string*/, int * /*offset*/, int /*key*/, int /*fkey*/, bool /*force*/); +extern const int * dlg_index_columns(const char * /*string*/); +extern const int * dlg_index_wchars(const char * /*string*/); +extern int dlg_count_columns(const char * /*string*/); +extern int dlg_count_wchars(const char * /*string*/); +extern int dlg_edit_offset(char * /*string*/, int /*offset*/, int /*x_last*/); +extern int dlg_find_index(const int * /*list*/, int /*limit*/, int /*to_find*/); +extern int dlg_limit_columns(const char * /*string*/, int /*limit*/, int /*offset*/); +extern void dlg_show_string(WINDOW * /*win*/, const char * /*string*/, int /*offset*/, chtype /*attr*/, int /*y_base*/, int /*x_base*/, int /*x_last*/, bool /*hidden*/, bool /*force*/); + +/* rc.c */ +#ifdef HAVE_RC_FILE +extern int dlg_parse_rc(void); +extern void dlg_create_rc(const char * /*filename*/); +#endif + +/* ui_getc.c */ +extern int dlg_getc(WINDOW * /*win*/, int * /*fkey*/); +extern int dlg_getc_callbacks(int /*ch*/, int /*fkey*/, int * /*result*/); +extern int dlg_last_getc(void); +extern void dlg_add_callback(DIALOG_CALLBACK * /*p*/); +extern void dlg_add_callback_ref(DIALOG_CALLBACK ** /*p*/, DIALOG_FREEBACK /* cleanup */); +extern void dlg_flush_getc(void); +extern void dlg_remove_callback(DIALOG_CALLBACK * /*p*/); +extern void dlg_killall_bg(int *retval); + +/* util.c */ +extern WINDOW * dlg_new_modal_window(WINDOW * /*parent*/, int /*height*/, int /*width*/, int /*y*/, int /*x*/); +extern WINDOW * dlg_new_window(int /*height*/, int /*width*/, int /*y*/, int /*x*/); +extern WINDOW * dlg_sub_window(WINDOW * /*win*/, int /*height*/, int /*width*/, int /*y*/, int /*x*/); +extern bool dlg_need_separator(void); +extern char * dlg_set_result(const char * /*string*/); +extern char * dlg_strclone(const char * /*cprompt*/); +extern char * dlg_strempty(void); +extern chtype dlg_asciibox(chtype /*ch*/); +extern chtype dlg_boxchar(chtype /*ch*/); +extern const char * dlg_print_line(WINDOW */*win*/, chtype */*attr*/, const char */*prompt*/, int /*lm*/, int /*rm*/, int */*x*/); +extern int dlg_box_x_ordinate(int /*width*/); +extern int dlg_box_y_ordinate(int /*height*/); +extern int dlg_calc_list_width(int /*item_no*/, DIALOG_LISTITEM * /*items*/); +extern int dlg_calc_listw(int /*item_no*/, char ** /*items*/, int /*group*/); +extern int dlg_check_scrolled(int /* key */, int /* last */, int /* page */, bool */* show */, int */* offset */); +extern int dlg_default_item(char ** /*items*/, int /*llen*/); +extern int dlg_default_listitem(DIALOG_LISTITEM * /*items*/); +extern int dlg_defaultno_button(void); +extern int dlg_max_input(int /*max_len*/); +extern int dlg_print_scrolled(WINDOW * /* win */, const char * /* prompt */, int /* offset */, int /* height */, int /* width */, int /* pauseopt */); +extern void dlg_add_quoted(char * /*string*/); +extern void dlg_add_result(const char * /*string*/); +extern void dlg_add_separator(void); +extern void dlg_add_string(char * /*string*/); +extern void dlg_attr_clear(WINDOW * /*win*/, int /*height*/, int /*width*/, chtype /*attr*/); +extern void dlg_auto_size(const char * /*title*/, const char * /*prompt*/, int * /*height*/, int * /*width*/, int /*boxlines*/, int /*mincols*/); +extern void dlg_auto_sizefile(const char * /*title*/, const char * /*file*/, int * /*height*/, int * /*width*/, int /*boxlines*/, int /*mincols*/); +extern void dlg_beeping(void); +extern void dlg_calc_listh(int * /*height*/, int * /*list_height*/, int /*item_no*/); +extern void dlg_clear(void); +extern void dlg_clr_result(void); +extern void dlg_ctl_size(int /*height*/, int /*width*/); +extern void dlg_del_window(WINDOW * /*win*/); +extern void dlg_does_output(void); +extern void dlg_draw_bottom_box(WINDOW * /*win*/); +extern void dlg_draw_box(WINDOW * /*win*/, int /*y*/, int /*x*/, int /*height*/, int /*width*/, chtype /*boxchar*/, chtype /*borderchar*/); +extern void dlg_draw_title(WINDOW *win, const char *title); +extern void dlg_exit(int /*code*/) GCC_NORETURN; +extern void dlg_item_help(const char * /*txt*/); +extern void dlg_print_autowrap(WINDOW * /*win*/, const char * /*prompt*/, int /*height*/, int /*width*/); +extern void dlg_print_size(int /*height*/, int /*width*/); +extern void dlg_print_text(WINDOW * /*win*/, const char * /*txt*/, int /*len*/, chtype * /*attr*/); +extern void dlg_put_backtitle(void); +extern void dlg_restore_vars(DIALOG_VARS * /* save */); +extern void dlg_save_vars(DIALOG_VARS * /* save */); +extern void dlg_set_focus(WINDOW * /*parent*/, WINDOW * /*win*/); +extern void dlg_tab_correct_str(char * /*prompt*/); +extern void dlg_trim_string(char * /*src*/); +extern void end_dialog(void); +extern void init_dialog(FILE * /*input*/, FILE * /*output*/); + +extern void dlg_exiterr(const char *, ...) GCC_NORETURN +#if defined(__GNUC__) && !defined(printf) +__attribute__((format(printf,1,2))) +#endif +; + +#ifdef HAVE_COLOR +extern chtype dlg_color_pair(int /*foreground*/, int /*background*/); +extern int dlg_color_count(void); +extern void dlg_color_setup(void); +extern void dlg_draw_shadow(WINDOW * /*win*/, int /*height*/, int /*width*/, int /*y*/, int /*x*/); +#endif + +#ifdef HAVE_STRCASECMP +#define dlg_strcmp(a,b) strcasecmp(a,b) +#else +extern int dlg_strcmp(const char * /*a*/, const char * /*b*/); +#endif + +#ifdef HAVE_DLG_TRACE +#define DLG_TRACE(params) dlg_trace_msg params +extern void dlg_trace_msg(const char *fmt, ...) +#ifdef GCC_PRINTF + __attribute__((format(printf,1,2))) +#endif +; +extern void dlg_trace_win(WINDOW * /*win*/); +extern void dlg_trace_chr(int /*ch*/, int /*fkey*/); +extern void dlg_trace(const char * /*fname*/); +#else +#define DLG_TRACE(params) /* nothing */ +#define dlg_trace_win(win) /* nothing */ +#define dlg_trace_chr(ch,fkey) /* nothing */ +#define dlg_trace(fname) /* nothing */ +#endif + +#ifdef KEY_RESIZE +extern void dlg_move_window(WINDOW * /*win*/, int /*height*/, int /*width*/, int /*y*/, int /*x*/); +#endif + +/* + * The following stuff is needed for mouse support + */ +typedef struct mseRegion { + int x, y, X, Y, code; + int mode, step_x, step_y; + struct mseRegion *next; +} mseRegion; + +#if defined(NCURSES_MOUSE_VERSION) + +#define mouse_open() mousemask(BUTTON1_CLICKED, (mmask_t *) 0) +#define mouse_close() mousemask(0, (mmask_t *) 0) + +extern mseRegion * dlg_mouse_mkregion (int /*y*/, int /*x*/, int /*height*/, int /*width*/, int /*code*/); +extern void dlg_mouse_free_regions (void); +extern void dlg_mouse_mkbigregion (int /*y*/, int /*x*/, int /*height*/, int /*width*/, int /*code*/, int /*step_x*/, int /*step_y*/, int /*mode*/); +extern void dlg_mouse_setbase (int /*x*/, int /*y*/); + +#define USE_MOUSE 1 + +#else + +#define mouse_open() /*nothing*/ +#define mouse_close() /*nothing*/ +#define dlg_mouse_free_regions() /* nothing */ +#define dlg_mouse_mkregion(y, x, height, width, code) /*nothing*/ +#define dlg_mouse_mkbigregion(y, x, height, width, code, step_x, step_y, mode) /*nothing*/ +#define dlg_mouse_setbase(x, y) /*nothing*/ + +#define USE_MOUSE 0 + +#endif + +extern mseRegion *dlg_mouse_region (int /*y*/, int /*x*/); +extern mseRegion *dlg_mouse_bigregion (int /*y*/, int /*x*/); +extern int dlg_mouse_wgetch (WINDOW * /*win*/, int * /*fkey*/); +extern int dlg_mouse_wgetch_nowait (WINDOW * /*win*/, int * /*fkey*/); + +#define mouse_mkbutton(y,x,len,code) dlg_mouse_mkregion(y,x,1,len,code); + +/* + * 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' + * -- uppercase chars are used to invoke the button (M_EVENT + 'O') + */ +#define M_EVENT (DLGK_max + 1) + +/* + * The `flag' parameter in checklist is used to select between + * radiolist and checklist + */ +#define FLAG_CHECK 1 +#define FLAG_RADIO 0 + +/* + * This is used only for debugging (FIXME: should have a separate header). + */ +#ifdef NO_LEAKS +extern void _dlg_inputstr_leaks(void); +#if defined(NCURSES_VERSION) && defined(HAVE__NC_FREE_AND_EXIT) +extern void _nc_free_and_exit(int); /* nc_alloc.h normally not installed */ +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* DIALOG_H_included */ Index: contrib/dialog/VERSION =================================================================== --- contrib/dialog/VERSION (revision 0) +++ contrib/dialog/VERSION (revision 0) @@ -0,0 +1 @@ +7:1:0 1.1 20100428 Index: contrib/dialog/dlg_keys.h =================================================================== --- contrib/dialog/dlg_keys.h (revision 0) +++ contrib/dialog/dlg_keys.h (revision 0) @@ -0,0 +1,148 @@ +/* + * $Id: dlg_keys.h,v 1.24 2010/01/19 00:57:36 tom Exp $ + * + * dlg_keys.h -- runtime binding support for dialog + * + * Copyright 2005-2007,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + */ + +#ifndef DLG_KEYS_H_included +#define DLG_KEYS_H_included 1 + +#include <dialog.h> + +#ifdef USE_WIDE_CURSES +#include <wctype.h> +#define dlg_toupper(ch) towupper((wint_t)ch) +#define dlg_isupper(ch) iswupper((wint_t)ch) +#else +#define dlg_toupper(ch) toupper(ch) +#define dlg_isupper(ch) (isalpha(ch) && isupper(ch)) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + int is_function_key; + int curses_key; + int dialog_key; +} DLG_KEYS_BINDING; + +#define DLG_KEYS_DATA(dialog, curses) { curses >= KEY_MIN, curses, dialog } + +#define END_KEYS_BINDING { -1, 0, 0 } + +/* + * Define dialog's internal function-keys past the range used by curses. + */ +typedef enum { + DLGK_MIN = KEY_MAX + 1, + /* predefined buttons */ + DLGK_OK, + DLGK_CANCEL, + DLGK_EXTRA, + DLGK_HELP, + DLGK_ESC, + /* moving from screen to screen (pages) */ + DLGK_PAGE_FIRST, + DLGK_PAGE_LAST, + DLGK_PAGE_NEXT, + DLGK_PAGE_PREV, + /* moving within a list */ + DLGK_ITEM_FIRST, + DLGK_ITEM_LAST, + DLGK_ITEM_NEXT, + DLGK_ITEM_PREV, + /* moving from field to field (or buttons) */ + DLGK_FIELD_FIRST, + DLGK_FIELD_LAST, + DLGK_FIELD_NEXT, + DLGK_FIELD_PREV, + /* moving within a grid */ + DLGK_GRID_UP, + DLGK_GRID_DOWN, + DLGK_GRID_LEFT, + DLGK_GRID_RIGHT, + /* delete */ + DLGK_DELETE_LEFT, + DLGK_DELETE_RIGHT, + DLGK_DELETE_ALL, + /* special */ + DLGK_ENTER, + DLGK_BEGIN, + DLGK_FINAL, + DLGK_SELECT, + DLGK_TRACE +} DLG_KEYS_ENUM; + +#define is_DLGK_MOUSE(code) ((code) >= M_EVENT) +#define DLGK_MOUSE(code) ((code) + M_EVENT) + +#define ENTERKEY_BINDINGS \ + DLG_KEYS_DATA( DLGK_ENTER, '\n' ), \ + DLG_KEYS_DATA( DLGK_ENTER, '\r' ), \ + DLG_KEYS_DATA( DLGK_ENTER, KEY_ENTER ) + +/* ^U == 21 */ +#define INPUTSTR_BINDINGS \ + DLG_KEYS_DATA( DLGK_BEGIN, KEY_HOME ), \ + DLG_KEYS_DATA( DLGK_DELETE_ALL, CHR_KILL ), \ + DLG_KEYS_DATA( DLGK_DELETE_LEFT, CHR_BACKSPACE ), \ + DLG_KEYS_DATA( DLGK_DELETE_LEFT, KEY_BACKSPACE ), \ + DLG_KEYS_DATA( DLGK_DELETE_RIGHT, CHR_DELETE ), \ + DLG_KEYS_DATA( DLGK_DELETE_RIGHT, KEY_DC ), \ + DLG_KEYS_DATA( DLGK_FINAL, KEY_END ), \ + DLG_KEYS_DATA( DLGK_GRID_LEFT, KEY_LEFT ), \ + DLG_KEYS_DATA( DLGK_GRID_RIGHT, KEY_RIGHT ) + +#define SCROLLKEY_BINDINGS \ + DLG_KEYS_DATA( DLGK_GRID_DOWN, 'J' ), \ + DLG_KEYS_DATA( DLGK_GRID_DOWN, 'j' ), \ + DLG_KEYS_DATA( DLGK_GRID_DOWN, KEY_DOWN ), \ + DLG_KEYS_DATA( DLGK_GRID_UP, 'K' ), \ + DLG_KEYS_DATA( DLGK_GRID_UP, 'k' ), \ + DLG_KEYS_DATA( DLGK_GRID_UP, KEY_UP ), \ + DLG_KEYS_DATA( DLGK_PAGE_FIRST, 'g' ), \ + DLG_KEYS_DATA( DLGK_PAGE_FIRST, KEY_HOME ), \ + DLG_KEYS_DATA( DLGK_PAGE_LAST, 'G' ), \ + DLG_KEYS_DATA( DLGK_PAGE_LAST, KEY_END ), \ + DLG_KEYS_DATA( DLGK_PAGE_NEXT, 'F' ), \ + DLG_KEYS_DATA( DLGK_PAGE_NEXT, 'f' ), \ + DLG_KEYS_DATA( DLGK_PAGE_NEXT, KEY_NPAGE ), \ + DLG_KEYS_DATA( DLGK_PAGE_PREV, 'B' ), \ + DLG_KEYS_DATA( DLGK_PAGE_PREV, 'b' ), \ + DLG_KEYS_DATA( DLGK_PAGE_PREV, KEY_PPAGE ) + +extern int dlg_lookup_key(WINDOW * /*win*/, int /*curses_key*/, int * /*dialog_key*/); +extern int dlg_result_key(int /*dialog_key*/, int /*fkey*/, int * /*resultp*/); +extern void dlg_register_buttons(WINDOW * /*win*/, const char * /*name*/, const char ** /*buttons*/); +extern void dlg_register_window(WINDOW * /*win*/, const char * /*name*/, DLG_KEYS_BINDING * /*binding*/); +extern void dlg_unregister_window(WINDOW * /*win*/); + +#ifdef HAVE_RC_FILE +extern int dlg_parse_bindkey(char * /*params*/); +extern void dlg_dump_keys(FILE * /*fp*/); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* DLG_KEYS_H_included */ Index: contrib/dialog/headers-sh.in =================================================================== --- contrib/dialog/headers-sh.in (revision 0) +++ contrib/dialog/headers-sh.in (revision 0) @@ -0,0 +1,150 @@ +#! /bin/sh +# $Id: headers-sh.in,v 1.5 2007/07/05 00:20:18 tom Exp $ +############################################################################## +# Copyright (c) 2004,2007 Thomas E. Dickey # +# # +# Permission is hereby granted, free of charge, to any person obtaining a # +# copy of this software and associated documentation files (the "Software"), # +# to deal in the Software without restriction, including without limitation # +# the rights to use, copy, modify, merge, publish, distribute, distribute # +# with modifications, sublicense, and/or sell copies of the Software, and to # +# permit persons to whom the Software is furnished to do so, subject to the # +# following conditions: # +# # +# The above copyright notice and this permission notice shall be included in # +# all copies or substantial portions of the Software. # +# # +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # +# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # +# DEALINGS IN THE SOFTWARE. # +# # +# Except as contained in this notice, the name(s) of the above copyright # +# holders shall not be used in advertising or otherwise to promote the sale, # +# use or other dealings in this Software without prior written # +# authorization. # +############################################################################## +# +# Adjust includes for header files that reside in a subdirectory of +# /usr/include, etc. +# +# Parameters (the first case creates the sed script): +# $1 is the target directory +# $2 is the source directory +# or (the second case does the install, using the sed script): +# $1 is the script to use for installing +# $2 is the target directory +# $3 is the source directory +# $4 is the file to install, editing source/target/etc. + +PACKAGE=@PACKAGE@ +PKGNAME=@PACKAGE_PREFIX@ +CONFIGH=@PACKAGE_CONFIG@ + +TMPSED=headers.sed + +DIGIT=0123456789 +alpha=abcdefghijklmnopqrstuvwxyz +ALPHA=ABCDEFGHIJKLMNOPQRSTUVWXYZ + +alnum=_${DIGIT}${alpha} +ALNUM=_${DIGIT}${ALPHA} +MIXED=_${DIGIT}${ALPHA}${alpha} + +if test $# = 2 ; then + rm -f $TMPSED + DST=$1 + REF=$2 + LEAF=`basename $DST` + + # map the include-directory, if needed, to the subdirectory + case $DST in + /*/include/$LEAF) + END=`basename $DST` + for i in $REF/*.h + do + NAME=`basename $i` + echo "s/<$NAME>/<$END\/$NAME>/g" >> $TMPSED + done + ;; + *) + echo "" >> $TMPSED + ;; + esac + + # cannot do _this_ in -e options: + cat >headers.tmp <<EOF +s/^#[^ ][^ ]*// +s/[^'$MIXED']/ /g +s/[ ][ ]*/ /g +s/^ // +s/ $// +:split + h + s/ .*// + p + t next + b done +:next + x + s/^[^ ][^ ]* // + t split +:done +EOF + # pick up autoconf-style symbols used in the application's headers + for i in $REF/*.h + do + sed -e 's/^[ ][ ]*#[ ][ ]*/#/' $i \ + | egrep '^#(if|ifdef|ifndef|elif)' \ + | sed -f headers.tmp \ + | sort -u \ + | egrep '^(HAVE_|NEED_|NO_|ENABLE_|DISABLE_)' \ + | sed -e 's%^\(.*\)%s/\\<\1\\>/'${PKGNAME}'_\1/g%' >>$TMPSED + done + rm -f headers.tmp + + # pick up autoconf-defined symbols in the config.h file + for name in ` + egrep '^#define[ ][ ]*['$ALNUM']' $REF/$CONFIGH \ + | sed -e 's/^#define[ ][ ]*//' \ + -e 's/[ ].*//' \ + | egrep -v "^${PACKAGE}_" \ + | sort -u \ + | egrep -v "^${PKGNAME}_"` + do + echo "s/\\<$name\\>/${PKGNAME}_$name/g" >>$TMPSED + done + + # reduce the count if possible, since some old sed's limit is 100 lines + sort -u $TMPSED >headers.tmp + mv headers.tmp $TMPSED +else + PRG="" + while test $# != 3 + do + PRG="$PRG $1"; shift + done + + DST=$1 + REF=$2 + SRC=$3 + + SHOW=`basename $SRC` + TMPSRC=${TMPDIR-/tmp}/${SHOW}$$ + + echo " ... $SHOW" + test -f $REF/$SRC && SRC="$REF/$SRC" + + rm -f $TMPSRC + sed -f $TMPSED $SRC > $TMPSRC + NAME=`basename $SRC` + + # Just in case someone gzip'd manpages, remove the conflicting copy. + test -f $DST/$NAME.gz && rm -f $DST/$NAME.gz + + eval $PRG $TMPSRC $DST/$NAME + rm -f $TMPSRC +fi Property changes on: contrib/dialog/headers-sh.in ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/inputbox.c =================================================================== --- contrib/dialog/inputbox.c (revision 0) +++ contrib/dialog/inputbox.c (revision 0) @@ -0,0 +1,233 @@ +/* + * $Id: inputbox.c,v 1.64 2010/01/19 01:03:39 tom Exp $ + * + * inputbox.c -- implements the input box + * + * Copyright 2000-2009,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + * + * An earlier version of this program lists as authors: + * Savio Lam (lam836@cs.cuhk.hk) + */ + +#include <dialog.h> +#include <dlg_keys.h> + +#define sTEXT -1 + +#define NAVIGATE_BINDINGS \ + DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_DOWN ), \ + DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_RIGHT ), \ + DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), \ + DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), \ + DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_LEFT ), \ + DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_UP ) + +/* + * Display a dialog box for entering a string + */ +int +dialog_inputbox(const char *title, const char *cprompt, int height, int width, + const char *init, const int password) +{ + /* *INDENT-OFF* */ + static DLG_KEYS_BINDING binding[] = { + ENTERKEY_BINDINGS, + NAVIGATE_BINDINGS, + END_KEYS_BINDING + }; + static DLG_KEYS_BINDING binding2[] = { + INPUTSTR_BINDINGS, + ENTERKEY_BINDINGS, + NAVIGATE_BINDINGS, + END_KEYS_BINDING + }; + /* *INDENT-ON* */ + +#ifdef KEY_RESIZE + int old_height = height; + int old_width = width; +#endif + int xorg, yorg; + int x, y, box_y, box_x, box_width; + int show_buttons; + int col_offset = 0; + int chr_offset = 0; + int key, fkey, code; + int result = DLG_EXIT_UNKNOWN; + int state; + int first; + char *input; + WINDOW *dialog; + WINDOW *editor; + char *prompt = dlg_strclone(cprompt); + const char **buttons = dlg_ok_labels(); + + dlg_does_output(); + + dlg_tab_correct_str(prompt); + + /* Set up the initial value */ + input = dlg_set_result(init); + +#ifdef KEY_RESIZE + retry: +#endif + show_buttons = TRUE; + state = dialog_vars.defaultno ? dlg_defaultno_button() : sTEXT; + first = (state == sTEXT); + key = fkey = 0; + + if (init != NULL) { + dlg_auto_size(title, prompt, &height, &width, 5, + MIN(MAX(dlg_count_columns(init) + 7, 26), + SCOLS - (dialog_vars.begin_set ? + dialog_vars.begin_x : 0))); + chr_offset = (int) strlen(init); + } else { + dlg_auto_size(title, prompt, &height, &width, 5, 26); + } + dlg_button_layout(buttons, &width); + dlg_print_size(height, width); + dlg_ctl_size(height, width); + + xorg = dlg_box_x_ordinate(width); + yorg = dlg_box_y_ordinate(height); + + dialog = dlg_new_window(height, width, yorg, xorg); + dlg_register_window(dialog, "inputbox", binding); + dlg_register_buttons(dialog, "inputbox", buttons); + + dlg_mouse_setbase(xorg, yorg); + + dlg_draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); + dlg_draw_bottom_box(dialog); + dlg_draw_title(dialog, title); + + wattrset(dialog, dialog_attr); + dlg_print_autowrap(dialog, prompt, height, width); + + /* Draw the input field box */ + box_width = width - 6; + getyx(dialog, y, x); + box_y = y + 2; + box_x = (width - box_width) / 2; + dlg_mouse_mkregion(y + 1, box_x - 1, 3, box_width + 2, 'i'); + dlg_draw_box(dialog, y + 1, box_x - 1, 3, box_width + 2, + border_attr, dialog_attr); + + /* Make a window for the input-field, to associate bindings */ + editor = dlg_sub_window(dialog, 1, box_width, yorg + box_y, xorg + box_x); + dlg_register_window(editor, "inputbox", binding2); + + while (result == DLG_EXIT_UNKNOWN) { + int edit = 0; + + /* + * The last field drawn determines where the cursor is shown: + */ + if (show_buttons) { + show_buttons = FALSE; + col_offset = dlg_edit_offset(input, chr_offset, box_width); + (void) wmove(dialog, box_y, box_x + col_offset); + dlg_draw_buttons(dialog, height - 2, 0, buttons, state, FALSE, width); + } + + if (!first) { + key = dlg_mouse_wgetch((state == sTEXT) ? editor : dialog, &fkey); + if (dlg_result_key(key, fkey, &result)) + break; + } + + /* + * Handle mouse clicks first, since we want to know if this is a button, + * or something that dlg_edit_string() should handle. + */ + if (fkey + && is_DLGK_MOUSE(key) + && (code = dlg_ok_buttoncode(key - M_EVENT)) >= 0) { + result = code; + continue; + } + + if (state == sTEXT) { /* Input box selected */ + edit = dlg_edit_string(input, &chr_offset, key, fkey, first); + + if (edit) { + dlg_show_string(dialog, input, chr_offset, inputbox_attr, + box_y, box_x, box_width, password, first); + first = FALSE; + continue; + } else if (first) { + first = FALSE; + continue; + } + } + + /* handle non-functionkeys */ + if (!fkey && (code = dlg_char_to_button(key, buttons)) >= 0) { + dlg_del_window(dialog); + result = dlg_ok_buttoncode(code); + continue; + } + + /* handle functionkeys */ + if (fkey) { + switch (key) { + case DLGK_MOUSE('i'): /* mouse enter events */ + state = 0; + /* FALLTHRU */ + case DLGK_FIELD_PREV: + show_buttons = TRUE; + state = dlg_prev_ok_buttonindex(state, sTEXT); + break; + case DLGK_FIELD_NEXT: + show_buttons = TRUE; + state = dlg_next_ok_buttonindex(state, sTEXT); + break; + case ' ': /* FIXME: conflict with inputstr.c */ + case DLGK_ENTER: + dlg_del_window(dialog); + result = (state >= 0) ? dlg_ok_buttoncode(state) : DLG_EXIT_OK; + break; +#ifdef KEY_RESIZE + case KEY_RESIZE: + /* reset data */ + height = old_height; + width = old_width; + /* repaint */ + dlg_clear(); + dlg_del_window(dialog); + refresh(); + dlg_mouse_free_regions(); + goto retry; +#endif + default: + beep(); + break; + } + } else { + beep(); + } + } + + dlg_unregister_window(editor); + dlg_del_window(dialog); + dlg_mouse_free_regions(); + free(prompt); + return result; +} Index: contrib/dialog/dialog.lsm =================================================================== --- contrib/dialog/dialog.lsm (revision 0) +++ contrib/dialog/dialog.lsm (revision 0) @@ -0,0 +1,23 @@ +Begin3 +Title: dialog - Display dialog boxes in scripts +Version: 1.0-20060221 +Entered-date: 21FEB06 +Description: Dialog is a program that will let you present a variety + of questions or display messages in nice looking color + non-graphical dialog boxes from a shell or perl script. + Various dialog boxes can be presented such as yes/no, menu, + input, message, checklist, radiolist, and more. + + This program is based on the no longer maintained cdialog, but + contains bug fixes and more features. +Keywords: dialog, cdialog, shell, script, window +Author: Originally Savio Lam for the ancient version +Maintained-by: Thomas E. Dickey <dickey@invisible-island.net> + Vila, Santiago <sanvila@debian.org> +Primary-site: http://invisible-island.net/dialog/ + http://packages.debian.org/ +Alternate-site: ftp://ftp.us.debian.org/debian/pool/main/d/dialog/ +Original-site: ftp://sunsite.unc.edu/pub/Linux/utils/shell +Platforms: Linux *nix, OS/2 EMX +Copying-policy: LGPL +End Index: contrib/dialog/config.guess =================================================================== --- contrib/dialog/config.guess (revision 0) +++ contrib/dialog/config.guess (revision 0) @@ -0,0 +1,1502 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 +# Free Software Foundation, Inc. + +timestamp='2009-12-30' + +# This file 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., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner. Please send patches (context +# diff format) to <config-patches@gnu.org> and include a ChangeLog +# entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to <config-patches@gnu.org>." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free +Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include <stdio.h> /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include <sys/systemcfg.h> + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[456]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include <stdlib.h> + #include <unistd.h> + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include <unistd.h> + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + LIBC=gnu + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` + echo ${UNAME_MACHINE}-pc-isc$UNAME_REL + elif /bin/uname -X 2>/dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says <Richard.M.Bartel@ccMail.Census.GOV> + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes <hewes@openmarket.com>. + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + i386) + eval $set_cc_for_build + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + UNAME_PROCESSOR="x86_64" + fi + fi ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c <<EOF +#ifdef _SEQUENT_ +# include <sys/types.h> +# include <sys/utsname.h> +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include <sys/param.h> + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include <sys/param.h> +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 <<EOF +$0: unable to guess system type + +This script, last modified $timestamp, has failed to recognize +the operating system you are using. It is advised that you +download the most up to date version of the config scripts from + + http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +and + http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +If the version you run ($0) is already up to date, please +send the following data and any information you think might be +pertinent to <config-patches@gnu.org> in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: Property changes on: contrib/dialog/config.guess ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/checklist.c =================================================================== --- contrib/dialog/checklist.c (revision 0) +++ contrib/dialog/checklist.c (revision 0) @@ -0,0 +1,712 @@ +/* + * $Id: checklist.c,v 1.121 2010/01/17 19:32:17 tom Exp $ + * + * checklist.c -- implements the checklist box + * + * Copyright 2000-2009,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + * + * An earlier version of this program lists as authors: + * Savio Lam (lam836@cs.cuhk.hk) + * Stuart Herbert - S.Herbert@sheffield.ac.uk: radiolist extension + * Alessandro Rubini - rubini@ipvvis.unipv.it: merged the two + */ + +#include <dialog.h> +#include <dlg_keys.h> + +static int list_width, check_x, item_x, checkflag; + +#define MIN_HIGH (1 + (5 * MARGIN)) + +#define LLEN(n) ((n) * CHECKBOX_TAGS) +#define ItemData(i) &items[LLEN(i)] +#define ItemName(i) items[LLEN(i)] +#define ItemText(i) items[LLEN(i) + 1] +#define ItemStatus(i) items[LLEN(i) + 2] +#define ItemHelp(i) items[LLEN(i) + 3] + +static void +print_arrows(WINDOW *win, + int box_x, + int box_y, + int scrollamt, + int choice, + int item_no, + int list_height) +{ + dlg_draw_scrollbar(win, + scrollamt, + scrollamt, + scrollamt + choice, + item_no, + box_x + check_x, + box_x + list_width, + box_y, + box_y + list_height + 1, + menubox_attr, + menubox_border_attr); +} + +/* + * Print list item. The 'selected' parameter is true if 'choice' is the + * current item. That one is colored differently from the other items. + */ +static void +print_item(WINDOW *win, + DIALOG_LISTITEM * item, + const char *states, + int choice, + int selected) +{ + chtype save = getattrs(win); + int i; + chtype attr = A_NORMAL; + const int *cols; + const int *indx; + int limit; + + /* Clear 'residue' of last item */ + wattrset(win, menubox_attr); + (void) wmove(win, choice, 0); + for (i = 0; i < list_width; i++) + (void) waddch(win, ' '); + + (void) wmove(win, choice, check_x); + wattrset(win, selected ? check_selected_attr : check_attr); + (void) wprintw(win, + (checkflag == FLAG_CHECK) ? "[%c]" : "(%c)", + states[item->state]); + wattrset(win, menubox_attr); + (void) waddch(win, ' '); + + if (strlen(item->name) != 0) { + + indx = dlg_index_wchars(item->name); + + wattrset(win, selected ? tag_key_selected_attr : tag_key_attr); + (void) waddnstr(win, item->name, indx[1]); + + if ((int) strlen(item->name) > indx[1]) { + limit = dlg_limit_columns(item->name, (item_x - check_x - 6), 1); + if (limit > 1) { + wattrset(win, selected ? tag_selected_attr : tag_attr); + (void) waddnstr(win, + item->name + indx[1], + indx[limit] - indx[1]); + } + } + } + + if (strlen(item->text) != 0) { + cols = dlg_index_columns(item->text); + limit = dlg_limit_columns(item->text, (getmaxx(win) - item_x + 1), 0); + + if (limit > 0) { + (void) wmove(win, choice, item_x); + wattrset(win, selected ? item_selected_attr : item_attr); + dlg_print_text(win, item->text, cols[limit], &attr); + } + } + + if (selected) { + dlg_item_help(item->help); + } + wattrset(win, save); +} + +/* + * This is an alternate interface to 'checklist' which allows the application + * to read the list item states back directly without putting them in the + * output buffer. It also provides for more than two states over which the + * check/radio box can display. + */ +int +dlg_checklist(const char *title, + const char *cprompt, + int height, + int width, + int list_height, + int item_no, + DIALOG_LISTITEM * items, + const char *states, + int flag, + int *current_item) +{ + /* *INDENT-OFF* */ + static DLG_KEYS_BINDING binding[] = { + ENTERKEY_BINDINGS, + DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_RIGHT ), + DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), + DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), + DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_LEFT ), + DLG_KEYS_DATA( DLGK_ITEM_FIRST, KEY_HOME ), + DLG_KEYS_DATA( DLGK_ITEM_LAST, KEY_END ), + DLG_KEYS_DATA( DLGK_ITEM_LAST, KEY_LL ), + DLG_KEYS_DATA( DLGK_ITEM_NEXT, '+' ), + DLG_KEYS_DATA( DLGK_ITEM_NEXT, KEY_DOWN ), + DLG_KEYS_DATA( DLGK_ITEM_NEXT, CHR_NEXT ), + DLG_KEYS_DATA( DLGK_ITEM_PREV, '-' ), + DLG_KEYS_DATA( DLGK_ITEM_PREV, KEY_UP ), + DLG_KEYS_DATA( DLGK_ITEM_PREV, CHR_PREVIOUS ), + DLG_KEYS_DATA( DLGK_PAGE_NEXT, KEY_NPAGE ), + DLG_KEYS_DATA( DLGK_PAGE_NEXT, DLGK_MOUSE(KEY_NPAGE) ), + DLG_KEYS_DATA( DLGK_PAGE_PREV, KEY_PPAGE ), + DLG_KEYS_DATA( DLGK_PAGE_PREV, DLGK_MOUSE(KEY_PPAGE) ), + END_KEYS_BINDING + }; + /* *INDENT-ON* */ + +#ifdef KEY_RESIZE + int old_height = height; + int old_width = width; +#endif + int i, j, key2, found, x, y, cur_x, cur_y, box_x, box_y; + int key = 0, fkey; + int button = dialog_state.visit_items ? -1 : dlg_defaultno_button(); + int choice = dlg_default_listitem(items); + int scrollamt = 0; + int max_choice; + int was_mouse; + int use_height; + int use_width, name_width, text_width; + int result = DLG_EXIT_UNKNOWN; + int num_states; + WINDOW *dialog, *list; + char *prompt = dlg_strclone(cprompt); + const char **buttons = dlg_ok_labels(); + + dlg_does_output(); + dlg_tab_correct_str(prompt); + +#ifdef KEY_RESIZE + retry: +#endif + + use_height = list_height; + if (use_height == 0) { + use_width = dlg_calc_list_width(item_no, items) + 10; + /* calculate height without items (4) */ + dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, MAX(26, use_width)); + dlg_calc_listh(&height, &use_height, item_no); + } else { + dlg_auto_size(title, prompt, &height, &width, MIN_HIGH + use_height, 26); + } + dlg_button_layout(buttons, &width); + dlg_print_size(height, width); + dlg_ctl_size(height, width); + + /* we need at least two states */ + if (states == 0 || strlen(states) < 2) + states = " *"; + num_states = (int) strlen(states); + + checkflag = flag; + + x = dlg_box_x_ordinate(width); + y = dlg_box_y_ordinate(height); + + dialog = dlg_new_window(height, width, y, x); + dlg_register_window(dialog, "checklist", binding); + dlg_register_buttons(dialog, "checklist", buttons); + + dlg_mouse_setbase(x, y); + + dlg_draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); + dlg_draw_bottom_box(dialog); + dlg_draw_title(dialog, title); + + wattrset(dialog, dialog_attr); + dlg_print_autowrap(dialog, prompt, height, width); + + list_width = width - 6; + getyx(dialog, cur_y, cur_x); + box_y = cur_y + 1; + box_x = (width - list_width) / 2 - 1; + + /* + * After displaying the prompt, we know how much space we really have. + * Limit the list to avoid overwriting the ok-button. + */ + if (use_height + MIN_HIGH > height - cur_y) + use_height = height - MIN_HIGH - cur_y; + if (use_height <= 0) + use_height = 1; + + max_choice = MIN(use_height, item_no); + + /* create new window for the list */ + list = dlg_sub_window(dialog, use_height, list_width, + y + box_y + 1, x + box_x + 1); + + /* draw a box around the list items */ + dlg_draw_box(dialog, box_y, box_x, + use_height + 2 * MARGIN, + list_width + 2 * MARGIN, + menubox_border_attr, menubox_attr); + + text_width = 0; + name_width = 0; + /* Find length of longest item to center checklist */ + for (i = 0; i < item_no; i++) { + text_width = MAX(text_width, dlg_count_columns(items[i].text)); + name_width = MAX(name_width, dlg_count_columns(items[i].name)); + } + + /* If the name+text is wider than the list is allowed, then truncate + * one or both of them. If the name is no wider than 1/4 of the list, + * leave it intact. + */ + use_width = (list_width - 6); + if (text_width + name_width > use_width) { + int need = (int) (0.25 * use_width); + if (name_width > need) { + int want = (int) (use_width * ((double) name_width) / + (text_width + name_width)); + name_width = (want > need) ? want : need; + } + text_width = use_width - name_width; + } + + check_x = (use_width - (text_width + name_width)) / 2; + item_x = name_width + check_x + 6; + + /* ensure we are scrolled to show the current choice */ + if (choice >= (max_choice + scrollamt)) { + scrollamt = choice - max_choice + 1; + choice = max_choice - 1; + } + /* Print the list */ + for (i = 0; i < max_choice; i++) + print_item(list, + &items[i + scrollamt], + states, + i, i == choice); + (void) wnoutrefresh(list); + + /* register the new window, along with its borders */ + dlg_mouse_mkbigregion(box_y + 1, box_x, use_height, list_width + 2, + KEY_MAX, 1, 1, 1 /* by lines */ ); + + print_arrows(dialog, + box_x, box_y, + scrollamt, max_choice, item_no, use_height); + + dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); + + while (result == DLG_EXIT_UNKNOWN) { + if (button < 0) /* --visit-items */ + wmove(dialog, box_y + choice + 1, box_x + check_x + 2); + + key = dlg_mouse_wgetch(dialog, &fkey); + if (dlg_result_key(key, fkey, &result)) + break; + + was_mouse = (fkey && is_DLGK_MOUSE(key)); + if (was_mouse) + key -= M_EVENT; + + if (was_mouse && (key >= KEY_MAX)) { + getyx(dialog, cur_y, cur_x); + i = (key - KEY_MAX); + if (i < max_choice) { + /* De-highlight current item */ + print_item(list, + &items[scrollamt + choice], + states, + choice, FALSE); + /* Highlight new item */ + choice = (key - KEY_MAX); + print_item(list, + &items[scrollamt + choice], + states, + choice, TRUE); + (void) wnoutrefresh(list); + (void) wmove(dialog, cur_y, cur_x); + + key = ' '; /* force the selected item to toggle */ + } else { + beep(); + continue; + } + fkey = FALSE; + } else if (was_mouse && key >= KEY_MIN) { + key = dlg_lookup_key(dialog, key, &fkey); + } + + /* + * A space toggles the item status. We handle either a checklist + * (any number of items can be selected) or radio list (zero or one + * items can be selected). + */ + if (key == ' ') { + int current = scrollamt + choice; + int next = items[current].state + 1; + + if (next >= num_states) + next = 0; + + getyx(dialog, cur_y, cur_x); + if (flag == FLAG_CHECK) { /* checklist? */ + items[current].state = next; + print_item(list, + &items[scrollamt + choice], + states, + choice, TRUE); + } else { /* radiolist */ + for (i = 0; i < item_no; i++) { + if (i != current) { + items[i].state = 0; + } + } + if (items[current].state) { + items[current].state = next ? next : 1; + print_item(list, + &items[current], + states, + choice, TRUE); + } else { + items[current].state = 1; + for (i = 0; i < max_choice; i++) + print_item(list, + &items[scrollamt + i], + states, + i, i == choice); + } + } + (void) wnoutrefresh(list); + (void) wmove(dialog, cur_y, cur_x); + wrefresh(dialog); + continue; /* wait for another key press */ + } + + /* + * Check if key pressed matches first character of any item tag in + * list. If there is more than one match, we will cycle through + * each one as the same key is pressed repeatedly. + */ + found = FALSE; + if (!fkey) { + if (button < 0 || !dialog_state.visit_items) { + for (j = scrollamt + choice + 1; j < item_no; j++) { + if (dlg_match_char(dlg_last_getc(), items[j].name)) { + found = TRUE; + i = j - scrollamt; + break; + } + } + if (!found) { + for (j = 0; j <= scrollamt + choice; j++) { + if (dlg_match_char(dlg_last_getc(), items[j].name)) { + found = TRUE; + i = j - scrollamt; + break; + } + } + } + if (found) + dlg_flush_getc(); + } else if ((j = dlg_char_to_button(key, buttons)) >= 0) { + button = j; + ungetch('\n'); + continue; + } + } + + /* + * A single digit (1-9) positions the selection to that line in the + * current screen. + */ + if (!found + && (key <= '9') + && (key > '0') + && (key - '1' < max_choice)) { + found = TRUE; + i = key - '1'; + } + + if (!found) { + if (fkey) { + found = TRUE; + switch (key) { + case DLGK_ITEM_FIRST: + i = -scrollamt; + break; + case DLGK_ITEM_LAST: + i = item_no - 1 - scrollamt; + break; + case DLGK_PAGE_PREV: + if (choice) + i = 0; + else if (scrollamt != 0) + i = -MIN(scrollamt, max_choice); + else + continue; + break; + case DLGK_PAGE_NEXT: + i = MIN(choice + max_choice, item_no - scrollamt - 1); + break; + case DLGK_ITEM_PREV: + i = choice - 1; + if (choice == 0 && scrollamt == 0) + continue; + break; + case DLGK_ITEM_NEXT: + i = choice + 1; + if (scrollamt + choice >= item_no - 1) + continue; + break; + default: + found = FALSE; + break; + } + } + } + + if (found) { + if (i != choice) { + getyx(dialog, cur_y, cur_x); + if (i < 0 || i >= max_choice) { +#if defined(NCURSES_VERSION_MAJOR) && NCURSES_VERSION_MAJOR < 5 + /* + * Using wscrl to assist ncurses scrolling is not needed + * in version 5.x + */ + if (i == -1) { + if (use_height > 1) { + /* De-highlight current first item */ + print_item(list, + &items[scrollamt], + states, + 0, FALSE); + scrollok(list, TRUE); + wscrl(list, -1); + scrollok(list, FALSE); + } + scrollamt--; + print_item(list, + &items[scrollamt], + states, + 0, TRUE); + } else if (i == max_choice) { + if (use_height > 1) { + /* De-highlight current last item before scrolling up */ + print_item(list, + &items[scrollamt + max_choice - 1], + states, + max_choice - 1, FALSE); + scrollok(list, TRUE); + wscrl(list, 1); + scrollok(list, FALSE); + } + scrollamt++; + print_item(list, + &items[scrollamt + max_choice - 1], + states, + max_choice - 1, TRUE); + } else +#endif + { + if (i < 0) { + scrollamt += i; + choice = 0; + } else { + choice = max_choice - 1; + scrollamt += (i - max_choice + 1); + } + for (i = 0; i < max_choice; i++) { + print_item(list, + &items[scrollamt + i], + states, + i, i == choice); + } + } + (void) wnoutrefresh(list); + print_arrows(dialog, + box_x, box_y, + scrollamt, max_choice, item_no, use_height); + } else { + /* De-highlight current item */ + print_item(list, + &items[scrollamt + choice], + states, + choice, FALSE); + /* Highlight new item */ + choice = i; + print_item(list, + &items[scrollamt + choice], + states, + choice, TRUE); + (void) wnoutrefresh(list); + print_arrows(dialog, + box_x, box_y, + scrollamt, max_choice, item_no, use_height); + (void) wmove(dialog, cur_y, cur_x); + wrefresh(dialog); + } + } + continue; /* wait for another key press */ + } + + if (fkey) { + switch (key) { + case DLGK_ENTER: + result = dlg_ok_buttoncode(button); + break; + case DLGK_FIELD_PREV: + button = dlg_prev_button(buttons, button); + dlg_draw_buttons(dialog, height - 2, 0, buttons, button, + FALSE, width); + break; + case DLGK_FIELD_NEXT: + button = dlg_next_button(buttons, button); + dlg_draw_buttons(dialog, height - 2, 0, buttons, button, + FALSE, width); + break; +#ifdef KEY_RESIZE + case KEY_RESIZE: + /* reset data */ + height = old_height; + width = old_width; + /* repaint */ + dlg_clear(); + dlg_del_window(dialog); + refresh(); + dlg_mouse_free_regions(); + goto retry; +#endif + default: + if (was_mouse) { + if ((key2 = dlg_ok_buttoncode(key)) >= 0) { + result = key2; + break; + } + beep(); + } + } + } else { + beep(); + } + } + + dlg_del_window(dialog); + dlg_mouse_free_regions(); + free(prompt); + *current_item = (scrollamt + choice); + return result; +} + +/* + * 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 *cprompt, + int height, + int width, + int list_height, + int item_no, + char **items, + int flag) +{ + int result; + int i; + DIALOG_LISTITEM *listitems; + bool separate_output = ((flag == FLAG_CHECK) + && (dialog_vars.separate_output)); + bool show_status = FALSE; + int current = 0; + + listitems = dlg_calloc(DIALOG_LISTITEM, (size_t) item_no + 1); + assert_ptr(listitems, "dialog_checklist"); + + for (i = 0; i < item_no; ++i) { + listitems[i].name = ItemName(i); + listitems[i].text = ItemText(i); + listitems[i].help = ((dialog_vars.item_help) + ? ItemHelp(i) + : dlg_strempty()); + listitems[i].state = !dlg_strcmp(ItemStatus(i), "on"); + } + dlg_align_columns(&listitems[0].text, sizeof(DIALOG_LISTITEM), item_no); + + result = dlg_checklist(title, + cprompt, + height, + width, + list_height, + item_no, + listitems, + NULL, + flag, + ¤t); + + switch (result) { + case DLG_EXIT_OK: /* FALLTHRU */ + case DLG_EXIT_EXTRA: + show_status = TRUE; + break; + case DLG_EXIT_HELP: + dlg_add_result("HELP "); + show_status = dialog_vars.help_status; + if (USE_ITEM_HELP(listitems[current].help)) { + if (show_status) { + if (separate_output) { + dlg_add_string(listitems[current].help); + dlg_add_separator(); + } else { + dlg_add_quoted(listitems[current].help); + } + } else { + dlg_add_string(listitems[current].help); + } + result = DLG_EXIT_ITEM_HELP; + } else { + if (show_status) { + if (separate_output) { + dlg_add_string(listitems[current].name); + dlg_add_separator(); + } else { + dlg_add_quoted(listitems[current].name); + } + } else { + dlg_add_string(listitems[current].name); + } + } + break; + } + + if (show_status) { + for (i = 0; i < item_no; i++) { + if (listitems[i].state) { + if (separate_output) { + dlg_add_string(listitems[i].name); + dlg_add_separator(); + } else { + if (dlg_need_separator()) + dlg_add_separator(); + dlg_add_string(listitems[i].name); + } + } + } + } + + dlg_free_columns(&listitems[0].text, sizeof(DIALOG_LISTITEM), item_no); + free(listitems); + return result; +} Index: contrib/dialog/calendar.c =================================================================== --- contrib/dialog/calendar.c (revision 0) +++ contrib/dialog/calendar.c (revision 0) @@ -0,0 +1,678 @@ +/* + * $Id: calendar.c,v 1.59 2010/01/18 09:50:44 tom Exp $ + * + * calendar.c -- implements the calendar box + * + * Copyright 2001-2009,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + */ + +#include <dialog.h> +#include <dlg_keys.h> + +#include <time.h> + +#define ONE_DAY (60 * 60 * 24) + +#define MON_WIDE 4 /* width of a month-name */ +#define DAY_HIGH 6 /* maximum lines in day-grid */ +#define DAY_WIDE (8 * MON_WIDE) /* width of the day-grid */ +#define HDR_HIGH 1 /* height of cells with month/year */ +#define BTN_HIGH 1 /* height of button-row excluding margin */ + +/* two more lines: titles for day-of-week and month/year boxes */ +#define MIN_HIGH (DAY_HIGH + 2 + HDR_HIGH + BTN_HIGH + (7 * MARGIN)) +#define MIN_WIDE (DAY_WIDE + (4 * MARGIN)) + +typedef enum { + sMONTH = -3 + ,sYEAR = -2 + ,sDAY = -1 +} STATES; + +struct _box; + +typedef int (*BOX_DRAW) (struct _box *, struct tm *); + +typedef struct _box { + WINDOW *parent; + WINDOW *window; + int x; + int y; + int width; + int height; + BOX_DRAW box_draw; +} BOX; + +static const char * +nameOfDayOfWeek(int n) +{ + static const char *table[7] +#ifndef ENABLE_NLS + = + { + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + } +#endif + ; + const char *result = 0; + + if (n >= 0 && n < 7) { +#ifdef ENABLE_NLS + if (table[n] == 0) { + nl_item items[7] = + { + ABDAY_1, ABDAY_2, ABDAY_3, ABDAY_4, ABDAY_5, ABDAY_6, ABDAY_7 + }; + table[n] = nl_langinfo(items[n]); + } +#endif + result = table[n]; + } + if (result == 0) { + result = "?"; + } + return result; +} + +static const char * +nameOfMonth(int n) +{ + static const char *table[12] +#ifndef ENABLE_NLS + = + { + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + } +#endif + ; + const char *result = 0; + + if (n >= 0 && n < 12) { +#ifdef ENABLE_NLS + if (table[n] == 0) { + nl_item items[12] = + { + MON_1, MON_2, MON_3, MON_4, MON_5, MON_6, + MON_7, MON_8, MON_9, MON_10, MON_11, MON_12 + }; + table[n] = nl_langinfo(items[n]); + } +#endif + result = table[n]; + } + if (result == 0) { + result = "?"; + } + return result; +} + +static int +days_in_month(struct tm *current, int offset /* -1, 0, 1 */ ) +{ + static const int nominal[] = + { + 31, 28, 31, 30, 31, 30, + 31, 31, 30, 31, 30, 31 + }; + int year = current->tm_year; + int month = current->tm_mon + offset; + int result; + + while (month < 0) { + month += 12; + year -= 1; + } + while (month >= 12) { + month -= 12; + year += 1; + } + result = nominal[month]; + if (month == 1) + result += ((year % 4) == 0); + return result; +} + +static int +days_in_year(struct tm *current, int offset /* -1, 0, 1 */ ) +{ + int year = current->tm_year + 1900 + offset; + + return ((year % 4) == 0) ? 366 : 365; +} + +static int +day_cell_number(struct tm *current) +{ + int cell; + cell = current->tm_mday - ((6 + current->tm_mday - current->tm_wday) % 7); + if ((current->tm_mday - 1) % 7 != current->tm_wday) + cell += 6; + else + cell--; + return cell; +} + +static int +next_or_previous(int key, int two_d) +{ + int result = 0; + + switch (key) { + case DLGK_GRID_UP: + result = two_d ? -7 : -1; + break; + case DLGK_GRID_LEFT: + result = -1; + break; + case DLGK_GRID_DOWN: + result = two_d ? 7 : 1; + break; + case DLGK_GRID_RIGHT: + result = 1; + break; + default: + beep(); + break; + } + return result; +} + +/* + * Draw the day-of-month selection box + */ +static int +draw_day(BOX * data, struct tm *current) +{ + int cell_wide = MON_WIDE; + int y, x, this_x = 0; + int save_y = 0, save_x = 0; + int day = current->tm_mday; + int mday; + int week; + int last = days_in_month(current, 0); + int prev = days_in_month(current, -1); + + werase(data->window); + dlg_draw_box(data->parent, + data->y - MARGIN, data->x - MARGIN, + data->height + (2 * MARGIN), data->width + (2 * MARGIN), + menubox_border_attr, menubox_attr); /* border of daybox */ + + wattrset(data->window, menubox_attr); /* daynames headline */ + for (x = 0; x < 7; x++) { + mvwprintw(data->window, + 0, (x + 1) * cell_wide, "%*.*s ", + cell_wide - 1, + cell_wide - 1, + nameOfDayOfWeek(x)); + } + + mday = ((6 + current->tm_mday - current->tm_wday) % 7) - 7; + if (mday <= -7) + mday += 7; + /* mday is now in the range -6 to 0. */ + week = (current->tm_yday + 6 + mday - current->tm_mday) / 7; + + for (y = 1; mday < last; y++) { + wattrset(data->window, menubox_attr); /* weeknumbers headline */ + mvwprintw(data->window, + y, 0, + "%*d ", + cell_wide - 1, + ++week); + for (x = 0; x < 7; x++) { + this_x = 1 + (x + 1) * cell_wide; + ++mday; + if (wmove(data->window, y, this_x) == ERR) + continue; + wattrset(data->window, item_attr); /* not selected days */ + if (mday == day) { + wattrset(data->window, item_selected_attr); /* selected day */ + save_y = y; + save_x = this_x; + } + if (mday > 0) { + if (mday <= last) { + wprintw(data->window, "%*d", cell_wide - 2, mday); + } else if (mday == day) { + wprintw(data->window, "%*d", cell_wide - 2, mday - last); + } + } else if (mday == day) { + wprintw(data->window, "%*d", cell_wide - 2, mday + prev); + } + } + wmove(data->window, save_y, save_x); + } + /* just draw arrows - scrollbar is unsuitable here */ + dlg_draw_arrows(data->parent, TRUE, TRUE, + data->x + ARROWS_COL, + data->y - 1, + data->y + data->height); + + return 0; +} + +/* + * Draw the month-of-year selection box + */ +static int +draw_month(BOX * data, struct tm *current) +{ + int month; + + month = current->tm_mon + 1; + + wattrset(data->parent, dialog_attr); /* Headline "Month" */ + (void) mvwprintw(data->parent, data->y - 2, data->x - 1, _("Month")); + dlg_draw_box(data->parent, + data->y - 1, data->x - 1, + data->height + 2, data->width + 2, + menubox_border_attr, menubox_attr); /* borders of monthbox */ + wattrset(data->window, item_attr); /* color the month selection */ + mvwprintw(data->window, 0, 0, "%s", nameOfMonth(month - 1)); + wmove(data->window, 0, 0); + return 0; +} + +/* + * Draw the year selection box + */ +static int +draw_year(BOX * data, struct tm *current) +{ + int year = current->tm_year + 1900; + + wattrset(data->parent, dialog_attr); /* Headline "Year" */ + (void) mvwprintw(data->parent, data->y - 2, data->x - 1, _("Year")); + dlg_draw_box(data->parent, + data->y - 1, data->x - 1, + data->height + 2, data->width + 2, + menubox_border_attr, menubox_attr); /* borders of yearbox */ + wattrset(data->window, item_attr); /* color the year selection */ + mvwprintw(data->window, 0, 0, "%4d", year); + wmove(data->window, 0, 0); + return 0; +} + +static int +init_object(BOX * data, + WINDOW *parent, + int x, int y, + int width, int height, + BOX_DRAW box_draw, + int code) +{ + data->parent = parent; + data->x = x; + data->y = y; + data->width = width; + data->height = height; + data->box_draw = box_draw; + + data->window = derwin(data->parent, + data->height, data->width, + data->y, data->x); + if (data->window == 0) + return -1; + (void) keypad(data->window, TRUE); + + dlg_mouse_setbase(getbegx(parent), getbegy(parent)); + if (code == 'D') { + dlg_mouse_mkbigregion(y + 1, x + MON_WIDE, height - 1, width - MON_WIDE, + KEY_MAX, 1, MON_WIDE, 3); + } else { + dlg_mouse_mkregion(y, x, height, width, code); + } + + return 0; +} + +static int +CleanupResult(int code, WINDOW *dialog, char *prompt, DIALOG_VARS * save_vars) +{ + if (dialog != 0) + dlg_del_window(dialog); + dlg_mouse_free_regions(); + if (prompt != 0) + free(prompt); + dlg_restore_vars(save_vars); + + return code; +} + +#define DrawObject(data) (data)->box_draw(data, ¤t) + +/* + * Display a dialog box for entering a date + */ +int +dialog_calendar(const char *title, + const char *subtitle, + int height, + int width, + int day, + int month, + int year) +{ + /* *INDENT-OFF* */ + static DLG_KEYS_BINDING binding[] = { + ENTERKEY_BINDINGS, + DLG_KEYS_DATA( DLGK_ENTER, ' ' ), + DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), + DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), + DLG_KEYS_DATA( DLGK_GRID_DOWN, 'j' ), + DLG_KEYS_DATA( DLGK_GRID_DOWN, DLGK_MOUSE(KEY_NPAGE) ), + DLG_KEYS_DATA( DLGK_GRID_DOWN, KEY_DOWN ), + DLG_KEYS_DATA( DLGK_GRID_DOWN, KEY_NPAGE ), + DLG_KEYS_DATA( DLGK_GRID_LEFT, '-' ), + DLG_KEYS_DATA( DLGK_GRID_LEFT, 'h' ), + DLG_KEYS_DATA( DLGK_GRID_LEFT, CHR_BACKSPACE ), + DLG_KEYS_DATA( DLGK_GRID_LEFT, CHR_PREVIOUS ), + DLG_KEYS_DATA( DLGK_GRID_LEFT, KEY_LEFT ), + DLG_KEYS_DATA( DLGK_GRID_RIGHT, '+' ), + DLG_KEYS_DATA( DLGK_GRID_RIGHT, 'l' ), + DLG_KEYS_DATA( DLGK_GRID_RIGHT, CHR_NEXT ), + DLG_KEYS_DATA( DLGK_GRID_RIGHT, KEY_NEXT ), + DLG_KEYS_DATA( DLGK_GRID_RIGHT, KEY_RIGHT ), + DLG_KEYS_DATA( DLGK_GRID_UP, 'k' ), + DLG_KEYS_DATA( DLGK_GRID_UP, KEY_PPAGE ), + DLG_KEYS_DATA( DLGK_GRID_UP, KEY_PREVIOUS ), + DLG_KEYS_DATA( DLGK_GRID_UP, KEY_UP ), + DLG_KEYS_DATA( DLGK_GRID_UP, DLGK_MOUSE(KEY_PPAGE) ), + END_KEYS_BINDING + }; + /* *INDENT-ON* */ + +#ifdef KEY_RESIZE + int old_height = height; + int old_width = width; +#endif + BOX dy_box, mn_box, yr_box; + int fkey; + int key = 0; + int key2; + int step; + int button; + int result = DLG_EXIT_UNKNOWN; + WINDOW *dialog; + time_t now_time = time((time_t *) 0); + struct tm current; + int state = dlg_defaultno_button(); + const char **buttons = dlg_ok_labels(); + char *prompt = dlg_strclone(subtitle); + int mincols = MIN_WIDE; + char buffer[MAX_LEN]; + DIALOG_VARS save_vars; + + dlg_save_vars(&save_vars); + dialog_vars.separate_output = TRUE; + + dlg_does_output(); + + now_time = time((time_t *) 0); + current = *localtime(&now_time); + if (day < 0) + day = current.tm_mday; + if (month < 0) + month = current.tm_mon + 1; + if (year < 0) + year = current.tm_year + 1900; + + /* compute a struct tm that matches the day/month/year parameters */ + if (((year -= 1900) > 0) && (year < 200)) { + /* ugly, but I'd like to run this on older machines w/o mktime -TD */ + for (;;) { + if (year > current.tm_year) { + now_time += ONE_DAY * days_in_year(¤t, 0); + } else if (year < current.tm_year) { + now_time -= ONE_DAY * days_in_year(¤t, -1); + } else if (month > current.tm_mon + 1) { + now_time += ONE_DAY * days_in_month(¤t, 0); + } else if (month < current.tm_mon + 1) { + now_time -= ONE_DAY * days_in_month(¤t, -1); + } else if (day > current.tm_mday) { + now_time += ONE_DAY; + } else if (day < current.tm_mday) { + now_time -= ONE_DAY; + } else { + break; + } + current = *localtime(&now_time); + } + } + dlg_button_layout(buttons, &mincols); + +#ifdef KEY_RESIZE + retry: +#endif + + dlg_auto_size(title, prompt, &height, &width, 0, mincols); + height += MIN_HIGH - 1; + dlg_print_size(height, width); + dlg_ctl_size(height, width); + + dialog = dlg_new_window(height, width, + dlg_box_y_ordinate(height), + dlg_box_x_ordinate(width)); + dlg_register_window(dialog, "calendar", binding); + dlg_register_buttons(dialog, "calendar", buttons); + + /* mainbox */ + dlg_draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); + dlg_draw_bottom_box(dialog); + dlg_draw_title(dialog, title); + + wattrset(dialog, dialog_attr); /* text mainbox */ + dlg_print_autowrap(dialog, prompt, height, width); + + /* compute positions of day, month and year boxes */ + memset(&dy_box, 0, sizeof(dy_box)); + memset(&mn_box, 0, sizeof(mn_box)); + memset(&yr_box, 0, sizeof(yr_box)); + + if (init_object(&dy_box, + dialog, + (width - DAY_WIDE) / 2, + 1 + (height - (DAY_HIGH + BTN_HIGH + (5 * MARGIN))), + DAY_WIDE, + DAY_HIGH + 1, + draw_day, + 'D') < 0 + || DrawObject(&dy_box) < 0) { + return CleanupResult(DLG_EXIT_ERROR, dialog, prompt, &save_vars); + } + + if (init_object(&mn_box, + dialog, + dy_box.x, + dy_box.y - (HDR_HIGH + 2 * MARGIN), + (DAY_WIDE / 2) - MARGIN, + HDR_HIGH, + draw_month, + 'M') < 0 + || DrawObject(&mn_box) < 0) { + return CleanupResult(DLG_EXIT_ERROR, dialog, prompt, &save_vars); + } + + if (init_object(&yr_box, + dialog, + dy_box.x + mn_box.width + 2, + mn_box.y, + mn_box.width, + mn_box.height, + draw_year, + 'Y') < 0 + || DrawObject(&yr_box) < 0) { + return CleanupResult(DLG_EXIT_ERROR, dialog, prompt, &save_vars); + } + + while (result == DLG_EXIT_UNKNOWN) { + BOX *obj = (state == sDAY ? &dy_box + : (state == sMONTH ? &mn_box : + (state == sYEAR ? &yr_box : 0))); + + button = (state < 0) ? 0 : state; + dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); + if (obj != 0) + dlg_set_focus(dialog, obj->window); + + key = dlg_mouse_wgetch(dialog, &fkey); + if (dlg_result_key(key, fkey, &result)) + break; + + if (fkey && (key >= DLGK_MOUSE(KEY_MIN) && key <= DLGK_MOUSE(KEY_MAX))) { + key = dlg_lookup_key(dialog, key - M_EVENT, &fkey); + } + + if ((key2 = dlg_char_to_button(key, buttons)) >= 0) { + result = key2; + } else if (fkey) { + /* handle function-keys */ + switch (key) { + case DLGK_MOUSE('D'): + state = sDAY; + break; + case DLGK_MOUSE('M'): + state = sMONTH; + break; + case DLGK_MOUSE('Y'): + state = sYEAR; + break; + case DLGK_ENTER: + result = dlg_ok_buttoncode(button); + break; + case DLGK_FIELD_PREV: + state = dlg_prev_ok_buttonindex(state, sMONTH); + break; + case DLGK_FIELD_NEXT: + state = dlg_next_ok_buttonindex(state, sMONTH); + break; +#ifdef KEY_RESIZE + case KEY_RESIZE: + /* reset data */ + height = old_height; + width = old_width; + /* repaint */ + dlg_clear(); + dlg_del_window(dialog); + refresh(); + dlg_mouse_free_regions(); + goto retry; +#endif + default: + step = 0; + key2 = -1; + if (is_DLGK_MOUSE(key)) { + if ((key2 = dlg_ok_buttoncode(key - M_EVENT)) >= 0) { + result = key2; + break; + } else if (key >= DLGK_MOUSE(KEY_MAX)) { + state = sDAY; + obj = &dy_box; + key2 = 1; + step = (key + - DLGK_MOUSE(KEY_MAX) + - day_cell_number(¤t)); + } + } + if (obj != 0) { + if (key2 < 0) + step = next_or_previous(key, (obj == &dy_box)); + if (step != 0) { + struct tm old = current; + + /* see comment regarding mktime -TD */ + if (obj == &dy_box) { + now_time += ONE_DAY * step; + } else if (obj == &mn_box) { + if (step > 0) + now_time += ONE_DAY * + days_in_month(¤t, 0); + else + now_time -= ONE_DAY * + days_in_month(¤t, -1); + } else if (obj == &yr_box) { + if (step > 0) + now_time += (ONE_DAY + * days_in_year(¤t, 0)); + else + now_time -= (ONE_DAY + * days_in_year(¤t, -1)); + } + + current = *localtime(&now_time); + + if (obj != &dy_box + && (current.tm_mday != old.tm_mday + || current.tm_mon != old.tm_mon + || current.tm_year != old.tm_year)) + DrawObject(&dy_box); + if (obj != &mn_box && current.tm_mon != old.tm_mon) + DrawObject(&mn_box); + if (obj != &yr_box && current.tm_year != old.tm_year) + DrawObject(&yr_box); + (void) DrawObject(obj); + } + } else if (state >= 0) { + if (next_or_previous(key, FALSE) < 0) + state = dlg_prev_ok_buttonindex(state, sMONTH); + else if (next_or_previous(key, FALSE) > 0) + state = dlg_next_ok_buttonindex(state, sMONTH); + } + break; + } + } + } + +#define DefaultFormat(dst, src) \ + sprintf(dst, "%02d/%02d/%0d", \ + src.tm_mday, src.tm_mon + 1, src.tm_year + 1900) +#ifdef HAVE_STRFTIME + if (dialog_vars.date_format != 0) { + size_t used = strftime(buffer, + sizeof(buffer) - 1, + dialog_vars.date_format, + ¤t); + if (used == 0 || *buffer == '\0') + DefaultFormat(buffer, current); + } else +#endif + DefaultFormat(buffer, current); + + dlg_add_result(buffer); + dlg_add_separator(); + + return CleanupResult(result, dialog, prompt, &save_vars); +} Index: contrib/dialog/config.sub =================================================================== --- contrib/dialog/config.sub (revision 0) +++ contrib/dialog/config.sub (revision 0) @@ -0,0 +1,1708 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 +# Free Software Foundation, Inc. + +timestamp='2009-12-31' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file 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., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to <config-patches@gnu.org>. Submit a context +# diff and a properly formatted GNU ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to <config-patches@gnu.org>." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free +Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | picochip) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze) + basic_machine=microblaze-xilinx + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: Property changes on: contrib/dialog/config.sub ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/util.c =================================================================== --- contrib/dialog/util.c (revision 0) +++ contrib/dialog/util.c (revision 0) @@ -0,0 +1,2183 @@ +/* + * $Id: util.c,v 1.201 2010/04/28 21:12:42 tom Exp $ + * + * util.c -- miscellaneous utilities for dialog + * + * Copyright 2000-2008,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + * + * An earlier version of this program lists as authors + * Savio Lam (lam836@cs.cuhk.hk) + */ + +#include <dialog.h> +#include <dlg_keys.h> + +#ifdef NCURSES_VERSION +#if defined(HAVE_NCURSESW_TERM_H) +#include <ncursesw/term.h> +#elif defined(HAVE_NCURSES_TERM_H) +#include <ncurses/term.h> +#else +#include <term.h> +#endif +#endif + +/* globals */ +DIALOG_STATE dialog_state; +DIALOG_VARS dialog_vars; + +#define concat(a,b) a##b + +#ifdef HAVE_RC_FILE +#define RC_DATA(name,comment) , #name "_color", comment " color" +#else +#define RC_DATA(name,comment) /*nothing */ +#endif + +#ifdef HAVE_COLOR +#include <dlg_colors.h> +#define COLOR_DATA(upr) , \ + concat(DLGC_FG_,upr), \ + concat(DLGC_BG_,upr), \ + concat(DLGC_HL_,upr) +#else +#define COLOR_DATA(upr) /*nothing */ +#endif + +#define DATA(atr,upr,lwr,cmt) { atr COLOR_DATA(upr) RC_DATA(lwr,cmt) } + +/* + * Table of color and attribute values, default is for mono display. + */ +/* *INDENT-OFF* */ +DIALOG_COLORS dlg_color_table[] = +{ + DATA(A_NORMAL, SCREEN, screen, "Screen"), + DATA(A_NORMAL, SHADOW, shadow, "Shadow"), + DATA(A_REVERSE, DIALOG, dialog, "Dialog box"), + DATA(A_REVERSE, TITLE, title, "Dialog box title"), + DATA(A_REVERSE, BORDER, border, "Dialog box border"), + DATA(A_BOLD, BUTTON_ACTIVE, button_active, "Active button"), + DATA(A_DIM, BUTTON_INACTIVE, button_inactive, "Inactive button"), + DATA(A_UNDERLINE, BUTTON_KEY_ACTIVE, button_key_active, "Active button key"), + DATA(A_UNDERLINE, BUTTON_KEY_INACTIVE, button_key_inactive, "Inactive button key"), + DATA(A_NORMAL, BUTTON_LABEL_ACTIVE, button_label_active, "Active button label"), + DATA(A_NORMAL, BUTTON_LABEL_INACTIVE, button_label_inactive, "Inactive button label"), + DATA(A_REVERSE, INPUTBOX, inputbox, "Input box"), + DATA(A_REVERSE, INPUTBOX_BORDER, inputbox_border, "Input box border"), + DATA(A_REVERSE, SEARCHBOX, searchbox, "Search box"), + DATA(A_REVERSE, SEARCHBOX_TITLE, searchbox_title, "Search box title"), + DATA(A_REVERSE, SEARCHBOX_BORDER, searchbox_border, "Search box border"), + DATA(A_REVERSE, POSITION_INDICATOR, position_indicator, "File position indicator"), + DATA(A_REVERSE, MENUBOX, menubox, "Menu box"), + DATA(A_REVERSE, MENUBOX_BORDER, menubox_border, "Menu box border"), + DATA(A_REVERSE, ITEM, item, "Item"), + DATA(A_NORMAL, ITEM_SELECTED, item_selected, "Selected item"), + DATA(A_REVERSE, TAG, tag, "Tag"), + DATA(A_REVERSE, TAG_SELECTED, tag_selected, "Selected tag"), + DATA(A_NORMAL, TAG_KEY, tag_key, "Tag key"), + DATA(A_BOLD, TAG_KEY_SELECTED, tag_key_selected, "Selected tag key"), + DATA(A_REVERSE, CHECK, check, "Check box"), + DATA(A_REVERSE, CHECK_SELECTED, check_selected, "Selected check box"), + DATA(A_REVERSE, UARROW, uarrow, "Up arrow"), + DATA(A_REVERSE, DARROW, darrow, "Down arrow"), + DATA(A_NORMAL, ITEMHELP, itemhelp, "Item help-text"), + DATA(A_BOLD, FORM_ACTIVE_TEXT, form_active_text, "Active form text"), + DATA(A_REVERSE, FORM_TEXT, form_text, "Form text"), + DATA(A_NORMAL, FORM_ITEM_READONLY, form_item_readonly, "Readonly form item") +}; +/* *INDENT-ON* */ + +/* + * Display background title if it exists ... + */ +void +dlg_put_backtitle(void) +{ + int i; + + if (dialog_vars.backtitle != NULL) { + chtype attr = A_NORMAL; + int backwidth = dlg_count_columns(dialog_vars.backtitle); + + wattrset(stdscr, screen_attr); + (void) wmove(stdscr, 0, 1); + dlg_print_text(stdscr, dialog_vars.backtitle, COLS - 2, &attr); + for (i = 0; i < COLS - backwidth; i++) + (void) waddch(stdscr, ' '); + (void) wmove(stdscr, 1, 1); + for (i = 0; i < COLS - 2; i++) + (void) waddch(stdscr, dlg_boxchar(ACS_HLINE)); + } + + (void) wnoutrefresh(stdscr); +} + +/* + * Set window to attribute 'attr'. There are more efficient ways to do this, + * but will not work on older/buggy ncurses versions. + */ +void +dlg_attr_clear(WINDOW *win, int height, int width, chtype attr) +{ + int i, j; + + wattrset(win, attr); + for (i = 0; i < height; i++) { + (void) wmove(win, i, 0); + for (j = 0; j < width; j++) + (void) waddch(win, ' '); + } + (void) touchwin(win); +} + +void +dlg_clear(void) +{ + dlg_attr_clear(stdscr, LINES, COLS, screen_attr); +} + +#define isprivate(s) ((s) != 0 && strstr(s, "\033[?") != 0) + +#define TTY_DEVICE "/dev/tty" + +/* + * If $DIALOG_TTY exists, allow the program to try to open the terminal + * directly when stdout is redirected. By default we require the "--stdout" + * option to be given, but some scripts were written making use of the + * behavior of dialog which tried opening the terminal anyway. + */ +static char * +dialog_tty(void) +{ + char *result = getenv("DIALOG_TTY"); + if (result != 0 && atoi(result) == 0) + result = 0; + return result; +} + +/* + * Open the terminal directly. If one of stdin, stdout or stderr really points + * to a tty, use it. Otherwise give up and open /dev/tty. + */ +static int +open_terminal(char **result, int mode) +{ + const char *device = TTY_DEVICE; + if (!isatty(fileno(stderr)) + || (device = ttyname(fileno(stderr))) == 0) { + if (!isatty(fileno(stdout)) + || (device = ttyname(fileno(stdout))) == 0) { + if (!isatty(fileno(stdin)) + || (device = ttyname(fileno(stdin))) == 0) { + device = TTY_DEVICE; + } + } + } + *result = dlg_strclone(device); + return open(device, mode); +} + +/* + * Do some initialization for dialog. + * + * 'input' is the real tty input of dialog. Usually it is stdin, but if + * --input-fd option is used, it may be anything. + * + * 'output' is where dialog will send its result. Usually it is stderr, but + * if --stdout or --output-fd is used, it may be anything. We are concerned + * mainly with the case where it happens to be the same as stdout. + */ +void +init_dialog(FILE *input, FILE *output) +{ + int fd1, fd2; + char *device = 0; + + dialog_state.output = output; + dialog_state.tab_len = TAB_LEN; + dialog_state.aspect_ratio = DEFAULT_ASPECT_RATIO; +#ifdef HAVE_COLOR + dialog_state.use_colors = USE_COLORS; /* use colors by default? */ + dialog_state.use_shadow = USE_SHADOW; /* shadow dialog boxes by default? */ +#endif + +#ifdef HAVE_RC_FILE + if (dlg_parse_rc() == -1) /* Read the configuration file */ + dlg_exiterr("init_dialog: dlg_parse_rc"); +#endif + + /* + * Some widgets (such as gauge) may read from the standard input. Pipes + * only connect stdout/stdin, so there is not much choice. But reading a + * pipe would get in the way of curses' normal reading stdin for getch. + * + * As in the --stdout (see below), reopening the terminal does not always + * work properly. dialog provides a --pipe-fd option for this purpose. We + * test that case first (differing fileno's for input/stdin). If the + * fileno's are equal, but we're not reading from a tty, see if we can open + * /dev/tty. + */ + dialog_state.pipe_input = stdin; + if (fileno(input) != fileno(stdin)) { + if ((fd1 = dup(fileno(input))) >= 0 + && (fd2 = dup(fileno(stdin))) >= 0) { + (void) dup2(fileno(input), fileno(stdin)); + dialog_state.pipe_input = fdopen(fd2, "r"); + if (fileno(stdin) != 0) /* some functions may read fd #0 */ + (void) dup2(fileno(stdin), 0); + } else + dlg_exiterr("cannot open tty-input"); + } else if (!isatty(fileno(stdin))) { + if ((fd1 = open_terminal(&device, O_RDONLY)) >= 0 + && (fd2 = dup(fileno(stdin))) >= 0) { + dialog_state.pipe_input = fdopen(fd2, "r"); + if (freopen(device, "r", stdin) == 0) + dlg_exiterr("cannot open tty-input"); + if (fileno(stdin) != 0) /* some functions may read fd #0 */ + (void) dup2(fileno(stdin), 0); + } + free(device); + } + + /* + * If stdout is not a tty and dialog is called with the --stdout option, we + * have to provide for a way to write to the screen. + * + * The curses library normally writes its output to stdout, leaving stderr + * free for scripting. Scripts are simpler when stdout is redirected. The + * newterm function is useful; it allows us to specify where the output + * goes. Reopening the terminal is not portable since several + * configurations do not allow this to work properly: + * + * a) some getty implementations (and possibly broken tty drivers, e.g., on + * HPUX 10 and 11) cause stdin to act as if it is still in cooked mode + * even though results from ioctl's state that it is successfully + * altered to raw mode. Broken is the proper term. + * + * b) the user may not have permissions on the device, e.g., if one su's + * from the login user to another non-privileged user. + */ + if (!isatty(fileno(stdout)) + && (fileno(stdout) == fileno(output) || dialog_tty())) { + if ((fd1 = open_terminal(&device, O_WRONLY)) >= 0 + && (dialog_state.screen_output = fdopen(fd1, "w")) != 0) { + if (newterm(NULL, dialog_state.screen_output, stdin) == 0) { + dlg_exiterr("cannot initialize curses"); + } + free(device); + } else { + dlg_exiterr("cannot open tty-output"); + } + } else { + dialog_state.screen_output = stdout; + (void) initscr(); + } +#ifdef NCURSES_VERSION + /* + * Cancel xterm's alternate-screen mode. + */ + if (!dialog_vars.keep_tite + && (dialog_state.screen_output != stdout + || isatty(fileno(dialog_state.screen_output))) + && key_mouse != 0 /* xterm and kindred */ + && isprivate(enter_ca_mode) + && isprivate(exit_ca_mode)) { + /* + * initscr() or newterm() already did putp(enter_ca_mode) as a side + * effect of initializing the screen. It would be nice to not even + * do that, but we do not really have access to the correct copy of + * the terminfo description until those functions have been invoked. + */ + (void) putp(exit_ca_mode); + (void) putp(clear_screen); + /* + * Prevent ncurses from switching "back" to the normal screen when + * exiting from dialog. That would move the cursor to the original + * location saved in xterm. Normally curses sets the cursor position + * to the first line after the display, but the alternate screen + * switching is done after that point. + * + * Cancelling the strings altogether also works around the buggy + * implementation of alternate-screen in rxvt, etc., which clear + * more of the display than they should. + */ + enter_ca_mode = 0; + exit_ca_mode = 0; + } +#endif +#ifdef HAVE_FLUSHINP + (void) flushinp(); +#endif + (void) keypad(stdscr, TRUE); + (void) cbreak(); + (void) noecho(); + mouse_open(); + dialog_state.screen_initialized = TRUE; + +#ifdef HAVE_COLOR + if (dialog_state.use_colors || dialog_state.use_shadow) + dlg_color_setup(); /* Set up colors */ +#endif + + /* Set screen to screen attribute */ + dlg_clear(); +} + +#ifdef HAVE_COLOR +static int defined_colors = 1; /* pair-0 is reserved */ +/* + * Setup for color display + */ +void +dlg_color_setup(void) +{ + unsigned i; + + if (has_colors()) { /* Terminal supports color? */ + (void) start_color(); + +#if defined(HAVE_USE_DEFAULT_COLORS) + use_default_colors(); +#endif + +#if defined(__NetBSD__) && defined(_CURSES_) +#define C_ATTR(x,y) (((x) != 0 ? A_BOLD : 0) | COLOR_PAIR((y))) + /* work around bug in NetBSD curses */ + for (i = 0; i < sizeof(dlg_color_table) / + sizeof(dlg_color_table[0]); i++) { + + /* Initialize color pairs */ + (void) init_pair(i + 1, + dlg_color_table[i].fg, + dlg_color_table[i].bg); + + /* Setup color attributes */ + dlg_color_table[i].atr = C_ATTR(dlg_color_table[i].hilite, i + 1); + } + defined_colors = i + 1; +#else + for (i = 0; i < sizeof(dlg_color_table) / + sizeof(dlg_color_table[0]); i++) { + + /* Initialize color pairs */ + chtype color = dlg_color_pair(dlg_color_table[i].fg, + dlg_color_table[i].bg); + + /* Setup color attributes */ + dlg_color_table[i].atr = ((dlg_color_table[i].hilite + ? A_BOLD + : 0) + | color); + } +#endif + } else { + dialog_state.use_colors = FALSE; + dialog_state.use_shadow = FALSE; + } +} + +int +dlg_color_count(void) +{ + return sizeof(dlg_color_table) / sizeof(dlg_color_table[0]); +} + +/* + * Reuse color pairs (they are limited), returning a COLOR_PAIR() value if we + * have (or can) define a pair with the given color as foreground on the + * window's defined background. + */ +chtype +dlg_color_pair(int foreground, int background) +{ + chtype result = 0; + int pair; + short fg, bg; + bool found = FALSE; + + for (pair = 1; pair < defined_colors; ++pair) { + if (pair_content((short) pair, &fg, &bg) != ERR + && fg == foreground + && bg == background) { + result = (chtype) COLOR_PAIR(pair); + found = TRUE; + break; + } + } + if (!found && (defined_colors + 1) < COLOR_PAIRS) { + pair = defined_colors++; + (void) init_pair((short) pair, (short) foreground, (short) background); + result = (chtype) COLOR_PAIR(pair); + } + return result; +} + +/* + * Reuse color pairs (they are limited), returning a COLOR_PAIR() value if we + * have (or can) define a pair with the given color as foreground on the + * window's defined background. + */ +static chtype +define_color(WINDOW *win, int foreground) +{ + chtype attrs = getattrs(win); + int pair; + short fg, bg, background; + + if ((pair = PAIR_NUMBER(attrs)) != 0 + && pair_content((short) pair, &fg, &bg) != ERR) { + background = bg; + } else { + background = COLOR_BLACK; + } + return dlg_color_pair(foreground, background); +} +#endif + +/* + * End using dialog functions. + */ +void +end_dialog(void) +{ + if (dialog_state.screen_initialized) { + dialog_state.screen_initialized = FALSE; + mouse_close(); + (void) endwin(); + (void) fflush(stdout); + } +} + +#define isOurEscape(p) (((p)[0] == '\\') && ((p)[1] == 'Z') && ((p)[2] != 0)) + +static int +centered(int width, const char *string) +{ + int len = dlg_count_columns(string); + int left; + int hide = 0; + int n; + + if (dialog_vars.colors) { + for (n = 0; n < len; ++n) { + if (isOurEscape(string + n)) { + hide += 3; + } + } + } + left = (width - (len - hide)) / 2 - 1; + if (left < 0) + left = 0; + return left; +} + +/* + * Print up to 'cols' columns from 'text', optionally rendering our escape + * sequence for attributes and color. + */ +void +dlg_print_text(WINDOW *win, const char *txt, int cols, chtype *attr) +{ + int y_origin, x_origin; + int y_before, x_before = 0; + int y_after, x_after; + int tabbed = 0; + bool thisTab; + bool ended = FALSE; + chtype useattr; + + getyx(win, y_origin, x_origin); + while (cols > 0 && (*txt != '\0')) { + if (dialog_vars.colors) { + while (isOurEscape(txt)) { + int code; + + txt += 2; + switch (code = CharOf(*txt)) { +#ifdef HAVE_COLOR + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + *attr &= ~A_COLOR; + *attr |= define_color(win, code - '0'); + break; +#endif + case 'B': + *attr &= ~A_BOLD; + break; + case 'b': + *attr |= A_BOLD; + break; + case 'R': + *attr &= ~A_REVERSE; + break; + case 'r': + *attr |= A_REVERSE; + break; + case 'U': + *attr &= ~A_UNDERLINE; + break; + case 'u': + *attr |= A_UNDERLINE; + break; + case 'n': + *attr = A_NORMAL; + break; + } + ++txt; + } + } + if (ended || *txt == '\n' || *txt == '\0') + break; + useattr = (*attr) & A_ATTRIBUTES; +#ifdef HAVE_COLOR + /* + * Prevent this from making text invisible when the foreground and + * background colors happen to be the same, and there's no bold + * attribute. + */ + if ((useattr & A_COLOR) != 0 && (useattr & A_BOLD) == 0) { + short pair = (short) PAIR_NUMBER(useattr); + short fg, bg; + if (pair_content(pair, &fg, &bg) != ERR + && fg == bg) { + useattr &= ~A_COLOR; + useattr |= dlg_color_pair(fg, ((bg == COLOR_BLACK) + ? COLOR_WHITE + : COLOR_BLACK)); + } + } +#endif + /* + * Write the character, using curses to tell exactly how wide it + * is. If it is a tab, discount that, since the caller thinks + * tabs are nonprinting, and curses will expand tabs to one or + * more blanks. + */ + thisTab = (CharOf(*txt) == TAB); + if (thisTab) + getyx(win, y_before, x_before); + (void) waddch(win, CharOf(*txt++) | useattr); + getyx(win, y_after, x_after); + if (thisTab && (y_after == y_origin)) + tabbed += (x_after - x_before); + if (y_after != y_origin || x_after >= cols + tabbed + x_origin) { + ended = TRUE; + } + } +} + +/* + * Print one line of the prompt in the window within the limits of the + * specified right margin. The line will end on a word boundary and a pointer + * to the start of the next line is returned, or a NULL pointer if the end of + * *prompt is reached. + */ +const char * +dlg_print_line(WINDOW *win, + chtype *attr, + const char *prompt, + int lm, int rm, int *x) +{ + const char *wrap_ptr = prompt; + const char *test_ptr = prompt; + const int *cols = dlg_index_columns(prompt); + const int *indx = dlg_index_wchars(prompt); + int wrap_inx = 0; + int test_inx = 0; + int cur_x = lm; + int hidden = 0; + int limit = dlg_count_wchars(prompt); + int n; + int tabbed = 0; + + *x = 1; + + /* + * Set *test_ptr to the end of the line or the right margin (rm), whichever + * is less, and set wrap_ptr to the end of the last word in the line. + */ + for (n = 0; n < limit; ++n) { + test_ptr = prompt + indx[test_inx]; + if (*test_ptr == '\n' || *test_ptr == '\0' || cur_x >= (rm + hidden)) + break; + if (*test_ptr == TAB && n == 0) { + tabbed = 8; /* workaround for leading tabs */ + } else if (*test_ptr == ' ' && n != 0 && prompt[indx[n - 1]] != ' ') { + wrap_inx = n; + *x = cur_x; + } else if (isOurEscape(test_ptr)) { + hidden += 3; + n += 2; + } + cur_x = lm + tabbed + cols[n + 1]; + if (cur_x > (rm + hidden)) + break; + test_inx = n + 1; + } + + /* + * If the line doesn't reach the right margin in the middle of a word, then + * we don't have to wrap it at the end of the previous word. + */ + test_ptr = prompt + indx[test_inx]; + if (*test_ptr == '\n' || *test_ptr == ' ' || *test_ptr == '\0') { + wrap_inx = test_inx; + while (wrap_inx > 0 && prompt[indx[wrap_inx - 1]] == ' ') { + wrap_inx--; + } + *x = lm + indx[wrap_inx]; + } else if (*x == 1 && cur_x >= rm) { + /* + * If the line has no spaces, then wrap it anyway at the right margin + */ + *x = rm; + wrap_inx = test_inx; + } + wrap_ptr = prompt + indx[wrap_inx]; + + /* + * Print the line if we have a window pointer. Otherwise this routine + * is just being called for sizing the window. + */ + if (win) { + dlg_print_text(win, prompt, (cols[wrap_inx] - hidden), attr); + } + + /* *x tells the calling function how long the line was */ + if (*x == 1) + *x = rm; + + /* Find the start of the next line and return a pointer to it */ + test_ptr = wrap_ptr; + while (*test_ptr == ' ') + test_ptr++; + if (*test_ptr == '\n') + test_ptr++; + return (test_ptr); +} + +static void +justify_text(WINDOW *win, + const char *prompt, + int limit_y, + int limit_x, + int *high, int *wide) +{ + chtype attr = A_NORMAL; + int x = (2 * MARGIN); + int y = MARGIN; + int max_x = 2; + int lm = (2 * MARGIN); /* left margin (box-border plus a space) */ + int rm = limit_x; /* right margin */ + int bm = limit_y; /* bottom margin */ + int last_y = 0, last_x = 0; + + if (win) { + rm -= (2 * MARGIN); + bm -= (2 * MARGIN); + } + if (prompt == 0) + prompt = ""; + + if (win != 0) + getyx(win, last_y, last_x); + while (y <= bm && *prompt) { + x = lm; + + if (*prompt == '\n') { + while (*prompt == '\n' && y < bm) { + if (*(prompt + 1) != '\0') { + ++y; + if (win != 0) + (void) wmove(win, y, lm); + } + prompt++; + } + } else if (win != 0) + (void) wmove(win, y, lm); + + if (*prompt) { + prompt = dlg_print_line(win, &attr, prompt, lm, rm, &x); + if (win != 0) + getyx(win, last_y, last_x); + } + if (*prompt) { + ++y; + if (win != 0) + (void) wmove(win, y, lm); + } + max_x = MAX(max_x, x); + } + /* Move back to the last position after drawing prompt, for msgbox. */ + if (win != 0) + (void) wmove(win, last_y, last_x); + + /* Set the final height and width for the calling function */ + if (high != 0) + *high = y; + if (wide != 0) + *wide = max_x; +} + +/* + * 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. Note that the string may + * contain embedded newlines. + */ +void +dlg_print_autowrap(WINDOW *win, const char *prompt, int height, int width) +{ + justify_text(win, prompt, + height, + width, + (int *) 0, (int *) 0); +} + +/* + * Display the message in a scrollable window. Actually the way it works is + * that we create a "tall" window of the proper width, let the text wrap within + * that, and copy a slice of the result to the dialog. + * + * It works for ncurses. Other curses implementations show only blanks (Tru64) + * or garbage (NetBSD). + */ +int +dlg_print_scrolled(WINDOW *win, + const char *prompt, + int offset, + int height, + int width, + int pauseopt) +{ + int oldy, oldx; + int last = 0; + + getyx(win, oldy, oldx); +#ifdef NCURSES_VERSION + if (pauseopt) { + int wide = width - (2 * MARGIN); + int high = LINES; + int y, x; + int len; + int percent; + WINDOW *dummy; + char buffer[5]; + +#if defined(NCURSES_VERSION_PATCH) && NCURSES_VERSION_PATCH >= 20040417 + /* + * If we're not limited by the screensize, allow text to possibly be + * one character per line. + */ + if ((len = dlg_count_columns(prompt)) > high) + high = len; +#endif + dummy = newwin(high, width, 0, 0); + wbkgdset(dummy, dialog_attr | ' '); + wattrset(dummy, dialog_attr); + werase(dummy); + dlg_print_autowrap(dummy, prompt, high, width); + getyx(dummy, y, x); + + copywin(dummy, /* srcwin */ + win, /* dstwin */ + offset + MARGIN, /* sminrow */ + MARGIN, /* smincol */ + MARGIN, /* dminrow */ + MARGIN, /* dmincol */ + height, /* dmaxrow */ + wide, /* dmaxcol */ + FALSE); + + delwin(dummy); + + /* if the text is incomplete, or we have scrolled, show the percentage */ + if (y > 0 && wide > 4) { + percent = (int) ((height + offset) * 100.0 / y); + if (percent < 0) + percent = 0; + if (percent > 100) + percent = 100; + if (offset != 0 || percent != 100) { + (void) wattrset(win, position_indicator_attr); + (void) wmove(win, MARGIN + height, wide - 4); + (void) sprintf(buffer, "%d%%", percent); + (void) waddstr(win, buffer); + if ((len = (int) strlen(buffer)) < 4) { + wattrset(win, border_attr); + whline(win, dlg_boxchar(ACS_HLINE), 4 - len); + } + } + } + last = (y - height); + } else +#endif + { + (void) offset; + wattrset(win, dialog_attr); + dlg_print_autowrap(win, prompt, height + 1 + (3 * MARGIN), width); + last = 0; + } + wmove(win, oldy, oldx); + return last; +} + +int +dlg_check_scrolled(int key, int last, int page, bool * show, int *offset) +{ + int code = 0; + + *show = FALSE; + + switch (key) { + case DLGK_PAGE_FIRST: + if (*offset > 0) { + *offset = 0; + *show = TRUE; + } + break; + case DLGK_PAGE_LAST: + if (*offset < last) { + *offset = last; + *show = TRUE; + } + break; + case DLGK_GRID_UP: + if (*offset > 0) { + --(*offset); + *show = TRUE; + } + break; + case DLGK_GRID_DOWN: + if (*offset < last) { + ++(*offset); + *show = TRUE; + } + break; + case DLGK_PAGE_PREV: + if (*offset > 0) { + *offset -= page; + if (*offset < 0) + *offset = 0; + *show = TRUE; + } + break; + case DLGK_PAGE_NEXT: + if (*offset < last) { + *offset += page; + if (*offset > last) + *offset = last; + *show = TRUE; + } + break; + default: + code = -1; + break; + } + return code; +} + +/* + * Calculate the window size for preformatted text. This will calculate box + * dimensions that are at or close to the specified aspect ratio for the prompt + * string with all spaces and newlines preserved and additional newlines added + * as necessary. + */ +static void +auto_size_preformatted(const char *prompt, int *height, int *width) +{ + int high = 0, wide = 0; + float car; /* Calculated Aspect Ratio */ + float diff; + int max_y = SLINES - 1; + int max_x = SCOLS - 2; + int max_width = max_x; + int ar = dialog_state.aspect_ratio; + + /* Get the initial dimensions */ + justify_text((WINDOW *) 0, prompt, max_y, max_x, &high, &wide); + car = (float) (wide / high); + + /* + * If the aspect ratio is greater than it should be, then decrease the + * width proportionately. + */ + if (car > ar) { + diff = car / (float) ar; + max_x = (int) ((float) wide / diff + 4); + justify_text((WINDOW *) 0, prompt, max_y, max_x, &high, &wide); + car = (float) wide / (float) high; + } + + /* + * If the aspect ratio is too small after decreasing the width, then + * incrementally increase the width until the aspect ratio is equal to or + * greater than the specified aspect ratio. + */ + while (car < ar && max_x < max_width) { + max_x += 4; + justify_text((WINDOW *) 0, prompt, max_y, max_x, &high, &wide); + car = (float) (wide / high); + } + + *height = high; + *width = wide; +} + +/* + * Find the length of the longest "word" in the given string. By setting the + * widget width at least this long, we can avoid splitting a word on the + * margin. + */ +static int +longest_word(const char *string) +{ + int length, result = 0; + + while (*string != '\0') { + length = 0; + while (*string != '\0' && !isspace(UCH(*string))) { + length++; + string++; + } + result = MAX(result, length); + if (*string != '\0') + string++; + } + return result; +} + +/* + * if (height or width == -1) Maximize() + * if (height or width == 0), justify and return actual limits. + */ +static void +real_auto_size(const char *title, + const char *prompt, + int *height, int *width, + int boxlines, int mincols) +{ + int x = (dialog_vars.begin_set ? dialog_vars.begin_x : 2); + int y = (dialog_vars.begin_set ? dialog_vars.begin_y : 1); + int title_length = title ? dlg_count_columns(title) : 0; + int nc = 4; + int high; + int wide; + int save_high = *height; + int save_wide = *width; + + if (prompt == 0) { + if (*height == 0) + *height = -1; + if (*width == 0) + *width = -1; + } + + if (*height > 0) { + high = *height; + } else { + high = SLINES - y; + } + + if (*width > 0) { + wide = *width; + } else if (prompt != 0) { + wide = MAX(title_length, mincols); + if (strchr(prompt, '\n') == 0) { + double val = dialog_state.aspect_ratio * dlg_count_columns(prompt); + double xxx = sqrt(val); + int tmp = (int) xxx; + wide = MAX(wide, tmp); + wide = MAX(wide, longest_word(prompt)); + justify_text((WINDOW *) 0, prompt, high, wide, height, width); + } else { + auto_size_preformatted(prompt, height, width); + } + } else { + wide = SCOLS - x; + justify_text((WINDOW *) 0, prompt, high, wide, height, width); + } + + if (*width < title_length) { + justify_text((WINDOW *) 0, prompt, high, title_length, height, width); + *width = title_length; + } + + if (*width < mincols && save_wide == 0) + *width = mincols; + if (prompt != 0) { + *width += nc; + *height += boxlines + 2; + } + if (save_high > 0) + *height = save_high; + if (save_wide > 0) + *width = save_wide; +} + +/* End of real_auto_size() */ + +void +dlg_auto_size(const char *title, + const char *prompt, + int *height, + int *width, + int boxlines, + int mincols) +{ + real_auto_size(title, prompt, height, width, boxlines, mincols); + + if (*width > SCOLS) { + (*height)++; + *width = SCOLS; + } + + if (*height > SLINES) + *height = SLINES; +} + +/* + * if (height or width == -1) Maximize() + * if (height or width == 0) + * height=MIN(SLINES, num.lines in fd+n); + * width=MIN(SCOLS, MAX(longer line+n, mincols)); + */ +void +dlg_auto_sizefile(const char *title, + const char *file, + int *height, + int *width, + int boxlines, + int mincols) +{ + int count = 0; + int len = title ? dlg_count_columns(title) : 0; + int nc = 4; + int numlines = 2; + long offset; + int ch; + FILE *fd; + + /* Open input file for reading */ + if ((fd = fopen(file, "rb")) == NULL) + dlg_exiterr("dlg_auto_sizefile: Cannot open input file %s", file); + + if ((*height == -1) || (*width == -1)) { + *height = SLINES - (dialog_vars.begin_set ? dialog_vars.begin_y : 0); + *width = SCOLS - (dialog_vars.begin_set ? dialog_vars.begin_x : 0); + } + if ((*height != 0) && (*width != 0)) { + (void) fclose(fd); + if (*width > SCOLS) + *width = SCOLS; + if (*height > SLINES) + *height = SLINES; + return; + } + + while (!feof(fd)) { + offset = 0; + while (((ch = getc(fd)) != '\n') && !feof(fd)) + if ((ch == TAB) && (dialog_vars.tab_correct)) + offset += dialog_state.tab_len - (offset % dialog_state.tab_len); + else + offset++; + + if (offset > len) + len = offset; + + count++; + } + + /* now 'count' has the number of lines of fd and 'len' the max lenght */ + + *height = MIN(SLINES, count + numlines + boxlines); + *width = MIN(SCOLS, MAX((len + nc), mincols)); + /* here width and height can be maximized if > SCOLS|SLINES because + textbox-like widgets don't put all <file> on the screen. + Msgbox-like widget instead have to put all <text> correctly. */ + + (void) fclose(fd); +} + +/* + * Draw a rectangular box with line drawing characters. + * + * borderchar is used to color the upper/left edges. + * + * boxchar is used to color the right/lower edges. It also is fill-color used + * for the box contents. + * + * Normally, if you are drawing a scrollable box, use menubox_border_attr for + * boxchar, and menubox_attr for borderchar since the scroll-arrows are drawn + * with menubox_attr at the top, and menubox_border_attr at the bottom. That + * also (given the default color choices) produces a recessed effect. + * + * If you want a raised effect (and are not going to use the scroll-arrows), + * reverse this choice. + */ +void +dlg_draw_box(WINDOW *win, int y, int x, int height, int width, + chtype boxchar, chtype borderchar) +{ + int i, j; + chtype save = getattrs(win); + + wattrset(win, 0); + for (i = 0; i < height; i++) { + (void) wmove(win, y + i, x); + for (j = 0; j < width; j++) + if (!i && !j) + (void) waddch(win, borderchar | dlg_boxchar(ACS_ULCORNER)); + else if (i == height - 1 && !j) + (void) waddch(win, borderchar | dlg_boxchar(ACS_LLCORNER)); + else if (!i && j == width - 1) + (void) waddch(win, boxchar | dlg_boxchar(ACS_URCORNER)); + else if (i == height - 1 && j == width - 1) + (void) waddch(win, boxchar | dlg_boxchar(ACS_LRCORNER)); + else if (!i) + (void) waddch(win, borderchar | dlg_boxchar(ACS_HLINE)); + else if (i == height - 1) + (void) waddch(win, boxchar | dlg_boxchar(ACS_HLINE)); + else if (!j) + (void) waddch(win, borderchar | dlg_boxchar(ACS_VLINE)); + else if (j == width - 1) + (void) waddch(win, boxchar | dlg_boxchar(ACS_VLINE)); + else + (void) waddch(win, boxchar | ' '); + } + wattrset(win, save); +} + +#ifdef HAVE_COLOR +/* + * Draw a shadow on the parent window corresponding to the right- and + * bottom-edge of the child window, to give a 3-dimensional look. + */ +static void +draw_childs_shadow(WINDOW *parent, WINDOW *child) +{ + if (has_colors()) { /* Whether terminal supports color? */ + chtype save = getattrs(parent); + + dlg_draw_shadow(parent, + getbegy(child) - getbegy(parent), + getbegx(child) - getbegx(parent), + getmaxy(child), + getmaxx(child)); + wattrset(parent, save); + } +} + +/* + * Draw shadows along the right and bottom edge to give a more 3D look + * to the boxes + */ +void +dlg_draw_shadow(WINDOW *win, int y, int x, int height, int width) +{ + int i, j; + + if (has_colors()) { /* Whether terminal supports color? */ + wattrset(win, shadow_attr); + for (i = 0; i < SHADOW_ROWS; ++i) { + for (j = 0; j < width; ++j) { + if (wmove(win, i + y + height, j + x + SHADOW_COLS) != ERR) { + (void) waddch(win, winch(win) & (chtype) (~A_COLOR)); + } + } + } + for (i = 0; i < height; i++) { + for (j = 0; j < SHADOW_COLS; ++j) { + if (wmove(win, i + y + SHADOW_ROWS, j + x + width) != ERR) { + (void) waddch(win, winch(win) & (chtype) (~A_COLOR)); + } + } + } + (void) wnoutrefresh(win); + } +} +#endif /* HAVE_COLOR */ + +/* + * Allow shell scripts to remap the exit codes so they can distinguish ESC + * from ERROR. + */ +void +dlg_exit(int code) +{ + /* *INDENT-OFF* */ + static const struct { + int code; + const char *name; + } table[] = { + { DLG_EXIT_CANCEL, "DIALOG_CANCEL" }, + { DLG_EXIT_ERROR, "DIALOG_ERROR" }, + { DLG_EXIT_ESC, "DIALOG_ESC" }, + { DLG_EXIT_EXTRA, "DIALOG_EXTRA" }, + { DLG_EXIT_HELP, "DIALOG_HELP" }, + { DLG_EXIT_OK, "DIALOG_OK" }, + { DLG_EXIT_ITEM_HELP, "DIALOG_ITEM_HELP" }, + }; + /* *INDENT-ON* */ + + unsigned n; + char *name; + char *temp; + long value; + bool overridden = FALSE; + + retry: + for (n = 0; n < sizeof(table) / sizeof(table[0]); n++) { + if (table[n].code == code) { + if ((name = getenv(table[n].name)) != 0) { + value = strtol(name, &temp, 0); + if (temp != 0 && temp != name && *temp == '\0') { + code = value; + overridden = TRUE; + } + } + break; + } + } + + /* + * Prior to 2004/12/19, a widget using --item-help would exit with "OK" + * if the help button were selected. Now we want to exit with "HELP", + * but allow the environment variable to override. + */ + if (code == DLG_EXIT_ITEM_HELP && !overridden) { + code = DLG_EXIT_HELP; + goto retry; + } +#ifdef NO_LEAKS + _dlg_inputstr_leaks(); +#if defined(NCURSES_VERSION) && defined(HAVE__NC_FREE_AND_EXIT) + _nc_free_and_exit(code); +#endif +#endif + + if (dialog_state.input == stdin) { + exit(code); + } else { + /* + * Just in case of using --input-fd option, do not + * call atexit functions of ncurses which may hang. + */ + if (dialog_state.input) { + fclose(dialog_state.input); + dialog_state.input = 0; + } + if (dialog_state.pipe_input) { + if (dialog_state.pipe_input != stdin) { + fclose(dialog_state.pipe_input); + dialog_state.pipe_input = 0; + } + } + _exit(code); + } +} + +/* quit program killing all tailbg */ +void +dlg_exiterr(const char *fmt,...) +{ + int retval; + va_list ap; + + end_dialog(); + + (void) fputc('\n', stderr); + va_start(ap, fmt); + (void) vfprintf(stderr, fmt, ap); + va_end(ap); + (void) fputc('\n', stderr); + + dlg_killall_bg(&retval); + + (void) fflush(stderr); + (void) fflush(stdout); + dlg_exit(DLG_EXIT_ERROR); +} + +void +dlg_beeping(void) +{ + if (dialog_vars.beep_signal) { + (void) beep(); + dialog_vars.beep_signal = 0; + } +} + +void +dlg_print_size(int height, int width) +{ + if (dialog_vars.print_siz) + fprintf(dialog_state.output, "Size: %d, %d\n", height, width); +} + +void +dlg_ctl_size(int height, int width) +{ + if (dialog_vars.size_err) { + if ((width > COLS) || (height > LINES)) { + dlg_exiterr("Window too big. (height, width) = (%d, %d). Max allowed (%d, %d).", + height, width, LINES, COLS); + } +#ifdef HAVE_COLOR + else if ((dialog_state.use_shadow) + && ((width > SCOLS || height > SLINES))) { + if ((width <= COLS) && (height <= LINES)) { + /* try again, without shadows */ + dialog_state.use_shadow = 0; + } else { + dlg_exiterr("Window+Shadow too big. (height, width) = (%d, %d). Max allowed (%d, %d).", + height, width, SLINES, SCOLS); + } + } +#endif + } +} + +/* + * If the --tab-correct was not selected, convert tabs to single spaces. + */ +void +dlg_tab_correct_str(char *prompt) +{ + char *ptr; + + if (dialog_vars.tab_correct) { + while ((ptr = strchr(prompt, TAB)) != NULL) { + *ptr = ' '; + prompt = ptr; + } + } +} + +void +dlg_calc_listh(int *height, int *list_height, int item_no) +{ + /* calculate new height and list_height */ + int rows = SLINES - (dialog_vars.begin_set ? dialog_vars.begin_y : 0); + if (rows - (*height) > 0) { + if (rows - (*height) > item_no) + *list_height = item_no; + else + *list_height = rows - (*height); + } + (*height) += (*list_height); +} + +/* obsolete */ +int +dlg_calc_listw(int item_no, char **items, int group) +{ + int n, i, len1 = 0, len2 = 0; + for (i = 0; i < (item_no * group); i += group) { + if ((n = dlg_count_columns(items[i])) > len1) + len1 = n; + if ((n = dlg_count_columns(items[i + 1])) > len2) + len2 = n; + } + return len1 + len2; +} + +int +dlg_calc_list_width(int item_no, DIALOG_LISTITEM * items) +{ + int n, i, len1 = 0, len2 = 0; + for (i = 0; i < item_no; ++i) { + if ((n = dlg_count_columns(items[i].name)) > len1) + len1 = n; + if ((n = dlg_count_columns(items[i].text)) > len2) + len2 = n; + } + return len1 + len2; +} + +char * +dlg_strempty(void) +{ + static char empty[] = ""; + return empty; +} + +char * +dlg_strclone(const char *cprompt) +{ + char *prompt = dlg_malloc(char, strlen(cprompt) + 1); + assert_ptr(prompt, "dlg_strclone"); + strcpy(prompt, cprompt); + return prompt; +} + +chtype +dlg_asciibox(chtype ch) +{ + chtype result = 0; + + if (ch == ACS_ULCORNER) + result = '+'; + else if (ch == ACS_LLCORNER) + result = '+'; + else if (ch == ACS_URCORNER) + result = '+'; + else if (ch == ACS_LRCORNER) + result = '+'; + else if (ch == ACS_HLINE) + result = '-'; + else if (ch == ACS_VLINE) + result = '|'; + else if (ch == ACS_LTEE) + result = '+'; + else if (ch == ACS_RTEE) + result = '+'; + else if (ch == ACS_UARROW) + result = '^'; + else if (ch == ACS_DARROW) + result = 'v'; + + return result; +} + +chtype +dlg_boxchar(chtype ch) +{ + chtype result = dlg_asciibox(ch); + + if (result != 0) { + if (dialog_vars.ascii_lines) + ch = result; + else if (dialog_vars.no_lines) + ch = ' '; + } + return ch; +} + +int +dlg_box_x_ordinate(int width) +{ + int x; + + if (dialog_vars.begin_set == 1) { + x = dialog_vars.begin_x; + } else { + /* center dialog box on screen unless --begin-set */ + x = (SCOLS - width) / 2; + } + return x; +} + +int +dlg_box_y_ordinate(int height) +{ + int y; + + if (dialog_vars.begin_set == 1) { + y = dialog_vars.begin_y; + } else { + /* center dialog box on screen unless --begin-set */ + y = (SLINES - height) / 2; + } + return y; +} + +void +dlg_draw_title(WINDOW *win, const char *title) +{ + if (title != NULL) { + chtype attr = A_NORMAL; + chtype save = getattrs(win); + int x = centered(getmaxx(win), title); + + wattrset(win, title_attr); + wmove(win, 0, x); + dlg_print_text(win, title, getmaxx(win) - x, &attr); + wattrset(win, save); + } +} + +void +dlg_draw_bottom_box(WINDOW *win) +{ + int width = getmaxx(win); + int height = getmaxy(win); + int i; + + wattrset(win, border_attr); + (void) wmove(win, height - 3, 0); + (void) waddch(win, dlg_boxchar(ACS_LTEE)); + for (i = 0; i < width - 2; i++) + (void) waddch(win, dlg_boxchar(ACS_HLINE)); + wattrset(win, dialog_attr); + (void) waddch(win, dlg_boxchar(ACS_RTEE)); + (void) wmove(win, height - 2, 1); + for (i = 0; i < width - 2; i++) + (void) waddch(win, ' '); +} + +/* + * Remove a window, repainting everything else. This would be simpler if we + * used the panel library, but that is not _always_ available. + */ +void +dlg_del_window(WINDOW *win) +{ + DIALOG_WINDOWS *p, *q, *r; + + /* + * If --keep-window was set, do not delete/repaint the windows. + */ + if (dialog_vars.keep_window) + return; + + /* Leave the main window untouched if there are no background windows. + * We do this so the current window will not be cleared on exit, allowing + * things like the infobox demo to run without flicker. + */ + if (dialog_state.getc_callbacks != 0) { + touchwin(stdscr); + wnoutrefresh(stdscr); + } + + for (p = dialog_state.all_windows, q = r = 0; p != 0; r = p, p = p->next) { + if (p->normal == win) { + q = p; /* found a match - should be only one */ + if (r == 0) { + dialog_state.all_windows = p->next; + } else { + r->next = p->next; + } + } else { + if (p->shadow != 0) { + touchwin(p->shadow); + wnoutrefresh(p->shadow); + } + touchwin(p->normal); + wnoutrefresh(p->normal); + } + } + + if (q) { + delwin(q->normal); + dlg_unregister_window(q->normal); + free(q); + } + doupdate(); +} + +/* + * Create a window, optionally with a shadow. + */ +WINDOW * +dlg_new_window(int height, int width, int y, int x) +{ + WINDOW *win; + DIALOG_WINDOWS *p = dlg_calloc(DIALOG_WINDOWS, 1); + + if ((win = newwin(height, width, y, x)) == 0) { + dlg_exiterr("Can't make new window at (%d,%d), size (%d,%d).\n", + y, x, height, width); + } + p->next = dialog_state.all_windows; + p->normal = win; + dialog_state.all_windows = p; +#ifdef HAVE_COLOR + if (dialog_state.use_shadow) { + draw_childs_shadow(p->shadow = stdscr, win); + } +#endif + + (void) keypad(win, TRUE); + return win; +} + +WINDOW * +dlg_new_modal_window(WINDOW *parent, int height, int width, int y, int x) +{ + WINDOW *win; + DIALOG_WINDOWS *p = dlg_calloc(DIALOG_WINDOWS, 1); + + (void) parent; + if ((win = newwin(height, width, y, x)) == 0) { + dlg_exiterr("Can't make new window at (%d,%d), size (%d,%d).\n", + y, x, height, width); + } + p->next = dialog_state.all_windows; + p->normal = win; + dialog_state.all_windows = p; +#ifdef HAVE_COLOR + if (dialog_state.use_shadow) { + draw_childs_shadow(p->shadow = parent, win); + } +#endif + + (void) keypad(win, TRUE); + return win; +} + +/* + * Move/Resize a window, optionally with a shadow. + */ +#ifdef KEY_RESIZE +void +dlg_move_window(WINDOW *win, int height, int width, int y, int x) +{ + DIALOG_WINDOWS *p, *q; + + if (win != 0) { + dlg_ctl_size(height, width); + + for (p = dialog_state.all_windows; p != 0; p = q) { + q = p->next; + if (p->normal == win) { + break; + } + } + + if (p != 0) { + (void) wresize(win, height, width); + (void) mvwin(win, y, x); +#ifdef HAVE_COLOR + if (p->shadow != 0) { + if (dialog_state.use_shadow) { + (void) mvwin(p->shadow, y + SHADOW_ROWS, x + SHADOW_COLS); + } else { + p->shadow = 0; + } + } +#endif + (void) refresh(); + +#ifdef HAVE_COLOR + if (p->shadow) + draw_childs_shadow(p->shadow, win); +#endif + } + } +} +#endif /* KEY_RESIZE */ + +WINDOW * +dlg_sub_window(WINDOW *parent, int height, int width, int y, int x) +{ + WINDOW *win; + + if ((win = subwin(parent, height, width, y, x)) == 0) { + dlg_exiterr("Can't make sub-window at (%d,%d), size (%d,%d).\n", + y, x, height, width); + } + + (void) keypad(win, TRUE); + return win; +} + +/* obsolete */ +int +dlg_default_item(char **items, int llen) +{ + int result = 0; + + if (dialog_vars.default_item != 0) { + int count = 0; + while (*items != 0) { + if (!strcmp(dialog_vars.default_item, *items)) { + result = count; + break; + } + items += llen; + count++; + } + } + return result; +} + +int +dlg_default_listitem(DIALOG_LISTITEM * items) +{ + int result = 0; + + if (dialog_vars.default_item != 0) { + int count = 0; + while (items->name != 0) { + if (!strcmp(dialog_vars.default_item, items->name)) { + result = count; + break; + } + ++items; + count++; + } + } + return result; +} + +/* + * Draw the string for item_help + */ +void +dlg_item_help(const char *txt) +{ + if (USE_ITEM_HELP(txt)) { + chtype attr = A_NORMAL; + int y, x; + + wattrset(stdscr, itemhelp_attr); + (void) wmove(stdscr, LINES - 1, 0); + (void) wclrtoeol(stdscr); + (void) addch(' '); + dlg_print_text(stdscr, txt, COLS - 1, &attr); + if (itemhelp_attr & A_COLOR) { + /* fill the remainder of the line with the window's attributes */ + getyx(stdscr, y, x); + while (x < COLS) { + (void) addch(' '); + ++x; + } + } + (void) wnoutrefresh(stdscr); + } +} + +#ifndef HAVE_STRCASECMP +int +dlg_strcmp(const char *a, const char *b) +{ + int ac, bc, cmp; + + for (;;) { + ac = UCH(*a++); + bc = UCH(*b++); + if (isalpha(ac) && islower(ac)) + ac = _toupper(ac); + if (isalpha(bc) && islower(bc)) + bc = _toupper(bc); + cmp = ac - bc; + if (ac == 0 || bc == 0 || cmp != 0) + break; + } + return cmp; +} +#endif + +/* + * Returns true if 'dst' points to a blank which follows another blank which + * is not a leading blank on a line. + */ +static bool +trim_blank(char *base, char *dst) +{ + int count = 0; + + while (dst-- != base) { + if (*dst == '\n') { + return FALSE; + } else if (*dst != ' ') { + return (count > 1); + } else { + count++; + } + } + return FALSE; +} + +/* + * Change embedded "\n" substrings to '\n' characters and tabs to single + * spaces. If there are no "\n"s, it will strip all extra spaces, for + * justification. If it has "\n"'s, it will preserve extra spaces. If cr_wrap + * is set, it will preserve '\n's. + */ +void +dlg_trim_string(char *s) +{ + char *base = s; + char *p1; + char *p = s; + int has_newlines = (strstr(s, "\\n") != 0); + + while (*p != '\0') { + if (*p == TAB && !dialog_vars.nocollapse) + *p = ' '; + + if (has_newlines) { /* If prompt contains "\n" strings */ + if (*p == '\\' && *(p + 1) == 'n') { + *s++ = '\n'; + p += 2; + p1 = p; + /* + * Handle end of lines intelligently. If '\n' follows "\n" + * then ignore the '\n'. This eliminates the need to escape + * the '\n' character (no need to use "\n\"). + */ + while (*p1 == ' ') + p1++; + if (*p1 == '\n') + p = p1 + 1; + } else if (*p == '\n') { + if (dialog_vars.cr_wrap) + *s++ = *p++; + else { + /* Replace the '\n' with a space if cr_wrap is not set */ + if (!trim_blank(base, s)) + *s++ = ' '; + p++; + } + } else /* If *p != '\n' */ + *s++ = *p++; + } else if (dialog_vars.trim_whitespace) { + if (*p == ' ') { + if (*(s - 1) != ' ') { + *s++ = ' '; + p++; + } else + p++; + } else if (*p == '\n') { + if (dialog_vars.cr_wrap) + *s++ = *p++; + else if (*(s - 1) != ' ') { + /* Strip '\n's if cr_wrap is not set. */ + *s++ = ' '; + p++; + } else + p++; + } else + *s++ = *p++; + } else { /* If there are no "\n" strings */ + if (*p == ' ' && !dialog_vars.nocollapse) { + if (!trim_blank(base, s)) + *s++ = *p; + p++; + } else + *s++ = *p++; + } + } + + *s = '\0'; +} + +void +dlg_set_focus(WINDOW *parent, WINDOW *win) +{ + if (win != 0) { + (void) wmove(parent, + getpary(win) + getcury(win), + getparx(win) + getcurx(win)); + (void) wnoutrefresh(win); + (void) doupdate(); + } +} + +/* + * Returns the nominal maximum buffer size. + */ +int +dlg_max_input(int max_len) +{ + if (dialog_vars.max_input != 0 && dialog_vars.max_input < MAX_LEN) + max_len = dialog_vars.max_input; + + return max_len; +} + +/* + * Free storage used for the result buffer. + */ +void +dlg_clr_result(void) +{ + if (dialog_vars.input_length) { + dialog_vars.input_length = 0; + if (dialog_vars.input_result) + free(dialog_vars.input_result); + } + dialog_vars.input_result = 0; +} + +/* + * Setup a fixed-buffer for the result. + */ +char * +dlg_set_result(const char *string) +{ + unsigned need = string ? strlen(string) + 1 : 0; + + /* inputstr.c needs a fixed buffer */ + if (need < MAX_LEN) + need = MAX_LEN; + + /* + * If the buffer is not big enough, allocate a new one. + */ + if (dialog_vars.input_length != 0 + || dialog_vars.input_result == 0 + || need > MAX_LEN) { + + dlg_clr_result(); + + dialog_vars.input_length = need; + dialog_vars.input_result = dlg_malloc(char, need); + assert_ptr(dialog_vars.input_result, "dlg_set_result"); + } + + strcpy(dialog_vars.input_result, string ? string : ""); + + return dialog_vars.input_result; +} + +/* + * Accumulate results in dynamically allocated buffer. + * If input_length is zero, it is a MAX_LEN buffer belonging to the caller. + */ +void +dlg_add_result(const char *string) +{ + unsigned have = (dialog_vars.input_result + ? strlen(dialog_vars.input_result) + : 0); + unsigned want = strlen(string) + 1 + have; + + if ((want >= MAX_LEN) + || (dialog_vars.input_length != 0) + || (dialog_vars.input_result == 0)) { + + if (dialog_vars.input_length == 0 + || dialog_vars.input_result == 0) { + + char *save = dialog_vars.input_result; + + dialog_vars.input_length = want * 2; + dialog_vars.input_result = dlg_malloc(char, dialog_vars.input_length); + assert_ptr(dialog_vars.input_result, "dlg_add_result malloc"); + dialog_vars.input_result[0] = 0; + if (save != 0) + strcpy(dialog_vars.input_result, save); + } else if (want >= dialog_vars.input_length) { + dialog_vars.input_length = want * 2; + dialog_vars.input_result = dlg_realloc(char, + dialog_vars.input_length, + dialog_vars.input_result); + assert_ptr(dialog_vars.input_result, "dlg_add_result realloc"); + } + } + strcat(dialog_vars.input_result, string); +} + +/* + * These are characters that (aside from the quote-delimiter) will have to + * be escaped in a single- or double-quoted string. + */ +#define FIX_SINGLE "\n\\" +#define FIX_DOUBLE FIX_SINGLE "[]{}?*;`~#$^&()|<>" + +/* + * Returns the quote-delimiter. + */ +static const char * +quote_delimiter(void) +{ + return dialog_vars.single_quoted ? "'" : "\""; +} + +/* + * Returns true if we should quote the given string. + */ +static bool +must_quote(char *string) +{ + bool code = FALSE; + + if (*string != '\0') { + unsigned len = strlen(string); + if (strcspn(string, quote_delimiter()) != len) + code = TRUE; + else if (strcspn(string, "\n\t ") != len) + code = TRUE; + else + code = (strcspn(string, FIX_DOUBLE) != len); + } else { + code = TRUE; + } + + return code; +} + +/* + * Add a quoted string to the result buffer. + */ +void +dlg_add_quoted(char *string) +{ + char temp[2]; + const char *my_quote = quote_delimiter(); + const char *must_fix = (dialog_vars.single_quoted + ? FIX_SINGLE + : FIX_DOUBLE); + + if (dialog_vars.quoted || must_quote(string)) { + temp[1] = '\0'; + dlg_add_result(my_quote); + while (*string != '\0') { + temp[0] = *string++; + if (strchr(my_quote, *temp) || strchr(must_fix, *temp)) + dlg_add_result("\\"); + dlg_add_result(temp); + } + dlg_add_result(my_quote); + } else { + dlg_add_result(string); + } +} + +/* + * When adding a result, make that depend on whether "--quoted" is used. + */ +void +dlg_add_string(char *string) +{ + if (dialog_vars.quoted) { + dlg_add_quoted(string); + } else { + dlg_add_result(string); + } +} + +bool +dlg_need_separator(void) +{ + bool result = FALSE; + + if (dialog_vars.output_separator) { + result = TRUE; + } else if (dialog_vars.input_result && *(dialog_vars.input_result)) { + result = TRUE; + } + return result; +} + +void +dlg_add_separator(void) +{ + const char *separator = (dialog_vars.separate_output) ? "\n" : " "; + + if (dialog_vars.output_separator) + separator = dialog_vars.output_separator; + + dlg_add_result(separator); +} + +/* + * Some widgets support only one value of a given variable - save/restore the + * global dialog_vars so we can override it consistently. + */ +void +dlg_save_vars(DIALOG_VARS * vars) +{ + *vars = dialog_vars; +} + +void +dlg_restore_vars(DIALOG_VARS * vars) +{ + dialog_vars = *vars; +} + +/* + * Called each time a widget is invoked which may do output, increment a count. + */ +void +dlg_does_output(void) +{ + dialog_state.output_count += 1; +} + +/* + * Compatibility for different versions of curses. + */ +#if !(defined(HAVE_GETBEGX) && defined(HAVE_GETBEGY)) +int +getbegx(WINDOW *win) +{ + int y, x; + getbegyx(win, y, x); + return x; +} +int +getbegy(WINDOW *win) +{ + int y, x; + getbegyx(win, y, x); + return y; +} +#endif + +#if !(defined(HAVE_GETCURX) && defined(HAVE_GETCURY)) +int +getcurx(WINDOW *win) +{ + int y, x; + getyx(win, y, x); + return x; +} +int +getcury(WINDOW *win) +{ + int y, x; + getyx(win, y, x); + return y; +} +#endif + +#if !(defined(HAVE_GETMAXX) && defined(HAVE_GETMAXY)) +int +getmaxx(WINDOW *win) +{ + int y, x; + getmaxyx(win, y, x); + return x; +} +int +getmaxy(WINDOW *win) +{ + int y, x; + getmaxyx(win, y, x); + return y; +} +#endif + +#if !(defined(HAVE_GETPARX) && defined(HAVE_GETPARY)) +int +getparx(WINDOW *win) +{ + int y, x; + getparyx(win, y, x); + return x; +} +int +getpary(WINDOW *win) +{ + int y, x; + getparyx(win, y, x); + return y; +} +#endif Index: contrib/dialog/progressbox.c =================================================================== --- contrib/dialog/progressbox.c (revision 0) +++ contrib/dialog/progressbox.c (revision 0) @@ -0,0 +1,187 @@ +/* + * $Id: progressbox.c,v 1.8 2010/01/12 10:46:24 tom Exp $ + * + * progressbox.c -- implements the progress box + * + * Copyright 2005 Valery Reznic + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + */ + +#include <dialog.h> +#include <dlg_keys.h> + +#define MIN_HIGH (4) +#define MIN_WIDE (10 + 2 * (2 + MARGIN)) + +typedef struct { + DIALOG_CALLBACK obj; + WINDOW *text; + char line[MAX_LEN + 1]; + int is_eof; +} MY_OBJ; + +/* + * Return current line of text. + */ +static char * +get_line(MY_OBJ * obj) +{ + FILE *fp = obj->obj.input; + int col = 0; + int j, tmpint, ch; + + while (1) { + if ((ch = getc(fp)) == EOF) { + obj->is_eof = 1; + if (col) { + break; + } else { + return NULL; + } + } + if (ch == '\n') + break; + if (ch == '\r') + break; + if ((ch == TAB) && (dialog_vars.tab_correct)) { + tmpint = dialog_state.tab_len + - (col % dialog_state.tab_len); + for (j = 0; j < tmpint; j++) { + if (col < MAX_LEN) + obj->line[col] = ' '; + ++col; + } + } else { + obj->line[col] = (char) ch; + ++col; + } + if (col >= MAX_LEN) + break; + } + + obj->line[col] = '\0'; + + return obj->line; +} + +/* + * Print a new line of text. + */ +static void +print_line(MY_OBJ * obj, WINDOW *win, int row, int width) +{ + int i, y, x; + char *line = obj->line; + + (void) wmove(win, row, 0); /* move cursor to correct line */ + (void) waddch(win, ' '); +#ifdef NCURSES_VERSION + (void) waddnstr(win, line, MIN((int) strlen(line), width - 2)); +#else + line[MIN((int) strlen(line), width - 2)] = '\0'; + waddstr(win, line); +#endif + + getyx(win, y, x); + /* Clear 'residue' of previous line */ + for (i = 0; i < width - x; i++) + (void) waddch(win, ' '); +} + +/* + * Display text from a stdin in a scrolling window. + */ +int +dialog_progressbox(const char *title, const char *cprompt, int height, int width) +{ + int i; + int x, y, thigh; + WINDOW *dialog, *text; + MY_OBJ *obj; + FILE *fd = dialog_state.pipe_input; + char *prompt = dlg_strclone(cprompt); + + dlg_tab_correct_str(prompt); + dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, MIN_WIDE); + dlg_print_size(height, width); + dlg_ctl_size(height, width); + + x = dlg_box_x_ordinate(width); + y = dlg_box_y_ordinate(height); + thigh = height - (2 * MARGIN); + + dialog = dlg_new_window(height, width, y, x); + + dlg_draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); + dlg_draw_title(dialog, title); + + if (*prompt != '\0') { + int y2, x2; + + wattrset(dialog, dialog_attr); + dlg_print_autowrap(dialog, prompt, height, width); + getyx(dialog, y2, x2); + ++y2; + wmove(dialog, y2, MARGIN); + for (i = 0; i < getmaxx(dialog) - 2 * MARGIN; i++) + (void) waddch(dialog, dlg_boxchar(ACS_HLINE)); + y += y2; + thigh -= y2; + } + + /* Create window for text region, used for scrolling text */ + text = dlg_sub_window(dialog, + thigh, + width - (2 * MARGIN), + y + MARGIN, + x + MARGIN); + + (void) wrefresh(dialog); + + (void) wmove(dialog, thigh, (MARGIN + 1)); + (void) wnoutrefresh(dialog); + + obj = dlg_calloc(MY_OBJ, 1); + assert_ptr(obj, "dialog_progressbox"); + + obj->obj.input = fd; + obj->obj.win = dialog; + obj->text = text; + + dlg_attr_clear(text, thigh, getmaxx(text), dialog_attr); + for (i = 0; get_line(obj); i++) { + if (i < thigh) { + print_line(obj, text, i, width - (2 * MARGIN)); + } else { + scrollok(text, TRUE); + scroll(text); + scrollok(text, FALSE); + print_line(obj, text, thigh - 1, width - (2 * MARGIN)); + } + (void) wnoutrefresh(text); + (void) wrefresh(text); + if (obj->is_eof) + break; + } + dlg_unregister_window(text); + dlg_del_window(dialog); + free(prompt); + free(obj); + + return DLG_EXIT_OK; +} Index: contrib/dialog/dialog.1 =================================================================== --- contrib/dialog/dialog.1 (revision 0) +++ contrib/dialog/dialog.1 (revision 0) @@ -0,0 +1,1289 @@ +'\" t +.\" $Id: dialog.1,v 1.120 2010/01/18 10:19:07 tom Exp $ +.\" Copyright 2005-2008,2010 Thomas E. Dickey +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU Lesser General Public License, version 2.1 +.\" as published by the Free Software Foundation. +.\" +.\" 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 +.\" Lesser General Public License for more details. +.\" +.\" You should have received a copy of the GNU Lesser General Public +.\" License along with this program; if not, write to +.\" Free Software Foundation, Inc. +.\" 51 Franklin St., Fifth Floor +.\" Boston, MA 02110, USA. +.de ES +.ne 8 +.IP +.. +.de EX +.RS +10 +.nf +.. +.de EE +.fi +.RE +.. +. +.TH DIALOG 1 "" "$Date: 2010/01/18 10:19:07 $" +.SH NAME +dialog \- display dialog boxes from shell scripts +.SH SYNOPSIS +\fBdialog --clear\fP +.br +.BI "dialog --create-rc " file +.br +\fBdialog --print-maxsize\fP +.br +\fBdialog\fP +\fIcommon-options\fP +\fIbox-options\fP +.SH DESCRIPTION +\fBDialog\fP +is a program that will let you to present a variety of questions or +display messages using dialog boxes from a shell script. +These types of dialog boxes are implemented +(though not all are necessarily compiled into \fBdialog\fR): +.RS +.LP +.nh +.na +.BR calendar ", " +.BR checklist ", " +.BR dselect ", " +.BR editbox ", " +.BR form ", " +.BR fselect ", " +.BR gauge ", " +.BR infobox ", " +.BR inputbox ", " +.BR inputmenu ", " +.BR menu ", " +.BR mixedform ", " +.BR mixedgauge ", " +.BR msgbox " (message), " +.BR passwordbox ", " +.BR passwordform ", " +.BR pause ", " +.BR progressbox ", " +.BR radiolist ", " +.BR tailbox ", " +.BR tailboxbg ", " +.BR textbox ", " +.BR timebox ", and " +.BR yesno " (yes/no)." +.ad +.hy +.RE +.PP +You can put more than one dialog box into a script: +.TP 5 +- +Use the "\fB--and-widget\fP" token to force Dialog to proceed to the next +dialog unless you have pressed ESC to cancel, or +.TP 5 +- +Simply add the tokens for the next dialog box, making a chain. +Dialog stops chaining when the return code from a dialog is nonzero, +e.g., Cancel or No (see DIAGNOSTICS). +.PP +Some widgets, e.g., checklist, will write text to \fBdialog\fP's output. +Normally that is the standard error, but there are options for +changing this: "\fB--output-fd\fP", "\fB--stderr\fP" and "\fB--stdout\fP". +No text is written if the Cancel button (or ESC) is pressed; +\fBdialog\fP exits immediately in that case. +. +.\" ************************************************************************ +.SH OPTIONS +All options begin with "\fB--\fP" +(two ASCII hyphens, +for the benefit of those using systems with deranged locale support). +.PP +A "\fB--\fP" by itself is used as an escape, +i.e., the next token on the command-line is not treated as an option. +.RS +.B dialog --title -- --Not an option +.RE +.PP +The "\fB--args\fP" option tells \fBdialog\fP to list the command-line +parameters to the standard error. +This is useful when debugging complex scripts using +the "\fB--\fP" and "\fB--file\fP", +since the command-line may be rewritten as these are expanded. +.PP +The "\fB--file\fP" option tells \fBdialog\fP to read parameters from +the file named as its value. +.RS +.B dialog --file \fIparameterfile +.RE +Blanks not within double-quotes are discarded +(use backslashes to quote single characters). +The result is inserted into the command-line, +replacing "\fB--file\fP" and its option value. +Interpretation of the command-line resumes from that point. +If \fIparameterfile\fP begins with "&", \fBdialog\fP +interprets the following text as a file descriptor number +rather than a filename. +. +.SS \fBCommon Options\fP +. +.IP "\fB--ascii-lines +Rather than draw graphics lines around boxes, +draw ASCII "+" and "-" in the same place. +See also "\fB--no-lines\fR". +. +.IP "\fB--aspect \fIratio" +This gives you some control over the box dimensions when using auto +sizing (specifying 0 for height and width). +It represents width / height. +The default is 9, which means 9 characters wide to every 1 line high. +. +.IP "\fB--backtitle \fIbacktitle" +Specifies a +\fIbacktitle\fP +string to be displayed on the backdrop, at the top of the screen. +. +.IP "\fB--begin \fIy x" +Specify the position of the upper left corner of a dialog box on the screen. +. +.IP "\fB--cancel-label \fIstring" +Override the label used for "Cancel" buttons. +. +.IP "\fB--clear" +Clears the widget screen, keeping only the screen_color background. +Use this when you combine widgets with "\fB--and-widget\fR" to erase the +contents of a previous widget on the screen, so it won't be seen +under the contents of a following widget. +Understand this as the complement of "\fB--keep-window\fR". +To compare the effects, use these: +. +.ES +All three widgets visible, staircase effect, ordered 1,2,3: +.EX +dialog --begin 2 2 --yesno "" 0 0 \\ + --and-widget --begin 4 4 --yesno "" 0 0 \\ + --and-widget --begin 6 6 --yesno "" 0 0 +.EE +. +.ES +Only the last widget is left visible: +.EX +dialog --clear --begin 2 2 --yesno "" 0 0 \\ + --and-widget --clear --begin 4 4 --yesno "" 0 0 \\ + --and-widget --begin 6 6 --yesno "" 0 0 +.EE +. +.ES +All three widgets visible, staircase effect, ordered 3,2,1: +.EX +dialog --keep-window --begin 2 2 --yesno "" 0 0 \\ + --and-widget --keep-window --begin 4 4 --yesno "" 0 0 \\ + --and-widget --begin 6 6 --yesno "" 0 0 +.EE +. +.ES +First and third widget visible, staircase effect, ordered 3,1: +.EX +dialog --keep-window --begin 2 2 --yesno "" 0 0 \\ + --and-widget --clear --begin 4 4 --yesno "" 0 0 \\ + --and-widget --begin 6 6 --yesno "" 0 0 +.EE +.IP +Note, if you want to restore original console colors and send your +cursor home after the dialog program has exited, use the \fBclear\fR\ (1) +command. +. +.IP "\fB--colors" +Interpret embedded "\\Z" sequences in the dialog text +by the following character, +which tells \fBdialog\fP to set colors or video attributes: +0 through 7 are the ANSI used in curses: +black, +red, +green, +yellow, +blue, +magenta, +cyan and +white respectively. +Bold is set by 'b', reset by 'B'. +Reverse is set by 'r', reset by 'R'. +Underline is set by 'u', reset by 'U'. +The settings are cumulative, e.g., "\\Zb\\Z1" makes the following text +bold (perhaps bright) red. +Restore normal settings with "\\Zn". +. +.IP "\fB--column-separator \fIstring" +Tell \fBdialog\fP to split data for radio/checkboxes and menus on the +occurrences of the given string, and to align the split data into columns. +. +.IP "\fB--cr-wrap" +Interpret embedded newlines in the dialog text as a newline on the screen. +Otherwise, \fBdialog\fR will only wrap lines where needed to fit inside the text box. +Even though you can control line breaks with this, +\fBdialog\fR will still wrap any lines that are too long for the width of the box. +Without cr-wrap, the layout of your text may be formatted to look nice +in the source code of your script without affecting the way it will +look in the dialog. +.IP +See also the "\fB--no-collapse\fP" and "\fB--trim\fP" options. +. +.IP "\fB--create-rc \fIfile" +When +\fBdialog\fP +supports run-time configuration, +this can be used to dump a sample configuration file to the file specified +by +.IR file "." +. +.IP "\fB--date-format \fIformat" +If the host provides \fBstrftime\fP, +this option allows you to specify the format of the date printed for +the \fB--calendar\fP widget. +The time of day (hour, minute, second) are the current local time. +. +.IP "\fB--defaultno" +Make the default value of the +\fByes/no\fP +box a +.BR No . +Likewise, make the default button of widgets that provide "OK" and "Cancel" +a \fBCancel\fP. +If "\fB--nocancel\fP" or "\fB--visit-items\fP" are given +those options overrides this, +making the default button always "Yes" (internally the same as "OK"). +. +.IP "\fB--default-item \fIstring" +Set the default item in a checklist, form or menu box. +Normally the first item in the box is the default. +. +.IP "\fB--exit-label \fIstring" +Override the label used for "EXIT" buttons. +. +.IP "\fB--extra-button" +Show an extra button, between "OK" and "Cancel" buttons. +. +.IP "\fB--extra-label \fIstring" +Override the label used for "Extra" buttons. +Note: for inputmenu widgets, this defaults to "Rename". +. +.IP "\fB--help" +Prints the help message to \fBdialog\fP's output. +The help message is printed if no options are given. +. +.IP "\fB--help-button" +Show a help-button after "OK" and "Cancel" buttons, +i.e., in checklist, radiolist and menu boxes. +If "\fB--item-help\fR" is also given, on exit +the return status will be the same as for the "OK" button, +and the item-help text will be written to \fBdialog\fP's output after the token "HELP". +Otherwise, the return status will indicate that the Help button was pressed, +and no message printed. +. +.IP "\fB--help-label \fIstring" +Override the label used for "Help" buttons. +. +.IP "\fB--help-status" +If the help-button is selected, +writes the checklist, radiolist or form information +after the item-help "HELP" information. +This can be used to reconstruct the state of a checklist after processing +the help request. +. +.IP "\fB--ignore" +Ignore options that \fBdialog\fP does not recognize. +Some well-known ones such as "\fB--icon\fP" are ignored anyway, +but this is a better choice for compatibility with other implementations. +. +.IP "\fB--input-fd \fIfd" +Read keyboard input from the given file descriptor. +Most \fBdialog\fR scripts read from the standard input, +but the gauge widget reads a pipe (which is always standard input). +Some configurations do not work properly when +\fBdialog\fP tries to reopen the terminal. +Use this option (with appropriate juggling of file-descriptors) +if your script must work in that type of environment. +. +.IP "\fB--insecure" +Makes the password widget friendlier but less secure, +by echoing asterisks for each character. +. +.IP "\fB--item-help" +Interpret the tags data for checklist, radiolist and menu boxes +adding a column which is displayed in the bottom line of the +screen, for the currently selected item. +. +.IP "\fB--keep-tite" +Normally \fBdialog\fP checks to see if it is running in an \fBxterm\fP, +and in that case tries to suppress the initialization strings that +would make it switch to the alternate screen. +Switching between the normal and alternate screens +is visually distracting in a script which runs \fBdialog\fP +several times. +Use this option to allow \fBdialog\fP to use those initialization strings. +. +.IP "\fB--keep-window" +Normally when \fBdialog\fR performs several \fBtailboxbg\fR widgets +connected by "\fB--and-widget\fR", +it clears the old widget from the screen by painting over it. +Use this option to suppress that repainting. +.IP +At exit, \fBdialog\fR repaints all of the widgets which have been +marked with "\fB--keep-window\fR", even if they are not \fBtailboxbg\fR widgets. +That causes them to be repainted in reverse order. +See the discussion of the "\fB--clear\fR" option for examples. +. +.IP "\fB--max-input \fIsize" +Limit input strings to the given size. +If not specified, the limit is 2048. +. +.IP "\fB--no-cancel" +.IP "\fB--nocancel" +Suppress the "Cancel" button in checklist, inputbox and menu box modes. +A script can still test if the user pressed the ESC key to cancel to quit. +. +.IP "\fB--no-collapse" +Normally \fBdialog\fR converts tabs to spaces and reduces multiple +spaces to a single space for text which is displayed in a message boxes, etc. +Use this option to disable that feature. +Note that \fBdialog\fR will still wrap text, +subject to the "\fB--cr-wrap\fR" and "\fB--trim\fR" options. +. +.IP "\fB--no-kill" +Tells +\fBdialog\fP +to put the +\fBtailboxbg\fP +box in the background, +printing its process id to \fBdialog\fP's output. +SIGHUP is disabled for the background process. +. +.IP "\fB--no-label \fIstring" +Override the label used for "No" buttons. +. +.IP "\fB--no-lines +Rather than draw lines around boxes, draw spaces in the same place. +See also "\fB--ascii-lines\fR". +. +.IP "\fB--no-ok" +.IP "\fB--nook" +Suppress the "OK" button in checklist, inputbox and menu box modes. +A script can still test if the user pressed the "Enter" key to accept the data. +. +. +.IP "\fB--no-shadow" +Suppress shadows that would be drawn to the right and bottom of each dialog box. +. +.IP "\fB--ok-label \fIstring" +Override the label used for "OK" buttons. +. +.IP "\fB--output-fd \fIfd" +Direct output to the given file descriptor. +Most \fBdialog\fR scripts write to the standard error, +but error messages may also be written there, depending on your script. +. +.IP "\fB--separator \fIstring" +.IP "\fB--output-separator\fIstring" +Specify a string that will separate the output on \fBdialog\fP's output from +checklists, rather than a newline (for --separate-output) or a space. +This applies to other widgets such as forms and editboxes which normally +use a newline. +. +.IP "\fB--print-maxsize" +Print the maximum size of dialog boxes, i.e., the screen size, +to \fBdialog\fP's output. +This may be used alone, without other options. +. +.IP "\fB--print-size" +Prints the size of each dialog box to \fBdialog\fP's output. +. +.IP "\fB--print-version" +Prints \fBdialog\fR's version to \fBdialog\fP's output. +This may be used alone, without other options. +. +.IP "\fB--scrollbar \fIstring" +For widgets holding a scrollable set of data, +draw a scrollbar on its right-margin. +This does not respond to the mouse. +. +.IP "\fB--separate-output" +For checklist widgets, output result one line at a time, with no quoting. +This facilitates parsing by another program. +. +.IP "\fB--separate-widget \fIstring" +Specify a string that will separate the output on \fBdialog\fP's output from +each widget. +This is used to simplify parsing the result of a dialog with several widgets. +If this option is not given, +the default separator string is a tab character. +. +.IP "\fB--shadow" +Draw a shadow to the right and bottom of each dialog box. +. +.IP "\fB--single-quoted" +Use single-quoting as needed (and no quotes if unneeded) for the +output of checklist's as well as the item-help text. +If this option is not set, \fBdialog\fP uses double quotes around each item. +That requires occasional use of backslashes to make the output useful in +shell scripts. +. +.IP "\fB--size-err" +Check the resulting size of a dialog box before trying to use it, +printing the resulting size if it is larger than the screen. +(This option is obsolete, since all new-window calls are checked). +. +.IP "\fB--sleep \fIsecs" +Sleep (delay) for the given number of seconds after processing a dialog box. +. +.IP "\fB--stderr" +Direct output to the standard error. +This is the default, since curses normally writes screen updates to +the standard output. +. +.IP "\fB--stdout" +Direct output to the standard output. +This option is provided for compatibility with Xdialog, +however using it in portable scripts is not recommended, +since curses normally writes its screen updates to the standard output. +If you use this option, \fBdialog\fR attempts to reopen the terminal +so it can write to the display. +Depending on the platform and your environment, that may fail. +. +.IP "\fB--tab-correct" +Convert each tab character to one or more spaces +(for the \fBtextbox\fP widget; otherwise to a single space). +Otherwise, tabs are rendered according to the curses library's interpretation. +. +.IP "\fB--tab-len \fIn" +Specify the number of spaces that a tab character occupies if the +"\fB--tab-correct\fP" option is given. +The default is 8. +This option is only effective for the \fBtextbox\fP widget. +. +.IP "\fB--time-format \fIformat" +If the host provides \fBstrftime\fP, +this option allows you to specify the format of the time printed for +the \fB--timebox\fP widget. +The day, month, year values in this case are for the current local time. +. +.IP "\fB--timeout \fIsecs" +Timeout (exit with error code) +if no user response within the given number of seconds. +This is overridden if the background "\fB--tailboxbg\fP is used. +A timeout of zero seconds is ignored. +. +.IP "\fB--title \fItitle" +Specifies a +\fItitle\fP +string to be displayed at the top of the dialog box. +. +.IP "\fB--trace \fIfilename" +logs keystrokes to the given file. +Use control/T to log a picture of the current dialog window. +. +.IP "\fB--trim" +eliminate leading blanks, +trim literal newlines and repeated blanks from message text. +. +.IP +See also the "\fB--cr-wrap\fR" and "\fB--no-collapse\fR" options. +. +.IP "\fB--version" +Same as "\fB--print-version\fP". +. +.IP "\fB--visit-items" +Modify the tab-traversal of checklist, radiobox, menubox and inputmenu +to include the list of items as one of the states. +This is useful as a visual aid, +i.e., the cursor position helps some users. +.IP +When this option is given, the cursor is initially placed on the list. +Abbreviations (the first letter of the tag) apply to the list items. +If you tab to the button row, abbreviations apply to the buttons. +. +.IP "\fB--yes-label \fIstring" +Override the label used for "Yes" buttons. +. +.\" ************************************************************************ +.SS Box Options +All dialog boxes have at least three parameters: +.TP 5 +\fItext\fP +the caption or contents of the box. +.TP 5 +\fIheight\fP +the height of the dialog box. +.TP 5 +\fIwidth\fP +the width of the dialog box. +.PP +Other parameters depend on the box type. +. +. +.IP "\fB--calendar \fItext height width day month year" +A \fBcalendar\fP box displays +month, day and year in separately adjustable windows. +If the values for day, month or year are missing or negative, +the current date's corresponding values are used. +You can increment or decrement any of those using the +left-, up-, right- and down-arrows. +Use vi-style h, j, k and l for moving around the array of days in a month. +Use tab or backtab to move between windows. +If the year is given as zero, the current date is used as an initial value. +.IP +On exit, the date is printed in the form day/month/year. +The format can be overridden using the \fB--date-format\fP option. +. +. +.IP "\fB--checklist \fItext height width list-height \fR[ \fItag item status \fR] \fI..." +A +\fBchecklist\fP +box is similar to a +\fBmenu\fP +box; there are +multiple entries presented in the form of a menu. +Another difference is +that you can indicate which entry is currently selected, by setting its +.IR status " to " on "." +Instead of choosing +one entry among the entries, each entry can be turned on or off by the user. +The initial on/off state of each entry is specified by +.IR status "." +.IP +On exit, a list of the \fItag\fP +strings of those entries that are turned on +will be printed on \fBdialog\fP's output. +If the "\fB--separate-output\fP" option is not given, +the strings will be quoted to make it simple for scripts to separate them. +See the "\fB--single-quoted\fP" option, which modifies the quoting behavior. +. +. +.IP "\fB--dselect \fIfilepath height width\fR" +The directory-selection dialog displays a text-entry window in which you can type +a directory, and above that a windows with directory names. +.IP +Here +\fBfilepath\fP +can be a filepath in which case the directory window +will display the contents of the path and the text-entry window will contain +the preselected directory. +.IP +Use tab or arrow keys to move between the windows. +Within the directory window, use the up/down arrow keys +to scroll the current selection. +Use the space-bar to copy the current selection into the text-entry +window. +.IP +Typing any printable characters switches focus to the text-entry window, +entering that character as well as scrolling the directory +window to the closest match. +.IP +Use a carriage return or the "OK" button to accept the current value +in the text-entry window and exit. +.IP +On exit, the contents of the text-entry window are written to \fBdialog\fP's output. +. +.IP "\fB--editbox \fIfilepath height width\fR" +The edit-box dialog displays a copy of the file. +You may edit it using +the \fIbackspace\fP, \fIdelete\fP and cursor keys +to correct typing errors. +It also recognizes pageup/pagedown. +Unlike the \fB--inputbox\fP, +you must tab to the "OK" or "Cancel" buttons to close the dialog. +Pressing the "Enter" key within the box will split the corresponding line. +.IP +On exit, the contents of the edit window are written to \fBdialog\fP's output. +. +.nf +.IP "\fB--form \fItext height width formheight \fR[ \fIlabel y x item y x flen ilen \fR] \fI..." +.fi +The \fBform\fP dialog displays a form consisting of labels and fields, +which are positioned on a scrollable window by coordinates given in the script. +The field length \fIflen\fR and input-length \fIilen\fR tell how long +the field can be. +The former defines the length shown for a selected field, +while the latter defines the permissible length of the data entered in the +field. +.RS +.TP 3 +- +If \fIflen\fR is zero, the corresponding field cannot be altered. +and the contents of the field determine the displayed-length. +.TP 3 +- +If \fIflen\fR is negative, the corresponding field cannot be altered, +and the negated value of \fIflen\fR is used as the displayed-length. +.TP 3 +- +If \fIilen\fR is zero, it is set to \fIflen\fR. +.RE +.IP +Use up/down arrows (or control/N, control/P) to move between fields. +Use tab to move between windows. +.IP +On exit, the contents of the form-fields are written to \fBdialog\fP's output, +each field separated by a newline. +The text used to fill non-editable fields +(\fIflen\fR is zero or negative) +is not written out. +. +. +.IP "\fB--fselect \fIfilepath height width\fR" +The \fBfselect\fP (file-selection) dialog displays a text-entry window in which you can type +a filename (or directory), and above that two windows with directory +names and filenames. +.IP +Here +\fBfilepath\fP +can be a filepath in which case the file and directory windows +will display the contents of the path and the text-entry window will contain +the preselected filename. +.IP +Use tab or arrow keys to move between the windows. +Within the directory or filename windows, use the up/down arrow keys +to scroll the current selection. +Use the space-bar to copy the current selection into the text-entry +window. +.IP +Typing any printable characters switches focus to the text-entry window, +entering that character as well as scrolling the directory and filename +windows to the closest match. +.IP +Typing the space character forces \fBdialog\fP to complete the current +name (up to the point where there may be a match against more than one +entry). +.IP +Use a carriage return or the "OK" button to accept the current value +in the text-entry window and exit. +.IP +On exit, the contents of the text-entry window are written to \fBdialog\fP's output. +. +. +.IP "\fB--gauge \fItext height width [percent]\fR" +A +\fBgauge\fP +box displays a meter along the bottom of the box. +The meter indicates the percentage. +New percentages are read from +standard input, one integer per line. +The meter is updated +to reflect each new percentage. +If the standard input reads the string "XXX", +then the first line following is taken as an integer percentage, +then subsequent lines up to another "XXX" are used for a new prompt. +The gauge exits when EOF is reached on the standard input. +.IP +The \fIpercent\fR value denotes the initial percentage shown in the meter. +If not specified, it is zero. +.IP +On exit, no text is written to \fBdialog\fP's output. +The widget accepts no input, so the exit status is always OK. +. +. +.IP "\fB--infobox \fItext height width" +An \fBinfo\fP box is basically a \fBmessage\fP box. +However, in this case, \fBdialog\fP +will exit immediately after displaying the message to the user. +The screen is not cleared when \fBdialog\fP +exits, so that the message will remain on the screen until the calling +shell script clears it later. +This is useful when you want to inform +the user that some operations are carrying on that may require some +time to finish. +.IP +On exit, no text is written to \fBdialog\fP's output. +Only an "OK" button is provided for input, +but an ESC exit status may be returned. +. +. +.IP "\fB--inputbox \fItext height width [init]" +An +\fBinput\fP +box is useful when you want to ask questions that +require the user to input a string as the answer. +If init is supplied +it is used to initialize the input string. +When entering the string, +the \fIbackspace\fP, \fIdelete\fP and cursor keys +can be used to correct typing errors. +If the input string is longer than +can fit in the dialog box, the input field will be scrolled. +.IP +On exit, the input string will be printed on \fBdialog\fP's output. +. +. +.IP "\fB--inputmenu \fItext height width menu-height \fR[ \fItag item \fR] \fI..." +An \fBinputmenu\fP box is very similar to an ordinary \fBmenu\fP box. +There are only a few differences between them: +.RS +.TP 4 +1. +The entries are not automatically centered but left adjusted. +.TP +2. +An extra button (called \fIRename\fP) is implied to rename +the current item when it is pressed. +.TP +3. +It is possible to rename the current entry by pressing the +\fIRename\fP +button. +Then \fBdialog\fP will write the following on \fBdialog\fP's output. +.IP +RENAMED <tag> <item> +.RE +. +. +.IP "\fB--menu \fItext height width menu-height \fR[ \fItag item \fR] \fI..." +As its name suggests, a +\fBmenu\fP +box is a dialog box that can be used to present a list of choices in +the form of a menu for the user to choose. +Choices are displayed in the order given. +Each menu entry consists of a \fItag\fP string and an \fIitem\fP string. +The \fItag\fP +gives the entry a name to distinguish it from the other entries in the +menu. +The \fIitem\fP is a short description of the option that the entry represents. +The user can move between the menu entries by pressing the +cursor keys, the first letter of the \fItag\fP +as a hot-key, or the number keys +.IR 1-9 ". There are" +\fImenu-height\fP +entries displayed in the menu at one time, but the menu will be +scrolled if there are more entries than that. +.IP +On exit the \fItag\fP +of the chosen menu entry will be printed on \fBdialog\fP's output. +If the "\fB--help-button\fR" option is given, the corresponding help +text will be printed if the user selects the help button. +. +.nf +.IP "\fB--mixedform \fItext height width formheight \fR[ \fIlabel y x item y x flen ilen itype \fR] \fI..." +.fi +The \fBmixedform\fP dialog displays a form consisting of labels and fields, +much like the \fB--form\fP dialog. +It differs by adding a field-type parameter to each field's description. +Each bit in the type denotes an attribute of the field: +.RS +.TP 5 +1 +hidden, e.g., a password field. +.TP 5 +2 +readonly, e.g., a label. +.RE +. +.IP "\fB--mixedgauge \fItext height width percent \fR[ \fItag1 item1 \fR] \fI..." +A +\fBmixedgauge\fP +box displays a meter along the bottom of the box. +The meter indicates the percentage. +.IP +It also displays a list of the \fItag\fP- and \fIitem\fP-values at the +top of the box. +See dialog(3) for the tag values. +.IP +The \fItext\fP is shown as a caption between the list and meter. +The \fIpercent\fR value denotes the initial percentage shown in the meter. +.IP +No provision is made for reading data from the standard input as \fB--gauge\fP +does. +.IP +On exit, no text is written to \fBdialog\fP's output. +The widget accepts no input, so the exit status is always OK. +. +.IP "\fB--msgbox \fItext height width" +A \fBmessage\fP box is very similar to a \fByes/no\fP box. +The only difference between a \fBmessage\fP box and a \fByes/no\fP +box is that a \fBmessage\fP box has only a single \fBOK\fP button. +You can use this dialog box to display any message you like. +After reading the message, the user can press the \fIENTER\fP key so that +\fBdialog\fP will exit and the calling shell script can continue its operation. +.IP +If the message is too large for the space, +\fBdialog\fP may allow you to scroll it, +provided that the underlying curses implementation is capable enough. +In this case, a percentage is shown in the base of the widget. +.IP +On exit, no text is written to \fBdialog\fP's output. +Only an "OK" button is provided for input, +but an ESC exit status may be returned. +. +.IP "\fB\-\-pause \fItext height width seconds\fR" +A +\fBpause\fP +box displays a meter along the bottom of the box. +The meter indicates how many seconds remain until the end of the pause. +The pause exits when timeout is reached +or the user presses the OK button +(status OK) +or the user presses the CANCEL button +or Esc key. +.IP "\fB--passwordbox \fItext height width [init]" +A \fBpassword\fP box is similar to an input box, +except that the text the user enters is not displayed. +This is useful when prompting for passwords or other +sensitive information. +Be aware that if anything is passed in "init", it +will be visible in the system's process table to casual snoopers. +Also, it +is very confusing to the user to provide them with a default password they +cannot see. +For these reasons, using "init" is highly discouraged. +See "\fB--insecure\fP" if you do not care about your password. +.IP +On exit, the input string will be printed on \fBdialog\fP's output. +. +. +.nf +.IP "\fB--passwordform \fItext height width formheight \fR[ \fIlabel y x item y x flen ilen \fR] \fI..." +.fi +This is identical to \fB--form\fP except that all text fields are +treated as \fBpassword\fP widgets rather than \fBinputbox\fP widgets. +. +. +.IP "\fB--progressbox \fItext height width" +.IP "\fB--progressbox \fIheight width" +A \fBprogressbox\fP is similar to an \fBtailbox\fP, +except that it will exit when it reaches the end of the file. +If three parameters are given, it displays the text under the title, +delineated from the scrolling file's contents. +If only two parameters are given, this text is omitted. +. +. +.IP "\fB--radiolist \fItext height width list-height \fR [ \fItag item status \fR] \fI..." +A +\fBradiolist\fP +box is similar to a +\fBmenu\fP +box. +The only difference is +that you can indicate which entry is currently selected, by setting its +.IR status " to " on "." +.IP +On exit, the name of the selected item is written to \fBdialog\fP's output. +. +. +.IP "\fB--tailbox \fIfile height width" +Display text from a file in a dialog box, as in a "tail -f" command. +Scroll left/right using vi-style 'h' and 'l', or arrow-keys. +A '0' resets the scrolling. +.IP +On exit, no text is written to \fBdialog\fP's output. +Only an "OK" button is provided for input, +but an ESC exit status may be returned. +. +. +.IP "\fB--tailboxbg \fIfile height width" +Display text from a file in a dialog box as a background task, +as in a "tail -f &" command. +Scroll left/right using vi-style 'h' and 'l', or arrow-keys. +A '0' resets the scrolling. +.IP +Dialog treats the background task specially if there are other +widgets (\fB--and-widget\fP) on the screen concurrently. +Until those widgets are closed (e.g., an "OK"), +\fBdialog\fP will perform all of the tailboxbg widgets in the same process, +polling for updates. +You may use a tab to traverse between the widgets on the screen, +and close them individually, e.g., by pressing \fIENTER\fP. +Once the non-tailboxbg widgets are closed, \fBdialog\fP forks a copy of itself +into the background, and prints its process id if the "\fB--no-kill\fP" option +is given. +.IP +On exit, no text is written to \fBdialog\fP's output. +Only an "EXIT" button is provided for input, +but an ESC exit status may be returned. +.IP +NOTE: +Older versions of \fBdialog\fP forked immediately and attempted to +update the screen individually. +Besides being bad for performance, +it was unworkable. +Some older scripts may not work properly with the polled scheme. +. +. +.IP "\fB--textbox \fIfile height width" +A +\fBtext\fP +box lets you display the contents of a text file in a dialog box. +It is like a simple text file viewer. +The user can move through the file by using the +cursor, page-up, page-down +and \fIHOME/END\fR keys available on most keyboards. +If the lines are too long to be displayed in the box, +the \fILEFT/RIGHT\fP +keys can be used to scroll the text region horizontally. +You may also use vi-style keys h, j, k, l in place of the cursor keys, +and B or N in place of the page-up and page-down keys. +Scroll up/down using vi-style 'k' and 'j', or arrow-keys. +Scroll left/right using vi-style 'h' and 'l', or arrow-keys. +A '0' resets the left/right scrolling. +For more convenience, +vi-style forward and backward searching functions are also provided. +.IP +On exit, no text is written to \fBdialog\fP's output. +Only an "EXIT" button is provided for input, +but an ESC exit status may be returned. +. +. +.IP "\fB--timebox \fItext height [width hour minute second]" +A dialog is displayed which allows you to select hour, minute and second. +If the values for hour, minute or second are missing or negative, +the current date's corresponding values are used. +You can increment or decrement any of those using the +left-, up-, right- and down-arrows. +Use tab or backtab to move between windows. +.IP +On exit, the result is printed in the form hour:minute:second. +The format can be overridden using the \fB--time-format\fP option. +. +. +.IP "\fB--yesno \fItext height width" +A \fByes/no\fP dialog box of +size \fIheight\fP rows by \fIwidth\fP columns will be displayed. +The string specified by +\fItext\fP +is displayed inside the dialog box. +If this string is too long to fit +in one line, it will be automatically divided into multiple lines at +appropriate places. +The +\fItext\fP +string can also contain the sub-string +.I +"\en" +or newline characters +\fI`\en'\fP +to control line breaking explicitly. +This dialog box is useful for +asking questions that require the user to answer either yes or no. +The dialog box has a +\fBYes\fP +button and a +\fBNo\fP +button, in which the user can switch between by pressing the +.IR TAB " key." +.IP +On exit, no text is written to \fBdialog\fP's output. +In addition to the "Yes" and "No" exit codes (see DIAGNOSTICS) +an ESC exit status may be returned. +.IP +The codes used for "Yes" and "No" match those used for "OK" and "Cancel", +internally no distinction is made. +. +.\" ************************************************************************ +.SS "Obsolete Options" +.\" from cdialog 0.9a (Pako) +.IP "\fB--beep" +This was used to tell the original cdialog that it should make a beep +when the separate processes of the tailboxbg widget would repaint the screen. +. +.\" from cdialog 0.9a (Pako) +.IP "\fB--beep-after" +Beep after a user has completed a widget by pressing one of the buttons. +. +.\" ************************************************************************ +.SH "RUN-TIME CONFIGURATION" +.TP 4 +1. +Create a sample configuration file by typing: +.LP +.in +1i +"dialog --create-rc <file>" +.TP 4 +2. +At start, +\fBdialog\fP +determines the settings to use as follows: +.RS +.TP 4 +a) +if environment variable +\fBDIALOGRC\fP +is set, its value determines the name of the configuration file. +.TP 4 +b) +if the file in (a) is not found, use the file +\fI$HOME/.dialogrc\fP +as the configuration file. +.TP 4 +c) +if the file in (b) is not found, try using the GLOBALRC file determined at +compile-time, i.e., \fI/etc/dialogrc\fP. +.TP 4 +d) +if the file in (c) is not found, use compiled in defaults. +.RE +.TP 4 +3. +Edit the sample configuration file and copy it to some place that +\fBdialog\fP +can find, as stated in step 2 above. +. +.\" ************************************************************************ +.SH "KEY BINDINGS" +You can override or add to key bindings in \fBdialog\fP +by adding to the configuration file. +\fBDialog\fP's \fBbindkey\fP command maps single keys to its internal coding. +.EX +bindkey \fIwidget\fP \fIcurses_key\fP \fIdialog_key\fP +.EE +The \fIwidget\fP name can be "*" (all widgets), or +specific widgets such as \fBtextbox\fP. +Specific widget bindings override the "*" bindings. +User-defined bindings override the built-in bindings. +.PP +The \fIcurses_key\fP can be any of the names derived from +\fBcurses.h\fP, e.g., "HELP" from "KEY_HELP". +\fBDialog\fP also recognizes ANSI control characters such as "^A", "^?", +as well as C1-controls such as "~A" and "~?". +Finally, it allows any single character to be escaped with a backslash. +.PP +\fBDialog\fP's internal keycode names correspond to the +\fBDLG_KEYS_ENUM\fP type in +\fBdlg_keys.h\fP, e.g., "HELP" from "DLGK_HELP". +. +.\" ************************************************************************ +.SH ENVIRONMENT +.TP 15 +\fBDIALOGOPTS\fP +Define this variable to apply any of the common options to each widget. +Most of the common options are reset before processing each widget. +If you set the options in this environment variable, +they are applied to \fBdialog\fP's state after the reset. +As in the "\fB--file\fP" option, +double-quotes and backslashes are interpreted. +.IP +The "\fB--file\fP" option is not considered a common option +(so you cannot embed it within this environment variable). +.TP 15 +\fBDIALOGRC\fP +Define this variable if you want to specify the name of the configuration file +to use. +.TP 15 +\fBDIALOG_CANCEL\fP +.TP 15 +\fBDIALOG_ERROR\fP +.TP 15 +\fBDIALOG_ESC\fP +.TP 15 +\fBDIALOG_EXTRA\fP +.TP 15 +\fBDIALOG_HELP\fP +.TP 15 +\fBDIALOG_ITEM_HELP\fP +.TP 15 +\fBDIALOG_OK\fP +Define any of these variables to change the exit code on +Cancel (1), +error (-1), +ESC (255), +Extra (3), +Help (2), +Help with --item-help (2), +or OK (0). +Normally shell scripts cannot distinguish between -1 and 255. +.TP 15 +\fBDIALOG_TTY\fP +Set this variable to "1" to provide compatibility with older versions +of \fBdialog\fP which assumed that if the script redirects the standard output, +that the "\fB--stdout\fP" option was given. +.SH FILES +.TP 20 +\fI$HOME/.dialogrc\fP +default configuration file +.SH EXAMPLES +The \fBdialog\fP sources contain several samples +of how to use the different box options and how they look. +Just take a look into the directory \fBsamples/\fP of the source. +.SH DIAGNOSTICS +Exit status is subject to being overridden by environment variables. +Normally they are: +.TP 5 +0 +if +.BR dialog " is exited by pressing the " Yes " or " OK +button. +.TP 5 +1 +if the +.BR No " or " Cancel +button is pressed. +.TP 5 +2 +if the +.BR Help +button is pressed. +.TP 5 +3 +if the +.BR Extra +button is pressed. +4 +if the +.BR Item Help +button is pressed. +.TP 5 +-1 +if errors occur inside \fBdialog\fP +or \fBdialog\fP is exited by pressing the \fIESC\fP key. +. +.\" ************************************************************************ +.SH PORTABILITY +\fBdialog\fP works with X/Open curses. +However, some implementations have deficiencies: +.RS 3 +.TP 3 +- +HPUX curses (and perhaps others) do not open the terminal properly for +the \fInewterm\fP function. +This interferes with \fBdialog\fP's \fB--input-fd\fP option, +by preventing cursor-keys and similar escape sequences from being recognized. +.TP 3 +- +NetBSD curses does not support subwindows of subwindows. +\fBdialog\fP will not display shadows of windows. +.RE +.\" ************************************************************************ +.SH COMPATIBILITY +You may want to write scripts which run with other \fBdialog\fP "clones". +.SS ORIGINAL DIALOG +First, there is the "original" \fBdialog\fP program to consider (versions +0.3 to 0.9). +It had some misspelled (or inconsistent) options. +The \fBdialog\fP program maps those deprecated options to the preferred ones. +They include: +.RS +.TS +l l +_ _ +l l. +\fIOption\fR \fITreatment\fR +\fB--beep-after\fP ignored +\fB--guage\fP mapped to \fB--gauge\fP +.TE +.RE +.SS XDIALOG +Technically, "\fBXdialog\fP", +this is an X application. +With some care, it is possible to write useful scripts that work +with both \fBXdialog\fP and \fBdialog\fP. +.PP +The \fBdialog\fP program ignores these options which are recognized +by \fBXdialog\fP: +.RS +.TS +l l +_ _ +l l. +\fIOption\fR \fITreatment\fR +\fB--allow-close\fP ignored +\fB--auto-placement\fP ignored +\fB--fixed-font\fP ignored +\fB--icon\fP ignored +\fB--keep-colors\fP ignored +\fB--no-close\fP ignored +\fB--no-cr-wrap\fP ignored +\fB--screen-center\fP ignored +\fB--separator\fP mapped to \fB--separate-output\fP +\fB--smooth\fP ignored +\fB--under-mouse\fP ignored +\fB--wmclass\fP ignored +.TE +.RE +.PP +\fBXdialog\fP's manpage has a section discussing its compatibility with \fBdialog\fP. +.SS WHIPTAIL +Then there is \fBwhiptail\fP. +For practical purposes, it is maintained by Debian. +Its documentation claims +.RS +.sp +.nf +whiptail(1) is a lightweight replacement for dialog(1), +to provide dialog boxes for shell scripts. It is built on the +newt windowing library rather than the ncurses library, allowing +it to be smaller in embedded enviroments such as installers, +rescue disks, etc. +.sp +whiptail is designed to be drop-in compatible with dialog, but +has less features: some dialog boxes are not implemented, such +as tailbox, timebox, calendarbox, etc. +.fi +.RE +.PP +Comparing actual sizes (Debian testing, 2007/1/10): +The total of sizes for \fBwhiptail\fP, the newt, popt and slang libraries is 757kb. +The comparable number for \fBdialog\fP (counting ncurses) is 520kb. +Disregard the first paragraph. +.PP +The second paragraph is misleading, since \fBwhiptail\fP +also does not work for common options of dialog, such as the gauge box. +\fBwhiptail\fP is less compatible with \fBdialog\fP than the decade-old +original dialog 0.4 program. +.PP +\fBwhiptail\fP's manpage borrows features from \fBdialog\fP, e.g., +\fB--default-item\fP, \fB--output-fd\fP, +but oddly cites only \fBdialog\fP versions up to 0.4 as a source. +That is, its manpage refers to features which +were borrowed from more recent versions of \fBdialog\fP, e.g., +the \fB--gauge\fP and \fB--password\fP boxes, +as well as options such as \fB-separate-output\fP. +Somewhat humorously, one may note that the \fBpopt\fP feature +(undocumented in its manpage) +of using a "--" as an escape was documented in \fBdialog\fP's manpage about +a year before it was mentioned in \fBwhiptail\fP's manpage. +\fBwhiptail\fP's manpage incorrectly attributes that to \fBgetopt\fP +(and is inaccurate anyway). +.PP +Debian uses \fBwhiptail\fP for the official \fBdialog\fP variation. +.PP +The \fBdialog\fP program ignores or maps these options which are recognized +by \fBwhiptail\fP: +.RS +.TS +l l +_ _ +l l. +\fIOption\fR \fITreatment\fR +\fB--fb\fP ignored +\fB--fullbutton\fP ignored +\fB--nocancel\fP mapped to \fB--no-cancel\fP +\fB--noitem\fP ignored +.TE +.RE +.\" ************************************************************************ +.SH BUGS +Perhaps. +.SH AUTHOR +.LP +Thomas E. Dickey (updates for 0.9b and beyond) +.SH CONTRIBUTORS +Kiran Cherupally - the mixed form and mixed gauge widgets. +.LP +Tobias C. Rittweiler +.LP +Valery Reznic - the form and progressbox widgets. +.LP +Yura Kalinichenko adapted the gauge widget as "pause". +.PP +This is a rewrite (except as needed to provide compatibility) +of the earlier version of \fBdialog 0.9a\fP, +which lists as authors: +.RS +.LP +Savio Lam - version 0.3, "dialog" +.LP +Stuart Herbert - patch for version 0.4 +.LP +Marc Ewing - the gauge widget. +.LP +Pasquale De Marco "Pako" - version 0.9a, "cdialog" +.RE Index: contrib/dialog/mixedgauge.c =================================================================== --- contrib/dialog/mixedgauge.c (revision 0) +++ contrib/dialog/mixedgauge.c (revision 0) @@ -0,0 +1,393 @@ +/* + * $Id: mixedgauge.c,v 1.18 2010/01/15 23:43:53 tom Exp $ + * + * mixedgauge.c -- implements the mixedgauge dialog + * + * Copyright 2007,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + * + * This is inspired by a patch from Kiran Cherupally + * (but different interface design). + */ + +#include <dialog.h> + +#define LLEN(n) ((n) * MIXEDGAUGE_TAGS) +#define ItemData(i) &items[LLEN(i)] +#define ItemName(i) items[LLEN(i)] +#define ItemText(i) items[LLEN(i) + 1] + +#define MIN_HIGH (4) +#define MIN_WIDE (10 + 2 * (2 + MARGIN)) + +typedef struct { + WINDOW *dialog; + WINDOW *caption; + const char *title; + char *prompt; + int height, old_height, min_height; + int width, old_width, min_width; + int len_name, len_text; + int item_no; + DIALOG_LISTITEM *list; +} DIALOG_MIXEDGAUGE; + +static const char * +status_string(char *given, char **freeMe) +{ + const char *result; + + *freeMe = 0; + if (isdigit(UCH(*given))) { + switch (*given) { + case '0': + result = _("Succeeded"); + break; + case '1': + result = _("Failed"); + break; + case '2': + result = _("Passed"); + break; + case '3': + result = _("Completed"); + break; + case '4': + result = _("Checked"); + break; + case '5': + result = _("Done"); + break; + case '6': + result = _("Skipped"); + break; + case '7': + result = _("In Progress"); + break; + case '8': + result = ""; + break; + case '9': + result = _("N/A"); + break; + default: + result = "?"; + break; + } + } else if (*given == '-') { + unsigned need = strlen(++given); + char *temp = dlg_malloc(char, need); + *freeMe = temp; + sprintf(temp, "%3s%%", given); + result = temp; + } else if (!isspace(UCH(*given))) { + result = given; + } else { + result = 0; + } + return result; +} + +/* This function displays status messages */ +static void +myprint_status(DIALOG_MIXEDGAUGE * dlg) +{ + WINDOW *win = dlg->dialog; + int limit_y = dlg->height; + int limit_x = dlg->width; + + int y = MARGIN; + int item; + int cells = dlg->len_text - 2; + int rm = limit_x; /* right margin */ + int lm = limit_x - dlg->len_text - 1; + int bm = limit_y; /* bottom margin */ + int last_y = 0, last_x = 0; + int j, xxx; + float percent; + const char *status = ""; + char *freeMe = 0; + + if (win) { + rm -= (2 * MARGIN); + bm -= (2 * MARGIN); + } + if (win != 0) + getyx(win, last_y, last_x); + for (item = 0; item < dlg->item_no; ++item) { + chtype attr = A_NORMAL; + + y = item + MARGIN + 1; + if (y > bm) + break; + + status = status_string(dlg->list[item].text, &freeMe); + if (status == 0 || *status == 0) + continue; + + (void) wmove(win, y, 2 * MARGIN); + dlg_print_text(win, dlg->list[item].name, lm, &attr); + + (void) wmove(win, y, lm); + (void) waddch(win, '['); + (void) wmove(win, y, lm + (cells - (int) strlen(status)) / 2); + if (freeMe) { + (void) wmove(win, y, lm + 1); + wattrset(win, title_attr); + for (j = 0; j < cells; j++) + (void) waddch(win, ' '); + + (void) wmove(win, y, lm + (cells - (int) strlen(status)) / 2); + (void) waddstr(win, status); + + if ((title_attr & A_REVERSE) != 0) { + wattroff(win, A_REVERSE); + } else { + wattrset(win, A_REVERSE); + } + (void) wmove(win, y, lm + 1); + + if (sscanf(status, "%f%%", &percent) != 1) + percent = 0.0; + xxx = (int) ((cells * (percent + 0.5)) / 100.0); + for (j = 0; j < xxx; j++) { + chtype ch1 = winch(win); + if (title_attr & A_REVERSE) { + ch1 &= ~A_REVERSE; + } + (void) waddch(win, ch1); + } + free(freeMe); + + } else { + (void) wmove(win, y, lm + (cells - (int) strlen(status)) / 2); + (void) waddstr(win, status); + } + (void) wmove(win, y, limit_x - 3); + (void) waddch(win, ']'); + (void) wnoutrefresh(win); + } +} + +static void +mydraw_mixed_box(WINDOW *win, int y, int x, int height, int width, + chtype boxchar, chtype borderchar) +{ + dlg_draw_box(win, y, x, height, width, boxchar, borderchar); + { + chtype attr = A_NORMAL; + char *message = _("Overall Progress"); + chtype save2 = getattrs(win); + wattrset(win, title_attr); + (void) wmove(win, y, x + 2); + dlg_print_text(win, message, width, &attr); + wattrset(win, save2); + } +} + +static char * +clean_copy(const char *string) +{ + char *result = dlg_strclone(string); + + dlg_trim_string(result); + dlg_tab_correct_str(result); + return result; +} + +/* + * Update mixed-gauge dialog (may be from pipe, may be via direct calls). + */ +static void +dlg_update_mixedgauge(DIALOG_MIXEDGAUGE * dlg, int percent) +{ + int i, x; + + /* + * Clear the area for the progress bar by filling it with spaces + * in the title-attribute, and write the percentage with that + * attribute. + */ + (void) wmove(dlg->dialog, dlg->height - 3, 4); + wattrset(dlg->dialog, title_attr); + + for (i = 0; i < (dlg->width - 2 * (3 + MARGIN)); i++) + (void) waddch(dlg->dialog, ' '); + + (void) wmove(dlg->dialog, dlg->height - 3, (dlg->width / 2) - 2); + (void) wprintw(dlg->dialog, "%3d%%", percent); + + /* + * Now draw a bar in reverse, relative to the background. + * The window attribute was useful for painting the background, + * but requires some tweaks to reverse it. + */ + x = (percent * (dlg->width - 2 * (3 + MARGIN))) / 100; + if ((title_attr & A_REVERSE) != 0) { + wattroff(dlg->dialog, A_REVERSE); + } else { + wattrset(dlg->dialog, A_REVERSE); + } + (void) wmove(dlg->dialog, dlg->height - 3, 4); + for (i = 0; i < x; i++) { + chtype ch = winch(dlg->dialog); + if (title_attr & A_REVERSE) { + ch &= ~A_REVERSE; + } + (void) waddch(dlg->dialog, ch); + } + myprint_status(dlg); +} + +/* + * Setup dialog. + */ +static void +dlg_begin_mixedgauge(DIALOG_MIXEDGAUGE * dlg, + int *began, + const char *aTitle, + const char *aPrompt, + int aHeight, + int aWidth, + int aItemNo, + char **items) +{ + int n, y, x; + + if (!*began) { + curs_set(0); + + memset(dlg, 0, sizeof(*dlg)); + dlg->title = aTitle; + dlg->prompt = clean_copy(aPrompt); + dlg->height = dlg->old_height = aHeight; + dlg->width = dlg->old_width = aWidth; + dlg->item_no = aItemNo; + + dlg->list = dlg_calloc(DIALOG_LISTITEM, (size_t) aItemNo); + assert_ptr(dlg->list, "dialog_mixedgauge"); + + dlg->len_name = 0; + dlg->len_text = 15; + + for (n = 0; n < aItemNo; ++n) { + int thisWidth = (int) strlen(ItemName(n)); + if (dlg->len_name < thisWidth) + dlg->len_name = thisWidth; + dlg->list[n].name = ItemName(n); + dlg->list[n].text = ItemText(n); + } + + dlg->min_height = MIN_HIGH + aItemNo; + dlg->min_width = MIN_WIDE + dlg->len_name + GUTTER + dlg->len_text; + + if (dlg->prompt != 0 && *(dlg->prompt) != 0) + dlg->min_height += (2 * MARGIN); +#ifdef KEY_RESIZE + nodelay(stdscr, TRUE); +#endif + } +#ifdef KEY_RESIZE + else { + dlg_del_window(dlg->dialog); + dlg->height = dlg->old_height; + dlg->width = dlg->old_width; + } +#endif + + dlg_auto_size(dlg->title, dlg->prompt, + &(dlg->height), + &(dlg->width), + dlg->min_height, + dlg->min_width); + dlg_print_size(dlg->height, dlg->width); + dlg_ctl_size(dlg->height, dlg->width); + + /* center dialog box on screen */ + x = dlg_box_x_ordinate(dlg->width); + y = dlg_box_y_ordinate(dlg->height); + + dlg->dialog = dlg_new_window(dlg->height, dlg->width, y, x); + + (void) werase(dlg->dialog); + dlg_draw_box(dlg->dialog, + 0, 0, + dlg->height, + dlg->width, + dialog_attr, border_attr); + + dlg_draw_title(dlg->dialog, dlg->title); + + if ((dlg->prompt != 0 && *(dlg->prompt) != 0) + && wmove(dlg->dialog, dlg->item_no, 0) != ERR) { + dlg->caption = dlg_sub_window(dlg->dialog, + dlg->height - dlg->item_no - (2 * MARGIN), + dlg->width, + y + dlg->item_no + (2 * MARGIN), + x); + wattrset(dlg->caption, dialog_attr); + dlg_print_autowrap(dlg->caption, dlg->prompt, dlg->height, dlg->width); + } + + mydraw_mixed_box(dlg->dialog, + dlg->height - 4, + 2 + MARGIN, + 2 + MARGIN, + dlg->width - 2 * (2 + MARGIN), + dialog_attr, + border_attr); + + *began += 1; +} + +/* + * Discard the mixed-gauge dialog. + */ +static int +dlg_finish_mixedgauge(DIALOG_MIXEDGAUGE * dlg, int status) +{ + (void) wrefresh(dlg->dialog); +#ifdef KEY_RESIZE + nodelay(stdscr, FALSE); +#endif + curs_set(1); + dlg_del_window(dlg->dialog); + return status; +} + +/* + * Setup dialog, read mixed-gauge data from pipe. + */ +int +dialog_mixedgauge(const char *title, + const char *cprompt, + int height, + int width, + int percent, + int item_no, + char **items) +{ + DIALOG_MIXEDGAUGE dlg; + int began = 0; + + dlg_begin_mixedgauge(&dlg, &began, title, cprompt, height, + width, item_no, items); + + dlg_update_mixedgauge(&dlg, percent); + + return dlg_finish_mixedgauge(&dlg, DLG_EXIT_OK); +} Index: contrib/dialog/dialog.3 =================================================================== --- contrib/dialog/dialog.3 (revision 0) +++ contrib/dialog/dialog.3 (revision 0) @@ -0,0 +1,2782 @@ +.\" $Id: dialog.3,v 1.49 2010/02/23 10:33:59 tom Exp $ +.\" Copyright 2005-2009,2010 Thomas E. Dickey +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU Lesser General Public License, version 2.1 +.\" as published by the Free Software Foundation. +.\" +.\" 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 +.\" Lesser General Public License for more details. +.\" +.\" You should have received a copy of the GNU Lesser General Public +.\" License along with this program; if not, write to +.\" Free Software Foundation, Inc. +.\" 51 Franklin St., Fifth Floor +.\" Boston, MA 02110, USA. +.TH DIALOG 3 "" "$Date: 2010/02/23 10:33:59 $" +.SH NAME +dialog \- widgets and utilities for the dialog program +.SH SYNOPSIS +.B cc [ flag ... ] file ... -ldialog [ library ... ] + +.B #include <dialog.h> +.PP +\fBDialog\fP +is a program that will let you to present a variety of questions or +display messages using dialog boxes from a shell script. +It is built from the \fBdialog\fP library, +which consists of several widgets +as well as utility functions that are used by the widgets +or the main program. +. +.SH DESCRIPTION +This manpage documents the features from \fI<dialog.h>\fP which +are likely to be important to developers using the widgets directly. +Some hints are also given for developing new widgets. +. +.\" ************************************************************************ +.SH DEFINITIONS +Exit codes (passed back to the main program for its use) +are defined with a "\fIDLG_EXIT_\fP prefix. +The defined constants can be mapped using environment variables +as described in \fBdialog\fP(1), +e.g., \fIDLG_EXIT_OK\fP corresponds to \fI$DIALOG_OK\fP. +.PP +Useful character constants which correspond to user input +are named with the "\fICHR_\fP" prefix, e.g., +\fICHR_BACKSPACE\fP. +.PP +Colors and video attributes are categorized and associated with +settings in the configuration file +(see the discussion of \fI$DIALOGRC\fP in \fBdialog\fP(1)). +The \fIDIALOG_ATR(n)\fP macro is used for defining the references +to the combined color and attribute table \fIdlg_color_table[]\fP. +.PP +The \fBdialog\fP application passes its command-line parameters +to the widget functions. Some of those parameters are single values, +but some of the widgets accept data as an array of values. +Those include checklist/radiobox, menubox and formbox. +When the \fB--item-help\fP option is given, an extra column +of data is expected. +The USE_ITEM_HELP(), CHECKBOX_TAGS, MENUBOX_TAGS and FORMBOX_TAGS +macros are used to hide this difference from the calling application. +.PP +Most of the other definitions found in \fI<dialog.h>\fP +are used for convenience in building the library or main program. +These include definitions based on the generated \fI<dlg_config.h>\fP header. + +.\" ************************************************************************ +.SH DATA STRUCTURES +All of the global data for the \fBdialog\fP library is stored in +a few structures: \fIDIALOG_STATE\fP, \fIDIALOG_VARS\fP and \fIDIALOG_COLORS\fP. +The corresponding \fIdialog_state\fP, \fIdialog_vars\fP and \fIdlg_color_table\fP +global variables should be initialized to zeros, +and then populated with the data to use. +A few of these must be nonzero for the corresponding widgets to function. +As as the case with function names, +variables beginning with "\fIdialog_\fP" +are designed for use by the calling application +while variables beginning with "\fIdlg_\fP" +are intended for lower levels, e.g., by the \fBdialog\fP library. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_STATE.all_windows +This is a linked list of all windows created by the library. +The \fBdlg_del_window\fP function uses this to locate windows which +may be redrawn after deleting a window. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_STATE.aspect_ratio +This corresponds to the command-line option "\fB--aspect-ratio\fP". +The value gives the application +some control over the box dimensions when using auto +sizing (specifying 0 for height and width). +It represents width / height. +The default is 9, which means 9 characters wide to every 1 line high. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_STATE.getc_callbacks +This is setup in \fIui_getc.c\fP to record windows which must be polled +for input, e.g,. to handle the background tailbox widget. +One window is designated as the foreground or control window. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_STATE.getc_redirect +If the control window for \fIDIALOG_STATE.getc_callbacks\fP is +closed, the list is transferred to this variable. +Closing all windows causes the application to exit. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_STATE.output +This is set in the \fBdialog\fP application to the stream on +which the application and library functions may write text results. +Normally that is the standard error, +since the curses library prefers to write its data to the standard output. +Some scripts, trading portability for convenience, +prefer to write results to the standard output, +e.g., by using the "\fB--stdout\fP" option. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_STATE.output_count +This is incremented by \fIdlg_does_output\fP, +which is called by each widget that writes text to the output. +The \fBdialog\fP application uses that to decide if it should +also write a separator, i.e., +\fIDIALOG_STATE.separate_str\fP, +between calls to each widget. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_STATE.pipe_input +This is set in \fIinit_dialog\fP to a stream which can be used by the +\fBgauge\fP widget, which must be the application's standard input. +The \fBdialog\fP application calls \fIinit_dialog\fP normally with +\fIinput\fP set to the standard input, but optionally based on the +"\fB--input-fd\fP" option. +Since the application cannot read from +a pipe (standard input) and at the same time read +the curses input from the standard input, +it must allow for reopening the latter from either +a specific file descriptor, +or directly from the terminal. +The adjusted pipe stream value is stored in this variable. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_STATE.screen_initialized +This is set in \fIinit_dialog\fP and +reset in \fIend_dialog\fP. +It is used to check if curses has been initialized, +and if the \fIendwin\fP function must be called on exit. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_STATE.screen_output +This is set in \fIinit_dialog\fP to the output stream used +by the curses library. +Normally that is the standard output, +unless that happens to not be a terminal (and if \fIinit_dialog\fP can +successfully open the terminal directly). +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_STATE.separate_str +This corresponds to the command-line option "\fB--separate-widget\fP". +The given string +specifies a string that will separate the output on \fBdialog\fP's output from +each widget. +This is used to simplify parsing the result of a dialog with several widgets. +If this option is not given, +the default separator string is a tab character. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_STATE.tab_len +This corresponds to the command-line option "\fB--tab-len\fP \fInumber\fP". +Specify the number of spaces that a tab character occupies if the +"\fB--tab-correct\fP" +option is given. +The default is 8. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_STATE.use_colors +This is set in \fIinit_dialog\fP if the curses implementation supports color. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_STATE.use_scrollbar +This corresponds to the command-line option "\fB--scrollbar\fP". +If true, +draw a scrollbar to make windows holding scrolled data more readable. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_STATE.use_shadow +This corresponds to the command-line option "\fB--no-shadow\fP". +This is set in \fIinit_dialog\fP if the curses implementation supports color. +If true, +suppress shadows that would be drawn to the right and bottom of each dialog box. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_STATE.visit_items +This corresponds to the command-line option "\fB--visit-items\fP". +.\" --------------------------------------------------------------------------- +.PP +The \fBdialog\fP application resets the \fIdialog_vars\fP data before +accepting options to invoke each widget. +Most of the \fIDIALOG_VARS\fP members are set directly from \fBdialog\fP's +command-line options: +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.ascii_lines +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.backtitle +This corresponds to the command-line option "\fB--backtitle\fP \fIbacktitle\fP". +It specifies a +\fIbacktitle\fP +string to be displayed on the backdrop, at the top of the screen. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.beep_after_signal +This corresponds to the command-line option "\fB--beep-after\fP". +If true, beep after a user has completed a widget by pressing one of the buttons. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.beep_signal +This corresponds to the command-line option "\fB--beep\fP". +It is obsolete. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.begin_set +This is true if the command-line option "\fB--begin y x\fP" was used. +It specifies the position of the upper left corner of a dialog box on the screen. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.begin_x +This corresponds to the \fIx\fP value from +the command-line option "\fB--begin\fP \fIy x\fP" (second value). +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.begin_y +This corresponds to the \fIy\fP value from +the command-line option "\fB--begin\fP \fIy x\fP" (first value). +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.cancel_label +This corresponds to the command-line option "\fB--cancel-label\fP \fIstring\fP". +The given \fIstring\fP overrides the label used for "Cancel" buttons. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.cant_kill +This corresponds to the command-line option "\fB--no-kill\fP". +If true, this tells +\fBdialog\fP +to put the +\fBtailboxbg\fP +box in the background, +printing its process id to \fBdialog\fP's output. +SIGHUP is disabled for the background process. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.colors +This corresponds to the command-line option "\fB--colors\fP". +If true, interpret embedded "\\Z" sequences in the dialog text +by the following character, +which tells dialog to set colors or video attributes: +0 through 7 are the ANSI codes used in curses: +black, +red, +green, +yellow, +blue, +magenta, +cyan and +white respectively. +Bold is set by 'b', reset by 'B'. +Reverse is set by 'r', reset by 'R'. +Underline is set by 'u', reset by 'U'. +The settings are cumulative, e.g., "\\Zb\\Z1" makes the following text +bright red. +Restore normal settings with "\\Zn". +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.column_separator +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.cr_wrap +This corresponds to the command-line option "\fB--cr-wrap\fP". +If true, +interpret embedded newlines in the dialog text as a newline on the screen. +Otherwise, \fBdialog\fR will only wrap lines where needed to fit inside the text box. +Even though you can control line breaks with this, +\fBdialog\fR will still wrap any lines that are too long for the width of the box. +Without cr-wrap, the layout of your text may be formatted to look nice +in the source code of your script without affecting the way it will +look in the dialog. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.date_format +This corresponds to the command-line option "\fB--date-format\fP \fIstring\fP". +If the host provides \fBstrftime\fP, and the value is nonnull, +the calendar widget uses this to format its output. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.default_item +This corresponds to the command-line option "\fB--default-item\fP \fIstring\fP". +The given string is used as +the default item in a checklist, form or menu box. +Normally the first item in the box is the default. +.IP \fIDIALOG_VARS.defaultno +This corresponds to the command-line option "\fB--defaultno\fP". +If true, +make the default value of the +\fByes/no\fP +box a +.BR No . +Likewise, make the default button of widgets that provide "OK" and "Cancel" +a \fBCancel\fP. +If \fB--nocancel\fP was given that option overrides this, +making the default button always "Yes" (internally the same as "OK"). +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.dlg_clear_screen +This corresponds to the command-line option "\fB--clear\fP". +This option is implemented in the main program, not the library. +If true, +the screen will be cleared on exit. +This may be used alone, without other options. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.exit_label +This corresponds to the command-line option "\fB--exit-label string\fP". +The given string overrides the label used for "EXIT" buttons. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.extra_button +This corresponds to the command-line option "\fB--extra-button\fP". +If true, some widgets show an extra button, +between "OK" and "Cancel" buttons. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.extra_label +This corresponds to the command-line option "\fB--extra-label\fP \fIstring\fP". +The given string overrides the label used for "Extra" buttons. +Note: for inputmenu widgets, this defaults to "Rename". +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.formitem_type +This is set by the command-line option "\fB--passwordform\fP" +to tell the form widget that its text fields should be treated like +password widgets. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.help_button +This corresponds to the command-line option "\fB--help-button\fP". +If true, some widgets show a help-button after "OK" and "Cancel" buttons, +i.e., in checklist, radiolist and menu boxes. +If \fB--item-help\fR is also given, on exit +the return status will be the same as for the "OK" button, +and the item-help text will be written to \fBdialog\fP's output after the token "HELP". +Otherwise, the return status will indicate that the Help button was pressed, +and no message printed. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.help_label +This corresponds to the command-line option "\fB--help-label\fP \fIstring\fP". +The given string overrides the label used for "Help" buttons. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.help_status +This corresponds to the command-line option "\fB--help-status\fP". +If true, and the the help-button is selected, +writes the checklist or radiolist information +after the item-help "HELP" information. +This can be used to reconstruct the state of a checklist after processing +the help request. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.input_length +This is nonzero if \fIDIALOG_VARS.input_result\fP is allocated, +versus being a pointer to the user's local variables. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.input_menu +This flag is set to denote whether the menubox widget +implements a menu versus a inputmenu widget. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.input_result +If \fIDIALOG_VARS.input_length\fP is zero, +this is a pointer to user buffer (on the stack, or static). +When \fIDIALOG_VARS.input_length\fP is nonzero, +this is a dynamically-allocated buffer used by the widgets to return +printable results to the calling application. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.insecure +This corresponds to the command-line option "\fB--insecure\fP". +If true, make the password widget friendlier but less secure, +by echoing asterisks for each character. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.item_help +This corresponds to the command-line option "\fB--item-help\fP". +If true, +interpret the tags data for checklist, radiolist and menu boxes +adding a column whose text is displayed in the bottom line of the +screen, for the currently selected item. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.keep_tite +This is set by the command-line option "\fB--keep-tite\fP" +to tell \fBdialog\fP to not attempt to cancel the terminal initialization +(termcap \fIti\fP/\fIte\fP) sequences which correspond to xterm's alternate-screen +switching. +Normally \fBdialog\fP does this to avoid flickering when run several times +in a script. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.keep_window +This corresponds to the command-line option "\fB--keep-window\fP". +If true, do not remove/repaint the window on exit. +This is useful for keeping the window contents visible when several +widgets are run in the same process. +Note that curses will clear the screen when starting a new process. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.max_input +This corresponds to the command-line option "\fB--max-input\fP \fIsize\fP". +Limit input strings to the given size. +If not specified, the limit is 2048. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.no_label +This corresponds to the command-line option "\fB--no-label\fP \fIstring\fP". +The given string overrides the label used for "No" buttons. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.no_lines +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.nocancel +This corresponds to the command-line option "\fB--no-cancel\fP". +If true, +suppress the "Cancel" button in checklist, inputbox and menu box modes. +A script can still test if the user pressed the ESC key to cancel to quit. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.nocollapse +This corresponds to the command-line option "\fB--no-collapse\fP". +Normally \fBdialog\fR converts tabs to spaces and reduces multiple +spaces to a single space for text which is displayed in a message boxes, etc. +It true, that feature is disabled. +Note that \fBdialog\fR will still wrap text, subject to the \fB--cr-wrap\fR +option. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.nook +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.ok_label +This corresponds to the command-line option "\fB--ok-label\fP \fIstring\fP". +The given string overrides the label used for "OK" buttons. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.print_siz +This corresponds to the command-line option "\fB--print-size\fP". +If true, +each widget prints its size to \fBdialog\fP's output when it is invoked. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.quoted +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.separate_output +This corresponds to the command-line option "\fB--separate-output\fP". +If true, +checklist widgets output result one line at a time, with no quoting. +This facilitates parsing by another program. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.single_quoted +This corresponds to the command-line option "\fB--single-quoted\fP". +If true, +Use single-quoting as needed (and no quotes if unneeded) for the +output of checklist's as well as the item-help text. +If this option is not set, \fBdialog\fP uses double quotes around each item. +That requires occasional use of backslashes to make the output useful in +shell scripts. +.IP \fIDIALOG_VARS.size_err +This corresponds to the command-line option "\fB--size-err\fP". +If true, +check the resulting size of a dialog box before trying to use it, +printing the resulting size if it is larger than the screen. +(This option is obsolete, since all new-window calls are checked). +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.sleep_secs +This corresponds to the command-line option "\fB--sleep\fP \fIsecs\fP". +This option is implemented in the main program, not the library. +If nonzero, this is the number of seconds after to delay after processing a dialog box. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.tab_correct +This corresponds to the command-line option "\fB--tab-correct\fP". +If true, convert each tab character of the text to one or more spaces. +Otherwise, tabs are rendered according to the curses library's interpretation. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.time_format +This corresponds to the command-line option "\fB--time-format\fP \fIstring\fP". +If the host provides \fBstrftime\fP, and the value is nonnull, +the timebox widget uses this to format its output. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.timeout_secs +This corresponds to the command-line option "\fB--timeout\fP \fIsecs\fP". +If nonzero, timeout input requests (exit with error code) +if no user response within the given number of seconds. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.title +This corresponds to the command-line option "\fB--title\fP \fItitle\fP". +Specifies a +\fItitle\fP +string to be displayed at the top of the dialog box. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.trim_whitespace +This corresponds to the command-line option "\fB--trim\fP". +If true, eliminate leading blanks, +trim literal newlines and repeated blanks from message text. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.visit_items +This corresponds to the command-line option "\fB--visit-items\fP". +Modify the tab-traversal of checklist, radiobox, menubox and inputmenu +to include the list of items as one of the states. +This is useful as a visual aid, +i.e., the cursor position helps some users. +.\" --------------------------------------------------------------------------- +.IP \fIDIALOG_VARS.yes_label +This corresponds to the command-line option "\fB--yes-label\fP \fIstring\fP". +The given string overrides the label used for "Yes" buttons. +. +.\" ************************************************************************ +.\" ************************************************************************ +.SH WIDGETS +Functions that implement major functionality for the command-line \fBdialog\fP +program, e.g., widgets, have names beginning "\fIdialog_\fP". + +All dialog boxes have at least three parameters: +.TP 5 +\fItitle\fP +the caption for the box, shown on its top border. +.TP 5 +\fIheight\fP +the height of the dialog box. +.TP 5 +\fIwidth\fP +the width of the dialog box. +.PP +Other parameters depend on the box type. +. +.\" ************************************************************************ +.IP \fBdialog_calendar +implements the "\fB--calendar\fP" option. +.RS +.IP title +is the title on the top of the widget. +.IP subtitle +is the prompt text shown within the widget. +.IP height +is the height excluding the fixed-height calendar grid. +.IP width +is the overall width of the box, +which is adjusted up to the calendar grid's minimum width if needed. +.IP day +is the initial day of the week shown, +counting zero as Sunday. +If the value is negative, +the current day of the week is used. +.IP month +is the initial month of the year shown, +counting one as January. +If the value is negative, +the current month of the year is used. +.IP year +is the initial year shown. +If the value is negative, +the current year is used. +.RE +.\" ************************************************************************ +.IP \fBdialog_checklist +implements the "\fB--checklist\fP" and "\fB--radiolist\fP" options +depending on the \fIflag\fP parameter. +.RS +.IP title +is the title on the top of the widget. +.IP cprompt +is the prompt text shown within the widget. +.IP height +is the desired height of the box. +If zero, the height is adjusted to use the available screen size. +.IP width +is the desired width of the box. +If zero, the height is adjusted to use the available screen size. +.IP list_height +is the minimum height to reserve for displaying the list. +If zero, it is computed based on the given \fIheight\fP and \fIwidth\fP. +.IP item_no +is the number of rows in \fIitems\fP. +.IP items +is an array of strings which is viewed either as a list of rows +.RS +\fItag item status \fR +.RE +.IP +or +.RS +\fItag item status help\fR +.RE +.IP +depending on whether \fIdialog_vars.item_help\fP is set. +.IP flag +is either \fIFLAG_CHECK\fP, for checklists, +or \fIFLAG_RADIO\fP for radiolists. +.RE +.\" ************************************************************************ +.IP \fBdialog_dselect +implements the "\fB--dselect\fP" option. +.RS +.IP title +is the title on the top of the widget. +.IP path +is the preselected value to show in the input-box, +which is used also to set the directory- and file-windows. +.IP height +is the height excluding the minimum needed to show the dialog box framework. +If zero, the height is based on the screen size. +.IP width +is the desired width of the box. +If zero, the height is based on the screen size. +.RE +.\" ************************************************************************ +.IP \fBdialog_editbox +implements the "\fB--editbox\fP" option. +.RS +.IP title +is the title on the top of the widget. +.IP file +is the name of the file from which to read. +.IP height +is the desired height of the box. +If zero, the height is adjusted to use the available screen size. +.IP width +is the desired width of the box. +If zero, the height is adjusted to use the available screen size. +.RE +.\" ************************************************************************ +.IP \fBdialog_form +implements the "\fB--form\fP" option. +.RS +.IP title +is the title on the top of the widget. +.IP cprompt +is the prompt text shown within the widget. +.IP height +is the desired height of the box. +If zero, the height is adjusted to use the available screen size. +.IP width +is the desired width of the box. +If zero, the height is adjusted to use the available screen size. +.IP form_height +is the minimum height to reserve for displaying the list. +If zero, it is computed based on the given \fIheight\fP and \fIwidth\fP. +.IP item_no +is the number of rows in \fIitems\fP. +.IP items +is an array of strings which is viewed either as a list of rows +.RS +\fIName NameY NameX Text TextY TextX FLen ILen\fR +.RE +.IP +or +.RS +\fIName NameY NameX Text TextY TextX FLen ILen Help\fR +.RE +.IP +depending on whether \fIdialog_vars.item_help\fP is set. +.RE +.\" ************************************************************************ +.IP \fBdialog_fselect +implements the "\fB--fselect\fP" option. +.RS +.IP title +is the title on the top of the widget. +.IP path +is the preselected value to show in the input-box, +which is used also to set the directory- and file-windows. +.IP height +is the height excluding the minimum needed to show the dialog box framework. +If zero, the height is based on the screen size. +.IP width +is the desired width of the box. +If zero, the height is based on the screen size. +.RE +.\" ************************************************************************ +.IP \fBdialog_gauge +implements the "\fB--gauge\fP" option. +.RS +.IP title +is the title on the top of the widget. +.IP cprompt +is the prompt text shown within the widget. +.IP height +is the desired height of the box. +If zero, the height is based on the screen size. +.IP width +is the desired width of the box. +If zero, the height is based on the screen size. +.IP percent +is the percentage to show in the progress bar. +.RE +.\" ************************************************************************ +.IP \fBdialog_inputbox +implements the "\fB--inputbox\fP" or +"\fB--password\fP" option, depending on the value of \fIpassword\fP. +.RS +.IP title +is the title on the top of the widget. +.IP cprompt +is the prompt text shown within the widget. +.IP height +is the desired height of the box. +If zero, the height is based on the screen size. +.IP width +is the desired width of the box. +If zero, the height is based on the screen size. +.IP init +is the initial value of the input box, whose length is taken into account +when auto-sizing the width of the dialog box. +.IP password +if true, causes typed input to be echoed as asterisks. +.RE +.\" ************************************************************************ +.IP \fBdialog_menu +implements the "\fB--menu\fP" or "\fB--inputmenu\fP" option +depending on whether \fIdialog_vars.input_menu\fP is set. +.RS +.IP title +is the title on the top of the widget. +.IP cprompt +is the prompt text shown within the widget. +.IP height +is the desired height of the box. +If zero, the height is based on the screen size. +.IP width +is the desired width of the box. +If zero, the height is based on the screen size. +.IP menu_height +is the minimum height to reserve for displaying the list. +If zero, it is computed based on the given \fIheight\fP and \fIwidth\fP. +.IP item_no +is the number of rows in \fIitems\fP. +.IP items +is an array of strings which is viewed either as a list of rows +.RS +\fItag item\fR +.RE +.IP +or +.RS +\fItag item help\fR +.RE +.IP +depending on whether \fIdialog_vars.item_help\fP is set. +.RE +.\" ************************************************************************ +.IP \fBdialog_mixedform +implements the "\fB--mixedform\fP" option. +.RS +.IP title +is the title on the top of the widget. +.IP cprompt +is the prompt text shown within the widget. +.IP height +is the desired height of the box. +If zero, the height is adjusted to use the available screen size. +.IP width +is the desired width of the box. +If zero, the height is adjusted to use the available screen size. +.IP form_height +is the minimum height to reserve for displaying the list. +If zero, it is computed based on the given \fIheight\fP and \fIwidth\fP. +.IP item_no +is the number of rows in \fIitems\fP. +.IP items +is an array of strings which is viewed either as a list of rows +.RS +\fIName NameY NameX Text TextY TextX FLen ILen Ityp\fR +.RE +.IP +or +.RS +\fIName NameY NameX Text TextY TextX FLen ILen Ityp Help\fR +.RE +.IP +depending on whether \fIdialog_vars.item_help\fP is set. +.RE +.\" ************************************************************************ +.IP \fBdialog_mixedgauge +implements the "\fB--mixedgauge\fP" option +.RS +.IP title +is the title on the top of the widget. +.IP cprompt +is the caption text shown within the widget. +.IP height +is the desired height of the box. +If zero, the height is based on the screen size. +.IP width +is the desired width of the box. +If zero, the height is based on the screen size. +.IP percent +is the percentage to show in the progress bar. +.IP item_no +is the number of rows in \fIitems\fP. +.IP items +is an array of strings which is viewed as a list of \fItag\fP and \fIitem\fP values. +The \fItag\fP values are listed, one per row, in the list at the top of +the widget. +.IP +The \fIitem\fP values are decoded: digits 0-9 are the following strings +.RS +.IP 0 +Succeeded +.IP 1 +Failed +.IP 2 +Passed +.IP 3 +Completed +.IP 4 +Checked +.IP 5 +Done +.IP 6 +Skipped +.IP 7 +In Progress +.IP 8 +(blank) +.IP 9 +N/A +.RE +.IP +A string with a leading "-" character is centered, marked with "%". +For example, "-75" is displayed as "75%". +Other strings are displayed as is. +.RE +.\" ************************************************************************ +.IP \fBdialog_msgbox +implements the "\fB--msgbox\fP" or "\fB--infobox\fP" option +depending on whether \fIpauseopt\fP is set. +.RS +.IP title +is the title on the top of the widget. +.IP cprompt +is the prompt text shown within the widget. +.IP height +is the desired height of the box. +If zero, the height is based on the screen size. +.IP width +is the desired width of the box. +If zero, the height is based on the screen size. +.IP pauseopt +if true, an "OK" button will be shown, +and the dialog will wait for it to complete. +With an "OK" button, it is denoted a "msgbox", +without an "OK" button, it is denoted an "infobox". +.RE +.\" ************************************************************************ +.IP \fBdialog_pause +implements the "\fB--pause\fP" option. +.RS +.IP title +is the title on the top of the widget. +.IP height +is the desired height of the box. +If zero, the height is based on the screen size. +.IP width +is the desired width of the box. +If zero, the height is based on the screen size. +.IP seconds +is the timeout to use for the progress bar. +.RE +.\" ************************************************************************ +.IP \fBdialog_progressbox +implements the "\fB--progressbox\fP" option. +.RS +.IP title +is the title on the top of the widget. +.IP cprompt +is the prompt text shown within the widget. +If empty or null, no prompt is shown. +.IP height +is the desired height of the box. +If zero, the height is based on the screen size. +.IP width +is the desired width of the box. +If zero, the height is based on the screen size. +.RE +.\" ************************************************************************ +.IP \fBdialog_tailbox +implements the "\fB--tailbox\fP" or "\fB--tailboxbg\fP" option +depending on whether \fIbg_task\fP is set. +.RS +.IP title +is the title on the top of the widget. +.IP file +is the name of the file to display in the dialog. +.IP height +is the desired height of the box. +If zero, the height is based on the screen size. +.IP width +is the desired width of the box. +If zero, the height is based on the screen size. +.IP bg_task +if true, +the window is added to the callback list in \fIdialog_state\fP, +and the application will poll for the window to be updated. +Otherwise an "OK" button is added to the window, +and it will be closed when the button is activated. +.RE +.\" ************************************************************************ +.IP \fBdialog_textbox +implements the "\fB--textbox\fP" option. +.RS +.IP title +is the title on the top of the widget. +.IP file +is the name of the file to display in the dialog. +.IP height +is the desired height of the box. +If zero, the height is based on the screen size. +.IP width +is the desired width of the box. +If zero, the height is based on the screen size. +.RE +.\" ************************************************************************ +.IP \fBdialog_timebox +implements the "\fB--timebox\fP" option. +.RS +.IP title +is the title on the top of the widget. +.IP subtitle +is the prompt text shown within the widget. +.IP height +is the desired height of the box. +If zero, the height is based on the screen size. +.IP width +is the desired width of the box. +If zero, the height is based on the screen size. +.IP hour +is the initial hour shown. +If the value is negative, +the current hour is used. +.IP minute +is the initial minute shown. +If the value is negative, +the current minute is used. +.IP second +is the initial second shown. +If the value is negative, +the current second is used. +.RE +.\" ************************************************************************ +.IP \fBdialog_yesno +implements the "\fB--yesno\fP" option. +.RS +.IP title +is the title on the top of the widget. +.IP cprompt +is the prompt text shown within the widget. +.IP height +is the desired height of the box. +If zero, the height is based on the screen size. +.IP width +is the desired width of the box. +If zero, the height is based on the screen size. +.RE +. +.\" ************************************************************************ +.SH UTILITY FUNCTIONS +Most functions that implement lower-level +functionality for the command-line \fBdialog\fP +program or widgets, have names beginning "\fIdlg_\fP". +Bowing to longstanding usage, the functions that initialize the +display and end it are named \fIinit_dialog\fP and \fIend_dialog\fP. +.PP +The only non-widget function whose name begins with "\fIdialog_\fP" +is \fIdialog_version\fP, which returns the version number of the +library as a string. +. +.PP +Here is a brief summary of the utility functions and their parameters: +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_add_callback +Add a callback, used to allow polling input from multiple tailbox +widgets. +.RS +.TP 5 +.B DIALOG_CALLBACK *\fIp\fP +contains the callback information. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_add_callback_ref +Like \fBdlg_add_callback\fP, but passes a reference to the \fBDIALOG_CALLBACK\fP +as well as a pointer to a cleanup function which will be called when the +associated input ends. +.RS +.TP 5 +.B DIALOG_CALLBACK **\fIp\fP +points to the callback information. +This is a reference to the pointer so that the caller's pointer can be +zeroed when input ends. +.TP 5 +.B DIALOG_FREEBACK \fIfunc\fP +function to call when input ends, e.g., to free caller's additional data. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_add_quoted +Add a quoted string to the result buffer (see \fBdlg_add_result\fP). +.RS +.TP 5 +.B char * \fIstring +is the string to add. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_add_result +Add a quoted string to the result buffer \fBdialog_vars.input_result\fP. +.RS +.TP 5 +.B char * \fIstring +is the string to add. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_add_separator +Add an output-separator to the result buffer \fBdialog_vars.input_result\fP. +If \fBdialog_vars.output_separator\fP is set, use that. +Otherwise, if \fBdialog_vars.separate_output\fP is set, use newline. +If neither is set, use a space. +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_add_string +Add a quoted or unquoted string to the result buffer +(see \fBdlg_add_quoted\fP) and \fBdlg_add_result\fP), +according to whether \fBdialog_vars.quoted\fP is true. +.RS +.TP 5 +.B char * \fIstring +is the string to add. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_align_columns +Copy and reformat an array of pointers to strings, aligning according to +the column separator \fBdialog_vars.column_separator\fP. +If no column separator is set, the array will be unmodified; +otherwise it is copied and reformatted. +.IP +Caveat: This function is only implemented for 8-bit characters. +.RS +.TP 5 +.B char **\fItarget +This is the array to reformat. +It points to the first string to modify. +.TP 5 +.B int \fIper_row +This is the size of the struct for each row of the array. +.TP 5 +.B int \fInum_rows +This is the number of rows in the array. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_asciibox +returns its parameter transformed to the +corresponding "+" or "-", etc. for the line-drawing characters used in \fBdialog\fP. +If the parameter is not a line-drawing or other special character such as ACS_DARROW, it returns 0. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_attr_clear +Set window to the given attribute. +.RS +.TP 5 +.B WINDOW * \fIwin +is the window to update. +.TP 5 +.B int \fIheight +is the number of rows to update. +.TP 5 +.B int \fIwidth +is the number of columns to update. +.TP 5 +.B chtype \fIattr +is the attribute, e.g., \fBA_BOLD\fP. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_auto_size +Automatically size the window used for a widget. +If the given height or width are zero, +justify the \fIprompt\fP text and return the actual limits. +.RS +.TP 5 +.B const char * \fItitle +is the title string to display at the top of the widget. +.TP 5 +.B const char * \fIprompt +is the message text which will be displayed in the widget, +used here to determine how large the widget should be. +.TP 5 +.B int * \fIheight +is the nominal height. +.TP 5 +.B int * \fIwidth +is the nominal width. +.TP 5 +.B int \fIboxlines +is the number of lines to reserve in the vertical direction. +.TP 5 +.B int \fImincols +is the minimum number of columns to use. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_auto_sizefile +Like \fBdlg_auto_size\fP, but use a file contents to decide how large +the widget should be. +.RS +.TP 5 +.B const char * \fItitle +is the title string to display at the top of the widget. +.TP 5 +.B const char * \fIfile +is the name of the file. +.TP 5 +.B int * \fIheight +is the nominal height. +If it is -1, use the screen's height after subtracting \fBdialog_vars.begin_y\fP +if \fBdialog_vars.begin_set\fP is true. +.TP 5 +.B int \fI*width +is the nominal width. +If it is -1, use the screen's width after subtracting \fBdialog_vars.begin_x\fP +if \fBdialog_vars.begin_set\fP is true. +.TP 5 +.B int \fIboxlines +is the number of lines to reserve on the screen for drawing boxes. +.TP 5 +.B int \fImincols +is the number of columns to reserve on the screen for drawing boxes. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_beeping +If \fBdialog_vars.beep_signal\fP is nonzero, +this calls \fBbeep\fP once and sets +\fBdialog_vars.beep_signal\fP to zero. +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_boxchar +returns its parameter transformed as follows: +.RS +.TP 3 +.B - +if neither \fBdialog_vars.ascii_lines\fP nor \fBdialog_vars.no_lines\fP is set. +.TP 3 +.B - +if \fBdialog_vars.ascii_lines\fP is set, returns the corresponding "+" or "-", etc. for the line-drawing characters used in \fBdialog\fP. +.TP 3 +.B - +otherwise, if \fBdialog_vars.no_lines\fP is set, returns a space for the line-drawing characters. +.TP 3 +.B - +if the parameter is not a line-drawing or other special character such as ACS_DARROW, it returns the parameter unchanged. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_box_x_ordinate +returns a suitable x-ordinate (column) for a new widget. +If \fBdialog_vars.begin_set\fP is 1, +use \fBdialog_vars.begin_x\fP; +otherwise center the widget on the screen (using the \fIwidth\fP parameter). +.RS +.TP 5 +.B int \fIwidth +is the width of the widget. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_box_y_ordinate +returns a suitable y-ordinate (row) for a new widget. +If \fBdialog_vars.begin_set\fP is 1, +use \fBdialog_vars.begin_y\fP; +otherwise center the widget on the screen (using the \fIheight\fP parameter). +.RS +.TP 5 +.B int \fIheight +is the height of the widget. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_button_count +Count the buttons in the list. +.RS +.TP 5 +.B const char ** \fIlabels +is a list of (pointers to) button labels terminated by a null pointer. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_button_layout +Make sure there is enough space for the buttons by +computing the width required for their labels, +adding margins and limiting based on the screen size. +.RS +.TP 5 +.B const char ** \fIlabels +is a list of (pointers to) button labels terminated by a null pointer. +.TP 5 +.B int * \fIlimit +the function sets the referenced \fIlimit\fP to the width required for +the buttons (limited by the screen size) +if that is wider than the passed-in limit. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_button_sizes +Compute the size of the button array in columns. +.RS +.TP 5 +.B const char ** \fIlabels +is a list of (pointers to) button labels terminated by a null pointer. +.TP 5 +.B int \fIvertical +is true if the buttons are arranged in a column rather than a row. +.TP 5 +.B int * \fIlongest +Return the total number of columns in the referenced location. +.TP 5 +.B int * \fIlength +Return the longest button's columns in the referenced location. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_button_x_step +Compute the step-size needed between elements of the button array. +.RS +.TP 5 +.B const char ** \fIlabels +is a list of (pointers to) button labels terminated by a null pointer. +.TP 5 +.B int \fIlimit +is the maximum number of columns to allow for the buttons. +.TP 5 +.B int * \fIgap +store the nominal gap between buttons in the referenced location. +This is constrained to be at least one. +.TP 5 +.B int * \fImargin +store the left+right total margins (for the list of buttons) in the referenced +location. +.TP 5 +.B int * \fIstep +store the step-size in the referenced location. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_button_to_char +Find the first uppercase character in the label, which we may use for an +abbreviation. +If the label is empty, return -1. +If no uppercase character is found, return 0. +Otherwise return the uppercase character. +.RS +.TP 5 +.B const char * \fIlabel +is the label to test. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_calc_list_width +Calculate the minimum width for the list, assuming none of the items +are truncated. +.RS +.TP 5 +.B int \fIitem_no +is the number of \fIitems\fP. +.TP 5 +.B DIALOG_LISTITEM * \fIitems +contains a \fIname\fP and \fItext\fP field, +e.g., for checklists or radiobox lists. +The function returns the sum of the widest columns +needed for of each of these fields. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_calc_listh +Calculate new height and list_height values. +.RS +.TP 5 +.B int * \fIheight +on input, is the height without adding the list-height. +On return, this contains the total list-height and is the +actual widget's height. +.TP 5 +.B int * \fIlist_height +on input, is the requested list-height. +On return, this contains the number of rows available for displaying +the list after taking into account the screen size and +the \fBdialog_vars.begin_set\fP and \fBdialog_vars.begin_y\fP variables. +.TP 5 +.B int \fIitem_no +is the number of \fIitems\fP in the list. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_calc_listw +This function is obsolete, provided for library-compatibility. +It is replaced by \fIdlg_calc_list_width\fP. +.RS +.TP 5 +.B int \fIitem_no +is the number of \fIitems\fP. +.TP 5 +.B char ** \fIitems +is a list of character pointers. +.TP 5 +.B int \fIgroup +is the number of items in each group, e.g., the second array index. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_char_to_button +Given a list of button labels, +and a character which may be the abbreviation for one, find it, if it exists. +An abbreviation will be the first character +which happens to be capitalized in the label. +If the character is found, return its index within the list of \fIlabels\fP. +Otherwise, return \fBDLG_EXIT_UNKNOWN\fP. +.RS +.TP 5 +.B int \fIch +is the character to find. +.TP 5 +.B const char ** \fIlabels +is a list of (pointers to) button labels terminated by a null pointer. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_checklist +This entrypoint provides the \fB--checklist\fP or \fP--radiolist\fP +functionality without the limitations of \fBdialog\fP's command-line syntax +(compare to \fBdialog_checklist\fP). +.RS +.TP 5 +.B const char * \fItitle +is the title string to display at the top of the widget. +.TP 5 +.B const char * \fIcprompt +is the prompt text shown within the widget. +.TP 5 +.B int \fIheight +is the desired height of the box. +If zero, the height is adjusted to use the available screen size. +.TP 5 +.B int \fIwidth +is the desired width of the box. +If zero, the height is adjusted to use the available screen size. +.TP 5 +.B int \fIlist_height +is the minimum height to reserve for displaying the list. +If zero, it is computed based on the given \fIheight\fP and \fIwidth\fP. +.TP 5 +.B int \fIitem_no +is the number of \fIitems\fP. +.TP 5 +.B DIALOG_LISTITEM * \fIitems +This is a list of the items to display in the checklist. +.TP 5 +.B const char * \fIstates +This is a list of characters to display for the given states. +Normally a checklist provides true (1) and false (0) values, +which the widget displays as "*" and space, respectively. +An application may set this parameter to an arbitrary null-terminated string. +The widget determines the number of states from the length of this string, +and will cycle through the corresponding display characters as the user +presses the space-bar. +.TP 5 +.B int \fIflag +This is should be one of \fBFLAG_CHECK\fP or \fPFLAG_RADIO\fP, +depending on whether the widget should act as a checklist or radiobox. +.TP 5 +.B int * \fIcurrent_item +The widget sets the referenced location to the index of the current display +item (cursor) when it returns. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_check_scrolled +given a function key (or other key that was mapped to a function key), +check if it is one of the up/down scrolling functions: +.sp +.RS + DLGK_PAGE_FIRST, +.br + DLGK_PAGE_LAST, +.br + DLGK_GRID_UP, +.br + DLGK_GRID_DOWN, +.br + DLGK_PAGE_PREV or +.br + DLGK_PAGE_NEXT. +.RE +.fi +.IP +Some widgets use these key bindings for scrolling the prompt-text up and +down, to allow for display in very small windows. +.IP +The function returns 0 (zero) if it finds one of these keys, +and -1 if not. +.RS +.TP 5 +.B int \fIkey +is the function-key to check +.TP 5 +.B int \fIlast +is the number of lines +which would be used to display the scrolled prompt in +an arbitrarily tall window. +It is used here to check limits for the \fIoffset\fP value. +.TP 5 +.B int \fIpage +this is the available height for writing scrolled text, +which is smaller than the window if it contains buttons. +.TP 5 +.B bool * \fIshow +on return, holds TRUE if \fBdlg_print_scrolled\fP should be used to redisplay +the prompt text. +.TP 5 +.B int * \fIoffset +on entry, holds the starting line number (counting from zero) +last used for \fBdlg_print_scrolled\fP. +On return, holds the updated starting line number. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_clear +Set window to the default dialog screen attribute. +This is set in the rc-file with \fBscreen_color\fP. +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_clr_result +Free storage used for the result buffer (\fBdialog_vars.input_result\fP). +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_color_count +Return the number of colors that can be configured in \fBdialog\fP. +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_color_setup +Initialize the color pairs used in \fBdialog\fP. +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_count_columns +Returns the number of columns used for a string. +This is not necessarily the number of bytes in a string. +.RS +.TP 5 +.B const char * \fIstring +is the string to measure. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_count_wchars +Returns the number of wide-characters in the string. +.RS +.TP 5 +.B const char * \fIstring +is the string to measure. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_create_rc +Create a configuration file, +i.e., write internal tables to a file which can be read back by \fBdialog\fP +as an rc-file. +.RS +.TP 5 +.B const char * \fIfilename +is the name of the file to write to. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_ctl_size +If \fBdialog_vars.size_err\fP is true, +check if the given window size is too large to fit on the screen. +If so, exit with an error reporting the size of the window. +.RS +.TP 5 +.B int \fIheight +is the window's height +.TP 5 +.B int \fIwidth +is the window's width +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_default_formitem +If \fBdialog_vars.default_item\fP is not null, +find that name by matching the \fIname\fP field in the list of form \fIitems\fP. +If found, return the index of that item in the list. +Otherwise, return zero. +.RS +.TP 5 +.B DIALOG_FORMITEM * \fIitems +is the list of items to search. +It is terminated by an entry with a null \fIname\fP field. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_default_item +This function is obsolete, provided for library-compatibility. +It is replaced by \fIdlg_default_formitem\fP and \fIdlg_default_listitem\fP. +.RS +.TP 5 +.B char ** \fIitems +is the list of items to search. +.TP 5 +.B int \fIllen +is the number of items in each group, e.g., the second array index. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_defaultno_button +If \fBdialog_vars.defaultno\fP is true, and \fBdialog_vars.nocancel\fP is not, +find the button-index for the "Cancel" button. +Otherwise, return the index for "OK" (always zero). +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_del_window +Remove a window, repainting everything else. +.RS +.TP 5 +.B WINDOW * \fIwin +is the window to remove. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_does_output +This is called each time a widget is invoked which may do output. +It increments \fBdialog_state.output_count\fP, +so the output function in \fBdialog\fP can test this and add a separator. +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_draw_arrows +Draw up/down arrows on a window, e.g., for scrollable lists. +It calls \fBdlg_draw_arrows2\fP using the +\fImenubox_color\fP and \fImenubox_border_color\fP attributes. +.RS +.TP 5 +.B WINDOW * \fIdialog +is the window on which to draw an arrow. +.TP 5 +.B int \fItop_arrow +is true if an up-arrow should be drawn at the top of the window. +.TP 5 +.B int \fIbottom_arrow +is true if an down-arrow should be drawn at the bottom of the window. +.TP 5 +.B int \fIx +is the zero-based column within the window on which to draw arrows. +.TP 5 +.B int \fItop +is the zero-based row within the window on which to draw up-arrows +as well as a horizontal line to show the window's top. +.TP 5 +.B int \fIbottom +is the zero-based row within the window on which to draw down-arrows +as well as a horizontal line to show the window's bottom. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_draw_arrows2 +Draw up/down arrows on a window, e.g., for scrollable lists. +.RS +.TP 5 +.B WINDOW * \fIdialog +is the window on which to draw an arrow. +.TP 5 +.B int \fItop_arrow +is true if an up-arrow should be drawn at the top of the window. +.TP 5 +.B int \fIbottom_arrow +is true if an down-arrow should be drawn at the bottom of the window. +.TP 5 +.B int \fIx +is the zero-based column within the window on which to draw arrows. +.TP 5 +.B int \fItop +is the zero-based row within the window on which to draw up-arrows +as well as a horizontal line to show the window's top. +.TP 5 +.B int \fIbottom +is the zero-based row within the window on which to draw down-arrows +as well as a horizontal line to show the window's bottom. +.TP 5 +.B chtype \fIattr +is the window's background attribute. +.TP 5 +.B chtype \fIborderattr +is the window's border attribute. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_draw_bottom_box +Draw a partial box at the bottom of a window, +e.g., to surround a row of buttons. +It is designed to merge with an existing box around +the whole window, so it uses tee-elements rather than corner-elements +on the top corners of this box. +.RS +.TP 5 +.B WINDOW * \fIwin +is the window to update. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_draw_box +Draw a rectangular box with line drawing characters. +.RS +.TP 5 +.B WINDOW * \fIwin +is the window to update. +.TP 5 +.B int \fIy +is the top row of the box. +.TP 5 +.B int \fIx +is the left column of the box. +.TP 5 +.B int \fIheight +is the height of the box. +.TP 5 +.B int \fIwidth +is the width of the box. +.TP 5 +.B chtype \fIboxchar +is used to color the right/lower edges. +It also is fill-color used for the box contents. +.TP 5 +.B chtype \fIborderchar +is used to color the upper/left edges. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_draw_buttons +Print a list of buttons at the given position. +.RS +.TP 5 +.B WINDOW * \fIwin +is the window to update. +.TP 5 +.B int \fIy +is the starting row. +.TP 5 +.B int \fIx +is the starting column. +.TP 5 +.B const char ** \fIlabels +is a list of (pointers to) button labels terminated by a null pointer. +.TP 5 +.B int \fIselected +is the index within the list of the selected button. +.TP 5 +.B int \fIvertical +is true if the buttons are arranged in a column rather than a row. +.TP 5 +.B int \fIlimit +is the number of columns (or rows if \fIvertical\fP) allowed for the display. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_draw_scrollbar +If \fBdialog_state.use_scrollbar\fP is set, +draw a scrollbar on the right margin of windows holding scrollable data. +Also (whether or not the scrollbar is drawn), +annotate the bottom margin of the window with the percentage of data +by the bottom of that window, +and call \fBdlg_draw_arrows2\fP to put markers on the window showing +when more data is available. +.RS +.TP 5 +.B WINDOW * \fIwin +is the window in which the data is scrolled. +Because \fIleft\fP, \fIright\fP, \fItop\fP, \fIbottom\fP +are passed as parameters, this window can contain additional data. +.TP 5 +.B long \fIfirst_data +is the zero-based index to the first row of data in the current window. +.TP 5 +.B long \fIthis_data +is the zero-based index to the current row of data. +.TP 5 +.B long \fInext_data +is the zero-based index to the next data after the current row. +.TP 5 +.B long \fItotal_data +is the total number of rows of data. +.TP 5 +.B int \fIleft +is the zero-based left margin/column of the window. +The up/down arrows are draw inset by 5 columns from this point. +.TP 5 +.B int \fIright +is the zero-based right margin/column of the window. +The scrollbar is drawn flush against this column. +.TP 5 +.B int \fItop +is the zero-based row within the window on which to draw up-arrows +as well as a horizontal line to show the window's top. +.TP 5 +.B int \fIbottom +is the zero-based row within the window on which to draw down-arrows +as well as a horizontal line to show the window's bottom. +.TP 5 +.B chtype \fIattr +is the window's background attribute. +.TP 5 +.B chtype \fIborderattr +is the window's border attribute. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_draw_shadow +Draw shadows along the right and bottom edge of a window to give it +a 3-dimensional look. +(The height, etc., may not be the same as the window's actual values). +.RS +.TP 5 +.B WINDOW * \fIwin +is the window to update. +.TP 5 +.B int \fIheight +is the height of the window. +.TP 5 +.B int \fIwidth +is the width of the window. +.TP 5 +.B int \fIy +is the top row of the window. +.TP 5 +.B int \fIx +is the left column of the window. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_draw_title +Draw a title centered at the top of the window. +.RS +.TP 5 +.B WINDOW * \fIwin +is the window to update. +.TP 5 +.B const char * \fItitle +is the title string to display at the top of the widget. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_dump_keys +Write all user-defined key-bindings to the given stream, +e.g., as part of \fBdlg_create_rc\fP. +.RS +.TP 5 +.B FILE * \fIfp +is the stream on which to write the bindings. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_edit_offset +Given the character-offset in the string, +returns the display-offset where +dialog should position the cursor. +In this context, "characters" may be multicolumn, +since the string can be a multibyte character string. +.RS +.TP 5 +.B char * \fIstring +is the string to analyze +.TP 5 +.B int \fIoffset +is the character-offset +.TP 5 +.B int \fIx_last +is a limit on the column positions that can be used, +e.g., the window's size. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_edit_string +Updates the string and character-offset, given various editing characters +or literal characters which are inserted at the character-offset. +Returns true if an editing change was made (and the display should +be updated), and false if the key was something like KEY_ENTER, +which is a non-editing action outside this function. +.RS +.TP 5 +.B char * \fIstring +is the (multibyte) string to update +.TP 5 +.B int * \fIoffset +is the character-offset +.TP 5 +.B int \fIkey +is the editing key +.TP 5 +.B int \fIfkey +is true if the editing key is a function-key +.TP 5 +.B bool \fIforce +is used in a special loop case by calling code to force the return +value of this function when a function-key code 0 is passed in. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_exit +Given an internal exit code, +check if the corresponding environment variable is set. +If so, remap the exit code to match the environment variable. +Finally call \fBexit\fP with the resulting exit code. +.RS +.TP 5 +.B int \fIcode +is the internal exit code, e.g., \fBDLG_EXIT_OK\fP, +which may be remapped. +.RE +.IP +The \fBdialog\fP program uses this function +to allow shell scripts to remap the exit codes so they can distinguish ESC +from ERROR. +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_exit_buttoncode +Map the given button index for \fBdlg_exit_label\fP into dialog's exit-code. +.RS +.TP 5 +.B int \fIbutton +is the button index +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_exit_label +Return a list of button labels. +If dialog_var.extra_button is true, return the result of \fBdlg_ok_labels\fP. +Otherwise, return a list with the "Exit" label and (if \fBdialog_vars.help_button\fP +is set) the "Help" button as well. +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_exiterr +Quit program killing all \fBtailboxbg\fP widgets. +.RS +.TP 5 +.B const char * \fIfmt +is the format of the \fBprintf\fP-like message to write. +.TP 5 +. +are the variables to apply to the \fIfmt\fP format. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_find_index +Given the character-offset to find in the list, return the corresponding +array index. +.RS +.TP 5 +.B const int *\fIlist +contains a list of character-offsets, +i.e., indices into a string that denote the beginning of multibyte characters. +.TP 5 +.B int \fIlimit +is the last index into \fBlist\fP to search. +.TP 5 +.B int \fIto_find +is the character-offset to find. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_flush_getc +Cancel the local data saved by \fBdlg_last_getc\fP. +.\" --------------------------------------------------------------------------- +.IP dlg_editbox +This entrypoint provides the \fB--editbox\fP +functionality without the limitations of \fBdialog\fP's command-line syntax +(compare to \fBdialog_editbox\fP). +.RS +.TP 5 +.B const char * \fItitle +is the title string to display at the top of the widget. +.TP 5 +.B char *** \fIlist +is a pointer to an array of \fBchar\ *\fP pointers. +The array is allocated by the caller, +and so are the strings to which it points. +The \fBdlg_editbox\fP function may reallocate the +array and the strings. +.TP 5 +.B int * \fIrows +points to the nominal length of \fIlist\fP. +The referenced value is updated if\fIlist\fP is reallocated. +.TP 5 +.B int \fIheight +is the desired height of the box. +If zero, the height is adjusted to use the available screen size. +.TP 5 +.B int \fIwidth +is the desired width of the box. +If zero, the height is adjusted to use the available screen size. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_form +This entrypoint provides the \fB--form\fP +functionality without the limitations of \fBdialog\fP's command-line syntax +(compare to \fBdialog_form\fP). +.RS +.TP 5 +.B const char * \fItitle +is the title string to display at the top of the widget. +.TP 5 +.B const char * \fIcprompt +is the prompt text shown within the widget. +.TP 5 +.B int \fIheight +is the desired height of the box. +If zero, the height is adjusted to use the available screen size. +.TP 5 +.B int \fIwidth +is the desired width of the box. +If zero, the height is adjusted to use the available screen size. +.TP 5 +.B int \fIform_height +is the minimum height to reserve for displaying the list. +If zero, it is computed based on the given \fIheight\fP and \fIwidth\fP. +.TP 5 +.B int \fIitem_no +is the number of \fIitems\fP. +.TP 5 +.B DIALOG_FORMITEM * \fIitems +This is a list of the items to display in the form. +.TP 5 +.B int * \fIcurrent_item +The widget sets the referenced location to the index of the current display +item (cursor) when it returns. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_free_columns +Free data allocated by \fBdlg_align_columns\fP. +.RS +.TP 5 +.B char **\fItarget +This is the array which was reformatted. +It points to the first string to free. +.TP 5 +.B int \fIper_row +This is the size of the struct for each row of the array. +.TP 5 +.B int \fInum_rows +This is the number of rows in the array. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_free_formitems +Free memory owned by a list of DIALOG_FORMITEM's. +.RS +.TP 5 +.B DIALOG_FORMITEM * \fIitems +is the list to free. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_getc +Read a character from the given window. +Handle repainting here (to simplify +things in the calling application). +Also, if input-callback(s) are set up, +poll the corresponding files and handle the updates, +e.g., for displaying a tailbox. +Returns the key-code. +.RS +.TP 5 +.B WINDOW * \fIwin +is the window within which to read. +.TP 5 +.B int * \fIfkey +as a side-effect, set this to true if the key-code is really a function-key. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_getc_callbacks +passes the given key-code \fIch\fP to the current window that +has established a callback. +If the callback returns zero, remove it and try the next window. +If no more callbacks remain, return. +If any callbacks were found, return true, otherwise false. +.RS +.TP 5 +.B int \fIch +is the key-code +.TP 5 +.B int \fIfkey +is true if the key is a function-key +.TP 5 +.B int * \fIresult +is used to pass an exit-code to the caller, +which should pass that via \fBdlg_exit\fP. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_index_columns +Build a list of the display-columns for the given multibyte string's characters. +.RS +.TP 5 +.B const char * \fIstring +is the string to analyze +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_index_wchars +Build an index of the wide-characters in the string, +so the caller can easily tell +which byte-offset begins a given wide-character. +.RS +.TP 5 +.B const char * \fIstring +is the string to analyze +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_item_help +Draw the string for the \fBdialog_vars.item_help\fP feature. +.RS +.TP 5 +.B const char * \fItxt +is the help-message +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_killall_bg +If \fBdialog\fP has callbacks active, +purge the list of all that are not marked +to keep in the background. +If any remain, run those in a background process. +.RS +.TP 5 +.B int * \fIretval +stores the exit-code to pass back to the caller. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_last_getc +returns the most recent character that was read via \fBdlg_getc\fP. +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_limit_columns +Given a column limit, +count the number of wide characters that can fit into that limit. +The offset is used to skip over a leading character +that was already written. +.RS +.TP 5 +.B const char * \fIstring +is the string to analyze +.TP 5 +.B int \fIlimit +is the column limit +.TP 5 +.B int \fIoffset +is the starting offset from which analysis should continue +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_lookup_key +Check for a key-binding. +If there is no binding associated with the widget, it simply returns +the given curses-key. +Otherwise, it returns the result of the binding +.RS +.TP 5 +.B WINDOW * \fIwin +is the window on which the binding is checked +.TP 5 +.B int \fIcurses_key +is the curses key-code +.TP 5 +.B int * \fIdialog_key +is the corresponding dialog internal code +(see \fBDLG_KEYS_ENUM\fP in dlg_key.h). +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_max_input +Limit the parameter according to \fBdialog_vars.max_input\fP +.RS +.TP 5 +.B int \fImax_len +is the value to limit +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_match_char +Match a given character against the beginning of the string, +ignoring case of the given character. +The matching string must begin with an uppercase character. +.RS +.TP 5 +.B int \fIch +is the character to check +.TP 5 +.B const char * \fIstring +is the string to search +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_menu +This entrypoint provides the \fB--menu\fP +functionality without the limitations of \fBdialog\fP's command-line syntax +(compare to \fBdialog_menu\fP). +.RS +.TP 5 +.B const char * \fItitle +is the title string to display at the top of the widget. +.TP 5 +.B const char * \fIcprompt +is the prompt text shown within the widget. +.TP 5 +.B int \fIheight +is the desired height of the box. +If zero, the height is adjusted to use the available screen size. +.TP 5 +.B int \fIwidth +is the desired width of the box. +If zero, the height is adjusted to use the available screen size. +.TP 5 +.B int \fImenu_height +is the minimum height to reserve for displaying the list. +If zero, it is computed based on the given \fIheight\fP and \fIwidth\fP. +.TP 5 +.B int \fIitem_no +is the number of \fIitems\fP. +.TP 5 +.B DIALOG_LISTITEM * \fIitems +This is a list of the items to display in the form. +.TP 5 +.B int * \fIcurrent_item +The widget sets the referenced location to the index of the current display +item (cursor) when it returns. +.TP 5 +.B DIALOG_INPUTMENU \fIrename_menutext +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_move_window +Moves/resizes the given window to the given position and size. +.RS +.TP 5 +.B WINDOW *\fIwin +is the window to move/resize. +.TP 5 +.B WINDOW *\fIheight +is the height of the resized window. +.TP 5 +.B WINDOW *\fIwidth +is the width of the resized window. +.TP 5 +.B WINDOW *\fIy +y-ordinate to use for the repositioned window. +.TP 5 +.B WINDOW *\fIx +x-ordinate to use for the repositioned window. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_mouse_bigregion +Retrieve the big-region under the pointer. +.RS +.TP 5 +.B int \fIy +is the row on which the mouse click occurred +.TP 5 +.B int \fIx +is the column on which the mouse click occurred +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_mouse_free_regions +Free the memory associated with mouse regions. +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_mouse_mkbigregion +Creates a region on which the mouse-clicks will return a specifed code. +.RS +.TP 5 +.B int \fIy +is the top-row of the region. +.TP 5 +.B int \fIx +is the left-column of the region. +.TP 5 +.B int \fIheight +is the height of the region. +.TP 5 +.B int \fIwidth +is the width of the region. +.TP 5 +.B int \fIcode +is a code used to make the region unique within a widget +.TP 5 +.B int \fIstep_x +is used in modes 2 (columns) and 3 (cells) to determine the width +of a column/cell. +.TP 5 +.B int \fIstep_y +is currently unused +.TP 5 +.B int \fImode +is used to determine how the mouse position is translated into +a code (like a function-key): +.RS +.TP +1 +index by lines +.TP +2 +index by columns +.TP +3 +index by cells +.RE +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_mouse_mkregion +.RS +.TP 5 +.B int \fIy +is the top-row of the region. +.TP 5 +.B int \fIx +is the left-column of the region. +.TP 5 +.B int \fIheight +is the height of the region. +.TP 5 +.B int \fIwidth +is the width of the region. +.TP 5 +.B int \fIcode +is a code used to make the region unique within a widget +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_mouse_region +Retrieve the frame under the mouse pointer +.RS +.TP 5 +.B int \fIy +is the row of the mouse-click +.TP 5 +.B int \fIx +is the column of the mouse-click +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_mouse_setbase +Sets a base for subsequent calls to \fBdlg_mouse_mkregion\fP, +so they can make regions relative to the start of a given window. +.RS +.TP 5 +.B int \fIx +is the left-column for the base +.TP 5 +.B int \fIy +is the top-row for the base +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_mouse_wgetch +is a wrapper for \fBdlg_getc\fP which additionally maps mouse-clicks +(if the curses library supports those) into extended function-keys +which encode the position according to the \fImode\fP in +\fBdlg_mouse_mkbigregion\fP. +Returns the corresponding key-code. +.RS +.TP 5 +.B WINDOW * \fIwin +is the window on which to perform the input +.TP 5 +.B int * \fIfkey +the referenced location is set to true if the key-code is an actual +or extended (mouse) function-key. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_mouse_wgetch_nowait +This is a non-blocking variant of \fBdlg_mouse_wgetch\fP. +.RS +.TP 5 +.B WINDOW * \fIwin +is the window on which to perform the input +.TP 5 +.B int * \fIfkey +the referenced location is set to true if the key-code is an actual +or extended (mouse) function-key. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_need_separator +Check if an output-separator is needed. +If \fBdialog_vars.output_separator\fP is set, return true. +Otherwise, if \fBdialog_vars.input_result\fP is nonempty, return true. +If neither, return false. +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_new_modal_window +Create a modal window, optionally with a shadow. +The shadow is created if \fBdialog_state.use_shadow\fP is true. +.RS +.TP 5 +.B WINDOW * \fIparent +is the parent window (usually the top-level window of a widget) +.TP 5 +.B int \fIheight +is the window's height +.TP 5 +.B int \fIwidth +is the window's width +.TP 5 +.B int \fIy +is the window's top-row +.TP 5 +.B int \fIx +is the window's left-column +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_new_window +Create a window, optionally with a shadow. +The shadow is created if \fBdialog_state.use_shadow\fP is true. +.RS +.TP 5 +.B int \fIheight +is the window's height +.TP 5 +.B int \fIwidth +is the window's width +.TP 5 +.B int \fIy +is the window's top-row +.TP 5 +.B int \fIx +is the window's left-column +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_next_button +Return the next index in the list of labels. +.RS +.TP 5 +.B const char ** \fIlabels +is a list of (pointers to) button labels terminated by a null pointer. +.TP 5 +.B int \fIbutton +is the current button-index. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_next_ok_buttonindex +Assuming that the caller is using \fBdlg_ok_labels\fP to list buttons, +find the next index in the list of buttons. +.RS +.TP 5 +.B int \fIcurrent +is the current index in the list of buttons +.TP 5 +.B int \fIextra +if negative, provides a way to enumerate extra active areas on the widget. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_ok_buttoncode +Map the given button index for \fBdlg_ok_labels\fP +into \fBdialog\fP's exit-code. +.RS +.TP 5 +.B int \fIbutton +is the button-index (which is not necessarily the same as the index +in the list of labels). +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_ok_label +Returns a list with the "Ok" label, +and if \fBdialog_vars.help_button\fP is true, the "Help" label as well. +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_ok_labels +Return a list of button labels for the OK/Cancel group of widgets. +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_ordinate +Decode the string as an integer, decrement if greater than zero to make +a curses-ordinate from a dialog-ordinate. +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_parse_bindkey +Parse the parameters of the "bindkeys" configuration-file entry. This +expects widget name which may be "*", followed by curses key definition and +then dialog key definition. +.RS +.TP 5 +.B char * \fIparams +is the parameter string to parse. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_parse_rc +Parse the configuration file and set up variables. +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_prev_button +Return the previous index in the list of labels. +.RS +.TP 5 +.B const char ** \fIlabels +is a list of (pointers to) button labels terminated by a null pointer. +.TP 5 +.B int \fIbutton +is the current button index +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +dlg_print_scrolled +This is a wrapper for \fBdlg_print_autowrap\fP which allows the user +to scroll too-long prompt text up/down. +.IP +See \fBdlg_check_scrolled\fP for a function which updates the \fIoffset\fP +variable used as a parameter here. +It complements this function; you need both. +If \fIpauseopt\fP is set, this function returns an updated \fIlast\fP +parameter, needed for \fBdlg_check_scrolled\fP calls. +.RS +.TP 5 +.B WINDOW * \fIwin +is the window to update. +.TP 5 +.B const char * \fIprompt +is the string to print +.TP 5 +.B int \fIoffset +is the starting line-number to write wrapped text. +.TP 5 +.B int \fIheight +is the available height for writing the wrapped text +.TP 5 +.B int \fIwidth +is the width that the wrapping should occur in +.TP 5 +.B int \fIpauseopt +is true if the extra functionality for scrolling should be enabled. +If false, this calls \fBdlg_print_autowrap\fP without doing any scrolling. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_print_line +Print one line of the prompt in the window within the limits of the +specified right margin. +The line will end on a word boundary and a pointer +to the start of the next line is returned, or a NULL pointer if the end of +*prompt is reached. +.RS +.TP 5 +.B WINDOW *\fIwin +is the window to update. +.TP 5 +.B chtype *\fIattr +holds the starting attributes, and is updated to reflect the final attributes +applied to the string. +.TP 5 +.B const char *\fIprompt +is the string to print +.TP 5 +.B int \fIlm +is the left margin. +.TP 5 +.B int \fIrm +is the right margin +.TP 5 +.B int *\fIx +returns the ending x-ordinate. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_prev_ok_buttonindex +Find the previous button index in the list from \fBdlg_ok_labels\fP. +.RS +.TP 5 +.B int \fIcurrent +is the current index +.TP 5 +.B int \fIextra +if negative provides a way to enumerate extra active areas on the widget. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_print_autowrap +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. +Note that the string may contain embedded newlines. +The text is written starting at the top of the window. +.RS +.TP 5 +.B WINDOW * \fIwin +is the window to update. +.TP 5 +.B const char * \fIprompt +is the string to print +.TP 5 +.B int \fIheight +is the nominal height the wrapped string is limited to +.TP 5 +.B int \fIwidth +is the width that the wrapping should occur in +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_print_size +If \fBdialog_vars.print_siz\fP is true, +print the given height/width (from a widget) +to \fBdialog_state.output\fP, e.g., +\fBSize: height, width\fP. +.RS +.TP 5 +.B int \fIheight +is the window's height +.TP 5 +.B int \fIwidth +is the window's width +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_print_text +Print up to \fIcols\fP columns from \fBtext\fP, +optionally rendering \fBdialog\fP's escape sequences for attributes and color. +.RS +.TP 5 +.B WINDOW * \fIwin +is the window to update. +.TP 5 +.B const char * \fItxt +is the string to print +.TP 5 +.B int \fIcol +is the column limit +.TP 5 +.B chtype * \fIattr +holds the starting attributes, and is updated to reflect the final attributes +applied to the string. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_put_backtitle +Display the background title if \fBdialog_vars.backtitle\fP is non-null. +The background title is shown at the top of the screen. +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_register_buttons +The widget developer should call this function after \fBdlg_register_window\fP, +for the list of button labels associated with the widget. +One may bind a key to a button, e.g., "OK" for \fBDLGK_OK\fP, +.RS +.TP 5 +.B WINDOW * \fIwin +is the window with which to associate the buttons +.TP 5 +.B const char * \fIname +is the widget's binding name (usually the name of the widget). +.TP 5 +.B const char ** \fIbuttons +is the list of buttons +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_register_window +For a given named widget's window, associate a binding table. +.RS +.TP 5 +.B WINDOW * \fIwin +is the window with which to associate the buttons +.TP 5 +.B const char * \fIname +is the widget's binding name (usually the name of the widget). +.TP 5 +.B DLG_KEYS_BINDING * \fIbinding +is the binding table +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_remove_callback +Remove a callback. +.RS +.TP 5 +.B DIALOG_CALLBACK \fI* p +contains the callback information. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_restore_vars +Restore dialog's variables from the given variable (see \fBdialog_save_vars\fP). +.RS +.TP 5 +.B DIALOG_VARS * \fIsave +is the variable from which to restore. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_result_key +Test a dialog internal keycode to see if it corresponds to one of the push +buttons on the widget such as "OK". +This is only useful if there are user-defined key bindings, since there are +no built-in bindings that map directly to \fBDLGK_OK\fP, etc. +Return true if a mapping was done. +.RS +.TP 5 +.B int \fIdialog_key +is the dialog key to test +.TP 5 +.B int \fIfkey +is true if this is a function key +.TP 5 +.B int * \fIresultp +store the result of the mapping in the referenced location. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_save_vars +Save dialog's variables into the given variable (see \fBdialog_restore_vars\fP). +.RS +.TP 5 +.B DIALOG_VARS * \fIsave +is the variable into which to save. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_set_focus +Set focus on the given window, +making it display above other windows on the screen. +.RS +.TP 5 +.B WINDOW * \fIparent +is the parent window (usually the top-level window of a widget) +.TP 5 +.B WINDOW * \fIwin +is the window on which to place focus (usually a subwindow of a widget) +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_set_result +Setup a fixed-buffer for the result in \fBdialog_vars.input_result\fP +.RS +.TP 5 +.B const char * \fIstring +is the new contents for the result +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_show_string +Displays the string, shifted as necessary, to fit within the box and show +the current character-offset. +.RS +.TP 5 +.B WINDOW * \fIwin +is the window within which to display +.TP 5 +.B const char * \fIstring +is the string to display +.TP 5 +.B int \fIoffset +is the starting (character, not bytes) offset +.TP 5 +.B chtype \fIattr +is the window attribute to use for the string +.TP 5 +.B int \fIy_base +beginning row on screen +.TP 5 +.B int \fIx_base +beginning column on screen +.TP 5 +.B int \fIx_last +number of columns on screen +.TP 5 +.B bool \fIhidden +if true, do not echo input +.TP 5 +.B bool \fIforce +if true, force repaint +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_strclone +duplicate the string, like \fBstrdup\fP. +.RS +.TP 5 +.B const char * \fIcprompt +is the string to duplicate +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_strcmp +compare two strings, ignoring case. +.RS +.TP 5 +.B const char \fI* a +is one string +.TP 5 +.B const char \fI* b +is the other string +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_sub_window +create a subwindow, e.g., for an input area of a widget +.RS +.TP 5 +.B WINDOW * \fIwin +is the parent window +.TP 5 +.B int \fIheight +is the subwindow's height +.TP 5 +.B int \fIwidth +is the subwindow's width +.TP 5 +.B int \fIy +is the subwindow's top-row +.TP 5 +.B int \fIx +is the subwindow's left-column +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_tab_correct_str +If the \fBdialog_vars.tab_correct\fP is true, convert tabs to single spaces. +Return the converted result. +The caller is responsible for freeing the string. +.RS +.TP 5 +.B char * \fIprompt +is the string to convert +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_trace +If the parameter is non-null, opens a trace file with that +name and stores the file pointer in \fBdialog_state.trace\fP. +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_trace_chr +If \fBdialog_state.trace\fP is set, +translate the parameters into a printable representation, +log it on a "chr" line. +.RS +.TP 5 +.B int ch +is the nominal keycode value. +.TP 5 +.B int fkey +is nonzero if the value is really a function key. +Some of these may be values declared in the DLG_KEYS_ENUM. +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_trace_win +If \fBdialog_state.trace\fP is set, +log a printable picture of the given window. +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_trim_string +Change embedded "\\n" substrings to '\\n' characters and tabs to single spaces. +If there are no "\\n"s, the function strips all extra spaces, for justification. +If it has "\\n"'s, the function preserves extra spaces. +If \fBdialog_vars.cr_wrap\fP is set, the function preserves '\\n's. +.RS +.TP 5 +.B char * \fIsrc +is the string to trim +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_unregister_window +Remove the bindings for a given window. +.RS +.TP 5 +.B WINDOW * \fIwin +is the window from which to remove bindings +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_yes_buttoncode +Map the given button index for \fBdlg_yes_labels\fP into \fBdialog\fP's exit-code. +.RS +.TP 5 +.B int \fIbutton +is the button index +.RE +.\" --------------------------------------------------------------------------- +.TP 5 +.B dlg_yes_labels +Return a list of buttons for Yes/No labels. +. +.\" ************************************************************************ +.SH SEE ALSO +dialog (1). +. +.\" ************************************************************************ +.SH AUTHOR +Thomas E. Dickey Index: contrib/dialog/columns.c =================================================================== --- contrib/dialog/columns.c (revision 0) +++ contrib/dialog/columns.c (revision 0) @@ -0,0 +1,174 @@ +/* + * $Id: columns.c,v 1.5 2010/01/18 10:26:36 tom Exp $ + * + * columns.c -- implements column-alignment + * + * Copyright 2008,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + */ + +#include <dialog.h> + +#define each(row, data) \ + row = 0, data = target; \ + row < num_rows - 1; \ + ++row, data = next_row(data, per_row) + +static char * +column_separator(void) +{ + char *result = 0; + + if ((result = dialog_vars.column_separator) != 0) { + if (*result == '\0') + result = 0; + } + return result; +} + +static char ** +next_row(char **target, int per_row) +{ + char *result = (char *) target; + result += per_row; + return (char **) result; +} + +static char * +next_col(char *source, unsigned offset) +{ + char *mark = column_separator(); + char *result = source + offset; + if (offset) + result += strlen(mark); + return strstr(result, mark); +} + +/* + * Parse the source string, storing the offsets and widths of each column in + * the corresponding arrays. Return the number of columns. + */ +static unsigned +split_row(char *source, unsigned *offsets, unsigned *widths) +{ + int mark = (int) strlen(column_separator()); + char *next = 0; + unsigned result = 0; + unsigned offset = 0; + + do { + if (result) { + offset = (unsigned) (mark + next - source); + widths[result - 1] = offset - offsets[result - 1] - (unsigned) mark; + } + offsets[result] = offset; + ++result; + } while ((next = next_col(source, offset)) != 0); + + offset = strlen(source); + widths[result - 1] = offset - offsets[result - 1]; + + return result; +} + +/* + * The caller passes a pointer to a struct or array containing pointers + * to strings that we may want to copy and reformat according to the column + * separator. + */ +void +dlg_align_columns(char **target, int per_row, int num_rows) +{ + int row; + + if (column_separator()) { + char **value; + unsigned numcols = 1; + unsigned maxcols = 0; + unsigned *widths; + unsigned *offsets; + unsigned *maxwidth; + unsigned realwidth; + unsigned n; + + /* first allocate arrays for workspace */ + for (each(row, value)) { + unsigned len = strlen(*value); + if (maxcols < len) + maxcols = len; + } + ++maxcols; + widths = dlg_calloc(unsigned, maxcols); + offsets = dlg_calloc(unsigned, maxcols); + maxwidth = dlg_calloc(unsigned, maxcols); + + assert_ptr(widths, "dlg_align_columns"); + assert_ptr(offsets, "dlg_align_columns"); + assert_ptr(maxwidth, "dlg_align_columns"); + + /* now, determine the number of columns and the column-widths */ + for (each(row, value)) { + unsigned cols = split_row(*value, offsets, widths); + if (numcols < cols) + numcols = cols; + for (n = 0; n < cols; ++n) { + if (maxwidth[n] < widths[n]) + maxwidth[n] = widths[n]; + } + } + realwidth = numcols - 1; + for (n = 0; n < numcols; ++n) { + realwidth += maxwidth[n]; + } + + /* finally, construct reformatted strings */ + for (each(row, value)) { + unsigned cols = split_row(*value, offsets, widths); + unsigned offset = 0; + char *text = dlg_malloc(char, realwidth + 1); + + assert_ptr(text, "dlg_align_columns"); + + memset(text, ' ', realwidth); + for (n = 0; n < cols; ++n) { + memcpy(text + offset, *value + offsets[n], widths[n]); + offset += maxwidth[n] + 1; + } + *value = text; + } + + free(widths); + free(offsets); + free(maxwidth); + } +} + +/* + * Free temporary storage used while making column-aligned data. + */ +void +dlg_free_columns(char **target, int per_row, int num_rows) +{ + int row; + char **value; + + if (column_separator()) { + for (each(row, value)) { + free(*value); + } + } +} Index: contrib/dialog/dialog-config.in =================================================================== --- contrib/dialog/dialog-config.in (revision 0) +++ contrib/dialog/dialog-config.in (revision 0) @@ -0,0 +1,135 @@ +#!@SHELL@ +# $Id: dialog-config.in,v 1.3 2007/02/25 19:33:58 tom Exp $ +############################################################################## +# Copyright (c) 2007 Thomas E. Dickey # +# # +# Permission is hereby granted, free of charge, to any person obtaining a # +# copy of this software and associated documentation files (the "Software"), # +# to deal in the Software without restriction, including without limitation # +# the rights to use, copy, modify, merge, publish, distribute, distribute # +# with modifications, sublicense, and/or sell copies of the Software, and to # +# permit persons to whom the Software is furnished to do so, subject to the # +# following conditions: # +# # +# The above copyright notice and this permission notice shall be included in # +# all copies or substantial portions of the Software. # +# # +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # +# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # +# DEALINGS IN THE SOFTWARE. # +# # +# Except as contained in this notice, the name(s) of the above copyright # +# holders shall not be used in advertising or otherwise to promote the sale, # +# use or other dealings in this Software without prior written # +# authorization. # +############################################################################## + +prefix="@prefix@" +exec_prefix="@exec_prefix@" + +bindir="@bindir@" +libdir="@libdir@" +datadir="@datadir@" +mandir="@mandir@" + +THIS="dialog" + +test $# = 0 && exec @SHELL@ $0 --error + +while test $# -gt 0; do + case "$1" in + -*=*) + ARG=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` + ;; + *) + ARG= + ;; + esac + + case "$1" in + # basic configuration + --prefix=*) + prefix="$ARG" + test -z "$exec_prefix" && exec_prefix="$ARG" + ;; + --prefix) + echo "$prefix" + ;; + --exec-prefix=*) + exec_prefix="$ARG" + ;; + --exec-prefix) + echo "$exec_prefix" + ;; + # compile/link + --cflags) + INCS= + if test "${prefix}/include" != /usr/include ; then + INCS="-I${prefix}/include" + fi + sed -e 's,^[ ]*,,' -e 's, [ ]*, ,g' -e 's,[ ]*$,,' <<-ENDECHO + $INCS +ENDECHO + ;; + --libs) + sed -e 's,^[ ]*,,' -e 's, [ ]*, ,g' -e 's,[ ]*$,,' <<-ENDECHO + -L${exec_prefix}/lib -l${THIS} @LIBS@ +ENDECHO + ;; + # identification + --version) + echo "@VERSION_MAJOR@.@VERSION_MINOR@.@VERSION_PATCH@" + ;; + --abi-version) + echo "@VERSION@" | sed -e 's/:/./g' + ;; + # locations + --bindir) + echo "${bindir}" + ;; + --datadir) + echo "${datadir}" + ;; + --libdir) + echo "${libdir}" + ;; + --mandir) + echo "${mandir}" + ;; + # general info + --help) + cat <<ENDHELP +Usage: ${THIS}-config [options] + +Options: + --prefix echos the package-prefix of ${THIS} + --prefix=ARG sets the package-prefix of ${THIS} + --exec-prefix echos the executable-prefix of ${THIS} + --exec-prefix=ARG sets the executable-prefix of ${THIS} + + --cflags echos the C compiler flags needed to compile with ${THIS} + --libs echos the libraries needed to link with ${THIS} + + --version echos the release+patchdate version of ${THIS} + --abi-version echos the ABI version of ${THIS} + + --bindir echos the directory containing ${THIS} programs + --datadir echos the directory containing ${THIS} data + --libdir echos the directory containing ${THIS} libraries + --mandir echos the directory containing ${THIS} manpages + + --help prints this message +ENDHELP + ;; + --error|*) + @SHELL@ $0 --help 1>&2 + exit 1 + ;; + esac + shift +done +# vile:shmode Index: contrib/dialog/COPYING =================================================================== --- contrib/dialog/COPYING (revision 0) +++ contrib/dialog/COPYING (revision 0) @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + <one line to give the library's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + <signature of Ty Coon>, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + Index: contrib/dialog/CHANGES =================================================================== --- contrib/dialog/CHANGES (revision 0) +++ contrib/dialog/CHANGES (revision 0) @@ -0,0 +1,1526 @@ +-- $Id: CHANGES,v 1.300 2010/04/28 21:27:22 tom Exp $ +-- Thomas E. Dickey <dickey@invisible-island.net> + +This version of dialog was originally from a Debian snapshot. I've done this +to it: + +2010/04/28 + + several improvements to configure script: + + modify CF_CURSES_TERM_H to handle cases such as cygwin where + packager has installed curses.h and term.h in different + directories, e.g., to wedge in a termcap library. + + modify CF_XOPEN_SOURCE, adding special case for OpenSolaris + + modify CF_MAKE_TAGS to add check for exctags and exetags, prefer to + ctags and etags to work around pkgsrc (NetBSD) renaming. + + correct CF_FIND_LINKAGE, setting cache variable for library_file in + the special case where no directory search is made. + + improve CF_GCC_VERSION, suppress stderr for c89 alias of gcc. + + improve CF_GCC_WARNINGS, moving -W and -Wall into the list to + check, since c89 alias for gcc complains about these options. + + modify CF_HEADER_PATH, to not search for variations of everything + in the current include-path + + use "mkdir -p", remove mkdirs.sh + + use CF_CURSES_HEADER to fill in possible subdirectory used for + ncurses header filename. + + modify CF_XOPEN_CURSES to work around current ncurse header loss of + predefinition of _XOPEN_SOURCE_EXTENDED + + add "--disable-rpath-hack" option, along with scripting to add + rpath option to libraries found in unusual places. + + modify pause widget to autosize like gauge, and to omit the area for + buttons when none are displayed. + + fix an infinite loop in dlg_button_layout() if there are no buttons + to display (Debian #579390). + + add makefile rules for generating html, etc., documentation from + nroff. + > patches by Samuel Martín Moro + + reset errors in tailbox before reading new character. + + modify dlg_draw_scrollbar(), omitting hiding percentages in boxes + when no arrows or scrollbar are needed. + + correct value of row for scrollbars in formbox. + + update es.po from + http://translationproject.org/latest/dialog/ + +2010/01/19 + + split up binding tables in inputbox and similar widgets to avoid + conflict between cursor-key use for input-string versus navigation + (report by slakmagik). + + if strftime() is available, support --time-format option for timebox + widget. + + if strftime() is available, support --date-format option for calendar + widget (request by Walter Harms). + + build-fixes for linking to intl library in /usr/local + + add --scrollbar option, use in most widgets to show a scrollbar on + the right margin of the data. That is cosmetic, does not respond to + the mouse. + + reuse functions from msgbox to allow prompt for yesno box to be + scrolled in a too-small window. + + correct mapping of button-codes with --nook option (report by Lebedev + Vadim). + + cleanup sample scripts using new utility scripts setup-* and report-*, + and allow command-line parameters to be added, for ad hoc testing. + + correct change to tailbox widget from 2009/02/22 using + dlg_button_layout(), which broke that widget. + + document some of the portability caveats. + + modify gauge widget to service callbacks (prompted by patch and + comments by Frank Sorenson). + + modify editbox to allow its input buffer to be larger than MAX_LEN + unless bounded by the --max-input option, and add limit-checks for + the buffer (report by slakmagik). + + improve manpage description of --checklist (report by Isaac Good). + + several improvements to configure script macros: CF_ADD_CFLAGS + CF_CURSES_FUNCS CF_DISABLE_ECHO CF_GCC_ATTRIBUTES CF_MATH_LIB + CF_POSIX_C_SOURCE CF_REMOVE_DEFINE CF_WITH_LIBTOOL CF_XOPEN_SOURCE + + add is.po, lv.po, sw.po from + http://translationproject.org/latest/dialog/ + + update de.po, id.po, pl.po, pt_BR.po, vi.po from + http://translationproject.org/latest/dialog/ + +2009/02/22 + + do not display top-arrows for scrolling if they would overwrite the + title (report by slakmagik) + + consistently use dlg_button_layout() when autosizing widgets (report + by slakmagik). + + add "-" and "+" bindings to timebox widget. + + add "-" and "+" bindings to calendar widget (OpenSolaris #6739031). + + review/fix other widgets to ensure that they exit on error, e.g., + editbox.c + + modify check in dlg_getc() to treat closure of either stdin or stdout + as an error, rather than both. This is more stringent than the check + added in 2007/07/04. + + modify dlg_result_key() to map curses ERR to dialog's error exit + (adapted from patch by Domagoj Pensa). + + updated several configure script macros: + + consistently append, rather then prepend, to $CFLAGS + + add cases for AIX 6, mint, and dragonfly to CF_XOPEN_SOURCE + + use $PATH_SEPARATOR rather than $PATHSEP + + improve CF_FIND_LINKAGE, use in checks for more libraries, e.g., + libutf8 and libiconv. + + update da.po, ru.po from + http://translationproject.org/latest/dialog/ + + updated config.guess, config.sub + +2008/08/19 + + amend changes to quoting; by default, the checklist widget quotes its + output except when --separate-output is used (Debian #495600). + + add eo.po from + http://translationproject.org/latest/dialog/ + +2008/07/27 + + add pointer-check when closing piped input (cf: 2007/03/25) + + use here-documents rather than echo, when passing backslashes in + strings, to accommodate the Debian shell "dash" (Debian #489563). + + recode several ".po" files to UTF-8 for consistency. + + change --separator to be an alias for --output-separator, for + compatibility with Xdialog. + + add --output-separator option to allow scripts to change the output + separator from a newline (for --separate-output) or a space. This + applies to other widgets such as forms and editboxes which normally + use a newline. + + add --column-separator option, to tell where column-aligned data for + radio/checkboxes or menus should be split into columns (request by + Ben Dibbens). + + add id.po, ku.po, lt.po, nb.po and update ca.po, fr.po, gl.po, ja.po, + th.po from + http://translationproject.org/latest/dialog/ + + add "--quoted" option, to quote values returned by formbox, etc. + + change names of EX/ES macros in dialog.1 to work around name- + pollution caused by changes in Debian #470729. + +2008/03/16 + + modify dlg_mouse_wgetch() to loop only on errors that it detects, + rather than on errors forwarded from dlg_getc(), in case those are + due to a disconnected terminal (report by Anatoli Sakhnik). + + allow "default" color in dialogrc file (request by Dashing). + + fix an indexing error in formbox (Debian #469190, report by Dmitry + Gomerman, patch by Vladimir Mezentsev). + + add bindings for CTL/N, CTL/P to checklist, fselect and menubox + widgets (prompted by discussion with John Gatewood Ham). + + add be@latin.po, th.po and update zh_TW.po from + http://translationproject.org/latest/dialog/ + > patches by Peter Astrand: + + modify dlg_auto_sizefile() to ensure the computed height and width + do not extend beyond the screen size. + + use unctrl() to make inputstr.c work with Solaris curses. + > patches by Yura Kalinichenko: + + extend pause widget to use ok/cancel buttons (the former giving the + same result as a timeout), rather than an exit-button. + + fix initialization parameter of inputbox for multibyte characters. + +2007/10/28 + + improve layout of checklist.c, menubox.c, ensuring that the list fits + within the available space (report by Gordon Schumacher). + + undo removal of redundant chunk from checklist.c in 2007/02/27, + since some scripts depend on this (Debian #443077). + + update nl.po from + http://translationproject.org/latest/dialog/ + +2007/09/30 + + correct cursor position in editbox after deleting past left margin + (report by Joe McDonagh). + + add "--no-ok" option (patch by Klaus Knopper). + + modify "--file" option to allow it to read from sources other than + a regular file (patch by Pieter van Beek). + + improved hi.po (Hindi) (from Klaus Knopper). + + fix masking of attributes in dlg_draw_shadow() which lost + line-drawing bit (report by David Everly). + + fix editbox widget to handle zero-length files (report by Joe + McDonagh). + + update "po" files eu.po ga.po it.po ms.po sv.po vi.po wa.po zh_CN.po + from + http://translationproject.org/latest/dialog/ + +2007/07/04 + + revise the resizable shadows so textbox's search dialog has text + visible in the shadow again. + + improve the prefixing of autoconf-related symbols in the installed + header files, taking into account symbols which are not mentioned in + dlg_config.h + + add a check when ERR returned from wgetch() to ensure that the + input/output streams are still valid. If that happens, force + ESC to be returned, quitting dialog (report by Reiner Huober). + + add extern "C" declarations to dlg_keys.h so the corresponding + function declarations are exported to C++ as C symbols. + + updated config.guess, config.sub + +2007/06/04 + + fix a memory leak in editbox.c + + revise change from 2007/02/27 which moved the logic for trimming + option text out of the loop because that moved it before + initialization of the "--trim" option. Put it back in the loop, but + limit the tokens which are trimmed to cover only those for the + current widget. Also ensure that all tokens for a widget are + trimmed, rather than only the first, which is usually text (report by + Lai Zit Seng). + + add _FILE_OFFSET_BITS definition in CF_LARGEFILE configure macro. + +2007/05/28 + + revise changes needed to make textbox's searchbox handle ncurses + resizing events, e.g., by handling the ERR in that code rather than + in dlg_getc() (Debian #423732). + +2007/05/14 + + supply a repaint_text() call in tailbox.c which was bypassed because + dlg_getc() now retries on ERR (Debian #423732, cf: 2007/02/27). + + modify dlg_getc() to fix regression in 2007/02/27 for use of + timeouts, broken by fixes to allow resizing of textbox (patch by + Arnaud Fontaine, Debian #418905). + + modify dlg_getc() to fix regression in use of TAB for traversal of + tailboxbg widgets due to changes for user-definable key bindings + (Debian #418917, cf: 2005/12/07). + +2007/04/09 + + add case in dlg_getc() to handle tab for traversing between widgets + as in the samples/tailboxbg1 script. Normally the key binding + overrides, except for the special case where multiple widgets are + available. + + add configure --with-libtool-opts, which passes its value to the + library creation and linkage passes, e.g., + --with-libtool-opts=-static + to force the result to be static libraries (prompted by a related + request by Santiago Vila). + > several fixes based on Coverity scan: + + fix memory leak in timebox, calendar widgets if the widget cannot + be created. + + fix memory leak in dlg_key.c if a user binding's storage cannot + be allocated. + + fix improperly delinked entry in dlg_del_window(). + +2007/03/25 + + improve mkdirs.sh to ignore error from mkdir if the target directory + happens to already exist (suggested by Harald van Dijk). + + amend documentation for --gauge to reflect longstanding quirk which + allows it to read percentage from the first line after an "XXX" + (Debian #415596). + + fix makefile dependency so "configure && make install-lib" works. + + fix resizing of msgbox; the message was not repainted (Debian + #415022, patch by Brian Rolfe). + + fix typo in makefile LIB_OBJECT symbol from 2007/02/27 changes. + + improve CF_MBSTATE_T by including stdio.h, needed on Tru64 to make + the test-compile work. + + change makefile to install dialog.3 as part of install-lib rather + than install-man (report by Thomas Klausner). + + use $(INSTALL_SCRIPT) for installing dialog-config (report by + Santiago Vila). + +2007/02/27 + + add dialog-config script, which provides applications with compile- + and link-information for using the dialog library. + + move calls to dlg_trim_string() out of loop in dialog.c, so each + string is trimmed once (report by Ivanov Makcim). + + modify textbox.c to allow resizing while the search box is presented. + This relies on bug-fix in ncurses 5.6 20070224. + + use dgettext() rather than gettext() to allow libdialog to use the + messages installed for dialog (patch by Vajna Miklos). + + modify inputbox to position the cursor initially at the end of any + initial-text (request by Klaus Knopper). + + add configure --with-valgrind for testing. + + add --trace option, for debugging. + + add --ascii-lines and --no-lines options to control the way the + line-drawing characters are rendered (request by Klaus Knopper). + + add --keep-tite option, to override suppression of smcup/rmcup + (termcap ti/te) strings which would switch to xterm's alternate + screen (Debian #380665). + + modify fselect/dselect to use space-character as a completion + operator like tab in shells (patch by Yoram Bar Haim). + + remove a redundant chunk from checklist.c which reported status a + second time if the help-button was pressed but no item-help option + was in effect (Andre C Barros). + + fix return-status from "dialog --pause" (Debian #409254). + + add --mixedform and --mixedgauge dialogs based on patch from + Kiran Cherupally. + + add some notes on compatibility to the manpage. + + add editbox dialog (compatible with Xdialog, Debian #368478). + + add dselect dialog (compatible with Xdialog). + + remove an incorrect initialization of .text_flen from 2005/12/07 + changes, which made all fields in a form editable (Debian #404045). + + report error and exit if a filename given for the --file option + cannot be opened (report by "Dog Walker"). + + make --program-prefix, etc., work in configure script, e.g., to make + program install as "cdialog". This does not alter the library name. + + add install-bin, install-man (and uninstall) rules to makefile. + + updates for configure script macros (originally vile, lynx, xterm): + AM_PATH_PROG_WITH_TEST, AM_WITH_NLS, CF_CURSES_CPPFLAGS, + CF_CURSES_LIBS, CF_INCLUDE_DIRS, CF_LARGEFILE, CF_MAKEFLAGS, + CF_PATH_SYNTAX, CF_SUBDIR_PATH, CF_SUBST, CF_WITH_DBMALLOC, + CF_WITH_DMALLOC, CF_WITH_LIBTOOL and CF_XOPEN_SOURCE. + + updated config.guess, config.sub + > adapted fixes from SuSE package (Werner Fink): + + add some limit-checks in dlg_draw_shadow(). + + make shadows resizable, using new dlg_move_window() in msgbox.c + and yesno.c + + add dialog_state.input, use this in end_dialog() to decide whether + to close pipe inputs and call _exit(), or simply call exit(). + + modify dlg_ctl_size() to check if the reason for failure is because + shadows were used; retry in that case without shadows. + + add signal catcher for SIGSEGV. + +2006/02/21 + + fix logic in split-out dlg_menu() to separate inputmenu and menu + handling (report by Auke Kok). + +2006/01/26 + + fix fselect.c to compile properly with Intel compiler and largefile + option. + + improve configure script checks for curses headers to work around + breakage in some packages, e.g., cygwin. + + amend correction to menubox, fixes normal menus (Debian #349969). + +2006/01/19 + + completed dialog.3 manpage + + modify configure script option --with-gauge to cover all flavors of + the gauge (gauge, pause, progressbox). + + add progressbox widget, a hybrid of gauge and tailbox (Reznic Valery). + + fix a comparison in checklist.c to avoid unneeded arrows when the + list happens to fit in the window (patch by Peter Postma). + + correct wrapping computation in print_line() from 2005/11/07 changes + (report by Barry Kauler). + + update sv.po (comments only). + http://www.iro.umontreal.ca/translation/maint/dialog/ + + correct logic that passes the callback for menubox to do inputmenu + operations from 2005/12/7 changes (report by Reznic Valery). + +2006/01/01 + + add a null-pointer check in dlg_register_buttons(), needed for the + tailboxbg (Debian #345524). + + fix a few memory leaks reported by valgrind. + +2005/12/19 + + correct return-values of new functions dlg_default_listitem() and + dlg_default_formitem() (Debian #344002). + + add Swedish translation (Debian #343303, by Daniel Nylander) + + begin function-summaries in dialog.3 + + update config.guess, config.sub + +2005/12/07 + + change license to LGPL. + + change naming convention in dlg_colors.h to make it easier to read, + and incidentally remove the last chunk of code preventing relicense. + + add --passwordform (request by Reznic Valery). + + modify pause.c, msgbox.c to work with --help-button. + + modify formbox.c, inputbox.c, textbox.c, yesno.c to work with extra + button (adapted from Reznic Valery patch). + + modify dlg_exit_label(), dlg_yes_labels() and dlg_ok_label() to allow + help-button (prompted by Reznic Valery patch). + + add zh_CN.po file from + http://www.iro.umontreal.ca/translation/maint/dialog/ + + provide alternate interfaces for dialog_checklist(), dialog_menu() + and dialog_form(): dlg_checklist(), dlg_menu() and dlg_form() + (discussion with Michael Gebetsroither). + + add/use dlg_result_key() to allow binding function keys to the + buttons. + + implement user-definable key bindings in the rc-file. + + modify inline cases for KEY_xxx values to use binding tables in new + module dlg_keys.c + + add several DIALOG_STATE items to the rc file: aspect, + separate_widget, tab_len and visit_links + + add a tab-adjustment to dlg_print_text() to improve solution from + 2005/10/30, e.g., in the samples/form* scripts. + + fix an off-by-one which made mouse-selection not work for menu items + past the first page (GenToo #112024, patch by Harald van Dijk). + +2005/11/07 + + extend dlg_add_result() to allow caller to pass a null pointer + for dialog_vars.input_result (Debian #336986). + + correct length used for text portion of radio/checkboxes (report by + Valentin Stoykov). + + modify msgbox, textbox and center_label() to work properly for + LANG=bg_BG.utf8 examples by Valentin Stoykov. + + modify use of freopen() to work with opaque FILE type on DragonFly + (report by Jeremy C Reed). + + modify print_line() to compute columns, use that for the call to + dlg_print_line(). Fix a few places where strlen() was used instead + of dlg_count_columns() (reports by Valentin Stoykov). + +2005/10/30 + + reviewed changes since beginning development in 1999, decided that + there are no appreciable portions of original code remaining. + Marked sources to correspond. + + improve cache performance for inputstr.c using tsearch() rather than + a linked-list search (Debian #294853). + + remove a special case for darwin in CF_XOPEN_SOURCE configure macro. + + add ms.po file from + http://www.iro.umontreal.ca/translation/maint/dialog/ + + remove an assignment that caused the cursor to appear initially on a + form field rather than button (Debian #333506). + + modify buttons.c to count columns rather than bytes, fixing case + where buttons were laid out incorrectly (report by Valentin Stoykov). + + change dlg_print_text() to count columns rather than bytes, fixing + case where fewer columns were displayed in menu than expected + (report by Valentin Stoykov). + +2005/10/05 + + improve fix for dlg_does_output(), eliminating redundant leading + separator. + + fill background color for item-help text (report by Peter Postma). + + correct interaction between --separate-output and --output-separator + broken in 2005/09/11 fix for Debian #326918 (Debian #331440). + + update config.guess, config.sub + +2005/09/11 + + undo doubled adjustment for left/right margins when wrapping text + for msgbox, gauge and pause (report by Xyba). + + correct position of scrolled text in formbox broken by 2004/12/19 + changes (report by Konrad Jelen). + + call dlg_does_output() from dlg_add_result(), ensuring that + separators are used when combining widgets such as formbox (report by + John Suykerbuyk). + + fix marker in textbox.c to make it disappear at the top of the file + (report by Patrick J. Volkerding). + + fix marker shown in arrows.c for checklists, etc., which was "(+)" + where it should have been "(-)" (report/patch by Patrick J. + Volkerding). + + fix --input-fd (changes in glibc since 2003 made dialog hang on exit + due to the way dialog updated stdin). + + restore default value (a tab) for --separator or --separate-widget + lost in 2003/11/26 changes (Debian #326918). + + make several widgets handle SIGWINCH (calendar, checklist, formbox, + fselect, inputbox, menubox, pause, tailbox, textbox, timebox). Only + msgbox and yesno had been done before. Note that some still have + fixed geometry requirements, so they cannot be shrunk below a given + threshold. Also, these changes do not address traversal, e.g., for + tailboxbg. + + make gauge widget handle SIGWINCH with ncurses (Debian #305705). + + add configure option to control whether largefile support is + compiled-in (Debian #298882). + + update eu.po (Debian #312622, patch by Piarres Egana). + + add/update po files from + http://www.iro.umontreal.ca/translation/maint/dialog/ + fi.po, rw.po, sr.po, tr.po, zh_TW.po + + fixes for configure script: + + improve script for determining gcc version + + improve checks for Intel compiler and related warning options + + improve checks for defining _XOPEN_SOURCE (or alternatives) and + _POSIX_C_SOURCE + + update config.guess, config.sub + +2005/03/06 + + add/update po files from + http://www.iro.umontreal.ca/translation/maint/dialog/ + ga.po, it.po + + revert last change for da.po; it was from an older version (report by + Morten Brix Pedersen). + +2005/02/06 + + modify makefile.in so --disable-echo applies to libtool builds. + + corrected malloc size used for editable fields in formbox widget to + match the function which updates the corresponding buffer. + + modify formbox widget's use of flen to allow negative values to be + used to limit the length of the displayed field. + + improve description in manpage of output from formbox widget + (Debian #292418). + + modify formbox widget to allow fields with flen==0 to display + (Debian #292417). + + improved configure macros CF_POSIX_C_SOURCE and CF_XOPEN_SOURCE, to + avoid redefinition warnings on cygwin. + + fix a typo in inputmenu-stdout found via "sh -n" (report by Steve + Grubb). + + add/update po files from + http://www.iro.umontreal.ca/translation/maint/dialog/ + ca.po, da.po, hu.po, nl.po, rm.po, ro.po, vi.po + +2005/01/16 + + add --args option to help with debugging scripts. + + adapted some new po files from Debian package for whiptail: ar.po, + bg.po, gl.po, hi.po, hr.po, mg.po, mk.po, ro.po, sq.po and zh_TW.po + + update da.po (Morten Brix Pedersen). + + add configure check for Intel 8.0 compiler, to set appropriate + warning options. + + update config.guess, config.sub + +2004/12/22 + + correct a typo in 2004/12/19 changes which caused width of multibyte + characters to be incorrectly computed in some locales. + + modify --version and --help options to write consistently to the + standard output (report by Santiago Vila). + + modify tailboxbg by resetting tty modes at the point where it forks a + process to update the screen, rather than waiting until that process + exits. This improves user feedback by making it apparent that dialog + is no longer processing input after that point (Redhat Bugzilla + #142538). + + minor updates to some .po files using Babel Fish, comparing with lynx. + + update es.po (Santiago Vila). + + work around bug in NetBSD 1.6 curses which seems to be confused by + reusing color pairs with different video attributes. The problem + does not appear in NetBSD 2.0 curses (but its headers do not provide + version info, so color-caching is not available for that + configuration). + + modify pause and gauge widgets to ensure that reverse-video progress + bar is visible when the background is reversed, e.g., using the + default non-color attributes. + + use chtype rather than attr_t, to build with old Solaris curses, + used in save/restore operation from 2004/09/20. + +2004/12/19 + + add pause-widget (patch by Yura Kalinichenko). + + modify exit-code returned on selecting the "Help"-button when the + --item-help option is given. Previously this returned the same code + as "OK", since it combines output for "OK" with the help status. It + now returns the help-code, but this can be overridden by setting the + environment variable $DIALOG_ITEM_HELP (reports by Erika Pacholleck + and Sebastian Muesch). + + modify formbox widget so input-length is not limited to field-length + (report by David Liebermann). + + localize the label on the search box for textbox widget (report by + Erika Pacholleck). + + correct usage message detail for fselect, which listed an extra + parameter (Debian #284008). + + add include for <sys/select.h> in ui_getc.c to build with QNX 4.25 + using Watcom 10.6 (patch by Len Meakin). + + modify behavior when no locale (or POSIX locale) is set to allow + legacy interpretation of Latin-1 character set (Debian #284795). + +2004/11/18 + + correct computation of column width for menubox/checkbox tags, for + multicolumn characters, e.g., the menubox-utf8 example. + + correct calls to wbkgdset(), which set the background attribute but + not the corresponding character (ncurses uses blank if none is given). + + improve configure script check for _XOPEN_SOURCE and _POSIX_C_SOURCE. + + improved limit-computation in show_message() to allow for scrolling + very long messages. + + adjust scrolling logic in msgbox to account for the one-line offset + used by the logic which wraps text in a box, thus avoiding leaving + an extra blank line (report by Maxim Sobolev). + +2004/09/20 + + add samples/whiptail.rc + + add samples/dialog.py (noting that a later version of this exists + as pythondialog, but this is relatively self-contained). Modified + the script to accept the $DIALOG environment variable like the other + sample scripts, to specify the path of the program to use. + + modify the install rule for header-files so the autoconf names in + dlg_config.h (and corresponding usage in dialog.h, etc), are altered + from "HAVE_xxx" to "DLG_HAVE_xxx", etc. + + add a check for getenv("HOME") in rc.c + + add a call to end_dialog() in signal_handler for tailboxbg (from + patch by Werner Fink). + + correct initialization in checklist and radiobox for --default-item, + scrolling as needed. + + modify --visit-items option so that it puts the cursor initially on + the list (in menubox, checklist and radiobox), accepts abbreviations + for the buttons when the cursor is on the button-row, and otherwise + (when --visit-items is given) abbreviations apply only to the list + (report by Erika Pacholleck). + + modify a few widgets (inputbox, textbox, yesno) to beep on unexpected + input. + + modify some msgbox widget to accept abbreviations of its button + label, for consistency with other widgets (request by Erika + Pacholleck). + + corrected logic of dlg_char_to_button(), making it check only the + first uppercase letter in each button label rather than all uppercase + letters (report by Erika Pacholleck, cf: 2003/09/10). + + improved description of --clear and --keep-window options (adapted + from Erika Pacholleck). + + move discussion of --beep and --beep-signal options to Obsolete + Options section of manpage, remove these from the help-message + (report by Erika Pacholleck). + + bracket extern's in dialog.h with C++ extern "C" declaration, in case + the library is used from a C++ application. + + modify inputmenu examples to allow ESC to cancel the script. + + modify inputmenu widget to cancel edit on a TAB or ESC. + + modify inputmenu widget to use the same color scheme for the editable + text as the inputbox widget. + + modify samples/killall to work around differences in "cut" versions. + + use the color-caching from the \Z logic when loading the ".rc" file, + thereby reducing the number of color pairs required, and making it + less likely that deriving color pairs for drawing arrows on a given + background will run out of colors. + + save/restore window attributes in dlg_draw_arrows() and similar + functions, to allow widgets to draw arrows using the widget's + background rather than a common/fixed value (request by Erika + Pacholleck). + + modify textbox widget so the down-arrow will be hidden when at the + end of the file. (Modifying the up-arrow to be hidden is harder - + will do this when implementing scrollbars). + + correct off-by-one in fselect.c which left down-arrows showing at + the bottom of directory- and file-lists (report by Erika Pacholleck). + + improve display of percentages by omitting blanks where lines should + be shown. + + modify logic for \Z escapes to make those that set video attributes + not clear the colors (report by Erika Pacholleck). + + modify logic for \Z escapes to allow foreground and background + colors to be the same, provided that bold attribute is set. + Also improved the logic for choosing a background color when the + foreground and background are the same (report by Erika Pacholleck). + + update configure script macro CF_XOPEN_SOURCE, ensuring that the + _POSIX_C_SOURCE value is defined with a specific value (bug report + originally for lynx). + + fix configure script so that po/makefile is generated properly when + the configure --srcdir --enable-nls options are used. + + modify makefile.in to allow build/install from another directory, + i.e., using configure --srcdir (patch by Mike Castle). + + updated da.po (Debian #262587, Morten Brix Pedersen). + + modify some sample scripts to avoid using grave quotes nested within + double quotes with multiple file redirection, which does not work + with Solaris /bin/sh (report/analysis by Eric Haller). + + check for end of string immediately after a \Z escape to avoid + displaying the null terminator as a ^@ (report by Erika Pacholleck). + > patches by Erika Pacholleck: + + modify calendar.c, fselect.c and timebox.c to use color scheme like + other lists, using menubox colors rather than dialog colors. + + correct charset for po/de.po, translate messages for "Help" and + "Rename". + + omit parentheses around percentage in textbox.c + + correct a few mismatched attributes, e.g., searchbox_attr in textbox.c, + percentage in msgbox.c, + + +2004/07/31 + + add test scripts to cover zero-width column case. + + remove limit checks from checklist.c and menubox.c (cf: 2004/07/28), + since some scripts use zero-width columns (Debian #262411 and report + by Kyle Sallee). + +2004/07/29 + + modify msgbox.c to only reserve space for percentage shown as part + of scrollable text for the msgbox widget. This makes infobox look + as it did before 2004/06/06 changes (report by Vinesh Christopher) + +2004/07/28 + + remove redundant calls to wtimeout() from widgets since wtimeout() + is properly called from ui_getc() where it is controlled by the + --timeout option (bug report by juanjo). + + add limit checks in checklist.c and menubox.c for very narrow screens + (prompted by Steve Grubb patch). + + initialize step in dlg_draw_buttons() in case it is used to draw + a vertical list of buttons (prompted by Steve Grubb patch). + > fixes by Steve Grubb: + + correct logic in checklist.c (cf: 2003/11/26 changes) which turned + quoting on unnecessarily for radiobox, breaking some old scripts. + + increase size of array in dlg_ok_labels() to avoid overrun if extra + and help buttons are used (cf: 2002/06/12 changes). + + initialize fkey variable in menubox.c and textbox.c (cf: 2003/07/12). + +2004/07/21 - release 1.0 + + minor updates for configure script, i.e., CF_XOPEN_SOURCE, + CF_NCURSES_LIBS macros. + + update config.guess, config.sub + + add nl.po (Jacques Weewer). + +2004/06/06 + + add --visit-items option, which allows the user to tab to the item + list in the checklist/radiobox and menubox widgets (request by + Ari Moisio). + + use wide-character line-drawing for up/down arrows when configured + for wide-characters, gives better results with uxterm. + + limit the number of times a --file option can be used, to prevent + runaway recursion if a --file option is embedded within a file which + is included. + + improve discussion of wrapping in the manpage (Debian #251937). + + modify msgbox to allow it to scroll vertically like textbox (Debian + #233276). This only works with ncurses. + + implement $DIALOGVARS environment variable to apply common options to + dialog_vars when it is reset before processing other common options. + + add --single-quoted option to control whether output is double-quoted + with '"' or single-quoted with single-quotes. + + revert the default quoting behavior of checklists to use + double-quotes (report by Mark K Post regarding Slackware scripts). + + add eu.po (Basque) (Piarres Beobide Egaa). + + add ca.po (Catalan) (Jordi Mallach). + +2004/04/21 + + add a call to flushinp() to init_dialog(), to discard any typeahead + before dialog is invoked (Debian #244746). + + correct dlg_match_char() function, which was broken during rewrite + to support wide-characters (Debian #244777). + + improved ru.po, uses UTF-8 charset (Leonid Kanter, Redhat Bugzilla + #119200). + + correct position of shadow drawn for dialogs, which appeared to work + for most versions of curses (other than NetBSD) but would have been + visible for certain color schemes (discussion with Julian Coleman). + + correct loop-exit in longest_word() (Tomas Heredia, forwarded by + Santiago Vila). + + add cy.po (Welsh) (Dafydd Harries). + +2004/03/16 + + modify quoting of results to use single-quote rather than double + quote, and ensure that results containing a quote or backslash + character are escaped (report by Florent Rougon) + + remove an incorrect comparison from checklist which made cursor + stick on the last line, from 2004/03/01 changes. + +2004/03/14 + + add a dependency to install library if "--with-libtool" is used. + + add manpage for the library. + + add "--file" + + modify formbox.c to support "--help-status" like menubox. + + modify checklist.c to add item name to the "HELP" string when + "--help-button" is used and no --item-help option is given (Debian + #236841, report/patch by Jorg Sommer). + + rename colors.h to dlg_colors.h, install that when the library is + installed. + + add copyright notice to usage ("--help") message. + + correct a missing bounds check for mouse-clicks in menubox (prompted + by Debian #233044). + + updated several configure-script macros: AM_GNU_GETTEXT, + AM_WITH_NLS, CF_OUR_MESSAGES, CF_PROG_EXT, CF_WITH_DBMALLOC, + CF_WITH_DMALLOC, CF_WITH_LIBTOOL, CF_XOPEN_SOURCE. + +2004/03/01 + + improve layout of calendar widget to allow for very long button + labels (report by Santiago Vila). + + correct logic for $DIALOG_TTY, broken in 2003/11/30. The environment + variable must evaluate to a nonzero integer (report by Florent + Rougon). + + document interaction between "--default-no" and "--no-cancel" options + in manpage (Debian #223488). + + change configure script to use autoconf 2.52+patch, to work around + issues with Estonian locale (report by Seemant Kulleen). + + add uk.po (Ukrainian) (Debian #232441). + + make --default-item apply to checklist widget (Debian #225255). + + correct a missing check for --item-help when --help-status was given + for checklist (Debian #232921). + + correct a missing bounds check for mouse-clicks in checklist (Debian + #233044). + + update config.guess, config.sub + +2003/12/07 + + correct infinite loop in yesno widget when "--defaultno" option is + combined with "--no-cancel" (Debian #223077). + +2003/11/30 + + suppress double-quotes added for "--help-status" option if the + string does not contain any special characters. + +2003/11/26 + + add samples/sourcemage.rc, for comparison with slackware.rc + + add "--insecure" option (request by Sean Mathews (DrWho@f34r.com)). + + make "--defaultno" option apply to widgets which use OK/Cancel + buttons as well (Debian #209030). + + improve documentation of exit-codes for each widget in the manpage + (Debian #217926). + + add option "--keep-window" to suppress repainting after completing + each widget (request by Ingo van Lil). + + add options "--yes-label" and "--no-label" to allow override of the + "Yes" and "No" strings (request by Christoph Zwerschke). + + add option "--help-status" to allow script to restore a checklist + or radiolist after processing an item-help string (Debian #209031). + + modify width-calculation for non-formatted text to ensure it is + wide enough for the longest word in the text (patch by Andrew Gaul). + + modify dlg_index_columns() to count a newline as a single cell rather + than 2 for the normal curses case. This fixes an off-by-one for + the text-justification, shown in screen 2 of msgbox1 sample script. + + fix dlg_char_to_button(); 2003/09/10 changes made it incorrectly + ignore case of the labels. + + change calendar's use of arrow keys so they are (as before 2002/06/22) + interpreted within the day-grid as movement within that grid (request + by David Anders). + + correct missing initialization of last_getc variable in dlg_getc() + (report/analysis by Victor Wodecki). + + modify main program to make + dialog --no-shadow --print-maxsize + work. Normally dialog prints the screen size after subtracting the + area reserved for shadows, but some applications may need the actual + screen size (Debian #213424). + + several related changes (Debian #213425): + + separate the examples using "--stdout" and "--output-fd" from the + normal usage examples. + + add "--input-fd" option, provide a sample of its use. + + modify init_dialog() to use initscr() unless a "--stdout" option + was used. Some scripts relied on the coincidence that redirecting + standard output from dialog would "work". Before this change + init_dialog() assumed that redirected standard output was + synonymous with "--stdout" option (not the intended behavior). + + modify command-line parsing to look for "--stdout" and "--stderr" + options first, allowing only one. + + add a check for an environment variable $DIALOG_TTY which provides + the older behavior, i.e., try to open the terminal directly if + stdout is redirected. + + interface changes, to make libdialog simpler to use: + + rename all of the internal functions to begin with "dlg_", but + provide compatibility with older names if the application defines + __DIALOG_OLD_NAMES__. + + add dialog_version() function, and corresponding DIALOG_VERSION and + DIALOG_PATCHDATE definitions to dlg_config.h + + eliminate remaining global variables such as screen_initialized in + favor of dialog_state and dialog_vars. + + move some data such as dialog_vars.output to dialog_state, since + they are normally not reset between widgets. + + change interfaces of dialog_yesno() and dialog_checklist() to use + dialog_state.defaultno and dialog_vars.separate_output, making it + simpler and more consistent. + + improve configure script and related definitions: + + add "--with-libtool" option to provide shared library support by + libtool. + + rename generated "config.h" to "dlg_config.h", so it can be + installed without naming conflict. Added "dlg_config.h" to + install-lib rule. + + modify configure script and makefile to use EXEEXT and OBJEXT. + + add "--enable-widec" option to control whether wide-curses features + are compiled-in, rather than check for the existence of those in + the curses library. This allows building with HPUX curses, which + has abandoned legacy features while not quite supporting X/Open + curses. + + add configure check for getbegx(), etc., which are not provided on + all platforms. + + update config.guess, config.sub + +2003/10/02 + + update hu.po (Arpad Biro). + + revert part of the 2003/08/18 change to "--stdout" option. Using + stderr for screen output does not work well on several platforms + since stdout's settings are affected (report by Kent Robotti). + +2003/09/24 + + modify tailbox to allow it to display files with arbitrarily long + lines. + + fix an infinite loop in tailbox, broken when making interface changes + to dlg_getc() (report by Ingo van Lil). + + amend fix for "--and-widget" to not treat "---" as an option (report + by Kent Robotti). + + updated es.po (Santiago Vila). + +2003/09/10 + + correct "RENAMED" result from inputmenu widget, which did not reset + the result buffer, and did not account for scroll-offset (Debian + #209336). + + modify button, menu and checklist logic that matches a character to + the beginning of a text field to support wide-characters (completes + Debian #195674). + + modify configure script to not use "head -1". + +2003/08/30 + + modify searchbox popup in textbox widget so one can simply press + return on an empty input to cancel the popup. + + modify error reporting to avoid clearing screen if a problem is + found in the ".rc" file. + + add color/attribute combinations for form widget (based on patch by + Reznic Valery). + + combine rc-file colors, attribute- and color-tables to obtain a + single table for color values, which requires less work to add new + entries. + + modify fselect widget to make back-tab work again, since it was + broken by the rewrite of dlg_edit_string(). + + modify howmany_tags() so it will quit searching when it finds any + option, not only "--and-widget" (Debian #206636). + + correct call to dlg_print_text() in print_line(), which did not + account for hidden characters (report/patch by David Poole). + + modify print_button() to display properly if locale defines ok/cancel + or yes/no buttons that contain multibyte characters. + +2003/08/20 + + correct an indexing error when deleting from the end of a line using + KEY_DC; it happened to work on Linux because malloc() clears memory + like calloc(). + + add '\r' to case statement where '\n' is translated to KEY_ENTER to + work around defect in NetBSD curses. + + modify configure check for getparyx(), etc., which are implemented + by NetBSD curses as functions rather than macros. + + correct configure check for term.h, which may be <ncursesw/term.h> + if ncursesw development headers are installed, but not ncurses + development headers. Or they may not coincide (Debian #206287). + +2003/08/18 + + modify checklist.c and menubox.c to display tags properly if they + contain wide-characters. + + better solution for initializing curses when "--stdout" option is + used, e.g., use stderr for the output if it is a tty. Also correct + the error handling, so dialog exits with an error if it cannot + find a way to do output (Debian #205509). + + modify sample scripts to use consistent definition of $DIALOG + (Debian #205508). + + add UTF-8 examples inputbox6-utf8, inputbox6-utf8 (from Tomohiro + Kubota, Debian #195674). + + modify print_line() to work with wide-characters, e.g., so it handles + wrapping for double-width characters. + + cache results from multibyte character indices, speeds up cursor + movement. + + modify form widget to support scrolling and mouse-selection. + + add form widget (based on patch by Reznic Valery). + + correct mouse-handling for inputmenu widget. + + corrections to menu.c: location of clearing operation, and height of + rows in code for older ncurses versions (patch by Reznic Valery). + + improve logic that compensates for xterm's alternate-screen by + cancelling the rmcup/smcup strings after the rmcup has been issued. + That ensures that dialog will not clear the screen on exit (report + by Javier Kohen). + + modify initialization between widgets to retain the values for the + --aspect, --separate-widget and --tab-len options. + + add --separator as an alias for --separate-widget (compatible with + Xdialog). + + correct handling of Xdialog's --icon and --wmclass options, whose + parameter was not ignored. + + correct logic for --separate-widget so its string is written before + each output, rather than only for --and-widget option (report by + Javier Kohen). + + improve limit-check in center_label() for buttons.c (report by Tor + Vidar Havstad). + + correct layout of --menu widget, which reduced display width due to + logic for --inputmenu being applied whether or not that configuration + was used (reports by Javier Kohen, Dimitar Zhekov and MAL + <mal@komcept.com>). Fixes Debian #201215. + + modify gauge widget to support --begin option (Hans-Joachim Baader). + + updated pl.po (Jaroslaw Swierczynski). + + hide cursor while painting gauge. + + add auto-sizing logic to gauge widget (reports by Javier Kohen and + Robert Schubert). + +2003/07/20 + + rewrote inputstr.c, allowing it to enter and display wide-characters. + Some nonprinting characters such as control/B can be edited as well. + + modify timebox to allow user to type numbers into the fields. + + change interfaces of dlg_getc(), mouse_wgetch(), etc., to add + parameter that returns whether the result is really a function-key. + This is needed to work with wide-character curses. + + correct computation of week-number in calendar widget (report by + Heiner Lamann). + + updated configure script macros: + + suppress -Winline with gcc 3.3, since it is broken. + + fix caching bug in CF_UTF8_LIB + + improved script for CF_BUNDLED_INTL. + + update config.guess, config.sub + +2003/03/08 + + add null-pointer checks to some malloc calls which were overlooked. + + correct logic in dlg_add_result(), which did not copy content of + non-allocated buffer to the first allocation (report by Daniel + Dupont). + +2003/03/02 + + correct an uninitialized value in dlg_add_result() (Debian #182683). + +2003/01/30 + + corrected print_line(), which subtracted the margin twice from the + right-limit, making a string wrap unnecessarily (Debian #168823). + + correct initial limit-check for arrows in checklist.c, which used + the wrong variable, showing the bottom arrow when it should not + (Debian #168823). + + modify driver to always call show_result(), to simplify updates. + + fix several memory leaks, important if dialog is run with a large + number of widgets (report by albert.veli@telia.com forwarded by + Santiago Vila). + + check if the screen output is actually to the terminal before trying + to suppress xterm's alternate screen mode (see 2000/01/18) (report by + David Oliveira). + + use dialog_vars.input_result consistently to return the text which is + printed after a widget completes. In many cases, dialog now + allocates enough space to hold the text, rather than use a fixed + buffer. The checklist widget was writing directly to the output to + avoid limits of the fixed buffer. + + modify dialog.c to also write dialog_vars.input_result if the + Help-button was pressed (request by Amon Ott). + + add hu.po (Arpad Biro). + + update fr.po, pt.po, pt_BR.po to add strings for "Help" button (patch + by Frederic L W Meunier). + + fix off-by-one error in menu.c, checklist.c (reported by + Tomasz Wasiak 2002/09/15 and others: + Andrew Gaul 2002/11/12, + Tobias C Rittweiler 2002/11/19, + Arpad Biro 2003/01/21). + + updated configure script, improving checks for ncurses in various + locations, updated NLS script to match lynx. Added --with-curses-dir + option. + > Tobias C Rittweiler: + + make ifdef in mousewget.c consistent with usage in dialog.h + + use beep() rather than flash() in dlg_edit_string(), for consistency + with the other functions. + + change order of buttons so extra button falls between Ok/Cancel. + + fix so "dialog --print-maxsize" exits from curses. + + add --inputmenu option. + +2002/08/14 + + modify checklist.c and menubox.c to treat the extra button like the + "Ok" button by making dialog print the chosen items (request by + Tobias C Rittweiler). + + add examples checklist6 and menubox6 to illustrate the --colors + option. + + implement -colors option, which allows one to highlight words in the + titles and most text areas with color or video attributes (adapted + from patch by Tobias C Rittweiler). + + add examples inputbox4, inputbox5 to illustrate how to use the + --output-fd option, and how to use dialog without any temporary + file at all. + + add --output-fd option (Debian #153984). + + documented vi-style keys for calendar, textbox widgets in manpage. + +2002/06/22 + + improve mouse handling, e.g., for up/down scrolling in calendar, + checklist, etc. + + add --extra-button and --extra-label options (adapted from patch + by Tobias C Rittweiler). + + correct displayed cursor position in inputbox when returning to the + input area after traversing the buttons with tabs, etc. + + add left/right arrows for traversal in calendar and timebox dialogs. + + implement two new functions dlg_next_ok_buttonindex() and + dlg_prev_ok_buttonindex(), using these to hide details about the + traversal over buttons in several widgets. + + modify checklist.c and menubox.c to verify if both --help-button and + --item-help are specified before assuming that selecting the help + button should cause the "HELP {item-help}" message to be printed + (reported by Marcel Ritter). + + modify init_dialog() to work around HP's broken tty driver (report by + John Mudd). Specifically, the problem is that when opening /dev/tty + directly (to support the --stdout option), the terminal does not + change to raw mode. The workaround opens /dev/tty only as needed; + the --stdout option does not work on HPUX but otherwise dialog works. + + updated el.po (patch by kromJx <kromJx@crosswinds.net>). + +2002/05/19 + + add --no-collapse option to allow one to retain tabs and repeated + blanks in a message box (request by Roberto Simoni). + + use DLG_EXIT_ESC constant rather than -1's in several places. This + has the effect of changing some exit-with-error cases to denote that + the exit was because ESC was pressed (patch by Diego Alvarez, + forward by Santiago Vila). + + bump package version to 0.9b (with patch-date, as usual). + + add --exit-label option (request by Roberto Simoni). + + updated de.po to correct translation for "Cancel" (from Michael + Piefel, Debian #146402). + + use definitions from autoconf macro AC_HEADER_TIME to ensure that + time() is properly prototyped. + + update pl.po, adding translation for "Help" (patch by Jaroslaw + Swierczynski <swiergot@hacking.pl>). + + update COPYING file, to reflect address change of FSF (reported by + Santiago Vila). + + update some configuration script macros: CF_CHECK_CACHE, + CF_CURSES_CPPFLAGS, CF_HEADER_PATH and CF_MAKEFLAGS. + + correct misuse of "$with_XXX" variables in the configure script, + which prevented configuration against curses library as opposed to + ncurses. + + update config.guess, config.sub + +2002/03/09 (a) + + modify geometry of samples/fselect scripts to allow them to run in + a 24x80 screen (report/patch by Santiago Vila). + + correct exit-code for menubox.c when Cancel is pressed. This was + unintentionally altered when adding --help-button (reported by + Patrick J Volkerding) + +2002/03/09 + + add --timeout option, which forces the program to exit with an error + if no user response is given within the specified number of seconds + (request by <andrew@argoncorp.com>). + + modify calendar widget to allow day/month/year values to default to + the current date (request by <Ron.Perrella@bellsouth.com>). + + modify display of buttons in checklist.c and menubox.c to handle the + case where the button label is empty (Debian #134388). + + extended logic for ok/cancel/help to make this work with checklist + widget. + + revert pt_BT.po, apply changes to pt.po (report by Frederic L W + Meunier). + > several changes from Stanislav Ievlev: + + add options --help-button and --help-label to make menubox display a + third button which can be used to return an exit code causing the + calling script to show extended help information. + + use home/end keys in input string-editing, e.g., inputbox. + + add option --max-input to limit length of string returned by inputbox + and other widgets which allow the user to edit a string. + +2001/12/02 + + add --ok-label and --cancel-label options (request by Kyle Sallee). + + correct usage message for --fselect option (reported by Patrick J + Volkerding). + + add samples/debian.rc, for comparison with slackware.rc + + corrected samples/slackware.rc, which was just the compiled-in + default values (patch by Patrick J Volkerding). + + modify search rule for rc-file to add a global rc file /etc/dialogrc + (patch by Patrick J Volkerding). + + updated pt_BR.po with modified entries for fselect.c (Frederic L W + Meunier). + + add pl.po (Swiergot <swiergot@l02.ids.czest.pl>). + +2001/11/11 + + modify command-line parsing to allow a "--" argument to act as an + escape, so the next argument is not recognized as an option if it + begins with "--". This is apparently one of popt's undocumented + features, upon which some Debian scripts depend (Debian #116642). + + add da.po (Morten Brix Pedersen <morten@wtf.dk>). + + add an install-strip rule to makefile, changing the normal install + rule to not strip the installed executable (based on discussion with + Santiago Vila). + + initialize my_output variable if user cannot open /dev/tty, e.g., if + su'd to another user (patch by Richard Braakman (<dark@ssh.com>), Debian + #117177). + + add configure option --with-ncursesw, to allow configure/build with + wide-character version of ncurses. + +2001/10/14 + + add option --ignore, to make dialog be ignore options that it does + not recognize. + + add option --trim, to trim literal newlines and repeated spaces from + text that will be displayed. Add samples/msgbox2, which is the + same as msgbox1, but using --trim (cf: change for Debian #102942). + + minor correction to attributes for buttons.c to use active_attr on + the right-side of a button. + + add a sample dialog rc-file slackware.rc based on diffs in hdasetup + package at + http://ftp1.sourceforge.net/pub/mirrors/slackware/slackware/source/a/hdsetup/ + (discussion with Frederic L W Meunier). + + modify dialog.pl to avoid using a statically-named tempfile, allowing + multiple processes to use this script (patch by James Ranson + (<euclid80@yahoo.com>), Debian #110609). + + correct fprintf() call in j_menu() function, i.e., "--menu" option, + which did not guard against expanding '%' embedded in the parameters + (Stavros Chatzistefanidis <sxatz@yahoo.com>). + + add et.po (Ivar Smolin <okul@trenet.ee>). + + update fr.po (Frederic L W Meunier). + + modify to allow scripts to alter the exit codes, mainly to + distinguish ESC and ERROR exits. This is done by setting a shell + variable such as DIALOG_ESC to a new value (request by Petr Vandrovec + (<vandrove@vc.cvut.cz>), Debian #99264) + +2001/08/27 + + use VPATH in makefile to support build with configure --srcdir, if + the make program supports that. Note that samples/install/makefile + is not generated, due to awkward limitation of autoconf script + (reported by Frederic L W Meunier <0@pervalidus.net>). + + add po/pt_BR.po (Frederic L W Meunier <0@pervalidus.net>). + + correct sense of --enable/--disable shown in configure --help (report + by Frederic L W Meunier <0@pervalidus.net>). + + correct logic for --clear option, broken in 2000/07/02 (fixes Debian + #110254). + +2001/08/11 + + porting fixes to work on AIX: flush output to work around bug in + curses library, use ./killall in scripts to avoid conflict with + AIX program by that name. + + modify dlg_trim_string() to retain literal newlines if the string + does not contain "\\n" strings, and to retain leading blanks on the + resulting lines, for compatibility with older scripts (Debian + #102942). + + add charset specification to cs.po + + change dates in CHANGES to consistent format, add el.po for Greek + (patch by kromJx <kromJx@crosswinds.net>). + + eliminate static globals (bss, data) from modules rc, tailbox, + textbox using better parameter-passing convention, and const. + + cleanup temporary files in a few of the sample scripts. + + rewrote tailboxbg using select() rather than fork(), thereby + eliminating lock-files. Only one process should be trying to display + on the screen at any given time. + + add error check to ensure that numeric parameters are really numbers. + + correct off-by-one in error messages reporting too-few or too-many + tokens for a given option (reported by George Mirchev). + + fix typo in manpage, "textboxbg" where "tailboxbg" was meant + (reported by George Mirchev <la@mail.techno-link.com>). + + use DLG_EXIT_xxx symbols consistently for all exit codes. + + updated es.po (patch by Santiago Vila). + + updates for some configure script macros from lynx: CF_MAKEFLAGS, + CF_NCURSES_VERSION, CF_PROG_EXT. + + fixes to compile if <term.h> is included, e.g., when building with + AIX curses (report by Suzi Dowson <Suzi.Dowson@capgemini.co.uk>). + +2001/05/27 + + updated dialog.pot + + modify fselect.c to work with autosize, i.e., given height and width + zero (report by Martin Povolny). + + add a null-pointer check in justify_text(), needed by fselect.c + + add several more options which dialog can safely ignore, from + Xdialog 2.0.2 + + refinements for configure macros checking for $CPPFLAGS, from lynx. + + update config.guess, config.sub to match autoconf 2.50 + > Martin Povolny <martin@solnet.cz>: + + add cs.po + + use nl_langinfo() to customize names for day-of-week, and month + +2001/05/11 + > Vincent Stemen <dialog@AdvancedResearch.org>: + Fixed dialog.c to not pass menu items through dlg_trim_string(). + Stripping extra spaces out of the menu items broke some of my + scripts by altering the string that it compared to know which menu + item was selected. There should be no need to do justification on + the menu items, which are always one line, anyway. + +2001/04/29 + > Vincent Stemen <dialog@AdvancedResearch.org>: + + rewrote the text justification code to be able to have preformatted + text in the prompts with extra spaces like the older versions of + dialog. If there are "\n" strings in the text, then extra spaces are + preserved. Lines are always wrapped on word boundaries. + + fixed --cr-wrap to break lines on '\n' (newline) characters and not + add an extra line at the top and bottom of the text. It now works + as the manual says it should. + + it is no longer necessary to use "\n\" at the end of lines to escape + the '\n' character. "\n" now works. However, the old way, "\n\" + still works. + + the fixes involved the following changes: + - rewrote dlg_trim_string() to recognize preformatted text (know + when not to strip extra spaces) and to pay attention to --cr-wrap. + - rewrote justify_text() which now calls a new function in util.c, + print_line(), to print each line and end it on a word boundary. + - modified real_auto_size() to call a new function + auto_size_preformated() to calculate the box size for preformatted + text. + - removed skip_blanks() and skip_text() since they are not used by + the new justify_text(). + - modified dialog.c to not call dlg_trim_string() on title strings + so that titles retain their spaces. + + modified the following demo files in the sample directory: + - inputbox + changed all "\n\" strings to "\n" to demonstrate the extra + backslash is no longer needed. + - inputbox1 + removed all the "\n\" strings from the end of the lines to + properly demonstrate --cr-wrap. + - msgbox1 + this sample was using "--aspect 9 --cr-wrap". Rewrote it to + properly demonstrate --aspect. 9 is already dialog's default + aspect ratio. It now creates several dialogs in sequence, + demonstrating aspect ratios of 9, 12 and 6 and properly + demonstrates --cr-wrap. + + made the following changes to the manual (dialog.1). + - rewrote the description of --aspect to be more understandable. + - rewrote the description of --cr-wrap to be more correct and more + detailed. It did say, "Otherwise, the text for each dialog will + display on a single line.", which is not correct. It wraps the + text to fit in the box. + > T.Dickey: + + use logic from menubox dialog in checklist to handle autosizing when + list height is given as zero (fixes problem reported by Eric Veltman + <eveltman@baan.nl>). + + modify checklist and menubox dialogs to check for too-wide data, and + truncate one or both of the name and text fields to fit (also + reported by Eric Veltman). + + corrected a few items from Vincent's patch: + - use C89-style comments rather than C++ + - restore logic in justify_text() which checks for win==0, needed to + work with standard curses implementations other than ncurses. + The first call on justify_text() passes a null pointer as a flag + to indicate that checking should be done, but no screen updates. + - avoid modifying the buffer in decode_percent(), otherwise a message + containing a space or newline would be truncated at the whitespace. + - modify dlg_button_x_step() and dlg_button_layout() slightly to + work with altered print_autowrap(), etc. + + fixes to build/work with SunOS 4.x 5lib curses + +2001/04/15 + + fix a memory leak in mouse_region(). + + simplify handling of optional parameters with new functions + optional_str() and optional_num(). + + add calendar and timebox dialogs (compatible with Xdialog). + + correct typo in fallback definition for getparyx, and remove void + cast for mouse_open and mouse_close which prevented build with + Sun's Solaris compiler. + + rename --enable-lxdialog configure option to --enable-Xdialog + + modify CF_NCURSES_CPPFLAGS macro to match more variations of ncurses + header files. + + update config.guess, config.sub + + modify some configure script macros to avoid problems with buggy + autoconf 2.49c which breaks changequote(). + +2001/01/15 + + small fix to revised real_auto_size() and justify_text() to avoid + adding origin to box-width, which broke samples/wheel. + + apply 1999/12/25 tempfile change to wheel and copismall samples. + + add sample script for tailboxbg. + + revised lock-file management to better ensure that locks are actually + created by the tailbox subprocess(es). + + correct hardcoded signal 15 in tailbox to SIGHUP to match + documentation. Signal 15 is usually SIGTERM, which cannot be caught. + + correct off-by-one comparison of return-value for arg_rest() which + made + dialog --gauge test 10 50 + dump core because it expected a 4th parameter (fixes Debian #80641). + + resync config.sub, config.guess from + http://subversions.gnu.org/cgi-bin/cvsweb/config/ (which finally have + cases for OS/2 EMX), minor tweaks to related configure script macros. + +2000/12/17 + + restore treatment of predefined height/width in real_auto_size() + which was lost in 2000/12/12 rewrite (report by Raphael Halimi + <raphaelh@easynet.fr>). + + updates for configure script macros AM_PATH_PROG_WITH_TEST, + CF_CURSES_LIBS, CF_LIB_PREFIX, CF_PROG_EXT for $PATHSEP and $CFLAGS + fixes. + +2000/12/13 + + correct change for create_lock(), which resulted in an infinite loop + (patch by Chris Butler, <chrisb@debian.org>). + +2000/12/12 + + rewrote print_autowrap() and real_auto_size() to share common code + justify_text(), which now does text flow even when the string + contains newlines (fixes Debian #77199). + + improve create_lock() function using open() with O_EXCL rather than + fopen() (patch by Matt Kraai (<kraai@debian.org>), Debian #78951). + + correct description of --fselect in man page (patch by Tomas Pospisek + (<tpo@spin.ch>), Debian #77200). + + add --no-cancel as alias for --nocancel for compatibility with + Xdialog (report by Luis E Limon <luisl@abriasoft.com>). + +2000/10/27 + + some lint fixes using lclint (mostly void-casts, but some + sign-extension fixes e.g., for ctype.h macros, and loop in + dlg_char_to_button()). + + modified to build/run on OS/2 EMX with ncurses. + + minor changes to po/*.po (trim trailing blanks, provide explicit + translation for "OK"), to work with Solaris gettext. + + modified to allow this to build with archaic version (1.8.6) + of ncurses on FreeBSD 3.1 (does not run). + + update config.guess, config.sub from subversions.gnu.org + +2000/10/17 + + use new function sub_window() to check success/failure of calls to + subwin(), printing an error message if it fails (fixes Debian #74903). + + use combination of isatty/ttyname to look for workable tty device + on systems which have no /dev/tty, e.g., BeOS. + +2000/10/08 + + change exiterr() to use stdarg.h, make some messages easier to + understand. + + add dialog_clear() + + make samples/install/setup build. + + implemented mouse support for buttons, e.g., in yesno dialog using + ncurses (the gpm support no longer works, but is useful for reference) + + add a configure check for chtype. + + updates for configure script macros (CF_BUNDLED_INTL, CF_CURSES_LIBS, + CF_GCC_ATTRIBUTES, CF_GCC_WARNINGS, CF_INCLUDE_DIRS), and scripts + config.guess, config.sub + + cleanup of item-help change, integrate with checklist and radiobox. + + add ja.po, from Hirofumi Takeda <takepin@turbolinux.co.jp>. + > patch by Marco Mariani <marcom@sferacarta.com> + + add --item-help option, which makes menubox data interpreted as + 3 columns rather than 2. The third column is displayed on the + last line of the screen as a help/status message for the currently + selected item. + + add it.po, pt.po + + change TAG_KEY_HL to FALSE, making unselected items in checklist + easier to read on Linux console. + +2000/07/30 + + change real_auto_size() to allow it to be used for dialogs that have + no prompt, e.g., fselect. Also, rather than requiring both height + and width to be given as -1 for maximizing the dialog, allow either + alone. + + increase minimum height needed for autosized yesno dialog. + + add --version as an alias for --print-version. + + fix for build on Solaris without NLS (cannot redefine 'gettext()'). + + add fselect dialog (compatible with Xdialog). + + add --enable-lxdialog configure option. + + use new configure macro CF_ARG_MSG_ENABLE to show progress with + enable/disable switches. + +2000/07/02 + + implement --stdout and --stderr options as in Xdialog. + + move logic that translates "\\n" into '\n' into main program to + simplify logic that formats text. + + make ifdef's for rc-file not specific to ncurses. + + correct logic making percent parameter of gauge optional. + +2000/06/29 + + add alternate test-script for gauge, adapted from Xdialog. + + modify gauge to make optional a percentage which was read at the + beginning of the XXX-delimited message text, since clones of dialog + are written to assume this is text. If the line is not a simple + integer, dialog will treat it as text. + + make the percent parameter of gauge optional, as in Xdialog. + + undo one use of CharOf() in guage.c, an error. + + fix configure macro AM_WITH_NLS to refrain from attempting to make a + symbolic link into/libintl.h if we are not using the bundled intl + directory from gettext (reported by Julian Coleman + <J.D.Coleman@newcastle.ac.uk>). + + add ru.po, from Michael Sobolev <mss@transas.com> + + updates for config.guess, config.sub from tin. + + updates for configure script macros: CF_MATH_LIB (improperly nested + brackets/parenthesis) and CF_XOPEN_CURSES (make include of + <*curses.h> depend on configure tests). + +2000/04/25 + + repaint screen when a control/L is pressed. + + apply CharOf() macro to avoid sign-extension on calls to waddch(), + fixes a problem with accented characters (reported by Santiago Vila). + + add es.po, from Santiago Vila <sanvila@unex.es> + +2000/04/23 + + modified to use gettext (configure option --enable-nls). This uses + gettext 0.10.35, which must be previously installed. (It can also + use an included intl library, but I consider that to be a waste of + disk space). + + remove code in checklist/radiobox, menubox that try to use + abbreviations for the OK/Cancel buttons since those conflict with the + check for abbreviations in list entries, which are more useful. + + moved padding of button labels out of string literals, into the + logic of dlg_draw_buttons(). + + resync/update with configure macros CF_CURSES_LIBS, CF_FIND_LIBRARY, + CF_HEADER_PATH, CF_LIBRARY_PATH and CF_NCURSES_LIBS, as well as + mkdirs.sh and config.guess. + +2000/02/22 + + add --default-item option, for menubox to set the default selection + (fixes Debian #49796). + + add sample scripts for --nocancel and --fb options with inputbox. + + modify inputbox* sample scripts to show application errors, if any. + + add --nocancel option, and ignore --noitem, --fb, --fullbutton, to + make this compatible with whiptail scripts. (whiptail does not + handle many dialog scripts however). + + modify checklist/radiobox to handle home, end, nextpage, prevpage + keys, as well as make the abbreviation search work for the whole + list, not only the current page. + + treat KEY_LL the same as KEY_END in checklist and textbox. + + add logic for KEY_BTAB. + + use new function dlg_draw_buttons() to better manage the layout of + yes/no/ok/cancel buttons. + + another pass of cleanup of dialog.c, makes it use a single table for + lookup of option names and help-message. Eliminated numerous + adjustments to 'offset' variable. + + on initialization, check if standard input is from a terminal. If + not, open /dev/tty (fixes Debian #57771) + +2000/02/05 + + implement inline editing in textbox.c search dialog. + + revise inputbox.c, allowing inline editing with arrow-keys. removed + redundant logic in that module. + + correct a typo that prevented rc-file configuration from building. + + correct ifdef's to compile/run if the curses implementation does not + support color. + +2000/01/23 + + improve test-case for gauge. + + change gauge.c to show progress in reverse-video, add a check for + end-of-file in the loop for reading new messages. + + use curses whline() function to simplify print_arrows() logic in + checklist.c and menubox.c + + use curses beep() function rather than hardcoded strings. + + correct several compiler warnings for gcc -pedantic (mismatch of + const, signed/unsigned). + + modify exiterr() to avoid possible expansion of '%'. + + change CF_MATH_LIB configure macro to allow specifying a particular + test-function. For dialog, this should be sqrt(). The macro was + originally written for ncurses, which needs sin(). However, that is + a builtin function on the m68k port (reported by Roman Hodek + <Roman.Hodek@informatik.uni-erlangen.de>, this fixes Debian #55553). + +2000/01/18 + + update manpage (Debian #25648). + + modify configure test for math library to avoid using a constant + parameter to the test function, lest gcc optimize the call away + (fixes Debian #55553). + + restructure help-message so actual problem is indicated. The original + help-message is shown if no parameters are given, or if the --help + option is specified alone. + + suppress xterm's alternate screen mode by sending an exit_ca_mode + after initscr if the terminal looks like xterm, e.g., has key_mouse + defined, and has private-mode escapes in both enter_ca_mode and + exit_ca_mode (fixes Debian #55181). + + change yellow lettering on white to blue on white, since it offers + better contrast (fixes Debian #51196). + + use napms() rather than sleep(). + + some cleanup/simplification of main program. Indent'd dialog.c and + util.c + + eliminate several places where repeated options are treated as + an error, since they are really executed once anyway. + +2000/01/15 + + remove pre-autoconf Makefile + + remove sleep's from a few of the sample scripts, which left users + thinking that dialog was slow to complete an action. + + rewrote infobox sample script, using dialog's --sleep option and + a loop in the script. + + change 'ch' variable in tailbox.c to an integer, because it is + compared against EOF (fixes Debian #53157). + + corrected mandir variable in makefile.in (reported by Santiago Vila). + + small changes to sample scripts, from Debian: rename "guage" script + to "gauge", change path to copy of GPL used in textbox. + + add uninstall rule to makefile.in, fixed some dependencies so + "make install" works without first doing "make all". + +1999/12/25 + + use more portable scheme for tempfile generation in samples. + + add a configure script, prefer to not use the original Makefile + because it works only with GNU make. + + correct prototype of 'main()', which misused const. + + modify guage.c to use fgets() rather than gets(). + + merge changes from Debian package maintainer + Santiago Vila <sanvila@ctv.es>: + + 1999/10/07 + + add a password dialog box. + + implement "--defaultno" option to specify if the default for + the yes/no box is "No". + 1999/03/10 + + modify input.c to clear the input field to the right of the + given string (unclear: this seems redundant, since the + dialog is drawn in a new window). + 1998/12/08 + + check for list_height less than one in checklist.c + 1998/10/21 + + use function wscrl() in preference to scroll() in checklist.c + and menubox.c (unclear: in ncurses, scroll() is a macro that + uses wscrl()). + + remove the "-I/usr/include/ncurses" option from Makefile + since Debian does not install ncurses' header files into + that directory. + 1998/09/12 + + simplify menubox.c using new functions print_arrows() and + print_items(). + + add logic to handle KEY_NPAGE and KEY_PPAGE. + + change sample scripts to use Debian tempfile utility rather + than putting files into /tmp. + + change sample scripts to use 'dialog' from user's path rather + than in the parent directory as in the build directory. + + use the system copy of GPL rather than that in the build + directory as an example for the textbox script. + +1999/11/27 + + fix some gcc warnings about ambiguous use of "else" + +1999/05/01 + + cleaned up some of the redundant code with new functions: + box_x_ordinate + box_y_ordinate + draw_title + draw_bottom_box + new_window + + + modified msgbox.c and yesno.c to work with the KEY_RESIZE sigwinch + handling in ncurses 4.2 + + + corrected spelling of "gauge" + +The relevant portions of the Debian change log for the original version +(dialog-0.9a-12) are abstracted here, omitting details of their packaging: + +1998/05/24 + + + Replaced guage.c by the one in dialog 0.6z, which is known to work. + Fixes Bug #18284: unstable dialog. + +1997/12/16 + + + dialog.c: dialog_input_result printed with "%s" format. This was + Bug #9913, fixed by Bill Mitchell, but the change was lost. + + Pristine source, .depend is not removed in clean target. Instead, it + is made zero lenght (otherwise it would not work *without* fakeroot). + + Added '^U' support in input box (Bug #9915, patch by joey@debian.org). + + Wrote patch to fix core-dumping problem (Bug #13170). Sven Rudolph + <sr1@inf.tu-dresden.de>: + +-- vile:fk=8bit Index: contrib/dialog/guage.c =================================================================== --- contrib/dialog/guage.c (revision 0) +++ contrib/dialog/guage.c (revision 0) @@ -0,0 +1,300 @@ +/* + * $Id: guage.c,v 1.45 2010/01/19 09:15:20 tom Exp $ + * + * guage.c -- implements the gauge dialog + * + * Copyright 2000-2007,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + * + * An earlier version of this program lists as authors + * Marc Ewing, Red Hat Software + */ + +#include <dialog.h> + +#include <errno.h> + +#define MY_LEN (MAX_LEN)/2 + +#define MIN_HIGH (4) +#define MIN_WIDE (10 + 2 * (2 + MARGIN)) + +#define isMarker(buf) !strncmp(buf, "XXX", 3) + +typedef struct { + DIALOG_CALLBACK obj; + WINDOW *text; + bool done; + const char *title; + char *prompt; + char prompt_buf[MY_LEN]; + int percent; + int height; + int width; + char line[MAX_LEN + 1]; +} MY_OBJ; + +static int +read_data(char *buffer, FILE *fp) +{ + int result; + + if (feof(fp)) { + result = 0; + } else if (fgets(buffer, MY_LEN, fp) != 0) { + dlg_trim_string(buffer); + result = 1; + } else { + result = -1; + } + return result; +} + +static int +decode_percent(char *buffer) +{ + char *tmp = 0; + long value = strtol(buffer, &tmp, 10); + + if (tmp != 0 && (*tmp == 0 || isspace(UCH(*tmp))) && value >= 0) { + return TRUE; + } + return FALSE; +} + +static void +repaint_text(MY_OBJ * obj) +{ + WINDOW *dialog = obj->obj.win; + int i, x; + + (void) werase(dialog); + dlg_draw_box(dialog, 0, 0, obj->height, obj->width, dialog_attr, border_attr); + + dlg_draw_title(dialog, obj->title); + + wattrset(dialog, dialog_attr); + dlg_print_autowrap(dialog, obj->prompt, obj->height, obj->width); + + dlg_draw_box(dialog, + obj->height - 4, 2 + MARGIN, + 2 + MARGIN, obj->width - 2 * (2 + MARGIN), + dialog_attr, + border_attr); + + /* + * Clear the area for the progress bar by filling it with spaces + * in the title-attribute, and write the percentage with that + * attribute. + */ + (void) wmove(dialog, obj->height - 3, 4); + wattrset(dialog, title_attr); + + for (i = 0; i < (obj->width - 2 * (3 + MARGIN)); i++) + (void) waddch(dialog, ' '); + + (void) wmove(dialog, obj->height - 3, (obj->width / 2) - 2); + (void) wprintw(dialog, "%3d%%", obj->percent); + + /* + * Now draw a bar in reverse, relative to the background. + * The window attribute was useful for painting the background, + * but requires some tweaks to reverse it. + */ + x = (obj->percent * (obj->width - 2 * (3 + MARGIN))) / 100; + if ((title_attr & A_REVERSE) != 0) { + wattroff(dialog, A_REVERSE); + } else { + wattrset(dialog, A_REVERSE); + } + (void) wmove(dialog, obj->height - 3, 4); + for (i = 0; i < x; i++) { + chtype ch2 = winch(dialog); + if (title_attr & A_REVERSE) { + ch2 &= ~A_REVERSE; + } + (void) waddch(dialog, ch2); + } + + (void) wrefresh(dialog); +} + +static int +handle_input(MY_OBJ * obj) +{ + int status; + char buf[MY_LEN]; + + if ((status = read_data(buf, dialog_state.pipe_input)) > 0) { + + if (isMarker(buf)) { + /* + * Historically, next line should be percentage, but one of the + * worse-written clones of 'dialog' assumes the number is missing. + * (Gresham's Law applied to software). + */ + if ((status = read_data(buf, dialog_state.pipe_input)) > 0) { + + obj->prompt_buf[0] = '\0'; + if (decode_percent(buf)) + obj->percent = atoi(buf); + else + strcpy(obj->prompt_buf, buf); + + /* Rest is message text */ + while ((status = read_data(buf, dialog_state.pipe_input)) > 0 + && !isMarker(buf)) { + if (strlen(obj->prompt_buf) + strlen(buf) < + sizeof(obj->prompt_buf) - 1) { + strcat(obj->prompt_buf, buf); + } + } + + if (obj->prompt != obj->prompt_buf) + free(obj->prompt); + obj->prompt = obj->prompt_buf; + } + } else if (decode_percent(buf)) { + obj->percent = atoi(buf); + } + } else { + obj->done = TRUE; + } + + return status; +} + +static bool +handle_my_getc(DIALOG_CALLBACK * cb, int ch, int fkey, int *result) +{ + MY_OBJ *obj = (MY_OBJ *) cb; + int status = TRUE; + + *result = DLG_EXIT_OK; + if (obj != 0) { + if (!fkey && (ch == ERR)) { + if (handle_input(obj) > 0) + repaint_text(obj); + else + status = FALSE; + } + } else { + status = FALSE; + } + return status; +} + +static void +my_cleanup(DIALOG_CALLBACK * cb) +{ + MY_OBJ *obj = (MY_OBJ *) cb; + + if (obj != 0) { + if (obj->prompt != obj->prompt_buf) + free(obj->prompt); + } +} + +/* + * Display a gauge, or progress meter. Starts at percent% and reads stdin. If + * stdin is not XXX, then it is interpreted as a percentage, and the display is + * updated accordingly. Otherwise the next line is the percentage, and + * subsequent lines up to another XXX are used for the new prompt. Note that + * the size of the window never changes, so the prompt can not get any larger + * than the height and width specified. + */ +int +dialog_gauge(const char *title, + const char *cprompt, + int height, + int width, + int percent) +{ +#ifdef KEY_RESIZE + int old_height = height; + int old_width = width; +#endif + int fkey; + int ch, result; + int x, y; + char *prompt = dlg_strclone(cprompt); + WINDOW *dialog; + MY_OBJ *obj = 0; + + curs_set(0); + + dlg_tab_correct_str(prompt); + +#ifdef KEY_RESIZE + retry: +#endif + + dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, MIN_WIDE); + dlg_print_size(height, width); + dlg_ctl_size(height, width); + + /* center dialog box on screen */ + x = dlg_box_x_ordinate(width); + y = dlg_box_y_ordinate(height); + + dialog = dlg_new_window(height, width, y, x); + + if (obj == 0) { + MY_OBJ **objref; + + obj = dlg_calloc(MY_OBJ, 1); + assert_ptr(obj, "dialog_gauge"); + + objref = &obj; + obj->obj.input = dialog_state.pipe_input; + obj->obj.win = dialog; + obj->obj.keep_win = TRUE; + obj->obj.bg_task = TRUE; + obj->obj.handle_getc = handle_my_getc; + obj->title = title; + obj->prompt = prompt; + obj->percent = percent; + obj->height = height; + obj->width = width; + dlg_add_callback_ref((DIALOG_CALLBACK **) objref, my_cleanup); + } + + repaint_text(obj); + + do { + ch = dlg_getc(dialog, &fkey); +#ifdef KEY_RESIZE + if (fkey && ch == KEY_RESIZE) { + /* reset data */ + height = old_height; + width = old_width; + /* repaint */ + dlg_clear(); + dlg_del_window(dialog); + refresh(); + dlg_mouse_free_regions(); + goto retry; + } +#endif + } + while (handle_my_getc(&(obj->obj), ch, fkey, &result)); + + curs_set(1); + dlg_del_window(dialog); + + return (DLG_EXIT_OK); +} Index: contrib/dialog/mixedform.c =================================================================== --- contrib/dialog/mixedform.c (revision 0) +++ contrib/dialog/mixedform.c (revision 0) @@ -0,0 +1,121 @@ +/* + * $Id: mixedform.c,v 1.8 2010/04/28 20:54:11 tom Exp $ + * + * formbox.c -- implements the form (i.e, some pairs label/editbox) + * + * Copyright 2007-2008,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + * + * This is inspired by a patch from Kiran Cherupally + * (but different interface design). + */ + +#include <dialog.h> + +#define LLEN(n) ((n) * MIXEDFORM_TAGS) + +#define ItemName(i) items[LLEN(i) + 0] +#define ItemNameY(i) items[LLEN(i) + 1] +#define ItemNameX(i) items[LLEN(i) + 2] +#define ItemText(i) items[LLEN(i) + 3] +#define ItemTextY(i) items[LLEN(i) + 4] +#define ItemTextX(i) items[LLEN(i) + 5] +#define ItemTextFLen(i) items[LLEN(i) + 6] +#define ItemTextILen(i) items[LLEN(i) + 7] +#define ItemTypep(i) items[LLEN(i) + 8] +#define ItemHelp(i) (dialog_vars.item_help ? items[LLEN(i) + 9] : dlg_strempty()) + +int +dialog_mixedform(const char *title, + const char *cprompt, + int height, + int width, + int form_height, + int item_no, + char **items) +{ + int result; + int choice; + int i; + DIALOG_FORMITEM *listitems; + DIALOG_VARS save_vars; + bool show_status = FALSE; + + dlg_save_vars(&save_vars); + dialog_vars.separate_output = TRUE; + + listitems = dlg_calloc(DIALOG_FORMITEM, (size_t) item_no + 1); + assert_ptr(listitems, "dialog_mixedform"); + + for (i = 0; i < item_no; ++i) { + listitems[i].type = dialog_vars.formitem_type; + listitems[i].name = ItemName(i); + listitems[i].name_len = (int) strlen(ItemName(i)); + listitems[i].name_y = dlg_ordinate(ItemNameY(i)); + listitems[i].name_x = dlg_ordinate(ItemNameX(i)); + listitems[i].text = ItemText(i); + listitems[i].text_len = (int) strlen(ItemText(i)); + listitems[i].text_y = dlg_ordinate(ItemTextY(i)); + listitems[i].text_x = dlg_ordinate(ItemTextX(i)); + listitems[i].text_flen = atoi(ItemTextFLen(i)); + listitems[i].text_ilen = atoi(ItemTextILen(i)); + listitems[i].help = (dialog_vars.item_help ? ItemHelp(i) : + dlg_strempty()); + listitems[i].type = (unsigned) atoi(ItemTypep(i)); + } + + result = dlg_form(title, + cprompt, + height, + width, + form_height, + item_no, + listitems, + &choice); + + switch (result) { + case DLG_EXIT_OK: /* FALLTHRU */ + case DLG_EXIT_EXTRA: + show_status = TRUE; + break; + case DLG_EXIT_HELP: + dlg_add_result("HELP "); + show_status = dialog_vars.help_status; + if (USE_ITEM_HELP(listitems[choice].help)) { + dlg_add_string(listitems[choice].help); + result = DLG_EXIT_ITEM_HELP; + } else { + dlg_add_string(listitems[choice].name); + } + if (show_status) + dlg_add_separator(); + break; + } + if (show_status) { + for (i = 0; i < item_no; i++) { + if (listitems[i].text_flen > 0) { + dlg_add_string(listitems[i].text); + dlg_add_separator(); + } + } + } + + dlg_free_formitems(listitems); + dlg_restore_vars(&save_vars); + + return result; +} Index: contrib/dialog/textbox.c =================================================================== --- contrib/dialog/textbox.c (revision 0) +++ contrib/dialog/textbox.c (revision 0) @@ -0,0 +1,943 @@ +/* + * $Id: textbox.c,v 1.97 2010/04/28 21:03:44 tom Exp $ + * + * textbox.c -- implements the text box + * + * Copyright 2000-2009,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + * + * An earlier version of this program lists as authors: + * Savio Lam (lam836@cs.cuhk.hk) + */ + +#include <dialog.h> +#include <dlg_keys.h> + +#define PAGE_LENGTH (height - 4) +#define PAGE_WIDTH (width - 2) + +typedef struct { + DIALOG_CALLBACK obj; + WINDOW *text; + const char **buttons; + int hscroll; + char line[MAX_LEN + 1]; + int fd; + long file_size; + long fd_bytes_read; + long bytes_read; + long buffer_len; + bool begin_reached; + bool buffer_first; + bool end_reached; + long page_length; /* lines on the page which is shown */ + long in_buf; /* ending index into buf[] for page */ + char *buf; +} MY_OBJ; + +static long +lseek_obj(MY_OBJ * obj, long offset, int mode) +{ + long fpos; + if ((fpos = (long) lseek(obj->fd, (off_t) offset, mode)) == -1) { + switch (mode) { + case SEEK_CUR: + dlg_exiterr("Cannot get file position"); + break; + case SEEK_END: + dlg_exiterr("Cannot seek to end of file"); + break; + case SEEK_SET: + dlg_exiterr("Cannot set file position to %ld", offset); + break; + } + } + return fpos; +} + +static long +ftell_obj(MY_OBJ * obj) +{ + return lseek_obj(obj, 0, SEEK_CUR); +} + +static char * +xalloc(size_t size) +{ + char *result = dlg_malloc(char, size); + assert_ptr(result, "xalloc"); + return result; +} + +/* + * read_high() substitutes read() for tab->spaces conversion + * + * buffer_len, fd_bytes_read, bytes_read are modified + * buf is allocated + * + * fd_bytes_read is the effective number of bytes read from file + * bytes_read is the length of buf, that can be different if tab_correct + */ +static void +read_high(MY_OBJ * obj, size_t size_read) +{ + char *buftab, ch; + int i = 0, j, n, tmpint; + long begin_line; + + /* Allocate space for read buffer */ + buftab = xalloc(size_read + 1); + + if ((obj->fd_bytes_read = read(obj->fd, buftab, size_read)) != -1) { + + buftab[obj->fd_bytes_read] = '\0'; /* mark end of valid data */ + + if (dialog_vars.tab_correct) { + + /* calculate bytes_read by buftab and fd_bytes_read */ + obj->bytes_read = begin_line = 0; + for (j = 0; j < obj->fd_bytes_read; j++) + if (buftab[j] == TAB) + obj->bytes_read += dialog_state.tab_len + - ((obj->bytes_read - begin_line) + % dialog_state.tab_len); + else if (buftab[j] == '\n') { + obj->bytes_read++; + begin_line = obj->bytes_read; + } else + obj->bytes_read++; + + if (obj->bytes_read > obj->buffer_len) { + if (obj->buffer_first) + obj->buffer_first = FALSE; /* disp = 0 */ + else { + free(obj->buf); + } + + obj->buffer_len = obj->bytes_read; + + /* Allocate space for read buffer */ + obj->buf = xalloc((size_t) obj->buffer_len + 1); + } + + } else { + if (obj->buffer_first) { + obj->buffer_first = FALSE; + + /* Allocate space for read buffer */ + obj->buf = xalloc(size_read + 1); + } + + obj->bytes_read = obj->fd_bytes_read; + } + + j = 0; + begin_line = 0; + while (j < obj->fd_bytes_read) + if (((ch = buftab[j++]) == TAB) && (dialog_vars.tab_correct != 0)) { + tmpint = (dialog_state.tab_len + - ((int) ((long) i - begin_line) % dialog_state.tab_len)); + for (n = 0; n < tmpint; n++) + obj->buf[i++] = ' '; + } else { + if (ch == '\n') + begin_line = i + 1; + obj->buf[i++] = ch; + } + + obj->buf[i] = '\0'; /* mark end of valid data */ + + } + if (obj->bytes_read == -1) + dlg_exiterr("Error reading file"); + free(buftab); +} + +static long +find_first(MY_OBJ * obj, char *buffer, long length) +{ + long recount = obj->page_length; + long result = 0; + + while (length > 0) { + if (buffer[length] == '\n') { + if (--recount < 0) { + result = length; + break; + } + } + --length; + } + return result; +} + +static long +tabize(MY_OBJ * obj, long val, long *first_pos) +{ + long fpos; + long i, count, begin_line; + char *buftab; + + if (!dialog_vars.tab_correct) + return val; + + fpos = ftell_obj(obj); + + lseek_obj(obj, fpos - obj->fd_bytes_read, SEEK_SET); + + /* Allocate space for read buffer */ + buftab = xalloc((size_t) val + 1); + + if ((read(obj->fd, buftab, (size_t) val)) == -1) + dlg_exiterr("Error reading file in tabize()."); + + begin_line = count = 0; + if (first_pos != 0) + *first_pos = 0; + + for (i = 0; i < val; i++) { + if ((first_pos != 0) && (count >= val)) { + *first_pos = find_first(obj, buftab, i); + break; + } + if (buftab[i] == TAB) + count += dialog_state.tab_len + - ((count - begin_line) % dialog_state.tab_len); + else if (buftab[i] == '\n') { + count++; + begin_line = count; + } else + count++; + } + + lseek_obj(obj, fpos, SEEK_SET); + free(buftab); + return count; +} +/* + * Return current line of text. + * '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(MY_OBJ * obj) +{ + int i = 0; + long fpos; + + obj->end_reached = FALSE; + while (obj->buf[obj->in_buf] != '\n') { + if (obj->buf[obj->in_buf] == '\0') { /* Either end of file or end of buffer reached */ + fpos = ftell_obj(obj); + + if (fpos < obj->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 + */ + read_high(obj, BUF_SIZE); + obj->in_buf = 0; + } else { + if (!obj->end_reached) + obj->end_reached = TRUE; + break; + } + } else if (i < MAX_LEN) + obj->line[i++] = obj->buf[obj->in_buf++]; + else { + if (i == MAX_LEN) /* Truncate lines longer than MAX_LEN characters */ + obj->line[i++] = '\0'; + obj->in_buf++; + } + } + if (i <= MAX_LEN) + obj->line[i] = '\0'; + if (!obj->end_reached) + obj->in_buf++; /* move past '\n' */ + + return obj->line; +} + +static bool +match_string(MY_OBJ * obj, char *string) +{ + char *match = get_line(obj); + return strstr(match, string) != 0; +} + +/* + * Go back 'n' lines in text file. Called by dialog_textbox(). + * 'in_buf' will be updated to point to the desired line in 'buf'. + */ +static void +back_lines(MY_OBJ * obj, long n) +{ + int i; + long fpos; + long val_to_tabize; + + obj->begin_reached = FALSE; + /* 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 '--in_buf' to move one character backward so as to + * skip '\n' of the previous line */ + if (!obj->end_reached) { + /* Either beginning of buffer or beginning of file reached? */ + + if (obj->in_buf == 0) { + fpos = ftell_obj(obj); + + if (fpos > obj->fd_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 + obj->fd_bytes_read) { + /* No, move less than */ + lseek_obj(obj, 0, SEEK_SET); + val_to_tabize = fpos - obj->fd_bytes_read; + } else { /* Move backward BUF_SIZE/2 bytes */ + lseek_obj(obj, -(BUF_SIZE / 2 + obj->fd_bytes_read), SEEK_CUR); + val_to_tabize = BUF_SIZE / 2; + } + read_high(obj, BUF_SIZE); + + obj->in_buf = tabize(obj, val_to_tabize, (long *) 0); + + } else { /* Beginning of file reached */ + obj->begin_reached = TRUE; + return; + } + } + obj->in_buf--; + if (obj->buf[obj->in_buf] != '\n') + /* Something's wrong... */ + dlg_exiterr("Internal error in back_lines()."); + } + + /* Go back 'n' lines */ + for (i = 0; i < n; i++) { + do { + if (obj->in_buf == 0) { + fpos = ftell_obj(obj); + + if (fpos > obj->fd_bytes_read) { + /* Really possible to move backward BUF_SIZE/2 bytes? */ + if (fpos < BUF_SIZE / 2 + obj->fd_bytes_read) { + /* No, move less than */ + lseek_obj(obj, 0, SEEK_SET); + val_to_tabize = fpos - obj->fd_bytes_read; + } else { /* Move backward BUF_SIZE/2 bytes */ + lseek_obj(obj, -(BUF_SIZE / 2 + obj->fd_bytes_read), SEEK_CUR); + val_to_tabize = BUF_SIZE / 2; + } + read_high(obj, BUF_SIZE); + + obj->in_buf = tabize(obj, val_to_tabize, (long *) 0); + + } else { /* Beginning of file reached */ + obj->begin_reached = TRUE; + return; + } + } + } while (obj->buf[--(obj->in_buf)] != '\n'); + } + obj->in_buf++; +} + +/* + * Print a new line of text. + */ +static void +print_line(MY_OBJ * obj, int row, int width) +{ + if (wmove(obj->text, row, 0) != ERR) { + int i, y, x; + char *line = get_line(obj); + const int *cols = dlg_index_columns(line); + const int *indx = dlg_index_wchars(line); + int limit = dlg_count_wchars(line); + int first = 0; + int last = limit; + + if (width > getmaxx(obj->text)) + width = getmaxx(obj->text); + --width; /* for the leading ' ' */ + + for (i = 0; i <= limit && cols[i] < obj->hscroll; ++i) + first = i; + + for (i = first; (i <= limit) && ((cols[i] - cols[first]) < width); ++i) + last = i; + + (void) waddch(obj->text, ' '); + (void) waddnstr(obj->text, line + indx[first], indx[last] - indx[first]); + + getyx(obj->text, y, x); + if (y == row) { /* Clear 'residue' of previous line */ + for (i = 0; i <= width - x; i++) { + (void) waddch(obj->text, ' '); + } + } + } +} + +/* + * Print a new page of text. + */ +static void +print_page(MY_OBJ * obj, int height, int width) +{ + int i, passed_end = 0; + + obj->page_length = 0; + for (i = 0; i < height; i++) { + print_line(obj, i, width); + if (!passed_end) + obj->page_length++; + if (obj->end_reached && !passed_end) + passed_end = 1; + } + (void) wnoutrefresh(obj->text); +} + +/* + * Print current position + */ +static void +print_position(MY_OBJ * obj, WINDOW *win, int height, int width) +{ + long fpos; + long size; + long first = -1; + + fpos = ftell_obj(obj); + if (dialog_vars.tab_correct) + size = tabize(obj, obj->in_buf, &first); + else + first = find_first(obj, obj->buf, size = obj->in_buf); + + dlg_draw_scrollbar(win, + first, + fpos - obj->fd_bytes_read + size, + fpos - obj->fd_bytes_read + size, + obj->file_size, + 0, PAGE_WIDTH, + 0, PAGE_LENGTH + 1, + border_attr, + border_attr); +} + +/* + * Display a dialog box and get the search term from user. + */ +static int +get_search_term(WINDOW *dialog, char *input, int height, int width) +{ + /* *INDENT-OFF* */ + static DLG_KEYS_BINDING binding[] = { + INPUTSTR_BINDINGS, + ENTERKEY_BINDINGS, + END_KEYS_BINDING + }; + /* *INDENT-ON* */ + + int old_x, old_y; + int box_x, box_y; + int box_height, box_width; + int offset = 0; + int key = 0; + int fkey = 0; + bool first = TRUE; + int result = DLG_EXIT_UNKNOWN; + char *caption = _("Search"); + int len_caption = dlg_count_columns(caption); + const int *indx; + int limit; + WINDOW *widget; + + getbegyx(dialog, old_y, old_x); + + box_height = 1 + (2 * MARGIN); + box_width = len_caption + (2 * (MARGIN + 2)); + box_width = MAX(box_width, 30); + box_width = MIN(box_width, getmaxx(dialog) - 2 * MARGIN); + len_caption = MIN(len_caption, box_width - (2 * (MARGIN + 1))); + + box_x = (width - box_width) / 2; + box_y = (height - box_height) / 2; + widget = dlg_new_modal_window(dialog, + box_height, box_width, + old_y + box_y, old_x + box_x); + keypad(widget, TRUE); + dlg_register_window(widget, "searchbox", binding); + + dlg_draw_box(widget, 0, 0, box_height, box_width, + searchbox_attr, + searchbox_border_attr); + wattrset(widget, searchbox_title_attr); + (void) wmove(widget, 0, (box_width - len_caption) / 2); + + indx = dlg_index_wchars(caption); + limit = dlg_limit_columns(caption, len_caption, 0); + (void) waddnstr(widget, caption + indx[0], indx[limit] - indx[0]); + + box_y++; + box_x++; + box_width -= 2; + offset = dlg_count_columns(input); + + while (result == DLG_EXIT_UNKNOWN) { + if (!first) { + key = dlg_getc(widget, &fkey); + if (fkey) { + switch (fkey) { +#ifdef KEY_RESIZE + case KEY_RESIZE: + result = DLG_EXIT_CANCEL; + continue; +#endif + case DLGK_ENTER: + result = DLG_EXIT_OK; + continue; + } + } else if (key == ESC) { + result = DLG_EXIT_ESC; + continue; + } else if (key == ERR) { + napms(50); + continue; + } + } + if (dlg_edit_string(input, &offset, key, fkey, first)) { + dlg_show_string(widget, input, offset, searchbox_attr, + 1, 1, box_width, FALSE, first); + first = FALSE; + } + } + dlg_del_window(widget); + return result; +} + +static bool +perform_search(MY_OBJ * obj, int height, int width, int key, char *search_term) +{ + int dir; + long tempinx; + long fpos; + int result; + bool found; + bool temp, temp1; + bool moved = FALSE; + + /* set search direction */ + dir = (key == '/' || key == 'n') ? 1 : 0; + if (dir ? !obj->end_reached : !obj->begin_reached) { + if (key == 'n' || key == 'N') { + if (search_term[0] == '\0') { /* No search term yet */ + (void) beep(); + return FALSE; + } + /* Get search term from user */ + } else if ((result = get_search_term(obj->text, search_term, + PAGE_LENGTH, + PAGE_WIDTH)) != DLG_EXIT_OK + || search_term[0] == '\0') { +#ifdef KEY_RESIZE + if (result == DLG_EXIT_CANCEL) { + ungetch(key); + ungetch(KEY_RESIZE); + /* FALLTHRU */ + } +#endif + /* ESC pressed, or no search term, reprint page to clear box */ + wattrset(obj->text, dialog_attr); + back_lines(obj, obj->page_length); + return TRUE; + } + /* Save variables for restoring in case search term can't be found */ + tempinx = obj->in_buf; + temp = obj->begin_reached; + temp1 = obj->end_reached; + fpos = ftell_obj(obj) - obj->fd_bytes_read; + /* update 'in_buf' to point to next (previous) line before + forward (backward) searching */ + back_lines(obj, (dir + ? obj->page_length - 1 + : obj->page_length + 1)); + found = FALSE; + if (dir) { /* Forward search */ + while ((found = match_string(obj, search_term)) == FALSE) { + if (obj->end_reached) + break; + } + } else { /* Backward search */ + while ((found = match_string(obj, search_term)) == FALSE) { + if (obj->begin_reached) + break; + back_lines(obj, 2); + } + } + if (found == FALSE) { /* not found */ + (void) beep(); + /* Restore program state to that before searching */ + lseek_obj(obj, fpos, SEEK_SET); + + read_high(obj, BUF_SIZE); + + obj->in_buf = tempinx; + obj->begin_reached = temp; + obj->end_reached = temp1; + /* move 'in_buf' to point to start of current page to + * re-print current page. Note that 'in_buf' always points + * to start of next page, so this is necessary + */ + back_lines(obj, obj->page_length); + } else { /* Search term found */ + back_lines(obj, 1); + } + /* Reprint page */ + wattrset(obj->text, dialog_attr); + moved = TRUE; + } else { /* no need to find */ + (void) beep(); + } + return moved; +} + +/* + * Display text from a file in a dialog box. + */ +int +dialog_textbox(const char *title, const char *file, int height, int width) +{ + /* *INDENT-OFF* */ + static DLG_KEYS_BINDING binding[] = { + ENTERKEY_BINDINGS, + DLG_KEYS_DATA( DLGK_GRID_DOWN, 'J' ), + DLG_KEYS_DATA( DLGK_GRID_DOWN, 'j' ), + DLG_KEYS_DATA( DLGK_GRID_DOWN, KEY_DOWN ), + DLG_KEYS_DATA( DLGK_GRID_LEFT, 'H' ), + DLG_KEYS_DATA( DLGK_GRID_LEFT, 'h' ), + DLG_KEYS_DATA( DLGK_GRID_LEFT, KEY_LEFT ), + DLG_KEYS_DATA( DLGK_GRID_RIGHT, 'L' ), + DLG_KEYS_DATA( DLGK_GRID_RIGHT, 'l' ), + DLG_KEYS_DATA( DLGK_GRID_RIGHT, KEY_RIGHT ), + DLG_KEYS_DATA( DLGK_GRID_UP, 'K' ), + DLG_KEYS_DATA( DLGK_GRID_UP, 'k' ), + DLG_KEYS_DATA( DLGK_GRID_UP, KEY_UP ), + DLG_KEYS_DATA( DLGK_PAGE_FIRST, 'g' ), + DLG_KEYS_DATA( DLGK_PAGE_FIRST, KEY_HOME ), + DLG_KEYS_DATA( DLGK_PAGE_LAST, 'G' ), + DLG_KEYS_DATA( DLGK_PAGE_LAST, KEY_END ), + DLG_KEYS_DATA( DLGK_PAGE_LAST, KEY_LL ), + DLG_KEYS_DATA( DLGK_PAGE_NEXT, ' ' ), + DLG_KEYS_DATA( DLGK_PAGE_NEXT, KEY_NPAGE ), + DLG_KEYS_DATA( DLGK_PAGE_PREV, 'B' ), + DLG_KEYS_DATA( DLGK_PAGE_PREV, 'b' ), + DLG_KEYS_DATA( DLGK_PAGE_PREV, KEY_PPAGE ), + DLG_KEYS_DATA( DLGK_BEGIN, '0' ), + DLG_KEYS_DATA( DLGK_BEGIN, KEY_BEG ), + DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), + DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), + END_KEYS_BINDING + }; + /* *INDENT-ON* */ + +#ifdef KEY_RESIZE + int old_height = height; + int old_width = width; +#endif + long fpos; + int x, y, cur_x, cur_y; + int key = 0, fkey; + int next = 0; + int i, code, passed_end; + char search_term[MAX_LEN + 1]; + MY_OBJ obj; + WINDOW *dialog; + bool moved; + int result = DLG_EXIT_UNKNOWN; + int button = dialog_vars.extra_button ? dlg_defaultno_button() : 0; + int min_width = 12; + + search_term[0] = '\0'; /* no search term entered yet */ + + memset(&obj, 0, sizeof(obj)); + + obj.begin_reached = TRUE; + obj.buffer_first = TRUE; + obj.end_reached = FALSE; + obj.buttons = dlg_exit_label(); + + /* Open input file for reading */ + if ((obj.fd = open(file, O_RDONLY)) == -1) + dlg_exiterr("Can't open input file %s", file); + + /* Get file size. Actually, 'file_size' is the real file size - 1, + since it's only the last byte offset from the beginning */ + obj.file_size = lseek_obj(&obj, 0, SEEK_END); + + /* Restore file pointer to beginning of file after getting file size */ + lseek_obj(&obj, 0, SEEK_SET); + + read_high(&obj, BUF_SIZE); + + dlg_button_layout(obj.buttons, &min_width); + +#ifdef KEY_RESIZE + retry: +#endif + moved = TRUE; + + dlg_auto_sizefile(title, file, &height, &width, 2, min_width); + dlg_print_size(height, width); + dlg_ctl_size(height, width); + + x = dlg_box_x_ordinate(width); + y = dlg_box_y_ordinate(height); + + dialog = dlg_new_window(height, width, y, x); + dlg_register_window(dialog, "textbox", binding); + dlg_register_buttons(dialog, "textbox", obj.buttons); + + dlg_mouse_setbase(x, y); + + /* Create window for text region, used for scrolling text */ + obj.text = dlg_sub_window(dialog, PAGE_LENGTH, PAGE_WIDTH, y + 1, x + 1); + + /* register the new window, along with its borders */ + dlg_mouse_mkbigregion(0, 0, PAGE_LENGTH + 2, width, KEY_MAX, 1, 1, 1 /* lines */ ); + dlg_draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); + dlg_draw_bottom_box(dialog); + dlg_draw_title(dialog, title); + + dlg_draw_buttons(dialog, PAGE_LENGTH + 2, 0, obj.buttons, button, FALSE, width); + (void) wnoutrefresh(dialog); + getyx(dialog, cur_y, cur_x); /* Save cursor position */ + + dlg_attr_clear(obj.text, PAGE_LENGTH, PAGE_WIDTH, dialog_attr); + + while (result == DLG_EXIT_UNKNOWN) { + + /* + * Update the screen according to whether we shifted up/down by a line + * or not. + */ + if (moved) { + if (next < 0) { + (void) scrollok(obj.text, TRUE); + (void) scroll(obj.text); /* Scroll text region up one line */ + (void) scrollok(obj.text, FALSE); + print_line(&obj, PAGE_LENGTH - 1, PAGE_WIDTH); + (void) wnoutrefresh(obj.text); + } else if (next > 0) { + /* + * 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 'in_buf' should + * point to start of next page. This is done by calling + * get_line() in the following 'for' loop. + */ + (void) scrollok(obj.text, TRUE); + (void) wscrl(obj.text, -1); /* Scroll text region down one line */ + (void) scrollok(obj.text, FALSE); + obj.page_length = 0; + passed_end = 0; + for (i = 0; i < PAGE_LENGTH; i++) { + if (!i) { + print_line(&obj, 0, PAGE_WIDTH); /* print first line of page */ + (void) wnoutrefresh(obj.text); + } else + (void) get_line(&obj); /* Called to update 'end_reached' and 'in_buf' */ + if (!passed_end) + obj.page_length++; + if (obj.end_reached && !passed_end) + passed_end = 1; + } + } else { + print_page(&obj, PAGE_LENGTH, PAGE_WIDTH); + } + print_position(&obj, dialog, height, width); + (void) wmove(dialog, cur_y, cur_x); /* Restore cursor position */ + wrefresh(dialog); + } + moved = FALSE; /* assume we'll not move */ + next = 0; /* ...but not scroll by a line */ + + key = dlg_mouse_wgetch(dialog, &fkey); + if (dlg_result_key(key, fkey, &result)) + break; + + if (!fkey && (code = dlg_char_to_button(key, obj.buttons)) >= 0) { + result = dlg_ok_buttoncode(code); + break; + } + + if (fkey) { + switch (key) { + default: + if (is_DLGK_MOUSE(key)) { + result = dlg_exit_buttoncode(key - M_EVENT); + if (result < 0) + result = DLG_EXIT_OK; + } else { + beep(); + } + break; + case DLGK_FIELD_NEXT: + button = dlg_next_button(obj.buttons, button); + if (button < 0) + button = 0; + dlg_draw_buttons(dialog, + height - 2, 0, + obj.buttons, button, + FALSE, width); + break; + case DLGK_FIELD_PREV: + button = dlg_prev_button(obj.buttons, button); + if (button < 0) + button = 0; + dlg_draw_buttons(dialog, + height - 2, 0, + obj.buttons, button, + FALSE, width); + break; + case DLGK_ENTER: + result = dlg_exit_buttoncode(button); + break; + case DLGK_PAGE_FIRST: + if (!obj.begin_reached) { + obj.begin_reached = 1; + /* First page not in buffer? */ + fpos = ftell_obj(&obj); + + if (fpos > obj.fd_bytes_read) { + /* Yes, we have to read it in */ + lseek_obj(&obj, 0, SEEK_SET); + + read_high(&obj, BUF_SIZE); + } + obj.in_buf = 0; + moved = TRUE; + } + break; + case DLGK_PAGE_LAST: + obj.end_reached = TRUE; + /* Last page not in buffer? */ + fpos = ftell_obj(&obj); + + if (fpos < obj.file_size) { + /* Yes, we have to read it in */ + lseek_obj(&obj, -BUF_SIZE, SEEK_END); + + read_high(&obj, BUF_SIZE); + } + obj.in_buf = obj.bytes_read; + back_lines(&obj, PAGE_LENGTH); + moved = TRUE; + break; + case DLGK_GRID_UP: /* Previous line */ + if (!obj.begin_reached) { + back_lines(&obj, obj.page_length + 1); + next = 1; + moved = TRUE; + } + break; + case DLGK_PAGE_PREV: /* Previous page */ + case DLGK_MOUSE(KEY_PPAGE): + if (!obj.begin_reached) { + back_lines(&obj, obj.page_length + PAGE_LENGTH); + moved = TRUE; + } + break; + case DLGK_GRID_DOWN: /* Next line */ + if (!obj.end_reached) { + obj.begin_reached = 0; + next = -1; + moved = TRUE; + } + break; + case DLGK_PAGE_NEXT: /* Next page */ + case DLGK_MOUSE(KEY_NPAGE): + if (!obj.end_reached) { + obj.begin_reached = 0; + moved = TRUE; + } + break; + case DLGK_BEGIN: /* Beginning of line */ + if (obj.hscroll > 0) { + obj.hscroll = 0; + /* Reprint current page to scroll horizontally */ + back_lines(&obj, obj.page_length); + moved = TRUE; + } + break; + case DLGK_GRID_LEFT: /* Scroll left */ + if (obj.hscroll > 0) { + obj.hscroll--; + /* Reprint current page to scroll horizontally */ + back_lines(&obj, obj.page_length); + moved = TRUE; + } + break; + case DLGK_GRID_RIGHT: /* Scroll right */ + if (obj.hscroll < MAX_LEN) { + obj.hscroll++; + /* Reprint current page to scroll horizontally */ + back_lines(&obj, obj.page_length); + moved = TRUE; + } + break; +#ifdef KEY_RESIZE + case KEY_RESIZE: + /* reset data */ + height = old_height; + width = old_width; + back_lines(&obj, obj.page_length); + moved = TRUE; + /* repaint */ + dlg_clear(); + dlg_del_window(dialog); + refresh(); + dlg_mouse_free_regions(); + goto retry; +#endif + } + } else { + switch (key) { + case '/': /* Forward search */ + case 'n': /* Repeat forward search */ + case '?': /* Backward search */ + case 'N': /* Repeat backward search */ + moved = perform_search(&obj, height, width, key, search_term); + fkey = FALSE; + break; + default: + beep(); + break; + } + } + } + + dlg_del_window(dialog); + free(obj.buf); + (void) close(obj.fd); + dlg_mouse_free_regions(); + return result; +} Index: contrib/dialog/po/mg.po =================================================================== --- contrib/dialog/po/mg.po (revision 0) +++ contrib/dialog/po/mg.po (revision 0) @@ -0,0 +1,110 @@ +# Malagasy translation of Dialog. +# This file is distributed under the same license as the dialog package. +# Copyright (C) 2005 Thomas Dickey. +# +msgid "" +msgstr "" +"Project-Id-Version: Dialog 1.0-20050116\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2004-11-21 17:33+0100\n" +"Last-Translator: Jaonary Rabarisoa <jaonary@ifrance.fr>\n" +"Language-Team: <en@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.9.1\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Eny" + +#: buttons.c:393 +msgid "No" +msgstr "Tsia" + +#: buttons.c:401 +msgid "OK" +msgstr "Ekena" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Ajanony" + +#: buttons.c:417 +msgid "EXIT" +msgstr "" + +#: buttons.c:425 +msgid "Extra" +msgstr "" + +#: buttons.c:433 +msgid "Help" +msgstr "" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "" + +#: dialog.c:741 +msgid "Rename" +msgstr "" + +#: fselect.c:550 +msgid "Directories" +msgstr "" + +#: fselect.c:551 +msgid "Files" +msgstr "" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "" + +#: textbox.c:489 +msgid "Search" +msgstr "" Index: contrib/dialog/po/eo.po =================================================================== --- contrib/dialog/po/eo.po (revision 0) +++ contrib/dialog/po/eo.po (revision 0) @@ -0,0 +1,109 @@ +# Esperanto translation of Dialog +# Copyright (C) 2008 Felipe Castro +# This file is distributed under the same license as the dialog package. +# Felipe Castro <fefcas@gmail.com>, 2008 +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20070704\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-25 16:06-0500\n" +"PO-Revision-Date: 2008-08-03 15:50-0300\n" +"Last-Translator: Felipe Castro <fefcas@gmail.com>\n" +"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: buttons.c:379 +msgid "Yes" +msgstr "Jes" + +#: buttons.c:387 +msgid "No" +msgstr "Ne" + +#: buttons.c:395 +msgid "OK" +msgstr "Certe" + +#: buttons.c:403 +msgid "Cancel" +msgstr "Rezigni" + +#: buttons.c:411 +msgid "EXIT" +msgstr "ELIRI" + +#: buttons.c:419 +msgid "Extra" +msgstr "Krome" + +#: buttons.c:427 +msgid "Help" +msgstr "Helpo" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Monato" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Jaro" + +#: dialog.c:727 +msgid "Rename" +msgstr "Renomigi" + +#: fselect.c:548 +msgid "Directories" +msgstr "Dosierujoj" + +#: fselect.c:549 +msgid "Files" +msgstr "Dosieroj" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "Sukcesis" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Malsukcesis" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "Pasite" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "Kompletite" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Kontrolite" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Farite" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Preterpasite" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "Evoluado" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "N/A" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Tuta Evoluo" + +#: textbox.c:489 +msgid "Search" +msgstr "Serĉi" Index: contrib/dialog/po/cs.po =================================================================== --- contrib/dialog/po/cs.po (revision 0) +++ contrib/dialog/po/cs.po (revision 0) @@ -0,0 +1,108 @@ +# From: Martin Povolny <martin@solnet.cz> +msgid "" +msgstr "" +"Project-Id-Version: dialog 0.9a-20010527\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2004-12-19 20:14-0500\n" +"Last-Translator: Martin Povolny <martin@solnet.cz>\n" +"Language-Team:\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Ano" + +#: buttons.c:393 +msgid "No" +msgstr "Ne" + +#: buttons.c:401 +msgid "OK" +msgstr "OK" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Storno" + +#: buttons.c:417 +msgid "EXIT" +msgstr "Konec" + +#: buttons.c:425 +msgid "Extra" +msgstr "" + +#: buttons.c:433 +msgid "Help" +msgstr "" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "MÄ›síc" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Rok" + +#: dialog.c:741 +msgid "Rename" +msgstr "" + +#: fselect.c:550 +msgid "Directories" +msgstr "Adresáře" + +#: fselect.c:551 +msgid "Files" +msgstr "Soubory" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "" + +#: mixedgauge.c:61 +#, fuzzy +msgid "Failed" +msgstr "Soubory" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "" + +#: textbox.c:489 +#, fuzzy +msgid "Search" +msgstr "Search" Index: contrib/dialog/po/pt_BR.po =================================================================== --- contrib/dialog/po/pt_BR.po (revision 0) +++ contrib/dialog/po/pt_BR.po (revision 0) @@ -0,0 +1,112 @@ +# Brazilian Portuguese translation of Dialog. +# Copyright (C) 2001 Thomas Dickey. +# This file is distributed under the same license as the dialog package. +# Frédéric L. W. Meunier <0@pervalidus.net>, 2001. +# Flamarion Jorge <flamarilinux@yahoo.com.br>, 2009. +# +# +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20080819\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-03-29 19:30-0400\n" +"PO-Revision-Date: 2009-01-06 23:48-0200\n" +"Last-Translator: Flamarion Jorge <flamarilinux@yahoo.com.br>\n" +"Language-Team: Brazilian Portuguese <ldp-br@bazar.conectiva.com.br>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Sim" + +#: buttons.c:393 +msgid "No" +msgstr "Não" + +#: buttons.c:401 +msgid "OK" +msgstr "Aceitar" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Cancelar" + +#: buttons.c:417 +msgid "EXIT" +msgstr "Sair" + +#: buttons.c:425 +msgid "Extra" +msgstr "Extra" + +#: buttons.c:433 +msgid "Help" +msgstr "Ajuda" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Mês" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Ano" + +#: dialog.c:744 +msgid "Rename" +msgstr "Renomear" + +#: fselect.c:550 +msgid "Directories" +msgstr "Diretórios" + +#: fselect.c:551 +msgid "Files" +msgstr "Arquivos" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "Sucesso" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Falhou" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "Passou" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "Completo" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Checado" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Feito" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Pulado" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "Em Progresso" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "N/A" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Progresso Global" + +#: textbox.c:489 +msgid "Search" +msgstr "Pesquisa" Index: contrib/dialog/po/wa.po =================================================================== --- contrib/dialog/po/wa.po (revision 0) +++ contrib/dialog/po/wa.po (revision 0) @@ -0,0 +1,110 @@ +# Translation of Dialog into the walloon language. +# Copyright 2003-2006,2007 # Thomas Dickey +# +# Pablo Saratxaga <pablo@walon.org>, 2007. +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20070704\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2007-08-29 18:24+0200\n" +"Last-Translator: Pablo Saratxaga <pablo@walon.org>\n" +"Language-Team: Walloon <linux-wa@walon.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.0.2\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Oyi" + +#: buttons.c:393 +msgid "No" +msgstr "Neni" + +#: buttons.c:401 +msgid "OK" +msgstr "'l est bon" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Rinoncî" + +#: buttons.c:417 +msgid "EXIT" +msgstr "Moussî foû" + +#: buttons.c:425 +msgid "Extra" +msgstr "Rawete" + +#: buttons.c:433 +msgid "Help" +msgstr "Aidance" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Moes" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Anêye" + +#: dialog.c:741 +msgid "Rename" +msgstr "Rilomer" + +#: fselect.c:550 +msgid "Directories" +msgstr "Ridants" + +#: fselect.c:551 +msgid "Files" +msgstr "Fitchîs" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "Succès" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Berwete" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "Passé" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "Tot fwait" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Verifyî" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Fwait" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Passé houte" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "En alaedje" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "N/D" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Avançmint" + +#: textbox.c:489 +msgid "Search" +msgstr "Cweri" Index: contrib/dialog/po/es.po =================================================================== --- contrib/dialog/po/es.po (revision 0) +++ contrib/dialog/po/es.po (revision 0) @@ -0,0 +1,111 @@ +# Mensajes en español para dialog. +# Copyright (C) 2001, 2003, 2004 Thomas Dickey. +# This file is distributed under the same license as the dialog package. +# Santiago Vila Doncel <sanvila@unex.es>, 2001, 2003, 2004, 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20080819\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2010-02-14 14:26+0100\n" +"Last-Translator: Santiago Vila Doncel <sanvila@unex.es>\n" +"Language-Team: Spanish <es@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Sí" + +#: buttons.c:393 +msgid "No" +msgstr "No" + +#: buttons.c:401 +msgid "OK" +msgstr "Aceptar" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Cancelar" + +#: buttons.c:417 +msgid "EXIT" +msgstr "Salir" + +#: buttons.c:425 +msgid "Extra" +msgstr "Extra" + +#: buttons.c:433 +msgid "Help" +msgstr "Ayuda" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Mes" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Año" + +#: dialog.c:741 +msgid "Rename" +msgstr "Renombrar" + +#: fselect.c:550 +msgid "Directories" +msgstr "Directorios" + +#: fselect.c:551 +msgid "Files" +msgstr "Ficheros" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "Finalizado con éxito" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Falló" + +# Esta no me convence mucho. Se admiten sugerencias +#: mixedgauge.c:64 +msgid "Passed" +msgstr "Pasado" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "Completado" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Comprobado" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Hecho" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Saltado" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "En progreso" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "N/A" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Progreso total" + +#: textbox.c:489 +msgid "Search" +msgstr "Buscar" Index: contrib/dialog/po/mk.po =================================================================== --- contrib/dialog/po/mk.po (revision 0) +++ contrib/dialog/po/mk.po (revision 0) @@ -0,0 +1,111 @@ +# Macedonian translation of Dialog. +# This file is distributed under the same license as the dialog package. +# Copyright (C) 2005 Thomas Dickey. +# Georgi Stanojevski <glisha@gmail.com>, 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: Dialog 1.0-20050116\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2004-10-10 00:18+0200\n" +"Last-Translator: Georgi Stanojevski <glisha@gmail.com>\n" +"Language-Team: <ossm-members@hedona.on.net.mk>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.3.1\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Да" + +#: buttons.c:393 +msgid "No" +msgstr "Ðе" + +#: buttons.c:401 +msgid "OK" +msgstr "Во ред" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Откажи" + +#: buttons.c:417 +msgid "EXIT" +msgstr "" + +#: buttons.c:425 +msgid "Extra" +msgstr "" + +#: buttons.c:433 +msgid "Help" +msgstr "" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "" + +#: dialog.c:741 +msgid "Rename" +msgstr "" + +#: fselect.c:550 +msgid "Directories" +msgstr "" + +#: fselect.c:551 +msgid "Files" +msgstr "" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "" + +#: textbox.c:489 +msgid "Search" +msgstr "" Index: contrib/dialog/po/eu.po =================================================================== --- contrib/dialog/po/eu.po (revision 0) +++ contrib/dialog/po/eu.po (revision 0) @@ -0,0 +1,111 @@ +# translation of dialog-1.1.20070704.po to Euskara +# Dialog +# Copyright 2003,2004 # Thomas Dickey +# +# Piarres Beobide Egaña <pi@beobide.net>, 2004, 2007. +msgid "" +msgstr "" +"Project-Id-Version: dialog-1.1.20070704\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2007-09-20 00:01+0200\n" +"Last-Translator: Piarres Beobide <pi@beobide.net>\n" +"Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Bai" + +#: buttons.c:393 +msgid "No" +msgstr "Ez" + +#: buttons.c:401 +msgid "OK" +msgstr "Ados" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Utzi" + +#: buttons.c:417 +msgid "EXIT" +msgstr "IRTEN" + +#: buttons.c:425 +msgid "Extra" +msgstr "Gehigarria" + +#: buttons.c:433 +msgid "Help" +msgstr "Laguntza" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Hilabetea" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Urtea" + +#: dialog.c:741 +msgid "Rename" +msgstr "Berizendatu" + +#: fselect.c:550 +msgid "Directories" +msgstr "Direktorioak" + +#: fselect.c:551 +msgid "Files" +msgstr "Fitxategiak" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "Lortua" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Huts eginda" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "Pasata" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "Osatua" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Egiaztatua" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Eginda" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Salto eginda" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "Aurrerakuntza" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "E/G" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Aurrerapen nagusia" + +#: textbox.c:489 +msgid "Search" +msgstr "Bilaketa" Index: contrib/dialog/po/cy.po =================================================================== --- contrib/dialog/po/cy.po (revision 0) +++ contrib/dialog/po/cy.po (revision 0) @@ -0,0 +1,110 @@ +# Dialog +# Copyright 2003,2004 # Thomas Dickey +# +msgid "" +msgstr "" +"Project-Id-Version: Dialog\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2004-03-30 23:00+0100\n" +"Last-Translator: Dafydd Harries <daf@muse.19inch.net>\n" +"Language-Team: Welsh <cy@pengwyn.linux.org.uk>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Ie" + +#: buttons.c:393 +msgid "No" +msgstr "Na" + +#: buttons.c:401 +msgid "OK" +msgstr "Iawn" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Diddymu" + +#: buttons.c:417 +msgid "EXIT" +msgstr "GADAEL" + +#: buttons.c:425 +msgid "Extra" +msgstr "Ychwanegol" + +#: buttons.c:433 +msgid "Help" +msgstr "Cymorth" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Mis" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Blwyddyn" + +#: dialog.c:741 +msgid "Rename" +msgstr "Ailenwy" + +#: fselect.c:550 +msgid "Directories" +msgstr "Cyfeiriaduron" + +#: fselect.c:551 +msgid "Files" +msgstr "Ffeiliau" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "" + +#: mixedgauge.c:61 +#, fuzzy +msgid "Failed" +msgstr "Ffeiliau" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "" + +#: textbox.c:489 +#, fuzzy +msgid "Search" +msgstr "Search" Index: contrib/dialog/po/is.po =================================================================== --- contrib/dialog/po/is.po (revision 0) +++ contrib/dialog/po/is.po (revision 0) @@ -0,0 +1,111 @@ +# translation of dialog-1.1.20080819.po to Icelandic +# This file is distributed under the same license as the dialog package. +# Copyright 2003-2007,2008 Thomas Dickey +# +# Sveinn í Felli <sveinki@nett.is>, 2009. +msgid "" +msgstr "" +"Project-Id-Version: dialog-1.1.20080819\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2009-09-03 17:02+0000\n" +"Last-Translator: Sveinn í Felli <sveinki@nett.is>\n" +"Language-Team: Icelandic <(nothing)>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Já" + +#: buttons.c:393 +msgid "No" +msgstr "Nei" + +#: buttons.c:401 +msgid "OK" +msgstr "à lagi" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Hætta við" + +#: buttons.c:417 +msgid "EXIT" +msgstr "LOKA" + +#: buttons.c:425 +msgid "Extra" +msgstr "Auka" + +#: buttons.c:433 +msgid "Help" +msgstr "Hjálp" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Mánuður" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Ãr" + +#: dialog.c:741 +msgid "Rename" +msgstr "Endurnefna" + +#: fselect.c:550 +msgid "Directories" +msgstr "Möppur" + +#: fselect.c:551 +msgid "Files" +msgstr "Skrár" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "Tókst" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Mistókst" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "Stóðst prófun" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "Fullgert" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Athugað" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Lokið" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Sleppt" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "à vinnslu" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "Ekki tiltækt" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Heildarframvinda" + +#: textbox.c:489 +msgid "Search" +msgstr "Leita" Index: contrib/dialog/po/hu.po =================================================================== --- contrib/dialog/po/hu.po (revision 0) +++ contrib/dialog/po/hu.po (revision 0) @@ -0,0 +1,111 @@ +# Dialog +# Copyright 2003, # Thomas Dickey +# Arpad Biro <biro_arpad@yahoo.com>, 2003 +# +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.0-rel20041222\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2005-02-02 08:21+0100\n" +"Last-Translator: Németh Csaba <csaba@sopron.hu>\n" +"Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.0.1\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Igen" + +#: buttons.c:393 +msgid "No" +msgstr "Nem" + +#: buttons.c:401 +msgid "OK" +msgstr "OK" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Mégsem" + +#: buttons.c:417 +msgid "EXIT" +msgstr "KILÉPÉS" + +#: buttons.c:425 +msgid "Extra" +msgstr "Extra" + +#: buttons.c:433 +msgid "Help" +msgstr "Súgó" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Hónap" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Év" + +#: dialog.c:741 +msgid "Rename" +msgstr "Ãtnevezés" + +#: fselect.c:550 +msgid "Directories" +msgstr "Könyvtárak" + +#: fselect.c:551 +msgid "Files" +msgstr "Fájlok" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "" + +#: mixedgauge.c:61 +#, fuzzy +msgid "Failed" +msgstr "Fájlok" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "" + +#: textbox.c:489 +msgid "Search" +msgstr "Keresés" Index: contrib/dialog/po/POTFILES.in =================================================================== --- contrib/dialog/po/POTFILES.in (revision 0) +++ contrib/dialog/po/POTFILES.in (revision 0) @@ -0,0 +1,32 @@ +arrows.c +buttons.c +calendar.c +checklist.c +dialog.c +dialog.h +dlg_colors.h +dlg_keys.c +dlg_keys.h +editbox.c +formbox.c +fselect.c +guage.c +inputbox.c +inputstr.c +menubox.c +mixedform.c +mixedgauge.c +mouse.c +mousewget.c +msgbox.c +pause.c +progressbox.c +rc.c +tailbox.c +textbox.c +timebox.c +trace.c +ui_getc.c +util.c +version.c +yesno.c Index: contrib/dialog/po/be@latin.po =================================================================== --- contrib/dialog/po/be@latin.po (revision 0) +++ contrib/dialog/po/be@latin.po (revision 0) @@ -0,0 +1,109 @@ +# Dialog +# Copyright 2003-2006,2007 # Thomas Dickey +# Ihar Hrachyshka <ihar.hrachyshka@gmail.com>, 2007. +# +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20070704\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2007-12-03 01:13+0200\n" +"Last-Translator: Ihar Hrachyshka <ihar.hrachyshka@gmail.com>\n" +"Language-Team: Belarusian (Latin script) <translation-team-be-latin@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Tak" + +#: buttons.c:393 +msgid "No" +msgstr "Nie" + +#: buttons.c:401 +msgid "OK" +msgstr "OK" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Anuluj" + +#: buttons.c:417 +msgid "EXIT" +msgstr "VYCHAD" + +#: buttons.c:425 +msgid "Extra" +msgstr "Dadatkova" + +#: buttons.c:433 +msgid "Help" +msgstr "Dapamoha" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Miesiac" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Hod" + +#: dialog.c:741 +msgid "Rename" +msgstr "Źmiani nazvu" + +#: fselect.c:550 +msgid "Directories" +msgstr "Katalohi" + +#: fselect.c:551 +msgid "Files" +msgstr "FajÅ‚y" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "PaÅ›piachova" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "NiaÅ­daÅ‚a" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "Projdziena" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "SkonÄana" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Pravierana" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Zroblena" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Abminuta" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "DziejniÄaje" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "Niama" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Ahulny prahres" + +#: textbox.c:489 +msgid "Search" +msgstr "Å ukaj" Index: contrib/dialog/po/rm.po =================================================================== --- contrib/dialog/po/rm.po (revision 0) +++ contrib/dialog/po/rm.po (revision 0) @@ -0,0 +1,113 @@ +# Rumantsch (Rhaeto-Romance) [rm] translation of Dialog. +# This file is distributed under the same license as the dialog package. +# Copyright (C) 2003-2004,2005 Thomas Dickey. +# Florian Verdet _goto <fvgoto@linuxbourg.ch>, 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.0-rel20041222\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2005-02-06 13:22+0100\n" +"Last-Translator: Florian Verdet _goto <fvgoto@linuxbourg.ch>\n" +"Language-Team: Rhaeto-Romance <gnu-rumantsch@guglielmtux.ch>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.2\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Schi" + +#: buttons.c:393 +msgid "No" +msgstr "Na" + +#: buttons.c:401 +msgid "OK" +msgstr "OK" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Laschar star" + +#: buttons.c:417 +msgid "EXIT" +msgstr "SORTIR" + +#: buttons.c:425 +msgid "Extra" +msgstr "Extra" + +#: buttons.c:433 +msgid "Help" +msgstr "Agüd" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Mais" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "On" + +#: dialog.c:741 +msgid "Rename" +msgstr "Müdar nom" + +#: fselect.c:550 +#, fuzzy +msgid "Directories" +msgstr "Registers" + +#: fselect.c:551 +msgid "Files" +msgstr "Datotecas" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "" + +#: mixedgauge.c:61 +#, fuzzy +msgid "Failed" +msgstr "Datotecas" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "" + +#: textbox.c:489 +msgid "Search" +msgstr "Tscherchar" Index: contrib/dialog/po/vi.po =================================================================== --- contrib/dialog/po/vi.po (revision 0) +++ contrib/dialog/po/vi.po (revision 0) @@ -0,0 +1,113 @@ +# Vietnamese Translation for Dialog. +# Copyright 2003,2004,2005 Thomas Dickey (msgid) +# Copyright © 2009 Free Software Foundation, Inc. +# This file is distributed under the same license as the dialog package. +# Clytie Siddall <clytie@riverland.net.au>, 2005-2009. +# +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20080819\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2009-09-24 22:36+0930\n" +"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n" +"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: LocFactoryEditor 1.8\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Có" + +#: buttons.c:393 +msgid "No" +msgstr "Không" + +#: buttons.c:401 +msgid "OK" +msgstr "OK" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Thôi" + +#: buttons.c:417 +msgid "EXIT" +msgstr "THOÃT" + +#: buttons.c:425 +msgid "Extra" +msgstr "Thêm" + +#: buttons.c:433 +msgid "Help" +msgstr "Trợ giúp" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Tháng" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Năm" + +#: dialog.c:741 +msgid "Rename" +msgstr "Thay tên" + +#: fselect.c:550 +msgid "Directories" +msgstr "ThÆ° mục" + +#: fselect.c:551 +msgid "Files" +msgstr "Tập tin" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "Thành công" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Trượt" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "Äá»—" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "Hoàn toàn" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Äã kiểm tra" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Hoàn tất" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Bị bá» qua" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "Äang chạy" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "Không có" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Toàn tiến hành" + +#: textbox.c:489 +msgid "Search" +msgstr "Tìm kiếm" Index: contrib/dialog/po/uk.po =================================================================== --- contrib/dialog/po/uk.po (revision 0) +++ contrib/dialog/po/uk.po (revision 0) @@ -0,0 +1,113 @@ +# translation of uk.po to Ukrainian +# Dialog +# Copyright 2003, # Thomas Dickey +# Eugeniy Meshcheryakov <eugen@univ.kiev.ua>, 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: uk\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2004-02-12 20:17+0200\n" +"Last-Translator: Eugeniy Meshcheryakov <eugen@univ.kiev.ua>\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.0.2\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Так" + +#: buttons.c:393 +msgid "No" +msgstr "ÐÑ–" + +#: buttons.c:401 +msgid "OK" +msgstr "Гаразд" + +#: buttons.c:409 +msgid "Cancel" +msgstr "СкаÑувати" + +#: buttons.c:417 +msgid "EXIT" +msgstr "ВИЙТИ" + +#: buttons.c:425 +msgid "Extra" +msgstr "Додатково" + +#: buttons.c:433 +msgid "Help" +msgstr "Допомога" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "МіÑÑць" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Рік" + +#: dialog.c:741 +msgid "Rename" +msgstr "Перейменувати" + +#: fselect.c:550 +msgid "Directories" +msgstr "Каталоги" + +#: fselect.c:551 +msgid "Files" +msgstr "Файли" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "" + +#: mixedgauge.c:61 +#, fuzzy +msgid "Failed" +msgstr "Файли" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "" + +#: textbox.c:489 +#, fuzzy +msgid "Search" +msgstr "Search" Index: contrib/dialog/po/ku.po =================================================================== --- contrib/dialog/po/ku.po (revision 0) +++ contrib/dialog/po/ku.po (revision 0) @@ -0,0 +1,112 @@ +# Dialog +# Copyright 2003-2006,2007 # Thomas Dickey +# This file is distributed under the same license as the dialog package. +# +# Erdal Ronahi <erdal.ronahi@gmail.com>, 2008. +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20070704\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2008-04-25 16:51+0200\n" +"Last-Translator: Erdal Ronahi <erdal.ronahi@gmail.com>\n" +"Language-Team: Kurdish <translation-team-ku@ferheng.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KAider 0.1\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Erê" + +#: buttons.c:393 +msgid "No" +msgstr "Na" + +#: buttons.c:401 +msgid "OK" +msgstr "TEMAM" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Betal" + +#: buttons.c:417 +msgid "EXIT" +msgstr "DERKETIN" + +#: buttons.c:425 +msgid "Extra" +msgstr "Ekstra" + +#: buttons.c:433 +msgid "Help" +msgstr "Alîkarî" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Meh" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Sal" + +#: dialog.c:741 +msgid "Rename" +msgstr "Nav guherandin" + +#: fselect.c:550 +msgid "Directories" +msgstr "Peldank" + +#: fselect.c:551 +msgid "Files" +msgstr "Pel" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "Biserket" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Biserneket" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "Derbas bû" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "Temamkirî" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Kontrolkirî" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Xelas" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Derbaskirî" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "Didome" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "Tune" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Pêşketina GiÅŸtî" + +#: textbox.c:489 +msgid "Search" +msgstr "Lêgerîn" Index: contrib/dialog/po/ms.po =================================================================== --- contrib/dialog/po/ms.po (revision 0) +++ contrib/dialog/po/ms.po (revision 0) @@ -0,0 +1,109 @@ +# Dialog Bahasa Melayu (Malay) (ms) +# Copyright 2003,2004 # Thomas Dickey +# Sharuzzaman Ahmat Raslan <sharuzzaman@myrealbox.com>, 2005, 2006, 2007 +# +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20070704\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2007-08-14 01:22+0800\n" +"Last-Translator: Sharuzzaman Ahmat Raslan <sharuzzaman@myrealbox.com>\n" +"Language-Team: Malay <translation-team-ms@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Ya" + +#: buttons.c:393 +msgid "No" +msgstr "Tidak" + +#: buttons.c:401 +msgid "OK" +msgstr "OK" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Batal" + +#: buttons.c:417 +msgid "EXIT" +msgstr "KELUAR" + +#: buttons.c:425 +msgid "Extra" +msgstr "Ekstra" + +#: buttons.c:433 +msgid "Help" +msgstr "Bantuan" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Bulan" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Tahun" + +#: dialog.c:741 +msgid "Rename" +msgstr "Tukar nama" + +#: fselect.c:550 +msgid "Directories" +msgstr "Direktori" + +#: fselect.c:551 +msgid "Files" +msgstr "Fail" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "Berjaya" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Gagal" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "Lulus" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "Selesai" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Diperiksa" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Selesai" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Dilangkau" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "Sedang Dilaksanakan" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "Tiada" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Kemajuan Keseluruhan" + +#: textbox.c:489 +msgid "Search" +msgstr "Cari" Index: contrib/dialog/po/ro.po =================================================================== --- contrib/dialog/po/ro.po (revision 0) +++ contrib/dialog/po/ro.po (revision 0) @@ -0,0 +1,114 @@ +# Mesajele în limba română pentru dialog. +# Copyright (C) 2003 Free Software Foundation, Inc. +# Acest fiÅŸier este distribuit sub aceeaÅŸi licenţă ca ÅŸi pachetul dialog. +# Laurentiu Buzdugan <lbuz@rolix.org>, 2005. +# +# +# +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.0-rel20041222\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-07-20 14:31-0400\n" +"PO-Revision-Date: 2005-01-20 12:00-0500\n" +"Last-Translator: Laurentiu Buzdugan <lbuz@rolix.org>\n" +"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Da" + +#: buttons.c:393 +msgid "No" +msgstr "Nu" + +#: buttons.c:401 +msgid "OK" +msgstr "OK" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Renunţă" + +#: buttons.c:417 +msgid "EXIT" +msgstr "TERMINÄ‚" + +#: buttons.c:425 +msgid "Extra" +msgstr "Extra" + +#: buttons.c:433 +msgid "Help" +msgstr "Ajutor" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Luna" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "An" + +#: dialog.c:744 +msgid "Rename" +msgstr "RedenumeÅŸte" + +#: fselect.c:550 +msgid "Directories" +msgstr "Directoare" + +#: fselect.c:551 +msgid "Files" +msgstr "FiÅŸiere" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "" + +#: mixedgauge.c:61 +#, fuzzy +msgid "Failed" +msgstr "FiÅŸiere" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "" + +#: textbox.c:489 +msgid "Search" +msgstr "Căutare" Index: contrib/dialog/po/dialog.pot =================================================================== --- contrib/dialog/po/dialog.pot (revision 0) +++ contrib/dialog/po/dialog.pot (revision 0) @@ -0,0 +1,109 @@ +# Dialog +# Copyright 2003-2007,2008 # Thomas Dickey +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20080316\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "" + +#: buttons.c:393 +msgid "No" +msgstr "" + +#: buttons.c:401 +msgid "OK" +msgstr "" + +#: buttons.c:409 +msgid "Cancel" +msgstr "" + +#: buttons.c:417 +msgid "EXIT" +msgstr "" + +#: buttons.c:425 +msgid "Extra" +msgstr "" + +#: buttons.c:433 +msgid "Help" +msgstr "" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "" + +#: dialog.c:741 +msgid "Rename" +msgstr "" + +#: fselect.c:550 +msgid "Directories" +msgstr "" + +#: fselect.c:551 +msgid "Files" +msgstr "" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "" + +#: textbox.c:489 +msgid "Search" +msgstr "" Index: contrib/dialog/po/sq.po =================================================================== --- contrib/dialog/po/sq.po (revision 0) +++ contrib/dialog/po/sq.po (revision 0) @@ -0,0 +1,110 @@ +# Albanian translation of Dialog. +# This file is distributed under the same license as the dialog package. +# Copyright (C) 2005 Thomas Dickey. +# Elian Myftiu <elian@lycos.com>, 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: Dialog 1.0-20050116\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2004-11-18 02:28+0100\n" +"Last-Translator: Elian Myftiu <elian@lycos.com>\n" +"Language-Team: Albanian <gnome-albanian-perkthyesit@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Po" + +#: buttons.c:393 +msgid "No" +msgstr "Jo" + +#: buttons.c:401 +msgid "OK" +msgstr "mirë" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Anullo" + +#: buttons.c:417 +msgid "EXIT" +msgstr "Dal" + +#: buttons.c:425 +msgid "Extra" +msgstr "" + +#: buttons.c:433 +msgid "Help" +msgstr "" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "" + +#: dialog.c:741 +msgid "Rename" +msgstr "" + +#: fselect.c:550 +msgid "Directories" +msgstr "" + +#: fselect.c:551 +msgid "Files" +msgstr "" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "" + +#: textbox.c:489 +msgid "Search" +msgstr "" Index: contrib/dialog/po/ru.po =================================================================== --- contrib/dialog/po/ru.po (revision 0) +++ contrib/dialog/po/ru.po (revision 0) @@ -0,0 +1,114 @@ +# translation of dialog-1.1.20070704.ru.po to Russian +# Dialog +# Copyright 2003, # Thomas Dickey +# This file is distributed under the same license as the dialog package. +# +# Leonid Kanter <leon@asplinux.ru>, 2004. +# Yuri Kozlov <yuray@komyakino.ru>, 2009. +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20070704\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-02-22 07:05-0500\n" +"PO-Revision-Date: 2009-01-24 23:09+0300\n" +"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n" +"Language-Team: Russian <gnu@mx.ru>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Да" + +#: buttons.c:393 +msgid "No" +msgstr "Ðет" + +#: buttons.c:401 +msgid "OK" +msgstr "OK" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Отмена" + +#: buttons.c:417 +msgid "EXIT" +msgstr "Выход" + +#: buttons.c:425 +msgid "Extra" +msgstr "Дополнительно" + +#: buttons.c:433 +msgid "Help" +msgstr "Справка" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "МеÑÑц" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Год" + +#: dialog.c:744 +msgid "Rename" +msgstr "Переименовать" + +#: fselect.c:550 +msgid "Directories" +msgstr "Каталоги" + +#: fselect.c:551 +msgid "Files" +msgstr "Файлы" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "УÑпешно" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Ðеудачно" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "Пройдено" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "Завершено" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Проверено" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Выполнено" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Пропущено" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "ВыполнÑетÑÑ" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "Ð/Д" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Ð’Ñего выполнено" + +#: textbox.c:489 +msgid "Search" +msgstr "ПоиÑк" Index: contrib/dialog/po/rw.po =================================================================== --- contrib/dialog/po/rw.po (revision 0) +++ contrib/dialog/po/rw.po (revision 0) @@ -0,0 +1,126 @@ +# translation of dialog to Kinyarwanda. +# Copyright (C) 2005 Free Software Foundation, Inc. +# This file is distributed under the same license as the dialog package. +# Steve Murphy <murf@e-tools.com>, 2005. +# Steve performed initial rough translation from compendium built from translations provided by the following translators: +# Philibert Ndandali <ndandali@yahoo.fr>, 2005. +# Viateur MUGENZI <muvia1@yahoo.fr>, 2005. +# Noëlla Mupole <s24211045@tuks.co.za>, 2005. +# Carole Karema <karemacarole@hotmail.com>, 2005. +# JEAN BAPTISTE NGENDAHAYO <ngenda_denis@yahoo.co.uk>, 2005. +# Augustin KIBERWA <akiberwa@yahoo.co.uk>, 2005. +# Donatien NSENGIYUMVA <ndonatienuk@yahoo.co.uk>, 2005. +# Antoine Bigirimana <antoine@e-tools.com>, 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.0-rel20041222\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2005-04-04 10:55-0700\n" +"Last-Translator: Steven Michael Murphy <murf@e-tools.com>\n" +"Language-Team: Kinyarwanda <translation-team-rw@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Yego" + +#: buttons.c:393 +msgid "No" +msgstr "Oya" + +#: buttons.c:401 +msgid "OK" +msgstr "OKE" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Kureka" + +# #-#-#-#-# setup2.pot (PACKAGE VERSION) #-#-#-#-# +# setup2/source\ui\app.src:STR_RESTART_BTN_NO.text +# #-#-#-#-# setup2.pot (PACKAGE VERSION) #-#-#-#-# +# setup2/source\ui\pages\phavefun.src:RESID_PAGE_PAGEHAVEFUN.STR_LOGOUT_BTN_NO.text +#: buttons.c:417 +#, fuzzy +msgid "EXIT" +msgstr "Gusohoka" + +#: buttons.c:425 +#, fuzzy +msgid "Extra" +msgstr "Birenga" + +#: buttons.c:433 +msgid "Help" +msgstr "Gufasha" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Ukwezi" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Umwaka" + +#: dialog.c:741 +msgid "Rename" +msgstr "Guhindura izina" + +#: fselect.c:550 +msgid "Directories" +msgstr "ububiko bw'amaderese" + +#: fselect.c:551 +msgid "Files" +msgstr "amadosiye" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "" + +#: mixedgauge.c:61 +#, fuzzy +msgid "Failed" +msgstr "amadosiye" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "" + +#: textbox.c:489 +msgid "Search" +msgstr "Gushaka" Index: contrib/dialog/po/sw.po =================================================================== --- contrib/dialog/po/sw.po (revision 0) +++ contrib/dialog/po/sw.po (revision 0) @@ -0,0 +1,110 @@ +# Dialog +# Copyright 2003-2007,2008 # Thomas Dickey +# This file is distributed under the same license as the dialog package. +# Emanuel Feruzi <emanuel.feruzi@trilabs.co.tz>, 2009 +# +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20080819\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2009-05-01 03:07+0300\n" +"Last-Translator: Emanuel Feruzi <emanuel.feruzi@trilabs.co.tz>\n" +"Language-Team: Swahili <translation-team-sw@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Ndio" + +#: buttons.c:393 +msgid "No" +msgstr "Hapana" + +#: buttons.c:401 +msgid "OK" +msgstr "Sawa" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Ghahiri" + +#: buttons.c:417 +msgid "EXIT" +msgstr "Funga" + +#: buttons.c:425 +msgid "Extra" +msgstr "Nyongeza" + +#: buttons.c:433 +msgid "Help" +msgstr "Msaada" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Mwezi" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Mwaka" + +#: dialog.c:741 +msgid "Rename" +msgstr "Badili jina" + +#: fselect.c:550 +msgid "Directories" +msgstr "Masaraka" + +#: fselect.c:551 +msgid "Files" +msgstr "Mafaili" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "Inefanikiwa" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Imeshindwa" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "Imepita" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "Imekamilika" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Imetikiwa" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Imemaliza" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Imerukwa" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "Inaendelea" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "Haitumiki" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Maendeleo kwa ujumla" + +#: textbox.c:489 +msgid "Search" +msgstr "Tafuta" Index: contrib/dialog/po/id.po =================================================================== --- contrib/dialog/po/id.po (revision 0) +++ contrib/dialog/po/id.po (revision 0) @@ -0,0 +1,110 @@ +# Indonesian translations for dialog package. +# Copyright 2003-2006,2007 # Thomas Dickey. +# This file is distributed under the same license as the dialog package. +# Andhika Padmawan <andhika.padmawan@gmail.com>, 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20080819\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-03-29 19:30-0400\n" +"PO-Revision-Date: 2008-07-21 13:40+0700\n" +"Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n" +"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Ya" + +#: buttons.c:393 +msgid "No" +msgstr "Tidak" + +#: buttons.c:401 +msgid "OK" +msgstr "OK" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Batal" + +#: buttons.c:417 +msgid "EXIT" +msgstr "KELUAR" + +#: buttons.c:425 +msgid "Extra" +msgstr "Ekstra" + +#: buttons.c:433 +msgid "Help" +msgstr "Bantuan" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Bulan" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Tahun" + +#: dialog.c:744 +msgid "Rename" +msgstr "Ganti Nama" + +#: fselect.c:550 +msgid "Directories" +msgstr "Kamus" + +#: fselect.c:551 +msgid "Files" +msgstr "Berkas" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "Sukses" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Gagal" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "Lulus" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "Selesai" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Diperiksa" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Selesai" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Dilewati" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "Dalam Proses" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "Tak Tersedia" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Keseluruhan Proses" + +#: textbox.c:489 +msgid "Search" +msgstr "Telusur" Index: contrib/dialog/po/nb.po =================================================================== --- contrib/dialog/po/nb.po (revision 0) +++ contrib/dialog/po/nb.po (revision 0) @@ -0,0 +1,108 @@ +# Dialog +# Copyright 2003-2006,2007 # Thomas Dickey +# Roy Hvaara <roy.hvaara@gmail.com>, 2008. +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20070704\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2008-03-24 14:00+0100\n" +"Last-Translator: Roy Hvaara <roy.hvaara@gmail.com>\n" +"Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Ja" + +#: buttons.c:393 +msgid "No" +msgstr "Nei" + +#: buttons.c:401 +msgid "OK" +msgstr "OK" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Avbryt" + +#: buttons.c:417 +msgid "EXIT" +msgstr "AVSLUTT" + +#: buttons.c:425 +msgid "Extra" +msgstr "Ekstra" + +#: buttons.c:433 +msgid "Help" +msgstr "Hjelp" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "MÃ¥ned" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Ã…r" + +#: dialog.c:741 +msgid "Rename" +msgstr "Endre navn" + +#: fselect.c:550 +msgid "Directories" +msgstr "Mapper" + +#: fselect.c:551 +msgid "Files" +msgstr "Filer" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "Vellykktes" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Feilet" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "BestÃ¥tt" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "Fullført" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Kontrollert" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Ferdig" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Ignorert" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "I gang" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "-" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Total fremdrift" + +#: textbox.c:489 +msgid "Search" +msgstr "Søk" Index: contrib/dialog/po/el.po =================================================================== --- contrib/dialog/po/el.po (revision 0) +++ contrib/dialog/po/el.po (revision 0) @@ -0,0 +1,107 @@ +msgid "" +msgstr "" +"Project-Id-Version: Dialog\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2002-06-05 10:00GMT+2\n" +"Last-Translator: kromJx <kromJx@crosswinds.net>\n" +"Language-Team: <i18ngr@hellug.gr>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Îαι" + +#: buttons.c:393 +msgid "No" +msgstr "Όχι" + +#: buttons.c:401 +msgid "OK" +msgstr "OK" + +#: buttons.c:409 +msgid "Cancel" +msgstr "ΆκυÏο" + +#: buttons.c:417 +msgid "EXIT" +msgstr "Έξοδος" + +#: buttons.c:425 +msgid "Extra" +msgstr "" + +#: buttons.c:433 +msgid "Help" +msgstr "Βοήθεια" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Μήνας" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Έτος" + +#: dialog.c:741 +msgid "Rename" +msgstr "" + +#: fselect.c:550 +msgid "Directories" +msgstr "Φάκελοι" + +#: fselect.c:551 +msgid "Files" +msgstr "ΑÏχεία" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "" + +#: mixedgauge.c:61 +#, fuzzy +msgid "Failed" +msgstr "ΑÏχεία" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "" + +#: textbox.c:489 +#, fuzzy +msgid "Search" +msgstr "Search" Index: contrib/dialog/po/ar.po =================================================================== --- contrib/dialog/po/ar.po (revision 0) +++ contrib/dialog/po/ar.po (revision 0) @@ -0,0 +1,111 @@ +# Arabic translation of Dialog. +# This file is distributed under the same license as the dialog package. +# Copyright (C) 2005 Thomas Dickey. +# Abdulaziz Al-Arfaj <alarfaj0@yahoo.com>, 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: Dialog 1.0-20050116\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2004-07-21 00:22+0300\n" +"Last-Translator: Abdulaziz Al-Arfaj <alarfaj0@yahoo.com>\n" +"Language-Team: Arabic <support@arabeyes.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.3\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "نعم" + +#: buttons.c:393 +msgid "No" +msgstr "لا" + +#: buttons.c:401 +msgid "OK" +msgstr "مواÙÙ‚" + +#: buttons.c:409 +msgid "Cancel" +msgstr "إلغاء" + +#: buttons.c:417 +msgid "EXIT" +msgstr "" + +#: buttons.c:425 +msgid "Extra" +msgstr "" + +#: buttons.c:433 +msgid "Help" +msgstr "" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "" + +#: dialog.c:741 +msgid "Rename" +msgstr "" + +#: fselect.c:550 +msgid "Directories" +msgstr "" + +#: fselect.c:551 +msgid "Files" +msgstr "" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "" + +#: textbox.c:489 +msgid "Search" +msgstr "" Index: contrib/dialog/po/gl.po =================================================================== --- contrib/dialog/po/gl.po (revision 0) +++ contrib/dialog/po/gl.po (revision 0) @@ -0,0 +1,110 @@ +# This file is distributed under the same license as the dialog package. +# Mensaxes en galego para dialog. +# Copyright 2003-2006,2007 Thomas Dickey +# Diego Pérez Montes <kabute@gulo.org>, 2008 +# +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20070704\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2008-05-13 23:57+0100\n" +"Last-Translator: Diego Pérez Montes <kabute@gulo.org>\n" +"Language-Team: Galician <proxecto@trasno.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Sí" + +#: buttons.c:393 +msgid "No" +msgstr "Non" + +#: buttons.c:401 +msgid "OK" +msgstr "Aceptar" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Cancelar" + +#: buttons.c:417 +msgid "EXIT" +msgstr "SAÃR" + +#: buttons.c:425 +msgid "Extra" +msgstr "Suplementario" + +#: buttons.c:433 +msgid "Help" +msgstr "Axuda" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Mes" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Ano" + +#: dialog.c:741 +msgid "Rename" +msgstr "Renomear" + +#: fselect.c:550 +msgid "Directories" +msgstr "Directorios" + +#: fselect.c:551 +msgid "Files" +msgstr "Ficheiros" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "Conseguido" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Fallou" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "Correcto" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "Completado" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Seleccionado" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Feito" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Omitido" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "En Progreso" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "Non Dispoñible" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Progreso Total" + +#: textbox.c:489 +msgid "Search" +msgstr "Procurar" Index: contrib/dialog/po/fr.po =================================================================== --- contrib/dialog/po/fr.po (revision 0) +++ contrib/dialog/po/fr.po (revision 0) @@ -0,0 +1,110 @@ +# French translation of Dialog. +# Copyright (C) 2001 Thomas Dickey. +# Frédéric L. W. Meunier <0 @ pervalidus.net>, 2001. +# François-Xavier Coudert <fxcoudert@gmail.com>, 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20070704\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2008-03-28 23:14+0000\n" +"Last-Translator: François-Xavier Coudert <fxcoudert@gmail.com>\n" +"Language-Team: French <traduc@traduc.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Oui" + +#: buttons.c:393 +msgid "No" +msgstr "Non" + +#: buttons.c:401 +msgid "OK" +msgstr "Accepter" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Annuler" + +#: buttons.c:417 +msgid "EXIT" +msgstr "SORTIR" + +#: buttons.c:425 +msgid "Extra" +msgstr "Extra" + +#: buttons.c:433 +msgid "Help" +msgstr "Aide" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Mois" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Année" + +#: dialog.c:741 +msgid "Rename" +msgstr "Renommer" + +#: fselect.c:550 +msgid "Directories" +msgstr "Répertoires" + +#: fselect.c:551 +msgid "Files" +msgstr "Fichiers" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "Succès" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Échec" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "Passé" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "Terminé" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Vérifié" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Fini" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Ignoré" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "En cours" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "N/A" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Avancement général" + +#: textbox.c:489 +msgid "Search" +msgstr "Rechercher" Index: contrib/dialog/po/et.po =================================================================== --- contrib/dialog/po/et.po (revision 0) +++ contrib/dialog/po/et.po (revision 0) @@ -0,0 +1,110 @@ +# Dialog +# Copyright 2001, Thomas Dickey +# Copyright 2001, Ivar Smolin +msgid "" +msgstr "" +"Project-Id-Version: Dialog\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2001-09-08 00:05+0200\n" +"Last-Translator: Ivar Smolin <okul@linux.ee>\n" +"Language-Team: Estonian <et@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Jah" + +#: buttons.c:393 +msgid "No" +msgstr "Ei" + +#: buttons.c:401 +msgid "OK" +msgstr "OK" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Tühista" + +#: buttons.c:417 +msgid "EXIT" +msgstr "Lõpeta" + +#: buttons.c:425 +msgid "Extra" +msgstr "" + +#: buttons.c:433 +msgid "Help" +msgstr "" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Kuu" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Aasta" + +#: dialog.c:741 +msgid "Rename" +msgstr "" + +#: fselect.c:550 +msgid "Directories" +msgstr "Kataloogid" + +#: fselect.c:551 +msgid "Files" +msgstr "Failid" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "" + +#: mixedgauge.c:61 +#, fuzzy +msgid "Failed" +msgstr "Failid" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "" + +#: textbox.c:489 +#, fuzzy +msgid "Search" +msgstr "Otsingu" Index: contrib/dialog/po/nl.po =================================================================== --- contrib/dialog/po/nl.po (revision 0) +++ contrib/dialog/po/nl.po (revision 0) @@ -0,0 +1,112 @@ +# Translation of dialog-1.1.20070704 to Dutch. +# Copyright 2003-2006,2007 # Thomas Dickey +# +# Jacques Weewer <j.weewer_at_chello.nl>, 2004. +# Luk Claes <luk.claes@ugent.be>, 2005. +# Benno Schulenberg <benno@vertaalt.nl>, 2007. +msgid "" +msgstr "" +"Project-Id-Version: dialog-1.1.20070704\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2007-10-08 12:42+0200\n" +"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n" +"Language-Team: Dutch <vertaling@vrijschrift.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Ja" + +#: buttons.c:393 +msgid "No" +msgstr "Nee" + +#: buttons.c:401 +msgid "OK" +msgstr "OK" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Annuleren" + +#: buttons.c:417 +msgid "EXIT" +msgstr "Afsluiten" + +#: buttons.c:425 +msgid "Extra" +msgstr "Extra" + +#: buttons.c:433 +msgid "Help" +msgstr "Help" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Maand" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Jaar" + +#: dialog.c:741 +msgid "Rename" +msgstr "Hernoemen" + +#: fselect.c:550 +msgid "Directories" +msgstr "Mappen" + +#: fselect.c:551 +msgid "Files" +msgstr "Bestanden" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "Gelukt" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Mislukt" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "Geslaagd" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "Voltooid" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Gecontroleerd" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Klaar" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Overgeslagen" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "Bezig" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "Onbeschikbaar" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Voortgang" + +#: textbox.c:489 +msgid "Search" +msgstr "Zoeken" Index: contrib/dialog/po/hr.po =================================================================== --- contrib/dialog/po/hr.po (revision 0) +++ contrib/dialog/po/hr.po (revision 0) @@ -0,0 +1,109 @@ +# Croatian translation of Dialog. +# This file is distributed under the same license as the dialog package. +# Copyright (C) 2005 Thomas Dickey. +# +msgid "" +msgstr "" +"Project-Id-Version: Dialog 1.0-20050116\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2004-07-25 14:52+0200\n" +"Last-Translator: Krunoslav Gernhard <kruno@linux.hr>\n" +"Language-Team: Croatian <lokalizacija@linux.hr>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Da" + +#: buttons.c:393 +msgid "No" +msgstr "Ne" + +#: buttons.c:401 +msgid "OK" +msgstr "U redu" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Otkaži" + +#: buttons.c:417 +msgid "EXIT" +msgstr "" + +#: buttons.c:425 +msgid "Extra" +msgstr "" + +#: buttons.c:433 +msgid "Help" +msgstr "" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "" + +#: dialog.c:741 +msgid "Rename" +msgstr "" + +#: fselect.c:550 +msgid "Directories" +msgstr "" + +#: fselect.c:551 +msgid "Files" +msgstr "" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "" + +#: textbox.c:489 +msgid "Search" +msgstr "" Index: contrib/dialog/po/th.po =================================================================== --- contrib/dialog/po/th.po (revision 0) +++ contrib/dialog/po/th.po (revision 0) @@ -0,0 +1,111 @@ +# Dialog +# Copyright 2003-2006,2007 # Thomas Dickey +# Seksan Poltree <seksan.poltree@gmail.com>, 2007. +# +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20070704\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2007-11-22 19:23+0700\n" +"Last-Translator: Seksan Poltree <seksan.poltree@gmail.com>\n" +"Language-Team: Thai <seksan.poltree@gmail.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Thai\n" +"X-Poedit-Country: THAILAND\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "ใช่" + +#: buttons.c:393 +msgid "No" +msgstr "ไม่" + +#: buttons.c:401 +msgid "OK" +msgstr "ตà¸à¸¥à¸‡" + +#: buttons.c:409 +msgid "Cancel" +msgstr "ยà¸à¹€à¸¥à¸´à¸" + +#: buttons.c:417 +msgid "EXIT" +msgstr "ออà¸" + +#: buttons.c:425 +msgid "Extra" +msgstr "เพิ่มเติม" + +#: buttons.c:433 +msgid "Help" +msgstr "ช่วยเหลือ" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "เดือน" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "ปี" + +#: dialog.c:741 +msgid "Rename" +msgstr "เปลี่ยนชื่อ" + +#: fselect.c:550 +msgid "Directories" +msgstr "ไดเร็à¸à¸—อรี่" + +#: fselect.c:551 +msgid "Files" +msgstr "ไฟล์" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "สำเร็จ" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "ล้มเหลว" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "ผ่าน" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "เสร็จสิ้น" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "à¸à¸²à¹€à¸„รื่องหมาย" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "เรียบร้อย" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "ข้าม" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "à¸à¸³à¸¥à¸±à¸‡à¸”ำเนินà¸à¸²à¸£" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "ไม่มีอยู่" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "ความà¸à¹‰à¸²à¸§à¸«à¸™à¹‰à¸²à¸—ั้งสิ้น" + +#: textbox.c:489 +msgid "Search" +msgstr "ค้นหา" Index: contrib/dialog/po/pl.po =================================================================== --- contrib/dialog/po/pl.po (revision 0) +++ contrib/dialog/po/pl.po (revision 0) @@ -0,0 +1,112 @@ +# translation of dialog.po to Polish +# This file is distributed under the same license as the dialog package. +# Jaroslaw Swierczynski <swiergot@intersec.pl>, 2003 +# MichaÅ‚ Trzebiatowski <hippie_1968@hotmail.com>, 2009 +# +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20080819\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-03-29 19:30-0400\n" +"PO-Revision-Date: 2009-03-11 10:32+0100\n" +"Last-Translator: MichaÅ‚ Trzebiatowski <hippie_1968@hotmail.com>\n" +"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Polish\n" +"X-Poedit-Country: POLAND\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Tak" + +#: buttons.c:393 +msgid "No" +msgstr "Nie" + +#: buttons.c:401 +msgid "OK" +msgstr "OK" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Anuluj" + +#: buttons.c:417 +msgid "EXIT" +msgstr "WYJDŹ" + +#: buttons.c:425 +msgid "Extra" +msgstr "Ekstra" + +#: buttons.c:433 +msgid "Help" +msgstr "Pomoc" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "MiesiÄ…c" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Rok" + +#: dialog.c:744 +msgid "Rename" +msgstr "ZmieÅ„ nazwÄ™" + +#: fselect.c:550 +msgid "Directories" +msgstr "Katalogi" + +#: fselect.c:551 +msgid "Files" +msgstr "Pliki" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "Udane" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Niepowodzone" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "PrzeszÅ‚e" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "ZakoÅ„czone" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Sprawdzone" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Gotowe" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "PominiÄ™te" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "W toku" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "Brak" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Ogólny postÄ™p" + +#: textbox.c:489 +msgid "Search" +msgstr "Szukaj" Index: contrib/dialog/po/it.po =================================================================== --- contrib/dialog/po/it.po (revision 0) +++ contrib/dialog/po/it.po (revision 0) @@ -0,0 +1,111 @@ +# Italian messages for dialog. +# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. +# This file is distributed under the same license as the dialog package. +# Marco Colombo <m.colombo@ed.ac.uk>, 2005, 2007. +# Marco Mariani <marcom@sferacarta.com>, 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20070704\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2007-08-06 15:47+0100\n" +"Last-Translator: Marco Colombo <m.colombo@ed.ac.uk>\n" +"Language-Team: Italian <tp@lists.linux.it>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Sì" + +#: buttons.c:393 +msgid "No" +msgstr "No" + +#: buttons.c:401 +msgid "OK" +msgstr "OK" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Annulla" + +#: buttons.c:417 +msgid "EXIT" +msgstr "Esci" + +#: buttons.c:425 +msgid "Extra" +msgstr "Extra" + +#: buttons.c:433 +msgid "Help" +msgstr "Aiuto" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Mese" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Anno" + +#: dialog.c:741 +msgid "Rename" +msgstr "Rinomina" + +#: fselect.c:550 +msgid "Directories" +msgstr "Cartelle" + +#: fselect.c:551 +msgid "Files" +msgstr "File" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "Riuscito" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Fallito" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "Superato" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "Completato" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Controllato" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Fatto" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Saltato" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "In corso" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "N/A" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Progresso complessivo" + +#: textbox.c:489 +msgid "Search" +msgstr "Ricerca" Index: contrib/dialog/po/lt.po =================================================================== --- contrib/dialog/po/lt.po (revision 0) +++ contrib/dialog/po/lt.po (revision 0) @@ -0,0 +1,111 @@ +# translation of dialog-1.1.20070704 to Lithuanian +# This file is distributed under the same license as the dialog package. +# +# Gintautas Miliauskas <gintas@akl.lt>, 2008. +msgid "" +msgstr "" +"Project-Id-Version: dialog-1.1.20070704\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2008-05-14 02:51+0300\n" +"Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n" +"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Taip" + +#: buttons.c:393 +msgid "No" +msgstr "Ne" + +#: buttons.c:401 +msgid "OK" +msgstr "OK" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Atmesti" + +#: buttons.c:417 +msgid "EXIT" +msgstr "IÅ EITI" + +#: buttons.c:425 +msgid "Extra" +msgstr "Papildoma" + +#: buttons.c:433 +msgid "Help" +msgstr "Žinynas" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "MÄ—nuo" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Metai" + +#: dialog.c:741 +msgid "Rename" +msgstr "Pervadinti" + +#: fselect.c:550 +msgid "Directories" +msgstr "Aplankai" + +#: fselect.c:551 +msgid "Files" +msgstr "Failai" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "SÄ—kminga" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "NesÄ—kminga" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "PraÄ—jo" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "Baigta" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Patikrinta" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Baigta" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "PerÅ¡okta" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "Vykdoma" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "N/d" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Bendras progresas" + +#: textbox.c:489 +msgid "Search" +msgstr "IeÅ¡koti" Index: contrib/dialog/po/lv.po =================================================================== --- contrib/dialog/po/lv.po (revision 0) +++ contrib/dialog/po/lv.po (revision 0) @@ -0,0 +1,113 @@ +# Dialog +# Copyright 2003-2007,2008 # Thomas Dickey +# +# This file is distributed under the same license as the dialog package. +# +# Rihards Prieditis <RPrieditis@inbox.lv>, 2009. +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20080819\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2009-04-11 20:50+0300\n" +"Last-Translator: Rihards Prieditis <RPrieditis@inbox.lv>\n" +"Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "JÄ" + +#: buttons.c:393 +msgid "No" +msgstr "NÄ“" + +#: buttons.c:401 +msgid "OK" +msgstr "Labi" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Atcelt" + +#: buttons.c:417 +msgid "EXIT" +msgstr "IZIET" + +#: buttons.c:425 +msgid "Extra" +msgstr "Papildus" + +#: buttons.c:433 +msgid "Help" +msgstr "PalÄ«dzÄ«ba" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "MÄ“nesis" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Gads" + +#: dialog.c:741 +msgid "Rename" +msgstr "PÄrdÄ“vÄ“t" + +#: fselect.c:550 +msgid "Directories" +msgstr "Direktorijas" + +#: fselect.c:551 +msgid "Files" +msgstr "Faili" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "Izdevies" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Neizdevies" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "Iziets" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "Pabeigts" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "PÄrbaudÄ«ts" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Pabeigts" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Izlaists" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "Tiek apstrÄdÄts" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "n/z" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "VispÄrÄ“jais progress" + +#: textbox.c:489 +msgid "Search" +msgstr "MeklÄ“t" Index: contrib/dialog/po/ca.po =================================================================== --- contrib/dialog/po/ca.po (revision 0) +++ contrib/dialog/po/ca.po (revision 0) @@ -0,0 +1,110 @@ +# Catalan translation of Dialog. +# Copyright © 2004, 2005, 2008 Free Software Foundation, Inc. +# This file is distributed under the same licence as the dialog package. +# Jordi Mallach <jordi@debian.org>, 2004, 2005, 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20070704\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-07-20 14:31-0400\n" +"PO-Revision-Date: 2008-06-10 00:50+0200\n" +"Last-Translator: Jordi Mallach <jordi@gnu.org>\n" +"Language-Team: Catalan <ca@dodds.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Sí" + +#: buttons.c:393 +msgid "No" +msgstr "No" + +#: buttons.c:401 +msgid "OK" +msgstr "D'acord" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Cancel·la" + +#: buttons.c:417 +msgid "EXIT" +msgstr "SURT" + +#: buttons.c:425 +msgid "Extra" +msgstr "Extra" + +#: buttons.c:433 +msgid "Help" +msgstr "Ajuda" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Mes" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Any" + +#: dialog.c:744 +msgid "Rename" +msgstr "Canvia el nom" + +#: fselect.c:550 +msgid "Directories" +msgstr "Directoris" + +#: fselect.c:551 +msgid "Files" +msgstr "Fitxers" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "Ha tingut èxit" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Ha fallat" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "Ha passat" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "S'ha completat" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Activat" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Fet" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Omès" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "En progrés" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "N/D" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Progrés general" + +#: textbox.c:489 +msgid "Search" +msgstr "Cerca" Index: contrib/dialog/po/pt.po =================================================================== --- contrib/dialog/po/pt.po (revision 0) +++ contrib/dialog/po/pt.po (revision 0) @@ -0,0 +1,111 @@ +# Portuguese translation of Dialog. +# Copyright (C) 2001 Thomas Dickey. +# Frédéric L. W. Meunier <0 @ pervalidus.net>, 2001. +# +msgid "" +msgstr "" +"Project-Id-Version: Dialog 0.9a-20020814\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2002-09-04 19:12-0300\n" +"Last-Translator: Frédéric L. W. Meunier <0 @ pervalidus.net>\n" +"Language-Team: Portuguese <pt @ li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Sim" + +#: buttons.c:393 +msgid "No" +msgstr "Não" + +#: buttons.c:401 +msgid "OK" +msgstr "Aceitar" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Cancelar" + +#: buttons.c:417 +msgid "EXIT" +msgstr "Sair" + +#: buttons.c:425 +msgid "Extra" +msgstr "" + +#: buttons.c:433 +msgid "Help" +msgstr "Ajuda" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Mês" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Ano" + +#: dialog.c:741 +msgid "Rename" +msgstr "" + +#: fselect.c:550 +msgid "Directories" +msgstr "Directorias" + +#: fselect.c:551 +msgid "Files" +msgstr "Ficheiros" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "" + +#: mixedgauge.c:61 +#, fuzzy +msgid "Failed" +msgstr "Ficheiros" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "" + +#: textbox.c:489 +#, fuzzy +msgid "Search" +msgstr "Busca" Index: contrib/dialog/po/makefile.inn =================================================================== --- contrib/dialog/po/makefile.inn (revision 0) +++ contrib/dialog/po/makefile.inn (revision 0) @@ -0,0 +1,261 @@ +# Makefile for program source directory in GNU NLS utilities package. +# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu> +# +# This file may be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU Public License +# but which still want to provide support for the GNU gettext functionality. +# Please note that the actual code is *not* freely available. + +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ + +SHELL = /bin/sh +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +datadir = $(prefix)/@DATADIRNAME@ +localedir = $(datadir)/locale +gnulocaledir = $(prefix)/share/locale +gettextsrcdir = $(prefix)/share/gettext/po +subdir = po + +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +DESTDIR = @DESTDIR@ + +CC = @CC@ +GENCAT = @GENCAT@ +GMSGFMT = PATH=../src:$$PATH @GMSGFMT@ +MSGFMT = @MSGFMT@ +XGETTEXT = PATH=../src:$$PATH @XGETTEXT@ +MSGMERGE = PATH=../src:$$PATH msgmerge + +DEFS = @DEFS@ +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ + +INCLUDES = -I.. -I$(top_srcdir)/intl + +COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) + +SOURCES = @INTLDIR_MAKE@ cat-id-tbl.c +POFILES = @POFILES@ +GMOFILES = @GMOFILES@ +DISTFILES = ChangeLog makefile.inn POTFILES.in $(PACKAGE).pot \ +stamp-cat-id $(POFILES) $(GMOFILES) $(SOURCES) + +POTFILES = \ + +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +INSTOBJEXT = @INSTOBJEXT@ + +.SUFFIXES: +.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat + +.c.o: + $(COMPILE) $< + +.po.pox: + $(MAKE) $(PACKAGE).pot + $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox + +.po.mo: + $(MSGFMT) -o $@ $< + +.po.gmo: + file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \ + && rm -f $$file && $(GMSGFMT) -o $$file $< + +.po.cat: + sed -f ../intl/po2msg.sed < $< > $*.msg \ + && rm -f $@ && $(GENCAT) $@ $*.msg + + +all: all-@USE_NLS@ + +all-yes: $(SOURCES) $(CATALOGS) +all-no: + +$(srcdir)/$(PACKAGE).pot: $(POTFILES) + $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \ + --add-comments --keyword=_ --keyword=N_ \ + --files-from=$(srcdir)/POTFILES.in \ + && test ! -f $(PACKAGE).po \ + || ( rm -f $(srcdir)/$(PACKAGE).pot \ + && mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot ) + +$(srcdir)/cat-id-tbl.c: stamp-cat-id; @: +$(srcdir)/stamp-cat-id: $(PACKAGE).pot + rm -f cat-id-tbl.tmp + sed -f ../intl/po2tbl.sed $(srcdir)/$(PACKAGE).pot \ + | sed -e "s/@PACKAGE NAME@/$(PACKAGE)/" > cat-id-tbl.tmp + if cmp -s cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; then \ + rm cat-id-tbl.tmp; \ + else \ + echo cat-id-tbl.c changed; \ + rm -f $(srcdir)/cat-id-tbl.c; \ + mv cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; \ + fi + cd $(srcdir) && rm -f stamp-cat-id && echo timestamp > stamp-cat-id + + +install install-full: install-exec install-data +install-exec: +install-data: install-data-@USE_NLS@ +install-data-no: all +install-data-yes: all + if test -r "$(MKINSTALLDIRS)"; then \ + $(MKINSTALLDIRS) $(DESTDIR)$(datadir); \ + else \ + mkdir -p $(DESTDIR)$(datadir); \ + fi + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + case "$$cat" in \ + *.gmo) destdir=$(gnulocaledir);; \ + *) destdir=$(localedir);; \ + esac; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + dir=$(DESTDIR)$$destdir/$$lang/LC_MESSAGES; \ + if test -r "$(MKINSTALLDIRS)"; then \ + $(MKINSTALLDIRS) $$dir; \ + else \ + mkdir -p $$dir; \ + fi; \ + if test -r $$cat; then \ + $(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ + echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \ + else \ + $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ + echo "installing $(srcdir)/$$cat as" \ + "$$dir/$(PACKAGE)$(INSTOBJEXT)"; \ + fi; \ + if test -r $$cat.m; then \ + $(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ + echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ + else \ + if test -r $(srcdir)/$$cat.m ; then \ + $(INSTALL_DATA) $(srcdir)/$$cat.m \ + $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ + echo "installing $(srcdir)/$$cat as" \ + "$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ + else \ + true; \ + fi; \ + fi; \ + done + if test "$(PACKAGE)" = "gettext"; then \ + if test -r "$(MKINSTALLDIRS)"; then \ + $(MKINSTALLDIRS) $(DESTDIR)$(gettextsrcdir); \ + else \ + mkdir -p $(DESTDIR)$(gettextsrcdir); \ + fi; \ + $(INSTALL_DATA) $(srcdir)/makefile.inn \ + $(DESTDIR)$(gettextsrcdir)/makefile.inn; \ + else \ + : ; \ + fi + +# Define this as empty until I find a useful application. +installcheck: + +uninstall: + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ + rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ + rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ + rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ + done + rm -f $(gettextsrcdir)/po-makefile.inn + +check: all + +cat-id-tbl.o: ../intl/libgettext.h + +dvi info tags TAGS ID: + +mostlyclean: + rm -f core core.* *.pox $(PACKAGE).po *.old.po cat-id-tbl.tmp + rm -fr *.o + +clean: mostlyclean + +distclean: clean + rm -f cat-id-tbl.c stamp-cat-id *.gmo + rm -f makefile makefile.in POTFILES *.mo *.msg *.cat *.cat.m + +maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + rm -f $(GMOFILES) + +distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) +dist distdir: update-po $(DISTFILES) + dists="$(DISTFILES)"; \ + for file in $$dists; do \ + ln $(srcdir)/$$file $(distdir) 2> /dev/null \ + || cp -p $(srcdir)/$$file $(distdir); \ + done + +# GNU msgfmt -C option can also check for X/Open compat. +check-po: + cd $(srcdir); \ + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + echo "$$lang:"; \ + $(MSGFMT) -f -c -v $$lang.po; \ + done + +update-po: makefile + $(MAKE) $(PACKAGE).pot + PATH=`pwd`/../src:$$PATH; \ + cd $(srcdir); \ + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + mv $$lang.po $$lang.old.po; \ + echo "$$lang:"; \ + if $(MSGMERGE) -w 132 $$lang.old.po $(PACKAGE).pot -o $$lang.po; then \ + rm -f $$lang.old.po; \ + else \ + echo "msgmerge for $$cat failed!"; \ + rm -f $$lang.po; \ + mv $$lang.old.po $$lang.po; \ + fi; \ + done + +POTFILES: POTFILES.in + ( if test 'x$(srcdir)' != 'x.'; then \ + posrcprefix='$(top_srcdir)/'; \ + else \ + posrcprefix="../"; \ + fi; \ + rm -f $@-t $@ \ + && (sed -e '/^#/d' -e '/^[ ]*$$/d' \ + -e "s@.*@ $$posrcprefix& \\\\@" < $(srcdir)/$@.in \ + | sed -e '$$s/\\$$//') > $@-t \ + && chmod a-w $@-t \ + && mv $@-t $@ ) + +makefile: makefile.inn ../config.status POTFILES + cd .. \ + && CONFIG_FILES=$(subdir)/$@.in:$(subdir)/$@.inn CONFIG_HEADERS= \ + $(SHELL) ./config.status + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: Index: contrib/dialog/po/sr.po =================================================================== --- contrib/dialog/po/sr.po (revision 0) +++ contrib/dialog/po/sr.po (revision 0) @@ -0,0 +1,110 @@ +# Serbian translation of `dialog'. +# Copyright (C) 2005 Free Software Foundation, Inc. +# This file is distributed under the same license as the `dialog' package. +# Aleksandar Jelenak <jelenak@verizon.net>, 2005. +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.0-rel20041222\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2005-08-21 12:53-0400\n" +"Last-Translator: Aleksandar Jelenak <jelenak@verizon.net>\n" +"Language-Team: Serbian <gnu@prevod.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Да" + +#: buttons.c:393 +msgid "No" +msgstr "Ðе" + +#: buttons.c:401 +msgid "OK" +msgstr "У реду" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Поништи" + +#: buttons.c:417 +msgid "EXIT" +msgstr "ИЗЛÐЗ" + +#: buttons.c:425 +msgid "Extra" +msgstr "Додатно" + +#: buttons.c:433 +msgid "Help" +msgstr "Помоћ" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "МеÑец" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Година" + +#: dialog.c:741 +msgid "Rename" +msgstr "Преименуј" + +#: fselect.c:550 +msgid "Directories" +msgstr "Директоријуми" + +#: fselect.c:551 +msgid "Files" +msgstr "Датотеке" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "" + +#: mixedgauge.c:61 +#, fuzzy +msgid "Failed" +msgstr "Датотеке" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "" + +#: textbox.c:489 +msgid "Search" +msgstr "Претрага" Index: contrib/dialog/po/da.po =================================================================== --- contrib/dialog/po/da.po (revision 0) +++ contrib/dialog/po/da.po (revision 0) @@ -0,0 +1,111 @@ +# Danish translation of Dialog. +# Copyright (C) 2001-2007 Thomas Dickey. +# This file is distributed under the same license as the Dialog package. +# Morten Brix Pedersen <morten@wtf.dk>, 2001-2004. +# Joe Hansen <joedalton2@yahoo.dk>, 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: dialog-1.1.20070704\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-02-22 07:05-0500\n" +"PO-Revision-Date: 2008-08-20 22:53+0200\n" +"Last-Translator: Keld Jørn Simonsen <keld@dkuug.dk>\n" +"Language-Team: Danish <dansk@dansk-gruppen.dk>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Ja" + +#: buttons.c:393 +msgid "No" +msgstr "Nej" + +#: buttons.c:401 +msgid "OK" +msgstr "O.K." + +#: buttons.c:409 +msgid "Cancel" +msgstr "Anullér" + +#: buttons.c:417 +msgid "EXIT" +msgstr "AFSLUT" + +#: buttons.c:425 +msgid "Extra" +msgstr "Ekstra" + +#: buttons.c:433 +msgid "Help" +msgstr "Hjælp" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "MÃ¥ned" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Ã…r" + +#: dialog.c:744 +msgid "Rename" +msgstr "Omdøb" + +#: fselect.c:550 +msgid "Directories" +msgstr "Kataloger" + +#: fselect.c:551 +msgid "Files" +msgstr "Filer" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "Lykkedes" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Mislykkedes" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "Bestod" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "Færdig" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Kontrolleret" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Færdig" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Sprunget over" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "I gang" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "N/A" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Samlet status" + +#: textbox.c:489 +msgid "Search" +msgstr "Søg" Index: contrib/dialog/po/tr.po =================================================================== --- contrib/dialog/po/tr.po (revision 0) +++ contrib/dialog/po/tr.po (revision 0) @@ -0,0 +1,112 @@ +# Turkish translation of dialog. +# Copyright (C) 2005 dialog GNU GPL: +# This file is distributed under the same license as the dialog package. +# Abdullah Ulas <potkal@bioinformatics.org>, 2005. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.0-rel20041222\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2005-04-08 18:29+0300\n" +"Last-Translator: Abdullah Ulas <potkal@bioinformatics.org>\n" +"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Evet" + +#: buttons.c:393 +msgid "No" +msgstr "Hayır" + +#: buttons.c:401 +msgid "OK" +msgstr "Tamam" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Ä°ptal" + +#: buttons.c:417 +msgid "EXIT" +msgstr "ÇIKIÅž" + +#: buttons.c:425 +msgid "Extra" +msgstr "Ekstra" + +#: buttons.c:433 +msgid "Help" +msgstr "Yardım" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Ay" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Yıl" + +#: dialog.c:741 +msgid "Rename" +msgstr "Yeniden adlandır" + +#: fselect.c:550 +msgid "Directories" +msgstr "Dizinler" + +#: fselect.c:551 +msgid "Files" +msgstr "Dosyalar" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "" + +#: mixedgauge.c:61 +#, fuzzy +msgid "Failed" +msgstr "Dosyalar" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "" + +#: textbox.c:489 +msgid "Search" +msgstr "Arama" Index: contrib/dialog/po/ga.po =================================================================== --- contrib/dialog/po/ga.po (revision 0) +++ contrib/dialog/po/ga.po (revision 0) @@ -0,0 +1,108 @@ +# Dialog +# Copyright 2003,2004 # Thomas Dickey +# Kevin Patrick Scannell <scannell@SLU.EDU>, 2005, 2007. +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20070704\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2007-07-20 11:57-0500\n" +"Last-Translator: Kevin Scannell <kscanne@gmail.com>\n" +"Language-Team: Irish <gaeilge-gnulinux@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Tá" + +#: buttons.c:393 +msgid "No" +msgstr "Níl" + +#: buttons.c:401 +msgid "OK" +msgstr "OK" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Cealaigh" + +#: buttons.c:417 +msgid "EXIT" +msgstr "SCOIR" + +#: buttons.c:425 +msgid "Extra" +msgstr "Breise" + +#: buttons.c:433 +msgid "Help" +msgstr "Cabhair" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Mí" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Bliain" + +#: dialog.c:741 +msgid "Rename" +msgstr "Athainmnigh" + +#: fselect.c:550 +msgid "Directories" +msgstr "Comhadlanna" + +#: fselect.c:551 +msgid "Files" +msgstr "Comhaid" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "D'éirigh leis" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Teipthe" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "Ceadaithe" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "Críochnaithe" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Deimhnithe" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Déanta" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Scipeáilte" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "Faoi Shiúl" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "N/A/F" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Dul Chun Cinn Iomlán" + +#: textbox.c:489 +msgid "Search" +msgstr "Cuardaigh" Index: contrib/dialog/po/sv.po =================================================================== --- contrib/dialog/po/sv.po (revision 0) +++ contrib/dialog/po/sv.po (revision 0) @@ -0,0 +1,109 @@ +# Swedish translation of dialog. +# Copyright 2003,2004,2005, 2007 # Thomas Dickey +# Daniel Nylander <po@danielnylander.se>, 2005, 2007. +# +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20070704\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2007-07-23 00:02+0100\n" +"Last-Translator: Daniel Nylander <po@danielnylander.se>\n" +"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Ja" + +#: buttons.c:393 +msgid "No" +msgstr "Nej" + +#: buttons.c:401 +msgid "OK" +msgstr "OK" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Avbryt" + +#: buttons.c:417 +msgid "EXIT" +msgstr "AVSLUTA" + +#: buttons.c:425 +msgid "Extra" +msgstr "Extra" + +#: buttons.c:433 +msgid "Help" +msgstr "Hjälp" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "MÃ¥nad" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Ã…r" + +#: dialog.c:741 +msgid "Rename" +msgstr "Byt namn" + +#: fselect.c:550 +msgid "Directories" +msgstr "Kataloger" + +#: fselect.c:551 +msgid "Files" +msgstr "Filer" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "Lyckades" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Misslyckades" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "Klarades" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "Färdig" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Kontrollerad" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Klar" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Hoppades över" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "PÃ¥gÃ¥r" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "Inte tillgänglig" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Totalt förlopp" + +#: textbox.c:489 +msgid "Search" +msgstr "Sök" Index: contrib/dialog/po/bg.po =================================================================== --- contrib/dialog/po/bg.po (revision 0) +++ contrib/dialog/po/bg.po (revision 0) @@ -0,0 +1,111 @@ +# Bulgarian translation of Dialog. +# This file is distributed under the same license as the dialog package. +# Copyright (C) 2005 Thomas Dickey. +# Ognyan Kulev <ogi@fmi.uni-sofia.bg>, 2004. +# +# +msgid "" +msgstr "" +"Project-Id-Version: Dialog 1.0-20050116\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2004-09-13 09:02+0300\n" +"Last-Translator: Ognyan Kulev <ogi@fmi.uni-sofia.bg>\n" +"Language-Team: Bulgarian <dict@linux.zonebg.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Да" + +#: buttons.c:393 +msgid "No" +msgstr "Ðе" + +#: buttons.c:401 +msgid "OK" +msgstr "" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Отказ" + +#: buttons.c:417 +msgid "EXIT" +msgstr "" + +#: buttons.c:425 +msgid "Extra" +msgstr "" + +#: buttons.c:433 +msgid "Help" +msgstr "" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "" + +#: dialog.c:741 +msgid "Rename" +msgstr "" + +#: fselect.c:550 +msgid "Directories" +msgstr "" + +#: fselect.c:551 +msgid "Files" +msgstr "" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "" + +#: textbox.c:489 +msgid "Search" +msgstr "" Index: contrib/dialog/po/de.po =================================================================== --- contrib/dialog/po/de.po (revision 0) +++ contrib/dialog/po/de.po (revision 0) @@ -0,0 +1,111 @@ +# Dialog +# Copyright 2001, # Thomas Dickey +# This file is distributed under the same license as the dialog package. +# +# Michael Piefel <piefel@informatik.hu-berlin.de>, 2002. +# Roland Illig <roland.illig@gmx.de>, 2009. +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20080819\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2009-11-08 23:48+0100\n" +"Last-Translator: Roland Illig <roland.illig@gmx.de>\n" +"Language-Team: German <translation-team-de@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Ja" + +#: buttons.c:393 +msgid "No" +msgstr "Nein" + +#: buttons.c:401 +msgid "OK" +msgstr "OK" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Abbrechen" + +#: buttons.c:417 +msgid "EXIT" +msgstr "VERLASSEN" + +#: buttons.c:425 +msgid "Extra" +msgstr "Extra" + +#: buttons.c:433 +msgid "Help" +msgstr "Hilfe" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Monat" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Jahr" + +#: dialog.c:741 +msgid "Rename" +msgstr "Bearbeiten" + +#: fselect.c:550 +msgid "Directories" +msgstr "Verzeichnisse" + +#: fselect.c:551 +msgid "Files" +msgstr "Dateien" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "Erfolgreich" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "Fehlgeschlagen" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "Bestanden" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "Abgeschlossen" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "Geprüft" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "Erledigt" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "Ãœbersprungen" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "In Bearbeitung" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "N/A" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Gesamtfortschritt" + +#: textbox.c:489 +msgid "Search" +msgstr "Suche" Index: contrib/dialog/po/ja.po =================================================================== --- contrib/dialog/po/ja.po (revision 0) +++ contrib/dialog/po/ja.po (revision 0) @@ -0,0 +1,111 @@ +# dialog Japanese po file. +# Copyright 2000, Thomas Dickey +# This file is distributed under the same license as the dialog package. +# Hirofumi Takeda <takepin@turbolinux.co.jp>, 2000. +# Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>, 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20070704\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-07-27 18:05-0400\n" +"PO-Revision-Date: 2008-07-24 00:12+0900\n" +"Last-Translator: Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>\n" +"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=EUC-JP\n" +"Content-Transfer-Encoding: 8bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "¤Ï¤¤" + +#: buttons.c:393 +msgid "No" +msgstr "¤¤¤¤¤¨" + +#: buttons.c:401 +msgid "OK" +msgstr "λ²ò" + +#: buttons.c:409 +msgid "Cancel" +msgstr "¼è¾Ã" + +#: buttons.c:417 +msgid "EXIT" +msgstr "½ªÎ»" + +#: buttons.c:425 +msgid "Extra" +msgstr "³ÈÄ¥" + +#: buttons.c:433 +msgid "Help" +msgstr "¥Ø¥ë¥×" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "·î" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "ǯ" + +#: dialog.c:744 +msgid "Rename" +msgstr "̾Á°Êѹ¹" + +#: fselect.c:550 +msgid "Directories" +msgstr "¥Ç¥£¥ì¥¯¥È¥ê" + +#: fselect.c:551 +msgid "Files" +msgstr "¥Õ¥¡¥¤¥ë" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "À®¸ù" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "¼ºÇÔ" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "¥Ñ¥¹" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "´°Î»" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "³Îǧ½ªÎ»" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "½ªÎ»" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "¥¹¥­¥Ã¥×" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "½èÍýÃæ" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "̵¸ú" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "Á´ÂΤοʹԾõ¶·" + +#: textbox.c:489 +msgid "Search" +msgstr "Ä´ºº" Index: contrib/dialog/po/zh_TW.po =================================================================== --- contrib/dialog/po/zh_TW.po (revision 0) +++ contrib/dialog/po/zh_TW.po (revision 0) @@ -0,0 +1,111 @@ +# Traditional Chinese Messages for dialog. +# Copyright (C) 2005 Free Software Foundation, Inc. +# This file is distributed under the same license as the dialog package. +# Wei-Lun Chao <chaoweilun@gmail.com>, 2005, 2007. +# +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20070704\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2007-12-19 23:39+0800\n" +"Last-Translator: Wei-Lun Chao <chaoweilun@gmail.com>\n" +"Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "是" + +#: buttons.c:393 +msgid "No" +msgstr "å¦" + +#: buttons.c:401 +msgid "OK" +msgstr "確定" + +#: buttons.c:409 +msgid "Cancel" +msgstr "å–消" + +#: buttons.c:417 +msgid "EXIT" +msgstr "離開" + +#: buttons.c:425 +msgid "Extra" +msgstr "其他" + +#: buttons.c:433 +msgid "Help" +msgstr "求助" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "月" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "å¹´" + +#: dialog.c:741 +msgid "Rename" +msgstr "æ›´å" + +#: fselect.c:550 +msgid "Directories" +msgstr "目錄" + +#: fselect.c:551 +msgid "Files" +msgstr "檔案" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "å·²æˆåŠŸ" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "已失敗" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "已傳éž" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "已完æˆ" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "已勾é¸" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "已完æˆ" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "已略éŽ" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "正在進行" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "ä¸æ˜Ž" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "整體進度" + +#: textbox.c:489 +msgid "Search" +msgstr "æœå°‹" Index: contrib/dialog/po/fi.po =================================================================== --- contrib/dialog/po/fi.po (revision 0) +++ contrib/dialog/po/fi.po (revision 0) @@ -0,0 +1,111 @@ +# Finnish translation for dialog. +# Copyright © 2005 Lauri Nurmi <lanurmi@iki.fi> +# This file is distributed under the same license as the dialog package. +# Lauri Nurmi <lanurmi@iki.fi>, 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.0-rel20041222\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2005-03-07 19:15+0200\n" +"Last-Translator: Lauri Nurmi <lanurmi@iki.fi>\n" +"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "Kyllä" + +#: buttons.c:393 +msgid "No" +msgstr "Ei" + +#: buttons.c:401 +msgid "OK" +msgstr "OK" + +#: buttons.c:409 +msgid "Cancel" +msgstr "Peru" + +#: buttons.c:417 +msgid "EXIT" +msgstr "Poistu" + +#: buttons.c:425 +msgid "Extra" +msgstr "Painike" + +#: buttons.c:433 +msgid "Help" +msgstr "Ohje" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "Kuukausi" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "Vuosi" + +#: dialog.c:741 +msgid "Rename" +msgstr "Nimeä" + +#: fselect.c:550 +msgid "Directories" +msgstr "Kansiot" + +#: fselect.c:551 +msgid "Files" +msgstr "Tiedostot" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "" + +#: mixedgauge.c:61 +#, fuzzy +msgid "Failed" +msgstr "Tiedostot" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "" + +#: textbox.c:489 +msgid "Search" +msgstr "Etsi" Index: contrib/dialog/po/hi.po =================================================================== --- contrib/dialog/po/hi.po (revision 0) +++ contrib/dialog/po/hi.po (revision 0) @@ -0,0 +1,112 @@ +# Hindi translation of Dialog. +# This file is distributed under the same license as the dialog package. +# +msgid "" +msgstr "" +"Project-Id-Version: dialog\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-18 18:26-0400\n" +"PO-Revision-Date: 2007-07-18 11:06+0200\n" +"Last-Translator: Deepika Mangla <deepika.mangla@gmail.com>\n" +"Language-Team: <elinks@knopper.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: 2\n" +"X-Poedit-Language: Hindi\n" +"X-Poedit-Country: INDIA\n" +"X-Generator: KBabel 1.11.4\n" + +#: buttons.c:385 +msgid "Yes" +msgstr "à€¹à€Ÿà€Â" + +#: buttons.c:393 +msgid "No" +msgstr "à€šà€¹à¥€à€‚" + +#: buttons.c:401 +msgid "OK" +msgstr "à€ à¥€à€•" + +#: buttons.c:409 +msgid "Cancel" +msgstr "à€°à€Šà¥Âà€Š à€•à€°à¥‡à€‚" + +#: buttons.c:417 +msgid "EXIT" +msgstr "à€šà€¿à€°à¥Âà€—à€®" + +#: buttons.c:425 +msgid "Extra" +msgstr "à€…à€€à€¿à€°à€¿à€•à¥Âà€€" + +#: buttons.c:433 +msgid "Help" +msgstr "à€®à€Šà€Š" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "à€®à€¹à¥€à€šà€Ÿ" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "à€µà€°à¥Âà€·" + +#: dialog.c:741 +msgid "Rename" +msgstr "à€ªà¥Âà€šà€ƒà€šà€Ÿà€®à€•à€°à€£" + +#: fselect.c:550 +msgid "Directories" +msgstr "à€šà€¿à€°à¥Âà€Šà¥‡à€¶à€¿à€•à€Ÿ" + +#: fselect.c:551 +msgid "Files" +msgstr "à€žà€‚à€šà€¿à€•à€Ÿ" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "à€žà€«à€²" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "à€žà€«à€²" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "à€ªà€Ÿà€ž" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "à€žà€®à¥Âà€ªà¥‚à€°à€¿à€€" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "à€…à€µà€°à¥Âà€Šà¥Âà€§" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "à€žà€«à€² " + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "à€›à¥‹à€¡à€Œ à€Šà€¿à€¯à€Ÿ" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "à€ªà¥Âà€°à€—à€€à€¿ à€®à¥‡à€‚ à€¹à¥ˆ" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "à€²à€Ÿà€—à¥‚ à€šà€¹à¥€à€‚" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "à€žà€®à€—à¥Âà€° à€ªà¥Âà€°à€—à€€à€¿" + +#: textbox.c:489 +msgid "Search" +msgstr "à€…à€šà¥Âà€žà€šà¥Âà€§à€Ÿà€š" Index: contrib/dialog/po/zh_CN.po =================================================================== --- contrib/dialog/po/zh_CN.po (revision 0) +++ contrib/dialog/po/zh_CN.po (revision 0) @@ -0,0 +1,111 @@ +# Simplified Chinese translation for dialog. +# Copyright 2003,2004 # Thomas Dickey +# This file is distributed under the same license as the dialog package. +# Meng Jie <zuxyhere@eastday.com>, 2005. +# LI Daobing <lidaobing@gmail.com>, 2007. +# +msgid "" +msgstr "" +"Project-Id-Version: dialog 1.1.20070704\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-02-25 16:06-0500\n" +"PO-Revision-Date: 2007-08-20 07:25+0800\n" +"Last-Translator: Meng Jie <zuxy.meng@gmail.com>\n" +"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: buttons.c:379 +msgid "Yes" +msgstr "是" + +#: buttons.c:387 +msgid "No" +msgstr "å¦" + +#: buttons.c:395 +msgid "OK" +msgstr "确认" + +#: buttons.c:403 +msgid "Cancel" +msgstr "å–消" + +#: buttons.c:411 +msgid "EXIT" +msgstr "退出" + +#: buttons.c:419 +msgid "Extra" +msgstr "附加" + +#: buttons.c:427 +msgid "Help" +msgstr "帮助" + +#. Headline "Month" +#: calendar.c:273 +msgid "Month" +msgstr "月" + +#. Headline "Year" +#: calendar.c:293 +msgid "Year" +msgstr "å¹´" + +#: dialog.c:727 +msgid "Rename" +msgstr "é‡å‘½å" + +#: fselect.c:548 +msgid "Directories" +msgstr "目录" + +#: fselect.c:549 +msgid "Files" +msgstr "文件" + +#: mixedgauge.c:58 +msgid "Succeeded" +msgstr "æˆåŠŸ" + +#: mixedgauge.c:61 +msgid "Failed" +msgstr "失败" + +#: mixedgauge.c:64 +msgid "Passed" +msgstr "已跳过" + +#: mixedgauge.c:67 +msgid "Completed" +msgstr "已完æˆ" + +#: mixedgauge.c:70 +msgid "Checked" +msgstr "已检查" + +#: mixedgauge.c:73 +msgid "Done" +msgstr "完æˆ" + +#: mixedgauge.c:76 +msgid "Skipped" +msgstr "跳过" + +#: mixedgauge.c:79 +msgid "In Progress" +msgstr "进行中" + +#: mixedgauge.c:85 +msgid "N/A" +msgstr "N/A" + +#: mixedgauge.c:193 +msgid "Overall Progress" +msgstr "整体进度" + +#: textbox.c:489 +msgid "Search" +msgstr "æœç´¢" Index: contrib/dialog/yesno.c =================================================================== --- contrib/dialog/yesno.c (revision 0) +++ contrib/dialog/yesno.c (revision 0) @@ -0,0 +1,164 @@ +/* + * $Id: yesno.c,v 1.49 2010/01/15 10:54:54 tom Exp $ + * + * yesno.c -- implements the yes/no box + * + * Copyright 1999-2009,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + * + * An earlier version of this program lists as authors + * Savio Lam (lam836@cs.cuhk.hk) + */ + +#include <dialog.h> +#include <dlg_keys.h> + +/* + * Display a dialog box with two buttons - Yes and No. + */ +int +dialog_yesno(const char *title, const char *cprompt, int height, int width) +{ + /* *INDENT-OFF* */ + static DLG_KEYS_BINDING binding[] = { + ENTERKEY_BINDINGS, + DLG_KEYS_DATA( DLGK_ENTER, ' ' ), + DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_DOWN ), + DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_RIGHT ), + DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), + DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_UP ), + DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), + DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_LEFT ), + SCROLLKEY_BINDINGS, + END_KEYS_BINDING + }; + /* *INDENT-ON* */ + + int x, y; + int key = 0, fkey; + int code; + int button = dlg_defaultno_button(); + WINDOW *dialog = 0; + int result = DLG_EXIT_UNKNOWN; + char *prompt = dlg_strclone(cprompt); + const char **buttons = dlg_yes_labels(); + int min_width = 25; + bool show = TRUE; + int page, last = 0, offset = 0; + +#ifdef KEY_RESIZE + int req_high = height; + int req_wide = width; + restart: +#endif + + dlg_tab_correct_str(prompt); + dlg_button_layout(buttons, &min_width); + dlg_auto_size(title, prompt, &height, &width, 2, min_width); + dlg_print_size(height, width); + dlg_ctl_size(height, width); + + x = dlg_box_x_ordinate(width); + y = dlg_box_y_ordinate(height); + +#ifdef KEY_RESIZE + if (dialog != 0) + dlg_move_window(dialog, height, width, y, x); + else +#endif + { + dialog = dlg_new_window(height, width, y, x); + dlg_register_window(dialog, "yesno", binding); + dlg_register_buttons(dialog, "yesno", buttons); + } + + dlg_draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); + dlg_draw_bottom_box(dialog); + dlg_draw_title(dialog, title); + + wattrset(dialog, dialog_attr); + + page = height - (1 + 3 * MARGIN); + dlg_draw_buttons(dialog, + height - 2 * MARGIN, 0, + buttons, button, FALSE, width); + + while (result == DLG_EXIT_UNKNOWN) { + if (show) { + last = dlg_print_scrolled(dialog, prompt, offset, + page, width, TRUE); + show = FALSE; + } + key = dlg_mouse_wgetch(dialog, &fkey); + if (dlg_result_key(key, fkey, &result)) + break; + if ((code = dlg_char_to_button(key, buttons)) >= 0) { + result = dlg_ok_buttoncode(code); + break; + } + /* handle function keys */ + if (fkey) { + switch (key) { + case DLGK_FIELD_NEXT: + button = dlg_next_button(buttons, button); + if (button < 0) + button = 0; + dlg_draw_buttons(dialog, + height - 2, 0, + buttons, button, + FALSE, width); + break; + case DLGK_FIELD_PREV: + button = dlg_prev_button(buttons, button); + if (button < 0) + button = 0; + dlg_draw_buttons(dialog, + height - 2, 0, + buttons, button, + FALSE, width); + break; + case DLGK_ENTER: + result = dlg_yes_buttoncode(button); + break; +#ifdef KEY_RESIZE + case KEY_RESIZE: + dlg_clear(); + height = req_high; + width = req_wide; + goto restart; +#endif + default: + if (is_DLGK_MOUSE(key)) { + result = dlg_yes_buttoncode(key - M_EVENT); + if (result < 0) + result = DLG_EXIT_OK; + } else if (dlg_check_scrolled(key, last, page, + &show, &offset) != 0) { + beep(); + } + break; + } + } else { + beep(); + } + } + + dlg_del_window(dialog); + dlg_mouse_free_regions(); + free(prompt); + return result; +} Index: contrib/dialog/editbox.c =================================================================== --- contrib/dialog/editbox.c (revision 0) +++ contrib/dialog/editbox.c (revision 0) @@ -0,0 +1,719 @@ +/* + * $Id: editbox.c,v 1.54 2010/04/28 21:02:01 tom Exp $ + * + * editbox.c -- implements the edit box + * + * Copyright 2007-2009,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + */ + +#include <dialog.h> +#include <dlg_keys.h> + +#include <sys/stat.h> + +#define sTEXT -1 + +static void +fail_list(void) +{ + dlg_exiterr("File too large"); +} + +static void +grow_list(char ***list, int *have, int want) +{ + if (want > *have) { + size_t last = (size_t) *have; + size_t need = (size_t) (want | 31) + 3; + *have = (int) need; + (*list) = dlg_realloc(char *, need, *list); + if ((*list) == 0) { + fail_list(); + } + while (++last < need) { + (*list)[last] = 0; + } + } +} + +static void +load_list(const char *file, char ***list, int *rows) +{ + FILE *fp; + char *blob = 0; + struct stat sb; + unsigned n, pass; + unsigned need; + size_t size; + + *list = 0; + *rows = 0; + + if (stat(file, &sb) < 0 || + (sb.st_mode & S_IFMT) != S_IFREG) + dlg_exiterr("Not a file: %s", file); + + size = (size_t) sb.st_size; + if ((blob = dlg_malloc(char, size + 1)) == 0) + fail_list(); + blob[size] = '\0'; + + if ((fp = fopen(file, "r")) == 0) + dlg_exiterr("Cannot open: %s", file); + size = fread(blob, sizeof(char), size, fp); + fclose(fp); + + for (pass = 0; pass < 2; ++pass) { + int first = TRUE; + need = 0; + for (n = 0; n < size; ++n) { + if (first && pass) { + (*list)[need] = blob + n; + first = FALSE; + } + if (blob[n] == '\n') { + first = TRUE; + ++need; + if (pass) + blob[n] = '\0'; + } + } + if (pass) { + if (need == 0) { + (*list)[0] = dlg_strclone(""); + (*list)[1] = 0; + } else { + for (n = 0; n < need; ++n) { + (*list)[n] = dlg_strclone((*list)[n]); + } + (*list)[need] = 0; + } + } else { + grow_list(list, rows, (int) need + 1); + } + } + free(blob); +} + +static void +free_list(char ***list, int *rows) +{ + if (*list != 0) { + int n; + for (n = 0; n < (*rows); ++n) { + if ((*list)[n] != 0) + free((*list)[n]); + } + free(*list); + *list = 0; + } + *rows = 0; +} + +/* + * Display a single row in the editing window: + * thisrow is the actual row number that's being displayed. + * show_row is the row number that's highlighted for edit. + * base_row is the first row number in the window + */ +static bool +display_one(WINDOW *win, + char *text, + int thisrow, + int show_row, + int base_row, + int chr_offset) +{ + bool result; + + if (text != 0) { + dlg_show_string(win, + text, + chr_offset, + ((thisrow == show_row) + ? form_active_text_attr + : form_text_attr), + thisrow - base_row, + 0, + getmaxx(win), + FALSE, + FALSE); + result = TRUE; + } else { + result = FALSE; + } + return result; +} + +static void +display_all(WINDOW *win, + char **list, + int show_row, + int firstrow, + int lastrow, + int chr_offset) +{ + int limit = getmaxy(win); + int row; + + dlg_attr_clear(win, getmaxy(win), getmaxx(win), dialog_attr); + if (lastrow - firstrow >= limit) + lastrow = firstrow + limit; + for (row = firstrow; row < lastrow; ++row) { + if (!display_one(win, list[row], + row, show_row, firstrow, + (row == show_row) ? chr_offset : 0)) + break; + } +} + +static int +size_list(char **list) +{ + int result = 0; + + if (list != 0) { + while (*list++ != 0) { + ++result; + } + } + return result; +} + +static bool +scroll_to(int pagesize, int rows, int *base_row, int *this_row, int target) +{ + bool result = FALSE; + + if (target < *base_row) { + if (target < 0) { + if (*base_row == 0 && *this_row == 0) { + beep(); + } else { + *this_row = 0; + *base_row = 0; + result = TRUE; + } + } else { + *this_row = target; + *base_row = target; + result = TRUE; + } + } else if (target >= rows) { + if (*this_row < rows - 1) { + *this_row = rows - 1; + *base_row = rows - 1; + result = TRUE; + } else { + beep(); + } + } else if (target >= *base_row + pagesize) { + *this_row = target; + *base_row = target; + result = TRUE; + } else { + *this_row = target; + result = FALSE; + } + if (pagesize < rows) { + if (*base_row + pagesize >= rows) { + *base_row = rows - pagesize; + } + } else { + *base_row = 0; + } + return result; +} + +static int +col_to_chr_offset(const char *text, int col) +{ + const int *cols = dlg_index_columns(text); + const int *indx = dlg_index_wchars(text); + bool found = FALSE; + int result = 0; + unsigned n; + unsigned len = (unsigned) dlg_count_wchars(text); + + for (n = 0; n < len; ++n) { + if (cols[n] <= col && cols[n + 1] > col) { + result = indx[n]; + found = TRUE; + break; + } + } + if (!found && len && cols[len] == col) { + result = indx[len]; + } + return result; +} + +#define SCROLL_TO(target) show_all = scroll_to(pagesize, listsize, &base_row, &thisrow, target) + +#define PREV_ROW (*list)[thisrow - 1] +#define THIS_ROW (*list)[thisrow] +#define NEXT_ROW (*list)[thisrow + 1] + +#define UPDATE_COL(input) col_offset = dlg_edit_offset(input, chr_offset, box_width) + +static int +widest_line(char **list) +{ + int result = MAX_LEN; + char *value; + + if (list != 0) { + while ((value = *list++) != 0) { + int check = (int) strlen(value); + if (check > result) + result = check; + } + } + return result; +} + +#define NAVIGATE_BINDINGS \ + DLG_KEYS_DATA( DLGK_GRID_DOWN, KEY_DOWN ), \ + DLG_KEYS_DATA( DLGK_GRID_RIGHT, KEY_RIGHT ), \ + DLG_KEYS_DATA( DLGK_GRID_LEFT, KEY_LEFT ), \ + DLG_KEYS_DATA( DLGK_GRID_UP, KEY_UP ), \ + DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), \ + DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), \ + DLG_KEYS_DATA( DLGK_PAGE_FIRST, KEY_HOME ), \ + DLG_KEYS_DATA( DLGK_PAGE_LAST, KEY_END ), \ + DLG_KEYS_DATA( DLGK_PAGE_LAST, KEY_LL ), \ + DLG_KEYS_DATA( DLGK_PAGE_NEXT, KEY_NPAGE ), \ + DLG_KEYS_DATA( DLGK_PAGE_NEXT, DLGK_MOUSE(KEY_NPAGE) ), \ + DLG_KEYS_DATA( DLGK_PAGE_PREV, KEY_PPAGE ), \ + DLG_KEYS_DATA( DLGK_PAGE_PREV, DLGK_MOUSE(KEY_PPAGE) ) +/* + * Display a dialog box for editing a copy of a file + */ +int +dlg_editbox(const char *title, + char ***list, + int *rows, + int height, + int width) +{ + /* *INDENT-OFF* */ + static DLG_KEYS_BINDING binding[] = { + ENTERKEY_BINDINGS, + NAVIGATE_BINDINGS, + END_KEYS_BINDING + }; + static DLG_KEYS_BINDING binding2[] = { + INPUTSTR_BINDINGS, + ENTERKEY_BINDINGS, + NAVIGATE_BINDINGS, + END_KEYS_BINDING + }; + /* *INDENT-ON* */ + +#ifdef KEY_RESIZE + int old_height = height; + int old_width = width; +#endif + int x, y, box_y, box_x, box_height, box_width; + int show_buttons; + int thisrow, base_row, lastrow; + int goal_col = -1; + int col_offset = 0; + int chr_offset = 0; + int key, fkey, code; + int pagesize; + int listsize = size_list(*list); + int result = DLG_EXIT_UNKNOWN; + int state; + size_t max_len = (size_t) dlg_max_input(widest_line(*list)); + char *input, *buffer; + bool show_all, show_one, was_mouse; + WINDOW *dialog; + WINDOW *editing; + DIALOG_VARS save_vars; + const char **buttons = dlg_ok_labels(); + int mincols = (3 * COLS / 4); + + dlg_save_vars(&save_vars); + dialog_vars.separate_output = TRUE; + + dlg_does_output(); + + buffer = dlg_malloc(char, max_len + 1); + assert_ptr(buffer, "dlg_editbox"); + + thisrow = base_row = lastrow = 0; + +#ifdef KEY_RESIZE + retry: +#endif + show_buttons = TRUE; + state = dialog_vars.defaultno ? dlg_defaultno_button() : sTEXT; + key = fkey = 0; + + dlg_button_layout(buttons, &mincols); + dlg_auto_size(title, "", &height, &width, 3 * LINES / 4, mincols); + dlg_print_size(height, width); + dlg_ctl_size(height, width); + + x = dlg_box_x_ordinate(width); + y = dlg_box_y_ordinate(height); + + dialog = dlg_new_window(height, width, y, x); + dlg_register_window(dialog, "editbox", binding); + dlg_register_buttons(dialog, "editbox", buttons); + + dlg_mouse_setbase(x, y); + + dlg_draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); + dlg_draw_bottom_box(dialog); + dlg_draw_title(dialog, title); + + wattrset(dialog, dialog_attr); + + /* Draw the editing field in a box */ + box_y = MARGIN + 0; + box_x = MARGIN + 1; + box_width = width - 2 - (2 * MARGIN); + box_height = height - (4 * MARGIN); + + dlg_draw_box(dialog, + box_y, + box_x, + box_height, + box_width, + border_attr, dialog_attr); + dlg_mouse_mkbigregion(box_y + MARGIN, + box_x + MARGIN, + box_height - (2 * MARGIN), + box_width - (2 * MARGIN), + KEY_MAX, 1, 1, 3); + editing = dlg_sub_window(dialog, + box_height - (2 * MARGIN), + box_width - (2 * MARGIN), + getbegy(dialog) + box_y + 1, + getbegx(dialog) + box_x + 1); + dlg_register_window(editing, "editbox", binding2); + + show_all = TRUE; + show_one = FALSE; + pagesize = getmaxy(editing); + + while (result == DLG_EXIT_UNKNOWN) { + int edit = 0; + + if (show_all) { + display_all(editing, *list, thisrow, base_row, listsize, chr_offset); + display_one(editing, THIS_ROW, + thisrow, thisrow, base_row, chr_offset); + show_all = FALSE; + show_one = TRUE; + } else { + if (thisrow != lastrow) { + display_one(editing, (*list)[lastrow], + lastrow, thisrow, base_row, 0); + show_one = TRUE; + } + } + if (show_one) { + display_one(editing, THIS_ROW, + thisrow, thisrow, base_row, chr_offset); + getyx(editing, y, x); + dlg_draw_scrollbar(dialog, + base_row, + base_row, + base_row + pagesize, + listsize, + box_x, + box_x + getmaxx(editing), + box_y + 0, + box_y + getmaxy(editing) + 1, + dialog_attr, + border_attr); + wmove(editing, y, x); + show_one = FALSE; + } + lastrow = thisrow; + input = THIS_ROW; + + /* + * The last field drawn determines where the cursor is shown: + */ + if (show_buttons) { + show_buttons = FALSE; + UPDATE_COL(input); + if (state != sTEXT) { + display_one(editing, input, thisrow, + -1, base_row, 0); + wrefresh(editing); + } + dlg_draw_buttons(dialog, + height - 2, + 0, + buttons, + (state != sTEXT) ? state : 99, + FALSE, + width); + if (state == sTEXT) { + display_one(editing, input, thisrow, + thisrow, base_row, chr_offset); + } + } + + key = dlg_mouse_wgetch((state == sTEXT) ? editing : dialog, &fkey); + if (key == ERR) { + result = DLG_EXIT_ERROR; + break; + } else if (key == ESC) { + result = DLG_EXIT_ESC; + break; + } + if (state != sTEXT) { + if (dlg_result_key(key, fkey, &result)) + break; + } + + was_mouse = (fkey && is_DLGK_MOUSE(key)); + if (was_mouse) + key -= M_EVENT; + + /* + * Handle mouse clicks first, since we want to know if this is a + * button, or something that dlg_edit_string() should handle. + */ + if (fkey + && was_mouse + && (code = dlg_ok_buttoncode(key)) >= 0) { + result = code; + continue; + } + + if (was_mouse + && (key >= KEY_MAX)) { + int wide = getmaxx(editing); + int cell = key - KEY_MAX; + thisrow = (cell / wide) + base_row; + col_offset = (cell % wide); + chr_offset = col_to_chr_offset(THIS_ROW, col_offset); + show_one = TRUE; + if (state != sTEXT) { + state = sTEXT; + show_buttons = TRUE; + } + continue; + } else if (was_mouse && key >= KEY_MIN) { + key = dlg_lookup_key(dialog, key, &fkey); + } + + if (state == sTEXT) { /* editing box selected */ + /* + * Intercept scrolling keys that dlg_edit_string() does not + * understand. + */ + if (fkey) { + bool moved = TRUE; + + switch (key) { + case DLGK_GRID_UP: + SCROLL_TO(thisrow - 1); + break; + case DLGK_GRID_DOWN: + SCROLL_TO(thisrow + 1); + break; + case DLGK_PAGE_FIRST: + SCROLL_TO(0); + break; + case DLGK_PAGE_LAST: + SCROLL_TO(listsize); + break; + case DLGK_PAGE_NEXT: + SCROLL_TO(base_row + pagesize); + break; + case DLGK_PAGE_PREV: + if (thisrow > base_row) { + SCROLL_TO(base_row); + } else { + SCROLL_TO(base_row - pagesize); + } + break; + case DLGK_DELETE_LEFT: + if (chr_offset == 0) { + if (thisrow == 0) { + beep(); + } else { + size_t len = (strlen(THIS_ROW) + + strlen(PREV_ROW) + 1); + char *tmp = dlg_malloc(char, len); + + assert_ptr(tmp, "dlg_editbox"); + + chr_offset = dlg_count_wchars(PREV_ROW); + UPDATE_COL(PREV_ROW); + goal_col = col_offset; + + sprintf(tmp, "%s%s", PREV_ROW, THIS_ROW); + if (len > max_len) + tmp[max_len] = '\0'; + + free(PREV_ROW); + PREV_ROW = tmp; + for (y = thisrow; y < listsize; ++y) { + (*list)[y] = (*list)[y + 1]; + } + --listsize; + --thisrow; + SCROLL_TO(thisrow); + + show_all = TRUE; + } + } else { + /* dlg_edit_string() can handle this case */ + moved = FALSE; + } + break; + default: + moved = FALSE; + break; + } + if (moved) { + if (thisrow != lastrow) { + if (goal_col < 0) + goal_col = col_offset; + chr_offset = col_to_chr_offset(THIS_ROW, goal_col); + } else { + UPDATE_COL(THIS_ROW); + } + continue; + } + } + strncpy(buffer, input, max_len - 1)[max_len - 1] = '\0'; + edit = dlg_edit_string(buffer, &chr_offset, key, fkey, FALSE); + + if (edit) { + goal_col = UPDATE_COL(input); + if (strcmp(input, buffer)) { + free(input); + THIS_ROW = dlg_strclone(buffer); + input = THIS_ROW; + } + display_one(editing, input, thisrow, + thisrow, base_row, chr_offset); + continue; + } + } + + /* handle non-functionkeys */ + if (!fkey && (code = dlg_char_to_button(key, buttons)) >= 0) { + dlg_del_window(dialog); + result = dlg_ok_buttoncode(code); + continue; + } + + /* handle functionkeys */ + if (fkey) { + switch (key) { + case DLGK_FIELD_PREV: + show_buttons = TRUE; + state = dlg_prev_ok_buttonindex(state, sTEXT); + break; + case DLGK_FIELD_NEXT: + show_buttons = TRUE; + state = dlg_next_ok_buttonindex(state, sTEXT); + break; + case DLGK_ENTER: + if (state == sTEXT) { + const int *indx = dlg_index_wchars(THIS_ROW); + int split = indx[chr_offset]; + char *tmp = dlg_strclone(THIS_ROW + split); + + assert_ptr(tmp, "dlg_editbox"); + grow_list(list, rows, listsize + 1); + ++listsize; + for (y = listsize; y > thisrow; --y) { + (*list)[y] = (*list)[y - 1]; + } + THIS_ROW[split] = '\0'; + ++thisrow; + chr_offset = 0; + col_offset = 0; + THIS_ROW = tmp; + SCROLL_TO(thisrow); + show_all = TRUE; + } else { + result = dlg_ok_buttoncode(state); + } + break; +#ifdef KEY_RESIZE + case KEY_RESIZE: + /* reset data */ + height = old_height; + width = old_width; + /* repaint */ + dlg_clear(); + dlg_del_window(editing); + dlg_del_window(dialog); + refresh(); + dlg_mouse_free_regions(); + goto retry; +#endif + default: + beep(); + break; + } + } else { + if ((key == ' ') && (state != sTEXT)) { + result = dlg_ok_buttoncode(state); + } else { + beep(); + } + } + } + + dlg_unregister_window(editing); + dlg_del_window(editing); + dlg_del_window(dialog); + dlg_mouse_free_regions(); + + /* + * The caller's copy of the (*list)[] array has been updated, but for + * consistency with the other widgets, we put the "real" result in + * the output buffer. + */ + if (result == DLG_EXIT_OK) { + int n; + for (n = 0; n < listsize; ++n) { + dlg_add_result((*list)[n]); + dlg_add_separator(); + } + } + free(buffer); + dlg_restore_vars(&save_vars); + return result; +} + +int +dialog_editbox(const char *title, const char *file, int height, int width) +{ + int result; + char **list; + int rows; + + load_list(file, &list, &rows); + result = dlg_editbox(title, &list, &rows, height, width); + free_list(&list, &rows); + return result; +} Index: contrib/dialog/makefile.in =================================================================== --- contrib/dialog/makefile.in (revision 0) +++ contrib/dialog/makefile.in (revision 0) @@ -0,0 +1,283 @@ +# $Id: makefile.in,v 1.71 2010/04/28 00:45:38 tom Exp $ +# template makefile for DIALOG +# +SHELL = /bin/sh + +srcdir = @srcdir@ +VPATH = @srcdir@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +top_builddir = . + +x = @EXEEXT@ +o = .@OBJEXT@ +a = @LIB_SUFFIX@ + +DESTDIR = + +bindir = @bindir@ +includedir = @includedir@ +libdir = @libdir@ +mandir = @mandir@ + +BINDIR = $(DESTDIR)$(bindir) +INCLUDEDIR = $(DESTDIR)$(includedir) +LIBDIR = $(DESTDIR)$(libdir) +MANDIR = $(DESTDIR)$(mandir) + +MAN1DIR = $(MANDIR)/man1 +MAN3DIR = $(MANDIR)/man3 + +# see po/makefile +localedir = $(prefix)/@DATADIRNAME@/locale + +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ @DEFS@ -I. -I$(srcdir) -DLOCALEDIR=\"$(localedir)\" +EXTRA_CFLAGS = @EXTRA_CFLAGS@ +CC = @CC@ +CPP = @CPP@ +AR = @AR@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ @INTLLIBS@ +RANLIB = @LIB_PREP@ + +RM = rm -f +LINT = lint + +CTAGS = @CTAGS@ +ETAGS = @ETAGS@ + +LIBTOOL = @LIBTOOL@ @ECHO_LT@ +LIBTOOL_OPTS = @LIBTOOL_OPTS@ +LIBTOOL_CLEAN = @LIB_CLEAN@ +LIBTOOL_COMPILE = @LIB_COMPILE@ +LIBTOOL_CREATE = @LIB_CREATE@ +LIBTOOL_LINK = @LIB_LINK@ +LIBTOOL_INSTALL = @LIB_INSTALL@ +LIBTOOL_UNINSTALL = @LIB_UNINSTALL@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = $(LIBTOOL_INSTALL) @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_DATA = @INSTALL_DATA@ + +LINK = $(LIBTOOL_LINK) + +PACKAGE = `echo @PACKAGE@ |sed @program_transform_name@` +# +# Standard .c to .o compile line. +# +.SUFFIXES: .c .i $o .html .1 .3 .man .ps .pdf .txt +.c.i : + @RULE_CC@ + @ECHO_CC@$(CPP) $(CPPFLAGS) -c $< >$@ +.c$o : + @RULE_CC@ + @ECHO_CC@$(LIBTOOL_COMPILE) $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CPPFLAGS) -c $< + +.1.html : + GROFF_NO_SGR=stupid $(SHELL) -c "tbl $< | groff -Thtml -man" >$@ + +.1.ps : + $(SHELL) -c "tbl $< | groff -man" >$@ + +.1.txt : + GROFF_NO_SGR=stupid $(SHELL) -c "tbl $< | nroff -Tascii -man | col -bx" >$@ + +.ps.pdf : + ps2pdf $*.ps + +EXTRAOBJS = @EXTRAOBJS@ +OBJECTS = $(EXTRAOBJS) \ + arrows$o \ + buttons$o \ + checklist$o \ + columns$o \ + dlg_keys$o \ + editbox$o \ + inputbox$o \ + inputstr$o \ + menubox$o \ + mouse$o \ + mousewget$o \ + msgbox$o \ + textbox$o \ + ui_getc$o \ + util$o \ + version$o \ + yesno$o + +LIB_OBJECT = @LIB_OBJECT@ + +SRCS = $(OBJECTS:$o=.c) +HDRS = \ + dialog.h \ + dlg_colors.h \ + dlg_config.h \ + dlg_keys.h + +LIB = @LIB_PREFIX@dialog$a +PROG = dialog$x +ALL = $(LIB) $(PROG) + +BIN_DIRS = $(BINDIR) $(MAN1DIR) +LIB_DIRS = $(LIBDIR) $(INCLUDEDIR) + +PO_DIR = $(srcdir)/po + +all :: $(ALL) + +@LIBTOOL_MAKE@install :: install-lib +@LIBTOOL_MAKE@uninstall :: uninstall-lib + +@INTLDIR_MAKE@@INTLLIBS@ : +@INTLDIR_MAKE@ @echo "Building GNU gettext library..." +@INTLDIR_MAKE@ @cd intl && $(MAKE) @cf_cv_makeflags@ + +dialog$o \ +$(OBJECTS) : $(srcdir)/dialog.h $(srcdir)/dlg_keys.h dlg_config.h VERSION + +$(LIB) : $(LIB_OBJECT) + $(LIBTOOL_CREATE) $(LIB) $(LIB_OBJECT) + $(RANLIB) $@ + +dialog$x : $(LIB) dialog$o @INTLDIR_MAKE@ @INTLLIBS@ + $(LINK) -o $@ dialog$o -L. -ldialog $(LDFLAGS) $(LIBS) + +clean \ +distclean \ +install \ +install-full \ +install-strip \ +uninstall :: + @echo making $@ +@INTLDIR_MAKE@ @-test -f intl/makefile && cd intl && $(MAKE) @cf_cv_makeflags@ $@ +@MSG_DIR_MAKE@ @-test -f po/makefile && cd po && $(MAKE) @cf_cv_makeflags@ $@ + +clean :: + @- $(RM) -r autom4te.cache + - $(RM) *.*cov *.da *.bb *.bbg + - $(LIBTOOL_CLEAN) $(RM) *.i *$o $(ALL) + - $(RM) headers.sed + - $(RM) *.html *.pdf *.png *.ps *.txt dialog_lib.1 + - $(RM) core *~ tags TAGS + +distclean :: clean + $(RM) intl/libintl.h intl/po2tbl.sed + $(RM) makefile dlg_config.h config.cache config.log config.status + $(RM) samples/install/makefile + $(RM) headers-sh + $(RM) dialog-config + +install :: install-bin install-man + @echo "made $@" + +install-full :: install-lib install-bin install-man + @echo "made $@" + +install-strip :: $(PROG) $(BINDIR) + $(INSTALL_PROGRAM) -s $(PROG) $(BINDIR) + +uninstall :: uninstall-bin uninstall-man + @echo "made $@" + +uninstall-full :: uninstall-bin uninstall-man uninstall-lib + @echo "made $@" + +install-bin : $(PROG) $(BINDIR) + $(INSTALL_PROGRAM) $(PROG) $(BINDIR)/$(PACKAGE)$x + +uninstall-bin : + $(RM) $(BINDIR)/$(PACKAGE)$x + +install-man :: $(MAN1DIR) + $(INSTALL_DATA) $(srcdir)/dialog.1 $(MAN1DIR)/$(PACKAGE).1 + +uninstall-man :: + $(RM) $(MAN1DIR)/$(PACKAGE).1 + +# most users do not want/need the library, so the install rules are distinct. +install-lib :: $(BINDIR) dialog-config + @ echo "** installing config script in $(BINDIR)" + @ $(INSTALL_SCRIPT) dialog-config $(BINDIR) + +install-lib :: $(LIB_DIRS) $(LIB) headers.sed + @ echo "** installing library in $(LIBDIR)" + @ $(LIBTOOL_INSTALL) $(INSTALL_DATA) $(LIB) $(LIBDIR) + @ echo "** installing headers in $(INCLUDEDIR)" + @ $(SHELL) $(srcdir)/headers-sh $(INSTALL_DATA) $(INCLUDEDIR) $(srcdir) dialog.h + @ $(SHELL) $(srcdir)/headers-sh $(INSTALL_DATA) $(INCLUDEDIR) $(srcdir) dlg_colors.h + @ $(SHELL) $(srcdir)/headers-sh $(INSTALL_DATA) $(INCLUDEDIR) $(srcdir) dlg_keys.h + @ $(SHELL) $(srcdir)/headers-sh $(INSTALL_DATA) $(INCLUDEDIR) . dlg_config.h + +uninstall-lib :: $(BINDIR) + $(RM) $(BINDIR)/dialog-config + +uninstall-lib :: $(LIB_DIRS) + - $(LIBTOOL_UNINSTALL) $(RM) $(LIBDIR)/$(LIB) + $(RM) $(INCLUDEDIR)/dialog.h + $(RM) $(INCLUDEDIR)/dlg_colors.h + $(RM) $(INCLUDEDIR)/dlg_keys.h + $(RM) $(INCLUDEDIR)/dlg_config.h + +install-lib :: $(MAN3DIR) + $(INSTALL_DATA) $(srcdir)/dialog.3 $(MAN3DIR)/$(PACKAGE).3 + +uninstall-lib :: + $(RM) $(MAN3DIR)/$(PACKAGE).3 + +headers.sed : $(srcdir)/headers-sh + $(SHELL) $(srcdir)/headers-sh $(INCLUDEDIR) $(srcdir) + +################################################################################ +TOP_DOCS = \ + dialog.html \ + dialog.pdf \ + dialog.ps \ + dialog.txt +dialog.html : dialog.1 +dialog.pdf : dialog.ps +dialog.ps : dialog.1 +dialog.txt : dialog.1 +################################################################################ +# rename, to use suffix-rules +dialog_lib.1 : dialog.3 + -$(RM) $@ + cp dialog.3 $@ + +LIB_DOCS = \ + dialog_lib.1 \ + dialog_lib.html \ + dialog_lib.pdf \ + dialog_lib.ps \ + dialog_lib.txt +dialog_lib.html : dialog_lib.1 +dialog_lib.pdf : dialog_lib.ps +dialog_lib.ps : dialog_lib.1 +dialog_lib.txt : dialog_lib.1 +################################################################################ +docs: $(TOP_DOCS) $(LIB_DOCS) +clean-docs: + -$(RM) $(TOP_DOCS) $(LIB_DOCS) +################################################################################ + +$(MAN1DIR) \ +$(MAN3DIR) \ +$(BINDIR) \ +$(INCLUDEDIR) \ +$(LIBDIR) : ; mkdir -p $@ + +@MAKE_LOWER_TAGS@tags : +@MAKE_LOWER_TAGS@ $(CTAGS) $(SRCS) $(HDRS) + +@MAKE_LOWER_TAGS@TAGS : +@MAKE_LOWER_TAGS@ $(ETAGS) $(SRCS) $(HDRS) + +update-po: + rsync -Lrtvz translationproject.org::tp/latest/dialog/ $(PO_DIR) + test -f $(PO_DIR)/makefile && cd $(PO_DIR) && $(MAKE) $@ + +lint: + $(LINT) $(CPPFLAGS) *.c Index: contrib/dialog/rc.c =================================================================== --- contrib/dialog/rc.c (revision 0) +++ contrib/dialog/rc.c (revision 0) @@ -0,0 +1,588 @@ +/* + * $Id: rc.c,v 1.45 2010/01/18 10:28:16 tom Exp $ + * + * rc.c -- routines for processing the configuration file + * + * Copyright 2000-2008,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + * + * An earlier version of this program lists as authors + * Savio Lam (lam836@cs.cuhk.hk) + */ + +#include <dialog.h> + +#include <dlg_keys.h> + +#ifdef HAVE_COLOR +#include <dlg_colors.h> + +/* + * For matching color names with color values + */ +static const color_names_st color_names[] = +{ +#ifdef HAVE_USE_DEFAULT_COLORS + {"DEFAULT", -1}, +#endif + {"BLACK", COLOR_BLACK}, + {"RED", COLOR_RED}, + {"GREEN", COLOR_GREEN}, + {"YELLOW", COLOR_YELLOW}, + {"BLUE", COLOR_BLUE}, + {"MAGENTA", COLOR_MAGENTA}, + {"CYAN", COLOR_CYAN}, + {"WHITE", COLOR_WHITE}, +}; /* color names */ +#define COLOR_COUNT (sizeof(color_names) / sizeof(color_names[0])) +#endif /* HAVE_COLOR */ + +#define GLOBALRC "/etc/dialogrc" +#define DIALOGRC ".dialogrc" + +/* Types of values */ +#define VAL_INT 0 +#define VAL_STR 1 +#define VAL_BOOL 2 + +/* Type of line in configuration file */ +typedef enum { + LINE_ERROR = -1, + LINE_EQUALS, + LINE_EMPTY +} PARSE_LINE; + +/* number of configuration variables */ +#define VAR_COUNT (sizeof(vars) / sizeof(vars_st)) + +/* check if character is white space */ +#define whitespace(c) (c == ' ' || c == TAB) + +/* check if character is string quoting characters */ +#define isquote(c) (c == '"' || c == '\'') + +/* get last character of string */ +#define lastch(str) str[strlen(str)-1] + +/* + * Configuration variables + */ +typedef struct { + const char *name; /* name of configuration variable as in DIALOGRC */ + void *var; /* address of actual variable to change */ + int type; /* type of value */ + const char *comment; /* comment to put in "rc" file */ +} vars_st; + +/* + * This table should contain only references to dialog_state, since dialog_vars + * is reset specially in dialog.c before each widget. + */ +static const vars_st vars[] = +{ + {"aspect", + &dialog_state.aspect_ratio, + VAL_INT, + "Set aspect-ration."}, + + {"separate_widget", + &dialog_state.separate_str, + VAL_STR, + "Set separator (for multiple widgets output)."}, + + {"tab_len", + &dialog_state.tab_len, + VAL_INT, + "Set tab-length (for textbox tab-conversion)."}, + + {"visit_items", + &dialog_state.visit_items, + VAL_BOOL, + "Make tab-traversal for checklist, etc., include the list."}, + +#ifdef HAVE_COLOR + {"use_shadow", + &dialog_state.use_shadow, + VAL_BOOL, + "Shadow dialog boxes? This also turns on color."}, + + {"use_colors", + &dialog_state.use_colors, + VAL_BOOL, + "Turn color support ON or OFF"}, +#endif /* HAVE_COLOR */ +}; /* vars */ + +static int +skip_whitespace(char *str, int n) +{ + while (whitespace(str[n]) && str[n] != '\0') + n++; + return n; +} + +static int +skip_keyword(char *str, int n) +{ + while (isalnum(UCH(str[n])) && str[n] != '\0') + n++; + return n; +} + +static int +find_vars(char *name) +{ + int result = -1; + unsigned i; + + for (i = 0; i < VAR_COUNT; i++) { + if (dlg_strcmp(vars[i].name, name) == 0) { + result = (int) i; + break; + } + } + return result; +} + +#ifdef HAVE_COLOR +static int +find_color(char *name) +{ + int result = -1; + int i; + int limit = dlg_color_count(); + + for (i = 0; i < limit; i++) { + if (dlg_strcmp(dlg_color_table[i].name, name) == 0) { + result = i; + break; + } + } + return result; +} + +/* + * Convert an attribute to a string representation like this: + * + * "(foreground,background,highlight)" + */ +static char * +attr_to_str(char *str, int fg, int bg, int hl) +{ + int i; + + strcpy(str, "("); + /* foreground */ + for (i = 0; fg != color_names[i].value; i++) ; + strcat(str, color_names[i].name); + strcat(str, ","); + + /* background */ + for (i = 0; bg != color_names[i].value; i++) ; + strcat(str, color_names[i].name); + + /* highlight */ + strcat(str, hl ? ",ON)" : ",OFF)"); + + return str; +} + +/* + * Extract the foreground, background and highlight values from an attribute + * represented as a string in this form: + * + * "(foreground,background,highlight)" + */ +static int +str_to_attr(char *str, int *fg, int *bg, int *hl) +{ + int i = 0, get_fg = 1; + unsigned j; + char tempstr[MAX_LEN + 1], *part; + + if (str[0] != '(' || lastch(str) != ')') + return -1; /* invalid representation */ + + /* remove the parenthesis */ + strcpy(tempstr, str + 1); + lastch(tempstr) = '\0'; + + /* get foreground and background */ + + while (1) { + /* skip white space before fg/bg string */ + i = skip_whitespace(tempstr, i); + if (tempstr[i] == '\0') + return -1; /* invalid representation */ + part = tempstr + i; /* set 'part' to start of fg/bg string */ + + /* find end of fg/bg string */ + while (!whitespace(tempstr[i]) && tempstr[i] != ',' + && tempstr[i] != '\0') + i++; + + if (tempstr[i] == '\0') + return -1; /* invalid representation */ + else if (whitespace(tempstr[i])) { /* not yet ',' */ + tempstr[i++] = '\0'; + + /* skip white space before ',' */ + i = skip_whitespace(tempstr, i); + if (tempstr[i] != ',') + return -1; /* invalid representation */ + } + tempstr[i++] = '\0'; /* skip the ',' */ + for (j = 0; j < COLOR_COUNT && dlg_strcmp(part, color_names[j].name); + j++) ; + if (j == COLOR_COUNT) /* invalid color name */ + return -1; + if (get_fg) { + *fg = color_names[j].value; + get_fg = 0; /* next we have to get the background */ + } else { + *bg = color_names[j].value; + break; + } + } /* got foreground and background */ + + /* get highlight */ + + /* skip white space before highlight string */ + i = skip_whitespace(tempstr, i); + if (tempstr[i] == '\0') + return -1; /* invalid representation */ + part = tempstr + i; /* set 'part' to start of highlight string */ + + /* trim trailing white space from highlight string */ + i = (int) strlen(part) - 1; + while (whitespace(part[i]) && i > 0) + i--; + part[i + 1] = '\0'; + + if (!dlg_strcmp(part, "ON")) + *hl = TRUE; + else if (!dlg_strcmp(part, "OFF")) + *hl = FALSE; + else + return -1; /* invalid highlight value */ + + return 0; +} +#endif /* HAVE_COLOR */ + +/* + * Check if the line begins with a special keyword; if so, return true while + * pointing params to its parameters. + */ +static int +begins_with(char *line, const char *keyword, char **params) +{ + int i = skip_whitespace(line, 0); + int j = skip_keyword(line, i); + + if ((j - i) == (int) strlen(keyword)) { + char save = line[j]; + line[j] = 0; + if (!dlg_strcmp(keyword, line + i)) { + *params = line + skip_whitespace(line, j + 1); + return 1; + } + line[j] = save; + } + + return 0; +} + +/* + * Parse a line in the configuration file + * + * Each line is of the form: "variable = value". On exit, 'var' will contain + * the variable name, and 'value' will contain the value string. + * + * Return values: + * + * LINE_EMPTY - line is blank or comment + * LINE_EQUALS - line contains "variable = value" + * LINE_ERROR - syntax error in line + */ +static PARSE_LINE +parse_line(char *line, char **var, char **value) +{ + int i = 0; + + /* ignore white space at beginning of line */ + i = skip_whitespace(line, i); + + if (line[i] == '\0') /* line is blank */ + return LINE_EMPTY; + else if (line[i] == '#') /* line is comment */ + return LINE_EMPTY; + else if (line[i] == '=') /* variable names cannot start with a '=' */ + return LINE_ERROR; + + /* set 'var' to variable name */ + *var = line + i++; /* skip to next character */ + + /* find end of variable name */ + while (!whitespace(line[i]) && line[i] != '=' && line[i] != '\0') + i++; + + if (line[i] == '\0') /* syntax error */ + return LINE_ERROR; + else if (line[i] == '=') + line[i++] = '\0'; + else { + line[i++] = '\0'; + + /* skip white space before '=' */ + i = skip_whitespace(line, i); + + if (line[i] != '=') /* syntax error */ + return LINE_ERROR; + else + i++; /* skip the '=' */ + } + + /* skip white space after '=' */ + i = skip_whitespace(line, i); + + if (line[i] == '\0') + return LINE_ERROR; + else + *value = line + i; /* set 'value' to value string */ + + /* trim trailing white space from 'value' */ + i = (int) strlen(*value) - 1; + while (whitespace((*value)[i]) && i > 0) + i--; + (*value)[i + 1] = '\0'; + + return LINE_EQUALS; /* no syntax error in line */ +} + +/* + * Create the configuration file + */ +void +dlg_create_rc(const char *filename) +{ + unsigned i; + FILE *rc_file; + + if ((rc_file = fopen(filename, "wt")) == NULL) + dlg_exiterr("Error opening file for writing in dlg_create_rc()."); + + fprintf(rc_file, "#\n\ +# Run-time configuration file for dialog\n\ +#\n\ +# Automatically generated by \"dialog --create-rc <file>\"\n\ +#\n\ +#\n\ +# Types of values:\n\ +#\n\ +# Number - <number>\n\ +# String - \"string\"\n\ +# Boolean - <ON|OFF>\n" +#ifdef HAVE_COLOR + "\ +# Attribute - (foreground,background,highlight?)\n" +#endif + ); + + /* Print an entry for each configuration variable */ + for (i = 0; i < VAR_COUNT; i++) { + fprintf(rc_file, "\n# %s\n", vars[i].comment); + switch (vars[i].type) { + case VAL_INT: + fprintf(rc_file, "%s = %d\n", vars[i].name, + *((int *) vars[i].var)); + break; + case VAL_STR: + fprintf(rc_file, "%s = \"%s\"\n", vars[i].name, + (char *) vars[i].var); + break; + case VAL_BOOL: + fprintf(rc_file, "%s = %s\n", vars[i].name, + *((bool *) vars[i].var) ? "ON" : "OFF"); + break; + } + } +#ifdef HAVE_COLOR + for (i = 0; i < (unsigned) dlg_color_count(); ++i) { + char buffer[MAX_LEN + 1]; + + fprintf(rc_file, "\n# %s\n", dlg_color_table[i].comment); + fprintf(rc_file, "%s = %s\n", dlg_color_table[i].name, + attr_to_str(buffer, + dlg_color_table[i].fg, + dlg_color_table[i].bg, + dlg_color_table[i].hilite)); + } +#endif /* HAVE_COLOR */ +#if 1 + dlg_dump_keys(rc_file); +#endif + + (void) fclose(rc_file); +} + +/* + * Parse the configuration file and set up variables + */ +int +dlg_parse_rc(void) +{ + int i; + int l = 1; + PARSE_LINE parse; + char str[MAX_LEN + 1]; + char *var; + char *value; + char *tempptr; + int result = 0; + FILE *rc_file = 0; +#if 1 + char *params; +#endif + + /* + * At startup, dialog determines the settings to use as follows: + * + * a) if the environment variable $DIALOGRC is set, its value determines + * the name of the configuration file. + * + * b) if the file in (a) can't be found, use the file $HOME/.dialogrc + * as the configuration file. + * + * c) if the file in (b) can't be found, try using the GLOBALRC file. + * Usually this will be /etc/dialogrc. + * + * d) if the file in (c) cannot be found, use the compiled-in defaults. + */ + + /* try step (a) */ + if ((tempptr = getenv("DIALOGRC")) != NULL) + rc_file = fopen(tempptr, "rt"); + + if (rc_file == NULL) { /* step (a) failed? */ + /* try step (b) */ + if ((tempptr = getenv("HOME")) != NULL + && strlen(tempptr) < MAX_LEN - (sizeof(DIALOGRC) + 3)) { + if (tempptr[0] == '\0' || lastch(tempptr) == '/') + sprintf(str, "%s%s", tempptr, DIALOGRC); + else + sprintf(str, "%s/%s", tempptr, DIALOGRC); + rc_file = fopen(str, "rt"); + } + } + + if (rc_file == NULL) { /* step (b) failed? */ + /* try step (c) */ + strcpy(str, GLOBALRC); + if ((rc_file = fopen(str, "rt")) == NULL) + return 0; /* step (c) failed, use default values */ + } + + /* Scan each line and set variables */ + while ((result == 0) && (fgets(str, MAX_LEN, rc_file) != NULL)) { + dlg_trace_msg("rc:%s\n", str); + if (*str == '\0' || lastch(str) != '\n') { + /* ignore rest of file if line too long */ + fprintf(stderr, "\nParse error: line %d of configuration" + " file too long.\n", l); + result = -1; /* parse aborted */ + break; + } + + lastch(str) = '\0'; + if (begins_with(str, "bindkey", ¶ms)) { + dlg_parse_bindkey(params); + continue; + } + parse = parse_line(str, &var, &value); /* parse current line */ + + switch (parse) { + case LINE_EMPTY: /* ignore blank lines and comments */ + break; + case LINE_EQUALS: + /* search table for matching config variable name */ + if ((i = find_vars(var)) >= 0) { + switch (vars[i].type) { + case VAL_INT: + *((int *) vars[i].var) = atoi(value); + break; + case VAL_STR: + if (!isquote(value[0]) || !isquote(lastch(value)) + || strlen(value) < 2) { + fprintf(stderr, "\nParse error: string value " + "expected at line %d of configuration " + "file.\n", l); + result = -1; /* parse aborted */ + } else { + /* remove the (") quotes */ + value++; + lastch(value) = '\0'; + strcpy((char *) vars[i].var, value); + } + break; + case VAL_BOOL: + if (!dlg_strcmp(value, "ON")) + *((bool *) vars[i].var) = TRUE; + else if (!dlg_strcmp(value, "OFF")) + *((bool *) vars[i].var) = FALSE; + else { + fprintf(stderr, "\nParse error: boolean value " + "expected at line %d of configuration " + "file (found %s).\n", l, value); + result = -1; /* parse aborted */ + } + break; + } +#ifdef HAVE_COLOR + } else if ((i = find_color(var)) >= 0) { + int fg = 0; + int bg = 0; + int hl = 0; + if (str_to_attr(value, &fg, &bg, &hl) == -1) { + fprintf(stderr, "\nParse error: attribute " + "value expected at line %d of configuration " + "file.\n", l); + result = -1; /* parse aborted */ + } else { + dlg_color_table[i].fg = fg; + dlg_color_table[i].bg = bg; + dlg_color_table[i].hilite = hl; + } + } else { +#endif /* HAVE_COLOR */ + fprintf(stderr, "\nParse error: unknown variable " + "at line %d of configuration file:\n\t%s\n", l, var); + result = -1; /* parse aborted */ + } + break; + case LINE_ERROR: + fprintf(stderr, "\nParse error: syntax error at line %d of " + "configuration file.\n", l); + result = -1; /* parse aborted */ + break; + } + l++; /* next line */ + } + + (void) fclose(rc_file); + return result; +} Index: contrib/dialog/configure.in =================================================================== --- contrib/dialog/configure.in (revision 0) +++ contrib/dialog/configure.in (revision 0) @@ -0,0 +1,187 @@ +dnl $Id: configure.in,v 1.57 2010/04/28 20:33:01 tom Exp $ +dnl Process this file with autoconf to produce a configure script. +dnl +AC_PREREQ(2.13.20020210) +AC_INIT(dialog.h) +AC_CONFIG_HEADER(dlg_config.h:config.hin) + +CF_VERSION_INFO(dialog) +AC_ARG_PROGRAM + +DESTDIR= +AC_SUBST(DESTDIR) + +dnl +dnl Checks for programs. +dnl +AC_PROG_CC +AC_PROG_CPP +AC_PROG_GCC_TRADITIONAL +AC_PROG_MAKE_SET +AC_PROG_RANLIB +AC_PROG_INSTALL + +dnl needed for CF_WITH_LIBTOOL +AC_CHECK_TOOL(AR, ar, ar) + +AC_ISC_POSIX +AC_C_CONST + +CF_MAKEFLAGS +CF_MAKE_TAGS +CF_DISABLE_ECHO +CF_PROG_EXT +CF_PATHSEP +CF_LIB_PREFIX +CF_XOPEN_SOURCE +CF_LARGEFILE + +CF_WITH_WARNINGS + +dnl +dnl Checks for libraries. +dnl +EXTRAOBJS="" +CF_BUNDLED_INTL(makefile,enable) +CF_MATH_LIB(,sqrt(x)) + +CF_WITH_NO_LEAKS + +CF_ARG_MSG_ENABLE([if you want --trace option], + trace, + [ --disable-trace do not support --trace option], + [EXTRAOBJS="$EXTRAOBJS trace\$o" + AC_DEFINE(HAVE_DLG_TRACE)],,yes) + +LIBTOOL_MAKE="#" +CF_WITH_LIBTOOL +if test "$with_libtool" = "yes" ; then + OBJEXT="lo" + LIBTOOL_MAKE= + CF_WITH_LIBTOOL_OPTS +fi +AC_SUBST(LIBTOOL_MAKE) + +use_ncurses=no +AC_ARG_WITH(ncurses, + [ --with-ncurses compile/link with ncurses library], + [use_ncurses=ncurses]) +AC_ARG_WITH(ncursesw, + [ --with-ncursesw compile/link with wide-char ncurses library], + [use_ncurses=ncursesw]) +if test $use_ncurses != no ; then + cf_wide_curses=yes + if test $use_ncurses = ncursesw ; then + CF_UTF8_LIB + fi + CF_NCURSES_CONFIG($use_ncurses) +else + cf_wide_curses=no + CF_CURSES_CONFIG +fi + +cf_all_widgets=yes +CF_ARG_MSG_ENABLE([if you want extra dialogs], + extras, + [ --disable-extras do not include extra dialogs], + [cf_all_widgets=yes],[cf_all_widgets=no],yes) + +CF_ARG_MSG_ENABLE([if you want config-file support], + rc-file, + [ --disable-rc-file do not include config-file support], + [EXTRAOBJS="$EXTRAOBJS rc\$o" + AC_DEFINE(HAVE_RC_FILE)],,$cf_all_widgets) + +CF_ARG_MSG_ENABLE([if you want Xdialog-style dialogs], + Xdialog, + [ --disable-Xdialog do not include Xdialog-style dialogs], + [EXTRAOBJS="$EXTRAOBJS calendar\$o fselect\$o timebox\$o" + AC_DEFINE(HAVE_XDIALOG)],,$cf_all_widgets) + +CF_ARG_MSG_ENABLE([if you want the form dialog], + form, + [ --disable-form do not include the form dialog], + [EXTRAOBJS="$EXTRAOBJS formbox\$o" + AC_DEFINE(HAVE_DLG_FORMBOX)],,$cf_all_widgets) + +CF_ARG_MSG_ENABLE([if you want the gauge dialog], + gauge, + [ --disable-gauge do not include the gauge dialogs], + [EXTRAOBJS="$EXTRAOBJS guage\$o pause\$o progressbox\$o" + AC_DEFINE(HAVE_DLG_GAUGE)],,$cf_all_widgets) + +CF_ARG_MSG_ENABLE([if you want the tailbox dialog], + tailbox, + [ --disable-tailbox do not include the tailbox dialog], + [EXTRAOBJS="$EXTRAOBJS tailbox\$o" + AC_DEFINE(HAVE_DLG_TAILBOX)],,$cf_all_widgets) + +CF_ARG_MSG_ENABLE([if you want the mixedform dialog], + mixedform, + [ --disable-mixedform do not include the mixedform dialog], + [EXTRAOBJS="$EXTRAOBJS mixedform\$o" + AC_DEFINE(HAVE_DLG_MIXEDFORM)],,$cf_all_widgets) + +CF_ARG_MSG_ENABLE([if you want the mixedgauge dialog], + mixedgauge, + [ --disable-mixedgauge do not include the mixedgauge dialog], + [EXTRAOBJS="$EXTRAOBJS mixedgauge\$o" + AC_DEFINE(HAVE_MIXEDGAUGE)],,$cf_all_widgets) + +CF_ARG_MSG_ENABLE([if you want the wide-curses features], + widec, + [ --enable-widec enable wide-curses features], + [AC_DEFINE(USE_WIDE_CURSES)],,$cf_wide_curses) + +AC_SUBST(EXTRAOBJS) + +dnl +dnl Checks for header files. +dnl +AC_HEADER_STDC +AC_HEADER_TIME +AC_HEADER_DIRENT +AC_CHECK_HEADERS(search.h unctrl.h unistd.h) +CF_CURSES_TERM_H + +dnl +dnl Checks for library functions. +dnl +AC_TYPE_SIGNAL +AC_CHECK_FUNCS(\ +_nc_free_and_exit \ +strcasecmp \ +strftime \ +tsearch \ +waitpid \ +) + +CF_CURSES_FUNCS(\ +flushinp \ +getbegx \ +getbegy \ +getbegyx \ +getcurx \ +getcury \ +getmaxx \ +getmaxy \ +getmaxyx \ +getparx \ +getpary \ +getparyx \ +use_default_colors \ +wget_wch \ +) + +AC_CHECK_FUNC(start_color,[AC_DEFINE(HAVE_COLOR)]) +CF_CURSES_CHTYPE +CF_FUNC_WAIT +CF_MBSTATE_T + +CF_HEADERS_SH(DLG,dlg_config.h) + +AC_TRY_LINK([#include <locale.h>],[setlocale(LC_ALL, "")],[AC_DEFINE(HAVE_SETLOCALE)]) + +CF_DISABLE_RPATH_HACK + +AC_OUTPUT(dialog-config makefile $EXTRA_OUTPUT $SUB_MAKEFILE samples/install/makefile,,,sort -u) Index: contrib/dialog/timebox.c =================================================================== --- contrib/dialog/timebox.c (revision 0) +++ contrib/dialog/timebox.c (revision 0) @@ -0,0 +1,411 @@ +/* + * $Id: timebox.c,v 1.41 2010/01/18 10:33:42 tom Exp $ + * + * timebox.c -- implements the timebox dialog + * + * Copyright 2001-2009,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + */ + +#include <dialog.h> +#include <dlg_keys.h> + +#include <time.h> + +#define ONE_HIGH 1 +#define ONE_WIDE 2 +#define BTN_HIGH 2 + +#define MIN_HIGH (ONE_HIGH + BTN_HIGH + (4 * MARGIN)) +#define MIN_WIDE ((3 * (ONE_WIDE + 2 * MARGIN)) + 2 + (2 * MARGIN)) + +typedef enum { + sHR = -3 + ,sMN = -2 + ,sSC = -1 +} STATES; + +struct _box; + +typedef int (*BOX_DRAW) (struct _box *, struct tm *); + +typedef struct _box { + WINDOW *parent; + WINDOW *window; + int x; + int y; + int width; + int height; + int period; + int value; +} BOX; + +static int +next_or_previous(int key) +{ + int result = 0; + + switch (key) { + case DLGK_ITEM_PREV: + result = -1; + break; + case DLGK_ITEM_NEXT: + result = 1; + break; + default: + beep(); + break; + } + return result; +} +/* + * Draw the hour-of-month selection box + */ +static int +draw_cell(BOX * data) +{ + werase(data->window); + dlg_draw_box(data->parent, + data->y - MARGIN, data->x - MARGIN, + data->height + (2 * MARGIN), data->width + (2 * MARGIN), + menubox_border_attr, menubox_attr); + + wattrset(data->window, item_attr); + wprintw(data->window, "%02d", data->value); + return 0; +} + +static int +init_object(BOX * data, + WINDOW *parent, + int x, int y, + int width, int height, + int period, int value, + int code) +{ + data->parent = parent; + data->x = x; + data->y = y; + data->width = width; + data->height = height; + data->period = period; + data->value = value % period; + + data->window = derwin(data->parent, + data->height, data->width, + data->y, data->x); + if (data->window == 0) + return -1; + (void) keypad(data->window, TRUE); + + dlg_mouse_setbase(getbegx(parent), getbegy(parent)); + dlg_mouse_mkregion(y, x, height, width, code); + + return 0; +} + +static int +CleanupResult(int code, WINDOW *dialog, char *prompt, DIALOG_VARS * save_vars) +{ + dlg_del_window(dialog); + dlg_mouse_free_regions(); + free(prompt); + dlg_restore_vars(save_vars); + + return code; +} + +#define DrawObject(data) draw_cell(data) + +/* + * Display a dialog box for entering a date + */ +int +dialog_timebox(const char *title, + const char *subtitle, + int height, + int width, + int hour, + int minute, + int second) +{ + /* *INDENT-OFF* */ + static DLG_KEYS_BINDING binding[] = { + DLG_KEYS_DATA( DLGK_DELETE_RIGHT,KEY_DC ), + ENTERKEY_BINDINGS, + DLG_KEYS_DATA( DLGK_ENTER, ' ' ), + DLG_KEYS_DATA( DLGK_FIELD_FIRST,KEY_HOME ), + DLG_KEYS_DATA( DLGK_FIELD_LAST, KEY_END ), + DLG_KEYS_DATA( DLGK_FIELD_LAST, KEY_LL ), + DLG_KEYS_DATA( DLGK_FIELD_NEXT, CHR_NEXT ), + DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_RIGHT ), + DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), + DLG_KEYS_DATA( DLGK_FIELD_PREV, CHR_BACKSPACE ), + DLG_KEYS_DATA( DLGK_FIELD_PREV, CHR_PREVIOUS ), + DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), + DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_LEFT ), + DLG_KEYS_DATA( DLGK_ITEM_NEXT, '+'), + DLG_KEYS_DATA( DLGK_ITEM_NEXT, KEY_DOWN), + DLG_KEYS_DATA( DLGK_ITEM_NEXT, KEY_NEXT), + DLG_KEYS_DATA( DLGK_ITEM_NEXT, KEY_NPAGE), + DLG_KEYS_DATA( DLGK_ITEM_PREV, '-' ), + DLG_KEYS_DATA( DLGK_ITEM_PREV, KEY_PPAGE ), + DLG_KEYS_DATA( DLGK_ITEM_PREV, KEY_PREVIOUS ), + DLG_KEYS_DATA( DLGK_ITEM_PREV, KEY_UP ), + END_KEYS_BINDING + }; + /* *INDENT-ON* */ + +#ifdef KEY_RESIZE + int old_height = height; + int old_width = width; +#endif + BOX hr_box, mn_box, sc_box; + int key = 0, key2, fkey; + int button; + int result = DLG_EXIT_UNKNOWN; + WINDOW *dialog; + time_t now_time = time((time_t *) 0); + struct tm current; + int state = dlg_defaultno_button(); + const char **buttons = dlg_ok_labels(); + char *prompt = dlg_strclone(subtitle); + char buffer[MAX_LEN]; + DIALOG_VARS save_vars; + + now_time = time((time_t *) 0); + current = *localtime(&now_time); + + dlg_save_vars(&save_vars); + dialog_vars.separate_output = TRUE; + + dlg_does_output(); + +#ifdef KEY_RESIZE + retry: +#endif + + dlg_auto_size(title, prompt, &height, &width, 0, 0); + height += MIN_HIGH; + if (width < MIN_WIDE) + width = MIN_WIDE; + dlg_button_layout(buttons, &width); + dlg_print_size(height, width); + dlg_ctl_size(height, width); + + dialog = dlg_new_window(height, width, + dlg_box_y_ordinate(height), + dlg_box_x_ordinate(width)); + dlg_register_window(dialog, "timebox", binding); + dlg_register_buttons(dialog, "timebox", buttons); + + dlg_draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); + dlg_draw_bottom_box(dialog); + dlg_draw_title(dialog, title); + + wattrset(dialog, dialog_attr); + dlg_print_autowrap(dialog, prompt, height, width); + + /* compute positions of hour, month and year boxes */ + memset(&hr_box, 0, sizeof(hr_box)); + memset(&mn_box, 0, sizeof(mn_box)); + memset(&sc_box, 0, sizeof(sc_box)); + + if (init_object(&hr_box, + dialog, + (width - MIN_WIDE + 1) / 2 + MARGIN, + (height - MIN_HIGH + MARGIN), + ONE_WIDE, + ONE_HIGH, + 24, + hour >= 0 ? hour : current.tm_hour, + 'H') < 0 + || DrawObject(&hr_box) < 0) { + return CleanupResult(DLG_EXIT_ERROR, dialog, prompt, &save_vars); + } + + mvwprintw(dialog, hr_box.y, hr_box.x + ONE_WIDE + MARGIN, ":"); + if (init_object(&mn_box, + dialog, + hr_box.x + (ONE_WIDE + 2 * MARGIN + 1), + hr_box.y, + hr_box.width, + hr_box.height, + 60, + minute >= 0 ? minute : current.tm_min, + 'M') < 0 + || DrawObject(&mn_box) < 0) { + return CleanupResult(DLG_EXIT_ERROR, dialog, prompt, &save_vars); + } + + mvwprintw(dialog, mn_box.y, mn_box.x + ONE_WIDE + MARGIN, ":"); + if (init_object(&sc_box, + dialog, + mn_box.x + (ONE_WIDE + 2 * MARGIN + 1), + mn_box.y, + mn_box.width, + mn_box.height, + 60, + second >= 0 ? second : current.tm_sec, + 'S') < 0 + || DrawObject(&sc_box) < 0) { + return CleanupResult(DLG_EXIT_ERROR, dialog, prompt, &save_vars); + } + + while (result == DLG_EXIT_UNKNOWN) { + BOX *obj = (state == sHR ? &hr_box + : (state == sMN ? &mn_box : + (state == sSC ? &sc_box : 0))); + + button = (state < 0) ? 0 : state; + dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); + if (obj != 0) + dlg_set_focus(dialog, obj->window); + + key = dlg_mouse_wgetch(dialog, &fkey); + if (dlg_result_key(key, fkey, &result)) + break; + + if ((key2 = dlg_char_to_button(key, buttons)) >= 0) { + result = key2; + } else { + /* handle function-keys */ + if (fkey) { + switch (key) { + case DLGK_MOUSE(0): + result = DLG_EXIT_OK; + break; + case DLGK_MOUSE(1): + result = DLG_EXIT_CANCEL; + break; + case DLGK_MOUSE('H'): + state = sHR; + break; + case DLGK_MOUSE('M'): + state = sMN; + break; + case DLGK_MOUSE('S'): + state = sSC; + break; + case DLGK_ENTER: + result = button; + break; + case DLGK_FIELD_PREV: + state = dlg_prev_ok_buttonindex(state, sHR); + break; + case DLGK_FIELD_NEXT: + state = dlg_next_ok_buttonindex(state, sHR); + break; + case DLGK_FIELD_FIRST: + if (obj != 0) { + obj->value = 0; + (void) DrawObject(obj); + } + break; + case DLGK_FIELD_LAST: + if (obj != 0) { + switch (state) { + case sHR: + obj->value = 23; + break; + case sMN: + case sSC: + obj->value = 59; + break; + } + (void) DrawObject(obj); + } + break; + case DLGK_DELETE_RIGHT: + if (obj != 0) { + obj->value /= 10; + (void) DrawObject(obj); + } + break; +#ifdef KEY_RESIZE + case KEY_RESIZE: + /* reset data */ + height = old_height; + width = old_width; + hour = hr_box.value; + minute = mn_box.value; + second = sc_box.value; + /* repaint */ + dlg_clear(); + dlg_del_window(dialog); + refresh(); + dlg_mouse_free_regions(); + goto retry; +#endif + default: + if (obj != 0) { + int step = next_or_previous(key); + if (step != 0) { + obj->value += step; + while (obj->value < 0) + obj->value += obj->period; + obj->value %= obj->period; + (void) DrawObject(obj); + } + } + break; + } + } else if (isdigit(key)) { + if (obj != 0) { + int digit = (key - '0'); + int value = (obj->value * 10) + digit; + if (value < obj->period) { + obj->value = value; + (void) DrawObject(obj); + } else { + beep(); + } + } + } else { + beep(); + } + } + } + +#define DefaultFormat(dst, src) \ + sprintf(dst, "%02d:%02d:%02d", \ + hr_box.value, mn_box.value, sc_box.value) + +#if defined(HAVE_STRFTIME) + if (dialog_vars.time_format != 0) { + size_t used; + time_t now = time((time_t *) 0); + struct tm *parts = localtime(&now); + + parts->tm_sec = sc_box.value; + parts->tm_min = mn_box.value; + parts->tm_hour = hr_box.value; + used = strftime(buffer, + sizeof(buffer) - 1, + dialog_vars.time_format, + parts); + if (used == 0 || *buffer == '\0') + DefaultFormat(buffer, hr_box); + } else +#endif + DefaultFormat(buffer, hr_box); + + dlg_add_result(buffer); + dlg_add_separator(); + + return CleanupResult(result, dialog, prompt, &save_vars); +} Index: contrib/dialog/formbox.c =================================================================== --- contrib/dialog/formbox.c (revision 0) +++ contrib/dialog/formbox.c (revision 0) @@ -0,0 +1,902 @@ +/* + * $Id: formbox.c,v 1.71 2010/02/24 10:45:57 Samuel.Martin.Moro Exp $ + * + * formbox.c -- implements the form (i.e, some pairs label/editbox) + * + * Copyright 2003-2009,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + * + * This is adapted from source contributed by + * Valery Reznic (valery_reznic@users.sourceforge.net) + */ + +#include <dialog.h> +#include <dlg_keys.h> + +#define LLEN(n) ((n) * FORMBOX_TAGS) + +#define ItemName(i) items[LLEN(i) + 0] +#define ItemNameY(i) items[LLEN(i) + 1] +#define ItemNameX(i) items[LLEN(i) + 2] +#define ItemText(i) items[LLEN(i) + 3] +#define ItemTextY(i) items[LLEN(i) + 4] +#define ItemTextX(i) items[LLEN(i) + 5] +#define ItemTextFLen(i) items[LLEN(i) + 6] +#define ItemTextILen(i) items[LLEN(i) + 7] +#define ItemHelp(i) (dialog_vars.item_help ? items[LLEN(i) + 8] : dlg_strempty()) + +static bool +is_readonly(DIALOG_FORMITEM * item) +{ + return ((item->type & 2) != 0) || (item->text_flen <= 0); +} + +static bool +is_hidden(DIALOG_FORMITEM * item) +{ + return ((item->type & 1) != 0); +} + +static bool +in_window(WINDOW *win, int scrollamt, int y) +{ + return (y >= scrollamt && y - scrollamt < getmaxy(win)); +} + +static bool +ok_move(WINDOW *win, int scrollamt, int y, int x) +{ + return in_window(win, scrollamt, y) + && (wmove(win, y - scrollamt, x) != ERR); +} + +static void +move_past(WINDOW *win, int y, int x) +{ + if (wmove(win, y, x) == ERR) + wmove(win, y, getmaxx(win) - 1); +} + +/* + * Print form item + */ +static int +print_item(WINDOW *win, DIALOG_FORMITEM * item, int scrollamt, bool choice) +{ + int count = 0; + int len; + + if (ok_move(win, scrollamt, item->name_y, item->name_x)) { + len = item->name_len; + len = MIN(len, getmaxx(win) - item->name_x); + if (len > 0) { + dlg_show_string(win, + item->name, + 0, + menubox_attr, + item->name_y - scrollamt, + item->name_x, + len, + FALSE, + FALSE); + move_past(win, item->name_y - scrollamt, item->name_x + len); + count = 1; + } + } + if (item->text_len && ok_move(win, scrollamt, item->text_y, item->text_x)) { + chtype this_item_attribute; + + len = item->text_len; + len = MIN(len, getmaxx(win) - item->text_x); + + if (!is_readonly(item)) { + this_item_attribute = choice + ? form_active_text_attr + : form_text_attr; + } else { + this_item_attribute = form_item_readonly_attr; + } + + if (len > 0) { + dlg_show_string(win, + item->text, + 0, + this_item_attribute, + item->text_y - scrollamt, + item->text_x, + len, + is_hidden(item), + FALSE); + move_past(win, item->text_y - scrollamt, item->text_x + len); + count = 1; + } + } + return count; +} + +/* + * Print the entire form. + */ +static void +print_form(WINDOW *win, DIALOG_FORMITEM * item, int total, int scrollamt, int choice) +{ + int n; + int count = 0; + + for (n = 0; n < total; ++n) { + count += print_item(win, item + n, scrollamt, n == choice); + } + if (count) { + wbkgdset(win, menubox_attr | ' '); + wclrtobot(win); + (void) wnoutrefresh(win); + } +} + +static int +set_choice(DIALOG_FORMITEM item[], int choice, int item_no, bool * noneditable) +{ + int result = -1; + int i; + + *noneditable = FALSE; + if (!is_readonly(&item[choice])) { + result = choice; + } else { + for (i = 0; i < item_no; i++) { + if (!is_readonly(&(item[i]))) { + result = i; + break; + } + } + if (result < 0) { + *noneditable = TRUE; + result = 0; + } + } + return result; +} + +/* + * Find the last y-value in the form. + */ +static int +form_limit(DIALOG_FORMITEM item[]) +{ + int n; + int limit = 0; + for (n = 0; item[n].name != 0; ++n) { + if (limit < item[n].name_y) + limit = item[n].name_y; + if (limit < item[n].text_y) + limit = item[n].text_y; + } + return limit; +} + +/* + * Tab to the next field. + */ +static bool +tab_next(WINDOW *win, + DIALOG_FORMITEM item[], + int item_no, + int stepsize, + int *choice, + int *scrollamt) +{ + int old_choice = *choice; + int old_scroll = *scrollamt; + bool wrapped = FALSE; + + do { + do { + *choice += stepsize; + if (*choice < 0) { + *choice = item_no - 1; + wrapped = TRUE; + } else if (*choice >= item_no) { + *choice = 0; + wrapped = TRUE; + } + } while ((*choice != old_choice) && is_readonly(&(item[*choice]))); + + if (item[*choice].text_flen > 0) { + int lo = MIN(item[*choice].name_y, item[*choice].text_y); + int hi = MAX(item[*choice].name_y, item[*choice].text_y); + + if (old_choice == *choice) + break; + print_item(win, item + old_choice, *scrollamt, FALSE); + + if (*scrollamt < lo + 1 - getmaxy(win)) + *scrollamt = lo + 1 - getmaxy(win); + if (*scrollamt > hi) + *scrollamt = hi; + /* + * If we have to scroll to show a wrap-around, it does get + * confusing. Just give up rather than scroll. Tab'ing to the + * next field in a multi-column form is a different matter. Scroll + * for that. + */ + if (*scrollamt != old_scroll) { + if (wrapped) { + beep(); + *scrollamt = old_scroll; + *choice = old_choice; + } else { + scrollok(win, TRUE); + wscrl(win, *scrollamt - old_scroll); + scrollok(win, FALSE); + } + } + break; + } + } while (*choice != old_choice); + + return (old_choice != *choice) || (old_scroll != *scrollamt); +} + +/* + * Scroll to the next page, putting the choice at the first editable field + * in that page. Note that fields are not necessarily in top-to-bottom order, + * nor is there necessarily a field on each row of the window. + */ +static bool +scroll_next(WINDOW *win, DIALOG_FORMITEM item[], int stepsize, int *choice, int *scrollamt) +{ + int old_choice = *choice; + int old_scroll = *scrollamt; + int old_row = MIN(item[old_choice].text_y, item[old_choice].name_y); + int target = old_scroll + stepsize; + int n; + + if (stepsize < 0) { + if (old_row != old_scroll) + target = old_scroll; + else + target = old_scroll + stepsize; + if (target < 0) + target = 0; + } else { + int limit = form_limit(item); + if (target > limit) + target = limit; + } + + for (n = 0; item[n].name != 0; ++n) { + if (item[n].text_flen > 0) { + int new_row = MIN(item[n].text_y, item[n].name_y); + if (abs(new_row - target) < abs(old_row - target)) { + old_row = new_row; + *choice = n; + } + } + } + + if (old_choice != *choice) + print_item(win, item + old_choice, *scrollamt, FALSE); + + *scrollamt = *choice; + if (*scrollamt != old_scroll) { + scrollok(win, TRUE); + wscrl(win, *scrollamt - old_scroll); + scrollok(win, FALSE); + } + return (old_choice != *choice) || (old_scroll != *scrollamt); +} + +/* + * Do a sanity check on the field length, and return the "right" value. + */ +static int +real_length(DIALOG_FORMITEM * item) +{ + return (item->text_flen > 0 + ? item->text_flen + : (item->text_flen < 0 + ? -item->text_flen + : item->text_len)); +} + +/* + * Compute the form size, setup field buffers. + */ +static void +make_FORM_ELTs(DIALOG_FORMITEM * item, + int item_no, + int *min_height, + int *min_width) +{ + int i; + int min_w = 0; + int min_h = 0; + + for (i = 0; i < item_no; ++i) { + int real_len = real_length(item + i); + + /* + * Special value '0' for text_flen: no input allowed + * Special value '0' for text_ilen: 'be the same as text_flen' + */ + if (item[i].text_ilen == 0) + item[i].text_ilen = real_len; + + min_h = MAX(min_h, item[i].name_y + 1); + min_h = MAX(min_h, item[i].text_y + 1); + min_w = MAX(min_w, item[i].name_x + 1 + item[i].name_len); + min_w = MAX(min_w, item[i].text_x + 1 + real_len); + + item[i].text_len = real_length(item + i); + + /* + * We do not know the actual length of .text, so we allocate it here + * to ensure it is big enough. + */ + if (item[i].text_flen > 0) { + int max_len = dlg_max_input(MAX(item[i].text_ilen + 1, MAX_LEN)); + char *old_text = item[i].text; + + item[i].text = dlg_malloc(char, (size_t) max_len + 1); + assert_ptr(item[i].text, "make_FORM_ELTs"); + + sprintf(item[i].text, "%.*s", item[i].text_ilen, old_text); + + if (item[i].text_free) { + item[i].text_free = FALSE; + free(old_text); + } + item[i].text_free = TRUE; + } + } + + *min_height = min_h; + *min_width = min_w; +} + +int +dlg_default_formitem(DIALOG_FORMITEM * items) +{ + int result = 0; + + if (dialog_vars.default_item != 0) { + int count = 0; + while (items->name != 0) { + if (!strcmp(dialog_vars.default_item, items->name)) { + result = count; + break; + } + ++items; + count++; + } + } + return result; +} + +#define sTEXT -1 + +static int +next_valid_buttonindex(int state, int extra, bool non_editable) +{ + state = dlg_next_ok_buttonindex(state, extra); + while (non_editable && state == sTEXT) + state = dlg_next_ok_buttonindex(state, sTEXT); + return state; +} + +static int +prev_valid_buttonindex(int state, int extra, bool non_editable) +{ + state = dlg_prev_ok_buttonindex(state, extra); + while (non_editable && state == sTEXT) + state = dlg_prev_ok_buttonindex(state, sTEXT); + return state; +} + +#define NAVIGATE_BINDINGS \ + DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), \ + DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), \ + DLG_KEYS_DATA( DLGK_ITEM_NEXT, CHR_NEXT ), \ + DLG_KEYS_DATA( DLGK_ITEM_NEXT, KEY_DOWN ), \ + DLG_KEYS_DATA( DLGK_ITEM_NEXT, KEY_NEXT ), \ + DLG_KEYS_DATA( DLGK_ITEM_PREV, CHR_PREVIOUS ), \ + DLG_KEYS_DATA( DLGK_ITEM_PREV, KEY_PREVIOUS ), \ + DLG_KEYS_DATA( DLGK_ITEM_PREV, KEY_UP ), \ + DLG_KEYS_DATA( DLGK_PAGE_NEXT, KEY_NPAGE ), \ + DLG_KEYS_DATA( DLGK_PAGE_PREV, KEY_PPAGE ) +/* + * Display a form for fulfill a number of fields + */ +int +dlg_form(const char *title, + const char *cprompt, + int height, + int width, + int form_height, + int item_no, + DIALOG_FORMITEM * items, + int *current_item) +{ + /* *INDENT-OFF* */ + static DLG_KEYS_BINDING binding[] = { + ENTERKEY_BINDINGS, + NAVIGATE_BINDINGS, + END_KEYS_BINDING + }; + static DLG_KEYS_BINDING binding2[] = { + INPUTSTR_BINDINGS, + ENTERKEY_BINDINGS, + NAVIGATE_BINDINGS, + END_KEYS_BINDING + }; + /* *INDENT-ON* */ + +#ifdef KEY_RESIZE + int old_height = height; + int old_width = width; +#endif + + int form_width; + int first = TRUE; + int chr_offset = 0; + int state = dialog_vars.defaultno ? dlg_defaultno_button() : sTEXT; + int x, y, cur_x, cur_y, box_x, box_y; + int code; + int key = 0; + int fkey; + int choice = dlg_default_formitem(items); + int new_choice, new_scroll; + int scrollamt = 0; + int result = DLG_EXIT_UNKNOWN; + int min_width = 0, min_height = 0; + bool was_autosize = (height == 0 || width == 0); + bool show_buttons = FALSE; + bool scroll_changed = FALSE; + bool field_changed = FALSE; + bool non_editable = FALSE; + WINDOW *dialog, *form; + char *prompt = dlg_strclone(cprompt); + const char **buttons = dlg_ok_labels(); + DIALOG_FORMITEM *current; + + make_FORM_ELTs(items, item_no, &min_height, &min_width); + dlg_button_layout(buttons, &min_width); + dlg_does_output(); + dlg_tab_correct_str(prompt); + +#ifdef KEY_RESIZE + retry: +#endif + + dlg_auto_size(title, prompt, &height, &width, + 1 + 3 * MARGIN, + MAX(26, 2 + min_width)); + + if (form_height == 0) + form_height = min_height; + + if (was_autosize) { + form_height = MIN(SLINES - height, form_height); + height += form_height; + } else { + int thigh = 0; + int twide = 0; + dlg_auto_size(title, prompt, &thigh, &twide, 0, width); + thigh = SLINES - (height - (thigh + 1 + 3 * MARGIN)); + form_height = MIN(thigh, form_height); + } + + dlg_print_size(height, width); + dlg_ctl_size(height, width); + + x = dlg_box_x_ordinate(width); + y = dlg_box_y_ordinate(height); + + dialog = dlg_new_window(height, width, y, x); + dlg_register_window(dialog, "formbox", binding); + dlg_register_window(dialog, "formfield", binding2); + dlg_register_buttons(dialog, "formbox", buttons); + + dlg_mouse_setbase(x, y); + + dlg_draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); + dlg_draw_bottom_box(dialog); + dlg_draw_title(dialog, title); + + wattrset(dialog, dialog_attr); + dlg_print_autowrap(dialog, prompt, height, width); + + form_width = width - 6; + getyx(dialog, cur_y, cur_x); + box_y = cur_y + 1; + box_x = (width - form_width) / 2 - 1; + + /* create new window for the form */ + form = dlg_sub_window(dialog, form_height, form_width, y + box_y + 1, + x + box_x + 1); + + /* draw a box around the form items */ + dlg_draw_box(dialog, box_y, box_x, form_height + 2, form_width + 2, + menubox_border_attr, menubox_attr); + + /* register the new window, along with its borders */ + dlg_mouse_mkbigregion(getbegy(form) - getbegy(dialog), + getbegx(form) - getbegx(dialog), + getmaxy(form), + getmaxx(form), + KEY_MAX, 1, 1, 3 /* by cells */ ); + + show_buttons = TRUE; + scroll_changed = TRUE; + + choice = set_choice(items, choice, item_no, &non_editable); + current = &items[choice]; + if (non_editable) + state = next_valid_buttonindex(state, sTEXT, non_editable); + + while (result == DLG_EXIT_UNKNOWN) { + int edit = FALSE; + + if (scroll_changed) { + print_form(form, items, item_no, scrollamt, choice); + dlg_draw_scrollbar(dialog, + scrollamt, + scrollamt, + scrollamt + form_height + 1, + min_height, + box_x + 1, + box_x + form_width, + box_y, + box_y + form_height + 1, + menubox_attr, + menubox_border_attr); + scroll_changed = FALSE; + } + + if (show_buttons) { + dlg_item_help(""); + dlg_draw_buttons(dialog, height - 2, 0, buttons, + ((state < 0) + ? 1000 /* no such button, not highlighted */ + : state), + FALSE, width); + show_buttons = FALSE; + } + + if (field_changed || state == sTEXT) { + if (field_changed) + chr_offset = 0; + current = &items[choice]; + dialog_vars.max_input = current->text_ilen; + dlg_item_help(current->help); + dlg_show_string(form, current->text, chr_offset, + form_active_text_attr, + current->text_y - scrollamt, + current->text_x, + current->text_len, + is_hidden(current), first); + field_changed = FALSE; + } + + key = dlg_mouse_wgetch(dialog, &fkey); + if (dlg_result_key(key, fkey, &result)) + break; + + /* handle non-functionkeys */ + if (!fkey) { + if (state != sTEXT) { + code = dlg_char_to_button(key, buttons); + if (code >= 0) { + dlg_del_window(dialog); + result = dlg_ok_buttoncode(code); + continue; + } + if (key == ' ') { + fkey = TRUE; + key = DLGK_ENTER; + } + } + } + + /* handle functionkeys */ + if (fkey) { + bool do_scroll = FALSE; + bool do_tab = FALSE; + int move_by = 0; + + switch (key) { + case DLGK_MOUSE(KEY_PPAGE): + case DLGK_PAGE_PREV: + do_scroll = TRUE; + move_by = -form_height; + break; + + case DLGK_MOUSE(KEY_NPAGE): + case DLGK_PAGE_NEXT: + do_scroll = TRUE; + move_by = form_height; + break; + + case DLGK_ENTER: + dlg_del_window(dialog); + result = (state >= 0) ? dlg_ok_buttoncode(state) : DLG_EXIT_OK; + continue; + + case DLGK_GRID_LEFT: + if (state == sTEXT) + break; + /* FALLTHRU */ + case DLGK_ITEM_PREV: + if (state == sTEXT) { + do_tab = TRUE; + move_by = -1; + break; + } else { + state = prev_valid_buttonindex(state, 0, non_editable); + show_buttons = TRUE; + continue; + } + + case DLGK_FIELD_PREV: + state = prev_valid_buttonindex(state, sTEXT, non_editable); + show_buttons = TRUE; + continue; + + case DLGK_FIELD_NEXT: + state = next_valid_buttonindex(state, sTEXT, non_editable); + show_buttons = TRUE; + continue; + + case DLGK_GRID_RIGHT: + if (state == sTEXT) + break; + /* FALLTHRU */ + + case DLGK_ITEM_NEXT: + if (state == sTEXT) { + do_tab = TRUE; + move_by = 1; + break; + } else { + state = next_valid_buttonindex(state, 0, non_editable); + show_buttons = TRUE; + continue; + } + +#ifdef KEY_RESIZE + case KEY_RESIZE: + /* reset data */ + height = old_height; + width = old_width; + /* repaint */ + dlg_clear(); + dlg_del_window(dialog); + refresh(); + dlg_mouse_free_regions(); + goto retry; +#endif + default: +#if USE_MOUSE + if (is_DLGK_MOUSE(key)) { + if (key >= DLGK_MOUSE(KEY_MAX)) { + int cell = key - DLGK_MOUSE(KEY_MAX); + int row = (cell / getmaxx(form)) + scrollamt; + int col = (cell % getmaxx(form)); + int n; + + for (n = 0; n < item_no; ++n) { + if (items[n].name_y == row + && items[n].name_x <= col + && (items[n].name_x + items[n].name_len > col + || (items[n].name_y == items[n].text_y + && items[n].text_x > col))) { + if (!is_readonly(&(items[n]))) { + field_changed = TRUE; + break; + } + } + if (items[n].text_y == row + && items[n].text_x <= col + && items[n].text_x + items[n].text_ilen > col) { + if (!is_readonly(&(items[n]))) { + field_changed = TRUE; + break; + } + } + } + if (field_changed) { + print_item(form, items + choice, scrollamt, FALSE); + choice = n; + continue; + } + beep(); + } else if ((code = dlg_ok_buttoncode(key - M_EVENT)) >= 0) { + result = code; + } + continue; + } +#endif + break; + } + + new_scroll = scrollamt; + new_choice = choice; + if (do_scroll) { + if (scroll_next(form, items, move_by, &new_choice, &new_scroll)) { + if (choice != new_choice) { + choice = new_choice; + field_changed = TRUE; + } + if (scrollamt != new_scroll) { + scrollamt = new_scroll; + scroll_changed = TRUE; + } + } + continue; + } + if (do_tab) { + if (tab_next(form, items, item_no, move_by, &new_choice, &new_scroll)) { + if (choice != new_choice) { + choice = new_choice; + field_changed = TRUE; + } + if (scrollamt != new_scroll) { + scrollamt = new_scroll; + scroll_changed = TRUE; + } + } + continue; + } + } + + if (state == sTEXT) { /* Input box selected */ + if (!is_readonly(current)) + edit = dlg_edit_string(current->text, &chr_offset, key, + fkey, first); + if (edit) { + dlg_show_string(form, current->text, chr_offset, + form_active_text_attr, + current->text_y - scrollamt, + current->text_x, + current->text_len, + is_hidden(current), first); + continue; + } + } + + } + + dlg_mouse_free_regions(); + dlg_del_window(dialog); + free(prompt); + + *current_item = choice; + return result; +} + +/* + * Free memory owned by a list of DIALOG_FORMITEM's. + */ +void +dlg_free_formitems(DIALOG_FORMITEM * items) +{ + int n; + for (n = 0; items[n].name != 0; ++n) { + if (items[n].name_free) + free(items[n].name); + if (items[n].text_free) + free(items[n].text); + if (items[n].help_free && items[n].help != dlg_strempty()) + free(items[n].help); + } + free(items); +} + +/* + * The script accepts values beginning at 1, while curses starts at 0. + */ +int +dlg_ordinate(const char *s) +{ + int result = atoi(s); + if (result > 0) + --result; + else + result = 0; + return result; +} + +int +dialog_form(const char *title, + const char *cprompt, + int height, + int width, + int form_height, + int item_no, + char **items) +{ + int result; + int choice; + int i; + DIALOG_FORMITEM *listitems; + DIALOG_VARS save_vars; + bool show_status = FALSE; + + dlg_save_vars(&save_vars); + dialog_vars.separate_output = TRUE; + + listitems = dlg_calloc(DIALOG_FORMITEM, (size_t) item_no + 1); + assert_ptr(listitems, "dialog_form"); + + for (i = 0; i < item_no; ++i) { + listitems[i].type = dialog_vars.formitem_type; + listitems[i].name = ItemName(i); + listitems[i].name_len = (int) strlen(ItemName(i)); + listitems[i].name_y = dlg_ordinate(ItemNameY(i)); + listitems[i].name_x = dlg_ordinate(ItemNameX(i)); + listitems[i].text = ItemText(i); + listitems[i].text_len = (int) strlen(ItemText(i)); + listitems[i].text_y = dlg_ordinate(ItemTextY(i)); + listitems[i].text_x = dlg_ordinate(ItemTextX(i)); + listitems[i].text_flen = atoi(ItemTextFLen(i)); + listitems[i].text_ilen = atoi(ItemTextILen(i)); + listitems[i].help = ((dialog_vars.item_help) + ? ItemHelp(i) + : dlg_strempty()); + } + + result = dlg_form(title, + cprompt, + height, + width, + form_height, + item_no, + listitems, + &choice); + + switch (result) { + case DLG_EXIT_OK: /* FALLTHRU */ + case DLG_EXIT_EXTRA: + show_status = TRUE; + break; + case DLG_EXIT_HELP: + dlg_add_result("HELP "); + show_status = dialog_vars.help_status; + if (USE_ITEM_HELP(listitems[choice].help)) { + dlg_add_string(listitems[choice].help); + result = DLG_EXIT_ITEM_HELP; + } else { + dlg_add_string(listitems[choice].name); + } + if (show_status) + dlg_add_separator(); + break; + } + if (show_status) { + for (i = 0; i < item_no; i++) { + if (listitems[i].text_flen > 0) { + dlg_add_string(listitems[i].text); + dlg_add_separator(); + } + } + } + + dlg_free_formitems(listitems); + dlg_restore_vars(&save_vars); + + return result; +} Index: contrib/dialog/README =================================================================== --- contrib/dialog/README (revision 0) +++ contrib/dialog/README (revision 0) @@ -0,0 +1,61 @@ +-(1999-12-25)------------------------------------------------------------------- +This version of dialog, formerly known as cdialog is based on the Debian +package for dialog 0.9a (see CHANGES for recent modifications) +- T.Dickey <dickey@invisible-island.net> + +-(1996-01-15)------------------------------------------------------------------- +I have uploaded cdialog-0.9a.tar.gz to sunsite. It should be moved +to pub/Linux/utils/shell, I think. + +Starting point for cdialog v.0.9a was dialog-0.6c. Many new features +like as Resolution-independence, Auto-sizing, Maximizing, more widget +on the same screen (multi-widget), etc. were added. New widget are +tailbox and tailbox-in-background. Here are the options: + + Usage: dialog <Common options> <Box options> + { --and-widget <Common options> <Box options> } + + Common options: <Global options> + [--backtitle <backtitle>] [--sleep <secs>] [--beep] [--beep-after] + [--clear] [--begin <y> <x>] [--aspect <ratio>] [--print-size] + [--print-maxsize] [--size-err] [--separate-output] [--cr-wrap] + [--tab-len <n>] [--tab-correct] [--print-version] [--no-kill] + [--title <title>] + + Global options: [--shadow] [--no-shadow] [--separate-widget "<str>"] + +At the moment, mouse support with libgpm can't be added because it +does't implement the wtimeout() function of ncurses. Wtimeout() is +needed to have more widgets (es.tailbox) cooperating on the same +screen... I don't know if with newer versions of libgpm it's possible. + +I have no more time to write docs for this new version...Is there +anyone, that looking at the code, can do it??? Ouch! :-) +Don't flame me! + +For the future, if any volunteer want, the way to evolve cdialog is to +1) make a daemon for a better support of multi-tasking or implementing + multithreading. +2) add an option that could permit to read commands (--options) from a + file, like as in a normal programming language, but maintaining + compatiblity with older version of dialog. + +I no longer could maintain cdialog... +Executable and library name of cdialog are the same of dialog, for +compatiblity. + +I think that only one directive should be follow: don't use a resource +like stdin, stdout when you'll write new options for cdialog; these +resources have to be shared from all widgets on the command line. +Guage uses stdin :-/ so that can't be mixed for example with an inputbox, +but it was made before of multi-widget. However this is not a big problem! + +THERE ARE NO *KNOWN* BUGS. If anyone has much time and can find the way +to add wtimeout() support to libgpm, also mouse could be supported. + +Please use ncurses-1.9.4 or newer. + +| __ | demarco_p@abramo.it:~$ make Linux | more > UserFriendly; +| /__) | /~~ _ _ _ _ /~\ _ / . _ | +|/ ako | (___ (_) | ) ) (-' (__/ | ) /__ | | ) (_| >< . coordinator. + Index: contrib/dialog/menubox.c =================================================================== --- contrib/dialog/menubox.c (revision 0) +++ contrib/dialog/menubox.c (revision 0) @@ -0,0 +1,818 @@ +/* + * $Id: menubox.c,v 1.118 2010/01/17 22:24:11 tom Exp $ + * + * menubox.c -- implements the menu box + * + * Copyright 2000-2009,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public Licens, version 2.1e + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + * + * An earlier version of this program lists as authors + * Savio Lam (lam836@cs.cuhk.hk) + */ + +#include <dialog.h> +#include <dlg_keys.h> + +static int menu_width, tag_x, item_x; + +typedef enum { + Unselected = 0, + Selected, + Editing +} Mode; + +#define MIN_HIGH (1 + (5 * MARGIN)) + +#define INPUT_ROWS 3 /* rows per inputmenu entry */ + +#define LLEN(n) ((n) * MENUBOX_TAGS) +#define ItemName(i) items[LLEN(i)] +#define ItemText(i) items[LLEN(i) + 1] +#define ItemHelp(i) items[LLEN(i) + 2] + +#define RowHeight(i) (is_inputmenu ? ((i) * INPUT_ROWS) : ((i) * 1)) +#define ItemToRow(i) (is_inputmenu ? ((i) * INPUT_ROWS + 1) : (i)) +#define RowToItem(i) (is_inputmenu ? ((i) / INPUT_ROWS + 0) : (i)) + +static void +print_arrows(WINDOW *win, + int box_x, + int box_y, + int scrollamt, + int max_choice, + int item_no, + int menu_height) +{ + dlg_draw_scrollbar(win, + scrollamt, + scrollamt, + scrollamt + max_choice, + item_no, + box_x, + box_x + menu_width, + box_y, + box_y + menu_height + 1, + menubox_attr, + menubox_border_attr); +} + +/* + * Print the tag of a menu-item + */ +static void +print_tag(WINDOW *win, + DIALOG_LISTITEM * item, + int choice, + Mode selected, + bool is_inputmenu) +{ + int my_x = item_x; + int my_y = ItemToRow(choice); + int tag_width = (my_x - tag_x - GUTTER); + const int *cols; + const int *indx; + int limit; + int prefix; + + cols = dlg_index_columns(item->name); + indx = dlg_index_wchars(item->name); + limit = dlg_count_wchars(item->name); + prefix = (indx[1] - indx[0]); + + /* highlight first char of the tag to be special */ + (void) wmove(win, my_y, tag_x); + wattrset(win, selected ? tag_key_selected_attr : tag_key_attr); + if (strlen(item->name) != 0) + (void) waddnstr(win, item->name, prefix); + /* print rest of the string */ + wattrset(win, selected ? tag_selected_attr : tag_attr); + if ((int) strlen(item->name) > prefix) { + limit = dlg_limit_columns(item->name, tag_width, 1); + if (limit > 0) + (void) waddnstr(win, item->name + indx[1], indx[limit] - indx[1]); + } +} + +/* + * Print menu item + */ +static void +print_item(WINDOW *win, + DIALOG_LISTITEM * items, + int choice, + Mode selected, + bool is_inputmenu) +{ + chtype save = getattrs(win); + int n; + int my_width = menu_width; + int my_x = item_x; + int my_y = ItemToRow(choice); + chtype attr = A_NORMAL; + chtype textchar; + chtype bordchar; + + switch (selected) { + default: + case Unselected: + textchar = item_attr; + bordchar = item_attr; + break; + case Selected: + textchar = item_selected_attr; + bordchar = item_selected_attr; + break; + case Editing: + textchar = inputbox_attr; + bordchar = dialog_attr; + break; + } + + /* Clear 'residue' of last item and mark current current item */ + if (is_inputmenu) { + wattrset(win, (selected != Unselected) ? item_selected_attr : item_attr); + for (n = my_y - 1; n < my_y + INPUT_ROWS - 1; n++) { + wmove(win, n, 0); + wprintw(win, "%*s", my_width, " "); + } + } else { + wattrset(win, menubox_attr); + wmove(win, my_y, 0); + wprintw(win, "%*s", my_width, " "); + } + + print_tag(win, items, choice, selected, is_inputmenu); + + /* Draw the input field box (only for inputmenu) */ + (void) wmove(win, my_y, my_x); + if (is_inputmenu) { + my_width -= 1; + dlg_draw_box(win, my_y - 1, my_x, INPUT_ROWS, my_width - my_x - tag_x, + bordchar, + bordchar); + my_width -= 1; + ++my_x; + } + + /* print actual item */ + wmove(win, my_y, my_x); + wattrset(win, textchar); + dlg_print_text(win, items->text, my_width - my_x, &attr); + + if (selected) { + dlg_item_help(items->help); + } + wattrset(win, save); +} + +/* + * Allow the user to edit the text of a menu entry. + */ +static int +input_menu_edit(WINDOW *win, + DIALOG_LISTITEM * items, + int choice, + char **resultp) +{ + chtype save = getattrs(win); + char *result; + int offset = 0; + int key = 0, fkey = 0; + int first = TRUE; + /* see above */ + bool is_inputmenu = TRUE; + int y = ItemToRow(choice); + int code = TRUE; + int max_len = dlg_max_input(MAX((int) strlen(items->text) + 1, MAX_LEN)); + + result = dlg_malloc(char, (size_t) max_len); + assert_ptr(result, "input_menu_edit"); + + /* original item is used to initialize the input string. */ + result[0] = '\0'; + strcpy(result, items->text); + + print_item(win, items, choice, Editing, TRUE); + + /* taken out of inputbox.c - but somewhat modified */ + for (;;) { + if (!first) + key = dlg_mouse_wgetch(win, &fkey); + if (dlg_edit_string(result, &offset, key, fkey, first)) { + dlg_show_string(win, result, offset, inputbox_attr, + y, item_x + 1, menu_width - item_x - 3, + FALSE, first); + first = FALSE; + } else if (key == ESC || key == TAB) { + code = FALSE; + break; + } else { + break; + } + } + print_item(win, items, choice, Selected, TRUE); + wattrset(win, save); + + *resultp = result; + return code; +} + +static int +handle_button(int code, DIALOG_LISTITEM * items, int choice) +{ + switch (code) { + case DLG_EXIT_OK: /* FALLTHRU */ + case DLG_EXIT_EXTRA: + dlg_add_string(items[choice].name); + break; + case DLG_EXIT_HELP: + dlg_add_result("HELP "); + if (USE_ITEM_HELP(items[choice].help)) { + dlg_add_string(items[choice].help); + code = DLG_EXIT_ITEM_HELP; + } else { + dlg_add_string(items[choice].name); + } + break; + } + return code; +} + +static int +dlg_renamed_menutext(DIALOG_LISTITEM * items, int current, char *newtext) +{ + if (dialog_vars.input_result) + dialog_vars.input_result[0] = '\0'; + dlg_add_result("RENAMED "); + dlg_add_string(items[current].name); + dlg_add_result(" "); + dlg_add_string(newtext); + return DLG_EXIT_EXTRA; +} + +static int +dlg_dummy_menutext(DIALOG_LISTITEM * items, int current, char *newtext) +{ + (void) items; + (void) current; + (void) newtext; + return DLG_EXIT_ERROR; +} + +/* + * This is an alternate interface to 'menu' which allows the application + * to read the list item states back directly without putting them in the + * output buffer. + */ +int +dlg_menu(const char *title, + const char *cprompt, + int height, + int width, + int menu_height, + int item_no, + DIALOG_LISTITEM * items, + int *current_item, + DIALOG_INPUTMENU rename_menutext) +{ + /* *INDENT-OFF* */ + static DLG_KEYS_BINDING binding[] = { + ENTERKEY_BINDINGS, + DLG_KEYS_DATA( DLGK_FIELD_NEXT, ' ' ), + DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_RIGHT ), + DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), + DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), + DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_LEFT ), + DLG_KEYS_DATA( DLGK_ITEM_NEXT, '+' ), + DLG_KEYS_DATA( DLGK_ITEM_NEXT, KEY_DOWN ), + DLG_KEYS_DATA( DLGK_ITEM_NEXT, CHR_NEXT ), + DLG_KEYS_DATA( DLGK_ITEM_PREV, '-' ), + DLG_KEYS_DATA( DLGK_ITEM_PREV, KEY_UP ), + DLG_KEYS_DATA( DLGK_ITEM_PREV, CHR_PREVIOUS ), + DLG_KEYS_DATA( DLGK_PAGE_FIRST, KEY_HOME ), + DLG_KEYS_DATA( DLGK_PAGE_LAST, KEY_END ), + DLG_KEYS_DATA( DLGK_PAGE_LAST, KEY_LL ), + DLG_KEYS_DATA( DLGK_PAGE_NEXT, KEY_NPAGE ), + DLG_KEYS_DATA( DLGK_PAGE_PREV, KEY_PPAGE ), + END_KEYS_BINDING + }; + static DLG_KEYS_BINDING binding2[] = { + INPUTSTR_BINDINGS, + ENTERKEY_BINDINGS, + END_KEYS_BINDING + }; + /* *INDENT-ON* */ + +#ifdef KEY_RESIZE + int old_height = height; + int old_width = width; +#endif + int i, j, x, y, cur_x, cur_y, box_x, box_y; + int key = 0, fkey; + int button = dialog_state.visit_items ? -1 : dlg_defaultno_button(); + int choice = dlg_default_listitem(items); + int result = DLG_EXIT_UNKNOWN; + int scrollamt = 0; + int max_choice, min_width; + int found; + int use_height, use_width, name_width, text_width; + WINDOW *dialog, *menu; + char *prompt = dlg_strclone(cprompt); + const char **buttons = dlg_ok_labels(); + bool is_inputmenu = (rename_menutext == dlg_renamed_menutext); + + dlg_does_output(); + dlg_tab_correct_str(prompt); + +#ifdef KEY_RESIZE + retry: +#endif + + use_height = menu_height; + if (use_height == 0) { + min_width = dlg_calc_list_width(item_no, items) + 10; + /* calculate height without items (4) */ + dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, MAX(26, min_width)); + dlg_calc_listh(&height, &use_height, item_no); + } else { + dlg_auto_size(title, prompt, &height, &width, MIN_HIGH + use_height, 26); + } + dlg_button_layout(buttons, &width); + dlg_print_size(height, width); + dlg_ctl_size(height, width); + + x = dlg_box_x_ordinate(width); + y = dlg_box_y_ordinate(height); + + dialog = dlg_new_window(height, width, y, x); + dlg_register_window(dialog, "menubox", binding); + dlg_register_buttons(dialog, "menubox", buttons); + + dlg_mouse_setbase(x, y); + + dlg_draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); + dlg_draw_bottom_box(dialog); + dlg_draw_title(dialog, title); + + wattrset(dialog, dialog_attr); + dlg_print_autowrap(dialog, prompt, height, width); + + menu_width = width - 6; + getyx(dialog, cur_y, cur_x); + box_y = cur_y + 1; + box_x = (width - menu_width) / 2 - 1; + + /* + * After displaying the prompt, we know how much space we really have. + * Limit the list to avoid overwriting the ok-button. + */ + if (use_height + MIN_HIGH > height - cur_y) + use_height = height - MIN_HIGH - cur_y; + if (use_height <= 0) + use_height = 1; + + /* Find out maximal number of displayable items at once. */ + max_choice = MIN(use_height, + RowHeight(item_no)); + if (is_inputmenu) + max_choice /= INPUT_ROWS; + + /* create new window for the menu */ + menu = dlg_sub_window(dialog, use_height, menu_width, + y + box_y + 1, + x + box_x + 1); + dlg_register_window(menu, "menu", binding2); + dlg_register_buttons(menu, "menu", buttons); + + /* draw a box around the menu items */ + dlg_draw_box(dialog, box_y, box_x, use_height + 2, menu_width + 2, + menubox_border_attr, menubox_attr); + + name_width = 0; + text_width = 0; + + /* Find length of longest item to center menu * + * only if --menu was given, using --inputmenu * + * won't be centered. */ + for (i = 0; i < item_no; i++) { + name_width = MAX(name_width, dlg_count_columns(items[i].name)); + text_width = MAX(text_width, dlg_count_columns(items[i].text)); + } + + /* If the name+text is wider than the list is allowed, then truncate + * one or both of them. If the name is no wider than 30% of the list, + * leave it intact. + * + * FIXME: the gutter width and name/list ratio should be configurable. + */ + use_width = (menu_width - GUTTER); + if (text_width + name_width > use_width) { + int need = (int) (0.30 * use_width); + if (name_width > need) { + int want = (int) (use_width + * ((double) name_width) + / (text_width + name_width)); + name_width = (want > need) ? want : need; + } + text_width = use_width - name_width; + } + + tag_x = (is_inputmenu + ? 0 + : (use_width - text_width - name_width) / 2); + item_x = name_width + tag_x + GUTTER; + + if (choice - scrollamt >= max_choice) { + scrollamt = choice - (max_choice - 1); + choice = max_choice - 1; + } + + /* Print the menu */ + for (i = 0; i < max_choice; i++) { + print_item(menu, + &items[i + scrollamt], + i, + (i == choice) ? Selected : Unselected, + is_inputmenu); + } + (void) wnoutrefresh(menu); + + /* register the new window, along with its borders */ + dlg_mouse_mkbigregion(box_y + 1, box_x, use_height + 2, menu_width + 2, + KEY_MAX, 1, 1, 1 /* by lines */ ); + + print_arrows(dialog, box_x, box_y, scrollamt, max_choice, item_no, use_height); + + dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); + + while (result == DLG_EXIT_UNKNOWN) { + if (button < 0) /* --visit-items */ + wmove(dialog, box_y + ItemToRow(choice) + 1, box_x + tag_x + 1); + + key = dlg_mouse_wgetch(dialog, &fkey); + if (dlg_result_key(key, fkey, &result)) + break; + + found = FALSE; + if (fkey) { + /* + * Allow a mouse-click on a box to switch selection to that box. + * Handling a button click is a little more complicated, since we + * push a KEY_ENTER back onto the input stream so we'll put the + * cursor at the right place before handling the "keypress". + */ + if (key >= DLGK_MOUSE(KEY_MAX)) { + key -= DLGK_MOUSE(KEY_MAX); + i = RowToItem(key); + if (i < max_choice) { + found = TRUE; + } else { + beep(); + continue; + } + } else if (is_DLGK_MOUSE(key) + && dlg_ok_buttoncode(key - M_EVENT) >= 0) { + button = (key - M_EVENT); + ungetch('\n'); + continue; + } + } else { + /* + * Check if key pressed matches first character of any item tag in + * list. If there is more than one match, we will cycle through + * each one as the same key is pressed repeatedly. + */ + if (button < 0 || !dialog_state.visit_items) { + for (j = scrollamt + choice + 1; j < item_no; j++) { + if (dlg_match_char(dlg_last_getc(), items[j].name)) { + found = TRUE; + i = j - scrollamt; + break; + } + } + if (!found) { + for (j = 0; j <= scrollamt + choice; j++) { + if (dlg_match_char(dlg_last_getc(), items[j].name)) { + found = TRUE; + i = j - scrollamt; + break; + } + } + } + if (found) + dlg_flush_getc(); + } else if ((j = dlg_char_to_button(key, buttons)) >= 0) { + button = j; + ungetch('\n'); + continue; + } + + /* + * A single digit (1-9) positions the selection to that line in the + * current screen. + */ + if (!found + && (key <= '9') + && (key > '0') + && (key - '1' < max_choice)) { + found = TRUE; + i = key - '1'; + } + } + + if (!found && fkey) { + found = TRUE; + switch (key) { + case DLGK_PAGE_FIRST: + i = -scrollamt; + break; + case DLGK_PAGE_LAST: + i = item_no - 1 - scrollamt; + break; + case DLGK_MOUSE(KEY_PPAGE): + case DLGK_PAGE_PREV: + if (choice) + i = 0; + else if (scrollamt != 0) + i = -MIN(scrollamt, max_choice); + else + continue; + break; + case DLGK_MOUSE(KEY_NPAGE): + case DLGK_PAGE_NEXT: + i = MIN(choice + max_choice, item_no - scrollamt - 1); + break; + case DLGK_ITEM_PREV: + i = choice - 1; + if (choice == 0 && scrollamt == 0) + continue; + break; + case DLGK_ITEM_NEXT: + i = choice + 1; + if (scrollamt + choice >= item_no - 1) + continue; + break; + default: + found = FALSE; + break; + } + } + + if (found) { + if (i != choice) { + getyx(dialog, cur_y, cur_x); + if (i < 0 || i >= max_choice) { +#if defined(NCURSES_VERSION_MAJOR) && NCURSES_VERSION_MAJOR < 5 + /* + * Using wscrl to assist ncurses scrolling is not needed + * in version 5.x + */ + if (i == -1) { + if (use_height > 1) { + /* De-highlight current first item */ + print_item(menu, + &items[scrollamt], + 0, Unselected, is_inputmenu); + scrollok(menu, TRUE); + wscrl(menu, -RowHeight(1)); + scrollok(menu, FALSE); + } + scrollamt--; + print_item(menu, + &items[scrollamt], + 0, Selected, is_inputmenu); + } else if (i == max_choice) { + if (use_height > 1) { + /* De-highlight current last item before scrolling up */ + print_item(menu, + &items[scrollamt + max_choice - 1], + max_choice - 1, + Unselected, + is_inputmenu); + scrollok(menu, TRUE); + wscrl(menu, RowHeight(1)); + scrollok(menu, FALSE); + } + scrollamt++; + print_item(menu, + &items[scrollamt + max_choice - 1], + max_choice - 1, TRUE, + is_inputmenu); + } else +#endif + { + if (i < 0) { + scrollamt += i; + choice = 0; + } else { + choice = max_choice - 1; + scrollamt += (i - max_choice + 1); + } + for (i = 0; i < max_choice; i++) { + print_item(menu, + &items[scrollamt + i], + i, + (i == choice) ? Selected : Unselected, + is_inputmenu); + } + } + /* Clean bottom lines */ + if (is_inputmenu) { + int spare_lines, x_count; + spare_lines = use_height % INPUT_ROWS; + wattrset(menu, menubox_attr); + for (; spare_lines; spare_lines--) { + wmove(menu, use_height - spare_lines, 0); + for (x_count = 0; x_count < menu_width; + x_count++) { + waddch(menu, ' '); + } + } + } + (void) wnoutrefresh(menu); + print_arrows(dialog, + box_x, box_y, + scrollamt, max_choice, item_no, use_height); + } else { + /* De-highlight current item */ + print_item(menu, + &items[scrollamt + choice], + choice, + Unselected, + is_inputmenu); + /* Highlight new item */ + choice = i; + print_item(menu, + &items[scrollamt + choice], + choice, + Selected, + is_inputmenu); + (void) wnoutrefresh(menu); + print_arrows(dialog, + box_x, box_y, + scrollamt, max_choice, item_no, use_height); + (void) wmove(dialog, cur_y, cur_x); + wrefresh(dialog); + } + } + continue; /* wait for another key press */ + } + + if (fkey) { + switch (key) { + case DLGK_FIELD_PREV: + button = dlg_prev_button(buttons, button); + dlg_draw_buttons(dialog, height - 2, 0, buttons, button, + FALSE, width); + break; + case DLGK_FIELD_NEXT: + button = dlg_next_button(buttons, button); + dlg_draw_buttons(dialog, height - 2, 0, buttons, button, + FALSE, width); + break; + case DLGK_ENTER: + result = dlg_ok_buttoncode(button); + + /* + * If dlg_menu() is called from dialog_menu(), we want to + * capture the results into dialog_vars.input_result, but not + * if dlg_menu() is called directly from an application. We + * can check this by testing if rename_menutext is the function + * pointer owned by dialog_menu(). It would be nicer to have + * this logic inside dialog_menu(), but that cannot be done + * since we would lose compatibility for the results reported + * after input_menu_edit(). + */ + if (result == DLG_EXIT_ERROR) { + result = DLG_EXIT_UNKNOWN; + } else if (is_inputmenu + || rename_menutext == dlg_dummy_menutext) { + result = handle_button(result, + items, + scrollamt + choice); + } + + /* + * If we have a rename_menutext function, interpret the Extra + * button as a request to rename the menu's text. If that + * function doesn't return "Unknown", we will exit from this + * function. Usually that is done for dialog_menu(), so the + * shell script can use the updated value. If it does return + * "Unknown", update the list item only. A direct caller of + * dlg_menu() can free the renamed value - we cannot. + */ + if (is_inputmenu && result == DLG_EXIT_EXTRA) { + char *tmp; + + if (input_menu_edit(menu, + &items[scrollamt + choice], + choice, + &tmp)) { + result = rename_menutext(items, scrollamt + choice, tmp); + if (result == DLG_EXIT_UNKNOWN) { + items[scrollamt + choice].text = tmp; + } else { + free(tmp); + } + } else { + result = DLG_EXIT_UNKNOWN; + print_item(menu, + &items[scrollamt + choice], + choice, + Selected, + is_inputmenu); + (void) wnoutrefresh(menu); + free(tmp); + } + + if (result == DLG_EXIT_UNKNOWN) { + dlg_draw_buttons(dialog, height - 2, 0, + buttons, button, FALSE, width); + } + } + break; +#ifdef KEY_RESIZE + case KEY_RESIZE: + /* reset data */ + height = old_height; + width = old_width; + /* repaint */ + dlg_clear(); + dlg_del_window(dialog); + refresh(); + dlg_mouse_free_regions(); + goto retry; +#endif + default: + flash(); + break; + } + } + } + + dlg_mouse_free_regions(); + dlg_unregister_window(menu); + dlg_del_window(dialog); + free(prompt); + + *current_item = scrollamt + choice; + return result; +} + +/* + * Display a menu for choosing among a number of options + */ +int +dialog_menu(const char *title, + const char *cprompt, + int height, + int width, + int menu_height, + int item_no, + char **items) +{ + int result; + int choice; + int i; + DIALOG_LISTITEM *listitems; + + listitems = dlg_calloc(DIALOG_LISTITEM, (size_t) item_no + 1); + assert_ptr(listitems, "dialog_menu"); + + for (i = 0; i < item_no; ++i) { + listitems[i].name = ItemName(i); + listitems[i].text = ItemText(i); + listitems[i].help = ((dialog_vars.item_help) + ? ItemHelp(i) + : dlg_strempty()); + } + dlg_align_columns(&listitems[0].text, sizeof(DIALOG_LISTITEM), item_no); + + result = dlg_menu(title, + cprompt, + height, + width, + menu_height, + item_no, + listitems, + &choice, + dialog_vars.input_menu ? dlg_renamed_menutext : dlg_dummy_menutext); + + dlg_free_columns(&listitems[0].text, sizeof(DIALOG_LISTITEM), item_no); + free(listitems); + return result; +} Index: contrib/dialog/pause.c =================================================================== --- contrib/dialog/pause.c (revision 0) +++ contrib/dialog/pause.c (revision 0) @@ -0,0 +1,244 @@ +/* + * $Id: pause.c,v 1.22 2010/04/28 00:29:50 tom Exp $ + * + * pause.c -- implements the pause dialog + * + * Copyright 2004-2009,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + * + * This is adapted from source contributed by + * Yura Kalinichenko + */ + +#include <dialog.h> +#include <dlg_keys.h> + +#define MY_TIMEOUT 50 + +#define MIN_HIGH (4) +#define MIN_WIDE (10 + 2 * (2 + MARGIN)) +#define BTN_HIGH (1 + 2 * MARGIN) + +/* + * This is like gauge, but can be interrupted. + * + * A pause box displays a meter along the bottom of the box. The meter + * indicates how many seconds remain until the end of the pause. The pause + * exits when timeout is reached (status OK) or the user presses: + * OK button (status OK) + * CANCEL button (status CANCEL) + * Esc key (status ESC) + * + */ +int +dialog_pause(const char *title, + const char *cprompt, + int height, + int width, + int seconds) +{ + /* *INDENT-OFF* */ + static DLG_KEYS_BINDING binding[] = { + ENTERKEY_BINDINGS, + DLG_KEYS_DATA( DLGK_ENTER, ' ' ), + DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_DOWN ), + DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_RIGHT ), + DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), + DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_UP ), + DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), + DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_LEFT ), + END_KEYS_BINDING + }; + /* *INDENT-ON* */ + +#ifdef KEY_RESIZE + int old_height = height; + int old_width = width; +#endif + + int i, x, y, step; + int button = 0; + int seconds_orig; + WINDOW *dialog; + const char **buttons = dlg_ok_labels(); + bool have_buttons = (dlg_button_count(buttons) != 0); + int key = 0, fkey; + int result = DLG_EXIT_UNKNOWN; + int button_high = (have_buttons ? BTN_HIGH : MARGIN); + int guage_y; + char *prompt = dlg_strclone(cprompt); + + curs_set(0); + + dlg_tab_correct_str(prompt); + + seconds_orig = (seconds > 0) ? seconds : 1; + +#ifdef KEY_RESIZE + retry: + height = old_height; + width = old_width; +#endif + + if (have_buttons) { + dlg_auto_size(title, prompt, &height, &width, + MIN_HIGH, + MIN_WIDE); + dlg_button_layout(buttons, &width); + } else { + dlg_auto_size(title, prompt, &height, &width, + MIN_HIGH + MARGIN - BTN_HIGH, + MIN_WIDE); + } + guage_y = height - button_high - (1 + 2 * MARGIN); + dlg_print_size(height, width); + dlg_ctl_size(height, width); + + /* center dialog box on screen */ + x = dlg_box_x_ordinate(width); + y = dlg_box_y_ordinate(height); + + dialog = dlg_new_window(height, width, y, x); + dlg_register_window(dialog, "pause", binding); + dlg_register_buttons(dialog, "pause", buttons); + + dlg_mouse_setbase(x, y); + nodelay(dialog, TRUE); + + do { + (void) werase(dialog); + dlg_draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); + + dlg_draw_title(dialog, title); + + wattrset(dialog, dialog_attr); + dlg_print_autowrap(dialog, prompt, height, width); + + dlg_draw_box(dialog, + guage_y, 2 + MARGIN, + 2 + MARGIN, width - 2 * (2 + MARGIN), + dialog_attr, + border_attr); + + /* + * Clear the area for the progress bar by filling it with spaces + * in the title-attribute, and write the percentage with that + * attribute. + */ + (void) wmove(dialog, guage_y + MARGIN, 4); + wattrset(dialog, title_attr); + + for (i = 0; i < (width - 2 * (3 + MARGIN)); i++) + (void) waddch(dialog, ' '); + + (void) wmove(dialog, guage_y + MARGIN, (width / 2) - 2); + (void) wprintw(dialog, "%3d", seconds); + + /* + * Now draw a bar in reverse, relative to the background. + * The window attribute was useful for painting the background, + * but requires some tweaks to reverse it. + */ + x = (seconds * (width - 2 * (3 + MARGIN))) / seconds_orig; + if ((title_attr & A_REVERSE) != 0) { + wattroff(dialog, A_REVERSE); + } else { + wattrset(dialog, A_REVERSE); + } + (void) wmove(dialog, guage_y + MARGIN, 4); + for (i = 0; i < x; i++) { + chtype ch = winch(dialog); + if (title_attr & A_REVERSE) { + ch &= ~A_REVERSE; + } + (void) waddch(dialog, ch); + } + + mouse_mkbutton(height - 2, width / 2 - 4, 6, '\n'); + if (have_buttons) { + dlg_draw_bottom_box(dialog); + dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); + } + (void) wrefresh(dialog); + + for (step = 0; + (result == DLG_EXIT_UNKNOWN) && (step < 1000); + step += MY_TIMEOUT) { + + napms(MY_TIMEOUT); + key = dlg_mouse_wgetch_nowait(dialog, &fkey); + if (key == ERR) { + ; /* ignore errors in nodelay mode */ + } else { + if (dlg_result_key(key, fkey, &result)) + break; + } + + switch (key) { +#ifdef KEY_RESIZE + case KEY_RESIZE: + dlg_clear(); /* fill the background */ + dlg_del_window(dialog); /* delete this window */ + refresh(); /* get it all onto the terminal */ + goto retry; +#endif + case DLGK_FIELD_NEXT: + button = dlg_next_button(buttons, button); + if (button < 0) + button = 0; + dlg_draw_buttons(dialog, + height - 2, 0, + buttons, button, + FALSE, width); + break; + case DLGK_FIELD_PREV: + button = dlg_prev_button(buttons, button); + if (button < 0) + button = 0; + dlg_draw_buttons(dialog, + height - 2, 0, + buttons, button, + FALSE, width); + break; + case DLGK_ENTER: + /* Do not use dlg_exit_buttoncode() since we want to return + * a cancel rather than ok if the timeout has not expired. + */ + result = button ? DLG_EXIT_CANCEL : DLG_EXIT_OK; + break; + case DLGK_MOUSE(0): + result = DLG_EXIT_OK; + break; + case DLGK_MOUSE(1): + result = DLG_EXIT_CANCEL; + break; + case ERR: + break; + default: + result = DLG_EXIT_OK; + break; + } + } + } while ((result == DLG_EXIT_UNKNOWN) && (seconds-- > 0)); + + nodelay(dialog, FALSE); + curs_set(1); + dlg_mouse_free_regions(); + dlg_del_window(dialog); + free(prompt); + return ((result == DLG_EXIT_UNKNOWN) ? DLG_EXIT_OK : result); +} Index: contrib/dialog/arrows.c =================================================================== --- contrib/dialog/arrows.c (revision 0) +++ contrib/dialog/arrows.c (revision 0) @@ -0,0 +1,217 @@ +/* + * $Id: arrows.c,v 1.29 2010/02/24 09:17:00 Samuel.Martin.Moro Exp $ + * + * arrows.c -- draw arrows to indicate end-of-range for lists + * + * Copyright 2000-2009,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + */ + +#include <dialog.h> + +#ifdef USE_WIDE_CURSES +#define add_acs(win, code) wadd_wch(win, W ## code) +#else +#define add_acs(win, code) waddch(win, dlg_boxchar(code)) +#endif + +#ifdef HAVE_COLOR +static chtype +merge_colors(chtype foreground, chtype background) +{ + chtype result = foreground; + if ((foreground & A_COLOR) != (background & A_COLOR)) { + short fg_f, bg_f; + short fg_b, bg_b; + short fg_pair = (short) PAIR_NUMBER(foreground); + short bg_pair = (short) PAIR_NUMBER(background); + + if (pair_content(fg_pair, &fg_f, &bg_f) != ERR + && pair_content(bg_pair, &fg_b, &bg_b) != ERR) { + result &= ~A_COLOR; + result |= dlg_color_pair(fg_f, bg_b); + } + } + return result; +} +#else +#define merge_colors(f,b) (f) +#endif + +void +dlg_draw_arrows2(WINDOW *win, + int top_arrow, + int bottom_arrow, + int x, + int top, + int bottom, + chtype attr, + chtype borderattr) +{ + chtype save = getattrs(win); + int cur_x, cur_y; + int limit_x = getmaxx(win); + bool draw_top = TRUE; + + getyx(win, cur_y, cur_x); + + /* + * If we're drawing a centered title, do not overwrite with the arrows. + */ + if (dialog_vars.title) { + int have = (limit_x - dlg_count_columns(dialog_vars.title)) / 2; + int need = x + 5; + if (need > have) + draw_top = FALSE; + } + + if (draw_top) { + (void) wmove(win, top, x); + if (top_arrow) { + wattrset(win, merge_colors(uarrow_attr, attr)); + (void) add_acs(win, ACS_UARROW); + (void) waddstr(win, "(-)"); + } else { + wattrset(win, attr); + (void) whline(win, dlg_boxchar(ACS_HLINE), 4); + } + } + mouse_mkbutton(top, x - 1, 6, KEY_PPAGE); + + (void) wmove(win, bottom, x); + if (bottom_arrow) { + wattrset(win, merge_colors(darrow_attr, attr)); + (void) add_acs(win, ACS_DARROW); + (void) waddstr(win, "(+)"); + } else { + wattrset(win, borderattr); + (void) whline(win, dlg_boxchar(ACS_HLINE), 4); + } + mouse_mkbutton(bottom, x - 1, 6, KEY_NPAGE); + + (void) wmove(win, cur_y, cur_x); + wrefresh(win); + + wattrset(win, save); +} + +void +dlg_draw_scrollbar(WINDOW *win, + long first_data, + long this_data, + long next_data, + long total_data, + int left, + int right, + int top, + int bottom, + chtype attr, + chtype borderattr) +{ + char buffer[80]; + int percent; + int len; + int oldy, oldx, maxy, maxx; + + chtype save = getattrs(win); + int top_arrow = (first_data != 0); + int bottom_arrow = (next_data < total_data); + + getyx(win, oldy, oldx); + getmaxyx(win, maxy, maxx); + + if (bottom_arrow || top_arrow || dialog_state.use_scrollbar) { + percent = (!total_data + ? 100 + : (int) ((next_data * 100) + / total_data)); + + if (percent < 0) + percent = 0; + else if (percent > 100) + percent = 100; + + wattrset(win, position_indicator_attr); + (void) sprintf(buffer, "%d%%", percent); + (void) wmove(win, bottom, right - 7); + (void) waddstr(win, buffer); + if ((len = dlg_count_columns(buffer)) < 4) { + wattrset(win, border_attr); + whline(win, dlg_boxchar(ACS_HLINE), 4 - len); + } + } +#define BARSIZE(num) ((all_high * (num)) + all_high - 1) / total_data + + if (dialog_state.use_scrollbar) { + int all_high = (bottom - top - 1); + + if (total_data > 0 && all_high > 0) { + int bar_high; + int bar_y; + + bar_high = BARSIZE(next_data - this_data); + if (bar_high <= 0) + bar_high = 1; + + if (bar_high < all_high) { + wmove(win, top + 1, right); + + wattrset(win, save); + wvline(win, ACS_VLINE | A_REVERSE, all_high); + + bar_y = BARSIZE(this_data); + if (bar_y > all_high - bar_high) + bar_y = all_high - bar_high; + + wmove(win, top + 1 + bar_y, right); + + wattrset(win, position_indicator_attr); + wattron(win, A_REVERSE); + wvline(win, ACS_BLOCK, bar_high); + } + } + } + dlg_draw_arrows2(win, + top_arrow, + bottom_arrow, + left + ARROWS_COL, + top, + bottom, + attr, + borderattr); + + wattrset(win, save); + wmove(win, oldy, oldx); +} + +void +dlg_draw_arrows(WINDOW *win, + int top_arrow, + int bottom_arrow, + int x, + int top, + int bottom) +{ + dlg_draw_arrows2(win, + top_arrow, + bottom_arrow, + x, + top, + bottom, + menubox_attr, + menubox_border_attr); +} Index: contrib/dialog/mousewget.c =================================================================== --- contrib/dialog/mousewget.c (revision 0) +++ contrib/dialog/mousewget.c (revision 0) @@ -0,0 +1,91 @@ +/* + * $Id: mousewget.c,v 1.21 2008/03/16 20:09:03 tom Exp $ + * + * mousewget.c -- mouse/wgetch support for dialog + * + * Copyright 2000-2006,2008 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + */ + +#include <dialog.h> +#include <dlg_keys.h> + +static int +mouse_wgetch(WINDOW *win, int *fkey, bool ignore_errs) +{ + int mouse_err = FALSE; + int key; + + do { + + key = dlg_getc(win, fkey); + +#if USE_MOUSE + + mouse_err = FALSE; + if (fkey && (key == KEY_MOUSE)) { + MEVENT event; + mseRegion *p; + + if (getmouse(&event) != ERR) { + if ((p = dlg_mouse_region(event.y, event.x)) != 0) { + key = DLGK_MOUSE(p->code); + } else if ((p = dlg_mouse_bigregion(event.y, event.x)) != 0) { + int x = event.x - p->x; + int y = event.y - p->y; + int row = (p->X - p->x) / p->step_x; + + key = -(p->code); + switch (p->mode) { + case 1: /* index by lines */ + key += y; + break; + case 2: /* index by columns */ + key += (x / p->step_x); + break; + default: + case 3: /* index by cells */ + key += (x / p->step_x) + (y * row); + break; + } + } else { + (void) beep(); + mouse_err = TRUE; + } + } else { + (void) beep(); + mouse_err = TRUE; + } + } +#endif + + } while (ignore_errs && mouse_err); + + return key; +} + +int +dlg_mouse_wgetch(WINDOW *win, int *fkey) +{ + return mouse_wgetch(win, fkey, TRUE); +} + +int +dlg_mouse_wgetch_nowait(WINDOW *win, int *fkey) +{ + return mouse_wgetch(win, fkey, FALSE); +} Index: contrib/dialog/ui_getc.c =================================================================== --- contrib/dialog/ui_getc.c (revision 0) +++ contrib/dialog/ui_getc.c (revision 0) @@ -0,0 +1,475 @@ +/* + * $Id: ui_getc.c,v 1.48 2010/01/18 10:24:06 tom Exp $ + * + * ui_getc.c - user interface glue for getc() + * + * Copyright 2001-2009,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + */ + +#include <dialog.h> +#include <dlg_keys.h> + +#ifdef NEED_WCHAR_H +#include <wchar.h> +#endif + +#if TIME_WITH_SYS_TIME +# include <sys/time.h> +# include <time.h> +#else +# if HAVE_SYS_TIME_H +# include <sys/time.h> +# else +# include <time.h> +# endif +#endif + +#ifdef HAVE_SYS_WAIT_H +#include <sys/wait.h> +#endif + +#ifdef __QNX__ +#include <sys/select.h> +#endif + +#ifndef WEXITSTATUS +# ifdef HAVE_TYPE_UNIONWAIT +# define WEXITSTATUS(status) (status.w_retcode) +# else +# define WEXITSTATUS(status) (((status) & 0xff00) >> 8) +# endif +#endif + +#ifndef WTERMSIG +# ifdef HAVE_TYPE_UNIONWAIT +# define WTERMSIG(status) (status.w_termsig) +# else +# define WTERMSIG(status) ((status) & 0x7f) +# endif +#endif + +void +dlg_add_callback(DIALOG_CALLBACK * p) +{ + p->next = dialog_state.getc_callbacks; + dialog_state.getc_callbacks = p; + wtimeout(p->win, WTIMEOUT_VAL); +} + +/* + * Like dlg_add_callback(), but providing for cleanup of caller's associated + * state. + */ +void +dlg_add_callback_ref(DIALOG_CALLBACK ** p, DIALOG_FREEBACK freeback) +{ + (*p)->caller = p; + (*p)->freeback = freeback; + dlg_add_callback(*p); +} + +void +dlg_remove_callback(DIALOG_CALLBACK * p) +{ + DIALOG_CALLBACK *q; + + if (p->input != 0) { + fclose(p->input); + if (p->input == dialog_state.pipe_input) + dialog_state.pipe_input = 0; + p->input = 0; + } + + if (!(p->keep_win)) + dlg_del_window(p->win); + if ((q = dialog_state.getc_callbacks) == p) { + dialog_state.getc_callbacks = p->next; + } else { + while (q != 0) { + if (q->next == p) { + q->next = p->next; + break; + } + q = q->next; + } + } + + /* handle dlg_add_callback_ref cleanup */ + if (p->freeback != 0) + p->freeback(p); + if (p->caller != 0) + *(p->caller) = 0; + + free(p); +} + +/* + * FIXME: this could be replaced by a select/poll on several file descriptors + */ +static int +dlg_getc_ready(DIALOG_CALLBACK * p) +{ + fd_set read_fds; + int fd = fileno(p->input); + struct timeval test; + + FD_ZERO(&read_fds); + FD_SET(fd, &read_fds); + + test.tv_sec = 0; /* Seconds. */ + test.tv_usec = (isatty(fd) /* Microseconds. */ + ? (WTIMEOUT_VAL * 1000) + : 1); + return (select(fd + 1, &read_fds, (fd_set *) 0, (fd_set *) 0, &test) == 1) + && (FD_ISSET(fd, &read_fds)); +} + +int +dlg_getc_callbacks(int ch, int fkey, int *result) +{ + int code = FALSE; + DIALOG_CALLBACK *p, *q; + + if ((p = dialog_state.getc_callbacks) != 0) { + do { + q = p->next; + if (dlg_getc_ready(p)) { + if (!(p->handle_getc(p, ch, fkey, result))) { + dlg_remove_callback(p); + } + } + } while ((p = q) != 0); + code = (dialog_state.getc_callbacks != 0); + } + return code; +} + +static void +dlg_raise_window(WINDOW *win) +{ + touchwin(win); + wmove(win, getcury(win), getcurx(win)); + wnoutrefresh(win); + doupdate(); +} + +/* + * This is a work-around for the case where we actually need the wide-character + * code versus a byte stream. + */ +static int last_getc = ERR; + +#ifdef USE_WIDE_CURSES +static char last_getc_bytes[80]; +static int have_last_getc; +static int used_last_getc; +#endif + +int +dlg_last_getc(void) +{ +#ifdef USE_WIDE_CURSES + if (used_last_getc != 1) + return ERR; /* not really an error... */ +#endif + return last_getc; +} + +void +dlg_flush_getc(void) +{ + last_getc = ERR; +#ifdef USE_WIDE_CURSES + have_last_getc = 0; + used_last_getc = 0; +#endif +} + +/* + * Check if the stream has been unexpectedly closed, returning false in that + * case. + */ +static bool +valid_file(FILE *fp) +{ + bool code = FALSE; + int fd = fileno(fp); + + if (fd >= 0) { + long result = 0; + if ((result = fcntl(fd, F_GETFL, 0)) >= 0) { + code = TRUE; + } + } + return code; +} + +/* + * Read a character from the given window. Handle repainting here (to simplify + * things in the calling application). Also, if input-callback(s) are set up, + * poll the corresponding files and handle the updates, e.g., for displaying a + * tailbox. + */ +int +dlg_getc(WINDOW *win, int *fkey) +{ + WINDOW *save_win = win; + int ch = ERR; + int before_lookup; + int result; + bool done = FALSE; + bool literal = FALSE; + DIALOG_CALLBACK *p; + int interval = dialog_vars.timeout_secs; + time_t expired = time((time_t *) 0) + dialog_vars.timeout_secs; + time_t current; + + if (dialog_state.getc_callbacks != 0) + wtimeout(win, WTIMEOUT_VAL); + else if (interval > 0) + wtimeout(win, interval); + + while (!done) { +#ifdef USE_WIDE_CURSES + int code; + mbstate_t state; + wchar_t my_wchar; + wint_t my_wint; + + /* + * We get a wide character, translate it to multibyte form to avoid + * having to change the rest of the code to use wide-characters. + */ + if (used_last_getc >= have_last_getc) { + used_last_getc = 0; + have_last_getc = 0; + ch = ERR; + *fkey = 0; + code = wget_wch(win, &my_wint); + my_wchar = (wchar_t) my_wint; + switch (code) { + case KEY_CODE_YES: + ch = *fkey = my_wchar; + last_getc = my_wchar; + break; + case OK: + memset(&state, 0, sizeof(state)); + have_last_getc = (int) wcrtomb(last_getc_bytes, my_wchar, &state); + if (have_last_getc < 0) { + have_last_getc = used_last_getc = 0; + last_getc_bytes[0] = (char) my_wchar; + } + ch = (int) CharOf(last_getc_bytes[used_last_getc++]); + last_getc = my_wchar; + break; + case ERR: + ch = ERR; + last_getc = ERR; + break; + default: + break; + } + } else { + ch = (int) CharOf(last_getc_bytes[used_last_getc++]); + } +#else + ch = wgetch(win); + last_getc = ch; + *fkey = (ch > KEY_MIN && ch < KEY_MAX); +#endif + if (literal) { + done = TRUE; + continue; + } + + before_lookup = ch; + ch = dlg_lookup_key(win, ch, fkey); + dlg_trace_chr(ch, *fkey); + + current = time((time_t *) 0); + + switch (ch) { + case CHR_LITERAL: + if (!literal) { + literal = TRUE; + keypad(win, FALSE); + continue; + } + break; + case CHR_REPAINT: + (void) touchwin(win); + (void) wrefresh(curscr); + break; + case ERR: /* wtimeout() in effect; check for file I/O */ + if (interval > 0 + && current >= expired) { + dlg_exiterr("timeout"); + } + if (dlg_getc_callbacks(ch, *fkey, &result)) { + dlg_raise_window(win); + } else { + done = (interval <= 0); + } + if (!valid_file(stdin) + || !valid_file(dialog_state.screen_output)) { + ch = ESC; + done = TRUE; + } + break; + case DLGK_FIELD_NEXT: + /* FALLTHRU */ + case TAB: + /* Handle tab as a special case for traversing between the nominal + * "current" window, and other windows having callbacks. If the + * nominal (control) window closes, we'll close the windows with + * callbacks. + */ + if (dialog_state.getc_callbacks != 0 && + before_lookup == TAB) { + if ((p = dialog_state.getc_redirect) != 0) { + p = p->next; + } else { + p = dialog_state.getc_callbacks; + } + if ((dialog_state.getc_redirect = p) != 0) { + win = p->win; + } else { + win = save_win; + } + dlg_raise_window(win); + break; + } + /* FALLTHRU */ + default: +#ifdef NO_LEAKS + if (before_lookup == DLG_CTRL('P')) { + /* for testing, ^P closes the connection */ + close(0); + close(1); + close(2); + break; + } +#endif + if ((p = dialog_state.getc_redirect) != 0) { + if (!(p->handle_getc(p, ch, *fkey, &result))) { + dlg_remove_callback(p); + dialog_state.getc_redirect = 0; + win = save_win; + } + } else { + done = TRUE; + } + break; +#ifdef HAVE_DLG_TRACE + case CHR_TRACE: + dlg_trace_win(win); + break; +#endif + } + } + if (literal) + keypad(win, TRUE); + return ch; +} + +static void +finish_bg(int sig GCC_UNUSED) +{ + end_dialog(); + dlg_exit(DLG_EXIT_ERROR); +} + +/* + * If we have callbacks active, purge the list of all that are not marked + * to keep in the background. If any remain, run those in a background + * process. + */ +void +dlg_killall_bg(int *retval) +{ + DIALOG_CALLBACK *cb; + int pid; +#ifdef HAVE_TYPE_UNIONWAIT + union wait wstatus; +#else + int wstatus; +#endif + + if ((cb = dialog_state.getc_callbacks) != 0) { + while (cb != 0) { + if (cb->keep_bg) { + cb = cb->next; + } else { + dlg_remove_callback(cb); + cb = dialog_state.getc_callbacks; + } + } + if (dialog_state.getc_callbacks != 0) { + + refresh(); + fflush(stdout); + fflush(stderr); + reset_shell_mode(); + if ((pid = fork()) != 0) { + _exit(pid > 0 ? DLG_EXIT_OK : DLG_EXIT_ERROR); + } else if (pid == 0) { /* child */ + if ((pid = fork()) != 0) { + /* + * Echo the process-id of the grandchild so a shell script + * can read that, and kill that process. We'll wait around + * until then. Our parent has already left, leaving us + * temporarily orphaned. + */ + if (pid > 0) { /* parent */ + fprintf(stderr, "%d\n", pid); + fflush(stderr); + } + /* wait for child */ +#ifdef HAVE_WAITPID + while (-1 == waitpid(pid, &wstatus, 0)) { +#ifdef EINTR + if (errno == EINTR) + continue; +#endif /* EINTR */ +#ifdef ERESTARTSYS + if (errno == ERESTARTSYS) + continue; +#endif /* ERESTARTSYS */ + break; + } +#else + while (wait(&wstatus) != pid) /* do nothing */ + ; +#endif + _exit(WEXITSTATUS(wstatus)); + } else if (pid == 0) { + if (!dialog_vars.cant_kill) + (void) signal(SIGHUP, finish_bg); + (void) signal(SIGINT, finish_bg); + (void) signal(SIGQUIT, finish_bg); + (void) signal(SIGSEGV, finish_bg); + while (dialog_state.getc_callbacks != 0) { + int fkey = 0; + dlg_getc_callbacks(ERR, fkey, retval); + napms(1000); + } + } + } + } + } +} Index: contrib/dialog/samples/mixedgauge =================================================================== --- contrib/dialog/samples/mixedgauge (revision 0) +++ contrib/dialog/samples/mixedgauge (revision 0) @@ -0,0 +1,26 @@ +#! /bin/sh +# $Id: mixedgauge,v 1.7 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +background="An Example of --mixedgauge usage" + +for i in 5 10 20 30 40 50 60 70 80 90 100 +do +$DIALOG --backtitle "$background" \ + --title "Mixed gauge demonstration" "$@" \ + --mixedgauge "This is a prompt message,\nand this is the second line." \ + 0 0 33 \ + "Process one" "0" \ + "Process two" "1" \ + "Process three" "2" \ + "Process four" "3" \ + "" "8" \ + "Process five" "5" \ + "Process six" "6" \ + "Process seven" "7" \ + "Process eight" "4" \ + "Process nine" "-$i" +# break +sleep 1 +done Property changes on: contrib/dialog/samples/mixedgauge ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/textbox2 =================================================================== --- contrib/dialog/samples/textbox2 (revision 0) +++ contrib/dialog/samples/textbox2 (revision 0) @@ -0,0 +1,44 @@ +#!/bin/sh +# $Id: textbox2,v 1.8 2010/01/13 10:36:49 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +cat << EOF > $tempfile +Hi, this is a text dialog box. It can be used to display text from a file. +The file should not contain any 'tab' characters, so you should 'expand' +the file first if it contains 'tab' characters. + +It's like a simple text file viewer, with these keys implemented: + +PGDN/SPACE - Move down one page +PGUP/'b' - Move up one page +ENTER/DOWN/'j' - Move down one line +UP/'k' - Move up one line +LEFT/'h' - Scroll left +RIGHT/'l' - Scroll right +'0' - Move to beginning of line +HOME/'g' - Move to beginning of file +END/'G' - Move to end of file +'/' - Forward search +'?' - Backward search +'n' - Repeat last search (forward) +'N' - Repeat last search (backward) + + +The following is a sample text file: + + +EOF + +TEXT=/usr/share/common-licenses/GPL +test -f $TEXT || TEXT=../COPYING + +cat $TEXT | expand >> $tempfile + +$DIALOG --clear --title "TEXT BOX" "$@" --textbox "$tempfile" 0 0 + +retval=$? + +. ./report-button Property changes on: contrib/dialog/samples/textbox2 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/yesno2 =================================================================== --- contrib/dialog/samples/yesno2 (revision 0) +++ contrib/dialog/samples/yesno2 (revision 0) @@ -0,0 +1,18 @@ +#!/bin/sh +# $Id: yesno2,v 1.7 2010/01/13 10:40:39 tom Exp $ + +. ./setup-vars + +$DIALOG --title "YES/NO BOX" "$@" \ + --yesno "Hi, this is a yes/no dialog box. You can use this to ask \ +questions that have an answer of either yes or no. \ +BTW, do you notice that long lines will be automatically \ +wrapped around so that they can fit in the box? You can \ +also control line breaking explicitly by inserting \ +'backslash n' at any place you like, but in this case, \ +auto wrap around will be disabled and you will have to \ +control line breaking yourself." 0 0 + +retval=$? + +. ./report-yesno Property changes on: contrib/dialog/samples/yesno2 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/report-string =================================================================== --- contrib/dialog/samples/report-string (revision 0) +++ contrib/dialog/samples/report-string (revision 0) @@ -0,0 +1,23 @@ +# $Id: report-string,v 1.2 2010/01/13 10:00:11 tom Exp $ +# Report result passed in a string $RESULT +# vile:shmode + +case $retval in + $DIALOG_OK) + echo "Result is $RESULT";; + $DIALOG_CANCEL) + echo "Cancel pressed.";; + $DIALOG_HELP) + echo "Help pressed ($RESULT).";; + $DIALOG_EXTRA) + echo "Extra button pressed.";; + $DIALOG_ITEM_HELP) + echo "Item-help button pressed.";; + $DIALOG_ESC) + if test -n "$RESULT" ; then + echo "$RESULT" + else + echo "ESC pressed." + fi + ;; +esac Index: contrib/dialog/samples/yesno3 =================================================================== --- contrib/dialog/samples/yesno3 (revision 0) +++ contrib/dialog/samples/yesno3 (revision 0) @@ -0,0 +1,18 @@ +#!/bin/sh +# $Id: yesno3,v 1.6 2010/01/13 10:40:39 tom Exp $ + +. ./setup-vars + +$DIALOG --timeout 20 --title "YES/NO BOX" "$@" \ + --yesno "Hi, this is a yes/no dialog box. You can use this to ask \ +questions that have an answer of either yes or no. \ +BTW, do you notice that long lines will be automatically \ +wrapped around so that they can fit in the box? You can \ +also control line breaking explicitly by inserting \ +'backslash n' at any place you like, but in this case, \ +auto wrap around will be disabled and you will have to \ +control line breaking yourself." 0 0 + +retval=$? + +. ./report-yesno Property changes on: contrib/dialog/samples/yesno3 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/textbox3 =================================================================== --- contrib/dialog/samples/textbox3 (revision 0) +++ contrib/dialog/samples/textbox3 (revision 0) @@ -0,0 +1,20 @@ +#!/bin/sh +# $Id: textbox3,v 1.6 2010/01/13 10:37:01 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +TEXT=/usr/share/common-licenses/GPL +test -f $TEXT || TEXT=../COPYING + +cat textbox.txt | expand > $tempfile +cat $TEXT | expand >> $tempfile + +$DIALOG --clear --title "TEXT BOX" \ + --extra-button "$@" \ + --textbox "$tempfile" 22 77 + +retval=$? + +. ./report-button Property changes on: contrib/dialog/samples/textbox3 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/yesno4 =================================================================== --- contrib/dialog/samples/yesno4 (revision 0) +++ contrib/dialog/samples/yesno4 (revision 0) @@ -0,0 +1,18 @@ +#!/bin/sh +# $Id: yesno4,v 1.1 2010/01/14 10:26:40 tom Exp $ + +. ./setup-vars + +$DIALOG --title "YES/NO BOX" "$@" \ + --yesno "Hi, this is a yes/no dialog box. You can use this to ask \ +questions that have an answer of either yes or no. \ +BTW, do you notice that long lines will be automatically \ +wrapped around so that they can fit in the box? You can \ +also control line breaking explicitly by inserting \ +'backslash n' at any place you like, but in this case, \ +auto wrap around will be disabled and you will have to \ +control line breaking yourself." 6 30 + +retval=$? + +. ./report-yesno Property changes on: contrib/dialog/samples/yesno4 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/killall =================================================================== --- contrib/dialog/samples/killall (revision 0) +++ contrib/dialog/samples/killall (revision 0) @@ -0,0 +1,13 @@ +#! /bin/sh +# $Id: killall,v 1.2 2004/09/17 19:56:18 tom Exp $ +# Linux has a program that does this correctly. +for prog in $* +do + pid=`ps -a |fgrep $prog |fgrep -v fgrep|sed -e 's/^[ ]*//' -e 's/ .*//' ` + if test -n "$pid" ; then + echo killing pid=$pid, $prog + kill -1 $pid || \ + kill -15 $pid || \ + kill -9 $pid + fi +done Property changes on: contrib/dialog/samples/killall ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/progress2 =================================================================== --- contrib/dialog/samples/progress2 (revision 0) +++ contrib/dialog/samples/progress2 (revision 0) @@ -0,0 +1,19 @@ +#!/bin/sh +# $Id: progress2,v 1.5 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +ls -1 >$tempfile +( +while true +do +read text +test -z "$text" && break +ls -ld "$text" +sleep 1 +done <$tempfile +) | + +$DIALOG --title "PROGRESS" "$@" --progressbox "This is a detailed description\nof the progress-box." 20 70 Property changes on: contrib/dialog/samples/progress2 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/gauge =================================================================== --- contrib/dialog/samples/gauge (revision 0) +++ contrib/dialog/samples/gauge (revision 0) @@ -0,0 +1,22 @@ +#!/bin/sh +# $Id: gauge,v 1.7 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +PCT=10 +( +while test $PCT != 100 +do +cat <<EOF +XXX +$PCT +The new\n\ +message ($PCT percent) +XXX +EOF +PCT=`expr $PCT + 10` +sleep 1 +done +) | + +$DIALOG --title "GAUGE" "$@" --gauge "Hi, this is a gauge widget" 20 70 0 Property changes on: contrib/dialog/samples/gauge ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/calendar-stdout =================================================================== --- contrib/dialog/samples/calendar-stdout (revision 0) +++ contrib/dialog/samples/calendar-stdout (revision 0) @@ -0,0 +1,9 @@ +#!/bin/sh +# $Id: calendar-stdout,v 1.6 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +RESULT=`$DIALOG --stdout --title "CALENDAR" "$@" --calendar "Please choose a date..." 0 0 7 7 1981` +retval=$? + +. ./report-string Property changes on: contrib/dialog/samples/calendar-stdout ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/mixedform =================================================================== --- contrib/dialog/samples/mixedform (revision 0) +++ contrib/dialog/samples/mixedform (revision 0) @@ -0,0 +1,61 @@ +#! /bin/sh +# $Id: mixedform,v 1.6 2010/01/13 10:47:35 tom Exp $ + +. ./setup-vars + +backtitle="An Example for the use of --mixedform:" +returncode=0 +while test $returncode != 1 && test $returncode != 250 +do +returncode=$? +exec 3>&1 +value=`$DIALOG --title "Mixed form demonstration" --ok-label "Submit" \ + --backtitle "$backtitle" \ + --insecure "$@" \ + --mixedform "Here is a possible piece of a configuration program." \ +20 50 0 \ + "Username :" 1 1 "Kiran" 1 20 10 0 2 \ + "Password :" 2 1 "" 2 20 8 0 1 \ + "Retype Password :" 3 1 "" 3 20 8 0 1 \ + "HOME :" 4 1 "Cisco" 4 20 40 0 0 \ +2>&1 1>&3` +returncode=$? +exec 3>&- +show=`echo "$value" |sed -e 's/^/ /'` + + case $returncode in + $DIALOG_CANCEL) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" \ + --yesno "Really quit?" 10 30 + case $? in + $DIALOG_OK) + break + ;; + $DIALOG_CANCEL) + returncode=99 + ;; + esac + ;; + $DIALOG_OK) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" --no-collapse --cr-wrap \ + --msgbox "Resulting data:\n\ +$show" 10 40 + ;; + $DIALOG_HELP) + echo "Button 2 (Help) pressed." + exit + ;; + $DIALOG_EXTRA) + echo "Button 3 (Extra) pressed." + exit + ;; + *) + echo "Return code was $returncode" + exit + ;; + esac +done Property changes on: contrib/dialog/samples/mixedform ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/textbox =================================================================== --- contrib/dialog/samples/textbox (revision 0) +++ contrib/dialog/samples/textbox (revision 0) @@ -0,0 +1,44 @@ +#!/bin/sh +# $Id: textbox,v 1.12 2010/01/13 10:36:35 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +cat << EOF > $tempfile +Hi, this is a text dialog box. It can be used to display text from a file. +The file should not contain any 'tab' characters, so you should 'expand' +the file first if it contains 'tab' characters. + +It's like a simple text file viewer, with these keys implemented: + +PGDN/SPACE - Move down one page +PGUP/'b' - Move up one page +ENTER/DOWN/'j' - Move down one line +UP/'k' - Move up one line +LEFT/'h' - Scroll left +RIGHT/'l' - Scroll right +'0' - Move to beginning of line +HOME/'g' - Move to beginning of file +END/'G' - Move to end of file +'/' - Forward search +'?' - Backward search +'n' - Repeat last search (forward) +'N' - Repeat last search (backward) + + +The following is a sample text file: + + +EOF + +TEXT=/usr/share/common-licenses/GPL +test -f $TEXT || TEXT=../COPYING + +cat $TEXT | expand >> $tempfile + +$DIALOG --clear --title "TEXT BOX" "$@" --textbox "$tempfile" 22 77 + +retval=$? + +. ./report-button Property changes on: contrib/dialog/samples/textbox ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/checklist-utf8 =================================================================== --- contrib/dialog/samples/checklist-utf8 (revision 0) +++ contrib/dialog/samples/checklist-utf8 (revision 0) @@ -0,0 +1,30 @@ +#! /bin/sh +# $Id: checklist-utf8,v 1.12 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +. ./setup-utf8 + +$DIALOG --backtitle "No Such Organization" \ + --title "CHECKLIST BOX" "$@" \ + --checklist "Hi, this is a checklist box. You can use this to \n\ +present a list of choices which can be turned on or \n\ +off. If there are more items than can fit on the \n\ +screen, the list will be scrolled. You can use the \n\ +UP/DOWN arrow keys, the first letter of the choice as a \n\ +hot key, or the number keys 1-9 to choose an option. \n\ +Press SPACE to toggle an option on/off. \n\n\ + Which of the following are fruits?" 20 61 5 \ + "APPLE" "It's an APPLE." off \ + "DOG" "No, that's not my DOG." ON \ + "ORANGE" "Yeah, that's JUICY." off \ + "CHICKEN" "Normally not a PET." off \ + "CAT" "No, never put a DOG and a CAT together!" oN \ + "FISH" "Cats like FISH." On \ + "LEMON" "You KNOW how it TASTES." on 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/checklist-utf8 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/yesno =================================================================== --- contrib/dialog/samples/yesno (revision 0) +++ contrib/dialog/samples/yesno (revision 0) @@ -0,0 +1,21 @@ +#!/bin/sh +# $Id: yesno,v 1.9 2010/01/14 01:11:11 tom Exp $ + +. ./setup-vars + +DIALOG_ERROR=254 +export DIALOG_ERROR + +$DIALOG --title "YES/NO BOX" --clear "$@" \ + --yesno "Hi, this is a yes/no dialog box. You can use this to ask \ + questions that have an answer of either yes or no. \ + BTW, do you notice that long lines will be automatically \ + wrapped around so that they can fit in the box? You can \ + also control line breaking explicitly by inserting \ + 'backslash n' at any place you like, but in this case, \ + auto wrap around will be disabled and you will have to \ + control line breaking yourself." 15 61 + +retval=$? + +. ./report-yesno Property changes on: contrib/dialog/samples/yesno ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/menubox1 =================================================================== --- contrib/dialog/samples/menubox1 (revision 0) +++ contrib/dialog/samples/menubox1 (revision 0) @@ -0,0 +1,27 @@ +#!/bin/sh +# $Id: menubox1,v 1.7 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --default-item "OS/2" --clear --title "MENU BOX" "$@" \ + --menu "Hi, this is a menu box. You can use this to \n\ +present a list of choices for the user to \n\ +choose. If there are more items than can fit \n\ +on the screen, the menu will be scrolled. \n\ +You can use the UP/DOWN arrow keys, the first \n\ +letter of the choice as a hot key, or the \n\ +number keys 1-9 to choose an option.\n\ +Try it now!\n\n\ + Choose the OS you like:" 20 51 4 \ + "Linux" "The Great Unix Clone for 386/486" \ + "NetBSD" "Another free Unix Clone for 386/486" \ + "OS/2" "IBM OS/2" \ + "WIN NT" "Microsoft Windows NT" \ + "PCDOS" "IBM PC DOS" \ + "MSDOS" "Microsoft DOS" 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/menubox1 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/menubox2 =================================================================== --- contrib/dialog/samples/menubox2 (revision 0) +++ contrib/dialog/samples/menubox2 (revision 0) @@ -0,0 +1,27 @@ +#!/bin/sh +# $Id: menubox2,v 1.7 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --default-item "MSDOS" --clear --title "MENU BOX" "$@" \ + --menu "Hi, this is a menu box. You can use this to \n\ +present a list of choices for the user to \n\ +choose. If there are more items than can fit \n\ +on the screen, the menu will be scrolled. \n\ +You can use the UP/DOWN arrow keys, the first \n\ +letter of the choice as a hot key, or the \n\ +number keys 1-9 to choose an option.\n\ +Try it now!\n\n\ + Choose the OS you like:" 20 51 4 \ + "Linux" "The Great Unix Clone for 386/486" \ + "NetBSD" "Another free Unix Clone for 386/486" \ + "OS/2" "IBM OS/2" \ + "WIN NT" "Microsoft Windows NT" \ + "PCDOS" "IBM PC DOS" \ + "MSDOS" "Microsoft DOS" 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/menubox2 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/menubox3 =================================================================== --- contrib/dialog/samples/menubox3 (revision 0) +++ contrib/dialog/samples/menubox3 (revision 0) @@ -0,0 +1,27 @@ +#!/bin/sh +# $Id: menubox3,v 1.8 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --clear --item-help --title "MENU BOX" "$@" \ + --menu "Hi, this is a menu box. You can use this to \n\ +present a list of choices for the user to \n\ +choose. If there are more items than can fit \n\ +on the screen, the menu will be scrolled. \n\ +You can use the UP/DOWN arrow keys, the first \n\ +letter of the choice as a hot key, or the \n\ +number keys 1-9 to choose an option.\n\ +Try it now!\n\n\ + Choose the OS you like:" 20 51 4 \ + "Linux" "The Great Unix Clone for 386/486" "Why use Linux?" \ + "NetBSD" "Another free Unix Clone for 386/486" "Or NetBSD?" \ + "OS/2" "IBM OS/2" "aka \"Warp\"" \ + "WIN NT" "Microsoft Windows NT" "hmm" \ + "PCDOS" "IBM PC DOS" "clone of a clone" \ + "MSDOS" "Microsoft DOS" "DOS: Disk Operating System, originally for an IBM contract, hence using the same jargon" 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/menubox3 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/menubox4 =================================================================== --- contrib/dialog/samples/menubox4 (revision 0) +++ contrib/dialog/samples/menubox4 (revision 0) @@ -0,0 +1,27 @@ +#!/bin/sh +# $Id: menubox4,v 1.8 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --clear --item-help --title "MENU BOX" "$@" \ + --menu "Hi, this is a menu box. You can use this to \n\ +present a list of choices for the user to \n\ +choose. If there are more items than can fit \n\ +on the screen, the menu will be scrolled. \n\ +You can use the UP/DOWN arrow keys, the first \n\ +letter of the choice as a hot key, or the \n\ +number keys 1-9 to choose an option.\n\ +Try it now!\n\n\ + Choose the OS you like:" 20 51 4 \ + "Linux" "The Great Unix Clone for 386/486 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "Why use Linux?" \ + "NetBSD" "Another free Unix Clone for 386/486 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "Or NetBSD?" \ + "OS/2" "IBM OS/2 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "aka \"Warp\"" \ + "WIN NT" "Microsoft Windows NT xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "hmm" \ + "PCDOS" "IBM PC DOS xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "clone of a clone" \ + "MSDOS" "Microsoft DOS xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "DOS: Disk Operating System, originally for an IBM contract, hence using the same jargon" 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/menubox4 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/menubox5 =================================================================== --- contrib/dialog/samples/menubox5 (revision 0) +++ contrib/dialog/samples/menubox5 (revision 0) @@ -0,0 +1,30 @@ +#!/bin/sh +# $Id: menubox5,v 1.9 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --clear --help-button --item-help --title "MENU BOX" "$@" \ + --menu "Hi, this is a menu box. You can use this to \n\ +present a list of choices for the user to \n\ +choose. If there are more items than can fit \n\ +on the screen, the menu will be scrolled. \n\ +You can use the UP/DOWN arrow keys, the first \n\ +letter of the choice as a hot key, or the \n\ +number keys 1-9 to choose an option.\n\ +Try it now!\n\n\ + Choose the OS you like:" 20 51 4 \ + "Linux" "The Great Unix Clone for 386/486 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "Why use Linux?" \ + "NetBSD" "Another free Unix Clone for 386/486 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "Or NetBSD?" \ + "OS/2" "IBM OS/2 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "aka \"Warp\"" \ + "WIN NT" "Microsoft Windows NT xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "hmm" \ + "WIN 2K" "Microsoft Windows 2000 xxxxxxxxxxxxxxxxxxxxxxxxxxxx" "hmm" \ + "WIN XP" "Microsoft Windows XP (son of Windows 95) xxxxxxxxxx" "hmm" \ + "WIN 95" "Microsoft Windows 95 (son of MSDOS) xxxxxxxxxxxxxxx" "hmm" \ + "PCDOS" "IBM PC DOS xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "clone of a clone" \ + "MSDOS" "Microsoft DOS xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "DOS: Disk Operating System, originally for an IBM contract, hence using the same jargon" 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/menubox5 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/menubox6 =================================================================== --- contrib/dialog/samples/menubox6 (revision 0) +++ contrib/dialog/samples/menubox6 (revision 0) @@ -0,0 +1,28 @@ +#!/bin/sh +# $Id: menubox6,v 1.8 2010/01/13 10:20:03 tom Exp $ +# example showing the --colors option + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --clear --item-help --title "MENU BOX" --colors "$@" \ + --menu "Hi, this is a \Zumenu\Zn box. You can use this to \n\ +present a list of choices for the user to \n\ +choose. If there are more items than can fit \n\ +on the screen, the menu will be scrolled. \n\ +You can use the \Z4UP/DOWN\Zn arrow keys, the first \n\ +letter of the choice as a hot key, or the \n\ +\Z2number\Zn keys 1-9 to choose an option.\n\ +Try it now!\n\n\ + Choose the OS you like:" 20 51 4 \ + "Linux" "The Great Unix Clone for \Zu386/486" "Why use \ZbLinux?" \ + "NetBSD" "Another free Unix Clone for \Zu386/486" "Or \ZbNetBSD?" \ + "OS/2" "IBM OS/2" "aka \"Warp\"" \ + "WIN NT" "Microsoft Windows NT" "hmm" \ + "PCDOS" "IBM PC \ZrDOS" "clone of a clone" \ + "MSDOS" "Microsoft \ZrDOS" "\ZbDOS\Zn: \Zb\Z3D\Znisk \Zb\Z3O\Znperating \Zb\Z3S\Znystem, originally for an IBM contract, hence using the same jargon" 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/menubox6 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/menubox7 =================================================================== --- contrib/dialog/samples/menubox7 (revision 0) +++ contrib/dialog/samples/menubox7 (revision 0) @@ -0,0 +1,29 @@ +#!/bin/sh +# $Id: menubox7,v 1.9 2010/01/13 10:20:03 tom Exp $ +# example with --extra-button + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --clear --item-help --extra-button --extra-label "Choice" \ + --title "MENU BOX" "$@" \ + --menu "Hi, this is a menu box. You can use this to \n\ +present a list of choices for the user to \n\ +choose. If there are more items than can fit \n\ +on the screen, the menu will be scrolled. \n\ +You can use the UP/DOWN arrow keys, the first \n\ +letter of the choice as a hot key, or the \n\ +number keys 1-9 to choose an option.\n\ +Try it now!\n\n\ + Choose the OS you like:" 20 51 4 \ + "Linux" "The Great Unix Clone for 386/486" "Why use Linux?" \ + "NetBSD" "Another free Unix Clone for 386/486" "Or NetBSD?" \ + "OS/2" "IBM OS/2" "aka \"Warp\"" \ + "WIN NT" "Microsoft Windows NT" "hmm" \ + "PCDOS" "IBM PC DOS" "clone of a clone" \ + "MSDOS" "Microsoft DOS" "DOS: Disk Operating System, originally for an IBM contract, hence using the same jargon" 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/menubox7 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/menubox8 =================================================================== --- contrib/dialog/samples/menubox8 (revision 0) +++ contrib/dialog/samples/menubox8 (revision 0) @@ -0,0 +1,30 @@ +#!/bin/sh +# $Id: menubox8,v 1.7 2010/01/13 10:34:32 tom Exp $ + +. ./setup-vars + +exec 3>&1 +RESULT=`$DIALOG --help-button \ + --default-item "MSDOS" \ + --clear \ + --title "MENU BOX" "$@" \ + --menu "Hi, this is a menu box. You can use this to \n\ +present a list of choices for the user to \n\ +choose. If there are more items than can fit \n\ +on the screen, the menu will be scrolled. \n\ +You can use the UP/DOWN arrow keys, the first \n\ +letter of the choice as a hot key, or the \n\ +number keys 1-9 to choose an option.\n\ +Try it now!\n\n\ + Choose the OS you like:" 20 51 4 \ + "Linux" "The Great Unix Clone for 386/486" \ + "NetBSD" "Another free Unix Clone for 386/486" \ + "OS/2" "IBM OS/2" \ + "WIN NT" "Microsoft Windows NT" \ + "PCDOS" "IBM PC DOS" \ + "MSDOS" "Microsoft DOS" \ +2>&1 1>&3` +retval=$? +exec 3>&- + +. ./report-string Property changes on: contrib/dialog/samples/menubox8 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/menubox9 =================================================================== --- contrib/dialog/samples/menubox9 (revision 0) +++ contrib/dialog/samples/menubox9 (revision 0) @@ -0,0 +1,26 @@ +#!/bin/sh +# $Id: menubox9,v 1.6 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +exec 3>&1 +RESULT=`$DIALOG --help-button \ + --clear \ + --title "Select Linux installation partition:" "$@" \ + --menu \ +"Please select a partition from the following list to use for your \ +root (/) Linux partition." 13 70 5 \ +"/dev/hda2" "Linux native 30724312K" \ +"/dev/hda4" "Linux native 506047K" \ +"/dev/hdb1" "Linux native 4096543K" \ +"/dev/hdb2" "Linux native 2586465K" \ +"---" "(add none, continue with setup)" \ +"---" "(add none, continue with setup)" \ +"---" "(add none, continue with setup)" \ +"---" "(add none, continue with setup)" \ +"---" "(add none, continue with setup)" \ +2>&1 1>&3` +retval=$? +exec 3>&- + +. ./report-string Property changes on: contrib/dialog/samples/menubox9 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/calendar3-stdout =================================================================== --- contrib/dialog/samples/calendar3-stdout (revision 0) +++ contrib/dialog/samples/calendar3-stdout (revision 0) @@ -0,0 +1,9 @@ +#!/bin/sh +# $Id: calendar3-stdout,v 1.6 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +RESULT=`$DIALOG --extra-button --extra-label "Hold" --help-button --stdout --title "CALENDAR" "$@" --calendar "Please choose a date..." 0 0 7 7 1981` +retval=$? + +. ./report-string Property changes on: contrib/dialog/samples/calendar3-stdout ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/pause =================================================================== --- contrib/dialog/samples/pause (revision 0) +++ contrib/dialog/samples/pause (revision 0) @@ -0,0 +1,10 @@ +#!/bin/sh +# $Id: pause,v 1.5 2010/01/14 00:27:23 tom Exp $ + +. ./setup-vars + +$DIALOG --title "PAUSE" "$@" --pause "Hi, this is a pause widget" 20 70 10 + +retval=$? + +. ./report-button Property changes on: contrib/dialog/samples/pause ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/menubox =================================================================== --- contrib/dialog/samples/menubox (revision 0) +++ contrib/dialog/samples/menubox (revision 0) @@ -0,0 +1,27 @@ +#!/bin/sh +# $Id: menubox,v 1.11 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --clear --title "MENU BOX" "$@" \ + --menu "Hi, this is a menu box. You can use this to \n\ +present a list of choices for the user to \n\ +choose. If there are more items than can fit \n\ +on the screen, the menu will be scrolled. \n\ +You can use the UP/DOWN arrow keys, the first \n\ +letter of the choice as a hot key, or the \n\ +number keys 1-9 to choose an option.\n\ +Try it now!\n\n\ + Choose the OS you like:" 20 51 4 \ + "Linux" "The Great Unix Clone for 386/486" \ + "NetBSD" "Another free Unix Clone for 386/486" \ + "OS/2" "IBM OS/2" \ + "WIN NT" "Microsoft Windows NT" \ + "PCDOS" "IBM PC DOS" \ + "MSDOS" "Microsoft DOS" 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/menubox ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/menubox10 =================================================================== --- contrib/dialog/samples/menubox10 (revision 0) +++ contrib/dialog/samples/menubox10 (revision 0) @@ -0,0 +1,22 @@ +#!/bin/sh +# $Id: menubox10,v 1.5 2010/01/13 10:34:12 tom Exp $ +# zero-width column + +. ./setup-vars + +exec 3>&1 +RESULT=`$DIALOG --backtitle "Debian Configuration" \ + --title "Configuring debconf" \ + --default-item Dialog "$@" \ + --menu "Packages that use debconf for co" 19 50 6 \ + Dialog "" \ + Readline "" \ + Gnome "" \ + Kde "" \ + Editor "" \ + Noninteractive "" \ +2>&1 1>&3` +retval=$? +exec 3>&- + +. ./report-string Property changes on: contrib/dialog/samples/menubox10 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/form1-both =================================================================== --- contrib/dialog/samples/form1-both (revision 0) +++ contrib/dialog/samples/form1-both (revision 0) @@ -0,0 +1,69 @@ +#! /bin/sh +# $Id: form1-both,v 1.5 2010/01/13 10:47:35 tom Exp $ + +. ./setup-vars + +backtitle="An Example for the use of --form:" + +ids=`id|sed -e 's/([^)]*)//g'` +uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` +gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` + +user="$USER" +home="$HOME" + +returncode=0 +while test $returncode != 1 && test $returncode != 250 +do +exec 3>&1 +value=`$DIALOG --ok-label "Submit" \ + --extra-button --help-button \ + --backtitle "$backtitle" "$@" \ + --form "Here is a possible piece of a configuration program." \ +20 50 0 \ + "Username:" 1 1 "$user" 1 10 10 0 \ + "UID:" 2 1 "$uid" 2 10 8 0 \ + "GID:" 3 1 "$gid" 3 10 8 0 \ + "HOME:" 4 1 "$home" 4 10 40 0 \ +2>&1 1>&3` +returncode=$? +exec 3>&- + +show=`echo "$value" |sed -e 's/^/ /'` + + case $returncode in + $DIALOG_CANCEL) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" \ + --yesno "Really quit?" 10 30 + case $? in + $DIALOG_OK) + break + ;; + $DIALOG_CANCEL) + returncode=99 + ;; + esac + ;; + $DIALOG_OK) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" --no-collapse --cr-wrap \ + --msgbox "Resulting data:\n\ +$show" 10 40 + ;; + $DIALOG_HELP) + echo "Button 2 (Help) pressed." + exit + ;; + $DIALOG_EXTRA) + echo "Button 3 (Extra) pressed." + exit + ;; + *) + echo "Return code was $returncode" + exit + ;; + esac +done Property changes on: contrib/dialog/samples/form1-both ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/slackware.rc =================================================================== --- contrib/dialog/samples/slackware.rc (revision 0) +++ contrib/dialog/samples/slackware.rc (revision 0) @@ -0,0 +1,124 @@ +# $Id: slackware.rc,v 1.6 2005/12/01 01:20:16 tom Exp $ +# Run-time configuration file for dialog, matches Slackware color scheme. +# +# Types of values: +# +# Number - <number> +# String - "string" +# Boolean - <ON|OFF> +# Attribute - (foreground,background,highlight?) + +# Set aspect-ration. +aspect = 0 + +# Set separator (for multiple widgets output). +separate_widget = "" + +# Set tab-length (for textbox tab-conversion). +tab_len = 0 + +# Make tab-traversal for checklist, etc., include the list. +visit_items = OFF + +# Shadow dialog boxes? This also turns on color. +use_shadow = ON + +# Turn color support ON or OFF +use_colors = ON + +# Screen color +screen_color = (WHITE,BLUE,OFF) + +# Shadow color +shadow_color = (WHITE,BLACK,OFF) + +# Dialog box color +dialog_color = (BLACK,CYAN,OFF) + +# Dialog box title color +title_color = (YELLOW,CYAN,ON) + +# Dialog box border color +border_color = (CYAN,CYAN,ON) + +# Active button color +button_active_color = (WHITE,BLUE,ON) + +# Inactive button color +button_inactive_color = (BLACK,CYAN,OFF) + +# Active button key color +button_key_active_color = (WHITE,BLUE,ON) + +# Inactive button key color +button_key_inactive_color = (RED,CYAN,OFF) + +# Active button label color +button_label_active_color = (WHITE,BLUE,ON) + +# Inactive button label color +button_label_inactive_color = (BLACK,CYAN,ON) + +# Input box color +inputbox_color = (BLUE,WHITE,OFF) + +# Input box border color +inputbox_border_color = (CYAN,CYAN,ON) + +# Search box color +searchbox_color = (YELLOW,WHITE,ON) + +# Search box title color +# FIXME +searchbox_title_color = (WHITE,WHITE,ON) + +# Search box border color +searchbox_border_color = (RED,WHITE,OFF) + +# File position indicator color +position_indicator_color = (RED,CYAN,OFF) + +# Menu box color +menubox_color = (BLACK,CYAN,OFF) + +# Menu box border color +menubox_border_color = (CYAN,CYAN,ON) + +# Item color +item_color = (BLACK,CYAN,OFF) + +# Selected item color +item_selected_color = (WHITE,BLUE,OFF) + +# Tag color +tag_color = (YELLOW,CYAN,ON) + +# Selected tag color +tag_selected_color = (WHITE,BLUE,OFF) + +# Tag key color +tag_key_color = (RED,CYAN,OFF) + +# Selected tag key color +tag_key_selected_color = (RED,BLUE,ON) + +# Check box color +check_color = (BLACK,CYAN,OFF) + +# Selected check box color +check_selected_color = (WHITE,CYAN,ON) + +# Up arrow color +uarrow_color = (GREEN,CYAN,ON) + +# Down arrow color +darrow_color = (GREEN,CYAN,ON) + +# Item help-text color +itemhelp_color = (WHITE,BLACK,OFF) + +# Active form text color +form_active_text_color = (BLUE,WHITE,OFF) + +# Form text color +form_text_color = (CYAN,BLUE,ON) Index: contrib/dialog/samples/setup-edit =================================================================== --- contrib/dialog/samples/setup-edit (revision 0) +++ contrib/dialog/samples/setup-edit (revision 0) @@ -0,0 +1,6 @@ +# $Id: setup-edit,v 1.1 2010/01/13 01:56:07 tom Exp $ +# vile:shmode + +input=`tempfile 2>/dev/null` || input=/tmp/input$$ +output=`tempfile 2>/dev/null` || output=/tmp/test$$ +trap "rm -f $input $output" 0 1 2 5 15 Index: contrib/dialog/samples/inputmenu =================================================================== --- contrib/dialog/samples/inputmenu (revision 0) +++ contrib/dialog/samples/inputmenu (revision 0) @@ -0,0 +1,60 @@ +#! /bin/bash +# $Id: inputmenu,v 1.10 2010/01/13 10:29:22 tom Exp $ +# 2002 - written by Tobias Rittweiler <tobrit@freebits.de> + +. ./setup-vars + +user="$USER" ; uid="$UID" ; +gid="$GROUPS" ; home="$HOME" ; + +while [ ${returncode:-99} -ne 1 -a ${returncode:-99} -ne 250 ]; do + exec 3>&1 + value=$("$DIALOG" --clear --ok-label "Create" \ + --backtitle "An Example for the use of --inputmenu:" "$@" \ + --inputmenu "Originally I designed --inputmenu for a \ +configuration purpose. Here is a possible piece of a configuration program. \ +" 20 50 10 \ +"Username:" "$user" \ +"UID:" "$uid" \ +"GID:" "$gid" \ +"HOME:" "$home" \ +2>&1 1>&3 ) + returncode=$? + exec 3>&- + case $returncode in + $DIALOG_CANCEL) + "$DIALOG" --clear --backtitle "An Example for the use of --inputmenu:" \ + --yesno "Really quit?" 10 30 + case $? in + $DIALOG_OK) break;; + $DIALOG_CANCEL) returncode=99;; + esac + ;; + $DIALOG_OK) + "$DIALOG" --clear --backtitle "An Example for the use of --inputmenu:" \ + --msgbox "useradd \n\ + -d $home \n\ + -u $uid \n\ + -g $gid \n\ + $user" 10 40 + ;; + $DIALOG_EXTRA) + value="${value:8:${#value}}" + tag="${value%:*}" + item="${value#*: }" + + case "$tag" in + Username) user="$item";; + UID) uid="$item";; + GID) gid="$item";; + HOME) home="$item";; + esac + ;; + + $DIALOG_ESC) + echo "ESC pressed." + break + ;; + + esac +done Property changes on: contrib/dialog/samples/inputmenu ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/msgbox4-eucjp =================================================================== --- contrib/dialog/samples/msgbox4-eucjp (revision 0) +++ contrib/dialog/samples/msgbox4-eucjp (revision 0) @@ -0,0 +1,25 @@ +#!/bin/sh +# $Id: msgbox4-eucjp,v 1.5 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +width=35 +while test $width != 61 +do +$DIALOG --title "MESSAGE BOX (width $width)" --clear --no-collapse "$@" \ + --msgbox "\ +This sample is written in EUC-JP. +There are several checking points: +(1) whether the fullwidth characters are displayed well or not, +(2) whether the width of characters are evaluated properly, and +(3) whether the character at line-folding is lost or not. + +¤¢¤¤¤¦¤¨¤ª¤«¤­¤¯¤±¤³¤µ¤·¤¹¤»¤½¤¿¤Á¤Ä¤Æ¤È¤Ê¤Ë¤Ì¤Í¤Î +£±£²£³£´£µ£¶£·£¸£¹£°£±£²£³£´£µ£¶£·£¸£¹£°£±£²£³£´£µ +£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù + +Hi, this is a simple message box. You can use this to \ +display any message you like. The box will remain until \ +you press the ENTER key." 22 $width +width=`expr $width + 1` +done Property changes on: contrib/dialog/samples/msgbox4-eucjp ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/fselect2-stdout =================================================================== --- contrib/dialog/samples/fselect2-stdout (revision 0) +++ contrib/dialog/samples/fselect2-stdout (revision 0) @@ -0,0 +1,9 @@ +#!/bin/sh +# $Id: fselect2-stdout,v 1.6 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +RESULT=`$DIALOG --stdout --title "Please choose a file" "$@" --fselect $HOME/ 0 0` +retval=$? + +. ./report-string Property changes on: contrib/dialog/samples/fselect2-stdout ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/yesno-both =================================================================== --- contrib/dialog/samples/yesno-both (revision 0) +++ contrib/dialog/samples/yesno-both (revision 0) @@ -0,0 +1,24 @@ +#!/bin/sh +# $Id: yesno-both,v 1.5 2010/01/13 10:40:39 tom Exp $ + +. ./setup-vars + +$DIALOG --title "YES/NO/MAYBE BOX" \ + --clear \ + --ok-label "Next" \ + --no-label "Cancel" \ + --extra-label "Previous" --extra-button \ + --help-button "$@" \ + --yesno "Hi, this is a yes/no dialog box with its labels changed. \ + You can use this to ask \ + questions that have an answer of either yes or no (or maybe). \ + BTW, do you notice that long lines will be automatically \ + wrapped around so that they can fit in the box? You can \ + also control line breaking explicitly by inserting \ + 'backslash n' at any place you like, but in this case, \ + auto wrap around will be disabled and you will have to \ + control line breaking yourself." 15 61 + +retval=$? + +. ./report-yesno Property changes on: contrib/dialog/samples/yesno-both ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/inputbox-extra =================================================================== --- contrib/dialog/samples/inputbox-extra (revision 0) +++ contrib/dialog/samples/inputbox-extra (revision 0) @@ -0,0 +1,21 @@ +#!/bin/sh +# $Id: inputbox-extra,v 1.6 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --title "INPUT BOX" --clear \ + --extra-button "$@" \ + --inputbox "Hi, this is an input dialog box. You can use \n +this to ask questions that require the user \n +to input a string as the answer. You can \n +input strings of length longer than the \n +width of the input box, in that case, the \n +input field will be automatically scrolled. \n +You can use BACKSPACE to correct errors. \n\n +Try entering your name below:" 16 51 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/inputbox-extra ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/radiolist10 =================================================================== --- contrib/dialog/samples/radiolist10 (revision 0) +++ contrib/dialog/samples/radiolist10 (revision 0) @@ -0,0 +1,30 @@ +#! /bin/sh +# $Id: radiolist10,v 1.6 2010/01/13 10:20:03 tom Exp $ +# zero-width column + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG \ + --backtitle "No such organization" \ + --title "RADIOLIST BOX" "$@" \ + --radiolist "Hi, this is a radiolist box. You can use this to \n\ +present a list of choices which can be turned on or \n\ +off. If there are more items than can fit on the \n\ +screen, the list will be scrolled. You can use the \n\ +UP/DOWN arrow keys, the first letter of the choice as a \n\ +hot key, or the number keys 1-9 to choose an option. \n\ +Press SPACE to toggle an option on/off. \n\n\ + Which of the following are fruits?" 20 61 5 \ + Dialog "" on \ + Readline "" off \ + Gnome "" off \ + Kde "" off \ + Editor "" off \ + Noninteractive "" on \ + 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/radiolist10 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/gauge0-input-fd =================================================================== --- contrib/dialog/samples/gauge0-input-fd (revision 0) +++ contrib/dialog/samples/gauge0-input-fd (revision 0) @@ -0,0 +1,27 @@ +#!/bin/sh +# $Id: gauge0-input-fd,v 1.5 2010/01/13 10:20:03 tom Exp $ +# modified "gauge0" script to use "--input-fd" option. + +. ./setup-vars + +exec 3<&0 +PCT=10 +( +sleep 1 +while test $PCT != 110 +do +cat <<EOF +XXX +$PCT +The new\n\ +message ($PCT percent) +XXX +EOF +PCT=`expr $PCT + 10` +sleep 1 +done +) | + +$DIALOG --title "GAUGE" --input-fd 3 "$@" --gauge "Hi, this is a gauge widget" 0 0 0 + +exec 3<&- Property changes on: contrib/dialog/samples/gauge0-input-fd ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/report-edit =================================================================== --- contrib/dialog/samples/report-edit (revision 0) +++ contrib/dialog/samples/report-edit (revision 0) @@ -0,0 +1,22 @@ +# $Id: report-edit,v 1.3 2010/01/13 09:59:43 tom Exp $ +# Report results from editing. +# vile:shmode + +case $retval in + $DIALOG_OK) + diff -c $input $output + echo "OK" + ;; + $DIALOG_CANCEL) + echo "Cancel pressed";; + $DIALOG_HELP) + echo "Help pressed";; + $DIALOG_EXTRA) + echo "Extra pressed";; + $DIALOG_ITEM_HELP) + echo "Item-help button pressed.";; + $DIALOG_ERROR) + echo "ERROR!";; + $DIALOG_ESC) + echo "ESC pressed.";; +esac Index: contrib/dialog/samples/msgbox =================================================================== --- contrib/dialog/samples/msgbox (revision 0) +++ contrib/dialog/samples/msgbox (revision 0) @@ -0,0 +1,13 @@ +#!/bin/sh +# $Id: msgbox,v 1.7 2010/01/13 10:35:13 tom Exp $ + +. ./setup-vars + +$DIALOG --title "MESSAGE BOX" --clear "$@" \ + --msgbox "Hi, this is a simple message box. You can use this to \ + display any message you like. The box will remain until \ + you press the ENTER key." 10 41 + +retval=$? + +. ./report-button Property changes on: contrib/dialog/samples/msgbox ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/inputbox-both =================================================================== --- contrib/dialog/samples/inputbox-both (revision 0) +++ contrib/dialog/samples/inputbox-both (revision 0) @@ -0,0 +1,22 @@ +#!/bin/sh +# $Id: inputbox-both,v 1.6 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --title "INPUT BOX" --clear \ + --extra-button \ + --help-button "$@" \ + --inputbox "Hi, this is an input dialog box. You can use \n +this to ask questions that require the user \n +to input a string as the answer. You can \n +input strings of length longer than the \n +width of the input box, in that case, the \n +input field will be automatically scrolled. \n +You can use BACKSPACE to correct errors. \n\n +Try entering your name below:" 16 51 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/inputbox-both ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/password =================================================================== --- contrib/dialog/samples/password (revision 0) +++ contrib/dialog/samples/password (revision 0) @@ -0,0 +1,20 @@ +#!/bin/sh +# $Id: password,v 1.7 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --title "INPUT BOX" --clear "$@" \ + --passwordbox "Hi, this is an password dialog box. You can use \n +this to ask questions that require the user \n +to input a string as the answer. You can \n +input strings of length longer than the \n +width of the input box, in that case, the \n +input field will be automatically scrolled. \n +You can use BACKSPACE to correct errors. \n\n +Try entering your name below:" 16 51 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/password ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/setup-tempfile =================================================================== --- contrib/dialog/samples/setup-tempfile (revision 0) +++ contrib/dialog/samples/setup-tempfile (revision 0) @@ -0,0 +1,5 @@ +# $Id: setup-tempfile,v 1.1 2010/01/13 01:41:02 tom Exp $ +# vile:shmode + +tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$ +trap "rm -f $tempfile" 0 1 2 5 15 Index: contrib/dialog/samples/progress =================================================================== --- contrib/dialog/samples/progress (revision 0) +++ contrib/dialog/samples/progress (revision 0) @@ -0,0 +1,19 @@ +#!/bin/sh +# $Id: progress,v 1.5 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +ls -1 >$tempfile +( +while true +do +read text +test -z "$text" && break +ls -ld "$text" +sleep 1 +done <$tempfile +) | + +$DIALOG --title "PROGRESS" "$@" --progressbox 20 70 Property changes on: contrib/dialog/samples/progress ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/install/setup.c =================================================================== --- contrib/dialog/samples/install/setup.c (revision 0) +++ contrib/dialog/samples/install/setup.c (revision 0) @@ -0,0 +1,371 @@ +/* Copyright (C) 1995 Florian La Roche */ +/* Who wants to help coding? I don't like doing this... */ + +/* You can just start setup as normal user and see how far it is coded + right now. This will do a fake installation and won't actually chnage + any data on your computer. */ + +/* TODO: write a good package selection code + change functions to return better error code + */ + +/* Show an extra text-box with the contents of all external commands, + before they are executed. So you can abort the installation, if any + wrong commands are to be executed. (So don't format wrong partition.) */ +#define VERBOSE 1 + +/* If defined, don't actually execute any comands and don't actually modify + any files. So you can test any possible installation without doing any + damage to your computer. + The file FDISK.TEST is used instead of real "fdisk -l" output, so that + it can be started as normal user. */ +#define DEBUG_THIS 1 + +#include <dialog.h> + +/* max length of a partition name like e.g. '/dev/hda1' */ +#define MAX_DEV_NAME 25 + +/* max number of possible Linux/Swap/MsDos partitions */ +#define MAX_PARTS 20 + +char *progname = NULL; + +static void +error(const char *s) +{ + fprintf(stderr, "%s: %s\n", progname, s); + exit(1); +} + +static int +my_system(const char *s,...) +{ + int ret, i; + va_list ap; + char sh[200]; + + va_start(ap, s); + vsprintf(sh, s, ap); + va_end(ap); + +#ifdef VERBOSE + i = dialog_msgbox("I will run the following command:", sh, 10, 65, 1); + dialog_clear(); +#ifdef DEBUG_THIS + return 0; +#endif +#endif + ret = system(sh); + if (!(ret >> 8)) + return 0; + i = dialog_msgbox("Error-Exit on the following command:", + sh, 12, 73, 1); + dialog_clear(); + return 1; +} + +/* We support to install from DOS/Linux-partitions. */ +enum partition_type { + MsDos, + Linux, + Swap +}; + +struct partition { + enum partition_type type; + char name[MAX_DEV_NAME]; + int blocks; + int flag; +} partitions[MAX_PARTS]; +int num_partition = 0; +int num_linux = 0; +int num_swap = 0; +int num_msdos = 0; + +static int +get_line(char *line, int size, FILE * f) +{ + char *ptr = line; + int c; + + if (feof(f)) + return -1; + while (size-- && ((c = getc(f)) != EOF) && (c != '\n')) + *ptr++ = c; + *ptr++ = '\0'; + return (int) (ptr - line); +} + +static void +read_partitions(void) +{ + FILE *f; + char line[200]; + int length; +#ifndef DEBUG_THIS + int ret = system("fdisk -l 2>/dev/null 1>/tmp/fdisk.output"); + if ((ret >> 8) != 0) { + error("fdisk didn't run"); + } + if ((f = fopen("/tmp/fdisk.output", "r")) == NULL) +#else + if ((f = fopen("FDISK.TEST", "r")) == NULL) +#endif + error("cannot read fdisk output"); + + while (num_partition <= MAX_PARTS + && (length = get_line(line, 200, f)) >= 0) { + if (strncmp(line, "/dev/", 5) == 0) { + int n = 0; + char *s = line + 5; + char *t = partitions[num_partition].name; + strcpy(t, "/dev/"); + t += 5; + while (n < MAX_DEV_NAME && *s != '\0' + && !isspace((unsigned char) *s)) { + *t++ = *s++; + n++; + } + *t = '\0'; + /* Read the size of the partition. */ + t = line + 37; + while (isspace((unsigned char) *t)) + t++; + partitions[num_partition].blocks = atoi(t); + if (strstr(line, "Linux native")) { + partitions[num_partition].type = Linux; + num_partition++; + num_linux++; + } else if (strstr(line, "Linux swap")) { + partitions[num_partition].type = Swap; + num_partition++; + num_swap++; + } else if (strstr(line, "DOS")) { + partitions[num_partition].type = MsDos; + num_partition++; + num_msdos++; + } + } + } + fclose(f); +#ifndef DEBUG_THIS + unlink("/tmp/fdisk.output"); +#endif +} + +static int +select_partition(const char *title, const char *prompt, int y, int x) +{ + int i, num, ret; + char info[MAX_PARTS][40]; + char *items[MAX_PARTS * 2]; + int num_pa[MAX_PARTS]; + + num = 0; + for (i = 0; i < num_partition; i++) { + if (partitions[i].type == Linux) { + items[num * 2] = partitions[i].name; + sprintf(info[num], "Linux partition with %d blocks", + partitions[i].blocks); + items[num * 2 + 1] = info[num]; + num_pa[num] = i; + num++; + } + } + ret = dialog_menu(title, prompt, y + num, x, num, num, items); + dialog_clear(); + if (ret >= 0) /* item selected */ + ret = num_pa[ret]; + return ret; +} + +static int +select_install_partition(void) +{ + return select_partition("Select Install Partition", + "\\nWhere do you want to install Linux?\\n", 9, 60); +} + +static int +select_source_partition(void) +{ + return select_partition("Select Source Partition", + "\\nOn which partition is the source?\\n", 9, 60); +} + +const char *null = ">/dev/null 2>/dev/null"; +const char *install_partition = NULL; + +static void +extract_packages(const char *source_path) +{ +#ifndef DEBUG_THIS + FILE *f; +#endif + + if (my_system("mkdir -p /install/var/installed/packages %s", null)) + return; + if (my_system("cd /install; for i in /source%s/*.tgz; do " + "tar xzplvvkf $i >> var/installed/packages/base " + "2>>var/installed/packages/ERROR; done", source_path)) + return; +#ifndef DEBUG_THIS + if ((f = fopen("/install/etc/fstab", "w")) == NULL) { + /* i = */ dialog_msgbox("Error", "Cannot write /etc/fstab", + 12, 40, 1); + return; + } + fprintf(f, "%s / ext2 defaults 1 1\n", install_partition); + fprintf(f, "none /proc proc defaults 0 2\n"); + /* XXX write swap-partitions */ + fclose(f); +#endif +} + +static void +install_premounted(void) +{ + extract_packages(""); +} + +static void +install_harddisk(void) +{ + const char *name; + int part, ret; + + if ((part = select_source_partition()) <= -1) + return; + name = partitions[part].name; + + if (my_system("mount -t ext2 %s /source %s", name, null)) + return; + ret = dialog_inputbox("Path in partition", + "Please enter the directory in which the " + "source files are.", 13, 50, "", FALSE); + dialog_clear(); + if (ret != 0) + return; + /* XXX strdup */ + extract_packages(strdup(dialog_input_result)); + if (my_system("umount /source %s", null)) + return; +} + +static void +install_nfs(void) +{ + if (my_system("ifconfig eth0 134.96.81.36 netmask 255.255.255.224 " + "broadcast 134.96.81.63 %s", null)) + return; + if (my_system("route add -net 134.96.81.32 %s", null)) + return; + if (my_system("mount -t nfs 134.96.81.38:" + "/local/ftp/pub/linux/ELF.binary/tar /source %s", null)) + return; + extract_packages("/base"); + if (my_system("umount /source %s", null)) + return; + if (my_system("ifconfig eth0 down %s", null)) + return; +} + +static void +main_install(void) +{ + int part, ret; + const char *name; + char *items1[] = + { + "1", "Harddisk Install", + "2", "Network Install(NFS)", + "3", "Premounted on /source" + }; + + if (num_linux == 0) { + /* XXX */ + return; + } + if ((part = select_install_partition()) <= -1) + return; + install_partition = name = partitions[part].name; + if (my_system("mke2fs %s %s", name, null)) + return; + if (my_system("mount -t ext2 %s /install %s", name, null)) + return; + ret = dialog_menu("Choose install medium", + "\\nPlease say from where you want to install.\\n", + 12, 62, 3, 3, items1); + dialog_clear(); + switch (ret) { + case 0: + install_harddisk(); + break; + case 1: + install_nfs(); + break; + case 2: + install_premounted(); + break; + case -2: /* cancel */ + case -1: + break; /* esc */ + } + if (my_system("umount /install %s", null)) + return; +} + +int +main(int argc, char **argv) +{ + int stop = 0; + int ret; + char *items1[] = + { + "1", "Display a help text", + "2", "Start an installation", + "3", "Exit to the shell" + }; + + progname = argv[0]; + + read_partitions(); + if (num_linux == 0) { + printf("\n\nPlease start \"fdisk\" or \"cfdisk\" and create a" + "\nnative Linux-partition to install Linux on.\n\n"); + exit(1); + } + + init_dialog(); + + while (!stop) { + ret = dialog_menu("Linux Install Utility", + "\\nCopyright (C) 1995 Florian La Roche\\n" + "\\nPre-Alpha version, be careful, read the doc!!!" + "\\nemail: florian@jurix.jura.uni-sb.de, " + "flla@stud.uni-sb.de\\n", + 15, 64, 3, 3, items1); + dialog_clear(); + switch (ret) { + case 0: + ret = dialog_textbox("Help Text", + "setup.help", 20, 70); + dialog_clear(); + break; + case 1: + main_install(); + break; + case 2: + stop = 1; + break; + case -2: /* cancel */ + case -1: + stop = 1; /* esc */ + } + } + end_dialog(); + printf("\nExecute \"reboot\" to restart your computer...\n"); + + exit(0); +} Index: contrib/dialog/samples/install/makefile.in =================================================================== --- contrib/dialog/samples/install/makefile.in (revision 0) +++ contrib/dialog/samples/install/makefile.in (revision 0) @@ -0,0 +1,35 @@ +# $Id: makefile.in,v 1.1 2000/10/08 17:22:53 tom Exp $ +# template makefile for DIALOG sample 'install' +# +SHELL = /bin/sh + +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +srcdir = @srcdir@ +top_builddir = ../.. + +DESTDIR = +bindir = $(DESTDIR)@bindir@ + +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ @DEFS@ -I$(top_builddir) -I$(srcdir)/../.. -I. -I$(srcdir) +EXTRA_CFLAGS = @EXTRA_CFLAGS@ +CC = @CC@ +LDFLAGS = @LDFLAGS@ +LIBS = -L../.. -ldialog @LIBS@ +RANLIB = @RANLIB@ + +RM = rm -f + +all: setup + +setup: setup.o + $(CC) -o $@ setup.o $(LIBS) + +clean: + rm -f *.o setup + +test: setup + ./setup + Index: contrib/dialog/samples/install/setup.help =================================================================== --- contrib/dialog/samples/install/setup.help (revision 0) +++ contrib/dialog/samples/install/setup.help (revision 0) @@ -0,0 +1,49 @@ +At the moment, only installation from a harddisk +is supported. All commands are shown to you on +the screen before executing. This is just to make +sure that nothing bad is done to your harddisk :-) + +You can also select to install from a premounted dir. +Then the "tar/base" directory must be mounted on +"/install", so that all tar-packages from the basic +stuff are in "/install/*.tgz". (So you could be able +to install via NFS...) + +Good luck..., +anyone wants to help programming this tool?, + +Florian La Roche + +Contents: +========= +- overview about what "setup" does. +- creating a Linux-partition before starting "setup" +- about lilo +- how to use "setup", what keys are supported + +What does "setup" do on my computer? +==================================== +Setup will ask you for a partition on your harddisk, +where you would like to have Linux installed. +You can then choose to install this distribution from +your local harddisk or via network (NFS). +setup will install a very basic system. +At the end, you can install lilo, the Linux Loader. +Rebooting your computer with this little linux system +and then runing the setup-program on it, will give +the possibility to install more packages. + +Creating a Linux-partition: +=========================== +To install this Linux distribution, you need to +create an extra partition on your harddisk for +Linux. + +What is lilo and how should I install it? +========================================= +Read the lilo-documentation for this... + + + +Florian La Roche + Index: contrib/dialog/samples/install/FDISK.TEST =================================================================== --- contrib/dialog/samples/install/FDISK.TEST (revision 0) +++ contrib/dialog/samples/install/FDISK.TEST (revision 0) @@ -0,0 +1,28 @@ + +Disk /dev/hda: 14 heads, 62 sectors, 1018 cylinders +Units = cylinders of 868 * 512 bytes + + Device Boot Begin Start End Blocks Id System +/dev/hda1 1 1 3 1271 a OS/2 Boot Manager +/dev/hda2 4 4 287 123256 6 DOS 16-bit >=32M +/dev/hda3 * 288 288 649 157108 83 Linux native +/dev/hda4 650 650 1018 160146 83 Linux native + +Disk /dev/sda: 64 heads, 32 sectors, 511 cylinders +Units = cylinders of 2048 * 512 bytes + + Device Boot Begin Start End Blocks Id System +/dev/sda1 1 1 21 21488 82 Linux swap +/dev/sda2 22 22 511 501760 83 Linux native + +Disk /dev/sdb: 64 heads, 32 sectors, 4106 cylinders +Units = cylinders of 2048 * 512 bytes + + Device Boot Begin Start End Blocks Id System +/dev/sdb1 1 1 201 205808 83 Linux native +/dev/sdb2 202 202 402 205824 83 Linux native +/dev/sdb3 403 403 603 205824 83 Linux native +/dev/sdb4 604 604 4106 3587072 5 Extended +/dev/sdb5 604 604 1803 1228784 83 Linux native +/dev/sdb6 1024 1804 3003 1228784 83 Linux native +/dev/sdb7 2048 3004 4106 1129456 83 Linux native Index: contrib/dialog/samples/inputbox =================================================================== --- contrib/dialog/samples/inputbox (revision 0) +++ contrib/dialog/samples/inputbox (revision 0) @@ -0,0 +1,20 @@ +#!/bin/sh +# $Id: inputbox,v 1.11 2010/01/13 10:06:01 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --title "INPUT BOX" --clear "$@" \ + --inputbox "Hi, this is an input dialog box. You can use \n +this to ask questions that require the user \n +to input a string as the answer. You can \n +input strings of length longer than the \n +width of the input box, in that case, the \n +input field will be automatically scrolled. \n +You can use BACKSPACE to correct errors. \n\n +Try entering your name below:" 16 51 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/inputbox ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/rotated-data =================================================================== --- contrib/dialog/samples/rotated-data (revision 0) +++ contrib/dialog/samples/rotated-data (revision 0) @@ -0,0 +1,23 @@ +#!/bin/sh +# $Id: rotated-data,v 1.1 2004/12/19 16:43:47 tom Exp $ +# Rotate the second parameter's data by the given shift count. +if test $# != 0 +then + case $1 in + [1-9]*) + left=$1 + next=`expr $left + 1` + shift 1 + ;; + *) + left=1 + next=2 + ;; + esac + char=`echo "$@" | cut -b -${left}` + data=`echo "$@" | cut -b ${next}-` + + printf "%s%s\n" $data $char +else + echo +fi Property changes on: contrib/dialog/samples/rotated-data ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/calendar2-stdout =================================================================== --- contrib/dialog/samples/calendar2-stdout (revision 0) +++ contrib/dialog/samples/calendar2-stdout (revision 0) @@ -0,0 +1,9 @@ +#!/bin/sh +# $Id: calendar2-stdout,v 1.6 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +RESULT=`$DIALOG --stdout --title "CALENDAR" "$@" --calendar "Please choose a date..." 0 0` +retval=$? + +. ./report-string Property changes on: contrib/dialog/samples/calendar2-stdout ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/suse.rc =================================================================== --- contrib/dialog/samples/suse.rc (revision 0) +++ contrib/dialog/samples/suse.rc (revision 0) @@ -0,0 +1,126 @@ +# $Id: suse.rc,v 1.2 2007/02/25 17:49:12 tom Exp $ +# Run-time configuration file for dialog, matches SuSE color scheme. +# +# Types of values: +# +# Number - <number> +# String - "string" +# Boolean - <ON|OFF> +# Attribute - (foreground,background,highlight?) + +# Set aspect-ration. +aspect = 0 + +# Set separator (for multiple widgets output). +separate_widget = "" + +# Set tab-length (for textbox tab-conversion). +tab_len = 0 + +# Make tab-traversal for checklist, etc., include the list. +visit_items = OFF + +# Shadow dialog boxes? This also turns on color. +use_shadow = OFF + +# Turn color support ON or OFF +use_colors = OFF + +# Screen color +screen_color = (CYAN,BLUE,ON) + +# Shadow color +shadow_color = (BLACK,BLACK,OFF) + +# Dialog box color +dialog_color = (BLACK,WHITE,OFF) + +# Dialog box title color +title_color = (YELLOW,WHITE,ON) + +# Dialog box border color +border_color = (WHITE,WHITE,ON) + +# Active button color +button_active_color = (WHITE,BLUE,ON) + +# Inactive button color +button_inactive_color = (BLACK,WHITE,OFF) + +# Active button key color +button_key_active_color = (WHITE,BLUE,ON) + +# Inactive button key color +button_key_inactive_color = (RED,WHITE,OFF) + +# Active button label color +button_label_active_color = (YELLOW,BLUE,ON) + +# Inactive button label color +button_label_inactive_color = (BLACK,WHITE,ON) + +# Input box color +inputbox_color = (BLACK,WHITE,OFF) + +# Input box border color +inputbox_border_color = (BLACK,WHITE,OFF) + +# Search box color +searchbox_color = (BLACK,WHITE,OFF) + +# Search box title color +searchbox_title_color = (YELLOW,WHITE,ON) + +# Search box border color +searchbox_border_color = (WHITE,WHITE,ON) + +# File position indicator color +position_indicator_color = (YELLOW,WHITE,ON) + +# Menu box color +menubox_color = (BLACK,WHITE,OFF) + +# Menu box border color +menubox_border_color = (WHITE,WHITE,ON) + +# Item color +item_color = (BLACK,WHITE,OFF) + +# Selected item color +item_selected_color = (WHITE,BLUE,ON) + +# Tag color +tag_color = (YELLOW,WHITE,ON) + +# Selected tag color +tag_selected_color = (YELLOW,BLUE,ON) + +# Tag key color +tag_key_color = (RED,WHITE,OFF) + +# Selected tag key color +tag_key_selected_color = (RED,BLUE,ON) + +# Check box color +check_color = (BLACK,WHITE,OFF) + +# Selected check box color +check_selected_color = (WHITE,BLUE,ON) + +# Up arrow color +uarrow_color = (GREEN,WHITE,ON) + +# Down arrow color +darrow_color = (GREEN,WHITE,ON) + +# Item help-text color +itemhelp_color = (WHITE,BLACK,OFF) + +# Active form text color +form_active_text_color = (WHITE,BLUE,ON) + +# Form text color +form_text_color = (WHITE,CYAN,ON) + +# Readonly form item color +form_item_readonly_color = (CYAN,WHITE,ON) Index: contrib/dialog/samples/msgbox-help =================================================================== --- contrib/dialog/samples/msgbox-help (revision 0) +++ contrib/dialog/samples/msgbox-help (revision 0) @@ -0,0 +1,14 @@ +#!/bin/sh +# $Id: msgbox-help,v 1.6 2010/01/13 10:53:11 tom Exp $ + +. ./setup-vars + +$DIALOG --title "MESSAGE BOX" --clear \ + --help-button "$@" \ + --msgbox "Hi, this is a simple message box. You can use this to \ + display any message you like. The box will remain until \ + you press the ENTER key." 10 41 + +retval=$? + +. ./report-button Property changes on: contrib/dialog/samples/msgbox-help ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/infobox1 =================================================================== --- contrib/dialog/samples/infobox1 (revision 0) +++ contrib/dialog/samples/infobox1 (revision 0) @@ -0,0 +1,21 @@ +#! /bin/sh +# $Id: infobox1,v 1.4 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +left=10 +unit="seconds" +while test $left != 0 +do + +sleep 1 +$DIALOG --title "INFO BOX" "$@" \ + --infobox "Hi, this is an information box. It is +different from a message box: it will +not pause waiting for input after displaying +the message. The pause here is only introduced +by a sleep command in the shell script. +You have $left $unit to read this..." 10 52 +left=`expr $left - 1` +test $left = 1 && unit="second" +done Property changes on: contrib/dialog/samples/infobox1 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/dialog.py =================================================================== --- contrib/dialog/samples/dialog.py (revision 0) +++ contrib/dialog/samples/dialog.py (revision 0) @@ -0,0 +1,353 @@ +# $Id: dialog.py,v 1.3 2004/09/21 00:52:15 tom Exp $ +# Module: dialog.py +# Copyright (c) 2000 Robb Shecter <robb@acm.org> +# All rights reserved. +# This source is covered by the GNU GPL. +# +# This module is a Python wrapper around the Linux "dialog" utility +# by Savio Lam and Stuart Herbert. My goals were to make dialog as +# easy to use from Python as possible. The demo code at the end of +# the module is a good example of how to use it. To run the demo, +# execute: +# +# python dialog.py +# +# This module has one class in it, "Dialog". An application typically +# creates an instance of it, and possibly sets the background title option. +# Then, methods can be called on it for interacting with the user. +# +# I wrote this because I want to use my 486-33 laptop as my main +# development computer (!), and I wanted a way to nicely interact with the +# user in console mode. There are apparently other modules out there +# with similar functionality, but they require the Python curses library. +# Writing this module from scratch was easier than figuring out how to +# recompile Python with curses enabled. :) +# +# One interesting feature is that the menu and selection windows allow +# *any* objects to be displayed and selected, not just strings. +# +# TO DO: +# Add code so that the input buffer is flushed before a dialog box is +# shown. This would make the UI more predictable for users. This +# feature could be turned on and off through an instance method. +# Drop using temporary files when interacting with 'dialog' +# (it's possible -- I've already tried :-). +# Try detecting the terminal window size in order to make reasonable +# height and width defaults. Hmmm - should also then check for +# terminal resizing... +# Put into a package name to make more reusable - reduce the possibility +# of name collisions. +# +# NOTES: +# there is a bug in (at least) Linux-Mandrake 7.0 Russian Edition +# running on AMD K6-2 3D that causes core dump when 'dialog' +# is running with --gauge option; +# in this case you'll have to recompile 'dialog' program. +# +# Modifications: +# Jul 2000, Sultanbek Tezadov (http://sultan.da.ru) +# Added: +# - 'gauge' widget *) +# - 'title' option to some widgets +# - 'checked' option to checklist dialog; clicking "Cancel" is now +# recognizable +# - 'selected' option to radiolist dialog; clicking "Cancel" is now +# recognizable +# - some other cosmetic changes and improvements +# + +import os +from tempfile import mktemp +from string import split +from time import sleep + +# +# Path of the dialog executable +# +DIALOG = os.getenv("DIALOG"); +if DIALOG is None: + DIALOG="../dialog"; + +class Dialog: + def __init__(self): + self.__bgTitle = '' # Default is no background title + + + def setBackgroundTitle(self, text): + self.__bgTitle = '--backtitle "%s"' % text + + + def __perform(self, cmd): + """Do the actual work of invoking dialog and getting the output.""" + fName = mktemp() + rv = os.system('%s %s %s 2> %s' % (DIALOG, self.__bgTitle, cmd, fName)) + f = open(fName) + output = f.readlines() + f.close() + os.unlink(fName) + return (rv, output) + + + def __perform_no_options(self, cmd): + """Call dialog w/out passing any more options. Needed by --clear.""" + return os.system(DIALOG + ' ' + cmd) + + + def __handleTitle(self, title): + if len(title) == 0: + return '' + else: + return '--title "%s" ' % title + + + def yesno(self, text, height=10, width=30, title=''): + """ + Put a Yes/No question to the user. + Uses the dialog --yesno option. + Returns a 1 or a 0. + """ + (code, output) = self.__perform(self.__handleTitle(title) +\ + '--yesno "%s" %d %d' % (text, height, width)) + return code == 0 + + + def msgbox(self, text, height=10, width=30, title=''): + """ + Pop up a message to the user which has to be clicked + away with "ok". + """ + self.__perform(self.__handleTitle(title) +\ + '--msgbox "%s" %d %d' % (text, height, width)) + + + def infobox(self, text, height=10, width=30): + """Make a message to the user, and return immediately.""" + self.__perform('--infobox "%s" %d %d' % (text, height, width)) + + + def inputbox(self, text, height=10, width=30, init='', title=''): + """ + Request a line of input from the user. + Returns the user's input or None if cancel was chosen. + """ + (c, o) = self.__perform(self.__handleTitle(title) +\ + '--inputbox "%s" %d %d "%s"' % (text, height, width, init)) + try: + return o[0] + except IndexError: + if c == 0: # empty string entered + return '' + else: # canceled + return None + + + def textbox(self, filename, height=20, width=60, title=None): + """Display a file in a scrolling text box.""" + if title is None: + title = filename + self.__perform(self.__handleTitle(title) +\ + ' --textbox "%s" %d %d' % (filename, height, width)) + + + def menu(self, text, height=15, width=54, list=[]): + """ + Display a menu of options to the user. This method simplifies the + --menu option of dialog, which allows for complex arguments. This + method receives a simple list of objects, and each one is assigned + a choice number. + The selected object is returned, or None if the dialog was canceled. + """ + menuheight = height - 8 + pairs = map(lambda i, item: (i + 1, item), range(len(list)), list) + choices = reduce(lambda res, pair: res + '%d "%s" ' % pair, pairs, '') + (code, output) = self.__perform('--menu "%s" %d %d %d %s' %\ + (text, height, width, menuheight, choices)) + try: + return list[int(output[0]) - 1] + except IndexError: + return None + + + def checklist(self, text, height=15, width=54, list=[], checked=None): + """ + Returns a list of the selected objects. + Returns an empty list if nothing was selected. + Returns None if the window was canceled. + checked -- a list of boolean (0/1) values; len(checked) must equal + len(list). + """ + if checked is None: + checked = [0]*len(list) + menuheight = height - 8 + triples = map( + lambda i, item, onoff, fs=('off', 'on'): (i + 1, item, fs[onoff]), + range(len(list)), list, checked) + choices = reduce(lambda res, triple: res + '%d "%s" %s ' % triple, + triples, '') + (c, o) = self.__perform('--checklist "%s" %d %d %d %s' %\ + (text, height, width, menuheight, choices)) + try: + output = o[0] + indexList = map(lambda x: int(x[1:-1]), split(output)) + objectList = filter(lambda item, list=list, indexList=indexList: + list.index(item) + 1 in indexList, + list) + return objectList + except IndexError: + if c == 0: # Nothing was selected + return [] + return None # Was canceled + + + def radiolist(self, text, height=15, width=54, list=[], selected=0): + """ + Return the selected object. + Returns empty string if no choice was selected. + Returns None if window was canceled. + selected -- the selected item (must be between 1 and len(list) + or 0, meaning no selection). + """ + menuheight = height - 8 + triples = map(lambda i, item: (i + 1, item, 'off'), + range(len(list)), list) + if selected: + i, item, tmp = triples[selected - 1] + triples[selected - 1] = (i, item, 'on') + choices = reduce(lambda res, triple: res + '%d "%s" %s ' % triple, + triples, '') + (c, o) = self.__perform('--radiolist "%s" %d %d %d %s' %\ + (text, height, width, menuheight, choices)) + try: + return list[int(o[0]) - 1] + except IndexError: + if c == 0: + return '' + return None + + + def clear(self): + """ + Clear the screen. Equivalent to the dialog --clear option. + """ + self.__perform_no_options('--clear') + + + def scrollbox(self, text, height=20, width=60, title=''): + """ + This is a bonus method. The dialog package only has a function to + display a file in a scrolling text field. This method allows any + string to be displayed by first saving it in a temp file, and calling + --textbox. + """ + fName = mktemp() + f = open(fName, 'w') + f.write(text) + f.close() + self.__perform(self.__handleTitle(title) +\ + '--textbox "%s" %d %d' % (fName, height, width)) + os.unlink(fName) + + + def gauge_start(self, perc=0, text='', height=8, width=54, title=''): + """ + Display gauge output window. + Gauge normal usage (assuming that there is an instace of 'Dialog' + class named 'd'): + d.gauge_start() + # do something + d.gauge_iterate(10) # passed throgh 10% + # ... + d.gauge_iterate(100, 'any text here') # work is done + d.stop_gauge() # clean-up actions + """ + cmd = self.__handleTitle(title) +\ + '--gauge "%s" %d %d %d' % (text, height, width, perc) + cmd = '%s %s %s 2> /dev/null' % (DIALOG, self.__bgTitle, cmd) + self.pipe = os.popen(cmd, 'w') + #/gauge_start() + + + def gauge_iterate(self, perc, text=''): + """ + Update percentage point value. + + See gauge_start() function above for the usage. + """ + if text: + text = 'XXX\n%d\n%s\nXXX\n' % (perc, text) + else: + text = '%d\n' % perc + self.pipe.write(text) + self.pipe.flush() + #/gauge_iterate() + + + def gauge_stop(self): + """ + Finish previously started gauge. + + See gauge_start() function above for the usage. + """ + self.pipe.close() + #/gauge_stop() + + + +# +# DEMO APPLICATION +# +if __name__ == '__main__': + """ + This demo tests all the features of the class. + """ + d = Dialog() + d.setBackgroundTitle('dialog.py demo') + + d.infobox( + "One moment... Just wasting some time here to test the infobox...") + sleep(3) + + if d.yesno("Do you like this demo?"): + d.msgbox("Excellent! Here's the source code:") + else: + d.msgbox("Send your complaints to /dev/null") + + d.textbox("dialog.py") + + name = d.inputbox("What's your name?", init="Snow White") + fday = d.menu("What's your favorite day of the week?", + list=["Monday", "Tuesday", "Wednesday", "Thursday", + "Friday (The best day of all)", "Saturday", "Sunday"]) + food = d.checklist("What sandwich toppings do you like?", + list=["Catsup", "Mustard", "Pesto", "Mayonaise", "Horse radish", + "Sun-dried tomatoes"], checked=[0,0,0,1,1,1]) + sand = d.radiolist("What's your favorite kind of sandwich?", + list=["Hamburger", "Hotdog", "Burrito", "Doener", "Falafel", + "Bagel", "Big Mac", "Whopper", "Quarter Pounder", + "Peanut Butter and Jelly", "Grilled cheese"], selected=4) + + # Prepare the message for the final window + bigMessage = "Here are some vital statistics about you:\n\nName: " + name +\ + "\nFavorite day of the week: " + fday +\ + "\nFavorite sandwich toppings:\n" + for topping in food: + bigMessage = bigMessage + " " + topping + "\n" + bigMessage = bigMessage + "Favorite sandwich: " + str(sand) + + d.scrollbox(bigMessage) + + #<># Gauge Demo + d.gauge_start(0, 'percentage: 0', title='Gauge Demo') + for i in range(1, 101): + if i < 50: + msg = 'percentage: %d' % i + elif i == 50: + msg = 'Over 50%' + else: + msg = '' + d.gauge_iterate(i, msg) + sleep(0.1) + d.gauge_stop() + #<># + + d.clear() Index: contrib/dialog/samples/infobox2 =================================================================== --- contrib/dialog/samples/infobox2 (revision 0) +++ contrib/dialog/samples/infobox2 (revision 0) @@ -0,0 +1,21 @@ +#! /bin/sh +# $Id: infobox2,v 1.5 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +left=10 +unit="seconds" +while test $left != 0 +do + +$DIALOG --sleep 1 \ + --title "INFO BOX" "$@" \ + --infobox "Hi, this is an information box. It is +different from a message box: it will +not pause waiting for input after displaying +the message. The pause here is only introduced +by the sleep command within dialog. +You have $left $unit to read this..." 0 0 +left=`expr $left - 1` +test $left = 1 && unit="second" +done Property changes on: contrib/dialog/samples/infobox2 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/fselect1-stdout =================================================================== --- contrib/dialog/samples/fselect1-stdout (revision 0) +++ contrib/dialog/samples/fselect1-stdout (revision 0) @@ -0,0 +1,18 @@ +#!/bin/sh +# $Id: fselect1-stdout,v 1.6 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +FILE=$HOME +for n in .cshrc .profile .bashrc +do + if test -f $HOME/$n ; then + FILE=$HOME/$n + break + fi +done + +RESULT=`$DIALOG --stdout --title "Please choose a file" "$@" --fselect $FILE 14 48` +retval=$? + +. ./report-string Property changes on: contrib/dialog/samples/fselect1-stdout ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/infobox3 =================================================================== --- contrib/dialog/samples/infobox3 (revision 0) +++ contrib/dialog/samples/infobox3 (revision 0) @@ -0,0 +1,22 @@ +#! /bin/sh +# $Id: infobox3,v 1.5 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +left=10 +unit="seconds" +while test $left != 0 +do + +$DIALOG --sleep 1 \ + --begin 5 0 \ + --title "INFO BOX" "$@" \ + --infobox "Hi, this is an information box. It is +different from a message box: it will +not pause waiting for input after displaying +the message. The pause here is only introduced +by the sleep command within dialog. +You have $left $unit to read this..." 0 0 +left=`expr $left - 1` +test $left = 1 && unit="second" +done Property changes on: contrib/dialog/samples/infobox3 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/infobox4 =================================================================== --- contrib/dialog/samples/infobox4 (revision 0) +++ contrib/dialog/samples/infobox4 (revision 0) @@ -0,0 +1,22 @@ +#! /bin/sh +# $Id: infobox4,v 1.5 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +left=10 +unit="seconds" +while test $left != 0 +do + +$DIALOG --sleep 1 \ + --begin 0 5 \ + --title "INFO BOX" "$@" \ + --infobox "Hi, this is an information box. It is +different from a message box: it will +not pause waiting for input after displaying +the message. The pause here is only introduced +by the sleep command within dialog. +You have $left $unit to read this..." 0 0 +left=`expr $left - 1` +test $left = 1 && unit="second" +done Property changes on: contrib/dialog/samples/infobox4 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/copifuncs/copi.ifreq1 =================================================================== --- contrib/dialog/samples/copifuncs/copi.ifreq1 (revision 0) +++ contrib/dialog/samples/copifuncs/copi.ifreq1 (revision 0) @@ -0,0 +1,20 @@ +#!/usr/bin/perl +$ver = "0.4"; +# +# this perl script is designed for the ifmail package by eugene grosser. +# +# request a file (first argument) from a fido-node (second argument), +# don't forget to quote if you use wildcards, e.g.: + +# ifreq 'files*' 2:2410/305 +# or +# ifreq 'files newfile' 2:2410/305 +# +# this perl script does only add an entry to the corresponding flo-file, +# the mailer ifcico is not started! +# +# rasca, berlin 1994 (rasca@marie.physik.tu-berlin.de, 2:2410/305.4) +# +# multi-zone support added by +# Roland Rosenfeld 15.05.1994 (roland@p13.flokiste.fido.de, 2:2450/300.13) + Property changes on: contrib/dialog/samples/copifuncs/copi.ifreq1 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/copifuncs/copi.ifreq2 =================================================================== --- contrib/dialog/samples/copifuncs/copi.ifreq2 (revision 0) +++ contrib/dialog/samples/copifuncs/copi.ifreq2 (revision 0) @@ -0,0 +1,68 @@ +# this is the base directory, where the req-files are stored and the +# default outbound +$flo_path = "/var/spool/ifmail"; +$outbound = "/outb"; # don't be confused, it means "/var/spool/ifmail/outb" + +# end of configuration ############################################# + +# main() +# +if ((@ARGV < 1) || @ARGV > 2 || $ARGV[0] eq "-?") { + &usage; +} elsif ($ARGV[1] ne "") { + $node = $ARGV[1]; +} +$file = $ARGV[0]; + +if (! ($node =~ /\d+:\d+\/\d+/)) { + die "Wrong address: $node!!!"; +} + +($zone, $netnode) = split (/:/, $node); +$reqfile = sprintf("%04x%04x", split(/\//, $netnode)); + +if ($reqfile eq "00000000") { + print ("can't resolve the fido address \"$node\"\n"); + &usage; +} else { + if ( $zone == 2 ) { + $reqfile = $flo_path . $outbound . "/" . $reqfile . ".req"; + } elsif ( $zone < 7 ) { + $reqfile = $flo_path . $outbound . ".00$zone/" . $reqfile . ".req"; + } else { + $outbound = ""; + open (CONFIG, "< $config") || die "can't open $config"; + while ($_ = <CONFIG>) { + if ( /^address.*$zone:.*\@(\w*)/ ) { $outbound = $1; } + } + if ( $outbound eq "" ) { + die "No Zone $zone found in $config"; + } + $reqfile = $flo_path . "/$outbound/" . $reqfile . ".req"; + } + + # seperate the file names of the first argument + @files = split (/\s+/, $ARGV[0]); + + # open the flofile for appending + open(FLOFILE, ">>" . $reqfile) || die "can't open $reqfile"; + while (@files) { + print (FLOFILE shift(@files), "\n"); + } + close(FLOFILE); + + print ("--- fido request $ver ---------------------------\n"); + print ("requesting \"$file\" from fido-node $node\n"); + print ("--- executing ifstat .. ------------------------\n"); + system("ifstat"); +} + +# +# subroutine "usage" +# +sub usage { + printf ("--- fido request %s -------------\n", $ver); + printf ("usage: ifreq <file> [<3-d address>]\n"); + printf ("e.g. : ifreq FILES 2:2410/305\n"); + exit 1; +} Property changes on: contrib/dialog/samples/copifuncs/copi.ifreq2 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/copifuncs/copi.trnrc =================================================================== --- contrib/dialog/samples/copifuncs/copi.trnrc (revision 0) +++ contrib/dialog/samples/copifuncs/copi.trnrc (revision 0) @@ -0,0 +1,13 @@ +TRNINIT="-x -e -X -F\" :> \"" +HIDELINE="^X-FTN" +NEWSHEADER="Newsgroups: %(%F=^\$?%C:%F) +Subject: %(%S=^\$?%\"\n\nSubject: \":%S) +%(%R=^\$?:References: %R +)Sender: +Distribution: %(%i=^\$?%\"\nDistribution: \":%D) +Organization: %o +X-Comment-To: %f\n\n" +ATTRIBUTION="%f writes:\n" +YOUSAID="In article %i \n of newsgroup %C you write about \"%s\":\n" +MAILCALL="(New Mail)" +export NEWSHEADER HIDELINE TRNINIT ATTRIBUTION MAILCALL YOUSAID EDITOR Index: contrib/dialog/samples/copifuncs/copi.rcnews =================================================================== --- contrib/dialog/samples/copifuncs/copi.rcnews (revision 0) +++ contrib/dialog/samples/copifuncs/copi.rcnews (revision 0) @@ -0,0 +1,79 @@ +#! /bin/sh +## $Revision: 1.1 $ +## News boot script. + +## =()<. @<_PATH_SHELLVARS>@>()= +. /usr/lib/news/innshellvars + +## Pick ${INND} or ${INNDSTART} +WHAT=${INNDSTART} +## Set to true or false +DOINNWATCH=false +MAIL="${MAILCMD} -s 'Boot-time Usenet warning on `hostname`' ${NEWSMASTER}" + +## RFLAG is set below; set FLAGS as appropriate. +RFLAG="" +FLAGS="-i0 -c0" + +## Clean shutdown? +if [ -f ${SERVERPID} ] ; then + ( echo 'INND: PID file exists -- unclean shutdown!' >/dev/console ) + RFLAG="-r" +fi + +if [ ! -f ${NEWSLIB}/.news.daily ] ; then + echo 'No .news.daily file; need to run news.daily?' | eval ${MAIL} +else + case `find ${NEWSLIB} -name .news.daily -mtime +1 -print 2>/dev/null` in + "") + ;; + *) + echo 'Old .news.daily file; need to run news.daily?' | eval ${MAIL} + ;; + esac +fi + +## Active file recovery. +if [ ! -s ${ACTIVE} ] ; then + if [ -s ${NEWACTIVE} ] ; then + mv ${NEWACTIVE} ${ACTIVE} + else + if [ -s ${OLDACTIVE} ] ; then + cp ${OLDACTIVE} ${ACTIVE} + else + ( echo 'INND: No active file!' >/dev/console ) + exit 1 + fi + fi + RFLAG="-r" + # You might want to rebuild the DBZ database, too: + #echo "cd ${NEWSLIB} \ + # && makehistory -r \ + # && mv history.n.dir history.dir \ + # && mv history.n.pag history.pag" | su ${NEWSUSER} +fi + +## Remove temporary batchfiles and lock files. +( cd ${BATCH} && rm -f bch* ) +( cd ${LOCKS} && rm -f LOCK* ) +( cd ${TEMPSOCKDIR} && rm -f ${TEMPSOCK} ) +rm -f ${NEWSCONTROL} ${NNTPCONNECT} ${SERVERPID} + +## Start the show. +( echo 'Starting innd.' >/dev/console ) +eval ${WHAT} ${RFLAG} ${FLAGS} + +# Gee, looks like lisp, doesn't it? +${DOINNWATCH} && { + echo "( ( sleep 60 ; ${INNWATCH} ) & )" | su ${NEWSUSER} +} + +RMFILE=${MOST_LOGS}/expire.rm +if [ -s ${MOST_LOGS}/expire.rm ] ; then + ( echo "Removing articles from pre-downtime expire run." >/dev/console ) + ( + echo 'System shut down during expire. Unlinking articles listed in' + echo ${RMFILE} + ) | eval ${MAIL} + echo "${NEWSBIN}/expirerm ${RMFILE}" | su ${NEWSUSER} & +fi Property changes on: contrib/dialog/samples/copifuncs/copi.rcnews ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/copifuncs/copi.wheel =================================================================== --- contrib/dialog/samples/copifuncs/copi.wheel (revision 0) +++ contrib/dialog/samples/copifuncs/copi.wheel (revision 0) @@ -0,0 +1,54 @@ +#!/bin/bash +# $Id: copi.wheel,v 1.2 2001/01/15 22:26:33 tom Exp $ + +mkstemp size +dialog --print-maxsize 2>$tmp_size +ROWS="`cut $tmp_size -f1 -d, | cut -f2 -d:`" +COLS="`cut $tmp_size -f2 -d,`" +rm $tmp_size + +# Takes an integer, multiplies it for COLS, divides for 132 +scalex() { + echo $[$1*$COLS/132] +} +scaley() { + echo $[$1*$ROWS/60] +} + +dialog --backtitle "$TITLE" --no-shadow \ +--begin `scaley 27` `scalex 98` --infobox "pushd /var/log >/dev/null" 0 0 --and-widget \ +--begin `scaley 35` `scalex 95` --infobox "mkdir -p news -m 755" 0 0 --and-widget \ +--begin `scaley 45` `scalex 86` --infobox "chown news.news news" 0 0 --and-widget \ +--begin `scaley 48` `scalex 78` --infobox "cd /var/log/news" 0 0 --and-widget \ +--begin `scaley 51` `scalex 61` --infobox "mkdir -p OLD -m 755" 0 0 --and-widget \ +--begin `scaley 52` `scalex 47` --infobox "chown news.news OLD" 0 0 --and-widget \ +--begin `scaley 51` `scalex 40` --infobox "cd /var/spool" 0 0 --and-widget \ +--begin `scaley 48` `scalex 25` --infobox "mkdir -p news -m 775" 0 0 --and-widget \ +--begin `scaley 42` `scalex 13` --infobox "chown news.news news" 0 0 --and-widget \ +--begin `scaley 35` `scalex 4` --infobox "cd /var/spool/news" 0 0 --and-widget \ +--begin `scaley 27` `scalex 2` --infobox "CURMASK=`umask`" 0 0 --and-widget \ +--begin `scaley 19` `scalex 4` --infobox "umask 02" 0 0 --and-widget \ +--begin `scaley 11` `scalex 13` --infobox "mkdir -p out.going control junk in.coming" 0 0 --and-widget \ +--begin `scaley 5` `scalex 25` --infobox "chown news.news out.going control junk in.coming" 0 0 --and-widget \ +--begin `scaley 2` `scalex 37` --infobox "cd in.coming" 0 0 --and-widget \ +--begin `scaley 1` `scalex 46` --infobox "mkdir -p bad tmp" 0 0 --and-widget \ +--begin `scaley 2` `scalex 61` --infobox "chown news.news bad tmp" 0 0 --and-widget \ +--begin `scaley 5` `scalex 76` --infobox "umask $CURMASK" 0 0 --and-widget \ +--begin `scaley 11` `scalex 87` --infobox "ln -sf ~news /usr/local/lib/" 0 0 --and-widget \ +--begin `scaley 18` `scalex 95` --infobox "ln -sf ~news/inews /usr/bin/" 0 0 --and-widget \ +--begin `scaley 26` `scalex 97` --infobox "chmod 1777 /var/tmp" 0 0 --and-widget \ +--begin `scaley 34` `scalex 95` --infobox "cd ~news" 0 0 --and-widget \ +--begin `scaley 42` `scalex 87` --infobox "touch history history.dir history.pag errlog log" 0 0 --and-widget \ +--begin `scaley 47` `scalex 76` --infobox "chown news.news history* log errlog" 0 0 --and-widget \ +--sleep 1 --infobox "Creating spooling and logging directories and files..." 0 0 --and-widget \ +--begin `scaley 51` `scalex 78` --infobox "chmod 664 history* log errlog" 0 0 --and-widget \ +--begin `scaley 52` `scalex 60` --infobox "echo \"control 0000000000 0000000001 y\" > active" 0 0 --and-widget \ +--begin `scaley 51` `scalex 42` --infobox "echo \"junk 0000000000 0000000001 y\" >> active" 0 0 --and-widget \ +--begin `scaley 48` `scalex 26` --infobox "chown news.news active" 0 0 --and-widget \ +--begin `scaley 42` `scalex 13` --infobox "echo \"control 814573260 usenet\" > active.times" 0 0 --and-widget \ +--begin `scaley 35` `scalex 4` --infobox "echo \"junk 814573260 usenet\" >> active.times" 0 0 --and-widget \ +--begin `scaley 27` `scalex 2` --infobox "chown news.news active.times" 0 0 --and-widget \ +--begin `scaley 19` `scalex 4` --infobox ":>newsgroups" 0 0 --and-widget \ +--begin `scaley 11` `scalex 12` --infobox "chown news.news newsgroups" 0 0 --and-widget \ +--begin `scaley 6` `scalex 25` --infobox "popd >/dev/null" 0 0 +sleep 1 Property changes on: contrib/dialog/samples/copifuncs/copi.wheel ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/copifuncs/copi.ifpoll1 =================================================================== --- contrib/dialog/samples/copifuncs/copi.ifpoll1 (revision 0) +++ contrib/dialog/samples/copifuncs/copi.ifpoll1 (revision 0) @@ -0,0 +1,9 @@ +#!/bin/sh +# ver 0.7 +# ifpoll, poll my boss node or the node given as argument 1 +# +# i start this shell script every day by crond, but you can +# start it also by hand :) start it as the owner of ifcico. +# rasca, berlin 1993 (Rasca Gmelch, 2:2410/305.4) +# +# where "ifcico" and "ifpack" reside Property changes on: contrib/dialog/samples/copifuncs/copi.ifpoll1 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/copifuncs/copi.sendifm1 =================================================================== --- contrib/dialog/samples/copifuncs/copi.sendifm1 (revision 0) +++ contrib/dialog/samples/copifuncs/copi.sendifm1 (revision 0) @@ -0,0 +1,74 @@ +#! /bin/sh +## $Revision: 1.1 $ +## SH script to send UUCP batches out. + +## =()<. @<_PATH_SHELLVARS>@>()= +. ~news/innshellvars + +PROGNAME=`basename $0` +LOCK=${LOCKS}/LOCK.${PROGNAME} +LOG=${MOST_LOGS}/${PROGNAME}.log + +MAXJOBS=200 +UUXFLAGS="- -r -gd" + +## Start logging. +test ! -f ${LOG} && touch ${LOG} +chmod 0660 ${LOG} +exec >>${LOG} 2>&1 +echo "${PROGNAME}: [$$] begin `date`" +cd ${BATCH} + +## Anyone else there? +trap 'rm -f ${LOCK} ; exit 1' 1 2 3 15 +shlock -p $$ -f ${LOCK} || { + echo "${PROGNAME}: [$$] locked by [`cat ${LOCK}`]" + exit 0 +} + +## Who are we sending to? +if [ -n "$1" ] ; then + LIST="$*" +else + LIST=`ls /usr/spool/news/out.going|egrep "f[0-9]*.n[0-9]*$"` +fi + +case ${HAVE_UUSTAT} in +DONT) + TEMP=${TMPDIR}/uuq$$ + uuq -h |tr -d : >${TEMP} + ;; +esac + +## Do the work... + +for SITE in ${LIST}; do + + ## See if any data is ready for host. + BATCHFILE=${SITE}.uucp + if [ -f ${SITE}.work ] ; then + cat ${SITE}.work >>${BATCHFILE} + rm -f ${SITE}.work + fi + mv ${SITE} ${SITE}.work + ctlinnd -s -t30 flush ${SITE} || continue + cat ${SITE}.work >>${BATCHFILE} + rm -f ${SITE}.work + if [ ! -s ${BATCHFILE} ] ; then + echo "${PROGNAME}: [$$] no articles for ${SITE}" + rm -f ${BATCHFILE} + continue + fi + + ## Get the compression flags. + echo "${PROGNAME}: [$$] begin ${SITE}" + case "${SITE}" in + phreak) + COMPRESS="compress" + ;; + *) + COMPRESS="gzip" + ;; + esac + + time batcher \ Property changes on: contrib/dialog/samples/copifuncs/copi.sendifm1 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/copifuncs/copi.ifpoll2 =================================================================== --- contrib/dialog/samples/copifuncs/copi.ifpoll2 (revision 0) +++ contrib/dialog/samples/copifuncs/copi.ifpoll2 (revision 0) @@ -0,0 +1,107 @@ + +# Packets backup directory - You have to CREATE this directory +BAK=/var/spool/ifmail/BAK + +# logfile of ifcico +IFLOG=/var/log/ifmail/sysiflog + +# log archive +IFLOGARC=/var/log/ifmail/TheLog + +# owner of "ifcico" +IFCICO_OWNER=fnet + +# how often should i try to call NODE? +MaxTry=30 + +# delay between outgoing calls in seconds +DELAY=10 + +# where to log processing - file or tty/console +INFO_TTY=/dev/console + +# Lets backup the log and use a new one +if [ -e $IFLOG ]; then + echo Rearranging logs... + cat $IFLOG >> $IFLOGARC + cp /dev/null $IFLOG +fi + +echo "`date \"+%b %d %T\"` ifpoll[$$]: starting" # >> $INFO_TTY + +# remember me, not to run as root.. +# +if [ `whoami` != "$IFCICO_OWNER" ]; then + echo "*** run $0 as the owner of ifcico ***" + echo "`date \"+%b %d %T\"` ifpoll[$$]: wrong uid (rc 2)" # >> $INFO_TTY + exit 2 +fi + +# argv[1] is the optional node to call +# +if [ "$1" != "" ]; then + if [ "$1" = "-?" ] || [ "$1" = "-h" ]; then + echo "usage: ifpoll [<node>]" + exit 3 + else + NODE=$1 + fi +fi + +# let's pack the fido stuff.. +# +$FIDOPATH/ifpack + +# loop until ifcico could connect the node or MaxTry is encountered +# +i=1; errlv=1 +while let 'i <= MaxTry' && let 'errlv != 0' +do + echo -n "`date \"+%b %d %T\"` ifpoll[$$]: $i. try ($NODE) " # >> $INFO_TTY + # + # start ifcico in master mode .. + # + $FIDOPATH/ifcico -r 1 $NODE + errlv=$? + if [ $errlv != "0" ]; then + echo "failed" # >> $INFO_TTY + if [ $i != $MaxTry ]; then + sleep $DELAY + fi + let i=i+1 + else + echo "ok :)" # >> $INFO_TTY + fi +done + +# if the poll was fine, unpacking.. +# +if [ $errlv = "0" ]; then + echo "`date \"+%b %d %T\"` ifpoll[$$]: unpacking.. " # >> $INFO_TTY + cp -f /var/spool/ifmail/inb/*.* $BAK + $FIDOPATH/ifunpack + # add here some additional lines for processing tic files or + # incoming file-lists or simular.. +else + # write me a mail about the failed poll + tail --lines=20 $IFLOG | elm -s "ifpoll: failed" $IFCICO_SYSOP >/dev/null +fi + +echo "`date \"+%b %d %T\"` ifpoll[$$]: finished (rc $errlv)" # >> $INFO_TTY + +# Collect some infos... +echo "" +echo "*** Outgoing File Transfer Stats: ***" +grep sent $IFLOG +echo "*** Incoming File Transfer Stats: ***" +grep received $IFLOG +echo "" + +echo "---->> New mail: <<-----" +grep echomail $IFLOG +echo "---->> Personal mail: <<-----" +grep "mail from" $IFLOG +echo "" + +# return the errorlevel of ifcico +exit $errlv Property changes on: contrib/dialog/samples/copifuncs/copi.ifpoll2 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/copifuncs/copi.sendifm2 =================================================================== --- contrib/dialog/samples/copifuncs/copi.sendifm2 (revision 0) +++ contrib/dialog/samples/copifuncs/copi.sendifm2 (revision 0) @@ -0,0 +1,15 @@ + ${SITE} ${BATCHFILE} + + echo "${PROGNAME}: [$$] end ${SITE}" +done + +case ${HAVE_UUSTAT} in +DONT) + rm -f ${TEMP} + ;; +esac + +## Remove the lock file. +rm -f ${LOCK} + +echo "${PROGNAME}: [$$] end `date`" Property changes on: contrib/dialog/samples/copifuncs/copi.sendifm2 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/copifuncs/copi.ifman1 =================================================================== --- contrib/dialog/samples/copifuncs/copi.ifman1 (revision 0) +++ contrib/dialog/samples/copifuncs/copi.ifman1 (revision 0) @@ -0,0 +1,29 @@ +#! /usr/bin/perl +# +# This is a utility script to manipulate Fidonet-related issues +# using Eugene Crosser's ifmail package +# +# Version 0.1 +# +# (C) Michael Bravo and The Communication Tube, 1994 +# +# You can do whatever you want with this script. I take no responsibility +# whatsoever in anything related to this script. If you make some useful +# additions to this, please think of sending them to me so I could partake +# of your wisdom. +# +# This script was written to help attaching and requesting files from the +# commandline, much like you do with Squish under DOS or OS/2. It is certainly +# not perfect - I used it as an exercise in Perl. It also probably lacks +# some other useful features, like ability to specify trunc/sent or kill/sent +# attributes etc etc. If you really want this or some other features +# implemented, write me at mbravo@tctube.spb.su or mbravo@octopus.spb.su +# and I will try to do what I can. +# +# Note - files don't get copied to any spool dir, so if you move attached +# files somewhere, they won't get sent. +# +# This script is supposed to read ifmail's config to determine where outbound +# directory and logfile are. The only two parameters to modify in most cases +# are below. + Property changes on: contrib/dialog/samples/copifuncs/copi.ifman1 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/copifuncs/common.funcs =================================================================== --- contrib/dialog/samples/copifuncs/common.funcs (revision 0) +++ contrib/dialog/samples/copifuncs/common.funcs (revision 0) @@ -0,0 +1,338 @@ +# +# ComeOn Point Functions! v0.9.2 +# - usate da vari altri moduli ComeOn Point... +# +# AUTHOR: Beppe (beppe.dem@nsm.it) +# +# 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. +# + +save() { + if [ -f $1 ] + then + mv $1 $1~ + fi +} + +# Returns $PKG_TO_REMOVE +find_incompatible_packages() { + dialog --backtitle "$TITLE" --infobox "Vediamo innanzitutto se c'e' qualche pacchetto di troppo ... ;-)" 0 0 + + PKG_TO_REMOVE="" + for i in sendmail smailcfg cnews + do + if [ -f /var/adm/packages/$i ] + then + PKG_TO_REMOVE="$PKG_TO_REMOVE $i" + fi + done +} + +# Returns $PKG_TO_INSTALL +find_necessary_packages() { + dialog --backtitle "$TITLE" --infobox "Controlliamo se manca qualche pacchetto..." 0 0 + + PKG_TO_INSTALL="" + for i in tcpip mailx inn + do + if [ ! -f /var/adm/packages/$i ] + then + PKG_TO_INSTALL="$PKG_TO_INSTALL $i" + fi + done +} + +# Args: user, editor +configure_trn() { + dialog --backtitle "$TITLE" --infobox "Configuro trn all'user $1..." 0 0 + + SHELL_USED="`basename \`cut /etc/passwd -f1,7 -d: | grep $1: | cut -f2 -d:\``" + USER_HOME="`cut /etc/passwd -f1,6 -d: | grep $1: | cut -f2 -d:`" + TRNRC="$USER_HOME/.trnrc" + + case $SHELL_USED in + bash) + if [ -f $USER_HOME/.bash_profile ] + then + PROF=$USER_HOME/.bash_profile + else + PROF=$USER_HOME/.profile + fi;; + zsh) + PROF=$USER_HOME/.zprofile;; + *) + PROF=$USER_HOME/.profile;; + esac + + if [ ! -f $PROF ] + then + :>$PROF + chown $1.mail $PROF + elif [ ! "`grep -x \". ~/.trnrc\" $PROF`" ] + then + echo -e "\n. ~/.trnrc" >>$PROF + fi + + save $TRNRC + + echo "EDITOR=\"$2\"" > $TRNRC + cat copi.trnrc >> $TRNRC + chown $1.mail $TRNRC +} + +# Args: user, editor +configure_elm() { + USER=$1 + EDIT=$2 + + dialog --backtitle "$TITLE" --infobox "Configuro elm all'user $USER..." 0 0 + + USER_HOME="`cut /etc/passwd -f1,6 -d: | grep $USER: | cut -f2 -d:`" + DIRRC="$USER_HOME/.elm" + ELMRC="$DIRRC/elmrc" + + mkdir -p $DIRRC -m 700 + chown $USER.mail $USERHOME $DIRRC + + save $ELMRC + + cat <<EOF >$ELMRC +# +# .elm/elmrc - options file for the ELM mail system +# +# Generated by $PKTNAME for $USER +# + +# For yes/no settings with ?, ON means yes, OFF means no + +# how to sort the alias list, "Name" by default +### aliassortby = Name + +# name of editor to use for replies that have text +alteditor = $EDIT + +# alternative addresses that I could receive mail from (usually a +# forwarding mailbox) and don't want to have listed... +### alternatives = + +# should the default be to delete messages we've marked for deletion? +alwaysdelete = ON + +# should the default be to keep unread messages in the incoming mailbox? +alwayskeep = ON + +# should the default be to store read messages to the "received" folder? +alwaysstore = OFF + +# should we use the "->" rather than the inverse video bar? +arrow = OFF + +# should the message disposition questions be displayed(ON) or +# auto-answered(OFF) with the default answers when we resync or +# change folders? +ask = OFF + +# would you like to be asked for Carbon-Copies information each msg? +askcc = OFF + +# attribution string for replies ('%s' is the author of original message) +attribution = %s wrote: + +# automatically copy message being replied to into buffer? +autocopy = ON + +# threshold for bouncing copies of remote uucp messages... +# zero = disable function. +### bounceback = 0 + +# This is used to determine if the builtin pager should be used on some +# messages even if you would usually use an external pager program. +# There are two ways of determining whether the builtin pager should be +# used. If you want any message that is shorter than "n" lines to use the +# internal pager, set the parameter to "n". If you want the builtin +# pager to be used if the message is "m" lines shorter than the number of +# lines on your screen set the parameter to be "-m". Setting the +# parameter to zero will result in the message always being sent through +# your external pager. +### builtinlines = -3 + +# where to save calendar entries +#calendar = /root/calendar + +# list of options that can be configured at the "o)ptions" screen +configoptions = ^_cdefsopyv_am_un + +# Should elm always ask the user to confirm before it appends +# messages to any existing file? +# This is used for both folders in the user's mail directory +# and ordinary files. +confirmappend = OFF + +# Should elm always ask the user to confirm before it creates +# any new files? +# This is used for both folders in the user's mail directory +# and ordinary files. +confirmcreate = OFF + +# Should elm ask for confirmation before it appends a message +# to an existing file that is not a folder in the user's Mail +# directory? +# This is used for ordinary files only and does not affect +# folders in the user's mail directory. +confirmfiles = OFF + +# Should elm ask for confirmation before it creates a new folder +# in the user's Mail directory? +# This is used only for folders in the user's mail directory and +# does not affect ordinary files. +confirmfolders = OFF + +# save a copy of all outbound messages? +copy = ON + +# name of editor for ~e command (when editor="builtin") +easyeditor = $EDIT + +# what editor to use ("none" means simulate Berkeley Mail) +editor = $EDIT + +# the character to use in the builtin editor for entering commands +### escape = ~ + +# save outbound messages by login name of sender/recipient even if the +# associated folder doesn't already exist? +### forcename = OFF + +# do we want to be able to mail out AT&T Mail Forms? +### forms = OFF + +# The full user name for outbound mail +### fullname = $PKTNAME User + +# should we keep folders from which all messages are deleted? +### keepempty = OFF + +# are we running on an HP terminal and want HOME, PREV, NEXT, etc...? +### keypad = OFF + +# local ".signature" file to append to appropriate messages... +localsignature = ~/.signature + +# where to save my mail to, default directory is "Mail" +maildir = ~/Mail + +# should we display the three-line 'mini' menu? +menu = ON + +# would you like a copy of a message you send to an alias you are on? +### metoo = OFF + +# when using the page commands (+ - <NEXT> <PREV>) change the current +# message pointer...? +### movepage = OFF + +# just show the names when expanding aliases? +names = OFF + +# when messages are copied into the outbound buffer, don't include headers? +noheader = ON + +# program to use for displaying messages ('builtin' is recommended) +### pager = builtin+ + +# start up by pointing to the first new message received, if possible? +### pointnew = ON + +# list of delivery precedences allowed, or empty to allow anything +# precedence may be followed by optional ":priority" specification +### precedences = + +# prefix sequence for indenting included message text in outgoing messages... +prefix = _:>_ + +# how to print a message ('%s' is the filename) +### print = /bin/cat %s | /usr/bin/lpr + +# prompt for a command after the external pager exits? +### promptafter = ON + +# Value by which message count is incremented while reading a new mailbox. +# Setting this value to a number larger than one will speed up the time it +# takes to read a large mailbox when using a slow terminal. +### readmsginc = 1 + +# where to save received messages to, default file is "=received" +receivedmail = =received + +# remote ".signature" file to append to appropriate messages... +remotesignature = ~/.signature + +# emulate the mailx message increment mode (only increment after +# something has been 'done' to a message, either saved or deleted, +# as opposed to simply each time something is touched)? +### resolve = ON + +# save messages, incoming and outbound, by login name of sender/recipient? +savename = ON + +# where to save copies of outgoing mail to, default file is "=sent" +sentmail = =sent + +# The shell to use for shell escapes +shell = /bin/sh + +# do we want dashes above signatures? (News 2.11 compatibility and convention) +### sigdashes = ON + +# time in seconds which Elm will wait after displaying a transient message +# and before erasing it. Can be 0 or positive integer. +### sleepmsg = 2 + +# are we running on an HP terminal and want softkeys available too? +# (this implies "keypad=ON" too) +### softkeys = OFF + +# how to sort folders, "Reverse Sent" by default +### sortby = Reverse-Sent + +# Set the main prompt timeout for resynching... +### timeout = 600 + +# display message title when displaying pages of message? +titles = ON + +# where to place temporary files, default directory is "/tmp" +### tmpdir = /tmp/ + +# are we good at it? 0=beginner, 1=intermediate, 2+ = expert! +userlevel = 0 + +# would you like to use termcap/terminfo ti/te entries? +usetite = ON + +# name of editor for ~v command (when editor="builtin") +visualeditor = $EDIT + +# enable the weedout list to be read? +### weed = ON + +# what headers I DON'T want to see, ever. +weedout = "*end-of-user-headers*" + +EOF + + chmod 600 $ELMRC + chown $USER.mail $ELMRC +} Property changes on: contrib/dialog/samples/copifuncs/common.funcs ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/copifuncs/admin.funcs =================================================================== --- contrib/dialog/samples/copifuncs/admin.funcs (revision 0) +++ contrib/dialog/samples/copifuncs/admin.funcs (revision 0) @@ -0,0 +1,200 @@ +#!/bin/bash +# $Id: admin.funcs,v 1.2 2001/01/15 22:20:11 tom Exp $ +# +# ComeOn Point Functions! v0.9.2 +# - usate da vari altri moduli ComeOn Point... +# +# AUTHOR: Beppe (beppe.dem@nsm.it) +# +# 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. +# + +# Args: source_file, domain, nldir +install_nodelist() { + + NODELIST="$1" + FOR_DOMAIN="$2" + NODEDIR="$3" + + dialog --backtitle "$TITLE" --infobox "Installo la nodelist '$NODELIST' per il domain $FOR_DOMAIN, attendere prego..." 0 0 + + cp "$NODELIST" $NODEDIR/$FOR_DOMAIN.ndl + chown fnet.uucp $NODEDIR/$FOR_DOMAIN.ndl + + echo "y" | su -l fnet -c "ifindex" >/dev/null +} + +# Args: source, dest +add_alias() { + + SOURCE=$1 + DEST=$2 + ALIASES=/etc/aliases + ENTRY="`grep $SOURCE: $ALIASES`" + + dialog --backtitle "$TITLE" --infobox "Creo un alias per redirigere le mail per $SOURCE a $DEST ..." 0 0 + + if [ ! "$ENTRY" ] + then + echo "$SOURCE: $DEST" >>$ALIASES + else + OLDDEST="`echo $ENTRY | cut -f2 -d:`" + mkstemp alias + sed /"$SOURCE:"/s/"$OLDDEST"/" $DEST"/ $ALIASES >$tmp_alias + cat $tmp_alias >$ALIASES + rm $tmp_alias + fi + mkaliases >/dev/null +} + +# Args: Areas_pathname, newsgroup, area_ftn, description [, expire_days] +# Returns: 1 - innd not running +# 2 - already existing newsgroup +# 3 - already existing ftn_area +create_newsgroup() { + + AREAS="$1" + NEWSGROUP="$2" + AREA="$3" + DESCRIPTION="$4" + EXPIRE_DAYS="$5" + + NEWSGROUPS=~news/newsgroups + EXPIRECTL=~news/expire.ctl + + dialog --backtitle "$TITLE" --infobox "Creo il newsgroup $NEWSGROUP per contenere i messaggi dell'area $AREA..." 0 0 + + if [ ! "`ps ax | grep ~news/etc/innd`" ] + then + return 1 + fi + + if [ "`cut $NEWSGROUPS -f1 | cut -f1 -d\ | grep -x $NEWSGROUP`" ] + then + return 2 + fi + + if [ "`cut $AREAS -f1 | cut -f1 -d\ | grep -x $AREA`" ] + then + return 3 + fi + + su -l news -c "bin/ctlinnd newgroup $NEWSGROUP" >/dev/null + echo -e "$NEWSGROUP\t$DESCRIPTION" >> $NEWSGROUPS + echo -e "$AREA\t$NEWSGROUP\t`echo $NEWSGROUP | cut -f1 -d.`" >> $AREAS + + if [ "$EXPIRE_DAYS" ]; then + echo "$NEWSGROUP:A:2:$EXPIRE_DAYS:$EXPIRE_DAYS" >> $EXPIRECTL + fi + + chown news.news $NEWSGROUPS $EXPIRECTL + chmod 440 $EXPIRECTL + chown fnet.uucp $AREAS +} + +# Returns: 0 if ok, 1 if (innd not running), 2 if (no that newsgroup) +# Args: Areas_pathname, newsgroup +rmgroup() { + + AREAS=$1 + NEWSGR=$2 + NEWSGROUPS=~news/newsgroups + EXPIRE=~news/expire.ctl + + dialog --backtitle "$TITLE" --infobox "Elimino il newsgroup $NEWSGR ed i messaggi in esso contenuti, attendere prego. Questa operazione potrebbe durare alcuni minuti." 0 0 + + if [ ! "`ps x | grep ~news/etc/innd`" ] + then + return 1 + fi + + if [ ! "`cut -f1 $NEWSGROUPS | cut -f1 -d\ | grep -x $NEWSGR`" ] + then + return 2 + else + +# Updating newsgroups file + if [ -f $NEWSGROUPS ] + then + mkstemp groups + mv $NEWSGROUPS $NEWSGROUPS~ + grep -v $NEWSGR $NEWSGROUPS~ >$tmp_groups + mv $tmp_groups $NEWSGROUPS + else + :> $NEWSGROUPS + fi + chown news.news $NEWSGROUPS + +# Updating Areas file + if [ -f $AREAS ] + then + mkstemp areas + mv $AREAS $AREAS~ + grep -v $NEWSGR $AREAS~ >$tmp_areas + mv $tmp_areas $AREAS + else + :> $AREAS + fi + chown fnet.uucp $AREAS + +# Updating expire.ctl file + if [ -f $EXPIRE ] + then + mkstemp expire + mv $EXPIRE $EXPIRE~ + grep -v "$NEWSGR:" $EXPIRE~ >$tmp_expire + mv $tmp_expire $EXPIRE + else + :> $EXPIRE + fi + chown news.news $EXPIRE + chmod 444 $EXPIRE +# Remove pending articles + echo -e "\n$NEWSGR:A:0:0:0" >>$EXPIRE + su -l news -c "bin/news.daily" >/dev/null + mkstemp expire + grep -v $NEWSGR $EXPIRE >$tmp_expire + mv $tmp_expire $EXPIRE + chown news.news $EXPIRE + chmod 444 $EXPIRE + +# Updating active file + su -l news -c "bin/ctlinnd rmgroup $NEWSGR" >/dev/null + fi +} + +# Args: newsgroups_wildmat, days_to_keep +set_expire_time() { + + NEWSGROUP="$1" + KEEPDAYS="$2" + EXPIRE=~news/expire.ctl + + dialog --backtitle "$TITLE" --infobox "Imposto a $KEEPDAYS il numero di giorni di mantenimento dei messaggi del newsgroup $NEWSGROUP..." 0 0 + + if [ ! -f $EXPIRE ] + then + :> $EXPIRE + + elif [ "`cut $EXPIRE -s -f1 -d: | grep -x $NEWSGROUP`" ] + then + mkstemp expire + grep -v "$NEWSGROUP:" $EXPIRE >$tmp_expire + mv $tmp_expire $EXPIRE + fi + echo -e "\n$NEWSGROUP:A:2:$KEEPDAYS:$KEEPDAYS" >>$EXPIRE + chown news.news $EXPIRE + chmod 444 $EXPIRE +} Property changes on: contrib/dialog/samples/copifuncs/admin.funcs ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/copifuncs/copi.ifman2 =================================================================== --- contrib/dialog/samples/copifuncs/copi.ifman2 (revision 0) +++ contrib/dialog/samples/copifuncs/copi.ifman2 (revision 0) @@ -0,0 +1,137 @@ +if ( getpwuid($<) ne $ifowner ) { print "You must be owner of ifmail\n"; exit 1; } + +if ( (@ARGV < 3) || $ARGV[0] eq "-?" || $ARGV[0] eq "-h" ) { + &usage; +} + +$ARGV[0] =~ tr/A-Z/a-z/; +$ARGV[3] =~ tr/A-Z/a-z/; + +&parsecfg; + +if ( $logfile ne "" ) { + open(LOG, ">>".$logfile) || die "Can't open logfile"; +} + +if (substr($ARGV[1], 0, 1) ne "/") { + $cwd=`pwd`; + chop $cwd; + $ARGV[1] = $cwd."/".$ARGV[1]; +} + +if ($ARGV[3] eq "" || $ARGV[3] eq "normal") { + $flavour = 'f'; +} elsif ($ARGV[3] eq "crash") { + $flavour = 'c'; +} elsif ($ARGV[3] eq "hold") { + $flavour = 'h'; +} else { + print "Unknown flavour, assuming normal\n"; + $flavour = 'f'; +} + +if ($ARGV[0] eq "send") { + &attach($ARGV[1], $ARGV[2]); +} elsif ($ARGV[0] eq "get") { + &request($ARGV[1], $ARGV[2]); +} else { + print "Unknown command, try ifman -h\n"; + exit 1; +} + +close(LOG); + +exit 0; + +####################################################################### + +sub attach { + local($fspec, $address) = @_; + + $floname = &resolve($address); + + open(FLO, ">>".$outbound."/".$floname) || die "Can't open flo-file $outbound/$floname"; + open(FIND, "find $fspec -print |") || die "Can't generate list of files"; + + if ( eof(FIND) ) { + print "No matching files, nothing to send\n"; + exit 1; + } + + while (<FIND>) { + + chop; + $datestamp = `date \"+%D %T\"`; + chop $datestamp; + printf LOG "%s %s %s\n", $datestamp, $$, "ifman: sending $_ to $address"; + printf FLO "%s\n", $_; + } + + close(FLO); + close(FIND); +} + +sub request { + local($fspec, $address) = @_; + + $reqname = &resolve($address); + + $reqname =~ s/\.[fch]lo/\.req/; + + open(REQ, ">>".$outbound."/".$reqname) || die "Can't open req-file"; + + $datestamp = `date \"+%D %T\"`; + chop $datestamp; + printf LOG "%s %s %s\n", $datestamp, $$, "ifman: requesting $fspec from $address"; + printf REQ "%s\n", $fspec; + + close(REQ); +} + +sub resolve { + local($addr) = @_; + + if ( index($addr, ":") >=0 ) { + print "I cannot resolve addresses with zones!\n"; + exit 1; + } elsif ( index($addr, "/") == -1 ) { + print "Not a valid address!\n"; + exit 1; + } + + ($net, $node, $point) = split(/\/|\./, $addr); + + if ( defined $point ) { + $pointdir = sprintf("%04x%04x.pnt", $net, $node); + if ( ! -e $outbound."/".$pointdir ) { + mkdir ($outbound."/".$pointdir, 0755) || die "Can't create point directory"; + } + $flo = sprintf("0000%04x.%01slo", $point, $flavour); + return $pointdir."/".$flo; + } else { + $flo = sprintf("%04x%04x.%01slo", $net, $node, $flavour); + return $flo; + } +} + +sub usage { + print "ifmail manager script\n"; + print "usage: ifman <cmd> <filespec> <address> [flavour]\n"; + print " commands: send, get\n"; + print " flavours: normal, crash, hold. Default is normal.\n"; + print "Only 2d addresses with points are supported - no zones!\n"; + exit 1; +} + +sub parsecfg { + open(CFG, $cfgfile) || die "Can't open ifmail config file"; + + while (<CFG>) { + chop; + if (/^#/) { next; } + if (/^outbound\s+(\S+)/) { $outbound = $1; } + if (/^logfile\s+(\S+)/) { $logfile = $1; } + } + + close(CFG); +} Property changes on: contrib/dialog/samples/copifuncs/copi.ifman2 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/copifuncs/copi.ifmcfg2 =================================================================== --- contrib/dialog/samples/copifuncs/copi.ifmcfg2 (revision 0) +++ contrib/dialog/samples/copifuncs/copi.ifmcfg2 (revision 0) @@ -0,0 +1,68 @@ +# Transport programs for mail and news, used by iftoss +sendmail /usr/lib/sendmail -f $F $T +rnews /usr/lib/news/rnews + +# Unpackers, used by ifunpack. +# $F expands to archieve file name +unzip /usr/bin/unzip -oq $F +unarj /usr/bin/unarj e $F +#unarc /usr/bin/unpack $F +unzoo /usr/bin/zoo -extract $F +unlzh /usr/bin/lharc -x $F + +# Packer program, used by ifpack +# $F expands to archieve file name, $P - to list of packet names +packer /usr/bin/zip $F $P + +# Maximum arcmail file size, will start new arcmail file if exceeds +maxfsize 65000 + +# Maximum packet size, ifmail/ifnews will start new packet if exeeds. +# .out files are NOT created if nonzero specified, you must run ifpack +# to make packets out. (unimplemented) +maxpsize 65000 + +# cnews log file and (temporary) database for seen-bys +newslog /usr/lib/news/log +msgidbm /tmp/ifmsgids + +# From this line on, values may be prefixed by a logical expression in +# round brackets. Operators are: '!', '&', '|', 'Xor'. +# Possible elements are: +# - Nodelist flags (like "CM", "MNP", "V32" etc.) +# - speed <operator> <numeric> +# where <operator> is '=', '!=', '<', '>', '<=', '>=' +# - address <wildcard> +# where <wildcard> is an (possibly incomplete) fidonet address, +# e.g. "5020/*" +# - time <interval>[,<interval>,...] +# where <interval> is a day spec. with optional time spec., e.g. +# Wk2000-0900,Sat1800-0000,Sun +# - phone <prefix> +# e.g. "phone 7-095-" + +# Dialing parameters +# of multiple "ModemPort", "ModemReset", "ModemDial", "ModemHangup" lines, +# first matching is used. +# of multiple "PhoneTrans", "ModemConnect", "ModemError" lines, all matching +# are used. +# In send and expect strings, following substitutions are made: +# \\ '\' character +# \r carriage return (0x0d) +# \n new line (0x0a) +# \t tab (0x09) +# \b backspace (0x08) +# \s space (0x20) +# \NNN (where N is an octal digit) - character with octal code NNN +# \d 1 second delay (send strings only) +# \p 1/4 second pause (send strings only) +# \T translated telephone no. (send strings only) +# \D untranslated telephone no. (send strings only) + +# ModemPort present a blank-separated list of ports with possible speed +# extention (separated by colon); if speed is prefixed with 'L', it is +# a "locked" port speed, otherwise it is a maximum speed to be set, while +# actual speed is taken from the nodelist. If speed is omitted (or set +# to zero), previous port speed is not changed. +#ModemPort (time Any0000-0900,Sat,Sun) ttyS0 +#ModemPort cua0:L38400 Property changes on: contrib/dialog/samples/copifuncs/copi.ifmcfg2 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/copifuncs/copi.funcs =================================================================== --- contrib/dialog/samples/copifuncs/copi.funcs (revision 0) +++ contrib/dialog/samples/copifuncs/copi.funcs (revision 0) @@ -0,0 +1,1303 @@ +#!/bin/bash +# $Id: copi.funcs,v 1.3 2001/01/15 22:24:26 tom Exp $ +# ComeOn Point Functions! v0.9.2 +# - usate da vari altri moduli ComeOn Point... +# +# AUTHOR: Beppe (beppe.dem@nsm.it) +# +# 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. +# + +HOST=`hostname` +DOMAIN=`hostname -d` +PKTNAME="ComeOn Point Installer!" +COMEONDIR=/usr/lib/ComeOn + +AKASETUP=$COMEONDIR/point/.akasetup +COPIUSER=$COMEONDIR/point/.copi.user +EMSIFILE=$COMEONDIR/point/.emsi +PNTSETUP=$COMEONDIR/point/.pntsetup + +mkstemp() { + eval 'tmp_'$1'=`tempfile 2>/dev/null` || tmp_'$1'=/tmp/'$1'$$' +} + +# Args: [start_uid] +# Returns: $FOUND_UID +find_unused_uid() { + + if [ $1 ]; then + FOUND_UID=$1 + else + FOUND_UID=501 + fi + + while [ "`cut -f3 -d: /etc/passwd | grep -x $FOUND_UID`" ] + do + FOUND_UID=$[$FOUND_UID+1] + done +} + +int2fido() { + _RETVAL="`echo $1 | cut -f3 -d. | cut -c2-`:\ +`echo $1 | cut -f2 -d. | cut -c2-`/\ +`echo $1 | cut -f1 -d. | cut -c2-`" +} +int2fidonet() { + _RETVAL="`echo $1 | cut -f3 -d. | cut -c2-`:\ +`echo $1 | cut -f2 -d. | cut -c2-`/\ +`echo $1 | cut -f1 -d. | cut -c2-`@\ +`echo $1 | cut -f4- -d.`" +} +fido2int() { + _RETVAL="f\ +`echo $1 | cut -f2 -d '/'`.n\ +`echo $1 | cut -f1 -d '/' | cut -f2 -d:`.z\ +`echo $1 | cut -f1 -d '/' | cut -f1 -d:`" +} +fidonet2int() { + _RETVAL="f\ +`echo $1 | cut -f2 -d/ | cut -f1 -d@`.n\ +`echo $1 | cut -f1 -d/ | cut -f2 -d:`.z\ +`echo $1 | cut -f1 -d/ | cut -f1 -d:`.\ +`echo $1 | cut -f2 -d@`" +} +fidonetpoint2int() { + _RETVAL="p\ +`echo $1 | cut -f2 -d. | cut -f1 -d@`.f\ +`echo $1 | cut -f2 -d/ | cut -f1 -d.`.n\ +`echo $1 | cut -f2 -d: | cut -f1 -d/`.z\ +`echo $1 | cut -f1 -d/ | cut -f1 -d:`.\ +`echo $1 | cut -f2 -d@`.org" +} + +# Parameters: fqdn +configure_loopback() { + dialog --backtitle "$TITLE" --infobox "Configuro la rete (in modo loopback)..." 0 0 + + FQDN=$1 + HOST=`echo $FQDN | cut -f1 -d.` + DOMAIN=`echo $FQDN | cut -f2- -d.` + + save /etc/hostname + echo $FQDN >/etc/HOSTNAME + export HOSTNAME=$FQDN + hostname $HOST + + save /etc/rc.d/rc.inet1 + cat <<EOF >/etc/rc.d/rc.inet1 +#! /bin/sh +# +# rc.inet1 This shell script boots up the base INET system. + +# Attach the loopback device. +/sbin/ifconfig lo 127.0.0.1 +/sbin/route add -net 127.0.0.0 + +# End of rc.inet1 +EOF + chmod 755 /etc/rc.d/rc.inet1 + + + save /etc/networks + cat <<EOF >/etc/networks +# +# networks This file describes a number of netname-to-address +# mappings for the TCP/IP subsystem. It is mostly +# used at boot time, when no name servers are running. +# + +loopback 127.0.0.0 + +# End of networks. +EOF + chmod 644 /etc/networks + + + save /etc/hosts + cat <<EOF >/etc/hosts +# +# hosts This file describes a number of hostname-to-address +# mappings for the TCP/IP subsystem. It is mostly +# used at boot time, when no name servers are running. +# On small systems, this file can be used instead of a +# "named" name server. Just add the names, addresses +# and any aliases to this file... +# +# By the way, Arnt Gulbrandsen <agulbra@nvg.unit.no> says that 127.0.0.1 +# should NEVER be named with the name of the machine. It causes problems +# for some (stupid) programs, irc and reputedly talk. :^) +# +# But we (ComeOn Linux!) says that this is not valid for you, because +# you resulted to have not a network at the installation time. + +# For loopbacking. +127.0.0.1 localhost $FQDN $HOST + +# End of hosts. +EOF + chmod 644 /etc/hosts + + save /etc/resolv.conf + echo domain $DOMAIN >/etc/resolv.conf + chmod 644 /etc/resolv.conf + + save /etc/host.conf + cat <<EOF >/etc/host.conf +order hosts,bind +multi on +EOF + chmod 644 /etc/host.conf + + /etc/rc.d/rc.inet1 +} + +# Private function, adds an user to a group. Args: user, group +add_to_group() { + + if [ ! "`groups \"$1\" | grep \" $2 \"`" ] + then + USERS="`grep \"$2:\" /etc/group | cut -s -f4 -d:`" + + mkstemp group + if [ "$USERS" ]; then + sed "/$2:/s/:$USERS/:$USERS,$1/" /etc/group >$tmp_group + else + sed "/$2:/s/:/:$1/3" /etc/group >$tmp_group + fi + + save /etc/group + mv $tmp_group /etc/group + fi +} + +# Arguments: user, fullname +add_postmaster() { + dialog --backtitle "$TITLE" --infobox "Creo l'user principale e/o ne adatto le informazioni..." 0 0 + + USER="$1" + NAME="$2" + HOMEDIR="/home/$USER" + +# echo "$USER" >$COPIUSER # you've to do this in any other location + ENTRY="`cut /etc/passwd -s -f1,2,5 -d: | grep $USER:`" + if [ "$ENTRY" ] + then + OLDNAME="`echo $ENTRY | cut -f3 -d:`" + PASW="`echo $ENTRY | cut -f2 -d:`" + if [ "$OLDNAME" != "$NAME" ] + then + mkstemp passwd + sed "/$USER:$PASW:/s/:$OLDNAME:/:$NAME:/" /etc/passwd >$tmp_passwd + save /etc/passwd + mv $tmp_passwd /etc/passwd + fi + + add_to_group "$USER" mail + else + if [ -f /bin/bash ]; then USERSHELL=/bin/bash; else USERSHELL=""; fi + find_unused_uid + echo "$USER:*:$FOUND_UID:12:$NAME:$HOMEDIR:$USERSHELL" >>/etc/passwd + mkdir -p $HOMEDIR -m 755 + chown $USER.mail $HOMEDIR + fi +} + +comment_nntp_in_inetdconf() { + dialog --backtitle "$TITLE" --infobox "Commento la riga 'nntp' in /etc/inetd.conf..." 0 0 + + mkstemp inetd + sed "/in.nntpd/s/nntp/#&/" /etc/inetd.conf >$tmp_inetd + save /etc/inetd.conf + mv $tmp_inetd /etc/inetd.conf + killall -1 inetd +} + +# Args: organization +set_organization() { + dialog --backtitle "$TITLE" --infobox "Imposto l' origin..." 0 0 + + ORGANIZATION=/etc/organization + save $ORGANIZATION + + NEW_ORGANIZATION="$1" + echo "$NEW_ORGANIZATION" >$ORGANIZATION +} + +create_innconf_newsfeeds_distrib() { + dialog --backtitle "$TITLE" --infobox "Creo i files di configurazione principali di InterNet News (inn)..." 0 0 + +# File: inn.conf + INNCONF=~news/inn.conf + save $INNCONF + + cat <<EOF >$INNCONF +## $Revision: 1.3 $ +## inn.conf -- inn configuration data +## Format: +## <parameter>:<whitespace><value> +## Used by various programs and libinn. The following parameters are defined: +## domain Local domain, without leading period. +## fromhost What to put in the From line; default is FQDN +## of the local host. +## moderatormailer Where to mail moderated postings, if not found +## in the moderators file; see moderators(5). +## pathhost What to put in the Path and Xref headers; default +## is FQDN of the local host. +## organization If $ORGANIZATION doesn't exist. What to put in +## the Organization header if blank. +## server If $NNTPSERVER doesn't exist. Local NNTP server +## host to connect to. +## + +server: $HOST.$DOMAIN +domain: $DOMAIN +pathhost: $HOST +EOF + + chmod 444 $INNCONF + chown news.news $INNCONF + + +# File: newsfeeds + NEWSFEEDS=~news/newsfeeds + save $NEWSFEEDS + + echo -e "ME:*::\n" >$NEWSFEEDS + + IAKA=1 + OK=1 + while [ "$OK" != 0 ] + do + AKA="`cut $AKASETUP -f$IAKA -d:`" + if [ ! "$AKA" ] + then + OK=0 + else + if [ $IAKA != 1 ] + then + TMPAKA="`echo $AKA | cut -f-4 -d.`" + SENDCRON="$SENDCRON $TMPAKA" + echo -n "$TMPAKA/" >>$NEWSFEEDS + fi + TMPAKA="`echo $AKA | cut -f1-2 -d.`" + if [ $IAKA = 1 ]; then + SENDCRON="$SENDCRON $TMPAKA" + fi + echo -e "$TMPAKA\\" >>$NEWSFEEDS + echo -e "\t:!*,`echo $AKA | cut -f4 -d.`.*\\" >>$NEWSFEEDS + echo -e "\t:Tf,Wfb,B4096/1024:\n" >>$NEWSFEEDS + fi + IAKA=$[$IAKA+1] + done + + chmod 444 $NEWSFEEDS + chown news.news $NEWSFEEDS + + +# File: distrib.pats + DISTRIB=~news/distrib.pats + save $DISTRIB + + IAKA=1 + OK=1 + while [ "$OK" != 0 ]; do + AKA="`cut $AKASETUP -f$IAKA -d:`" + IAKA=$[$IAKA+1] + if [ "$AKA" = "" ]; then + OK=0 + else + DOM="`echo $AKA | cut -f4 -d.`" + echo "10:$DOM.*:$DOM" >>$DISTRIB + fi + done + + chmod 444 $DISTRIB + chown news.news $DISTRIB +} + +# Args: num_of_days +create_expirectl() { + dialog --backtitle "$TITLE" --infobox "Imposto il periodo di transito dei messaggi..." 0 0 + + EXPIRECTL=~news/expire.ctl + save $EXPIRECTL + + EXPIRE_DAYS=$1 + + echo -e "/remember/:14\n\n*:A:2:$EXPIRE_DAYS:$EXPIRE_DAYS" >$EXPIRECTL + + chmod 440 $EXPIRECTL + chown news.news $EXPIRECTL +} + +create_nnrpaccess() { + dialog --backtitle "$TITLE" --infobox "Rendo accessibili le news in lettura..." 0 0 + + NNRPACCESS=~news/nnrp.access + save $NNRPACCESS + + cat <<EOF >$NNRPACCESS +## $Revision: 1.3 $ +## nnrp.access - access file for on-campus NNTP sites +## Format: +## <host>:<perm>:<user>:<pass>:<groups> +## Connecting host must be found in this file; the last match found is +## used, so put defaults first. +## <host> Wildcard name or IP address +## <perm> R to read; P to post +## <user> Username for authentication before posting +## <pass> Password, for same reason +## <groups> Newsgroup patterns that can be read or not read +## To disable posting put a space in the <user> and <pass> fields, since +## there is no way for client to enter one. +## +## Default is no access, no way to authentication, and no groups. +# *:: -no- : -no- :!* +## Foo, Incorporated, hosts have no password, can read anything. +# *.foo.com:Read Post:::* + +*:: -no- : -no- :!* +localhost.$DOMAIN:Read Post:::* +$HOST.$DOMAIN:Read Post:::* + +EOF + + chmod 440 $NNRPACCESS + chown news.news $NNRPACCESS +} + +create_hostsnntp() { + dialog --backtitle "$TITLE" --infobox "Rendo accessibili le news in scrittura..." 0 0 + + HOSTSNNTP=~news/hosts.nntp + save $HOSTSNNTP + + cat <<EOF >$HOSTSNNTP +## $Revision: 1.3 $ +## hosts.nntp - names and addresses that feed us news +## Format +## <host>: +## <host>:<password> +## <host> can be a name or IP address; no wildcards. Any hosts not +## listed here are handed off to nnrpd. + +$HOST.$DOMAIN: + +EOF + + chmod 440 $HOSTSNNTP + chown news.news $HOSTSNNTP +} + +create_dirs_and_files() { + + CURMASK=`umask` + . ./copi.wheel + pushd /var/log >/dev/null + mkdir -p news -m 755; chown news.news news + cd /var/log/news; mkdir -p OLD -m 755; chown news.news OLD + cd /var/spool; mkdir -p news -m 775; chown news.news news + cd /var/spool/news; umask 02 + mkdir -p out.going control junk in.coming + chown news.news out.going control junk in.coming + cd in.coming; mkdir -p bad tmp; chown news.news bad tmp; umask $CURMASK + ln -sf ~news /usr/local/lib/ + ln -sf ~news/inews /usr/bin/ + chmod 1777 /var/tmp + + cd /var/spool + mkdir -p uucppublic + chown uucp.uucp uucppublic + chmod 1777 uucppublic + + cd ~news + touch history history.dir history.pag errlog log + chown news.news history* log errlog + chmod 664 history* log errlog + + save active + echo "control 0000000000 0000000001 y" > active + echo "junk 0000000000 0000000001 y" >> active + chown news.news active + + save active.times + echo "control 814573260 usenet" > active.times + echo "junk 814573260 usenet" >> active.times + chown news.news active.times + + save newsgroups + :>newsgroups + chown news.news newsgroups + + popd >/dev/null +} + +install_rcnews() { + dialog --backtitle "$TITLE" --infobox "Avvio l'InterNet News daemon (innd) e l'installo negli script di boot, attendere... attenzione che e' probabile che in questa fase non sia possibile entrare da un'altra VC come root." 0 0 + + RCLOCAL=/etc/rc.d/rc.local + RCNEWS=~news/etc/rc.news + RCLINE="`grep $RCNEWS $RCLOCAL`" + + if [ ! "$RCLINE" -o `echo $RCLINE | cut -c1` = '#' ] + then + save $RCLOCAL + echo -e "\n$RCNEWS" >>$RCLOCAL + fi + + cp copi.rcnews $RCNEWS + chmod 550 $RCNEWS + chown news.news $RCNEWS + + if [ -f ~news/innd/innd.pid ]; then + su -l news -c "bin/ctlinnd shutdown x" >/dev/null + sleep 2 # wait for server to shutdown + fi + + killall innd 2>/dev/null # make sure it's gone down + $RCNEWS +} + +install_crontab_news() { + dialog --backtitle "$TITLE" --infobox "Imposto la crontab di news per l'automantenimento del sistema (cancellazione giornaliera dei messaggi vecchi et similia)..." 0 0 + + + if [ -f $COPIUSER ]; then + POSTMST="`cat $COPIUSER`" + else + POSTMST="root" + fi + + NEWSHOME=~news + save /var/spool/cron/crontabs/news + cat <<EOF | crontab - -u news +#------------------------------------------------------------------------------- +# /var/spool/cron/crontabs/news +SHELL=/bin/sh +# +MAILTO=$POSTMST +# +#=============================================================================== +# +# inn-1.4 (Inter Net News) +# +#=============================================================================== +# +#------------------------------------------------------------------------------- +# Daily housekeeping ... expires news and other things ... +#------------------------------------------------------------------------------- +# +51 16 * * * $NEWSHOME/bin/news.daily < /dev/null +# +#------------------------------------------------------------------------------- +# offer spooled news - that was spooled into the incoming directory when the +# innd server wasn't available - again to the innd server. +#------------------------------------------------------------------------------- +# +18 * * * * $NEWSHOME/rnews -U +# +#------------------------------------------------------------------------------- +# send news batches to your fidonet(-like) news feeds +#------------------------------------------------------------------------------- +# +49 16 * * * $NEWSHOME/send-ifmail$SENDCRON +# +#------------------------------------------------------------------------------- +# +EOF + + echo $NEWSHOME/send-ifmail$SENDCRON >/etc/point.ifsend +} + +# Private func +# Args: dir_with_sources, bindir, cfgdir, logdir, version +copi.ifmCfg() { + + SRCDIR="$1" + BINDIR="$2" + CFGDIR="$3" + LOGDIR="$4" + VERSION="$5" + SOURCE="$SRCDIR/CONFIG" + CONFIGFILE="$CFGDIR/config" + + cat <<EOF >$SOURCE +# Compile-time configuration for ifmail FidoNet mailer and gateway +COPYRIGHT = "Eugene G. Crosser, 1993-1995" +VERSION = "$VERSION" + +# Main configuration file. This default may be overwritten by -I key. +CONFIGFILE = $CONFIGFILE + +# Debug messages turned on by -x key are written here. +# Some error messages may occationally appear here too. +# This may be changed in the 'config' file. +DEBUGFILE = "$LOGDIR/ifdebug" + +# Procession log. Usually gets several lines for each invocation. +# Also look for error diagnostics here. If HAS_SYSLOG defined, +# only stdout and stderr from the packers and unpackers go to this +# file, while actual logging is done via syslog() calls. +# This may be changed in the 'config' file. +LOGFILE = "$LOGDIR/iflog" + +# Use syslog() facility codes for mail gate, news gate and ifcico. +# Define -DHAS_SYSLOG (see below) +#MAILLOG = LOG_MAIL +MAILLOG = LOG_LOCAL0 +#NEWSLOG = LOG_NEWS +NEWSLOG = LOG_LOCAL0 +#CICOLOG = LOG_UUCP +CICOLOG = LOG_LOCAL0 + +# Directory where UUCP lock files reside. +#LOCKDIR = "/var/lock" +LOCKDIR = "/var/spool/uucp" + +# Directory from which file requests are resolved. +# This may be changed from the 'config' file. +#PUBDIR = "/home/ftp/pub" +PUBDIR = "/var/spool/uucppublic" + +# Compile-time system-dependant options. + +# If you specify "-DHAS_NDBM_H", ndbm calls will be used instead +# of dbm ones, and the feature will be activated of Cnews log processing +# to add entries to SEEN-BY if echo message is exported to several FTN +# nodes by Cnews mechanism. This works with INN too. + +# If you specify "-DHAS_STATFS" or "-DHAS_STATVFS", statfs() (or statvfs() +# respectivly) call will be used to check available disk space. For statfs() +# call, you must also specify which .h file to use: "-DSTATFS_IN_VFS_H" or +# "-DSTATFS_IN_STATFS_H" or "-DSTATFS_IN_STATVFS_H" or "-DSTATFS_IN_MOUNT_H". +# For statvfs() call, statvfs.h is included. + +# define -DSCO_STYLE_STATFS if your statfs() call requires 4 arguments. + +# If you specify "-DHAS_SETSID", setsid() call is used to detach from the +# control terminal. Otherwise setpgrp() call is used, and in this case you +# may specify "-DBSD_SETPGRP" to use BSD-style call. Used in ifcico only. + +# If you specify "-DDONT_HAVE_TM_GMTOFF", timezone offset will be calculated +# from the difference between the results of localtime() and gmtime() calls +# instead of using tm_gmtoff field of struct tm. + +# If you specify "-DDONT_HAVE_GETOPT", local definitions for getopt will +# be used (but not the function itself) + +# For ifcico, you must specify -DHAS_TERMIOS_H (preffered), -DHAS_TERMIO_H +# or -DHAS_SGTTY_H to use POSIX-y, SysV-ish of BSD-ish terminal control. + +# in SVR4 you should specify -DHAS_DIAL (and maybe -DHAS_DIAL_H) to use +# dial() library function instead of regular open(). Lock files are +# not used in this case. + +# for uucp lock files, you must specify either -DASCII_LOCKFILES or +# -DBINARY_LOCKFILES + +# define -DHAS_FSYNC if there is a fsync() system call (to update .flo +# files) + +# define -DPARANOID if you want iftoss to deny packets with wrong password. + +# define -DRELAXED if you want iftoss to accept packets that are not +# addressed to your node. + +# define -DFORCEINTL if you want ifmail to create ^aINTL even if this is +# not an inter-zone netmail. + +# define -DNEED_UUCPFROM if your MTA needs a uucp "From" line in mail. + +# define -DHAS_TCP if you want ifmail to be able to originate outgoing +# connections over TCP/IP (socket library needed) + +# define -DHAS_TERM if you want ifmail to be able to originate outgoing +# connections over TERM (TCP "extention", client.a needed) + +# define -DHAS_REGEX_H or -DHAS_LIBGEN_H if you have either of these +# header files for regular expression handlers. + +# define -DHAS_SYSLOG to use syslog() instead of logging to files. +# Files are necessary anyway, external programs' stdout and stderr +# are redirected there. + +# define -DNEED_BSY if you want ifpack and ifcico to create .bsy +# files preventing simultaneous processing of the same node. + +# define -DNEED_FORK if your system is uncapable of getting rid of the +# control terminal unless you are running not as a group leader. + +# define -DREGEX_NEED_CARET if your re_comp/re_exec require that the +# mask starts with a '^' to match the beginning of the string. + +# as of June 1994, FreeBSD has a nasty bug in the kernel lseek() code: +# if you make lseek() to a point before the start of the file, it +# succeeds and the writing point becomes negative. Fortunately, +# subsequent write()s fail :-). To overwork this, define +# -DNEGATIVE_SEEK_BUG, this will add an extra fseek() to restore +# zero writing point where necessary. + +# define -DNEED_TRAP if you want debugging information when the programs +# are aborted with segmentation fault etc. Currently tested and works +# only with Linux, and only with newer kernels (1.1.20+) + +# define -DSLAVE_SENDS_NAK_TOO if you have problems answering incoming +# EMSI sessions originated by FrontDoor. FrontDoor does not follow +# EMSI specifications when originating calls, this is a workaround. + +# define -DDONT_HAVE_DIRENT if there is no working opendir()/readdir() +# etc. in your libc. You will aso need to add "dirent.o" to the NEEDED +# (see below). + +# Linux: +OPTS = -DHAS_STATFS -DSTATFS_IN_VFS_H -DHAS_SETSID -DHAS_NDBM_H \\ + -DDONT_HAVE_TM_GMTOFF -DHAS_TERMIOS_H -DASCII_LOCKFILES \\ + -DHAS_FSYNC -DHAS_IOCTL_H -DHAS_REGEX_H -DHAS_TCP \\ + -DFORCEINTL -DHAS_SYSLOG -DNEED_UUCPFROM -DNEED_BSY \\ + -DREGEX_NEED_CARET -DNEED_TRAP -DSLAVE_SENDS_NAK_TOO \\ + -DNEED_FORK -DLESS_RFC_KLUDGES + +# 386BSD: +#OPTS = -DHAS_STATFS -DSTATFS_IN_MOUNT_H -DHAS_SETSID -DHAS_NDBM_H \\ + -DHAS_TERMIOS_H -DASCII_LOCKFILES -DHAS_FSYNC -DHAS_IOCTL_H \\ + -DHAS_REGEX_H -DHAS_TCP -DHAS_SYSLOG -DNEED_UUCPFROM \\ + -DNEED_BSY -DNEED_FORK -DNEGATIVE_SEEK_BUG \\ + -DREGEX_NEED_CARET + +# SVR4: +#OPTS = -DHAS_STATVFS -DDONT_HAVE_TM_GMTOFF -DHAS_SETSID -DHAS_NDBM_H \\ + -DHAS_TERMIOS_H -DHAS_DIAL -DHAS_DIAL_H -DASCII_LOCKFILES \\ + -DHAS_FSYNC -DHAS_IOCTL_H -DHAS_LIBGEN_H -DHAS_TCP \\ + -DHAS_SYSLOG -DREGEX_NEED_CARET +# SunOS: +#OPTS = -DHAS_STATFS -DSTATFS_IN_VFS_H -DHAS_SETSID -DHAS_NDBM_H \\ + -DDONT_HAVE_GETOPT -DHAS_TERMIOS_H -DASCII_LOCKFILES \\ + -DHAS_FSYNC -DHAS_TCP -DHAS_SYSLOG \\ + -DREGEX_NEED_CARET + +# SCO Unix 3.2v4.2 +#OPTS = -DHAS_STATFS -DSTATFS_IN_STATFS_H -DSCO_STYLE_STATFS \\ + -DHAS_TERMIOS_H -DDONT_HAVE_TM_GMTOFF -DDO_NEED_TIME \\ + -DDONT_HAVE_GETOPT -DASCII_LOCKFILES -DHAS_IOCTL_H \\ + -DHAS_TCP -DHAS_SYSLOG \\ + -DREGEX_NEED_CARET + +# ISC Unix 3.2 v3.0 +#OPTS = -DHAS_STATFS -DSTATFS_IN_STATFS_H -DHAS_TERMIO_H \\ + -DDONT_HAVE_TM_GMTOFF -DDONT_HAVE_GETOPT \\ + -DASCII_LOCKFILES -DHAS_IOCTL_H -DSCO_STYLE_STATFS \\ + -DUSE_POLL -DHAS_NET_ERRNO_H -DSHORT_PID_T \\ + -DHAS_TCP -DHAS_SYSLOG \\ + -DREGEX_NEED_CARET +# On ISC, if you are suing gcc, you can run into a trouble with sscanf() +# function. It appears that sscanf(string,"%d.%d",&int1,&int2) where +# string is a constant segfaults unless you specify "-fwritable-strings" +# to gcc. I would say that this is a bug in ISC libc. If nessecary, +# add this to the defines above. If you have ISC version 4.0 or later, +# you can add "-posix", remove "-DSHORT_PID_T" and specify "-DHAS_TERMIOS" +# to get benefit of posix terminal control. + +# for make install, where to put binaries and what owner to set +BINDIR = $BINDIR +OWNER = fnet +GROUP = uucp +MODE = 0711 +SMODE = 4711 + +INSTALL = install +RANLIB = ranlib +#RANLIB = touch +SHELL = /bin/sh +ECHO = echo -e +CC = gcc +YACC = bison -y +#YACC = yacc +LEX = flex +#LEX = lex +AWK = awk +TAR = tar + +#CFLAGS = -g -Wall +# Linux, 386BSD, SunOS: +CFLAGS = -O2 -Wall -m486 -s +# SVR4: +#CFLAGS = -O -Xa + +LDFLAGS = -s + +# For LIBS, you may need to add "-lfl" if you are using flex 2.4.x +# If you need TERM also add e.g. "/usr/src/term112/client.a" + +# Linux +LIBS = -ldbm +# SunOS: +#LIBS = +# 386BSD: +#LIBS = -lgdbm -lgnuregex +# SVR4 +#LIBS = -ldbm -lform -lnsl -lsocket -lc -L/usr/ucblib -lucb +# SCO +#LIBS = -ldbm -lsocket -lintl +# ISC +#LIBS = -lcposix -lmalloc -ldbm -linet -lPW + +INCLUDES = -I\${INCDIR} +# ISC +#INCLUDES = -I/usr/include/rpcsvc -I\${INCDIR} + +# What programs are absent at your system? +#NEEDED = strcasestr.o strncasecmp.o strcasecmp.o rename.o mkdir.o usleep.o \\ + regexpr.o +# Linux +NEEDED = +# SVR4 +#NEEDED = regexpr.o +# SCO +#NEEDED = strcasestr.o strncasecmp.o strcasecmp.o usleep.o regexpr.o +# SunOS and 386BSD +#NEEDED = signal.o +# ISC +#NEEDED = usleep.o regexpr.o vsyslog.o +EOF + +} + +# Args: package.tgz, bin_dir, cfg_dir, log_dir, version, where_to_put_src +install_ifmail() { + dialog --backtitle "$TITLE" --infobox "Installo e compilo Ifmail..." 0 0 + + AKAPRI="`cut $AKASETUP -f1 -d:`" + int2fido $AKAPRI + AKAPRIFTN=$_RETVAL + + if [ -f $COPIUSER ] + then + POST="`cat $COPIUSER`" + else + POST=root + fi + + TGZ="$1" + BINDIR="$2" + CFGDIR="$3" + LOGDIR="$4" + VERSION="$5" + SRC="$6" + +################################################### +## passwd e group +#################################### + + if [ "`cut /etc/passwd -f1 -d: | grep -x fnet`" ] + then + mkstemp passwd + grep -v "fnet:" /etc/passwd >$tmp_passwd + save /etc/passwd + mv $tmp_passwd /etc/passwd + fi + + find_unused_uid 92 + echo "fnet:*:$FOUND_UID:14:Fidonet Gate:$BINDIR:" >>/etc/passwd + + +#################################################### +#### dirs and files +################################### + mkdir -p $CFGDIR $LOGDIR /var/spool/ifmail/{BAK,nl.d} $BINDIR/magic + chown fnet.uucp $BINDIR{,/magic} $CFGDIR $LOGDIR /var/spool/ifmail/{,BAK,nl.d} + touch $LOGDIR/{ifdebug,iflog,sysiflog,TheLog} + chown fnet.uucp $LOGDIR/{ifdebug,iflog,sysiflog,TheLog} + +########################################################################## +#### COMPILAZIONE +#################################### + + SRC="$SRC/`tar zxvf $TGZ -C $SRC | head -1`" +# ora in $SRC c'e' il path completo dei source Ifmail + + copi.ifmCfg $SRC $BINDIR $CFGDIR $LOGDIR $VERSION + patch -N -d $SRC <ifpatch 2>/dev/null + make clean -C $SRC + make -C $SRC +########################################################################## +#### INSTALLAZIONE +#################################### + make install -C $SRC +} + + +# Args: bin_dir, cfg_dir, log_dir, passwords +# note: passwords are colon-separated (":") +configure_ifmail() { + dialog --backtitle "$TITLE" --infobox "Configuro Ifmail..." 0 0 + + BINDIR=$1 + CFGDIR=$2 + LOGDIR=$3 + PASSWDS=$4 + + SPD="` cut $EMSIFILE -f1`" + SYSNAME="` cut $EMSIFILE -f2`" + LOCATION="` cut $EMSIFILE -f3`" + COMPLETE_PHONE="` cut $EMSIFILE -f4`" + INTERCOUNTRYPREF="`cut $EMSIFILE -f5`" + LONG_DIST_PREFIX="`cut $EMSIFILE -f6`" + NODEFLAGS="` cut $EMSIFILE -f7`" + DIALSTRING="` cut $EMSIFILE -f8`" + SYSOP="` cut $EMSIFILE -f9`" + + COUNTRYPREF="`echo $COMPLETE_PHONE | cut -f1 -d'-'`" + PREF="` echo $COMPLETE_PHONE | cut -f2 -d'-'`" + PHONE="` echo $COMPLETE_PHONE | cut -f3 -d'-'`" + + FNETCFG=$CFGDIR/config + AREAS=$CFGDIR/Areas + + POINTS="`cat $PNTSETUP`" + POST="`cat $COPIUSER`" + AKAPRI="`cut $AKASETUP -f1 -d:`" + int2fido "$AKAPRI" + AKAPRIFTN="$_RETVAL" + +#invece di "cp $SRC/misc/inn/send-ifmail ~news" +#----------------------------------------------------------------------------- + cp copi.sendifm1 ~news/send-ifmail + cat <<EOF >>~news/send-ifmail +-p"$BINDIR/ifnews %s" \\ +EOF + cat copi.sendifm2 >>~news/send-ifmail + + chmod 550 ~news/send-ifmail + chown news.news ~news/send-ifmail + +#invece di "cp $SRC/misc/contrib/ifreq $BINDIR" +#----------------------------------------------------------------------------- + cp copi.ifreq1 $BINDIR/ifreq + cat <<EOF >>$BINDIR/ifreq +# ifcico-config-file: +\$config = "$CFGDIR/config"; + +# change this to the default node, where requests should go to. +\$node = "$AKAPRIFTN"; +EOF + cat copi.ifreq2 >>$BINDIR/ifreq + + chmod 755 $BINDIR/ifreq + chown fnet.uucp $BINDIR/ifreq + +#invece di "cp $SRC/misc/contrib/ifman $BINDIR" +#----------------------------------------------------------------------------- + cp copi.ifman1 $BINDIR/ifman + cat <<EOF >>$BINDIR/ifman +\$cfgfile="$CFGDIR/config"; # where the config is +\$ifowner="fnet"; # who is the owner of the ifmail + +EOF + cat copi.ifman2 >>$BINDIR/ifman + + chmod 755 $BINDIR/ifman + chown fnet.uucp $BINDIR/ifman + +#invece di "cp $SRC/misc/contrib/ifpoll $BINDIR" +#----------------------------------------------------------------------------- + cp copi.ifpoll1 $BINDIR/ifpoll + cat <<EOF >>$BINDIR/ifpoll +FIDOPATH=$BINDIR +LOGPATH=$LOGDIR + +# sysop of fido stuff +IFCICO_SYSOP=$POST + +# my boss node (default address to poll) +NODE=$AKAPRI +EOF + cat copi.ifpoll2 >> $BINDIR/ifpoll + + chmod 755 $BINDIR/ifpoll + chown fnet.uucp $BINDIR/ifpoll + + +######################################################### +##### se in syslog.conf non c'e' "local0.*", lo aggiunge +################################ + + SYSLOG="`grep \"local0.* \" /etc/syslog.conf`" + SYSCHECK_A="`echo \"$SYSLOG\" | cut -f1 | grep -x \"local0.*\"`" + SYSCHECK_B="`echo \"$SYSLOG\" | cut -f2- | grep $LOGDIR/sysiflog`" + MYSYSLOG="local0.*\t\t\t\t\t$LOGDIR/sysiflog" + + if [ ! "$SYSCHECK_A" -o ! "$SYSCHECK_B" ] + then + echo -e "\n# For ifmail" >> /etc/syslog.conf + echo -e "$MYSYSLOG" >>/etc/syslog.conf + killall -1 syslogd + fi + + +######################## + save $AREAS + :> $AREAS + chown fnet.uucp $AREAS + + save $FNETCFG + cat <<EOF >$FNETCFG +# Configuration file for ifmail (ifgate+ifcico) package by Eugene Crosser +# Compile-time default name of this file may be overridden by -I key. +# +# Lines with the first nonblank character '#' are comments. +# +# Log file name. Overrides compile-time default. +logfile $LOGDIR/iflog + +# Debug file name. Overrides compile-time default. +debugfile $LOGDIR/ifdebug + +# Debugging verbosity level (is overidden by -x key). Default is 0. +# WARNING: if >0 your messages will go in /tmp/ifmail !!!!!!!!!!!!!!!!!! +verbose 0 + +# The first is the main address: +EOF +#---------------------------- + + AKA="any" + IAKA=0 + while [ "$AKA" ] + do + IAKA=$[$IAKA+1] + AKA="`cut $AKASETUP -f$IAKA -d:`" + if [ "$AKA" ] + then + int2fidonet $AKA + AKAFTN="`echo $_RETVAL | cut -f1 -d.`" + echo "# aka for `echo $AKAFTN | cut -f2 -d '@'`" >> $FNETCFG + + POINT="`echo $POINTS | cut -f$IAKA -d:`" + + AKAFTN="`echo $AKAFTN | cut -f1 -d '@'`.$POINT@`echo $AKAFTN | cut -f2 -d '@'`" + + echo "address $AKAFTN" >> $FNETCFG + fi + done + +#---------------------------- + cat <<EOF >>$FNETCFG + +# Passwords for nodes. Not checked by iftoss (unless -DPARANOID specified +# at compile-time), checked by ifcico. +# Inserted into outgoing mail packets, EMSI and yoohoo packets. +EOF +#---------------------------- + + AKA="any" + IAKA=0 + while [ "$AKA" ] + do + IAKA=$[$IAKA+1] + AKA="`cut $AKASETUP -f$IAKA -d:`" + if [ "$AKA" ] + then + int2fido $AKA + AKAFTN=$_RETVAL + + PASSWD="`echo $PASSWDS | cut -f$IAKA -d:`" + if [ "$PASSWD" ] + then + echo "password $AKAFTN $PASSWD" >> $FNETCFG + fi + fi + done + +#---------------------------- + cat <<EOF >>$FNETCFG + +# Include config extention file (here: file with real passwords). +# Includes may be nested. If the nesting is cyclic, the program cycles too. +# You are warned. +# include $CFGDIR/passwds + +# System alias file - try to fetch ftn-style aliases from there. +# If "from" address of a message from FidoNet matches _right_ side +# of some entry in sysalias file, then the Reply-To: header is created +# in the RFC message with the name part taken from the left side of the +# sysalis entry and domain part taken from myfqdn (below). E.g., if a +# fidonet message comes from "John Smith of 1:234/567.89@fidonet" and +# there is an entry in the sysalias file: +# "jsmith: John.Smith@p89.f567.n234.z1.fidonet.org" +# and fqdn value is "pccross.msk.su", then the resulting message will +# contain a line: "Reply-To: jsmith@pccross.msk.su". +sysalias /etc/aliases + +# This host fully qualified domain name to add to the alias above +myfqdn `hostname -f` + +# Directory for incoming packets/files: +inbound /var/spool/ifmail/inb +# Directories for "listed" and "protected" sessions +listinbound /var/spool/ifmail/inb +protinbound /var/spool/ifmail/inb + +# Directory for outgoing packets (default domain and zone): +# other zones will be like "/var/spool/ifmail/outb.003", +# other domains will be like "/var/spool/ifmail/<domain>.<zone>" +outbound /var/spool/ifmail/outb + +# Directory from which the file requests are satisfied +public /var/spool/uucppublic + +# Directory with executables to satisfy "magic" file requests +# if requested a file present in this directory, it will be +# executed and stdout sent to the remote system. It is dangerous! +# You are warned. +magic $BINDIR/magic + +# Primary nodelist (serves "outbound" directory and domain from the +# first "address" statement). Name expanded with ".NNN" if neccessary. +nodelist /var/spool/ifmail/nl.d/`cut $AKASETUP -f1 -d: | cut -f4 -d.`.ndl + +# Secondary nodelists and nodelists for other domains. +# use directory name from the first "nodelist" statement. +# filename originating address +EOF +#---------------------------- + + AKA="any" + IAKA=0 + while [ "$AKA" ] + do + IAKA=$[$IAKA+1] + AKA="`cut $AKASETUP -f$IAKA -d:`" + if [ "$AKA" ] + then + int2fidonet $AKA + AKAFTN="`echo $_RETVAL | cut -f1 -d.`" + echo -e "nodelist `echo $AKAFTN | cut -f2 -d '@'`.ndl\t$AKAFTN" >> $FNETCFG + fi + done + +#---------------------------- + cat <<EOF >>$FNETCFG + +# domain translations, just context substitution. Leading dot recommended. +# May contain '@'-sign too. First matching used. +# NOTE: If you specify at least one domtrans line, there will be _NO_ +# default for fidonet <--> fidonet.org. Don't forget to specify it +# explicitly as a last line. +# FTN side Internet side +#domtrans f720.n335.z2.fidonet.org giuda.deis.unical.it +#domtrans .fidonet .fidonet.org + +# Automatically updated alias database. If omitted or inaccessible, +# ^aREPLYADDR and ^aREPLYTO kludges are generated in fido messages. +database /var/spool/ifmail/ifdbm + +# Sequencer file (used to generate unique IDs) +sequencer /var/spool/ifmail/seq + +# Areas file (format: "AREA newsgroup distribution") +areas $CFGDIR/Areas + +# Bad groups prefixes - do not pass to fido if appear in Newsgroups header +# This is NOT the same as "!news.group" in the cnews "sys" file. +# badgroup relcom.ads. +# badgroup relcom.commerce. + +# Maximum allowed number of groups in the Newsgroups header, article will +# not be gated if exeeds. If zero or umitted - no limit. +# maxgroup 5 + +# Internet -> FidoNet (outgoing) character mapping table (a la mapchan) +# outtab $BINDIR/outkoi8alt + +# FidoNet -> Internet (incoming) character mapping table +# intab $BINDIR/outaltkoi8 + +# Toss program, used by ifunpack +iftoss $BINDIR/iftoss + +EOF + + cat copi.ifmcfg2 >>$FNETCFG + + if [ $[$[SPD] > $[19200]] = 1 ]; then + SPDLOCK="L38400" + elif [ $[$[SPD] > $[9600]] = 1 ]; then + SPDLOCK="L19200" + elif [ $[$[SPD] > $[2400]] = 1 ]; then + SPDLOCK="9600" + elif [ $[$[SPD] > $[1200]] = 1 ]; then + SPDLOCK="2400" + elif [ $[$[SPD] > $[300]] = 1 ]; then + SPDLOCK="1200" + else + SPDLOCK="300" + fi + + echo "ModemPort modem:$SPDLOCK" >>$FNETCFG + cat copi.ifmcfg5 >>$FNETCFG + + echo "PhoneTrans $COUNTRYPREF-$PREF- /" >>$FNETCFG + echo "PhoneTrans $COUNTRYPREF- / $LONG_DIST_PREFIX" >>$FNETCFG + echo "PhoneTrans / $INTERCOUNTRYPREF" >>$FNETCFG + echo "ModemReset ATZ\r" >>$FNETCFG + echo "ModemDial \d$DIALSTRING\T\r" >>$FNETCFG + + cat copi.ifmcfg4 >>$FNETCFG + + echo "Name $SYSNAME" >>$FNETCFG + echo "Location $LOCATION" >>$FNETCFG + echo "SysOp $SYSOP" >>$FNETCFG + echo "Phone $COUNTRYPREF-$PREF-$PHONE" >>$FNETCFG + echo "Speed $SPD" >>$FNETCFG + echo "Flags $NODEFLAGS" >>$FNETCFG + + chown fnet.uucp $FNETCFG +} + +# Args: cfg_dir +configure_smail() { + dialog --backtitle "$TITLE" --infobox "Configuro Smail..." 0 0 + + USER="`cat $COPIUSER`" + FNETHOME=~fnet + + SMAIL=$1 + SMAILCONF=$SMAIL/config + ALIASES=$SMAIL/aliases + DIRECTORS=$SMAIL/directors + ROUTERS=$SMAIL/routers + TRANSPORTS=$SMAIL/transports + FTNPATHS=$SMAIL/ftnpaths + +# File: config + save $SMAILCONF + + cat <<EOF >$SMAILCONF +# +# smail configuration for $HOST.$DOMAIN +# (see smail(5) man page for details and other options) +# +hostnames=$HOST:$HOST.$DOMAIN +domains=$DOMAIN +postmaster=$USER +smtp_banner="\$primary_name Linux Smail\$version #\$compile_num ready at \$date" +spool_mode=0600 +received_field="Received: \\ + \${if def:sender_host \\ + {from \$sender_host by \$primary_name \\ + \${if def:sender_proto: with \$sender_proto}\\ + \n\t(Linux Smail\$version #\$compile_num) }\\ + else{by \$primary_name \${if def:sender_proto:with \$sender_proto }\\ + (Linux Smail\$version #\$compile_num)\n\t}}\\ + id \$message_id; \$spool_date" +trusted_users=root:uucp:daemon:fnet +EOF + + +# File: routers + save $ROUTERS + + cat <<EOF >$ROUTERS +ifmail: driver=pathalias, + transport=ifmail; + + file=ftnpaths, + proto=lsearch, + domain=ftn:org +EOF + + +# File: transports + save $TRANSPORTS + + cat <<EOF >$TRANSPORTS +local: driver = appendfile, + return_path, + local, + from, + unix_from_hack; + + file = /var/spool/mail/\${lc:user}, + group = mail, + mode = 0660, + suffix = "\n", + append_as_user + +ifmail: driver=pipe, + from, + -received, + max_addrs=5, + max_chars=200; + + pipe_as_sender, + cmd="$FNETHOME/ifmail -r\$host \$((\${strip:user})\$)" + +EOF + + +# File: directors + save $DIRECTORS + + +# File: aliases + for i in $ALIASES /etc/aliases /usr/lib/aliases + do + if [ ! -L $i -a -f $i ] + then + mv $i $i~ + fi + done + + USERNAME="`cut /etc/passwd -f1,5 -d: | grep $USER: | cut -f2 -d: | sed y/\" \"/./`" + echo "news: $USER" >> $ALIASES + echo "usenet: $USER" >> $ALIASES + echo "$USERNAME: $USER" >> $ALIASES + + ln -sf $ALIASES /etc/ + ln -sf $ALIASES /usr/lib/ + + cd $SMAIL # is this necessary?? E-mail me if you know,please + mkaliases >/dev/null + +# File: ftnpaths + save $FTNPATHS + + OK=1 + IAKA=1 + while [ $OK != 0 ]; do + AKA="`cut $AKASETUP -f$IAKA -d:`" + IAKA=$[$IAKA+1] + if [ ! "$AKA" ]; then + OK=0 + else + echo -e ".`echo $AKA | cut -f4 -d.`\t\t$AKA!%s" >>$FTNPATHS + fi + done + + +# misc section + + chmod 1775 /var/spool/mail + chgrp mail /var/spool/mail + + cd $SMAIL + touch forward + /usr/lib/smail/mkdbm forward + +# reload sendmail + killall sendmail 2>/dev/null + /usr/sbin/sendmail -bd -q15m # if inetd handles smtp port, this will not load +} Property changes on: contrib/dialog/samples/copifuncs/copi.funcs ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/copifuncs/copi.ifmcfg4 =================================================================== --- contrib/dialog/samples/copifuncs/copi.ifmcfg4 (revision 0) +++ contrib/dialog/samples/copifuncs/copi.ifmcfg4 (revision 0) @@ -0,0 +1,30 @@ +ModemHangup +++ATH\r +ModemOK OK +ModemConnect CONNECT +ModemError BUSY +ModemError NO\sCARRIER +ModemError NO\sDIAL +ModemError RING\r +ModemError ERROR + +# Call options (time, address and nodelist flag dependant) +# All matching are applied in the order they are specified. +# Possible options are "[No]Call", "[No]Hold", "[No]PUA", "[No]EMSI", +# "[No]WaZOO", "[No]Freqs", "[No]Zmodem", "[No]ZedZap", "[No]Janus", +# "[No]Hydra". Here, WaZOO stands for YooHoo/2U2 handshake, not for +# the transfer scheme. FTS-0001 handshake and DietIFNA scheme cannot +# be disallowed (because they are mandatory by standart). "Hold" +# means really hold "hold" type packets and files: do not send them +# if our system initiated the session, "NoHold" means send "hold" +# packets when our system initiated the session. "NoPUA" stands for +# "No PickUp All", i.e. PUP ("Pick Up Primary"). NoCall means do not +# perform outbound call. This flag has no effect on the nodes +# explicitly specified in the command line. +# Default options are "everything allowed". +# options ((!CM) & time Any0700-0200) Nocall +#options (time Any0900-2100 & ! address 2:5020/*) Nocall + +# EMSI data for this node +# From this line on values CANNOT be prefixed with logical expression +# For now, escaping of '}' and ']' unimplemented, try to avoid these +# characters please! Property changes on: contrib/dialog/samples/copifuncs/copi.ifmcfg4 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/copifuncs/copi.ifmcfg5 =================================================================== --- contrib/dialog/samples/copifuncs/copi.ifmcfg5 (revision 0) +++ contrib/dialog/samples/copifuncs/copi.ifmcfg5 (revision 0) @@ -0,0 +1,14 @@ + +# PhoneTrans lines provide rules to change phone prefixes to make local +# or long-distance calls. In the example below, my country code is 7, +# and local dialing area is 095. From the numbers starting with "7-095-" +# the prefix is stripped and the 7-digit remainder is dialed. For +# the numbers starting with "7-" but not with "7-095-", the country prefix +# "7-" is stripped and the long-distance dialing prefix "8W" substituted. +# For the numbers not matching any of the above, international +# call is performed: international dialing prefix "8W10" is prepended +# to the unmodified 11-digit number. Generally, the syntax is: +# "PhoneTrans <what-to-strip> / <what-to-substitute-instead>" +#PhoneTrans 7-095- / +#PhoneTrans 7- / 8W +#PhoneTrans / 8W10 Property changes on: contrib/dialog/samples/copifuncs/copi.ifmcfg5 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/copifuncs/ifpatch =================================================================== --- contrib/dialog/samples/copifuncs/ifpatch (revision 0) +++ contrib/dialog/samples/copifuncs/ifpatch (revision 0) @@ -0,0 +1,101 @@ +--- ifgate/message.c.orig Mon Jul 24 15:17:47 1995 ++++ ifgate/message.c Mon Jul 24 15:18:00 1995 +@@ -48,12 +48,26 @@ + if (!strcasecmp(msg->key,"X-UUCP-From")) return 0; + if (!strcasecmp(msg->key,"X-Body-Start")) return 0; + if (!strncasecmp(msg->key,"X-FTN-",6)) return 0; +- if (!strcasecmp(msg->key,"Path")) return isftnpath(msg->val)?0:1; ++ if (!strcasecmp(msg->key,"Path")) ++ ++#ifdef LESS_RFC_KLUDGES ++ return 0; ++#else ++ return isftnpath(msg->val)?0:1; ++#endif ++ + if (!strcasecmp(msg->key,"Newsgroups")) return newsmode?0:2; + if (!strcasecmp(msg->key,"Xref")) return 0; + if (!strcasecmp(msg->key,"Return-Receipt-To")) return 1; + if (!strcasecmp(msg->key,"Received")) return newsmode?0:2; +- if (!strcasecmp(msg->key,"From")) return ftnorigin?0:2; ++ if (!strcasecmp(msg->key,"From")) ++ ++#ifdef LESS_RFC_KLUDGES ++ return 0; ++#else ++ return ftnorigin?0:2; ++#endif ++ + if (!strcasecmp(msg->key,"To")) + { + if (newsmode) return 0; +@@ -66,7 +80,14 @@ + } + if (!strcasecmp(msg->key,"Cc")) return 2; + if (!strcasecmp(msg->key,"Bcc")) return 2; +- if (!strcasecmp(msg->key,"Reply-To")) return 2; ++ if (!strcasecmp(msg->key,"Reply-To")) ++ ++#ifdef LESS_RFC_KLUDGES ++ return 0; ++#else ++ return 2; ++#endif ++ + if (!strcasecmp(msg->key,"Lines")) return 0; + if (!strcasecmp(msg->key,"Date")) return 0; + if (!strcasecmp(msg->key,"Subject")) +@@ -77,8 +98,22 @@ + if (!strcasecmp(msg->key,"Organization")) return removeorg?0:1; + if (!strcasecmp(msg->key,"Comment-To")) return 0; + if (!strcasecmp(msg->key,"X-Comment-To")) return 0; +- if (!strcasecmp(msg->key,"Keywords")) return 2; +- if (!strcasecmp(msg->key,"Summary")) return 2; ++ if (!strcasecmp(msg->key,"Keywords")) ++ ++#ifdef LESS_RFC_KLUDGES ++ return 0; ++#else ++ return 2; ++#endif ++ ++ if (!strcasecmp(msg->key,"Summary")) ++ ++#ifdef LESS_RFC_KLUDGES ++ return 0; ++#else ++ return 2; ++#endif ++ + if (!strcasecmp(msg->key,"MIME-Version")) return removemime?0:1; + if (!strcasecmp(msg->key,"Content-Type")) return removemime?0:1; + if (!strcasecmp(msg->key,"Content-Length")) return removemime?0:1; +@@ -86,8 +121,26 @@ + if (!strcasecmp(msg->key,"Content-Name")) return 2; + if (!strcasecmp(msg->key,"Content-Description")) return 2; + if (!strcasecmp(msg->key,"Message-ID")) return ftnorigin?0:1; +- if (!strcasecmp(msg->key,"References")) return removeref?0:1; +- if (!strcasecmp(msg->key,"Distribution")) return ftnorigin?0:1; ++ if (!strcasecmp(msg->key,"References")) ++ ++#ifdef LESS_RFC_KLUDGES ++ return 0; ++#else ++ return removeref?0:1; ++#endif ++ ++ if (!strcasecmp(msg->key,"Distribution")) ++ ++#ifdef LESS_RFC_KLUDGES ++ return 0; ++#else ++ return ftnorigin?0:1; ++#endif ++ ++#ifdef LESS_RFC_KLUDGES ++ if (!strcasecmp(msg->key,"NNTP-Posting-Host")) return 0; ++#endif ++ + /*if (!strcasecmp(msg->key,"")) return ;*/ + return 1; + } Index: contrib/dialog/samples/infobox5 =================================================================== --- contrib/dialog/samples/infobox5 (revision 0) +++ contrib/dialog/samples/infobox5 (revision 0) @@ -0,0 +1,39 @@ +#! /bin/sh +# $Id: infobox5,v 1.6 2010/01/13 10:20:03 tom Exp $ +# get rid of all flickering by constructing a script unroll the loop, leaving +# us in curses-mode until we're done counting. + +. ./setup-vars + +. ./setup-tempfile + +left=10 +unit="seconds" +last='\' + +cat >>$tempfile <<EOF +$DIALOG $last +EOF + +while test $left != 0 +do + +cat >>$tempfile <<EOF + --sleep 1 \ + --begin 0 5 \ + --title "INFO BOX" "$@" \ + --infobox "Hi, this is an information box. It is +different from a message box: it will +not pause waiting for input after displaying +the message. The pause here is only introduced +by the sleep command within dialog. +You have $left $unit to read this..." 0 0 $last +EOF + +left=`expr $left - 1` +test $left = 1 && unit="second" +done + +echo >>$tempfile + +. $tempfile Property changes on: contrib/dialog/samples/infobox5 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/infobox6 =================================================================== --- contrib/dialog/samples/infobox6 (revision 0) +++ contrib/dialog/samples/infobox6 (revision 0) @@ -0,0 +1,41 @@ +#! /bin/sh +# $Id: infobox6,v 1.6 2010/01/13 10:20:03 tom Exp $ +# get rid of all flickering by constructing a script unroll the loop, leaving +# us in curses-mode until we're done counting. +# +# a little fancier than infobox5, this moves the widget at each step. + +. ./setup-vars + +. ./setup-tempfile + +left=10 +unit="seconds" +last='\' + +cat >>$tempfile <<EOF +$DIALOG $last +EOF + +while test $left != 0 +do + +cat >>$tempfile <<EOF + --sleep 1 \ + --begin $left `expr $left + 5` \ + --title "INFO BOX" $last "$@" \ + --infobox "Hi, this is an information box. It is +different from a message box: it will +not pause waiting for input after displaying +the message. The pause here is only introduced +by the sleep command within dialog. +You have $left $unit to read this..." 0 0 $last +EOF + +left=`expr $left - 1` +test $left = 1 && unit="second" +done + +echo >>$tempfile + +. $tempfile Property changes on: contrib/dialog/samples/infobox6 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/timebox =================================================================== --- contrib/dialog/samples/timebox (revision 0) +++ contrib/dialog/samples/timebox (revision 0) @@ -0,0 +1,14 @@ +#!/bin/sh +# $Id: timebox,v 1.9 2010/01/13 10:23:10 tom Exp $ + +. ./setup-vars + +DIALOG_ERROR=254 +export DIALOG_ERROR + +exec 3>&1 +RESULT=`$DIALOG --title "TIMEBOX" "$@" --timebox "Please set the time..." 0 0 12 34 56 2>&1 1>&3` +retval=$? +exec 3>&- + +. ./report-string Property changes on: contrib/dialog/samples/timebox ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/gauge0 =================================================================== --- contrib/dialog/samples/gauge0 (revision 0) +++ contrib/dialog/samples/gauge0 (revision 0) @@ -0,0 +1,23 @@ +#!/bin/sh +# $Id: gauge0,v 1.7 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +PCT=10 +( +sleep 1 +while test $PCT != 110 +do +cat <<EOF +XXX +$PCT +The new\n\ +message ($PCT percent) +XXX +EOF +PCT=`expr $PCT + 10` +sleep 1 +done +) | + +$DIALOG --title "GAUGE" "$@" --gauge "Hi, this is a gauge widget" 0 0 0 Property changes on: contrib/dialog/samples/gauge0 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/gauge2 =================================================================== --- contrib/dialog/samples/gauge2 (revision 0) +++ contrib/dialog/samples/gauge2 (revision 0) @@ -0,0 +1,28 @@ +#!/bin/sh +# $Id: gauge2,v 1.8 2010/01/13 10:26:52 tom Exp $ +# The original dialog program assumed the first line after the first "XXX" +# was a percentage value (compare with "gauge" script). + +. ./setup-vars + +(echo "10" ; sleep 2 ; + +cat <<"EOF" +XXX +The new +\n +message +XXX +20 +EOF +sleep 2; + +echo "75" ; sleep 1 +echo "100") | \ + +$DIALOG --title "GAUGE" "$@" --gauge "Hi, this is a gauge widget" 10 40 0 + +if [ "$?" = $DIALOG_ESC ] ; then + echo "" + echo "Box closed !" +fi Property changes on: contrib/dialog/samples/gauge2 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/msgbox1 =================================================================== --- contrib/dialog/samples/msgbox1 (revision 0) +++ contrib/dialog/samples/msgbox1 (revision 0) @@ -0,0 +1,34 @@ +#!/bin/sh +# $Id: msgbox1,v 1.9 2010/01/13 10:26:52 tom Exp $ + +. ./setup-vars + +$DIALOG --title "MESSAGE BOX" --clear "$@" \ + --msgbox "Hi, this is a simple message box. You can use this to + display any message you like. The box will remain until + you press the ENTER key. This box is being displayed + with dialogs default aspect ratio of 9." 0 0 +test $? = $DIALOG_ESC && exit + +$DIALOG --aspect 12 --title "MESSAGE BOX aspect=12" --clear "$@" \ + --msgbox "Hi, this is a simple message box. You can use this to + display any message you like. The box will remain until + you press the ENTER key. This box is being displayed + with an aspect ratio of 12." 0 0 +test $? = $DIALOG_ESC && exit + +$DIALOG --aspect 6 --title "MESSAGE BOX aspect=6" --clear "$@" \ + --msgbox "Hi, this is a simple message box. You can use this to + display any message you like. The box will remain until + you press the ENTER key. This box is being displayed + with an aspect ratio of 6." 0 0 +test $? = $DIALOG_ESC && exit + +$DIALOG --aspect 6 --cr-wrap --title "MESSAGE BOX aspect=6 with --cr-wrap" \ + --clear --msgbox " "$@" \ + Hi, this is a simple + message box. You can + use this to display any + message you like. +The box will remain until you press the ENTER key. This box is being displayed with an aspect ratio of 6, and using --cr-wrap.\n" 0 0 +test $? = $DIALOG_ESC && exit Property changes on: contrib/dialog/samples/msgbox1 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/msgbox2 =================================================================== --- contrib/dialog/samples/msgbox2 (revision 0) +++ contrib/dialog/samples/msgbox2 (revision 0) @@ -0,0 +1,34 @@ +#!/bin/sh +# $Id: msgbox2,v 1.7 2010/01/13 10:26:52 tom Exp $ + +. ./setup-vars + +$DIALOG --title "MESSAGE BOX" --trim "$@" \ + --msgbox "Hi, this is a simple message box. You can use this to + display any message you like. The box will remain until + you press the ENTER key. This box is being displayed + with dialogs default aspect ratio of 9." 0 0 +test $? = $DIALOG_ESC && exit + +$DIALOG --aspect 12 --title "MESSAGE BOX aspect=12" --trim "$@" \ + --msgbox "Hi, this is a simple message box. You can use this to + display any message you like. The box will remain until + you press the ENTER key. This box is being displayed + with an aspect ratio of 12." 0 0 +test $? = $DIALOG_ESC && exit + +$DIALOG --aspect 6 --title "MESSAGE BOX aspect=6" --trim "$@" \ + --msgbox "Hi, this is a simple message box. You can use this to + display any message you like. The box will remain until + you press the ENTER key. This box is being displayed + with an aspect ratio of 6." 0 0 +test $? = $DIALOG_ESC && exit + +$DIALOG --aspect 6 --cr-wrap --title "MESSAGE BOX aspect=6 with --cr-wrap" \ + --trim --msgbox " "$@" \ + Hi, this is a simple + message box. You can + use this to display any + message you like. +The box will remain until you press the ENTER key. This box is being displayed with an aspect ratio of 6, and using --cr-wrap.\n" 0 0 +test $? = $DIALOG_ESC && exit Property changes on: contrib/dialog/samples/msgbox2 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/msgbox3 =================================================================== --- contrib/dialog/samples/msgbox3 (revision 0) +++ contrib/dialog/samples/msgbox3 (revision 0) @@ -0,0 +1,22 @@ +#!/bin/sh +# $Id: msgbox3,v 1.7 2010/01/13 10:26:52 tom Exp $ + +. ./setup-vars + +width=35 +while test $width != 61 +do +$DIALOG --title "MESSAGE BOX (width $width)" --clear --no-collapse "$@" \ + --msgbox "\ + H H EEEEE L L OOO + H H E L L O O + HHHHH EEEEE L L O O + H H E L L O O + H H EEEEE LLLLL LLLLL OOO + +Hi, this is a simple message box. You can use this to \ +display any message you like. The box will remain until \ +you press the ENTER key." 15 $width +test $? = $DIALOG_ESC && break +width=`expr $width + 1` +done Property changes on: contrib/dialog/samples/msgbox3 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/dselect =================================================================== --- contrib/dialog/samples/dselect (revision 0) +++ contrib/dialog/samples/dselect (revision 0) @@ -0,0 +1,11 @@ +#!/bin/sh +# $Id: dselect,v 1.6 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +exec 3>&1 +RESULT=`$DIALOG --title "Please choose a directory" "$@" --dselect $HOME/ 14 48 2>&1 1>&3` +retval=$? +exec 3>&- + +. ./report-string Property changes on: contrib/dialog/samples/dselect ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/msgbox5 =================================================================== --- contrib/dialog/samples/msgbox5 (revision 0) +++ contrib/dialog/samples/msgbox5 (revision 0) @@ -0,0 +1,23 @@ +#!/bin/sh +# $Id: msgbox5,v 1.5 2010/01/13 10:26:52 tom Exp $ +# this differs from msgbox3 by making a window small enough to force scrolling. + +. ./setup-vars + +width=35 +while test $width != 61 +do +$DIALOG --title "MESSAGE BOX (width $width)" --clear --no-collapse "$@" \ + --msgbox "\ + H H EEEEE L L OOO + H H E L L O O + HHHHH EEEEE L L O O + H H E L L O O + H H EEEEE LLLLL LLLLL OOO + +Hi, this is a simple message box. You can use this to \ +display any message you like. The box will remain until \ +you press the ENTER key." 10 $width +test $? = $DIALOG_ESC && break +width=`expr $width + 1` +done Property changes on: contrib/dialog/samples/msgbox5 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/debian.rc =================================================================== --- contrib/dialog/samples/debian.rc (revision 0) +++ contrib/dialog/samples/debian.rc (revision 0) @@ -0,0 +1,117 @@ +# $Id: debian.rc,v 1.4 2005/12/01 01:18:57 tom Exp $ +# Run-time configuration file for dialog, matches Debian color scheme. +# (these are the default values for dialog) + +# Set aspect-ration. +aspect = 0 + +# Set separator (for multiple widgets output). +separate_widget = "" + +# Set tab-length (for textbox tab-conversion). +tab_len = 0 + +# Make tab-traversal for checklist, etc., include the list. +visit_items = OFF + +# Shadow dialog boxes? This also turns on color. +use_shadow = ON + +# Turn color support ON or OFF +use_colors = ON + +# Screen color +screen_color = (CYAN,BLUE,ON) + +# Shadow color +shadow_color = (BLACK,BLACK,ON) + +# Dialog box color +dialog_color = (BLACK,WHITE,OFF) + +# Dialog box title color +title_color = (BLUE,WHITE,ON) + +# Dialog box border color +border_color = (WHITE,WHITE,ON) + +# Active button color +button_active_color = (WHITE,BLUE,ON) + +# Inactive button color +button_inactive_color = (BLACK,WHITE,OFF) + +# Active button key color +button_key_active_color = (WHITE,BLUE,ON) + +# Inactive button key color +button_key_inactive_color = (RED,WHITE,OFF) + +# Active button label color +button_label_active_color = (YELLOW,BLUE,ON) + +# Inactive button label color +button_label_inactive_color = (BLACK,WHITE,ON) + +# Input box color +inputbox_color = (BLACK,WHITE,OFF) + +# Input box border color +inputbox_border_color = (BLACK,WHITE,OFF) + +# Search box color +searchbox_color = (BLACK,WHITE,OFF) + +# Search box title color +searchbox_title_color = (BLUE,WHITE,ON) + +# Search box border color +searchbox_border_color = (WHITE,WHITE,ON) + +# File position indicator color +position_indicator_color = (BLUE,WHITE,ON) + +# Menu box color +menubox_color = (BLACK,WHITE,OFF) + +# Menu box border color +menubox_border_color = (WHITE,WHITE,ON) + +# Item color +item_color = (BLACK,WHITE,OFF) + +# Selected item color +item_selected_color = (WHITE,BLUE,ON) + +# Tag color +tag_color = (BLUE,WHITE,ON) + +# Selected tag color +tag_selected_color = (YELLOW,BLUE,ON) + +# Tag key color +tag_key_color = (RED,WHITE,OFF) + +# Selected tag key color +tag_key_selected_color = (RED,BLUE,ON) + +# Check box color +check_color = (BLACK,WHITE,OFF) + +# Selected check box color +check_selected_color = (WHITE,BLUE,ON) + +# Up arrow color +uarrow_color = (GREEN,WHITE,ON) + +# Down arrow color +darrow_color = (GREEN,WHITE,ON) + +# Item help-text color +itemhelp_color = (WHITE,BLACK,OFF) + +# Active form text color +form_active_text_color = (WHITE,BLUE,ON) + +# Form text color +form_text_color = (WHITE,CYAN,ON) Index: contrib/dialog/samples/msgbox6 =================================================================== --- contrib/dialog/samples/msgbox6 (revision 0) +++ contrib/dialog/samples/msgbox6 (revision 0) @@ -0,0 +1,17 @@ +#!/bin/sh +# $Id: msgbox6,v 1.5 2010/01/13 10:26:52 tom Exp $ +# this differs from msgbox3 by making a window small enough to force scrolling. + +. ./setup-vars + +width=35 +while test $width != 61 +do +$DIALOG --title "MESSAGE BOX (width $width)" --clear "$@" \ + --msgbox "\ + a b c d e f g h j i j k l m n o p q r s t u v w x y z + A B C D E F G H J I J K L M N O P Q R S T U V W X Y Z +" 10 $width +test $? = $DIALOG_ESC && break +width=`expr $width + 1` +done Property changes on: contrib/dialog/samples/msgbox6 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/checklist1 =================================================================== --- contrib/dialog/samples/checklist1 (revision 0) +++ contrib/dialog/samples/checklist1 (revision 0) @@ -0,0 +1,28 @@ +#! /bin/sh +# $Id: checklist1,v 1.10 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --backtitle "No Such Organization" \ + --title "CHECKLIST BOX" "$@" \ + --checklist "Hi, this is a checklist box. You can use this to \n\ +present a list of choices which can be turned on or \n\ +off. If there are more items than can fit on the \n\ +screen, the list will be scrolled. You can use the \n\ +UP/DOWN arrow keys, the first letter of the choice as a \n\ +hot key, or the number keys 1-9 to choose an option. \n\ +Press SPACE to toggle an option on/off. \n\n\ + Which of the following are fruits?" 20 61 5 \ + "" "It's an apple." off \ + "Dog" "No, that's not my dog." ON \ + "Orange" "Yeah, that's juicy." off \ + "Chicken" "" off \ + "Cat" "No, never put a dog and a cat together!" oN \ + "Fish" "Cats like fish." On \ + "Lemon" "You know how it tastes." on 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/checklist1 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/calendar2 =================================================================== --- contrib/dialog/samples/calendar2 (revision 0) +++ contrib/dialog/samples/calendar2 (revision 0) @@ -0,0 +1,11 @@ +#!/bin/sh +# $Id: calendar2,v 1.8 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +exec 3>&1 +RESULT=`$DIALOG --title "CALENDAR" "$@" --calendar "Please choose a date..." 0 0 2>&1 1>&3` +retval=$? +exec 3>&- + +. ./report-string Property changes on: contrib/dialog/samples/calendar2 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/checklist2 =================================================================== --- contrib/dialog/samples/checklist2 (revision 0) +++ contrib/dialog/samples/checklist2 (revision 0) @@ -0,0 +1,28 @@ +#! /bin/sh +# $Id: checklist2,v 1.11 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --item-help --backtitle "No Such Organization" \ + --title "CHECKLIST BOX" "$@" \ + --checklist "Hi, this is a checklist box. You can use this to \n\ +present a list of choices which can be turned on or \n\ +off. If there are more items than can fit on the \n\ +screen, the list will be scrolled. You can use the \n\ +UP/DOWN arrow keys, the first letter of the choice as a \n\ +hot key, or the number keys 1-9 to choose an option. \n\ +Press SPACE to toggle an option on/off. \n\n\ + Which of the following are fruits?" 20 61 5 \ + "Apple" "It's an apple." off "fruit" \ + "Dog" "No, that's not my dog." ON "not a fruit" \ + "Orange" "Yeah, that's juicy." off "fruit" \ + "Chicken" "Normally not a pet." off "not a fruit" \ + "Cat" "No, never put a dog and a cat together!" oN "not a fruit" \ + "Fish" "Cats like fish." On "not a fruit" \ + "Lemon" "You know how it tastes." on "the only one you wouldn't eat" 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/checklist2 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/calendar3 =================================================================== --- contrib/dialog/samples/calendar3 (revision 0) +++ contrib/dialog/samples/calendar3 (revision 0) @@ -0,0 +1,11 @@ +#!/bin/sh +# $Id: calendar3,v 1.9 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +exec 3>&1 +RESULT=`$DIALOG --extra-button --extra-label "Hold" --help-button --title "CALENDAR" "$@" --calendar "Please choose a date..." 0 0 7 7 1981 2>&1 1>&3` +retval=$? +exec 3>&- + +. ./report-string Property changes on: contrib/dialog/samples/calendar3 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/checklist3 =================================================================== --- contrib/dialog/samples/checklist3 (revision 0) +++ contrib/dialog/samples/checklist3 (revision 0) @@ -0,0 +1,28 @@ +#! /bin/sh +# $Id: checklist3,v 1.11 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --item-help --backtitle "No Such Organization" \ + --title "CHECKLIST BOX" "$@" \ + --checklist "Hi, this is a checklist box. You can use this to \n\ +present a list of choices which can be turned on or \n\ +off. If there are more items than can fit on the \n\ +screen, the list will be scrolled. You can use the \n\ +UP/DOWN arrow keys, the first letter of the choice as a \n\ +hot key, or the number keys 1-9 to choose an option. \n\ +Press SPACE to toggle an option on/off. \n\n\ + Which of the following are fruits?" 20 61 5 \ + "Apple" "It's an apple. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "fruit" \ + "Dog" "No, that's not my dog. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ON "not a fruit" \ + "Orange" "Yeah, that's juicy. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "fruit" \ + "Chicken" "Normally not a pet. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "not a fruit" \ + "Cat" "No, never put a dog and a cat together! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" oN "not a fruit" \ + "Fish" "Cats like fish. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" On "not a fruit" \ + "Lemon" "You know how it tastes. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" on "the only one you wouldn't eat" 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/checklist3 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/tailboxbg1 =================================================================== --- contrib/dialog/samples/tailboxbg1 (revision 0) +++ contrib/dialog/samples/tailboxbg1 (revision 0) @@ -0,0 +1,32 @@ +#!/bin/sh +# $Id: tailboxbg1,v 1.9 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +./killall listing +./listing >listing.out & + +$DIALOG --title "TAIL BOXES" \ + --begin 10 10 "$@" --tailboxbg listing.out 8 58 \ + --and-widget \ + --begin 15 15 "$@" --tailboxbg listing.out 8 58 \ + --and-widget \ + --begin 3 10 "$@" --msgbox "Press OK " 5 30 \ + 2>$tempfile + +# The --and-widget causes a tab to be emitted, but our example will only +# write one number to stderr. +pid=`cat $tempfile |sed -e 's/ //g'` +if test -n "$pid" ; then +# wait a while for the background process to run +sleep 10 + +# now kill it +kill -3 $pid 2>&1 >/dev/null 2>/dev/null +echo "killed [$pid]" +fi + +# ...and the process that is making the listing +./killall listing Property changes on: contrib/dialog/samples/tailboxbg1 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/checklist4 =================================================================== --- contrib/dialog/samples/checklist4 (revision 0) +++ contrib/dialog/samples/checklist4 (revision 0) @@ -0,0 +1,28 @@ +#! /bin/sh +# $Id: checklist4,v 1.12 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --help-button --item-help --backtitle "No Such Organization" \ + --title "CHECKLIST BOX" "$@" \ + --checklist "Hi, this is a checklist box. You can use this to \n\ +present a list of choices which can be turned on or \n\ +off. If there are more items than can fit on the \n\ +screen, the list will be scrolled. You can use the \n\ +UP/DOWN arrow keys, the first letter of the choice as a \n\ +hot key, or the number keys 1-9 to choose an option. \n\ +Press SPACE to toggle an option on/off. \n\n\ + Which of the following are fruits?" 20 61 5 \ + "Apple" "It's an apple. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "fruit" \ + "Dog" "No, that's not my dog. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ON "not a fruit" \ + "Orange" "Yeah, that's juicy. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "fruit" \ + "Chicken" "Normally not a pet. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "not a fruit" \ + "Cat" "No, never put a dog and a cat together! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" oN "not a fruit" \ + "Fish" "Cats like fish. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" On "not a fruit" \ + "Lemon" "You know how it tastes. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" on "the only one you wouldn't eat" 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/checklist4 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/tailboxbg2 =================================================================== --- contrib/dialog/samples/tailboxbg2 (revision 0) +++ contrib/dialog/samples/tailboxbg2 (revision 0) @@ -0,0 +1,33 @@ +#!/bin/sh +# $Id: tailboxbg2,v 1.9 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +./killall listing +./listing >listing.out & + +$DIALOG --title "TAIL BOXES" \ + --no-kill \ + --begin 10 10 "$@" --tailboxbg listing.out 8 58 \ + --and-widget \ + --begin 15 15 "$@" --tailboxbg listing.out 8 58 \ + --and-widget \ + --begin 3 10 "$@" --msgbox "Press OK " 5 30 \ + 2>$tempfile + +# The --and-widget causes a tab to be emitted, but our example will only +# write one number to stderr. +pid=`cat $tempfile |sed -e 's/ //g'` +if test -n "$pid" ; then +# wait a while for the background process to run +sleep 10 + +# now kill it +kill -3 $pid 2>&1 >/dev/null 2>/dev/null +echo "killed [$pid]" +fi + +# ...and the process that is making the listing +./killall listing Property changes on: contrib/dialog/samples/tailboxbg2 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/README =================================================================== --- contrib/dialog/samples/README (revision 0) +++ contrib/dialog/samples/README (revision 0) @@ -0,0 +1,40 @@ +-- $Id: README,v 1.3 2007/01/11 22:52:19 tom Exp $ + +You can set the environment-variable DIALOG to whatever program you +want to check. Default is "dialog". + +Use "export DIALOG=/usr/bin/dialog" for sh or "setenv DIALOG ../dialog" for csh +to test the /usr/bin/dialog program. + +-- Here is the original README for the samples directory. + +There is no documentation at the moment for cdialog 0.9a, but here are a +small installer (copismall) for 'points' fido-like, that uses cdialog 0.9a. +It can demonstrate some of the new features... run "copismall" paying +attention because after asking for some things, it then installs and/or +configures programs like as Inn, Ifmail, Smail to make the 'point'. +It's in Italian language only at moment, but the code is bash...... +If you want look at other much professional products FREE realized with +cdialog and that use much of the other new characteristics, look for one of +the ComeOn Point Suites v1.1+. Makers are a sub-group of the ComeOn Linux +Development Team... ComeOn Linux! follows GNU philosophy. + +Mail demarco_p@abramo.it to have the actual location of these Suites and +of other free ComeOn Linux! software, or if you want more info about +ComeOn Linux! + +To run the "ComeOn Point Installer! v0.9a.small", type: +$ copismall + +Other external samples could be: + +copa - ComeOn Point Administrator! v0.8 +copm - ComeOn Point Maintainer! v0.2 +copi - ComeOn Point Installer! v0.9 (system-wide version of copi) +coepi - ComeOn Expert Point Installer! v1.3 (Professional) + +cops - ComeOn Point Suite! v1.1 +copsp - ComeOn Point Suite Professional! v1.1 + +coui - ComeOn UUCP Installer! v0.1 (makes dialup networks in a moment) + Index: contrib/dialog/samples/checklist5 =================================================================== --- contrib/dialog/samples/checklist5 (revision 0) +++ contrib/dialog/samples/checklist5 (revision 0) @@ -0,0 +1,29 @@ +#! /bin/sh +# $Id: checklist5,v 1.11 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --help-button --item-help --backtitle "No Such Organization" \ + --title "CHECKLIST BOX" "$@" \ + --checklist "Hi, this is a checklist box. You can use this to \n\ +present a list of choices which can be turned on or \n\ +off. If there are more items than can fit on the \n\ +screen, the list will be scrolled. You can use the \n\ +UP/DOWN arrow keys, the first letter of the choice as a \n\ +hot key, or the number keys 1-9 to choose an option. \n\ +Press SPACE to toggle an option on/off. \n\n\ + Which of the following are fruits?" 20 61 5 \ + "Apple" "It's an apple. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "fruit" \ + "Dog" "No, that's not my dog. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ON "not a fruit" \ + "Orange" "Yeah, that's juicy. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "fruit" \ + "Chicken" "Normally not a pet. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "not a fruit" \ + "" "No such pet. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "not anything" \ + "Cat" "No, never put a dog and a cat together! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" oN "not a fruit" \ + "Fish" "Cats like fish. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" On "not a fruit" \ + "Lemon" "You know how it tastes. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" on "the only one you wouldn't eat" 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/checklist5 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/checklist6 =================================================================== --- contrib/dialog/samples/checklist6 (revision 0) +++ contrib/dialog/samples/checklist6 (revision 0) @@ -0,0 +1,30 @@ +#! /bin/sh +# $Id: checklist6,v 1.11 2010/01/13 10:20:03 tom Exp $ +# example showing the --colors option + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --help-button --item-help --colors --backtitle "\Z1No Such\Zn Organization" \ + --title "CHECKLIST BOX" "$@" \ + --checklist "Hi, this is a checklist box. You can use this to \n\ +present a list of choices which can be turned on or \n\ +off. If there are more items than can fit on the \n\ +screen, the list will be scrolled. You can use the \n\ +\Z4UP/DOWN\Zn arrow keys, the first letter of the choice as a \n\ +hot key, or the number keys 1-9 to choose an option. \n\ +Press \Zb\ZrSPACE\Zn to toggle an option on/off. \n\n\ + Which of the following are fruits?" 20 61 5 \ + "Apple" "It's an \Z1apple\Zn. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "fruit" \ + "Dog" "No, that's not my dog. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ON "not a fruit" \ + "Orange" "Yeah, that's juicy. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "fruit" \ + "Chicken" "Normally not a pet. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "not a fruit" \ + "" "No such pet. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "not anything" \ + "Cat" "No, never put a dog and a cat together! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" oN "not a fruit" \ + "Fish" "Cats like \Z4fish\Zn. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" On "not a fruit" \ + "Lemon" "You know how it \Zr\Zb\Z3tastes\Zn. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" on "the only one you wouldn't eat" 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/checklist6 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/checklist7 =================================================================== --- contrib/dialog/samples/checklist7 (revision 0) +++ contrib/dialog/samples/checklist7 (revision 0) @@ -0,0 +1,34 @@ +#! /bin/sh +# $Id: checklist7,v 1.11 2010/01/13 10:20:03 tom Exp $ +# "checklist6" with --separate-output + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --help-button \ + --item-help \ + --colors \ + --backtitle "\Z1No Such\Zn Organization" \ + --separate-output \ + --title "CHECKLIST BOX" "$@" \ + --checklist "Hi, this is a checklist box. You can use this to \n\ +present a list of choices which can be turned on or \n\ +off. If there are more items than can fit on the \n\ +screen, the list will be scrolled. You can use the \n\ +\Z4UP/DOWN\Zn arrow keys, the first letter of the choice as a \n\ +hot key, or the number keys 1-9 to choose an option. \n\ +Press \Zb\ZrSPACE\Zn to toggle an option on/off. \n\n\ + Which of the following are fruits?" 20 61 5 \ + "Apple" "It's an \Z1apple\Zn. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "fruit" \ + "Dog" "No, that's not my dog. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ON "not a fruit" \ + "Orange" "Yeah, that's juicy. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "fruit" \ + "Chicken" "Normally not a pet. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "not a fruit" \ + "" "No such pet. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off "not anything" \ + "Cat" "No, never put a dog and a cat together! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" oN "not a fruit" \ + "Fish" "Cats like \Z4fish\Zn. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" On "not a fruit" \ + "Lemon" "You know how it \Zr\Zb\Z3tastes\Zn. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" on "the only one you wouldn't eat" 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/checklist7 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/checklist8 =================================================================== --- contrib/dialog/samples/checklist8 (revision 0) +++ contrib/dialog/samples/checklist8 (revision 0) @@ -0,0 +1,33 @@ +#! /bin/sh +# $Id: checklist8,v 1.10 2010/01/13 10:20:03 tom Exp $ +# "checklist7" without --item-help + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --help-button \ + --colors \ + --backtitle "\Z1No Such\Zn Organization" \ + --separate-output \ + --title "CHECKLIST BOX" "$@" \ + --checklist "Hi, this is a checklist box. You can use this to \n\ +present a list of choices which can be turned on or \n\ +off. If there are more items than can fit on the \n\ +screen, the list will be scrolled. You can use the \n\ +\Z4UP/DOWN\Zn arrow keys, the first letter of the choice as a \n\ +hot key, or the number keys 1-9 to choose an option. \n\ +Press \Zb\ZrSPACE\Zn to toggle an option on/off. \n\n\ + Which of the following are fruits?" 20 61 5 \ + "Apple" "It's an \Z1apple\Zn. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off \ + "Dog" "No, that's not my dog. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ON \ + "Orange" "Yeah, that's juicy. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off \ + "Chicken" "Normally not a pet. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off \ + "" "No such pet. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off \ + "Cat" "No, never put a dog and a cat together! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" oN \ + "Fish" "Cats like \Z4fish\Zn. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" On \ + "Lemon" "You know how it \Zr\Zb\Z3tastes\Zn. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" on 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/checklist8 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/checklist9 =================================================================== --- contrib/dialog/samples/checklist9 (revision 0) +++ contrib/dialog/samples/checklist9 (revision 0) @@ -0,0 +1,13 @@ +#! /bin/sh +# $Id: checklist9,v 1.8 2010/01/13 10:20:03 tom Exp $ +# "checklist8" using --file + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG "$@" --file checklist9.txt 2>$tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/checklist9 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/wheel =================================================================== --- contrib/dialog/samples/wheel (revision 0) +++ contrib/dialog/samples/wheel (revision 0) @@ -0,0 +1,64 @@ +#!/bin/sh +# $Id: wheel,v 1.7 2010/01/13 01:44:12 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +TITLE="This screen was taken from ComeOn Point Installer! v0.9 by ComeOn Linux!" + +$DIALOG --print-maxsize 2>$tempfile +ROWS="`cut $tempfile -f1 -d, | cut -f2 -d:`" +COLS="`cut $tempfile -f2 -d,`" +rm $tempfile + +# account for widest labels +COLS=`expr $COLS - 30` + +# Takes an integer, multiplies it for COLS, divides for 132 +scalex() { + echo $[$1*$COLS/132] +} +scaley() { + echo $[$1*$ROWS/60] +} + +$DIALOG --backtitle "$TITLE" --no-shadow \ +--begin `scaley 27` `scalex 98` --infobox "pushd /var/log >/dev/null" 0 0 --and-widget \ +--begin `scaley 35` `scalex 95` --infobox "mkdir -p news -m 755" 0 0 --and-widget \ +--begin `scaley 45` `scalex 86` --infobox "chown news.news news" 0 0 --and-widget \ +--begin `scaley 48` `scalex 78` --infobox "cd /var/log/news" 0 0 --and-widget \ +--begin `scaley 51` `scalex 61` --infobox "mkdir -p OLD -m 755" 0 0 --and-widget \ +--begin `scaley 52` `scalex 47` --infobox "chown news.news OLD" 0 0 --and-widget \ +--begin `scaley 51` `scalex 40` --infobox "cd /var/spool" 0 0 --and-widget \ +--begin `scaley 48` `scalex 25` --infobox "mkdir -p news -m 775" 0 0 --and-widget \ +--begin `scaley 42` `scalex 13` --infobox "chown news.news news" 0 0 --and-widget \ +--begin `scaley 35` `scalex 4` --infobox "cd /var/spool/news" 0 0 --and-widget \ +--begin `scaley 27` `scalex 2` --infobox "CURMASK=`umask`" 0 0 --and-widget \ +--begin `scaley 19` `scalex 4` --infobox "umask 02" 0 0 --and-widget \ +--begin `scaley 11` `scalex 13` --infobox "mkdir -p out.going control junk in.coming" 0 0 --and-widget \ +--begin `scaley 5` `scalex 25` --infobox "chown news.news out.going control junk in.coming" 0 0 --and-widget \ +--begin `scaley 2` `scalex 37` --infobox "cd in.coming" 0 0 --and-widget \ +--begin `scaley 1` `scalex 46` --infobox "mkdir -p bad tmp" 0 0 --and-widget \ +--begin `scaley 2` `scalex 61` --infobox "chown news.news bad tmp" 0 0 --and-widget \ +--begin `scaley 5` `scalex 76` --infobox "umask $CURMASK" 0 0 --and-widget \ +--begin `scaley 11` `scalex 87` --infobox "ln -sf ~news /usr/local/lib/" 0 0 --and-widget \ +--begin `scaley 18` `scalex 95` --infobox "ln -sf ~news/inews /usr/bin/" 0 0 --and-widget \ +--begin `scaley 26` `scalex 97` --infobox "chmod 1777 /var/tmp" 0 0 --and-widget \ +--begin `scaley 34` `scalex 95` --infobox "cd ~news" 0 0 --and-widget \ +--begin `scaley 42` `scalex 87` --infobox "touch history history.dir history.pag errlog log" 0 0 --and-widget \ +--begin `scaley 47` `scalex 76` --infobox "chown news.news history* log errlog" 0 0 --and-widget \ +--infobox "Creating spooling and logging directories and files..." 0 0 --and-widget \ +--begin `scaley 51` `scalex 78` --infobox "chmod 664 history* log errlog" 0 0 --and-widget \ +--begin `scaley 52` `scalex 60` --infobox "echo \"control 0000000000 0000000001 y\" > active" 0 0 --and-widget \ +--begin `scaley 51` `scalex 42` --infobox "echo \"junk 0000000000 0000000001 y\" >> active" 0 0 --and-widget \ +--begin `scaley 48` `scalex 26` --infobox "chown news.news active" 0 0 --and-widget \ +--begin `scaley 42` `scalex 13` --infobox "echo \"control 814573260 usenet\" > active.times" 0 0 --and-widget \ +--begin `scaley 35` `scalex 4` --infobox "echo \"junk 814573260 usenet\" >> active.times" 0 0 --and-widget \ +--begin `scaley 27` `scalex 2` --infobox "chown news.news active.times" 0 0 --and-widget \ +--begin `scaley 19` `scalex 4` --infobox ":>newsgroups" 0 0 --and-widget \ +--begin `scaley 11` `scalex 12` --infobox "chown news.news newsgroups" 0 0 --and-widget \ +--sleep 2 --begin `scaley 6` `scalex 25` --infobox "popd >/dev/null" 0 0 --and-widget \ +--beep --msgbox "ComeOn Linux! :-)" 0 0 --and-widget \ +--begin 2 0 --title "/var/adm/debug. This is running while that down runs also" --tailboxbg /var/adm/debug 6 80 --and-widget \ +--begin 8 0 --title "/var/adm/messages. It tails the file in multitasking with /var/adm/debug" --tailbox /var/adm/messages -1 -1 Property changes on: contrib/dialog/samples/wheel ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/infobox =================================================================== --- contrib/dialog/samples/infobox (revision 0) +++ contrib/dialog/samples/infobox (revision 0) @@ -0,0 +1,21 @@ +#! /bin/sh +# $Id: infobox,v 1.8 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +left=10 +unit="seconds" +while test $left != 0 +do + +$DIALOG --sleep 1 \ + --title "INFO BOX" "$@" \ + --infobox "Hi, this is an information box. It is +different from a message box: it will +not pause waiting for input after displaying +the message. The pause here is only introduced +by the sleep command within dialog. +You have $left $unit to read this..." 10 52 +left=`expr $left - 1` +test $left = 1 && unit="second" +done Property changes on: contrib/dialog/samples/infobox ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/fselect-stdout =================================================================== --- contrib/dialog/samples/fselect-stdout (revision 0) +++ contrib/dialog/samples/fselect-stdout (revision 0) @@ -0,0 +1,9 @@ +#!/bin/sh +# $Id: fselect-stdout,v 1.6 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +RESULT=`$DIALOG --stdout --title "Please choose a file" "$@" --fselect $HOME/ 14 48` +retval=$? + +. ./report-string Property changes on: contrib/dialog/samples/fselect-stdout ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/radiolist1 =================================================================== --- contrib/dialog/samples/radiolist1 (revision 0) +++ contrib/dialog/samples/radiolist1 (revision 0) @@ -0,0 +1,33 @@ +#! /bin/sh +# $Id: radiolist1,v 1.1 2010/01/17 23:05:14 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --backtitle "No Such Organization" \ + --title "RADIOLIST BOX" --clear "$@" \ + --radiolist "Hi, this is a radiolist box. You can use this to \n\ +present a list of choices which can be turned on or \n\ +off. If there are more items than can fit on the \n\ +screen, the list will be scrolled. You can use the \n\ +UP/DOWN arrow keys, the first letter of the choice as a \n\ +hot key, or the number keys 1-9 to choose an option. \n\ +Press SPACE to toggle an option on/off. \n\n\ + Which of the following are fruits?" 20 61 5 \ + "Apple" "It's an apple." off \ + "Dog" "No, that's not my dog." ON \ + "Dog2" "No2, that's not my dog." off \ + "Dog3" "No3, that's not my dog." off \ + "Dog4" "No4, that's not my dog." off \ + "Dog5" "No5, that's not my dog." off \ + "Dog6" "No6, that's not my dog." off \ + "Orange" "Yeah, that's juicy." off \ + "Chicken" "Normally not a pet." off \ + "Cat" "No, never put a dog and a cat together!" off \ + "Fish" "Cats like fish." off \ + "Lemon" "You know how it tastes." off 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/radiolist1 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/radiolist2 =================================================================== --- contrib/dialog/samples/radiolist2 (revision 0) +++ contrib/dialog/samples/radiolist2 (revision 0) @@ -0,0 +1,30 @@ +#! /bin/sh +# $Id: radiolist2,v 1.8 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --ok-label Okay \ + --cancel-label 'Give Up' \ + --backtitle "No Such Organization" \ + --title "RADIOLIST BOX" --clear "$@" \ + --radiolist "Hi, this is a radiolist box. You can use this to \n\ +present a list of choices which can be turned on or \n\ +off. If there are more items than can fit on the \n\ +screen, the list will be scrolled. You can use the \n\ +UP/DOWN arrow keys, the first letter of the choice as a \n\ +hot key, or the number keys 1-9 to choose an option. \n\ +Press SPACE to toggle an option on/off. \n\n\ + Which of the following are fruits?" 20 61 5 \ + "Apple" "It's an apple." off \ + "Dog" "No, that's not my dog." ON \ + "Orange" "Yeah, that's juicy." off \ + "Chicken" "Normally not a pet." off \ + "Cat" "No, never put a dog and a cat together!" off \ + "Fish" "Cats like fish." off \ + "Lemon" "You know how it tastes." off 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/radiolist2 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/radiolist3 =================================================================== --- contrib/dialog/samples/radiolist3 (revision 0) +++ contrib/dialog/samples/radiolist3 (revision 0) @@ -0,0 +1,30 @@ +#! /bin/sh +# $Id: radiolist3,v 1.9 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --item-help --ok-label Okay \ + --cancel-label 'Give Up' \ + --backtitle "No Such Organization" \ + --title "RADIOLIST BOX" --clear "$@" \ + --radiolist "Hi, this is a radiolist box. You can use this to \n\ +present a list of choices which can be turned on or \n\ +off. If there are more items than can fit on the \n\ +screen, the list will be scrolled. You can use the \n\ +UP/DOWN arrow keys, the first letter of the choice as a \n\ +hot key, or the number keys 1-9 to choose an option. \n\ +Press SPACE to toggle an option on/off. \n\n\ + Which of the following are fruits?" 20 61 5 \ + "Apple" "It's an apple." off "Hint: this grows in a tree" \ + "Dog" "No, that's not my dog." ON "Hint: this likes trees" \ + "Orange" "Yeah, that's juicy." off "Hint: this is green when picked" \ + "Chicken" "Normally not a pet." off "Hint: not often in trees" \ + "Cat" "No, never put a dog and a cat together!" off "Hint: may be found in trees" \ + "Fish" "Cats like fish." off "Hint: usually not close to cats" \ + "Lemon" "You know how it tastes." off "Hint: like an orange" 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/radiolist3 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/radiolist4 =================================================================== --- contrib/dialog/samples/radiolist4 (revision 0) +++ contrib/dialog/samples/radiolist4 (revision 0) @@ -0,0 +1,30 @@ +#! /bin/sh +# $Id: radiolist4,v 1.9 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --help-button --help-label "Hints" --item-help --ok-label Okay \ + --cancel-label 'Give Up' \ + --backtitle "No Such Organization" \ + --title "RADIOLIST BOX" --clear "$@" \ + --radiolist "Hi, this is a radiolist box. You can use this to \n\ +present a list of choices which can be turned on or \n\ +off. If there are more items than can fit on the \n\ +screen, the list will be scrolled. You can use the \n\ +UP/DOWN arrow keys, the first letter of the choice as a \n\ +hot key, or the number keys 1-9 to choose an option. \n\ +Press SPACE to toggle an option on/off. \n\n\ + Which of the following are fruits?" 20 61 5 \ + "Apple" "It's an apple." off "Hint: this grows in a tree" \ + "Dog" "No, that's not my dog." ON "Hint: this likes trees" \ + "Orange" "Yeah, that's juicy." off "Hint: this is green when picked" \ + "Chicken" "Normally not a pet." off "Hint: not often in trees" \ + "Cat" "No, never put a dog and a cat together!" off "Hint: may be found in trees" \ + "Fish" "Cats like fish." off "Hint: usually not close to cats" \ + "Lemon" "You know how it tastes." off "Hint: like an orange" 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/radiolist4 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/report-button =================================================================== --- contrib/dialog/samples/report-button (revision 0) +++ contrib/dialog/samples/report-button (revision 0) @@ -0,0 +1,20 @@ +# $Id: report-button,v 1.2 2010/01/13 09:59:14 tom Exp $ +# Report button-only, no $RESULT +# vile:shmode + +case $retval in + $DIALOG_OK) + echo "OK";; + $DIALOG_CANCEL) + echo "Cancel pressed.";; + $DIALOG_HELP) + echo "Help pressed.";; + $DIALOG_EXTRA) + echo "Extra button pressed.";; + $DIALOG_ITEM_HELP) + echo "Item-help button pressed.";; + $DIALOG_ERROR) + echo "ERROR!";; + $DIALOG_ESC) + echo "ESC pressed.";; +esac Index: contrib/dialog/samples/whiptail.rc =================================================================== --- contrib/dialog/samples/whiptail.rc (revision 0) +++ contrib/dialog/samples/whiptail.rc (revision 0) @@ -0,0 +1,116 @@ +# $Id: whiptail.rc,v 1.2 2005/12/01 01:21:31 tom Exp $ +# Run-time configuration file for dialog, matches whiptail's color scheme. + +# Set aspect-ration. +aspect = 0 + +# Set separator (for multiple widgets output). +separate_widget = "" + +# Set tab-length (for textbox tab-conversion). +tab_len = 0 + +# Make tab-traversal for checklist, etc., include the list. +visit_items = ON + +# Shadow dialog boxes? This also turns on color. +use_shadow = ON + +# Turn color support ON or OFF +use_colors = ON + +# Screen color +screen_color = (YELLOW,BLUE,ON) + +# Shadow color +shadow_color = (BLACK,BLACK,ON) + +# Dialog box color +dialog_color = (BLACK,WHITE,OFF) + +# Dialog box title color +title_color = (RED,WHITE,ON) + +# Dialog box border color +border_color = (WHITE,WHITE,ON) + +# Active button color +button_active_color = (WHITE,RED,ON) + +# Inactive button color +button_inactive_color = (BLACK,WHITE,OFF) + +# Active button key color +button_key_active_color = (WHITE,RED,ON) + +# Inactive button key color +button_key_inactive_color = (BLACK,WHITE,OFF) + +# Active button label color +button_label_active_color = (WHITE,RED,ON) + +# Inactive button label color +button_label_inactive_color = (BLACK,WHITE,ON) + +# Input box color +inputbox_color = (BLACK,WHITE,OFF) + +# Input box border color +inputbox_border_color = (BLACK,WHITE,OFF) + +# Search box color +searchbox_color = (BLACK,WHITE,OFF) + +# Search box title color +searchbox_title_color = (RED,WHITE,ON) + +# Search box border color +searchbox_border_color = (WHITE,WHITE,ON) + +# File position indicator color +position_indicator_color = (RED,WHITE,ON) + +# Menu box color +menubox_color = (YELLOW,BLUE,OFF) + +# Menu box border color +menubox_border_color = (YELLOW,BLUE,ON) + +# Item color +item_color = (YELLOW,BLUE,OFF) + +# Selected item color +item_selected_color = (YELLOW,BLUE,ON) + +# Tag color +tag_color = (YELLOW,BLUE,ON) + +# Selected tag color +tag_selected_color = (YELLOW,BLUE,ON) + +# Tag key color +tag_key_color = (YELLOW,BLUE,OFF) + +# Selected tag key color +tag_key_selected_color = (WHITE,BLUE,ON) + +# Check box color +check_color = (YELLOW,BLUE,OFF) + +# Selected check box color +check_selected_color = (YELLOW,BLUE,ON) + +# Up arrow color +uarrow_color = (YELLOW,BLUE,ON) + +# Down arrow color +darrow_color = (YELLOW,BLUE,ON) + +# Item help-text color +itemhelp_color = (WHITE,BLACK,OFF) + +# Active form text color +form_active_text_color = (WHITE,BLUE,ON) + +# Form text color +form_text_color = (WHITE,CYAN,ON) Index: contrib/dialog/samples/msgbox6a =================================================================== --- contrib/dialog/samples/msgbox6a (revision 0) +++ contrib/dialog/samples/msgbox6a (revision 0) @@ -0,0 +1,17 @@ +#!/bin/sh +# $Id: msgbox6a,v 1.5 2010/01/13 10:26:52 tom Exp $ +# this differs from msgbox3 by making a window small enough to force scrolling. + +. ./setup-vars + +width=35 +while test $width != 61 +do +$DIALOG --title "MESSAGE BOX (width $width)" --clear "$@" \ + --msgbox "\ + .a .b .c .d .e .f .g .h .j .i .j .k .l .m .n .o .p .q .r .s .t .u .v .w .x .y .z + .A .B .C .D .E .F .G .H .J .I .J .K .L .M .N .O .P .Q .R .S .T .U .V .W .X .Y .Z +" 10 $width +test $? = $DIALOG_ESC && break +width=`expr $width + 1` +done Property changes on: contrib/dialog/samples/msgbox6a ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/inputbox1 =================================================================== --- contrib/dialog/samples/inputbox1 (revision 0) +++ contrib/dialog/samples/inputbox1 (revision 0) @@ -0,0 +1,23 @@ +#!/bin/sh +# $Id: inputbox1,v 1.13 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --cr-wrap \ + --title "INPUT BOX" --clear \ + --inputbox "$@" \ +"Hi, this is an input dialog box. You can use +this to ask questions that require the user +to input a string as the answer. You can +input strings of length longer than the +width of the input box, in that case, the +input field will be automatically scrolled. +You can use BACKSPACE to correct errors. + +Try entering your name below:" 0 0 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/inputbox1 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/timebox2 =================================================================== --- contrib/dialog/samples/timebox2 (revision 0) +++ contrib/dialog/samples/timebox2 (revision 0) @@ -0,0 +1,11 @@ +#!/bin/sh +# $Id: timebox2,v 1.7 2010/01/13 10:37:35 tom Exp $ + +. ./setup-vars + +exec 3>&1 +RESULT=`$DIALOG --title "TIMEBOX" "$@" --timebox "Please set the time..." 0 0 2>&1 1>&3` +retval=$? +exec 3>&- + +. ./report-string Property changes on: contrib/dialog/samples/timebox2 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/inputbox2 =================================================================== --- contrib/dialog/samples/inputbox2 (revision 0) +++ contrib/dialog/samples/inputbox2 (revision 0) @@ -0,0 +1,20 @@ +#!/bin/sh +# $Id: inputbox2,v 1.9 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --title "INPUT BOX" --clear "$@" \ + --inputbox "Hi, this is an input dialog box. You can use \n +this to ask questions that require the user \n +to input a string as the answer. You can \n +input strings of length longer than the \n +width of the input box, in that case, the \n +input field will be automatically scrolled. \n +You can use BACKSPACE to correct errors. \n\n +Try entering your name below:" 16 51 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/inputbox2 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/passwordform1-utf8 =================================================================== --- contrib/dialog/samples/passwordform1-utf8 (revision 0) +++ contrib/dialog/samples/passwordform1-utf8 (revision 0) @@ -0,0 +1,71 @@ +#! /bin/sh +# $Id: passwordform1-utf8,v 1.7 2010/01/13 10:47:35 tom Exp $ + +. ./setup-vars + +. ./setup-utf8 + +backtitle="An Example for the use of --passwordform:" + +ids=`id|sed -e 's/([^)]*)//g'` +uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` +gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` + +user="DOG" +home=/usr/home/$user + +returncode=0 +while test $returncode != 1 && test $returncode != 250 +do +exec 3>&1 +value=`$DIALOG --ok-label "Submit" \ + --backtitle "$backtitle" \ + --insecure "$@" \ + --passwordform "Here is a possible piece of a configuration program." \ +20 50 0 \ + "Username:" 1 1 "$user" 1 10 10 0 \ + "UID:" 2 1 "$uid" 2 10 8 0 \ + "GID:" 3 1 "$gid" 3 10 8 0 \ + "HOME:" 4 1 "$home" 4 10 40 0 \ +2>&1 1>&3` +returncode=$? +exec 3>&- + +show=`echo "$value" |sed -e 's/^/ /'` + + case $returncode in + $DIALOG_CANCEL) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" \ + --yesno "Really quit?" 10 30 + case $? in + $DIALOG_OK) + break + ;; + $DIALOG_CANCEL) + returncode=99 + ;; + esac + ;; + $DIALOG_OK) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" --no-collapse --cr-wrap \ + --msgbox "Resulting data:\n\ +$show" 10 40 + ;; + $DIALOG_HELP) + echo "Button 2 (Help) pressed." + exit + ;; + $DIALOG_EXTRA) + echo "Button 3 (Extra) pressed." + exit + ;; + *) + echo "Return code was $returncode" + exit + ;; + esac +done Property changes on: contrib/dialog/samples/passwordform1-utf8 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/inputbox3 =================================================================== --- contrib/dialog/samples/inputbox3 (revision 0) +++ contrib/dialog/samples/inputbox3 (revision 0) @@ -0,0 +1,21 @@ +#!/bin/sh +# $Id: inputbox3,v 1.7 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --nocancel \ + --title "INPUT BOX" --clear "$@" \ + --inputbox "Hi, this is an input dialog box. You can use \n\ +this to ask questions that require the user \n\ +to input a string as the answer. You can \n\ +input strings of length longer than the \n\ +width of the input box, in that case, the \n\ +input field will be automatically scrolled. \n\ +You can use BACKSPACE to correct errors. \n\n\ +Try entering your name below:" 16 51 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/inputbox3 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/inputbox4 =================================================================== --- contrib/dialog/samples/inputbox4 (revision 0) +++ contrib/dialog/samples/inputbox4 (revision 0) @@ -0,0 +1,20 @@ +#!/bin/sh +# $Id: inputbox4,v 1.7 2010/01/13 10:28:12 tom Exp $ +# An example which does not use temporary files, as suggested by Cary Evans: + +. ./setup-vars + +exec 3>&1 +RESULT=`$DIALOG --title "INPUT BOX" --clear "$@" \ + --inputbox "Hi, this is an input dialog box. You can use \n +this to ask questions that require the user \n +to input a string as the answer. You can \n +input strings of length longer than the \n +width of the input box, in that case, the \n +input field will be automatically scrolled. \n +You can use BACKSPACE to correct errors. \n\n +Try entering your name below:" 16 51 2>&1 1>&3` +retval=$? +exec 3>&- + +. ./report-string Property changes on: contrib/dialog/samples/inputbox4 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/inputbox5 =================================================================== --- contrib/dialog/samples/inputbox5 (revision 0) +++ contrib/dialog/samples/inputbox5 (revision 0) @@ -0,0 +1,21 @@ +#!/bin/sh +# $Id: inputbox5,v 1.7 2010/01/13 10:20:03 tom Exp $ +# use --output-fd to write to a different output than stderr + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --title "INPUT BOX" --clear --output-fd 4 "$@" \ + --inputbox "Hi, this is an input dialog box. You can use \n +this to ask questions that require the user \n +to input a string as the answer. You can \n +input strings of length longer than the \n +width of the input box, in that case, the \n +input field will be automatically scrolled. \n +You can use BACKSPACE to correct errors. \n\n +Try entering your name below:" 16 51 4> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/inputbox5 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/editbox =================================================================== --- contrib/dialog/samples/editbox (revision 0) +++ contrib/dialog/samples/editbox (revision 0) @@ -0,0 +1,45 @@ +#!/bin/sh +# $Id: editbox,v 1.13 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +DIALOG_ERROR=254 +export DIALOG_ERROR + +. ./setup-edit + +cat << EOF > $input +Hi, this is an edit box. It can be used to edit text from a file. + +It's like a simple text editor, with these keys implemented: + +PGDN - Move down one page +PGUP - Move up one page +DOWN - Move down one line +UP - Move up one line +DELETE - Delete the current character +BACKSPC - Delete the previous character + +Unlike Xdialog, it does not do these: + +CTRL C - Copy text +CTRL V - Paste text + +Because dialog normally uses TAB for moving between fields, +this editbox uses CTRL/V as a literal-next character. You +can enter TAB characters by first pressing CTRL/V. This +example contains a few tab characters. + +It supports the mouse - but only for positioning in the editbox, +or for clicking on buttons. Your terminal (emulator) may support +cut/paste. + +Try to input some text below: + +EOF + +$DIALOG --title "EDIT BOX" \ + --fixed-font "$@" --editbox $input 0 0 2>$output +retval=$? + +. ./report-edit Property changes on: contrib/dialog/samples/editbox ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/inputbox7 =================================================================== --- contrib/dialog/samples/inputbox7 (revision 0) +++ contrib/dialog/samples/inputbox7 (revision 0) @@ -0,0 +1,29 @@ +#!/bin/sh +# $Id: inputbox7,v 1.7 2010/01/13 10:20:03 tom Exp $ +# An example which produces two widget outputs. + +. ./setup-vars + +MSG='Hi, this is an input dialog box. You can use \n +this to ask questions that require the user \n +to input a string as the answer. You can \n +input strings of length longer than the \n +width of the input box, in that case, the \n +input field will be automatically scrolled. \n +You can use BACKSPACE to correct errors. \n\n +Try entering your name below:' + +# separate with a line-break (newline) +SEP=' +' + +exec 3>&1 +RESULT=`$DIALOG --title "INPUT BOX" --clear --separate-widget "$SEP" "$@" \ + --inputbox "$MSG" 16 51 \ + --title "ANOTHER INPUT BOX" \ + --inputbox "$MSG" 16 51 \ +2>&1 1>&3` +retval=$? +exec 3>&- + +. ./report-string Property changes on: contrib/dialog/samples/inputbox7 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/form1-extra =================================================================== --- contrib/dialog/samples/form1-extra (revision 0) +++ contrib/dialog/samples/form1-extra (revision 0) @@ -0,0 +1,69 @@ +#! /bin/sh +# $Id: form1-extra,v 1.5 2010/01/13 10:47:35 tom Exp $ + +. ./setup-vars + +backtitle="An Example for the use of --form:" + +ids=`id|sed -e 's/([^)]*)//g'` +uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` +gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` + +user="$USER" +home="$HOME" + +returncode=0 +while test $returncode != 1 && test $returncode != 250 +do +exec 3>&1 +value=`$DIALOG --ok-label "Submit" \ + --extra-button \ + --backtitle "$backtitle" "$@" \ + --form "Here is a possible piece of a configuration program." \ +20 50 0 \ + "Username:" 1 1 "$user" 1 10 10 0 \ + "UID:" 2 1 "$uid" 2 10 8 0 \ + "GID:" 3 1 "$gid" 3 10 8 0 \ + "HOME:" 4 1 "$home" 4 10 40 0 \ +2>&1 1>&3` +returncode=$? +exec 3>&- + +show=`echo "$value" |sed -e 's/^/ /'` + + case $returncode in + $DIALOG_CANCEL) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" \ + --yesno "Really quit?" 10 30 + case $? in + $DIALOG_OK) + break + ;; + $DIALOG_CANCEL) + returncode=99 + ;; + esac + ;; + $DIALOG_OK) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" --no-collapse --cr-wrap \ + --msgbox "Resulting data:\n\ +$show" 10 40 + ;; + $DIALOG_HELP) + echo "Button 2 (Help) pressed." + exit + ;; + $DIALOG_EXTRA) + echo "Button 3 (Extra) pressed." + exit + ;; + *) + echo "Return code was $returncode" + exit + ;; + esac +done Property changes on: contrib/dialog/samples/form1-extra ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/form1-utf8 =================================================================== --- contrib/dialog/samples/form1-utf8 (revision 0) +++ contrib/dialog/samples/form1-utf8 (revision 0) @@ -0,0 +1,71 @@ +#! /bin/sh +# $Id: form1-utf8,v 1.7 2010/01/13 10:47:35 tom Exp $ + +. ./setup-vars + +. ./setup-utf8 + +backtitle="An Example for the use of --form:" + +ids=`id|sed -e 's/([^)]*)//g'` +uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` +gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` + +user="DOG" +home=/usr/home/$user + +returncode=0 +while test $returncode != 1 && test $returncode != 250 +do +exec 3>&1 +value=`$DIALOG --ok-label "Submit" \ + --backtitle "$backtitle" \ + --insecure "$@" \ + --form "Here is a possible piece of a configuration program." \ +20 50 0 \ + "Username:" 1 1 "$user" 1 10 10 0 \ + "UID:" 2 1 "$uid" 2 10 8 0 \ + "GID:" 3 1 "$gid" 3 10 8 0 \ + "HOME:" 4 1 "$home" 4 10 40 0 \ +2>&1 1>&3` +returncode=$? +exec 3>&- + +show=`echo "$value" |sed -e 's/^/ /'` + + case $returncode in + $DIALOG_CANCEL) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" \ + --yesno "Really quit?" 10 30 + case $? in + $DIALOG_OK) + break + ;; + $DIALOG_CANCEL) + returncode=99 + ;; + esac + ;; + $DIALOG_OK) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" --no-collapse --cr-wrap \ + --msgbox "Resulting data:\n\ +$show" 10 40 + ;; + $DIALOG_HELP) + echo "Button 2 (Help) pressed." + exit + ;; + $DIALOG_EXTRA) + echo "Button 3 (Extra) pressed." + exit + ;; + *) + echo "Return code was $returncode" + exit + ;; + esac +done Property changes on: contrib/dialog/samples/form1-utf8 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/timebox2-stdout =================================================================== --- contrib/dialog/samples/timebox2-stdout (revision 0) +++ contrib/dialog/samples/timebox2-stdout (revision 0) @@ -0,0 +1,10 @@ +#!/bin/sh +# $Id: timebox2-stdout,v 1.5 2010/01/13 10:37:55 tom Exp $ + +. ./setup-vars + +RESULT=`$DIALOG --stdout --title "TIMEBOX" "$@" --timebox "Please set the time..." 0 0` + +retval=$? + +. ./report-string Property changes on: contrib/dialog/samples/timebox2-stdout ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/listing =================================================================== --- contrib/dialog/samples/listing (revision 0) +++ contrib/dialog/samples/listing (revision 0) @@ -0,0 +1,8 @@ +#!/bin/sh +# $Id: listing,v 1.2 2007/05/28 12:40:36 tom Exp $ +while true +do +ls -lrt +date +sleep 1 +done Property changes on: contrib/dialog/samples/listing ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/mixedform2 =================================================================== --- contrib/dialog/samples/mixedform2 (revision 0) +++ contrib/dialog/samples/mixedform2 (revision 0) @@ -0,0 +1,61 @@ +#! /bin/sh +# $Id: mixedform2,v 1.5 2010/01/13 10:47:35 tom Exp $ + +. ./setup-vars + +backtitle="An Example for the use of --mixedform:" +returncode=0 +while test $returncode != 1 && test $returncode != 250 +do +returncode=$? +exec 3>&1 +value=`$DIALOG --title "Mixed form demonstration" --ok-label "Submit" \ + --backtitle "$backtitle" \ + --insecure "$@" \ + --mixedform "Here is a possible piece of a configuration program." \ +20 50 0 \ + "Username :" 1 1 "Kiran" 1 20 10 0 2 \ + "Password :" 2 1 "pass" 2 20 8 0 3 \ + "Retype Password :" 3 1 "pass" 3 20 8 0 3 \ + "HOME :" 4 1 "Cisco" 4 20 40 0 2 \ +2>&1 1>&3` +returncode=$? +exec 3>&- +show=`echo "$value" |sed -e 's/^/ /'` + + case $returncode in + $DIALOG_CANCEL) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" \ + --yesno "Really quit?" 10 30 + case $? in + $DIALOG_OK) + break + ;; + $DIALOG_CANCEL) + returncode=99 + ;; + esac + ;; + $DIALOG_OK) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" --no-collapse --cr-wrap \ + --msgbox "Resulting data:\n\ +$show" 10 40 + ;; + $DIALOG_HELP) + echo "Button 2 (Help) pressed." + exit + ;; + $DIALOG_EXTRA) + echo "Button 3 (Extra) pressed." + exit + ;; + *) + echo "Return code was $returncode" + exit + ;; + esac +done Property changes on: contrib/dialog/samples/mixedform2 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/editbox2 =================================================================== --- contrib/dialog/samples/editbox2 (revision 0) +++ contrib/dialog/samples/editbox2 (revision 0) @@ -0,0 +1,45 @@ +#!/bin/sh +# $Id: editbox2,v 1.7 2010/01/13 10:20:03 tom Exp $ +# example with extra- and help-buttons + +. ./setup-vars + +. ./setup-edit + +cat << EOF > $input +Hi, this is an edit box. It can be used to edit text from a file. + +It's like a simple text editor, with these keys implemented: + +PGDN - Move down one page +PGUP - Move up one page +DOWN - Move down one line +UP - Move up one line +DELETE - Delete the current character +BACKSPC - Delete the previous character + +Unlike Xdialog, it does not do these: + +CTRL C - Copy text +CTRL V - Paste text + +Because dialog normally uses TAB for moving between fields, +this editbox uses CTRL/V as a literal-next character. You +can enter TAB characters by first pressing CTRL/V. This +example contains a few tab characters. + +It supports the mouse - but only for positioning in the editbox, +or for clicking on buttons. Your terminal (emulator) may support +cut/paste. + +Try to input some text below: + +EOF + +$DIALOG --title "EDIT BOX" \ + --extra-button \ + --help-button \ + --fixed-font "$@" --editbox $input 0 0 2>$output +retval=$? + +. ./report-edit Property changes on: contrib/dialog/samples/editbox2 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/yesno-utf8 =================================================================== --- contrib/dialog/samples/yesno-utf8 (revision 0) +++ contrib/dialog/samples/yesno-utf8 (revision 0) @@ -0,0 +1,14 @@ +#! /bin/sh +# $Id: yesno-utf8,v 1.7 2010/01/14 01:11:23 tom Exp $ + +. ./setup-vars + +. ./setup-utf8 + +DIALOG_ERROR=254 +export DIALOG_ERROR + +$DIALOG "$@" --yesno "Are you a DOG?" 0 0 +retval=$? + +. ./report-yesno Property changes on: contrib/dialog/samples/yesno-utf8 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/editbox3 =================================================================== --- contrib/dialog/samples/editbox3 (revision 0) +++ contrib/dialog/samples/editbox3 (revision 0) @@ -0,0 +1,18 @@ +#!/bin/sh +# $Id: editbox3,v 1.7 2010/01/13 10:20:03 tom Exp $ +# example with extra- and help-buttons + +. ./setup-vars + +. ./setup-edit + +cat << EOF > $input +EOF + +$DIALOG --title "EDIT BOX" \ + --extra-button \ + --help-button \ + --fixed-font "$@" --editbox $input 0 0 2>$output +retval=$? + +. ./report-edit Property changes on: contrib/dialog/samples/editbox3 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/menubox-8bit =================================================================== --- contrib/dialog/samples/menubox-8bit (revision 0) +++ contrib/dialog/samples/menubox-8bit (revision 0) @@ -0,0 +1,29 @@ +#!/bin/sh +# $Id: menubox-8bit,v 1.6 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +. ./testdata-8bit + +$DIALOG --clear --title "MENU BOX" "$@" \ + --menu "Hi, this is a menu box. You can use this to \n\ +present a list of choices for the user to \n\ +choose. If there are more items than can fit \n\ +on the screen, the menu will be scrolled. \n\ +You can use the UP/DOWN arrow keys, the first \n\ +letter of the choice as a hot key, or the \n\ +number keys 1-9 to choose an option.\n\ +Try it now!\n\n\ + Choose the OS you like:" 20 51 4 \ + "`./rotated-data 0 $SAMPLE`" "The Great Unix Clone for 386/486" \ + "`./rotated-data 1 $SAMPLE`" "Another free Unix Clone for 386/486" \ + "`./rotated-data 2 $SAMPLE`" "IBM OS/2" \ + "`./rotated-data 3 $SAMPLE`" "Microsoft Windows NT" \ + "`./rotated-data 4 $SAMPLE`" "IBM PC DOS" \ + "`./rotated-data 5 $SAMPLE`" "Microsoft DOS" 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/menubox-8bit ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/editbox4 =================================================================== --- contrib/dialog/samples/editbox4 (revision 0) +++ contrib/dialog/samples/editbox4 (revision 0) @@ -0,0 +1,45 @@ +#!/bin/sh +# $Id: editbox4,v 1.1 2010/01/17 22:29:50 tom Exp $ + +. ./setup-vars + +DIALOG_ERROR=254 +export DIALOG_ERROR + +. ./setup-edit + +cat << EOF > $input +Hi, this is an edit box. It can be used to edit text from a file. + +It's like a simple text editor, with these keys implemented: + +PGDN - Move down one page +PGUP - Move up one page +DOWN - Move down one line +UP - Move up one line +DELETE - Delete the current character +BACKSPC - Delete the previous character + +Unlike Xdialog, it does not do these: + +CTRL C - Copy text +CTRL V - Paste text + +Because dialog normally uses TAB for moving between fields, +this editbox uses CTRL/V as a literal-next character. You +can enter TAB characters by first pressing CTRL/V. This +example contains a few tab characters. + +It supports the mouse - but only for positioning in the editbox, +or for clicking on buttons. Your terminal (emulator) may support +cut/paste. + +Try to input some text below: + +EOF + +$DIALOG --title "EDIT BOX" \ + --fixed-font "$@" --editbox $input 20 40 2>$output +retval=$? + +. ./report-edit Property changes on: contrib/dialog/samples/editbox4 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/copismall =================================================================== --- contrib/dialog/samples/copismall (revision 0) +++ contrib/dialog/samples/copismall (revision 0) @@ -0,0 +1,296 @@ +#!/bin/bash +# $Id: copismall,v 1.8 2010/01/13 10:26:52 tom Exp $ +# +# ComeOn Point Installer! v0.9a.small (small version for cdialog v0.9a) +# - installa il point in modo visuale e auto-detecting. Versione light. +# +# AUTHOR: Beppe (beppe.dem@nsm.it) +# +# 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. +# + +# THIS IS NOT THE ORIGINAL VERSION!!!! This files was adequate to be +# a demo for cdialog v0.9a+. However it doesn't include all its features. +# Look for one of the free ComeOn Linux! tools to have a complete +# demo of cdialog. ComeOn Linux! follows the GNU philosophy. +# Send peacefully a mail to demarco_p@abramo.it for more info. + +. ./setup-vars + +#COMEONDIR=/usr/lib/ComeOn +#POINTDIR=$COMEONDIR/point +POINTDIR=`pwd` + +AKASETUP=$POINTDIR/.akasetup +PNTSETUP=$POINTDIR/.pntsetup +EMSIFILE=$POINTDIR/.emsi +COPIUSER=$POINTDIR/.copi.user +COPIVER=v0.9a.small +TITLE="ComeOn Point Installer! $COPIVER -+- (c) 1996 ComeOn Linux!" + +#FUNCSVER=v0.9.2 +#FUNCSDIR=$POINTDIR/funcs-$FUNCSVER +FUNCSDIR=$POINTDIR/copifuncs + +#COPIDIR=$POINTDIR/copi-$COPIVER +#. $COPIDIR/copishellvars + +#POINTVER="v1.1" # ComeOn Point version + +if [ $LOGNAME != root ] +then + $DIALOG --backtitle "$TITLE" --title "Error!" --beep --msgbox "Questo programma per funzionare correttamente deve essere avviato dall'amministratore di sistema (root)." 0 0 + exit +fi + + +$DIALOG --backtitle "$TITLE" --title "Are you sure?" --cr-wrap --msgbox "Questo installer procedera' in modalita' +auto-detect all'installazione del point. +Premi <Enter> per iniziare o <Esc> per uscire. " 0 0 + +if [ $? = $DIALOG_CANCEL -o $? = $DIALOG_ESC ]; then + exit +fi + + +pushd $FUNCSDIR >/dev/null +. ./copi.funcs +. ./common.funcs +. ./admin.funcs + +############################################################################### +find_incompatible_packages + +if [ "$PKG_TO_REMOVE" ] +then + $DIALOG --backtitle "$TITLE" --beep --title "Problem detected" --msgbox "Attenzione, prima di poter continuare bisogna avviare pkgtool e rimuovere i seguenti packages: $PKG_TO_REMOVE." 0 0 + exit +fi + +############################################################################### +mkstemp dialog + +find_necessary_packages + +if [ "$PKG_TO_INSTALL" ] +then + echo -n "Attenzione, prima di poter continuare bisogna avviare setup ed installare i seguenti packages dai disk sets N (quelli del Networking): $PKG_TO_INSTALL." >$tmp_dialog + + if [ "`echo $PKG_TO_INSTALL | grep tcpip`" ] + then + echo -n " Ricordarsi poi di effettuare lo shutdown per rendere effettive le modifiche." >>$tmp_dialog + fi + + $DIALOG --backtitle "$TITLE" --beep --title "Problem detected" --msgbox "`cat $tmp_dialog`" 0 0 + + rm $tmp_dialog + exit +fi + +############################################################################### +mkstemp smailp + +SMAILTGZ="" +if [ ! -d /usr/lib/smail ] +then + $DIALOG --backtitle "$TITLE" --title "Smail not found" --inputbox "Bisogna installare Smail, per cui inserire il percorso completo di dove trovarne i binari compressi" 0 0 "/cdrom/sunsite/system/Mail/delivery/smail-linuxbin-3.1.29.1.tar.gz" 2>$tmp_smailp + SMAILTGZ="`cat $tmp_smailp`" + rm $tmp_smailp + while [ ! -f "$SMAILTGZ" ] + do + $DIALOG --backtitle "$TITLE" --beep --title "Archive not found" --inputbox "Percorso di file \"$SMAILTGZ\" non valido, controllarne la correttezza." 0 0 "/cdrom/sunsite/system/Mail/delivery/smail-linuxbin-3.1.29.1.tar.gz" 2>$tmp_smailp + SMAILTGZ="`cat $tmp_smailp`" + rm $tmp_smailp + done +fi + +############################################################################### +mkstemp target +mkstemp asetup +mkstemp psetup + +AKA="" +while [ ! "$AKA" ] +do + $DIALOG --backtitle "$TITLE" --title "Primary address" --inputbox "Inserire il proprio address principale, completo di point e di domain. Il poll sara' effettuato per default dal boss corrispondente." 0 0 "2:335/722.7@fidonet" 2>$tmp_target + AKAFTN="`cat $tmp_target`" + rm $tmp_target + fidonetpoint2int $AKAFTN + AKA="$_RETVAL" +done +echo -n "`echo $AKA | cut -f2- -d.`:" >$tmp_asetup +echo -n "`echo $AKA | cut -f1 -d. | cut -c2-`:" >$tmp_psetup +AKASFTN="$AKAFTN" +AKAS="$AKA" +while [ "$AKAFTN" ] +do + $DIALOG --backtitle "$TITLE" --title "AKAs" --inputbox "Inserire un eventuale address secondario, oppure lasciare la riga vuota per proseguire. Attenzione: nel caso si abbiano piu' indirizzi sulla stessa rete, bisognera' configurare solo uno di questi. Gli indirizzi correntemente definiti sono: $AKASFTN" 0 0 2>$tmp_target + AKAFTN="`cat $tmp_target`" + rm $tmp_target + if [ "$AKAFTN" ] + then + fidonetpoint2int $AKAFTN + AKA="$_RETVAL" + if [ "`echo $AKAS | grep \".\`echo $AKA | cut -f5 -d.\`.\"`" ] + then + $DIALOG --backtitle "$TITLE" --beep --title "Invalid address" --msgbox "Non si possono avere piu' indirizzi sullo stesso dominio (net)." 0 0 + else + AKASFTN="$AKASFTN $AKAFTN" + AKAS="$AKAS $AKA" + echo -n "`echo $AKA | cut -f2- -d.`:" >>$tmp_asetup + echo -n "`echo $AKA | cut -f1 -d. | cut -c2-`:" >>$tmp_psetup + fi + fi +done +echo ":" >>$tmp_asetup +echo ":" >>$tmp_psetup +save $AKASETUP +save $PNTSETUP +mv $tmp_asetup $AKASETUP +mv $tmp_psetup $PNTSETUP + +############################################################################### +mkstemp hostnm + +$DIALOG --backtitle "$TITLE" --title "Hostname" --inputbox "Inserire l'hostname di questo computer qualora si abbia una rete gia' configurata, altrimenti inventarne uno fittizio da assegnare e questa macchina verra' configurata per il loopback." 0 0 "quark.comeon.org" 2>$tmp_hostnm +NEW_HOSTNAME="`cat $tmp_hostnm`" +rm $tmp_hostnm + +############################################################################### +mkstemp master + +$DIALOG --backtitle "$TITLE" --title "Point admin" --inputbox "Scegliere l'user principale per la gestione e l'uso del point. Se l'user non esiste, verra' creato. Se esiste, ne verranno adattate le informazioni quali nome, gruppi, etc." 0 0 "beppe" --and-widget --title "Insert SysOp's name" --inputbox "Inserire nome e cognome del gestore ed utilizzatore principale del point (il proprio nome)." 0 0 "Giuseppe De Marco" --and-widget --title "Choose editor" --inputbox "Scegliere l'editor da usare per scrivere i messaggi" 0 0 "vim" 2>$tmp_master +POST_USER="`cut $tmp_master -f1`" +POST_NAME="`cut $tmp_master -f2`" +POST_EDIT="`cut $tmp_master -f3`" +rm $tmp_master +save $COPIUSER +echo $POST_USER >$COPIUSER + +############################################################################### +mkstemp expire +mkstemp origin + +$DIALOG --backtitle "$TITLE" --title "Origin" --inputbox "Scegliere l'Origin del sistema" 9 60 "$POST_USER's linux box" 2>$tmp_origin +NEW_ORIGIN="`cat $tmp_origin`" +rm $tmp_origin + +$DIALOG --backtitle "$TITLE" --title "News expiring" --inputbox "Decidere per quanti giorni i messaggi echomail (le news) dovranno transitare sul sistema prima di venire cancellati automaticamente da news.daily. Inserire never se si vuole che non vengano mai cancellati. Sono ammesse cifre decimali (i.e. 25.5). Notare comunque che il valore qui inserito e' quello di default, ma per ogni singola area (newsgroup) sara' possibile specificare poi un valore appropriato." 0 0 "30" 2>$tmp_expire +KEEPDAYS="`cat $tmp_expire`" +rm $tmp_expire + +############################################################################### +mkstemp dialer +mkstemp ifmail +mkstemp mailvr +mkstemp passwd + +IFMAILTGZ="" +IFMAILVERS="" +if [ ! -d /usr/lib/ifmail -o ! -d /etc/ifmail -o ! -d /var/log/ifmail -o ! -f /usr/lib/ifmail/ifcico ] +then + $DIALOG --backtitle "$TITLE" --title "ifmail not found" --inputbox "Inserire il percorso COMPLETO dei sorgenti compressi di ifmail che verranno decompressi in /usr/src e compilati." 0 0 "/cdrom/sunsite/system/Mail/transport/ifmail-2.8b.tar.gz" 2>$tmp_ifmail + IFMAILTGZ="`cat $tmp_ifmail`" + rm $tmp_ifmail + while [ ! -f "$IFMAILTGZ" ] + do + $DIALOG --backtitle "$TITLE" --beep --title "invalid filename" --inputbox "Percorso di file \"$IFMAILTGZ\" non valido, controllarne la correttezza." 0 0 "/cdrom/sunsite/system/Mail/transport/ifmail-2.8b.tar.gz" 2>$tmp_ifmail + IFMAILTGZ="`cat $tmp_ifmail`" + rm $tmp_ifmail + done + + $DIALOG --backtitle "$TITLE" --title "ifmail version" --inputbox "Specificare la versione di ifmail" 0 0 "2.8b" 2>$tmp_mailvr + IFMAILVERS="`cat $tmp_mailvr` + ComeOn Point $POINTVER" + rm $tmp_mailvr +fi + +IAKA=1 +PASSW="" +AKA="`cut $AKASETUP -f$IAKA -d:`" +while [ "$AKA" ] +do + int2fido $AKA + AKAFTN="$_RETVAL" + $DIALOG --backtitle "$TITLE" --title "Password" --inputbox "Specificare la password di sessione e per i pacchetti per il nodo $AKAFTN -- attenzione che alcuni mailers accettano solo passwords da 8 caratteri in maiuscolo!!" 0 0 "MYPASSWD" 2>$tmp_passwd + PASSW="$PASSW`cat $tmp_passwd`:" + rm $tmp_passwd + IAKA=$[$IAKA+1] + AKA="`cut $AKASETUP -f$IAKA -d:`" +done +PASSW="$PASSW:" + +$DIALOG --backtitle "$TITLE" \ +--title "Modem speed" --inputbox "Specificare la velocita' del proprio modem (che sta su /dev/modem)" 0 0 "16800" --and-widget \ +--title "System name" --inputbox "Specificare il nome del sistema per il pacchetto EMSI" 0 0 "`cat $COPIUSER`'s linux point" --and-widget \ +--title "Location" --inputbox "Inserire la localita' fisica in cui risiede il sistema" 0 0 "Catanzaro, Italy - Europe" --and-widget \ +--title "Phone number" --inputbox "Inserire il proprio numero di telefono in formato internazionale, cioe' completo di doppio prefisso (xx-yyy-zzzzzz)" 0 0 "39-961-31997" --and-widget \ +--title "International call prefix" --inputbox "Specificare il prefisso da comporre per poter effettuare una chiamata internazionale (se ci si trova in Italia ad es. bisogna inserire 00)" 0 0 "00" --and-widget \ +--title "Long-distance call prefix" --inputbox "Specificare il prefisso da comporre per poter effettuare una chiamata interurbana in ambito nazionale, che verra' sostituito al prefisso della propria nazione quando incontrato in nodelist (per l'Italia ad es. bisogna inserire 0, che sostituira' il 39)" 0 0 "0" --and-widget \ +--title "Pointlist flags" --inputbox "Inserire eventuali flags stile pointlist per il pacchetto EMSI" 0 0 "MO,V32B,V42B,ZYX" --and-widget \ +--title "Modem dialing" --inputbox "Inserire la stringa da inviare al modem per comporre un numero telefonico" 0 0 "ATDT" 2>$tmp_dialer + +echo -en "\t$POST_NAME\t\t" >>$tmp_dialer +save $EMSIFILE +mv $tmp_dialer $EMSIFILE + +############################################################################### + +if [ -d /etc/smail ] +then + SMAILCFGDIR=/etc/smail +else + SMAILCFGDIR=/usr/lib/smail +fi + +############################################################################### + +$DIALOG --backtitle "$TITLE" --title "First step completed!" --msgbox "OK, ora ho tutte le informazioni necessarie per poter installare il point. Da qui in poi faro' tutto da solo, quindi ci si puo' tranquillamente andare a prendere un caffe'. :-)" 0 0 + +############################################################################### + +killall sendmail 2>/dev/null +if [ $SMAILTGZ ]; then tar zxvf $SMAILTGZ -C / >/dev/null; fi +/usr/sbin/sendmail -bd -q15m + +if [ ! "`ping -c1 $NEW_HOSTNAME | grep \"1 packets received\"`" ]; then + configure_loopback $NEW_HOSTNAME +fi + +add_postmaster "$POST_USER" "$POST_NAME" +add_alias "$POST_NAME" "$POST_USER" +configure_trn "$POST_USER" "$POST_EDIT" +configure_elm "$POST_USER" "$POST_EDIT" + +comment_nntp_in_inetdconf +set_organization "$NEW_ORIGIN" +create_innconf_newsfeeds_distrib +create_expirectl $KEEPDAYS +create_nnrpaccess +create_hostsnntp +create_dirs_and_files +install_rcnews +install_crontab_news +if [ $IFMAILTGZ ]; then + install_ifmail "$IFMAILTGZ" /usr/lib/ifmail /etc/ifmail /var/log/ifmail "$IFMAILVERS" /usr/src +fi +configure_ifmail /usr/lib/ifmail /etc/ifmail /var/log/ifmail "$PASSW" +configure_smail $SMAILCFGDIR + +############################################################################### +$DIALOG --backtitle "$TITLE" \ +--title "-=[ Enjoy! ]=-" --msgbox "Il point e' stato installato con successo!" 0 0 --and-widget \ +--msgbox "trn (il newsreader, per leggere/scrivere gli echomail) ed elm (il mailreader, per leggere/scrivere i netmail) sono gia' stati configurati per l'user $POST_USER." 0 0 + +popd >/dev/null Property changes on: contrib/dialog/samples/copismall ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/form1 =================================================================== --- contrib/dialog/samples/form1 (revision 0) +++ contrib/dialog/samples/form1 (revision 0) @@ -0,0 +1,79 @@ +#! /bin/sh +# $Id: form1,v 1.14 2010/01/13 10:53:11 tom Exp $ + +. ./setup-vars + +DIALOG_ERROR=254 +export DIALOG_ERROR + +backtitle="An Example for the use of --form:" + +ids=`id|sed -e 's/([^)]*)//g'` +uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` +gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` + +user="$USER" +home="$HOME" + +returncode=0 +while test $returncode != 1 && test $returncode != 250 +do +exec 3>&1 +value=`$DIALOG --ok-label "Submit" \ + --backtitle "$backtitle" "$@" \ + --form "Here is a possible piece of a configuration program." \ +20 50 0 \ + "Username:" 1 1 "$user" 1 10 10 0 \ + "UID:" 2 1 "$uid" 2 10 8 0 \ + "GID:" 3 1 "$gid" 3 10 8 0 \ + "HOME:" 4 1 "$home" 4 10 40 0 \ +2>&1 1>&3` +returncode=$? +exec 3>&- + +show=`echo "$value" |sed -e 's/^/ /'` + + case $returncode in + $DIALOG_CANCEL) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" \ + --yesno "Really quit?" 10 30 + case $? in + $DIALOG_OK) + break + ;; + $DIALOG_CANCEL) + returncode=99 + ;; + esac + ;; + $DIALOG_OK) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" --no-collapse --cr-wrap \ + --msgbox "Resulting data:\n\ +$show" 10 40 + ;; + $DIALOG_HELP) + echo "Button 2 (Help) pressed." + exit + ;; + $DIALOG_EXTRA) + echo "Button 3 (Extra) pressed." + exit + ;; + $DIALOG_ERR) + echo "ERROR!" + exit + ;; + $DIALOG_ESC) + echo "ESC pressed." + exit + ;; + *) + echo "Return code was $returncode" + exit + ;; + esac +done Property changes on: contrib/dialog/samples/form1 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/setup-utf8 =================================================================== --- contrib/dialog/samples/setup-utf8 (revision 0) +++ contrib/dialog/samples/setup-utf8 (revision 0) @@ -0,0 +1,11 @@ +# $Id: setup-utf8,v 1.1 2010/01/13 01:51:44 tom Exp $ +# vile:shmode + +case none"$LANG$LC_ALL$LC_CTYPE" in +*UTF-8*) + ;; +*) + echo "This script must be run in a UTF-8 locale" + exit 1 + ;; +esac Index: contrib/dialog/samples/form2 =================================================================== --- contrib/dialog/samples/form2 (revision 0) +++ contrib/dialog/samples/form2 (revision 0) @@ -0,0 +1,84 @@ +#! /bin/sh +# $Id: form2,v 1.9 2010/01/13 10:53:11 tom Exp $ + +. ./setup-vars + +backtitle="An Example for the use of --form:" + +ids=`id|sed -e 's/([^)]*)//g'` +uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` +gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` + +user="$USER" +home="$HOME" + +returncode=0 +while test $returncode != 1 && test $returncode != 250 +do +exec 3>&1 +value=`$DIALOG --ok-label "Submit" \ + --backtitle "$backtitle" "$@" \ + --form "Here is a possible piece of a configuration program." \ +0 0 10 \ + "1 Username:" 1 1 "$user" 1 12 10 10 \ + "1 UID:" 2 1 "$uid" 2 12 10 10 \ + "1 GID:" 3 1 "$gid" 3 12 10 10 \ + "1 HOME:" 4 1 "$home" 4 12 10 10 \ + "2 Username:" 5 1 "$user" 5 12 10 10 \ + "2 UID:" 6 1 "$uid" 6 12 10 10 \ + "2 GID:" 7 1 "$gid" 7 12 10 10 \ + "2 HOME:" 8 1 "$home" 8 12 10 10 \ + "3 Username:" 9 1 "$user" 9 12 10 10 \ + "3 UID:" 10 1 "$uid" 10 12 10 10 \ + "3 GID:" 11 1 "$gid" 11 12 10 10 \ + "3 HOME:" 12 1 "$home" 12 12 10 10 \ + "4 Username:" 13 1 "$user" 13 12 10 10 \ + "4 UID:" 14 1 "$uid" 14 12 10 10 \ + "4 GID:" 15 1 "$gid" 15 12 10 10 \ + "4 HOME:" 16 1 "$home" 16 12 10 10 \ + "5 Username:" 17 1 "$user" 17 12 10 10 \ + "5 UID:" 18 1 "$uid" 18 12 10 10 \ + "5 GID:" 19 1 "$gid" 19 12 10 10 \ + "5 HOME:" 20 1 "$home" 20 12 10 10 \ + "6 Username:" 21 1 "$user" 21 12 10 10 \ + "6 UID:" 22 1 "$uid" 22 12 10 10 \ + "6 GID:" 23 1 "$gid" 23 12 10 10 \ + "6 HOME:" 24 1 "$home" 24 12 10 10 \ + "7 Username:" 25 1 "$user" 25 12 10 10 \ + "7 UID:" 26 1 "$uid" 26 12 10 10 \ + "7 GID:" 27 1 "$gid" 27 12 10 10 \ + "7 HOME:" 28 1 "$home" 28 12 10 10 \ +2>&1 1>&3` +returncode=$? +exec 3>&- + +show=`echo "$value" |sed -e 's/^/ /'` + + case $returncode in + $DIALOG_CANCEL) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" \ + --yesno "Really quit?" 10 30 + case $? in + $DIALOG_OK) + break + ;; + $DIALOG_CANCEL) + returncode=99 + ;; + esac + ;; + $DIALOG_OK) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" --no-collapse --cr-wrap \ + --msgbox "Resulting data:\n\ +$show" 0 0 + ;; + *) + echo "Return code was $returncode" + exit + ;; + esac +done Property changes on: contrib/dialog/samples/form2 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/form3 =================================================================== --- contrib/dialog/samples/form3 (revision 0) +++ contrib/dialog/samples/form3 (revision 0) @@ -0,0 +1,69 @@ +#! /bin/sh +# $Id: form3,v 1.6 2010/01/13 10:49:52 tom Exp $ +# form1 with --help-button + +. ./setup-vars + +backtitle="An Example for the use of --form:" + +ids=`id|sed -e 's/([^)]*)//g'` +uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` +gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` + +user="$USER" +home="$HOME" + +returncode=0 +while test $returncode != 1 && test $returncode != 250 +do +exec 3>&1 +value=`$DIALOG --ok-label "Submit" \ + --help-button \ + --backtitle "$backtitle" "$@" \ + --form "Here is a possible piece of a configuration program." \ +20 50 0 \ + "Username:" 1 1 "$user" 1 10 10 0 \ + "UID:" 2 1 "$uid" 2 10 8 0 \ + "GID:" 3 1 "$gid" 3 10 8 0 \ + "HOME:" 4 1 "$home" 4 10 40 0 \ +2>&1 1>&3` +returncode=$? +exec 3>&- + +show=`echo "$value" |sed -e 's/^/ /'` + + case $returncode in + $DIALOG_CANCEL) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" \ + --yesno "Really quit?" 10 30 + case $? in + $DIALOG_OK) + break + ;; + $DIALOG_CANCEL) + returncode=99 + ;; + esac + ;; + $DIALOG_OK) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" --no-collapse --cr-wrap \ + --msgbox "Resulting data:\n\ +$show" 10 40 + ;; + $DIALOG_HELP) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" --no-collapse --cr-wrap \ + --msgbox "Help data:\n\ +$show" 10 40 + ;; + *) + echo "Return code was $returncode" + exit + ;; + esac +done Property changes on: contrib/dialog/samples/form3 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/timebox-stdout =================================================================== --- contrib/dialog/samples/timebox-stdout (revision 0) +++ contrib/dialog/samples/timebox-stdout (revision 0) @@ -0,0 +1,10 @@ +#!/bin/sh +# $Id: timebox-stdout,v 1.5 2010/01/13 10:37:19 tom Exp $ + +. ./setup-vars + +RESULT=`$DIALOG --stdout --title "TIMEBOX" "$@" --timebox "Please set the time..." 0 0 12 34 56` + +retval=$? + +. ./report-string Property changes on: contrib/dialog/samples/timebox-stdout ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/form4 =================================================================== --- contrib/dialog/samples/form4 (revision 0) +++ contrib/dialog/samples/form4 (revision 0) @@ -0,0 +1,70 @@ +#! /bin/sh +# $Id: form4,v 1.6 2010/01/13 10:49:52 tom Exp $ +# form3 with --item-help + +. ./setup-vars + +backtitle="An Example for the use of --form:" + +ids=`id|sed -e 's/([^)]*)//g'` +uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` +gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` + +user="$USER" +home="$HOME" + +returncode=0 +while test $returncode != 1 && test $returncode != 250 +do +exec 3>&1 +value=`$DIALOG --ok-label "Submit" \ + --help-button \ + --item-help \ + --backtitle "$backtitle" "$@" \ + --form "Here is a possible piece of a configuration program." \ +20 50 0 \ + "Username:" 1 1 "$user" 1 10 10 0 "Login name" \ + "UID:" 2 1 "$uid" 2 10 8 0 "User ID" \ + "GID:" 3 1 "$gid" 3 10 8 0 "Group ID" \ + "HOME:" 4 1 "$home" 4 10 40 0 "User's home-directory" \ +2>&1 1>&3` +returncode=$? +exec 3>&- + +show=`echo "$value" |sed -e 's/^/ /'` + + case $returncode in + $DIALOG_CANCEL) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" \ + --yesno "Really quit?" 10 30 + case $? in + $DIALOG_OK) + break + ;; + $DIALOG_CANCEL) + returncode=99 + ;; + esac + ;; + $DIALOG_OK) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" --no-collapse --cr-wrap \ + --msgbox "Resulting data:\n\ +$show" 10 40 + ;; + $DIALOG_HELP) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" --no-collapse --cr-wrap \ + --msgbox "Help data:\n\ +$show" 10 40 + ;; + *) + echo "Return code was $returncode" + exit + ;; + esac +done Property changes on: contrib/dialog/samples/form4 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/msgbox4-8bit =================================================================== --- contrib/dialog/samples/msgbox4-8bit (revision 0) +++ contrib/dialog/samples/msgbox4-8bit (revision 0) @@ -0,0 +1,31 @@ +#!/bin/sh +# $Id: msgbox4-8bit,v 1.4 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./testdata-8bit + +width=30 +while test $width != 61 +do +$DIALOG --title "MESSAGE BOX (width $width)" --no-collapse --colors "$@" \ + --msgbox "\ +This sample uses characters which are non-printing in POSIX locale. + +\Z1`./rotated-data 0 $SAMPLE` \Z2`./rotated-data 1 $SAMPLE` \Z3`./rotated-data 2 $SAMPLE` \Z4`./rotated-data 3 $SAMPLE`\Zn + +Hi, this is a simple message box. You can use this to \ +display any message you like. The box will remain until \ +you press the ENTER key." 22 $width +retval=$? + +case $retval in + $DIALOG_CANCEL) + echo "Cancel pressed.";exit;; + $DIALOG_ESC) + echo "ESC pressed.";exit;; +esac + +width=`expr $width + 1` + +done Property changes on: contrib/dialog/samples/msgbox4-8bit ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/form5 =================================================================== --- contrib/dialog/samples/form5 (revision 0) +++ contrib/dialog/samples/form5 (revision 0) @@ -0,0 +1,71 @@ +#! /bin/sh +# $Id: form5,v 1.6 2010/01/13 10:49:52 tom Exp $ +# form4 with --help-status + +. ./setup-vars + +backtitle="An Example for the use of --form:" + +ids=`id|sed -e 's/([^)]*)//g'` +uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` +gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` + +user="$USER" +home="$HOME" + +returncode=0 +while test $returncode != 1 && test $returncode != 250 +do +exec 3>&1 +value=`$DIALOG --ok-label "Submit" \ + --help-status \ + --help-button \ + --item-help \ + --backtitle "$backtitle" "$@" \ + --form "Here is a possible piece of a configuration program." \ +20 50 0 \ + "Username:" 1 1 "$user" 1 10 10 0 "Login name" \ + "UID:" 2 1 "$uid" 2 10 8 0 "User ID" \ + "GID:" 3 1 "$gid" 3 10 8 0 "Group ID" \ + "HOME:" 4 1 "$home" 4 10 40 0 "User's home-directory" \ +2>&1 1>&3` +returncode=$? +exec 3>&- + +show=`echo "$value" |sed -e 's/^/ /'` + + case $returncode in + $DIALOG_CANCEL) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" \ + --yesno "Really quit?" 10 30 + case $? in + $DIALOG_OK) + break + ;; + $DIALOG_CANCEL) + returncode=99 + ;; + esac + ;; + $DIALOG_OK) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" --no-collapse --cr-wrap \ + --msgbox "Resulting data:\n\ +$show" 10 40 + ;; + $DIALOG_HELP) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" --no-collapse --cr-wrap \ + --msgbox "Help data:\n\ +$show" 10 40 + ;; + *) + echo "Return code was $returncode" + exit + ;; + esac +done Property changes on: contrib/dialog/samples/form5 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/form6 =================================================================== --- contrib/dialog/samples/form6 (revision 0) +++ contrib/dialog/samples/form6 (revision 0) @@ -0,0 +1,71 @@ +#! /bin/sh +# $Id: form6,v 1.5 2010/01/13 10:49:52 tom Exp $ +# form4 with --help-status + +. ./setup-vars + +backtitle="An Example for the use of --form:" + +ids=`id|sed -e 's/([^)]*)//g'` +uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` +gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` + +user="$USER" +home="$HOME" + +returncode=0 +while test $returncode != 1 && test $returncode != 250 +do +exec 3>&1 +value=`$DIALOG --ok-label "Submit" \ + --help-status \ + --help-button \ + --item-help \ + --backtitle "$backtitle" "$@" \ + --form "Here is a possible piece of a configuration program." \ +20 50 0 \ + "Username:" 1 1 "$user" 1 10 -9 9 "Login name" \ + "UID:" 2 1 "$uid" 2 10 8 0 "User ID" \ + "GID:" 3 1 "$gid" 3 10 8 0 "Group ID" \ + "HOME:" 4 1 "$home" 4 10 40 0 "User's home-directory" \ +2>&1 1>&3` +returncode=$? +exec 3>&- + +show=`echo "$value" |sed -e 's/^/ /'` + + case $returncode in + $DIALOG_CANCEL) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" \ + --yesno "Really quit?" 10 30 + case $? in + $DIALOG_OK) + break + ;; + $DIALOG_CANCEL) + returncode=99 + ;; + esac + ;; + $DIALOG_OK) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" --no-collapse --cr-wrap \ + --msgbox "Resulting data:\n\ +$show" 10 40 + ;; + $DIALOG_HELP) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" --no-collapse --cr-wrap \ + --msgbox "Help data:\n\ +$show" 10 40 + ;; + *) + echo "Return code was $returncode" + exit + ;; + esac +done Property changes on: contrib/dialog/samples/form6 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/sourcemage.rc =================================================================== --- contrib/dialog/samples/sourcemage.rc (revision 0) +++ contrib/dialog/samples/sourcemage.rc (revision 0) @@ -0,0 +1,123 @@ +# $Id: sourcemage.rc,v 1.3 2005/12/01 01:20:45 tom Exp $ +# Run-time configuration file for dialog, matches SourceMage color scheme. +# +# Types of values: +# +# Number - <number> +# String - "string" +# Boolean - <ON|OFF> +# Attribute - (foreground,background,highlight?) + +# Set aspect-ration. +aspect = 0 + +# Set separator (for multiple widgets output). +separate_widget = "" + +# Set tab-length (for textbox tab-conversion). +tab_len = 0 + +# Make tab-traversal for checklist, etc., include the list. +visit_items = OFF + +# Shadow dialog boxes? This also turns on color. +use_shadow = ON + +# Turn color support ON or OFF +use_colors = ON + +# Screen color +screen_color = (RED,BLACK,ON) + +# Shadow color +shadow_color = (BLACK,BLACK,ON) + +# Dialog box color +dialog_color = (BLACK,WHITE,OFF) + +# Dialog box title color +title_color = (RED,WHITE,ON) + +# Dialog box border color +border_color = (WHITE,WHITE,ON) + +# Active button color +button_active_color = (WHITE,RED,ON) + +# Inactive button color +button_inactive_color = (BLACK,WHITE,OFF) + +# Active button key color +button_key_active_color = (WHITE,RED,ON) + +# Inactive button key color +button_key_inactive_color = (RED,WHITE,OFF) + +# Active button label color +button_label_active_color = (RED,RED,ON) + +# Inactive button label color +button_label_inactive_color = (BLACK,WHITE,ON) + +# Input box color +inputbox_color = (BLACK,WHITE,OFF) + +# Input box border color +inputbox_border_color = (BLACK,WHITE,OFF) + +# Search box color +searchbox_color = (BLACK,WHITE,OFF) + +# Search box title color +searchbox_title_color = (RED,WHITE,ON) + +# Search box border color +searchbox_border_color = (WHITE,WHITE,ON) + +# File position indicator color +position_indicator_color = (RED,WHITE,ON) + +# Menu box color +menubox_color = (BLACK,WHITE,OFF) + +# Menu box border color +menubox_border_color = (WHITE,WHITE,ON) + +# Item color +item_color = (BLACK,WHITE,OFF) + +# Selected item color +item_selected_color = (WHITE,RED,ON) + +# Tag color +tag_color = (RED,WHITE,ON) + +# Selected tag color +tag_selected_color = (RED,RED,ON) + +# Tag key color +tag_key_color = (RED,WHITE,ON) + +# Selected tag key color +tag_key_selected_color = (WHITE,RED,ON) + +# Check box color +check_color = (BLACK,WHITE,OFF) + +# Selected check box color +check_selected_color = (WHITE,RED,ON) + +# Up arrow color +uarrow_color = (RED,WHITE,ON) + +# Down arrow color +darrow_color = (RED,WHITE,ON) + +# Item help-text color +itemhelp_color = (WHITE,BLACK,OFF) + +# Active form text color +form_active_text_color = (BLACK,WHITE,OFF) + +# Form text color +form_text_color = (RED,BLACK,ON) Index: contrib/dialog/samples/menubox-utf8 =================================================================== --- contrib/dialog/samples/menubox-utf8 (revision 0) +++ contrib/dialog/samples/menubox-utf8 (revision 0) @@ -0,0 +1,29 @@ +#!/bin/sh +# $Id: menubox-utf8,v 1.10 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +. ./setup-utf8 + +$DIALOG --clear --title "MENU BOX" "$@" \ + --menu "Hi, this is a menu box. You can use this to \n\ +present a list of choices for the user to \n\ +choose. If there are more items than can fit \n\ +on the screen, the menu will be scrolled. \n\ +You can use the UP/DOWN arrow keys, the first \n\ +letter of the choice as a hot key, or the \n\ +number keys 1-9 to choose an option.\n\ +Try it now!\n\n\ + Choose the OS you like:" 20 51 4 \ + "Linux" "The Great Unix Clone for 386/486" \ + "NetBSD" "Another free Unix Clone for 386/486" \ + "OS/ï¼’" "IBM OS/2" \ + "WIN NT" "Microsoft Windows NT" \ + "PCDOS" "IBM PC DOS" \ + "MSDOS" "Microsoft DOS" 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/menubox-utf8 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/inputbox6-8bit =================================================================== --- contrib/dialog/samples/inputbox6-8bit (revision 0) +++ contrib/dialog/samples/inputbox6-8bit (revision 0) @@ -0,0 +1,17 @@ +#!/bin/sh +# $Id: inputbox6-8bit,v 1.6 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +. ./testdata-8bit + +$DIALOG \ +--title `printf "$SAMPLE"` "$@" \ +--inputbox `printf "$SAMPLE"` \ +10 40 `printf "$SAMPLE"` 2>$tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/inputbox6-8bit ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/report-yesno =================================================================== --- contrib/dialog/samples/report-yesno (revision 0) +++ contrib/dialog/samples/report-yesno (revision 0) @@ -0,0 +1,20 @@ +# $Id: report-yesno,v 1.1 2010/01/13 10:40:14 tom Exp $ +# Report button-only, no $RESULT +# vile:shmode + +case $retval in + $DIALOG_OK) + echo "YES";; + $DIALOG_CANCEL) + echo "NO";; + $DIALOG_HELP) + echo "Help pressed.";; + $DIALOG_EXTRA) + echo "Extra button pressed.";; + $DIALOG_ITEM_HELP) + echo "Item-help button pressed.";; + $DIALOG_ERROR) + echo "ERROR!";; + $DIALOG_ESC) + echo "ESC pressed.";; +esac Index: contrib/dialog/samples/passwordform1 =================================================================== --- contrib/dialog/samples/passwordform1 (revision 0) +++ contrib/dialog/samples/passwordform1 (revision 0) @@ -0,0 +1,69 @@ +#! /bin/sh +# $Id: passwordform1,v 1.5 2010/01/13 10:47:35 tom Exp $ + +. ./setup-vars + +backtitle="An Example for the use of --form:" + +ids=`id|sed -e 's/([^)]*)//g'` +uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` +gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` + +user="$USER" +home="$HOME" + +returncode=0 +while test $returncode != 1 && test $returncode != 250 +do +exec 3>&1 +value=`$DIALOG --ok-label "Submit" \ + --backtitle "$backtitle" \ + --insecure "$@" \ + --passwordform "Here is a possible piece of a configuration program." \ +20 50 0 \ + "Username:" 1 1 "$user" 1 10 10 0 \ + "UID:" 2 1 "$uid" 2 10 8 0 \ + "GID:" 3 1 "$gid" 3 10 8 0 \ + "HOME:" 4 1 "$home" 4 10 40 0 \ +2>&1 1>&3` +returncode=$? +exec 3>&- + +show=`echo "$value" |sed -e 's/^/ /'` + + case $returncode in + $DIALOG_CANCEL) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" \ + --yesno "Really quit?" 10 30 + case $? in + $DIALOG_OK) + break + ;; + $DIALOG_CANCEL) + returncode=99 + ;; + esac + ;; + $DIALOG_OK) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" --no-collapse --cr-wrap \ + --msgbox "Resulting data:\n\ +$show" 10 40 + ;; + $DIALOG_HELP) + echo "Button 2 (Help) pressed." + exit + ;; + $DIALOG_EXTRA) + echo "Button 3 (Extra) pressed." + exit + ;; + *) + echo "Return code was $returncode" + exit + ;; + esac +done Property changes on: contrib/dialog/samples/passwordform1 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/msgbox4-utf8 =================================================================== --- contrib/dialog/samples/msgbox4-utf8 (revision 0) +++ contrib/dialog/samples/msgbox4-utf8 (revision 0) @@ -0,0 +1,37 @@ +#!/bin/sh +# $Id: msgbox4-utf8,v 1.10 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-utf8 + +width=30 +while test $width != 61 +do +$DIALOG --title "MESSAGE BOX (width $width)" --no-collapse "$@" \ + --msgbox "\ +This sample is written in UTF-8. +There are several checking points: +(1) whether the fullwidth characters are displayed well or not, +(2) whether the width of characters are evaluated properly, and +(3) whether the character at line-folding is lost or not. + +ã‚ã„ã†ãˆãŠã‹ããã‘ã“ã•ã—ã™ã›ããŸã¡ã¤ã¦ã¨ãªã«ã¬ã­ã® +123456789ï¼ï¼‘23456789ï¼ï¼‘2345 +ABCDEFGHIJKLMNOPQRSTUVWXY + +Hi, this is a simple message box. You can use this to \ +display any message you like. The box will remain until \ +you press the ENTER key." 22 $width +retval=$? + +case $retval in + $DIALOG_CANCEL) + echo "Cancel pressed.";exit;; + $DIALOG_ESC) + echo "ESC pressed.";exit;; +esac + +width=`expr $width + 1` + +done Property changes on: contrib/dialog/samples/msgbox4-utf8 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/tailboxbg =================================================================== --- contrib/dialog/samples/tailboxbg (revision 0) +++ contrib/dialog/samples/tailboxbg (revision 0) @@ -0,0 +1,22 @@ +#!/bin/sh +# $Id: tailboxbg,v 1.9 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +./killall listing +./listing >listing.out & + +$DIALOG --title "TAIL BOX" \ + --no-kill "$@" \ + --tailboxbg listing.out 24 70 2>$tempfile + +# wait a while for the background process to run +sleep 10 + +# now kill it +kill -3 `cat $tempfile` 2>&1 >/dev/null 2>/dev/null + +# ...and the process that is making the listing +./killall listing Property changes on: contrib/dialog/samples/tailboxbg ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/testdata-8bit =================================================================== --- contrib/dialog/samples/testdata-8bit (revision 0) +++ contrib/dialog/samples/testdata-8bit (revision 0) @@ -0,0 +1,39 @@ +#!/bin/sh +# $Id: testdata-8bit,v 1.1 2004/12/19 16:19:12 tom Exp $ + +# Select one of the "SAMPLE=" lines, to test handling of characters which +# are nonprinting in a POSIX locale: + +case .$1 in + # C1 controls +.8) + SAMPLE="€‚ƒ„…†‡ˆ‰Š‹ŒŽ" + ;; +.9) + SAMPLE="‘’“”•–—˜™š›œžŸ" + ;; + +# Latin-1 +.[aA]) + SAMPLE=" ¡¢£¤¥¦§¨©ª«¬­®¯" + ;; +.[bB]) + SAMPLE="°±²³´µ¶·¸¹º»¼½¾¿" + ;; +.[cC]) + SAMPLE="ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ" + ;; +.[dD]) + SAMPLE="ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß" + ;; +.[eE]) + SAMPLE="àáâãäåæçèéêëìíîï" + ;; +.[fF]) + SAMPLE="ðñòóôõö÷øùúûüýþÿ" + ;; +*) + # C0 controls (except a few which are always treated specially by curses): + SAMPLE=" " + ;; +esac Property changes on: contrib/dialog/samples/testdata-8bit ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/yesno-extra =================================================================== --- contrib/dialog/samples/yesno-extra (revision 0) +++ contrib/dialog/samples/yesno-extra (revision 0) @@ -0,0 +1,23 @@ +#!/bin/sh +# $Id: yesno-extra,v 1.5 2010/01/13 10:40:39 tom Exp $ + +. ./setup-vars + +$DIALOG --title "YES/NO/MAYBE BOX" \ + --clear \ + --ok-label "Next" \ + --no-label "Cancel" \ + --extra-label "Previous" --extra-button "$@" \ + --yesno "Hi, this is a yes/no dialog box with its labels changed. \ + You can use this to ask \ + questions that have an answer of either yes or no (or maybe). \ + BTW, do you notice that long lines will be automatically \ + wrapped around so that they can fit in the box? You can \ + also control line breaking explicitly by inserting \ + 'backslash n' at any place you like, but in this case, \ + auto wrap around will be disabled and you will have to \ + control line breaking yourself." 15 61 + +retval=$? + +. ./report-yesno Property changes on: contrib/dialog/samples/yesno-extra ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/report-tempfile =================================================================== --- contrib/dialog/samples/report-tempfile (revision 0) +++ contrib/dialog/samples/report-tempfile (revision 0) @@ -0,0 +1,23 @@ +# $Id: report-tempfile,v 1.3 2010/01/13 09:59:05 tom Exp $ +# Report results in a temporary-file. +# vile:shmode + +case $retval in + $DIALOG_OK) + echo "Result: `cat $tempfile`";; + $DIALOG_CANCEL) + echo "Cancel pressed.";; + $DIALOG_HELP) + echo "Help pressed.";; + $DIALOG_EXTRA) + echo "Extra button pressed.";; + $DIALOG_ITEM_HELP) + echo "Item-help button pressed.";; + $DIALOG_ESC) + if test -s $tempfile ; then + cat $tempfile + else + echo "ESC pressed." + fi + ;; +esac Index: contrib/dialog/samples/checklist9.txt =================================================================== --- contrib/dialog/samples/checklist9.txt (revision 0) +++ contrib/dialog/samples/checklist9.txt (revision 0) @@ -0,0 +1,21 @@ +--help-button \ + --colors \ + --backtitle "\Z1No Such\Zn Organization" \ + --separate-output \ + --title "CHECKLIST BOX" \ + --checklist "Hi, this is a checklist box. You can use this to \n\ +present a list of choices which can be turned on or \n\ +off. If there are more items than can fit on the \n\ +screen, the list will be scrolled. You can use the \n\ +\Z4UP/DOWN\Zn arrow keys, the first letter of the choice as a \n\ +hot key, or the number keys 1-9 to choose an option. \n\ +Press \Zb\ZrSPACE\Zn to toggle an option on/off. \n\n\ + Which of the following are fruits?" 20 61 5 \ + "Apple" "It's an \Z1apple\Zn. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off \ + "Dog" "No, that's not my dog. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ON \ + "Orange" "Yeah, that's juicy. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off \ + "Chicken" "Normally not a pet. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off \ + "" "No such pet. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" off \ + "Cat" "No, never put a dog and a cat together! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" oN \ + "Fish" "Cats like \Z4fish\Zn. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" On \ + "Lemon" "You know how it \Zr\Zb\Z3tastes\Zn. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" on Index: contrib/dialog/samples/editbox-utf8 =================================================================== --- contrib/dialog/samples/editbox-utf8 (revision 0) +++ contrib/dialog/samples/editbox-utf8 (revision 0) @@ -0,0 +1,35 @@ +#!/bin/sh +# $Id: editbox-utf8,v 1.9 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +. ./setup-utf8 + +. ./setup-edit + +cat << EOF > $input +Hi, this is a edit box. You can use this to +allow the user to enter or modify free-form text. + +Try it now! + + ----------- -------------------------------- + Choose Description of the OS you like + ----------- -------------------------------- + Linux The Great Unix Clone for 386/486 + NetBSD Another free Unix Clone for 386/486 + OS/ï¼’ IBM OS/2 + WIN NT Microsoft Windows NT + PCDOS IBM PC DOS + MSDOS Microsoft DOS + ----------- -------------------------------- + ----------- -------------------------------- +EOF + +$DIALOG --title "EDIT BOX" \ + --fixed-font "$@" --editbox $input 0 0 2>$output +retval=$? + +. ./report-edit Property changes on: contrib/dialog/samples/editbox-utf8 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/inputbox6-utf8 =================================================================== --- contrib/dialog/samples/inputbox6-utf8 (revision 0) +++ contrib/dialog/samples/inputbox6-utf8 (revision 0) @@ -0,0 +1,17 @@ +#!/bin/sh +# $Id: inputbox6-utf8,v 1.8 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +. ./setup-utf8 + +$DIALOG \ +--title `printf "\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a"` "$@" \ +--inputbox `printf "\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a"` \ +10 20 "D.O.G" 2>$tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/inputbox6-utf8 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/password1 =================================================================== --- contrib/dialog/samples/password1 (revision 0) +++ contrib/dialog/samples/password1 (revision 0) @@ -0,0 +1,21 @@ +#!/bin/sh +# $Id: password1,v 1.6 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --title "INPUT BOX" --clear \ + --insecure "$@" \ + --passwordbox "Hi, this is an password dialog box. You can use \n +this to ask questions that require the user \n +to input a string as the answer. You can \n +input strings of length longer than the \n +width of the input box, in that case, the \n +input field will be automatically scrolled. \n +You can use BACKSPACE to correct errors. \n\n +Try entering your name below:" 16 51 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/password1 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/password2 =================================================================== --- contrib/dialog/samples/password2 (revision 0) +++ contrib/dialog/samples/password2 (revision 0) @@ -0,0 +1,21 @@ +#!/bin/sh +# $Id: password2,v 1.6 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --title "INPUT BOX" --clear \ + --insecure "$@" \ + --passwordbox "Hi, this is an password dialog box. You can use \n +this to ask questions that require the user \n +to input a string as the answer. You can \n +input strings of length longer than the \n +width of the input box, in that case, the \n +input field will be automatically scrolled. \n +You can use BACKSPACE to correct errors. \n\n +Try entering your name below:" 16 51 stupid 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/password2 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/inputmenu-stdout =================================================================== --- contrib/dialog/samples/inputmenu-stdout (revision 0) +++ contrib/dialog/samples/inputmenu-stdout (revision 0) @@ -0,0 +1,53 @@ +#! /bin/bash +# $Id: inputmenu-stdout,v 1.8 2010/01/13 10:30:14 tom Exp $ +# 2002 - written by Tobias Rittweiler <tobrit@freebits.de> + +. ./setup-vars + +user="$USER" ; uid="$UID" ; +gid="$GROUPS" ; home="$HOME" ; + +while [ ${returncode:-99} -ne 1 -a ${returncode:-99} -ne 250 ]; do + value="$("$DIALOG" --stdout --clear --ok-label "Create" \ + --backtitle "An Example for the use of --inputmenu:" "$@" \ + --inputmenu "Originally I designed --inputmenu for a \ +configuration purpose. Here is a possible piece of a configuration program. +" 20 50 10 "Username:" "$user" "UID:" "$uid" "GID:" "$gid" "HOME:" "$home")" + returncode=$? + case $returncode in + $DIALOG_CANCEL) + "$DIALOG" --clear --backtitle "An Example for the use of --inputmenu:" \ + --yesno "Really quit?" 10 30 + case $? in + $DIALOG_OK) break;; + $DIALOG_CANCEL) returncode=99;; + esac + ;; + $DIALOG_OK) + "$DIALOG" --clear --backtitle "An Example for the use of --inputmenu:" \ + --msgbox "useradd \n\ + -d $home \n\ + -u $uid \n\ + -g $gid \n\ + $user" 10 40 + ;; + $DIALOG_EXTRA) + value="${value:8:${#value}}" + tag="${value%:*}" + item="${value#*: }" + + case "$tag" in + Username) user="$item";; + UID) uid="$item";; + GID) gid="$item";; + HOME) home="$item";; + esac + ;; + + $DIALOG_ESC) + echo "ESC pressed." + break + ;; + + esac +done Property changes on: contrib/dialog/samples/inputmenu-stdout ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/fselect1 =================================================================== --- contrib/dialog/samples/fselect1 (revision 0) +++ contrib/dialog/samples/fselect1 (revision 0) @@ -0,0 +1,20 @@ +#!/bin/sh +# $Id: fselect1,v 1.9 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +FILE=$HOME +for n in .cshrc .profile .bashrc +do + if test -f $HOME/$n ; then + FILE=$HOME/$n + break + fi +done + +exec 3>&1 +RESULT=`$DIALOG --title "Please choose a file" "$@" --fselect $FILE 14 48 2>&1 1>&3` +retval=$? +exec 3>&- + +. ./report-string Property changes on: contrib/dialog/samples/fselect1 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/fselect2 =================================================================== --- contrib/dialog/samples/fselect2 (revision 0) +++ contrib/dialog/samples/fselect2 (revision 0) @@ -0,0 +1,11 @@ +#!/bin/sh +# $Id: fselect2,v 1.8 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +exec 3>&1 +RESULT=`$DIALOG --title "Please choose a file" "$@" --fselect $HOME/ 0 0 2>&1 1>&3` +retval=$? +exec 3>&- + +. ./report-string Property changes on: contrib/dialog/samples/fselect2 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/form1-help =================================================================== --- contrib/dialog/samples/form1-help (revision 0) +++ contrib/dialog/samples/form1-help (revision 0) @@ -0,0 +1,69 @@ +#! /bin/sh +# $Id: form1-help,v 1.5 2010/01/13 10:47:35 tom Exp $ + +. ./setup-vars + +backtitle="An Example for the use of --form:" + +ids=`id|sed -e 's/([^)]*)//g'` +uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` +gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` + +user="$USER" +home="$HOME" + +returncode=0 +while test $returncode != 1 && test $returncode != 250 +do +exec 3>&1 +value=`$DIALOG --ok-label "Submit" \ + --help-button \ + --backtitle "$backtitle" "$@" \ + --form "Here is a possible piece of a configuration program." \ +20 50 0 \ + "Username:" 1 1 "$user" 1 10 10 0 \ + "UID:" 2 1 "$uid" 2 10 8 0 \ + "GID:" 3 1 "$gid" 3 10 8 0 \ + "HOME:" 4 1 "$home" 4 10 40 0 \ +2>&1 1>&3` +returncode=$? +exec 3>&- + +show=`echo "$value" |sed -e 's/^/ /'` + + case $returncode in + $DIALOG_CANCEL) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" \ + --yesno "Really quit?" 10 30 + case $? in + $DIALOG_OK) + break + ;; + $DIALOG_CANCEL) + returncode=99 + ;; + esac + ;; + $DIALOG_OK) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" --no-collapse --cr-wrap \ + --msgbox "Resulting data:\n\ +$show" 10 40 + ;; + $DIALOG_HELP) + echo "Button 2 (Help) pressed." + exit + ;; + $DIALOG_EXTRA) + echo "Button 3 (Extra) pressed." + exit + ;; + *) + echo "Return code was $returncode" + exit + ;; + esac +done Property changes on: contrib/dialog/samples/form1-help ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/textbox.txt =================================================================== --- contrib/dialog/samples/textbox.txt (revision 0) +++ contrib/dialog/samples/textbox.txt (revision 0) @@ -0,0 +1,24 @@ +Hi, this is a text dialog box. It can be used to display text from a file. +The file should not contain any 'tab' characters, so you should 'expand' +the file first if it contains 'tab' characters. + +It's like a simple text file viewer, with these keys implemented: + +PGDN/SPACE - Move down one page +PGUP/'b' - Move up one page +ENTER/DOWN/'j' - Move down one line +UP/'k' - Move up one line +LEFT/'h' - Scroll left +RIGHT/'l' - Scroll right +'0' - Move to beginning of line +HOME/'g' - Move to beginning of file +END/'G' - Move to end of file +'/' - Forward search +'?' - Backward search +'n' - Repeat last search (forward) +'N' - Repeat last search (backward) + + +The following is a sample text file: + + Index: contrib/dialog/samples/yesno-help =================================================================== --- contrib/dialog/samples/yesno-help (revision 0) +++ contrib/dialog/samples/yesno-help (revision 0) @@ -0,0 +1,18 @@ +#!/bin/sh +# $Id: yesno-help,v 1.5 2010/01/13 10:40:39 tom Exp $ + +. ./setup-vars + +$DIALOG --title "YES/NO BOX" --clear --help-button "$@" \ + --yesno "Hi, this is a yes/no dialog box. You can use this to ask \ + questions that have an answer of either yes or no. \ + BTW, do you notice that long lines will be automatically \ + wrapped around so that they can fit in the box? You can \ + also control line breaking explicitly by inserting \ + 'backslash n' at any place you like, but in this case, \ + auto wrap around will be disabled and you will have to \ + control line breaking yourself." 15 61 + +retval=$? + +. ./report-yesno Property changes on: contrib/dialog/samples/yesno-help ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/fselect =================================================================== --- contrib/dialog/samples/fselect (revision 0) +++ contrib/dialog/samples/fselect (revision 0) @@ -0,0 +1,11 @@ +#!/bin/sh +# $Id: fselect,v 1.11 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +exec 3>&1 +RESULT=`$DIALOG --title "Please choose a file" "$@" --fselect $HOME/ 14 48 2>&1 1>&3` +retval=$? +exec 3>&- + +. ./report-string Property changes on: contrib/dialog/samples/fselect ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/radiolist =================================================================== --- contrib/dialog/samples/radiolist (revision 0) +++ contrib/dialog/samples/radiolist (revision 0) @@ -0,0 +1,28 @@ +#! /bin/sh +# $Id: radiolist,v 1.13 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --backtitle "No Such Organization" \ + --title "RADIOLIST BOX" --clear "$@" \ + --radiolist "Hi, this is a radiolist box. You can use this to \n\ +present a list of choices which can be turned on or \n\ +off. If there are more items than can fit on the \n\ +screen, the list will be scrolled. You can use the \n\ +UP/DOWN arrow keys, the first letter of the choice as a \n\ +hot key, or the number keys 1-9 to choose an option. \n\ +Press SPACE to toggle an option on/off. \n\n\ + Which of the following are fruits?" 20 61 5 \ + "Apple" "It's an apple." off \ + "Dog" "No, that's not my dog." ON \ + "Orange" "Yeah, that's juicy." off \ + "Chicken" "Normally not a pet." off \ + "Cat" "No, never put a dog and a cat together!" off \ + "Fish" "Cats like fish." off \ + "Lemon" "You know how it tastes." off 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/radiolist ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/inputbox-help =================================================================== --- contrib/dialog/samples/inputbox-help (revision 0) +++ contrib/dialog/samples/inputbox-help (revision 0) @@ -0,0 +1,21 @@ +#!/bin/sh +# $Id: inputbox-help,v 1.6 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --title "INPUT BOX" --clear \ + --help-button "$@" \ + --inputbox "Hi, this is an input dialog box. You can use \n +this to ask questions that require the user \n +to input a string as the answer. You can \n +input strings of length longer than the \n +width of the input box, in that case, the \n +input field will be automatically scrolled. \n +You can use BACKSPACE to correct errors. \n\n +Try entering your name below:" 16 51 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/inputbox-help ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/tailbox =================================================================== --- contrib/dialog/samples/tailbox (revision 0) +++ contrib/dialog/samples/tailbox (revision 0) @@ -0,0 +1,16 @@ +#!/bin/sh +# $Id: tailbox,v 1.7 2010/01/13 10:36:18 tom Exp $ + +. ./setup-vars + +./killall listing +./listing >listing.out & + +$DIALOG --title "TAIL BOX" "$@" \ + --tailbox listing.out 24 70 + +retval=$? + +. ./report-button + +./killall listing Property changes on: contrib/dialog/samples/tailbox ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/pause-help =================================================================== --- contrib/dialog/samples/pause-help (revision 0) +++ contrib/dialog/samples/pause-help (revision 0) @@ -0,0 +1,12 @@ +#!/bin/sh +# $Id: pause-help,v 1.5 2010/01/13 10:36:00 tom Exp $ + +. ./setup-vars + +$DIALOG --title "PAUSE" \ + --help-button "$@" \ + --pause "Hi, this is a pause widget" 20 70 10 + +retval=$? + +. ./report-button Property changes on: contrib/dialog/samples/pause-help ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/inputmenu1 =================================================================== --- contrib/dialog/samples/inputmenu1 (revision 0) +++ contrib/dialog/samples/inputmenu1 (revision 0) @@ -0,0 +1,85 @@ +#! /bin/sh +# $Id: inputmenu1,v 1.8 2010/01/13 10:31:02 tom Exp $ +# +# "inputmenu" rewritten into Bourne shell. + +. ./setup-vars + +backtitle="An Example for the use of --inputmenu:" + +ids=`id|sed -e 's/([^)]*)//g'` +uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` +gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` + +user="$USER" +home="$HOME" + +returncode=0 +while test $returncode != 1 && test $returncode != 250 +do +exec 3>&1 +value=`$DIALOG --clear --ok-label "Create" \ + --backtitle "$backtitle" "$@" \ + --inputmenu "Originally I designed --inputmenu for a \ +configuration purpose. Here is a possible piece of a configuration program." \ +20 50 10 \ + "Username:" "$user" \ + "UID:" "$uid" \ + "GID:" "$gid" \ + "HOME:" "$home" \ +2>&1 1>&3` +returncode=$? +exec 3>&- + + case $returncode in + $DIALOG_CANCEL) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" \ + --yesno "Really quit?" 10 30 + case $? in + $DIALOG_OK) + break + ;; + $DIALOG_CANCEL) + returncode=99 + ;; + esac + ;; + $DIALOG_OK) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" \ + --msgbox "useradd \n\ + -d $home \n\ + -u $uid \n\ + -g $gid \n\ + $user" 10 40 + ;; + $DIALOG_EXTRA) + tag=`echo "$value" |sed -e 's/^RENAMED //' -e 's/:.*//'` + item=`echo "$value" |sed -e 's/^.*:[ ]*//' -e 's/[ ]*$//'` + + case "$tag" in + Username) + user="$item" + ;; + UID) + uid="$item" + ;; + GID) + gid="$item" + ;; + HOME) + home="$item" + ;; + esac + ;; + + $DIALOG_ESC) + echo "ESC pressed." + break + ;; + + esac +done Property changes on: contrib/dialog/samples/inputmenu1 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/inputmenu2 =================================================================== --- contrib/dialog/samples/inputmenu2 (revision 0) +++ contrib/dialog/samples/inputmenu2 (revision 0) @@ -0,0 +1,97 @@ +#! /bin/sh +# $Id: inputmenu2,v 1.8 2010/01/13 10:32:04 tom Exp $ +# +# "inputmenu1" with defaultitem, help-button. + +. ./setup-vars + +backtitle="An Example for the use of --inputmenu:" + +ids=`id|sed -e 's/([^)]*)//g'` +uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` +gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` + +user="$USER" +home="$HOME" + +returncode=0 +defaultitem="Username:" +while test $returncode != 1 && test $returncode != 250 +do +exec 3>&1 +value=`$DIALOG --clear --ok-label "Create" \ + --backtitle "$backtitle" \ + --help-button \ + --help-label "Script" \ + --default-item "$defaultitem" "$@" \ + --inputmenu "Originally I designed --inputmenu for a \ +configuration purpose. Here is a possible piece of a configuration program." \ +20 60 10 \ + "Username:" "$user" \ + "UID:" "$uid" \ + "GID:" "$gid" \ + "HOME:" "$home" \ +2>&1 1>&3` +returncode=$? +exec 3>&- + + case $returncode in + $DIALOG_HELP) + "$DIALOG" \ + --textbox "$0" 0 0 + ;; + $DIALOG_CANCEL) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" \ + --yesno "Really quit?" 10 30 + case $? in + $DIALOG_OK) + break + ;; + $DIALOG_CANCEL) + returncode=99 + ;; + esac + ;; + $DIALOG_OK) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" \ + --msgbox "useradd \n\ + -d $home \n\ + -u $uid \n\ + -g $gid \n\ + $user" 10 40 + ;; + $DIALOG_EXTRA) + tag=`echo "$value" |sed -e 's/^RENAMED //' -e 's/:.*/:/'` + item=`echo "$value" |sed -e 's/^.*:[ ]*//' -e 's/[ ]*$//'` + + case "$tag" in + Username:) + user="$item" + ;; + UID:) + uid="$item" + ;; + GID:) + gid="$item" + ;; + HOME:) + home="$item" + ;; + *) + tag= + ;; + esac + test -n "$tag" && defaultitem="$tag" + ;; + + $DIALOG_ESC) + echo "ESC pressed." + break + ;; + + esac +done Property changes on: contrib/dialog/samples/inputmenu2 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/inputmenu3 =================================================================== --- contrib/dialog/samples/inputmenu3 (revision 0) +++ contrib/dialog/samples/inputmenu3 (revision 0) @@ -0,0 +1,106 @@ +#! /bin/sh +# $Id: inputmenu3,v 1.10 2010/01/13 10:32:51 tom Exp $ +# +# "inputmenu1" with defaultitem, help-button and item-help. + +. ./setup-vars + +backtitle="An Example for the use of --inputmenu:" + +ids=`id|sed -e 's/([^)]*)//g'` +uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` +gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` + +user="$USER" +home="$HOME" + +returncode=0 +defaultitem="Username:" +while test $returncode != 1 && test $returncode != 250 +do +exec 3>&1 +value=`$DIALOG --clear --ok-label "Create" \ + --backtitle "$backtitle" \ + --help-button \ + --help-label "Script" \ + --default-item "$defaultitem" \ + --item-help "$@" \ + --inputmenu "Originally I designed --inputmenu for a \ +configuration purpose. Here is a possible piece of a configuration program." \ +20 60 10 \ + "Username:" "$user" "User login-name" \ + "UID:" "$uid" "User-ID (number)" \ + "GID:" "$gid" "Group-ID (number)" \ + "HOME:" "$home" "User's home-directory" \ +2>&1 1>&3` +returncode=$? +exec 3>&- + + case $returncode in + $DIALOG_CANCEL) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" \ + --yesno "Really quit?" 10 30 + case $? in + $DIALOG_OK) + break + ;; + $DIALOG_CANCEL) + returncode=99 + ;; + esac + ;; + $DIALOG_OK) + case $value in + HELP*) + "$DIALOG" \ + --textbox "$0" 0 0 + ;; + *) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" \ + --msgbox "useradd \n\ + -d $home \n\ + -u $uid \n\ + -g $gid \n\ + $user" 10 40 + ;; + esac + ;; + $DIALOG_HELP) + "$DIALOG" \ + --textbox "$0" 0 0 + ;; + $DIALOG_EXTRA) + tag=`echo "$value" |sed -e 's/^RENAMED //' -e 's/:.*/:/'` + item=`echo "$value" |sed -e 's/^.*:[ ]*//' -e 's/[ ]*$//'` + + case "$tag" in + Username:) + user="$item" + ;; + UID:) + uid="$item" + ;; + GID:) + gid="$item" + ;; + HOME:) + home="$item" + ;; + *) + tag= + ;; + esac + test -n "$tag" && defaultitem="$tag" + ;; + + $DIALOG_ESC) + echo "ESC pressed." + break + ;; + + esac +done Property changes on: contrib/dialog/samples/inputmenu3 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/inputmenu4 =================================================================== --- contrib/dialog/samples/inputmenu4 (revision 0) +++ contrib/dialog/samples/inputmenu4 (revision 0) @@ -0,0 +1,86 @@ +#! /bin/sh +# $Id: inputmenu4,v 1.8 2010/01/13 10:33:35 tom Exp $ +# +# "inputmenu1" with a different label for the extra-button + +. ./setup-vars + +backtitle="An Example for the use of --inputmenu:" + +ids=`id|sed -e 's/([^)]*)//g'` +uid=`echo "$ids" | sed -e 's/^uid=//' -e 's/ .*//'` +gid=`echo "$ids" | sed -e 's/^.* gid=//' -e 's/ .*//'` + +user="$USER" +home="$HOME" + +returncode=0 +while test $returncode != 1 && test $returncode != 250 +do +exec 3>&1 +value=`$DIALOG --clear --ok-label "Create" \ + --extra-label "Edit" \ + --backtitle "$backtitle" "$@" \ + --inputmenu "Originally I designed --inputmenu for a \ +configuration purpose. Here is a possible piece of a configuration program." \ +20 50 10 \ + "Username:" "$user" \ + "UID:" "$uid" \ + "GID:" "$gid" \ + "HOME:" "$home" \ +2>&1 1>&3` +returncode=$? +exec 3>&- + + case $returncode in + $DIALOG_CANCEL) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" \ + --yesno "Really quit?" 10 30 + case $? in + $DIALOG_OK) + break + ;; + $DIALOG_CANCEL) + returncode=99 + ;; + esac + ;; + $DIALOG_OK) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" \ + --msgbox "useradd \n\ + -d $home \n\ + -u $uid \n\ + -g $gid \n\ + $user" 10 40 + ;; + $DIALOG_EXTRA) + tag=`echo "$value" |sed -e 's/^RENAMED //' -e 's/:.*//'` + item=`echo "$value" |sed -e 's/^.*:[ ]*//' -e 's/[ ]*$//'` + + case "$tag" in + Username) + user="$item" + ;; + UID) + uid="$item" + ;; + GID) + gid="$item" + ;; + HOME) + home="$item" + ;; + esac + ;; + + $DIALOG_ESC) + echo "ESC pressed." + break + ;; + + esac +done Property changes on: contrib/dialog/samples/inputmenu4 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/calendar =================================================================== --- contrib/dialog/samples/calendar (revision 0) +++ contrib/dialog/samples/calendar (revision 0) @@ -0,0 +1,11 @@ +#!/bin/sh +# $Id: calendar,v 1.9 2010/01/13 10:20:33 tom Exp $ + +. ./setup-vars + +exec 3>&1 +RESULT=`$DIALOG --title "CALENDAR" "$@" --calendar "Please choose a date..." 0 0 7 7 1981 2>&1 1>&3` +retval=$? +exec 3>&- + +. ./report-string Property changes on: contrib/dialog/samples/calendar ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/checklist =================================================================== --- contrib/dialog/samples/checklist (revision 0) +++ contrib/dialog/samples/checklist (revision 0) @@ -0,0 +1,28 @@ +#! /bin/sh +# $Id: checklist,v 1.14 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --backtitle "No Such Organization" \ + --title "CHECKLIST BOX" "$@" \ + --checklist "Hi, this is a checklist box. You can use this to \n\ +present a list of choices which can be turned on or \n\ +off. If there are more items than can fit on the \n\ +screen, the list will be scrolled. You can use the \n\ +UP/DOWN arrow keys, the first letter of the choice as a \n\ +hot key, or the number keys 1-9 to choose an option. \n\ +Press SPACE to toggle an option on/off. \n\n\ + Which of the following are fruits?" 20 61 5 \ + "Apple" "It's an apple." off \ + "Dog" "No, that's not my dog." ON \ + "Orange" "Yeah, that's juicy." off \ + "Chicken" "Normally not a pet." off \ + "Cat" "No, never put a dog and a cat together!" oN \ + "Fish" "Cats like fish." On \ + "Lemon" "You know how it tastes." on 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/checklist ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/setup-vars =================================================================== --- contrib/dialog/samples/setup-vars (revision 0) +++ contrib/dialog/samples/setup-vars (revision 0) @@ -0,0 +1,11 @@ +# $Id: setup-vars,v 1.1 2010/01/13 00:16:38 tom Exp $ +# vile:shmode + +: ${DIALOG=dialog} + +: ${DIALOG_OK=0} +: ${DIALOG_CANCEL=1} +: ${DIALOG_HELP=2} +: ${DIALOG_EXTRA=3} +: ${DIALOG_ITEM_HELP=4} +: ${DIALOG_ESC=255} Index: contrib/dialog/samples/checklist10 =================================================================== --- contrib/dialog/samples/checklist10 (revision 0) +++ contrib/dialog/samples/checklist10 (revision 0) @@ -0,0 +1,30 @@ +#! /bin/sh +# $Id: checklist10,v 1.9 2010/01/13 10:20:03 tom Exp $ +# zero-width column + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG \ + --backtitle "No such organization" \ + --title "CHECKLIST BOX" "$@" \ + --checklist "Hi, this is a checklist box. You can use this to \n\ +present a list of choices which can be turned on or \n\ +off. If there are more items than can fit on the \n\ +screen, the list will be scrolled. You can use the \n\ +UP/DOWN arrow keys, the first letter of the choice as a \n\ +hot key, or the number keys 1-9 to choose an option. \n\ +Press SPACE to toggle an option on/off. \n\n\ + Which of the following are fruits?" 20 61 5 \ + Dialog "" on \ + Readline "" off \ + Gnome "" off \ + Kde "" off \ + Editor "" off \ + Noninteractive "" on \ + 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/checklist10 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/checklist11 =================================================================== --- contrib/dialog/samples/checklist11 (revision 0) +++ contrib/dialog/samples/checklist11 (revision 0) @@ -0,0 +1,33 @@ +#! /bin/sh +# $Id: checklist11,v 1.1 2010/01/17 23:04:01 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +$DIALOG --backtitle "No Such Organization" \ + --title "CHECKLIST BOX" "$@" \ + --checklist "Hi, this is a checklist box. You can use this to \n\ +present a list of choices which can be turned on or \n\ +off. If there are more items than can fit on the \n\ +screen, the list will be scrolled. You can use the \n\ +UP/DOWN arrow keys, the first letter of the choice as a \n\ +hot key, or the number keys 1-9 to choose an option. \n\ +Press SPACE to toggle an option on/off. \n\n\ + Which of the following are fruits?" 20 61 5 \ + "" "It's an apple." off \ + "Dog" "No1, that's not my dog." ON \ + "Dog2" "No2, that's not my dog." OFF \ + "Dog3" "No3, that's not my dog." OFF \ + "Dog4" "No4, that's not my dog." OFF \ + "Dog5" "No5, that's not my dog." OFF \ + "Dog6" "No6, that's not my dog." OFF \ + "Orange" "Yeah, that's juicy." off \ + "Chicken" "" off \ + "Cat" "No, never put a dog and a cat together!" oN \ + "Fish" "Cats like fish." On \ + "Lemon" "You know how it tastes." on 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/checklist11 ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/samples/checklist-8bit =================================================================== --- contrib/dialog/samples/checklist-8bit (revision 0) +++ contrib/dialog/samples/checklist-8bit (revision 0) @@ -0,0 +1,30 @@ +#! /bin/sh +# $Id: checklist-8bit,v 1.8 2010/01/13 10:20:03 tom Exp $ + +. ./setup-vars + +. ./setup-tempfile + +. ./testdata-8bit + +$DIALOG --backtitle "No Such Organization" \ + --title "CHECKLIST BOX" "$@" \ + --checklist "Hi, this is a checklist box. You can use this to \n\ +present a list of choices which can be turned on or \n\ +off. If there are more items than can fit on the \n\ +screen, the list will be scrolled. You can use the \n\ +UP/DOWN arrow keys, the first letter of the choice as a \n\ +hot key, or the number keys 1-9 to choose an option. \n\ +Press SPACE to toggle an option on/off. \n\n\ + Which of the following are fruits?" 20 61 5 \ + "`./rotated-data 0 $SAMPLE`" "It's an `./rotated-data 0 $SAMPLE`." off \ + "`./rotated-data 1 $SAMPLE`" "No, that's not my `./rotated-data 1 $SAMPLE`." ON \ + "`./rotated-data 2 $SAMPLE`" "Yeah, that's `./rotated-data 2 $SAMPLE`." off \ + "`./rotated-data 3 $SAMPLE`" "Normally not a `./rotated-data 3 $SAMPLE`." off \ + "`./rotated-data 4 $SAMPLE`" "No, never put a `./rotated-data 4 $SAMPLE` there!" oN \ + "`./rotated-data 5 $SAMPLE`" "Cats like `./rotated-data 5 $SAMPLE`." On \ + "`./rotated-data 6 $SAMPLE`" "You `./rotated-data 6 $SAMPLE` how it is." on 2> $tempfile + +retval=$? + +. ./report-tempfile Property changes on: contrib/dialog/samples/checklist-8bit ___________________________________________________________________ Added: svn:executable + * Index: contrib/dialog/fselect.c =================================================================== --- contrib/dialog/fselect.c (revision 0) +++ contrib/dialog/fselect.c (revision 0) @@ -0,0 +1,882 @@ +/* + * $Id: fselect.c,v 1.74 2010/04/28 20:45:40 tom Exp $ + * + * fselect.c -- implements the file-selector box + * + * Copyright 2000-2009,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + */ + +#include <dialog.h> +#include <dlg_keys.h> + +#include <sys/types.h> +#include <sys/stat.h> + +#if HAVE_DIRENT_H +# include <dirent.h> +# define NAMLEN(dirent) strlen((dirent)->d_name) +#else +# define dirent direct +# define NAMLEN(dirent) (dirent)->d_namlen +# if HAVE_SYS_NDIR_H +# include <sys/ndir.h> +# endif +# if HAVE_SYS_DIR_H +# include <sys/dir.h> +# endif +# if HAVE_NDIR_H +# include <ndir.h> +# endif +#endif + +# if defined(_FILE_OFFSET_BITS) && defined(HAVE_STRUCT_DIRENT64) +# if !defined(_LP64) && (_FILE_OFFSET_BITS == 64) +# define DIRENT struct dirent64 +# else +# define DIRENT struct dirent +# endif +# else +# define DIRENT struct dirent +# endif + +#define EXT_WIDE 1 +#define HDR_HIGH 1 +#define BTN_HIGH (1 + 2 * MARGIN) /* Ok/Cancel, also input-box */ +#define MIN_HIGH (HDR_HIGH - MARGIN + (BTN_HIGH * 2) + 4 * MARGIN) +#define MIN_WIDE (2 * MAX(dlg_count_columns(d_label), dlg_count_columns(f_label)) + 6 * MARGIN + 2 * EXT_WIDE) + +#define MOUSE_D (KEY_MAX + 0) +#define MOUSE_F (KEY_MAX + 10000) +#define MOUSE_T (KEY_MAX + 20000) + +typedef enum { + sDIRS = -3 + ,sFILES = -2 + ,sTEXT = -1 +} STATES; + +typedef struct { + WINDOW *par; /* parent window */ + WINDOW *win; /* this window */ + int length; /* length of the data[] array */ + int offset; /* index of first item on screen */ + int choice; /* index of the selection */ + int mousex; /* base of mouse-code return-values */ + unsigned allocd; + char **data; +} LIST; + +typedef struct { + int length; + char **data; +} MATCH; + +static void +init_list(LIST * list, WINDOW *par, WINDOW *win, int mousex) +{ + list->par = par; + list->win = win; + list->length = 0; + list->offset = 0; + list->choice = 0; + list->mousex = mousex; + list->allocd = 0; + list->data = 0; + dlg_mouse_mkbigregion(getbegy(win), getbegx(win), + getmaxy(win), getmaxx(win), + mousex, 1, 1, 1 /* by lines */ ); +} + +static char * +leaf_of(char *path) +{ + char *leaf = strrchr(path, '/'); + if (leaf != 0) + leaf++; + else + leaf = path; + return leaf; +} + +static char * +data_of(LIST * list) +{ + if (list != 0 + && list->data != 0) + return list->data[list->choice]; + return 0; +} + +static void +free_list(LIST * list, int reinit) +{ + int n; + + if (list->data != 0) { + for (n = 0; list->data[n] != 0; n++) + free(list->data[n]); + free(list->data); + list->data = 0; + } + if (reinit) + init_list(list, list->par, list->win, list->mousex); +} + +static void +add_to_list(LIST * list, char *text) +{ + unsigned need; + + need = (unsigned) (list->length + 1); + if (need + 1 > list->allocd) { + list->allocd = 2 * (need + 1); + if (list->data == 0) { + list->data = dlg_malloc(char *, list->allocd); + } else { + list->data = dlg_realloc(char *, list->allocd, list->data); + } + assert_ptr(list->data, "add_to_list"); + } + list->data[list->length++] = dlg_strclone(text); + list->data[list->length] = 0; +} + +static void +keep_visible(LIST * list) +{ + int high = getmaxy(list->win); + + if (list->choice < list->offset) { + list->offset = list->choice; + } + if (list->choice - list->offset >= high) + list->offset = list->choice - high + 1; +} + +#define Value(c) (int)((c) & 0xff) + +static int +find_choice(char *target, LIST * list) +{ + int n; + int choice = list->choice; + int len_1, len_2, cmp_1, cmp_2; + + if (*target == 0) { + list->choice = 0; + } else { + /* find the match with the longest length. If more than one has the + * same length, choose the one with the closest match of the final + * character. + */ + len_1 = 0; + cmp_1 = 256; + for (n = 0; n < list->length; n++) { + char *a = target; + char *b = list->data[n]; + + len_2 = 0; + while ((*a != 0) && (*b != 0) && (*a == *b)) { + a++; + b++; + len_2++; + } + cmp_2 = Value(*a) - Value(*b); + if (cmp_2 < 0) + cmp_2 = -cmp_2; + if ((len_2 > len_1) + || (len_1 == len_2 && cmp_2 < cmp_1)) { + len_1 = len_2; + cmp_1 = cmp_2; + list->choice = n; + } + } + } + if (choice != list->choice) { + keep_visible(list); + } + return (choice != list->choice); +} + +static void +display_list(LIST * list) +{ + int n; + int x; + int y; + int top; + int bottom; + + if (list->win != 0) { + dlg_attr_clear(list->win, getmaxy(list->win), getmaxx(list->win), item_attr); + for (n = list->offset; n < list->length && list->data[n]; n++) { + y = n - list->offset; + if (y >= getmaxy(list->win)) + break; + (void) wmove(list->win, y, 0); + if (n == list->choice) + wattrset(list->win, item_selected_attr); + (void) waddstr(list->win, list->data[n]); + wattrset(list->win, item_attr); + } + wattrset(list->win, item_attr); + + getparyx(list->win, y, x); + + top = y - 1; + bottom = y + getmaxy(list->win); + dlg_draw_scrollbar(list->par, + list->offset, + list->offset, + list->offset + getmaxy(list->win), + list->length, + x + 1, + x + getmaxx(list->win), + top, + bottom, + menubox_attr, + menubox_border_attr); + + (void) wmove(list->win, list->choice - list->offset, 0); + (void) wnoutrefresh(list->win); + } +} + +/* FIXME: see arrows.c + * This workaround is used to allow two lists to have scroll-tabs at the same + * time, by reassigning their return-values to be different. Just for + * readability, we use the names of keys with similar connotations, though all + * that is really required is that they're distinct, so we can put them in a + * switch statement. + */ +static void +fix_arrows(LIST * list) +{ + int x; + int y; + int top; + int bottom; + + if (list->win != 0) { + getparyx(list->win, y, x); + top = y - 1; + bottom = y + getmaxy(list->win); + + mouse_mkbutton(top, x, 6, + ((list->mousex == MOUSE_D) + ? KEY_PREVIOUS + : KEY_PPAGE)); + mouse_mkbutton(bottom, x, 6, + ((list->mousex == MOUSE_D) + ? KEY_NEXT + : KEY_NPAGE)); + } +} + +static int +show_list(char *target, LIST * list, bool keep) +{ + int changed = keep || find_choice(target, list); + display_list(list); + return changed; +} + +/* + * Highlight the closest match to 'target' in the given list, setting offset + * to match. + */ +static int +show_both_lists(char *input, LIST * d_list, LIST * f_list, bool keep) +{ + char *leaf = leaf_of(input); + + return show_list(leaf, d_list, keep) | show_list(leaf, f_list, keep); +} + +/* + * Move up/down in the given list + */ +static bool +change_list(int choice, LIST * list) +{ + if (data_of(list) != 0) { + int last = list->length - 1; + + choice += list->choice; + if (choice < 0) + choice = 0; + if (choice > last) + choice = last; + list->choice = choice; + keep_visible(list); + display_list(list); + return TRUE; + } + return FALSE; +} + +static void +scroll_list(int direction, LIST * list) +{ + if (data_of(list) != 0) { + int length = getmaxy(list->win); + if (change_list(direction * length, list)) + return; + } + beep(); +} + +static int +compar(const void *a, const void *b) +{ + return strcmp(*(const char *const *) a, *(const char *const *) b); +} + +static void +match(char *name, LIST * d_list, LIST * f_list, MATCH * match_list) +{ + char *test = leaf_of(name); + size_t test_len = strlen(test); + char **matches = dlg_malloc(char *, (size_t) (d_list->length + f_list->length)); + size_t data_len = 0; + int i; + for (i = 2; i < d_list->length; i++) { + if (strncmp(test, d_list->data[i], test_len) == 0) { + matches[data_len++] = d_list->data[i]; + } + } + for (i = 0; i < f_list->length; i++) { + if (strncmp(test, f_list->data[i], test_len) == 0) { + matches[data_len++] = f_list->data[i]; + } + } + matches = dlg_realloc(char *, data_len, matches); + match_list->data = matches; + match_list->length = (int) data_len; +} + +static void +free_match(MATCH * match_list) +{ + free(match_list->data); + match_list->length = 0; +} + +static int +complete(char *name, LIST * d_list, LIST * f_list, char **buff_ptr) +{ + MATCH match_list; + char *test; + size_t test_len; + size_t i; + int j; + char *buff; + + match(name, d_list, f_list, &match_list); + if (match_list.length == 0) { + *buff_ptr = NULL; + return 0; + } + + test = match_list.data[0]; + test_len = strlen(test); + buff = dlg_malloc(char, test_len + 2); + if (match_list.length == 1) { + strcpy(buff, test); + i = test_len; + if (test == data_of(d_list)) { + buff[test_len] = '/'; + i++; + } + } else { + for (i = 0; i < test_len; i++) { + char test_char = test[i]; + if (test_char == '\0') + break; + for (j = 0; j < match_list.length; j++) { + if (match_list.data[j][i] != test_char) { + break; + } + } + if (j == match_list.length) { + (buff)[i] = test_char; + } else + break; + } + buff = dlg_realloc(char, i + 1, buff); + } + free_match(&match_list); + buff[i] = '\0'; + *buff_ptr = buff; + return (i != 0); +} + +static bool +fill_lists(char *current, char *input, LIST * d_list, LIST * f_list, bool keep) +{ + DIR *dp; + DIRENT *de; + struct stat sb; + int n; + char path[MAX_LEN + 1]; + char *leaf; + + /* check if we've updated the lists */ + for (n = 0; current[n] && input[n]; n++) { + if (current[n] != input[n]) + break; + } + if (current[n] == input[n]) + return FALSE; + if (strchr(current + n, '/') == 0 + && strchr(input + n, '/') == 0) { + return show_both_lists(input, d_list, f_list, keep); + } + + strcpy(current, input); + + /* refill the lists */ + free_list(d_list, TRUE); + free_list(f_list, TRUE); + strcpy(path, current); + if ((leaf = strrchr(path, '/')) != 0) { + *++leaf = 0; + } else { + strcpy(path, "./"); + leaf = path + strlen(path); + } + if ((dp = opendir(path)) != 0) { + while ((de = readdir(dp)) != 0) { + strncpy(leaf, de->d_name, NAMLEN(de))[NAMLEN(de)] = 0; + if (stat(path, &sb) == 0) { + if ((sb.st_mode & S_IFMT) == S_IFDIR) + add_to_list(d_list, leaf); + else if (f_list->win) + add_to_list(f_list, leaf); + } + } + (void) closedir(dp); + /* sort the lists */ + qsort(d_list->data, + (size_t) d_list->length, + sizeof(d_list->data[0]), + compar); + qsort(f_list->data, + (size_t) f_list->length, + sizeof(f_list->data[0]), + compar); + } + + (void) show_both_lists(input, d_list, f_list, FALSE); + d_list->offset = d_list->choice; + f_list->offset = f_list->choice; + return TRUE; +} + +static bool +usable_state(int state, LIST * dirs, LIST * files) +{ + bool result; + + switch (state) { + case sDIRS: + result = (dirs->win != 0) && (data_of(dirs) != 0); + break; + case sFILES: + result = (files->win != 0) && (data_of(files) != 0); + break; + default: + result = TRUE; + break; + } + return result; +} + +#define which_list() ((state == sFILES) \ + ? &f_list \ + : ((state == sDIRS) \ + ? &d_list \ + : 0)) +#define NAVIGATE_BINDINGS \ + DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_RIGHT ), \ + DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), \ + DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), \ + DLG_KEYS_DATA( DLGK_ITEM_NEXT, KEY_DOWN ), \ + DLG_KEYS_DATA( DLGK_ITEM_NEXT, CHR_NEXT ), \ + DLG_KEYS_DATA( DLGK_ITEM_NEXT, KEY_NEXT ), \ + DLG_KEYS_DATA( DLGK_ITEM_PREV, CHR_PREVIOUS ), \ + DLG_KEYS_DATA( DLGK_ITEM_PREV, KEY_UP ), \ + DLG_KEYS_DATA( DLGK_PAGE_NEXT, KEY_NPAGE ), \ + DLG_KEYS_DATA( DLGK_PAGE_PREV, KEY_PPAGE ) + +/* + * Display a dialog box for entering a filename + */ +static int +dlg_fselect(const char *title, const char *path, int height, int width, bool dselect) +{ + /* *INDENT-OFF* */ + static DLG_KEYS_BINDING binding[] = { + ENTERKEY_BINDINGS, + NAVIGATE_BINDINGS, + END_KEYS_BINDING + }; + static DLG_KEYS_BINDING binding2[] = { + INPUTSTR_BINDINGS, + ENTERKEY_BINDINGS, + NAVIGATE_BINDINGS, + END_KEYS_BINDING + }; + /* *INDENT-ON* */ + +#ifdef KEY_RESIZE + int old_height = height; + int old_width = width; + bool resized = FALSE; +#endif + int tbox_y, tbox_x, tbox_width, tbox_height; + int dbox_y, dbox_x, dbox_width, dbox_height; + int fbox_y, fbox_x, fbox_width, fbox_height; + int show_buttons = TRUE; + int offset = 0; + int key = 0; + int fkey = FALSE; + int code; + int result = DLG_EXIT_UNKNOWN; + int state = dialog_vars.defaultno ? dlg_defaultno_button() : sTEXT; + int button = state; + int first = (state == sTEXT); + char *input; + char *completed; + char current[MAX_LEN + 1]; + WINDOW *dialog = 0; + WINDOW *w_text = 0; + WINDOW *w_work = 0; + const char **buttons = dlg_ok_labels(); + char *d_label = _("Directories"); + char *f_label = _("Files"); + char *partial; + int min_wide = MIN_WIDE; + int min_items = height ? 0 : 4; + LIST d_list, f_list; + + dlg_does_output(); + + /* Set up the initial value */ + input = dlg_set_result(path); + offset = (int) strlen(input); + *current = 0; + + dlg_button_layout(buttons, &min_wide); + +#ifdef KEY_RESIZE + retry: +#endif + dlg_auto_size(title, (char *) 0, &height, &width, 6, 25); + height += MIN_HIGH + min_items; + if (width < min_wide) + width = min_wide; + dlg_print_size(height, width); + dlg_ctl_size(height, width); + + dialog = dlg_new_window(height, width, + dlg_box_y_ordinate(height), + dlg_box_x_ordinate(width)); + dlg_register_window(dialog, "fselect", binding); + dlg_register_buttons(dialog, "fselect", buttons); + + dlg_mouse_setbase(0, 0); + + dlg_draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); + dlg_draw_bottom_box(dialog); + dlg_draw_title(dialog, title); + + wattrset(dialog, dialog_attr); + + /* Draw the input field box */ + tbox_height = 1; + tbox_width = width - (4 * MARGIN + 2); + tbox_y = height - (BTN_HIGH * 2) + MARGIN; + tbox_x = (width - tbox_width) / 2; + + w_text = derwin(dialog, tbox_height, tbox_width, tbox_y, tbox_x); + if (w_text == 0) + return DLG_EXIT_ERROR; + + (void) keypad(w_text, TRUE); + dlg_draw_box(dialog, tbox_y - MARGIN, tbox_x - MARGIN, + (2 * MARGIN + 1), tbox_width + (MARGIN + EXT_WIDE), + menubox_border_attr, menubox_attr); + dlg_mouse_mkbigregion(getbegy(dialog) + tbox_y - MARGIN, + getbegx(dialog) + tbox_x - MARGIN, + 1 + (2 * MARGIN), + tbox_width + (MARGIN + EXT_WIDE), + MOUSE_T, 1, 1, 3 /* doesn't matter */ ); + + dlg_register_window(w_text, "fselect", binding2); + + /* Draw the directory listing box */ + if (dselect) + dbox_width = (width - (6 * MARGIN)); + else + dbox_width = (width - (6 * MARGIN + 2 * EXT_WIDE)) / 2; + dbox_height = height - MIN_HIGH; + dbox_y = (2 * MARGIN + 1); + dbox_x = tbox_x; + + w_work = derwin(dialog, dbox_height, dbox_width, dbox_y, dbox_x); + if (w_work == 0) + return DLG_EXIT_ERROR; + + (void) keypad(w_work, TRUE); + (void) mvwprintw(dialog, dbox_y - (MARGIN + 1), dbox_x - MARGIN, d_label); + dlg_draw_box(dialog, + dbox_y - MARGIN, dbox_x - MARGIN, + dbox_height + (MARGIN + 1), dbox_width + (MARGIN + 1), + menubox_border_attr, menubox_attr); + init_list(&d_list, dialog, w_work, MOUSE_D); + + if (!dselect) { + /* Draw the filename listing box */ + fbox_height = dbox_height; + fbox_width = dbox_width; + fbox_y = dbox_y; + fbox_x = tbox_x + dbox_width + (2 * MARGIN); + + w_work = derwin(dialog, fbox_height, fbox_width, fbox_y, fbox_x); + if (w_work == 0) + return DLG_EXIT_ERROR; + + (void) keypad(w_work, TRUE); + (void) mvwprintw(dialog, fbox_y - (MARGIN + 1), fbox_x - MARGIN, f_label); + dlg_draw_box(dialog, + fbox_y - MARGIN, fbox_x - MARGIN, + fbox_height + (MARGIN + 1), fbox_width + (MARGIN + 1), + menubox_border_attr, menubox_attr); + init_list(&f_list, dialog, w_work, MOUSE_F); + } else { + memset(&f_list, 0, sizeof(f_list)); + } + + while (result == DLG_EXIT_UNKNOWN) { + + if (fill_lists(current, input, &d_list, &f_list, state < sTEXT)) + show_buttons = TRUE; + +#ifdef KEY_RESIZE + if (resized) { + resized = FALSE; + dlg_show_string(w_text, input, offset, inputbox_attr, + 0, 0, tbox_width, 0, first); + } +#endif + + /* + * The last field drawn determines where the cursor is shown: + */ + if (show_buttons) { + show_buttons = FALSE; + button = (state < 0) ? 0 : state; + dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); + } + if (state < 0) { + switch (state) { + case sTEXT: + dlg_set_focus(dialog, w_text); + break; + case sFILES: + dlg_set_focus(dialog, f_list.win); + break; + case sDIRS: + dlg_set_focus(dialog, d_list.win); + break; + } + } + + if (first) { + (void) wrefresh(dialog); + } else { + fix_arrows(&d_list); + fix_arrows(&f_list); + key = dlg_mouse_wgetch((state == sTEXT) ? w_text : dialog, &fkey); + if (dlg_result_key(key, fkey, &result)) + break; + } + + if (!fkey && key == ' ') { + key = DLGK_SELECT; + fkey = TRUE; + } + + if (fkey) { + switch (key) { + case DLGK_MOUSE(KEY_PREVIOUS): + state = sDIRS; + scroll_list(-1, which_list()); + continue; + case DLGK_MOUSE(KEY_NEXT): + state = sDIRS; + scroll_list(1, which_list()); + continue; + case DLGK_MOUSE(KEY_PPAGE): + state = sFILES; + scroll_list(-1, which_list()); + continue; + case DLGK_MOUSE(KEY_NPAGE): + state = sFILES; + scroll_list(1, which_list()); + continue; + case DLGK_PAGE_PREV: + scroll_list(-1, which_list()); + continue; + case DLGK_PAGE_NEXT: + scroll_list(1, which_list()); + continue; + case DLGK_ITEM_PREV: + if (change_list(-1, which_list())) + continue; + /* FALLTHRU */ + case DLGK_FIELD_PREV: + show_buttons = TRUE; + do { + state = dlg_prev_ok_buttonindex(state, sDIRS); + } while (!usable_state(state, &d_list, &f_list)); + continue; + case DLGK_ITEM_NEXT: + if (change_list(1, which_list())) + continue; + /* FALLTHRU */ + case DLGK_FIELD_NEXT: + show_buttons = TRUE; + do { + state = dlg_next_ok_buttonindex(state, sDIRS); + } while (!usable_state(state, &d_list, &f_list)); + continue; + case DLGK_SELECT: + completed = 0; + partial = 0; + if (state == sFILES && !dselect) { + completed = data_of(&f_list); + } else if (state == sDIRS) { + completed = data_of(&d_list); + } else { + if (complete(input, &d_list, &f_list, &partial)) { + completed = partial; + } + } + if (completed != 0) { + state = sTEXT; + show_buttons = TRUE; + strcpy(leaf_of(input), completed); + offset = (int) strlen(input); + dlg_show_string(w_text, input, offset, inputbox_attr, + 0, 0, tbox_width, 0, first); + if (partial != NULL) + free(partial); + continue; + } else { /* if (state < sTEXT) */ + (void) beep(); + continue; + } + /* FALLTHRU */ + case DLGK_ENTER: + result = (state > 0) ? dlg_ok_buttoncode(state) : DLG_EXIT_OK; + continue; +#ifdef KEY_RESIZE + case KEY_RESIZE: + /* reset data */ + height = old_height; + width = old_width; + show_buttons = TRUE; + *current = 0; + resized = TRUE; + /* repaint */ + dlg_clear(); + dlg_del_window(dialog); + refresh(); + dlg_mouse_free_regions(); + goto retry; +#endif + default: + if (key >= DLGK_MOUSE(MOUSE_T)) { + state = sTEXT; + continue; + } else if (key >= DLGK_MOUSE(MOUSE_F)) { + if (f_list.win != 0) { + state = sFILES; + f_list.choice = (key - DLGK_MOUSE(MOUSE_F)) + f_list.offset; + display_list(&f_list); + } + continue; + } else if (key >= DLGK_MOUSE(MOUSE_D)) { + if (d_list.win != 0) { + state = sDIRS; + d_list.choice = (key - DLGK_MOUSE(MOUSE_D)) + d_list.offset; + display_list(&d_list); + } + continue; + } else if (is_DLGK_MOUSE(key) + && (code = dlg_ok_buttoncode(key - M_EVENT)) >= 0) { + result = code; + continue; + } + break; + } + } + + if (state < 0) { /* Input box selected if we're editing */ + int edit = dlg_edit_string(input, &offset, key, fkey, first); + + if (edit) { + dlg_show_string(w_text, input, offset, inputbox_attr, + 0, 0, tbox_width, 0, first); + first = FALSE; + state = sTEXT; + } + } else if (state >= 0 && + (code = dlg_char_to_button(key, buttons)) >= 0) { + result = dlg_ok_buttoncode(code); + break; + } + } + + dlg_unregister_window(w_text); + dlg_del_window(dialog); + dlg_mouse_free_regions(); + free_list(&d_list, FALSE); + free_list(&f_list, FALSE); + return result; +} + +/* + * Display a dialog box for entering a filename + */ +int +dialog_fselect(const char *title, const char *path, int height, int width) +{ + return dlg_fselect(title, path, height, width, FALSE); +} + +/* + * Display a dialog box for entering a directory + */ +int +dialog_dselect(const char *title, const char *path, int height, int width) +{ + return dlg_fselect(title, path, height, width, TRUE); +} Index: contrib/dialog/version.c =================================================================== --- contrib/dialog/version.c (revision 0) +++ contrib/dialog/version.c (revision 0) @@ -0,0 +1,33 @@ +/* + * $Id: version.c,v 1.6 2010/01/15 23:34:46 tom Exp $ + * + * version.c -- dialog's version string + * + * Copyright 2005-2006,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + */ +#include <dialog.h> + +#define quoted(a) #a +#define concat(a,b) a "-" quoted(b) +#define DLG_VERSION concat(DIALOG_VERSION,DIALOG_PATCHDATE) + +const char * +dialog_version(void) +{ + return DLG_VERSION; +} Index: contrib/dialog/inputstr.c =================================================================== --- contrib/dialog/inputstr.c (revision 0) +++ contrib/dialog/inputstr.c (revision 0) @@ -0,0 +1,751 @@ +/* + * $Id: inputstr.c,v 1.66 2010/01/15 23:13:36 tom Exp $ + * + * inputstr.c -- functions for input/display of a string + * + * Copyright 2000-2009,2010 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + */ + +#include <dialog.h> +#include <dlg_keys.h> + +#include <errno.h> + +#ifdef HAVE_SETLOCALE +#include <locale.h> +#endif + +#if defined(HAVE_SEARCH_H) && defined(HAVE_TSEARCH) +#include <search.h> +#else +#undef HAVE_TSEARCH +#endif + +#ifdef NEED_WCHAR_H +#include <wchar.h> +#endif + +#if defined(USE_WIDE_CURSES) +#define USE_CACHING 1 +#elif defined(HAVE_XDIALOG) +#define USE_CACHING 1 /* editbox really needs caching! */ +#else +#define USE_CACHING 0 +#endif + +typedef struct _cache { + struct _cache *next; +#if USE_CACHING + struct _cache *cache_at; /* unique: associate caches by CACHE */ + const char *string_at; /* unique: associate caches by char* */ +#endif + unsigned s_len; /* strlen(string) - we add 1 for EOS */ + unsigned i_len; /* length(list) - we add 1 for EOS */ + char *string; /* a copy of the last-processed string */ + int *list; /* indices into the string */ +} CACHE; + +#if USE_CACHING +#define SAME_CACHE(c,s,l) (c->string != 0 && memcmp(c->string,s,l) == 0) + +static CACHE *cache_list; + +#ifdef HAVE_TSEARCH +static void *sorted_cache; +#endif + +#ifdef USE_WIDE_CURSES +static int +have_locale(void) +{ + static int result = -1; + if (result < 0) { + char *test = setlocale(LC_ALL, 0); + if (test == 0 || *test == 0) { + result = FALSE; + } else if (strcmp(test, "C") && strcmp(test, "POSIX")) { + result = TRUE; + } else { + result = FALSE; + } + } + return result; +} +#endif + +#ifdef HAVE_TSEARCH +static int +compare_cache(const void *a, const void *b) +{ + const CACHE *p = (const CACHE *) a; + const CACHE *q = (const CACHE *) b; + int result = 0; + result = p->cache_at - q->cache_at; + if (result == 0) + result = p->string_at - q->string_at; + return result; +} +#endif + +static CACHE * +find_cache(CACHE * cache, const char *string) +{ + CACHE *p; + +#ifdef HAVE_TSEARCH + void *pp; + CACHE find; + + memset(&find, 0, sizeof(find)); + find.cache_at = cache; + find.string_at = string; + + if ((pp = tfind(&find, &sorted_cache, compare_cache)) != 0) { + p = *(CACHE **) pp; + } else { + p = 0; + } +#else + for (p = cache_list; p != 0; p = p->next) { + if (p->cache_at == cache + && p->string_at == string) { + break; + } + } +#endif + return p; +} + +static void +make_cache(CACHE * cache, const char *string) +{ + CACHE *p; + + p = dlg_calloc(CACHE, 1); + assert_ptr(p, "load_cache"); + p->next = cache_list; + cache_list = p; + + p->cache_at = cache; + p->string_at = string; + + *cache = *p; +#ifdef HAVE_TSEARCH + (void) tsearch(p, &sorted_cache, compare_cache); +#endif +} + +static void +load_cache(CACHE * cache, const char *string) +{ + CACHE *p; + + if ((p = find_cache(cache, string)) != 0) { + *cache = *p; + } else { + make_cache(cache, string); + } +} + +static void +save_cache(CACHE * cache, const char *string) +{ + CACHE *p; + + if ((p = find_cache(cache, string)) != 0) { + CACHE *q = p->next; + *p = *cache; + p->next = q; + } +} +#else +#define SAME_CACHE(c,s,l) (c->string != 0) +#define load_cache(cache, string) /* nothing */ +#define save_cache(cache, string) /* nothing */ +#endif /* USE_WIDE_CURSES */ + +/* + * If the given string has not changed, we do not need to update the index. + * If we need to update the index, allocate enough memory for it. + */ +static bool +same_cache2(CACHE * cache, const char *string, unsigned i_len) +{ + unsigned need; + unsigned s_len = strlen(string); + + if (cache->s_len != 0 + && cache->s_len >= s_len + && cache->list != 0 + && SAME_CACHE(cache, string, s_len)) { + return TRUE; + } + + need = (i_len + 1); + if (cache->list == 0) { + cache->list = dlg_malloc(int, need); + } else if (cache->i_len < i_len) { + cache->list = dlg_realloc(int, need, cache->list); + } + cache->i_len = i_len; + + if (cache->s_len >= s_len && cache->string != 0) { + strcpy(cache->string, string); + } else { + if (cache->string != 0) + free(cache->string); + cache->string = dlg_strclone(string); + } + cache->s_len = s_len; + + return FALSE; +} + +#ifdef USE_WIDE_CURSES +/* + * Like same_cache2(), but we are only concerned about caching a copy of the + * string and its associated length. + */ +static bool +same_cache1(CACHE * cache, const char *string, unsigned i_len) +{ + unsigned s_len = strlen(string); + + if (cache->s_len == s_len + && SAME_CACHE(cache, string, s_len)) { + return TRUE; + } + + if (cache->s_len >= s_len && cache->string != 0) { + strcpy(cache->string, string); + } else { + if (cache->string != 0) + free(cache->string); + cache->string = dlg_strclone(string); + } + cache->s_len = s_len; + cache->i_len = i_len; + + return FALSE; +} +#endif /* USE_CACHING */ + +/* + * Counts the number of bytes that make up complete wide-characters, up to byte + * 'len'. If there is no locale set, simply return the original length. + */ +#ifdef USE_WIDE_CURSES +static int +dlg_count_wcbytes(const char *string, size_t len) +{ + int result; + + if (have_locale()) { + static CACHE cache; + + load_cache(&cache, string); + if (!same_cache1(&cache, string, len)) { + while (len != 0) { + int part = 0; + size_t code = 0; + const char *src = cache.string; + mbstate_t state; + char save = cache.string[len]; + + cache.string[len] = '\0'; + memset(&state, 0, sizeof(state)); + code = mbsrtowcs((wchar_t *) 0, &src, len, &state); + cache.string[len] = save; + if ((int) code >= 0) { + break; + } + ++part; + --len; + } + cache.i_len = len; + save_cache(&cache, string); + } + result = (int) cache.i_len; + } else { + result = (int) len; + } + return result; +} +#endif /* USE_WIDE_CURSES */ + +/* + * Counts the number of wide-characters in the string. + */ +int +dlg_count_wchars(const char *string) +{ + int result; + +#ifdef USE_WIDE_CURSES + if (have_locale()) { + static CACHE cache; + size_t len = strlen(string); + + load_cache(&cache, string); + if (!same_cache1(&cache, string, len)) { + const char *src = cache.string; + mbstate_t state; + int part = dlg_count_wcbytes(cache.string, len); + char save = cache.string[part]; + size_t code; + wchar_t *temp = dlg_calloc(wchar_t, len + 1); + + cache.string[part] = '\0'; + memset(&state, 0, sizeof(state)); + code = mbsrtowcs(temp, &src, (size_t) part, &state); + cache.i_len = ((int) code >= 0) ? wcslen(temp) : 0; + cache.string[part] = save; + free(temp); + save_cache(&cache, string); + } + result = (int) cache.i_len; + } else +#endif /* USE_WIDE_CURSES */ + { + result = (int) strlen(string); + } + return result; +} + +/* + * Build an index of the wide-characters in the string, so we can easily tell + * which byte-offset begins a given wide-character. + */ +const int * +dlg_index_wchars(const char *string) +{ + static CACHE cache; + unsigned len = (unsigned) dlg_count_wchars(string); + unsigned inx; + + load_cache(&cache, string); + if (!same_cache2(&cache, string, len)) { + const char *current = string; + + cache.list[0] = 0; + for (inx = 1; inx <= len; ++inx) { +#ifdef USE_WIDE_CURSES + if (have_locale()) { + mbstate_t state; + int width; + memset(&state, 0, sizeof(state)); + width = (int) mbrlen(current, strlen(current), &state); + if (width <= 0) + width = 1; /* FIXME: what if we have a control-char? */ + current += width; + cache.list[inx] = cache.list[inx - 1] + width; + } else +#endif /* USE_WIDE_CURSES */ + { + (void) current; + cache.list[inx] = (int) inx; + } + } + save_cache(&cache, string); + } + return cache.list; +} + +/* + * Given the character-offset to find in the list, return the corresponding + * array index. + */ +int +dlg_find_index(const int *list, int limit, int to_find) +{ + int result; + for (result = 0; result <= limit; ++result) { + if (to_find == list[result] + || result == limit + || to_find < list[result + 1]) + break; + } + return result; +} + +/* + * Build a list of the display-columns for the given string's characters. + */ +const int * +dlg_index_columns(const char *string) +{ + static CACHE cache; + unsigned len = (unsigned) dlg_count_wchars(string); + unsigned inx; + + load_cache(&cache, string); + if (!same_cache2(&cache, string, len)) { + cache.list[0] = 0; +#ifdef USE_WIDE_CURSES + if (have_locale()) { + size_t num_bytes = strlen(string); + const int *inx_wchars = dlg_index_wchars(string); + mbstate_t state; + + for (inx = 0; inx < len; ++inx) { + wchar_t temp[2]; + size_t check; + int result; + + if (string[inx_wchars[inx]] == TAB) { + result = ((cache.list[inx] | 7) + 1) - cache.list[inx]; + } else { + memset(&state, 0, sizeof(state)); + memset(temp, 0, sizeof(temp)); + check = mbrtowc(temp, + string + inx_wchars[inx], + num_bytes - (size_t) inx_wchars[inx], + &state); + if ((int) check <= 0) { + result = 1; + } else { + result = wcwidth(temp[0]); + } + if (result < 0) { + wchar_t *printable; + cchar_t temp2; + setcchar(&temp2, temp, 0, 0, 0); + printable = wunctrl(&temp2); + result = printable ? (int) wcslen(printable) : 1; + } + } + cache.list[inx + 1] = result; + if (inx != 0) + cache.list[inx + 1] += cache.list[inx]; + } + } else +#endif /* USE_WIDE_CURSES */ + { + for (inx = 0; inx < len; ++inx) { + chtype ch = UCH(string[inx]); + + if (ch == TAB) + cache.list[inx + 1] = + ((cache.list[inx] | 7) + 1) - cache.list[inx]; + else if (isprint(ch)) + cache.list[inx + 1] = 1; + else { + const char *printable; + printable = unctrl(ch); + cache.list[inx + 1] = (printable + ? (int) strlen(printable) + : 1); + } + if (inx != 0) + cache.list[inx + 1] += cache.list[inx]; + } + } + save_cache(&cache, string); + } + return cache.list; +} + +/* + * Returns the number of columns used for a string. That happens to be the + * end-value of the cols[] array. + */ +int +dlg_count_columns(const char *string) +{ + int result = 0; + int limit = dlg_count_wchars(string); + if (limit > 0) { + const int *cols = dlg_index_columns(string); + result = cols[limit]; + } else { + result = (int) strlen(string); + } + return result; +} + +/* + * Given a column limit, count the number of wide characters that can fit + * into that limit. The offset is used to skip over a leading character + * that was already written. + */ +int +dlg_limit_columns(const char *string, int limit, int offset) +{ + const int *cols = dlg_index_columns(string); + int result = dlg_count_wchars(string); + + while (result > 0 && (cols[result] - cols[offset]) > limit) + --result; + return result; +} + +/* + * Updates the string and character-offset, given various editing characters + * or literal characters which are inserted at the character-offset. + */ +bool +dlg_edit_string(char *string, int *chr_offset, int key, int fkey, bool force) +{ + int i; + int len = (int) strlen(string); + int limit = dlg_count_wchars(string); + const int *indx = dlg_index_wchars(string); + int offset = dlg_find_index(indx, limit, *chr_offset); + int max_len = dlg_max_input(MAX_LEN); + bool edit = TRUE; + + /* transform editing characters into equivalent function-keys */ + if (!fkey) { + fkey = TRUE; /* assume we transform */ + switch (key) { + case 0: + break; + case ESC: + case TAB: + fkey = FALSE; /* this is used for navigation */ + break; + default: + fkey = FALSE; /* ...no, we did not transform */ + break; + } + } + + if (fkey) { + switch (key) { + case 0: /* special case for loop entry */ + edit = force; + break; + case DLGK_GRID_LEFT: + if (*chr_offset) + *chr_offset = indx[offset - 1]; + break; + case DLGK_GRID_RIGHT: + if (offset < limit) + *chr_offset = indx[offset + 1]; + break; + case DLGK_BEGIN: + if (*chr_offset) + *chr_offset = 0; + break; + case DLGK_FINAL: + if (offset < limit) + *chr_offset = indx[limit]; + break; + case DLGK_DELETE_LEFT: + if (offset) { + int gap = indx[offset] - indx[offset - 1]; + *chr_offset = indx[offset - 1]; + if (gap > 0) { + for (i = *chr_offset; + (string[i] = string[i + gap]) != '\0'; + i++) { + ; + } + } + } + break; + case DLGK_DELETE_RIGHT: + if (limit) { + if (--limit == 0) { + string[*chr_offset = 0] = '\0'; + } else { + int gap = ((offset <= limit) + ? (indx[offset + 1] - indx[offset]) + : 0); + if (gap > 0) { + for (i = indx[offset]; + (string[i] = string[i + gap]) != '\0'; + i++) { + ; + } + } else if (offset > 0) { + string[indx[offset - 1]] = '\0'; + } + if (*chr_offset > indx[limit]) + *chr_offset = indx[limit]; + } + } + break; + case DLGK_DELETE_ALL: + string[*chr_offset = 0] = '\0'; + break; + case DLGK_ENTER: + edit = 0; + break; +#ifdef KEY_RESIZE + case KEY_RESIZE: + edit = 0; + break; +#endif + case DLGK_GRID_UP: + case DLGK_GRID_DOWN: + case DLGK_FIELD_NEXT: + case DLGK_FIELD_PREV: + edit = 0; + break; + case ERR: + edit = 0; + break; + default: + beep(); + break; + } + } else { + if (key == ESC || key == ERR) { + edit = 0; + } else { + if (len < max_len) { + for (i = ++len; i > *chr_offset; i--) + string[i] = string[i - 1]; + string[*chr_offset] = (char) key; + *chr_offset += 1; + } else { + (void) beep(); + } + } + } + return edit; +} + +static void +compute_edit_offset(const char *string, + int chr_offset, + int x_last, + int *p_dpy_column, + int *p_scroll_amt) +{ + const int *cols = dlg_index_columns(string); + const int *indx = dlg_index_wchars(string); + int limit = dlg_count_wchars(string); + int offset = dlg_find_index(indx, limit, chr_offset); + int offset2; + int dpy_column; + int n; + + for (n = offset2 = 0; n <= offset; ++n) { + if ((cols[offset] - cols[n]) < x_last + && (offset == limit || (cols[offset + 1] - cols[n]) < x_last)) { + offset2 = n; + break; + } + } + + dpy_column = cols[offset] - cols[offset2]; + + if (p_dpy_column != 0) + *p_dpy_column = dpy_column; + if (p_scroll_amt != 0) + *p_scroll_amt = offset2; +} + +/* + * Given the character-offset in the string, returns the display-offset where + * we will position the cursor. + */ +int +dlg_edit_offset(char *string, int chr_offset, int x_last) +{ + int result; + + compute_edit_offset(string, chr_offset, x_last, &result, 0); + + return result; +} + +/* + * Displays the string, shifted as necessary, to fit within the box and show + * the current character-offset. + */ +void +dlg_show_string(WINDOW *win, + const char *string, /* string to display (may be multibyte) */ + int chr_offset, /* character (not bytes) offset */ + chtype attr, /* window-attributes */ + int y_base, /* beginning row on screen */ + int x_base, /* beginning column on screen */ + int x_last, /* number of columns on screen */ + bool hidden, /* if true, do not echo */ + bool force) /* if true, force repaint */ +{ + x_last = MIN(x_last + x_base, getmaxx(win)) - x_base; + + if (hidden && !dialog_vars.insecure) { + if (force) { + (void) wmove(win, y_base, x_base); + wrefresh(win); + } + } else { + const int *cols = dlg_index_columns(string); + const int *indx = dlg_index_wchars(string); + int limit = dlg_count_wchars(string); + + int i, j, k; + int input_x; + int scrollamt; + + compute_edit_offset(string, chr_offset, x_last, &input_x, &scrollamt); + + wattrset(win, attr); + (void) wmove(win, y_base, x_base); + for (i = scrollamt, k = 0; i < limit && k < x_last; ++i) { + int check = cols[i + 1] - cols[scrollamt]; + if (check <= x_last) { + for (j = indx[i]; j < indx[i + 1]; ++j) { + chtype ch = UCH(string[j]); + if (hidden && dialog_vars.insecure) { + waddch(win, '*'); + } else if (ch == TAB) { + int count = cols[i + 1] - cols[i]; + while (--count >= 0) + waddch(win, ' '); + } else { + waddch(win, ch); + } + } + k = check; + } else { + break; + } + } + while (k++ < x_last) + waddch(win, ' '); + (void) wmove(win, y_base, x_base + input_x); + wrefresh(win); + } +} + +#ifdef NO_LEAKS +void +_dlg_inputstr_leaks(void) +{ +#if USE_CACHING + while (cache_list != 0) { + CACHE *next = cache_list->next; +#ifdef HAVE_TSEARCH + tdelete(cache_list, &sorted_cache, compare_cache); +#endif + if (cache_list->string != 0) + free(cache_list->string); + if (cache_list->list != 0) + free(cache_list->list); + free(cache_list); + cache_list = next; + } +#endif /* USE_CACHING */ +} +#endif /* NO_LEAKS */ Index: contrib/dialog/dialog.pl =================================================================== --- contrib/dialog/dialog.pl (revision 0) +++ contrib/dialog/dialog.pl (revision 0) @@ -0,0 +1,454 @@ +# Functions that handle calling dialog(1) -*-perl-*- +# $Id: dialog.pl,v 1.4 2001/10/13 00:40:22 tom Exp $ + +# Return values are 1 for success and 0 for failure (or cancel) +# Resultant text (if any) is in dialog_result + +# Unfortunately, the gauge requires use of /bin/sh to get going. +# I didn't bother to make the others shell-free, although it +# would be simple to do. + +# Note that dialog generally returns 0 for success, so I invert the +# sense of the return code for more readable boolean expressions. + +$scr_lines = 24; + +require "flush.pl"; + +sub rhs_clear { + return system("dialog --clear"); +} + +sub rhs_textbox { + local ( $title, $file, $width, $height ) = @_; + + system("dialog --title \"$title\" --textbox $file $height $width"); + + return 1; +} + +sub rhs_msgbox { + local ( $title, $message, $width ) = @_; + local ( $tmp, $height, $message_len ); + + $message = &rhs_wordwrap($message, $width); + $message_len = split(/^/, $message); + $tmp = $message; + if (chop($tmp) eq "\n") { + $message_len++; + } + $height = 4 + $message_len; + + $tmp = system("dialog --title \"$title\" --msgbox \"$message\" $height $width"); + if ($tmp) { + return 0; + } else { + return 1; + } +} + +sub rhs_infobox { + local ( $title, $message, $width ) = @_; + local ( $tmp, $height, $message_len ); + + $message = &rhs_wordwrap($message, $width); + $message_len = split(/^/, $message); + $tmp = $message; + if (chop($tmp) eq "\n") { + $message_len++; + } + $height = 2 + $message_len; + + return system("dialog --title \"$title\" --infobox \"$message\" $height $width"); +} + +sub rhs_yesno { + local ( $title, $message, $width ) = @_; + local ( $tmp, $height, $message_len ); + + $message = &rhs_wordwrap($message, $width); + $message_len = split(/^/, $message); + $tmp = $message; + if (chop($tmp) eq "\n") { + $message_len++; + } + $height = 4 + $message_len; + + $tmp = system("dialog --title \"$title\" --yesno \"$message\" $height $width"); + # Dumb: dialog returns 0 for "yes" and 1 for "no" + if (! $tmp) { + return 1; + } else { + return 0; + } +} + +sub rhs_gauge { + local ( $title, $message, $width, $percent ) = @_; + local ( $tmp, $height, $message_len ); + + $gauge_width = $width; + + $message = &rhs_wordwrap($message, $width); + $message_len = split(/^/, $message); + $tmp = $message; + if (chop($tmp) eq "\n") { + $message_len++; + } + $height = 5 + $message_len; + + open(GAUGE, "|dialog --title \"$title\" --gauge \"$message\" $height $width $percent"); +} + +sub rhs_update_gauge { + local ( $percent ) = @_; + + &printflush(GAUGE, "$percent\n"); +} + +sub rhs_update_gauge_and_message { + local ( $message, $percent ) = @_; + + $message = &rhs_wordwrap($message, $gauge_width); + $message =~ s/\n/\\n/g; + &printflush(GAUGE, "XXX\n$percent\n$message\nXXX\n"); +} + +sub rhs_stop_gauge { + close GAUGE; +} + +sub rhs_inputbox { + local ( $title, $message, $width, $instr ) = @_; + local ( $tmp, $height, $message_len ); + + $message = &rhs_wordwrap($message, $width); + $message_len = split(/^/, $message); + $tmp = $message; + if (chop($tmp) eq "\n") { + $message_len++; + } + $height = 7 + $message_len; + + return &return_output(0, "dialog --title \"$title\" --inputbox \"$message\" $height $width \"$instr\""); +} + +sub rhs_menu { + local ( $title, $message, $width, $numitems ) = @_; + local ( $i, $tmp, $ent, $height, $menuheight, @list, $message_len ); + + shift; shift; shift; shift; + + @list = (); + for ($i = 0; $i < $numitems; $i++) { + $ent = shift; + $list[@list] = "\"$ent\""; + $ent = shift; + $list[@list] = "\"$ent\""; + } + + $message = &rhs_wordwrap($message, $width); + + $message_len = split(/^/, $message); + $tmp = $message; + if (chop($tmp) eq "\n") { + $message_len++; + } + + $height = $message_len + 6 + $numitems; + if ($height <= $scr_lines) { + $menuheight = $numitems; + } else { + $height = $scr_lines; + $menuheight = $scr_lines - $message_len - 6; + } + + return &return_output(0, "dialog --title \"$title\" --menu \"$message\" $height $width $menuheight @list"); +} + +sub rhs_menul { + local ( $title, $message, $width, $numitems ) = @_; + local ( $i, $tmp, $ent, $height, $menuheight, @list, $message_len ); + + shift; shift; shift; shift; + + @list = (); + for ($i = 0; $i < $numitems; $i++) { + $ent = shift; + $list[@list] = "\"$ent\""; + $list[@list] = "\"\""; + } + + $message = &rhs_wordwrap($message, $width); + + $message_len = split(/^/, $message); + $tmp = $message; + if (chop($tmp) eq "\n") { + $message_len++; + } + + $height = $message_len + 6 + $numitems; + if ($height <= $scr_lines) { + $menuheight = $numitems; + } else { + $height = $scr_lines; + $menuheight = $scr_lines - $message_len - 6; + } + + return &return_output(0, "dialog --title \"$title\" --menu \"$message\" $height $width $menuheight @list"); +} + +sub rhs_menua { + local ( $title, $message, $width, %items ) = @_; + local ( $tmp, $ent, $height, $menuheight, @list, $message_len ); + + @list = (); + foreach $ent (sort keys (%items)) { + $list[@list] = "\"$ent\""; + $list[@list] = "\"$items{$ent}\""; + } + + $message = &rhs_wordwrap($message, $width); + + $message_len = split(/^/, $message); + $tmp = $message; + if (chop($tmp) eq "\n") { + $message_len++; + } + + $numitems = keys(%items); + $height = $message_len + 6 + $numitems; + if ($height <= $scr_lines) { + $menuheight = $numitems; + } else { + $height = $scr_lines; + $menuheight = $scr_lines - $message_len - 6; + } + + return &return_output(0, "dialog --title \"$title\" --menu \"$message\" $height $width $menuheight @list"); +} + +sub rhs_checklist { + local ( $title, $message, $width, $numitems ) = @_; + local ( $i, $tmp, $ent, $height, $menuheight, @list, $message_len ); + + shift; shift; shift; shift; + + @list = (); + for ($i = 0; $i < $numitems; $i++) { + $ent = shift; + $list[@list] = "\"$ent\""; + $ent = shift; + $list[@list] = "\"$ent\""; + $ent = shift; + if ($ent) { + $list[@list] = "ON"; + } else { + $list[@list] = "OFF"; + } + } + + $message = &rhs_wordwrap($message, $width); + + $message_len = split(/^/, $message); + $tmp = $message; + if (chop($tmp) eq "\n") { + $message_len++; + } + + $height = $message_len + 6 + $numitems; + if ($height <= $scr_lines) { + $menuheight = $numitems; + } else { + $height = $scr_lines; + $menuheight = $scr_lines - $message_len - 6; + } + + return &return_output("list", "dialog --title \"$title\" --separate-output --checklist \"$message\" $height $width $menuheight @list"); +} + +sub rhs_checklistl { + local ( $title, $message, $width, $numitems ) = @_; + local ( $i, $tmp, $ent, $height, $menuheight, @list, $message_len ); + + shift; shift; shift; shift; + + @list = (); + for ($i = 0; $i < $numitems; $i++) { + $ent = shift; + $list[@list] = "\"$ent\""; + $list[@list] = "\"\""; + $list[@list] = "OFF"; + } + + $message = &rhs_wordwrap($message, $width); + + $message_len = split(/^/, $message); + $tmp = $message; + if (chop($tmp) eq "\n") { + $message_len++; + } + + $height = $message_len + 6 + $numitems; + if ($height <= $scr_lines) { + $menuheight = $numitems; + } else { + $height = $scr_lines; + $menuheight = $scr_lines - $message_len - 6; + } + return &return_output("list", "dialog --title \"$title\" --separate-output --checklist \"$message\" $height $width $menuheight @list"); +} + +sub rhs_checklista { + local ( $title, $message, $width, %items ) = @_; + local ( $tmp, $ent, $height, $menuheight, @list, $message_len ); + + shift; shift; shift; shift; + + @list = (); + foreach $ent (sort keys (%items)) { + $list[@list] = "\"$ent\""; + $list[@list] = "\"$items{$ent}\""; + $list[@list] = "OFF"; + } + + $message = &rhs_wordwrap($message, $width); + + $message_len = split(/^/, $message); + $tmp = $message; + if (chop($tmp) eq "\n") { + $message_len++; + } + + $numitems = keys(%items); + $height = $message_len + 6 + $numitems; + if ($height <= $scr_lines) { + $menuheight = $numitems; + } else { + $height = $scr_lines; + $menuheight = $scr_lines - $message_len - 6; + } + + return &return_output("list", "dialog --title \"$title\" --separate-output --checklist \"$message\" $height $width $menuheight @list"); +} + +sub rhs_radiolist { + local ( $title, $message, $width, $numitems ) = @_; + local ( $i, $tmp, $ent, $height, $menuheight, @list, $message_len ); + + shift; shift; shift; shift; + + @list = (); + for ($i = 0; $i < $numitems; $i++) { + $ent = shift; + $list[@list] = "\"$ent\""; + $ent = shift; + $list[@list] = "\"$ent\""; + $ent = shift; + if ($ent) { + $list[@list] = "ON"; + } else { + $list[@list] = "OFF"; + } + } + + $message = &rhs_wordwrap($message, $width); + + $message_len = split(/^/, $message); + $tmp = $message; + if (chop($tmp) eq "\n") { + $message_len++; + } + + $height = $message_len + 6 + $numitems; + if ($height <= $scr_lines) { + $menuheight = $numitems; + } else { + $height = $scr_lines; + $menuheight = $scr_lines - $message_len - 6; + } + + return &return_output(0 , "dialog --title \"$title\" --radiolist \"$message\" $height $width $menuheight @list"); +} + +sub return_output { + local ( $listp, $command ) = @_; + local ( $res ) = 1; + + pipe(PARENT_READER, CHILD_WRITER); + # We have to fork (as opposed to using "system") so that the parent + # process can read from the pipe to avoid deadlock. + my ($pid) = fork; + if ($pid == 0) { # child + close(PARENT_READER); + open(STDERR, ">&CHILD_WRITER"); + exec($command); + die("no exec"); + } + if ($pid > 0) { # parent + close( CHILD_WRITER ); + if ($listp) { + @dialog_result = (); + while (<PARENT_READER>) { + chop; + $dialog_result[@dialog_result] = $_; + } + } + else { $dialog_result = <PARENT_READER>; } + close(PARENT_READER); + waitpid($pid,0); + $res = $?; + } + + # Again, dialog returns results backwards + if (! $res) { + return 1; + } else { + return 0; + } +} + +sub rhs_wordwrap { + local ( $intext, $width ) = @_; + local ( $outtext, $i, $j, @lines, $wrap, @words, $pos, $pad ); + + $outtext = ""; + $pad = 3; # leave 3 spaces around each line + $pos = $pad; # current insert position + $wrap = 0; # 1 if we have been auto wraping + $insert_nl = 0; # 1 if we just did an absolute + # and we should preface any new text + # with a new line + @lines = split(/\n/, $intext); + for ($i = 0; $i <= $#lines; $i++) { + if ($lines[$i] =~ /^>/) { + $outtext .= "\n" if ($insert_nl); + $outtext .= "\n" if ($wrap); + $lines[$i] =~ /^>(.*)$/; + $outtext .= $1; + $insert_nl = 1; + $wrap = 0; + $pos = $pad; + } else { + $wrap = 1; + @words = split(/\s+/,$lines[$i]); + for ($j = 0; $j <= $#words; $j++) { + if ($insert_nl) { + $outtext .= "\n"; + $insert_nl = 0; + } + if ((length($words[$j]) + $pos) > $width - $pad) { + $outtext .= "\n"; + $pos = $pad; + } + $outtext .= $words[$j] . " "; + $pos += length($words[$j]) + 1; + } + } + } + + return $outtext; +} + +############ +1; Index: contrib/dialog/mouse.c =================================================================== --- contrib/dialog/mouse.c (revision 0) +++ contrib/dialog/mouse.c (revision 0) @@ -0,0 +1,139 @@ +/* + * $Id: mouse.c,v 1.18 2007/02/22 21:51:38 tom Exp $ + * + * mouse.c -- mouse support for dialog + * + * Copyright 2002-2006,2007 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + */ + +#include <dialog.h> +#include <dlg_keys.h> + +#if USE_MOUSE + +static int basex, basey; + +static mseRegion *regionList = NULL; + +/*=========== region related functions =============*/ + +static mseRegion * +find_region_by_code(int code) +{ + mseRegion *butPtr; + + for (butPtr = regionList; butPtr; butPtr = butPtr->next) { + if (code == butPtr->code) + break; + } + return butPtr; +} + +void +dlg_mouse_setbase(int x, int y) +{ + basex = x; + basey = y; +} + +void +dlg_mouse_mkbigregion(int y, int x, + int height, int width, + int code, + int step_y, int step_x, + int mode) +{ + mseRegion *butPtr = dlg_mouse_mkregion(y, x, height, width, -DLGK_MOUSE(code)); + butPtr->mode = mode; + butPtr->step_x = MAX(1, step_x); + butPtr->step_y = MAX(1, step_y); +} + +void +dlg_mouse_free_regions(void) +{ + while (regionList != 0) { + mseRegion *butPtr = regionList->next; + free(regionList); + regionList = butPtr; + } +} + +mseRegion * +dlg_mouse_mkregion(int y, int x, int height, int width, int code) +{ + mseRegion *butPtr; + + if ((butPtr = find_region_by_code(code)) == 0) { + butPtr = dlg_malloc(mseRegion, 1); + assert_ptr(butPtr, "dlg_mouse_mkregion"); + butPtr->next = regionList; + regionList = butPtr; + } + if (butPtr != 0) { + butPtr->mode = -1; + butPtr->step_x = 0; + butPtr->step_y = 0; + butPtr->y = basey + y; + butPtr->Y = basey + y + height; + butPtr->x = basex + x; + butPtr->X = basex + x + width; + butPtr->code = code; + } + return butPtr; +} + +/* retrieve the frame under the pointer */ +static mseRegion * +any_mouse_region(int y, int x, int small) +{ + mseRegion *butPtr; + + for (butPtr = regionList; butPtr; butPtr = butPtr->next) { + if (small ^ (butPtr->code >= 0)) + continue; + if (y < butPtr->y || y >= butPtr->Y) + continue; + if (x < butPtr->x || x >= butPtr->X) + continue; + break; /* found */ + } + return butPtr; +} + +/* retrieve the frame under the pointer */ +mseRegion * +dlg_mouse_region(int y, int x) +{ + return any_mouse_region(y, x, TRUE); +} + +/* retrieve the bigframe under the pointer */ +mseRegion * +dlg_mouse_bigregion(int y, int x) +{ + return any_mouse_region(y, x, FALSE); +} + +#else +void mouse_dummy(void); +void +mouse_dummy(void) +{ +} +#endif /* USE_MOUSE */ Index: contrib/dialog/dlg_colors.h =================================================================== --- contrib/dialog/dlg_colors.h (revision 0) +++ contrib/dialog/dlg_colors.h (revision 0) @@ -0,0 +1,182 @@ +/* + * $Id: dlg_colors.h,v 1.15 2007/02/18 18:23:29 tom Exp $ + * + * colors.h -- color attribute definitions + * + * Copyright 2000-2005,2006 Thomas E. Dickey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License, version 2.1 + * as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to + * Free Software Foundation, Inc. + * 51 Franklin St., Fifth Floor + * Boston, MA 02110, USA. + * + * An earlier version of this program lists as authors + * Savio Lam (lam836@cs.cuhk.hk) + */ + +#ifndef COLORS_H_included +#define COLORS_H_included 1 + +#include <dialog.h> + +/* + * Default color definitions (DLGC means "Dialog Color") + * + * DLGC_FG_xxx = foreground for "xxx" + * DLGC_BG_xxx = background for "xxx" + * DLGC_HL_xxx = highlight for "xxx" + */ +#define DLGC_FG_SCREEN COLOR_CYAN +#define DLGC_BG_SCREEN COLOR_BLUE +#define DLGC_HL_SCREEN TRUE + +#define DLGC_FG_SHADOW COLOR_BLACK +#define DLGC_BG_SHADOW COLOR_BLACK +#define DLGC_HL_SHADOW TRUE + +#define DLGC_FG_DIALOG COLOR_BLACK +#define DLGC_BG_DIALOG COLOR_WHITE +#define DLGC_HL_DIALOG FALSE + +#define DLGC_FG_TITLE COLOR_BLUE +#define DLGC_BG_TITLE COLOR_WHITE +#define DLGC_HL_TITLE TRUE + +#define DLGC_FG_BORDER COLOR_WHITE +#define DLGC_BG_BORDER COLOR_WHITE +#define DLGC_HL_BORDER TRUE + +#define DLGC_FG_BUTTON_ACTIVE COLOR_WHITE +#define DLGC_BG_BUTTON_ACTIVE COLOR_BLUE +#define DLGC_HL_BUTTON_ACTIVE TRUE + +#define DLGC_FG_BUTTON_INACTIVE COLOR_BLACK +#define DLGC_BG_BUTTON_INACTIVE COLOR_WHITE +#define DLGC_HL_BUTTON_INACTIVE FALSE + +#define DLGC_FG_BUTTON_KEY_ACTIVE COLOR_WHITE +#define DLGC_BG_BUTTON_KEY_ACTIVE COLOR_BLUE +#define DLGC_HL_BUTTON_KEY_ACTIVE TRUE + +#define DLGC_FG_BUTTON_KEY_INACTIVE COLOR_RED +#define DLGC_BG_BUTTON_KEY_INACTIVE COLOR_WHITE +#define DLGC_HL_BUTTON_KEY_INACTIVE FALSE + +#define DLGC_FG_BUTTON_LABEL_ACTIVE COLOR_YELLOW +#define DLGC_BG_BUTTON_LABEL_ACTIVE COLOR_BLUE +#define DLGC_HL_BUTTON_LABEL_ACTIVE TRUE + +#define DLGC_FG_BUTTON_LABEL_INACTIVE COLOR_BLACK +#define DLGC_BG_BUTTON_LABEL_INACTIVE COLOR_WHITE +#define DLGC_HL_BUTTON_LABEL_INACTIVE TRUE + +#define DLGC_FG_FORM_ITEM_READONLY COLOR_CYAN +#define DLGC_BG_FORM_ITEM_READONLY COLOR_WHITE +#define DLGC_HL_FORM_ITEM_READONLY TRUE + +#define DLGC_FG_INPUTBOX COLOR_BLACK +#define DLGC_BG_INPUTBOX COLOR_WHITE +#define DLGC_HL_INPUTBOX FALSE + +#define DLGC_FG_INPUTBOX_BORDER COLOR_BLACK +#define DLGC_BG_INPUTBOX_BORDER COLOR_WHITE +#define DLGC_HL_INPUTBOX_BORDER FALSE + +#define DLGC_FG_SEARCHBOX COLOR_BLACK +#define DLGC_BG_SEARCHBOX COLOR_WHITE +#define DLGC_HL_SEARCHBOX FALSE + +#define DLGC_FG_SEARCHBOX_TITLE COLOR_BLUE +#define DLGC_BG_SEARCHBOX_TITLE COLOR_WHITE +#define DLGC_HL_SEARCHBOX_TITLE TRUE + +#define DLGC_FG_SEARCHBOX_BORDER COLOR_WHITE +#define DLGC_BG_SEARCHBOX_BORDER COLOR_WHITE +#define DLGC_HL_SEARCHBOX_BORDER TRUE + +#define DLGC_FG_POSITION_INDICATOR COLOR_BLUE +#define DLGC_BG_POSITION_INDICATOR COLOR_WHITE +#define DLGC_HL_POSITION_INDICATOR TRUE + +#define DLGC_FG_MENUBOX COLOR_BLACK +#define DLGC_BG_MENUBOX COLOR_WHITE +#define DLGC_HL_MENUBOX FALSE + +#define DLGC_FG_MENUBOX_BORDER COLOR_WHITE +#define DLGC_BG_MENUBOX_BORDER COLOR_WHITE +#define DLGC_HL_MENUBOX_BORDER TRUE + +#define DLGC_FG_ITEM COLOR_BLACK +#define DLGC_BG_ITEM COLOR_WHITE +#define DLGC_HL_ITEM FALSE + +#define DLGC_FG_ITEM_SELECTED COLOR_WHITE +#define DLGC_BG_ITEM_SELECTED COLOR_BLUE +#define DLGC_HL_ITEM_SELECTED TRUE + +#define DLGC_FG_TAG COLOR_BLUE +#define DLGC_BG_TAG COLOR_WHITE +#define DLGC_HL_TAG TRUE + +#define DLGC_FG_TAG_SELECTED COLOR_YELLOW +#define DLGC_BG_TAG_SELECTED COLOR_BLUE +#define DLGC_HL_TAG_SELECTED TRUE + +#define DLGC_FG_TAG_KEY COLOR_RED +#define DLGC_BG_TAG_KEY COLOR_WHITE +#define DLGC_HL_TAG_KEY FALSE + +#define DLGC_FG_TAG_KEY_SELECTED COLOR_RED +#define DLGC_BG_TAG_KEY_SELECTED COLOR_BLUE +#define DLGC_HL_TAG_KEY_SELECTED TRUE + +#define DLGC_FG_CHECK COLOR_BLACK +#define DLGC_BG_CHECK COLOR_WHITE +#define DLGC_HL_CHECK FALSE + +#define DLGC_FG_CHECK_SELECTED COLOR_WHITE +#define DLGC_BG_CHECK_SELECTED COLOR_BLUE +#define DLGC_HL_CHECK_SELECTED TRUE + +#define DLGC_FG_UARROW COLOR_GREEN +#define DLGC_BG_UARROW COLOR_WHITE +#define DLGC_HL_UARROW TRUE + +#define DLGC_FG_DARROW COLOR_GREEN +#define DLGC_BG_DARROW COLOR_WHITE +#define DLGC_HL_DARROW TRUE + +#define DLGC_FG_ITEMHELP COLOR_WHITE +#define DLGC_BG_ITEMHELP COLOR_BLACK +#define DLGC_HL_ITEMHELP FALSE + +#define DLGC_FG_FORM_ACTIVE_TEXT COLOR_WHITE +#define DLGC_BG_FORM_ACTIVE_TEXT COLOR_BLUE +#define DLGC_HL_FORM_ACTIVE_TEXT TRUE + +#define DLGC_FG_FORM_TEXT COLOR_WHITE +#define DLGC_BG_FORM_TEXT COLOR_CYAN +#define DLGC_HL_FORM_TEXT TRUE + +/* End of default color definitions */ + +/* + * Global variables + */ + +typedef struct { + const char *name; + int value; +} color_names_st; + +#endif /* COLORS_H_included */ Index: contrib/dialog/aclocal.m4 =================================================================== --- contrib/dialog/aclocal.m4 (revision 0) +++ contrib/dialog/aclocal.m4 (revision 0) @@ -0,0 +1,3879 @@ +dnl macros used for DIALOG configure script +dnl Copyright 1999-2009,2010 -- Thomas E. Dickey +dnl +dnl see +dnl http://invisible-island.net/autoconf/ +dnl +dnl $Id: aclocal.m4,v 1.75 2010/04/28 20:36:28 tom Exp $ +dnl --------------------------------------------------------------------------- +dnl --------------------------------------------------------------------------- +dnl AM_GNU_GETTEXT version: 11 updated: 2004/01/26 20:58:40 +dnl -------------- +dnl Usage: Just like AM_WITH_NLS, which see. +AC_DEFUN([AM_GNU_GETTEXT], + [AC_REQUIRE([AC_PROG_MAKE_SET])dnl + AC_REQUIRE([AC_PROG_CC])dnl + AC_REQUIRE([AC_CANONICAL_HOST])dnl + AC_REQUIRE([AC_PROG_RANLIB])dnl + AC_REQUIRE([AC_ISC_POSIX])dnl + AC_REQUIRE([AC_HEADER_STDC])dnl + AC_REQUIRE([AC_C_CONST])dnl + AC_REQUIRE([AC_C_INLINE])dnl + AC_REQUIRE([AC_TYPE_OFF_T])dnl + AC_REQUIRE([AC_TYPE_SIZE_T])dnl + AC_REQUIRE([AC_FUNC_ALLOCA])dnl + AC_REQUIRE([AC_FUNC_MMAP])dnl + AC_REQUIRE([jm_GLIBC21])dnl + + AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ +stdlib.h string.h unistd.h sys/param.h]) + AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getcwd getegid geteuid \ +getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \ +strdup strtoul tsearch __argz_count __argz_stringify __argz_next]) + + AM_ICONV + AM_LANGINFO_CODESET + AM_LC_MESSAGES + AM_WITH_NLS([$1],[$2],[$3],[$4]) + + if test "x$CATOBJEXT" != "x"; then + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else + AC_MSG_CHECKING(for catalogs to be installed) + NEW_LINGUAS= + for presentlang in $ALL_LINGUAS; do + useit=no + for desiredlang in ${LINGUAS-$ALL_LINGUAS}; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + NEW_LINGUAS="$NEW_LINGUAS $presentlang" + fi + done + LINGUAS=$NEW_LINGUAS + AC_MSG_RESULT($LINGUAS) + fi + + dnl Construct list of names of catalog files to be constructed. + if test -n "$LINGUAS"; then + for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done + fi + fi + + dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly + dnl find the mkinstalldirs script in another subdir but ($top_srcdir). + dnl Try to locate it. + dnl changed mkinstalldirs to mkdirs.sh for Lynx /je spath 1998-Aug-21 + dnl added check for separate locations of scripts -mirabile 2004-Jan-18 + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + MKINSTALLDIRS="$ac_aux_dir/mkdirs.sh" + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkdirs.sh" + fi + if test -n "$GNUSYSTEM_AUX_DIR" ; then + if test -e "${GNUSYSTEM_AUX_DIR}/mkinstalldirs"; then + MKINSTALLDIRS="${GNUSYSTEM_AUX_DIR}/mkinstalldirs" + fi + fi + AC_SUBST(MKINSTALLDIRS) + + dnl Enable libtool support if the surrounding package wishes it. + INTL_LIBTOOL_SUFFIX_PREFIX=ifelse([$1], use-libtool, [l], []) + AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) +])dnl +dnl --------------------------------------------------------------------------- +dnl AM_ICONV version: 12 updated: 2007/07/30 19:12:03 +dnl -------- +dnl Inserted as requested by gettext 0.10.40 +dnl File from /usr/share/aclocal +dnl iconv.m4 +dnl ==================== +dnl serial AM2 +dnl +dnl From Bruno Haible. +dnl +dnl ==================== +dnl Modified to use CF_FIND_LINKAGE and CF_ADD_SEARCHPATH, to broaden the +dnl range of locations searched. Retain the same cache-variable naming to +dnl allow reuse with the other gettext macros -Thomas E Dickey +AC_DEFUN([AM_ICONV], +[ + dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and + dnl those with the standalone portable GNU libiconv installed). + + AC_ARG_WITH([libiconv-prefix], +[ --with-libiconv-prefix=DIR + search for libiconv in DIR/include and DIR/lib], [ + CF_ADD_OPTIONAL_PATH($withval, libiconv) + ]) + + AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ + CF_FIND_LINKAGE(CF__ICONV_HEAD, + CF__ICONV_BODY, + iconv, + am_cv_func_iconv=yes, + am_cv_func_iconv=["no, consider installing GNU libiconv"])]) + + if test "$am_cv_func_iconv" = yes; then + AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) + + AC_CACHE_CHECK([if the declaration of iconv() needs const.], + am_cv_proto_iconv_const,[ + AC_TRY_COMPILE(CF__ICONV_HEAD [ +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif +],[], am_cv_proto_iconv_const=no, + am_cv_proto_iconv_const=yes)]) + + if test "$am_cv_proto_iconv_const" = yes ; then + am_cv_proto_iconv_arg1="const" + else + am_cv_proto_iconv_arg1="" + fi + + AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, + [Define as const if the declaration of iconv() needs const.]) + fi + + LIBICONV= + if test "$cf_cv_find_linkage_iconv" = yes; then + CF_ADD_INCDIR($cf_cv_header_path_iconv) + if test -n "$cf_cv_library_file_iconv" ; then + LIBICONV="-liconv" + CF_ADD_LIBDIR($cf_cv_library_path_iconv) + fi + fi + + AC_SUBST(LIBICONV) +])dnl +dnl --------------------------------------------------------------------------- +dnl AM_LANGINFO_CODESET version: 3 updated: 2002/10/27 23:21:42 +dnl ------------------- +dnl Inserted as requested by gettext 0.10.40 +dnl File from /usr/share/aclocal +dnl codeset.m4 +dnl ==================== +dnl serial AM1 +dnl +dnl From Bruno Haible. +AC_DEFUN([AM_LANGINFO_CODESET], +[ + AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset, + [AC_TRY_LINK([#include <langinfo.h>], + [char* cs = nl_langinfo(CODESET);], + am_cv_langinfo_codeset=yes, + am_cv_langinfo_codeset=no) + ]) + if test $am_cv_langinfo_codeset = yes; then + AC_DEFINE(HAVE_LANGINFO_CODESET, 1, + [Define if you have <langinfo.h> and nl_langinfo(CODESET).]) + fi +])dnl +dnl --------------------------------------------------------------------------- +dnl AM_LC_MESSAGES version: 4 updated: 2002/10/27 23:21:42 +dnl -------------- +dnl Inserted as requested by gettext 0.10.40 +dnl File from /usr/share/aclocal +dnl lcmessage.m4 +dnl ==================== +dnl Check whether LC_MESSAGES is available in <locale.h>. +dnl Ulrich Drepper <drepper@cygnus.com>, 1995. +dnl +dnl This file can be copied and used freely without restrictions. It can +dnl be used in projects which are not available under the GNU General Public +dnl License or the GNU Library General Public License but which still want +dnl to provide support for the GNU gettext functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. +dnl +dnl serial 2 +dnl +AC_DEFUN([AM_LC_MESSAGES], + [if test $ac_cv_header_locale_h = yes; then + AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, + [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES], + am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) + if test $am_cv_val_LC_MESSAGES = yes; then + AC_DEFINE(HAVE_LC_MESSAGES, 1, + [Define if your <locale.h> file defines LC_MESSAGES.]) + fi + fi])dnl +dnl --------------------------------------------------------------------------- +dnl AM_PATH_PROG_WITH_TEST version: 8 updated: 2009/01/11 20:31:12 +dnl ---------------------- +dnl Inserted as requested by gettext 0.10.40 +dnl File from /usr/share/aclocal +dnl progtest.m4 +dnl ==================== +dnl Search path for a program which passes the given test. +dnl Ulrich Drepper <drepper@cygnus.com>, 1996. +dnl +dnl This file can be copied and used freely without restrictions. It can +dnl be used in projects which are not available under the GNU General Public +dnl License or the GNU Library General Public License but which still want +dnl to provide support for the GNU gettext functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. +dnl +dnl serial 2 +dnl +dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, +dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) +AC_DEFUN([AM_PATH_PROG_WITH_TEST], +[# Extract the first word of "$2", so it can be a program name with args. +AC_REQUIRE([CF_PATHSEP]) +set dummy $2; ac_word=[$]2 +AC_MSG_CHECKING([for $ac_word]) +AC_CACHE_VAL(ac_cv_path_$1, +[case "[$]$1" in + [[\\/]*|?:[\\/]]*) + ac_cv_path_$1="[$]$1" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for ac_dir in ifelse([$5], , $PATH, [$5]); do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word$ac_exeext; then + if [$3]; then + ac_cv_path_$1="$ac_dir/$ac_word$ac_exeext" + break + fi + fi + done + IFS="$ac_save_ifs" +dnl If no 4th arg is given, leave the cache variable unset, +dnl so AC_PATH_PROGS will keep looking. +ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" +])dnl + ;; +esac])dnl +$1="$ac_cv_path_$1" +if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then + AC_MSG_RESULT([$]$1) +else + AC_MSG_RESULT(no) +fi +AC_SUBST($1)dnl +])dnl +dnl --------------------------------------------------------------------------- +dnl AM_WITH_NLS version: 23 updated: 2009/01/11 19:52:42 +dnl ----------- +dnl Inserted as requested by gettext 0.10.40 +dnl File from /usr/share/aclocal +dnl gettext.m4 +dnl ==================== +dnl Macro to add for using GNU gettext. +dnl Ulrich Drepper <drepper@cygnus.com>, 1995. +dnl ==================== +dnl Modified to use CF_FIND_LINKAGE and CF_ADD_SEARCHPATH, to broaden the +dnl range of locations searched. Retain the same cache-variable naming to +dnl allow reuse with the other gettext macros -Thomas E Dickey +dnl ==================== +dnl +dnl This file can be copied and used freely without restrictions. It can +dnl be used in projects which are not available under the GNU General Public +dnl License or the GNU Library General Public License but which still want +dnl to provide support for the GNU gettext functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. +dnl +dnl serial 10 +dnl +dnl Usage: AM_WITH_NLS([TOOLSYMBOL], [NEEDSYMBOL], [LIBDIR], [ENABLED]). +dnl If TOOLSYMBOL is specified and is 'use-libtool', then a libtool library +dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, +dnl depending on --{enable,disable}-{shared,static} and on the presence of +dnl AM-DISABLE-SHARED). Otherwise, a static library +dnl $(top_builddir)/intl/libintl.a will be created. +dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext +dnl implementations (in libc or libintl) without the ngettext() function +dnl will be ignored. +dnl LIBDIR is used to find the intl libraries. If empty, +dnl the value `$(top_builddir)/intl/' is used. +dnl ENABLED is used to control the default for the related --enable-nls, since +dnl not all application developers want this feature by default, e.g., lynx. +dnl +dnl The result of the configuration is one of three cases: +dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled +dnl and used. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 2) GNU gettext has been found in the system's C library. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 3) No internationalization, always use English msgid. +dnl Catalog format: none +dnl Catalog extension: none +dnl The use of .gmo is historical (it was needed to avoid overwriting the +dnl GNU format catalogs when building on a platform with an X/Open gettext), +dnl but we keep it in order not to force irrelevant filename changes on the +dnl maintainers. +dnl +AC_DEFUN([AM_WITH_NLS], +[AC_MSG_CHECKING([whether NLS is requested]) + dnl Default is enabled NLS + ifelse([$4],,[ + AC_ARG_ENABLE(nls, + [ --disable-nls do not use Native Language Support], + USE_NLS=$enableval, USE_NLS=yes)],[ + AC_ARG_ENABLE(nls, + [ --enable-nls use Native Language Support], + USE_NLS=$enableval, USE_NLS=no)]) + AC_MSG_RESULT($USE_NLS) + AC_SUBST(USE_NLS) + + BUILD_INCLUDED_LIBINTL=no + USE_INCLUDED_LIBINTL=no + INTLLIBS= + + dnl If we use NLS figure out what method + if test "$USE_NLS" = "yes"; then + AC_DEFINE(ENABLE_NLS, 1, + [Define to 1 if translation of program messages to the user's native language + is requested.]) + AC_MSG_CHECKING([whether included gettext is requested]) + AC_ARG_WITH(included-gettext, + [ --with-included-gettext use the GNU gettext library included here], + nls_cv_force_use_gnu_gettext=$withval, + nls_cv_force_use_gnu_gettext=no) + AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then + dnl User does not insist on using GNU NLS library. Figure out what + dnl to use. If GNU gettext is available we use this. Else we have + dnl to fall back to GNU NLS library. + CATOBJEXT=NONE + + cf_save_LIBS_1="$LIBS" + LIBS="$LIBICONV $LIBS" + AC_CACHE_CHECK([for libintl.h and gettext()], cf_cv_func_gettext,[ + CF_FIND_LINKAGE(CF__INTL_HEAD, + CF__INTL_BODY, + intl, + cf_cv_func_gettext=yes, + cf_cv_func_gettext=no) + ]) + LIBS="$cf_save_LIBS_1" + + if test "$cf_cv_func_gettext" = yes ; then + AC_DEFINE(HAVE_LIBINTL_H) + + dnl If an already present or preinstalled GNU gettext() is found, + dnl use it. But if this macro is used in GNU gettext, and GNU + dnl gettext is already preinstalled in libintl, we update this + dnl libintl. (Cf. the install rule in intl/Makefile.in.) + if test "$PACKAGE" != gettext; then + AC_DEFINE(HAVE_GETTEXT, 1, + [Define if the GNU gettext() function is already present or preinstalled.]) + + CF_ADD_INCDIR($cf_cv_header_path_intl) + + if test -n "$cf_cv_library_file_intl" ; then + dnl If iconv() is in a separate libiconv library, then anyone + dnl linking with libintl{.a,.so} also needs to link with + dnl libiconv. + INTLLIBS="$cf_cv_library_file_intl $LIBICONV" + CF_ADD_LIBDIR($cf_cv_library_path_intl,INTLLIBS) + fi + + gt_save_LIBS="$LIBS" + LIBS="$LIBS $INTLLIBS" + AC_CHECK_FUNCS(dcgettext) + LIBS="$gt_save_LIBS" + + dnl Search for GNU msgfmt in the PATH. + AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + + dnl Search for GNU xgettext in the PATH. + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :) + + CATOBJEXT=.gmo + fi + fi + + if test "$CATOBJEXT" = "NONE"; then + dnl GNU gettext is not found in the C library. + dnl Fall back on GNU gettext library. + nls_cv_use_gnu_gettext=yes + fi + fi + + if test "$nls_cv_use_gnu_gettext" = "yes"; then + if test ! -d $srcdir/intl ; then + AC_MSG_ERROR(no NLS library is packaged with this application) + fi + dnl Mark actions used to generate GNU NLS library. + INTLOBJS="\$(GETTOBJS)" + AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :) + AC_SUBST(MSGFMT) + BUILD_INCLUDED_LIBINTL=yes + USE_INCLUDED_LIBINTL=yes + CATOBJEXT=.gmo + INTLLIBS="ifelse([$3],[],\$(top_builddir)/intl,[$3])/libintl.ifelse([$1], use-libtool, [l], [])a $LIBICONV" + LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` + fi + + dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. + dnl Test whether we really found GNU msgfmt. + if test "$GMSGFMT" != ":"; then + dnl If it is no GNU msgfmt we define it as : so that the + dnl Makefiles still can work. + if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then + : ; + else + AC_MSG_RESULT( + [found msgfmt program is not GNU msgfmt; ignore it]) + GMSGFMT=":" + fi + fi + + dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. + dnl Test whether we really found GNU xgettext. + if test "$XGETTEXT" != ":"; then + dnl If it is no GNU xgettext we define it as : so that the + dnl Makefiles still can work. + if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then + : ; + else + AC_MSG_RESULT( + [found xgettext program is not GNU xgettext; ignore it]) + XGETTEXT=":" + fi + fi + + dnl We need to process the po/ directory. + POSUB=po + fi + + AC_OUTPUT_COMMANDS( + [for ac_file in $CONFIG_FILES; do + + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + + # PO directories have a Makefile.in generated from Makefile.inn. + case "$ac_file" in */[Mm]akefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + ac_base=`basename $ac_file .in` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$ac_given_srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/$ac_base" || echo "creating $ac_dir/$ac_base" + sed -e "/POTFILES =/r $ac_dir/POTFILES" "$ac_dir/$ac_base.in" > "$ac_dir/$ac_base" + fi + ;; + esac + done]) + + dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL + dnl to 'yes' because some of the testsuite requires it. + if test "$PACKAGE" = gettext; then + BUILD_INCLUDED_LIBINTL=yes + fi + + dnl intl/plural.c is generated from intl/plural.y. It requires bison, + dnl because plural.y uses bison specific features. It requires at least + dnl bison-1.26 because earlier versions generate a plural.c that doesn't + dnl compile. + dnl bison is only needed for the maintainer (who touches plural.y). But in + dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put + dnl the rule in general Makefile. Now, some people carelessly touch the + dnl files or have a broken "make" program, hence the plural.c rule will + dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not + dnl present or too old. + if test "$nls_cv_use_gnu_gettext" = "yes"; then + AC_CHECK_PROGS([INTLBISON], [bison]) + if test -z "$INTLBISON"; then + ac_verc_fail=yes + else + dnl Found it, now check the version. + AC_MSG_CHECKING([version of bison]) +changequote(<<,>>)dnl + ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` + case $ac_prog_version in + '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; + 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) +changequote([,])dnl + ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; + *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; + esac + AC_MSG_RESULT([$ac_prog_version]) + fi + if test $ac_verc_fail = yes; then + INTLBISON=: + fi + fi + + dnl These rules are solely for the distribution goal. While doing this + dnl we only have to keep exactly one list of the available catalogs + dnl in configure.in. + for lang in $ALL_LINGUAS; do + GMOFILES="$GMOFILES $lang.gmo" + POFILES="$POFILES $lang.po" + done + + dnl Make all variables we use known to autoconf. + AC_SUBST(BUILD_INCLUDED_LIBINTL) + AC_SUBST(USE_INCLUDED_LIBINTL) + AC_SUBST(CATALOGS) + AC_SUBST(CATOBJEXT) + AC_SUBST(GMOFILES) + AC_SUBST(INTLLIBS) + AC_SUBST(INTLOBJS) + AC_SUBST(POFILES) + AC_SUBST(POSUB) + + dnl For backward compatibility. Some configure.ins may be using this. + nls_cv_header_intl= + nls_cv_header_libgt= + + dnl For backward compatibility. Some Makefiles may be using this. + DATADIRNAME=share + AC_SUBST(DATADIRNAME) + + dnl For backward compatibility. Some Makefiles may be using this. + INSTOBJEXT=.mo + AC_SUBST(INSTOBJEXT) + + dnl For backward compatibility. Some Makefiles may be using this. + GENCAT=gencat + AC_SUBST(GENCAT) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_AC_PREREQ version: 2 updated: 1997/09/06 13:24:56 +dnl ------------ +dnl Conditionally generate script according to whether we're using the release +dnl version of autoconf, or a patched version (using the ternary component as +dnl the patch-version). +define(CF_AC_PREREQ, +[CF_PREREQ_COMPARE( +AC_PREREQ_CANON(AC_PREREQ_SPLIT(AC_ACVERSION)), +AC_PREREQ_CANON(AC_PREREQ_SPLIT([$1])), [$1], [$2], [$3])])dnl +dnl --------------------------------------------------------------------------- +dnl CF_ADD_CFLAGS version: 9 updated: 2010/01/09 11:05:50 +dnl ------------- +dnl Copy non-preprocessor flags to $CFLAGS, preprocessor flags to $CPPFLAGS +dnl The second parameter if given makes this macro verbose. +dnl +dnl Put any preprocessor definitions that use quoted strings in $EXTRA_CPPFLAGS, +dnl to simplify use of $CPPFLAGS in compiler checks, etc., that are easily +dnl confused by the quotes (which require backslashes to keep them usable). +AC_DEFUN([CF_ADD_CFLAGS], +[ +cf_fix_cppflags=no +cf_new_cflags= +cf_new_cppflags= +cf_new_extra_cppflags= + +for cf_add_cflags in $1 +do +case $cf_fix_cppflags in +no) + case $cf_add_cflags in #(vi + -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi + case $cf_add_cflags in + -D*) + cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[[^=]]*='\''\"[[^"]]*//'` + + test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=yes + + if test $cf_fix_cppflags = yes ; then + cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + continue + elif test "${cf_tst_cflags}" = "\"'" ; then + cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + continue + fi + ;; + esac + case "$CPPFLAGS" in + *$cf_add_cflags) #(vi + ;; + *) #(vi + case $cf_add_cflags in #(vi + -D*) + cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` + CF_REMOVE_DEFINE(CPPFLAGS,$CPPFLAGS,$cf_tst_cppflags) + ;; + esac + cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" + ;; + esac + ;; + *) + cf_new_cflags="$cf_new_cflags $cf_add_cflags" + ;; + esac + ;; +yes) + cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" + + cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[[^"]]*"'\''//'` + + test "${cf_add_cflags}" != "${cf_tst_cflags}" \ + && test -z "${cf_tst_cflags}" \ + && cf_fix_cppflags=no + ;; +esac +done + +if test -n "$cf_new_cflags" ; then + ifelse($2,,,[CF_VERBOSE(add to \$CFLAGS $cf_new_cflags)]) + CFLAGS="$CFLAGS $cf_new_cflags" +fi + +if test -n "$cf_new_cppflags" ; then + ifelse($2,,,[CF_VERBOSE(add to \$CPPFLAGS $cf_new_cppflags)]) + CPPFLAGS="$CPPFLAGS $cf_new_cppflags" +fi + +if test -n "$cf_new_extra_cppflags" ; then + ifelse($2,,,[CF_VERBOSE(add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags)]) + EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" +fi + +AC_SUBST(EXTRA_CPPFLAGS) + +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_ADD_INCDIR version: 12 updated: 2009/01/18 10:00:47 +dnl ------------- +dnl Add an include-directory to $CPPFLAGS. Don't add /usr/include, since it's +dnl redundant. We don't normally need to add -I/usr/local/include for gcc, +dnl but old versions (and some misinstalled ones) need that. To make things +dnl worse, gcc 3.x may give error messages if -I/usr/local/include is added to +dnl the include-path). +AC_DEFUN([CF_ADD_INCDIR], +[ +if test -n "$1" ; then + for cf_add_incdir in $1 + do + while test $cf_add_incdir != /usr/include + do + if test -d $cf_add_incdir + then + cf_have_incdir=no + if test -n "$CFLAGS$CPPFLAGS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_incdir in $CFLAGS $CPPFLAGS ; do + if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then + cf_have_incdir=yes; break + fi + done + fi + + if test "$cf_have_incdir" = no ; then + if test "$cf_add_incdir" = /usr/local/include ; then + if test "$GCC" = yes + then + cf_save_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" + AC_TRY_COMPILE([#include <stdio.h>], + [printf("Hello")], + [], + [cf_have_incdir=yes]) + CPPFLAGS=$cf_save_CPPFLAGS + fi + fi + fi + + if test "$cf_have_incdir" = no ; then + CF_VERBOSE(adding $cf_add_incdir to include-path) + ifelse($2,,CPPFLAGS,$2)="$ifelse($2,,CPPFLAGS,$2) -I$cf_add_incdir" + + cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` + test "$cf_top_incdir" = "$cf_add_incdir" && break + cf_add_incdir="$cf_top_incdir" + else + break + fi + fi + done + done +fi +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_ADD_LIBDIR version: 8 updated: 2009/01/18 10:01:08 +dnl ------------- +dnl Adds to the library-path +dnl +dnl Some machines have trouble with multiple -L options. +dnl +dnl $1 is the (list of) directory(s) to add +dnl $2 is the optional name of the variable to update (default LDFLAGS) +dnl +AC_DEFUN([CF_ADD_LIBDIR], +[ +if test -n "$1" ; then + for cf_add_libdir in $1 + do + if test $cf_add_libdir = /usr/lib ; then + : + elif test -d $cf_add_libdir + then + cf_have_libdir=no + if test -n "$LDFLAGS$LIBS" ; then + # a loop is needed to ensure we can add subdirs of existing dirs + for cf_test_libdir in $LDFLAGS $LIBS ; do + if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then + cf_have_libdir=yes; break + fi + done + fi + if test "$cf_have_libdir" = no ; then + CF_VERBOSE(adding $cf_add_libdir to library-path) + ifelse($2,,LDFLAGS,$2)="-L$cf_add_libdir $ifelse($2,,LDFLAGS,$2)" + fi + fi + done +fi +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_ADD_OPTIONAL_PATH version: 1 updated: 2007/07/29 12:33:33 +dnl -------------------- +dnl Add an optional search-path to the compile/link variables. +dnl See CF_WITH_PATH +dnl +dnl $1 = shell variable containing the result of --with-XXX=[DIR] +dnl $2 = module to look for. +AC_DEFUN([CF_ADD_OPTIONAL_PATH],[ + case "$1" in #(vi + no) #(vi + ;; + yes) #(vi + ;; + *) + CF_ADD_SEARCHPATH([$1], [AC_MSG_ERROR(cannot find $2 under $1)]) + ;; + esac +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_ADD_SEARCHPATH version: 5 updated: 2009/01/11 20:40:21 +dnl ----------------- +dnl Set $CPPFLAGS and $LDFLAGS with the directories given via the parameter. +dnl They can be either the common root of include- and lib-directories, or the +dnl lib-directory (to allow for things like lib64 directories). +dnl See also CF_FIND_LINKAGE. +dnl +dnl $1 is the list of colon-separated directory names to search. +dnl $2 is the action to take if a parameter does not yield a directory. +AC_DEFUN([CF_ADD_SEARCHPATH], +[ +AC_REQUIRE([CF_PATHSEP]) +for cf_searchpath in `echo "$1" | tr $PATH_SEPARATOR ' '`; do + if test -d $cf_searchpath/include; then + CF_ADD_INCDIR($cf_searchpath/include) + elif test -d $cf_searchpath/../include ; then + CF_ADD_INCDIR($cf_searchpath/../include) + ifelse([$2],,,[else +$2]) + fi + if test -d $cf_searchpath/lib; then + CF_ADD_LIBDIR($cf_searchpath/lib) + elif test -d $cf_searchpath ; then + CF_ADD_LIBDIR($cf_searchpath) + ifelse([$2],,,[else +$2]) + fi +done +]) +dnl --------------------------------------------------------------------------- +dnl CF_ADD_SUBDIR_PATH version: 2 updated: 2007/07/29 10:12:59 +dnl ------------------ +dnl Append to a search-list for a nonstandard header/lib-file +dnl $1 = the variable to return as result +dnl $2 = the package name +dnl $3 = the subdirectory, e.g., bin, include or lib +dnl $4 = the directory under which we will test for subdirectories +dnl $5 = a directory that we do not want $4 to match +AC_DEFUN([CF_ADD_SUBDIR_PATH], +[ +test "$4" != "$5" && \ +test -d "$4" && \ +ifelse([$5],NONE,,[(test $5 = NONE || test -d $5) &&]) { + test -n "$verbose" && echo " ... testing for $3-directories under $4" + test -d $4/$3 && $1="[$]$1 $4/$3" + test -d $4/$3/$2 && $1="[$]$1 $4/$3/$2" + test -d $4/$3/$2/$3 && $1="[$]$1 $4/$3/$2/$3" + test -d $4/$2/$3 && $1="[$]$1 $4/$2/$3" + test -d $4/$2/$3/$2 && $1="[$]$1 $4/$2/$3/$2" +} +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_ARG_DISABLE version: 3 updated: 1999/03/30 17:24:31 +dnl -------------- +dnl Allow user to disable a normally-on option. +AC_DEFUN([CF_ARG_DISABLE], +[CF_ARG_OPTION($1,[$2],[$3],[$4],yes)])dnl +dnl --------------------------------------------------------------------------- +dnl CF_ARG_ENABLE version: 3 updated: 1999/03/30 17:24:31 +dnl ------------- +dnl Allow user to enable a normally-off option. +AC_DEFUN([CF_ARG_ENABLE], +[CF_ARG_OPTION($1,[$2],[$3],[$4],no)])dnl +dnl --------------------------------------------------------------------------- +dnl CF_ARG_MSG_ENABLE version: 2 updated: 2000/07/29 19:32:03 +dnl ----------------- +dnl Verbose form of AC_ARG_ENABLE: +dnl +dnl Parameters: +dnl $1 = message +dnl $2 = option name +dnl $3 = help-string +dnl $4 = action to perform if option is enabled +dnl $5 = action if perform if option is disabled +dnl $6 = default option value (either 'yes' or 'no') +AC_DEFUN([CF_ARG_MSG_ENABLE],[ +AC_MSG_CHECKING($1) +AC_ARG_ENABLE($2,[$3],,enableval=ifelse($6,,no,$6)) +AC_MSG_RESULT($enableval) +if test "$enableval" != no ; then +ifelse($4,,[ :],$4) +else +ifelse($5,,[ :],$5) +fi +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_ARG_OPTION version: 3 updated: 1997/10/18 14:42:41 +dnl ------------- +dnl Restricted form of AC_ARG_ENABLE that ensures user doesn't give bogus +dnl values. +dnl +dnl Parameters: +dnl $1 = option name +dnl $2 = help-string +dnl $3 = action to perform if option is not default +dnl $4 = action if perform if option is default +dnl $5 = default option value (either 'yes' or 'no') +AC_DEFUN([CF_ARG_OPTION], +[AC_ARG_ENABLE($1,[$2],[test "$enableval" != ifelse($5,no,yes,no) && enableval=ifelse($5,no,no,yes) + if test "$enableval" != "$5" ; then +ifelse($3,,[ :]dnl +,[ $3]) ifelse($4,,,[ + else + $4]) + fi],[enableval=$5 ifelse($4,,,[ + $4 +])dnl + ])])dnl +dnl --------------------------------------------------------------------------- +dnl CF_BUNDLED_INTL version: 14 updated: 2010/01/17 20:37:27 +dnl --------------- +dnl Top-level macro for configuring an application with a bundled copy of +dnl the intl and po directories for gettext. +dnl +dnl $1 specifies either Makefile or makefile, defaulting to the former. +dnl $2 if nonempty sets the option to --enable-nls rather than to --disable-nls +dnl +dnl Sets variables which can be used to substitute in makefiles: +dnl GT_YES - "#" comment unless building intl library, otherwise empty +dnl GT_NO - "#" comment if building intl library, otherwise empty +dnl INTLDIR_MAKE - to make ./intl directory +dnl MSG_DIR_MAKE - to make ./po directory +dnl SUB_MAKEFILE - list of makefiles in ./intl, ./po directories +dnl Defines +dnl HAVE_LIBGETTEXT_H if we're using ./intl +dnl +dnl Environment: +dnl ALL_LINGUAS if set, lists the root names of the ".po" files. +dnl CONFIG_H assumed to be "config.h" +dnl VERSION may be set, otherwise extract from "VERSION" file. +dnl +AC_DEFUN([CF_BUNDLED_INTL],[ +cf_makefile=ifelse($1,,Makefile,$1) + +dnl Set of available languages (based on source distribution). Note that +dnl setting $LINGUAS overrides $ALL_LINGUAS. Some environments set $LINGUAS +dnl rather than $LC_ALL +test -z "$ALL_LINGUAS" && ALL_LINGUAS=`test -d $srcdir/po && cd $srcdir/po && echo *.po|sed -e 's/\.po//g' -e 's/*//'` + +# Allow override of "config.h" definition: +: ${CONFIG_H=config.h} +AC_SUBST(CONFIG_H) + +if test -z "$VERSION" ; then +if test -f $srcdir/VERSION ; then + VERSION=`sed -e '2,$d' $srcdir/VERSION|cut -f1` +else + VERSION=unknown +fi +fi +AC_SUBST(VERSION) + +AM_GNU_GETTEXT(,,,[$2]) + +INTLDIR_MAKE= +MSG_DIR_MAKE= +SUB_MAKEFILE= + +dnl this updates SUB_MAKEFILE and MSG_DIR_MAKE: +CF_OUR_MESSAGES($1) + +if test "$USE_INCLUDED_LIBINTL" = yes ; then + if test "$nls_cv_force_use_gnu_gettext" = yes ; then + : + elif test "$nls_cv_use_gnu_gettext" = yes ; then + : + else + INTLDIR_MAKE="#" + fi + if test -z "$INTLDIR_MAKE"; then + AC_DEFINE(HAVE_LIBGETTEXT_H) + for cf_makefile in \ + $srcdir/intl/Makefile.in \ + $srcdir/intl/makefile.in + do + if test -f "$cf_makefile" ; then + SUB_MAKEFILE="$SUB_MAKEFILE `echo \"${cf_makefile}\"|sed -e 's,^'$srcdir/',,' -e 's/\.in$//'`:${cf_makefile}" + break + fi + done + fi +else + INTLDIR_MAKE="#" + if test "$USE_NLS" = yes ; then + AC_CHECK_HEADERS(libintl.h) + fi +fi + +if test -z "$INTLDIR_MAKE" ; then + CPPFLAGS="$CPPFLAGS -I../intl" +fi + +dnl FIXME: we use this in lynx (the alternative is a spurious dependency upon +dnl GNU make) +if test "$BUILD_INCLUDED_LIBINTL" = yes ; then + GT_YES="#" + GT_NO= +else + GT_YES= + GT_NO="#" +fi + +AC_SUBST(INTLDIR_MAKE) +AC_SUBST(MSG_DIR_MAKE) +AC_SUBST(GT_YES) +AC_SUBST(GT_NO) + +dnl FIXME: the underlying AM_GNU_GETTEXT macro either needs some fixes or a +dnl little documentation. It doesn't define anything so that we can ifdef our +dnl own code, except ENABLE_NLS, which is too vague to be of any use. + +if test "$USE_INCLUDED_LIBINTL" = yes ; then + if test "$nls_cv_force_use_gnu_gettext" = yes ; then + AC_DEFINE(HAVE_GETTEXT) + elif test "$nls_cv_use_gnu_gettext" = yes ; then + AC_DEFINE(HAVE_GETTEXT) + fi + if test -n "$nls_cv_header_intl" ; then + AC_DEFINE(HAVE_LIBINTL_H) + fi +fi +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_CHECK_CACHE version: 11 updated: 2008/03/23 14:45:59 +dnl -------------- +dnl Check if we're accidentally using a cache from a different machine. +dnl Derive the system name, as a check for reusing the autoconf cache. +dnl +dnl If we've packaged config.guess and config.sub, run that (since it does a +dnl better job than uname). Normally we'll use AC_CANONICAL_HOST, but allow +dnl an extra parameter that we may override, e.g., for AC_CANONICAL_SYSTEM +dnl which is useful in cross-compiles. +dnl +dnl Note: we would use $ac_config_sub, but that is one of the places where +dnl autoconf 2.5x broke compatibility with autoconf 2.13 +AC_DEFUN([CF_CHECK_CACHE], +[ +if test -f $srcdir/config.guess || test -f $ac_aux_dir/config.guess ; then + ifelse([$1],,[AC_CANONICAL_HOST],[$1]) + system_name="$host_os" +else + system_name="`(uname -s -r) 2>/dev/null`" + if test -z "$system_name" ; then + system_name="`(hostname) 2>/dev/null`" + fi +fi +test -n "$system_name" && AC_DEFINE_UNQUOTED(SYSTEM_NAME,"$system_name") +AC_CACHE_VAL(cf_cv_system_name,[cf_cv_system_name="$system_name"]) + +test -z "$system_name" && system_name="$cf_cv_system_name" +test -n "$cf_cv_system_name" && AC_MSG_RESULT(Configuring for $cf_cv_system_name) + +if test ".$system_name" != ".$cf_cv_system_name" ; then + AC_MSG_RESULT(Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)) + AC_MSG_ERROR("Please remove config.cache and try again.") +fi +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_CURSES_CHTYPE version: 6 updated: 2003/11/06 19:59:57 +dnl ---------------- +dnl Test if curses defines 'chtype' (usually a 'long' type for SysV curses). +AC_DEFUN([CF_CURSES_CHTYPE], +[ +AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl +AC_CACHE_CHECK(for chtype typedef,cf_cv_chtype_decl,[ + AC_TRY_COMPILE([#include <${cf_cv_ncurses_header-curses.h}>], + [chtype foo], + [cf_cv_chtype_decl=yes], + [cf_cv_chtype_decl=no])]) +if test $cf_cv_chtype_decl = yes ; then + AC_DEFINE(HAVE_TYPE_CHTYPE) + AC_CACHE_CHECK(if chtype is scalar or struct,cf_cv_chtype_type,[ + AC_TRY_COMPILE([#include <${cf_cv_ncurses_header-curses.h}>], + [chtype foo; long x = foo], + [cf_cv_chtype_type=scalar], + [cf_cv_chtype_type=struct])]) + if test $cf_cv_chtype_type = scalar ; then + AC_DEFINE(TYPE_CHTYPE_IS_SCALAR) + fi +fi +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_CURSES_CONFIG version: 2 updated: 2006/10/29 11:06:27 +dnl ---------------- +dnl Tie together the configure-script macros for curses. It may be ncurses, +dnl but unless asked, we do not make a special search for ncurses. However, +dnl still check for the ncurses version number, for use in other macros. +AC_DEFUN([CF_CURSES_CONFIG], +[ +CF_CURSES_CPPFLAGS +CF_NCURSES_VERSION +CF_CURSES_LIBS +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_CURSES_CPPFLAGS version: 10 updated: 2009/01/06 19:34:11 +dnl ------------------ +dnl Look for the curses headers. +AC_DEFUN([CF_CURSES_CPPFLAGS],[ + +AC_CACHE_CHECK(for extra include directories,cf_cv_curses_incdir,[ +cf_cv_curses_incdir=no +case $host_os in #(vi +hpux10.*) #(vi + test -d /usr/include/curses_colr && \ + cf_cv_curses_incdir="-I/usr/include/curses_colr" + ;; +sunos3*|sunos4*) + test -d /usr/5lib && \ + test -d /usr/5include && \ + cf_cv_curses_incdir="-I/usr/5include" + ;; +esac +]) +test "$cf_cv_curses_incdir" != no && CPPFLAGS="$CPPFLAGS $cf_cv_curses_incdir" + +CF_CURSES_HEADER +CF_TERM_HEADER +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_CURSES_FUNCS version: 14 updated: 2009/07/16 19:34:55 +dnl --------------- +dnl Curses-functions are a little complicated, since a lot of them are macros. +AC_DEFUN([CF_CURSES_FUNCS], +[ +AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl +AC_REQUIRE([CF_XOPEN_CURSES]) +AC_REQUIRE([CF_CURSES_TERM_H]) +for cf_func in $1 +do + CF_UPPER(cf_tr_func,$cf_func) + AC_MSG_CHECKING(for ${cf_func}) + CF_MSG_LOG(${cf_func}) + AC_CACHE_VAL(cf_cv_func_$cf_func,[ + eval cf_result='$ac_cv_func_'$cf_func + if test ".$cf_result" != ".no"; then + AC_TRY_LINK(CF__CURSES_HEAD, + [ +#ifndef ${cf_func} +long foo = (long)(&${cf_func}); +${cf_cv_main_return-return}(foo == 0); +#endif + ], + [cf_result=yes], + [cf_result=no]) + fi + eval 'cf_cv_func_'$cf_func'=$cf_result' + ]) + # use the computed/retrieved cache-value: + eval 'cf_result=$cf_cv_func_'$cf_func + AC_MSG_RESULT($cf_result) + if test $cf_result != no; then + AC_DEFINE_UNQUOTED(HAVE_${cf_tr_func}) + fi +done +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_CURSES_HEADER version: 2 updated: 2010/04/28 06:02:16 +dnl ---------------- +dnl Find a "curses" header file, e.g,. "curses.h", or one of the more common +dnl variations of ncurses' installs. +dnl +dnl $1 = ncurses when looking for ncurses, or is empty +AC_DEFUN([CF_CURSES_HEADER],[ +AC_CACHE_CHECK(if we have identified curses headers,cf_cv_ncurses_header,[ +cf_cv_ncurses_header=none +for cf_header in ifelse($1,,,[ \ + $1/curses.h \ + $1/ncurses.h]) \ + curses.h \ + ncurses.h ifelse($1,,[ncurses/curses.h ncurses/ncurses.h]) +do +AC_TRY_COMPILE([#include <${cf_header}>], + [initscr(); tgoto("?", 0,0)], + [cf_cv_ncurses_header=$cf_header; break],[]) +done +]) + +if test "$cf_cv_ncurses_header" = none ; then + AC_MSG_ERROR(No curses header-files found) +fi + +# cheat, to get the right #define's for HAVE_NCURSES_H, etc. +AC_CHECK_HEADERS($cf_cv_ncurses_header) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_CURSES_LIBS version: 29 updated: 2009/01/06 19:34:57 +dnl -------------- +dnl Look for the curses libraries. Older curses implementations may require +dnl termcap/termlib to be linked as well. Call CF_CURSES_CPPFLAGS first. +AC_DEFUN([CF_CURSES_LIBS],[ + +AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl +AC_MSG_CHECKING(if we have identified curses libraries) +AC_TRY_LINK([#include <${cf_cv_ncurses_header-curses.h}>], + [initscr(); tgoto("?", 0,0)], + cf_result=yes, + cf_result=no) +AC_MSG_RESULT($cf_result) + +if test "$cf_result" = no ; then +case $host_os in #(vi +freebsd*) #(vi + AC_CHECK_LIB(mytinfo,tgoto,[LIBS="-lmytinfo $LIBS"]) + ;; +hpux10.*) #(vi + AC_CHECK_LIB(cur_colr,initscr,[ + LIBS="-lcur_colr $LIBS" + ac_cv_func_initscr=yes + ],[ + AC_CHECK_LIB(Hcurses,initscr,[ + # HP's header uses __HP_CURSES, but user claims _HP_CURSES. + LIBS="-lHcurses $LIBS" + CPPFLAGS="$CPPFLAGS -D__HP_CURSES -D_HP_CURSES" + ac_cv_func_initscr=yes + ])]) + ;; +linux*) # Suse Linux does not follow /usr/lib convention + CF_ADD_LIBDIR(/lib) + ;; +sunos3*|sunos4*) + if test -d /usr/5lib ; then + CF_ADD_LIBDIR(/usr/5lib) + LIBS="$LIBS -lcurses -ltermcap" + fi + ac_cv_func_initscr=yes + ;; +esac + +if test ".$ac_cv_func_initscr" != .yes ; then + cf_save_LIBS="$LIBS" + cf_term_lib="" + cf_curs_lib="" + + if test ".${cf_cv_ncurses_version-no}" != .no + then + cf_check_list="ncurses curses cursesX" + else + cf_check_list="cursesX curses ncurses" + fi + + # Check for library containing tgoto. Do this before curses library + # because it may be needed to link the test-case for initscr. + AC_CHECK_FUNC(tgoto,[cf_term_lib=predefined],[ + for cf_term_lib in $cf_check_list termcap termlib unknown + do + AC_CHECK_LIB($cf_term_lib,tgoto,[break]) + done + ]) + + # Check for library containing initscr + test "$cf_term_lib" != predefined && test "$cf_term_lib" != unknown && LIBS="-l$cf_term_lib $cf_save_LIBS" + for cf_curs_lib in $cf_check_list xcurses jcurses pdcurses unknown + do + AC_CHECK_LIB($cf_curs_lib,initscr,[break]) + done + test $cf_curs_lib = unknown && AC_MSG_ERROR(no curses library found) + + LIBS="-l$cf_curs_lib $cf_save_LIBS" + if test "$cf_term_lib" = unknown ; then + AC_MSG_CHECKING(if we can link with $cf_curs_lib library) + AC_TRY_LINK([#include <${cf_cv_ncurses_header-curses.h}>], + [initscr()], + [cf_result=yes], + [cf_result=no]) + AC_MSG_RESULT($cf_result) + test $cf_result = no && AC_MSG_ERROR(Cannot link curses library) + elif test "$cf_curs_lib" = "$cf_term_lib" ; then + : + elif test "$cf_term_lib" != predefined ; then + AC_MSG_CHECKING(if we need both $cf_curs_lib and $cf_term_lib libraries) + AC_TRY_LINK([#include <${cf_cv_ncurses_header-curses.h}>], + [initscr(); tgoto((char *)0, 0, 0);], + [cf_result=no], + [ + LIBS="-l$cf_curs_lib -l$cf_term_lib $cf_save_LIBS" + AC_TRY_LINK([#include <${cf_cv_ncurses_header-curses.h}>], + [initscr()], + [cf_result=yes], + [cf_result=error]) + ]) + AC_MSG_RESULT($cf_result) + fi +fi +fi + +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_CURSES_TERM_H version: 7 updated: 2010/01/24 18:40:06 +dnl ---------------- +dnl SVr4 curses should have term.h as well (where it puts the definitions of +dnl the low-level interface). This may not be true in old/broken implementations, +dnl as well as in misconfigured systems (e.g., gcc configured for Solaris 2.4 +dnl running with Solaris 2.5.1). +AC_DEFUN([CF_CURSES_TERM_H], +[ +AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl + +AC_CACHE_CHECK(for term.h, cf_cv_term_header,[ + +# If we found <ncurses/curses.h>, look for <ncurses/term.h>, but always look +# for <term.h> if we do not find the variant. +for cf_header in \ + `echo ${cf_cv_ncurses_header-curses.h} | sed -e 's%/.*%/%'`term.h \ + term.h +do + AC_TRY_COMPILE([ +#include <${cf_cv_ncurses_header-curses.h}> +#include <${cf_header}>], + [WINDOW *x], + [cf_cv_term_header=$cf_header + break], + [cf_cv_term_header=no]) +done + +case $cf_cv_term_header in #(vi +no) + # If curses is ncurses, some packagers still mess it up by trying to make + # us use GNU termcap. This handles the most common case. + for cf_header in ncurses/term.h ncursesw/term.h + do + AC_TRY_COMPILE([ +#include <${cf_cv_ncurses_header-curses.h}> +#ifdef NCURSES_VERSION +#include <${cf_header}> +#else +make an error +#endif], + [WINDOW *x], + [cf_cv_term_header=$cf_header + break], + [cf_cv_term_header=no]) + done + ;; +esac +]) + +case $cf_cv_term_header in #(vi +term.h) #(vi + AC_DEFINE(HAVE_TERM_H) + ;; +ncurses/term.h) #(vi + AC_DEFINE(HAVE_NCURSES_TERM_H) + ;; +ncursesw/term.h) + AC_DEFINE(HAVE_NCURSESW_TERM_H) + ;; +esac +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_DIRNAME version: 4 updated: 2002/12/21 19:25:52 +dnl ---------- +dnl "dirname" is not portable, so we fake it with a shell script. +AC_DEFUN([CF_DIRNAME],[$1=`echo $2 | sed -e 's%/[[^/]]*$%%'`])dnl +dnl --------------------------------------------------------------------------- +dnl CF_DISABLE_ECHO version: 11 updated: 2009/12/13 13:16:57 +dnl --------------- +dnl You can always use "make -n" to see the actual options, but it's hard to +dnl pick out/analyze warning messages when the compile-line is long. +dnl +dnl Sets: +dnl ECHO_LT - symbol to control if libtool is verbose +dnl ECHO_LD - symbol to prefix "cc -o" lines +dnl RULE_CC - symbol to put before implicit "cc -c" lines (e.g., .c.o) +dnl SHOW_CC - symbol to put before explicit "cc -c" lines +dnl ECHO_CC - symbol to put before any "cc" line +dnl +AC_DEFUN([CF_DISABLE_ECHO],[ +AC_MSG_CHECKING(if you want to see long compiling messages) +CF_ARG_DISABLE(echo, + [ --disable-echo display "compiling" commands], + [ + ECHO_LT='--silent' + ECHO_LD='@echo linking [$]@;' + RULE_CC='@echo compiling [$]<' + SHOW_CC='@echo compiling [$]@' + ECHO_CC='@' +],[ + ECHO_LT='' + ECHO_LD='' + RULE_CC='' + SHOW_CC='' + ECHO_CC='' +]) +AC_MSG_RESULT($enableval) +AC_SUBST(ECHO_LT) +AC_SUBST(ECHO_LD) +AC_SUBST(RULE_CC) +AC_SUBST(SHOW_CC) +AC_SUBST(ECHO_CC) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_DISABLE_RPATH_HACK version: 1 updated: 2010/04/11 10:54:00 +dnl --------------------- +dnl The rpath-hack makes it simpler to build programs, particularly with the +dnl *BSD ports which may have essential libraries in unusual places. But it +dnl can interfere with building an executable for the base system. Use this +dnl option in that case. +AC_DEFUN([CF_DISABLE_RPATH_HACK], +[ +AC_MSG_CHECKING(if rpath should be not be set) +CF_ARG_DISABLE(rpath-hack, + [ --disable-rpath-hack don't add rpath options for additional libraries], + [cf_disable_rpath_hack=yes], + [cf_disable_rpath_hack=no]) +AC_MSG_RESULT($cf_disable_rpath_hack) +if test "$cf_disable_rpath_hack" = no ; then + CF_RPATH_HACK +fi +]) +dnl --------------------------------------------------------------------------- +dnl CF_FIND_HEADER version: 2 updated: 2007/07/29 11:32:00 +dnl -------------- +dnl Find a header file, searching for it if it is not already in the include +dnl path. +dnl +dnl $1 = the header filename +dnl $2 = the package name +dnl $3 = action to perform if successful +dnl $4 = action to perform if not successful +AC_DEFUN([CF_FIND_HEADER],[ +AC_CHECK_HEADER([$1], + cf_find_header=yes,[ + cf_find_header=no +CF_HEADER_PATH(cf_search,$2) +for cf_incdir in $cf_search +do + if test -f $cf_incdir/$1 ; then + CF_ADD_INCDIR($cf_incdir) + CF_VERBOSE(... found in $cf_incdir) + cf_find_header=yes + break + fi + CF_VERBOSE(... tested $cf_incdir) +done +]) +if test "$cf_find_header" = yes ; then +ifelse([$3],,:,[$3]) +ifelse([$4],,,[else +$4]) +fi +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_FIND_LIBRARY version: 9 updated: 2008/03/23 14:48:54 +dnl --------------- +dnl Look for a non-standard library, given parameters for AC_TRY_LINK. We +dnl prefer a standard location, and use -L options only if we do not find the +dnl library in the standard library location(s). +dnl $1 = library name +dnl $2 = library class, usually the same as library name +dnl $3 = includes +dnl $4 = code fragment to compile/link +dnl $5 = corresponding function-name +dnl $6 = flag, nonnull if failure should not cause an error-exit +dnl +dnl Sets the variable "$cf_libdir" as a side-effect, so we can see if we had +dnl to use a -L option. +AC_DEFUN([CF_FIND_LIBRARY], +[ + eval 'cf_cv_have_lib_'$1'=no' + cf_libdir="" + AC_CHECK_FUNC($5, + eval 'cf_cv_have_lib_'$1'=yes',[ + cf_save_LIBS="$LIBS" + AC_MSG_CHECKING(for $5 in -l$1) + LIBS="-l$1 $LIBS" + AC_TRY_LINK([$3],[$4], + [AC_MSG_RESULT(yes) + eval 'cf_cv_have_lib_'$1'=yes' + ], + [AC_MSG_RESULT(no) + CF_LIBRARY_PATH(cf_search,$2) + for cf_libdir in $cf_search + do + AC_MSG_CHECKING(for -l$1 in $cf_libdir) + LIBS="-L$cf_libdir -l$1 $cf_save_LIBS" + AC_TRY_LINK([$3],[$4], + [AC_MSG_RESULT(yes) + eval 'cf_cv_have_lib_'$1'=yes' + break], + [AC_MSG_RESULT(no) + LIBS="$cf_save_LIBS"]) + done + ]) + ]) +eval 'cf_found_library=[$]cf_cv_have_lib_'$1 +ifelse($6,,[ +if test $cf_found_library = no ; then + AC_MSG_ERROR(Cannot link $1 library) +fi +]) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_FIND_LINKAGE version: 16 updated: 2010/04/21 06:20:50 +dnl --------------- +dnl Find a library (specifically the linkage used in the code fragment), +dnl searching for it if it is not already in the library path. +dnl See also CF_ADD_SEARCHPATH. +dnl +dnl Parameters (4-on are optional): +dnl $1 = headers for library entrypoint +dnl $2 = code fragment for library entrypoint +dnl $3 = the library name without the "-l" option or ".so" suffix. +dnl $4 = action to perform if successful (default: update CPPFLAGS, etc) +dnl $5 = action to perform if not successful +dnl $6 = module name, if not the same as the library name +dnl $7 = extra libraries +dnl +dnl Sets these variables: +dnl $cf_cv_find_linkage_$3 - yes/no according to whether linkage is found +dnl $cf_cv_header_path_$3 - include-directory if needed +dnl $cf_cv_library_path_$3 - library-directory if needed +dnl $cf_cv_library_file_$3 - library-file if needed, e.g., -l$3 +AC_DEFUN([CF_FIND_LINKAGE],[ + +# If the linkage is not already in the $CPPFLAGS/$LDFLAGS configuration, these +# will be set on completion of the AC_TRY_LINK below. +cf_cv_header_path_$3= +cf_cv_library_path_$3= + +CF_MSG_LOG([Starting [FIND_LINKAGE]($3,$6)]) + +AC_TRY_LINK([$1],[$2],[ + cf_cv_find_linkage_$3=yes +],[ + +cf_save_LIBS="$LIBS" +LIBS="-l$3 $7 $cf_save_LIBS" + +AC_TRY_LINK([$1],[$2],[ + cf_cv_find_linkage_$3=yes + cf_cv_library_file_$3="-l$3" +],[ + cf_cv_find_linkage_$3=no + LIBS="$cf_save_LIBS" + + CF_VERBOSE(find linkage for $3 library) + CF_MSG_LOG([Searching for headers in [FIND_LINKAGE]($3,$6)]) + + cf_save_CPPFLAGS="$CPPFLAGS" + cf_test_CPPFLAGS="$CPPFLAGS" + + CF_HEADER_PATH(cf_search,ifelse([$6],,[$3],[$6])) + for cf_cv_header_path_$3 in $cf_search + do + if test -d $cf_cv_header_path_$3 ; then + CF_VERBOSE(... testing $cf_cv_header_path_$3) + CPPFLAGS="$cf_save_CPPFLAGS -I$cf_cv_header_path_$3" + AC_TRY_COMPILE([$1],[$2],[ + CF_VERBOSE(... found $3 headers in $cf_cv_header_path_$3) + cf_cv_find_linkage_$3=maybe + cf_test_CPPFLAGS="$CPPFLAGS" + break],[ + CPPFLAGS="$cf_save_CPPFLAGS" + ]) + fi + done + + if test "$cf_cv_find_linkage_$3" = maybe ; then + + CF_MSG_LOG([Searching for $3 library in [FIND_LINKAGE]($3,$6)]) + + cf_save_LIBS="$LIBS" + cf_save_LDFLAGS="$LDFLAGS" + + ifelse([$6],,,[ + CPPFLAGS="$cf_test_CPPFLAGS" + LIBS="-l$3 $7 $cf_save_LIBS" + AC_TRY_LINK([$1],[$2],[ + CF_VERBOSE(... found $3 library in system) + cf_cv_find_linkage_$3=yes]) + CPPFLAGS="$cf_save_CPPFLAGS" + LIBS="$cf_save_LIBS" + ]) + + if test "$cf_cv_find_linkage_$3" != yes ; then + CF_LIBRARY_PATH(cf_search,$3) + for cf_cv_library_path_$3 in $cf_search + do + if test -d $cf_cv_library_path_$3 ; then + CF_VERBOSE(... testing $cf_cv_library_path_$3) + CPPFLAGS="$cf_test_CPPFLAGS" + LIBS="-l$3 $7 $cf_save_LIBS" + LDFLAGS="$cf_save_LDFLAGS -L$cf_cv_library_path_$3" + AC_TRY_LINK([$1],[$2],[ + CF_VERBOSE(... found $3 library in $cf_cv_library_path_$3) + cf_cv_find_linkage_$3=yes + cf_cv_library_file_$3="-l$3" + break],[ + CPPFLAGS="$cf_save_CPPFLAGS" + LIBS="$cf_save_LIBS" + LDFLAGS="$cf_save_LDFLAGS" + ]) + fi + done + LIBS="$cf_save_LIBS" + CPPFLAGS="$cf_save_CPPFLAGS" + LDFLAGS="$cf_save_LDFLAGS" + fi + + else + cf_cv_find_linkage_$3=no + fi + ],$7) +]) + +if test "$cf_cv_find_linkage_$3" = yes ; then +ifelse([$4],,[ + CF_ADD_INCDIR($cf_cv_header_path_$3) + CF_ADD_LIBDIR($cf_cv_library_path_$3) + LIBS="-l$3 $LIBS" +],[$4]) +else +ifelse([$5],,AC_MSG_WARN(Cannot find $3 library),[$5]) +fi +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_FUNC_WAIT version: 2 updated: 1997/10/21 19:45:33 +dnl ------------ +dnl Test for the presence of <sys/wait.h>, 'union wait', arg-type of 'wait()' +dnl and/or 'waitpid()'. +dnl +dnl Note that we cannot simply grep for 'union wait' in the wait.h file, +dnl because some Posix systems turn this on only when a BSD variable is +dnl defined. +dnl +dnl I don't use AC_HEADER_SYS_WAIT, because it defines HAVE_SYS_WAIT_H, which +dnl would conflict with an attempt to test that header directly. +dnl +AC_DEFUN([CF_FUNC_WAIT], +[ +AC_REQUIRE([CF_UNION_WAIT]) +if test $cf_cv_type_unionwait = yes; then + + AC_MSG_CHECKING(if union wait can be used as wait-arg) + AC_CACHE_VAL(cf_cv_arg_union_wait,[ + AC_TRY_COMPILE($cf_wait_headers, + [union wait x; wait(&x)], + [cf_cv_arg_union_wait=yes], + [cf_cv_arg_union_wait=no]) + ]) + AC_MSG_RESULT($cf_cv_arg_union_wait) + test $cf_cv_arg_union_wait = yes && AC_DEFINE(WAIT_USES_UNION) + + AC_MSG_CHECKING(if union wait can be used as waitpid-arg) + AC_CACHE_VAL(cf_cv_arg_union_waitpid,[ + AC_TRY_COMPILE($cf_wait_headers, + [union wait x; waitpid(0, &x, 0)], + [cf_cv_arg_union_waitpid=yes], + [cf_cv_arg_union_waitpid=no]) + ]) + AC_MSG_RESULT($cf_cv_arg_union_waitpid) + test $cf_cv_arg_union_waitpid = yes && AC_DEFINE(WAITPID_USES_UNION) + +fi +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_GCC_ATTRIBUTES version: 13 updated: 2009/08/11 20:19:56 +dnl ----------------- +dnl Test for availability of useful gcc __attribute__ directives to quiet +dnl compiler warnings. Though useful, not all are supported -- and contrary +dnl to documentation, unrecognized directives cause older compilers to barf. +AC_DEFUN([CF_GCC_ATTRIBUTES], +[ +if test "$GCC" = yes +then +cat > conftest.i <<EOF +#ifndef GCC_PRINTF +#define GCC_PRINTF 0 +#endif +#ifndef GCC_SCANF +#define GCC_SCANF 0 +#endif +#ifndef GCC_NORETURN +#define GCC_NORETURN /* nothing */ +#endif +#ifndef GCC_UNUSED +#define GCC_UNUSED /* nothing */ +#endif +EOF +if test "$GCC" = yes +then + AC_CHECKING([for $CC __attribute__ directives]) +cat > conftest.$ac_ext <<EOF +#line __oline__ "${as_me-configure}" +#include "confdefs.h" +#include "conftest.h" +#include "conftest.i" +#if GCC_PRINTF +#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var))) +#else +#define GCC_PRINTFLIKE(fmt,var) /*nothing*/ +#endif +#if GCC_SCANF +#define GCC_SCANFLIKE(fmt,var) __attribute__((format(scanf,fmt,var))) +#else +#define GCC_SCANFLIKE(fmt,var) /*nothing*/ +#endif +extern void wow(char *,...) GCC_SCANFLIKE(1,2); +extern void oops(char *,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN; +extern void foo(void) GCC_NORETURN; +int main(int argc GCC_UNUSED, char *argv[[]] GCC_UNUSED) { return 0; } +EOF + cf_printf_attribute=no + cf_scanf_attribute=no + for cf_attribute in scanf printf unused noreturn + do + CF_UPPER(cf_ATTRIBUTE,$cf_attribute) + cf_directive="__attribute__(($cf_attribute))" + echo "checking for $CC $cf_directive" 1>&AC_FD_CC + + case $cf_attribute in #(vi + printf) #(vi + cf_printf_attribute=yes + cat >conftest.h <<EOF +#define GCC_$cf_ATTRIBUTE 1 +EOF + ;; + scanf) #(vi + cf_scanf_attribute=yes + cat >conftest.h <<EOF +#define GCC_$cf_ATTRIBUTE 1 +EOF + ;; + *) #(vi + cat >conftest.h <<EOF +#define GCC_$cf_ATTRIBUTE $cf_directive +EOF + ;; + esac + + if AC_TRY_EVAL(ac_compile); then + test -n "$verbose" && AC_MSG_RESULT(... $cf_attribute) + cat conftest.h >>confdefs.h + case $cf_attribute in #(vi + printf) #(vi + if test "$cf_printf_attribute" = no ; then + cat >>confdefs.h <<EOF +#define GCC_PRINTFLIKE(fmt,var) /* nothing */ +EOF + else + cat >>confdefs.h <<EOF +#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var))) +EOF + fi + ;; + scanf) #(vi + if test "$cf_scanf_attribute" = no ; then + cat >>confdefs.h <<EOF +#define GCC_SCANFLIKE(fmt,var) /* nothing */ +EOF + else + cat >>confdefs.h <<EOF +#define GCC_SCANFLIKE(fmt,var) __attribute__((format(scanf,fmt,var))) +EOF + fi + ;; + esac + fi + done +else + fgrep define conftest.i >>confdefs.h +fi +rm -rf conftest* +fi +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_GCC_VERSION version: 5 updated: 2010/04/24 11:02:31 +dnl -------------- +dnl Find version of gcc +AC_DEFUN([CF_GCC_VERSION],[ +AC_REQUIRE([AC_PROG_CC]) +GCC_VERSION=none +if test "$GCC" = yes ; then + AC_MSG_CHECKING(version of $CC) + GCC_VERSION="`${CC} --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(GCC) //' -e 's/^[[^0-9.]]*//' -e 's/[[^0-9.]].*//'`" + test -z "$GCC_VERSION" && GCC_VERSION=unknown + AC_MSG_RESULT($GCC_VERSION) +fi +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_GCC_WARNINGS version: 25 updated: 2010/04/24 11:03:31 +dnl --------------- +dnl Check if the compiler supports useful warning options. There's a few that +dnl we don't use, simply because they're too noisy: +dnl +dnl -Wconversion (useful in older versions of gcc, but not in gcc 2.7.x) +dnl -Wredundant-decls (system headers make this too noisy) +dnl -Wtraditional (combines too many unrelated messages, only a few useful) +dnl -Wwrite-strings (too noisy, but should review occasionally). This +dnl is enabled for ncurses using "--enable-const". +dnl -pedantic +dnl +dnl Parameter: +dnl $1 is an optional list of gcc warning flags that a particular +dnl application might want to use, e.g., "no-unused" for +dnl -Wno-unused +dnl Special: +dnl If $with_ext_const is "yes", add a check for -Wwrite-strings +dnl +AC_DEFUN([CF_GCC_WARNINGS], +[ +AC_REQUIRE([CF_GCC_VERSION]) +CF_INTEL_COMPILER(GCC,INTEL_COMPILER,CFLAGS) + +cat > conftest.$ac_ext <<EOF +#line __oline__ "${as_me-configure}" +int main(int argc, char *argv[[]]) { return (argv[[argc-1]] == 0) ; } +EOF + +if test "$INTEL_COMPILER" = yes +then +# The "-wdXXX" options suppress warnings: +# remark #1419: external declaration in primary source file +# remark #1683: explicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem) +# remark #1684: conversion from pointer to same-sized integral type (potential portability problem) +# remark #193: zero used for undefined preprocessing identifier +# remark #593: variable "curs_sb_left_arrow" was set but never used +# remark #810: conversion from "int" to "Dimension={unsigned short}" may lose significant bits +# remark #869: parameter "tw" was never referenced +# remark #981: operands are evaluated in unspecified order +# warning #279: controlling expression is constant + + AC_CHECKING([for $CC warning options]) + cf_save_CFLAGS="$CFLAGS" + EXTRA_CFLAGS="-Wall" + for cf_opt in \ + wd1419 \ + wd1683 \ + wd1684 \ + wd193 \ + wd593 \ + wd279 \ + wd810 \ + wd869 \ + wd981 + do + CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt" + if AC_TRY_EVAL(ac_compile); then + test -n "$verbose" && AC_MSG_RESULT(... -$cf_opt) + EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt" + fi + done + CFLAGS="$cf_save_CFLAGS" + +elif test "$GCC" = yes +then + AC_CHECKING([for $CC warning options]) + cf_save_CFLAGS="$CFLAGS" + EXTRA_CFLAGS= + cf_warn_CONST="" + test "$with_ext_const" = yes && cf_warn_CONST="Wwrite-strings" + for cf_opt in W Wall \ + Wbad-function-cast \ + Wcast-align \ + Wcast-qual \ + Winline \ + Wmissing-declarations \ + Wmissing-prototypes \ + Wnested-externs \ + Wpointer-arith \ + Wshadow \ + Wstrict-prototypes \ + Wundef $cf_warn_CONST $1 + do + CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt" + if AC_TRY_EVAL(ac_compile); then + test -n "$verbose" && AC_MSG_RESULT(... -$cf_opt) + case $cf_opt in #(vi + Wcast-qual) #(vi + CPPFLAGS="$CPPFLAGS -DXTSTRINGDEFINES" + ;; + Winline) #(vi + case $GCC_VERSION in + [[34]].*) + CF_VERBOSE(feature is broken in gcc $GCC_VERSION) + continue;; + esac + ;; + esac + EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt" + fi + done + CFLAGS="$cf_save_CFLAGS" +fi +rm -f conftest* + +AC_SUBST(EXTRA_CFLAGS) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_GNU_SOURCE version: 6 updated: 2005/07/09 13:23:07 +dnl ------------- +dnl Check if we must define _GNU_SOURCE to get a reasonable value for +dnl _XOPEN_SOURCE, upon which many POSIX definitions depend. This is a defect +dnl (or misfeature) of glibc2, which breaks portability of many applications, +dnl since it is interwoven with GNU extensions. +dnl +dnl Well, yes we could work around it... +AC_DEFUN([CF_GNU_SOURCE], +[ +AC_CACHE_CHECK(if we must define _GNU_SOURCE,cf_cv_gnu_source,[ +AC_TRY_COMPILE([#include <sys/types.h>],[ +#ifndef _XOPEN_SOURCE +make an error +#endif], + [cf_cv_gnu_source=no], + [cf_save="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" + AC_TRY_COMPILE([#include <sys/types.h>],[ +#ifdef _XOPEN_SOURCE +make an error +#endif], + [cf_cv_gnu_source=no], + [cf_cv_gnu_source=yes]) + CPPFLAGS="$cf_save" + ]) +]) +test "$cf_cv_gnu_source" = yes && CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_HEADERS_SH version: 1 updated: 2007/07/04 15:37:05 +dnl ------------- +dnl Setup variables needed to construct headers-sh +AC_DEFUN([CF_HEADERS_SH],[ +PACKAGE_PREFIX=$1 +PACKAGE_CONFIG=$2 +AC_SUBST(PACKAGE_PREFIX) +AC_SUBST(PACKAGE_CONFIG) +EXTRA_OUTPUT="$EXTRA_OUTPUT headers-sh:$srcdir/headers-sh.in" +]) +dnl --------------------------------------------------------------------------- +dnl CF_HEADER_PATH version: 11 updated: 2010/04/21 06:20:50 +dnl -------------- +dnl Construct a search-list of directories for a nonstandard header-file +dnl +dnl Parameters +dnl $1 = the variable to return as result +dnl $2 = the package name +AC_DEFUN([CF_HEADER_PATH], +[ +$1= + +# collect the current set of include-directories from compiler flags +cf_header_path_list="" +if test -n "${CFLAGS}${CPPFLAGS}" ; then + for cf_header_path in $CPPFLAGS $CFLAGS + do + case $cf_header_path in #(vi + -I*) + cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` + cf_header_path_list="$cf_header_path_list $cf_header_path" + ;; + esac + done +fi + +# add the variations for the package we are looking for +CF_SUBDIR_PATH($1,$2,include) + +test "$includedir" != NONE && \ +test "$includedir" != "/usr/include" && \ +test -d "$includedir" && { + test -d $includedir && $1="[$]$1 $includedir" + test -d $includedir/$2 && $1="[$]$1 $includedir/$2" +} + +test "$oldincludedir" != NONE && \ +test "$oldincludedir" != "/usr/include" && \ +test -d "$oldincludedir" && { + test -d $oldincludedir && $1="[$]$1 $oldincludedir" + test -d $oldincludedir/$2 && $1="[$]$1 $oldincludedir/$2" +} + +$1="[$]$1 $cf_header_path_list" +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_HELP_MESSAGE version: 3 updated: 1998/01/14 10:56:23 +dnl --------------- +dnl Insert text into the help-message, for readability, from AC_ARG_WITH. +AC_DEFUN([CF_HELP_MESSAGE], +[AC_DIVERT_HELP([$1])dnl +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_INCLUDE_DIRS version: 6 updated: 2009/01/06 19:37:40 +dnl --------------- +dnl Construct the list of include-options according to whether we're building +dnl in the source directory or using '--srcdir=DIR' option. If we're building +dnl with gcc, don't append the includedir if it happens to be /usr/include, +dnl since that usually breaks gcc's shadow-includes. +AC_DEFUN([CF_INCLUDE_DIRS], +[ +CPPFLAGS="$CPPFLAGS -I. -I../include" +if test "$srcdir" != "."; then + CPPFLAGS="$CPPFLAGS -I\${srcdir}/../include" +fi +if test "$GCC" != yes; then + CPPFLAGS="$CPPFLAGS -I\${includedir}" +elif test "$includedir" != "/usr/include"; then + if test "$includedir" = '${prefix}/include' ; then + if test $prefix != /usr ; then + CPPFLAGS="$CPPFLAGS -I\${includedir}" + fi + else + CPPFLAGS="$CPPFLAGS -I\${includedir}" + fi +fi +AC_SUBST(CPPFLAGS) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_INCLUDE_PATH version: 5 updated: 2010/01/17 20:36:17 +dnl --------------- +dnl Adds to the include-path +dnl +dnl Autoconf 1.11 should have provided a way to add include path options to +dnl the cpp-tests. +dnl +AC_DEFUN([CF_INCLUDE_PATH], +[ +$1= +for cf_path in $1 +do + cf_result="no" + AC_MSG_CHECKING(for directory $cf_path) + if test -d $cf_path + then + INCLUDES="$INCLUDES -I$cf_path" + ac_cpp="${ac_cpp} -I$cf_path" + CFLAGS="$CFLAGS -I$cf_path" + cf_result="yes" + case $cf_path in + /usr/include|/usr/include/*) + ;; + *) + CF_DIRNAME(cf_temp,$cf_path) + case $cf_temp in + */include) + INCLUDES="$INCLUDES -I$cf_temp" + ac_cpp="${ac_cpp} -I$cf_temp" + CFLAGS="$CFLAGS -I$cf_temp" + ;; + esac + esac + fi + AC_MSG_RESULT($cf_result) +done +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_INTEL_COMPILER version: 3 updated: 2005/08/06 18:37:29 +dnl ----------------- +dnl Check if the given compiler is really the Intel compiler for Linux. It +dnl tries to imitate gcc, but does not return an error when it finds a mismatch +dnl between prototypes, e.g., as exercised by CF_MISSING_CHECK. +dnl +dnl This macro should be run "soon" after AC_PROG_CC or AC_PROG_CPLUSPLUS, to +dnl ensure that it is not mistaken for gcc/g++. It is normally invoked from +dnl the wrappers for gcc and g++ warnings. +dnl +dnl $1 = GCC (default) or GXX +dnl $2 = INTEL_COMPILER (default) or INTEL_CPLUSPLUS +dnl $3 = CFLAGS (default) or CXXFLAGS +AC_DEFUN([CF_INTEL_COMPILER],[ +ifelse($2,,INTEL_COMPILER,[$2])=no + +if test "$ifelse($1,,[$1],GCC)" = yes ; then + case $host_os in + linux*|gnu*) + AC_MSG_CHECKING(if this is really Intel ifelse($1,GXX,C++,C) compiler) + cf_save_CFLAGS="$ifelse($3,,CFLAGS,[$3])" + ifelse($3,,CFLAGS,[$3])="$ifelse($3,,CFLAGS,[$3]) -no-gcc" + AC_TRY_COMPILE([],[ +#ifdef __INTEL_COMPILER +#else +make an error +#endif +],[ifelse($2,,INTEL_COMPILER,[$2])=yes +cf_save_CFLAGS="$cf_save_CFLAGS -we147 -no-gcc" +],[]) + ifelse($3,,CFLAGS,[$3])="$cf_save_CFLAGS" + AC_MSG_RESULT($ifelse($2,,INTEL_COMPILER,[$2])) + ;; + esac +fi +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_LARGEFILE version: 7 updated: 2007/06/02 11:58:50 +dnl ------------ +dnl Add checks for large file support. +AC_DEFUN([CF_LARGEFILE],[ +ifdef([AC_FUNC_FSEEKO],[ + AC_SYS_LARGEFILE + if test "$enable_largefile" != no ; then + AC_FUNC_FSEEKO + + # Normally we would collect these definitions in the config.h, + # but (like _XOPEN_SOURCE), some environments rely on having these + # defined before any of the system headers are included. Another + # case comes up with C++, e.g., on AIX the compiler compiles the + # header files by themselves before looking at the body files it is + # told to compile. For ncurses, those header files do not include + # the config.h + test "$ac_cv_sys_large_files" != no && CPPFLAGS="$CPPFLAGS -D_LARGE_FILES " + test "$ac_cv_sys_largefile_source" != no && CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE " + test "$ac_cv_sys_file_offset_bits" != no && CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits " + + AC_CACHE_CHECK(whether to use struct dirent64, cf_cv_struct_dirent64,[ + AC_TRY_COMPILE([ +#include <sys/types.h> +#include <dirent.h> + ],[ + /* if transitional largefile support is setup, this is true */ + extern struct dirent64 * readdir(DIR *); + struct dirent64 *x = readdir((DIR *)0); + struct dirent *y = readdir((DIR *)0); + int z = x - y; + ], + [cf_cv_struct_dirent64=yes], + [cf_cv_struct_dirent64=no]) + ]) + test "$cf_cv_struct_dirent64" = yes && AC_DEFINE(HAVE_STRUCT_DIRENT64) + fi +]) +]) +dnl --------------------------------------------------------------------------- +dnl CF_LD_RPATH_OPT version: 2 updated: 2010/03/27 19:27:54 +dnl --------------- +dnl For the given system and compiler, find the compiler flags to pass to the +dnl loader to use the "rpath" feature. +AC_DEFUN([CF_LD_RPATH_OPT], +[ +AC_REQUIRE([CF_CHECK_CACHE]) + +LD_RPATH_OPT= +AC_MSG_CHECKING(for an rpath option) +case $cf_cv_system_name in #(vi +irix*) #(vi + if test "$GCC" = yes; then + LD_RPATH_OPT="-Wl,-rpath," + else + LD_RPATH_OPT="-rpath " + fi + ;; +linux*|gnu*|k*bsd*-gnu) #(vi + LD_RPATH_OPT="-Wl,-rpath," + ;; +openbsd[[2-9]].*) #(vi + LD_RPATH_OPT="-Wl,-rpath," + ;; +freebsd*) #(vi + LD_RPATH_OPT="-rpath " + ;; +netbsd*) #(vi + LD_RPATH_OPT="-Wl,-rpath," + ;; +osf*|mls+*) #(vi + LD_RPATH_OPT="-rpath " + ;; +solaris2*) #(vi + LD_RPATH_OPT="-R" + ;; +*) + ;; +esac +AC_MSG_RESULT($LD_RPATH_OPT) + +case "x$LD_RPATH_OPT" in #(vi +x-R*) + AC_MSG_CHECKING(if we need a space after rpath option) + cf_save_LIBS="$LIBS" + LIBS="${LD_RPATH_OPT}$libdir $LIBS" + AC_TRY_LINK(, , cf_rpath_space=no, cf_rpath_space=yes) + LIBS="$cf_save_LIBS" + AC_MSG_RESULT($cf_rpath_space) + test "$cf_rpath_space" = yes && LD_RPATH_OPT="$LD_RPATH_OPT " + ;; +esac +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_LIBRARY_PATH version: 9 updated: 2010/03/28 12:52:50 +dnl --------------- +dnl Construct a search-list of directories for a nonstandard library-file +dnl +dnl Parameters +dnl $1 = the variable to return as result +dnl $2 = the package name +AC_DEFUN([CF_LIBRARY_PATH], +[ +$1= +cf_library_path_list="" +if test -n "${LDFLAGS}${LIBS}" ; then + for cf_library_path in $LDFLAGS $LIBS + do + case $cf_library_path in #(vi + -L*) + cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` + CF_ADD_SUBDIR_PATH($1,$2,lib,$cf_library_path,NONE) + cf_library_path_list="$cf_library_path_list [$]$1" + ;; + esac + done +fi + +CF_SUBDIR_PATH($1,$2,lib) + +$1="$cf_library_path_list [$]$1" +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_LIB_PREFIX version: 8 updated: 2008/09/13 11:34:16 +dnl ------------- +dnl Compute the library-prefix for the given host system +dnl $1 = variable to set +AC_DEFUN([CF_LIB_PREFIX], +[ + case $cf_cv_system_name in #(vi + OS/2*|os2*) #(vi + LIB_PREFIX='' + ;; + *) LIB_PREFIX='lib' + ;; + esac +ifelse($1,,,[$1=$LIB_PREFIX]) + AC_SUBST(LIB_PREFIX) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_MAKEFLAGS version: 12 updated: 2006/10/21 08:27:03 +dnl ------------ +dnl Some 'make' programs support ${MAKEFLAGS}, some ${MFLAGS}, to pass 'make' +dnl options to lower-levels. It's very useful for "make -n" -- if we have it. +dnl (GNU 'make' does both, something POSIX 'make', which happens to make the +dnl ${MAKEFLAGS} variable incompatible because it adds the assignments :-) +AC_DEFUN([CF_MAKEFLAGS], +[ +AC_CACHE_CHECK(for makeflags variable, cf_cv_makeflags,[ + cf_cv_makeflags='' + for cf_option in '-${MAKEFLAGS}' '${MFLAGS}' + do + cat >cf_makeflags.tmp <<CF_EOF +SHELL = /bin/sh +all : + @ echo '.$cf_option' +CF_EOF + cf_result=`${MAKE-make} -k -f cf_makeflags.tmp 2>/dev/null | sed -e 's,[[ ]]*$,,'` + case "$cf_result" in + .*k) + cf_result=`${MAKE-make} -k -f cf_makeflags.tmp CC=cc 2>/dev/null` + case "$cf_result" in + .*CC=*) cf_cv_makeflags= + ;; + *) cf_cv_makeflags=$cf_option + ;; + esac + break + ;; + .-) ;; + *) echo "given option \"$cf_option\", no match \"$cf_result\"" + ;; + esac + done + rm -f cf_makeflags.tmp +]) + +AC_SUBST(cf_cv_makeflags) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_MAKE_TAGS version: 5 updated: 2010/04/03 20:07:32 +dnl ------------ +dnl Generate tags/TAGS targets for makefiles. Do not generate TAGS if we have +dnl a monocase filesystem. +AC_DEFUN([CF_MAKE_TAGS],[ +AC_REQUIRE([CF_MIXEDCASE_FILENAMES]) + +AC_CHECK_PROGS(CTAGS, exctags ctags) +AC_CHECK_PROGS(ETAGS, exetags etags) + +AC_CHECK_PROG(MAKE_LOWER_TAGS, ${CTAGS-ctags}, yes, no) + +if test "$cf_cv_mixedcase" = yes ; then + AC_CHECK_PROG(MAKE_UPPER_TAGS, ${ETAGS-etags}, yes, no) +else + MAKE_UPPER_TAGS=no +fi + +if test "$MAKE_UPPER_TAGS" = yes ; then + MAKE_UPPER_TAGS= +else + MAKE_UPPER_TAGS="#" +fi + +if test "$MAKE_LOWER_TAGS" = yes ; then + MAKE_LOWER_TAGS= +else + MAKE_LOWER_TAGS="#" +fi + +AC_SUBST(CTAGS) +AC_SUBST(ETAGS) + +AC_SUBST(MAKE_UPPER_TAGS) +AC_SUBST(MAKE_LOWER_TAGS) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_MATH_LIB version: 6 updated: 2009/12/19 13:46:49 +dnl ----------- +dnl Checks for libraries. At least one UNIX system, Apple Macintosh +dnl Rhapsody 5.5, does not have -lm. We cannot use the simpler +dnl AC_CHECK_LIB(m,sin), because that fails for C++. +AC_DEFUN([CF_MATH_LIB], +[ +AC_CACHE_CHECK(if -lm needed for math functions, + cf_cv_need_libm,[ + AC_TRY_LINK([ + #include <stdio.h> + #include <math.h> + ], + [double x = rand(); printf("result = %g\n", ]ifelse($2,,sin(x),$2)[)], + [cf_cv_need_libm=no], + [cf_cv_need_libm=yes])]) +if test "$cf_cv_need_libm" = yes +then +ifelse($1,,[ + LIBS="-lm $LIBS" +],[$1=-lm]) +fi +]) +dnl --------------------------------------------------------------------------- +dnl CF_MBSTATE_T version: 3 updated: 2007/03/25 15:55:36 +dnl ------------ +dnl Check if mbstate_t is declared, and if so, which header file. +dnl This (including wchar.h) is needed on Tru64 5.0 to declare mbstate_t, +dnl as well as include stdio.h to work around a misuse of varargs in wchar.h +AC_DEFUN([CF_MBSTATE_T], +[ +AC_CACHE_CHECK(if we must include wchar.h to declare mbstate_t,cf_cv_mbstate_t,[ +AC_TRY_COMPILE([ +#include <stdlib.h> +#include <stdio.h> +#ifdef HAVE_LIBUTF8_H +#include <libutf8.h> +#endif], + [mbstate_t state], + [cf_cv_mbstate_t=no], + [AC_TRY_COMPILE([ +#include <stdlib.h> +#include <stdio.h> +#include <wchar.h> +#ifdef HAVE_LIBUTF8_H +#include <libutf8.h> +#endif], + [mbstate_t value], + [cf_cv_mbstate_t=yes], + [cf_cv_mbstate_t=unknown])])]) + +if test "$cf_cv_mbstate_t" = yes ; then + AC_DEFINE(NEED_WCHAR_H) +fi + +if test "$cf_cv_mbstate_t" != unknown ; then + AC_DEFINE(HAVE_MBSTATE_T) +fi +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_MIXEDCASE_FILENAMES version: 3 updated: 2003/09/20 17:07:55 +dnl ---------------------- +dnl Check if the file-system supports mixed-case filenames. If we're able to +dnl create a lowercase name and see it as uppercase, it doesn't support that. +AC_DEFUN([CF_MIXEDCASE_FILENAMES], +[ +AC_CACHE_CHECK(if filesystem supports mixed-case filenames,cf_cv_mixedcase,[ +if test "$cross_compiling" = yes ; then + case $target_alias in #(vi + *-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-mingw32*|*-uwin*) #(vi + cf_cv_mixedcase=no + ;; + *) + cf_cv_mixedcase=yes + ;; + esac +else + rm -f conftest CONFTEST + echo test >conftest + if test -f CONFTEST ; then + cf_cv_mixedcase=no + else + cf_cv_mixedcase=yes + fi + rm -f conftest CONFTEST +fi +]) +test "$cf_cv_mixedcase" = yes && AC_DEFINE(MIXEDCASE_FILENAMES) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_MSG_LOG version: 4 updated: 2007/07/29 09:55:12 +dnl ---------- +dnl Write a debug message to config.log, along with the line number in the +dnl configure script. +AC_DEFUN([CF_MSG_LOG],[ +echo "${as_me-configure}:__oline__: testing $* ..." 1>&AC_FD_CC +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_NCURSES_CC_CHECK version: 4 updated: 2007/07/29 10:39:05 +dnl ------------------- +dnl Check if we can compile with ncurses' header file +dnl $1 is the cache variable to set +dnl $2 is the header-file to include +dnl $3 is the root name (ncurses or ncursesw) +AC_DEFUN([CF_NCURSES_CC_CHECK],[ + AC_TRY_COMPILE([ +]ifelse($3,ncursesw,[ +#define _XOPEN_SOURCE_EXTENDED +#undef HAVE_LIBUTF8_H /* in case we used CF_UTF8_LIB */ +#define HAVE_LIBUTF8_H /* to force ncurses' header file to use cchar_t */ +])[ +#include <$2>],[ +#ifdef NCURSES_VERSION +]ifelse($3,ncursesw,[ +#ifndef WACS_BSSB + make an error +#endif +])[ +printf("%s\n", NCURSES_VERSION); +#else +#ifdef __NCURSES_H +printf("old\n"); +#else + make an error +#endif +#endif + ] + ,[$1=$2] + ,[$1=no]) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_NCURSES_CONFIG version: 6 updated: 2010/04/28 06:02:16 +dnl ----------------- +dnl Tie together the configure-script macros for ncurses. +dnl Prefer the "-config" script from ncurses 5.6, to simplify analysis. +dnl Allow that to be overridden using the $NCURSES_CONFIG environment variable. +dnl +dnl $1 is the root library name (default: "ncurses") +AC_DEFUN([CF_NCURSES_CONFIG], +[ +cf_ncuconfig_root=ifelse($1,,ncurses,$1) + +echo "Looking for ${cf_ncuconfig_root}-config" +AC_PATH_PROGS(NCURSES_CONFIG,${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config,none) + +if test "$NCURSES_CONFIG" != none ; then + +CPPFLAGS="$CPPFLAGS `$NCURSES_CONFIG --cflags`" +LIBS="`$NCURSES_CONFIG --libs` $LIBS" + +# even with config script, some packages use no-override for curses.h +CF_CURSES_HEADER(ifelse($1,,ncurses,$1)) + +dnl like CF_NCURSES_CPPFLAGS +AC_DEFINE(NCURSES) + +dnl like CF_NCURSES_LIBS +CF_UPPER(cf_nculib_ROOT,HAVE_LIB$cf_ncuconfig_root) +AC_DEFINE_UNQUOTED($cf_nculib_ROOT) + +dnl like CF_NCURSES_VERSION +cf_cv_ncurses_version=`$NCURSES_CONFIG --version` + +else + +CF_NCURSES_CPPFLAGS(ifelse($1,,ncurses,$1)) +CF_NCURSES_LIBS(ifelse($1,,ncurses,$1)) + +fi +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_NCURSES_CPPFLAGS version: 19 updated: 2007/07/29 13:35:20 +dnl ------------------- +dnl Look for the SVr4 curses clone 'ncurses' in the standard places, adjusting +dnl the CPPFLAGS variable so we can include its header. +dnl +dnl The header files may be installed as either curses.h, or ncurses.h (would +dnl be obsolete, except that some packagers prefer this name to distinguish it +dnl from a "native" curses implementation). If not installed for overwrite, +dnl the curses.h file would be in an ncurses subdirectory (e.g., +dnl /usr/include/ncurses), but someone may have installed overwriting the +dnl vendor's curses. Only very old versions (pre-1.9.2d, the first autoconf'd +dnl version) of ncurses don't define either __NCURSES_H or NCURSES_VERSION in +dnl the header. +dnl +dnl If the installer has set $CFLAGS or $CPPFLAGS so that the ncurses header +dnl is already in the include-path, don't even bother with this, since we cannot +dnl easily determine which file it is. In this case, it has to be <curses.h>. +dnl +dnl The optional parameter gives the root name of the library, in case it is +dnl not installed as the default curses library. That is how the +dnl wide-character version of ncurses is installed. +AC_DEFUN([CF_NCURSES_CPPFLAGS], +[AC_REQUIRE([CF_WITH_CURSES_DIR]) + +AC_PROVIDE([CF_CURSES_CPPFLAGS])dnl +cf_ncuhdr_root=ifelse($1,,ncurses,$1) + +test -n "$cf_cv_curses_dir" && \ +test "$cf_cv_curses_dir" != "no" && { \ + CF_ADD_INCDIR($cf_cv_curses_dir/include $cf_cv_curses_dir/include/$cf_ncuhdr_root) +} + +AC_CACHE_CHECK(for $cf_ncuhdr_root header in include-path, cf_cv_ncurses_h,[ + cf_header_list="$cf_ncuhdr_root/curses.h $cf_ncuhdr_root/ncurses.h" + ( test "$cf_ncuhdr_root" = ncurses || test "$cf_ncuhdr_root" = ncursesw ) && cf_header_list="$cf_header_list curses.h ncurses.h" + for cf_header in $cf_header_list + do + CF_NCURSES_CC_CHECK(cf_cv_ncurses_h,$cf_header,$1) + test "$cf_cv_ncurses_h" != no && break + done +]) + +CF_NCURSES_HEADER +CF_TERM_HEADER + +# some applications need this, but should check for NCURSES_VERSION +AC_DEFINE(NCURSES) + +CF_NCURSES_VERSION +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_NCURSES_HEADER version: 2 updated: 2008/03/23 14:48:54 +dnl ----------------- +dnl Find a "curses" header file, e.g,. "curses.h", or one of the more common +dnl variations of ncurses' installs. +dnl +dnl See also CF_CURSES_HEADER, which sets the same cache variable. +AC_DEFUN([CF_NCURSES_HEADER],[ + +if test "$cf_cv_ncurses_h" != no ; then + cf_cv_ncurses_header=$cf_cv_ncurses_h +else + +AC_CACHE_CHECK(for $cf_ncuhdr_root include-path, cf_cv_ncurses_h2,[ + test -n "$verbose" && echo + CF_HEADER_PATH(cf_search,$cf_ncuhdr_root) + test -n "$verbose" && echo search path $cf_search + cf_save2_CPPFLAGS="$CPPFLAGS" + for cf_incdir in $cf_search + do + CF_ADD_INCDIR($cf_incdir) + for cf_header in \ + ncurses.h \ + curses.h + do + CF_NCURSES_CC_CHECK(cf_cv_ncurses_h2,$cf_header,$1) + if test "$cf_cv_ncurses_h2" != no ; then + cf_cv_ncurses_h2=$cf_incdir/$cf_header + test -n "$verbose" && echo $ac_n " ... found $ac_c" 1>&AC_FD_MSG + break + fi + test -n "$verbose" && echo " ... tested $cf_incdir/$cf_header" 1>&AC_FD_MSG + done + CPPFLAGS="$cf_save2_CPPFLAGS" + test "$cf_cv_ncurses_h2" != no && break + done + test "$cf_cv_ncurses_h2" = no && AC_MSG_ERROR(not found) + ]) + + CF_DIRNAME(cf_1st_incdir,$cf_cv_ncurses_h2) + cf_cv_ncurses_header=`basename $cf_cv_ncurses_h2` + if test `basename $cf_1st_incdir` = $cf_ncuhdr_root ; then + cf_cv_ncurses_header=$cf_ncuhdr_root/$cf_cv_ncurses_header + fi + CF_ADD_INCDIR($cf_1st_incdir) + +fi + +# Set definitions to allow ifdef'ing for ncurses.h + +case $cf_cv_ncurses_header in # (vi +*ncurses.h) + AC_DEFINE(HAVE_NCURSES_H) + ;; +esac + +case $cf_cv_ncurses_header in # (vi +ncurses/curses.h|ncurses/ncurses.h) + AC_DEFINE(HAVE_NCURSES_NCURSES_H) + ;; +ncursesw/curses.h|ncursesw/ncurses.h) + AC_DEFINE(HAVE_NCURSESW_NCURSES_H) + ;; +esac + +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_NCURSES_LIBS version: 13 updated: 2007/07/29 10:29:20 +dnl --------------- +dnl Look for the ncurses library. This is a little complicated on Linux, +dnl because it may be linked with the gpm (general purpose mouse) library. +dnl Some distributions have gpm linked with (bsd) curses, which makes it +dnl unusable with ncurses. However, we don't want to link with gpm unless +dnl ncurses has a dependency, since gpm is normally set up as a shared library, +dnl and the linker will record a dependency. +dnl +dnl The optional parameter gives the root name of the library, in case it is +dnl not installed as the default curses library. That is how the +dnl wide-character version of ncurses is installed. +AC_DEFUN([CF_NCURSES_LIBS], +[AC_REQUIRE([CF_NCURSES_CPPFLAGS]) + +cf_nculib_root=ifelse($1,,ncurses,$1) + # This works, except for the special case where we find gpm, but + # ncurses is in a nonstandard location via $LIBS, and we really want + # to link gpm. +cf_ncurses_LIBS="" +cf_ncurses_SAVE="$LIBS" +AC_CHECK_LIB(gpm,Gpm_Open, + [AC_CHECK_LIB(gpm,initscr, + [LIBS="$cf_ncurses_SAVE"], + [cf_ncurses_LIBS="-lgpm"])]) + +case $host_os in #(vi +freebsd*) + # This is only necessary if you are linking against an obsolete + # version of ncurses (but it should do no harm, since it's static). + if test "$cf_nculib_root" = ncurses ; then + AC_CHECK_LIB(mytinfo,tgoto,[cf_ncurses_LIBS="-lmytinfo $cf_ncurses_LIBS"]) + fi + ;; +esac + +LIBS="$cf_ncurses_LIBS $LIBS" + +if ( test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" ) +then + CF_ADD_LIBDIR($cf_cv_curses_dir/lib) + LIBS="-l$cf_nculib_root $LIBS" +else + CF_FIND_LIBRARY($cf_nculib_root,$cf_nculib_root, + [#include <${cf_cv_ncurses_header-curses.h}>], + [initscr()], + initscr) +fi + +if test -n "$cf_ncurses_LIBS" ; then + AC_MSG_CHECKING(if we can link $cf_nculib_root without $cf_ncurses_LIBS) + cf_ncurses_SAVE="$LIBS" + for p in $cf_ncurses_LIBS ; do + q=`echo $LIBS | sed -e "s%$p %%" -e "s%$p$%%"` + if test "$q" != "$LIBS" ; then + LIBS="$q" + fi + done + AC_TRY_LINK([#include <${cf_cv_ncurses_header-curses.h}>], + [initscr(); mousemask(0,0); tgoto((char *)0, 0, 0);], + [AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no) + LIBS="$cf_ncurses_SAVE"]) +fi + +CF_UPPER(cf_nculib_ROOT,HAVE_LIB$cf_nculib_root) +AC_DEFINE_UNQUOTED($cf_nculib_ROOT) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_NCURSES_VERSION version: 12 updated: 2007/04/28 09:15:55 +dnl ------------------ +dnl Check for the version of ncurses, to aid in reporting bugs, etc. +dnl Call CF_CURSES_CPPFLAGS first, or CF_NCURSES_CPPFLAGS. We don't use +dnl AC_REQUIRE since that does not work with the shell's if/then/else/fi. +AC_DEFUN([CF_NCURSES_VERSION], +[ +AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl +AC_CACHE_CHECK(for ncurses version, cf_cv_ncurses_version,[ + cf_cv_ncurses_version=no + cf_tempfile=out$$ + rm -f $cf_tempfile + AC_TRY_RUN([ +#include <${cf_cv_ncurses_header-curses.h}> +#include <stdio.h> +int main() +{ + FILE *fp = fopen("$cf_tempfile", "w"); +#ifdef NCURSES_VERSION +# ifdef NCURSES_VERSION_PATCH + fprintf(fp, "%s.%d\n", NCURSES_VERSION, NCURSES_VERSION_PATCH); +# else + fprintf(fp, "%s\n", NCURSES_VERSION); +# endif +#else +# ifdef __NCURSES_H + fprintf(fp, "old\n"); +# else + make an error +# endif +#endif + ${cf_cv_main_return-return}(0); +}],[ + cf_cv_ncurses_version=`cat $cf_tempfile`],,[ + + # This will not work if the preprocessor splits the line after the + # Autoconf token. The 'unproto' program does that. + cat > conftest.$ac_ext <<EOF +#include <${cf_cv_ncurses_header-curses.h}> +#undef Autoconf +#ifdef NCURSES_VERSION +Autoconf NCURSES_VERSION +#else +#ifdef __NCURSES_H +Autoconf "old" +#endif +; +#endif +EOF + cf_try="$ac_cpp conftest.$ac_ext 2>&AC_FD_CC | grep '^Autoconf ' >conftest.out" + AC_TRY_EVAL(cf_try) + if test -f conftest.out ; then + cf_out=`cat conftest.out | sed -e 's%^Autoconf %%' -e 's%^[[^"]]*"%%' -e 's%".*%%'` + test -n "$cf_out" && cf_cv_ncurses_version="$cf_out" + rm -f conftest.out + fi +]) + rm -f $cf_tempfile +]) +test "$cf_cv_ncurses_version" = no || AC_DEFINE(NCURSES) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_NO_LEAKS_OPTION version: 4 updated: 2006/12/16 14:24:05 +dnl ------------------ +dnl see CF_WITH_NO_LEAKS +AC_DEFUN([CF_NO_LEAKS_OPTION],[ +AC_MSG_CHECKING(if you want to use $1 for testing) +AC_ARG_WITH($1, + [$2], + [AC_DEFINE($3)ifelse([$4],,[ + $4 +]) + : ${with_cflags:=-g} + : ${with_no_leaks:=yes} + with_$1=yes], + [with_$1=]) +AC_MSG_RESULT(${with_$1:-no}) + +case .$with_cflags in #(vi +.*-g*) + case .$CFLAGS in #(vi + .*-g*) #(vi + ;; + *) + CF_ADD_CFLAGS([-g]) + ;; + esac + ;; +esac +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_OUR_MESSAGES version: 7 updated: 2004/09/12 19:45:55 +dnl --------------- +dnl Check if we use the messages included with this program +dnl +dnl $1 specifies either Makefile or makefile, defaulting to the former. +dnl +dnl Sets variables which can be used to substitute in makefiles: +dnl MSG_DIR_MAKE - to make ./po directory +dnl SUB_MAKEFILE - makefile in ./po directory (see CF_BUNDLED_INTL) +dnl +AC_DEFUN([CF_OUR_MESSAGES], +[ +cf_makefile=ifelse($1,,Makefile,$1) + +use_our_messages=no +if test "$USE_NLS" = yes ; then +if test -d $srcdir/po ; then +AC_MSG_CHECKING(if we should use included message-library) + AC_ARG_ENABLE(included-msgs, + [ --disable-included-msgs use included messages, for i18n support], + [use_our_messages=$enableval], + [use_our_messages=yes]) +fi +AC_MSG_RESULT($use_our_messages) +fi + +MSG_DIR_MAKE="#" +if test "$use_our_messages" = yes +then + SUB_MAKEFILE="$SUB_MAKEFILE po/$cf_makefile.in:$srcdir/po/$cf_makefile.inn" + MSG_DIR_MAKE= +fi + +AC_SUBST(MSG_DIR_MAKE) +AC_SUBST(SUB_MAKEFILE) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_PATHSEP version: 4 updated: 2009/01/11 20:30:23 +dnl ---------- +dnl Provide a value for the $PATH and similar separator +AC_DEFUN([CF_PATHSEP], +[ + case $cf_cv_system_name in + os2*) PATH_SEPARATOR=';' ;; + *) PATH_SEPARATOR=':' ;; + esac +ifelse($1,,,[$1=$PATH_SEPARATOR]) + AC_SUBST(PATH_SEPARATOR) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_PATH_SYNTAX version: 12 updated: 2008/03/23 14:45:59 +dnl -------------- +dnl Check the argument to see that it looks like a pathname. Rewrite it if it +dnl begins with one of the prefix/exec_prefix variables, and then again if the +dnl result begins with 'NONE'. This is necessary to work around autoconf's +dnl delayed evaluation of those symbols. +AC_DEFUN([CF_PATH_SYNTAX],[ +if test "x$prefix" != xNONE; then + cf_path_syntax="$prefix" +else + cf_path_syntax="$ac_default_prefix" +fi + +case ".[$]$1" in #(vi +.\[$]\(*\)*|.\'*\'*) #(vi + ;; +..|./*|.\\*) #(vi + ;; +.[[a-zA-Z]]:[[\\/]]*) #(vi OS/2 EMX + ;; +.\[$]{*prefix}*) #(vi + eval $1="[$]$1" + case ".[$]$1" in #(vi + .NONE/*) + $1=`echo [$]$1 | sed -e s%NONE%$cf_path_syntax%` + ;; + esac + ;; #(vi +.no|.NONE/*) + $1=`echo [$]$1 | sed -e s%NONE%$cf_path_syntax%` + ;; +*) + ifelse($2,,[AC_MSG_ERROR([expected a pathname, not \"[$]$1\"])],$2) + ;; +esac +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_POSIX_C_SOURCE version: 7 updated: 2010/01/09 11:05:50 +dnl ----------------- +dnl Define _POSIX_C_SOURCE to the given level, and _POSIX_SOURCE if needed. +dnl +dnl POSIX.1-1990 _POSIX_SOURCE +dnl POSIX.1-1990 and _POSIX_SOURCE and +dnl POSIX.2-1992 C-Language _POSIX_C_SOURCE=2 +dnl Bindings Option +dnl POSIX.1b-1993 _POSIX_C_SOURCE=199309L +dnl POSIX.1c-1996 _POSIX_C_SOURCE=199506L +dnl X/Open 2000 _POSIX_C_SOURCE=200112L +dnl +dnl Parameters: +dnl $1 is the nominal value for _POSIX_C_SOURCE +AC_DEFUN([CF_POSIX_C_SOURCE], +[ +cf_POSIX_C_SOURCE=ifelse($1,,199506L,$1) + +cf_save_CFLAGS="$CFLAGS" +cf_save_CPPFLAGS="$CPPFLAGS" + +CF_REMOVE_DEFINE(cf_trim_CFLAGS,$cf_save_CFLAGS,_POSIX_C_SOURCE) +CF_REMOVE_DEFINE(cf_trim_CPPFLAGS,$cf_save_CPPFLAGS,_POSIX_C_SOURCE) + +AC_CACHE_CHECK(if we should define _POSIX_C_SOURCE,cf_cv_posix_c_source,[ + CF_MSG_LOG(if the symbol is already defined go no further) + AC_TRY_COMPILE([#include <sys/types.h>],[ +#ifndef _POSIX_C_SOURCE +make an error +#endif], + [cf_cv_posix_c_source=no], + [cf_want_posix_source=no + case .$cf_POSIX_C_SOURCE in #(vi + .[[12]]??*) #(vi + cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" + ;; + .2) #(vi + cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" + cf_want_posix_source=yes + ;; + .*) + cf_want_posix_source=yes + ;; + esac + if test "$cf_want_posix_source" = yes ; then + AC_TRY_COMPILE([#include <sys/types.h>],[ +#ifdef _POSIX_SOURCE +make an error +#endif],[], + cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE") + fi + CF_MSG_LOG(ifdef from value $cf_POSIX_C_SOURCE) + CFLAGS="$cf_trim_CFLAGS" + CPPFLAGS="$cf_trim_CPPFLAGS $cf_cv_posix_c_source" + CF_MSG_LOG(if the second compile does not leave our definition intact error) + AC_TRY_COMPILE([#include <sys/types.h>],[ +#ifndef _POSIX_C_SOURCE +make an error +#endif],, + [cf_cv_posix_c_source=no]) + CFLAGS="$cf_save_CFLAGS" + CPPFLAGS="$cf_save_CPPFLAGS" + ]) +]) + +if test "$cf_cv_posix_c_source" != no ; then + CFLAGS="$cf_trim_CFLAGS" + CPPFLAGS="$cf_trim_CPPFLAGS" + CF_ADD_CFLAGS($cf_cv_posix_c_source) +fi + +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_PROG_CC_U_D version: 1 updated: 2005/07/14 16:59:30 +dnl -------------- +dnl Check if C (preprocessor) -U and -D options are processed in the order +dnl given rather than by type of option. Some compilers insist on apply all +dnl of the -U options after all of the -D options. Others allow mixing them, +dnl and may predefine symbols that conflict with those we define. +AC_DEFUN([CF_PROG_CC_U_D], +[ +AC_CACHE_CHECK(if $CC -U and -D options work together,cf_cv_cc_u_d_options,[ + cf_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="-UU_D_OPTIONS -DU_D_OPTIONS -DD_U_OPTIONS -UD_U_OPTIONS" + AC_TRY_COMPILE([],[ +#ifndef U_D_OPTIONS +make an undefined-error +#endif +#ifdef D_U_OPTIONS +make a defined-error +#endif + ],[ + cf_cv_cc_u_d_options=yes],[ + cf_cv_cc_u_d_options=no]) + CPPFLAGS="$cf_save_CPPFLAGS" +]) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_PROG_EXT version: 10 updated: 2004/01/03 19:28:18 +dnl ----------- +dnl Compute $PROG_EXT, used for non-Unix ports, such as OS/2 EMX. +AC_DEFUN([CF_PROG_EXT], +[ +AC_REQUIRE([CF_CHECK_CACHE]) +case $cf_cv_system_name in +os2*) + CFLAGS="$CFLAGS -Zmt" + CPPFLAGS="$CPPFLAGS -D__ST_MT_ERRNO__" + CXXFLAGS="$CXXFLAGS -Zmt" + # autoconf's macro sets -Zexe and suffix both, which conflict:w + LDFLAGS="$LDFLAGS -Zmt -Zcrtdll" + ac_cv_exeext=.exe + ;; +esac + +AC_EXEEXT +AC_OBJEXT + +PROG_EXT="$EXEEXT" +AC_SUBST(PROG_EXT) +test -n "$PROG_EXT" && AC_DEFINE_UNQUOTED(PROG_EXT,"$PROG_EXT") +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_REMOVE_DEFINE version: 3 updated: 2010/01/09 11:05:50 +dnl ---------------- +dnl Remove all -U and -D options that refer to the given symbol from a list +dnl of C compiler options. This works around the problem that not all +dnl compilers process -U and -D options from left-to-right, so a -U option +dnl cannot be used to cancel the effect of a preceding -D option. +dnl +dnl $1 = target (which could be the same as the source variable) +dnl $2 = source (including '$') +dnl $3 = symbol to remove +define([CF_REMOVE_DEFINE], +[ +$1=`echo "$2" | \ + sed -e 's/-[[UD]]'"$3"'\(=[[^ ]]*\)\?[[ ]]/ /g' \ + -e 's/-[[UD]]'"$3"'\(=[[^ ]]*\)\?[$]//g'` +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_RPATH_HACK version: 8 updated: 2010/04/17 15:38:58 +dnl ------------- +AC_DEFUN([CF_RPATH_HACK], +[ +AC_REQUIRE([CF_LD_RPATH_OPT]) +AC_MSG_CHECKING(for updated LDFLAGS) +if test -n "$LD_RPATH_OPT" ; then + AC_MSG_RESULT(maybe) + + AC_CHECK_PROGS(cf_ldd_prog,ldd,no) + cf_rpath_list="/usr/lib /lib" + if test "$cf_ldd_prog" != no + then +AC_TRY_LINK([#include <stdio.h>], + [printf("Hello");], + [cf_rpath_list=`$cf_ldd_prog conftest$ac_exeext | fgrep / | sed -e 's%^.*[[ ]]/%/%' -e 's%/[[^/]][[^/]]*$%%' |sort -u`]) + fi + + CF_VERBOSE(...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS) + + CF_RPATH_HACK_2(LDFLAGS) + CF_RPATH_HACK_2(LIBS) + + CF_VERBOSE(...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS) +fi +AC_SUBST(EXTRA_LDFLAGS) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_RPATH_HACK_2 version: 6 updated: 2010/04/17 16:31:24 +dnl --------------- +dnl Do one set of substitutions for CF_RPATH_HACK, adding an rpath option to +dnl EXTRA_LDFLAGS for each -L option found. +dnl +dnl $cf_rpath_list contains a list of directories to ignore. +dnl +dnl $1 = variable name to update. The LDFLAGS variable should be the only one, +dnl but LIBS often has misplaced -L options. +AC_DEFUN([CF_RPATH_HACK_2], +[ +CF_VERBOSE(...checking $1 [$]$1) + +cf_rpath_dst= +for cf_rpath_src in [$]$1 +do + case $cf_rpath_src in #(vi + -L*) #(vi + + # check if this refers to a directory which we will ignore + cf_rpath_skip=no + if test -n "$cf_rpath_list" + then + for cf_rpath_item in $cf_rpath_list + do + if test "x$cf_rpath_src" = "x-L$cf_rpath_item" + then + cf_rpath_skip=yes + break + fi + done + fi + + if test "$cf_rpath_skip" = no + then + # transform the option + if test "$LD_RPATH_OPT" = "-R " ; then + cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%-R %"` + else + cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%$LD_RPATH_OPT%"` + fi + + # if we have not already added this, add it now + cf_rpath_tst=`echo "$EXTRA_LDFLAGS" | sed -e "s%$cf_rpath_tmp %%"` + if test "x$cf_rpath_tst" = "x$EXTRA_LDFLAGS" + then + CF_VERBOSE(...Filter $cf_rpath_src ->$cf_rpath_tmp) + EXTRA_LDFLAGS="$cf_rpath_tmp $EXTRA_LDFLAGS" + fi + fi + ;; + esac + cf_rpath_dst="$cf_rpath_dst $cf_rpath_src" +done +$1=$cf_rpath_dst + +CF_VERBOSE(...checked $1 [$]$1) +AC_SUBST(EXTRA_LDFLAGS) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_SUBDIR_PATH version: 6 updated: 2010/04/21 06:20:50 +dnl -------------- +dnl Construct a search-list for a nonstandard header/lib-file +dnl $1 = the variable to return as result +dnl $2 = the package name +dnl $3 = the subdirectory, e.g., bin, include or lib +AC_DEFUN([CF_SUBDIR_PATH], +[ +$1= + +CF_ADD_SUBDIR_PATH($1,$2,$3,/usr,$prefix) +CF_ADD_SUBDIR_PATH($1,$2,$3,$prefix,NONE) +CF_ADD_SUBDIR_PATH($1,$2,$3,/usr/local,$prefix) +CF_ADD_SUBDIR_PATH($1,$2,$3,/opt,$prefix) +CF_ADD_SUBDIR_PATH($1,$2,$3,[$]HOME,$prefix) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_SUBST version: 4 updated: 2006/06/17 12:33:03 +dnl -------- +dnl Shorthand macro for substituting things that the user may override +dnl with an environment variable. +dnl +dnl $1 = long/descriptive name +dnl $2 = environment variable +dnl $3 = default value +AC_DEFUN([CF_SUBST], +[AC_CACHE_VAL(cf_cv_subst_$2,[ +AC_MSG_CHECKING(for $1 (symbol $2)) +CF_SUBST_IF([-z "[$]$2"], [$2], [$3]) +cf_cv_subst_$2=[$]$2 +AC_MSG_RESULT([$]$2) +]) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_SYSTYPE version: 3 updated: 2001/02/03 00:14:59 +dnl ---------- +dnl Derive the system-type (our main clue to the method of building shared +dnl libraries). +AC_DEFUN([CF_SYSTYPE], +[ +AC_MSG_CHECKING(for system type) +AC_CACHE_VAL(cf_cv_systype,[ +AC_ARG_WITH(system-type, +[ --with-system-type=XXX test: override derived host system-type], +[cf_cv_systype=$withval], +[ +cf_cv_systype="`(uname -s || hostname || echo unknown) 2>/dev/null |sed -e s'/[[:\/.-]]/_/'g | sed 1q`" +if test -z "$cf_cv_systype"; then cf_cv_systype=unknown;fi +])]) +AC_MSG_RESULT($cf_cv_systype) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_SYS_NAME version: 3 updated: 2008/03/23 14:48:54 +dnl ----------- +dnl Derive the system name, as a check for reusing the autoconf cache +AC_DEFUN([CF_SYS_NAME], +[ +SYS_NAME=`(uname -s -r || uname -a || hostname) 2>/dev/null | sed 1q` +test -z "$SYS_NAME" && SYS_NAME=unknown +AC_DEFINE_UNQUOTED(SYS_NAME,"$SYS_NAME") + +AC_CACHE_VAL(cf_cv_system_name,[cf_cv_system_name="$SYS_NAME"]) + +if test ".$SYS_NAME" != ".$cf_cv_system_name" ; then + AC_MSG_RESULT("Cached system name does not agree with actual") + AC_MSG_ERROR("Please remove config.cache and try again.") +fi]) +dnl --------------------------------------------------------------------------- +dnl CF_TERM_HEADER version: 1 updated: 2005/12/31 13:26:39 +dnl -------------- +dnl Look for term.h, which is part of X/Open curses. It defines the interface +dnl to terminfo database. Usually it is in the same include-path as curses.h, +dnl but some packagers change this, breaking various applications. +AC_DEFUN([CF_TERM_HEADER],[ +AC_CACHE_CHECK(for terminfo header, cf_cv_term_header,[ +case ${cf_cv_ncurses_header} in #(vi +*/ncurses.h|*/ncursesw.h) #(vi + cf_term_header=`echo "$cf_cv_ncurses_header" | sed -e 's%ncurses[[^.]]*\.h$%term.h%'` + ;; +*) + cf_term_header=term.h + ;; +esac + +for cf_test in $cf_term_header "ncurses/term.h" "ncursesw/term.h" +do +AC_TRY_COMPILE([#include <stdio.h> +#include <${cf_cv_ncurses_header-curses.h}> +#include <$cf_test> +],[int x = auto_left_margin],[ + cf_cv_term_header="$cf_test"],[ + cf_cv_term_header=unknown + ]) + test "$cf_cv_term_header" != unknown && break +done +]) + +# Set definitions to allow ifdef'ing to accommodate subdirectories + +case $cf_cv_term_header in # (vi +*term.h) + AC_DEFINE(HAVE_TERM_H) + ;; +esac + +case $cf_cv_term_header in # (vi +ncurses/term.h) #(vi + AC_DEFINE(HAVE_NCURSES_TERM_H) + ;; +ncursesw/term.h) + AC_DEFINE(HAVE_NCURSESW_TERM_H) + ;; +esac +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_UNION_WAIT version: 5 updated: 1997/11/23 14:49:44 +dnl ------------- +dnl Check to see if the BSD-style union wait is declared. Some platforms may +dnl use this, though it is deprecated in favor of the 'int' type in Posix. +dnl Some vendors provide a bogus implementation that declares union wait, but +dnl uses the 'int' type instead; we try to spot these by checking for the +dnl associated macros. +dnl +dnl Ahem. Some implementers cast the status value to an int*, as an attempt to +dnl use the macros for either union wait or int. So we do a check compile to +dnl see if the macros are defined and apply to an int. +dnl +dnl Sets: $cf_cv_type_unionwait +dnl Defines: HAVE_TYPE_UNIONWAIT +AC_DEFUN([CF_UNION_WAIT], +[ +AC_REQUIRE([CF_WAIT_HEADERS]) +AC_MSG_CHECKING([for union wait]) +AC_CACHE_VAL(cf_cv_type_unionwait,[ + AC_TRY_LINK($cf_wait_headers, + [int x; + int y = WEXITSTATUS(x); + int z = WTERMSIG(x); + wait(&x); + ], + [cf_cv_type_unionwait=no + echo compiles ok w/o union wait 1>&AC_FD_CC + ],[ + AC_TRY_LINK($cf_wait_headers, + [union wait x; +#ifdef WEXITSTATUS + int y = WEXITSTATUS(x); +#endif +#ifdef WTERMSIG + int z = WTERMSIG(x); +#endif + wait(&x); + ], + [cf_cv_type_unionwait=yes + echo compiles ok with union wait and possibly macros too 1>&AC_FD_CC + ], + [cf_cv_type_unionwait=no])])]) +AC_MSG_RESULT($cf_cv_type_unionwait) +test $cf_cv_type_unionwait = yes && AC_DEFINE(HAVE_TYPE_UNIONWAIT) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_UPPER version: 5 updated: 2001/01/29 23:40:59 +dnl -------- +dnl Make an uppercase version of a variable +dnl $1=uppercase($2) +AC_DEFUN([CF_UPPER], +[ +$1=`echo "$2" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_UTF8_LIB version: 6 updated: 2010/04/21 06:20:50 +dnl ----------- +dnl Check for multibyte support, and if not found, utf8 compatibility library +AC_DEFUN([CF_UTF8_LIB], +[ +AC_CACHE_CHECK(for multibyte character support,cf_cv_utf8_lib,[ + cf_save_LIBS="$LIBS" + AC_TRY_LINK([ +#include <stdlib.h>],[putwc(0,0);], + [cf_cv_utf8_lib=yes], + [CF_FIND_LINKAGE([ +#include <libutf8.h>],[putwc(0,0);],utf8, + [cf_cv_utf8_lib=add-on], + [cf_cv_utf8_lib=no]) +])]) + +# HAVE_LIBUTF8_H is used by ncurses if curses.h is shared between +# ncurses/ncursesw: +if test "$cf_cv_utf8_lib" = "add-on" ; then + AC_DEFINE(HAVE_LIBUTF8_H) + CF_ADD_INCDIR($cf_cv_header_path_utf8) + CF_ADD_LIBDIR($cf_cv_library_path_utf8) + LIBS="$cf_cv_library_file_utf8 $LIBS" +fi +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_VERBOSE version: 3 updated: 2007/07/29 09:55:12 +dnl ---------- +dnl Use AC_VERBOSE w/o the warnings +AC_DEFUN([CF_VERBOSE], +[test -n "$verbose" && echo " $1" 1>&AC_FD_MSG +CF_MSG_LOG([$1]) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_VERSION_INFO version: 3 updated: 2003/11/22 12:22:45 +dnl --------------- +dnl Define several useful symbols derived from the VERSION file. A separate +dnl file is preferred to embedding the version numbers in various scripts. +dnl (automake is a textbook-example of why the latter is a bad idea, but there +dnl are others). +dnl +dnl The file contents are: +dnl libtool-version release-version patch-version +dnl or +dnl release-version +dnl where +dnl libtool-version (see ?) consists of 3 integers separated by '.' +dnl release-version consists of a major version and minor version +dnl separated by '.', optionally followed by a patch-version +dnl separated by '-'. The minor version need not be an +dnl integer (but it is preferred). +dnl patch-version is an integer in the form yyyymmdd, so ifdef's and +dnl scripts can easily compare versions. +dnl +dnl If libtool is used, the first form is required, since CF_WITH_LIBTOOL +dnl simply extracts the first field using 'cut -f1'. +AC_DEFUN([CF_VERSION_INFO], +[ +if test -f $srcdir/VERSION ; then + AC_MSG_CHECKING(for package version) + + # if there are not enough fields, cut returns the last one... + cf_field1=`sed -e '2,$d' $srcdir/VERSION|cut -f1` + cf_field2=`sed -e '2,$d' $srcdir/VERSION|cut -f2` + cf_field3=`sed -e '2,$d' $srcdir/VERSION|cut -f3` + + # this is how CF_BUNDLED_INTL uses $VERSION: + VERSION="$cf_field1" + + VERSION_MAJOR=`echo "$cf_field2" | sed -e 's/\..*//'` + test -z "$VERSION_MAJOR" && AC_MSG_ERROR(missing major-version) + + VERSION_MINOR=`echo "$cf_field2" | sed -e 's/^[[^.]]*\.//' -e 's/-.*//'` + test -z "$VERSION_MINOR" && AC_MSG_ERROR(missing minor-version) + + AC_MSG_RESULT(${VERSION_MAJOR}.${VERSION_MINOR}) + + AC_MSG_CHECKING(for package patch date) + VERSION_PATCH=`echo "$cf_field3" | sed -e 's/^[[^-]]*-//'` + case .$VERSION_PATCH in + .) + AC_MSG_ERROR(missing patch-date $VERSION_PATCH) + ;; + .[[0-9]][[0-9]][[0-9]][[0-9]][[0-9]][[0-9]][[0-9]][[0-9]]) + ;; + *) + AC_MSG_ERROR(illegal patch-date $VERSION_PATCH) + ;; + esac + AC_MSG_RESULT($VERSION_PATCH) +else + AC_MSG_ERROR(did not find $srcdir/VERSION) +fi + +# show the actual data that we have for versions: +CF_VERBOSE(VERSION $VERSION) +CF_VERBOSE(VERSION_MAJOR $VERSION_MAJOR) +CF_VERBOSE(VERSION_MINOR $VERSION_MINOR) +CF_VERBOSE(VERSION_PATCH $VERSION_PATCH) + +AC_SUBST(VERSION) +AC_SUBST(VERSION_MAJOR) +AC_SUBST(VERSION_MINOR) +AC_SUBST(VERSION_PATCH) + +dnl if a package name is given, define its corresponding version info. We +dnl need the package name to ensure that the defined symbols are unique. +ifelse($1,,,[ + PACKAGE=$1 + AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE") + AC_SUBST(PACKAGE) + CF_UPPER(cf_PACKAGE,$PACKAGE) + AC_DEFINE_UNQUOTED(${cf_PACKAGE}_VERSION,"${VERSION_MAJOR}.${VERSION_MINOR}") + AC_DEFINE_UNQUOTED(${cf_PACKAGE}_PATCHDATE,${VERSION_PATCH}) +]) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_WAIT_HEADERS version: 2 updated: 1997/10/21 19:45:33 +dnl --------------- +dnl Build up an expression $cf_wait_headers with the header files needed to +dnl compile against the prototypes for 'wait()', 'waitpid()', etc. Assume it's +dnl Posix, which uses <sys/types.h> and <sys/wait.h>, but allow SVr4 variation +dnl with <wait.h>. +AC_DEFUN([CF_WAIT_HEADERS], +[ +AC_HAVE_HEADERS(sys/wait.h) +cf_wait_headers="#include <sys/types.h> +" +if test $ac_cv_header_sys_wait_h = yes; then +cf_wait_headers="$cf_wait_headers +#include <sys/wait.h> +" +else +AC_HAVE_HEADERS(wait.h) +AC_HAVE_HEADERS(waitstatus.h) +if test $ac_cv_header_wait_h = yes; then +cf_wait_headers="$cf_wait_headers +#include <wait.h> +" +fi +if test $ac_cv_header_waitstatus_h = yes; then +cf_wait_headers="$cf_wait_headers +#include <waitstatus.h> +" +fi +fi +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_WITH_CURSES_DIR version: 2 updated: 2002/11/10 14:46:59 +dnl ------------------ +dnl Wrapper for AC_ARG_WITH to specify directory under which to look for curses +dnl libraries. +AC_DEFUN([CF_WITH_CURSES_DIR],[ +AC_ARG_WITH(curses-dir, + [ --with-curses-dir=DIR directory in which (n)curses is installed], + [CF_PATH_SYNTAX(withval) + cf_cv_curses_dir=$withval], + [cf_cv_curses_dir=no]) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_WITH_DBMALLOC version: 6 updated: 2006/12/16 14:24:05 +dnl ---------------- +dnl Configure-option for dbmalloc. The optional parameter is used to override +dnl the updating of $LIBS, e.g., to avoid conflict with subsequent tests. +AC_DEFUN([CF_WITH_DBMALLOC],[ +CF_NO_LEAKS_OPTION(dbmalloc, + [ --with-dbmalloc test: use Conor Cahill's dbmalloc library], + [USE_DBMALLOC]) + +if test "$with_dbmalloc" = yes ; then + AC_CHECK_HEADER(dbmalloc.h, + [AC_CHECK_LIB(dbmalloc,[debug_malloc]ifelse($1,,[],[,$1]))]) +fi +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_WITH_DMALLOC version: 6 updated: 2006/12/16 14:24:05 +dnl --------------- +dnl Configure-option for dmalloc. The optional parameter is used to override +dnl the updating of $LIBS, e.g., to avoid conflict with subsequent tests. +AC_DEFUN([CF_WITH_DMALLOC],[ +CF_NO_LEAKS_OPTION(dmalloc, + [ --with-dmalloc test: use Gray Watson's dmalloc library], + [USE_DMALLOC]) + +if test "$with_dmalloc" = yes ; then + AC_CHECK_HEADER(dmalloc.h, + [AC_CHECK_LIB(dmalloc,[dmalloc_debug]ifelse($1,,[],[,$1]))]) +fi +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_WITH_LIBTOOL version: 23 updated: 2009/03/28 14:26:27 +dnl --------------- +dnl Provide a configure option to incorporate libtool. Define several useful +dnl symbols for the makefile rules. +dnl +dnl The reference to AC_PROG_LIBTOOL does not normally work, since it uses +dnl macros from libtool.m4 which is in the aclocal directory of automake. +dnl Following is a simple script which turns on the AC_PROG_LIBTOOL macro. +dnl But that still does not work properly since the macro is expanded outside +dnl the CF_WITH_LIBTOOL macro: +dnl +dnl #!/bin/sh +dnl ACLOCAL=`aclocal --print-ac-dir` +dnl if test -z "$ACLOCAL" ; then +dnl echo cannot find aclocal directory +dnl exit 1 +dnl elif test ! -f $ACLOCAL/libtool.m4 ; then +dnl echo cannot find libtool.m4 file +dnl exit 1 +dnl fi +dnl +dnl LOCAL=aclocal.m4 +dnl ORIG=aclocal.m4.orig +dnl +dnl trap "mv $ORIG $LOCAL" 0 1 2 5 15 +dnl rm -f $ORIG +dnl mv $LOCAL $ORIG +dnl +dnl # sed the LIBTOOL= assignment to omit the current directory? +dnl sed -e 's/^LIBTOOL=.*/LIBTOOL=${LIBTOOL-libtool}/' $ACLOCAL/libtool.m4 >>$LOCAL +dnl cat $ORIG >>$LOCAL +dnl +dnl autoconf-257 $* +dnl +AC_DEFUN([CF_WITH_LIBTOOL], +[ +ifdef([AC_PROG_LIBTOOL],,[ +LIBTOOL= +]) +# common library maintenance symbols that are convenient for libtool scripts: +LIB_CREATE='${AR} -cr' +LIB_OBJECT='${OBJECTS}' +LIB_SUFFIX=.a +LIB_PREP="$RANLIB" + +# symbols used to prop libtool up to enable it to determine what it should be +# doing: +LIB_CLEAN= +LIB_COMPILE= +LIB_LINK='${CC}' +LIB_INSTALL= +LIB_UNINSTALL= + +AC_MSG_CHECKING(if you want to build libraries with libtool) +AC_ARG_WITH(libtool, + [ --with-libtool generate libraries with libtool], + [with_libtool=$withval], + [with_libtool=no]) +AC_MSG_RESULT($with_libtool) +if test "$with_libtool" != "no"; then +ifdef([AC_PROG_LIBTOOL],[ + # missing_content_AC_PROG_LIBTOOL{{ + AC_PROG_LIBTOOL + # missing_content_AC_PROG_LIBTOOL}} +],[ + if test "$with_libtool" != "yes" ; then + CF_PATH_SYNTAX(with_libtool) + LIBTOOL=$with_libtool + else + AC_PATH_PROG(LIBTOOL,libtool) + fi + if test -z "$LIBTOOL" ; then + AC_MSG_ERROR(Cannot find libtool) + fi +])dnl + LIB_CREATE='${LIBTOOL} --mode=link ${CC} -rpath ${DESTDIR}${libdir} -version-info `cut -f1 ${srcdir}/VERSION` ${LIBTOOL_OPTS} ${LT_UNDEF} -o' + LIB_OBJECT='${OBJECTS:.o=.lo}' + LIB_SUFFIX=.la + LIB_CLEAN='${LIBTOOL} --mode=clean' + LIB_COMPILE='${LIBTOOL} --mode=compile' + LIB_LINK='${LIBTOOL} --mode=link ${CC} ${LIBTOOL_OPTS}' + LIB_INSTALL='${LIBTOOL} --mode=install' + LIB_UNINSTALL='${LIBTOOL} --mode=uninstall' + LIB_PREP=: + + # Show the version of libtool + AC_MSG_CHECKING(version of libtool) + + # Save the version in a cache variable - this is not entirely a good + # thing, but the version string from libtool is very ugly, and for + # bug reports it might be useful to have the original string. "(" + cf_cv_libtool_version=`$LIBTOOL --version 2>&1 | sed -e '/^$/d' |sed -e '2,$d' -e 's/([[^)]]*)//g' -e 's/^[[^1-9]]*//' -e 's/[[^0-9.]].*//'` + AC_MSG_RESULT($cf_cv_libtool_version) + if test -z "$cf_cv_libtool_version" ; then + AC_MSG_ERROR(This is not GNU libtool) + fi + + # special hack to add -no-undefined (which libtool should do for itself) + LT_UNDEF= + case "$cf_cv_system_name" in #(vi + cygwin*|mingw32*|uwin*|aix[[456]]) #(vi + LT_UNDEF=-no-undefined + ;; + esac + AC_SUBST([LT_UNDEF]) + + # special hack to add --tag option for C++ compiler + case $cf_cv_libtool_version in #(vi + 1.[[5-9]]*|[[2-9]].[[0-9.a-z]]*) #(vi + LIBTOOL_CXX="$LIBTOOL --tag=CXX" + LIBTOOL="$LIBTOOL --tag=CC" + ;; + *) + LIBTOOL_CXX="$LIBTOOL" + ;; + esac +else + LIBTOOL="" + LIBTOOL_CXX="" +fi + +test -z "$LIBTOOL" && ECHO_LT= + +AC_SUBST(LIBTOOL) +AC_SUBST(LIBTOOL_CXX) +AC_SUBST(LIBTOOL_OPTS) + +AC_SUBST(LIB_CREATE) +AC_SUBST(LIB_OBJECT) +AC_SUBST(LIB_SUFFIX) +AC_SUBST(LIB_PREP) + +AC_SUBST(LIB_CLEAN) +AC_SUBST(LIB_COMPILE) +AC_SUBST(LIB_LINK) +AC_SUBST(LIB_INSTALL) +AC_SUBST(LIB_UNINSTALL) + +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_WITH_LIBTOOL_OPTS version: 2 updated: 2007/04/08 18:14:54 +dnl -------------------- +dnl Allow user to pass additional libtool options into the library creation +dnl and link steps. The main use for this is to do something like +dnl ./configure --with-libtool-opts=-static +dnl to get the same behavior as automake-flavored +dnl ./configure --enable-static +AC_DEFUN([CF_WITH_LIBTOOL_OPTS],[ +AC_MSG_CHECKING(for additional libtool options) +AC_ARG_WITH(libtool-opts, + [ --with-libtool-opts=XXX specify additional libtool options], + [with_libtool_opts=$withval], + [with_libtool_opts=no]) +AC_MSG_RESULT($with_libtool_opts) + +case .$with_libtool_opts in +.yes|.no|.) + ;; +*) + LIBTOOL_OPTS=$with_libtool_opts + ;; +esac + +AC_SUBST(LIBTOOL_OPTS) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_WITH_NO_LEAKS version: 1 updated: 2006/12/14 18:00:21 +dnl ---------------- +AC_DEFUN([CF_WITH_NO_LEAKS],[ + +AC_REQUIRE([CF_WITH_DMALLOC]) +AC_REQUIRE([CF_WITH_DBMALLOC]) +AC_REQUIRE([CF_WITH_PURIFY]) +AC_REQUIRE([CF_WITH_VALGRIND]) + +AC_MSG_CHECKING(if you want to perform memory-leak testing) +AC_ARG_WITH(no-leaks, + [ --with-no-leaks test: free permanent memory, analyze leaks], + [AC_DEFINE(NO_LEAKS) + cf_doalloc=".${with_dmalloc}${with_dbmalloc}${with_purify}${with_valgrind}" + case ${cf_doalloc} in #(vi + *yes*) ;; + *) AC_DEFINE(DOALLOC,10000) ;; + esac + with_no_leaks=yes], + [with_no_leaks=]) +AC_MSG_RESULT($with_no_leaks) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_WITH_PURIFY version: 2 updated: 2006/12/14 18:43:43 +dnl -------------- +AC_DEFUN([CF_WITH_PURIFY],[ +CF_NO_LEAKS_OPTION(purify, + [ --with-purify test: use Purify], + [USE_PURIFY], + [LINK_PREFIX="$LINK_PREFIX purify"]) +AC_SUBST(LINK_PREFIX) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_WITH_VALGRIND version: 1 updated: 2006/12/14 18:00:21 +dnl ---------------- +AC_DEFUN([CF_WITH_VALGRIND],[ +CF_NO_LEAKS_OPTION(valgrind, + [ --with-valgrind test: use valgrind], + [USE_VALGRIND]) +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_WITH_WARNINGS version: 5 updated: 2004/07/23 14:40:34 +dnl ---------------- +dnl Combine the checks for gcc features into a configure-script option +dnl +dnl Parameters: +dnl $1 - see CF_GCC_WARNINGS +AC_DEFUN([CF_WITH_WARNINGS], +[ +if ( test "$GCC" = yes || test "$GXX" = yes ) +then +AC_MSG_CHECKING(if you want to check for gcc warnings) +AC_ARG_WITH(warnings, + [ --with-warnings test: turn on gcc warnings], + [cf_opt_with_warnings=$withval], + [cf_opt_with_warnings=no]) +AC_MSG_RESULT($cf_opt_with_warnings) +if test "$cf_opt_with_warnings" != no ; then + CF_GCC_ATTRIBUTES + CF_GCC_WARNINGS([$1]) +fi +fi +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_XOPEN_CURSES version: 9 updated: 2010/04/28 06:02:16 +dnl --------------- +dnl Test if we should define X/Open source for curses, needed on Digital Unix +dnl 4.x, to see the extended functions, but breaks on IRIX 6.x. +dnl +dnl The getbegyx() check is needed for HPUX, which omits legacy macros such +dnl as getbegy(). The latter is better design, but the former is standard. +AC_DEFUN([CF_XOPEN_CURSES], +[ +AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl +AC_CACHE_CHECK(if we must define _XOPEN_SOURCE_EXTENDED,cf_cv_need_xopen_extension,[ +AC_TRY_LINK([ +#include <stdlib.h> +#include <${cf_cv_ncurses_header-curses.h}>],[ +#if defined(NCURSES_VERSION_PATCH) +if (NCURSES_VERSION_PATCH < 20100501) && (NCURSES_VERSION_PATCH >= 20100403) + make an error +#endif +#endif + long x = winnstr(stdscr, "", 0); + int x1, y1; + getbegyx(stdscr, y1, x1)], + [cf_cv_need_xopen_extension=no], + [AC_TRY_LINK([ +#define _XOPEN_SOURCE_EXTENDED +#include <stdlib.h> +#include <${cf_cv_ncurses_header-curses.h}>],[ +#ifdef NCURSES_VERSION + cchar_t check; + int check2 = curs_set((int)sizeof(check)); +#endif + long x = winnstr(stdscr, "", 0); + int x1, y1; + getbegyx(stdscr, y1, x1)], + [cf_cv_need_xopen_extension=yes], + [cf_cv_need_xopen_extension=unknown])])]) +test $cf_cv_need_xopen_extension = yes && CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED" +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_XOPEN_SOURCE version: 33 updated: 2010/03/28 15:35:52 +dnl --------------- +dnl Try to get _XOPEN_SOURCE defined properly that we can use POSIX functions, +dnl or adapt to the vendor's definitions to get equivalent functionality, +dnl without losing the common non-POSIX features. +dnl +dnl Parameters: +dnl $1 is the nominal value for _XOPEN_SOURCE +dnl $2 is the nominal value for _POSIX_C_SOURCE +AC_DEFUN([CF_XOPEN_SOURCE],[ + +cf_XOPEN_SOURCE=ifelse($1,,500,$1) +cf_POSIX_C_SOURCE=ifelse($2,,199506L,$2) +cf_xopen_source= + +case $host_os in #(vi +aix[[456]]*) #(vi + cf_xopen_source="-D_ALL_SOURCE" + ;; +darwin[[0-8]].*) #(vi + cf_xopen_source="-D_APPLE_C_SOURCE" + ;; +darwin*) #(vi + cf_xopen_source="-D_DARWIN_C_SOURCE" + ;; +freebsd*|dragonfly*) #(vi + # 5.x headers associate + # _XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L + # _XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L + cf_POSIX_C_SOURCE=200112L + cf_XOPEN_SOURCE=600 + cf_xopen_source="-D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" + ;; +hpux11*) #(vi + cf_xopen_source="-D_HPUX_SOURCE -D_XOPEN_SOURCE=500" + ;; +hpux*) #(vi + cf_xopen_source="-D_HPUX_SOURCE" + ;; +irix[[56]].*) #(vi + cf_xopen_source="-D_SGI_SOURCE" + ;; +linux*|gnu*|mint*|k*bsd*-gnu) #(vi + CF_GNU_SOURCE + ;; +mirbsd*) #(vi + # setting _XOPEN_SOURCE or _POSIX_SOURCE breaks <arpa/inet.h> + ;; +netbsd*) #(vi + # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw + ;; +openbsd*) #(vi + # setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw + ;; +osf[[45]]*) #(vi + cf_xopen_source="-D_OSF_SOURCE" + ;; +nto-qnx*) #(vi + cf_xopen_source="-D_QNX_SOURCE" + ;; +sco*) #(vi + # setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer + ;; +solaris2.1[[0-9]]) #(vi + cf_xopen_source="-D__EXTENSIONS__ -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" + ;; +solaris2.[[1-9]]) #(vi + cf_xopen_source="-D__EXTENSIONS__" + ;; +*) + AC_CACHE_CHECK(if we should define _XOPEN_SOURCE,cf_cv_xopen_source,[ + AC_TRY_COMPILE([#include <sys/types.h>],[ +#ifndef _XOPEN_SOURCE +make an error +#endif], + [cf_cv_xopen_source=no], + [cf_save="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" + AC_TRY_COMPILE([#include <sys/types.h>],[ +#ifdef _XOPEN_SOURCE +make an error +#endif], + [cf_cv_xopen_source=no], + [cf_cv_xopen_source=$cf_XOPEN_SOURCE]) + CPPFLAGS="$cf_save" + ]) +]) + if test "$cf_cv_xopen_source" != no ; then + CF_REMOVE_DEFINE(CFLAGS,$CFLAGS,_XOPEN_SOURCE) + CF_REMOVE_DEFINE(CPPFLAGS,$CPPFLAGS,_XOPEN_SOURCE) + cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source" + CF_ADD_CFLAGS($cf_temp_xopen_source) + fi + CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE) + ;; +esac + +if test -n "$cf_xopen_source" ; then + CF_ADD_CFLAGS($cf_xopen_source) +fi +]) +dnl --------------------------------------------------------------------------- +dnl CF__CURSES_HEAD version: 1 updated: 2009/07/16 19:32:31 +dnl --------------- +dnl Define a reusable chunk which includes <curses.h> and <term.h> when they +dnl are both available. +define([CF__CURSES_HEAD],[ +#ifdef HAVE_XCURSES +#include <xcurses.h> +char * XCursesProgramName = "test"; +#else +#include <${cf_cv_ncurses_header-curses.h}> +#if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H) +#include <ncursesw/term.h> +#elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H) +#include <ncurses/term.h> +#elif defined(HAVE_TERM_H) +#include <term.h> +#endif +#endif +]) +dnl --------------------------------------------------------------------------- +dnl CF__ICONV_BODY version: 2 updated: 2007/07/26 17:35:47 +dnl -------------- +dnl Test-code needed for iconv compile-checks +define([CF__ICONV_BODY],[ + iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);] +)dnl +dnl --------------------------------------------------------------------------- +dnl CF__ICONV_HEAD version: 1 updated: 2007/07/26 15:57:03 +dnl -------------- +dnl Header-files needed for iconv compile-checks +define([CF__ICONV_HEAD],[ +#include <stdlib.h> +#include <iconv.h>] +)dnl +dnl --------------------------------------------------------------------------- +dnl CF__INTL_BODY version: 1 updated: 2007/07/26 17:35:47 +dnl ------------- +dnl Test-code needed for libintl compile-checks +dnl $1 = parameter 2 from AM_WITH_NLS +define([CF__INTL_BODY],[ + bindtextdomain ("", ""); + return (int) gettext ("") + ifelse([$1], need-ngettext, [ + (int) ngettext ("", "", 0)], []) + [ + _nl_msg_cat_cntr] +]) +dnl --------------------------------------------------------------------------- +dnl CF__INTL_HEAD version: 1 updated: 2007/07/26 17:35:47 +dnl ------------- +dnl Header-files needed for libintl compile-checks +define([CF__INTL_HEAD],[ +#include <libintl.h> +extern int _nl_msg_cat_cntr; +])dnl +dnl --------------------------------------------------------------------------- +dnl jm_GLIBC21 version: 3 updated: 2002/10/27 23:21:42 +dnl ---------- +dnl Inserted as requested by gettext 0.10.40 +dnl File from /usr/share/aclocal +dnl glibc21.m4 +dnl ==================== +dnl serial 2 +dnl +dnl Test for the GNU C Library, version 2.1 or newer. +dnl From Bruno Haible. +AC_DEFUN([jm_GLIBC21], + [ + AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer, + ac_cv_gnu_library_2_1, + [AC_EGREP_CPP([Lucky GNU user], + [ +#include <features.h> +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) + Lucky GNU user + #endif +#endif + ], + ac_cv_gnu_library_2_1=yes, + ac_cv_gnu_library_2_1=no) + ] + ) + AC_SUBST(GLIBC21) + GLIBC21="$ac_cv_gnu_library_2_1" + ] +) Index: contrib/dialog/install-sh =================================================================== --- contrib/dialog/install-sh (revision 0) +++ contrib/dialog/install-sh (revision 0) @@ -0,0 +1,294 @@ +#! /bin/sh +# +# install - install a program, script, or datafile +# +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd=$cpprog + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd=$stripprog + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "$0: no input file specified" >&2 + exit 1 +else + : +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d "$dst" ]; then + instcmd=: + chmodcmd="" + else + instcmd=$mkdirprog + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f "$src" ] || [ -d "$src" ] + then + : + else + echo "$0: $src does not exist" >&2 + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "$0: no destination specified" >&2 + exit 1 + else + : + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d "$dst" ] + then + dst=$dst/`basename "$src"` + else + : + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' + ' +IFS="${IFS-$defaultIFS}" + +oIFS=$IFS +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS=$oIFS + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp=$pathcomp$1 + shift + + if [ ! -d "$pathcomp" ] ; + then + $mkdirprog "$pathcomp" + else + : + fi + + pathcomp=$pathcomp/ +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd "$dst" && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename "$dst"` + else + dstfile=`basename "$dst" $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename "$dst"` + else + : + fi + +# Make a couple of temp file names in the proper directory. + + dsttmp=$dstdir/#inst.$$# + rmtmp=$dstdir/#rm.$$# + +# Trap to clean up temp files at exit. + + trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 + trap '(exit $?); exit' 1 2 13 15 + +# Move or copy the file name to the temp name + + $doit $instcmd "$src" "$dsttmp" && + +# and set any options; do chmod last to preserve setuid bits + +# If any of these fail, we abort the whole thing. If we want to +# ignore errors from any of these, just make sure not to ignore +# errors from the above "$doit $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi && + +# Now remove or move aside any old file at destination location. We try this +# two ways since rm can't unlink itself on some systems and the destination +# file might be busy for other reasons. In this case, the final cleanup +# might fail but the new file should still install successfully. + +{ + if [ -f "$dstdir/$dstfile" ] + then + $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null || + $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null || + { + echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 + (exit 1); exit + } + else + : + fi +} && + +# Now rename the file to the real destination. + + $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" + +fi && + +# The final little trick to "correctly" pass the exit status to the exit trap. + +{ + (exit 0); exit +} Property changes on: contrib/dialog/install-sh ___________________________________________________________________ Added: svn:executable + * Index: ObsoleteFiles.inc =================================================================== --- ObsoleteFiles.inc (revision 216873) +++ ObsoleteFiles.inc (working copy) @@ -38,6 +38,51 @@ # xargs -n1 | sort | uniq -d; # done +# 20110112: Update dialog to new version, rename old libdialog to libodialog, +# removing associated man pages and header files. +OLD_FILES+=usr/share/man/man3/draw_shadow.3.gz \ + usr/share/man/man3/draw_box.3.gz usr/share/man/man3/line_edit.3.gz \ + usr/share/man/man3/strheight.3.gz usr/share/man/man3/strwidth.3.gz \ + usr/share/man/man3/dialog_create_rc.3.gz \ + usr/share/man/man3/dialog_yesno.3.gz usr/share/man/man3/dialog_noyes.3.gz \ + usr/share/man/man3/dialog_prgbox.3.gz \ + usr/share/man/man3/dialog_textbox.3.gz usr/share/man/man3/dialog_menu.3.gz \ + usr/share/man/man3/dialog_checklist.3.gz \ + usr/share/man/man3/dialog_radiolist.3.gz \ + usr/share/man/man3/dialog_inputbox.3.gz \ + usr/share/man/man3/dialog_clear_norefresh.3.gz \ + usr/share/man/man3/dialog_clear.3.gz usr/share/man/man3/dialog_update.3.gz \ + usr/share/man/man3/dialog_fselect.3.gz \ + usr/share/man/man3/dialog_notify.3.gz \ + usr/share/man/man3/dialog_mesgbox.3.gz \ + usr/share/man/man3/dialog_gauge.3.gz usr/share/man/man3/init_dialog.3.gz \ + usr/share/man/man3/end_dialog.3.gz usr/share/man/man3/use_helpfile.3.gz \ + usr/share/man/man3/use_helpline.3.gz usr/share/man/man3/get_helpline.3.gz \ + usr/share/man/man3/restore_helpline.3.gz \ + usr/share/man/man3/dialog_msgbox.3.gz \ + usr/share/man/man3/dialog_ftree.3.gz usr/share/man/man3/dialog_tree.3.gz \ + usr/share/examples/dialog/README usr/share/examples/dialog/checklist \ + usr/share/examples/dialog/ftreebox usr/share/examples/dialog/infobox \ + usr/share/examples/dialog/inputbox usr/share/examples/dialog/menubox \ + usr/share/examples/dialog/msgbox usr/share/examples/dialog/prgbox \ + usr/share/examples/dialog/radiolist usr/share/examples/dialog/textbox \ + usr/share/examples/dialog/treebox usr/share/examples/dialog/yesno \ + usr/share/examples/libdialog/Makefile usr/share/examples/libdialog/check1.c\ + usr/share/examples/libdialog/check2.c usr/share/examples/libdialog/check3.c\ + usr/share/examples/libdialog/dselect.c \ + usr/share/examples/libdialog/fselect.c \ + usr/share/examples/libdialog/ftree1.c \ + usr/share/examples/libdialog/ftree1.test \ + usr/share/examples/libdialog/ftree2.c \ + usr/share/examples/libdialog/ftree2.test \ + usr/share/examples/libdialog/gauge.c usr/share/examples/libdialog/input1.c \ + usr/share/examples/libdialog/input2.c usr/share/examples/libdialog/menu1.c \ + usr/share/examples/libdialog/menu2.c usr/share/examples/libdialog/menu3.c \ + usr/share/examples/libdialog/msg.c usr/share/examples/libdialog/prgbox.c \ + usr/share/examples/libdialog/radio1.c usr/share/examples/libdialog/radio2.c\ + usr/share/examples/libdialog/radio3.c usr/share/examples/libdialog/text.c \ + usr/share/examples/libdialog/tree.c usr/share/examples/libdialog/yesno.c +OLD_DIRS+=usr/share/examples/libdialog usr/share/examples/dialog # 20101114: Remove long-obsolete MAKEDEV.8 OLD_FILES+=usr/share/man/man8/MAKEDEV.8.gz # 20101112: vgonel(9) has gone to private API a while ago Index: UPDATING =================================================================== --- UPDATING (revision 216873) +++ UPDATING (working copy) @@ -22,6 +22,14 @@ machines to maximize performance. (To disable malloc debugging, run ln -s aj /etc/malloc.conf.) +20110112: + The system dialog(1) has been replaced with a new version previously + in ports as devel/cdialog. dialog(1) is mostly command-line compatible + with the previous version, but the libdialog associated with it has + a largely incompatible API. As such, the original version of libdialog + will be kept temporarily as libodialog, until its base system consumers + are replaced or updated. Bump __FreeBSD_version to 900030. + 20101228: The TCP stack has been modified to allow Khelp modules to interact with it via helper hook points and store per-connection data in the TCP Index: sys/sys/param.h =================================================================== --- sys/sys/param.h (revision 216873) +++ sys/sys/param.h (working copy) @@ -58,7 +58,7 @@ * in the range 5 to 9. */ #undef __FreeBSD_version -#define __FreeBSD_version 900029 /* Master, propagated to newvers */ +#define __FreeBSD_version 900030 /* Master, propagated to newvers */ #ifdef _KERNEL #define P_OSREL_SIGSEGV 700004