summaryrefslogtreecommitdiffstats
path: root/contrib/dialog
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/dialog')
-rw-r--r--contrib/dialog/CHANGES1929
-rw-r--r--contrib/dialog/COPYING504
-rw-r--r--contrib/dialog/README61
-rw-r--r--contrib/dialog/VERSION1
-rw-r--r--contrib/dialog/aclocal.m45101
-rw-r--r--contrib/dialog/argv.c122
-rw-r--r--contrib/dialog/arrows.c275
-rw-r--r--contrib/dialog/buildlist.c1097
-rw-r--r--contrib/dialog/buttons.c789
-rw-r--r--contrib/dialog/calendar.c687
-rw-r--r--contrib/dialog/checklist.c680
-rw-r--r--contrib/dialog/columns.c175
-rwxr-xr-xcontrib/dialog/config.guess1558
-rw-r--r--contrib/dialog/config.hin4
-rwxr-xr-xcontrib/dialog/config.sub1791
-rwxr-xr-xcontrib/dialog/configure17033
-rw-r--r--contrib/dialog/configure.in279
-rw-r--r--contrib/dialog/dialog-config.in136
-rw-r--r--contrib/dialog/dialog.11661
-rw-r--r--contrib/dialog/dialog.33805
-rw-r--r--contrib/dialog/dialog.c1976
-rw-r--r--contrib/dialog/dialog.h907
-rw-r--r--contrib/dialog/dialog.lsm23
-rw-r--r--contrib/dialog/dialog.pl454
-rw-r--r--contrib/dialog/dlg_colors.h202
-rw-r--r--contrib/dialog/dlg_keys.c788
-rw-r--r--contrib/dialog/dlg_keys.h174
-rw-r--r--contrib/dialog/editbox.c731
-rw-r--r--contrib/dialog/formbox.c979
-rw-r--r--contrib/dialog/fselect.c928
-rw-r--r--contrib/dialog/guage.c438
-rwxr-xr-xcontrib/dialog/headers-sh.in199
-rw-r--r--contrib/dialog/help.c54
-rw-r--r--contrib/dialog/inputbox.c255
-rw-r--r--contrib/dialog/inputstr.c802
-rwxr-xr-xcontrib/dialog/install-sh294
-rw-r--r--contrib/dialog/makefile.in345
-rw-r--r--contrib/dialog/menubox.c778
-rw-r--r--contrib/dialog/mixedform.c118
-rw-r--r--contrib/dialog/mixedgauge.c392
-rw-r--r--contrib/dialog/mouse.c148
-rw-r--r--contrib/dialog/mousewget.c91
-rw-r--r--contrib/dialog/msgbox.c192
-rw-r--r--contrib/dialog/package/debian/changelog91
-rw-r--r--contrib/dialog/package/debian/compat1
-rw-r--r--contrib/dialog/package/debian/control24
-rw-r--r--contrib/dialog/package/debian/copyright111
-rw-r--r--contrib/dialog/package/debian/docs1
-rwxr-xr-xcontrib/dialog/package/debian/rules95
-rw-r--r--contrib/dialog/package/debian/source/format1
-rw-r--r--contrib/dialog/package/debian/watch4
-rw-r--r--contrib/dialog/package/dialog.spec87
-rw-r--r--contrib/dialog/package/freebsd/Makefile48
-rw-r--r--contrib/dialog/package/freebsd/distinfo2
-rw-r--r--contrib/dialog/package/freebsd/pkg-descr9
-rw-r--r--contrib/dialog/package/freebsd/pkg-plist203
-rw-r--r--contrib/dialog/pause.c246
-rw-r--r--contrib/dialog/po/POTFILES.in32
-rw-r--r--contrib/dialog/po/an.po111
-rw-r--r--contrib/dialog/po/ar.po112
-rw-r--r--contrib/dialog/po/be@latin.po109
-rw-r--r--contrib/dialog/po/bg.po112
-rw-r--r--contrib/dialog/po/ca.po111
-rw-r--r--contrib/dialog/po/cs.po114
-rw-r--r--contrib/dialog/po/cy.po111
-rw-r--r--contrib/dialog/po/da.po112
-rw-r--r--contrib/dialog/po/de.po112
-rw-r--r--contrib/dialog/po/dialog.pot109
-rw-r--r--contrib/dialog/po/el.po111
-rw-r--r--contrib/dialog/po/eo.po110
-rw-r--r--contrib/dialog/po/es.po112
-rw-r--r--contrib/dialog/po/et.po110
-rw-r--r--contrib/dialog/po/eu.po112
-rw-r--r--contrib/dialog/po/fa.po113
-rw-r--r--contrib/dialog/po/fi.po114
-rw-r--r--contrib/dialog/po/fr.po111
-rw-r--r--contrib/dialog/po/ga.po109
-rw-r--r--contrib/dialog/po/gl.po119
-rw-r--r--contrib/dialog/po/hi.po112
-rw-r--r--contrib/dialog/po/hr.po112
-rw-r--r--contrib/dialog/po/hu.po111
-rw-r--r--contrib/dialog/po/ia.po111
-rw-r--r--contrib/dialog/po/id.po111
-rw-r--r--contrib/dialog/po/is.po112
-rw-r--r--contrib/dialog/po/it.po112
-rw-r--r--contrib/dialog/po/ja.po112
-rw-r--r--contrib/dialog/po/ku.po113
-rw-r--r--contrib/dialog/po/lt.po112
-rw-r--r--contrib/dialog/po/lv.po114
-rw-r--r--contrib/dialog/po/makefile.inn249
-rw-r--r--contrib/dialog/po/mg.po110
-rw-r--r--contrib/dialog/po/mk.po111
-rw-r--r--contrib/dialog/po/ms.po110
-rw-r--r--contrib/dialog/po/nb.po108
-rw-r--r--contrib/dialog/po/nl.po113
-rw-r--r--contrib/dialog/po/pl.po113
-rw-r--r--contrib/dialog/po/pt.po111
-rw-r--r--contrib/dialog/po/pt_BR.po113
-rw-r--r--contrib/dialog/po/rm.po113
-rw-r--r--contrib/dialog/po/ro.po114
-rw-r--r--contrib/dialog/po/ru.po115
-rw-r--r--contrib/dialog/po/rw.po126
-rw-r--r--contrib/dialog/po/sk.po111
-rw-r--r--contrib/dialog/po/sl.po112
-rw-r--r--contrib/dialog/po/sq.po111
-rw-r--r--contrib/dialog/po/sr.po112
-rw-r--r--contrib/dialog/po/sv.po110
-rw-r--r--contrib/dialog/po/sw.po111
-rw-r--r--contrib/dialog/po/th.po112
-rw-r--r--contrib/dialog/po/tr.po112
-rw-r--r--contrib/dialog/po/uk.po113
-rw-r--r--contrib/dialog/po/vi.po113
-rw-r--r--contrib/dialog/po/wa.po110
-rw-r--r--contrib/dialog/po/zh_CN.po112
-rw-r--r--contrib/dialog/po/zh_TW.po112
-rw-r--r--contrib/dialog/prgbox.c117
-rw-r--r--contrib/dialog/progressbox.c306
-rw-r--r--contrib/dialog/rangebox.c419
-rw-r--r--contrib/dialog/rc.c619
-rwxr-xr-xcontrib/dialog/rename.sh60
-rw-r--r--contrib/dialog/samples/README7
-rwxr-xr-xcontrib/dialog/samples/buildlist20
-rwxr-xr-xcontrib/dialog/samples/buildlist242
-rwxr-xr-xcontrib/dialog/samples/calendar11
-rwxr-xr-xcontrib/dialog/samples/calendar-stdout9
-rwxr-xr-xcontrib/dialog/samples/calendar211
-rwxr-xr-xcontrib/dialog/samples/calendar2-stdout9
-rwxr-xr-xcontrib/dialog/samples/calendar311
-rwxr-xr-xcontrib/dialog/samples/calendar3-stdout9
-rwxr-xr-xcontrib/dialog/samples/checklist28
-rwxr-xr-xcontrib/dialog/samples/checklist-8bit30
-rwxr-xr-xcontrib/dialog/samples/checklist-utf830
-rwxr-xr-xcontrib/dialog/samples/checklist128
-rwxr-xr-xcontrib/dialog/samples/checklist1030
-rwxr-xr-xcontrib/dialog/samples/checklist1133
-rwxr-xr-xcontrib/dialog/samples/checklist1244
-rwxr-xr-xcontrib/dialog/samples/checklist228
-rwxr-xr-xcontrib/dialog/samples/checklist328
-rwxr-xr-xcontrib/dialog/samples/checklist428
-rwxr-xr-xcontrib/dialog/samples/checklist529
-rwxr-xr-xcontrib/dialog/samples/checklist630
-rwxr-xr-xcontrib/dialog/samples/checklist734
-rwxr-xr-xcontrib/dialog/samples/checklist833
-rwxr-xr-xcontrib/dialog/samples/checklist913
-rw-r--r--contrib/dialog/samples/checklist9.txt21
-rw-r--r--contrib/dialog/samples/debian.rc143
-rwxr-xr-xcontrib/dialog/samples/dft-cancel3
-rwxr-xr-xcontrib/dialog/samples/dft-extra3
-rwxr-xr-xcontrib/dialog/samples/dft-help3
-rwxr-xr-xcontrib/dialog/samples/dft-no3
-rw-r--r--contrib/dialog/samples/dialog.py354
-rwxr-xr-xcontrib/dialog/samples/editbox45
-rwxr-xr-xcontrib/dialog/samples/editbox-utf835
-rwxr-xr-xcontrib/dialog/samples/editbox245
-rwxr-xr-xcontrib/dialog/samples/editbox318
-rwxr-xr-xcontrib/dialog/samples/editbox445
-rwxr-xr-xcontrib/dialog/samples/form179
-rwxr-xr-xcontrib/dialog/samples/form1-both69
-rwxr-xr-xcontrib/dialog/samples/form1-extra69
-rwxr-xr-xcontrib/dialog/samples/form1-help69
-rwxr-xr-xcontrib/dialog/samples/form1-utf871
-rwxr-xr-xcontrib/dialog/samples/form284
-rwxr-xr-xcontrib/dialog/samples/form369
-rwxr-xr-xcontrib/dialog/samples/form470
-rwxr-xr-xcontrib/dialog/samples/form571
-rwxr-xr-xcontrib/dialog/samples/form671
-rwxr-xr-xcontrib/dialog/samples/fselect11
-rwxr-xr-xcontrib/dialog/samples/fselect-stdout9
-rwxr-xr-xcontrib/dialog/samples/fselect011
-rwxr-xr-xcontrib/dialog/samples/fselect120
-rwxr-xr-xcontrib/dialog/samples/fselect1-stdout18
-rwxr-xr-xcontrib/dialog/samples/fselect211
-rwxr-xr-xcontrib/dialog/samples/fselect2-stdout9
-rwxr-xr-xcontrib/dialog/samples/gauge22
-rwxr-xr-xcontrib/dialog/samples/gauge023
-rwxr-xr-xcontrib/dialog/samples/gauge0-input-fd27
-rwxr-xr-xcontrib/dialog/samples/gauge228
-rwxr-xr-xcontrib/dialog/samples/infobox21
-rwxr-xr-xcontrib/dialog/samples/infobox121
-rwxr-xr-xcontrib/dialog/samples/infobox221
-rwxr-xr-xcontrib/dialog/samples/infobox322
-rwxr-xr-xcontrib/dialog/samples/infobox422
-rwxr-xr-xcontrib/dialog/samples/infobox539
-rwxr-xr-xcontrib/dialog/samples/infobox641
-rwxr-xr-xcontrib/dialog/samples/inputbox20
-rwxr-xr-xcontrib/dialog/samples/inputbox-both22
-rwxr-xr-xcontrib/dialog/samples/inputbox-extra21
-rwxr-xr-xcontrib/dialog/samples/inputbox-help21
-rwxr-xr-xcontrib/dialog/samples/inputbox123
-rwxr-xr-xcontrib/dialog/samples/inputbox220
-rwxr-xr-xcontrib/dialog/samples/inputbox321
-rwxr-xr-xcontrib/dialog/samples/inputbox420
-rwxr-xr-xcontrib/dialog/samples/inputbox521
-rwxr-xr-xcontrib/dialog/samples/inputbox6-8bit17
-rwxr-xr-xcontrib/dialog/samples/inputbox6-utf818
-rwxr-xr-xcontrib/dialog/samples/inputbox729
-rwxr-xr-xcontrib/dialog/samples/inputmenu65
-rwxr-xr-xcontrib/dialog/samples/inputmenu-stdout63
-rwxr-xr-xcontrib/dialog/samples/inputmenu185
-rwxr-xr-xcontrib/dialog/samples/inputmenu297
-rwxr-xr-xcontrib/dialog/samples/inputmenu3106
-rwxr-xr-xcontrib/dialog/samples/inputmenu486
-rwxr-xr-xcontrib/dialog/samples/killall16
-rwxr-xr-xcontrib/dialog/samples/listing8
-rwxr-xr-xcontrib/dialog/samples/menubox27
-rwxr-xr-xcontrib/dialog/samples/menubox-8bit29
-rwxr-xr-xcontrib/dialog/samples/menubox-utf829
-rwxr-xr-xcontrib/dialog/samples/menubox127
-rwxr-xr-xcontrib/dialog/samples/menubox1022
-rwxr-xr-xcontrib/dialog/samples/menubox1243
-rwxr-xr-xcontrib/dialog/samples/menubox227
-rwxr-xr-xcontrib/dialog/samples/menubox327
-rwxr-xr-xcontrib/dialog/samples/menubox427
-rwxr-xr-xcontrib/dialog/samples/menubox530
-rwxr-xr-xcontrib/dialog/samples/menubox628
-rwxr-xr-xcontrib/dialog/samples/menubox729
-rwxr-xr-xcontrib/dialog/samples/menubox830
-rwxr-xr-xcontrib/dialog/samples/menubox926
-rwxr-xr-xcontrib/dialog/samples/mixedform61
-rwxr-xr-xcontrib/dialog/samples/mixedform261
-rwxr-xr-xcontrib/dialog/samples/mixedgauge26
-rwxr-xr-xcontrib/dialog/samples/msgbox13
-rwxr-xr-xcontrib/dialog/samples/msgbox-help14
-rwxr-xr-xcontrib/dialog/samples/msgbox-utf814
-rwxr-xr-xcontrib/dialog/samples/msgbox134
-rwxr-xr-xcontrib/dialog/samples/msgbox234
-rwxr-xr-xcontrib/dialog/samples/msgbox322
-rwxr-xr-xcontrib/dialog/samples/msgbox4-8bit31
-rwxr-xr-xcontrib/dialog/samples/msgbox4-eucjp25
-rwxr-xr-xcontrib/dialog/samples/msgbox4-utf837
-rwxr-xr-xcontrib/dialog/samples/msgbox523
-rwxr-xr-xcontrib/dialog/samples/msgbox617
-rwxr-xr-xcontrib/dialog/samples/msgbox6a17
-rwxr-xr-xcontrib/dialog/samples/password20
-rwxr-xr-xcontrib/dialog/samples/password121
-rwxr-xr-xcontrib/dialog/samples/password221
-rwxr-xr-xcontrib/dialog/samples/passwordform169
-rwxr-xr-xcontrib/dialog/samples/passwordform1-utf871
-rwxr-xr-xcontrib/dialog/samples/pause10
-rwxr-xr-xcontrib/dialog/samples/pause-both14
-rwxr-xr-xcontrib/dialog/samples/pause-extra13
-rwxr-xr-xcontrib/dialog/samples/pause-help12
-rwxr-xr-xcontrib/dialog/samples/prgbox9
-rwxr-xr-xcontrib/dialog/samples/prgbox29
-rwxr-xr-xcontrib/dialog/samples/programbox19
-rwxr-xr-xcontrib/dialog/samples/programbox219
-rwxr-xr-xcontrib/dialog/samples/progress19
-rwxr-xr-xcontrib/dialog/samples/progress219
-rwxr-xr-xcontrib/dialog/samples/radiolist28
-rwxr-xr-xcontrib/dialog/samples/radiolist133
-rwxr-xr-xcontrib/dialog/samples/radiolist1030
-rwxr-xr-xcontrib/dialog/samples/radiolist230
-rwxr-xr-xcontrib/dialog/samples/radiolist330
-rwxr-xr-xcontrib/dialog/samples/radiolist430
-rwxr-xr-xcontrib/dialog/samples/rangebox11
-rwxr-xr-xcontrib/dialog/samples/rangebox211
-rwxr-xr-xcontrib/dialog/samples/rangebox311
-rwxr-xr-xcontrib/dialog/samples/rangebox411
-rw-r--r--contrib/dialog/samples/report-button21
-rw-r--r--contrib/dialog/samples/report-edit23
-rw-r--r--contrib/dialog/samples/report-string24
-rw-r--r--contrib/dialog/samples/report-tempfile24
-rw-r--r--contrib/dialog/samples/report-yesno21
-rwxr-xr-xcontrib/dialog/samples/rotated-data23
-rw-r--r--contrib/dialog/samples/setup-edit7
-rw-r--r--contrib/dialog/samples/setup-tempfile6
-rw-r--r--contrib/dialog/samples/setup-utf812
-rw-r--r--contrib/dialog/samples/setup-vars23
-rwxr-xr-xcontrib/dialog/samples/shortlist19
-rw-r--r--contrib/dialog/samples/slackware.rc142
-rw-r--r--contrib/dialog/samples/sourcemage.rc142
-rw-r--r--contrib/dialog/samples/suse.rc142
-rwxr-xr-xcontrib/dialog/samples/tailbox16
-rwxr-xr-xcontrib/dialog/samples/tailboxbg22
-rwxr-xr-xcontrib/dialog/samples/tailboxbg132
-rwxr-xr-xcontrib/dialog/samples/tailboxbg233
-rwxr-xr-xcontrib/dialog/samples/testdata-8bit48
-rwxr-xr-xcontrib/dialog/samples/textbox44
-rwxr-xr-xcontrib/dialog/samples/textbox-both21
-rwxr-xr-xcontrib/dialog/samples/textbox-help20
-rw-r--r--contrib/dialog/samples/textbox.txt24
-rwxr-xr-xcontrib/dialog/samples/textbox244
-rwxr-xr-xcontrib/dialog/samples/textbox320
-rwxr-xr-xcontrib/dialog/samples/timebox14
-rwxr-xr-xcontrib/dialog/samples/timebox-stdout10
-rwxr-xr-xcontrib/dialog/samples/timebox211
-rwxr-xr-xcontrib/dialog/samples/timebox2-stdout10
-rwxr-xr-xcontrib/dialog/samples/treeview22
-rwxr-xr-xcontrib/dialog/samples/treeview252
-rwxr-xr-xcontrib/dialog/samples/wheel64
-rw-r--r--contrib/dialog/samples/whiptail.rc142
-rwxr-xr-xcontrib/dialog/samples/with-dquotes3
-rwxr-xr-xcontrib/dialog/samples/with-squotes3
-rwxr-xr-xcontrib/dialog/samples/yesno21
-rwxr-xr-xcontrib/dialog/samples/yesno-both24
-rwxr-xr-xcontrib/dialog/samples/yesno-extra23
-rwxr-xr-xcontrib/dialog/samples/yesno-help18
-rwxr-xr-xcontrib/dialog/samples/yesno-utf814
-rwxr-xr-xcontrib/dialog/samples/yesno218
-rwxr-xr-xcontrib/dialog/samples/yesno318
-rwxr-xr-xcontrib/dialog/samples/yesno418
-rw-r--r--contrib/dialog/tailbox.c401
-rw-r--r--contrib/dialog/textbox.c978
-rw-r--r--contrib/dialog/timebox.c418
-rw-r--r--contrib/dialog/trace.c230
-rw-r--r--contrib/dialog/treeview.c658
-rw-r--r--contrib/dialog/ui_getc.c659
-rw-r--r--contrib/dialog/util.c2708
-rw-r--r--contrib/dialog/version.c33
-rw-r--r--contrib/dialog/yesno.c161
310 files changed, 70209 insertions, 0 deletions
diff --git a/contrib/dialog/CHANGES b/contrib/dialog/CHANGES
new file mode 100644
index 0000000..d5d61a6
--- /dev/null
+++ b/contrib/dialog/CHANGES
@@ -0,0 +1,1929 @@
+-- $Id: CHANGES,v 1.476 2013/09/24 00:06:47 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:
+
+2013/09/23
+ + fix samples/inputbox6-utf8, which had depended unnecessarily on bash.
+ + improve memory caching for wide-character manipulation in gauge
+ widget (report by Devin Teske).
+ + add dlg_reallocate_gauge (discussion with Devin Teske).
+ + updated configure macros to use msys changes from ncurses.
+ + update config.guess, config.sub
+
+2013/09/02
+ + modify makefile rule to make the ".png" filenames created by groff
+ predictable.
+ + add option --help-tags to allow scripts to get the item's tag field
+ consistently from help- and help-item button results rather than
+ getting the item's text for the latter (discussion with Florent
+ Rougon).
+ + correct manpage discussion of DIALOG_ITEM_HELP versus --item-help,
+ as well as --help-button return status (report by Florent Rougon).
+ + correct limit used for --hline option (report by Devin Teske,
+ cf: 2011/06/30).
+ + do not print empty "[]" if a --hline option was given with an empty
+ value (report by Devin Teske).
+ + miscellaneous configure script fixes/updates. In particular, add
+ option --with-shared which builds shared libraries without a libtool
+ dependency.
+ + add FreeBSD port-files for test-builds.
+ + update lt.po, add fa.po from
+ http://translationproject.org/latest/dialog/
+ + update config.guess, config.sub
+
+2013/05/23
+ + modify ifdef in arrows.c to work around packages which use the
+ wide-character ncursesw headers with the ncurses library (report
+ by Aleksey Cheusov).
+ + correct workaround for xterm alternate-screen to work with/without
+ the fix made in ncurses that makes putp() always write to the
+ standard output (Debian #708829).
+ + improve limit-checks for checklist, in case the dialog is resized
+ (report by Ilya A Arkhipov).
+ + add --last-key option (adapted from patch by Jordi Pujol, Debian
+ #697607).
+
+2013/03/15
+ + update zh_TW.po, add an.po from
+ http://translationproject.org/latest/dialog/
+
+2012/12/30 - release 1.2
+ + improve some older changelog entries to help with HTML'izing content.
+ + various fixes/improvments for scrollbar appearance.
+ + add mappings for some equivalent options provided by whiptail;
+ add configure option --disable-whiptail to allow suppressing these.
+ + add configure option --disable-Xdialog2 to allow suppressing the
+ newer features, i.e., for cdialog 1.2
+ + add --no-items option, for consistency.
+ + add --no-tags option, like Xdialog.
+ + add buildlist, rangebox and treeview dialogs, like Xdialog.
+ + remove obsolete workaround for ncurses 4.2 scrolling in checklist
+ and menubox.
+ + improve dialog_helpfile() by preventing it from showing extra buttons
+ (suggested by xDog Walker).
+ + correct logic in formbox's scroll_next() function (report by xDog
+ Walker).
+ + fix a case with inputbox widget where preset input text is not shown
+ until moving the cursor within the text (report by xDog Walker).
+ + handle SIGCHLD in dialog_prgbox() to eliminate defunct processes
+ (report by xDog Walker).
+ + improve the way "hotkeys" are assigned to widget buttons by checking
+ if a given key has already been used in the row of buttons (Debian
+ #684933).
+ + amend fix for --trace parsing from 2012/07/03, which sometimes
+ skipped a parameter (report by xDog Walker).
+ + drop copismall and install files from samples, which were essentially
+ nonfunctional.
+ + correct secondary border colors in samples/slackware.rc and
+ samples/whiptail.rc
+ + update gl.po, add ia.po from
+ http://translationproject.org/latest/dialog/
+ + fix various issues reported by coverity scan.
+ + miscellaneous configure script fixes/updates:
+ + require autoconf 2.52+patches
+ + support --datarootdir option
+ + check for clang compiler
+ + check for tinfo library when looking for ncurses
+ + add 3rd parameter to AC_DEFINE for autoheader
+ + remove unused macros from aclocal.m4
+ + update config.guess, config.sub
+
+2012/07/06
+ + modify samples/setup-tempfile to work with Tru64's shell.
+ + modify inputmenu sample scripts to make them more portable:
+ + use "id" rather than "$GROUPS", use sed to work with Solaris.
+ + use sed to split-up the rename results to work with HPUX.
+ + fix regression in msgbox (ArchLinux #30574)
+
+2012/07/03
+ + modify prgbox widget to work with --extra-button, etc.
+ + add case values to several widgets to allow for mouse-clicks with
+ "--extra-button" and "--help-button" additions.
+ + correct timebox widget's exit code for "--extra-button" when handing
+ the "enter" key.
+ + modify msgbox widget to honor "--extra-button".
+ + corrected processing of "--trace" option, which did not update the
+ index into command-line to point past its value.
+ + add a check in dialog program for valid characters used in option,
+ e.g., to generate an error if a script attempts to add option value
+ using "=" rather than with whitespace.
+ + add new command-line option --default-button and library function
+ dlg_default_button() to retrieve the value set by the option
+ to provide a way to set the default button directly rather than
+ by combining --nook, etc. (patch by Zoltan Kelemen).
+ + amend include of unctrl.h to apply only to the case where curses.h
+ is included, to avoid conflict of ncurses' unctrl.h with a system
+ implementation (report by Martin Roedlach)
+ + add limit-check to dlg_toupper() in non-wide curses mode to work
+ when non-character values such as arrow-key codes are passed to
+ it (patch by Zoltan Kelemen).
+ + override timeout value, e.g., as set via --timeout command-line
+ option in pause widget because that interferes with pause's behavior
+ (report by Jan Spitalnik).
+ + modify samples/inputmenu* to allow ":" in renamed text (report by
+ Andreas Stoewing).
+ + modify double-quoting to make it more consistent, i.e., checklist
+ output is quoted only when needed. This fixes the case where
+ single-quotes were used whether or not needed, but also modifies
+ older checklist behavior for double-quoting which always added those
+ (Debian #663664).
+ + correct exit-code used in inputmenu for "rename" button (Debian
+ #673041, forwarded from Ubuntu #333909, patch by Lebedev Vadim).
+ + update el.po and hr.po from
+ http://translationproject.org/latest/dialog/
+ + use checkbashisms to clean up sample scripts.
+
+2012/02/15
+ + modify menubox.c to use the same improvement as in checklist.c
+ + improve auto width computation for checklist widget by using
+ dlg_calc_list_width as in the non-auto case (Edho Arief).
+ + eliminate some bashisms in the sample scripts (Pedro Giffuni).
+ + makefile fixes from FreeBSD ports (Li-Wen Hsu):
+ + make --with-package option of configure script work.
+ + get LIBTOOL_VERSION from configure script, needed by
+ ${LIBTOOL_VERSION} in LIBTOOL_CREATE (LIB_CREATE in configure and
+ aclocal.m4)
+ + update cs.po and sr.po from
+ http://translationproject.org/latest/dialog/
+ + updated configure script macros, improving CF_XOPEN_SOURCE among
+ other fixes.
+
+2011/10/20
+ + fix --analyze warnings for clang versions 2.8, 2.9.
+ + add configure check for lint program.
+ + add check in dlg_getc() in case its window is freed as a side effect
+ of removing callbacks.
+ + fix logic in freeing subwindows (report by xDog Walker).
+ + fix a regression in logic distinguishing between inputmenu and menu
+ widgets (report by xDog Walker).
+ + minor fixes to library manpage.
+
+2011/10/18
+ + modify header-sh.in to work around limit on sed script length on
+ HPUX.
+ + add a special case of parameter parsing for "--trace" to the
+ initialization done before calling init_dialog(), to allow users to
+ capture the initial state of the parameter list before any options
+ are processed and removed. This is only done if "--trace" is the
+ first option, otherwise it is handled in the common options as before
+ (report by xDog Walker).
+ + modify samples/testdata-8bit, discarding $1 from the parameter list
+ if it was used, so that the source'ing scripts can consistently use
+ "$@" to insert parameters before the widget, e.g., as an alternative
+ to using $DIALOGOPTS (report by xDog Walker).
+ + modify treatment of function pointers in menubox.c, make
+ dlg_renamed_menutext() and dlg_dummy_menutext() visible to library
+ users (request by xDog Walker).
+ + add dlg_count_real_columns(), use to modify centering for "--hline"
+ text to account for "\Z"s (report by xDog Walker).
+ + improve check in dlg_draw_arrows2() for conflict between the window
+ title and up-arrow marker to take into account that the given window
+ may not be the top-level window of the widget.
+ + change width of page up/down mouse areas in fselect panes to use the
+ full width of the panes rather than only the portion from the left
+ margin to the up/down arrow.
+ + add/use dlg_draw_box2() and dlg_draw_bottom_box2() to use the
+ secondary borders.
+ + modify rc-file read/write to accept/generate color values that refer
+ to previously-processed items in the color table. This reduces the
+ number of distinct colors that must be specified to set up a color
+ scheme.
+ + add color table entries for secondary borders, i.e., the ones that
+ are normally drawn with the dialog's text-colors (Debian #641168).
+ + modify fselect.c to scan the current directory if the input field
+ happens to be empty (Debian #640905).
+ + repeated the discussion of environment variables that can override
+ the exit-status values in the manpage's return-codes section
+ (Debian #642105).
+ + add an example to the manpage showing how to override the form
+ widget's keys used for field/button traversal (Debian #642108).
+ + modify call to dlg_register_window() in formbox.c so that the editing
+ bindings are attached to the form sub-window rather than the
+ top-level dialog window. Also change the name by which the editing
+ bindings are bound for editbox.c, fselect.c and inputbox.c, so that
+ the editing and navigation bindings can be different.
+ + correct logic in dlg_lookup_key() so that it matches the widget name
+ before using a binding from .dialogrc, allowing the inner/outer
+ windows of form and other editing widgets to have different bindings.
+ + modify dlg_register_window() to call dlg_dump_window_keys() after
+ its updates, via the --trace output, to supplement the manpage
+ description of key bindings (Debian #642108).
+ + add DLGK_FORM_PREV and DLGK_FORM_NEXT key-bindings to form.c, to
+ allow binding a single key to traverse both form-fields and buttons
+ (Debian #642108).
+ + modify dlg_parse_rc() to check for error return from
+ dlg_parse_bindkey().
+ + add function dlg_dump_window_keys(), to help with debugging widgets.
+ + add CR, LF, TAB, FF and ESC to table of curses names to help make
+ key bindings more readable.
+ + update table of dialog key-names so that helpfile and trace are
+ dumped properly.
+ + correct dlg_dump_keys(), which was showing only the first item in
+ the matched binding table.
+ + save/restore window current position in dlg_update_mixedgauge().
+ + pass return-code from pause_for_ok() from dlg_progressbox() when
+ pauseopt is set, rather than only DLG_OK.
+ + call setlocale() in init_dialog() rather than relying on on-demand
+ use within inputstr.c, since there are paths in textbox widget which
+ do not exercise the latter (report by xDog Walker).
+ + fix some places where checks for "\Z" were done without also checking
+ dialog_vars.colors (report by Moray Henderson).
+ + correct logic for DIALOGOPTS parsing so that the parse happens only
+ once unless memory leak checking is enabled (report by xDog Walker).
+ + remove an incorrect free() call in dlg_free_gauge() (report by xDog
+ Walker).
+ + modify dlg_trace_win() to log wide-characters (report by xDog Walker).
+ + make traces shorter by skipping repeated ERR's, but showing the
+ number skipped (report by xDog Walker).
+ + improve description in manpage to distinguish program box and
+ progress box from tailboxes (adapted from email by xDog Walker).
+ + modify dlg_trace_win() so that it looks for the topmost window in a
+ dialog. Because subwindows share space with the top window, tracing
+ the latter shows the whole widget (report by xDog Walker).
+ + expand tracing so that each window is traced before soliciting input,
+ making the ^T feature to print a window on demand partly redundant
+ (suggested by xDog Walker).
+ + cosmetic change in dialog.h to avoid "*/*" strings from comments next
+ to "*" (report by xDog Walker).
+ + ensure result from dlg_align_columns() has trailing null on each
+ string. Analysis was hindered by libc6's continuance of libc5's
+ early-1990s misfeature of clearing the result from malloc, noting
+ that libc6's documentation incorrectly claims that it does not do
+ this (report by xDog Walker).
+
+2011/07/07
+ + modify util.c to work better with old versions of ncurses:
+ + suppress use of wchgat() before fix in 20060715 which is needed
+ for simple shadow manipulation used here in 2011/06/30 (report
+ by xDog Walker).
+ + add a null-pointer check in dlg_print_scrolled()
+ + fix a regression in dlg_getc() introduced by changes to intercept
+ F1 for help-popup (report by xDog Walker).
+
+2011/06/30
+ + correct license statement for prgbox.c (Debian #632198).
+ + correct layout when "--colors" is used, by discounting characters in
+ the escape sequences from the column counts (report by xDog Walker).
+ + modify dlg_checklist() so that only one item in the list can
+ initially be selected (report by xDog Walker).
+ + add/use macro dlg_enter_buttoncode() to improve implementation of
+ "--nook" option (report by xDog Walker).
+ + add option "--no-nl-expand" to suppress the conversion of "\n"
+ strings into newlines (request by xDog Walker).
+ + modify LIB_CREATE symbol in makefile.in to include the library
+ dependencies such as ncurses. This is needed when dynamically
+ loading the library (report/analysis by xDog Walker).
+ + modify dlg_exit_label() to suppress the Cancel button, for
+ consistency.
+ + modify dlg_exit_label() to honor the --nook option, except when there
+ is no other button, e.g., the help-button.
+ + modify dlg_exit_buttoncode() so that it returns the proper code for
+ help-button (report by xDog Walker).
+ + correct loop limit when processing "--column-separator" (report by
+ xDog Walker).
+ + modify handling of "--version" and "--help" to ensure that they are
+ processed, and exit before widgets. Separate "--print-version"
+ from "--version", allowing its output to be interspersed with
+ widget output (report by xDog Walker).
+ + correct a few places where "--version" or "--help" options went
+ always to stdout rather than allowing redirection with the "--stderr"
+ option (report by xDog Walker).
+ + improve repainting after erasing a widget and its shadow.
+ + add "--hline" and "--hfile" options for compatibility with FreeBSD
+ dialog (request by Devin Teske).
+ + add dialog version message when opening a trace file (request by
+ xDog Walker).
+ + show filename of rc-file in traces.
+ + add piped-in data for gauge widget to traces.
+ + add entrypoints to gauge widget, for allocating, updating and freeing
+ the widget (adapted from patch by Stephen Hurd).
+ + fix a reference to freed memory in the gauge widget.
+ + fix --no-mouse option by actually closing the mouse (report by
+ xDog Walker).
+ + add sk.po from
+ http://translationproject.org/latest/dialog/
+ + limit Solaris xpg4 portability fix for redefinition of ERR to cover
+ the specific value found in <sys/regset.h>, in case an application
+ includes dialog.h after curses.h (FreeBSD #156601, report by Jaakko
+ Heinonen, Stephen Hurd).
+ + updated configure macros:
+ + CF_CURSES_CPPFLAGS,
+ + CF_CURSES_LIBS, make checks for special libraries on hpux10 and
+ sunos4 optional
+ + CF_CURSES_FUNCS, workaround for bug in gcc 4.2.1 (FreeBSD 8.1)
+ which caused part of test program to be omitted, i.e., when it saw
+ two return-statements in a row it omitted the _first_ one. Also
+ add expression to pointer check to help FreeBSD's linker decide it
+ should be validated. Just an assignment was not enough. Also, add
+ check for unctrl.h
+ + CF_CURSES_HEADER, change order for curses.h / ncurses.h pairs to
+ put ncurses.h first, which will tend to provide the same #define's
+ as in CF_NCURSES_HEADER (report by Dennis Preiser).
+ + CF_CURSES_TERM_H, modify to avoid spurious check for
+ <curses.hterm.h> if there is no ncurses version. Look for
+ ncurses's term.h anyway, to work around breakage by packagers who
+ separate ncurses' header files.
+ + CF_DISABLE_RPATH_HACK, fix garbled message
+ + CF_LD_RPATH_OPT, add mirbsd
+ + CF_MAKEFLAGS, filter out GNU make's entering/leaving messages.
+ This only appeared when using the macro in a dpkg script, though it
+ should have in other cases.
+ + CF_RPATH_HACK, add a check for libraries not found, e.g., from
+ suppressed functionality of gcc in linking from /usr/local/lib, and
+ add a -L option to help work around this.
+ + CF_XOPEN_SOURCE, workaround for cygwin to get ncurses' configure
+ script to define _XOPEN_SOURCE_EXTENDED (cygwin's features.h
+ doesn't do anything, so it needs a crutch).
+ + update config.guess, config.sub
+
+2011/03/02
+ + add --prgbox and --programbox (adapted from patch by David Boyd).
+ + add sl.po from
+ http://translationproject.org/latest/dialog/
+ + fix timeouts from 2011/01/18, which were being interpreted as
+ milliseconds rather than seconds (report by Luis Moreira).
+
+2011/01/18
+ + fix inconsistency in return-codes for textbox when help-button is
+ used by making dlg_exit_buttoncode() a wrapper for
+ dlg_ok_buttoncode().
+ + modify pause widget to use dlg_ok_buttoncode(), so help-button works.
+ + correct two infobox sample scripts, which did not pass extra
+ command-line parameters due to quoting problems.
+ + add a limit-check to the timebox widget (patch by Garrett Cooper).
+ + modify --trace option to also trace the command-line parameters.
+ + account for combining characters when wrapping text (Debian #570634).
+ + correct handling of SIGWINCH in gauge widget (Debian #305705).
+ + add gauge_color, to make guage's progress-bar distinct from
+ title_color (request by Dominic Derdau).
+ + update fi.po from
+ http://translationproject.org/latest/dialog/
+ as well as resync line-numbers in the other po-files.
+ + modify configure script and dialog program to build with NetBSD's
+ wide-character curses functions, including workarounds for its
+ incorrect WACS_xxx definitions. Some of the UTF-8 examples work.
+ + add back-tab for traversal of tailboxbg widgets, for symmetry with
+ tab-traversal.
+ + reduce flicker in tailboxbg by checking if the input file size has
+ changed.
+ + modify internals of callbacks to avoid blocking reads of their
+ associated files by keyboard input.
+ + add command-line option --no-mouse, to suppress use of mouse.
+ + add configure option --enable-header-subdir to allow the header files
+ to be installed into a subdirectory named for the package.
+ + modify dlg_restore_vars() to retain the updated values of
+ input_result and input_length, eliminating the need for a caller to
+ provide their own user buffer (prompted by report by Thiago Bimbatti
+ Felicio).
+ + add a null-pointer check in show_result() for
+ dialog_vars.input_result, and ensure it is set to null after freeing
+ (prompted by report by Thiago Bimbatti Felicio).
+ + change order of -I options in CPPFLAGS (report by Michel Feldheim)
+ + modify pause-widget so that it no longer exits when an unrecognized
+ key is pressed (patch by Creidieki M Crouch).
+ + add --with-package option to configure script to allow renaming
+ of the dialog program and library, to support the package scripts.
+ + add Debian and RPM package scripts for test-builds.
+ + several improvements to configure script:
+ + quote params of ifelse()
+ + change obsolete ${name-value} to standard ${name:-value}
+ + use new macros CF_ADD_LIB/CF_ADD_LIBS to enforce consistency.
+ + AM_GNU_GETTEXT, drop $MKINSTALLDIRS, use "mkdir -p" consistently.
+ + CF_ADD_SUBDIR_PATH, workaround - if $prefix was not mkdir'd yet, no
+ directories were added.
+ + CF_BUNDLED_INTL, add --with-textdomain option, to use with lynx-dev
+ package
+ + CF_FIND_LINKAGE, simplify save/restore of $LIBS
+ + CF_GCC_WARNINGS, fix for Mac OS X (compiler makes conftest.dSYM
+ directory)
+ + CF_HEADER_PATH, don't search for variations of everything in the
+ current include-path
+ + CF_WITH_CURSES_DIR, move the calls to CF_ADD_INCDIR and
+ CF_ADD_LIBDIR for the curses-directory here, from
+ CF_NCURSES_CPPFLAGS and CF_NCURSES_LDFLAGS, so it will work even
+ with the default checking, e.g., no --with-ncurses, etc.
+ + update config.guess, config.sub
+
+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/
+ + update 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.
+ + update 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 - release 1.1
+ + mark as "dialog 1.1"
+ + 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.
+ + update 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 #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).
+ + updated 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 #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 - release 0.9b
+ + 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 (Debian #45964, patch by Joey Hess).
+ + implement "--defaultno" option to specify if the default for
+ the yes/no box is "No" (Debian #46076, patch by Joey Hess).
+ 1999/03/10
+ + modify input.c to clear the input field to the right of the
+ given string, to help with screen-refresh
+ 1998/12/08
+ + check for list_height less than one in checklist.c (Debian
+ #22239).
+ 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
+ (Debian #26326).
+ + modifications to provide sample scripts (Debian #26211):
+ + 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 Debian #18284: unstable dialog.
+
+1997/12/16
+
+ + dialog.c: dialog_input_result printed with "%s" format. This was
+ Debian #9913, fixed by Bill Mitchell, but the change was lost.
+ + Pristine source, .depend is not removed in clean target. Instead, it
+ is made zero length (otherwise it would not work *without* fakeroot).
+ + Added '^U' support in input box (Debian #9915, patch by Joey Hess).
+ + Wrote patch to fix core-dumping problem (Debian #13170). Sven Rudolph
+ <sr1@inf.tu-dresden.de>:
+
+-- vile:fk=8bit
diff --git a/contrib/dialog/COPYING b/contrib/dialog/COPYING
new file mode 100644
index 0000000..8add30a
--- /dev/null
+++ b/contrib/dialog/COPYING
@@ -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!
+
+
diff --git a/contrib/dialog/README b/contrib/dialog/README
new file mode 100644
index 0000000..b2c9b85
--- /dev/null
+++ b/contrib/dialog/README
@@ -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.
+
diff --git a/contrib/dialog/VERSION b/contrib/dialog/VERSION
new file mode 100644
index 0000000..b6b52c5
--- /dev/null
+++ b/contrib/dialog/VERSION
@@ -0,0 +1 @@
+11:1:0 1.2 20130923
diff --git a/contrib/dialog/aclocal.m4 b/contrib/dialog/aclocal.m4
new file mode 100644
index 0000000..35f94c5
--- /dev/null
+++ b/contrib/dialog/aclocal.m4
@@ -0,0 +1,5101 @@
+dnl macros used for DIALOG configure script
+dnl $Id: aclocal.m4,v 1.94 2013/09/22 14:26:24 tom Exp $
+dnl ---------------------------------------------------------------------------
+dnl Copyright 1999-2012,2013 -- Thomas E. Dickey
+dnl
+dnl Permission is hereby granted, free of charge, to any person obtaining a
+dnl copy of this software and associated documentation files (the
+dnl "Software"), to deal in the Software without restriction, including
+dnl without limitation the rights to use, copy, modify, merge, publish,
+dnl distribute, distribute with modifications, sublicense, and/or sell
+dnl copies of the Software, and to permit persons to whom the Software is
+dnl furnished to do so, subject to the following conditions:
+dnl
+dnl The above copyright notice and this permission notice shall be included
+dnl in all copies or portions of the Software.
+dnl
+dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+dnl IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+dnl DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+dnl OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
+dnl THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+dnl
+dnl Except as contained in this notice, the name(s) of the above copyright
+dnl holders shall not be used in advertising or otherwise to promote the
+dnl sale, use or other dealings in this Software without prior written
+dnl authorization.
+dnl
+dnl see
+dnl http://invisible-island.net/autoconf/
+dnl ---------------------------------------------------------------------------
+dnl ---------------------------------------------------------------------------
+dnl AM_GNU_GETTEXT version: 13 updated: 2012/11/09 05:47:26
+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_CANONICAL_HOST])dnl
+ AC_REQUIRE([AC_PROG_RANLIB])dnl
+ AC_REQUIRE([AC_HEADER_STDC])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_REQUIRE([CF_PROG_CC])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 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: 25 updated: 2012/10/06 08:57:51
+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"
+ CF_ADD_LIBS($LIBICONV)
+ 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,1,[Define to 1 if we 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_ACVERSION_CHECK version: 4 updated: 2013/03/04 19:52:56
+dnl ------------------
+dnl Conditionally generate script according to whether we're using a given autoconf.
+dnl
+dnl $1 = version to compare against
+dnl $2 = code to use if AC_ACVERSION is at least as high as $1.
+dnl $3 = code to use if AC_ACVERSION is older than $1.
+define([CF_ACVERSION_CHECK],
+[
+ifdef([AC_ACVERSION], ,[m4_copy([m4_PACKAGE_VERSION],[AC_ACVERSION])])dnl
+ifdef([m4_version_compare],
+[m4_if(m4_version_compare(m4_defn([AC_ACVERSION]), [$1]), -1, [$3], [$2])],
+[CF_ACVERSION_COMPARE(
+AC_PREREQ_CANON(AC_PREREQ_SPLIT([$1])),
+AC_PREREQ_CANON(AC_PREREQ_SPLIT(AC_ACVERSION)), AC_ACVERSION, [$2], [$3])])])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_ACVERSION_COMPARE version: 3 updated: 2012/10/03 18:39:53
+dnl --------------------
+dnl CF_ACVERSION_COMPARE(MAJOR1, MINOR1, TERNARY1,
+dnl MAJOR2, MINOR2, TERNARY2,
+dnl PRINTABLE2, not FOUND, FOUND)
+define([CF_ACVERSION_COMPARE],
+[ifelse(builtin([eval], [$2 < $5]), 1,
+[ifelse([$8], , ,[$8])],
+[ifelse([$9], , ,[$9])])])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_ADD_CFLAGS version: 10 updated: 2010/05/26 05:38:42
+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: 13 updated: 2010/05/26 16:44:57
+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_LIB version: 2 updated: 2010/06/02 05:03:05
+dnl ----------
+dnl Add a library, used to enforce consistency.
+dnl
+dnl $1 = library to add, without the "-l"
+dnl $2 = variable to update (default $LIBS)
+AC_DEFUN([CF_ADD_LIB],[CF_ADD_LIBS(-l$1,ifelse($2,,LIBS,[$2]))])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_ADD_LIBDIR version: 9 updated: 2010/05/26 16:44:57
+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_LIBS version: 1 updated: 2010/06/02 05:03:05
+dnl -----------
+dnl Add one or more libraries, used to enforce consistency.
+dnl
+dnl $1 = libraries to add, with the "-l", etc.
+dnl $2 = variable to update (default $LIBS)
+AC_DEFUN([CF_ADD_LIBS],[ifelse($2,,LIBS,[$2])="$1 [$]ifelse($2,,LIBS,[$2])"])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: 3 updated: 2010/07/03 20:58:12
+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 "$4" != "$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_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: 4 updated: 2010/05/26 05:38:42
+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: 17 updated: 2012/10/06 08:57:51
+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
+dnl Defines:
+dnl HAVE_LIBGETTEXT_H if we're using ./intl
+dnl NLS_TEXTDOMAIN
+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 PACKAGE must be set, used as default for textdomain
+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 "$PACKAGE" ; then
+ AC_MSG_ERROR([[CF_BUNDLED_INTL] used without setting [PACKAGE] variable])
+fi
+
+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])
+
+if test "$USE_NLS" = yes ; then
+ AC_ARG_WITH(textdomain,
+ [ --with-textdomain=PKG NLS text-domain (default is package name)],
+ [NLS_TEXTDOMAIN=$withval],
+ [NLS_TEXTDOMAIN=$PACKAGE])
+ AC_DEFINE_UNQUOTED(NLS_TEXTDOMAIN,"$NLS_TEXTDOMAIN",[Define to the nls textdomain value])
+ AC_SUBST(NLS_TEXTDOMAIN)
+fi
+
+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,1,[Define to 1 if we 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,1,[Define to 1 if we have gettext function])
+ elif test "$nls_cv_use_gnu_gettext" = yes ; then
+ AC_DEFINE(HAVE_GETTEXT,1,[Define to 1 if we have gettext function])
+ fi
+ if test -n "$nls_cv_header_intl" ; then
+ AC_DEFINE(HAVE_LIBINTL_H,1,[Define to 1 if we have header-file for libintl])
+ fi
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_CC_ENV_FLAGS version: 1 updated: 2012/10/03 05:25:49
+dnl ---------------
+dnl Check for user's environment-breakage by stuffing CFLAGS/CPPFLAGS content
+dnl into CC. This will not help with broken scripts that wrap the compiler with
+dnl options, but eliminates a more common category of user confusion.
+AC_DEFUN([CF_CC_ENV_FLAGS],
+[
+# This should have been defined by AC_PROG_CC
+: ${CC:=cc}
+
+AC_MSG_CHECKING(\$CC variable)
+case "$CC" in #(vi
+*[[\ \ ]]-[[IUD]]*)
+ AC_MSG_RESULT(broken)
+ AC_MSG_WARN(your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options)
+ # humor him...
+ cf_flags=`echo "$CC" | sed -e 's/^[[^ ]]*[[ ]]//'`
+ CC=`echo "$CC" | sed -e 's/[[ ]].*//'`
+ CF_ADD_CFLAGS($cf_flags)
+ ;;
+*)
+ AC_MSG_RESULT(ok)
+ ;;
+esac
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_CHECK_CACHE version: 12 updated: 2012/10/02 20:55:03
+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",[Define to the 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_CHECK_LIBTOOL_VERSION version: 1 updated: 2013/04/06 18:03:09
+dnl ------------------------
+dnl Show the version of libtool
+dnl
+dnl Save the version in a cache variable - this is not entirely a good thing,
+dnl but the version string from libtool is very ugly, and for bug reports it
+dnl might be useful to have the original string.
+AC_DEFUN([CF_CHECK_LIBTOOL_VERSION],[
+if test -n "$LIBTOOL" && test "$LIBTOOL" != none
+then
+ AC_MSG_CHECKING(version of $LIBTOOL)
+ CF_LIBTOOL_VERSION
+ AC_MSG_RESULT($cf_cv_libtool_version)
+ if test -z "$cf_cv_libtool_version" ; then
+ AC_MSG_ERROR(This is not GNU libtool)
+ fi
+else
+ AC_MSG_ERROR(GNU libtool has not been found)
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_CLANG_COMPILER version: 1 updated: 2012/06/16 14:55:39
+dnl -----------------
+dnl Check if the given compiler is really clang. clang's C driver defines
+dnl __GNUC__ (fooling the configure script into setting $GCC to yes) but does
+dnl not ignore some gcc options.
+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_CLANG_COMPILER],[
+ifelse([$2],,CLANG_COMPILER,[$2])=no
+
+if test "$ifelse([$1],,[$1],GCC)" = yes ; then
+ AC_MSG_CHECKING(if this is really Clang ifelse([$1],GXX,C++,C) compiler)
+ cf_save_CFLAGS="$ifelse([$3],,CFLAGS,[$3])"
+ ifelse([$3],,CFLAGS,[$3])="$ifelse([$3],,CFLAGS,[$3]) -Qunused-arguments"
+ AC_TRY_COMPILE([],[
+#ifdef __clang__
+#else
+make an error
+#endif
+],[ifelse([$2],,CLANG_COMPILER,[$2])=yes
+cf_save_CFLAGS="$cf_save_CFLAGS -Qunused-arguments"
+],[])
+ ifelse([$3],,CFLAGS,[$3])="$cf_save_CFLAGS"
+ AC_MSG_RESULT($ifelse([$2],,CLANG_COMPILER,[$2]))
+fi
+])
+dnl ---------------------------------------------------------------------------
+dnl CF_CURSES_CHTYPE version: 8 updated: 2012/10/06 08:57:51
+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,1,[Define to 1 if chtype is declared])
+ 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,1,[Define to 1 if chtype is a scaler/integer])
+ 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: 11 updated: 2011/04/09 14:51:08
+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
+ if test "x$cf_cv_screen" = "xcurses_colr"
+ then
+ test -d /usr/include/curses_colr && \
+ cf_cv_curses_incdir="-I/usr/include/curses_colr"
+ fi
+ ;;
+sunos3*|sunos4*)
+ if test "x$cf_cv_screen" = "xcurses_5lib"
+ then
+ test -d /usr/5lib && \
+ test -d /usr/5include && \
+ cf_cv_curses_incdir="-I/usr/5include"
+ fi
+ ;;
+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: 17 updated: 2011/05/14 16:07:29
+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])
+AC_REQUIRE([CF_CURSES_UNCTRL_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});
+if (foo + 1234 > 5678)
+ ${cf_cv_main_return:-return}(foo);
+#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: 3 updated: 2011/05/01 19:47:45
+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/ncurses.h \
+ $1/curses.h]) \
+ ncurses.h \
+ curses.h ifelse($1,,[ncurses/ncurses.h ncurses/curses.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: 37 updated: 2013/02/09 17:33:50
+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,[CF_ADD_LIBS(-lmytinfo)])
+ ;;
+hpux10.*) #(vi
+ # Looking at HPUX 10.20, the Hcurses library is the oldest (1997), cur_colr
+ # next (1998), and xcurses "newer" (2000). There is no header file for
+ # Hcurses; the subdirectory curses_colr has the headers (curses.h and
+ # term.h) for cur_colr
+ if test "x$cf_cv_screen" = "xcurses_colr"
+ then
+ AC_CHECK_LIB(cur_colr,initscr,[
+ CF_ADD_LIBS(-lcur_colr)
+ ac_cv_func_initscr=yes
+ ],[
+ AC_CHECK_LIB(Hcurses,initscr,[
+ # HP's header uses __HP_CURSES, but user claims _HP_CURSES.
+ CF_ADD_LIBS(-lHcurses)
+ CPPFLAGS="$CPPFLAGS -D__HP_CURSES -D_HP_CURSES"
+ ac_cv_func_initscr=yes
+ ])])
+ fi
+ ;;
+linux*)
+ case `arch 2>/dev/null` in
+ x86_64)
+ if test -d /lib64
+ then
+ CF_ADD_LIBDIR(/lib64)
+ else
+ CF_ADD_LIBDIR(/lib)
+ fi
+ ;;
+ *)
+ CF_ADD_LIBDIR(/lib)
+ ;;
+ esac
+ ;;
+sunos3*|sunos4*)
+ if test "x$cf_cv_screen" = "xcurses_5lib"
+ then
+ if test -d /usr/5lib ; then
+ CF_ADD_LIBDIR(/usr/5lib)
+ CF_ADD_LIBS(-lcurses -ltermcap)
+ fi
+ fi
+ ac_cv_func_initscr=yes
+ ;;
+esac
+
+if test ".$ac_cv_func_initscr" != .yes ; then
+ cf_save_LIBS="$LIBS"
+
+ 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.
+ if test "x$cf_term_lib" = x
+ then
+ AC_CHECK_FUNC(tgoto,[cf_term_lib=predefined],[
+ for cf_term_lib in $cf_check_list otermcap termcap tinfo termlib unknown
+ do
+ AC_CHECK_LIB($cf_term_lib,tgoto,[break])
+ 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"
+ if test "x$cf_curs_lib" = x
+ then
+ for cf_curs_lib in $cf_check_list xcurses jcurses pdcurses unknown
+ do
+ AC_CHECK_LIB($cf_curs_lib,initscr,[break])
+ done
+ fi
+ 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: 10 updated: 2012/10/06 08:57:51
+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.
+
+cf_header_list="term.h ncurses/term.h ncursesw/term.h"
+
+case ${cf_cv_ncurses_header:-curses.h} in #(vi
+*/*)
+ cf_header_item=`echo ${cf_cv_ncurses_header:-curses.h} | sed -e 's%\..*%%' -e 's%/.*%/%'`term.h
+ cf_header_list="$cf_header_item $cf_header_list"
+ ;;
+esac
+
+for cf_header in $cf_header_list
+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,1,[Define to 1 if we have term.h])
+ ;;
+ncurses/term.h) #(vi
+ AC_DEFINE(HAVE_NCURSES_TERM_H,1,[Define to 1 if we have ncurses/term.h])
+ ;;
+ncursesw/term.h)
+ AC_DEFINE(HAVE_NCURSESW_TERM_H,1,[Define to 1 if we have ncursesw/term.h])
+ ;;
+esac
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_CURSES_UNCTRL_H version: 2 updated: 2012/10/06 08:57:51
+dnl ------------------
+dnl Any X/Open curses implementation must have unctrl.h, but ncurses packages
+dnl may put it in a subdirectory (along with ncurses' other headers, of
+dnl course). Packages which put the headers in inconsistent locations are
+dnl broken).
+AC_DEFUN([CF_CURSES_UNCTRL_H],
+[
+AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl
+
+AC_CACHE_CHECK(for unctrl.h, cf_cv_unctrl_header,[
+
+# If we found <ncurses/curses.h>, look for <ncurses/unctrl.h>, but always look
+# for <unctrl.h> if we do not find the variant.
+
+cf_header_list="unctrl.h ncurses/unctrl.h ncursesw/unctrl.h"
+
+case ${cf_cv_ncurses_header:-curses.h} in #(vi
+*/*)
+ cf_header_item=`echo ${cf_cv_ncurses_header:-curses.h} | sed -e 's%\..*%%' -e 's%/.*%/%'`unctrl.h
+ cf_header_list="$cf_header_item $cf_header_list"
+ ;;
+esac
+
+for cf_header in $cf_header_list
+do
+ AC_TRY_COMPILE([
+#include <${cf_cv_ncurses_header:-curses.h}>
+#include <${cf_header}>],
+ [WINDOW *x],
+ [cf_cv_unctrl_header=$cf_header
+ break],
+ [cf_cv_unctrl_header=no])
+done
+
+case $cf_cv_unctrl_header in #(vi
+no)
+ AC_MSG_WARN(unctrl.h header not found)
+ ;;
+esac
+])
+
+case $cf_cv_unctrl_header in #(vi
+unctrl.h) #(vi
+ AC_DEFINE(HAVE_UNCTRL_H,1,[Define to 1 if we have unctrl.h])
+ ;;
+ncurses/unctrl.h) #(vi
+ AC_DEFINE(HAVE_NCURSES_UNCTRL_H,1,[Define to 1 if we have ncurses/unctrl.h])
+ ;;
+ncursesw/unctrl.h)
+ AC_DEFINE(HAVE_NCURSESW_UNCTRL_H,1,[Define to 1 if we have ncursesw/unctrl.h])
+ ;;
+esac
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_CURSES_WACS_MAP version: 6 updated: 2012/10/06 08:57:51
+dnl ------------------
+dnl Check for likely values of wacs_map[].
+AC_DEFUN([CF_CURSES_WACS_MAP],
+[
+AC_CACHE_CHECK(for wide alternate character set array, cf_cv_curses_wacs_map,[
+ cf_cv_curses_wacs_map=unknown
+ for name in wacs_map _wacs_map __wacs_map _nc_wacs _wacs_char
+ do
+ AC_TRY_LINK([
+#ifndef _XOPEN_SOURCE_EXTENDED
+#define _XOPEN_SOURCE_EXTENDED
+#endif
+#include <${cf_cv_ncurses_header:-curses.h}>],
+ [void *foo = &($name['k'])],
+ [cf_cv_curses_wacs_map=$name
+ break])
+ done])
+
+test "$cf_cv_curses_wacs_map" != unknown && AC_DEFINE_UNQUOTED(CURSES_WACS_ARRAY,$cf_cv_curses_wacs_map,[Define to name of (n)curses wide-character array])
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_CURSES_WACS_SYMBOLS version: 2 updated: 2012/10/06 08:57:51
+dnl ----------------------
+dnl Do a check to see if the WACS_xxx constants are defined compatibly with
+dnl X/Open Curses. In particular, NetBSD's implementation of the WACS_xxx
+dnl constants is broken since those constants do not point to cchar_t's.
+AC_DEFUN([CF_CURSES_WACS_SYMBOLS],
+[
+AC_REQUIRE([CF_CURSES_WACS_MAP])
+
+AC_CACHE_CHECK(for wide alternate character constants, cf_cv_curses_wacs_symbols,[
+cf_cv_curses_wacs_symbols=no
+if test "$cf_cv_curses_wacs_map" != unknown
+then
+ AC_TRY_LINK([
+#ifndef _XOPEN_SOURCE_EXTENDED
+#define _XOPEN_SOURCE_EXTENDED
+#endif
+#include <${cf_cv_ncurses_header:-curses.h}>],
+ [cchar_t *foo = WACS_PLUS;
+ $cf_cv_curses_wacs_map['k'] = *WACS_PLUS],
+ [cf_cv_curses_wacs_symbols=yes])
+else
+ AC_TRY_LINK([
+#ifndef _XOPEN_SOURCE_EXTENDED
+#define _XOPEN_SOURCE_EXTENDED
+#endif
+#include <${cf_cv_ncurses_header:-curses.h}>],
+ [cchar_t *foo = WACS_PLUS],
+ [cf_cv_curses_wacs_symbols=yes])
+fi
+])
+
+test "$cf_cv_curses_wacs_symbols" != no && AC_DEFINE(CURSES_WACS_SYMBOLS,1,[Define to 1 if (n)curses supports wide-character WACS_ symbols])
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_CURSES_WGETPARENT version: 3 updated: 2012/10/06 08:57:51
+dnl --------------------
+dnl Check for curses support for directly determining the parent of a given
+dnl window. Some implementations make this difficult, so we provide for
+dnl defining an application-specific function that gives this functionality.
+dnl
+dnl $1 = name of function to use if the feature is missing
+AC_DEFUN([CF_CURSES_WGETPARENT],[
+CF_CURSES_FUNCS(wgetparent)
+if test "x$cf_cv_func_wgetparent" != xyes
+then
+ AC_MSG_CHECKING(if WINDOW has _parent member)
+ AC_TRY_COMPILE([#include <${cf_cv_ncurses_header:-curses.h}>],
+ [WINDOW *p = stdscr->_parent],
+ [cf_window__parent=yes],
+ [cf_window__parent=no])
+ AC_MSG_RESULT($cf_window__parent)
+ if test "$cf_window__parent" = yes
+ then
+ AC_DEFINE(HAVE_WINDOW__PARENT,1,[Define to 1 if WINDOW struct has _parent member])
+ fi
+fi
+])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: 12 updated: 2012/10/06 16:30:28
+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 do not 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_LIBTOOL_VERSION version: 1 updated: 2010/05/15 15:45:59
+dnl --------------------------
+dnl Check if we should use the libtool 1.5 feature "-version-number" instead of
+dnl the older "-version-info" feature. The newer feature allows us to use
+dnl version numbering on shared libraries which make them compatible with
+dnl various systems.
+AC_DEFUN([CF_DISABLE_LIBTOOL_VERSION],
+[
+AC_MSG_CHECKING(if libtool -version-number should be used)
+CF_ARG_DISABLE(libtool-version,
+ [ --disable-libtool-version enable to use libtool's incompatible naming scheme],
+ [cf_libtool_version=no],
+ [cf_libtool_version=yes])
+AC_MSG_RESULT($cf_libtool_version)
+
+if test "$cf_libtool_version" = yes ; then
+ LIBTOOL_VERSION="-version-number"
+else
+ LIBTOOL_VERSION="-version-info"
+fi
+
+AC_SUBST(LIBTOOL_VERSION)
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_DISABLE_RPATH_HACK version: 2 updated: 2011/02/13 13:31:33
+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-hack should be disabled)
+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_ENABLE_RPATH version: 2 updated: 2010/03/27 18:39:42
+dnl ---------------
+dnl Check if the rpath option should be used, setting cache variable
+dnl cf_cv_enable_rpath if so.
+AC_DEFUN([CF_ENABLE_RPATH],
+[
+AC_MSG_CHECKING(if rpath option should be used)
+AC_ARG_ENABLE(rpath,
+[ --enable-rpath use rpath option when generating shared libraries],
+[cf_cv_enable_rpath=$enableval],
+[cf_cv_enable_rpath=no])
+AC_MSG_RESULT($cf_cv_enable_rpath)
+])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: 19 updated: 2010/05/29 16:31:02
+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)])
+
+cf_save_LIBS="$LIBS"
+
+AC_TRY_LINK([$1],[$2],[
+ cf_cv_find_linkage_$3=yes
+ cf_cv_header_path_$3=/usr/include
+ cf_cv_library_path_$3=/usr/lib
+],[
+
+LIBS="-l$3 $7 $cf_save_LIBS"
+
+AC_TRY_LINK([$1],[$2],[
+ cf_cv_find_linkage_$3=yes
+ cf_cv_header_path_$3=/usr/include
+ cf_cv_library_path_$3=/usr/lib
+ 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
+ CPPFLAGS="$cf_save_CPPFLAGS"
+ LDFLAGS="$cf_save_LDFLAGS"
+ fi
+
+ else
+ cf_cv_find_linkage_$3=no
+ fi
+ ],$7)
+])
+
+LIBS="$cf_save_LIBS"
+
+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)
+ CF_ADD_LIB($3)
+],[$4])
+else
+ifelse([$5],,AC_MSG_WARN(Cannot find $3 library),[$5])
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_FORGET_TOOL version: 1 updated: 2013/04/06 18:03:09
+dnl --------------
+dnl Forget that we saw the given tool.
+AC_DEFUN([CF_FORGET_TOOL],[
+unset ac_cv_prog_ac_ct_$1
+unset ac_ct_$1
+unset $1
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_FUNC_WAIT version: 3 updated: 2012/10/06 08:57:51
+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,1,[Define to 1 if wait() uses a union parameter])
+
+ 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,1,[Define to 1 if waitpid() uses a union parameter])
+
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_GCC_ATTRIBUTES version: 16 updated: 2012/10/02 20:55:03
+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
+ noreturn) #(vi
+ AC_DEFINE_UNQUOTED(GCC_NORETURN,$cf_directive,[Define to noreturn-attribute for gcc])
+ ;;
+ printf) #(vi
+ cf_value='/* nothing */'
+ if test "$cf_printf_attribute" != no ; then
+ cf_value='__attribute__((format(printf,fmt,var)))'
+ AC_DEFINE(GCC_PRINTF,1,[Define to 1 if the compiler supports gcc-like printf attribute.])
+ fi
+ AC_DEFINE_UNQUOTED(GCC_PRINTFLIKE(fmt,var),$cf_value,[Define to printf-attribute for gcc])
+ ;;
+ scanf) #(vi
+ cf_value='/* nothing */'
+ if test "$cf_scanf_attribute" != no ; then
+ cf_value='__attribute__((format(scanf,fmt,var)))'
+ AC_DEFINE(GCC_SCANF,1,[Define to 1 if the compiler supports gcc-like scanf attribute.])
+ fi
+ AC_DEFINE_UNQUOTED(GCC_SCANFLIKE(fmt,var),$cf_value,[Define to sscanf-attribute for gcc])
+ ;;
+ unused) #(vi
+ AC_DEFINE_UNQUOTED(GCC_UNUSED,$cf_directive,[Define to unused-attribute for gcc])
+ ;;
+ esac
+ fi
+ done
+else
+ fgrep define conftest.i >>confdefs.h
+fi
+rm -rf conftest*
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_GCC_VERSION version: 7 updated: 2012/10/18 06:46:33
+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/^.*(Debian[[^)]]*) //' -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: 29 updated: 2012/06/16 14:55:39
+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)
+CF_CLANG_COMPILER(GCC,CLANG_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
+ ;;
+ Wpointer-arith) #(vi
+ case $GCC_VERSION in
+ [[12]].*)
+ 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 -rf 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: 12 updated: 2010/05/05 05:22:40
+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_ADD_SUBDIR_PATH($1,$2,include,$cf_header_path,NONE)
+ cf_header_path_list="$cf_header_path_list [$]$1"
+ ;;
+ 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_INTEL_COMPILER version: 5 updated: 2013/02/10 10:41:05
+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],[
+AC_REQUIRE([AC_CANONICAL_HOST])
+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: 8 updated: 2012/10/06 08:57:51
+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,1,[Define to 1 if we have struct dirent64])
+ fi
+])
+])
+dnl ---------------------------------------------------------------------------
+dnl CF_LD_RPATH_OPT version: 5 updated: 2011/07/17 14:48:41
+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]].*|mirbsd*) #(vi
+ LD_RPATH_OPT="-Wl,-rpath,"
+ ;;
+dragonfly*|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"
+ CF_ADD_LIBS(${LD_RPATH_OPT}$libdir)
+ 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_LIBTOOL_VERSION version: 1 updated: 2013/04/06 18:03:09
+dnl ------------------
+AC_DEFUN([CF_LIBTOOL_VERSION],[
+if test -n "$LIBTOOL" && test "$LIBTOOL" != none
+then
+ 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.]].*//'`
+else
+ cf_cv_libtool_version=
+fi
+test -z "$cf_cv_libtool_version" && unset cf_cv_libtool_version
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_LIB_PREFIX version: 9 updated: 2012/01/21 19:28:10
+dnl -------------
+dnl Compute the library-prefix for the given host system
+dnl $1 = variable to set
+define([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_LIB_SUFFIX version: 22 updated: 2013/09/07 13:54:05
+dnl -------------
+dnl Compute the library file-suffix from the given model name
+dnl $1 = model name
+dnl $2 = variable to set (the nominal library suffix)
+dnl $3 = dependency variable to set (actual filename)
+dnl The variable $LIB_SUFFIX, if set, prepends the variable to set.
+AC_DEFUN([CF_LIB_SUFFIX],
+[
+ case X$1 in #(vi
+ Xlibtool) #(vi
+ $2='.la'
+ $3=[$]$2
+ ;;
+ Xdebug) #(vi
+ $2='_g.a'
+ $3=[$]$2
+ ;;
+ Xprofile) #(vi
+ $2='_p.a'
+ $3=[$]$2
+ ;;
+ Xshared) #(vi
+ case $cf_cv_system_name in
+ aix[[5-7]]*) #(vi
+ $2='.a'
+ $3=[$]$2
+ ;;
+ cygwin*|msys*|mingw*) #(vi
+ $2='.dll'
+ $3='.dll.a'
+ ;;
+ darwin*) #(vi
+ $2='.dylib'
+ $3=[$]$2
+ ;;
+ hpux*) #(vi
+ case $target in
+ ia64*) #(vi
+ $2='.so'
+ $3=[$]$2
+ ;;
+ *) #(vi
+ $2='.sl'
+ $3=[$]$2
+ ;;
+ esac
+ ;;
+ *) #(vi
+ $2='.so'
+ $3=[$]$2
+ ;;
+ esac
+ ;;
+ *)
+ $2='.a'
+ $3=[$]$2
+ ;;
+ esac
+ test -n "$LIB_SUFFIX" && $2="${LIB_SUFFIX}[$]{$2}"
+ test -n "$LIB_SUFFIX" && $3="${LIB_SUFFIX}[$]{$3}"
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_MAKEFLAGS version: 14 updated: 2011/03/31 19:29:46
+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 | fgrep -v "ing directory" | 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: 6 updated: 2010/10/23 15:52: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: 8 updated: 2010/05/29 16:31:02
+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,,[
+ CF_ADD_LIB(m)
+],[$1=-lm])
+fi
+])
+dnl ---------------------------------------------------------------------------
+dnl CF_MBSTATE_T version: 4 updated: 2012/10/06 08:57:51
+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,1,[Define to 1 if we must include wchar.h])
+fi
+
+if test "$cf_cv_mbstate_t" != unknown ; then
+ AC_DEFINE(HAVE_MBSTATE_T,1,[Define to 1 if mbstate_t is declared])
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_MIXEDCASE_FILENAMES version: 5 updated: 2013/09/07 13:54:05
+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*|*-msys*|*-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,1,[Define to 1 if filesystem supports mixed-case filenames.])
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_MSG_LOG version: 5 updated: 2010/10/23 15:52:32
+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: 10 updated: 2012/10/06 08:57:51
+dnl -----------------
+dnl Tie together the configure-script macros for ncurses.
+dnl Prefer the "-config" script from ncurses 6.x, 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"
+
+CF_ACVERSION_CHECK(2.52,
+ [AC_CHECK_TOOLS(NCURSES_CONFIG, ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config, none)],
+ [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`"
+CF_ADD_LIBS(`$NCURSES_CONFIG --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,1,[Define to 1 if we are using ncurses headers/libraries])
+
+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: 21 updated: 2012/10/06 08:57:51
+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_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,1,[Define to 1 if we are using ncurses headers/libraries])
+
+CF_NCURSES_VERSION
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_NCURSES_HEADER version: 3 updated: 2012/10/06 08:57:51
+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,1,[Define to 1 if we have ncurses.h])
+ ;;
+esac
+
+case $cf_cv_ncurses_header in # (vi
+ncurses/curses.h|ncurses/ncurses.h)
+ AC_DEFINE(HAVE_NCURSES_NCURSES_H,1,[Define to 1 if we have ncurses/ncurses.h])
+ ;;
+ncursesw/curses.h|ncursesw/ncurses.h)
+ AC_DEFINE(HAVE_NCURSESW_NCURSES_H,1,[Define to 1 if we have ncursesw/ncurses.h])
+ ;;
+esac
+
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_NCURSES_LIBS version: 16 updated: 2010/11/20 17:02:38
+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
+
+CF_ADD_LIBS($cf_ncurses_LIBS)
+
+if ( test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" )
+then
+ CF_ADD_LIBS(-l$cf_nculib_root)
+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: 14 updated: 2012/10/06 08:57:51
+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,1,[Define to 1 if we are using ncurses headers/libraries])
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_NO_LEAKS_OPTION version: 5 updated: 2012/10/02 20:55:03
+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_UNQUOTED($3,1,"Define to 1 if you want to use $1 for testing.")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_NUMBER_SYNTAX version: 1 updated: 2003/09/20 18:12:49
+dnl ----------------
+dnl Check if the given variable is a number. If not, report an error.
+dnl $1 is the variable
+dnl $2 is the message
+AC_DEFUN([CF_NUMBER_SYNTAX],[
+if test -n "$1" ; then
+ case $1 in #(vi
+ [[0-9]]*) #(vi
+ ;;
+ *)
+ AC_MSG_ERROR($2 is not a number: $1)
+ ;;
+ esac
+else
+ AC_MSG_ERROR($2 value is empty)
+fi
+])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: 6 updated: 2012/09/29 18:38:12
+dnl ----------
+dnl Provide a value for the $PATH and similar separator (or amend the value
+dnl as provided in autoconf 2.5x).
+AC_DEFUN([CF_PATHSEP],
+[
+ AC_MSG_CHECKING(for PATH separator)
+ case $cf_cv_system_name in
+ os2*) PATH_SEPARATOR=';' ;;
+ *) ${PATH_SEPARATOR:=':'} ;;
+ esac
+ifelse([$1],,,[$1=$PATH_SEPARATOR])
+ AC_SUBST(PATH_SEPARATOR)
+ AC_MSG_RESULT($PATH_SEPARATOR)
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_PATH_SYNTAX version: 14 updated: 2012/06/19 20:58:54
+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}*|.\[$]{*dir}*) #(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_PKG_CONFIG version: 7 updated: 2011/04/29 04:53:22
+dnl -------------
+dnl Check for the package-config program, unless disabled by command-line.
+AC_DEFUN([CF_PKG_CONFIG],
+[
+AC_MSG_CHECKING(if you want to use pkg-config)
+AC_ARG_WITH(pkg-config,
+ [ --with-pkg-config{=path} enable/disable use of pkg-config],
+ [cf_pkg_config=$withval],
+ [cf_pkg_config=yes])
+AC_MSG_RESULT($cf_pkg_config)
+
+case $cf_pkg_config in #(vi
+no) #(vi
+ PKG_CONFIG=none
+ ;;
+yes) #(vi
+ CF_ACVERSION_CHECK(2.52,
+ [AC_PATH_TOOL(PKG_CONFIG, pkg-config, none)],
+ [AC_PATH_PROG(PKG_CONFIG, pkg-config, none)])
+ ;;
+*)
+ PKG_CONFIG=$withval
+ ;;
+esac
+
+test -z "$PKG_CONFIG" && PKG_CONFIG=none
+if test "$PKG_CONFIG" != none ; then
+ CF_PATH_SYNTAX(PKG_CONFIG)
+fi
+
+AC_SUBST(PKG_CONFIG)
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_POSIX_C_SOURCE version: 8 updated: 2010/05/26 05:38:42
+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 version: 3 updated: 2012/10/06 15:31:55
+dnl ----------
+dnl standard check for CC, plus followup sanity checks
+dnl $1 = optional parameter to pass to AC_PROG_CC to specify compiler name
+AC_DEFUN([CF_PROG_CC],[
+ifelse($1,,[AC_PROG_CC],[AC_PROG_CC($1)])
+CF_GCC_VERSION
+CF_ACVERSION_CHECK(2.52,
+ [AC_PROG_CC_STDC],
+ [CF_ANSI_CC_REQD])
+CF_CC_ENV_FLAGS
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_PROG_EXT version: 11 updated: 2012/10/06 08:57:51
+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",[Define to the program extension (normally blank)])
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_PROG_LINT version: 2 updated: 2009/08/12 04:43:14
+dnl ------------
+AC_DEFUN([CF_PROG_LINT],
+[
+AC_CHECK_PROGS(LINT, tdlint lint alint splint lclint)
+AC_SUBST(LINT_OPTS)
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_PROG_LN_S version: 2 updated: 2010/08/14 18:25:37
+dnl ------------
+dnl Combine checks for "ln -s" and "ln -sf", updating $LN_S to include "-f"
+dnl option if it is supported.
+AC_DEFUN([CF_PROG_LN_S],[
+AC_PROG_LN_S
+AC_MSG_CHECKING(if $LN_S -f options work)
+
+rm -f conf$$.src conf$$dst
+echo >conf$$.dst
+echo first >conf$$.src
+if $LN_S -f conf$$.src conf$$.dst 2>/dev/null; then
+ cf_prog_ln_sf=yes
+else
+ cf_prog_ln_sf=no
+fi
+rm -f conf$$.dst conf$$src
+AC_MSG_RESULT($cf_prog_ln_sf)
+
+test "$cf_prog_ln_sf" = yes && LN_S="$LN_S -f"
+])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: 11 updated: 2013/09/01 13:02:00
+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
+ cf_rpath_oops=
+
+AC_TRY_LINK([#include <stdio.h>],
+ [printf("Hello");],
+ [cf_rpath_oops=`$cf_ldd_prog conftest$ac_exeext | fgrep ' not found' | sed -e 's% =>.*$%%' |sort | uniq`
+ cf_rpath_list=`$cf_ldd_prog conftest$ac_exeext | fgrep / | sed -e 's%^.*[[ ]]/%/%' -e 's%/[[^/]][[^/]]*$%%' |sort | uniq`])
+
+ # If we passed the link-test, but get a "not found" on a given library,
+ # this could be due to inept reconfiguration of gcc to make it only
+ # partly honor /usr/local/lib (or whatever). Sometimes this behavior
+ # is intentional, e.g., installing gcc in /usr/bin and suppressing the
+ # /usr/local libraries.
+ if test -n "$cf_rpath_oops"
+ then
+ for cf_rpath_src in $cf_rpath_oops
+ do
+ for cf_rpath_dir in \
+ /usr/local \
+ /usr/pkg \
+ /opt/sfw
+ do
+ if test -f $cf_rpath_dir/lib/$cf_rpath_src
+ then
+ CF_VERBOSE(...adding -L$cf_rpath_dir/lib to LDFLAGS for $cf_rpath_src)
+ LDFLAGS="$LDFLAGS -L$cf_rpath_dir/lib"
+ break
+ fi
+ done
+ done
+ fi
+ 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)
+else
+ AC_MSG_RESULT(no)
+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_SHARED_OPTS version: 83 updated: 2013/09/21 17:34:53
+dnl --------------
+dnl --------------
+dnl Attempt to determine the appropriate CC/LD options for creating a shared
+dnl library.
+dnl
+dnl Notes:
+dnl a) ${LOCAL_LDFLAGS} is used to link executables that will run within
+dnl the build-tree, i.e., by making use of the libraries that are compiled in
+dnl $rel_builddir/lib We avoid compiling-in a $rel_builddir/lib path for the
+dnl shared library since that can lead to unexpected results at runtime.
+dnl b) ${LOCAL_LDFLAGS2} has the same intention but assumes that the shared
+dnl libraries are compiled in ../../lib
+dnl
+dnl The variable 'cf_cv_do_symlinks' is used to control whether we configure
+dnl to install symbolic links to the rel/abi versions of shared libraries.
+dnl
+dnl The variable 'cf_cv_shlib_version' controls whether we use the rel or abi
+dnl version when making symbolic links.
+dnl
+dnl The variable 'cf_cv_shlib_version_infix' controls whether shared library
+dnl version numbers are infix (ex: libncurses.<ver>.dylib) or postfix
+dnl (ex: libncurses.so.<ver>).
+dnl
+dnl Some loaders leave 'so_locations' lying around. It's nice to clean up.
+AC_DEFUN([CF_SHARED_OPTS],
+[
+ AC_REQUIRE([CF_LD_RPATH_OPT])
+ RM_SHARED_OPTS=
+ LOCAL_LDFLAGS=
+ LOCAL_LDFLAGS2=
+ LD_SHARED_OPTS=
+ INSTALL_LIB="-m 644"
+ : ${rel_builddir:=.}
+
+ cf_cv_do_symlinks=no
+ cf_ld_rpath_opt=
+ test "$cf_cv_enable_rpath" = yes && cf_ld_rpath_opt="$LD_RPATH_OPT"
+
+ AC_MSG_CHECKING(if release/abi version should be used for shared libs)
+ AC_ARG_WITH(shlib-version,
+ [ --with-shlib-version=X Specify rel or abi version for shared libs],
+ [test -z "$withval" && withval=auto
+ case $withval in #(vi
+ yes) #(vi
+ cf_cv_shlib_version=auto
+ ;;
+ rel|abi|auto|no) #(vi
+ cf_cv_shlib_version=$withval
+ ;;
+ *)
+ AC_MSG_ERROR([option value must be one of: rel, abi, auto or no])
+ ;;
+ esac
+ ],[cf_cv_shlib_version=auto])
+ AC_MSG_RESULT($cf_cv_shlib_version)
+
+ cf_cv_rm_so_locs=no
+ cf_try_cflags=
+
+ # Some less-capable ports of gcc support only -fpic
+ CC_SHARED_OPTS=
+ if test "$GCC" = yes
+ then
+ AC_MSG_CHECKING(which $CC option to use)
+ cf_save_CFLAGS="$CFLAGS"
+ for CC_SHARED_OPTS in -fPIC -fpic ''
+ do
+ CFLAGS="$cf_save_CFLAGS $CC_SHARED_OPTS"
+ AC_TRY_COMPILE([#include <stdio.h>],[int x = 1],[break],[])
+ done
+ AC_MSG_RESULT($CC_SHARED_OPTS)
+ CFLAGS="$cf_save_CFLAGS"
+ fi
+
+ cf_cv_shlib_version_infix=no
+
+ case $cf_cv_system_name in #(vi
+ aix4.[3-9]*|aix[[5-7]]*) #(vi
+ if test "$GCC" = yes; then
+ CC_SHARED_OPTS=
+ MK_SHARED_LIB='${CC} -shared -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o [$]@'
+ else
+ # CC_SHARED_OPTS='-qpic=large -G'
+ # perhaps "-bM:SRE -bnoentry -bexpall"
+ MK_SHARED_LIB='${CC} -G -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o [$]@'
+ fi
+ ;;
+ beos*) #(vi
+ MK_SHARED_LIB='${CC} ${CFLAGS} -o $[@] -Xlinker -soname=`basename $[@]` -nostart -e 0'
+ ;;
+ cygwin*) #(vi
+ CC_SHARED_OPTS=
+ MK_SHARED_LIB='sh '$rel_builddir'/mk_shared_lib.sh [$]@ [$]{CC} [$]{CFLAGS}'
+ RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a"
+ cf_cv_shlib_version=cygdll
+ cf_cv_shlib_version_infix=cygdll
+ cat >mk_shared_lib.sh <<-CF_EOF
+ #!/bin/sh
+ SHARED_LIB=\[$]1
+ IMPORT_LIB=\`echo "\[$]1" | sed -e 's/cyg/lib/' -e 's/[[0-9]]*\.dll[$]/.dll.a/'\`
+ shift
+ cat <<-EOF
+ Linking shared library
+ ** SHARED_LIB \[$]SHARED_LIB
+ ** IMPORT_LIB \[$]IMPORT_LIB
+EOF
+ exec \[$]* -shared -Wl,--out-implib=\[$]{IMPORT_LIB} -Wl,--export-all-symbols -o \[$]{SHARED_LIB}
+CF_EOF
+ chmod +x mk_shared_lib.sh
+ ;;
+ msys*) #(vi
+ CC_SHARED_OPTS=
+ MK_SHARED_LIB='sh '$rel_builddir'/mk_shared_lib.sh [$]@ [$]{CC} [$]{CFLAGS}'
+ RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a"
+ cf_cv_shlib_version=msysdll
+ cf_cv_shlib_version_infix=msysdll
+ cat >mk_shared_lib.sh <<-CF_EOF
+ #!/bin/sh
+ SHARED_LIB=\[$]1
+ IMPORT_LIB=\`echo "\[$]1" | sed -e 's/msys-/lib/' -e 's/[[0-9]]*\.dll[$]/.dll.a/'\`
+ shift
+ cat <<-EOF
+ Linking shared library
+ ** SHARED_LIB \[$]SHARED_LIB
+ ** IMPORT_LIB \[$]IMPORT_LIB
+EOF
+ exec \[$]* -shared -Wl,--out-implib=\[$]{IMPORT_LIB} -Wl,--export-all-symbols -o \[$]{SHARED_LIB}
+CF_EOF
+ chmod +x mk_shared_lib.sh
+ ;;
+ darwin*) #(vi
+ cf_try_cflags="no-cpp-precomp"
+ CC_SHARED_OPTS="-dynamic"
+ MK_SHARED_LIB='${CC} ${CFLAGS} -dynamiclib -install_name ${libdir}/`basename $[@]` -compatibility_version ${ABI_VERSION} -current_version ${ABI_VERSION} -o $[@]'
+ test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=abi
+ cf_cv_shlib_version_infix=yes
+ AC_CACHE_CHECK([if ld -search_paths_first works], cf_cv_ldflags_search_paths_first, [
+ cf_save_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
+ AC_TRY_LINK(, [int i;], cf_cv_ldflags_search_paths_first=yes, cf_cv_ldflags_search_paths_first=no)
+ LDFLAGS=$cf_save_LDFLAGS])
+ if test $cf_cv_ldflags_search_paths_first = yes; then
+ LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
+ fi
+ ;;
+ hpux[[7-8]]*) #(vi
+ # HP-UX 8.07 ld lacks "+b" option used for libdir search-list
+ if test "$GCC" != yes; then
+ CC_SHARED_OPTS='+Z'
+ fi
+ MK_SHARED_LIB='${LD} -b -o $[@]'
+ INSTALL_LIB="-m 555"
+ ;;
+ hpux*) #(vi
+ # (tested with gcc 2.7.2 -- I don't have c89)
+ if test "$GCC" = yes; then
+ LD_SHARED_OPTS='-Xlinker +b -Xlinker ${libdir}'
+ else
+ CC_SHARED_OPTS='+Z'
+ LD_SHARED_OPTS='-Wl,+b,${libdir}'
+ fi
+ MK_SHARED_LIB='${LD} +b ${libdir} -b -o $[@]'
+ # HP-UX shared libraries must be executable, and should be
+ # readonly to exploit a quirk in the memory manager.
+ INSTALL_LIB="-m 555"
+ ;;
+ interix*)
+ test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
+ if test "$cf_cv_shlib_version" = rel; then
+ cf_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}'
+ else
+ cf_shared_soname='`basename $@`'
+ fi
+ CC_SHARED_OPTS=
+ MK_SHARED_LIB='${CC} -shared -Wl,-rpath,${RPATH_LIST} -Wl,-h,'$cf_shared_soname' -o $@'
+ ;;
+ irix*) #(vi
+ if test "$cf_cv_enable_rpath" = yes ; then
+ EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS"
+ fi
+ # tested with IRIX 5.2 and 'cc'.
+ if test "$GCC" != yes; then
+ CC_SHARED_OPTS='-KPIC'
+ MK_SHARED_LIB='${CC} -shared -rdata_shared -soname `basename $[@]` -o $[@]'
+ else
+ MK_SHARED_LIB='${CC} -shared -Wl,-soname,`basename $[@]` -o $[@]'
+ fi
+ cf_cv_rm_so_locs=yes
+ ;;
+ linux*|gnu*|k*bsd*-gnu) #(vi
+ if test "$DFT_LWR_MODEL" = "shared" ; then
+ LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)"
+ LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
+ fi
+ if test "$cf_cv_enable_rpath" = yes ; then
+ EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS"
+ fi
+ CF_SHARED_SONAME
+ MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $[@]'
+ ;;
+ mingw*) #(vi
+ cf_cv_shlib_version=mingw
+ cf_cv_shlib_version_infix=mingw
+ if test "$DFT_LWR_MODEL" = "shared" ; then
+ LOCAL_LDFLAGS="-Wl,--enable-auto-import"
+ LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
+ EXTRA_LDFLAGS="-Wl,--enable-auto-import $EXTRA_LDFLAGS"
+ fi
+ CC_SHARED_OPTS=
+ MK_SHARED_LIB='sh '$rel_builddir'/mk_shared_lib.sh [$]@ [$]{CC} [$]{CFLAGS}'
+ RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a"
+ cat >mk_shared_lib.sh <<-CF_EOF
+ #!/bin/sh
+ SHARED_LIB=\[$]1
+ IMPORT_LIB=\`echo "\[$]1" | sed -e 's/[[0-9]]*\.dll[$]/.dll.a/'\`
+ shift
+ cat <<-EOF
+ Linking shared library
+ ** SHARED_LIB \[$]SHARED_LIB
+ ** IMPORT_LIB \[$]IMPORT_LIB
+EOF
+ exec \[$]* -shared -Wl,--enable-auto-import,--out-implib=\[$]{IMPORT_LIB} -Wl,--export-all-symbols -o \[$]{SHARED_LIB}
+CF_EOF
+ chmod +x mk_shared_lib.sh
+ ;;
+ openbsd[[2-9]].*|mirbsd*) #(vi
+ if test "$DFT_LWR_MODEL" = "shared" ; then
+ LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)"
+ LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
+ fi
+ if test "$cf_cv_enable_rpath" = yes ; then
+ EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS"
+ fi
+ CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC"
+ CF_SHARED_SONAME
+ MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-Bshareable,-soname,'$cf_cv_shared_soname',-stats,-lc -o $[@]'
+ ;;
+ nto-qnx*|openbsd*|freebsd[[12]].*) #(vi
+ CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC"
+ MK_SHARED_LIB='${LD} -Bshareable -o $[@]'
+ test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
+ ;;
+ dragonfly*|freebsd*) #(vi
+ CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC"
+ if test "$DFT_LWR_MODEL" = "shared" && test "$cf_cv_enable_rpath" = yes ; then
+ LOCAL_LDFLAGS="${cf_ld_rpath_opt}\$(LOCAL_LIBDIR)"
+ LOCAL_LDFLAGS2="${cf_ld_rpath_opt}\${RPATH_LIST} $LOCAL_LDFLAGS"
+ EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS"
+ fi
+ CF_SHARED_SONAME
+ MK_SHARED_LIB='${LD} -shared -Bshareable -soname=`basename $[@]` -o $[@]'
+ ;;
+ netbsd*) #(vi
+ CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC"
+ if test "$DFT_LWR_MODEL" = "shared" && test "$cf_cv_enable_rpath" = yes ; then
+ LOCAL_LDFLAGS="${cf_ld_rpath_opt}\$(LOCAL_LIBDIR)"
+ LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
+ EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS"
+ if test "$cf_cv_shlib_version" = auto; then
+ if test -f /usr/libexec/ld.elf_so; then
+ cf_cv_shlib_version=abi
+ else
+ cf_cv_shlib_version=rel
+ fi
+ fi
+ CF_SHARED_SONAME
+ MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname' -o $[@]'
+ else
+ MK_SHARED_LIB='${CC} -Wl,-shared -Wl,-Bshareable -o $[@]'
+ fi
+ ;;
+ osf*|mls+*) #(vi
+ # tested with OSF/1 V3.2 and 'cc'
+ # tested with OSF/1 V3.2 and gcc 2.6.3 (but the c++ demo didn't
+ # link with shared libs).
+ MK_SHARED_LIB='${LD} -set_version ${REL_VERSION}:${ABI_VERSION} -expect_unresolved "*" -shared -soname `basename $[@]`'
+ case $host_os in #(vi
+ osf4*)
+ MK_SHARED_LIB="${MK_SHARED_LIB} -msym"
+ ;;
+ esac
+ MK_SHARED_LIB="${MK_SHARED_LIB}"' -o $[@]'
+ if test "$DFT_LWR_MODEL" = "shared" ; then
+ LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)"
+ LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
+ fi
+ cf_cv_rm_so_locs=yes
+ ;;
+ sco3.2v5*) # (also uw2* and UW7: hops 13-Apr-98
+ # tested with osr5.0.5
+ if test "$GCC" != yes; then
+ CC_SHARED_OPTS='-belf -KPIC'
+ fi
+ MK_SHARED_LIB='${LD} -dy -G -h `basename $[@] .${REL_VERSION}`.${ABI_VERSION} -o [$]@'
+ if test "$cf_cv_enable_rpath" = yes ; then
+ # only way is to set LD_RUN_PATH but no switch for it
+ RUN_PATH=$libdir
+ fi
+ test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
+ LINK_PROGS='LD_RUN_PATH=${libdir}'
+ LINK_TESTS='Pwd=`pwd`;LD_RUN_PATH=`dirname $${Pwd}`/lib'
+ ;;
+ sunos4*) #(vi
+ # tested with SunOS 4.1.1 and gcc 2.7.0
+ if test "$GCC" != yes; then
+ CC_SHARED_OPTS='-KPIC'
+ fi
+ MK_SHARED_LIB='${LD} -assert pure-text -o $[@]'
+ test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
+ ;;
+ solaris2*) #(vi
+ # tested with SunOS 5.5.1 (solaris 2.5.1) and gcc 2.7.2
+ # tested with SunOS 5.10 (solaris 10) and gcc 3.4.3
+ if test "$DFT_LWR_MODEL" = "shared" ; then
+ LOCAL_LDFLAGS="-R \$(LOCAL_LIBDIR):\${libdir}"
+ LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
+ fi
+ if test "$cf_cv_enable_rpath" = yes ; then
+ EXTRA_LDFLAGS="-R \${libdir} $EXTRA_LDFLAGS"
+ fi
+ CF_SHARED_SONAME
+ if test "$GCC" != yes; then
+ cf_save_CFLAGS="$CFLAGS"
+ for cf_shared_opts in -xcode=pic32 -xcode=pic13 -KPIC -Kpic -O
+ do
+ CFLAGS="$cf_shared_opts $cf_save_CFLAGS"
+ AC_TRY_COMPILE([#include <stdio.h>],[printf("Hello\n");],[break])
+ done
+ CFLAGS="$cf_save_CFLAGS"
+ CC_SHARED_OPTS=$cf_shared_opts
+ MK_SHARED_LIB='${CC} -dy -G -h '$cf_cv_shared_soname' -o $[@]'
+ else
+ MK_SHARED_LIB='${CC} -shared -dy -G -h '$cf_cv_shared_soname' -o $[@]'
+ fi
+ ;;
+ sysv5uw7*|unix_sv*) #(vi
+ # tested with UnixWare 7.1.0 (gcc 2.95.2 and cc)
+ if test "$GCC" != yes; then
+ CC_SHARED_OPTS='-KPIC'
+ fi
+ MK_SHARED_LIB='${LD} -d y -G -o [$]@'
+ ;;
+ *)
+ CC_SHARED_OPTS='unknown'
+ MK_SHARED_LIB='echo unknown'
+ ;;
+ esac
+
+ # This works if the last tokens in $MK_SHARED_LIB are the -o target.
+ case "$cf_cv_shlib_version" in #(vi
+ rel|abi)
+ case "$MK_SHARED_LIB" in #(vi
+ *'-o $[@]') #(vi
+ test "$cf_cv_do_symlinks" = no && cf_cv_do_symlinks=yes
+ ;;
+ *)
+ AC_MSG_WARN(ignored --with-shlib-version)
+ ;;
+ esac
+ ;;
+ esac
+
+ if test -n "$cf_try_cflags"
+ then
+cat > conftest.$ac_ext <<EOF
+#line __oline__ "${as_me:-configure}"
+#include <stdio.h>
+int main(int argc, char *argv[[]])
+{
+ printf("hello\n");
+ return (argv[[argc-1]] == 0) ;
+}
+EOF
+ cf_save_CFLAGS="$CFLAGS"
+ for cf_opt in $cf_try_cflags
+ do
+ CFLAGS="$cf_save_CFLAGS -$cf_opt"
+ AC_MSG_CHECKING(if CFLAGS option -$cf_opt works)
+ if AC_TRY_EVAL(ac_compile); then
+ AC_MSG_RESULT(yes)
+ cf_save_CFLAGS="$CFLAGS"
+ else
+ AC_MSG_RESULT(no)
+ fi
+ done
+ CFLAGS="$cf_save_CFLAGS"
+ fi
+
+
+ # RPATH_LIST is a colon-separated list of directories
+ test -n "$cf_ld_rpath_opt" && MK_SHARED_LIB="$MK_SHARED_LIB $cf_ld_rpath_opt\${RPATH_LIST}"
+ test -z "$RPATH_LIST" && RPATH_LIST="\${libdir}"
+
+ test $cf_cv_rm_so_locs = yes && RM_SHARED_OPTS="$RM_SHARED_OPTS so_locations"
+
+ CF_VERBOSE(CC_SHARED_OPTS: $CC_SHARED_OPTS)
+ CF_VERBOSE(MK_SHARED_LIB: $MK_SHARED_LIB)
+
+ AC_SUBST(CC_SHARED_OPTS)
+ AC_SUBST(LD_RPATH_OPT)
+ AC_SUBST(LD_SHARED_OPTS)
+ AC_SUBST(MK_SHARED_LIB)
+ AC_SUBST(RM_SHARED_OPTS)
+
+ AC_SUBST(LINK_PROGS)
+ AC_SUBST(LINK_TESTS)
+
+ AC_SUBST(EXTRA_LDFLAGS)
+ AC_SUBST(LOCAL_LDFLAGS)
+ AC_SUBST(LOCAL_LDFLAGS2)
+
+ AC_SUBST(INSTALL_LIB)
+ AC_SUBST(RPATH_LIST)
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_SHARED_SONAME version: 3 updated: 2008/09/08 18:34:43
+dnl ----------------
+dnl utility macro for CF_SHARED_OPTS, constructs "$cf_cv_shared_soname" for
+dnl substitution into MK_SHARED_LIB string for the "-soname" (or similar)
+dnl option.
+dnl
+dnl $1 is the default that should be used for "$cf_cv_shlib_version".
+dnl If missing, use "rel".
+define([CF_SHARED_SONAME],
+[
+ test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=ifelse($1,,rel,$1)
+ if test "$cf_cv_shlib_version" = rel; then
+ cf_cv_shared_soname='`basename $[@] .${REL_VERSION}`.${ABI_VERSION}'
+ else
+ cf_cv_shared_soname='`basename $[@]`'
+ fi
+])
+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_TERM_HEADER version: 3 updated: 2012/10/06 08:57:51
+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,1,[Define to 1 if we have term.h])
+ ;;
+esac
+
+case $cf_cv_term_header in # (vi
+ncurses/term.h) #(vi
+ AC_DEFINE(HAVE_NCURSES_TERM_H,1,[Define to 1 if we have ncurses/term.h])
+ ;;
+ncursesw/term.h)
+ AC_DEFINE(HAVE_NCURSESW_TERM_H,1,[Define to 1 if we have ncursesw/term.h])
+ ;;
+esac
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_TRY_XOPEN_SOURCE version: 1 updated: 2011/10/30 17:09:50
+dnl -------------------
+dnl If _XOPEN_SOURCE is not defined in the compile environment, check if we
+dnl can define it successfully.
+AC_DEFUN([CF_TRY_XOPEN_SOURCE],[
+AC_CACHE_CHECK(if we should define _XOPEN_SOURCE,cf_cv_xopen_source,[
+ AC_TRY_COMPILE([
+#include <stdlib.h>
+#include <string.h>
+#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 <stdlib.h>
+#include <string.h>
+#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
+])
+dnl ---------------------------------------------------------------------------
+dnl CF_UNION_WAIT version: 6 updated: 2012/10/06 08:57:51
+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,1,[Define to 1 if type unionwait is declared])
+])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: 8 updated: 2012/10/06 08:57:51
+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,1,[Define to 1 if we should include libutf8.h])
+ CF_ADD_INCDIR($cf_cv_header_path_utf8)
+ CF_ADD_LIBDIR($cf_cv_library_path_utf8)
+ CF_ADD_LIBS($cf_cv_library_file_utf8)
+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: 6 updated: 2013/06/16 10:25:53
+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'.
+dnl
+dnl Optional parameters:
+dnl $1 = internal name for package
+dnl $2 = external name for package
+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(ABI 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,,,[
+ cf_PACKAGE=$1
+ PACKAGE=ifelse($2,,$1,$2)
+ AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE",[Define to the package-name])
+ AC_SUBST(PACKAGE)
+ CF_UPPER(cf_PACKAGE,$cf_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_ABI_VERSION version: 1 updated: 2003/09/20 18:12:49
+dnl -------------------
+dnl Allow library's ABI to be overridden. Generally this happens when a
+dnl packager has incremented the ABI past that used in the original package,
+dnl and wishes to keep doing this.
+dnl
+dnl $1 is the package name, if any, to derive a corresponding {package}_ABI
+dnl symbol.
+AC_DEFUN([CF_WITH_ABI_VERSION],[
+test -z "$cf_cv_abi_version" && cf_cv_abi_version=0
+AC_ARG_WITH(abi-version,
+[ --with-abi-version=XXX override derived ABI version],
+[AC_MSG_WARN(overriding ABI version $cf_cv_abi_version to $withval)
+ cf_cv_abi_version=$withval])
+ CF_NUMBER_SYNTAX($cf_cv_abi_version,ABI version)
+ifelse($1,,,[
+$1_ABI=$cf_cv_abi_version
+])
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_WITH_CURSES_DIR version: 3 updated: 2010/11/20 17:02:38
+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_MSG_CHECKING(for specific curses-directory)
+AC_ARG_WITH(curses-dir,
+ [ --with-curses-dir=DIR directory in which (n)curses is installed],
+ [cf_cv_curses_dir=$withval],
+ [cf_cv_curses_dir=no])
+AC_MSG_RESULT($cf_cv_curses_dir)
+
+if ( test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" )
+then
+ CF_PATH_SYNTAX(withval)
+ if test -d "$cf_cv_curses_dir"
+ then
+ CF_ADD_INCDIR($cf_cv_curses_dir/include)
+ CF_ADD_LIBDIR($cf_cv_curses_dir/lib)
+ fi
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_WITH_DBMALLOC version: 7 updated: 2010/06/21 17:26:47
+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: 7 updated: 2010/06/21 17:26:47
+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: 30 updated: 2013/09/07 13:54:05
+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],
+[
+AC_REQUIRE([CF_DISABLE_LIBTOOL_VERSION])
+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_CHECK_TOOLS(LIBTOOL,[libtool glibtool],none)
+ CF_LIBTOOL_VERSION
+ if test -z "$cf_cv_libtool_version" && test "$LIBTOOL" = libtool
+ then
+ CF_FORGET_TOOL(LIBTOOL)
+ AC_CHECK_TOOLS(LIBTOOL,[glibtool],none)
+ CF_LIBTOOL_VERSION
+ fi
+ fi
+ if test -z "$LIBTOOL" ; then
+ AC_MSG_ERROR(Cannot find libtool)
+ fi
+])dnl
+ LIB_CREATE='${LIBTOOL} --mode=link ${CC} -rpath ${DESTDIR}${libdir} ${LIBTOOL_VERSION} `cut -f1 ${srcdir}/VERSION` ${LIBTOOL_OPTS} ${LT_UNDEF} $(LIBS) -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=:
+
+ CF_CHECK_LIBTOOL_VERSION
+
+ # special hack to add -no-undefined (which libtool should do for itself)
+ LT_UNDEF=
+ case "$cf_cv_system_name" in #(vi
+ cygwin*|msys*|mingw32*|uwin*|aix[[4-7]]) #(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: 2 updated: 2012/10/06 08:57:51
+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,1,[Define to 1 to enable leak-checking])
+ cf_doalloc=".${with_dmalloc}${with_dbmalloc}${with_purify}${with_valgrind}"
+ case ${cf_doalloc} in #(vi
+ *yes*) ;;
+ *) AC_DEFINE(DOALLOC,10000,[Define to size of malloc-array]) ;;
+ 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_REL_VERSION version: 1 updated: 2003/09/20 18:12:49
+dnl -------------------
+dnl Allow library's release-version to be overridden. Generally this happens when a
+dnl packager has incremented the release-version past that used in the original package,
+dnl and wishes to keep doing this.
+dnl
+dnl $1 is the package name, if any, to derive corresponding {package}_MAJOR
+dnl and {package}_MINOR symbols
+dnl symbol.
+AC_DEFUN([CF_WITH_REL_VERSION],[
+test -z "$cf_cv_rel_version" && cf_cv_rel_version=0.0
+AC_ARG_WITH(rel-version,
+[ --with-rel-version=XXX override derived release version],
+[AC_MSG_WARN(overriding release version $cf_cv_rel_version to $withval)
+ cf_cv_rel_version=$withval])
+ifelse($1,,[
+ CF_NUMBER_SYNTAX($cf_cv_rel_version,Release version)
+],[
+ $1_MAJOR=`echo "$cf_cv_rel_version" | sed -e 's/\..*//'`
+ $1_MINOR=`echo "$cf_cv_rel_version" | sed -e 's/^[[^.]]*//' -e 's/^\.//' -e 's/\..*//'`
+ CF_NUMBER_SYNTAX([$]$1_MAJOR,Release major-version)
+ CF_NUMBER_SYNTAX([$]$1_MINOR,Release minor-version)
+])
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_WITH_SHARED_OR_LIBTOOL version: 5 updated: 2013/09/02 09:17:44
+dnl -------------------------
+dnl Provide shared libraries using either autoconf macros (--with-shared) or
+dnl using the external libtool script (--with-libtool).
+dnl
+dnl $1 = program name (all caps preferred)
+dnl $1 = release version
+dnl $2 = ABI version
+define([CF_WITH_SHARED_OR_LIBTOOL],[
+
+REL_VERSION=$2
+ABI_VERSION=$3
+cf_cv_rel_version=$REL_VERSION
+AC_SUBST(ABI_VERSION)
+AC_SUBST(REL_VERSION)
+
+CF_WITH_REL_VERSION($1)
+CF_WITH_ABI_VERSION
+
+LIB_MODEL=static
+DFT_LWR_MODEL=$LIB_MODEL
+LIBTOOL_MAKE="#"
+
+# use to comment-out makefile lines
+MAKE_NORMAL=
+MAKE_STATIC=
+MAKE_SHARED="#"
+
+CF_WITH_LIBTOOL
+
+LIB_CREATE="$LIB_CREATE \[$]@"
+
+if test "$with_libtool" = "yes" ; then
+ OBJEXT="lo"
+ LIB_MODEL=libtool
+ DFT_LWR_MODEL=$LIB_MODEL
+ LIBTOOL_MAKE=
+ CF_WITH_LIBTOOL_OPTS
+ MAKE_NORMAL="#"
+ MAKE_STATIC="#"
+ MAKE_SHARED=
+else
+ AC_MSG_CHECKING(if you want to build shared libraries)
+ AC_ARG_WITH(shared,
+ [ --with-shared generate shared-libraries],
+ [with_shared=$withval],
+ [with_shared=no])
+ AC_MSG_RESULT($with_shared)
+ if test "$with_shared" = "yes" ; then
+ LIB_MODEL=shared
+ DFT_LWR_MODEL=$LIB_MODEL
+ CF_SHARED_OPTS
+ LIB_PREP=:
+ LIB_CREATE="[$]MK_SHARED_LIB"
+ CFLAGS="$CFLAGS $CC_SHARED_OPTS"
+ MAKE_NORMAL="#"
+ MAKE_STATIC="#"
+ MAKE_SHARED=
+ fi
+fi
+
+LIB_SUFFIX=
+CF_LIB_SUFFIX($LIB_MODEL, DFT_LIB_SUFFIX, DFT_DEP_SUFFIX)
+LIB_SUFFIX=$DFT_LIB_SUFFIX
+
+AC_SUBST(DFT_LWR_MODEL)
+AC_SUBST(DFT_LIB_SUFFIX)
+AC_SUBST(DFT_DEP_SUFFIX)
+AC_SUBST(LIB_MODEL)
+
+AC_SUBST(LIBTOOL_MAKE)
+
+AC_SUBST(MAKE_NORMAL)
+AC_SUBST(MAKE_SHARED)
+AC_SUBST(MAKE_STATIC)
+])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: 11 updated: 2011/01/18 18:15:30
+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: 45 updated: 2013/09/07 14:06:25
+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],[
+AC_REQUIRE([AC_CANONICAL_HOST])
+
+cf_XOPEN_SOURCE=ifelse([$1],,500,[$1])
+cf_POSIX_C_SOURCE=ifelse([$2],,199506L,[$2])
+cf_xopen_source=
+
+case $host_os in #(vi
+aix[[4-7]]*) #(vi
+ cf_xopen_source="-D_ALL_SOURCE"
+ ;;
+cygwin|msys) #(vi
+ cf_XOPEN_SOURCE=600
+ ;;
+darwin[[0-8]].*) #(vi
+ cf_xopen_source="-D_APPLE_C_SOURCE"
+ ;;
+darwin*) #(vi
+ cf_xopen_source="-D_DARWIN_C_SOURCE"
+ cf_XOPEN_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"
+ cf_XOPEN_SOURCE=
+ ;;
+linux*|gnu*|mint*|k*bsd*-gnu) #(vi
+ CF_GNU_SOURCE
+ ;;
+mirbsd*) #(vi
+ # setting _XOPEN_SOURCE or _POSIX_SOURCE breaks <sys/select.h> and other headers which use u_int / u_short types
+ cf_XOPEN_SOURCE=
+ CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE)
+ ;;
+netbsd*) #(vi
+ cf_xopen_source="-D_NETBSD_SOURCE" # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw
+ ;;
+openbsd[[4-9]]*) #(vi
+ # setting _XOPEN_SOURCE lower than 500 breaks g++ compile with wchar.h, needed for ncursesw
+ cf_xopen_source="-D_BSD_SOURCE"
+ cf_XOPEN_SOURCE=600
+ ;;
+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.*) #(vi
+ cf_xopen_source="-D__EXTENSIONS__"
+ ;;
+*)
+ CF_TRY_XOPEN_SOURCE
+ CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE)
+ ;;
+esac
+
+if test -n "$cf_xopen_source" ; then
+ CF_ADD_CFLAGS($cf_xopen_source)
+fi
+
+dnl In anything but the default case, we may have system-specific setting
+dnl which is still not guaranteed to provide all of the entrypoints that
+dnl _XOPEN_SOURCE would yield.
+if test -n "$cf_XOPEN_SOURCE" && test -z "$cf_cv_xopen_source" ; then
+ AC_MSG_CHECKING(if _XOPEN_SOURCE really is set)
+ AC_TRY_COMPILE([#include <stdlib.h>],[
+#ifndef _XOPEN_SOURCE
+make an error
+#endif],
+ [cf_XOPEN_SOURCE_set=yes],
+ [cf_XOPEN_SOURCE_set=no])
+ AC_MSG_RESULT($cf_XOPEN_SOURCE_set)
+ if test $cf_XOPEN_SOURCE_set = yes
+ then
+ AC_TRY_COMPILE([#include <stdlib.h>],[
+#if (_XOPEN_SOURCE - 0) < $cf_XOPEN_SOURCE
+make an error
+#endif],
+ [cf_XOPEN_SOURCE_set_ok=yes],
+ [cf_XOPEN_SOURCE_set_ok=no])
+ if test $cf_XOPEN_SOURCE_set_ok = no
+ then
+ AC_MSG_WARN(_XOPEN_SOURCE is lower than requested)
+ fi
+ else
+ CF_TRY_XOPEN_SOURCE
+ fi
+fi
+])
+dnl ---------------------------------------------------------------------------
+dnl CF__ADD_SHLIB_RULES version: 4 updated: 2013/07/22 18:49:24
+dnl -------------------
+dnl Append rules for creating, installing, uninstalling and cleaning library.
+dnl In particular, this is needed for shared libraries since there are symbolic
+dnl links which depend on configuration choices.
+dnl
+dnl The logic is controlled by these cache variables:
+dnl $cf_cv_do_symlinks
+dnl $cf_cv_shlib_version
+dnl
+dnl The macro uses variables set by CF__DEFINE_SHLIB_VARS
+dnl
+dnl $1 = makefile to append to
+dnl $2 = model (static, shared, libtool)
+dnl $3 = objects (dependencies)
+dnl $4 = additional libraries needed to link the shared library
+define([CF__ADD_SHLIB_RULES],[
+
+CF__DEFINE_LIB_TARGET
+
+case x$2 in
+xlibtool|xshared) #(vi
+ cf_libdeps="ifelse($4,,,[$4])"
+ ;;
+x*)
+ cf_libdeps=
+ ;;
+esac
+
+cat >>$1 <<CF_EOF
+
+# generated by CF__ADD_SHLIB_RULES
+# libmodel: $2
+# symlinks: $cf_cv_do_symlinks
+# shlibver: $cf_cv_shlib_version
+
+CF_EOF
+
+cat >>$1 <<CF_EOF
+$cf_libname :: \\
+CF_EOF
+
+cat >>$1 <<CF_EOF
+ $3
+ @echo linking \[$]@
+ \$(LIBTOOL_CREATE) $3 $cf_libdeps
+CF_EOF
+
+if test "x$cf_cv_do_symlinks" = xyes
+then
+cat >>$1 <<CF_EOF
+ \$(LN_S) $cf_libname $cf_liblink
+ \$(LN_S) $cf_liblink $cf_libroot
+CF_EOF
+fi
+
+cat >>$1 <<CF_EOF
+
+install \\
+install.libs :: \$(DESTDIR)\$(libdir)/$cf_libname
+
+\$(DESTDIR)\$(libdir)/$cf_libname :: \\
+ \$(DESTDIR)\$(libdir) \\
+ $3
+ @echo linking \[$]@
+ \$(LIBTOOL_CREATE) $3 $cf_libdeps
+CF_EOF
+
+if test "x$cf_cv_do_symlinks" = xyes
+then
+cat >>$1 <<CF_EOF
+ cd \$(DESTDIR)\$(libdir) && (\$(LN_S) $cf_libname $cf_liblink; \$(LN_S) $cf_liblink $cf_libroot; )
+CF_EOF
+fi
+
+if test x$2 = xshared
+then
+cat >>$1 <<CF_EOF
+ - test -z "\$(DESTDIR)" && /sbin/ldconfig
+CF_EOF
+fi
+
+cat >>$1 <<CF_EOF
+
+uninstall \\
+uninstall.libs ::
+ @echo uninstalling \$(DESTDIR)\$(libdir)/$cf_libname
+CF_EOF
+
+if test "x$cf_cv_do_symlinks" = xyes
+then
+cat >>$1 <<CF_EOF
+ -rm -f \$(DESTDIR)\$(libdir)/$cf_libroot
+ -rm -f \$(DESTDIR)\$(libdir)/$cf_liblink
+CF_EOF
+fi
+
+cat >>$1 <<CF_EOF
+ -rm -f \$(DESTDIR)\$(libdir)/$cf_libname
+
+clean \\
+clean.libs ::
+CF_EOF
+
+if test "x$cf_cv_do_symlinks" = xyes
+then
+cat >>$1 <<CF_EOF
+ -rm -f $cf_libroot
+ -rm -f $cf_liblink
+CF_EOF
+fi
+
+cat >>$1 <<CF_EOF
+ -rm -f $cf_libname
+
+mostlyclean::
+ -rm -f $3
+# end generated by CF__ADD_SHLIB_RULES
+CF_EOF
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF__CURSES_HEAD version: 2 updated: 2010/10/23 15:54:49
+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__CURSES_HEAD version: 2 updated: 2010/10/23 15:54:49
+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__DEFINE_LIB_TARGET version: 1 updated: 2013/07/22 18:27:50
+dnl ---------------------
+define([CF__DEFINE_LIB_TARGET],[
+cf_libname=\${LIB_BASENAME}
+cf_liblink=$cf_libname
+cf_libroot=$cf_libname
+
+if test "x$cf_cv_do_symlinks" = xyes
+then
+ case "x$cf_cv_shlib_version" in #(vi
+ xrel) #(vi
+ cf_liblink="\${LIB_ABI_NAME}"
+ cf_libname="\${LIB_REL_NAME}"
+ ;;
+ xabi)
+ cf_liblink="\${LIB_REL_NAME}"
+ cf_libname="\${LIB_ABI_NAME}"
+ ;;
+ esac
+fi
+LIB_TARGET=$cf_libname
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF__DEFINE_SHLIB_VARS version: 2 updated: 2013/07/27 17:38:32
+dnl ---------------------
+dnl Substitute makefile variables useful for CF__ADD_SHLIB_RULES.
+dnl
+dnl The substitution requires these variables:
+dnl LIB_PREFI - "lib"
+dnl LIB_ROOTNAME - "foo"
+dnl LIB_SUFFIX - ".so"
+dnl REL_VERSION - "5.0"
+dnl ABI_VERSION - "4.2.4"
+define([CF__DEFINE_SHLIB_VARS],[
+CF__DEFINE_LIB_TARGET
+SET_SHLIB_VARS="# begin CF__DEFINE_SHLIB_VARS\\
+LIB_BASENAME = ${LIB_PREFIX}\${LIB_ROOTNAME}\${LIB_SUFFIX}\\
+LIB_REL_NAME = \${LIB_BASENAME}.\${REL_VERSION}\\
+LIB_ABI_NAME = \${LIB_BASENAME}.\${ABI_VERSION}\\
+LIB_TARGET = $LIB_TARGET\\
+RM_SHARED_OPTS = $RM_SHARED_OPTS\\
+# end CF__DEFINE_SHLIB_VARS"
+AC_SUBST(SET_SHLIB_VARS)
+AC_SUBST(LIB_TARGET)
+])dnl
+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__INIT_SHLIB_RULES version: 2 updated: 2013/07/27 17:38:32
+dnl --------------------
+dnl The third parameter to AC_OUTPUT, used to pass variables needed for
+dnl CF__ADD_SHLIB_RULES.
+define([CF__INIT_SHLIB_RULES],[
+ABI_VERSION="$ABI_VERSION"
+REL_VERSION="$REL_VERSION"
+LIB_MODEL="$LIB_MODEL"
+LIB_PREFIX="$LIB_PREFIX"
+LIB_ROOTNAME="$LIB_ROOTNAME"
+DFT_DEP_SUFFIX="$DFT_DEP_SUFFIX"
+RM_SHARED_OPTS="$RM_SHARED_OPTS"
+cf_cv_do_symlinks="$cf_cv_do_symlinks"
+cf_cv_shlib_version="$cf_cv_shlib_version"
+])
+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"
+ ]
+)
diff --git a/contrib/dialog/argv.c b/contrib/dialog/argv.c
new file mode 100644
index 0000000..7416054
--- /dev/null
+++ b/contrib/dialog/argv.c
@@ -0,0 +1,122 @@
+/*
+ * $Id: argv.c,v 1.2 2012/11/30 20:28:23 tom Exp $
+ *
+ * argv - Reusable functions for argv-parsing.
+ *
+ * Copyright 2011,2012 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 <string.h>
+
+/*
+ * 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).
+ */
+char **
+dlg_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 (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.
+ */
+int
+dlg_count_argv(char **argv)
+{
+ int result = 0;
+
+ if (argv != 0) {
+ while (argv[result] != 0)
+ ++result;
+ }
+ return result;
+}
+
+int
+dlg_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;
+}
diff --git a/contrib/dialog/arrows.c b/contrib/dialog/arrows.c
new file mode 100644
index 0000000..44a90df
--- /dev/null
+++ b/contrib/dialog/arrows.c
@@ -0,0 +1,275 @@
+/*
+ * $Id: arrows.c,v 1.51 2013/09/02 15:10:09 tom Exp $
+ *
+ * arrows.c -- draw arrows to indicate end-of-range for lists
+ *
+ * Copyright 2000-2012,2013 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
+#if defined(CURSES_WACS_ARRAY) && !defined(CURSES_WACS_SYMBOLS)
+/* workaround for NetBSD 5.1 curses */
+#undef WACS_DARROW
+#undef WACS_UARROW
+#define WACS_DARROW &(CURSES_WACS_ARRAY['.'])
+#define WACS_UARROW &(CURSES_WACS_ARRAY['-'])
+#endif
+#define add_acs(win, code) wadd_wch(win, W ## code)
+#else
+#define add_acs(win, code) waddch(win, dlg_boxchar(code))
+#endif
+
+/* size of decorations */
+#define ON_LEFT 4
+#define ON_RIGHT 3
+
+#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
+
+/*
+ * If we have help-line text, e.g., from "--hline", draw it between the other
+ * decorations at the bottom of the dialog window.
+ */
+void
+dlg_draw_helpline(WINDOW *win, bool decorations)
+{
+ int cur_x, cur_y;
+ int bottom;
+
+ if (dialog_vars.help_line != 0
+ && dialog_vars.help_line[0] != 0
+ && (bottom = getmaxy(win) - 1) > 0) {
+ chtype attr = A_NORMAL;
+ int cols = dlg_count_columns(dialog_vars.help_line);
+ int other = decorations ? (ON_LEFT + ON_RIGHT) : 0;
+ int avail = (getmaxx(win) - other - 2);
+ int limit = dlg_count_real_columns(dialog_vars.help_line) + 2;
+
+ if (limit < avail) {
+ getyx(win, cur_y, cur_x);
+ other = decorations ? ON_LEFT : 0;
+ (void) wmove(win, bottom, other + (avail - limit) / 2);
+ waddch(win, '[');
+ dlg_print_text(win, dialog_vars.help_line, cols, &attr);
+ waddch(win, ']');
+ wmove(win, cur_y, cur_x);
+ }
+ }
+}
+
+void
+dlg_draw_arrows2(WINDOW *win,
+ int top_arrow,
+ int bottom_arrow,
+ int x,
+ int top,
+ int bottom,
+ chtype attr,
+ chtype borderattr)
+{
+ chtype save = dlg_get_attrs(win);
+ int cur_x, cur_y;
+ int limit_x = getmaxx(win);
+ bool draw_top = TRUE;
+ bool is_toplevel = (wgetparent(win) == stdscr);
+
+ getyx(win, cur_y, cur_x);
+
+ /*
+ * If we're drawing a centered title, do not overwrite with the arrows.
+ */
+ if (dialog_vars.title && is_toplevel && (top - getbegy(win)) < MARGIN) {
+ 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) {
+ (void) wattrset(win, merge_colors(uarrow_attr, attr));
+ (void) add_acs(win, ACS_UARROW);
+ (void) waddstr(win, "(-)");
+ } else {
+ (void) wattrset(win, attr);
+ (void) whline(win, dlg_boxchar(ACS_HLINE), ON_LEFT);
+ }
+ }
+ mouse_mkbutton(top, x - 1, 6, KEY_PPAGE);
+
+ (void) wmove(win, bottom, x);
+ if (bottom_arrow) {
+ (void) wattrset(win, merge_colors(darrow_attr, borderattr));
+ (void) add_acs(win, ACS_DARROW);
+ (void) waddstr(win, "(+)");
+ } else {
+ (void) wattrset(win, borderattr);
+ (void) whline(win, dlg_boxchar(ACS_HLINE), ON_LEFT);
+ }
+ mouse_mkbutton(bottom, x - 1, 6, KEY_NPAGE);
+
+ (void) wmove(win, cur_y, cur_x);
+ wrefresh(win);
+
+ (void) 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;
+
+ chtype save = dlg_get_attrs(win);
+ int top_arrow = (first_data != 0);
+ int bottom_arrow = (next_data < total_data);
+
+ getyx(win, oldy, oldx);
+
+ dlg_draw_helpline(win, TRUE);
+ 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;
+
+ (void) 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) {
+ (void) wattrset(win, border_attr);
+ whline(win, dlg_boxchar(ACS_HLINE), 4 - len);
+ }
+ }
+#define BARSIZE(num) (int) (0.5 + (double) ((all_high * (int) (num)) / (double) total_data))
+#define ORDSIZE(num) (int) ((double) ((all_high * (int) (num)) / (double) all_diff))
+
+ if (dialog_state.use_scrollbar) {
+ int all_high = (bottom - top - 1);
+
+ this_data = MAX(0, this_data);
+
+ if (total_data > 0 && all_high > 0) {
+ int all_diff = (int) (total_data + 1);
+ int bar_diff = (int) (next_data + 1 - this_data);
+ int bar_high;
+ int bar_y;
+
+ bar_high = ORDSIZE(bar_diff);
+ if (bar_high <= 0)
+ bar_high = 1;
+
+ if (bar_high < all_high) {
+ int bar_last = BARSIZE(next_data);
+
+ wmove(win, top + 1, right);
+
+ (void) wattrset(win, save);
+ wvline(win, ACS_VLINE | A_REVERSE, all_high);
+
+ bar_y = ORDSIZE(this_data);
+ if (bar_y >= bar_last && bar_y > 0)
+ bar_y = bar_last - 1;
+ if (bar_last - bar_y > bar_high && bar_high > 1)
+ ++bar_y;
+ bar_last = MIN(bar_last, all_high);
+
+ wmove(win, top + 1 + bar_y, right);
+
+ (void) wattrset(win, position_indicator_attr);
+ wattron(win, A_REVERSE);
+#if defined(WACS_BLOCK) && defined(NCURSES_VERSION) && defined(USE_WIDE_CURSES)
+ wvline_set(win, WACS_BLOCK, bar_last - bar_y);
+#else
+ wvline(win, ACS_BLOCK, bar_last - bar_y);
+#endif
+ }
+ }
+ }
+ dlg_draw_arrows2(win,
+ top_arrow,
+ bottom_arrow,
+ left + ARROWS_COL,
+ top,
+ bottom,
+ attr,
+ borderattr);
+
+ (void) 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_helpline(win, TRUE);
+ dlg_draw_arrows2(win,
+ top_arrow,
+ bottom_arrow,
+ x,
+ top,
+ bottom,
+ menubox_border2_attr,
+ menubox_border_attr);
+}
diff --git a/contrib/dialog/buildlist.c b/contrib/dialog/buildlist.c
new file mode 100644
index 0000000..2c3e199
--- /dev/null
+++ b/contrib/dialog/buildlist.c
@@ -0,0 +1,1097 @@
+/*
+ * $Id: buildlist.c,v 1.59 2013/09/02 17:01:02 tom Exp $
+ *
+ * buildlist.c -- implements the buildlist dialog
+ *
+ * Copyright 2012,2013 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>
+
+/*
+ * Visually like menubox, but two columns.
+ */
+
+#define sLEFT (-2)
+#define sRIGHT (-1)
+
+#define KEY_TOGGLE ' '
+#define KEY_LEFTCOL '^'
+#define KEY_RIGHTCOL '$'
+
+#define MIN_HIGH (1 + (5 * MARGIN))
+
+typedef struct {
+ WINDOW *win;
+ int box_y;
+ int box_x;
+ int top_index;
+ int cur_index;
+} MY_DATA;
+
+typedef struct {
+ DIALOG_LISTITEM *items;
+ int base_y; /* base for mouse coordinates */
+ int base_x;
+ int use_height; /* actual size of column box */
+ int use_width;
+ int item_no;
+ int check_x;
+ int item_x;
+ MY_DATA list[2];
+} ALL_DATA;
+
+/*
+ * 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(ALL_DATA * data,
+ WINDOW *win,
+ DIALOG_LISTITEM * item,
+ int choice,
+ int selected)
+{
+ chtype save = dlg_get_attrs(win);
+ int i;
+ bool both = (!dialog_vars.no_tags && !dialog_vars.no_items);
+ bool first = TRUE;
+ int climit = (data->item_x - data->check_x - 1);
+ const char *show = (dialog_vars.no_items
+ ? item->name
+ : item->text);
+
+ /* Clear 'residue' of last item */
+ (void) wattrset(win, menubox_attr);
+ (void) wmove(win, choice, 0);
+ for (i = 0; i < getmaxx(win); i++)
+ (void) waddch(win, ' ');
+
+ (void) wmove(win, choice, data->check_x);
+ (void) wattrset(win, menubox_attr);
+
+ if (both) {
+ dlg_print_listitem(win, item->name, climit, first, selected);
+ (void) waddch(win, ' ');
+ first = FALSE;
+ }
+
+ (void) wmove(win, choice, data->item_x);
+ climit = (getmaxx(win) - data->item_x + 1);
+ dlg_print_listitem(win, show, climit, first, selected);
+
+ if (selected) {
+ dlg_item_help(item->help);
+ }
+ (void) wattrset(win, save);
+}
+
+/*
+ * Prints either the left (unselected) or right (selected) list.
+ */
+static void
+print_1_list(ALL_DATA * data,
+ int choice,
+ int selected)
+{
+ MY_DATA *moi = data->list + selected;
+ WINDOW *win = moi->win;
+ int i, j;
+ int last = 0;
+ int max_rows = getmaxy(win);
+
+ for (i = j = 0; j < max_rows; i++) {
+ int ii = i + moi->top_index;
+ if (ii >= data->item_no) {
+ break;
+ } else if (!(selected ^ (data->items[ii].state != 0))) {
+ print_item(data,
+ win,
+ &data->items[ii],
+ j, ii == choice);
+ last = ++j;
+ }
+ }
+ if (wmove(win, last, 0) != ERR)
+ wclrtobot(win);
+ (void) wnoutrefresh(win);
+}
+
+/*
+ * Return the previous item from the list, staying in the same column. If no
+ * further movement is possible, return the same choice as given.
+ */
+static int
+prev_item(ALL_DATA * data, int choice, int selected)
+{
+ int result = choice;
+ int n;
+
+ for (n = choice - 1; n >= 0; --n) {
+ if ((data->items[n].state != 0) == selected) {
+ result = n;
+ break;
+ }
+ }
+ return result;
+}
+
+/*
+ * Return true if the given choice is on the first page in the current column.
+ */
+static bool
+stop_prev(ALL_DATA * data, int choice, int selected)
+{
+ return (prev_item(data, choice, selected) == choice);
+}
+
+static bool
+check_hotkey(DIALOG_LISTITEM * items, int choice, int selected)
+{
+ bool result = FALSE;
+
+ if ((items[choice].state != 0) == selected) {
+ if (dlg_match_char(dlg_last_getc(),
+ (dialog_vars.no_tags
+ ? items[choice].text
+ : items[choice].name))) {
+ result = TRUE;
+ }
+ }
+ return result;
+}
+
+/*
+ * Return the next item from the list, staying in the same column. If no
+ * further movement is possible, return the same choice as given.
+ */
+static int
+next_item(ALL_DATA * data, int choice, int selected)
+{
+ int result = choice;
+ int n;
+
+ for (n = choice + 1; n < data->item_no; ++n) {
+ if ((data->items[n].state != 0) == selected) {
+ result = n;
+ break;
+ }
+ }
+ dlg_trace_msg("next_item(%d) ->%d\n", choice, result);
+ return result;
+}
+
+/*
+ * Translate a choice from items[] to a row-number in an unbounded column,
+ * starting at zero.
+ */
+static int
+index2row(ALL_DATA * data, int choice, int selected)
+{
+ int result = -1;
+ int n;
+ for (n = 0; n < data->item_no; ++n) {
+ if ((data->items[n].state != 0) == selected) {
+ ++result;
+ }
+ if (n == choice)
+ break;
+ }
+ return result;
+}
+
+/*
+ * Return the first choice from items[] for the given column.
+ */
+static int
+first_item(ALL_DATA * data, int selected)
+{
+ int result = -1;
+ int n;
+
+ for (n = 0; n < data->item_no; ++n) {
+ if ((data->items[n].state != 0) == selected) {
+ result = n;
+ break;
+ }
+ }
+ return result;
+}
+
+/*
+ * Return the last choice from items[] for the given column.
+ */
+static int
+last_item(ALL_DATA * data, int selected)
+{
+ int result = -1;
+ int n;
+
+ for (n = data->item_no - 1; n >= 0; --n) {
+ if ((data->items[n].state != 0) == selected) {
+ result = n;
+ break;
+ }
+ }
+ return result;
+}
+
+/*
+ * Convert a row-number back to an item number, i.e., index into items[].
+ */
+static int
+row2index(ALL_DATA * data, int row, int selected)
+{
+ int result = -1;
+ int n;
+ for (n = 0; n < data->item_no; ++n) {
+ if ((data->items[n].state != 0) == selected) {
+ if (row-- <= 0) {
+ result = n;
+ break;
+ }
+ }
+ }
+ return result;
+}
+
+static int
+skip_rows(ALL_DATA * data, int row, int skip, int selected)
+{
+ int choice = row2index(data, row, selected);
+ int result = row;
+ int n;
+ if (skip > 0) {
+ for (n = choice + 1; n < data->item_no; ++n) {
+ if ((data->items[n].state != 0) == selected) {
+ ++result;
+ if (--skip <= 0)
+ break;
+ }
+ }
+ } else if (skip < 0) {
+ for (n = choice - 1; n >= 0; --n) {
+ if ((data->items[n].state != 0) == selected) {
+ --result;
+ if (++skip >= 0)
+ break;
+ }
+ }
+ }
+ return result;
+}
+
+/*
+ * Find the closest item in the given column starting with the given choice.
+ */
+static int
+closest_item(ALL_DATA * data, int choice, int selected)
+{
+ int prev = choice;
+ int next = choice;
+ int result = choice;
+ int n;
+
+ for (n = choice; n >= 0; --n) {
+ if ((data->items[n].state != 0) == selected) {
+ prev = n;
+ break;
+ }
+ }
+ for (n = choice; n < data->item_no; ++n) {
+ if ((data->items[n].state != 0) == selected) {
+ next = n;
+ break;
+ }
+ }
+ if (prev != choice) {
+ result = prev;
+ if (next != choice) {
+ if ((choice - prev) > (next - choice)) {
+ result = next;
+ }
+ }
+ } else if (next != choice) {
+ result = next;
+ }
+ return result;
+}
+
+static void
+print_both(ALL_DATA * data,
+ int choice)
+{
+ int selected;
+ int cur_y, cur_x;
+ WINDOW *dialog = wgetparent(data->list[0].win);
+
+ getyx(dialog, cur_y, cur_x);
+ for (selected = 0; selected < 2; ++selected) {
+ MY_DATA *moi = data->list + selected;
+ WINDOW *win = moi->win;
+ int thumb_top = index2row(data, moi->top_index, selected);
+ int thumb_max = index2row(data, -1, selected);
+ int thumb_end = thumb_top + getmaxy(win);
+
+ print_1_list(data, choice, selected);
+
+ dlg_mouse_setcode(selected * KEY_MAX);
+ dlg_draw_scrollbar(dialog,
+ (long) (moi->top_index),
+ (long) (thumb_top),
+ (long) MIN(thumb_end, thumb_max),
+ (long) thumb_max,
+ moi->box_x + data->check_x,
+ moi->box_x + getmaxx(win),
+ moi->box_y,
+ moi->box_y + getmaxy(win) + 1,
+ menubox_border2_attr,
+ menubox_border_attr);
+ }
+ (void) wmove(dialog, cur_y, cur_x);
+ dlg_mouse_setcode(0);
+}
+
+static void
+set_top_item(ALL_DATA * data, int value, int selected)
+{
+ if (value != data->list[selected].top_index) {
+ dlg_trace_msg("set top of %s column to %d\n",
+ selected ? "right" : "left",
+ value);
+ data->list[selected].top_index = value;
+ }
+}
+
+/*
+ * Adjust the top-index as needed to ensure that it and the given item are
+ * visible.
+ */
+static void
+fix_top_item(ALL_DATA * data, int cur_item, int selected)
+{
+ int top_item = data->list[selected].top_index;
+ int cur_row = index2row(data, cur_item, selected);
+ int top_row = index2row(data, top_item, selected);
+
+ if (cur_row < top_row) {
+ top_item = cur_item;
+ } else if ((cur_row - top_row) > data->use_height) {
+ top_item = row2index(data, cur_row + 1 - data->use_height, selected);
+ }
+ if (cur_row < data->use_height) {
+ top_item = row2index(data, 0, selected);
+ }
+ dlg_trace_msg("fix_top_item(cur_item %d, selected %d) ->top_item %d\n",
+ cur_item, selected, top_item);
+ set_top_item(data, top_item, selected);
+}
+
+/*
+ * This is an alternate interface to 'buildlist' which allows the application
+ * to read the list item states back directly without putting them in the
+ * output buffer.
+ */
+int
+dlg_buildlist(const char *title,
+ const char *cprompt,
+ int height,
+ int width,
+ int list_height,
+ int item_no,
+ DIALOG_LISTITEM * items,
+ const char *states,
+ int order_mode,
+ int *current_item)
+{
+ /* *INDENT-OFF* */
+ static DLG_KEYS_BINDING binding[] = {
+ HELPKEY_BINDINGS,
+ 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_NEXT, DLGK_MOUSE(KEY_NPAGE+KEY_MAX) ),
+ DLG_KEYS_DATA( DLGK_PAGE_PREV, KEY_PPAGE ),
+ DLG_KEYS_DATA( DLGK_PAGE_PREV, DLGK_MOUSE(KEY_PPAGE) ),
+ DLG_KEYS_DATA( DLGK_PAGE_PREV, DLGK_MOUSE(KEY_PPAGE+KEY_MAX) ),
+ DLG_KEYS_DATA( DLGK_GRID_LEFT, KEY_LEFTCOL ),
+ DLG_KEYS_DATA( DLGK_GRID_RIGHT, KEY_RIGHTCOL ),
+ END_KEYS_BINDING
+ };
+ /* *INDENT-ON* */
+
+#ifdef KEY_RESIZE
+ int old_height = height;
+ int old_width = width;
+#endif
+ ALL_DATA all;
+ MY_DATA *data = all.list;
+ int i, j, k, key2, found, x, y, cur_x, cur_y;
+ int key = 0, fkey;
+ bool save_visit = dialog_state.visit_items;
+ int button;
+ int cur_item;
+ int was_mouse;
+ int name_width, text_width, full_width, list_width;
+ int result = DLG_EXIT_UNKNOWN;
+ int num_states;
+ bool first = TRUE;
+ WINDOW *dialog;
+ char *prompt = dlg_strclone(cprompt);
+ const char **buttons = dlg_ok_labels();
+ const char *widget_name = "buildlist";
+
+ (void) order_mode;
+
+ /*
+ * Unlike other uses of --visit-items, we have two windows to visit.
+ */
+ if (dialog_state.visit_cols)
+ dialog_state.visit_cols = 2;
+
+ memset(&all, 0, sizeof(all));
+ all.items = items;
+ all.item_no = item_no;
+
+ if (dialog_vars.default_item != 0) {
+ cur_item = dlg_default_listitem(items);
+ } else {
+ if ((cur_item = first_item(&all, 0)) < 0)
+ cur_item = first_item(&all, 1);
+ }
+ button = (dialog_state.visit_items
+ ? (items[cur_item].state ? sRIGHT : sLEFT)
+ : dlg_default_button());
+
+ dlg_does_output();
+ dlg_tab_correct_str(prompt);
+
+#ifdef KEY_RESIZE
+ retry:
+#endif
+
+ all.use_height = list_height;
+ all.use_width = (2 * (dlg_calc_list_width(item_no, items)
+ + 4
+ + 2 * MARGIN)
+ + 1);
+ all.use_width = MAX(26, all.use_width);
+ if (all.use_height == 0) {
+ /* calculate height without items (4) */
+ dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, all.use_width);
+ dlg_calc_listh(&height, &all.use_height, item_no);
+ } else {
+ dlg_auto_size(title, prompt,
+ &height, &width,
+ MIN_HIGH + all.use_height, all.use_width);
+ }
+ 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);
+
+ x = dlg_box_x_ordinate(width);
+ y = dlg_box_y_ordinate(height);
+
+ dialog = dlg_new_window(height, width, y, x);
+ dlg_register_window(dialog, widget_name, binding);
+ dlg_register_buttons(dialog, widget_name, buttons);
+
+ dlg_mouse_setbase(all.base_x = x, all.base_y = y);
+
+ dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr);
+ dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr);
+ dlg_draw_title(dialog, title);
+
+ (void) wattrset(dialog, dialog_attr);
+ dlg_print_autowrap(dialog, prompt, height, width);
+
+ list_width = (width - 6 * MARGIN - 2) / 2;
+ getyx(dialog, cur_y, cur_x);
+ data[0].box_y = cur_y + 1;
+ data[0].box_x = MARGIN + 1;
+ data[1].box_y = cur_y + 1;
+ data[1].box_x = data[0].box_x + 1 + 2 * MARGIN + list_width;
+
+ /*
+ * After displaying the prompt, we know how much space we really have.
+ * Limit the list to avoid overwriting the ok-button.
+ */
+ if (all.use_height + MIN_HIGH > height - cur_y)
+ all.use_height = height - MIN_HIGH - cur_y;
+ if (all.use_height <= 0)
+ all.use_height = 1;
+
+ for (k = 0; k < 2; ++k) {
+ /* create new window for the list */
+ data[k].win = dlg_sub_window(dialog, all.use_height, list_width,
+ y + data[k].box_y + 1,
+ x + data[k].box_x + 1);
+
+ /* draw a box around the list items */
+ dlg_draw_box(dialog, data[k].box_y, data[k].box_x,
+ all.use_height + 2 * MARGIN,
+ list_width + 2 * MARGIN,
+ menubox_border_attr, menubox_border2_attr);
+ }
+
+ text_width = 0;
+ name_width = 0;
+ /* Find length of longest item to center buildlist */
+ 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.
+ */
+ all.use_width = (list_width - 6 * MARGIN);
+ if (dialog_vars.no_tags && !dialog_vars.no_items) {
+ full_width = MIN(all.use_width, text_width);
+ } else if (dialog_vars.no_items) {
+ full_width = MIN(all.use_width, name_width);
+ } else {
+ if (text_width >= 0
+ && name_width >= 0
+ && all.use_width > 0
+ && text_width + name_width > all.use_width) {
+ int need = (int) (0.25 * all.use_width);
+ if (name_width > need) {
+ int want = (int) (all.use_width * ((double) name_width) /
+ (text_width + name_width));
+ name_width = (want > need) ? want : need;
+ }
+ text_width = all.use_width - name_width;
+ }
+ full_width = text_width + name_width;
+ }
+
+ all.check_x = (all.use_width - full_width) / 2;
+ all.item_x = ((dialog_vars.no_tags
+ ? 0
+ : (dialog_vars.no_items
+ ? 0
+ : (name_width + 2)))
+ + all.check_x);
+
+ /* ensure we are scrolled to show the current choice */
+ j = MIN(all.use_height, item_no);
+ for (i = 0; i < 2; ++i) {
+ int top_item = 0;
+ if ((items[cur_item].state != 0) == i) {
+ top_item = cur_item - j + 1;
+ if (top_item < 0)
+ top_item = 0;
+ set_top_item(&all, top_item, i);
+ } else {
+ set_top_item(&all, 0, i);
+ }
+ }
+
+ /* register the new window, along with its borders */
+ for (i = 0; i < 2; ++i) {
+ dlg_mouse_mkbigregion(data[i].box_y + 1,
+ data[i].box_x,
+ all.use_height,
+ list_width + 2,
+ 2 * KEY_MAX + (i * (1 + all.use_height)),
+ 1, 1, 1 /* by lines */ );
+ }
+
+ dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width);
+
+ while (result == DLG_EXIT_UNKNOWN) {
+ int which = (items[cur_item].state != 0);
+ MY_DATA *moi = data + which;
+ int at_top = index2row(&all, moi->top_index, which);
+ int at_end = index2row(&all, -1, which);
+ int at_bot = skip_rows(&all, at_top, all.use_height, which);
+
+ dlg_trace_msg("\t** state %d:%d top %d (%d:%d:%d) %d\n",
+ cur_item, item_no - 1,
+ moi->top_index,
+ at_top, at_bot, at_end,
+ which);
+
+ if (first) {
+ print_both(&all, cur_item);
+ dlg_trace_win(dialog);
+ first = FALSE;
+ }
+
+ if (button < 0) { /* --visit-items */
+ int cur_row = index2row(&all, cur_item, which);
+ cur_y = (data[which].box_y
+ + cur_row
+ + 1);
+ if (at_top > 0)
+ cur_y -= at_top;
+ cur_x = (data[which].box_x
+ + all.check_x + 1);
+ dlg_trace_msg("\t...visit row %d (%d,%d)\n", cur_row, cur_y, cur_x);
+ wmove(dialog, cur_y, cur_x);
+ }
+
+ 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) {
+ ;
+ } else if (key >= 2 * KEY_MAX) {
+ i = (key - 2 * KEY_MAX) % (1 + all.use_height);
+ j = (key - 2 * KEY_MAX) / (1 + all.use_height);
+ k = row2index(&all, i + at_top, j);
+ dlg_trace_msg("MOUSE column %d, row %d ->item %d\n", j, i, k);
+ if (k >= 0 && j < 2) {
+ if (j != which) {
+ /*
+ * Mouse click was in the other column.
+ */
+ moi = data + j;
+ fix_top_item(&all, k, j);
+ }
+ which = j;
+ at_top = index2row(&all, moi->top_index, which);
+ at_bot = skip_rows(&all, at_top, all.use_height, which);
+ cur_item = k;
+ print_both(&all, cur_item);
+ key = KEY_TOGGLE; /* force the selected item to toggle */
+ } else {
+ beep();
+ continue;
+ }
+ fkey = FALSE;
+ } else if (key >= KEY_MIN) {
+ if (key > KEY_MAX) {
+ if (which == 0) {
+ key = KEY_RIGHTCOL; /* switch to right-column */
+ fkey = FALSE;
+ } else {
+ key -= KEY_MAX;
+ }
+ } else {
+ if (which == 1) {
+ key = KEY_LEFTCOL; /* switch to left-column */
+ fkey = FALSE;
+ }
+ }
+ key = dlg_lookup_key(dialog, key, &fkey);
+ }
+
+ /*
+ * A space toggles the item status. Normally we put the cursor on
+ * the next available item in the same column. But if there are no
+ * more items in the column, move the cursor to the other column.
+ */
+ if (key == KEY_TOGGLE) {
+ int new_choice;
+ int new_state = items[cur_item].state + 1;
+
+ if ((new_choice = next_item(&all, cur_item, which)) == cur_item) {
+ new_choice = prev_item(&all, cur_item, which);
+ }
+ dlg_trace_msg("cur_item %d, new_choice:%d\n", cur_item, new_choice);
+ if (new_state >= num_states)
+ new_state = 0;
+
+ items[cur_item].state = new_state;
+ if (cur_item == moi->top_index) {
+ set_top_item(&all, new_choice, which);
+ }
+
+ if (new_choice >= 0) {
+ fix_top_item(&all, cur_item, !which);
+ cur_item = new_choice;
+ }
+ print_both(&all, cur_item);
+ dlg_trace_win(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 = cur_item + 1; j < item_no; j++) {
+ if (check_hotkey(items, j, which)) {
+ found = TRUE;
+ i = j;
+ break;
+ }
+ }
+ if (!found) {
+ for (j = 0; j <= cur_item; j++) {
+ if (check_hotkey(items, j, which)) {
+ found = TRUE;
+ i = j;
+ 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' < at_bot)) {
+ found = TRUE;
+ i = key - '1';
+ }
+
+ if (!found && fkey) {
+ switch (key) {
+ case DLGK_FIELD_PREV:
+ if ((button == sRIGHT) && dialog_state.visit_items) {
+ key = DLGK_GRID_LEFT;
+ button = sLEFT;
+ } else {
+ button = dlg_prev_button(buttons, button);
+ dlg_draw_buttons(dialog, height - 2, 0, buttons, button,
+ FALSE, width);
+ if (button == sRIGHT) {
+ key = DLGK_GRID_RIGHT;
+ } else {
+ continue;
+ }
+ }
+ break;
+ case DLGK_FIELD_NEXT:
+ if ((button == sLEFT) && dialog_state.visit_items) {
+ key = DLGK_GRID_RIGHT;
+ button = sRIGHT;
+ } else {
+ button = dlg_next_button(buttons, button);
+ dlg_draw_buttons(dialog, height - 2, 0, buttons, button,
+ FALSE, width);
+ if (button == sLEFT) {
+ key = DLGK_GRID_LEFT;
+ } else {
+ continue;
+ }
+ }
+ break;
+ }
+ }
+
+ if (!found && fkey) {
+ i = cur_item;
+ found = TRUE;
+ switch (key) {
+ case DLGK_GRID_LEFT:
+ i = closest_item(&all, cur_item, 0);
+ fix_top_item(&all, i, 0);
+ break;
+ case DLGK_GRID_RIGHT:
+ i = closest_item(&all, cur_item, 1);
+ fix_top_item(&all, i, 1);
+ break;
+ case DLGK_PAGE_PREV:
+ if (cur_item > moi->top_index) {
+ i = moi->top_index;
+ } else if (moi->top_index != 0) {
+ int temp = at_top;
+ if ((temp -= all.use_height) < 0)
+ temp = 0;
+ i = row2index(&all, temp, which);
+ }
+ break;
+ case DLGK_PAGE_NEXT:
+ if ((at_end - at_bot) < all.use_height) {
+ i = next_item(&all,
+ row2index(&all, at_end, which),
+ which);
+ } else {
+ i = next_item(&all,
+ row2index(&all, at_bot, which),
+ which);
+ at_top = at_bot;
+ set_top_item(&all,
+ next_item(&all,
+ row2index(&all, at_top, which),
+ which),
+ which);
+ at_bot = skip_rows(&all, at_top, all.use_height, which);
+ at_bot = MIN(at_bot, at_end);
+ }
+ break;
+ case DLGK_ITEM_FIRST:
+ i = first_item(&all, which);
+ break;
+ case DLGK_ITEM_LAST:
+ i = last_item(&all, which);
+ break;
+ case DLGK_ITEM_PREV:
+ i = prev_item(&all, cur_item, which);
+ if (stop_prev(&all, cur_item, which))
+ continue;
+ break;
+ case DLGK_ITEM_NEXT:
+ i = next_item(&all, cur_item, which);
+ break;
+ default:
+ found = FALSE;
+ break;
+ }
+ }
+
+ if (found) {
+ if (i != cur_item) {
+ int now_at = index2row(&all, i, which);
+ int oops = item_no;
+ int old_item;
+
+ dlg_trace_msg("<--CHOICE %d\n", i);
+ dlg_trace_msg("<--topITM %d\n", moi->top_index);
+ dlg_trace_msg("<--now_at %d\n", now_at);
+ dlg_trace_msg("<--at_top %d\n", at_top);
+ dlg_trace_msg("<--at_bot %d\n", at_bot);
+
+ if (now_at >= at_bot) {
+ while (now_at >= at_bot) {
+ if ((at_bot - at_top) >= all.use_height) {
+ set_top_item(&all,
+ next_item(&all, moi->top_index, which),
+ which);
+ }
+ at_top = index2row(&all, moi->top_index, which);
+ at_bot = skip_rows(&all, at_top, all.use_height, which);
+
+ dlg_trace_msg("...at_bot %d (now %d vs %d)\n",
+ at_bot, now_at, at_end);
+ dlg_trace_msg("...topITM %d\n", moi->top_index);
+ dlg_trace_msg("...at_top %d (diff %d)\n", at_top,
+ at_bot - at_top);
+
+ if (at_bot >= at_end) {
+ /*
+ * If we bumped into the end, move the top-item
+ * down by one line so that we can display the
+ * last item in the list.
+ */
+ if ((at_bot - at_top) > all.use_height) {
+ set_top_item(&all,
+ next_item(&all, moi->top_index, which),
+ which);
+ } else if (at_top > 0 &&
+ (at_bot - at_top) >= all.use_height) {
+ set_top_item(&all,
+ next_item(&all, moi->top_index, which),
+ which);
+ }
+ break;
+ }
+ if (--oops < 0) {
+ dlg_trace_msg("OOPS-forward\n");
+ break;
+ }
+ }
+ } else if (now_at < at_top) {
+ while (now_at < at_top) {
+ old_item = moi->top_index;
+ set_top_item(&all,
+ prev_item(&all, moi->top_index, which),
+ which);
+ at_top = index2row(&all, moi->top_index, which);
+
+ dlg_trace_msg("...at_top %d (now %d)\n", at_top, now_at);
+ dlg_trace_msg("...topITM %d\n", moi->top_index);
+
+ if (moi->top_index >= old_item)
+ break;
+ if (at_top <= now_at)
+ break;
+ if (--oops < 0) {
+ dlg_trace_msg("OOPS-backward\n");
+ break;
+ }
+ }
+ }
+ dlg_trace_msg("-->now_at %d\n", now_at);
+ cur_item = i;
+ print_both(&all, cur_item);
+ }
+ dlg_trace_win(dialog);
+ continue; /* wait for another key press */
+ }
+
+ if (fkey) {
+ switch (key) {
+ case DLGK_ENTER:
+ result = dlg_enter_buttoncode(button);
+ 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();
+ }
+ }
+
+ dialog_state.visit_cols = save_visit;
+ dlg_del_window(dialog);
+ dlg_mouse_free_regions();
+ free(prompt);
+ *current_item = cur_item;
+ return result;
+}
+
+/*
+ * Display a dialog box with a list of options that can be turned on or off
+ */
+int
+dialog_buildlist(const char *title,
+ const char *cprompt,
+ int height,
+ int width,
+ int list_height,
+ int item_no,
+ char **items,
+ int order_mode)
+{
+ int result;
+ int i, j;
+ DIALOG_LISTITEM *listitems;
+ bool separate_output = dialog_vars.separate_output;
+ bool show_status = FALSE;
+ int current = 0;
+ char *help_result;
+
+ listitems = dlg_calloc(DIALOG_LISTITEM, (size_t) item_no + 1);
+ assert_ptr(listitems, "dialog_buildlist");
+
+ for (i = j = 0; i < item_no; ++i) {
+ listitems[i].name = items[j++];
+ listitems[i].text = (dialog_vars.no_items
+ ? dlg_strempty()
+ : items[j++]);
+ listitems[i].state = !dlg_strcmp(items[j++], "on");
+ listitems[i].help = ((dialog_vars.item_help)
+ ? items[j++]
+ : dlg_strempty());
+ }
+ dlg_align_columns(&listitems[0].text, (int) sizeof(DIALOG_LISTITEM), item_no);
+
+ result = dlg_buildlist(title,
+ cprompt,
+ height,
+ width,
+ list_height,
+ item_no,
+ listitems,
+ NULL,
+ order_mode,
+ &current);
+
+ switch (result) {
+ case DLG_EXIT_OK: /* FALLTHRU */
+ case DLG_EXIT_EXTRA:
+ show_status = TRUE;
+ break;
+ case DLG_EXIT_HELP:
+ dlg_add_help_listitem(&result, &help_result, &listitems[current]);
+ if ((show_status = dialog_vars.help_status)) {
+ if (separate_output) {
+ dlg_add_string(help_result);
+ dlg_add_separator();
+ } else {
+ dlg_add_quoted(help_result);
+ }
+ } else {
+ dlg_add_string(help_result);
+ }
+ 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_quoted(listitems[i].name);
+ }
+ }
+ }
+ dlg_add_last_key(-1);
+ }
+
+ dlg_free_columns(&listitems[0].text, (int) sizeof(DIALOG_LISTITEM), item_no);
+ free(listitems);
+ return result;
+}
diff --git a/contrib/dialog/buttons.c b/contrib/dialog/buttons.c
new file mode 100644
index 0000000..d37cfe5
--- /dev/null
+++ b/contrib/dialog/buttons.c
@@ -0,0 +1,789 @@
+/*
+ * $Id: buttons.c,v 1.94 2012/12/30 20:51:01 tom Exp $
+ *
+ * buttons.c -- draw buttons, e.g., OK/Cancel
+ *
+ * Copyright 2000-2011,2012 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_cols)
+
+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;
+}
+
+static size_t
+count_labels(const char **labels)
+{
+ size_t result = 0;
+ if (labels != 0) {
+ while (*labels++ != 0) {
+ ++result;
+ }
+ }
+ return result;
+}
+
+/*
+ * Check if the latest key should be added to the hotkey list.
+ */
+static int
+was_hotkey(int this_key, int *used_keys, size_t next)
+{
+ int result = FALSE;
+
+ if (next != 0) {
+ size_t n;
+ for (n = 0; n < next; ++n) {
+ if (used_keys[n] == this_key) {
+ result = TRUE;
+ break;
+ }
+ }
+ }
+ return result;
+}
+
+/*
+ * Determine the hot-keys for a set of button-labels. Normally these are
+ * the first uppercase character in each label. However, if more than one
+ * button has the same first-uppercase, then we will (attempt to) look for
+ * an alternate.
+ *
+ * This allocates data which must be freed by the caller.
+ */
+static int *
+get_hotkeys(const char **labels)
+{
+ int *result = 0;
+ size_t count = count_labels(labels);
+ size_t n;
+
+ if ((result = dlg_calloc(int, count + 1)) != 0) {
+ for (n = 0; n < count; ++n) {
+ const char *label = labels[n];
+ const int *indx = dlg_index_wchars(label);
+ int limit = dlg_count_wchars(label);
+ int i;
+
+ for (i = 0; i < limit; ++i) {
+ int first = indx[i];
+ int check = UCH(label[first]);
+#ifdef USE_WIDE_CURSES
+ int last = indx[i + 1];
+ if ((last - first) != 1) {
+ const char *temp = (label + first);
+ check = string_to_char(&temp);
+ }
+#endif
+ if (dlg_isupper(check) && !was_hotkey(check, result, n)) {
+ result[n] = check;
+ break;
+ }
+ }
+ }
+ }
+ return result;
+}
+
+/*
+ * Print a button
+ */
+static void
+print_button(WINDOW *win, char *label, int hotkey, 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);
+ (void) wattrset(win, selected
+ ? button_active_attr
+ : button_inactive_attr);
+ (void) waddstr(win, "<");
+ (void) wattrset(win, label_attr);
+ for (i = 0; i < limit; ++i) {
+ int check;
+ int first = indx[i];
+ int last = indx[i + 1];
+
+ switch (state) {
+ case 0:
+ check = UCH(label[first]);
+#ifdef USE_WIDE_CURSES
+ if ((last - first) != 1) {
+ const char *temp = (label + first);
+ check = string_to_char(&temp);
+ }
+#endif
+ if (check == hotkey) {
+ (void) wattrset(win, key_attr);
+ state = 1;
+ }
+ break;
+ case 1:
+ wattrset(win, label_attr);
+ state = 2;
+ break;
+ }
+ waddnstr(win, label + first, last - first);
+ }
+ (void) 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;
+ int result;
+
+ *margin = 0;
+ if (count != 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;
+ result = (*gap > 0) && (unused >= 0);
+ } else {
+ result = 0;
+ }
+ return result;
+}
+
+/*
+ * 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 = dlg_get_attrs(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;
+ if (need != 0) {
+ int *hotkeys = get_hotkeys(labels);
+ assert_ptr(hotkeys, "dlg_draw_buttons");
+
+ 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, hotkeys[n], 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);
+ (void) wattrset(win, save);
+ free(buffer);
+ free(hotkeys);
+ }
+}
+
+/*
+ * 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)
+{
+ int result = DLG_EXIT_UNKNOWN;
+
+ if (labels != 0) {
+ int *hotkeys = get_hotkeys(labels);
+ int j;
+
+ ch = (int) dlg_toupper(dlg_last_getc());
+
+ if (hotkeys != 0) {
+ for (j = 0; labels[j] != 0; ++j) {
+ if (ch == hotkeys[j]) {
+ dlg_flush_getc();
+ result = j;
+ break;
+ }
+ }
+ free(hotkeys);
+ }
+ }
+
+ return result;
+}
+
+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;
+ DIALOG_VARS save;
+
+ if (dialog_vars.extra_button) {
+ dlg_save_vars(&save);
+ dialog_vars.nocancel = TRUE;
+ result = dlg_ok_labels();
+ dlg_restore_vars(&save);
+ } else {
+ static const char *labels[3];
+ int n = 0;
+
+ if (!dialog_vars.nook)
+ labels[n++] = my_exit_label();
+ if (dialog_vars.help_button)
+ labels[n++] = my_help_label();
+ if (n == 0)
+ labels[n++] = my_exit_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;
+ DIALOG_VARS save;
+
+ dlg_save_vars(&save);
+ dialog_vars.nocancel = TRUE;
+
+ result = dlg_ok_buttoncode(button);
+
+ dlg_restore_vars(&save);
+
+ return result;
+}
+
+const char **
+dlg_ok_label(void)
+{
+ static const char *labels[4];
+ int n = 0;
+
+ labels[n++] = my_ok_label();
+ if (dialog_vars.extra_button)
+ labels[n++] = my_extra_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;
+ }
+ dlg_trace_msg("# dlg_ok_buttoncode(%d) = %d\n", button, result);
+ 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 the first button (usually "OK" unless --nook was used).
+ */
+int
+dlg_defaultno_button(void)
+{
+ int result = 0;
+
+ if (dialog_vars.defaultno && !dialog_vars.nocancel) {
+ while (dlg_ok_buttoncode(result) != DLG_EXIT_CANCEL)
+ ++result;
+ }
+ dlg_trace_msg("# dlg_defaultno_button() = %d\n", result);
+ return result;
+}
+
+/*
+ * Find the button-index for a button named with --default-button. If the
+ * option was not specified, or if the selected button does not exist, return
+ * the index of the first button (usually "OK" unless --nook was used).
+ */
+int
+dlg_default_button(void)
+{
+ int i, n;
+ int result = 0;
+
+ if (dialog_vars.default_button >= 0) {
+ for (i = 0; (n = dlg_ok_buttoncode(i)) >= 0; i++) {
+ if (n == dialog_vars.default_button) {
+ result = i;
+ break;
+ }
+ }
+ }
+ dlg_trace_msg("# dlg_default_button() = %d\n", 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 (button < -1)
+ button = -1;
+
+ 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 {
+ if (button < -1)
+ button = -1;
+
+ while (labels[button + 1] != 0)
+ ++button;
+ }
+ return button;
+}
diff --git a/contrib/dialog/calendar.c b/contrib/dialog/calendar.c
new file mode 100644
index 0000000..0a7061a
--- /dev/null
+++ b/contrib/dialog/calendar.c
@@ -0,0 +1,687 @@
+/*
+ * $Id: calendar.c,v 1.67 2013/03/17 15:03:41 tom Exp $
+ *
+ * calendar.c -- implements the calendar box
+ *
+ * Copyright 2001-2012,2013 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_box2(data->parent,
+ data->y - MARGIN, data->x - MARGIN,
+ data->height + (2 * MARGIN), data->width + (2 * MARGIN),
+ menubox_attr,
+ menubox_border_attr,
+ menubox_border2_attr);
+
+ (void) 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++) {
+ (void) 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;
+ (void) wattrset(data->window, item_attr); /* not selected days */
+ if (mday == day) {
+ (void) 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;
+
+ (void) wattrset(data->parent, dialog_attr); /* Headline "Month" */
+ (void) mvwprintw(data->parent, data->y - 2, data->x - 1, _("Month"));
+ dlg_draw_box2(data->parent,
+ data->y - 1, data->x - 1,
+ data->height + 2, data->width + 2,
+ menubox_attr,
+ menubox_border_attr,
+ menubox_border2_attr);
+ (void) 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;
+
+ (void) wattrset(data->parent, dialog_attr); /* Headline "Year" */
+ (void) mvwprintw(data->parent, data->y - 2, data->x - 1, _("Year"));
+ dlg_draw_box2(data->parent,
+ data->y - 1, data->x - 1,
+ data->height + 2, data->width + 2,
+ menubox_attr,
+ menubox_border_attr,
+ menubox_border2_attr);
+ (void) 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, &current)
+
+/*
+ * 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[] = {
+ HELPKEY_BINDINGS,
+ 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_default_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(&current, 0);
+ } else if (year < current.tm_year) {
+ now_time -= ONE_DAY * days_in_year(&current, -1);
+ } else if (month > current.tm_mon + 1) {
+ now_time += ONE_DAY * days_in_month(&current, 0);
+ } else if (month < current.tm_mon + 1) {
+ now_time -= ONE_DAY * days_in_month(&current, -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_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr);
+ dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr);
+ dlg_draw_title(dialog, title);
+
+ (void) 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);
+ }
+
+ dlg_trace_win(dialog);
+ 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_enter_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(&current));
+ }
+ }
+ 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(&current, 0);
+ else
+ now_time -= ONE_DAY *
+ days_in_month(&current, -1);
+ } else if (obj == &yr_box) {
+ if (step > 0)
+ now_time += (ONE_DAY
+ * days_in_year(&current, 0));
+ else
+ now_time -= (ONE_DAY
+ * days_in_year(&current, -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,
+ &current);
+ if (used == 0 || *buffer == '\0')
+ DefaultFormat(buffer, current);
+ } else
+#endif
+ DefaultFormat(buffer, current);
+
+ dlg_add_result(buffer);
+ dlg_add_separator();
+ dlg_add_last_key(-1);
+
+ return CleanupResult(result, dialog, prompt, &save_vars);
+}
diff --git a/contrib/dialog/checklist.c b/contrib/dialog/checklist.c
new file mode 100644
index 0000000..1bb54db
--- /dev/null
+++ b/contrib/dialog/checklist.c
@@ -0,0 +1,680 @@
+/*
+ * $Id: checklist.c,v 1.153 2013/09/02 17:01:02 tom Exp $
+ *
+ * checklist.c -- implements the checklist box
+ *
+ * Copyright 2000-2012,2013 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>
+
+#define MIN_HIGH (1 + (5 * MARGIN))
+
+typedef struct {
+ /* the outer-window */
+ WINDOW *dialog;
+ int box_y;
+ int box_x;
+ int check_x;
+ int item_x;
+ int checkflag;
+ int use_height;
+ int use_width;
+ /* the inner-window */
+ WINDOW *list;
+ DIALOG_LISTITEM *items;
+ int item_no;
+ const char *states;
+} ALL_DATA;
+
+/*
+ * 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(ALL_DATA * data,
+ WINDOW *win,
+ DIALOG_LISTITEM * item,
+ const char *states,
+ int choice,
+ int selected)
+{
+ chtype save = dlg_get_attrs(win);
+ int i;
+ bool both = (!dialog_vars.no_tags && !dialog_vars.no_items);
+ bool first = TRUE;
+ int climit = (getmaxx(win) - data->check_x + 1);
+ const char *show = (dialog_vars.no_items
+ ? item->name
+ : item->text);
+
+ /* Clear 'residue' of last item */
+ (void) wattrset(win, menubox_attr);
+ (void) wmove(win, choice, 0);
+ for (i = 0; i < data->use_width; i++)
+ (void) waddch(win, ' ');
+
+ (void) wmove(win, choice, data->check_x);
+ (void) wattrset(win, selected ? check_selected_attr : check_attr);
+ (void) wprintw(win,
+ (data->checkflag == FLAG_CHECK) ? "[%c]" : "(%c)",
+ states[item->state]);
+ (void) wattrset(win, menubox_attr);
+ (void) waddch(win, ' ');
+
+ if (both) {
+ dlg_print_listitem(win, item->name, climit, first, selected);
+ first = FALSE;
+ }
+
+ (void) wmove(win, choice, data->item_x);
+ dlg_print_listitem(win, show, climit, first, selected);
+
+ if (selected) {
+ dlg_item_help(item->help);
+ }
+ (void) wattrset(win, save);
+}
+
+static void
+print_list(ALL_DATA * data, int choice, int scrollamt, int max_choice)
+{
+ int i;
+ int cur_y, cur_x;
+
+ getyx(data->dialog, cur_y, cur_x);
+ for (i = 0; i < max_choice; i++) {
+ print_item(data,
+ data->list,
+ &data->items[i + scrollamt],
+ data->states,
+ i, i == choice);
+ }
+ (void) wnoutrefresh(data->list);
+
+ dlg_draw_scrollbar(data->dialog,
+ (long) (scrollamt),
+ (long) (scrollamt),
+ (long) (scrollamt + max_choice),
+ (long) (data->item_no),
+ data->box_x + data->check_x,
+ data->box_x + data->use_width,
+ data->box_y,
+ data->box_y + data->use_height + 1,
+ menubox_border2_attr,
+ menubox_border_attr);
+
+ (void) wmove(data->dialog, cur_y, cur_x);
+}
+
+static bool
+check_hotkey(DIALOG_LISTITEM * items, int choice)
+{
+ bool result = FALSE;
+
+ if (dlg_match_char(dlg_last_getc(),
+ (dialog_vars.no_tags
+ ? items[choice].text
+ : items[choice].name))) {
+ result = TRUE;
+ }
+ return result;
+}
+
+/*
+ * 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[] = {
+ HELPKEY_BINDINGS,
+ 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
+ ALL_DATA all;
+ int i, j, key2, found, x, y, cur_x, cur_y;
+ int key = 0, fkey;
+ int button = dialog_state.visit_items ? -1 : dlg_default_button();
+ int choice = dlg_default_listitem(items);
+ int scrollamt = 0;
+ int max_choice;
+ int was_mouse;
+ int use_width, list_width, name_width, text_width;
+ int result = DLG_EXIT_UNKNOWN;
+ int num_states;
+ WINDOW *dialog;
+ char *prompt = dlg_strclone(cprompt);
+ const char **buttons = dlg_ok_labels();
+ const char *widget_name;
+
+ memset(&all, 0, sizeof(all));
+ all.items = items;
+ all.item_no = item_no;
+
+ dlg_does_output();
+ dlg_tab_correct_str(prompt);
+
+ /*
+ * If this is a radiobutton list, ensure that no more than one item is
+ * selected initially. Allow none to be selected, since some users may
+ * wish to provide this flavor.
+ */
+ if (flag == FLAG_RADIO) {
+ bool first = TRUE;
+
+ for (i = 0; i < item_no; i++) {
+ if (items[i].state) {
+ if (first) {
+ first = FALSE;
+ } else {
+ items[i].state = 0;
+ }
+ }
+ }
+ widget_name = "radiolist";
+ } else {
+ widget_name = "checklist";
+ }
+#ifdef KEY_RESIZE
+ retry:
+#endif
+
+ all.use_height = list_height;
+ use_width = dlg_calc_list_width(item_no, items) + 10;
+ use_width = MAX(26, use_width);
+ if (all.use_height == 0) {
+ /* calculate height without items (4) */
+ dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, use_width);
+ dlg_calc_listh(&height, &all.use_height, item_no);
+ } else {
+ dlg_auto_size(title, prompt,
+ &height, &width,
+ MIN_HIGH + all.use_height, use_width);
+ }
+ 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);
+ all.states = states;
+
+ all.checkflag = flag;
+
+ x = dlg_box_x_ordinate(width);
+ y = dlg_box_y_ordinate(height);
+
+ dialog = dlg_new_window(height, width, y, x);
+ all.dialog = dialog;
+ dlg_register_window(dialog, widget_name, binding);
+ dlg_register_buttons(dialog, widget_name, buttons);
+
+ dlg_mouse_setbase(x, y);
+
+ dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr);
+ dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr);
+ dlg_draw_title(dialog, title);
+
+ (void) wattrset(dialog, dialog_attr);
+ dlg_print_autowrap(dialog, prompt, height, width);
+
+ all.use_width = width - 6;
+ getyx(dialog, cur_y, cur_x);
+ all.box_y = cur_y + 1;
+ all.box_x = (width - all.use_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 (all.use_height + MIN_HIGH > height - cur_y)
+ all.use_height = height - MIN_HIGH - cur_y;
+ if (all.use_height <= 0)
+ all.use_height = 1;
+
+ max_choice = MIN(all.use_height, item_no);
+ max_choice = MAX(max_choice, 1);
+
+ /* create new window for the list */
+ all.list = dlg_sub_window(dialog, all.use_height, all.use_width,
+ y + all.box_y + 1, x + all.box_x + 1);
+
+ /* draw a box around the list items */
+ dlg_draw_box(dialog, all.box_y, all.box_x,
+ all.use_height + 2 * MARGIN,
+ all.use_width + 2 * MARGIN,
+ menubox_border_attr, menubox_border2_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 = (all.use_width - 6);
+ if (dialog_vars.no_tags) {
+ list_width = MIN(all.use_width, text_width);
+ } else if (dialog_vars.no_items) {
+ list_width = MIN(all.use_width, name_width);
+ } else {
+ if (text_width >= 0
+ && name_width >= 0
+ && use_width > 0
+ && 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;
+ }
+ list_width = (text_width + name_width);
+ }
+
+ all.check_x = (use_width - list_width) / 2;
+ all.item_x = ((dialog_vars.no_tags
+ ? 0
+ : (dialog_vars.no_items
+ ? 0
+ : (2 + name_width)))
+ + all.check_x + 4);
+
+ /* ensure we are scrolled to show the current choice */
+ scrollamt = MIN(scrollamt, max_choice + item_no - 1);
+ if (choice >= (max_choice + scrollamt - 1)) {
+ scrollamt = MAX(0, choice - max_choice + 1);
+ choice = max_choice - 1;
+ }
+ print_list(&all, choice, scrollamt, max_choice);
+
+ /* register the new window, along with its borders */
+ dlg_mouse_mkbigregion(all.box_y + 1, all.box_x,
+ all.use_height, all.use_width + 2,
+ KEY_MAX, 1, 1, 1 /* by lines */ );
+
+ dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width);
+
+ dlg_trace_win(dialog);
+ while (result == DLG_EXIT_UNKNOWN) {
+ if (button < 0) /* --visit-items */
+ wmove(dialog, all.box_y + choice + 1, all.box_x + all.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) {
+ choice = (key - KEY_MAX);
+ print_list(&all, choice, scrollamt, max_choice);
+
+ 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;
+
+ if (flag == FLAG_CHECK) { /* checklist? */
+ getyx(dialog, cur_y, cur_x);
+ items[current].state = next;
+ print_item(&all, all.list,
+ &items[scrollamt + choice],
+ states,
+ choice, TRUE);
+ (void) wnoutrefresh(all.list);
+ (void) wmove(dialog, cur_y, cur_x);
+ } else { /* radiolist */
+ for (i = 0; i < item_no; i++) {
+ if (i != current) {
+ items[i].state = 0;
+ }
+ }
+ if (items[current].state) {
+ getyx(dialog, cur_y, cur_x);
+ items[current].state = next ? next : 1;
+ print_item(&all, all.list,
+ &items[current],
+ states,
+ choice, TRUE);
+ (void) wnoutrefresh(all.list);
+ (void) wmove(dialog, cur_y, cur_x);
+ } else {
+ items[current].state = 1;
+ print_list(&all, choice, scrollamt, max_choice);
+ }
+ }
+ 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 (check_hotkey(items, j)) {
+ found = TRUE;
+ i = j - scrollamt;
+ break;
+ }
+ }
+ if (!found) {
+ for (j = 0; j <= scrollamt + choice; j++) {
+ if (check_hotkey(items, j)) {
+ 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 (i < 0) {
+ scrollamt += i;
+ choice = 0;
+ } else {
+ choice = max_choice - 1;
+ scrollamt += (i - max_choice + 1);
+ }
+ print_list(&all, choice, scrollamt, max_choice);
+ } else {
+ choice = i;
+ print_list(&all, choice, scrollamt, max_choice);
+ }
+ }
+ continue; /* wait for another key press */
+ }
+
+ if (fkey) {
+ switch (key) {
+ case DLGK_ENTER:
+ result = dlg_enter_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, j;
+ DIALOG_LISTITEM *listitems;
+ bool separate_output = ((flag == FLAG_CHECK)
+ && (dialog_vars.separate_output));
+ bool show_status = FALSE;
+ int current = 0;
+ char *help_result;
+
+ listitems = dlg_calloc(DIALOG_LISTITEM, (size_t) item_no + 1);
+ assert_ptr(listitems, "dialog_checklist");
+
+ for (i = j = 0; i < item_no; ++i) {
+ listitems[i].name = items[j++];
+ listitems[i].text = (dialog_vars.no_items
+ ? dlg_strempty()
+ : items[j++]);
+ listitems[i].state = !dlg_strcmp(items[j++], "on");
+ listitems[i].help = ((dialog_vars.item_help)
+ ? items[j++]
+ : dlg_strempty());
+ }
+ dlg_align_columns(&listitems[0].text, (int) sizeof(DIALOG_LISTITEM), item_no);
+
+ result = dlg_checklist(title,
+ cprompt,
+ height,
+ width,
+ list_height,
+ item_no,
+ listitems,
+ NULL,
+ flag,
+ &current);
+
+ switch (result) {
+ case DLG_EXIT_OK: /* FALLTHRU */
+ case DLG_EXIT_EXTRA:
+ show_status = TRUE;
+ break;
+ case DLG_EXIT_HELP:
+ dlg_add_help_listitem(&result, &help_result, &listitems[current]);
+ if ((show_status = dialog_vars.help_status)) {
+ if (separate_output) {
+ dlg_add_string(help_result);
+ dlg_add_separator();
+ } else {
+ dlg_add_quoted(help_result);
+ }
+ } else {
+ dlg_add_string(help_result);
+ }
+ 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();
+ if (flag == FLAG_CHECK)
+ dlg_add_quoted(listitems[i].name);
+ else
+ dlg_add_string(listitems[i].name);
+ }
+ }
+ }
+ dlg_add_last_key(separate_output);
+ }
+
+ dlg_free_columns(&listitems[0].text, (int) sizeof(DIALOG_LISTITEM), item_no);
+ free(listitems);
+ return result;
+}
diff --git a/contrib/dialog/columns.c b/contrib/dialog/columns.c
new file mode 100644
index 0000000..d03761f
--- /dev/null
+++ b/contrib/dialog/columns.c
@@ -0,0 +1,175 @@
+/*
+ * $Id: columns.c,v 1.10 2011/10/20 20:53:55 tom Exp $
+ *
+ * columns.c -- implements column-alignment
+ *
+ * Copyright 2008-2010,2011 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; \
+ ++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 **) (void *) 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 = (unsigned) 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;
+ size_t maxcols = 0;
+ unsigned *widths;
+ unsigned *offsets;
+ unsigned *maxwidth;
+ unsigned realwidth;
+ unsigned n;
+
+ /* first allocate arrays for workspace */
+ for (each(row, value)) {
+ size_t 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, ' ', (size_t) realwidth);
+ for (n = 0; n < cols; ++n) {
+ memcpy(text + offset, *value + offsets[n], (size_t) widths[n]);
+ offset += maxwidth[n] + 1;
+ }
+ text[realwidth] = 0;
+ *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);
+ }
+ }
+}
diff --git a/contrib/dialog/config.guess b/contrib/dialog/config.guess
new file mode 100755
index 0000000..b79252d
--- /dev/null
+++ b/contrib/dialog/config.guess
@@ -0,0 +1,1558 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright 1992-2013 Free Software Foundation, Inc.
+
+timestamp='2013-06-10'
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+#
+# 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. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+#
+# Originally written by Per Bothner.
+#
+# 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
+#
+# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+
+
+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 1992-2013 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
+
+case "${UNAME_SYSTEM}" in
+Linux|GNU|GNU/*)
+ # If the system lacks a compiler, then just pick glibc.
+ # We could probably try harder.
+ LIBC=gnu
+
+ eval $set_cc_for_build
+ cat <<-EOF > $dummy.c
+ #include <features.h>
+ #if defined(__UCLIBC__)
+ LIBC=uclibc
+ #elif defined(__dietlibc__)
+ LIBC=dietlibc
+ #else
+ LIBC=gnu
+ #endif
+ EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+ ;;
+esac
+
+# 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 tuples: *-*-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 ;;
+ *:Bitrig:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_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'`
+ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+ exitcode=$?
+ trap '' 0
+ exit $exitcode ;;
+ 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:*:[4567])
+ 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:*:*)
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ case ${UNAME_PROCESSOR} in
+ amd64)
+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ *)
+ echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ esac
+ exit ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit ;;
+ *:MINGW64*:*)
+ echo ${UNAME_MACHINE}-pc-mingw64
+ exit ;;
+ *:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit ;;
+ i*:MSYS*:*)
+ echo ${UNAME_MACHINE}-pc-msys
+ 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-${LIBC}`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/[-(].*//'`-${LIBC}
+ exit ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit ;;
+ aarch64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ aarch64_be:Linux:*:*)
+ UNAME_MACHINE=aarch64_be
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ 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="gnulibc1" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ arc:Linux:*:* | arceb:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${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-${LIBC}
+ else
+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_PCS_VFP
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
+ else
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
+ fi
+ fi
+ exit ;;
+ avr32*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ cris:Linux:*:*)
+ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+ exit ;;
+ crisv32:Linux:*:*)
+ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+ exit ;;
+ frv:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ hexagon:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ i*86:Linux:*:*)
+ echo ${UNAME_MACHINE}-pc-linux-${LIBC}
+ exit ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ m32r*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ 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-${LIBC}"; exit; }
+ ;;
+ or1k:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ or32:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ padre:Linux:*:*)
+ echo sparc-unknown-linux-${LIBC}
+ exit ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-${LIBC}
+ 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-${LIBC} ;;
+ PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
+ *) echo hppa-unknown-linux-${LIBC} ;;
+ esac
+ exit ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-${LIBC}
+ exit ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-${LIBC}
+ exit ;;
+ ppc64le:Linux:*:*)
+ echo powerpc64le-unknown-linux-${LIBC}
+ exit ;;
+ ppcle:Linux:*:*)
+ echo powerpcle-unknown-linux-${LIBC}
+ exit ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
+ exit ;;
+ sh64*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ tile*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ vax:Linux:*:*)
+ echo ${UNAME_MACHINE}-dec-linux-${LIBC}
+ exit ;;
+ x86_64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ xtensa*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ 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 ;;
+ x86_64:Haiku:*:*)
+ echo x86_64-unknown-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
+ eval $set_cc_for_build
+ if test "$UNAME_PROCESSOR" = unknown ; then
+ UNAME_PROCESSOR=powerpc
+ fi
+ 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
+ case $UNAME_PROCESSOR in
+ i386) UNAME_PROCESSOR=x86_64 ;;
+ powerpc) UNAME_PROCESSOR=powerpc64 ;;
+ esac
+ fi
+ fi
+ 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 ;;
+ NEO-?:NONSTOP_KERNEL:*:*)
+ echo neo-tandem-nsk${UNAME_RELEASE}
+ 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 ;;
+ x86_64:VMkernel:*:*)
+ echo ${UNAME_MACHINE}-unknown-esx
+ exit ;;
+esac
+
+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:
diff --git a/contrib/dialog/config.hin b/contrib/dialog/config.hin
new file mode 100644
index 0000000..e8fc0a9
--- /dev/null
+++ b/contrib/dialog/config.hin
@@ -0,0 +1,4 @@
+/*
+ * The configure script expands this as a set of definitions
+ */
+@DEFS@
diff --git a/contrib/dialog/config.sub b/contrib/dialog/config.sub
new file mode 100755
index 0000000..85a159e
--- /dev/null
+++ b/contrib/dialog/config.sub
@@ -0,0 +1,1791 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright 1992-2013 Free Software Foundation, Inc.
+
+timestamp='2013-09-05'
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+#
+# 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. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+
+
+# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+#
+# 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 1992-2013 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-android* | linux-dietlibc | linux-newlib* | \
+ linux-musl* | 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/'`
+ ;;
+ android-linux)
+ os=-linux-android
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+ ;;
+ *)
+ 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*178)
+ os=-lynxos178
+ ;;
+ -lynx*5)
+ os=-lynxos5
+ ;;
+ -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 \
+ | aarch64 | aarch64_be \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+ | arc | arceb \
+ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
+ | avr | avr32 \
+ | be32 | be64 \
+ | bfin \
+ | c4x | c8051 | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | epiphany \
+ | fido | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | hexagon \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k | iq2000 \
+ | le32 | le64 \
+ | lm32 \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | microblazeel | 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 \
+ | mipsr5900 | mipsr5900el \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+ | nds32 | nds32le | nds32be \
+ | nios | nios2 | nios2eb | nios2el \
+ | ns16k | ns32k \
+ | open8 \
+ | or1k | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle \
+ | pyramid \
+ | rl78 | 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 \
+ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+ | ubicom32 \
+ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+ | we32k \
+ | x86 | xc16x | xstormy16 | xtensa \
+ | z8k | z80)
+ basic_machine=$basic_machine-unknown
+ ;;
+ c54x)
+ basic_machine=tic54x-unknown
+ ;;
+ c55x)
+ basic_machine=tic55x-unknown
+ ;;
+ c6x)
+ basic_machine=tic6x-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+ ms1)
+ basic_machine=mt-unknown
+ ;;
+
+ strongarm | thumb | xscale)
+ basic_machine=arm-unknown
+ ;;
+ xgate)
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ xscaleeb)
+ basic_machine=armeb-unknown
+ ;;
+
+ xscaleel)
+ basic_machine=armel-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-* \
+ | aarch64-* | aarch64_be-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* | avr32-* \
+ | be32-* | be64-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* \
+ | c8051-* | 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-* \
+ | hexagon-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* | iq2000-* \
+ | le32-* | le64-* \
+ | lm32-* \
+ | m32c-* | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+ | microblaze-* | microblazeel-* \
+ | 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-* \
+ | mipsr5900-* | mipsr5900el-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | mt-* \
+ | msp430-* \
+ | nds32-* | nds32le-* | nds32be-* \
+ | nios-* | nios2-* | nios2eb-* | nios2el-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | open8-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
+ | pyramid-* \
+ | rl78-* | 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-* | sv1-* | sx?-* \
+ | tahoe-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tile*-* \
+ | tron-* \
+ | ubicom32-* \
+ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+ | vax-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* \
+ | 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
+ ;;
+ c54x-*)
+ basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c55x-*)
+ basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c6x-*)
+ basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ 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 | 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*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
+ ;;
+ mingw64)
+ basic_machine=x86_64-pc
+ os=-mingw64
+ ;;
+ mingw32)
+ basic_machine=i686-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-/'`
+ ;;
+ msys)
+ basic_machine=i686-pc
+ os=-msys
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ nacl)
+ basic_machine=le32-unknown
+ os=-nacl
+ ;;
+ 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
+ ;;
+ neo-tandem)
+ basic_machine=neo-tandem
+ ;;
+ nse-tandem)
+ basic_machine=nse-tandem
+ ;;
+ 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 | ppcbe) basic_machine=powerpc-unknown
+ ;;
+ ppc-* | ppcbe-*)
+ 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 | rdos64)
+ basic_machine=x86_64-pc
+ os=-rdos
+ ;;
+ rdos32)
+ 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
+ ;;
+ strongarm-* | thumb-*)
+ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ 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
+ ;;
+ tile*)
+ basic_machine=$basic_machine-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
+ ;;
+ xscale-* | xscalee[bl]-*)
+ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+ ;;
+ 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* | -plan9* \
+ | -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* \
+ | -bitrig* | -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* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-musl* | -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
+ ;;
+ -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
+ ;;
+ c8051-*)
+ os=-elf
+ ;;
+ hexagon-*)
+ os=-elf
+ ;;
+ tic54x-*)
+ os=-coff
+ ;;
+ tic55x-*)
+ os=-coff
+ ;;
+ tic6x-*)
+ 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
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mep-*)
+ os=-elf
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
+ or1k-*)
+ 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:
diff --git a/contrib/dialog/configure b/contrib/dialog/configure
new file mode 100755
index 0000000..282cc5d
--- /dev/null
+++ b/contrib/dialog/configure
@@ -0,0 +1,17033 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by Autoconf 2.52.20121002.
+#
+# 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'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${datarootdir}/info'
+mandir='${datarootdir}/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 ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$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 datarootdir 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]
+ --datarootdir=DIR read-only architecture-independent data [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --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 [DATAROOTDIR/info]
+ --mandir=DIR man documentation [DATAROOTDIR/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 do not display "compiling" commands
+ --disable-largefile omit support for large files
+ --with-warnings test: turn on gcc warnings
+ --with-pkg-config{=path} enable/disable use of pkg-config
+ --with-package=XXX rename dialog to XXX, library to libXXX.a, etc
+ --enable-header-subdir install dlg_XXX headers to subdirectory
+ --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
+ --with-textdomain=PKG NLS text-domain (default is package name)
+ --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-rel-version=XXX override derived release version
+ --with-abi-version=XXX override derived ABI version
+ --disable-libtool-version enable to use libtool's incompatible naming scheme
+ --with-libtool generate libraries with libtool
+ --with-libtool-opts=XXX specify additional libtool options
+ --with-shared generate shared-libraries
+ --with-shlib-version=X Specify rel or abi version for shared libs
+ --with-curses-dir=DIR directory in which (n)curses is installed
+ --enable-rpath use rpath option when generating shared libraries
+ --with-ncurses compile/link with ncurses library
+ --with-ncursesw compile/link with wide-char ncurses library
+ --disable-extras do not include extra dialogs
+ --disable-rc-file do not include config-file support
+ --disable-Xdialog do not include Xdialog-style dialogs (1.1)
+ --disable-Xdialog2 do not include extra Xdialog-style dialogs (1.2)
+ --disable-whiptail do not map extra whiptail options
+ --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.20121002. 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:923: 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:934: 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:942: 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:958: 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:962: 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:968: 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:970: former value: $ac_old_val" >&5
+echo "$as_me: former value: $ac_old_val" >&2;}
+ { echo "$as_me:972: 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:991: 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:993: 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:1014: PATH=\".;.\"; conftest.sh") >&5
+ (PATH=".;."; conftest.sh) 2>&5
+ ac_status=$?
+ echo "$as_me:1017: \$? = $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"
+
+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:1052: 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:1067: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:1075: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:1078: 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:1087: 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:1102: 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:1110: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:1113: 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:1126: 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:1141: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:1149: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:1152: 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:1161: 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:1176: 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:1184: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:1187: 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:1200: 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:1220: 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:1242: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:1245: 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:1256: 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:1271: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:1279: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:1282: 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:1295: 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:1310: 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:1318: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:1321: 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:1333: 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:1338:" \
+ "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:1341: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:1344: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:1346: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:1349: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:1351: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:1354: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+#line 1358 "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:1374: 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:1377: \"$ac_link_default\"") >&5
+ (eval $ac_link_default) 2>&5
+ ac_status=$?
+ echo "$as_me:1380: \$? = $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:1403: 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:1409: 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:1414: 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:1420: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:1423: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { echo "$as_me:1430: 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:1438: 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:1445: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:1447: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:1450: checking for executable suffix" >&5
+echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6
+if { (eval echo "$as_me:1452: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:1455: \$? = $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:1471: 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:1477: 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:1483: 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 1489 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:1501: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:1504: \$? = $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:1516: 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:1523: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:1527: 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 1533 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1548: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:1551: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:1554: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:1557: \$? = $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:1569: 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:1575: 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 1581 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1593: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:1596: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:1599: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:1602: \$? = $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:1612: 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:1639: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:1642: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:1645: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:1648: \$? = $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 1660 "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:1673: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:1676: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:1679: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:1682: \$? = $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 1692 "configure"
+#include "confdefs.h"
+$ac_declaration
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1704: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:1707: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:1710: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:1713: \$? = $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 -rf 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
+
+GCC_VERSION=none
+if test "$GCC" = yes ; then
+ echo "$as_me:1743: 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/^.*(Debian[^)]*) //' -e 's/^[^0-9.]*//' -e 's/[^0-9.].*//'`"
+ test -z "$GCC_VERSION" && GCC_VERSION=unknown
+ echo "$as_me:1747: result: $GCC_VERSION" >&5
+echo "${ECHO_T}$GCC_VERSION" >&6
+fi
+
+echo "$as_me:1751: 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 1759 "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:1808: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:1811: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:1814: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:1817: \$? = $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:1834: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+ *)
+ echo "$as_me:1837: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+ CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# This should have been defined by AC_PROG_CC
+: ${CC:=cc}
+
+echo "$as_me:1845: checking \$CC variable" >&5
+echo $ECHO_N "checking \$CC variable... $ECHO_C" >&6
+case "$CC" in #(vi
+*[\ \ ]-[IUD]*)
+ echo "$as_me:1849: result: broken" >&5
+echo "${ECHO_T}broken" >&6
+ { echo "$as_me:1851: WARNING: your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options" >&5
+echo "$as_me: WARNING: your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options" >&2;}
+ # humor him...
+ cf_flags=`echo "$CC" | sed -e 's/^[^ ]*[ ]//'`
+ CC=`echo "$CC" | sed -e 's/[ ].*//'`
+
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
+
+for cf_add_cflags in $cf_flags
+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
+
+ ;;
+*)
+ echo "$as_me:1937: result: ok" >&5
+echo "${ECHO_T}ok" >&6
+ ;;
+esac
+
+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:1948: 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 1969 "configure"
+#include "confdefs.h"
+#include <assert.h>
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:1974: \"$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:1980: \$? = $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 2003 "configure"
+#include "confdefs.h"
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:2007: \"$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:2013: \$? = $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:2050: 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 2060 "configure"
+#include "confdefs.h"
+#include <assert.h>
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:2065: \"$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:2071: \$? = $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 2094 "configure"
+#include "confdefs.h"
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:2098: \"$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:2104: \$? = $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:2132: 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
+
+echo "$as_me:2144: 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:2164: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ SET_MAKE=
+else
+ echo "$as_me:2168: 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:2176: 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:2191: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ echo "$as_me:2199: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6
+else
+ echo "$as_me:2202: 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:2211: 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:2226: 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:2235: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6
+else
+ echo "$as_me:2238: 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:2264: 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:2284: 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:2333: 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'
+
+echo "$as_me:2344: checking whether ln -s works" >&5
+echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+ echo "$as_me:2348: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+ echo "$as_me:2351: result: no, using $LN_S" >&5
+echo "${ECHO_T}no, using $LN_S" >&6
+fi
+
+echo "$as_me:2355: checking if $LN_S -f options work" >&5
+echo $ECHO_N "checking if $LN_S -f options work... $ECHO_C" >&6
+
+rm -f conf$$.src conf$$dst
+echo >conf$$.dst
+echo first >conf$$.src
+if $LN_S -f conf$$.src conf$$.dst 2>/dev/null; then
+ cf_prog_ln_sf=yes
+else
+ cf_prog_ln_sf=no
+fi
+rm -f conf$$.dst conf$$src
+echo "$as_me:2367: result: $cf_prog_ln_sf" >&5
+echo "${ECHO_T}$cf_prog_ln_sf" >&6
+
+test "$cf_prog_ln_sf" = yes && LN_S="$LN_S -f"
+
+for ac_prog in tdlint lint alint splint lclint
+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:2376: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_LINT+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$LINT"; then
+ ac_cv_prog_LINT="$LINT" # 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_LINT="$ac_prog"
+echo "$as_me:2391: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+LINT=$ac_cv_prog_LINT
+if test -n "$LINT"; then
+ echo "$as_me:2399: result: $LINT" >&5
+echo "${ECHO_T}$LINT" >&6
+else
+ echo "$as_me:2402: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$LINT" && break
+done
+
+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:2412: 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:2427: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ echo "$as_me:2435: result: $AR" >&5
+echo "${ECHO_T}$AR" >&6
+else
+ echo "$as_me:2438: 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:2447: 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:2462: 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:2471: result: $ac_ct_AR" >&5
+echo "${ECHO_T}$ac_ct_AR" >&6
+else
+ echo "$as_me:2474: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ AR=$ac_ct_AR
+else
+ AR="$ac_cv_prog_AR"
+fi
+
+echo "$as_me:2483: 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 | fgrep -v "ing directory" | 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:2517: result: $cf_cv_makeflags" >&5
+echo "${ECHO_T}$cf_cv_makeflags" >&6
+
+echo "$as_me:2520: 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*|*-msys*|*-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:2547: 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:2558: 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:2573: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+CTAGS=$ac_cv_prog_CTAGS
+if test -n "$CTAGS"; then
+ echo "$as_me:2581: result: $CTAGS" >&5
+echo "${ECHO_T}$CTAGS" >&6
+else
+ echo "$as_me:2584: 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:2595: 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:2610: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ETAGS=$ac_cv_prog_ETAGS
+if test -n "$ETAGS"; then
+ echo "$as_me:2618: result: $ETAGS" >&5
+echo "${ECHO_T}$ETAGS" >&6
+else
+ echo "$as_me:2621: 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:2630: 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:2645: 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:2654: result: $MAKE_LOWER_TAGS" >&5
+echo "${ECHO_T}$MAKE_LOWER_TAGS" >&6
+else
+ echo "$as_me:2657: 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:2664: 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:2679: 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:2688: result: $MAKE_UPPER_TAGS" >&5
+echo "${ECHO_T}$MAKE_UPPER_TAGS" >&6
+else
+ echo "$as_me:2691: 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:2711: 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:2745: 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:2750: error: cannot run $ac_config_sub" >&5
+echo "$as_me: error: cannot run $ac_config_sub" >&2;}
+ { (exit 1); exit 1; }; }
+
+echo "$as_me:2754: 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:2763: 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:2767: 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:2772: 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:2780: 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:2789: 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:2794: 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:2820: 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:2824: 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:2826: 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
+
+ echo "$as_me:2849: checking for PATH separator" >&5
+echo $ECHO_N "checking for PATH separator... $ECHO_C" >&6
+ case $cf_cv_system_name in
+ os2*) PATH_SEPARATOR=';' ;;
+ *) ${PATH_SEPARATOR:=':'} ;;
+ esac
+
+ echo "$as_me:2856: result: $PATH_SEPARATOR" >&5
+echo "${ECHO_T}$PATH_SEPARATOR" >&6
+
+ 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[4-7]*) #(vi
+ cf_xopen_source="-D_ALL_SOURCE"
+ ;;
+cygwin|msys) #(vi
+ cf_XOPEN_SOURCE=600
+ ;;
+darwin[0-8].*) #(vi
+ cf_xopen_source="-D_APPLE_C_SOURCE"
+ ;;
+darwin*) #(vi
+ cf_xopen_source="-D_DARWIN_C_SOURCE"
+ cf_XOPEN_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"
+ cf_XOPEN_SOURCE=
+ ;;
+linux*|gnu*|mint*|k*bsd*-gnu) #(vi
+
+echo "$as_me:2905: 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 2912 "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:2927: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:2930: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:2933: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:2936: \$? = $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 2945 "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: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_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:2984: 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 <sys/select.h> and other headers which use u_int / u_short types
+ cf_XOPEN_SOURCE=
+
+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:3006: 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}:3012: testing if the symbol is already defined go no further ..." 1>&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3015 "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:3030: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:3033: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:3036: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3039: \$? = $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 3060 "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:3075: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:3078: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:3081: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3084: \$? = $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}:3095: 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}:3100: testing if the second compile does not leave our definition intact error ..." 1>&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3103 "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:3118: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:3121: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:3124: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3127: \$? = $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:3143: 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
+
+ ;;
+netbsd*) #(vi
+ cf_xopen_source="-D_NETBSD_SOURCE" # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw
+ ;;
+openbsd[4-9]*) #(vi
+ # setting _XOPEN_SOURCE lower than 500 breaks g++ compile with wchar.h, needed for ncursesw
+ cf_xopen_source="-D_BSD_SOURCE"
+ cf_XOPEN_SOURCE=600
+ ;;
+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.*) #(vi
+ cf_xopen_source="-D__EXTENSIONS__"
+ ;;
+*)
+
+echo "$as_me:3256: 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 3263 "configure"
+#include "confdefs.h"
+
+#include <stdlib.h>
+#include <string.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:3282: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:3285: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:3288: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3291: \$? = $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 3300 "configure"
+#include "confdefs.h"
+
+#include <stdlib.h>
+#include <string.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:3319: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:3322: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:3325: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3328: \$? = $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:3343: 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:3451: 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}:3457: testing if the symbol is already defined go no further ..." 1>&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3460 "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:3475: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:3478: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:3481: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3484: \$? = $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 3505 "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:3520: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:3523: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:3526: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3529: \$? = $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}:3540: 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}:3545: testing if the second compile does not leave our definition intact error ..." 1>&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3548 "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:3563: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:3566: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:3569: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3572: \$? = $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:3588: 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
+
+if test -n "$cf_XOPEN_SOURCE" && test -z "$cf_cv_xopen_source" ; then
+ echo "$as_me:3761: checking if _XOPEN_SOURCE really is set" >&5
+echo $ECHO_N "checking if _XOPEN_SOURCE really is set... $ECHO_C" >&6
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3764 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+int
+main ()
+{
+
+#ifndef _XOPEN_SOURCE
+make an error
+#endif
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:3779: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:3782: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:3785: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3788: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cf_XOPEN_SOURCE_set=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+cf_XOPEN_SOURCE_set=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ echo "$as_me:3797: result: $cf_XOPEN_SOURCE_set" >&5
+echo "${ECHO_T}$cf_XOPEN_SOURCE_set" >&6
+ if test $cf_XOPEN_SOURCE_set = yes
+ then
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3802 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+int
+main ()
+{
+
+#if (_XOPEN_SOURCE - 0) < $cf_XOPEN_SOURCE
+make an error
+#endif
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:3817: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:3820: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:3823: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3826: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cf_XOPEN_SOURCE_set_ok=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+cf_XOPEN_SOURCE_set_ok=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ if test $cf_XOPEN_SOURCE_set_ok = no
+ then
+ { echo "$as_me:3837: WARNING: _XOPEN_SOURCE is lower than requested" >&5
+echo "$as_me: WARNING: _XOPEN_SOURCE is lower than requested" >&2;}
+ fi
+ else
+
+echo "$as_me:3842: 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 3849 "configure"
+#include "confdefs.h"
+
+#include <stdlib.h>
+#include <string.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:3868: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:3871: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:3874: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3877: \$? = $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 3886 "configure"
+#include "confdefs.h"
+
+#include <stdlib.h>
+#include <string.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:3905: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:3908: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:3911: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3914: \$? = $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:3929: 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
+
+ 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:4034: 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 4046 "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:4066: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:4069: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:4072: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:4075: \$? = $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:4085: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:4088: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:4091: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:4094: \$? = $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:4108: 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:4114: 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 4122 "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:4142: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:4145: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:4148: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:4151: \$? = $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 4160 "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:4181: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:4184: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:4187: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:4190: \$? = $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:4201: 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 -rf conftest*
+ echo "$as_me:4211: 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 4219 "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:4239: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:4242: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:4245: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:4248: \$? = $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 4257 "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:4278: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:4281: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:4284: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:4287: \$? = $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:4298: 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 -rf conftest*
+fi
+
+ if test "$enable_largefile" != no ; then
+ echo "$as_me:4311: 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 4319 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+int
+main ()
+{
+return !fseeko;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:4331: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:4334: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:4337: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:4340: \$? = $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 4349 "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:4362: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:4365: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:4368: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:4371: \$? = $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:4382: 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 -rf 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:4396: 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 4402 "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:4414: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:4417: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:4420: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:4423: \$? = $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:4433: 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:4454: 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 4461 "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:4482: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:4485: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:4488: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:4491: \$? = $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:4502: 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
+
+if ( test "$GCC" = yes || test "$GXX" = yes )
+then
+echo "$as_me:4513: 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:4523: 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:4545: checking for $CC __attribute__ directives..." >&5
+echo "$as_me: checking for $CC __attribute__ directives..." >&6;}
+cat > conftest.$ac_ext <<EOF
+#line 4548 "${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:4597: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:4600: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ test -n "$verbose" && echo "$as_me:4602: result: ... $cf_attribute" >&5
+echo "${ECHO_T}... $cf_attribute" >&6
+ cat conftest.h >>confdefs.h
+ case $cf_attribute in #(vi
+ noreturn) #(vi
+
+cat >>confdefs.h <<EOF
+#define GCC_NORETURN $cf_directive
+EOF
+
+ ;;
+ printf) #(vi
+ cf_value='/* nothing */'
+ if test "$cf_printf_attribute" != no ; then
+ cf_value='__attribute__((format(printf,fmt,var)))'
+
+cat >>confdefs.h <<\EOF
+#define GCC_PRINTF 1
+EOF
+
+ fi
+
+cat >>confdefs.h <<EOF
+#define GCC_PRINTFLIKE(fmt,var) $cf_value
+EOF
+
+ ;;
+ scanf) #(vi
+ cf_value='/* nothing */'
+ if test "$cf_scanf_attribute" != no ; then
+ cf_value='__attribute__((format(scanf,fmt,var)))'
+
+cat >>confdefs.h <<\EOF
+#define GCC_SCANF 1
+EOF
+
+ fi
+
+cat >>confdefs.h <<EOF
+#define GCC_SCANFLIKE(fmt,var) $cf_value
+EOF
+
+ ;;
+ unused) #(vi
+
+cat >>confdefs.h <<EOF
+#define GCC_UNUSED $cf_directive
+EOF
+
+ ;;
+ 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:4666: 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 4671 "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:4688: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:4691: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:4694: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:4697: \$? = $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:4708: result: $INTEL_COMPILER" >&5
+echo "${ECHO_T}$INTEL_COMPILER" >&6
+ ;;
+ esac
+fi
+
+CLANG_COMPILER=no
+
+if test "$GCC" = yes ; then
+ echo "$as_me:4717: checking if this is really Clang C compiler" >&5
+echo $ECHO_N "checking if this is really Clang C compiler... $ECHO_C" >&6
+ cf_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Qunused-arguments"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 4722 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+
+#ifdef __clang__
+#else
+make an error
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:4739: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:4742: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:4745: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:4748: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ CLANG_COMPILER=yes
+cf_save_CFLAGS="$cf_save_CFLAGS -Qunused-arguments"
+
+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:4759: result: $CLANG_COMPILER" >&5
+echo "${ECHO_T}$CLANG_COMPILER" >&6
+fi
+
+cat > conftest.$ac_ext <<EOF
+#line 4764 "${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:4781: 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:4797: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:4800: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ test -n "$verbose" && echo "$as_me:4802: 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:4811: 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:4831: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:4834: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ test -n "$verbose" && echo "$as_me:4836: 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}:4847: testing feature is broken in gcc $GCC_VERSION ..." 1>&5
+
+ continue;;
+ esac
+ ;;
+ Wpointer-arith) #(vi
+ case $GCC_VERSION in
+ [12].*)
+ test -n "$verbose" && echo " feature is broken in gcc $GCC_VERSION" 1>&6
+
+echo "${as_me:-configure}:4857: 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 -rf conftest*
+
+fi
+fi
+
+echo "$as_me:4873: checking if you want to use pkg-config" >&5
+echo $ECHO_N "checking if you want to use pkg-config... $ECHO_C" >&6
+
+# Check whether --with-pkg-config or --without-pkg-config was given.
+if test "${with_pkg_config+set}" = set; then
+ withval="$with_pkg_config"
+ cf_pkg_config=$withval
+else
+ cf_pkg_config=yes
+fi;
+echo "$as_me:4883: result: $cf_pkg_config" >&5
+echo "${ECHO_T}$cf_pkg_config" >&6
+
+case $cf_pkg_config in #(vi
+no) #(vi
+ PKG_CONFIG=none
+ ;;
+yes) #(vi
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+echo "$as_me:4895: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKG_CONFIG="$PKG_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_PKG_CONFIG="$ac_dir/$ac_word"
+ echo "$as_me:4912: found $ac_dir/$ac_word" >&5
+ break
+fi
+done
+
+ ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+
+if test -n "$PKG_CONFIG"; then
+ echo "$as_me:4923: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6
+else
+ echo "$as_me:4926: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+ ac_pt_PKG_CONFIG=$PKG_CONFIG
+ # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+echo "$as_me:4935: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $ac_pt_PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_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_ac_pt_PKG_CONFIG="$ac_dir/$ac_word"
+ echo "$as_me:4952: found $ac_dir/$ac_word" >&5
+ break
+fi
+done
+
+ test -z "$ac_cv_path_ac_pt_PKG_CONFIG" && ac_cv_path_ac_pt_PKG_CONFIG="none"
+ ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+
+if test -n "$ac_pt_PKG_CONFIG"; then
+ echo "$as_me:4964: result: $ac_pt_PKG_CONFIG" >&5
+echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6
+else
+ echo "$as_me:4967: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ PKG_CONFIG=$ac_pt_PKG_CONFIG
+else
+ PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+ ;;
+*)
+ PKG_CONFIG=$withval
+ ;;
+esac
+
+test -z "$PKG_CONFIG" && PKG_CONFIG=none
+if test "$PKG_CONFIG" != none ; then
+
+if test "x$prefix" != xNONE; then
+ cf_path_syntax="$prefix"
+else
+ cf_path_syntax="$ac_default_prefix"
+fi
+
+case ".$PKG_CONFIG" in #(vi
+.\$\(*\)*|.\'*\'*) #(vi
+ ;;
+..|./*|.\\*) #(vi
+ ;;
+.[a-zA-Z]:[\\/]*) #(vi OS/2 EMX
+ ;;
+.\${*prefix}*|.\${*dir}*) #(vi
+ eval PKG_CONFIG="$PKG_CONFIG"
+ case ".$PKG_CONFIG" in #(vi
+ .NONE/*)
+ PKG_CONFIG=`echo $PKG_CONFIG | sed -e s%NONE%$cf_path_syntax%`
+ ;;
+ esac
+ ;; #(vi
+.no|.NONE/*)
+ PKG_CONFIG=`echo $PKG_CONFIG | sed -e s%NONE%$cf_path_syntax%`
+ ;;
+*)
+ { { echo "$as_me:5010: error: expected a pathname, not \"$PKG_CONFIG\"" >&5
+echo "$as_me: error: expected a pathname, not \"$PKG_CONFIG\"" >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+esac
+
+fi
+
+echo "$as_me:5018: checking for this package's name" >&5
+echo $ECHO_N "checking for this package's name... $ECHO_C" >&6
+
+# Check whether --with-package or --without-package was given.
+if test "${with_package+set}" = set; then
+ withval="$with_package"
+ PACKAGE=$withval
+else
+ PACKAGE=dialog
+fi;
+echo "$as_me:5028: result: $PACKAGE" >&5
+echo "${ECHO_T}$PACKAGE" >&6
+
+if test -f $srcdir/VERSION ; then
+ echo "$as_me:5032: 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:5044: 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:5049: error: missing minor-version" >&5
+echo "$as_me: error: missing minor-version" >&2;}
+ { (exit 1); exit 1; }; }
+
+ echo "$as_me:5053: result: ${VERSION_MAJOR}.${VERSION_MINOR}" >&5
+echo "${ECHO_T}${VERSION_MAJOR}.${VERSION_MINOR}" >&6
+
+ echo "$as_me:5056: 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:5061: 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:5068: 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:5073: result: $VERSION_PATCH" >&5
+echo "${ECHO_T}$VERSION_PATCH" >&6
+else
+ { { echo "$as_me:5076: 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 " ABI VERSION $VERSION" 1>&6
+
+echo "${as_me:-configure}:5084: testing ABI VERSION $VERSION ..." 1>&5
+
+test -n "$verbose" && echo " VERSION_MAJOR $VERSION_MAJOR" 1>&6
+
+echo "${as_me:-configure}:5088: testing VERSION_MAJOR $VERSION_MAJOR ..." 1>&5
+
+test -n "$verbose" && echo " VERSION_MINOR $VERSION_MINOR" 1>&6
+
+echo "${as_me:-configure}:5092: testing VERSION_MINOR $VERSION_MINOR ..." 1>&5
+
+test -n "$verbose" && echo " VERSION_PATCH $VERSION_PATCH" 1>&6
+
+echo "${as_me:-configure}:5096: testing VERSION_PATCH $VERSION_PATCH ..." 1>&5
+
+ cf_PACKAGE=dialog
+ PACKAGE=$PACKAGE
+
+cat >>confdefs.h <<EOF
+#define PACKAGE "$PACKAGE"
+EOF
+
+cf_PACKAGE=`echo "$cf_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
+
+CFG_ROOTNAME=$PACKAGE
+HDR_ROOTNAME=$PACKAGE
+LIB_ROOTNAME=$PACKAGE
+
+echo "$as_me:5119: checking if we should install dlg_XXX headers to subdirectory" >&5
+echo $ECHO_N "checking if we should install dlg_XXX headers to subdirectory... $ECHO_C" >&6
+
+# Check whether --enable-header-subdir or --disable-header-subdir was given.
+if test "${enable_header_subdir+set}" = set; then
+ enableval="$enable_header_subdir"
+ SUB_INC=$enableval
+else
+ SUB_INC=no
+fi;
+echo "$as_me:5129: result: $SUB_INC" >&5
+echo "${ECHO_T}$SUB_INC" >&6
+
+EXTRAOBJS=""
+
+echo "$as_me:5134: 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 5140 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+_ACEOF
+if { (eval echo "$as_me:5148: \"$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:5154: \$? = $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 5176 "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 -rf 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 5194 "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 -rf 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 5215 "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:5241: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:5244: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:5246: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:5249: \$? = $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:5262: 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:5272: 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 5280 "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:5289: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:5292: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:5295: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:5298: \$? = $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:5309: 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:5330: 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 5336 "configure"
+#include "confdefs.h"
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:5342: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:5345: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:5348: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:5351: \$? = $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:5361: 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:5371: 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 5377 "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:5392: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:5395: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:5398: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:5401: \$? = $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:5411: 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:5423: 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 5429 "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:5444: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:5447: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:5450: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:5453: \$? = $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:5463: 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:5477: 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 5483 "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:5495: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:5498: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:5501: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:5504: \$? = $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:5514: 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:5524: 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 5530 "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:5562: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:5565: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:5568: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:5571: \$? = $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:5581: 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:5602: 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 5608 "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 -rf conftest*
+
+fi
+echo "$as_me:5626: 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:5631: 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 5637 "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; /* workaround for ICC 12.0.3 */ if (f == 0) return 1;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:5668: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:5671: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:5674: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:5677: \$? = $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:5687: 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:5701: 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 5710 "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:5733: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:5736: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:5738: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:5741: \$? = $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:5753: 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:5765: 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 5771 "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:5775: \"$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:5781: \$? = $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:5800: 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:5813: 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 5819 "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; /* workaround for ICC 12.0.3 */ if (f == 0) return 1;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:5850: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:5853: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:5856: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:5859: \$? = $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:5869: 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:5879: 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 5888 "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:6015: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:6018: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:6020: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:6023: \$? = $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:6035: 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:6046: 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 6052 "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 -rf conftest*
+
+fi
+echo "$as_me:6072: 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 "$PACKAGE" ; then
+ { { echo "$as_me:6085: error: CF_BUNDLED_INTL used without setting PACKAGE variable" >&5
+echo "$as_me: error: CF_BUNDLED_INTL used without setting PACKAGE variable" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+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:6102: 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 6108 "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:6112: \"$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:6118: \$? = $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:6137: 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:6152: 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 6158 "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; /* workaround for ICC 12.0.3 */ if (f == 0) return 1;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:6189: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:6192: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:6195: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:6198: \$? = $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:6208: 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 6256 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+int
+main ()
+{
+printf("Hello")
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:6268: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:6271: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:6274: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:6277: \$? = $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}:6294: 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 6335 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+int
+main ()
+{
+printf("Hello")
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:6347: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:6350: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:6353: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:6356: \$? = $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}:6373: 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:6389: 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}:6414: 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}:6443: testing adding $cf_add_libdir to library-path ..." 1>&5
+
+ LDFLAGS="-L$cf_add_libdir $LDFLAGS"
+ fi
+ fi
+ done
+fi
+
+ else
+{ { echo "$as_me:6452: 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:6463: 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}:6474: testing Starting FIND_LINKAGE(iconv,) ..." 1>&5
+
+cf_save_LIBS="$LIBS"
+
+cat >conftest.$ac_ext <<_ACEOF
+#line 6479 "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:6498: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:6501: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:6504: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:6507: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+
+ cf_cv_find_linkage_iconv=yes
+ cf_cv_header_path_iconv=/usr/include
+ cf_cv_library_path_iconv=/usr/lib
+
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+
+LIBS="-liconv $cf_save_LIBS"
+
+cat >conftest.$ac_ext <<_ACEOF
+#line 6521 "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:6540: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:6543: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:6546: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:6549: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+
+ cf_cv_find_linkage_iconv=yes
+ cf_cv_header_path_iconv=/usr/include
+ cf_cv_library_path_iconv=/usr/lib
+ 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}:6566: testing find linkage for iconv library ..." 1>&5
+
+echo "${as_me:-configure}:6568: 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$,,'`
+
+test "$cf_header_path" != "NONE" && \
+test -d "$cf_header_path" && \
+ {
+ test -n "$verbose" && echo " ... testing for include-directories under $cf_header_path"
+ test -d $cf_header_path/include && cf_search="$cf_search $cf_header_path/include"
+ test -d $cf_header_path/include/iconv && cf_search="$cf_search $cf_header_path/include/iconv"
+ test -d $cf_header_path/include/iconv/include && cf_search="$cf_search $cf_header_path/include/iconv/include"
+ test -d $cf_header_path/iconv/include && cf_search="$cf_search $cf_header_path/iconv/include"
+ test -d $cf_header_path/iconv/include/iconv && cf_search="$cf_search $cf_header_path/iconv/include/iconv"
+}
+
+ cf_header_path_list="$cf_header_path_list $cf_search"
+ ;;
+ 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 "/usr" != "$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 "/usr/local" != "$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 "/opt" != "$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 "$HOME" != "$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}:6681: 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 6685 "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:6704: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:6707: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:6710: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:6713: \$? = $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}:6718: 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}:6736: 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 "/usr" != "$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 "/usr/local" != "$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 "/opt" != "$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 "$HOME" != "$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}:6833: 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 6839 "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:6858: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:6861: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:6864: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:6867: \$? = $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}:6872: 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
+ 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
+
+LIBS="$cf_save_LIBS"
+
+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:6912: 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:6921: 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 6928 "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:6953: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:6956: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:6959: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:6962: \$? = $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:6972: 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 7014 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+int
+main ()
+{
+printf("Hello")
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:7026: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:7029: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:7032: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:7035: \$? = $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}:7052: 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}:7089: 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:7100: 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 7106 "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:7118: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:7121: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:7124: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:7127: \$? = $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:7138: 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:7149: 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 7155 "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:7167: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:7170: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:7173: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:7176: \$? = $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:7186: 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:7196: 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:7206: 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:7219: 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:7229: 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:7238: 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}:7249: testing Starting FIND_LINKAGE(intl,) ..." 1>&5
+
+cf_save_LIBS="$LIBS"
+
+cat >conftest.$ac_ext <<_ACEOF
+#line 7254 "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:7274: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:7277: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:7280: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:7283: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+
+ cf_cv_find_linkage_intl=yes
+ cf_cv_header_path_intl=/usr/include
+ cf_cv_library_path_intl=/usr/lib
+
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+
+LIBS="-lintl $cf_save_LIBS"
+
+cat >conftest.$ac_ext <<_ACEOF
+#line 7297 "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:7317: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:7320: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:7323: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:7326: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+
+ cf_cv_find_linkage_intl=yes
+ cf_cv_header_path_intl=/usr/include
+ cf_cv_library_path_intl=/usr/lib
+ 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}:7343: testing find linkage for intl library ..." 1>&5
+
+echo "${as_me:-configure}:7345: 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$,,'`
+
+test "$cf_header_path" != "NONE" && \
+test -d "$cf_header_path" && \
+ {
+ test -n "$verbose" && echo " ... testing for include-directories under $cf_header_path"
+ test -d $cf_header_path/include && cf_search="$cf_search $cf_header_path/include"
+ test -d $cf_header_path/include/intl && cf_search="$cf_search $cf_header_path/include/intl"
+ test -d $cf_header_path/include/intl/include && cf_search="$cf_search $cf_header_path/include/intl/include"
+ test -d $cf_header_path/intl/include && cf_search="$cf_search $cf_header_path/intl/include"
+ test -d $cf_header_path/intl/include/intl && cf_search="$cf_search $cf_header_path/intl/include/intl"
+}
+
+ cf_header_path_list="$cf_header_path_list $cf_search"
+ ;;
+ 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 "/usr" != "$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 "/usr/local" != "$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 "/opt" != "$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 "$HOME" != "$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}:7458: 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 7462 "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:7482: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:7485: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:7488: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:7491: \$? = $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}:7496: 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}:7514: 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 "/usr" != "$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 "/usr/local" != "$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 "/opt" != "$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 "$HOME" != "$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}:7611: 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 7617 "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:7637: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:7640: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:7643: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:7646: \$? = $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}:7651: 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
+ 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
+
+LIBS="$cf_save_LIBS"
+
+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:7691: 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 7731 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+int
+main ()
+{
+printf("Hello")
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:7743: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:7746: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:7749: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:7752: \$? = $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}:7769: 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}:7806: 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:7822: 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 7828 "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; /* workaround for ICC 12.0.3 */ if (f == 0) return 1;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:7859: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:7862: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:7865: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:7868: \$? = $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:7878: 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:7893: 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:7920: result: $MSGFMT" >&5
+echo "${ECHO_T}$MSGFMT" >&6
+else
+ echo "$as_me:7923: 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:7929: 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:7946: 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:7958: result: $GMSGFMT" >&5
+echo "${ECHO_T}$GMSGFMT" >&6
+else
+ echo "$as_me:7961: 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:7968: 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:7995: result: $XGETTEXT" >&5
+echo "${ECHO_T}$XGETTEXT" >&6
+else
+ echo "$as_me:7998: 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:8013: 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:8021: 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:8048: result: $MSGFMT" >&5
+echo "${ECHO_T}$MSGFMT" >&6
+else
+ echo "$as_me:8051: 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:8057: 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:8074: 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:8086: result: $GMSGFMT" >&5
+echo "${ECHO_T}$GMSGFMT" >&6
+else
+ echo "$as_me:8089: 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:8096: 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:8123: result: $XGETTEXT" >&5
+echo "${ECHO_T}$XGETTEXT" >&6
+else
+ echo "$as_me:8126: 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:8141: 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:8151: 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:8171: 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:8186: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+INTLBISON=$ac_cv_prog_INTLBISON
+if test -n "$INTLBISON"; then
+ echo "$as_me:8194: result: $INTLBISON" >&5
+echo "${ECHO_T}$INTLBISON" >&6
+else
+ echo "$as_me:8197: 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:8207: 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:8216: 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:8242: 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:8262: 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
+
+ INTL_LIBTOOL_SUFFIX_PREFIX=
+
+if test "$USE_NLS" = yes ; then
+
+# Check whether --with-textdomain or --without-textdomain was given.
+if test "${with_textdomain+set}" = set; then
+ withval="$with_textdomain"
+ NLS_TEXTDOMAIN=$withval
+else
+ NLS_TEXTDOMAIN=$PACKAGE
+fi;
+
+cat >>confdefs.h <<EOF
+#define NLS_TEXTDOMAIN "$NLS_TEXTDOMAIN"
+EOF
+
+fi
+
+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:8298: 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:8309: 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:8351: 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 8357 "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:8361: \"$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:8367: \$? = $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:8386: 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:8434: 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 8441 "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:8456: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:8459: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:8462: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:8465: \$? = $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:8475: 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:8484: 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:8501: 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:8595: 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 8601 "configure"
+#include "confdefs.h"
+#include <dmalloc.h>
+_ACEOF
+if { (eval echo "$as_me:8605: \"$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:8611: \$? = $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:8630: 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:8634: 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 8642 "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:8661: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:8664: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:8667: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:8670: \$? = $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:8681: 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:8696: 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:8713: 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:8807: 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 8813 "configure"
+#include "confdefs.h"
+#include <dbmalloc.h>
+_ACEOF
+if { (eval echo "$as_me:8817: \"$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:8823: \$? = $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:8842: 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:8846: 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 8854 "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:8873: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:8876: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:8879: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:8882: \$? = $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:8893: 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:8908: 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:8925: 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:9018: 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:9035: 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:9128: 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:9152: result: $with_no_leaks" >&5
+echo "${ECHO_T}$with_no_leaks" >&6
+
+echo "$as_me:9155: 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:9165: 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
+
+LD_RPATH_OPT=
+echo "$as_me:9179: 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].*|mirbsd*) #(vi
+ LD_RPATH_OPT="-Wl,-rpath,"
+ ;;
+dragonfly*|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:9210: result: $LD_RPATH_OPT" >&5
+echo "${ECHO_T}$LD_RPATH_OPT" >&6
+
+case "x$LD_RPATH_OPT" in #(vi
+x-R*)
+ echo "$as_me:9215: 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 9220 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:9232: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:9235: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:9238: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:9241: \$? = $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:9251: result: $cf_rpath_space" >&5
+echo "${ECHO_T}$cf_rpath_space" >&6
+ test "$cf_rpath_space" = yes && LD_RPATH_OPT="$LD_RPATH_OPT "
+ ;;
+esac
+
+REL_VERSION=${VERSION_MAJOR}.${VERSION_MINOR}
+ABI_VERSION=`echo "$VERSION" |sed -e 's/:/./g'`
+cf_cv_rel_version=$REL_VERSION
+
+test -z "$cf_cv_rel_version" && cf_cv_rel_version=0.0
+
+# Check whether --with-rel-version or --without-rel-version was given.
+if test "${with_rel_version+set}" = set; then
+ withval="$with_rel_version"
+ { echo "$as_me:9266: WARNING: overriding release version $cf_cv_rel_version to $withval" >&5
+echo "$as_me: WARNING: overriding release version $cf_cv_rel_version to $withval" >&2;}
+ cf_cv_rel_version=$withval
+fi;
+
+ DIALOG_MAJOR=`echo "$cf_cv_rel_version" | sed -e 's/\..*//'`
+ DIALOG_MINOR=`echo "$cf_cv_rel_version" | sed -e 's/^[^.]*//' -e 's/^\.//' -e 's/\..*//'`
+
+if test -n "$DIALOG_MAJOR" ; then
+ case $DIALOG_MAJOR in #(vi
+ [0-9]*) #(vi
+ ;;
+ *)
+ { { echo "$as_me:9279: error: Release major-version is not a number: $DIALOG_MAJOR" >&5
+echo "$as_me: error: Release major-version is not a number: $DIALOG_MAJOR" >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+ esac
+else
+ { { echo "$as_me:9285: error: Release major-version value is empty" >&5
+echo "$as_me: error: Release major-version value is empty" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+if test -n "$DIALOG_MINOR" ; then
+ case $DIALOG_MINOR in #(vi
+ [0-9]*) #(vi
+ ;;
+ *)
+ { { echo "$as_me:9295: error: Release minor-version is not a number: $DIALOG_MINOR" >&5
+echo "$as_me: error: Release minor-version is not a number: $DIALOG_MINOR" >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+ esac
+else
+ { { echo "$as_me:9301: error: Release minor-version value is empty" >&5
+echo "$as_me: error: Release minor-version value is empty" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+test -z "$cf_cv_abi_version" && cf_cv_abi_version=0
+
+# Check whether --with-abi-version or --without-abi-version was given.
+if test "${with_abi_version+set}" = set; then
+ withval="$with_abi_version"
+ { echo "$as_me:9311: WARNING: overriding ABI version $cf_cv_abi_version to $withval" >&5
+echo "$as_me: WARNING: overriding ABI version $cf_cv_abi_version to $withval" >&2;}
+ cf_cv_abi_version=$withval
+fi;
+
+if test -n "$cf_cv_abi_version" ; then
+ case $cf_cv_abi_version in #(vi
+ [0-9]*) #(vi
+ ;;
+ *)
+ { { echo "$as_me:9321: error: ABI version is not a number: $cf_cv_abi_version" >&5
+echo "$as_me: error: ABI version is not a number: $cf_cv_abi_version" >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+ esac
+else
+ { { echo "$as_me:9327: error: ABI version value is empty" >&5
+echo "$as_me: error: ABI version value is empty" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+LIB_MODEL=static
+DFT_LWR_MODEL=$LIB_MODEL
+LIBTOOL_MAKE="#"
+
+# use to comment-out makefile lines
+MAKE_NORMAL=
+MAKE_STATIC=
+MAKE_SHARED="#"
+
+echo "$as_me:9341: checking if libtool -version-number should be used" >&5
+echo $ECHO_N "checking if libtool -version-number should be used... $ECHO_C" >&6
+
+# Check whether --enable-libtool-version or --disable-libtool-version was given.
+if test "${enable_libtool_version+set}" = set; then
+ enableval="$enable_libtool_version"
+ test "$enableval" != no && enableval=yes
+ if test "$enableval" != "yes" ; then
+ cf_libtool_version=no
+ else
+ cf_libtool_version=yes
+ fi
+else
+ enableval=yes
+ cf_libtool_version=yes
+
+fi;
+echo "$as_me:9358: result: $cf_libtool_version" >&5
+echo "${ECHO_T}$cf_libtool_version" >&6
+
+if test "$cf_libtool_version" = yes ; then
+ LIBTOOL_VERSION="-version-number"
+else
+ LIBTOOL_VERSION="-version-info"
+fi
+
+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:9383: 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:9393: 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}*|.\${*dir}*) #(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:9424: 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
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in libtool glibtool
+ 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:9437: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_LIBTOOL+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$LIBTOOL"; then
+ ac_cv_prog_LIBTOOL="$LIBTOOL" # 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_LIBTOOL="$ac_tool_prefix$ac_prog"
+echo "$as_me:9452: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+LIBTOOL=$ac_cv_prog_LIBTOOL
+if test -n "$LIBTOOL"; then
+ echo "$as_me:9460: result: $LIBTOOL" >&5
+echo "${ECHO_T}$LIBTOOL" >&6
+else
+ echo "$as_me:9463: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$LIBTOOL" && break
+ done
+fi
+if test -z "$LIBTOOL"; then
+ ac_ct_LIBTOOL=$LIBTOOL
+ for ac_prog in libtool glibtool
+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:9476: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_LIBTOOL+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_LIBTOOL"; then
+ ac_cv_prog_ac_ct_LIBTOOL="$ac_ct_LIBTOOL" # 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_LIBTOOL="$ac_prog"
+echo "$as_me:9491: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ac_ct_LIBTOOL=$ac_cv_prog_ac_ct_LIBTOOL
+if test -n "$ac_ct_LIBTOOL"; then
+ echo "$as_me:9499: result: $ac_ct_LIBTOOL" >&5
+echo "${ECHO_T}$ac_ct_LIBTOOL" >&6
+else
+ echo "$as_me:9502: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_LIBTOOL" && break
+done
+test -n "$ac_ct_LIBTOOL" || ac_ct_LIBTOOL="none"
+
+ LIBTOOL=$ac_ct_LIBTOOL
+fi
+
+if test -n "$LIBTOOL" && test "$LIBTOOL" != none
+then
+ 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.].*//'`
+else
+ cf_cv_libtool_version=
+fi
+test -z "$cf_cv_libtool_version" && unset cf_cv_libtool_version
+
+ if test -z "$cf_cv_libtool_version" && test "$LIBTOOL" = libtool
+ then
+
+unset ac_cv_prog_ac_ct_LIBTOOL
+unset ac_ct_LIBTOOL
+unset LIBTOOL
+
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in glibtool
+ 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:9533: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_LIBTOOL+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$LIBTOOL"; then
+ ac_cv_prog_LIBTOOL="$LIBTOOL" # 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_LIBTOOL="$ac_tool_prefix$ac_prog"
+echo "$as_me:9548: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+LIBTOOL=$ac_cv_prog_LIBTOOL
+if test -n "$LIBTOOL"; then
+ echo "$as_me:9556: result: $LIBTOOL" >&5
+echo "${ECHO_T}$LIBTOOL" >&6
+else
+ echo "$as_me:9559: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$LIBTOOL" && break
+ done
+fi
+if test -z "$LIBTOOL"; then
+ ac_ct_LIBTOOL=$LIBTOOL
+ for ac_prog in glibtool
+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:9572: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_LIBTOOL+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_LIBTOOL"; then
+ ac_cv_prog_ac_ct_LIBTOOL="$ac_ct_LIBTOOL" # 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_LIBTOOL="$ac_prog"
+echo "$as_me:9587: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ac_ct_LIBTOOL=$ac_cv_prog_ac_ct_LIBTOOL
+if test -n "$ac_ct_LIBTOOL"; then
+ echo "$as_me:9595: result: $ac_ct_LIBTOOL" >&5
+echo "${ECHO_T}$ac_ct_LIBTOOL" >&6
+else
+ echo "$as_me:9598: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_LIBTOOL" && break
+done
+test -n "$ac_ct_LIBTOOL" || ac_ct_LIBTOOL="none"
+
+ LIBTOOL=$ac_ct_LIBTOOL
+fi
+
+if test -n "$LIBTOOL" && test "$LIBTOOL" != none
+then
+ 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.].*//'`
+else
+ cf_cv_libtool_version=
+fi
+test -z "$cf_cv_libtool_version" && unset cf_cv_libtool_version
+
+ fi
+ fi
+ if test -z "$LIBTOOL" ; then
+ { { echo "$as_me:9620: 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} ${LIBTOOL_VERSION} `cut -f1 ${srcdir}/VERSION` ${LIBTOOL_OPTS} ${LT_UNDEF} $(LIBS) -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=:
+
+if test -n "$LIBTOOL" && test "$LIBTOOL" != none
+then
+ echo "$as_me:9636: checking version of $LIBTOOL" >&5
+echo $ECHO_N "checking version of $LIBTOOL... $ECHO_C" >&6
+
+if test -n "$LIBTOOL" && test "$LIBTOOL" != none
+then
+ 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.].*//'`
+else
+ cf_cv_libtool_version=
+fi
+test -z "$cf_cv_libtool_version" && unset cf_cv_libtool_version
+
+ echo "$as_me:9647: 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:9650: error: This is not GNU libtool" >&5
+echo "$as_me: error: This is not GNU libtool" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+else
+ { { echo "$as_me:9655: error: GNU libtool has not been found" >&5
+echo "$as_me: error: GNU libtool has not been found" >&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*|msys*|mingw32*|uwin*|aix[4-7]) #(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=
+
+LIB_CREATE="$LIB_CREATE \$@"
+
+if test "$with_libtool" = "yes" ; then
+ OBJEXT="lo"
+ LIB_MODEL=libtool
+ DFT_LWR_MODEL=$LIB_MODEL
+ LIBTOOL_MAKE=
+
+echo "$as_me:9693: 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:9703: 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
+
+ MAKE_NORMAL="#"
+ MAKE_STATIC="#"
+ MAKE_SHARED=
+else
+ echo "$as_me:9718: checking if you want to build shared libraries" >&5
+echo $ECHO_N "checking if you want to build shared libraries... $ECHO_C" >&6
+
+# Check whether --with-shared or --without-shared was given.
+if test "${with_shared+set}" = set; then
+ withval="$with_shared"
+ with_shared=$withval
+else
+ with_shared=no
+fi;
+ echo "$as_me:9728: result: $with_shared" >&5
+echo "${ECHO_T}$with_shared" >&6
+ if test "$with_shared" = "yes" ; then
+ LIB_MODEL=shared
+ DFT_LWR_MODEL=$LIB_MODEL
+
+ RM_SHARED_OPTS=
+ LOCAL_LDFLAGS=
+ LOCAL_LDFLAGS2=
+ LD_SHARED_OPTS=
+ INSTALL_LIB="-m 644"
+ : ${rel_builddir:=.}
+
+ cf_cv_do_symlinks=no
+ cf_ld_rpath_opt=
+ test "$cf_cv_enable_rpath" = yes && cf_ld_rpath_opt="$LD_RPATH_OPT"
+
+ echo "$as_me:9745: checking if release/abi version should be used for shared libs" >&5
+echo $ECHO_N "checking if release/abi version should be used for shared libs... $ECHO_C" >&6
+
+# Check whether --with-shlib-version or --without-shlib-version was given.
+if test "${with_shlib_version+set}" = set; then
+ withval="$with_shlib_version"
+ test -z "$withval" && withval=auto
+ case $withval in #(vi
+ yes) #(vi
+ cf_cv_shlib_version=auto
+ ;;
+ rel|abi|auto|no) #(vi
+ cf_cv_shlib_version=$withval
+ ;;
+ *)
+ { { echo "$as_me:9760: error: option value must be one of: rel, abi, auto or no" >&5
+echo "$as_me: error: option value must be one of: rel, abi, auto or no" >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+ esac
+
+else
+ cf_cv_shlib_version=auto
+fi;
+ echo "$as_me:9769: result: $cf_cv_shlib_version" >&5
+echo "${ECHO_T}$cf_cv_shlib_version" >&6
+
+ cf_cv_rm_so_locs=no
+ cf_try_cflags=
+
+ # Some less-capable ports of gcc support only -fpic
+ CC_SHARED_OPTS=
+ if test "$GCC" = yes
+ then
+ echo "$as_me:9779: checking which $CC option to use" >&5
+echo $ECHO_N "checking which $CC option to use... $ECHO_C" >&6
+ cf_save_CFLAGS="$CFLAGS"
+ for CC_SHARED_OPTS in -fPIC -fpic ''
+ do
+ CFLAGS="$cf_save_CFLAGS $CC_SHARED_OPTS"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 9786 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+int
+main ()
+{
+int x = 1
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:9798: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:9801: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:9804: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:9807: \$? = $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
+ echo "$as_me:9816: result: $CC_SHARED_OPTS" >&5
+echo "${ECHO_T}$CC_SHARED_OPTS" >&6
+ CFLAGS="$cf_save_CFLAGS"
+ fi
+
+ cf_cv_shlib_version_infix=no
+
+ case $cf_cv_system_name in #(vi
+ aix4.3-9*|aix[5-7]*) #(vi
+ if test "$GCC" = yes; then
+ CC_SHARED_OPTS=
+ MK_SHARED_LIB='${CC} -shared -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o $@'
+ else
+ # CC_SHARED_OPTS='-qpic=large -G'
+ # perhaps "-bM:SRE -bnoentry -bexpall"
+ MK_SHARED_LIB='${CC} -G -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o $@'
+ fi
+ ;;
+ beos*) #(vi
+ MK_SHARED_LIB='${CC} ${CFLAGS} -o $@ -Xlinker -soname=`basename $@` -nostart -e 0'
+ ;;
+ cygwin*) #(vi
+ CC_SHARED_OPTS=
+ MK_SHARED_LIB='sh '$rel_builddir'/mk_shared_lib.sh $@ ${CC} ${CFLAGS}'
+ RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a"
+ cf_cv_shlib_version=cygdll
+ cf_cv_shlib_version_infix=cygdll
+ cat >mk_shared_lib.sh <<-CF_EOF
+ #!/bin/sh
+ SHARED_LIB=\$1
+ IMPORT_LIB=\`echo "\$1" | sed -e 's/cyg/lib/' -e 's/[0-9]*\.dll$/.dll.a/'\`
+ shift
+ cat <<-EOF
+ Linking shared library
+ ** SHARED_LIB \$SHARED_LIB
+ ** IMPORT_LIB \$IMPORT_LIB
+EOF
+ exec \$* -shared -Wl,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB}
+CF_EOF
+ chmod +x mk_shared_lib.sh
+ ;;
+ msys*) #(vi
+ CC_SHARED_OPTS=
+ MK_SHARED_LIB='sh '$rel_builddir'/mk_shared_lib.sh $@ ${CC} ${CFLAGS}'
+ RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a"
+ cf_cv_shlib_version=msysdll
+ cf_cv_shlib_version_infix=msysdll
+ cat >mk_shared_lib.sh <<-CF_EOF
+ #!/bin/sh
+ SHARED_LIB=\$1
+ IMPORT_LIB=\`echo "\$1" | sed -e 's/msys-/lib/' -e 's/[0-9]*\.dll$/.dll.a/'\`
+ shift
+ cat <<-EOF
+ Linking shared library
+ ** SHARED_LIB \$SHARED_LIB
+ ** IMPORT_LIB \$IMPORT_LIB
+EOF
+ exec \$* -shared -Wl,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB}
+CF_EOF
+ chmod +x mk_shared_lib.sh
+ ;;
+ darwin*) #(vi
+ cf_try_cflags="no-cpp-precomp"
+ CC_SHARED_OPTS="-dynamic"
+ MK_SHARED_LIB='${CC} ${CFLAGS} -dynamiclib -install_name ${libdir}/`basename $@` -compatibility_version ${ABI_VERSION} -current_version ${ABI_VERSION} -o $@'
+ test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=abi
+ cf_cv_shlib_version_infix=yes
+ echo "$as_me:9883: checking if ld -search_paths_first works" >&5
+echo $ECHO_N "checking if ld -search_paths_first works... $ECHO_C" >&6
+if test "${cf_cv_ldflags_search_paths_first+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ cf_save_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 9892 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+int i;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:9904: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:9907: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:9910: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:9913: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cf_cv_ldflags_search_paths_first=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+cf_cv_ldflags_search_paths_first=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$cf_save_LDFLAGS
+fi
+echo "$as_me:9924: result: $cf_cv_ldflags_search_paths_first" >&5
+echo "${ECHO_T}$cf_cv_ldflags_search_paths_first" >&6
+ if test $cf_cv_ldflags_search_paths_first = yes; then
+ LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
+ fi
+ ;;
+ hpux[7-8]*) #(vi
+ # HP-UX 8.07 ld lacks "+b" option used for libdir search-list
+ if test "$GCC" != yes; then
+ CC_SHARED_OPTS='+Z'
+ fi
+ MK_SHARED_LIB='${LD} -b -o $@'
+ INSTALL_LIB="-m 555"
+ ;;
+ hpux*) #(vi
+ # (tested with gcc 2.7.2 -- I don't have c89)
+ if test "$GCC" = yes; then
+ LD_SHARED_OPTS='-Xlinker +b -Xlinker ${libdir}'
+ else
+ CC_SHARED_OPTS='+Z'
+ LD_SHARED_OPTS='-Wl,+b,${libdir}'
+ fi
+ MK_SHARED_LIB='${LD} +b ${libdir} -b -o $@'
+ # HP-UX shared libraries must be executable, and should be
+ # readonly to exploit a quirk in the memory manager.
+ INSTALL_LIB="-m 555"
+ ;;
+ interix*)
+ test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
+ if test "$cf_cv_shlib_version" = rel; then
+ cf_shared_soname='`basename .${REL_VERSION}`.${ABI_VERSION}'
+ else
+ cf_shared_soname='`basename `'
+ fi
+ CC_SHARED_OPTS=
+ MK_SHARED_LIB='${CC} -shared -Wl,-rpath,${RPATH_LIST} -Wl,-h,'$cf_shared_soname' -o '
+ ;;
+ irix*) #(vi
+ if test "$cf_cv_enable_rpath" = yes ; then
+ EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS"
+ fi
+ # tested with IRIX 5.2 and 'cc'.
+ if test "$GCC" != yes; then
+ CC_SHARED_OPTS='-KPIC'
+ MK_SHARED_LIB='${CC} -shared -rdata_shared -soname `basename $@` -o $@'
+ else
+ MK_SHARED_LIB='${CC} -shared -Wl,-soname,`basename $@` -o $@'
+ fi
+ cf_cv_rm_so_locs=yes
+ ;;
+ linux*|gnu*|k*bsd*-gnu) #(vi
+ if test "$DFT_LWR_MODEL" = "shared" ; then
+ LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)"
+ LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
+ fi
+ if test "$cf_cv_enable_rpath" = yes ; then
+ EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS"
+ fi
+
+ test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
+ if test "$cf_cv_shlib_version" = rel; then
+ cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}'
+ else
+ cf_cv_shared_soname='`basename $@`'
+ fi
+
+ MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@'
+ ;;
+ mingw*) #(vi
+ cf_cv_shlib_version=mingw
+ cf_cv_shlib_version_infix=mingw
+ if test "$DFT_LWR_MODEL" = "shared" ; then
+ LOCAL_LDFLAGS="-Wl,--enable-auto-import"
+ LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
+ EXTRA_LDFLAGS="-Wl,--enable-auto-import $EXTRA_LDFLAGS"
+ fi
+ CC_SHARED_OPTS=
+ MK_SHARED_LIB='sh '$rel_builddir'/mk_shared_lib.sh $@ ${CC} ${CFLAGS}'
+ RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a"
+ cat >mk_shared_lib.sh <<-CF_EOF
+ #!/bin/sh
+ SHARED_LIB=\$1
+ IMPORT_LIB=\`echo "\$1" | sed -e 's/[0-9]*\.dll$/.dll.a/'\`
+ shift
+ cat <<-EOF
+ Linking shared library
+ ** SHARED_LIB \$SHARED_LIB
+ ** IMPORT_LIB \$IMPORT_LIB
+EOF
+ exec \$* -shared -Wl,--enable-auto-import,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB}
+CF_EOF
+ chmod +x mk_shared_lib.sh
+ ;;
+ openbsd[2-9].*|mirbsd*) #(vi
+ if test "$DFT_LWR_MODEL" = "shared" ; then
+ LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)"
+ LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
+ fi
+ if test "$cf_cv_enable_rpath" = yes ; then
+ EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS"
+ fi
+ CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC"
+
+ test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
+ if test "$cf_cv_shlib_version" = rel; then
+ cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}'
+ else
+ cf_cv_shared_soname='`basename $@`'
+ fi
+
+ MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-Bshareable,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@'
+ ;;
+ nto-qnx*|openbsd*|freebsd[12].*) #(vi
+ CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC"
+ MK_SHARED_LIB='${LD} -Bshareable -o $@'
+ test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
+ ;;
+ dragonfly*|freebsd*) #(vi
+ CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC"
+ if test "$DFT_LWR_MODEL" = "shared" && test "$cf_cv_enable_rpath" = yes ; then
+ LOCAL_LDFLAGS="${cf_ld_rpath_opt}\$(LOCAL_LIBDIR)"
+ LOCAL_LDFLAGS2="${cf_ld_rpath_opt}\${RPATH_LIST} $LOCAL_LDFLAGS"
+ EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS"
+ fi
+
+ test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
+ if test "$cf_cv_shlib_version" = rel; then
+ cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}'
+ else
+ cf_cv_shared_soname='`basename $@`'
+ fi
+
+ MK_SHARED_LIB='${LD} -shared -Bshareable -soname=`basename $@` -o $@'
+ ;;
+ netbsd*) #(vi
+ CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC"
+ if test "$DFT_LWR_MODEL" = "shared" && test "$cf_cv_enable_rpath" = yes ; then
+ LOCAL_LDFLAGS="${cf_ld_rpath_opt}\$(LOCAL_LIBDIR)"
+ LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
+ EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS"
+ if test "$cf_cv_shlib_version" = auto; then
+ if test -f /usr/libexec/ld.elf_so; then
+ cf_cv_shlib_version=abi
+ else
+ cf_cv_shlib_version=rel
+ fi
+ fi
+
+ test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
+ if test "$cf_cv_shlib_version" = rel; then
+ cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}'
+ else
+ cf_cv_shared_soname='`basename $@`'
+ fi
+
+ MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname' -o $@'
+ else
+ MK_SHARED_LIB='${CC} -Wl,-shared -Wl,-Bshareable -o $@'
+ fi
+ ;;
+ osf*|mls+*) #(vi
+ # tested with OSF/1 V3.2 and 'cc'
+ # tested with OSF/1 V3.2 and gcc 2.6.3 (but the c++ demo didn't
+ # link with shared libs).
+ MK_SHARED_LIB='${LD} -set_version ${REL_VERSION}:${ABI_VERSION} -expect_unresolved "*" -shared -soname `basename $@`'
+ case $host_os in #(vi
+ osf4*)
+ MK_SHARED_LIB="${MK_SHARED_LIB} -msym"
+ ;;
+ esac
+ MK_SHARED_LIB="${MK_SHARED_LIB}"' -o $@'
+ if test "$DFT_LWR_MODEL" = "shared" ; then
+ LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)"
+ LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
+ fi
+ cf_cv_rm_so_locs=yes
+ ;;
+ sco3.2v5*) # (also uw2* and UW7: hops 13-Apr-98
+ # tested with osr5.0.5
+ if test "$GCC" != yes; then
+ CC_SHARED_OPTS='-belf -KPIC'
+ fi
+ MK_SHARED_LIB='${LD} -dy -G -h `basename $@ .${REL_VERSION}`.${ABI_VERSION} -o $@'
+ if test "$cf_cv_enable_rpath" = yes ; then
+ # only way is to set LD_RUN_PATH but no switch for it
+ RUN_PATH=$libdir
+ fi
+ test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
+ LINK_PROGS='LD_RUN_PATH=${libdir}'
+ LINK_TESTS='Pwd=`pwd`;LD_RUN_PATH=`dirname $${Pwd}`/lib'
+ ;;
+ sunos4*) #(vi
+ # tested with SunOS 4.1.1 and gcc 2.7.0
+ if test "$GCC" != yes; then
+ CC_SHARED_OPTS='-KPIC'
+ fi
+ MK_SHARED_LIB='${LD} -assert pure-text -o $@'
+ test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
+ ;;
+ solaris2*) #(vi
+ # tested with SunOS 5.5.1 (solaris 2.5.1) and gcc 2.7.2
+ # tested with SunOS 5.10 (solaris 10) and gcc 3.4.3
+ if test "$DFT_LWR_MODEL" = "shared" ; then
+ LOCAL_LDFLAGS="-R \$(LOCAL_LIBDIR):\${libdir}"
+ LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
+ fi
+ if test "$cf_cv_enable_rpath" = yes ; then
+ EXTRA_LDFLAGS="-R \${libdir} $EXTRA_LDFLAGS"
+ fi
+
+ test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
+ if test "$cf_cv_shlib_version" = rel; then
+ cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}'
+ else
+ cf_cv_shared_soname='`basename $@`'
+ fi
+
+ if test "$GCC" != yes; then
+ cf_save_CFLAGS="$CFLAGS"
+ for cf_shared_opts in -xcode=pic32 -xcode=pic13 -KPIC -Kpic -O
+ do
+ CFLAGS="$cf_shared_opts $cf_save_CFLAGS"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 10147 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+int
+main ()
+{
+printf("Hello\n");
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:10159: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:10162: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:10165: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:10168: \$? = $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
+ CFLAGS="$cf_save_CFLAGS"
+ CC_SHARED_OPTS=$cf_shared_opts
+ MK_SHARED_LIB='${CC} -dy -G -h '$cf_cv_shared_soname' -o $@'
+ else
+ MK_SHARED_LIB='${CC} -shared -dy -G -h '$cf_cv_shared_soname' -o $@'
+ fi
+ ;;
+ sysv5uw7*|unix_sv*) #(vi
+ # tested with UnixWare 7.1.0 (gcc 2.95.2 and cc)
+ if test "$GCC" != yes; then
+ CC_SHARED_OPTS='-KPIC'
+ fi
+ MK_SHARED_LIB='${LD} -d y -G -o $@'
+ ;;
+ *)
+ CC_SHARED_OPTS='unknown'
+ MK_SHARED_LIB='echo unknown'
+ ;;
+ esac
+
+ # This works if the last tokens in $MK_SHARED_LIB are the -o target.
+ case "$cf_cv_shlib_version" in #(vi
+ rel|abi)
+ case "$MK_SHARED_LIB" in #(vi
+ *'-o $@') #(vi
+ test "$cf_cv_do_symlinks" = no && cf_cv_do_symlinks=yes
+ ;;
+ *)
+ { echo "$as_me:10205: WARNING: ignored --with-shlib-version" >&5
+echo "$as_me: WARNING: ignored --with-shlib-version" >&2;}
+ ;;
+ esac
+ ;;
+ esac
+
+ if test -n "$cf_try_cflags"
+ then
+cat > conftest.$ac_ext <<EOF
+#line 10215 "${as_me:-configure}"
+#include <stdio.h>
+int main(int argc, char *argv[])
+{
+ printf("hello\n");
+ return (argv[argc-1] == 0) ;
+}
+EOF
+ cf_save_CFLAGS="$CFLAGS"
+ for cf_opt in $cf_try_cflags
+ do
+ CFLAGS="$cf_save_CFLAGS -$cf_opt"
+ echo "$as_me:10227: checking if CFLAGS option -$cf_opt works" >&5
+echo $ECHO_N "checking if CFLAGS option -$cf_opt works... $ECHO_C" >&6
+ if { (eval echo "$as_me:10229: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:10232: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ echo "$as_me:10234: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ cf_save_CFLAGS="$CFLAGS"
+ else
+ echo "$as_me:10238: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
+ done
+ CFLAGS="$cf_save_CFLAGS"
+ fi
+
+ # RPATH_LIST is a colon-separated list of directories
+ test -n "$cf_ld_rpath_opt" && MK_SHARED_LIB="$MK_SHARED_LIB $cf_ld_rpath_opt\${RPATH_LIST}"
+ test -z "$RPATH_LIST" && RPATH_LIST="\${libdir}"
+
+ test $cf_cv_rm_so_locs = yes && RM_SHARED_OPTS="$RM_SHARED_OPTS so_locations"
+
+ test -n "$verbose" && echo " CC_SHARED_OPTS: $CC_SHARED_OPTS" 1>&6
+
+echo "${as_me:-configure}:10253: testing CC_SHARED_OPTS: $CC_SHARED_OPTS ..." 1>&5
+
+ test -n "$verbose" && echo " MK_SHARED_LIB: $MK_SHARED_LIB" 1>&6
+
+echo "${as_me:-configure}:10257: testing MK_SHARED_LIB: $MK_SHARED_LIB ..." 1>&5
+
+ LIB_PREP=:
+ LIB_CREATE="$MK_SHARED_LIB"
+ CFLAGS="$CFLAGS $CC_SHARED_OPTS"
+ MAKE_NORMAL="#"
+ MAKE_STATIC="#"
+ MAKE_SHARED=
+ fi
+fi
+
+LIB_SUFFIX=
+
+ case X$LIB_MODEL in #(vi
+ Xlibtool) #(vi
+ DFT_LIB_SUFFIX='.la'
+ DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX
+ ;;
+ Xdebug) #(vi
+ DFT_LIB_SUFFIX='_g.a'
+ DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX
+ ;;
+ Xprofile) #(vi
+ DFT_LIB_SUFFIX='_p.a'
+ DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX
+ ;;
+ Xshared) #(vi
+ case $cf_cv_system_name in
+ aix[5-7]*) #(vi
+ DFT_LIB_SUFFIX='.a'
+ DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX
+ ;;
+ cygwin*|msys*|mingw*) #(vi
+ DFT_LIB_SUFFIX='.dll'
+ DFT_DEP_SUFFIX='.dll.a'
+ ;;
+ darwin*) #(vi
+ DFT_LIB_SUFFIX='.dylib'
+ DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX
+ ;;
+ hpux*) #(vi
+ case $target in
+ ia64*) #(vi
+ DFT_LIB_SUFFIX='.so'
+ DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX
+ ;;
+ *) #(vi
+ DFT_LIB_SUFFIX='.sl'
+ DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX
+ ;;
+ esac
+ ;;
+ *) #(vi
+ DFT_LIB_SUFFIX='.so'
+ DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX
+ ;;
+ esac
+ ;;
+ *)
+ DFT_LIB_SUFFIX='.a'
+ DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX
+ ;;
+ esac
+ test -n "$LIB_SUFFIX" && DFT_LIB_SUFFIX="${LIB_SUFFIX}${DFT_LIB_SUFFIX}"
+ test -n "$LIB_SUFFIX" && DFT_DEP_SUFFIX="${LIB_SUFFIX}${DFT_DEP_SUFFIX}"
+
+LIB_SUFFIX=$DFT_LIB_SUFFIX
+
+echo "$as_me:10325: checking for specific curses-directory" >&5
+echo $ECHO_N "checking for specific curses-directory... $ECHO_C" >&6
+
+# Check whether --with-curses-dir or --without-curses-dir was given.
+if test "${with_curses_dir+set}" = set; then
+ withval="$with_curses_dir"
+ cf_cv_curses_dir=$withval
+else
+ cf_cv_curses_dir=no
+fi;
+echo "$as_me:10335: result: $cf_cv_curses_dir" >&5
+echo "${ECHO_T}$cf_cv_curses_dir" >&6
+
+if ( test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" )
+then
+
+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}*|.\${*dir}*) #(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:10366: error: expected a pathname, not \"$withval\"" >&5
+echo "$as_me: error: expected a pathname, not \"$withval\"" >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+esac
+
+ if test -d "$cf_cv_curses_dir"
+ then
+
+if test -n "$cf_cv_curses_dir/include" ; then
+ for cf_add_incdir in $cf_cv_curses_dir/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 10399 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+int
+main ()
+{
+printf("Hello")
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:10411: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:10414: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:10417: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:10420: \$? = $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}:10437: 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_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}:10471: 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:10482: checking if rpath option should be used" >&5
+echo $ECHO_N "checking if rpath option should be used... $ECHO_C" >&6
+
+# Check whether --enable-rpath or --disable-rpath was given.
+if test "${enable_rpath+set}" = set; then
+ enableval="$enable_rpath"
+ cf_cv_enable_rpath=$enableval
+else
+ cf_cv_enable_rpath=no
+fi;
+echo "$as_me:10492: result: $cf_cv_enable_rpath" >&5
+echo "${ECHO_T}$cf_cv_enable_rpath" >&6
+
+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:10512: 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 10520 "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:10533: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:10536: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (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_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}:10554: testing Starting FIND_LINKAGE(utf8,) ..." 1>&5
+
+cf_save_LIBS="$LIBS"
+
+cat >conftest.$ac_ext <<_ACEOF
+#line 10559 "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:10572: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:10575: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:10578: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:10581: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+
+ cf_cv_find_linkage_utf8=yes
+ cf_cv_header_path_utf8=/usr/include
+ cf_cv_library_path_utf8=/usr/lib
+
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+
+LIBS="-lutf8 $cf_save_LIBS"
+
+cat >conftest.$ac_ext <<_ACEOF
+#line 10595 "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:10608: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:10611: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:10614: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:10617: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+
+ cf_cv_find_linkage_utf8=yes
+ cf_cv_header_path_utf8=/usr/include
+ cf_cv_library_path_utf8=/usr/lib
+ 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}:10634: testing find linkage for utf8 library ..." 1>&5
+
+echo "${as_me:-configure}:10636: 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$,,'`
+
+test "$cf_header_path" != "NONE" && \
+test -d "$cf_header_path" && \
+ {
+ test -n "$verbose" && echo " ... testing for include-directories under $cf_header_path"
+ test -d $cf_header_path/include && cf_search="$cf_search $cf_header_path/include"
+ test -d $cf_header_path/include/utf8 && cf_search="$cf_search $cf_header_path/include/utf8"
+ test -d $cf_header_path/include/utf8/include && cf_search="$cf_search $cf_header_path/include/utf8/include"
+ test -d $cf_header_path/utf8/include && cf_search="$cf_search $cf_header_path/utf8/include"
+ test -d $cf_header_path/utf8/include/utf8 && cf_search="$cf_search $cf_header_path/utf8/include/utf8"
+}
+
+ cf_header_path_list="$cf_header_path_list $cf_search"
+ ;;
+ 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 "/usr" != "$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 "/usr/local" != "$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 "/opt" != "$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 "$HOME" != "$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}:10749: 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 10753 "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:10766: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:10769: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:10772: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:10775: \$? = $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}:10780: 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}:10798: 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 "/usr" != "$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 "/usr/local" != "$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 "/opt" != "$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 "$HOME" != "$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}:10895: 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 10901 "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:10914: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:10917: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:10920: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:10923: \$? = $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}:10928: 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
+ 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
+
+LIBS="$cf_save_LIBS"
+
+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:10970: 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 11005 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+int
+main ()
+{
+printf("Hello")
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:11017: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:11020: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:11023: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:11026: \$? = $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}:11043: 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}:11077: 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
+
+cf_ncuconfig_root=$use_ncurses
+
+echo "Looking for ${cf_ncuconfig_root}-config"
+
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config
+ 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:11099: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_NCURSES_CONFIG+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$NCURSES_CONFIG"; then
+ ac_cv_prog_NCURSES_CONFIG="$NCURSES_CONFIG" # 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_NCURSES_CONFIG="$ac_tool_prefix$ac_prog"
+echo "$as_me:11114: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+NCURSES_CONFIG=$ac_cv_prog_NCURSES_CONFIG
+if test -n "$NCURSES_CONFIG"; then
+ echo "$as_me:11122: result: $NCURSES_CONFIG" >&5
+echo "${ECHO_T}$NCURSES_CONFIG" >&6
+else
+ echo "$as_me:11125: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$NCURSES_CONFIG" && break
+ done
+fi
+if test -z "$NCURSES_CONFIG"; then
+ ac_ct_NCURSES_CONFIG=$NCURSES_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:11138: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_NCURSES_CONFIG+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_NCURSES_CONFIG"; then
+ ac_cv_prog_ac_ct_NCURSES_CONFIG="$ac_ct_NCURSES_CONFIG" # 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_NCURSES_CONFIG="$ac_prog"
+echo "$as_me:11153: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ac_ct_NCURSES_CONFIG=$ac_cv_prog_ac_ct_NCURSES_CONFIG
+if test -n "$ac_ct_NCURSES_CONFIG"; then
+ echo "$as_me:11161: result: $ac_ct_NCURSES_CONFIG" >&5
+echo "${ECHO_T}$ac_ct_NCURSES_CONFIG" >&6
+else
+ echo "$as_me:11164: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_NCURSES_CONFIG" && break
+done
+test -n "$ac_ct_NCURSES_CONFIG" || ac_ct_NCURSES_CONFIG="none"
+
+ NCURSES_CONFIG=$ac_ct_NCURSES_CONFIG
+fi
+
+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:11182: 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/ncurses.h \
+ $use_ncurses/curses.h \
+ ncurses.h \
+ curses.h
+do
+cat >conftest.$ac_ext <<_ACEOF
+#line 11196 "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:11208: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:11211: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:11214: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:11217: \$? = $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:11228: 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:11232: 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:11242: 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 11248 "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:11252: \"$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:11258: \$? = $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:11277: 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_ncuhdr_root" ; then
+ for cf_add_incdir in $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 11330 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+int
+main ()
+{
+printf("Hello")
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:11342: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:11345: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:11348: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:11351: \$? = $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}:11368: 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:11385: 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 11397 "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:11421: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:11424: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:11427: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:11430: \$? = $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:11445: 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:11452: 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$,,'`
+
+test "$cf_header_path" != "NONE" && \
+test -d "$cf_header_path" && \
+ {
+ test -n "$verbose" && echo " ... testing for include-directories under $cf_header_path"
+ test -d $cf_header_path/include && cf_search="$cf_search $cf_header_path/include"
+ test -d $cf_header_path/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_header_path/include/$cf_ncuhdr_root"
+ test -d $cf_header_path/include/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_header_path/include/$cf_ncuhdr_root/include"
+ test -d $cf_header_path/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_header_path/$cf_ncuhdr_root/include"
+ test -d $cf_header_path/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_header_path/$cf_ncuhdr_root/include/$cf_ncuhdr_root"
+}
+
+ cf_header_path_list="$cf_header_path_list $cf_search"
+ ;;
+ 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 "/usr" != "$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 "/usr/local" != "$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 "/opt" != "$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 "$HOME" != "$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 11592 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+int
+main ()
+{
+printf("Hello")
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:11604: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:11607: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:11610: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:11613: \$? = $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}:11630: 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 11651 "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:11675: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:11678: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:11681: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:11684: \$? = $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:11705: error: not found" >&5
+echo "$as_me: error: not found" >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:11710: 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 11743 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+int
+main ()
+{
+printf("Hello")
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:11755: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:11758: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:11761: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:11764: \$? = $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}:11781: 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:11827: 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 11845 "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:11860: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:11863: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:11866: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:11869: \$? = $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:11885: 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:11923: 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:11949: \"$cf_try\"") >&5
+ (eval $cf_try) 2>&5
+ ac_status=$?
+ echo "$as_me:11952: \$? = $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 11962 "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:11987: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:11990: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:11992: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:11995: \$? = $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:12009: 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:12022: 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 12030 "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:12049: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:12052: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:12055: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:12058: \$? = $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:12069: 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:12072: 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 12080 "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:12099: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:12102: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:12105: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:12108: \$? = $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:12119: 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:12134: 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 12142 "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:12161: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:12164: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:12167: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:12170: \$? = $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:12181: 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
+ LIBS="-l$cf_nculib_root $LIBS"
+else
+
+ eval 'cf_cv_have_lib_'$cf_nculib_root'=no'
+ cf_libdir=""
+ echo "$as_me:12200: 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 12206 "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; /* workaround for ICC 12.0.3 */ if (f == 0) return 1;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:12237: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:12240: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:12243: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:12246: \$? = $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:12256: 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:12263: 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 12267 "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:12279: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:12282: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:12285: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:12288: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ echo "$as_me:12290: 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:12297: 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 "/usr" != "$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 "/usr/local" != "$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 "/opt" != "$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 "$HOME" != "$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:12387: 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 12391 "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:12403: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:12406: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:12409: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:12412: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ echo "$as_me:12414: 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:12421: 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:12436: 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:12444: 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 12454 "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:12466: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:12469: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:12472: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:12475: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ echo "$as_me:12477: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+echo "$as_me:12482: 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:12500: 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
+ if test "x$cf_cv_screen" = "xcurses_colr"
+ then
+ test -d /usr/include/curses_colr && \
+ cf_cv_curses_incdir="-I/usr/include/curses_colr"
+ fi
+ ;;
+sunos3*|sunos4*)
+ if test "x$cf_cv_screen" = "xcurses_5lib"
+ then
+ test -d /usr/5lib && \
+ test -d /usr/5include && \
+ cf_cv_curses_incdir="-I/usr/5include"
+ fi
+ ;;
+esac
+
+fi
+echo "$as_me:12526: 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:12530: 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 \
+ ncurses.h \
+ curses.h ncurses/ncurses.h ncurses/curses.h
+do
+cat >conftest.$ac_ext <<_ACEOF
+#line 12542 "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:12554: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:12557: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:12560: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:12563: \$? = $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:12574: 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:12578: 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:12588: 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 12594 "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:12598: \"$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:12604: \$? = $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:12623: 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:12633: 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 12651 "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:12666: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:12669: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:12672: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:12675: \$? = $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:12691: 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:12723: 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:12749: \"$cf_try\"") >&5
+ (eval $cf_try) 2>&5
+ ac_status=$?
+ echo "$as_me:12752: \$? = $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 12762 "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:12787: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:12790: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:12792: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:12795: \$? = $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:12809: 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:12816: 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 12819 "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:12831: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:12834: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:12837: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:12840: \$? = $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:12849: 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:12855: 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 12863 "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:12882: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:12885: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:12888: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:12891: \$? = $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:12902: 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
+ # Looking at HPUX 10.20, the Hcurses library is the oldest (1997), cur_colr
+ # next (1998), and xcurses "newer" (2000). There is no header file for
+ # Hcurses; the subdirectory curses_colr has the headers (curses.h and
+ # term.h) for cur_colr
+ if test "x$cf_cv_screen" = "xcurses_colr"
+ then
+ echo "$as_me:12916: 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 12924 "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:12943: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:12946: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:12949: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:12952: \$? = $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:12963: 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:12972: 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 12980 "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:12999: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:13002: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:13005: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:13008: \$? = $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:13019: 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
+
+ fi
+ ;;
+linux*)
+ case `arch 2>/dev/null` in
+ x86_64)
+ if test -d /lib64
+ then
+
+if test -n "/lib64" ; then
+ for cf_add_libdir in /lib64
+ 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}:13059: testing adding $cf_add_libdir to library-path ..." 1>&5
+
+ LDFLAGS="-L$cf_add_libdir $LDFLAGS"
+ fi
+ fi
+ done
+fi
+
+ else
+
+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}:13088: testing adding $cf_add_libdir to library-path ..." 1>&5
+
+ LDFLAGS="-L$cf_add_libdir $LDFLAGS"
+ fi
+ fi
+ done
+fi
+
+ fi
+ ;;
+ *)
+
+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}:13119: testing adding $cf_add_libdir to library-path ..." 1>&5
+
+ LDFLAGS="-L$cf_add_libdir $LDFLAGS"
+ fi
+ fi
+ done
+fi
+
+ ;;
+ esac
+ ;;
+sunos3*|sunos4*)
+ if test "x$cf_cv_screen" = "xcurses_5lib"
+ then
+ 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}:13154: testing adding $cf_add_libdir to library-path ..." 1>&5
+
+ LDFLAGS="-L$cf_add_libdir $LDFLAGS"
+ fi
+ fi
+ done
+fi
+
+ LIBS="-lcurses -ltermcap $LIBS"
+ fi
+ fi
+ ac_cv_func_initscr=yes
+ ;;
+esac
+
+if test ".$ac_cv_func_initscr" != .yes ; then
+ cf_save_LIBS="$LIBS"
+
+ 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.
+ if test "x$cf_term_lib" = x
+ then
+ echo "$as_me:13183: 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 13189 "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; /* workaround for ICC 12.0.3 */ if (f == 0) return 1;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:13220: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:13223: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:13226: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:13229: \$? = $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:13239: 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 otermcap termcap tinfo termlib unknown
+ do
+ as_ac_Lib=`echo "ac_cv_lib_$cf_term_lib''_tgoto" | $as_tr_sh`
+echo "$as_me:13248: 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 13256 "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:13275: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:13278: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:13281: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:13284: \$? = $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:13295: 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
+
+ fi
+
+ # Check for library containing initscr
+ test "$cf_term_lib" != predefined && test "$cf_term_lib" != unknown && LIBS="-l$cf_term_lib $cf_save_LIBS"
+ if test "x$cf_curs_lib" = x
+ then
+ 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:13314: 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 13322 "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:13341: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:13344: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:13347: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:13350: \$? = $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:13361: 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
+ test $cf_curs_lib = unknown && { { echo "$as_me:13369: 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:13375: 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 13378 "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:13390: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:13393: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:13396: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:13399: \$? = $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:13408: result: $cf_result" >&5
+echo "${ECHO_T}$cf_result" >&6
+ test $cf_result = no && { { echo "$as_me:13410: 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:13416: 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 13419 "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:13431: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:13434: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:13437: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:13440: \$? = $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 13449 "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:13461: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:13464: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:13467: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:13470: \$? = $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:13482: result: $cf_result" >&5
+echo "${ECHO_T}$cf_result" >&6
+ fi
+fi
+fi
+
+fi
+
+cf_all_widgets=yes
+
+echo "$as_me:13492: 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:13502: 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:13510: 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:13520: 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:13533: 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:13543: 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:13556: checking if you want extra Xdialog-style dialogs (1.2)" >&5
+echo $ECHO_N "checking if you want extra Xdialog-style dialogs (1.2)... $ECHO_C" >&6
+
+# Check whether --enable-Xdialog2 or --disable-Xdialog2 was given.
+if test "${enable_Xdialog2+set}" = set; then
+ enableval="$enable_Xdialog2"
+
+else
+ enableval=$cf_all_widgets
+fi;
+echo "$as_me:13566: result: $enableval" >&5
+echo "${ECHO_T}$enableval" >&6
+if test "$enableval" != no ; then
+EXTRAOBJS="$EXTRAOBJS buildlist\$o rangebox\$o treeview\$o"
+
+cat >>confdefs.h <<\EOF
+#define HAVE_XDIALOG2 1
+EOF
+
+else
+ :
+fi
+
+echo "$as_me:13579: checking if you want compatibility with whiptail options" >&5
+echo $ECHO_N "checking if you want compatibility with whiptail options... $ECHO_C" >&6
+
+# Check whether --enable-whiptail or --disable-whiptail was given.
+if test "${enable_whiptail+set}" = set; then
+ enableval="$enable_whiptail"
+
+else
+ enableval=$cf_all_widgets
+fi;
+echo "$as_me:13589: result: $enableval" >&5
+echo "${ECHO_T}$enableval" >&6
+if test "$enableval" != no ; then
+
+cat >>confdefs.h <<\EOF
+#define HAVE_WHIPTAIL 1
+EOF
+
+else
+ :
+fi
+
+echo "$as_me:13601: 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:13611: 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:13624: 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:13634: result: $enableval" >&5
+echo "${ECHO_T}$enableval" >&6
+if test "$enableval" != no ; then
+EXTRAOBJS="$EXTRAOBJS guage\$o pause\$o prgbox\$o progressbox\$o"
+
+cat >>confdefs.h <<\EOF
+#define HAVE_DLG_GAUGE 1
+EOF
+
+else
+ :
+fi
+
+echo "$as_me:13647: 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:13657: 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:13670: 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:13680: 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:13693: 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:13703: 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:13716: 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:13726: 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:13738: 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 13744 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+_ACEOF
+if { (eval echo "$as_me:13752: \"$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:13758: \$? = $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 13780 "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 -rf 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 13798 "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 -rf 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 13819 "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:13845: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:13848: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:13850: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:13853: \$? = $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:13866: 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:13876: 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 13882 "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:13898: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:13901: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:13904: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:13907: \$? = $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:13917: 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:13930: 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 13936 "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:13951: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:13954: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:13957: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:13960: \$? = $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:13970: 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:13983: 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 13991 "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:14010: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:14013: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:14016: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:14019: \$? = $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:14030: 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:14037: 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 14045 "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:14064: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:14067: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:14070: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:14073: \$? = $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:14084: 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:14095: 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 14101 "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:14105: \"$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:14111: \$? = $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:14130: 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:14140: 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.
+
+cf_header_list="term.h ncurses/term.h ncursesw/term.h"
+
+case ${cf_cv_ncurses_header:-curses.h} in #(vi
+*/*)
+ cf_header_item=`echo ${cf_cv_ncurses_header:-curses.h} | sed -e 's%\..*%%' -e 's%/.*%/%'`term.h
+ cf_header_list="$cf_header_item $cf_header_list"
+ ;;
+esac
+
+for cf_header in $cf_header_list
+do
+ cat >conftest.$ac_ext <<_ACEOF
+#line 14161 "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:14175: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:14178: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:14181: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:14184: \$? = $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 14203 "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:14221: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:14224: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:14227: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:14230: \$? = $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:14245: 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:14272: 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 14278 "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:14300: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:14303: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:14306: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:14309: \$? = $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:14319: 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 \
+btowc \
+mblen \
+mbrlen \
+mbrtowc \
+mbtowc \
+strcasecmp \
+strftime \
+tsearch \
+waitpid \
+wcsrtombs \
+wcstombs \
+wctob \
+wctomb \
+
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:14344: 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 14350 "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; /* workaround for ICC 12.0.3 */ if (f == 0) return 1;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:14381: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:14384: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:14387: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:14390: \$? = $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:14400: 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:14410: 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 14417 "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:14439: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:14442: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:14445: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:14448: \$? = $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 14455 "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:14477: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:14480: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:14483: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:14486: \$? = $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:14498: 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"
+
+echo "$as_me:14502: checking for unctrl.h" >&5
+echo $ECHO_N "checking for unctrl.h... $ECHO_C" >&6
+if test "${cf_cv_unctrl_header+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+# If we found <ncurses/curses.h>, look for <ncurses/unctrl.h>, but always look
+# for <unctrl.h> if we do not find the variant.
+
+cf_header_list="unctrl.h ncurses/unctrl.h ncursesw/unctrl.h"
+
+case ${cf_cv_ncurses_header:-curses.h} in #(vi
+*/*)
+ cf_header_item=`echo ${cf_cv_ncurses_header:-curses.h} | sed -e 's%\..*%%' -e 's%/.*%/%'`unctrl.h
+ cf_header_list="$cf_header_item $cf_header_list"
+ ;;
+esac
+
+for cf_header in $cf_header_list
+do
+ cat >conftest.$ac_ext <<_ACEOF
+#line 14523 "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:14537: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:14540: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:14543: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:14546: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cf_cv_unctrl_header=$cf_header
+ break
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+cf_cv_unctrl_header=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+
+case $cf_cv_unctrl_header in #(vi
+no)
+ { echo "$as_me:14560: WARNING: unctrl.h header not found" >&5
+echo "$as_me: WARNING: unctrl.h header not found" >&2;}
+ ;;
+esac
+
+fi
+echo "$as_me:14566: result: $cf_cv_unctrl_header" >&5
+echo "${ECHO_T}$cf_cv_unctrl_header" >&6
+
+case $cf_cv_unctrl_header in #(vi
+unctrl.h) #(vi
+
+cat >>confdefs.h <<\EOF
+#define HAVE_UNCTRL_H 1
+EOF
+
+ ;;
+ncurses/unctrl.h) #(vi
+
+cat >>confdefs.h <<\EOF
+#define HAVE_NCURSES_UNCTRL_H 1
+EOF
+
+ ;;
+ncursesw/unctrl.h)
+
+cat >>confdefs.h <<\EOF
+#define HAVE_NCURSESW_UNCTRL_H 1
+EOF
+
+ ;;
+esac
+
+for cf_func in \
+flushinp \
+getattrs \
+getbegx \
+getbegy \
+getbegyx \
+getcurx \
+getcury \
+getmaxx \
+getmaxy \
+getmaxyx \
+getparx \
+getpary \
+getparyx \
+use_default_colors \
+wchgat \
+wcursyncup \
+wget_wch \
+wsyncup \
+
+do
+
+cf_tr_func=`echo "$cf_func" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+
+ echo "$as_me:14617: checking for ${cf_func}" >&5
+echo $ECHO_N "checking for ${cf_func}... $ECHO_C" >&6
+
+echo "${as_me:-configure}:14620: 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 14629 "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});
+if (foo + 1234 > 5678)
+ ${cf_cv_main_return:-return}(foo);
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:14661: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:14664: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:14667: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:14670: \$? = $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:14686: 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:14696: 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 14702 "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; /* workaround for ICC 12.0.3 */ if (f == 0) return 1;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:14733: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:14736: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:14739: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:14742: \$? = $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:14752: 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:14762: 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 14769 "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:14781: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:14784: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:14787: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:14790: \$? = $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:14800: 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:14808: 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 14815 "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:14827: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:14830: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:14833: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:14836: \$? = $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:14846: 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
+
+echo "$as_me:14857: checking for wide alternate character set array" >&5
+echo $ECHO_N "checking for wide alternate character set array... $ECHO_C" >&6
+if test "${cf_cv_curses_wacs_map+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ cf_cv_curses_wacs_map=unknown
+ for name in wacs_map _wacs_map __wacs_map _nc_wacs _wacs_char
+ do
+ cat >conftest.$ac_ext <<_ACEOF
+#line 14867 "configure"
+#include "confdefs.h"
+
+#ifndef _XOPEN_SOURCE_EXTENDED
+#define _XOPEN_SOURCE_EXTENDED
+#endif
+#include <${cf_cv_ncurses_header:-curses.h}>
+int
+main ()
+{
+void *foo = &($name['k'])
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:14883: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:14886: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:14889: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:14892: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cf_cv_curses_wacs_map=$name
+ break
+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
+ done
+fi
+echo "$as_me:14903: result: $cf_cv_curses_wacs_map" >&5
+echo "${ECHO_T}$cf_cv_curses_wacs_map" >&6
+
+test "$cf_cv_curses_wacs_map" != unknown &&
+cat >>confdefs.h <<EOF
+#define CURSES_WACS_ARRAY $cf_cv_curses_wacs_map
+EOF
+
+echo "$as_me:14911: checking for wide alternate character constants" >&5
+echo $ECHO_N "checking for wide alternate character constants... $ECHO_C" >&6
+if test "${cf_cv_curses_wacs_symbols+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+cf_cv_curses_wacs_symbols=no
+if test "$cf_cv_curses_wacs_map" != unknown
+then
+ cat >conftest.$ac_ext <<_ACEOF
+#line 14921 "configure"
+#include "confdefs.h"
+
+#ifndef _XOPEN_SOURCE_EXTENDED
+#define _XOPEN_SOURCE_EXTENDED
+#endif
+#include <${cf_cv_ncurses_header:-curses.h}>
+int
+main ()
+{
+cchar_t *foo = WACS_PLUS;
+ $cf_cv_curses_wacs_map['k'] = *WACS_PLUS
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:14938: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:14941: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:14944: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:14947: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cf_cv_curses_wacs_symbols=yes
+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
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 14957 "configure"
+#include "confdefs.h"
+
+#ifndef _XOPEN_SOURCE_EXTENDED
+#define _XOPEN_SOURCE_EXTENDED
+#endif
+#include <${cf_cv_ncurses_header:-curses.h}>
+int
+main ()
+{
+cchar_t *foo = WACS_PLUS
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:14973: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:14976: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:14979: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:14982: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cf_cv_curses_wacs_symbols=yes
+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
+
+fi
+echo "$as_me:14993: result: $cf_cv_curses_wacs_symbols" >&5
+echo "${ECHO_T}$cf_cv_curses_wacs_symbols" >&6
+
+test "$cf_cv_curses_wacs_symbols" != no &&
+cat >>confdefs.h <<\EOF
+#define CURSES_WACS_SYMBOLS 1
+EOF
+
+for cf_func in wgetparent
+do
+
+cf_tr_func=`echo "$cf_func" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+
+ echo "$as_me:15006: checking for ${cf_func}" >&5
+echo $ECHO_N "checking for ${cf_func}... $ECHO_C" >&6
+
+echo "${as_me:-configure}:15009: 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 15018 "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});
+if (foo + 1234 > 5678)
+ ${cf_cv_main_return:-return}(foo);
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:15050: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:15053: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:15056: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:15059: \$? = $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:15075: 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
+
+if test "x$cf_cv_func_wgetparent" != xyes
+then
+ echo "$as_me:15087: checking if WINDOW has _parent member" >&5
+echo $ECHO_N "checking if WINDOW has _parent member... $ECHO_C" >&6
+ cat >conftest.$ac_ext <<_ACEOF
+#line 15090 "configure"
+#include "confdefs.h"
+#include <${cf_cv_ncurses_header:-curses.h}>
+int
+main ()
+{
+WINDOW *p = stdscr->_parent
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:15102: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:15105: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:15108: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:15111: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cf_window__parent=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+cf_window__parent=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ echo "$as_me:15120: result: $cf_window__parent" >&5
+echo "${ECHO_T}$cf_window__parent" >&6
+ if test "$cf_window__parent" = yes
+ then
+
+cat >>confdefs.h <<\EOF
+#define HAVE_WINDOW__PARENT 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:15135: 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 15141 "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:15145: \"$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:15151: \$? = $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:15170: 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:15191: 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 15197 "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:15201: \"$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:15207: \$? = $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:15226: 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:15239: 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 15245 "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:15249: \"$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:15255: \$? = $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:15274: 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:15296: 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 15303 "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:15319: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:15322: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:15325: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:15328: \$? = $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 15338 "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:15358: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:15361: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:15364: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:15367: \$? = $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:15382: 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:15391: 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 15398 "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:15410: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:15413: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:15416: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:15419: \$? = $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:15431: 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:15438: 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 15445 "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:15457: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:15460: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:15463: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:15466: \$? = $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:15478: 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:15487: 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 15494 "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:15511: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:15514: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:15517: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:15520: \$? = $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 15527 "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:15545: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:15548: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:15551: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:15554: \$? = $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:15566: 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 15591 "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:15603: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:15606: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:15609: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:15612: \$? = $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
+
+echo "$as_me:15625: checking if rpath-hack should be disabled" >&5
+echo $ECHO_N "checking if rpath-hack should be disabled... $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:15642: 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:15646: 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:15649: 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:15656: 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:15671: 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:15679: result: $cf_ldd_prog" >&5
+echo "${ECHO_T}$cf_ldd_prog" >&6
+else
+ echo "$as_me:15682: 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
+ cf_rpath_oops=
+
+cat >conftest.$ac_ext <<_ACEOF
+#line 15696 "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:15708: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:15711: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:15714: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:15717: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cf_rpath_oops=`$cf_ldd_prog conftest$ac_exeext | fgrep ' not found' | sed -e 's% =>.*$%%' |sort | uniq`
+ cf_rpath_list=`$cf_ldd_prog conftest$ac_exeext | fgrep / | sed -e 's%^.*[ ]/%/%' -e 's%/[^/][^/]*$%%' |sort | uniq`
+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
+
+ # If we passed the link-test, but get a "not found" on a given library,
+ # this could be due to inept reconfiguration of gcc to make it only
+ # partly honor /usr/local/lib (or whatever). Sometimes this behavior
+ # is intentional, e.g., installing gcc in /usr/bin and suppressing the
+ # /usr/local libraries.
+ if test -n "$cf_rpath_oops"
+ then
+ for cf_rpath_src in $cf_rpath_oops
+ do
+ for cf_rpath_dir in \
+ /usr/local \
+ /usr/pkg \
+ /opt/sfw
+ do
+ if test -f $cf_rpath_dir/lib/$cf_rpath_src
+ then
+ test -n "$verbose" && echo " ...adding -L$cf_rpath_dir/lib to LDFLAGS for $cf_rpath_src" 1>&6
+
+echo "${as_me:-configure}:15745: testing ...adding -L$cf_rpath_dir/lib to LDFLAGS for $cf_rpath_src ..." 1>&5
+
+ LDFLAGS="$LDFLAGS -L$cf_rpath_dir/lib"
+ break
+ fi
+ done
+ done
+ fi
+ fi
+
+ test -n "$verbose" && echo " ...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS" 1>&6
+
+echo "${as_me:-configure}:15757: testing ...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS ..." 1>&5
+
+test -n "$verbose" && echo " ...checking LDFLAGS $LDFLAGS" 1>&6
+
+echo "${as_me:-configure}:15761: 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}:15798: 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}:15811: testing ...checked LDFLAGS $LDFLAGS ..." 1>&5
+
+test -n "$verbose" && echo " ...checking LIBS $LIBS" 1>&6
+
+echo "${as_me:-configure}:15815: 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}:15852: 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}:15865: testing ...checked LIBS $LIBS ..." 1>&5
+
+ test -n "$verbose" && echo " ...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS" 1>&6
+
+echo "${as_me:-configure}:15869: testing ...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS ..." 1>&5
+
+else
+ echo "$as_me:15872: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+
+cf_libname=\${LIB_BASENAME}
+cf_liblink=$cf_libname
+cf_libroot=$cf_libname
+
+if test "x$cf_cv_do_symlinks" = xyes
+then
+ case "x$cf_cv_shlib_version" in #(vi
+ xrel) #(vi
+ cf_liblink="\${LIB_ABI_NAME}"
+ cf_libname="\${LIB_REL_NAME}"
+ ;;
+ xabi)
+ cf_liblink="\${LIB_REL_NAME}"
+ cf_libname="\${LIB_ABI_NAME}"
+ ;;
+ esac
+fi
+LIB_TARGET=$cf_libname
+
+SET_SHLIB_VARS="# begin CF__DEFINE_SHLIB_VARS\\
+LIB_BASENAME = ${LIB_PREFIX}\${LIB_ROOTNAME}\${LIB_SUFFIX}\\
+LIB_REL_NAME = \${LIB_BASENAME}.\${REL_VERSION}\\
+LIB_ABI_NAME = \${LIB_BASENAME}.\${ABI_VERSION}\\
+LIB_TARGET = $LIB_TARGET\\
+RM_SHARED_OPTS = $RM_SHARED_OPTS\\
+# end CF__DEFINE_SHLIB_VARS"
+
+ac_config_files="$ac_config_files dialog-config makefile $EXTRA_OUTPUT $SUB_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:15986: 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 <dickey@invisible-island.net>."
+EOF
+
+cat >>$CONFIG_STATUS <<EOF
+ac_cs_version="\\
+config.status
+configured by $0, generated by GNU Autoconf 2.52.20121002,
+ 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:16162: 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:16181: 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.20121002, 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.
+#
+
+ABI_VERSION="$ABI_VERSION"
+REL_VERSION="$REL_VERSION"
+LIB_MODEL="$LIB_MODEL"
+LIB_PREFIX="$LIB_PREFIX"
+LIB_ROOTNAME="$LIB_ROOTNAME"
+DFT_DEP_SUFFIX="$DFT_DEP_SUFFIX"
+RM_SHARED_OPTS="$RM_SHARED_OPTS"
+cf_cv_do_symlinks="$cf_cv_do_symlinks"
+cf_cv_shlib_version="$cf_cv_shlib_version"
+
+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" ;;
+ "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:16240: 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,@datarootdir@,$datarootdir,;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,@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,@EXTRA_CPPFLAGS@,$EXTRA_CPPFLAGS,;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,@LN_S@,$LN_S,;t t
+s,@LINT@,$LINT,;t t
+s,@LINT_OPTS@,$LINT_OPTS,;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_CFLAGS@,$EXTRA_CFLAGS,;t t
+s,@PKG_CONFIG@,$PKG_CONFIG,;t t
+s,@ac_pt_PKG_CONFIG@,$ac_pt_PKG_CONFIG,;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,@CFG_ROOTNAME@,$CFG_ROOTNAME,;t t
+s,@HDR_ROOTNAME@,$HDR_ROOTNAME,;t t
+s,@LIB_ROOTNAME@,$LIB_ROOTNAME,;t t
+s,@SUB_INC@,$SUB_INC,;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,@INTL_LIBTOOL_SUFFIX_PREFIX@,$INTL_LIBTOOL_SUFFIX_PREFIX,;t t
+s,@NLS_TEXTDOMAIN@,$NLS_TEXTDOMAIN,;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,@ABI_VERSION@,$ABI_VERSION,;t t
+s,@REL_VERSION@,$REL_VERSION,;t t
+s,@LIBTOOL_VERSION@,$LIBTOOL_VERSION,;t t
+s,@LIBTOOL@,$LIBTOOL,;t t
+s,@ac_ct_LIBTOOL@,$ac_ct_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,@CC_SHARED_OPTS@,$CC_SHARED_OPTS,;t t
+s,@LD_RPATH_OPT@,$LD_RPATH_OPT,;t t
+s,@LD_SHARED_OPTS@,$LD_SHARED_OPTS,;t t
+s,@MK_SHARED_LIB@,$MK_SHARED_LIB,;t t
+s,@RM_SHARED_OPTS@,$RM_SHARED_OPTS,;t t
+s,@LINK_PROGS@,$LINK_PROGS,;t t
+s,@LINK_TESTS@,$LINK_TESTS,;t t
+s,@EXTRA_LDFLAGS@,$EXTRA_LDFLAGS,;t t
+s,@LOCAL_LDFLAGS@,$LOCAL_LDFLAGS,;t t
+s,@LOCAL_LDFLAGS2@,$LOCAL_LDFLAGS2,;t t
+s,@INSTALL_LIB@,$INSTALL_LIB,;t t
+s,@RPATH_LIST@,$RPATH_LIST,;t t
+s,@DFT_LWR_MODEL@,$DFT_LWR_MODEL,;t t
+s,@DFT_LIB_SUFFIX@,$DFT_LIB_SUFFIX,;t t
+s,@DFT_DEP_SUFFIX@,$DFT_DEP_SUFFIX,;t t
+s,@LIB_MODEL@,$LIB_MODEL,;t t
+s,@LIBTOOL_MAKE@,$LIBTOOL_MAKE,;t t
+s,@MAKE_NORMAL@,$MAKE_NORMAL,;t t
+s,@MAKE_SHARED@,$MAKE_SHARED,;t t
+s,@MAKE_STATIC@,$MAKE_STATIC,;t t
+s,@NCURSES_CONFIG@,$NCURSES_CONFIG,;t t
+s,@ac_ct_NCURSES_CONFIG@,$ac_ct_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,@SET_SHLIB_VARS@,$SET_SHLIB_VARS,;t t
+s,@LIB_TARGET@,$LIB_TARGET,;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:16564: 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:16582: 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:16595: 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
+ ac_warn_datarootdir=no
+ if test x"$ac_file" != x-; then
+ for ac_item in $ac_file_inputs
+ do
+ ac_seen=`grep '@\(datadir\|mandir\|infodir\)@' $ac_item`
+ if test -n "$ac_seen"; then
+ ac_used=`grep '@datarootdir@' $ac_item`
+ if test -z "$ac_used"; then
+ { echo "$as_me:16611: WARNING: datarootdir was used implicitly but not set:
+$ac_seen" >&5
+echo "$as_me: WARNING: datarootdir was used implicitly but not set:
+$ac_seen" >&2;}
+ ac_warn_datarootdir=yes
+ fi
+ fi
+ ac_seen=`grep '${datarootdir}' $ac_item`
+ if test -n "$ac_seen"; then
+ { echo "$as_me:16620: WARNING: datarootdir was used explicitly but not set:
+$ac_seen" >&5
+echo "$as_me: WARNING: datarootdir was used explicitly but not set:
+$ac_seen" >&2;}
+ ac_warn_datarootdir=yes
+ fi
+ done
+ fi
+
+if test "x$ac_warn_datarootdir" = xyes; then
+ ac_sed_cmds="$ac_sed_cmds | sed -e 's,@datarootdir@,\${prefix}/share,g' -e 's,\${datarootdir},\${prefix}/share,g'"
+fi
+
+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
+ cp $tmp/out $ac_file
+
+ for ac_name in prefix exec_prefix datarootdir
+ do
+ ac_seen=`fgrep -n '${'$ac_name'[:=].*}' $ac_file`
+ if test -n "$ac_seen"; then
+ ac_init=`egrep '[ ]*'$ac_name'[ ]*=' $ac_file`
+ if test -z "$ac_init"; then
+ ac_seen=`echo "$ac_seen" |sed -e 's,^,'$ac_file':,'`
+ { echo "$as_me:16657: WARNING: Variable $ac_name is used but was not set:
+$ac_seen" >&5
+echo "$as_me: WARNING: Variable $ac_name is used but was not set:
+$ac_seen" >&2;}
+ fi
+ fi
+ done
+ egrep -n '@[a-z_][a-z_0-9]+@' $ac_file >$tmp/out
+ egrep -n '@[A-Z_][A-Z_0-9]+@' $ac_file >>$tmp/out
+ if test -s $tmp/out; then
+ ac_seen=`sed -e 's,^,'$ac_file':,' < $tmp/out`
+ { echo "$as_me:16668: WARNING: Some variables may not be substituted:
+$ac_seen" >&5
+echo "$as_me: WARNING: Some variables may not be substituted:
+$ac_seen" >&2;}
+ fi
+ else
+ cat $tmp/out
+ fi
+ rm -f $tmp/out
+
+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:16717: 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:16728: 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:16741: 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:16799: $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 ;;
+ default )
+
+cf_libname=\${LIB_BASENAME}
+cf_liblink=$cf_libname
+cf_libroot=$cf_libname
+
+if test "x$cf_cv_do_symlinks" = xyes
+then
+ case "x$cf_cv_shlib_version" in #(vi
+ xrel) #(vi
+ cf_liblink="\${LIB_ABI_NAME}"
+ cf_libname="\${LIB_REL_NAME}"
+ ;;
+ xabi)
+ cf_liblink="\${LIB_REL_NAME}"
+ cf_libname="\${LIB_ABI_NAME}"
+ ;;
+ esac
+fi
+LIB_TARGET=$cf_libname
+
+case x$LIB_MODEL in
+xlibtool|xshared) #(vi
+ cf_libdeps="\${LIBS} \${LDFLAGS}"
+ ;;
+x*)
+ cf_libdeps=
+ ;;
+esac
+
+cat >>makefile <<CF_EOF
+
+# generated by CF__ADD_SHLIB_RULES
+# libmodel: $LIB_MODEL
+# symlinks: $cf_cv_do_symlinks
+# shlibver: $cf_cv_shlib_version
+
+CF_EOF
+
+cat >>makefile <<CF_EOF
+$cf_libname :: \\
+CF_EOF
+
+cat >>makefile <<CF_EOF
+ \${LIB_OBJECT}
+ @echo linking \$@
+ \$(LIBTOOL_CREATE) \${LIB_OBJECT} $cf_libdeps
+CF_EOF
+
+if test "x$cf_cv_do_symlinks" = xyes
+then
+cat >>makefile <<CF_EOF
+ \$(LN_S) $cf_libname $cf_liblink
+ \$(LN_S) $cf_liblink $cf_libroot
+CF_EOF
+fi
+
+cat >>makefile <<CF_EOF
+
+install \\
+install.libs :: \$(DESTDIR)\$(libdir)/$cf_libname
+
+\$(DESTDIR)\$(libdir)/$cf_libname :: \\
+ \$(DESTDIR)\$(libdir) \\
+ \${LIB_OBJECT}
+ @echo linking \$@
+ \$(LIBTOOL_CREATE) \${LIB_OBJECT} $cf_libdeps
+CF_EOF
+
+if test "x$cf_cv_do_symlinks" = xyes
+then
+cat >>makefile <<CF_EOF
+ cd \$(DESTDIR)\$(libdir) && (\$(LN_S) $cf_libname $cf_liblink; \$(LN_S) $cf_liblink $cf_libroot; )
+CF_EOF
+fi
+
+if test x$LIB_MODEL = xshared
+then
+cat >>makefile <<CF_EOF
+ - test -z "\$(DESTDIR)" && /sbin/ldconfig
+CF_EOF
+fi
+
+cat >>makefile <<CF_EOF
+
+uninstall \\
+uninstall.libs ::
+ @echo uninstalling \$(DESTDIR)\$(libdir)/$cf_libname
+CF_EOF
+
+if test "x$cf_cv_do_symlinks" = xyes
+then
+cat >>makefile <<CF_EOF
+ -rm -f \$(DESTDIR)\$(libdir)/$cf_libroot
+ -rm -f \$(DESTDIR)\$(libdir)/$cf_liblink
+CF_EOF
+fi
+
+cat >>makefile <<CF_EOF
+ -rm -f \$(DESTDIR)\$(libdir)/$cf_libname
+
+clean \\
+clean.libs ::
+CF_EOF
+
+if test "x$cf_cv_do_symlinks" = xyes
+then
+cat >>makefile <<CF_EOF
+ -rm -f $cf_libroot
+ -rm -f $cf_liblink
+CF_EOF
+fi
+
+cat >>makefile <<CF_EOF
+ -rm -f $cf_libname
+
+mostlyclean::
+ -rm -f \${LIB_OBJECT}
+# end generated by CF__ADD_SHLIB_RULES
+CF_EOF
+
+ ;;
+ 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
+
diff --git a/contrib/dialog/configure.in b/contrib/dialog/configure.in
new file mode 100644
index 0000000..75ce244
--- /dev/null
+++ b/contrib/dialog/configure.in
@@ -0,0 +1,279 @@
+dnl $Id: configure.in,v 1.79 2013/09/02 14:02:57 tom Exp $
+dnl Process this file with autoconf to produce a configure script.
+dnl ---------------------------------------------------------------------------
+dnl Copyright 1999-2011,2012 -- Thomas E. Dickey
+dnl
+dnl Permission is hereby granted, free of charge, to any person obtaining a
+dnl copy of this software and associated documentation files (the
+dnl "Software"), to deal in the Software without restriction, including
+dnl without limitation the rights to use, copy, modify, merge, publish,
+dnl distribute, distribute with modifications, sublicense, and/or sell
+dnl copies of the Software, and to permit persons to whom the Software is
+dnl furnished to do so, subject to the following conditions:
+dnl
+dnl The above copyright notice and this permission notice shall be included
+dnl in all copies or portions of the Software.
+dnl
+dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+dnl IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+dnl DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+dnl OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
+dnl THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+dnl
+dnl Except as contained in this notice, the name(s) of the above copyright
+dnl holders shall not be used in advertising or otherwise to promote the
+dnl sale, use or other dealings in this Software without prior written
+dnl authorization.
+dnl ---------------------------------------------------------------------------
+AC_PREREQ(2.52.20011201)
+AC_INIT(dialog.h)
+AC_CONFIG_HEADER(dlg_config.h:config.hin)
+
+AC_ARG_PROGRAM
+
+DESTDIR=
+AC_SUBST(DESTDIR)
+
+dnl
+dnl Checks for programs.
+dnl
+CF_PROG_CC
+AC_PROG_CPP
+AC_PROG_MAKE_SET
+AC_PROG_RANLIB
+AC_PROG_INSTALL
+CF_PROG_LN_S
+CF_PROG_LINT
+
+dnl needed for CF_WITH_LIBTOOL
+AC_CHECK_TOOL(AR, ar, ar)
+
+CF_MAKEFLAGS
+CF_MAKE_TAGS
+CF_DISABLE_ECHO
+CF_PROG_EXT
+CF_PATHSEP
+CF_LIB_PREFIX
+CF_XOPEN_SOURCE
+CF_LARGEFILE
+
+CF_WITH_WARNINGS
+CF_PKG_CONFIG
+
+dnl
+dnl Allow dialog program and library to be renamed.
+AC_MSG_CHECKING(for this package's name)
+AC_ARG_WITH(package,
+ [ --with-package=XXX rename dialog to XXX, library to libXXX.a, etc],
+ [PACKAGE=$withval],
+ [PACKAGE=dialog])
+AC_MSG_RESULT($PACKAGE)
+CF_VERSION_INFO(dialog,$PACKAGE)
+
+CFG_ROOTNAME=$PACKAGE
+HDR_ROOTNAME=$PACKAGE
+LIB_ROOTNAME=$PACKAGE
+
+AC_SUBST(CFG_ROOTNAME)
+AC_SUBST(HDR_ROOTNAME)
+AC_SUBST(LIB_ROOTNAME)
+
+dnl
+dnl If package is renamed, it is useful to have the dlg_XXX headers in a
+dnl subdirectory (using the package name) so that multiple versions of the
+dnl headers can coexist.
+AC_MSG_CHECKING(if we should install dlg_XXX headers to subdirectory)
+AC_ARG_ENABLE(header-subdir,
+ [ --enable-header-subdir install dlg_XXX headers to subdirectory],
+ [SUB_INC=$enableval],
+ [SUB_INC=no])
+AC_MSG_RESULT($SUB_INC)
+AC_SUBST(SUB_INC)
+
+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,1,[Define to 1 to support --trace option])],,yes)
+
+CF_LD_RPATH_OPT
+CF_WITH_SHARED_OR_LIBTOOL(DIALOG,${VERSION_MAJOR}.${VERSION_MINOR},`echo "$VERSION" |sed -e 's/:/./g'`)
+
+CF_WITH_CURSES_DIR
+
+CF_ENABLE_RPATH
+
+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,1,[Define to 1 to include config-file support])],,$cf_all_widgets)
+
+CF_ARG_MSG_ENABLE([if you want Xdialog-style dialogs],
+ Xdialog,
+ [ --disable-Xdialog do not include Xdialog-style dialogs (1.1)],
+ [EXTRAOBJS="$EXTRAOBJS calendar\$o fselect\$o timebox\$o"
+ AC_DEFINE(HAVE_XDIALOG,1,[Define to 1 to include Xdialog-style dialogs])],,$cf_all_widgets)
+
+CF_ARG_MSG_ENABLE([if you want extra Xdialog-style dialogs (1.2)],
+ Xdialog2,
+ [ --disable-Xdialog2 do not include extra Xdialog-style dialogs (1.2)],
+ [EXTRAOBJS="$EXTRAOBJS buildlist\$o rangebox\$o treeview\$o"
+ AC_DEFINE(HAVE_XDIALOG2,1,[Define to 1 to include extra Xdialog-style dialogs])],,$cf_all_widgets)
+
+CF_ARG_MSG_ENABLE([if you want compatibility with whiptail options],
+ whiptail,
+ [ --disable-whiptail do not map extra whiptail options],
+ [AC_DEFINE(HAVE_WHIPTAIL,1,[Define to 1 to include extra whiptail options])],,$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,1,[Define to 1 to include the form dialog])],,$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 prgbox\$o progressbox\$o"
+ AC_DEFINE(HAVE_DLG_GAUGE,1,[Define to 1 to include the gauge dialogs])],,$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,1,[Define to 1 to include the tailbox dialog])],,$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,1,[Define to 1 to include the mixedform dialog])],,$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,1,[Define to 1 to include the mixedgauge dialog])],,$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,1,[Define to 1 to enable wide-curses features])],,$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 \
+btowc \
+mblen \
+mbrlen \
+mbrtowc \
+mbtowc \
+strcasecmp \
+strftime \
+tsearch \
+waitpid \
+wcsrtombs \
+wcstombs \
+wctob \
+wctomb \
+)
+
+CF_CURSES_FUNCS(\
+flushinp \
+getattrs \
+getbegx \
+getbegy \
+getbegyx \
+getcurx \
+getcury \
+getmaxx \
+getmaxy \
+getmaxyx \
+getparx \
+getpary \
+getparyx \
+use_default_colors \
+wchgat \
+wcursyncup \
+wget_wch \
+wsyncup \
+)
+
+AC_CHECK_FUNC(start_color,[AC_DEFINE(HAVE_COLOR,1,[Define to 1 if (n)curses has start_color function])])
+CF_CURSES_CHTYPE
+CF_CURSES_WACS_SYMBOLS
+CF_CURSES_WGETPARENT
+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,1,[Define to 1 if locale feature can be enabled])])
+
+CF_DISABLE_RPATH_HACK
+
+CF__DEFINE_SHLIB_VARS
+
+AC_OUTPUT(
+ dialog-config
+ makefile
+ $EXTRA_OUTPUT
+ $SUB_MAKEFILE,[
+CF__ADD_SHLIB_RULES(
+ makefile,
+ $LIB_MODEL,
+ [\${LIB_OBJECT}],
+ [\${LIBS} \${LDFLAGS}])
+],[
+CF__INIT_SHLIB_RULES
+],[sort -u])
diff --git a/contrib/dialog/dialog-config.in b/contrib/dialog/dialog-config.in
new file mode 100644
index 0000000..530551b
--- /dev/null
+++ b/contrib/dialog/dialog-config.in
@@ -0,0 +1,136 @@
+#!@SHELL@
+# $Id: dialog-config.in,v 1.6 2012/10/06 14:29:45 tom Exp $
+##############################################################################
+# Copyright (c) 2007-2011,2012 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@"
+datarootdir="@datarootdir@"
+
+bindir="@bindir@"
+libdir="@libdir@"
+datadir="@datadir@"
+mandir="@mandir@"
+
+THIS="@PACKAGE@"
+
+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
diff --git a/contrib/dialog/dialog.1 b/contrib/dialog/dialog.1
new file mode 100644
index 0000000..50bb02b
--- /dev/null
+++ b/contrib/dialog/dialog.1
@@ -0,0 +1,1661 @@
+'\" t
+.\" $Id: dialog.1,v 1.167 2013/09/02 17:38:36 tom Exp $
+.\" Copyright 2005-2012,2013 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.
+.\"
+.\" definitions for renaming
+.ds p dialog
+.ds l dialog
+.ds L Dialog
+.ds D DIALOG
+.\"
+.de ES
+.ne 8
+.IP
+..
+.de Ex
+.RS +7
+.PP
+.nf
+..
+.de Ee
+.fi
+.RE
+..
+.\" Bulleted paragraph
+.de bP
+.IP \(bu 4
+..
+.
+.TH \*D 1 "" "$Date: 2013/09/02 17:38:36 $"
+.SH NAME
+dialog \- display dialog boxes from shell scripts
+.SH SYNOPSIS
+\fB\*p --clear\fP
+.br
+.BI "\*p --create-rc " file
+.br
+\fB\*p --print-maxsize\fP
+.br
+\fB\*p\fP
+\fIcommon-options\fP
+\fIbox-options\fP
+.SH DESCRIPTION
+\fB\*L\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 \fB\*p\fR):
+.RS
+.LP
+.nh
+.na
+.BR buildlist ", "
+.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 prgbox ", "
+.BR programbox ", "
+.BR progressbox ", "
+.BR radiolist ", "
+.BR rangebox ", "
+.BR tailbox ", "
+.BR tailboxbg ", "
+.BR textbox ", "
+.BR timebox ", "
+.BR treeview ", and "
+.BR yesno " (yes/no)."
+.ad
+.hy
+.RE
+.PP
+You can put more than one dialog box into a script:
+.bP
+Use the "\fB--and-widget\fP" token to force \fB\*p\fP to proceed to the next
+dialog unless you have pressed ESC to cancel, or
+.bP
+Simply add the tokens for the next dialog box, making a chain.
+\*L 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 \fB\*p\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;
+\fB\*p\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 \*p --title -- --Not an option
+.RE
+.PP
+The "\fB--args\fP" option tells \fB\*p\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 \fB\*p\fP to read parameters from
+the file named as its value.
+.RS
+.B \*p --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 "&", \fB\*p\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
+\*p \\
+ --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
+\*p \\
+ --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
+\*p \\
+ --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
+\*p \\
+ --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 \fB\*p\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 \fB\*p\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, \fB\*p\fR will only wrap lines where needed to fit inside the text box.
+.IP
+Even though you can control line breaks with this,
+\fB\*L\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
+\fB\*p\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-button \fIstring"
+Set the default (preselected) button in a widget.
+By preselecting a button,
+a script makes it possible for the user to simply press \fIEnter\fP
+to proceed through a dialog with minimum interaction.
+.IP
+The option's value is the name of the button:
+.IR ok ,
+.IR yes ,
+.IR cancel ,
+.IR no ,
+.IR help "\ or"
+.IR extra .
+.IP
+Normally the first button in each widget is the default.
+The first button shown is determined by the widget
+together with the "\fB--nook\fP" and "\fB--nocancel\fP options.
+If this option is not given, there is no default button assigned.
+.
+.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 the standard output and exits.
+The help message is also printed if no options are given,
+or if an unrecognized option is given.
+.
+.IP "\fB--help-button"
+Show a help-button after "OK" and "Cancel" buttons,
+i.e., in checklist, radiolist and menu boxes.
+.IP
+On exit, the return status will indicate that the Help button was pressed.
+\fB\*L\fP will also write a message to its output after the token "HELP":
+.RS
+.bP
+If "\fB--item-help\fR" is also given, the item-help text will be written.
+.bP
+Otherwise, the item's tag (the first field) will be written.
+.RE
+.IP
+.IP
+You can use the \fB--help-tags\fP option and/or set the DIALOG_ITEM_HELP
+environment variable to modify these messages and exit-status.
+.
+.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--help-tags"
+Modify the messages written on exit for \fB--help-button\fP
+by making them always just the item's tag.
+This does not affect the exit status code.
+.
+.IP "\fB--hfile \fIfilename"
+Display the given file using a textbox when the user presses F1.
+.
+.IP "\fB--hline \fIstring"
+Display the given string centered at the bottom of the widget.
+.
+.IP "\fB--ignore"
+Ignore options that \fB\*p\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 \fB\*p\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
+\fB\*p\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"
+When built with \fBncurses\fP,
+\fB\*p\fP normally 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 \fB\*p\fP
+several times.
+Use this option to allow \fB\*p\fP to use those initialization strings.
+.
+.IP "\fB--keep-window"
+Normally when \fB\*p\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, \fB\*p\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--last-key"
+At exit, report the last key which the user entered.
+This is the curses key code rather than a symbol or literal character.
+It can be used by scripts to distinguish between two keys which are
+bound to the same action.
+.
+.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 \fB\*p\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 \fB\*p\fR will still wrap text,
+subject to the "\fB--cr-wrap\fR" and "\fB--trim\fR" options.
+.
+.IP "\fB--no-items"
+Some widgets (checklist, inputmenu, radiolist, menu) display a list
+with two columns (a "tag" and "item", i.e., "description").
+This option tells \fB\*p\fP to read shorter rows,
+omitting the "item" part of the list.
+This is occasionally useful, e.g., if the tags provide enough information.
+.IP
+See also \fB--no-tags\fP.
+If both options are given, this one is ignored.
+.
+.IP "\fB--no-kill"
+Tells
+\fB\*p\fP
+to put the
+\fBtailboxbg\fP
+box in the background,
+printing its process id to \fB\*p\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-mouse
+Do not enable the mouse.
+.
+.IP "\fB--no-nl-expand
+Do not convert "\\n" substrings of the message/prompt text into
+literal newlines.
+.
+.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--no-tags"
+Some widgets (checklist, inputmenu, radiolist, menu) display a list
+with two columns (a "tag" and "description").
+The tag is useful for scripting, but may not help the user.
+The \fB--no-tags\fP option (from Xdialog) may be used to suppress the
+column of tags from the display.
+Unlike the \fB--no-items\fP option,
+this does not affect the data which is read from the script.
+.IP
+Xdialog does not display the tag column for the analogous buildlist
+and treeview widgets; \fB\*p\fP does the same.
+.IP
+Normally \fB\*p\fP allows you to quickly move to entries on the displayed list,
+by matching a single character to the first character of the tag.
+When the \fB--no-tags\fP option is given, \fB\*p\fP matches against
+the first character of the description.
+In either case, the matchable character is highlighted.
+.
+.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 \fB\*p\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 \fB\*p\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 \fB\*p\fP's output.
+This may be used alone, without other options.
+.
+.IP "\fB--print-size"
+Prints the size of each dialog box to \fB\*p\fP's output.
+.
+.IP "\fB--print-version"
+Prints \fB\*p\fR's version to \fB\*p\fP's output.
+This may be used alone, without other options.
+It does not cause \fBdialog\fP to exit by itself.
+.
+.IP "\fB--quoted"
+Normally \fB\*p\fP quotes the strings returned by checklist's
+as well as the item-help text.
+Use this option to quote all string results.
+.
+.IP "\fB--scrollbar"
+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 \fB\*p\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, \fB\*p\fP uses double quotes around each item.
+In either case,
+\fB\*p\fP adds 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, \fB\*p\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.
+A timeout of zero seconds is ignored.
+.IP
+This option is ignored by the "\fB--pause\fP" widget.
+It is also overridden if the background "\fB--tailboxbg\fP" option is used
+to setup multiple concurrent widgets.
+.
+.IP "\fB--title \fItitle"
+Specifies a
+\fItitle\fP
+string to be displayed at the top of the dialog box.
+.
+.IP "\fB--trace \fIfilename"
+logs the command-line parameters,
+keystrokes and other information to the given file.
+If \fBdialog\fP reads a configure file, it is logged as well.
+Piped input to the \fIgauge\fP widget is logged.
+Use control/T to log a picture of the current dialog window.
+.PP
+The \fB\*p\fR program handles some command-line parameters specially,
+and removes them from the parameter list as they are processed.
+For example, if the first option is \fB--trace\fP,
+then that is processed (and removed) before \fB\*p\fR initializes the display.
+.
+.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"
+Prints \fB\*p\fR's version to the standard output, and exits.
+See also "\fB--print-version\fP".
+.
+.IP "\fB--visit-items"
+Modify the tab-traversal of checklist, radiolist, 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--buildlist \fItext height width \fR[ \fItag item status \fR] \fI..."
+A \fBbuildlist\fP dialog displays two lists, side-by-side.
+The list on the left shows unselected items.
+The list on the right shows selected items.
+As items are selected or unselected, they move between the lists.
+.IP
+Use a carriage return or the "OK" button to accept the current value
+in the selected-window and exit.
+The results are written using the order displayed in the selected-window.
+.IP
+The initial on/off state of each entry is specified by
+.IR status "."
+.IP
+The dialog behaves like a \fBmenu\fP, using the \fB--visit-items\fP
+to control whether the cursor is allowed to visit the lists directly.
+.RS
+.bP
+If \fB--visit-items\fP is not given,
+tab-traversal uses two states (OK/Cancel).
+.bP
+If \fB--visit-items\fP is given,
+tab-traversal uses four states (Left/Right/OK/Cancel).
+.RE
+.IP
+Whether or not \fB--visit--items\fP is given,
+it is possible to move the highlight between the two lists using
+the default "^" (left-column) and "$" (right-column) keys.
+.IP
+On exit, a list of the \fItag\fP
+strings of those entries that are turned on
+will be printed on \fB\*p\fP's output.
+.IP
+If the "\fB--separate-output\fP" option is not given,
+the strings will be quoted as needed to make it simple for scripts to separate them.
+By default, this uses double-quotes.
+See the "\fB--single-quoted\fP" option, which modifies the quoting behavior.
+.
+.
+.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 \fB\*p\fP's output.
+.IP
+If the "\fB--separate-output\fP" option is not given,
+the strings will be quoted as needed to make it simple for scripts to separate them.
+By default, this uses double-quotes.
+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 \fB\*p\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 \fB\*p\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
+.bP
+If \fIflen\fR is zero, the corresponding field cannot be altered.
+and the contents of the field determine the displayed-length.
+.bP
+If \fIflen\fR is negative, the corresponding field cannot be altered,
+and the negated value of \fIflen\fR is used as the displayed-length.
+.bP
+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 \fB\*p\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 \fB\*p\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 \fB\*p\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 \fB\*p\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, \fB\*p\fP
+will exit immediately after displaying the message to the user.
+The screen is not cleared when \fB\*p\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 \fB\*p\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 \fB\*p\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 \fB\*p\fP will write the following on \fB\*p\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 \fB\*p\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 \*l(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 \fB\*p\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
+\fB\*p\fP will exit and the calling shell script can continue its operation.
+.IP
+If the message is too large for the space,
+\fB\*p\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 \fB\*p\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 \fB\*p\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--prgbox \fItext command height width"
+.IP "\fB--prgbox \fIcommand height width"
+A \fBprgbox\fP is very similar to a \fBprogrambox\fP.
+.IP
+This dialog box is used to display the output of a command that is
+specified as an argument to \fBprgbox\fP.
+.IP
+After the command completes, 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 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--programbox \fItext height width"
+.IP "\fB--programbox \fIheight width"
+A \fBprogrambox\fP is very similar to a \fBprogressbox\fP.
+The only difference between a \fBprogram\fP box and a \fBprogress\fP
+box is that a \fBprogram\fP box displays an \fBOK\fP button
+(but only after the command completes).
+.IP
+This dialog box is used to display the piped output of a command.
+After the command completes, 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 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--progressbox \fItext height width"
+.IP "\fB--progressbox \fIheight width"
+A \fBprogressbox\fP is similar to an \fBtailbox\fP,
+except that
+.RS
+.TP 3
+a) rather than displaying the contents of a file,
+it displays the piped output of a command and
+.TP 3
+b) it will exit when it reaches the end of the file
+(there is no "OK" button).
+.RE
+.IP
+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 tag of the selected item is written to \fB\*p\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 \fB\*p\fP's output.
+Only an "OK" button is provided for input,
+but an ESC exit status may be returned.
+.
+.
+.nf
+.IP "\fB--rangebox \fItext height width list-height min-value max-value default-value"
+.fi
+Allow the user to select from a range of values, e.g., using a slider.
+The dialog shows the current value as a bar (like the gauge dialog).
+Tabs or arrow keys move the cursor between the buttons and the value.
+When the cursor is on the value,
+you can edit it by:
+.RS
+.TP 5
+left/right cursor movement to select a digit to modify
+.TP 5
++/-
+characters to increment/decrement the digit by one
+.TP 5
+0 through 9
+to set the digit to the given value
+.RE
+.IP
+Some keys are also recognized in all cursor positions:
+.RS
+.TP 5
+home/end
+set the value to its maximum or minimum
+.TP 5
+pageup/pagedown
+increment the value so that the slider moves by one column
+.RE
+.
+.
+.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
+\*L 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"),
+\fB\*p\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, \fB\*p\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 \fB\*p\fP's output.
+Only an "EXIT" button is provided for input,
+but an ESC exit status may be returned.
+.IP
+NOTE:
+Older versions of \fB\*p\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 \fB\*p\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--treeview \fItext height width list-height \fR[ \fItag item status depth \fR] \fI..."
+Display data organized as a tree.
+Each group of data contains a tag,
+the text to display for the item,
+its status ("on" or "off")
+and the depth of the item in the tree.
+.IP
+Only one item can be selected (like the \fBradiolist\fP).
+The tag is not displayed.
+.IP
+On exit, the tag of the selected item is written to \fB\*p\fP's output.
+.
+.
+.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 \fB\*p\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
+"\*p --create-rc <file>"
+.TP 4
+2.
+At start,
+\fB\*p\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
+\fB\*p\fP
+can find, as stated in step 2 above.
+.
+.\" ************************************************************************
+.SH "KEY BINDINGS"
+You can override or add to key bindings in \fB\*p\fP
+by adding to the configuration file.
+\fB\*L\fP's \fBbindkey\fP command maps single keys to its internal coding.
+.Ex
+bindkey \fIwidget\fP \fIcurses_key\fP \fIdialog_key\fP
+.Ee
+.PP
+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".
+\fB\*L\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
+\fB\*L\fP's internal keycode names correspond to the
+\fBDLG_KEYS_ENUM\fP type in
+\fBdlg_keys.h\fP, e.g., "HELP" from "DLGK_HELP".
+.SS Widget Names
+.PP
+Some widgets (such as the formbox) have an area where fields can be edited.
+Those are managed in a subwindow of the widget, and
+may have separate keybindings from the main widget
+because the subwindows are registered using a different name.
+.TS
+center tab(/) ;
+l l l
+l l l .
+\fIWidget\fR/\fIWindow name\fR/\fISubwindow Name\fR
+calendar/calendar
+checklist/checklist
+editbox/editbox/editbox2
+form/formbox/formfield
+fselect/fselect/fselect2
+inputbox/inputbox/inputbox2
+menu/menubox/menu
+msgbox/msgbox
+pause/pause
+progressbox/progressbox
+radiolist/radiolist
+tailbox/tailbox
+textbox/textbox/searchbox
+timebox/timebox
+yesno/yesno
+.TE
+.PP
+Some widgets are actually other widgets,
+using internal settings to modify the behavior.
+Those use the same widget name as the actual widget:
+.TS
+center tab(/) ;
+l l
+l l .
+\fIWidget\fR/\fIActual Widget\fR
+dselect/fselect
+infobox/msgbox
+inputmenu/menu
+mixedform/form
+passwordbox/inputbox
+passwordform/form
+prgbox/progressbox
+programbox/progressbox
+tailboxbg/tailbox
+.TE
+.SS Built-in Bindings
+This manual page does not list the key bindings for each widget,
+because that detailed information can be obtained by running \fB\*p\fP.
+If you have set the \fB--trace\fP option,
+\fB\*p\fP writes the key-binding information for each widget
+as it is registered.
+.SS Example
+Normally \fB\*p\fP uses different keys for navigating between the buttons
+and editing part of a dialog versus navigating within the editing part.
+That is, tab (and back-tab) traverse buttons
+(or between buttons and the editing part),
+while arrow keys traverse fields within the editing part.
+Tabs are also recognized as a special case for traversing between
+widgets, e.g., when using multiple tailboxbg widgets.
+.PP
+Some users may wish to use the same key for traversing within the
+editing part as for traversing between buttons.
+The form widget is written to support this sort of redefinition of
+the keys, by adding a special group in <code>dlgk_keys.h</code>
+for "form" (left/right/next/prev).
+Here is an example binding demonstrating how to do this:
+.Ex
+bindkey formfield TAB form_NEXT
+bindkey formbox TAB form_NEXT
+bindkey formfield BTAB form_prev
+bindkey formbox BTAB form_prev
+.Ee
+.PP
+That type of redefinition would not be useful in other widgets,
+e.g., calendar, due to the potentially large number of fields to traverse.
+.
+.\" ************************************************************************
+.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 \fB\*p\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 \fB--item-help\fP (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 \fB\*p\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 \fB\*p\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.
+The default values and corresponding environment variables
+that can override them are:
+.TP 5
+0
+if the \fBYES\fP or \fBOK\fP button is pressed (DIALOG_OK).
+.TP 5
+1
+if the
+.BR No " or " Cancel
+button is pressed (DIALOG_CANCEL).
+.TP 5
+2
+if the
+.BR Help
+button is pressed (DIALOG_HELP),
+.br
+except as noted below about DIALOG_ITEM_HELP.
+.TP 5
+3
+if the
+.BR Extra
+button is pressed (DIALOG_EXTRA).
+.TP 5
+4
+if the
+.BR Help
+button is pressed,
+.br
+and the \fB--item-help\fP option is set
+.br
+and the DIALOG_ITEM_HELP environment variable is set to 4.
+.IP
+While any of the exit-codes can be overridden using environment variables,
+this special case was introduced in 2004 to simplify compatibility.
+\fB\*L\fP uses DIALOG_ITEM_HELP(4) internally,
+but unless the environment variable is also set,
+it changes that to DIALOG_HELP(2) on exit.
+.TP 5
+-1
+if errors occur inside \fB\*p\fP (DIALOG_ERROR)
+or \fB\*p\fP exits because the \fIESC\fP key (DIALOG_ESC) was pressed.
+.
+.\" ************************************************************************
+.SH PORTABILITY
+\fB\*L\fP works with X/Open curses.
+However, some implementations have deficiencies:
+.RS 3
+.bP
+HPUX curses (and perhaps others) do not open the terminal properly for
+the \fInewterm\fP function.
+This interferes with \fB\*p\fP's \fB--input-fd\fP option,
+by preventing cursor-keys and similar escape sequences from being recognized.
+.bP
+NetBSD 5.1 curses has incomplete support for wide-characters.
+\fB\*p\fP will build, but not all examples display properly.
+.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 \fB\*p\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 \fB\*p\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 \fB\*p\fP.
+There are some differences not shown in the manpage.
+For example, the html documentation states
+.RS
+.PP
+Note: former Xdialog releases used the "\n" (line feed) as a
+results separator for the checklist widget; this has been
+changed to "/" in Xdialog v1.5.0 so to make it compatible with
+(c)dialog. In your old scripts using the Xdialog checklist, you
+will then have to add the --separate-output option before the
+--checklist one.
+.RE
+.PP
+\fB\*L\fP has not used a different separator;
+the difference was likely due to confusion regarding some script.
+.SS WHIPTAIL
+Then there is \fBwhiptail\fP.
+For practical purposes, it is maintained by Debian
+(very little work is done by its upstream developers).
+Its documentation (README.whiptail) claims
+.RS
+.sp
+.nf
+whiptail(1) is a lightweight replacement for \*p(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 \*p, 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 \fB\*p\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 \fB\*p\fP,
+such as the gauge box.
+\fBwhiptail\fP is less compatible with \fB\*p\fP than the
+original mid-1990s dialog 0.4 program.
+.PP
+\fBwhiptail\fP's manpage borrows features from \fB\*p\fP, e.g.,
+but oddly cites only \fB\*p\fP versions up to 0.4 (1994) as a source.
+That is, its manpage refers to features which
+were borrowed from more recent versions of \fB\*p\fP, e.g.,
+.bP
+\fB--gauge\fP (from 0.5)
+.bP
+\fB--passwordbox\fP (from Debian changes in 1999),
+.bP
+\fB--default-item\fP (from \fB\*p\fP 2000/02/22),
+.bP
+\fB--output-fd\fP (from \fB\*p\fP 2002/08/14).
+.PP
+Somewhat humorously, one may note that the \fBpopt\fP feature
+(undocumented in its manpage)
+of using a "--" as an escape was documented in \fB\*p\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 \fB\*p\fP variation.
+.PP
+The \fB\*p\fP program ignores or maps these options which are recognized
+by \fBwhiptail\fP:
+.RS
+.TS
+l l
+_ _
+l l.
+\fIOption\fR \fITreatment\fR
+\fB--cancel-button\fP mapped to \fB--cancel-label\fP
+\fB--fb\fP ignored
+\fB--fullbutton\fP ignored
+\fB--no-button\fP mapped to \fB--no-label\fP
+\fB--nocancel\fP mapped to \fB--no-cancel\fP
+\fB--noitem\fP mapped to \fB--no-items\fP
+\fB--notags\fP mapped to \fB--no-tags\fP
+\fB--ok-button\fP mapped to \fB--ok-label\fP
+\fB--scrolltext\fP mapped to \fB--scrollbar\fP
+\fB--topleft\fP mapped to \fB--begin 0 0\fP
+\fB--yes-button\fP mapped to \fB--yes-label\fP
+.TE
+.RE
+.LP
+There are visual differences which are not addressed by command-line options:
+.bP
+\fB\*p\fP centers lists within the window.
+\fBwhiptail\fP typically puts lists against the left margin.
+.bP
+\fBwhiptail\fP uses angle brackets ("<" and ">") for marking buttons.
+\fB\*p\fP uses square brackets.
+.bP
+\fBwhiptail\fP marks the limits of subtitles with vertical bars.
+\fB\*p\fP does not mark the limits.
+.bP
+\fBwhiptail\fP attempts to mark the top/bottom cells of a scrollbar
+with up/down arrows.
+When it cannot do this,
+it fills those cells with the background color
+of the scrollbar and confusing the user.
+\fB\*p\fP uses the entire scrollbar space,
+thereby getting better resolution.
+.\" ************************************************************************
+.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 \fB\*p 0.9a\fP,
+which lists as authors:
+.bP
+Savio Lam - version 0.3, "dialog"
+.bP
+Stuart Herbert - patch for version 0.4
+.bP
+Marc Ewing - the gauge widget.
+.bP
+Pasquale De Marco "Pako" - version 0.9a, "cdialog"
diff --git a/contrib/dialog/dialog.3 b/contrib/dialog/dialog.3
new file mode 100644
index 0000000..de91fbd
--- /dev/null
+++ b/contrib/dialog/dialog.3
@@ -0,0 +1,3805 @@
+'\" t
+.\" $Id: dialog.3,v 1.93 2013/09/22 23:58:11 tom Exp $
+.\" Copyright 2005-2012,2013 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.
+.\"
+.\" definitions for renaming
+.ds p dialog
+.ds l dialog
+.ds L Dialog
+.ds D DIALOG
+.
+.de ES
+.ne 8
+.IP
+..
+.de EX
+.RS +10
+.nf
+..
+.de EE
+.fi
+.RE
+..
+.\" Bulleted paragraph
+.de bP
+.IP \(bu 4
+..
+.TH \*D 3 "" "$Date: 2013/09/22 23:58:11 $"
+.SH NAME
+dialog \- widgets and utilities for the \*p program
+.SH SYNOPSIS
+.B cc [ flag ... ] file ... -l\*l [ library ... ]
+.br
+\ \ \ or
+.br
+.B cc `\*p-config --cflags` file ... `\*p-config --libs` ]
+.sp
+.B #include <\*l.h>
+.PP
+\fB\*L\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 \fB\*l\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<\*l.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 \fB\*p\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 \fB\*p\fP(1)).
+The \fIDIALOG_ATR(n)\fP macro is used for defining the references
+to the combined color and attribute table \fBdlg_color_table[]\fP.
+.PP
+The \fB\*p\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<\*l.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 \fB\*l\fP library is stored in
+a few structures: \fIDIALOG_STATE\fP, \fIDIALOG_VARS\fP and \fIDIALOG_COLORS\fP.
+The corresponding \fBdialog_state\fP, \fBdialog_vars\fP and \fBdlg_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 \fB\*l\fP library.
+.\" ---------------------------------------------------------------------------
+.IP \fIDIALOG_STATE.all_subwindows
+This is a linked list of all subwindows created by the library.
+The \fBdlg_del_window\fP function uses this
+to free storage for subwindows when deleting a window.
+.\" ---------------------------------------------------------------------------
+.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.finish_string
+When set to true, this allows calls to \fBdlg_finish_string\fP to discard the
+corresponding data which is created to speed up layout computations for the
+given string parameter. The \fBgauge\fP widget uses this feature.
+.\" ---------------------------------------------------------------------------
+.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.no_mouse
+This corresponds to the command-line option "\fB--no-mouse\fP".
+If true, \fB\*p\fP will not initialize (and enable) the mouse in
+\fIinit_dialog\fP.
+.\" ---------------------------------------------------------------------------
+.IP \fIDIALOG_STATE.output
+This is set in the \fB\*p\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 \fBdlg_does_output\fP,
+which is called by each widget that writes text to the output.
+The \fB\*p\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 \fB\*p\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 \fB\*p\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.trace_output
+This corresponds to the command-line option "\fB--trace\fP \fIfile\fP".
+It is the file pointer to which trace messages are written.
+.\" ---------------------------------------------------------------------------
+.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 \fB\*p\fP application resets the \fBdialog_vars\fP data before
+accepting options to invoke each widget.
+Most of the \fIDIALOG_VARS\fP members are set directly from \fB\*p\fP's
+command-line options:
+.\" ---------------------------------------------------------------------------
+.IP \fIDIALOG_VARS.ascii_lines
+This corresponds to the command-line option "\fB--ascii-lines\fP.
+It causes line-drawing to be done with ASCII characters, e.g., "+" and "-".
+See \fIDIALOG_VARS.no_lines\fP.
+.\" ---------------------------------------------------------------------------
+.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
+\fB\*p\fP
+to put the
+\fBtailboxbg\fP
+box in the background,
+printing its process id to \fB\*p\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 \fB\*p\fP 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
+This corresponds to the command-line option "\fB--column-separator\fP".
+\fB\*L\fP splits data for radio/checkboxes and menus on the
+occurrences of the given string, and aligns the split data into columns.
+.\" ---------------------------------------------------------------------------
+.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, \fB\*p\fR will only wrap lines where needed to fit inside the text box.
+Even though you can control line breaks with this,
+\fB\*p\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_button
+This is set by the command-line option "\fB--default-button\fP.
+It is used by \fBdlg_default_button\fP.
+.\" ---------------------------------------------------------------------------
+.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 \fB\*p\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_file
+This corresponds to the command-line option "\fB--hfile\fP \fIstring\fP".
+The given filename is passed to \fBdialog_helpfile\fP when the user
+presses F1.
+.\" ---------------------------------------------------------------------------
+.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_line
+This corresponds to the command-line option "\fB--hline\fP \fIstring\fP".
+The given string is displayed in the bottom of dialog windows,
+like a subtitle.
+.\" ---------------------------------------------------------------------------
+.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.help_tags
+This corresponds to the command-line option "\fB--help-tags\fP".
+If true,
+\fBdlg_add_help_formitem\fP and
+\fBdlg_add_help_listitem\fP use the item's tag value consistently
+rather than using the tag's help-text value
+when \fIDIALOG_VARS.item_help\fP is set.
+.\" ---------------------------------------------------------------------------
+.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
+This may be either a user-supplied buffer,
+or a buffer dynamically allocated by the library,
+depending on \fIDIALOG_VARS.input_length\fP:
+.RS
+.bP
+If \fIDIALOG_VARS.input_length\fP is zero,
+this is a pointer to user buffer (on the stack, or static).
+The buffer size is assumed to be \fBMAX_LEN\fP,
+which is defined in \fI<\*l.h>\fP.
+.bP
+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.
+.RE
+.IP
+Certain widgets copy a result to this buffer.
+If the pointer is NULL, or if the length is insufficient for
+the result, then the \fB\*l\fP library allocates a buffer which is large enough,
+and sets \fIDIALOG_VARS.input_length\fP.
+Callers should check for this case if they have supplied their own buffer.
+.\" ---------------------------------------------------------------------------
+.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.in_helpfile
+This variable is used to prevent \fBdialog_helpfile\fP from showing
+anything, e.g., if F1 were pressed within a help-file display.
+.\" ---------------------------------------------------------------------------
+.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 \fB\*p\fP to not attempt to cancel the terminal initialization
+(termcap \fIti\fP/\fIte\fP) sequences which correspond to xterm's alternate-screen
+switching.
+Normally \fB\*p\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.last_key
+This corresponds to the command-line option "\fB--last-key\fP".
+.\" ---------------------------------------------------------------------------
+.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_items
+This corresponds to the command-line option "\fB--no-items\fP".
+Some widgets (checklist, inputmenu, radiolist, menu) display a list
+with two columns (a "tag" and "item", i.e., "description").
+This tells \fB\*p\fP to read shorter rows from data,
+omitting the "list".
+.\" ---------------------------------------------------------------------------
+.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
+This corresponds to the command-line option "\fB--no-lines\fP.
+It suppresses line-drawing.
+See \fIDIALOG_VARS.ascii_lines\fP.
+.\" ---------------------------------------------------------------------------
+.IP \fIDIALOG_VARS.no_nl_expand
+This corresponds to the command-line option "\fB--no-nl-expand\fP".
+If false, \fBdlg_trim_string\fP converts literal "\\n" substrings
+in a message into newlines.
+.\" ---------------------------------------------------------------------------
+.IP \fIDIALOG_VARS.no_tags
+This corresponds to the command-line option "\fB--no-tags\fP".
+Some widgets (checklist, inputmenu, radiolist, menu) display a list
+with two columns (a "tag" and "item", also known as "description").
+The tag is useful for scripting, but may not help the user.
+The \fB--no-tags\fP option (from Xdialog) may be used to suppress the
+column of tags from the display.
+.IP
+Normally \fB\*p\fP allows you to quickly move to entries on the displayed list,
+by matching a single character to the first character of the tag.
+When the \fB--no-tags\fP option is given, \fB\*p\fP matches against
+the first character of the description.
+In either case, the matchable character is highlighted.
+.IP
+Here is a table showing how the no_tags and no_items values interact:
+.TS
+tab(/);
+l l l l l
+_ _ _ _ _
+l l l c c.
+Widget/Fields Shown/Fields Read/.no_items/.no_tags
+buildlist/item/tag,item/0/0*
+buildlist/item/tag,item/0/1
+buildlist/tag/tag/1/0*
+buildlist/tag/tag/1/1
+checklist/tag,item/tag,item/0/0
+checklist/item/tag,item/0/1
+checklist/tag/tag/1/0
+checklist/tag/tag/1/1
+inputmenu/tag,item/tag,item/0/0
+inputmenu/item/tag,item/0/1
+inputmenu/tag/tag/1/0
+inputmenu/tag/tag/1/1
+menu/tag,item/tag,item/0/0
+menu/item/tag,item/0/1
+menu/tag/tag/1/0
+menu/tag/tag/1/1
+radiolist/tag,item/tag,item/0/0
+radiolist/item/tag,item/0/1
+radiolist/tag/tag/1/0
+radiolist/tag/tag/1/1
+treeview/item/tag,item/0/0*
+treeview/item/tag,item/0/1
+treeview/tag/tag/1/0*
+treeview/tag/tag/1/1
+_
+.TE
+.RS
+.TP 2
+*
+Xdialog does not display the tag column for the analogous buildlist
+and treeview widgets.
+\fB\*L\fP does the same on the command-line.
+However the library interface defaults to displaying the tag column.
+Your application can enable or disable the tag column as needed for each widget.
+.RE
+.\" ---------------------------------------------------------------------------
+.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 \fB\*p\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 \fB\*p\fR will still wrap text, subject to the \fB--cr-wrap\fR
+option.
+.\" ---------------------------------------------------------------------------
+.IP \fIDIALOG_VARS.nook
+This corresponds to the command-line option "\fB--nook\fP.
+\fB\*L\fP will suppress the "ok" (or "yes") button from the widget.
+.\" ---------------------------------------------------------------------------
+.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 \fB\*p\fP's output when it is invoked.
+.\" ---------------------------------------------------------------------------
+.IP \fIDIALOG_VARS.quoted
+This corresponds to the command-line option "\fB--quoted\fP.
+.\" ---------------------------------------------------------------------------
+.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, \fB\*p\fP uses double quotes around each item.
+The latter 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 the list-oriented widgets
+(buildlist, checklist, radiobox, menubox, inputmenu, and treeview)
+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 \fB\*p\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_buildlist
+implements the "\fB--buildlist\fP" option.
+.RS
+.TP 5
+.B const char * \fItitle
+is the title on 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 rows in \fIitems\fP.
+.TP 5
+.B char ** \fIitems
+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 \fBdialog_vars.item_help\fP is set.
+.TP 5
+.B int \fIorder_mode
+is reserved for future enhancements
+.RE
+.
+.\" ************************************************************************
+.IP \fBdialog_calendar
+implements the "\fB--calendar\fP" option.
+.RS
+.TP 5
+.B const char * \fItitle
+is the title on the top of the widget.
+.TP 5
+.B const char * \fIsubtitle
+is the prompt text shown within the widget.
+.TP 5
+.B int \fIheight
+is the height excluding the fixed-height calendar grid.
+.TP 5
+.B int \fIwidth
+is the overall width of the box,
+which is adjusted up to the calendar grid's minimum width if needed.
+.TP 5
+.B int \fIday
+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.
+.TP 5
+.B int \fImonth
+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.
+.TP 5
+.B int \fIyear
+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
+.TP 5
+.B const char * \fItitle
+is the title on 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 rows in \fIitems\fP.
+.TP 5
+.B int \fIitems
+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 \fBdialog_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
+.TP 5
+.B const char * \fItitle
+is the title on the top of the widget.
+.TP 5
+.B const char * \fIpath
+is the preselected value to show in the input-box,
+which is used also to set the directory- and file-windows.
+.TP 5
+.B int \fIheight
+is the height excluding the minimum needed to show the dialog box framework.
+If zero, the height is based on the screen size.
+.TP 5
+.B int \fIwidth
+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
+.TP 5
+.B const char * \fItitle
+is the title on the top of the widget.
+.TP 5
+.B const char * \fIfile
+is the name of the file from which to read.
+.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
+.\" ************************************************************************
+.IP \fBdialog_form
+implements the "\fB--form\fP" option.
+.RS
+.TP 5
+.B const char * \fItitle
+is the title on 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 rows in \fIitems\fP.
+.TP 5
+.B int \fIitems
+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 \fBdialog_vars.item_help\fP is set.
+.RE
+.\" ************************************************************************
+.IP \fBdialog_fselect
+implements the "\fB--fselect\fP" option.
+.RS
+.TP 5
+.B const char * \fItitle
+is the title on the top of the widget.
+.TP 5
+.B const char * \fIpath
+is the preselected value to show in the input-box,
+which is used also to set the directory- and file-windows.
+.TP 5
+.B int \fIheight
+is the height excluding the minimum needed to show the dialog box framework.
+If zero, the height is based on the screen size.
+.TP 5
+.B int \fIwidth
+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.
+Alternatively, a simpler or customized gauge widget can be
+setup using
+\fBdlg_allocate_gauge\fP,
+\fBdlg_reallocate_gauge\fP,
+\fBdlg_update_gauge\fP and
+\fBdlg_free_gauge\fP.
+.RS
+.TP 5
+.B const char * \fItitle
+is the title on 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 based on the screen size.
+.TP 5
+.B int \fIwidth
+is the desired width of the box.
+If zero, the height is based on the screen size.
+.TP 5
+.B int \fIpercent
+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
+.TP 5
+.B const char * \fItitle
+is the title on 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 based on the screen size.
+.TP 5
+.B int \fIwidth
+is the desired width of the box.
+If zero, the height is based on the screen size.
+.TP 5
+.B const char * \fIinit
+is the initial value of the input box, whose length is taken into account
+when auto-sizing the width of the dialog box.
+.TP 5
+.B int \fIpassword
+if true, causes typed input to be echoed as asterisks.
+.RE
+.\" ************************************************************************
+.IP \fBdialog_helpfile
+implements the "\fB--hfile\fP" option.
+.RS
+.TP 5
+.B const char * \fItitle
+is the title on the top of the widget.
+.TP 5
+.B const char * \fIfile
+is the name of a file containing the text to display.
+This function is internally bound to F1 (function key "1"),
+passing \fBdialog_vars.help_file\fP as a parameter.
+The \fBdialog\fP program sets that variable when the \fB--hfile\fP option
+is given.
+.TP 5
+.B int \fIheight
+is the desired height of the box.
+If zero, the height is based on the screen size.
+.TP 5
+.B int \fIwidth
+is the desired width of the box.
+If zero, the height is based on the screen size.
+.RE
+.\" ************************************************************************
+.IP \fBdialog_menu
+implements the "\fB--menu\fP" or "\fB--inputmenu\fP" option
+depending on whether \fBdialog_vars.input_menu\fP is set.
+.RS
+.TP 5
+.B const char * \fItitle
+is the title on 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 based on the screen size.
+.TP 5
+.B int \fIwidth
+is the desired width of the box.
+If zero, the height is based on the 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 rows in \fIitems\fP.
+.TP 5
+.B int \fIitems
+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 \fBdialog_vars.item_help\fP is set.
+.RE
+.\" ************************************************************************
+.IP \fBdialog_mixedform
+implements the "\fB--mixedform\fP" option.
+.RS
+.TP 5
+.B const char * \fItitle
+is the title on 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 rows in \fIitems\fP.
+.TP 5
+.B int \fIitems
+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 \fBdialog_vars.item_help\fP is set.
+.RE
+.\" ************************************************************************
+.IP \fBdialog_mixedgauge
+implements the "\fB--mixedgauge\fP" option
+.RS
+.TP 5
+.B const char * \fItitle
+is the title on the top of the widget.
+.TP 5
+.B const char * \fIcprompt
+is the caption text shown within the widget.
+.TP 5
+.B int \fIheight
+is the desired height of the box.
+If zero, the height is based on the screen size.
+.TP 5
+.B int \fIwidth
+is the desired width of the box.
+If zero, the height is based on the screen size.
+.TP 5
+.B int \fIpercent
+is the percentage to show in the progress bar.
+.TP 5
+.B int \fIitem_no
+is the number of rows in \fIitems\fP.
+.TP 5
+.B int \fIitems
+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
+.TP 5
+.B const char * \fItitle
+is the title on 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 based on the screen size.
+.TP 5
+.B int \fIwidth
+is the desired width of the box.
+If zero, the height is based on the screen size.
+.TP 5
+.B int \fIpauseopt
+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
+.TP 5
+.B const char * \fItitle
+is the title on the top of the widget.
+.TP 5
+.B int \fIheight
+is the desired height of the box.
+If zero, the height is based on the screen size.
+.TP 5
+.B int \fIwidth
+is the desired width of the box.
+If zero, the height is based on the screen size.
+.TP 5
+.B int \fIseconds
+is the timeout to use for the progress bar.
+.RE
+.\" ************************************************************************
+.IP \fBdialog_prgbox
+implements the "\fB--prgbox\fP" option.
+.RS
+.TP 5
+.B const char * \fItitle
+is the title on the top of the widget.
+.TP 5
+.B const char * \fIcprompt
+is the prompt text shown within the widget.
+If empty or null, no prompt is shown.
+.TP 5
+.B const char * \fIcommand
+is the name of the command to execute.
+.TP 5
+.B int \fIheight
+is the desired height of the box.
+If zero, the height is based on the screen size.
+.TP 5
+.B int \fIwidth
+is the desired width of the box.
+If zero, the height is based on the screen size.
+.TP 5
+.B int \fIpauseopt
+if true, an "OK" button will be shown,
+and the dialog will wait for it to complete.
+.RE
+.\" ************************************************************************
+.IP \fBdialog_progressbox
+implements the "\fB--progressbox\fP" option.
+.RS
+.TP 5
+.B const char * \fItitle
+is the title on the top of the widget.
+.TP 5
+.B const char * \fIcprompt
+is the prompt text shown within the widget.
+If empty or null, no prompt is shown.
+.TP 5
+.B int \fIheight
+is the desired height of the box.
+If zero, the height is based on the screen size.
+.TP 5
+.B int \fIwidth
+is the desired width of the box.
+If zero, the height is based on the screen size.
+.RE
+.\" ************************************************************************
+.IP \fBdialog_rangebox
+implements the "\fB--rangebox\fP" option.
+.RS
+.TP 5
+.B const char * \fItitle
+is the title on the top of the widget.
+.TP 5
+.B const char * \fIcprompt
+is the prompt text shown within the widget.
+If empty or null, no prompt is shown.
+.TP 5
+.B int \fIheight
+is the desired height of the widget.
+If zero, the height is based on the screen size.
+.TP 5
+.B int \fIwidth
+is the desired width of the widget.
+If zero, the height is based on the screen size.
+.TP 5
+.B int \fImin_value
+is the minimum value to allow.
+.TP 5
+.B int \fImax_value
+is the maximum value to allow.
+.TP 5
+.B int \fIdefault_value
+is the default value, if no change is made.
+.RE
+.\" ************************************************************************
+.IP \fBdialog_tailbox
+implements the "\fB--tailbox\fP" or "\fB--tailboxbg\fP" option
+depending on whether \fIbg_task\fP is set.
+.RS
+.TP 5
+.B const char * \fItitle
+is the title on the top of the widget.
+.TP 5
+.B const char * \fIfile
+is the name of the file to display in the dialog.
+.TP 5
+.B int \fIheight
+is the desired height of the box.
+If zero, the height is based on the screen size.
+.TP 5
+.B int \fIwidth
+is the desired width of the box.
+If zero, the height is based on the screen size.
+.TP 5
+.B int \fIbg_task
+if true,
+the window is added to the callback list in \fBdialog_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
+.TP 5
+.B const char * \fItitle
+is the title on the top of the widget.
+.TP 5
+.B const char * \fIfile
+is the name of the file to display in the dialog.
+.TP 5
+.B int \fIheight
+is the desired height of the box.
+If zero, the height is based on the screen size.
+.TP 5
+.B int \fIwidth
+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
+.TP 5
+.B const char * \fItitle
+is the title on the top of the widget.
+.TP 5
+.B const char * \fIsubtitle
+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 based on the screen size.
+.TP 5
+.B int \fIwidth
+is the desired width of the box.
+If zero, the height is based on the screen size.
+.TP 5
+.B int \fIhour
+is the initial hour shown.
+If the value is negative, the current hour is used.
+Returns DLG_EXIT_ERROR if the value specified is greater than or equal to 24.
+.TP 5
+.B int \fIminute
+is the initial minute shown.
+If the value is negative, the current minute is used.
+Returns DLG_EXIT_ERROR if the value specified is greater than or equal to 60.
+.TP 5
+.B int \fIsecond
+is the initial second shown.
+If the value is negative, the current second is used.
+Returns DLG_EXIT_ERROR if the value specified is greater than or equal to 60.
+.RE
+.\" ************************************************************************
+.IP \fBdialog_treeview
+implements the "\fB--treeview\fP" option.
+.RS
+.TP 5
+.B const char * \fItitle
+is the title on 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 based on the screen size.
+.TP 5
+.B int \fIwidth
+is the desired width of the box.
+If zero, the height is based on the 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 rows in \fIitems\fP.
+.TP 5
+.B char ** \fIitems
+is the list of items, contain tag, name, and optionally help strings
+(if \fBdialog_vars.item_help\fP is set).
+The initial selection state for each item is also in this list.
+.TP 5
+.B int \fIflag
+.IP flag
+is either \fIFLAG_CHECK\fP, for checklists (multiple selections),
+or \fIFLAG_RADIO\fP for radiolists (a single selection).
+.RE
+.\" ************************************************************************
+.IP \fBdialog_yesno
+implements the "\fB--yesno\fP" option.
+.RS
+.TP 5
+.B const char * \fItitle
+is the title on 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 based on the screen size.
+.TP 5
+.B int \fIwidth
+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 \fB\*p\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 \fBdialog_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_help_formitem
+This is a utility function used enforce consistent behavior for
+the \fIDIALOG_VARS.help_tags\fP and \fIDIALOG_VARS.item_help\fP variables.
+.RS
+.TP 5
+.B int *\fIresult\fP
+this is updated to DLG_EXIT_ITEM_HELP if \fIDIALOG_VARS.item_help\fP is set.
+.TP 5
+.B char **\fItag\fP
+the tag- or help-text is stored here.
+.TP 5
+.B DIALOG_FORMITEM *\fIitem\fP
+contains the list item to use for tag- or help-text.
+.RE
+.\" ---------------------------------------------------------------------------
+.TP 5
+.B dlg_add_help_listitem
+This is a utility function used enforce consistent behavior for
+the \fIDIALOG_VARS.help_tags\fP and \fIDIALOG_VARS.item_help\fP variables.
+.RS
+.TP 5
+.B int *\fIresult\fP
+this is updated to DLG_EXIT_ITEM_HELP if \fIDIALOG_VARS.item_help\fP is set.
+.TP 5
+.B char **\fItag\fP
+the tag- or help-text is stored here.
+.TP 5
+.B DIALOG_LISTITEM *\fIitem\fP
+contains the list item to use for tag- or help-text.
+.RE
+.\" ---------------------------------------------------------------------------
+.TP 5
+.B dlg_add_last_key
+Report the last key entered by the user.
+This implements the \fB\-\-last\-key\fP command-line option,
+using \fBdialog_vars.last_key\fP.
+.RS
+.TP 5
+.B int \fImode
+controls the way the last key report is separated from other results:
+.RS
+.TP 5
+-2
+(no separator)
+.TP 5
+-1
+(separator after the key name)
+.TP 5
+0
+(separator is optionally before the key name)
+.TP 5
+1
+(same as -1)
+.RE
+.RE
+.\" ---------------------------------------------------------------------------
+.TP 5
+.B dlg_add_quoted
+Add a quoted string to the result buffer (see \fBdlg_add_result\fP).
+If no quotes are necessary, none are used.
+If \fBdialog_vars.single_quoted\fR is set, single-quotes are used.
+Otherwise, double-quotes are used.
+.RS
+.TP 5
+.B char * \fIstring
+is the string to add.
+.RE
+.\" ---------------------------------------------------------------------------
+.TP 5
+.B dlg_add_result
+Add a 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_allocate_gauge
+Allocates a gauge widget.
+Use \fBdlg_update_gauge\fP to display the result.
+.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 \fIpercent
+is the percentage to show in the progress bar.
+.RE
+.\" ---------------------------------------------------------------------------
+.TP 5
+.B dlg_asciibox
+returns its parameter transformed to the
+corresponding "+" or "-", etc. for the line-drawing characters used in \fB\*p\fP.
+If the parameter is not a line-drawing or other special character such as ACS_DARROW, it returns 0.
+.RS
+.TP 5
+.B chtype \fIch
+is the parameter, usually one of the \fBACS_\fP\fIxxx\fP constants.
+.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 * \fIwidth
+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 \fBchtype\fP parameter transformed as follows:
+.RS
+.bP
+if neither \fBdialog_vars.ascii_lines\fP nor \fBdialog_vars.no_lines\fP is set.
+.bP
+if \fBdialog_vars.ascii_lines\fP is set, returns the corresponding "+" or "-", etc. for the line-drawing characters used in \fB\*p\fP.
+.bP
+otherwise, if \fBdialog_vars.no_lines\fP is set, returns a space for the line-drawing characters.
+.bP
+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_buildlist
+This is an alternate interface to the \fBbuildlist\fP widget
+which allows the application to read the list item states back
+directly without putting them in the output buffer.
+.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 rows in \fIitems\fP.
+.TP 5
+.B DIALOG_LISTITEM * \fIitems
+is the list of items, contain tag, name, and optionally help strings
+(if \fBdialog_vars.item_help\fP is set).
+The initial selection state for each item is also in this list.
+.TP 5
+.B const char * \fIstates
+This is a list of characters to display for the given states.
+Normally a buildlist 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 \fIorder_mode
+is reserved for future enhancements
+.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_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.
+.IP
+Normally
+.B dlg_draw_buttons
+and
+.B dlg_char_to_button
+use the first uppercase character.
+However, they keep track of all of the labels and
+if the first has already been used in another label,
+they will continue looking for another uppercase character.
+This function does not have enough information to make that check.
+.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.
+.IP
+If \fBdialog_vars.no_items\fP is set,
+the \fItext\fP fields in the list are ignored.
+.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 \fBdlg_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 \fB\*p\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 \fB\*p\fP 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).
+The corresponding pointer is set to NULL.
+.\" ---------------------------------------------------------------------------
+.TP 5
+.B dlg_color_count
+Return the number of colors that can be configured in \fB\*p\fP.
+.\" ---------------------------------------------------------------------------
+.TP 5
+.B dlg_color_setup
+Initialize the color pairs used in \fB\*p\fP.
+.\" ---------------------------------------------------------------------------
+.TP 5
+.B dlg_count_argv
+Count the entries in an argument vector.
+.RS
+.TP 5
+.B argv
+Points to the argument vector.
+.RE
+.\" ---------------------------------------------------------------------------
+.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_real_columns
+Returns the number of columns used for a string,
+accounting for "\\Z" sequences which can be used for
+coloring the text if \fBdialog_vars.colors\fP is set.
+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 \fB\*p\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_button
+If \fBdialog_vars.default_button\fP is positive,
+return the button-index for that button code,
+using \fBdlg_ok_buttoncode\fP to test indices starting with zero.
+Otherwise (or if no match was found for the button code), return zero.
+.\" ---------------------------------------------------------------------------
+.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 \fBdlg_default_formitem\fP and \fBdlg_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 \fB\*p\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 (see \fBdlg_draw_box\fP),
+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_bottom_box2
+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 (see \fBdlg_draw_box2\fP),
+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.
+.B chtype \fIon_left
+is used to color the upper/left edges of the box, i.e., the tee-element and
+horizontal line
+.B chtype \fIon_right
+is used to color the right edge of the box, i.e., the tee-element
+.B chtype \fIon_inside
+is used to fill-color the inside of the box
+.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_box2
+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 fill-color for the box contents.
+.TP 5
+.B chtype \fIborderchar
+is used to color the upper/left edges.
+.TP 5
+.B chtype \fIborderchar2
+is used to color the right/lower 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_helpline
+draw the text in \fBdialog_vars.help_line\fP at the bottom of the given window.
+.RS
+.TP 5
+.B WINDOW * \fIdialog
+is the window to modify.
+.TP 5
+.B bool \fIdecorations
+if true, allow room for the scrolling arrows.
+.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_dummy_menutext
+This is a utility function which supports the \fB--inputmenu\fP option of
+the \fB\*p\fP program.
+If \fBdialog_vars.input_menu\fP is set, \fBdialog_menu\fP passes this
+pointer to \fBdlg_menu\fP as the \fIrename_menutext\fP parameter.
+Otherwise, it passes \fBdlg_dummy_menutext\fP.
+.IP
+The function should only return \fBDLG_EXIT_ERROR\fP.
+.RS
+.TP 5
+.B DIALOG_LISTITEM * \fIitems
+is the list of menu items
+.TP 5
+.B int \fIcurrent
+is the index of the currently-selected item
+.TP 5
+.B char * \fInewtext
+is the updated text for the menu item
+.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_dump_window_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.
+.TP 5
+.B WINDOW * \fIwin
+is the window for which bindings should be dumped.
+If it is null, then only built-in bindings are dumped.
+.RE
+.\" ---------------------------------------------------------------------------
+.TP 5
+.B dlg_eat_argv
+Remove one or more items from an argument vector.
+.RS
+.TP 5
+.B int *argcp
+in/out parameter giving the length of the argument vector.
+.B char ***argvp
+in/out parameter pointing to the argument vector.
+.B int start
+starting index.
+.B int count
+number of arguments to remove.
+.RE
+.\" ---------------------------------------------------------------------------
+.TP 5
+.B dlg_edit_offset
+Given the character-offset in the string,
+returns the display-offset where
+\fB\*p\fP 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 \fB\*p\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 \fB\*p\fP'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
+.B ...
+.br
+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_finish_string
+If \fIDIALOG_STATE.finish_string\fP is true,
+this function discards data used to speed up layout computations.
+.RS
+.TP 5
+.B const char * \fIstring
+is the address of the string whose data should be discarded.
+The address rather than contents is used as the unique identifier because
+some of the caching is used for editable input-fields.
+.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 \fB\*p\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 \fB\*p\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_free_gauge
+Remove the gauge widget from the screen and free its associated memory.
+.RS
+.TP 5
+.B void *\fIobjptr
+points to the gauge widget.
+.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_get_attrs
+extract the video attributes from the given window.
+.RS
+.TP 5
+.B WINDOW * \fIwin
+is the window from which to get attributes.
+.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 \fB\*p\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 \fB\*p\fP 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 \fB\*p\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
+If this is not \fBdlg_dummy_menutext\fP,
+the widget acts like an \fIinputmenu\fP widget,
+providing an extra "Rename" button,
+which activates an edit feature on the selected menu item.
+.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_setcode
+Sets a value used internally by \fBdlg_mouse_mkregion\fP
+which is added to the \fIcode\fP parameter.
+By providing different values,
+e.g., multiples of \fBKEY_MAX\fP,
+it is possible to support multiple "big" regions in a widget.
+The \fIbuildlist\fP widget uses this feature to recognize mouse-clicks
+in the left/right panes.
+.RS
+.TP 5
+.B int \fIcode
+is the value to add to \fBdlg_mouse_mkregion\fP's \fIcode\fP parameter.
+.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 \fB\*p\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 \fB\*p\fP 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
+.B dlg_print_listitem
+This is a helper function used for the various "list" widgets,
+e.g., checklist, menu, buildlist, treeview.
+Each list-widget has "tag" and "description" values for each item
+which can be displayed.
+If \fBdialog_vars.no_tags\fP is true,
+the "tag" value is not shown.
+The first character of the first value shown (tag or description)
+is highlighted to indicate that the widget will match it for quick navigation.
+.RS
+.TP 5
+.B WINDOW *\fIwin
+the window in which to display the text
+.TP 5
+.B const char *\fItext
+the value to display
+.TP 5
+.B int \fIclimit
+the number of columns available for printing the text
+.TP 5
+.B bool \fIfirst
+true if this is the first call (for "tag" and "description"),
+and the first character of the value should be highlighted.
+.TP 5
+.B int \fIselected
+nonzero if the text should be displayed using the "selected" colors
+.RE
+.\" ---------------------------------------------------------------------------
+.TP 5
+.B 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 \fB\*p\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
+.\" ---------------------------------------------------------------------------
+.B dlg_progressbox
+implements the "\fB--prgbox\fP" and "\fB--progressbox\fP" options.
+.RS
+.TP 5
+.B const char * \fItitle
+is the title on the top of the widget.
+.TP 5
+.B const char * \fIcprompt
+is the prompt text shown within the widget.
+If empty or null, no prompt is shown.
+.TP 5
+.B int \fIheight
+is the desired height of the box.
+If zero, the height is based on the screen size.
+.TP 5
+.B int \fIwidth
+is the desired width of the box.
+If zero, the height is based on the screen size.
+.TP 5
+.B int \fIpauseopt
+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 "programbox",
+without an "OK" button, it is denoted a "progressbox".
+.TP 5
+.B FILE * \fIfp
+is the file pointer, which may be a pipe or a regular file.
+.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_reallocate_gauge
+Allocates or reallocates a gauge widget (see \fBdlg_allocate_gauge\fP).
+Use \fBdlg_update_gauge\fP to display the result.
+.RS
+.TP 5
+.B void ** \fIobjptr
+If the pointer referenced by this parameter is null, the function creates
+a new gauge widget using \fBdlg_allocate_gauge\fP.
+Otherwise, it updates the title and cprompt values, reusing the window
+from the previous call on this function.
+As a side-effect, the function stores the updated object-pointer via
+the \fIobjptr\fP parameter.
+.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 \fIpercent
+is the percentage to show in the progress bar.
+.RE
+.\" ---------------------------------------------------------------------------
+.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 * \fIp
+contains the callback information.
+.RE
+.\" ---------------------------------------------------------------------------
+.TP 5
+.B dlg_renamed_menutext
+This is a utility function which supports the \fB--inputmenu\fP option of
+the \fB\*p\fP program.
+If \fBdialog_vars.input_menu\fP is set, \fBdialog_menu\fP passes this
+pointer to \fBdlg_menu\fP as the \fIrename_menutext\fP parameter.
+Otherwise, it passes \fBdlg_dummy_menutext\fP.
+.IP
+The function should add "RENAMED" to \fBdialog_vars.input_result\fP ,
+followed by the menu item's name and the \fInewtext\fP value
+(with a space separating the three items),
+and return \fBDLG_EXIT_EXTRA\fP.
+.RS
+.TP 5
+.B DIALOG_LISTITEM * \fIitems
+is the list of menu items
+.TP 5
+.B int \fIcurrent
+is the index of the currently-selected item
+.TP 5
+.B char * \fInewtext
+is the updated text for the menu item
+.RE
+.\" ---------------------------------------------------------------------------
+.TP 5
+.B dlg_restore_vars
+Restore \fB\*p\fP'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
+.IP
+The
+\fIDIALOG_VARS.input_length\fP and
+\fIDIALOG_VARS.input_result\fP members are treated specially,
+since these are used by a widget to pass data to the caller.
+They are not modified by this function.
+.\" ---------------------------------------------------------------------------
+.TP 5
+.B dlg_result_key
+Test a \fB\*p\fP 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 \fB\*p\fP 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 \fB\*p\fP's variables into the given variable (see \fBdlg_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 * \fIa
+is one string
+.TP 5
+.B const char * \fIb
+is the other string
+.RE
+.\" ---------------------------------------------------------------------------
+.TP 5
+.B dlg_string_to_argv
+Convert a string to an argument vector
+returning an index (which must be freed by the caller).
+The string is modified (replacing gaps between tokens with nulls).
+.RS
+.TP 5
+.B char *\fIblob
+is the string to convert.
+.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_msg
+Write a formatted message to the trace file.
+.RS
+.TP 5
+.B const char * \fIfmt
+is the format of the \fBprintf\fP-like message to write.
+.TP 5
+.B ...
+.br
+are the variables to apply to the \fIfmt\fP format.
+.RE
+.IP
+Use the DLG_TRACE macro for portability, in case the trace
+feature is not compiled into the library.
+It uses an extra level of parentheses to work with a variable number of
+parameters, e.g.,
+.ES
+.EX
+DLG_TRACE(("this is dialog version %s\\n", dialog_version()));
+.EE
+.\" ---------------------------------------------------------------------------
+.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_treeview
+This is an alternate interface to 'treeview' which allows the application
+to read the list item states back directly without putting them in the
+output buffer.
+.RS
+.TP 5
+.B const char * \fItitle
+is the title on 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 based on the screen size.
+.TP 5
+.B int \fIwidth
+is the desired width of the box.
+If zero, the height is based on the 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 rows in \fIitems\fP.
+.TP 5
+.B DIALOG_LISTITEM * \fIitems
+is the list of items, contain tag, name, and optionally help strings
+(if \fBdialog_vars.item_help\fP is set).
+The initial selection state for each item is also in this list.
+.TP 5
+.B const char * \fIstates
+This is a list of characters to display for the given states.
+Normally a buildlist 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 * \fIdepths
+This is a list of depths of each item in the tree.
+It is a separate parameter from \fIitems\fP to allow reuse of
+the existing functions.
+.TP 5
+.B int \fIflag
+is either \fIFLAG_CHECK\fP, for checklists (multiple selections),
+or \fIFLAG_RADIO\fP for radiolists (a single selection).
+.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_trim_string
+The \fBdialog\fP program uses this in each widget to adjust the
+message string,
+which may contain the newline character (referred to as '\\n')
+and/or the special substring "\\n"
+(which can be translated into a newline character).
+.IP
+There are several optional features:
+.RS
+.bP
+Unless \fBdialog_vars.no_nl_expand\fP is set,
+.RS
+.bP
+If it has "\\n" substrings,
+the function preserves extra spaces.
+For instance, spaces following a newline (substring or character)
+are preserved to use as an indentation.
+.bP
+The function changes embedded "\\n" substrings to '\\n' characters.
+.RE
+.bP
+If \fBdialog_vars.no_nl_expand\fP is not set,
+or if there are no "\\n" substrings,
+this function strips all extra spaces to simplify justification.
+.bP
+If \fBdialog_vars.cr_wrap\fP is set,
+the function preserves '\\n' newline characters.
+Otherwise, each '\\n' newline character is converted to a space.
+.bP
+Unless \fBdialog_vars.nocollapse\fP is set,
+each tab character is converted to a space,
+and sequences of blanks (space or tab) are reduced to a single space.
+.RE
+.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_update_gauge
+Update a gauge widget to show a different percentage value.
+.RS
+.TP 5
+.B void *\fIobjptr
+points to the gauge object to update.
+.TP 5
+.B int \fIpercent
+is the new percentage value to display.
+.RE
+.\" ---------------------------------------------------------------------------
+.TP 5
+.B dlg_yes_buttoncode
+Map the given button index for \fBdlg_yes_labels\fP into \fB\*p\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
+\fB\*p\fP (1).
+.
+.\" ************************************************************************
+.SH AUTHOR
+Thomas E. Dickey
diff --git a/contrib/dialog/dialog.c b/contrib/dialog/dialog.c
new file mode 100644
index 0000000..1238785
--- /dev/null
+++ b/contrib/dialog/dialog.c
@@ -0,0 +1,1976 @@
+/*
+ * $Id: dialog.c,v 1.231 2013/09/02 17:20:09 tom Exp $
+ *
+ * cdialog - Display simple dialog boxes from shell scripts
+ *
+ * Copyright 2000-2012,2013 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_cancel_label
+ ,o_checklist
+ ,o_clear
+ ,o_colors
+ ,o_column_separator
+ ,o_cr_wrap
+ ,o_create_rc
+ ,o_date_format
+ ,o_default_button
+ ,o_default_item
+ ,o_defaultno
+ ,o_exit_label
+ ,o_extra_button
+ ,o_extra_label
+ ,o_fixed_font
+ ,o_form
+ ,o_gauge
+ ,o_help
+ ,o_help_button
+ ,o_help_file
+ ,o_help_label
+ ,o_help_line
+ ,o_help_status
+ ,o_help_tags
+ ,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_last_key
+ ,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_mouse
+ ,o_no_nl_expand
+ ,o_no_shadow
+ ,o_nocancel
+ ,o_nook
+ ,o_ok_label
+ ,o_output_fd
+ ,o_output_separator
+ ,o_passwordbox
+ ,o_passwordform
+ ,o_pause
+ ,o_prgbox
+ ,o_print_maxsize
+ ,o_print_size
+ ,o_print_version
+ ,o_programbox
+ ,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_timeout
+ ,o_title
+ ,o_trim
+ ,o_under_mouse
+ ,o_version
+ ,o_visit_items
+ ,o_wmclass
+ ,o_yes_label
+ ,o_yesno
+#ifdef HAVE_WHIPTAIL
+ ,o_fullbutton
+ ,o_topleft
+#endif
+#ifdef HAVE_XDIALOG
+ ,o_calendar
+ ,o_dselect
+ ,o_editbox
+ ,o_fselect
+ ,o_timebox
+#endif
+#ifdef HAVE_XDIALOG2
+ ,o_buildlist
+ ,o_rangebox
+ ,o_treeview
+#endif
+#if defined(HAVE_XDIALOG2) || defined(HAVE_WHIPTAIL)
+ ,o_no_items
+ ,o_no_tags
+#endif
+#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, "" },
+ { "beep-after", o_beep_after, 1, "" },
+ { "begin", o_begin, 1, "<y> <x>" },
+ { "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-button", o_default_button, 1, "<str>" },
+ { "default-item", o_default_item, 1, "<str>" },
+ { "defaultno", o_defaultno, 1, "" },
+ { "exit-label", o_exit_label, 1, "<str>" },
+ { "extra-button", o_extra_button, 1, "" },
+ { "extra-label", o_extra_label, 1, "<str>" },
+ { "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>..." },
+ { "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, "" },
+ { "help-tags", o_help_tags, 1, "" },
+ { "hfile", o_help_file, 1, "<str>" },
+ { "hline", o_help_line, 1, "<str>" },
+ { "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, "" },
+ { "last-key", o_last_key, 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, "" },
+ { "no-kill", o_no_kill, 1, "" },
+ { "no-label", o_no_label, 1, "<str>" },
+ { "no-lines", o_no_lines, 1, "" },
+ { "no-mouse", o_no_mouse, 1, "" },
+ { "no-nl-expand", o_no_nl_expand, 1, "" },
+ { "no-ok", o_nook, 1, "" },
+ { "no-shadow", o_no_shadow, 1, "" },
+ { "nocancel", o_nocancel, 1, NULL }, /* see --no-cancel */
+ { "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>" },
+ { "prgbox", o_prgbox, 2, "<text> <command> <height> <width>" },
+ { "print-maxsize", o_print_maxsize, 1, "" },
+ { "print-size", o_print_size, 1, "" },
+ { "print-version", o_print_version, 5, "" },
+ { "programbox", o_programbox, 2, "<text> <height> <width>" },
+ { "progressbox", o_progressbox, 2, "<text> <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>" },
+ { "timeout", o_timeout, 1, "<secs>" },
+ { "title", o_title, 1, "<title>" },
+ { "trim", o_trim, 1, "" },
+ { "under-mouse", o_under_mouse, 1, NULL },
+ { "version", o_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_WHIPTAIL
+ { "cancel-button", o_cancel_label, 1, NULL },
+ { "fb", o_fullbutton, 1, NULL },
+ { "fullbutton", o_fullbutton, 1, NULL },
+ { "no-button", o_no_label, 1, NULL },
+ { "ok-button", o_ok_label, 1, NULL },
+ { "scrolltext", o_scrollbar, 1, NULL },
+ { "topleft", o_topleft, 1, NULL },
+ { "yes-button", o_yes_label, 1, NULL },
+#endif
+#ifdef HAVE_XDIALOG
+ { "calendar", o_calendar, 2, "<text> <height> <width> <day> <month> <year>" },
+ { "dselect", o_dselect, 2, "<directory> <height> <width>" },
+ { "editbox", o_editbox, 2, "<file> <height> <width>" },
+ { "fselect", o_fselect, 2, "<filepath> <height> <width>" },
+ { "timebox", o_timebox, 2, "<text> <height> <width> <hour> <minute> <second>" },
+#endif
+#ifdef HAVE_XDIALOG2
+ { "buildlist", o_buildlist, 2, "<text> <height> <width> <tag1> <item1> <status1>..." },
+ { "no-items", o_no_items, 1, "" },
+ { "no-tags", o_no_tags, 1, "" },
+ { "rangebox", o_rangebox, 2, "<text> <height> <width> <min-value> <max-value> <default-value>" },
+ { "treeview", o_treeview, 2, "<text> <height> <width> <list-height> <tag1> <item1> <status1> <depth1>..." },
+#endif
+#if defined(HAVE_XDIALOG2) || defined(HAVE_WHIPTAIL)
+ { "noitem", o_no_items, 1, NULL },
+ { "notags", o_no_tags, 1, NULL },
+#endif
+#ifdef HAVE_DLG_TRACE
+ { "trace", o_trace, 1, "<file>" },
+#endif
+};
+/* *INDENT-ON* */
+
+/*
+ * 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 = dlg_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 = dlg_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),
+ (size_t) 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 = dlg_string_to_argv(blob);
+ if ((added = dlg_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], "--", (size_t) 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);
+}
+
+#define OptionChars "\
+0123456789\
+-\
+abcdefghijklmnopqrstuvwxyz\
+"
+
+/*
+ * 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, "--", (size_t) 2) && isalpha(UCH(arg[2]))) {
+ if (strlen(arg) == strspn(arg, OptionChars)) {
+ result = TRUE;
+ } else {
+ dlg_exiterr("Invalid option \"%s\"", arg);
+ }
+ }
+ }
+ return result;
+}
+
+static eOptions
+lookupOption(const char *name, int pass)
+{
+ unsigned n;
+ eOptions result = o_unknown;
+
+ 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)) {
+ result = options[n].code;
+ break;
+ }
+ }
+ }
+ return result;
+}
+
+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)
+{
+ int result = 0;
+
+ if (n < dlg_count_argv(av)) {
+ char msg[80];
+ char *last = 0;
+ result = (int) strtol(av[n], &last, 10);
+
+ 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
+ && 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);
+ bool free_extra_label = FALSE;
+ int result;
+
+ dialog_vars.input_menu = TRUE;
+
+ if (dialog_vars.max_input == 0)
+ dialog_vars.max_input = MAX_LEN / 2;
+
+ if (dialog_vars.extra_label == 0) {
+ free_extra_label = TRUE;
+ dialog_vars.extra_label = dlg_strclone(_("Rename"));
+ }
+
+ dialog_vars.extra_button = TRUE;
+
+ *offset_add = 5 + tags * MENUBOX_TAGS;
+ result = dialog_menu(t,
+ av[1],
+ numeric_arg(av, 2),
+ numeric_arg(av, 3),
+ numeric_arg(av, 4),
+ tags, av + 5);
+ if (free_extra_label) {
+ free(dialog_vars.extra_label);
+ dialog_vars.extra_label = 0;
+ }
+ return result;
+}
+
+static int
+call_checklist(CALLARGS)
+{
+ int tags = howmany_tags(av + 5, CHECKBOX_TAGS);
+ int code;
+
+ *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);
+ 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 */
+
+/* dialog 1.2 widgets */
+#ifdef HAVE_XDIALOG2
+
+#define DisableNoTags() \
+ bool save_no_tags = dialog_vars.no_tags; \
+ bool save_no_items = dialog_vars.no_items; \
+ dialog_vars.no_tags = TRUE; \
+ dialog_vars.no_items = FALSE
+
+#define RestoreNoTags() \
+ dialog_vars.no_tags = save_no_tags; \
+ dialog_vars.no_items = save_no_items
+
+static int
+call_buildlist(CALLARGS)
+{
+ int tags = howmany_tags(av + 5, CHECKBOX_TAGS);
+ int result;
+
+ DisableNoTags();
+
+ *offset_add = 5 + tags * CHECKBOX_TAGS;
+ result = dialog_buildlist(t,
+ av[1],
+ numeric_arg(av, 2),
+ numeric_arg(av, 3),
+ numeric_arg(av, 4),
+ tags, av + 5,
+ TRUE);
+ RestoreNoTags();
+ return result;
+}
+
+static int
+call_rangebox(CALLARGS)
+{
+ int min_value;
+
+ *offset_add = arg_rest(av);
+ min_value = numeric_arg(av, 4);
+ return dialog_rangebox(t,
+ av[1],
+ numeric_arg(av, 2),
+ numeric_arg(av, 3),
+ min_value,
+ numeric_arg(av, 5),
+ (*offset_add > 6) ? numeric_arg(av, 6) : min_value);
+}
+
+static int
+call_treeview(CALLARGS)
+{
+ int tags = howmany_tags(av + 5, TREEVIEW_TAGS);
+ int result;
+
+ DisableNoTags();
+
+ *offset_add = arg_rest(av);
+ result = dialog_treeview(t,
+ av[1],
+ numeric_arg(av, 2),
+ numeric_arg(av, 3),
+ numeric_arg(av, 4),
+ tags, av + 5, FLAG_RADIO);
+ RestoreNoTags();
+ return result;
+}
+#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_prgbox(CALLARGS)
+{
+ *offset_add = arg_rest(av);
+ /* the original version does not accept a prompt string, but for
+ * consistency we allow it.
+ */
+ return ((*offset_add == 5)
+ ? dialog_prgbox(t,
+ av[1],
+ av[2],
+ numeric_arg(av, 3),
+ numeric_arg(av, 4), TRUE)
+ : dialog_prgbox(t,
+ "",
+ av[1],
+ numeric_arg(av, 2),
+ numeric_arg(av, 3), TRUE));
+}
+#endif
+
+#ifdef HAVE_DLG_GAUGE
+static int
+call_programbox(CALLARGS)
+{
+ int result;
+
+ *offset_add = arg_rest(av);
+ /* this function is a compromise between --prgbox and --progressbox.
+ */
+ result = ((*offset_add == 4)
+ ? dlg_progressbox(t,
+ av[1],
+ numeric_arg(av, 2),
+ numeric_arg(av, 3),
+ TRUE,
+ dialog_state.pipe_input)
+ : dlg_progressbox(t,
+ "",
+ numeric_arg(av, 1),
+ numeric_arg(av, 2),
+ TRUE,
+ dialog_state.pipe_input));
+ dialog_state.pipe_input = 0;
+ return result;
+}
+#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_prgbox, 4, 5, call_prgbox},
+ {o_programbox, 3, 4, call_programbox},
+ {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_buildlist, 4, 0, call_buildlist},
+ {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_rangebox, 5, 7, call_rangebox},
+ {o_timebox, 4, 7, call_timebox},
+ {o_treeview, 4, 0, call_treeview},
+#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 = (int) 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;
+}
+
+/* Return exit-code for a named button */
+static int
+button_code(const char *name)
+{
+ /* *INDENT-OFF* */
+ static struct {
+ const char *name;
+ int code;
+ } table[] = {
+ { "ok", DLG_EXIT_OK },
+ { "yes", DLG_EXIT_OK },
+ { "cancel", DLG_EXIT_CANCEL },
+ { "no", DLG_EXIT_CANCEL },
+ { "help", DLG_EXIT_HELP },
+ { "extra", DLG_EXIT_EXTRA },
+ };
+ /* *INDENT-ON* */
+
+ int code = DLG_EXIT_ERROR;
+ size_t i;
+
+ for (i = 0; i < (sizeof(table) / sizeof(table[0])); i++) {
+ if (!dlg_strcmp(name, table[i].name)) {
+ code = table[i].code;
+ break;
+ }
+ }
+
+ if (code == DLG_EXIT_ERROR) {
+ char temp[80];
+ sprintf(temp, "Button name \"%.20s\" unknown", name);
+ Usage(temp);
+ }
+
+ return code;
+}
+
+/*
+ * 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's version.
+ */
+static void
+PrintVersion(FILE *fp)
+{
+ fprintf(fp, "Version: %s\n", dialog_version());
+}
+
+/*
+ * Print program help-message
+ */
+static void
+Help(void)
+{
+ static const char *const tbl_1[] =
+ {
+ "cdialog (ComeOn Dialog!) version %s",
+ "Copyright 2000-2012,2013 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
+ };
+ size_t limit = sizeof(options) / sizeof(options[0]);
+ size_t j, k;
+ const Options **opts;
+
+ end_dialog();
+ dialog_state.output = stdout;
+
+ 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) {
+ size_t 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);
+}
+
+#ifdef HAVE_DLG_TRACE
+/*
+ * Only the first call to dlg_trace will open a trace file. But each time
+ * --trace is parsed, we show the whole parameter list as it is at that moment,
+ * counting discarded parameters. The only way to capture the whole parameter
+ * list is if --trace is the first option.
+ */
+static void
+process_trace_option(char **argv, int *offset)
+{
+ int j;
+
+ if (dialog_state.trace_output == 0) {
+ dlg_trace(optionString(argv, offset));
+ } else {
+ dlg_trace_msg("# ignore extra --trace option\n");
+ *offset += 1;
+ }
+
+ dlg_trace_msg("# Parameters:\n");
+ for (j = 0; argv[j] != 0; ++j) {
+ dlg_trace_msg("# argv[%d] = %s\n", j, argv[j]);
+ }
+}
+#endif
+
+/*
+ * "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;
+
+ dlg_trace_msg("# process_common_options, offset %d\n", offset);
+
+ while (offset < argc && !done) { /* Common options */
+ dlg_trace_msg("#\targv[%d] = %s\n", offset, argv[offset]);
+ 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_nl_expand:
+ dialog_vars.no_nl_expand = 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;
+ dialog_vars.default_button = DLG_EXIT_CANCEL;
+ break;
+ case o_default_button:
+ dialog_vars.default_button = button_code(optionString(argv, &offset));
+ dialog_vars.defaultno = dialog_vars.default_button == DLG_EXIT_CANCEL;
+ 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_line:
+ dialog_vars.help_line = optionString(argv, &offset);
+ break;
+ case o_help_file:
+ dialog_vars.help_file = optionString(argv, &offset);
+ break;
+ case o_help_button:
+ dialog_vars.help_button = TRUE;
+ break;
+ case o_help_status:
+ dialog_vars.help_status = TRUE;
+ break;
+ case o_help_tags:
+ dialog_vars.help_tags = 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_last_key:
+ dialog_vars.last_key = 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) {
+ PrintVersion(dialog_state.output);
+ }
+ 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;
+ dialog_state.visit_cols = 1;
+ 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_no_mouse:
+ dialog_state.no_mouse = TRUE;
+ mouse_close();
+ break;
+#ifdef HAVE_WHIPTAIL
+ case o_topleft:
+ dialog_vars.begin_set = TRUE;
+ dialog_vars.begin_y = 0;
+ dialog_vars.begin_x = 0;
+ break;
+ case o_fullbutton:
+ /* ignore */
+ break;
+#endif
+ /* 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:
+ process_trace_option(argv, &offset);
+ break;
+#endif
+#if defined(HAVE_XDIALOG2) || defined(HAVE_WHIPTAIL)
+ case o_no_items:
+ dialog_vars.no_items = TRUE;
+ break;
+ case o_no_tags:
+ dialog_vars.no_tags = TRUE;
+ 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;
+
+ dlg_trace_msg("# init_result\n");
+
+ /* 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';
+
+ dialog_vars.default_button = -1;
+
+ /*
+ * 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 = dlg_string_to_argv(env);
+ special_argc = dlg_count_argv(special_argv);
+ }
+ first = FALSE;
+ }
+
+ /*
+ * If we are not checking memory leaks, just do the parse of the
+ * environment once.
+ */
+ if (special_argv != 0) {
+ process_common_options(special_argc, special_argv, 0, FALSE);
+#ifdef NO_LEAKS
+ free(special_argv[0]);
+ free(special_argv);
+ special_argv = 0;
+ special_argc = 0;
+ 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(NLS_TEXTDOMAIN, LOCALEDIR);
+ textdomain(NLS_TEXTDOMAIN);
+#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.
+ *
+ * Also, look for any --version or --help message, processing those
+ * immediately.
+ */
+ 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;
+ case o_version:
+ dialog_state.output = stdout;
+ PrintVersion(dialog_state.output);
+ exit(DLG_EXIT_OK);
+ break;
+ case o_help:
+ Help();
+ break;
+#ifdef HAVE_DLG_TRACE
+ case o_trace:
+ /*
+ * Process/remove the --trace option if it is the first option.
+ * Otherwise, process it in more/less expected order as a
+ * "common" option.
+ */
+ if (base == 1) {
+ process_trace_option(argv, &offset);
+ break;
+ } else {
+ ++offset;
+ continue;
+ }
+#endif
+ default:
+ ++offset;
+ continue;
+ }
+ dlg_trace_msg("# discarding %d parameters starting with argv[%d] (%s)\n",
+ 1 + offset - base, base,
+ argv[base]);
+ 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);
+
+ /*
+ * Dialog's output may be redirected (see above). Handle the special
+ * case of options that only report information without interaction.
+ */
+ if (argc == 2) {
+ 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:
+ PrintVersion(dialog_state.output);
+ break;
+ case o_clear:
+ initscr();
+ refresh();
+ endwin();
+ break;
+ case o_ignore:
+ break;
+ default:
+ 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:
+ case o_help_line:
+ case o_help_file:
+ break;
+ default:
+ if (argv[j] != 0) {
+ char *argv_j = strdup(argv[j]);
+ if (argv_j != 0) {
+ dlg_trim_string(argv_j);
+ argv[j] = argv_j;
+ } else {
+ argv[j] = strdup("?");
+ }
+ }
+ break;
+ }
+ }
+
+ retval = show_result((*(modePtr->jumper)) (dialog_vars.title,
+ argv + offset,
+ &offset_add));
+ dlg_trace_msg("# widget returns %d\n", retval);
+ offset += offset_add;
+
+ if (dialog_vars.input_result != my_buffer) {
+ free(dialog_vars.input_result);
+ dialog_vars.input_result = 0;
+ }
+
+ 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);
+}
diff --git a/contrib/dialog/dialog.h b/contrib/dialog/dialog.h
new file mode 100644
index 0000000..1a6b0f7
--- /dev/null
+++ b/contrib/dialog/dialog.h
@@ -0,0 +1,907 @@
+/*
+ * $Id: dialog.h,v 1.267 2013/09/22 19:06:36 tom Exp $
+ *
+ * dialog.h -- common declarations for all dialog modules
+ *
+ * Copyright 2000-2012,2013 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
+/* *INDENT-OFF* */
+
+#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() */
+
+/* header conflict with Solaris xpg4 versus <sys/regset.h> */
+#if defined(ERR) && (ERR == 13)
+#undef ERR
+#endif
+
+#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>
+#if defined(HAVE_UNCTRL_H)
+#include <unctrl.h> /* most curses.h headers include this, some do not */
+#endif
+#endif
+
+/* Solaris xpg4 renames these */
+#ifndef KEY_MAX
+#ifdef __KEY_MAX
+#define KEY_MAX __KEY_MAX
+#endif
+#endif
+
+#ifndef KEY_MIN
+#ifdef __KEY_MIN
+#define KEY_MIN __KEY_MIN
+#endif
+#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_PRINTFLIKE
+#define GCC_PRINTFLIKE(fmt,var) /*nothing*/
+#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_HELP DLG_CTRL('E')
+#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 (10L*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 /* minimum amount of time needed for curses */
+
+#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
+
+#if !defined(HAVE_WGETPARENT) && defined(HAVE_WINDOW__PARENT)
+#undef wgetparent
+#define wgetparent(win) ((win) ? (win)->_parent : 0)
+#endif
+
+#if !defined(HAVE_WSYNCUP)
+#undef wsyncup
+#define wsyncup(win) /* nothing */
+#endif
+
+#if !defined(HAVE_WCURSYNCUP)
+#undef wcursyncup
+#define wcursyncup(win) /* nothing */
+#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
+
+#if !(defined(HAVE_WGETPARENT) && defined(HAVE_WINDOW__PARENT))
+#undef wgetparent
+#define wgetparent(win) dlg_wgetparent(win)
+extern WINDOW * dlg_wgetparent(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_setcode(c) dlg_mouse_setcode(c)
+#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 gauge_attr DIALOG_ATR(33)
+#define border2_attr DIALOG_ATR(34)
+#define inputbox_border2_attr DIALOG_ATR(35)
+#define searchbox_border2_attr DIALOG_ATR(36)
+#define menubox_border2_attr DIALOG_ATR(37)
+
+#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;
+ /* 1.1-20110107 */
+ bool (*handle_input)(struct _dlg_callback *p);
+ bool input_ready;
+} 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;
+ DIALOG_WINDOWS *all_subwindows;
+ 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
+ /* 1.1-20110106 */
+ bool no_mouse; /* option "--no-mouse" */
+ int visit_cols; /* option "--visit-items" */
+ /* 1.2-20130922 */
+ bool finish_string; /* caching optimization for gauge */
+} 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" */
+ /* 1.1-20110629 */
+ char *help_line; /* option "--hline" */
+ char *help_file; /* option "--hfile" */
+ bool in_helpfile; /* flag to prevent recursion in --hfile */
+ bool no_nl_expand; /* option "--no-nl-expand" */
+ /* 1.1-20120701 */
+ int default_button; /* option "--default-button" (exit code) */
+ /* 1.1-20121218 */
+ bool no_tags; /* option "--no-tags" */
+ bool no_items; /* option "--no-items" */
+ /* 1.2-20130315 */
+ bool last_key; /* option "--last-key" */
+ /* 1.2-20130902 */
+ bool help_tags; /* option "--help-tags" */
+} DIALOG_VARS;
+
+#define USE_ITEM_HELP(s) (dialog_vars.item_help && (s) != 0)
+
+/*
+ * Some settings change the number of data items per row which dialog reads
+ * from a script.
+ */
+#define DLG__NO_ITEMS (dialog_vars.no_items ? 0 : 1)
+#define DLG__ITEM_HELP (dialog_vars.item_help ? 1 : 0)
+
+/*
+ * These are the total number of data items per row used for each widget type.
+ */
+#define CHECKBOX_TAGS (2 + DLG__ITEM_HELP + DLG__NO_ITEMS)
+#define MENUBOX_TAGS (1 + DLG__ITEM_HELP + DLG__NO_ITEMS)
+#define FORMBOX_TAGS (8 + DLG__ITEM_HELP)
+#define MIXEDFORM_TAGS (1 + FORMBOX_TAGS)
+#define MIXEDGAUGE_TAGS 2
+#define TREEVIEW_TAGS (3 + DLG__ITEM_HELP + DLG__NO_ITEMS)
+
+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((size_t)(n) * sizeof(t))
+#define dlg_calloc(t,n) (t *) calloc((size_t)(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_buildlist(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*list_height*/, int /*item_no*/, char ** /*items*/, int /*order_mode*/);
+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_helpfile(const char * /*title*/, const char * /*file*/, int /*height*/, int /*width*/);
+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_prgbox(const char * /*title*/, const char * /*cprompt*/, const char * /*command*/, int /*height*/, int /*width*/, int /*pauseopt*/);
+extern int dialog_progressbox(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/);
+extern int dialog_rangebox(const char * /*title*/, const char * /*file*/, int /*height*/, int /*width*/, int /*min_value*/, int /*max_value*/, int /*default_value*/);
+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_treeview(const char * /*title*/, const char * /*subtitle*/, int /*height*/, int /*width*/, int /*list_height*/, int /*item_no*/, char ** /*items*/, int /*flag*/);
+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*/);
+extern int dlg_progressbox(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*pauseopt*/, FILE * /* fp */);
+
+/* argv.c */
+extern char ** dlg_string_to_argv(char * /* blob */);
+extern int dlg_count_argv(char ** /* argv */);
+extern int dlg_eat_argv(int * /* argcp */, char *** /* argvp */, int /* start */, int /* count */);
+
+/* 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_helpline(WINDOW * /*dialog*/, bool /*decorations*/);
+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*/);
+
+/* buildlist.c */
+extern int dlg_buildlist(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*list_height*/, int /*item_no*/, DIALOG_LISTITEM * /*items*/, const char * /*states*/, int /*order_mode*/, int * /*current_item*/);
+
+/* 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*/);
+
+/* guage.c */
+extern void * dlg_allocate_gauge(const char * /* title */, const char * /* cprompt */, int /* height */, int /* width */, int /* percent */);
+extern void * dlg_reallocate_gauge(void * /* objptr */, const char * /* title */, const char * /* cprompt */, int /* height */, int /* width */, int /* percent */);
+extern void dlg_free_gauge(void * /* objptr */);
+extern void dlg_update_gauge(void * /* objptr */, int /* percent */);
+
+/* 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_finish_string(const char * /* string */);
+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*/);
+
+/* menubox.c */
+extern int dlg_dummy_menutext(DIALOG_LISTITEM * /*items*/, int /*current*/, char * /*newtext*/);
+extern int dlg_renamed_menutext(DIALOG_LISTITEM * /*items*/, int /*current*/, char * /*newtext*/);
+
+/* rc.c */
+#ifdef HAVE_RC_FILE
+extern int dlg_parse_rc(void);
+extern void dlg_create_rc(const char * /*filename*/);
+#endif
+
+/* treeview.c */
+extern int dlg_treeview(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*list_height*/, int /*item_no*/, DIALOG_LISTITEM * /*items*/, const char * /*states*/, int * /*depths*/, int /*flag*/, int * /*current_item*/);
+
+/* 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_last_key(int /*mode*/);
+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 chtype dlg_get_attrs(WINDOW * /*win*/);
+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_count_real_columns(const char * /*text*/);
+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_default_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_help_formitem(int * /* result */, char ** /* tag */, DIALOG_FORMITEM * /* item */);
+extern void dlg_add_help_listitem(int * /* result */, char ** /* tag */, DIALOG_LISTITEM * /* item */);
+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_bottom_box2(WINDOW * /*win*/, chtype /*on_left*/, chtype /*on_right*/, chtype /*on_inside*/);
+extern void dlg_draw_box(WINDOW * /*win*/, int /*y*/, int /*x*/, int /*height*/, int /*width*/, chtype /*boxchar*/, chtype /*borderchar*/);
+extern void dlg_draw_box2(WINDOW * /*win*/, int /*y*/, int /*x*/, int /*height*/, int /*width*/, chtype /*boxchar*/, chtype /*borderchar*/, chtype /*borderchar2*/);
+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_listitem(WINDOW * /*win*/, const char * /*text*/, int /*climit*/, bool /*first*/, int /*selected*/);
+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 GCC_PRINTFLIKE(1,2);
+
+#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, ...) GCC_PRINTFLIKE(1,2);
+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
+
+/*
+ * Normally "enter" means "ok". Use this macro to handle the explicit
+ * check for DLGK_ENTER:
+ */
+#define dlg_enter_buttoncode(code) (dialog_vars.nook ? DLG_EXIT_OK : dlg_ok_buttoncode(code))
+
+/*
+ * 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*/);
+extern void dlg_mouse_setcode (int /*code*/);
+
+#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 dlg_mouse_setcode(c) /*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
+/* *INDENT-ON* */
+
+#endif /* DIALOG_H_included */
diff --git a/contrib/dialog/dialog.lsm b/contrib/dialog/dialog.lsm
new file mode 100644
index 0000000..be527ab
--- /dev/null
+++ b/contrib/dialog/dialog.lsm
@@ -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
diff --git a/contrib/dialog/dialog.pl b/contrib/dialog/dialog.pl
new file mode 100644
index 0000000..8fbb68f
--- /dev/null
+++ b/contrib/dialog/dialog.pl
@@ -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;
diff --git a/contrib/dialog/dlg_colors.h b/contrib/dialog/dlg_colors.h
new file mode 100644
index 0000000..c047f72
--- /dev/null
+++ b/contrib/dialog/dlg_colors.h
@@ -0,0 +1,202 @@
+/*
+ * $Id: dlg_colors.h,v 1.17 2011/10/14 21:19:59 tom Exp $
+ *
+ * colors.h -- color attribute definitions
+ *
+ * Copyright 2000-2007,2011 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_BORDER2 DLGC_FG_DIALOG
+#define DLGC_BG_BORDER2 DLGC_BG_DIALOG
+#define DLGC_HL_BORDER2 DLGC_HL_DIALOG
+
+#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_INPUTBOX_BORDER2 DLGC_FG_INPUTBOX
+#define DLGC_BG_INPUTBOX_BORDER2 DLGC_BG_INPUTBOX
+#define DLGC_HL_INPUTBOX_BORDER2 DLGC_HL_INPUTBOX
+
+#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_SEARCHBOX_BORDER2 DLGC_FG_SEARCHBOX
+#define DLGC_BG_SEARCHBOX_BORDER2 DLGC_BG_SEARCHBOX
+#define DLGC_HL_SEARCHBOX_BORDER2 DLGC_HL_SEARCHBOX
+
+#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_MENUBOX_BORDER2 DLGC_FG_MENUBOX
+#define DLGC_BG_MENUBOX_BORDER2 DLGC_BG_MENUBOX
+#define DLGC_HL_MENUBOX_BORDER2 DLGC_HL_MENUBOX
+
+#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
+
+#define DLGC_FG_GAUGE COLOR_BLUE
+#define DLGC_BG_GAUGE COLOR_WHITE
+#define DLGC_HL_GAUGE TRUE
+
+/* End of default color definitions */
+
+/*
+ * Global variables
+ */
+
+typedef struct {
+ const char *name;
+ int value;
+} color_names_st;
+
+#endif /* COLORS_H_included */
diff --git a/contrib/dialog/dlg_keys.c b/contrib/dialog/dlg_keys.c
new file mode 100644
index 0000000..4b59f6b
--- /dev/null
+++ b/contrib/dialog/dlg_keys.c
@@ -0,0 +1,788 @@
+/*
+ * $Id: dlg_keys.c,v 1.34 2011/10/14 00:41:08 tom Exp $
+ *
+ * dlg_keys.c -- runtime binding support for dialog
+ *
+ * Copyright 2006-2009,2011 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 */
+};
+
+#define WILDNAME "*"
+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;
+ }
+#if defined(HAVE_DLG_TRACE) && defined(HAVE_RC_FILE)
+ /*
+ * Trace the binding information assigned to this window. For most widgets
+ * there is only one binding table. forms have two, so the trace will be
+ * longer. Since compiled-in bindings are only visible when the widget is
+ * registered, there is no other way to see what bindings are available,
+ * than by running dialog and tracing it.
+ */
+ dlg_trace_msg("# dlg_register_window %s\n", name);
+ dlg_dump_window_keys(dialog_state.trace_output, win);
+#endif
+}
+
+/*
+ * 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;
+ DLG_KEYS_BINDING *q;
+
+ /*
+ * 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) {
+ const char *name = WILDNAME;
+ if (win != 0) {
+ for (p = all_bindings; p != 0; p = p->link) {
+ if (p->win == win) {
+ name = p->name;
+ break;
+ }
+ }
+ }
+ for (p = all_bindings; p != 0; p = p->link) {
+ if (p->win == win || (p->win == 0 && !strcmp(p->name, name))) {
+ int function_key = (*fkey != 0);
+ for (q = p->binding; q->is_function_key >= 0; ++q) {
+ if (p->buttons
+ && !function_key
+ && q->curses_key == (int) dlg_toupper(curses_key)) {
+ *fkey = 0;
+ return q->dialog_key;
+ }
+ if (q->curses_key == curses_key
+ && q->is_function_key == function_key) {
+ *fkey = q->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 ASCII_NAME(name,code) { #name, code }
+#define CURSES_NAME(upper) { #upper, KEY_ ## upper }
+#define COUNT_CURSES sizeof(curses_names)/sizeof(curses_names[0])
+static const CODENAME curses_names[] =
+{
+ ASCII_NAME(ESC, '\033'),
+ ASCII_NAME(CR, '\r'),
+ ASCII_NAME(LF, '\n'),
+ ASCII_NAME(FF, '\f'),
+ ASCII_NAME(TAB, '\t'),
+ ASCII_NAME(DEL, '\177'),
+
+ 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(FORM_FIRST),
+ DIALOG_NAME(FORM_LAST),
+ DIALOG_NAME(FORM_NEXT),
+ DIALOG_NAME(FORM_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),
+ DIALOG_NAME(HELPFILE),
+ DIALOG_NAME(TRACE)
+};
+
+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, WILDNAME)) {
+ result = -1;
+ } else if (!strcmp(a->name, WILDNAME)) {
+ 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';
+ p = skip_white(p);
+ 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 = (curses_key >= KEY_MIN);
+ 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);
+}
+
+/*
+ * Dump bindings for the given window. If it is a null, then this dumps the
+ * initial bindings which were loaded from the rc-file that are used as
+ * overall defaults.
+ */
+void
+dlg_dump_window_keys(FILE *fp, WINDOW *win)
+{
+ if (fp != 0) {
+ LIST_BINDINGS *p;
+ DLG_KEYS_BINDING *q;
+ const char *last = "";
+
+ for (p = all_bindings; p != 0; p = p->link) {
+ if (p->win == win) {
+ if (dlg_strcmp(last, p->name)) {
+ fprintf(fp, "\n# key bindings for %s widgets\n",
+ !strcmp(p->name, WILDNAME) ? "all" : p->name);
+ last = p->name;
+ }
+ for (q = p->binding; q->is_function_key >= 0; ++q) {
+ dump_one_binding(fp, p->name, q);
+ }
+ }
+ }
+ }
+}
+
+/*
+ * Dump all of the bindings which are not specific to a given widget, i.e.,
+ * the "win" member is null.
+ */
+void
+dlg_dump_keys(FILE *fp)
+{
+ if (fp != 0) {
+ LIST_BINDINGS *p;
+ unsigned count = 0;
+
+ for (p = all_bindings; p != 0; p = p->link) {
+ if (p->win == 0) {
+ ++count;
+ }
+ }
+ if (count != 0) {
+ dlg_dump_window_keys(fp, 0);
+ }
+ }
+}
+#endif /* HAVE_RC_FILE */
diff --git a/contrib/dialog/dlg_keys.h b/contrib/dialog/dlg_keys.h
new file mode 100644
index 0000000..789f39a
--- /dev/null
+++ b/contrib/dialog/dlg_keys.h
@@ -0,0 +1,174 @@
+/*
+ * $Id: dlg_keys.h,v 1.32 2012/12/21 21:54:30 tom Exp $
+ *
+ * dlg_keys.h -- runtime binding support for dialog
+ *
+ * Copyright 2005-2011,2012 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
+/* *INDENT-OFF* */
+
+#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) (((ch) > 0 && (ch) <= 255) ? toupper(ch) : (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 from form-field to form-field (or buttons) */
+ DLGK_FORM_FIRST,
+ DLGK_FORM_LAST,
+ DLGK_FORM_NEXT,
+ DLGK_FORM_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_HELPFILE,
+ DLGK_TRACE
+} DLG_KEYS_ENUM;
+
+#define is_DLGK_MOUSE(code) ((code) >= M_EVENT)
+#define DLGK_MOUSE(code) ((code) + M_EVENT)
+
+#define HELPKEY_BINDINGS \
+ DLG_KEYS_DATA( DLGK_HELPFILE, CHR_HELP ), \
+ DLG_KEYS_DATA( DLGK_HELPFILE, KEY_F(1) ), \
+ DLG_KEYS_DATA( DLGK_HELPFILE, KEY_HELP )
+
+#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 SCROLL_FKEY_BINDINGS \
+ DLG_KEYS_DATA( DLGK_GRID_DOWN, KEY_DOWN ), \
+ DLG_KEYS_DATA( DLGK_GRID_UP, KEY_UP ), \
+ DLG_KEYS_DATA( DLGK_PAGE_FIRST, KEY_HOME ), \
+ DLG_KEYS_DATA( DLGK_PAGE_LAST, KEY_END ), \
+ DLG_KEYS_DATA( DLGK_PAGE_NEXT, KEY_NPAGE ), \
+ DLG_KEYS_DATA( DLGK_PAGE_PREV, KEY_PPAGE )
+
+#define SCROLLKEY_BINDINGS \
+ SCROLL_FKEY_BINDINGS, \
+ DLG_KEYS_DATA( DLGK_GRID_DOWN, 'J' ), \
+ DLG_KEYS_DATA( DLGK_GRID_DOWN, 'j' ), \
+ DLG_KEYS_DATA( DLGK_GRID_UP, 'K' ), \
+ DLG_KEYS_DATA( DLGK_GRID_UP, 'k' ), \
+ DLG_KEYS_DATA( DLGK_PAGE_FIRST, 'g' ), \
+ DLG_KEYS_DATA( DLGK_PAGE_LAST, 'G' ), \
+ DLG_KEYS_DATA( DLGK_PAGE_NEXT, 'F' ), \
+ DLG_KEYS_DATA( DLGK_PAGE_NEXT, 'f' ), \
+ DLG_KEYS_DATA( DLGK_PAGE_PREV, 'B' ), \
+ DLG_KEYS_DATA( DLGK_PAGE_PREV, 'b' )
+
+#define TRAVERSE_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 )
+
+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*/);
+extern void dlg_dump_window_keys(FILE * /*fp*/, WINDOW * /*win*/);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+/* *INDENT-ON* */
+
+#endif /* DLG_KEYS_H_included */
diff --git a/contrib/dialog/editbox.c b/contrib/dialog/editbox.c
new file mode 100644
index 0000000..03ae27e
--- /dev/null
+++ b/contrib/dialog/editbox.c
@@ -0,0 +1,731 @@
+/*
+ * $Id: editbox.c,v 1.62 2013/03/17 15:03:41 tom Exp $
+ *
+ * editbox.c -- implements the edit box
+ *
+ * Copyright 2007-2012,2013 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();
+ } else {
+ 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();
+ } else {
+ 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[] = {
+ HELPKEY_BINDINGS,
+ ENTERKEY_BINDINGS,
+ NAVIGATE_BINDINGS,
+ END_KEYS_BINDING
+ };
+ static DLG_KEYS_BINDING binding2[] = {
+ INPUTSTR_BINDINGS,
+ HELPKEY_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;
+ bool first_trace = TRUE;
+ 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.default_button >= 0 ? dlg_default_button() : sTEXT;
+ 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_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr);
+ dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr);
+ dlg_draw_title(dialog, title);
+
+ (void) 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, border2_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, "editbox2", 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,
+ border2_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);
+ }
+ }
+
+ if (first_trace) {
+ first_trace = FALSE;
+ dlg_trace_win(dialog);
+ }
+
+ 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();
+ }
+ dlg_add_last_key(-1);
+ }
+ 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;
+}
diff --git a/contrib/dialog/formbox.c b/contrib/dialog/formbox.c
new file mode 100644
index 0000000..b0b207f
--- /dev/null
+++ b/contrib/dialog/formbox.c
@@ -0,0 +1,979 @@
+/*
+ * $Id: formbox.c,v 1.87 2013/09/02 17:02:05 tom Exp $
+ *
+ * formbox.c -- implements the form (i.e, some pairs label/editbox)
+ *
+ * Copyright 2003-2012,2013 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;
+}
+
+static int
+is_first_field(DIALOG_FORMITEM item[], int choice)
+{
+ int count = 0;
+ while (choice >= 0) {
+ if (item[choice].text_flen > 0) {
+ ++count;
+ }
+ --choice;
+ }
+
+ return (count == 1);
+}
+
+static int
+is_last_field(DIALOG_FORMITEM item[], int choice, int item_no)
+{
+ int count = 0;
+ while (choice < item_no) {
+ if (item[choice].text_flen > 0) {
+ ++count;
+ }
+ ++choice;
+ }
+
+ return (count == 1);
+}
+
+/*
+ * 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)
+{
+ bool result = TRUE;
+ 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) {
+ result = FALSE;
+ }
+ } else {
+ if (target > form_limit(item)) {
+ result = FALSE;
+ }
+ }
+
+ if (result) {
+ 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);
+ }
+ result = (old_choice != *choice) || (old_scroll != *scrollamt);
+ }
+ if (!result)
+ beep();
+ return result;
+}
+
+/*
+ * 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 entering 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[] = {
+ HELPKEY_BINDINGS,
+ ENTERKEY_BINDINGS,
+ NAVIGATE_BINDINGS,
+ END_KEYS_BINDING
+ };
+ static DLG_KEYS_BINDING binding2[] = {
+ INPUTSTR_BINDINGS,
+ HELPKEY_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 first_trace = TRUE;
+ int chr_offset = 0;
+ int state = dialog_vars.default_button >= 0 ? dlg_default_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_buttons(dialog, "formbox", buttons);
+
+ dlg_mouse_setbase(x, y);
+
+ dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr);
+ dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr);
+ dlg_draw_title(dialog, title);
+
+ (void) wattrset(dialog, dialog_attr);
+ dlg_print_autowrap(dialog, prompt, height, width);
+
+ form_width = width - 6;
+ getyx(dialog, cur_y, cur_x);
+ (void) 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);
+ dlg_register_window(form, "formfield", binding2);
+
+ /* 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_border2_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_border2_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 (first_trace) {
+ first_trace = FALSE;
+ dlg_trace_win(dialog);
+ }
+
+ 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);
+ wsyncup(form);
+ wcursyncup(form);
+ field_changed = FALSE;
+ }
+
+ key = dlg_mouse_wgetch((state == sTEXT) ? form : 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_enter_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_FORM_PREV:
+ if (state == sTEXT && !is_first_field(items, choice)) {
+ do_tab = TRUE;
+ move_by = -1;
+ break;
+ } else {
+ int old_state = state;
+ state = prev_valid_buttonindex(state, sTEXT, non_editable);
+ show_buttons = TRUE;
+ if (old_state >= 0 && state == sTEXT) {
+ new_choice = item_no - 1;
+ if (choice != new_choice) {
+ print_item(form, items + choice, scrollamt, FALSE);
+ choice = new_choice;
+ }
+ }
+ 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;
+ }
+
+ case DLGK_FORM_NEXT:
+ if (state == sTEXT && !is_last_field(items, choice, item_no)) {
+ do_tab = TRUE;
+ move_by = 1;
+ break;
+ } else {
+ state = next_valid_buttonindex(state, sTEXT, non_editable);
+ show_buttons = TRUE;
+ if (state == sTEXT && choice) {
+ print_item(form, items + choice, scrollamt, FALSE);
+ choice = 0;
+ }
+ 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;
+ char *help_result;
+
+ 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_help_formitem(&result, &help_result, &listitems[choice]);
+ show_status = dialog_vars.help_status;
+ dlg_add_string(help_result);
+ 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_add_last_key(-1);
+ }
+
+ dlg_free_formitems(listitems);
+ dlg_restore_vars(&save_vars);
+
+ return result;
+}
diff --git a/contrib/dialog/fselect.c b/contrib/dialog/fselect.c
new file mode 100644
index 0000000..e6d2a96
--- /dev/null
+++ b/contrib/dialog/fselect.c
@@ -0,0 +1,928 @@
+/*
+ * $Id: fselect.c,v 1.93 2012/12/30 20:52:25 tom Exp $
+ *
+ * fselect.c -- implements the file-selector box
+ *
+ * Copyright 2000-2011,2012 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)
+ (void) wattrset(list->win, item_selected_attr);
+ (void) waddstr(list->win, list->data[n]);
+ (void) wattrset(list->win, item_attr);
+ }
+ (void) wattrset(list->win, item_attr);
+
+ getparyx(list->win, y, x);
+
+ top = y - 1;
+ bottom = y + getmaxy(list->win);
+ dlg_draw_scrollbar(list->par,
+ (long) list->offset,
+ (long) list->offset,
+ (long) (list->offset + getmaxy(list->win)),
+ (long) (list->length),
+ x + 1,
+ x + getmaxx(list->win),
+ top,
+ bottom,
+ menubox_border2_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 right;
+ int bottom;
+
+ if (list->win != 0) {
+ getparyx(list->win, y, x);
+ top = y - 1;
+ right = getmaxx(list->win);
+ bottom = y + getmaxy(list->win);
+
+ mouse_mkbutton(top, x, right,
+ ((list->mousex == MOUSE_D)
+ ? KEY_PREVIOUS
+ : KEY_PPAGE));
+ mouse_mkbutton(bottom, x, right,
+ ((list->mousex == MOUSE_D)
+ ? KEY_NEXT
+ : KEY_NPAGE));
+ }
+}
+
+static int
+show_list(char *target, LIST * list, int 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, int 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 + 1, 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, int keep)
+{
+ bool result = TRUE;
+ bool rescan = FALSE;
+ 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]) {
+ result = FALSE;
+ rescan = (n == 0 && d_list->length == 0);
+ } else if (strchr(current + n, '/') == 0
+ && strchr(input + n, '/') == 0) {
+ result = show_both_lists(input, d_list, f_list, keep);
+ } else {
+ rescan = TRUE;
+ }
+
+ if (rescan) {
+ size_t have = strlen(input);
+
+ if (have > MAX_LEN)
+ have = MAX_LEN;
+ memcpy(current, input, have);
+ current[have] = '\0';
+
+ /* refill the lists */
+ free_list(d_list, TRUE);
+ free_list(f_list, TRUE);
+ memcpy(path, current, have);
+ path[have] = '\0';
+ if ((leaf = strrchr(path, '/')) != 0) {
+ *++leaf = 0;
+ } else {
+ strcpy(path, "./");
+ leaf = path + strlen(path);
+ }
+ dlg_trace_msg("opendir '%s'\n", 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 */
+ if (d_list->data != 0 && d_list->length > 1) {
+ qsort(d_list->data,
+ (size_t) d_list->length,
+ sizeof(d_list->data[0]),
+ compar);
+ }
+ if (f_list->data != 0 && f_list->length > 1) {
+ 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;
+ result = TRUE;
+ }
+ return result;
+}
+
+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, int dselect)
+{
+ /* *INDENT-OFF* */
+ static DLG_KEYS_BINDING binding[] = {
+ HELPKEY_BINDINGS,
+ ENTERKEY_BINDINGS,
+ NAVIGATE_BINDINGS,
+ END_KEYS_BINDING
+ };
+ static DLG_KEYS_BINDING binding2[] = {
+ INPUTSTR_BINDINGS,
+ HELPKEY_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.default_button >= 0 ? dlg_default_button() : sTEXT;
+ int button;
+ int first = (state == sTEXT);
+ int first_trace = TRUE;
+ 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();
+ const char *d_label = _("Directories");
+ const char *f_label = _("Files");
+ char *partial = 0;
+ 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_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr);
+ dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr);
+ dlg_draw_title(dialog, title);
+
+ (void) 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) {
+ result = DLG_EXIT_ERROR;
+ goto finish;
+ }
+
+ (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_border2_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, "fselect2", 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) {
+ result = DLG_EXIT_ERROR;
+ goto finish;
+ }
+
+ (void) keypad(w_work, TRUE);
+ (void) mvwaddstr(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_border2_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) {
+ result = DLG_EXIT_ERROR;
+ goto finish;
+ }
+
+ (void) keypad(w_work, TRUE);
+ (void) mvwaddstr(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_border2_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, (bool) 0, (bool) 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 (first_trace) {
+ first_trace = FALSE;
+ dlg_trace_win(dialog);
+ }
+
+ 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;
+ if (partial != 0) {
+ free(partial);
+ 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);
+ partial = 0;
+ }
+ continue;
+ } else { /* if (state < sTEXT) */
+ (void) beep();
+ continue;
+ }
+ /* FALLTHRU */
+ case DLGK_ENTER:
+ result = (state > 0) ? dlg_enter_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);
+
+ finish:
+ if (partial != 0)
+ free(partial);
+ 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);
+}
diff --git a/contrib/dialog/guage.c b/contrib/dialog/guage.c
new file mode 100644
index 0000000..7982188
--- /dev/null
+++ b/contrib/dialog/guage.c
@@ -0,0 +1,438 @@
+/*
+ * $Id: guage.c,v 1.68 2013/09/22 19:10:22 tom Exp $
+ *
+ * guage.c -- implements the gauge dialog
+ *
+ * Copyright 2000-2012,2013 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", (size_t) 3)
+
+typedef struct _my_obj {
+ DIALOG_CALLBACK obj; /* has to be first in struct */
+ struct _my_obj *next;
+ WINDOW *text;
+ char *title;
+ char *prompt;
+ char prompt_buf[MY_LEN];
+ int percent;
+ int height;
+ int width;
+ char line[MAX_LEN + 1];
+} MY_OBJ;
+
+static MY_OBJ *all_objects;
+
+static int
+valid(MY_OBJ * obj)
+{
+ MY_OBJ *list = all_objects;
+ int result = 0;
+
+ while (list != 0) {
+ if (list == obj) {
+ result = 1;
+ break;
+ }
+ list = list->next;
+ }
+ return result;
+}
+
+static void
+delink(MY_OBJ * obj)
+{
+ MY_OBJ *p = all_objects;
+ MY_OBJ *q = 0;
+ while (p != 0) {
+ if (p == obj) {
+ if (q != 0) {
+ q->next = p->next;
+ } else {
+ all_objects = p->next;
+ }
+ break;
+ }
+ q = p;
+ p = p->next;
+ }
+}
+
+static int
+read_data(char *buffer, FILE *fp)
+{
+ int result;
+
+ if (feof(fp)) {
+ result = 0;
+ } else if (fgets(buffer, MY_LEN, fp) != 0) {
+ DLG_TRACE(("read_data:%s", buffer));
+ buffer[MY_LEN] = '\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;
+
+ if (dialog != 0 && obj->obj.input != 0) {
+ (void) werase(dialog);
+ dlg_draw_box2(dialog, 0, 0, obj->height, obj->width, dialog_attr,
+ border_attr, border2_attr);
+
+ dlg_draw_title(dialog, obj->title);
+
+ (void) wattrset(dialog, dialog_attr);
+ dlg_draw_helpline(dialog, FALSE);
+ dlg_print_autowrap(dialog, obj->prompt, obj->height, obj->width);
+
+ dlg_draw_box2(dialog,
+ obj->height - 4, 2 + MARGIN,
+ 2 + MARGIN, obj->width - 2 * (2 + MARGIN),
+ dialog_attr,
+ border_attr,
+ border2_attr);
+
+ /*
+ * Clear the area for the progress bar by filling it with spaces
+ * in the gauge-attribute, and write the percentage with that
+ * attribute.
+ */
+ (void) wmove(dialog, obj->height - 3, 4);
+ (void) wattrset(dialog, gauge_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 ((gauge_attr & A_REVERSE) != 0) {
+ wattroff(dialog, A_REVERSE);
+ } else {
+ (void) wattrset(dialog, A_REVERSE);
+ }
+ (void) wmove(dialog, obj->height - 3, 4);
+ for (i = 0; i < x; i++) {
+ chtype ch2 = winch(dialog);
+ if (gauge_attr & A_REVERSE) {
+ ch2 &= ~A_REVERSE;
+ }
+ (void) waddch(dialog, ch2);
+ }
+
+ (void) wrefresh(dialog);
+ }
+}
+
+static bool
+handle_input(DIALOG_CALLBACK * cb)
+{
+ MY_OBJ *obj = (MY_OBJ *) cb;
+ bool result;
+ int status;
+ char buf[MY_LEN + 1];
+
+ if (dialog_state.pipe_input == 0) {
+ status = -1;
+ } else 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 {
+ if (feof(dialog_state.pipe_input) ||
+ (ferror(dialog_state.pipe_input) && errno != EINTR)) {
+ delink(obj);
+ dlg_remove_callback(cb);
+ }
+ }
+
+ if (status > 0) {
+ result = TRUE;
+ repaint_text(obj);
+ } else {
+ result = FALSE;
+ }
+
+ return result;
+}
+
+static bool
+handle_my_getc(DIALOG_CALLBACK * cb, int ch, int fkey, int *result)
+{
+ int status = TRUE;
+
+ *result = DLG_EXIT_OK;
+ if (cb != 0) {
+ if (!fkey && (ch == ERR)) {
+ (void) handle_input(cb);
+ /* cb might be freed in handle_input */
+ status = (valid((MY_OBJ *) cb) && (cb->input != 0));
+ }
+ } else {
+ status = FALSE;
+ }
+ return status;
+}
+
+static void
+my_cleanup(DIALOG_CALLBACK * cb)
+{
+ MY_OBJ *obj = (MY_OBJ *) cb;
+
+ if (valid(obj)) {
+ if (obj->prompt != obj->prompt_buf) {
+ free(obj->prompt);
+ obj->prompt = obj->prompt_buf;
+ }
+ delink(obj);
+ }
+}
+
+void
+dlg_update_gauge(void *objptr, int percent)
+{
+ MY_OBJ *obj = (MY_OBJ *) objptr;
+ bool save_finish_string = dialog_state.finish_string;
+
+ dialog_state.finish_string = TRUE;
+ curs_set(0);
+ obj->percent = percent;
+ repaint_text(obj);
+ dialog_state.finish_string = save_finish_string;
+}
+
+/*
+ * (Re)Allocates an object and fills it as per the arguments
+ */
+void *
+dlg_reallocate_gauge(void *objptr,
+ const char *title,
+ const char *cprompt,
+ int height,
+ int width,
+ int percent)
+{
+ char *prompt = dlg_strclone(cprompt);
+ MY_OBJ *obj = objptr;
+ bool save_finish_string = dialog_state.finish_string;
+
+ dialog_state.finish_string = TRUE;
+ dlg_tab_correct_str(prompt);
+
+ if (objptr == 0) {
+ /* create a new object */
+ obj = dlg_calloc(MY_OBJ, 1);
+ assert_ptr(obj, "dialog_gauge");
+
+ dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, MIN_WIDE);
+ dlg_print_size(height, width);
+ dlg_ctl_size(height, width);
+
+ } else {
+ /* reuse an existing object */
+ obj = objptr;
+ height = obj->height;
+ width = obj->width;
+ }
+
+ if (obj->obj.win == 0) {
+ /* center dialog box on screen */
+ int x = dlg_box_x_ordinate(width);
+ int y = dlg_box_y_ordinate(height);
+ WINDOW *dialog = dlg_new_window(height, width, y, x);
+ obj->obj.win = dialog;
+ }
+
+ obj->obj.input = dialog_state.pipe_input;
+ obj->obj.keep_win = TRUE;
+ obj->obj.bg_task = TRUE;
+ obj->obj.handle_getc = handle_my_getc;
+ obj->obj.handle_input = handle_input;
+
+ if (obj->title == 0 || strcmp(obj->title, title)) {
+ dlg_finish_string(obj->title);
+ free(obj->title);
+ obj->title = dlg_strclone(title);
+ }
+
+ dlg_finish_string(obj->prompt);
+ free(obj->prompt);
+
+ obj->prompt = prompt;
+ obj->percent = percent;
+ obj->height = height;
+ obj->width = width;
+
+ /* if this was a new object, link it into the list */
+ if (objptr == 0) {
+ obj->next = all_objects;
+ all_objects = obj;
+ }
+
+ dialog_state.finish_string = save_finish_string;
+ return (void *) obj;
+}
+
+void *
+dlg_allocate_gauge(const char *title,
+ const char *cprompt,
+ int height,
+ int width,
+ int percent)
+{
+ return dlg_reallocate_gauge(NULL, title, cprompt, height, width, percent);
+}
+
+void
+dlg_free_gauge(void *objptr)
+{
+ MY_OBJ *obj = (MY_OBJ *) objptr;
+
+ curs_set(1);
+ if (valid(obj)) {
+ delink(obj);
+ obj->obj.keep_win = FALSE;
+ dlg_remove_callback(&(obj->obj));
+ }
+}
+
+/*
+ * 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)
+{
+ int fkey;
+ int ch, result;
+ void *objptr = dlg_allocate_gauge(title, cprompt, height, width, percent);
+ MY_OBJ *obj = (MY_OBJ *) objptr;
+
+ dlg_add_callback_ref((DIALOG_CALLBACK **) & obj, my_cleanup);
+ dlg_update_gauge(obj, percent);
+
+ dlg_trace_win(obj->obj.win);
+ do {
+ ch = dlg_getc(obj->obj.win, &fkey);
+#ifdef KEY_RESIZE
+ if (fkey && ch == KEY_RESIZE) {
+ MY_OBJ *oldobj = obj;
+
+ dlg_mouse_free_regions();
+
+ obj = dlg_allocate_gauge(title,
+ cprompt,
+ height,
+ width,
+ oldobj->percent);
+
+ /* avoid breaking new window in dlg_remove_callback */
+ oldobj->obj.caller = 0;
+ oldobj->obj.input = 0;
+ oldobj->obj.keep_win = FALSE;
+
+ /* remove the old version of the gauge */
+ dlg_clear();
+ dlg_remove_callback(&(oldobj->obj));
+ refresh();
+
+ dlg_add_callback_ref((DIALOG_CALLBACK **) & obj, my_cleanup);
+ dlg_update_gauge(obj, obj->percent);
+ }
+#endif
+ }
+ while (valid(obj) && handle_my_getc(&(obj->obj), ch, fkey, &result));
+
+ dlg_free_gauge(obj);
+
+ return (DLG_EXIT_OK);
+}
diff --git a/contrib/dialog/headers-sh.in b/contrib/dialog/headers-sh.in
new file mode 100755
index 0000000..9bad19f
--- /dev/null
+++ b/contrib/dialog/headers-sh.in
@@ -0,0 +1,199 @@
+#! /bin/sh
+# $Id: headers-sh.in,v 1.11 2011/10/18 23:49:13 tom Exp $
+##############################################################################
+# Copyright (c) 2004-2007,2011 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@
+SUB_INC=@SUB_INC@
+
+: ${TMPDIR:=/tmp}
+
+TMPSED=headers.sed
+
+DIGIT=0123456789
+alpha=abcdefghijklmnopqrstuvwxyz
+ALPHA=ABCDEFGHIJKLMNOPQRSTUVWXYZ
+
+alnum=_${DIGIT}${alpha}
+ALNUM=_${DIGIT}${ALPHA}
+MIXED=_${DIGIT}${ALPHA}${alpha}
+
+pkgname=`echo "$PKGNAME" | tr "$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
+ ;;
+ *)
+ touch $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 name in $REF/*.h
+ do
+ sed -e 's/^[ ][ ]*#[ ][ ]*/#/' $name \
+ | 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`
+ do
+ echo "s/\\<$name\\>/${PKGNAME}_$name/g" >>$TMPSED
+ done
+
+ if test "$SUB_INC" = yes
+ then
+ echo "s,#include <${pkgname}_,#include <${PACKAGE}/${pkgname}_," >>$TMPSED
+ fi
+
+ echo '/_FILE_OFFSET_BITS/d' >>$TMPSED
+
+ # 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/${SHOW}-text$$
+ TMPEDT=$TMPDIR/${SHOW}-edit$$
+ TMPTMP=$TMPDIR/${SHOW}-temp$$
+
+ echo " ... $SHOW"
+ test -f $REF/$SRC && SRC="$REF/$SRC"
+
+ rm -f $TMPSRC
+ cat $SRC >$TMPSRC
+
+ tmp1=1
+ while true
+ do
+ tmp2=`expr $tmp1 + 49`
+ if test $tmp1 = 1
+ then
+ sed "${tmp2}q" $TMPSED >$TMPEDT
+ else
+ sed "1,${tmp1}d; ${tmp2}q" $TMPSED >$TMPEDT
+ fi
+ test -s $TMPEDT || break
+ sed -f $TMPEDT $TMPSRC > $TMPTMP
+ mv $TMPTMP $TMPSRC
+ tmp1=$tmp2
+ done
+
+ NAME=`basename $SRC`
+
+ # Just in case someone gzip'd manpages, remove the conflicting copy.
+ test -f $DST/$NAME.gz && rm -f $DST/$NAME.gz
+
+ if test "$SUB_INC" = yes
+ then
+ case $NAME in #(vi
+ ${pkgname}_*) #(vi
+ case "$PRG" in #(vi
+ *install*)
+ test -d $DST/$PACKAGE || mkdir -p $DST/$PACKAGE
+ ;;
+ esac
+ NAME=$PACKAGE/$NAME
+ ;;
+ *)
+ NAME=$PACKAGE.h
+ ;;
+ esac
+ fi
+
+ eval $PRG $TMPSRC $DST/$NAME
+ rm -f $TMPEDT $TMPTMP $TMPSRC
+fi
+# vile:ts=4 sw=4
diff --git a/contrib/dialog/help.c b/contrib/dialog/help.c
new file mode 100644
index 0000000..ea0fade
--- /dev/null
+++ b/contrib/dialog/help.c
@@ -0,0 +1,54 @@
+/*
+ * $Id: help.c,v 1.3 2012/12/04 02:01:10 tom Exp $
+ *
+ * help.c -- implements the help dialog
+ *
+ * Copyright 2011,2012 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>
+
+/*
+ * Display a help-file as a textbox widget.
+ */
+int
+dialog_helpfile(const char *title,
+ const char *file,
+ int height,
+ int width)
+{
+ int result = DLG_EXIT_ERROR;
+ DIALOG_VARS save;
+
+ if (!dialog_vars.in_helpfile && file != 0 && *file != '\0') {
+ dlg_save_vars(&save);
+
+ dialog_vars.no_label = NULL;
+ dialog_vars.ok_label = NULL;
+ dialog_vars.help_button = FALSE;
+ dialog_vars.extra_button = FALSE;
+ dialog_vars.nook = FALSE;
+
+ dialog_vars.in_helpfile = TRUE;
+
+ result = dialog_textbox(title, file, height, width);
+
+ dlg_restore_vars(&save);
+ }
+ return (result);
+}
diff --git a/contrib/dialog/inputbox.c b/contrib/dialog/inputbox.c
new file mode 100644
index 0000000..1d7ad7d
--- /dev/null
+++ b/contrib/dialog/inputbox.c
@@ -0,0 +1,255 @@
+/*
+ * $Id: inputbox.c,v 1.76 2012/12/03 11:46:50 tom Exp $
+ *
+ * inputbox.c -- implements the input box
+ *
+ * Copyright 2000-2011,2012 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[] = {
+ HELPKEY_BINDINGS,
+ ENTERKEY_BINDINGS,
+ NAVIGATE_BINDINGS,
+ END_KEYS_BINDING
+ };
+ static DLG_KEYS_BINDING binding2[] = {
+ INPUTSTR_BINDINGS,
+ HELPKEY_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;
+ int edited;
+ 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);
+ edited = FALSE;
+
+#ifdef KEY_RESIZE
+ retry:
+#endif
+ show_buttons = TRUE;
+ state = dialog_vars.default_button >= 0 ? dlg_default_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_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr);
+ dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr);
+ dlg_draw_title(dialog, title);
+
+ (void) wattrset(dialog, dialog_attr);
+ dlg_draw_helpline(dialog, FALSE);
+ dlg_print_autowrap(dialog, prompt, height, width);
+
+ /* Draw the input field box */
+ box_width = width - 6;
+ getyx(dialog, y, x);
+ (void) 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, border2_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, "inputbox2", binding2);
+
+ if (*input != '\0') {
+ dlg_show_string(editor, input, chr_offset, inputbox_attr,
+ 0, 0, box_width, password, first);
+ wsyncup(editor);
+ wcursyncup(editor);
+ }
+ 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) {
+ if (*input != '\0' && !edited) {
+ dlg_show_string(editor, input, chr_offset, inputbox_attr,
+ 0, 0, box_width, password, first);
+ wmove(editor, 0, chr_offset);
+ wsyncup(editor);
+ wcursyncup(editor);
+ }
+ 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(editor, input, chr_offset, inputbox_attr,
+ 0, 0, box_width, password, first);
+ wsyncup(editor);
+ wcursyncup(editor);
+ first = FALSE;
+ edited = TRUE;
+ 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_enter_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;
+}
diff --git a/contrib/dialog/inputstr.c b/contrib/dialog/inputstr.c
new file mode 100644
index 0000000..5dd043e
--- /dev/null
+++ b/contrib/dialog/inputstr.c
@@ -0,0 +1,802 @@
+/*
+ * $Id: inputstr.c,v 1.83 2013/09/23 23:19:26 tom Exp $
+ *
+ * inputstr.c -- functions for input/display of a string
+ *
+ * Copyright 2000-2012,2013 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
+ int cache_num; /* tells what type of data is in list[] */
+ const char *string_at; /* unique: associate caches by char* */
+#endif
+ size_t s_len; /* strlen(string) - we add 1 for EOS */
+ size_t 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;
+
+typedef enum {
+ cInxCols
+ ,cCntWideBytes
+ ,cCntWideChars
+ ,cInxWideChars
+ ,cMAX
+} CACHE_USED;
+
+#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
+
+#if 0
+static void
+show_tsearch(const void *nodep, const VISIT which, const int depth)
+{
+ const CACHE *p = *(CACHE * const *) nodep;
+ (void) depth;
+ if (which == postorder || which == leaf) {
+ dlg_trace_msg("\tcache %p %p:%s\n", p, p->string, p->string);
+ }
+}
+
+static void
+trace_cache(const char *fn, int ln)
+{
+ dlg_trace_msg("trace_cache %s@%d\n", fn, ln);
+ twalk(sorted_cache, show_tsearch);
+}
+
+#else
+#define trace_cache(fn, ln) /* nothing */
+#endif
+
+static int
+compare_cache(const void *a, const void *b)
+{
+ const CACHE *p = (const CACHE *) a;
+ const CACHE *q = (const CACHE *) b;
+ int result = (p->cache_num - q->cache_num);
+ if (result == 0)
+ result = (int) (p->string_at - q->string_at);
+ return result;
+}
+#endif
+
+static CACHE *
+find_cache(int cache_num, const char *string)
+{
+ CACHE *p;
+
+#ifdef HAVE_TSEARCH
+ void *pp;
+ CACHE find;
+
+ memset(&find, 0, sizeof(find));
+ find.cache_num = cache_num;
+ 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->string_at == string) {
+ break;
+ }
+ }
+#endif
+ return p;
+}
+
+static CACHE *
+make_cache(int cache_num, const char *string)
+{
+ CACHE *p;
+
+ p = dlg_calloc(CACHE, 1);
+ assert_ptr(p, "load_cache");
+ p->next = cache_list;
+ cache_list = p;
+
+ p->cache_num = cache_num;
+ p->string_at = string;
+
+#ifdef HAVE_TSEARCH
+ (void) tsearch(p, &sorted_cache, compare_cache);
+#endif
+ return p;
+}
+
+static CACHE *
+load_cache(int cache_num, const char *string)
+{
+ CACHE *p;
+
+ if ((p = find_cache(cache_num, string)) == 0) {
+ p = make_cache(cache_num, string);
+ }
+ return p;
+}
+#else
+static CACHE my_cache;
+#define SAME_CACHE(c,s,l) (c->string != 0)
+#define load_cache(cache, string) &my_cache
+#endif /* USE_CACHING */
+
+/*
+ * 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;
+ size_t s_len = strlen(string);
+ bool result = TRUE;
+
+ if (cache->s_len == 0
+ || cache->s_len < s_len
+ || cache->list == 0
+ || !SAME_CACHE(cache, string, (size_t) s_len)) {
+
+ 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);
+ }
+ assert_ptr(cache->list, "load_cache");
+ 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;
+
+ result = FALSE;
+ }
+ return result;
+}
+
+#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, size_t i_len)
+{
+ size_t s_len = strlen(string);
+ bool result = TRUE;
+
+ if (cache->s_len != s_len
+ || !SAME_CACHE(cache, string, (size_t) s_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;
+ cache->i_len = i_len;
+
+ result = FALSE;
+ }
+ return result;
+}
+#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()) {
+ CACHE *cache = load_cache(cCntWideBytes, string);
+ if (!same_cache1(cache, string, len)) {
+ while (len != 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;
+ }
+ --len;
+ }
+ cache->i_len = len;
+ }
+ 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()) {
+ size_t len = strlen(string);
+ CACHE *cache = load_cache(cCntWideChars, 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);
+
+ if (temp != 0) {
+ 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);
+ } else {
+ cache->i_len = 0;
+ }
+ }
+ 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)
+{
+ unsigned len = (unsigned) dlg_count_wchars(string);
+ unsigned inx;
+ CACHE *cache = load_cache(cInxWideChars, 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;
+ }
+ }
+ }
+ 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
+ || ((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)
+{
+ unsigned len = (unsigned) dlg_count_wchars(string);
+ unsigned inx;
+ CACHE *cache = load_cache(cInxCols, 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) {
+ const wchar_t *printable;
+ cchar_t temp2, *temp2p = &temp2;
+ setcchar(temp2p, temp, 0, 0, 0);
+ printable = wunctrl(temp2p);
+ 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];
+ }
+ }
+ }
+ 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);
+ }
+ dlg_finish_string(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 && offset > 0)
+ *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);
+
+ (void) 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);
+ }
+}
+
+/*
+ * Discard cached data for the given string.
+ */
+void
+dlg_finish_string(const char *string)
+{
+#if USE_CACHING
+ if ((string != 0) && dialog_state.finish_string) {
+ CACHE *p = cache_list;
+ CACHE *q = 0;
+ CACHE *r;
+
+ while (p != 0) {
+ if (p->string_at == string) {
+#ifdef HAVE_TSEARCH
+ if (tdelete(p, &sorted_cache, compare_cache) == 0) {
+ continue;
+ }
+ trace_cache(__FILE__, __LINE__);
+#endif
+ if (p->string != 0)
+ free(p->string);
+ if (p->list != 0)
+ free(p->list);
+ if (p == cache_list) {
+ cache_list = p->next;
+ r = cache_list;
+ } else {
+ q->next = p->next;
+ r = q;
+ }
+ free(p);
+ p = r;
+ } else {
+ q = p;
+ p = p->next;
+ }
+ }
+ }
+#else
+ (void) string;
+#endif
+}
+
+#ifdef NO_LEAKS
+void
+_dlg_inputstr_leaks(void)
+{
+#if USE_CACHING
+ dialog_state.finish_string = TRUE;
+ trace_cache(__FILE__, __LINE__);
+ while (cache_list != 0) {
+ dlg_finish_string(cache_list->string_at);
+ }
+#endif /* USE_CACHING */
+}
+#endif /* NO_LEAKS */
diff --git a/contrib/dialog/install-sh b/contrib/dialog/install-sh
new file mode 100755
index 0000000..462fa9c
--- /dev/null
+++ b/contrib/dialog/install-sh
@@ -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
+}
diff --git a/contrib/dialog/makefile.in b/contrib/dialog/makefile.in
new file mode 100644
index 0000000..3357d91
--- /dev/null
+++ b/contrib/dialog/makefile.in
@@ -0,0 +1,345 @@
+# $Id: makefile.in,v 1.87 2013/09/02 19:51:58 tom Exp $
+# template makefile for DIALOG
+##############################################################################
+# Copyright (c) 1999-2012,2013 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. #
+##############################################################################
+#
+SHELL = /bin/sh
+
+srcdir = @srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+
+top_builddir = .
+
+x = @EXEEXT@
+o = .@OBJEXT@
+
+DESTDIR =
+
+THIS = dialog
+
+CFG_ROOTNAME = @CFG_ROOTNAME@
+HDR_ROOTNAME = @HDR_ROOTNAME@
+LIB_ROOTNAME = @LIB_ROOTNAME@
+LIB_SUFFIX = @LIB_SUFFIX@
+
+VERSION_MAJOR = @VERSION_MAJOR@
+VERSION_MINOR = @VERSION_MINOR@
+VERSION = $(VERSION_MAJOR).$(VERSION_MINOR)
+REL_VERSION = @REL_VERSION@
+ABI_VERSION = @ABI_VERSION@
+LIB_ROOTNAME = @LIB_ROOTNAME@
+@SET_SHLIB_VARS@
+
+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 = -I. -I$(srcdir) @CPPFLAGS@ @DEFS@ -DLOCALEDIR=\"$(localedir)\"
+EXTRA_CFLAGS = @EXTRA_CFLAGS@
+CC = @CC@
+CPP = @CPP@
+AR = @AR@
+LDFLAGS = @EXTRA_LDFLAGS@ @LDFLAGS@
+LIBS = @LIBS@ @INTLLIBS@
+RANLIB = @LIB_PREP@
+
+RM = rm -f
+LN_S = @LN_S@
+LINT = @LINT@
+LINT_OPTS = @LINT_OPTS@
+
+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@
+LIBTOOL_VERSION = @LIBTOOL_VERSION@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = $(LIBTOOL_INSTALL) @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_DATA = @INSTALL_DATA@
+
+LINK = $(LIBTOOL_LINK)
+
+# The library is always named for the package, but the program can be further
+# renamed at install time, starting with the package name.
+PACKAGE = @PACKAGE@
+ACTUAL_PROG = `echo $(PACKAGE) |sed @program_transform_name@`
+LIB_CONFIG = $(CFG_ROOTNAME)-config
+
+# The library name $(LIB) is set at configure/make time, since it is used as a
+# makefile target. Ditto for $(PROG).
+LIB = @LIB_TARGET@
+PROG = @PACKAGE@$x
+#
+# 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 -P -o0 -I$*_ -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) \
+ argv$o \
+ arrows$o \
+ buttons$o \
+ checklist$o \
+ columns$o \
+ dlg_keys$o \
+ editbox$o \
+ help$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
+
+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
+
+$(PROG)$x : $(LIB) dialog$o @INTLDIR_MAKE@ @INTLLIBS@
+ $(LINK) -o $@ dialog$o -L. -l@PACKAGE@ $(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)/$(ACTUAL_PROG)$x
+
+uninstall-bin :
+ $(RM) $(BINDIR)/$(ACTUAL_PROG)$x
+
+install-man :: $(MAN1DIR)
+ @ echo "** installing $(ACTUAL_PROG).1"
+ @ $(SHELL) $(srcdir)/rename.sh \
+ $(srcdir)/dialog.1 \
+ $(MAN1DIR)/$(ACTUAL_PROG).1 \
+ $(ACTUAL_PROG) \
+ @PACKAGE@ \
+ $(INSTALL_DATA)
+
+uninstall-man ::
+ $(RM) $(MAN1DIR)/$(ACTUAL_PROG).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)/$(LIB_CONFIG)
+
+install-lib :: $(LIB_DIRS) $(LIB) headers.sed
+ @ echo "** installing library in $(LIBDIR)"
+ @ $(LIBTOOL_INSTALL) $(INSTALL_DATA) $(LIB) $(LIBDIR)
+ @ echo "** installing headers in $(INCLUDEDIR)"
+ @ $(SHELL) headers-sh $(INSTALL_DATA) $(INCLUDEDIR) $(srcdir) dialog.h
+ @ $(SHELL) headers-sh $(INSTALL_DATA) $(INCLUDEDIR) $(srcdir) dlg_colors.h
+ @ $(SHELL) headers-sh $(INSTALL_DATA) $(INCLUDEDIR) $(srcdir) dlg_keys.h
+ @ $(SHELL) headers-sh $(INSTALL_DATA) $(INCLUDEDIR) . dlg_config.h
+
+uninstall-lib :: $(BINDIR)
+ $(RM) $(BINDIR)/$(LIB_CONFIG)
+
+uninstall-lib :: $(LIB_DIRS)
+ - $(LIBTOOL_UNINSTALL) $(RM) $(LIBDIR)/$(LIB)
+ @ $(SHELL) headers-sh $(RM) $(INCLUDEDIR) $(srcdir) dialog.h
+ @ $(SHELL) headers-sh $(RM) $(INCLUDEDIR) $(srcdir) dlg_colors.h
+ @ $(SHELL) headers-sh $(RM) $(INCLUDEDIR) $(srcdir) dlg_keys.h
+ @ $(SHELL) headers-sh $(RM) $(INCLUDEDIR) . dlg_config.h
+
+install-lib :: $(MAN3DIR)
+ @ echo "** installing @PACKAGE@.3"
+ @ $(SHELL) $(srcdir)/rename.sh \
+ $(srcdir)/dialog.3 \
+ $(MAN3DIR)/@PACKAGE@.3 \
+ $(ACTUAL_PROG) \
+ @PACKAGE@ \
+ $(INSTALL_DATA)
+
+uninstall-lib ::
+ $(RM) $(MAN3DIR)/@PACKAGE@.3
+
+headers.sed : headers-sh
+ $(SHELL) 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) $(LINT_OPTS) $(CPPFLAGS) *.c
diff --git a/contrib/dialog/menubox.c b/contrib/dialog/menubox.c
new file mode 100644
index 0000000..518393e
--- /dev/null
+++ b/contrib/dialog/menubox.c
@@ -0,0 +1,778 @@
+/*
+ * $Id: menubox.c,v 1.148 2013/09/02 17:15:13 tom Exp $
+ *
+ * menubox.c -- implements the menu box
+ *
+ * Copyright 2000-2012,2013 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>
+
+typedef enum {
+ Unselected = 0,
+ Selected,
+ Editing
+} Mode;
+
+typedef struct {
+ /* the outer-window */
+ WINDOW *dialog;
+ int box_y;
+ int box_x;
+ int tag_x;
+ int item_x;
+ int menu_height;
+ int menu_width;
+ /* the inner-window */
+ WINDOW *menu;
+ DIALOG_LISTITEM *items;
+ int item_no;
+} ALL_DATA;
+
+#define MIN_HIGH (1 + (5 * MARGIN))
+
+#define INPUT_ROWS 3 /* rows per inputmenu entry */
+
+#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))
+
+/*
+ * Print menu item
+ */
+static void
+print_item(ALL_DATA * data,
+ WINDOW *win,
+ DIALOG_LISTITEM * item,
+ int choice,
+ Mode selected,
+ bool is_inputmenu)
+{
+ chtype save = dlg_get_attrs(win);
+ int n;
+ int climit = (data->item_x - data->tag_x - GUTTER);
+ int my_width = data->menu_width;
+ int my_x = data->item_x;
+ int my_y = ItemToRow(choice);
+ bool both = (!dialog_vars.no_tags && !dialog_vars.no_items);
+ bool first = TRUE;
+ chtype bordchar;
+ const char *show = (dialog_vars.no_items
+ ? item->name
+ : item->text);
+
+ switch (selected) {
+ default:
+ case Unselected:
+ bordchar = item_attr;
+ break;
+ case Selected:
+ bordchar = item_selected_attr;
+ break;
+ case Editing:
+ bordchar = dialog_attr;
+ break;
+ }
+
+ /* Clear 'residue' of last item and mark current current item */
+ if (is_inputmenu) {
+ (void) 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 {
+ (void) wattrset(win, menubox_attr);
+ wmove(win, my_y, 0);
+ wprintw(win, "%*s", my_width, " ");
+ }
+
+ /* highlight first char of the tag to be special */
+ if (both) {
+ (void) wmove(win, my_y, data->tag_x);
+ dlg_print_listitem(win, item->name, climit, first, selected);
+ first = FALSE;
+ }
+
+ /* 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 - data->tag_x,
+ bordchar,
+ bordchar);
+ my_width -= 1;
+ ++my_x;
+ }
+
+ /* print actual item */
+ wmove(win, my_y, my_x);
+ dlg_print_listitem(win, show, my_width - my_x, first, selected);
+
+ if (selected) {
+ dlg_item_help(item->help);
+ }
+ (void) wattrset(win, save);
+}
+
+/*
+ * Allow the user to edit the text of a menu entry.
+ */
+static int
+input_menu_edit(ALL_DATA * data,
+ DIALOG_LISTITEM * items,
+ int choice,
+ char **resultp)
+{
+ chtype save = dlg_get_attrs(data->menu);
+ 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(data, data->menu, items, choice, Editing, TRUE);
+
+ /* taken out of inputbox.c - but somewhat modified */
+ for (;;) {
+ if (!first)
+ key = dlg_mouse_wgetch(data->menu, &fkey);
+ if (dlg_edit_string(result, &offset, key, fkey, first)) {
+ dlg_show_string(data->menu, result, offset, inputbox_attr,
+ y,
+ data->item_x + 1,
+ data->menu_width - data->item_x - 3,
+ FALSE, first);
+ first = FALSE;
+ } else if (key == ESC || key == TAB) {
+ code = FALSE;
+ break;
+ } else {
+ break;
+ }
+ }
+ print_item(data, data->menu, items, choice, Selected, TRUE);
+ (void) wattrset(data->menu, save);
+
+ *resultp = result;
+ return code;
+}
+
+static int
+handle_button(int code, DIALOG_LISTITEM * items, int choice)
+{
+ char *help_result;
+
+ switch (code) {
+ case DLG_EXIT_OK: /* FALLTHRU */
+ case DLG_EXIT_EXTRA:
+ dlg_add_string(items[choice].name);
+ break;
+ case DLG_EXIT_HELP:
+ dlg_add_help_listitem(&code, &help_result, &items[choice]);
+ dlg_add_string(help_result);
+ break;
+ }
+ return code;
+}
+
+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;
+}
+
+int
+dlg_dummy_menutext(DIALOG_LISTITEM * items, int current, char *newtext)
+{
+ (void) items;
+ (void) current;
+ (void) newtext;
+ return DLG_EXIT_ERROR;
+}
+
+static void
+print_menu(ALL_DATA * data, int choice, int scrollamt, int max_choice, bool is_inputmenu)
+{
+ int i;
+
+ for (i = 0; i < max_choice; i++) {
+ print_item(data,
+ data->menu,
+ &data->items[i + scrollamt],
+ i,
+ (i == choice) ? Selected : Unselected,
+ is_inputmenu);
+ }
+
+ /* Clean bottom lines */
+ if (is_inputmenu) {
+ int spare_lines, x_count;
+ spare_lines = data->menu_height % INPUT_ROWS;
+ (void) wattrset(data->menu, menubox_attr);
+ for (; spare_lines; spare_lines--) {
+ wmove(data->menu, data->menu_height - spare_lines, 0);
+ for (x_count = 0; x_count < data->menu_width;
+ x_count++) {
+ waddch(data->menu, ' ');
+ }
+ }
+ }
+
+ (void) wnoutrefresh(data->menu);
+
+ dlg_draw_scrollbar(data->dialog,
+ scrollamt,
+ scrollamt,
+ scrollamt + max_choice,
+ data->item_no,
+ data->box_x,
+ data->box_x + data->menu_width,
+ data->box_y,
+ data->box_y + data->menu_height + 1,
+ menubox_border2_attr,
+ menubox_border_attr);
+}
+
+static bool
+check_hotkey(DIALOG_LISTITEM * items, int choice)
+{
+ bool result = FALSE;
+
+ if (dlg_match_char(dlg_last_getc(),
+ (dialog_vars.no_tags
+ ? items[choice].text
+ : items[choice].name))) {
+ result = TRUE;
+ }
+ return result;
+}
+
+/*
+ * 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[] = {
+ HELPKEY_BINDINGS,
+ 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,
+ HELPKEY_BINDINGS,
+ ENTERKEY_BINDINGS,
+ END_KEYS_BINDING
+ };
+ /* *INDENT-ON* */
+
+#ifdef KEY_RESIZE
+ int old_height = height;
+ int old_width = width;
+#endif
+ ALL_DATA all;
+ int i, j, x, y, cur_x, cur_y;
+ int key = 0, fkey;
+ int button = dialog_state.visit_items ? -1 : dlg_default_button();
+ int choice = dlg_default_listitem(items);
+ int result = DLG_EXIT_UNKNOWN;
+ int scrollamt = 0;
+ int max_choice;
+ int found;
+ int use_width, name_width, text_width, list_width;
+ WINDOW *dialog, *menu;
+ char *prompt = dlg_strclone(cprompt);
+ const char **buttons = dlg_ok_labels();
+ bool is_inputmenu = ((rename_menutext != 0)
+ && (rename_menutext != dlg_dummy_menutext));
+
+ all.items = items;
+ all.item_no = item_no;
+
+ dlg_does_output();
+ dlg_tab_correct_str(prompt);
+
+#ifdef KEY_RESIZE
+ retry:
+#endif
+
+ all.menu_height = menu_height;
+ use_width = dlg_calc_list_width(item_no, items) + 10;
+ use_width = MAX(26, use_width);
+ if (all.menu_height == 0) {
+ /* calculate height without items (4) */
+ dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, use_width);
+ dlg_calc_listh(&height, &all.menu_height, item_no);
+ } else {
+ dlg_auto_size(title, prompt,
+ &height, &width,
+ MIN_HIGH + all.menu_height, use_width);
+ }
+ 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);
+ all.dialog = dialog;
+
+ dlg_register_window(dialog, "menubox", binding);
+ dlg_register_buttons(dialog, "menubox", buttons);
+
+ dlg_mouse_setbase(x, y);
+
+ dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr);
+ dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr);
+ dlg_draw_title(dialog, title);
+
+ (void) wattrset(dialog, dialog_attr);
+ dlg_print_autowrap(dialog, prompt, height, width);
+
+ all.menu_width = width - 6;
+ getyx(dialog, cur_y, cur_x);
+ all.box_y = cur_y + 1;
+ all.box_x = (width - all.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 (all.menu_height + MIN_HIGH > height - cur_y)
+ all.menu_height = height - MIN_HIGH - cur_y;
+ if (all.menu_height <= 0)
+ all.menu_height = 1;
+
+ /* Find out maximal number of displayable items at once. */
+ max_choice = MIN(all.menu_height,
+ RowHeight(item_no));
+ if (is_inputmenu)
+ max_choice /= INPUT_ROWS;
+
+ /* create new window for the menu */
+ menu = dlg_sub_window(dialog, all.menu_height, all.menu_width,
+ y + all.box_y + 1,
+ x + all.box_x + 1);
+ all.menu = menu;
+
+ dlg_register_window(menu, "menu", binding2);
+ dlg_register_buttons(menu, "menu", buttons);
+
+ /* draw a box around the menu items */
+ dlg_draw_box(dialog,
+ all.box_y, all.box_x,
+ all.menu_height + 2, all.menu_width + 2,
+ menubox_border_attr, menubox_border2_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 = (all.menu_width - GUTTER);
+ if (dialog_vars.no_tags) {
+ list_width = MIN(use_width, text_width);
+ } else if (dialog_vars.no_items) {
+ list_width = MIN(use_width, name_width);
+ } else {
+ if (text_width >= 0
+ && name_width >= 0
+ && use_width > 0
+ && 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;
+ }
+ list_width = (text_width + name_width);
+ }
+
+ all.tag_x = (is_inputmenu
+ ? 0
+ : (use_width - list_width) / 2);
+ all.item_x = ((dialog_vars.no_tags
+ ? 0
+ : (dialog_vars.no_items
+ ? 0
+ : (GUTTER + name_width)))
+ + all.tag_x);
+
+ if (choice - scrollamt >= max_choice) {
+ scrollamt = choice - (max_choice - 1);
+ choice = max_choice - 1;
+ }
+
+ print_menu(&all, choice, scrollamt, max_choice, is_inputmenu);
+
+ /* register the new window, along with its borders */
+ dlg_mouse_mkbigregion(all.box_y + 1, all.box_x,
+ all.menu_height + 2, all.menu_width + 2,
+ KEY_MAX, 1, 1, 1 /* by lines */ );
+
+ dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width);
+
+ dlg_trace_win(dialog);
+ while (result == DLG_EXIT_UNKNOWN) {
+ if (button < 0) /* --visit-items */
+ wmove(dialog,
+ all.box_y + ItemToRow(choice) + 1,
+ all.box_x + all.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 (check_hotkey(items, j)) {
+ found = TRUE;
+ i = j - scrollamt;
+ break;
+ }
+ }
+ if (!found) {
+ for (j = 0; j <= scrollamt + choice; j++) {
+ if (check_hotkey(items, j)) {
+ 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 (i < 0) {
+ scrollamt += i;
+ choice = 0;
+ } else {
+ choice = max_choice - 1;
+ scrollamt += (i - max_choice + 1);
+ }
+ print_menu(&all, choice, scrollamt, max_choice, is_inputmenu);
+ } else {
+ choice = i;
+ print_menu(&all, choice, scrollamt, max_choice, is_inputmenu);
+ (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:
+ if (is_inputmenu)
+ result = dlg_ok_buttoncode(button);
+ else
+ result = dlg_enter_buttoncode(button);
+
+ /*
+ * If dlg_menu() is called from dialog_menu(), we want to
+ * capture the results into dialog_vars.input_result.
+ */
+ 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(&all,
+ &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(&all,
+ 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, j;
+ DIALOG_LISTITEM *listitems;
+
+ listitems = dlg_calloc(DIALOG_LISTITEM, (size_t) item_no + 1);
+ assert_ptr(listitems, "dialog_menu");
+
+ for (i = j = 0; i < item_no; ++i) {
+ listitems[i].name = items[j++];
+ listitems[i].text = (dialog_vars.no_items
+ ? dlg_strempty()
+ : items[j++]);
+ listitems[i].help = ((dialog_vars.item_help)
+ ? items[j++]
+ : 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;
+}
diff --git a/contrib/dialog/mixedform.c b/contrib/dialog/mixedform.c
new file mode 100644
index 0000000..3da422f
--- /dev/null
+++ b/contrib/dialog/mixedform.c
@@ -0,0 +1,118 @@
+/*
+ * $Id: mixedform.c,v 1.12 2013/09/02 17:02:05 tom Exp $
+ *
+ * mixedform.c -- implements the mixed form (i.e, typed pairs label/editbox)
+ *
+ * Copyright 2007-2011,2013 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;
+ char *help_result;
+
+ 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_help_formitem(&result, &help_result, &listitems[choice]);
+ show_status = dialog_vars.help_status;
+ dlg_add_string(help_result);
+ 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_add_last_key(-1);
+ }
+
+ dlg_free_formitems(listitems);
+ dlg_restore_vars(&save_vars);
+
+ return result;
+}
diff --git a/contrib/dialog/mixedgauge.c b/contrib/dialog/mixedgauge.c
new file mode 100644
index 0000000..b300e07
--- /dev/null
+++ b/contrib/dialog/mixedgauge.c
@@ -0,0 +1,392 @@
+/*
+ * $Id: mixedgauge.c,v 1.30 2012/11/18 16:30:20 tom Exp $
+ *
+ * mixedgauge.c -- implements the mixedgauge dialog
+ *
+ * Copyright 2007-2011,2012 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 == '-') {
+ size_t 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 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;
+
+ bm -= (2 * MARGIN);
+ 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);
+ (void) 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 {
+ (void) 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);
+ }
+ if (win != 0)
+ wmove(win, last_y, last_x);
+}
+
+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;
+ const char *message = _("Overall Progress");
+ chtype save2 = dlg_get_attrs(win);
+ (void) wattrset(win, title_attr);
+ (void) wmove(win, y, x + 2);
+ dlg_print_text(win, message, width, &attr);
+ (void) 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);
+ (void) wattrset(dlg->dialog, gauge_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 {
+ (void) 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);
+ dlg_trace_win(dlg->dialog);
+}
+
+/*
+ * 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_box2(dlg->dialog,
+ 0, 0,
+ dlg->height,
+ dlg->width,
+ dialog_attr, border_attr, border2_attr);
+
+ dlg_draw_title(dlg->dialog, dlg->title);
+ dlg_draw_helpline(dlg->dialog, FALSE);
+
+ 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);
+ (void) 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);
+}
diff --git a/contrib/dialog/mouse.c b/contrib/dialog/mouse.c
new file mode 100644
index 0000000..6a431e1
--- /dev/null
+++ b/contrib/dialog/mouse.c
@@ -0,0 +1,148 @@
+/*
+ * $Id: mouse.c,v 1.20 2012/12/21 10:00:30 tom Exp $
+ *
+ * mouse.c -- mouse support for dialog
+ *
+ * Copyright 2002-2007,2012 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, basecode;
+
+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_setcode(int code)
+{
+ basecode = code;
+}
+
+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(basecode + 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 = basecode + 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 */
diff --git a/contrib/dialog/mousewget.c b/contrib/dialog/mousewget.c
new file mode 100644
index 0000000..6f5b043
--- /dev/null
+++ b/contrib/dialog/mousewget.c
@@ -0,0 +1,91 @@
+/*
+ * $Id: mousewget.c,v 1.22 2012/11/30 10:23:49 tom Exp $
+ *
+ * mousewget.c -- mouse/wgetch support for dialog
+ *
+ * Copyright 2000-2008,2012 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 (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);
+}
diff --git a/contrib/dialog/msgbox.c b/contrib/dialog/msgbox.c
new file mode 100644
index 0000000..16e20d2
--- /dev/null
+++ b/contrib/dialog/msgbox.c
@@ -0,0 +1,192 @@
+/*
+ * $Id: msgbox.c,v 1.75 2012/12/01 01:48:08 tom Exp $
+ *
+ * msgbox.c -- implements the message box and info box
+ *
+ * Copyright 2000-2011,2012 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[] = {
+ HELPKEY_BINDINGS,
+ ENTERKEY_BINDINGS,
+ TRAVERSE_BINDINGS,
+ SCROLLKEY_BINDINGS,
+ END_KEYS_BINDING
+ };
+ /* *INDENT-ON* */
+
+ int x, y, last = 0, page;
+ int button;
+ 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);
+ int save_nocancel = dialog_vars.nocancel;
+#ifdef KEY_RESIZE
+ int req_high;
+ int req_wide;
+#endif
+
+ dialog_vars.nocancel = TRUE;
+ button = dlg_default_button();
+
+#ifdef KEY_RESIZE
+ req_high = height;
+ 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_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr);
+ dlg_draw_title(dialog, title);
+
+ (void) wattrset(dialog, dialog_attr);
+
+ if (pauseopt) {
+ dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr);
+ mouse_mkbutton(height - 2, width / 2 - 4, 6, '\n');
+ dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width);
+ dlg_draw_helpline(dialog, FALSE);
+
+ while (result == DLG_EXIT_UNKNOWN) {
+ if (show) {
+ last = dlg_print_scrolled(dialog, prompt, offset,
+ page, width, pauseopt);
+ dlg_trace_win(dialog);
+ 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 = dlg_ok_buttoncode(check);
+ 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 = dlg_ok_buttoncode(button);
+ break;
+ default:
+ if (is_DLGK_MOUSE(key)) {
+ result = dlg_ok_buttoncode(key - M_EVENT);
+ if (result < 0)
+ result = DLG_EXIT_OK;
+ } else if (dlg_check_scrolled(key,
+ last,
+ page,
+ &show,
+ &offset) == 0) {
+ } else {
+ beep();
+ }
+ break;
+ }
+ } else {
+ beep();
+ }
+ }
+ } else {
+ dlg_print_scrolled(dialog, prompt, offset, page, width, pauseopt);
+ dlg_draw_helpline(dialog, FALSE);
+ wrefresh(dialog);
+ dlg_trace_win(dialog);
+ result = DLG_EXIT_OK;
+ }
+
+ dlg_del_window(dialog);
+ dlg_mouse_free_regions();
+ free(prompt);
+
+ dialog_vars.nocancel = save_nocancel;
+
+ return result;
+}
diff --git a/contrib/dialog/package/debian/changelog b/contrib/dialog/package/debian/changelog
new file mode 100644
index 0000000..ed1303c
--- /dev/null
+++ b/contrib/dialog/package/debian/changelog
@@ -0,0 +1,91 @@
+cdialog (20130923) unstable; urgency=low
+
+ * improved memory-caching for gauge widget
+
+ -- Thomas E. Dickey <dickey@invisible-island.net> Sat, 21 Sep 2013 09:18:26 -0400
+
+cdialog (20130902) unstable; urgency=low
+
+ * maintenance updates
+
+ -- Thomas E. Dickey <dickey@invisible-island.net> Sun, 01 Sep 2013 19:08:31 -0400
+
+cdialog (20130523) unstable; urgency=low
+
+ * minor fixes
+
+ -- Thomas E. Dickey <dickey@invisible-island.net> Thu, 23 May 2013 19:25:01 -0400
+
+cdialog (20130315) unstable; urgency=low
+
+ * minor fixes
+
+ -- Thomas E. Dickey <dickey@invisible-island.net> Fri, 15 Mar 2013 04:41:20 -0400
+
+cdialog (20121230) unstable; urgency=low
+
+ * new widgets
+ * coverity fixes
+ * configure-script updates
+
+ -- Thomas E. Dickey <dickey@invisible-island.net> Sat, 06 Oct 2012 09:19:29 -0400
+
+cdialog (20120706) unstable; urgency=high
+
+ * fix regression in msgbox (ArchLinux #30574)
+
+ -- Thomas E. Dickey <dickey@invisible-island.net> Fri, 06 Jul 2012 12:52:46 -0400
+
+cdialog (20120703) unstable; urgency=low
+
+ * minor fixes
+ * add --default-button
+
+ -- Thomas E. Dickey <dickey@invisible-island.net> Sat, 30 Jun 2012 10:41:05 -0400
+
+cdialog (20120215) unstable; urgency=low
+
+ * minor fixes
+
+ -- Thomas E. Dickey <dickey@invisible-island.net> Wed, 15 Feb 2012 19:40:32 -0500
+
+cdialog (20111020) unstable; urgency=high
+
+ * fix regression in menubox.c logic for inputmenu vs menu.
+
+ -- Thomas E. Dickey <dickey@invisible-island.net> Wed, 19 Oct 2011 19:17:40 -0400
+
+cdialog (20111018) unstable; urgency=high
+
+ * improve color configurability
+ * misc bug-fixes.
+ * various improvements to tracing.
+ * remove an incorrect free() call in dlg_free_gauge()
+ * fix missing trailing null from dlg_align_columns
+
+ -- Thomas E. Dickey <dickey@invisible-island.net> Wed, 07 Sep 2011 20:04:04 -0400
+
+cdialog (20110707) unstable; urgency=high
+
+ * fix a regression in dlg_getc() from 20110630 changes.
+
+ -- Thomas E. Dickey <dickey@invisible-island.net> Thu, 07 Jul 2011 18:10:47 -0400
+
+cdialog (20110630) unstable; urgency=high
+
+ * various bug-fixes reported in FreeBSD.
+
+ -- Thomas E. Dickey <dickey@invisible-island.net> Mon, 13 Jun 2011 05:44:17 -0400
+
+cdialog (20110302) unstable; urgency=high
+
+ * Add --prgbox and --progressbox
+ * Bug-fix for --timeout.
+
+ -- Thomas E. Dickey <dickey@invisible-island.net> Mon, 28 Feb 2011 18:42:17 -0500
+
+cdialog (20110118) unstable; urgency=high
+
+ * Initial package release
+
+ -- Thomas E. Dickey <dickey@invisible-island.net> Thu, 30 Dec 2010 09:23:24 -0500
diff --git a/contrib/dialog/package/debian/compat b/contrib/dialog/package/debian/compat
new file mode 100644
index 0000000..7ed6ff8
--- /dev/null
+++ b/contrib/dialog/package/debian/compat
@@ -0,0 +1 @@
+5
diff --git a/contrib/dialog/package/debian/control b/contrib/dialog/package/debian/control
new file mode 100644
index 0000000..f219de1
--- /dev/null
+++ b/contrib/dialog/package/debian/control
@@ -0,0 +1,24 @@
+Source: cdialog
+Maintainer: Thomas E. Dickey <dickey@invisible-island.net>
+Section: misc
+Priority: optional
+Standards-Version: 3.8.4
+Build-Depends: debhelper (>= 5), libncursesw5-dev (>= 5.3), groff-base
+Homepage: http://invisible-island.net/dialog/
+
+Package: cdialog
+Architecture: any
+Depends: libncursesw5 (>= 5.3)
+Description: dialog - display dialog boxes from shell scripts
+ Dialog 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 dialog):
+ .
+ calendar, checklist, dselect, editbox, form, fselect, gauge,
+ infobox, inputbox, inputmenu, menu, mixedform, mixedgauge,
+ msgbox (message), passwordbox, passwordform, pause, progressbox,
+ radiolist, tailbox, tailboxbg, textbox, timebox, and yesno
+ (yes/no).
+ .
+ This package installs as "cdialog" to avoid conflict with other packages.
diff --git a/contrib/dialog/package/debian/copyright b/contrib/dialog/package/debian/copyright
new file mode 100644
index 0000000..d76cf1a
--- /dev/null
+++ b/contrib/dialog/package/debian/copyright
@@ -0,0 +1,111 @@
+Upstream source http://invisible-island.net/dialog/dialog.html
+
+Current dialog upstream maintainer: Thomas Dickey <dickey@invisible-island.net>
+
+-------------------------------------------------------------------------------
+Files: *.c *.h
+ Copyright 2000-2012,2013 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)
+-------------------------------------------------------------------------------
+
+Files: aclocal.m4
+Licence: other-BSD
+Copyright: 1999-2010,2013 by 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 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.
+
+Files: install-sh
+Copyright: 1994 X Consortium
+Licence: other-BSD
+ 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.
+
+Files: debian/*
+Copyright: 2010-2012,2013 Thomas E. Dickey
+Licence: other-BSD
+ Permission to use, copy, modify, and distribute this software and its
+ documentation for any purpose and without fee is hereby granted,
+ provided that the above copyright notice appear in all copies and that
+ both that copyright notice and this permission notice appear in
+ supporting documentation, and that the name of the above listed
+ copyright holder(s) not be used in advertising or publicity pertaining
+ to distribution of the software without specific, written prior
+ permission.
+
+ THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD
+ TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE
+ LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+On Debian systems, the complete text of the GNU General
+Public License can be found in '/usr/share/common-licenses/GPL-2'
diff --git a/contrib/dialog/package/debian/docs b/contrib/dialog/package/debian/docs
new file mode 100644
index 0000000..e845566
--- /dev/null
+++ b/contrib/dialog/package/debian/docs
@@ -0,0 +1 @@
+README
diff --git a/contrib/dialog/package/debian/rules b/contrib/dialog/package/debian/rules
new file mode 100755
index 0000000..fae0138
--- /dev/null
+++ b/contrib/dialog/package/debian/rules
@@ -0,0 +1,95 @@
+#!/usr/bin/make -f
+# MAde with the aid of dh_make, by Craig Small
+# Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess.
+# Some lines taken from debmake, by Cristoph Lameter.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+# These are used for cross-compiling and for saving the configure script
+# from having to guess our platform (since we know it already)
+DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
+DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
+
+CFLAGS =
+
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+ CFLAGS += -O0
+else
+ CFLAGS += -O2
+endif
+ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
+ INSTALL_PROGRAM += -s
+endif
+
+
+configure: configure-stamp
+configure-stamp:
+ dh_testdir
+
+ CFLAGS="$(CFLAGS)" ./configure \
+ --host=$(DEB_HOST_GNU_TYPE) \
+ --build=$(DEB_BUILD_GNU_TYPE) \
+ --prefix=/usr \
+ --mandir=\$${prefix}/share/man \
+ --enable-nls \
+ --enable-header-subdir \
+ --enable-widec \
+ --with-libtool \
+ --with-ncursesw \
+ --with-package=cdialog \
+ --disable-rpath-hack
+
+ touch configure-stamp
+
+build: build-stamp
+build-stamp: configure-stamp
+ dh_testdir
+
+ $(MAKE)
+
+ touch build-stamp
+
+clean:
+ dh_testdir
+ dh_testroot
+
+ [ ! -f makefile ] || $(MAKE) distclean
+
+ rm -f configure-stamp build-stamp install-stamp
+
+ dh_clean
+
+install: install-stamp
+install-stamp: build-stamp
+ dh_testdir
+ dh_testroot
+ dh_clean -k
+ dh_installdirs
+
+ $(MAKE) install DESTDIR=$(CURDIR)/debian/cdialog
+
+ touch install-stamp
+
+# Build architecture-independent files here.
+binary-indep: build install
+# No binary-indep target.
+
+# Build architecture-dependent files here.
+binary-arch: build install
+ dh_testdir
+ dh_testroot
+ dh_installdocs
+ dh_installexamples
+ dh_installchangelogs CHANGES
+ dh_strip
+ dh_compress
+ dh_fixperms
+ dh_installdeb
+ dh_shlibdeps
+ dh_gencontrol
+ dh_md5sums
+ dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install install-stamp
diff --git a/contrib/dialog/package/debian/source/format b/contrib/dialog/package/debian/source/format
new file mode 100644
index 0000000..89ae9db
--- /dev/null
+++ b/contrib/dialog/package/debian/source/format
@@ -0,0 +1 @@
+3.0 (native)
diff --git a/contrib/dialog/package/debian/watch b/contrib/dialog/package/debian/watch
new file mode 100644
index 0000000..0977587
--- /dev/null
+++ b/contrib/dialog/package/debian/watch
@@ -0,0 +1,4 @@
+version=3
+
+opts=passive ftp://invisible-island.net/dialog/dialog-([\d.]+)\.tgz \
+ debian uupdate
diff --git a/contrib/dialog/package/dialog.spec b/contrib/dialog/package/dialog.spec
new file mode 100644
index 0000000..8743a6a
--- /dev/null
+++ b/contrib/dialog/package/dialog.spec
@@ -0,0 +1,87 @@
+Summary: dialog - display dialog boxes from shell scripts
+%define AppProgram dialog
+%define AppVersion 1.2
+%define AppRelease 20130923
+%define ActualProg c%{AppProgram}
+# $XTermId: dialog.spec,v 1.54 2013/09/23 23:08:24 tom Exp $
+Name: %{ActualProg}
+Version: %{AppVersion}
+Release: %{AppRelease}
+License: LGPL
+Group: Applications/Development
+URL: ftp://invisible-island.net/%{AppProgram}
+Source0: %{AppProgram}-%{AppVersion}-%{AppRelease}.tgz
+Packager: Thomas Dickey <dickey@invisible-island.net>
+
+%description
+Dialog 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 dialog):
+
+ calendar, checklist, dselect, editbox, form, fselect, gauge,
+ infobox, inputbox, inputmenu, menu, mixedform, mixedgauge,
+ msgbox (message), passwordbox, passwordform, pause, progressbox,
+ radiolist, tailbox, tailboxbg, textbox, timebox, and yesno
+ (yes/no).
+
+This package installs as "cdialog" to avoid conflict with other packages.
+%prep
+
+%define debug_package %{nil}
+
+%setup -q -n %{AppProgram}-%{AppVersion}-%{AppRelease}
+
+%build
+
+INSTALL_PROGRAM='${INSTALL}' \
+ ./configure \
+ --target %{_target_platform} \
+ --prefix=%{_prefix} \
+ --bindir=%{_bindir} \
+ --libdir=%{_libdir} \
+ --mandir=%{_mandir} \
+ --with-package=%{ActualProg} \
+ --enable-header-subdir \
+ --enable-nls \
+ --enable-widec \
+ --with-libtool \
+ --with-ncursesw \
+ --disable-rpath-hack
+
+make
+
+%install
+[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
+
+make install-full DESTDIR=$RPM_BUILD_ROOT
+libtool --finish %{_libdir}
+
+strip $RPM_BUILD_ROOT%{_bindir}/%{ActualProg}
+chmod 755 $RPM_BUILD_ROOT%{_libdir}/lib%{ActualProg}.so.*.*.*
+rm -f $RPM_BUILD_ROOT%{_libdir}/lib%{ActualProg}.la
+
+%clean
+[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-,root,root)
+%{_bindir}/%{ActualProg}
+%{_bindir}/%{ActualProg}-config
+%{_mandir}/man1/%{ActualProg}.*
+%{_mandir}/man3/%{ActualProg}.*
+%{_includedir}/%{ActualProg}.h
+%{_includedir}/%{ActualProg}/dlg_colors.h
+%{_includedir}/%{ActualProg}/dlg_config.h
+%{_includedir}/%{ActualProg}/dlg_keys.h
+%{_libdir}/lib%{ActualProg}.*
+%{_datadir}/locale/*/LC_MESSAGES/%{ActualProg}.mo
+
+%changelog
+# each patch should add its ChangeLog entries here
+
+* Tue Oct 18 2011 Thomas Dickey
+- add executable permissions for shared libraries, discard ".la" file.
+
+* Thu Dec 30 2010 Thomas Dickey
+- initial version
diff --git a/contrib/dialog/package/freebsd/Makefile b/contrib/dialog/package/freebsd/Makefile
new file mode 100644
index 0000000..c9a9dcc
--- /dev/null
+++ b/contrib/dialog/package/freebsd/Makefile
@@ -0,0 +1,48 @@
+# New ports collection makefile for: ncdialog
+# Date created: 2003-01-11
+# Whom: AlanE <alane@freebsd.org>
+#
+# $Carpetsmoker: ports/cdialog/Makefile,v 1.4 2007/04/22 11:30:53 carpetsmoker Exp $
+# $FreeBSD$
+#
+
+PORTNAME= cdialog
+PORTVERSION= 1.2.20130923
+PORTEPOCH= 1
+CATEGORIES= devel
+MASTER_SITES= ftp://invisible-island.net/${PORTNAME:S|^c||}/
+DISTNAME= ${PORTNAME:S|^c||}-${PORTVERSION:R}-${PORTVERSION:E}
+EXTRACT_SUFX= .tgz
+
+MAINTAINER= sylvio@FreeBSD.org
+COMMENT= An enhanced version of 'dialog' to work with ncurses
+
+LICENSE= LGPL21
+
+USE_AUTOTOOLS= libtool
+GNU_CONFIGURE= yes
+USE_LDCONFIG= yes
+CONFIGURE_ARGS= --enable-widec \
+ --includedir=${PREFIX}/include/${PORTNAME} \
+ --with-libtool \
+ --with-ncursesw \
+ --with-package=${PORTNAME}
+MAKEFILE= makefile
+
+MAN1= cdialog.1
+MAN3= cdialog.3
+MANCOMPRESSED= no
+
+INSTALL_TARGET= install-strip install-man install-lib
+
+.if !defined(NOPORTEXAMPLES)
+post-patch:
+ @${FIND} ${WRKSRC}/samples/ -type f -exec ${REINPLACE_CMD} -i "" "s|dialog|cdialog|g" {} \;
+
+post-install:
+ @${MKDIR} ${EXAMPLESDIR}
+ cd ${WRKSRC}/samples && ${FIND} . | \
+ ${CPIO} -pdm -L -R ${SHAREOWN}:${SHAREGRP} ${EXAMPLESDIR}
+.endif
+
+.include <bsd.port.mk>
diff --git a/contrib/dialog/package/freebsd/distinfo b/contrib/dialog/package/freebsd/distinfo
new file mode 100644
index 0000000..b9531ea
--- /dev/null
+++ b/contrib/dialog/package/freebsd/distinfo
@@ -0,0 +1,2 @@
+SHA256 (dialog-1.1-20120215.tgz) = 883c58498663d939b18f3aea56976b64268b736d1579ac850512e5d5a4a2eafc
+SIZE (dialog-1.1-20120215.tgz) = 441234
diff --git a/contrib/dialog/package/freebsd/pkg-descr b/contrib/dialog/package/freebsd/pkg-descr
new file mode 100644
index 0000000..a23bfba
--- /dev/null
+++ b/contrib/dialog/package/freebsd/pkg-descr
@@ -0,0 +1,9 @@
+This is an enhanced version of the 'dialog' command. Quoting Thomas Dickey,
+the ncurses developer, "DIALOG was written by Savio Lam <lam836@cs.cuhk.hk>
+and modified by several people.
+
+"Initially, I made fixes and reviewed the code to ensure that problems
+reported were not related to ncurses. After that, I resumed development,
+adding new widget types. See the changelog for details."
+
+WWW: http://invisible-island.net/dialog/
diff --git a/contrib/dialog/package/freebsd/pkg-plist b/contrib/dialog/package/freebsd/pkg-plist
new file mode 100644
index 0000000..097d58b
--- /dev/null
+++ b/contrib/dialog/package/freebsd/pkg-plist
@@ -0,0 +1,203 @@
+bin/cdialog
+bin/cdialog-config
+include/cdialog/dialog.h
+include/cdialog/dlg_colors.h
+include/cdialog/dlg_config.h
+include/cdialog/dlg_keys.h
+lib/libcdialog.a
+lib/libcdialog.la
+lib/libcdialog.so
+lib/libcdialog.so.10
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/README
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/calendar
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/calendar-stdout
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/calendar2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/calendar2-stdout
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/calendar3
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/calendar3-stdout
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/checklist
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/checklist-8bit
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/checklist-utf8
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/checklist1
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/checklist10
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/checklist11
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/checklist2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/checklist3
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/checklist4
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/checklist5
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/checklist6
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/checklist7
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/checklist8
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/checklist9
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/checklist9.txt
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/copifuncs/admin.funcs
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/copifuncs/common.funcs
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/copifuncs/copi.funcs
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/copifuncs/copi.ifman1
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/copifuncs/copi.ifman2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/copifuncs/copi.ifmcfg2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/copifuncs/copi.ifmcfg4
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/copifuncs/copi.ifmcfg5
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/copifuncs/copi.ifpoll1
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/copifuncs/copi.ifpoll2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/copifuncs/copi.ifreq1
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/copifuncs/copi.ifreq2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/copifuncs/copi.rcnews
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/copifuncs/copi.sendifm1
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/copifuncs/copi.sendifm2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/copifuncs/copi.trnrc
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/copifuncs/copi.wheel
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/copifuncs/ifpatch
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/copismall
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/debian.rc
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/dialog.py
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/editbox
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/editbox-utf8
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/editbox2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/editbox3
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/editbox4
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/form1
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/form1-both
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/form1-extra
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/form1-help
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/form1-utf8
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/form2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/form3
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/form4
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/form5
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/form6
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/fselect
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/fselect-stdout
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/fselect0
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/fselect1
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/fselect1-stdout
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/fselect2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/fselect2-stdout
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/gauge
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/gauge0
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/gauge0-input-fd
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/gauge2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/infobox
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/infobox1
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/infobox2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/infobox3
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/infobox4
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/infobox5
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/infobox6
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/inputbox
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/inputbox-both
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/inputbox-extra
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/inputbox-help
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/inputbox1
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/inputbox2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/inputbox3
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/inputbox4
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/inputbox5
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/inputbox6-8bit
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/inputbox6-utf8
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/inputbox7
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/inputmenu
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/inputmenu-stdout
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/inputmenu1
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/inputmenu2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/inputmenu3
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/inputmenu4
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/install/FDISK.TEST
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/install/makefile
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/install/makefile.in
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/install/setup.c
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/install/setup.help
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/killall
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/listing
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/menubox
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/menubox-8bit
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/menubox-utf8
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/menubox1
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/menubox10
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/menubox2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/menubox3
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/menubox4
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/menubox5
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/menubox6
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/menubox7
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/menubox8
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/menubox9
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/mixedform
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/mixedform2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/mixedgauge
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/msgbox
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/msgbox-help
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/msgbox-utf8
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/msgbox1
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/msgbox2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/msgbox3
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/msgbox4-8bit
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/msgbox4-eucjp
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/msgbox4-utf8
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/msgbox5
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/msgbox6
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/msgbox6a
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/password
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/password1
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/password2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/passwordform1
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/passwordform1-utf8
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/pause
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/pause-both
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/pause-extra
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/pause-help
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/prgbox
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/prgbox2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/programbox
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/programbox2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/progress
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/progress2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/radiolist
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/radiolist1
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/radiolist10
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/radiolist2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/radiolist3
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/radiolist4
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/report-button
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/report-edit
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/report-string
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/report-tempfile
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/report-yesno
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/rotated-data
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/setup-edit
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/setup-tempfile
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/setup-utf8
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/setup-vars
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/shortlist
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/slackware.rc
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/sourcemage.rc
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/suse.rc
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/tailbox
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/tailboxbg
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/tailboxbg1
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/tailboxbg2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/testdata-8bit
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/textbox
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/textbox-both
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/textbox-help
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/textbox.txt
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/textbox2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/textbox3
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/timebox
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/timebox-stdout
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/timebox2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/timebox2-stdout
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/wheel
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/whiptail.rc
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/yesno
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/yesno-both
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/yesno-extra
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/yesno-help
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/yesno-utf8
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/yesno2
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/yesno3
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/yesno4
+%%PORTEXAMPLES%%@dirrm %%EXAMPLESDIR%%/install
+%%PORTEXAMPLES%%@dirrm %%EXAMPLESDIR%%/copifuncs
+%%PORTEXAMPLES%%@dirrm %%EXAMPLESDIR%%
+@dirrm include/cdialog
diff --git a/contrib/dialog/pause.c b/contrib/dialog/pause.c
new file mode 100644
index 0000000..acca9b7
--- /dev/null
+++ b/contrib/dialog/pause.c
@@ -0,0 +1,246 @@
+/*
+ * $Id: pause.c,v 1.36 2012/07/03 00:01:59 tom Exp $
+ *
+ * pause.c -- implements the pause dialog
+ *
+ * Copyright 2004-2011,2012 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[] = {
+ HELPKEY_BINDINGS,
+ ENTERKEY_BINDINGS,
+ TRAVERSE_BINDINGS,
+ END_KEYS_BINDING
+ };
+ /* *INDENT-ON* */
+
+#ifdef KEY_RESIZE
+ int old_height = height;
+ int old_width = width;
+#endif
+
+ int i, x, y, step;
+ int button = dlg_default_button();
+ int seconds_orig;
+ WINDOW *dialog;
+ const char **buttons = dlg_ok_labels();
+ bool have_buttons = (dlg_button_count(buttons) != 0);
+ bool first;
+ int key = 0, fkey;
+ int result = DLG_EXIT_UNKNOWN;
+ int button_high = (have_buttons ? BTN_HIGH : MARGIN);
+ int gauge_y;
+ char *prompt = dlg_strclone(cprompt);
+ int save_timeout = dialog_vars.timeout_secs;
+
+ curs_set(0);
+
+ dlg_tab_correct_str(prompt);
+
+ dialog_vars.timeout_secs = 0;
+ 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);
+ }
+ gauge_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);
+
+ first = TRUE;
+ do {
+ (void) werase(dialog);
+ dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr);
+
+ dlg_draw_title(dialog, title);
+ dlg_draw_helpline(dialog, FALSE);
+
+ (void) wattrset(dialog, dialog_attr);
+ dlg_print_autowrap(dialog, prompt, height, width);
+
+ dlg_draw_box2(dialog,
+ gauge_y, 2 + MARGIN,
+ 2 + MARGIN, width - 2 * (2 + MARGIN),
+ dialog_attr,
+ border_attr,
+ border2_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, gauge_y + MARGIN, 4);
+ (void) wattrset(dialog, title_attr);
+
+ for (i = 0; i < (width - 2 * (3 + MARGIN)); i++)
+ (void) waddch(dialog, ' ');
+
+ (void) wmove(dialog, gauge_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 {
+ (void) wattrset(dialog, A_REVERSE);
+ }
+ (void) wmove(dialog, gauge_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_box2(dialog, border_attr, border2_attr, dialog_attr);
+ dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width);
+ }
+ if (first) {
+ (void) wrefresh(dialog);
+ dlg_trace_win(dialog);
+ first = FALSE;
+ }
+
+ 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:
+ result = dlg_enter_buttoncode(button);
+ break;
+ case ERR:
+ break;
+ default:
+ if (is_DLGK_MOUSE(key)) {
+ result = dlg_ok_buttoncode(key - M_EVENT);
+ if (result < 0)
+ result = DLG_EXIT_OK;
+ }
+ break;
+ }
+ }
+ } while ((result == DLG_EXIT_UNKNOWN) && (seconds-- > 0));
+
+ curs_set(1);
+ dlg_mouse_free_regions();
+ dlg_del_window(dialog);
+ free(prompt);
+
+ dialog_vars.timeout_secs = save_timeout;
+
+ return ((result == DLG_EXIT_UNKNOWN) ? DLG_EXIT_OK : result);
+}
diff --git a/contrib/dialog/po/POTFILES.in b/contrib/dialog/po/POTFILES.in
new file mode 100644
index 0000000..48ea956
--- /dev/null
+++ b/contrib/dialog/po/POTFILES.in
@@ -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
diff --git a/contrib/dialog/po/an.po b/contrib/dialog/po/an.po
new file mode 100644
index 0000000..494dabe
--- /dev/null
+++ b/contrib/dialog/po/an.po
@@ -0,0 +1,111 @@
+# Dialog
+# Copyright 2003-2007,2008 # Thomas Dickey
+# This file is distributed under the same license as the dialog package.
+# Daniel Martinez <entaltoaragon@gmail.com>, 2013.
+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: 2013-02-19 17:50+0100\n"
+"Last-Translator: Daniel Martinez <entaltoaragon@gmail.com>\n"
+"Language-Team: Aragonese <softaragones@googlegroups.com>\n"
+"Language: an\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 "Sí"
+
+#: buttons.c:393
+msgid "No"
+msgstr "No"
+
+#: buttons.c:401
+msgid "OK"
+msgstr "Acceptar"
+
+#: 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 "Aduya"
+
+#. Headline "Month"
+#: calendar.c:273
+msgid "Month"
+msgstr "Mes"
+
+#. Headline "Year"
+#: calendar.c:293
+msgid "Year"
+msgstr "Anyo"
+
+#: dialog.c:741
+msgid "Rename"
+msgstr "Renombrar"
+
+#: fselect.c:550
+msgid "Directories"
+msgstr "Directorios"
+
+#: fselect.c:551
+msgid "Files"
+msgstr "Fichers"
+
+#: mixedgauge.c:58
+msgid "Succeeded"
+msgstr "Finalizau con exito"
+
+#: mixedgauge.c:61
+msgid "Failed"
+msgstr "Falló"
+
+#: mixedgauge.c:64
+msgid "Passed"
+msgstr "Pasau"
+
+#: mixedgauge.c:67
+msgid "Completed"
+msgstr "Completau"
+
+#: mixedgauge.c:70
+msgid "Checked"
+msgstr "Comprebau"
+
+#: mixedgauge.c:73
+msgid "Done"
+msgstr "Feito"
+
+#: mixedgauge.c:76
+msgid "Skipped"
+msgstr "Blincau"
+
+#: 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"
diff --git a/contrib/dialog/po/ar.po b/contrib/dialog/po/ar.po
new file mode 100644
index 0000000..4f18ccb
--- /dev/null
+++ b/contrib/dialog/po/ar.po
@@ -0,0 +1,112 @@
+# 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: 2011-01-16 17:57-0500\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"
+"Language: ar\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:387
+msgid "Yes"
+msgstr "نعم"
+
+#: buttons.c:395
+msgid "No"
+msgstr "لا"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "مواÙÙ‚"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr ""
+
+#: buttons.c:427
+msgid "Extra"
+msgstr ""
+
+#: buttons.c:435
+msgid "Help"
+msgstr ""
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr ""
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr ""
+
+#: dialog.c:756
+msgid "Rename"
+msgstr ""
+
+#: fselect.c:571
+msgid "Directories"
+msgstr ""
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr ""
diff --git a/contrib/dialog/po/be@latin.po b/contrib/dialog/po/be@latin.po
new file mode 100644
index 0000000..6a45d8d
--- /dev/null
+++ b/contrib/dialog/po/be@latin.po
@@ -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"
diff --git a/contrib/dialog/po/bg.po b/contrib/dialog/po/bg.po
new file mode 100644
index 0000000..f11617f
--- /dev/null
+++ b/contrib/dialog/po/bg.po
@@ -0,0 +1,112 @@
+# 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: 2011-01-16 17:57-0500\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"
+"Language: bg\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: buttons.c:387
+msgid "Yes"
+msgstr "Да"
+
+#: buttons.c:395
+msgid "No"
+msgstr "Ðе"
+
+#: buttons.c:403
+msgid "OK"
+msgstr ""
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "Отказ"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr ""
+
+#: buttons.c:427
+msgid "Extra"
+msgstr ""
+
+#: buttons.c:435
+msgid "Help"
+msgstr ""
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr ""
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr ""
+
+#: dialog.c:756
+msgid "Rename"
+msgstr ""
+
+#: fselect.c:571
+msgid "Directories"
+msgstr ""
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr ""
diff --git a/contrib/dialog/po/ca.po b/contrib/dialog/po/ca.po
new file mode 100644
index 0000000..65f79a7
--- /dev/null
+++ b/contrib/dialog/po/ca.po
@@ -0,0 +1,111 @@
+# 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: 2011-01-16 17:57-0500\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"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: buttons.c:387
+msgid "Yes"
+msgstr "Sí"
+
+#: buttons.c:395
+msgid "No"
+msgstr "No"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "D'acord"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "Cancel·la"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "SURT"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr "Extra"
+
+#: buttons.c:435
+msgid "Help"
+msgstr "Ajuda"
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr "Mes"
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr "Any"
+
+#: dialog.c:756
+msgid "Rename"
+msgstr "Canvia el nom"
+
+#: fselect.c:571
+msgid "Directories"
+msgstr "Directoris"
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr "Cerca"
diff --git a/contrib/dialog/po/cs.po b/contrib/dialog/po/cs.po
new file mode 100644
index 0000000..7986891
--- /dev/null
+++ b/contrib/dialog/po/cs.po
@@ -0,0 +1,114 @@
+# Czech translations for dialog package.
+# Copyright (C) 2011 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the dialog package.
+#
+# Martin Povolny <martin@solnet.cz>
+# Marek Černocký <marek@manet.cz>, 2011.
+#
+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: 2011-11-25 13:18+0100\n"
+"Last-Translator: Marek Černocký <marek@manet.cz>\n"
+"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
+"Language: cs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: buttons.c:385
+msgid "Yes"
+msgstr "Ano"
+
+#: buttons.c:393
+msgid "No"
+msgstr "Ne"
+
+#: buttons.c:401
+msgid "OK"
+msgstr "Budiž"
+
+#: buttons.c:409
+msgid "Cancel"
+msgstr "Storno"
+
+#: buttons.c:417
+msgid "EXIT"
+msgstr "Konec"
+
+#: buttons.c:425
+msgid "Extra"
+msgstr "Další"
+
+#: buttons.c:433
+msgid "Help"
+msgstr "Nápověda"
+
+#. 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 "Přejmenovat"
+
+#: fselect.c:550
+msgid "Directories"
+msgstr "Složky"
+
+#: fselect.c:551
+msgid "Files"
+msgstr "Soubory"
+
+#: mixedgauge.c:58
+msgid "Succeeded"
+msgstr "Úspěšné"
+
+#: mixedgauge.c:61
+msgid "Failed"
+msgstr "Selhalo"
+
+#: mixedgauge.c:64
+msgid "Passed"
+msgstr "Pozastaveno"
+
+#: mixedgauge.c:67
+msgid "Completed"
+msgstr "DokonÄeno"
+
+#: mixedgauge.c:70
+msgid "Checked"
+msgstr "Zkontrolováno"
+
+#: mixedgauge.c:73
+msgid "Done"
+msgstr "Hotovo"
+
+#: mixedgauge.c:76
+msgid "Skipped"
+msgstr "PÅ™eskoÄeno"
+
+#: mixedgauge.c:79
+msgid "In Progress"
+msgstr "Probíhá"
+
+#: mixedgauge.c:85
+msgid "N/A"
+msgstr "Není známo"
+
+#: mixedgauge.c:193
+msgid "Overall Progress"
+msgstr "Celkový průběh"
+
+#: textbox.c:489
+msgid "Search"
+msgstr "Hledat"
diff --git a/contrib/dialog/po/cy.po b/contrib/dialog/po/cy.po
new file mode 100644
index 0000000..e3f2827
--- /dev/null
+++ b/contrib/dialog/po/cy.po
@@ -0,0 +1,111 @@
+# Dialog
+# Copyright 2003,2004 # Thomas Dickey
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Dialog\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-01-16 17:57-0500\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"
+"Language: cy\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: buttons.c:387
+msgid "Yes"
+msgstr "Ie"
+
+#: buttons.c:395
+msgid "No"
+msgstr "Na"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "Iawn"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "Diddymu"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "GADAEL"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr "Ychwanegol"
+
+#: buttons.c:435
+msgid "Help"
+msgstr "Cymorth"
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr "Mis"
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr "Blwyddyn"
+
+#: dialog.c:756
+msgid "Rename"
+msgstr "Ailenwy"
+
+#: fselect.c:571
+msgid "Directories"
+msgstr "Cyfeiriaduron"
+
+#: fselect.c:572
+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:468
+#, fuzzy
+msgid "Search"
+msgstr "Search"
diff --git a/contrib/dialog/po/da.po b/contrib/dialog/po/da.po
new file mode 100644
index 0000000..531ba29
--- /dev/null
+++ b/contrib/dialog/po/da.po
@@ -0,0 +1,112 @@
+# 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: 2011-01-16 17:57-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"
+"Language: da\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: buttons.c:387
+msgid "Yes"
+msgstr "Ja"
+
+#: buttons.c:395
+msgid "No"
+msgstr "Nej"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "O.K."
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "Anullér"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "AFSLUT"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr "Ekstra"
+
+#: buttons.c:435
+msgid "Help"
+msgstr "Hjælp"
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr "MÃ¥ned"
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr "Ã…r"
+
+#: dialog.c:756
+msgid "Rename"
+msgstr "Omdøb"
+
+#: fselect.c:571
+msgid "Directories"
+msgstr "Kataloger"
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr "Søg"
diff --git a/contrib/dialog/po/de.po b/contrib/dialog/po/de.po
new file mode 100644
index 0000000..0d176d9
--- /dev/null
+++ b/contrib/dialog/po/de.po
@@ -0,0 +1,112 @@
+# 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: 2011-01-16 17:57-0500\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"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: buttons.c:387
+msgid "Yes"
+msgstr "Ja"
+
+#: buttons.c:395
+msgid "No"
+msgstr "Nein"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "OK"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "VERLASSEN"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr "Extra"
+
+#: buttons.c:435
+msgid "Help"
+msgstr "Hilfe"
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr "Monat"
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr "Jahr"
+
+#: dialog.c:756
+msgid "Rename"
+msgstr "Bearbeiten"
+
+#: fselect.c:571
+msgid "Directories"
+msgstr "Verzeichnisse"
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr "Suche"
diff --git a/contrib/dialog/po/dialog.pot b/contrib/dialog/po/dialog.pot
new file mode 100644
index 0000000..8bd8b6d
--- /dev/null
+++ b/contrib/dialog/po/dialog.pot
@@ -0,0 +1,109 @@
+# Dialog
+# Copyright 2003-2010,2011 # Thomas Dickey
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: dialog 1.1.20110116\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-01-16 17:57-0500\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:387
+msgid "Yes"
+msgstr ""
+
+#: buttons.c:395
+msgid "No"
+msgstr ""
+
+#: buttons.c:403
+msgid "OK"
+msgstr ""
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr ""
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr ""
+
+#: buttons.c:427
+msgid "Extra"
+msgstr ""
+
+#: buttons.c:435
+msgid "Help"
+msgstr ""
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr ""
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr ""
+
+#: dialog.c:756
+msgid "Rename"
+msgstr ""
+
+#: fselect.c:571
+msgid "Directories"
+msgstr ""
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr ""
diff --git a/contrib/dialog/po/el.po b/contrib/dialog/po/el.po
new file mode 100644
index 0000000..2fadd9b
--- /dev/null
+++ b/contrib/dialog/po/el.po
@@ -0,0 +1,111 @@
+# Greek translation for dialog.
+# This file is distributed under the same license as the dialog package.
+# Copyright (C) 2008 Free Software Foundation, Inc.
+# Savvas Radevic <vicedar@gmail.com>, 2012.
+#
+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: 2012-03-18 00:54+0100\n"
+"Last-Translator: Savvas Radevic <vicedar@gmail.com>\n"
+"Language-Team: Greek <team@lists.gnome.gr>\n"
+"Language: el\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 "Αναζήτηση"
diff --git a/contrib/dialog/po/eo.po b/contrib/dialog/po/eo.po
new file mode 100644
index 0000000..99e482d
--- /dev/null
+++ b/contrib/dialog/po/eo.po
@@ -0,0 +1,110 @@
+# 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: 2011-01-16 17:57-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"
+"Language: eo\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: buttons.c:387
+msgid "Yes"
+msgstr "Jes"
+
+#: buttons.c:395
+msgid "No"
+msgstr "Ne"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "Certe"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "Rezigni"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "ELIRI"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr "Krome"
+
+#: buttons.c:435
+msgid "Help"
+msgstr "Helpo"
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr "Monato"
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr "Jaro"
+
+#: dialog.c:756
+msgid "Rename"
+msgstr "Renomigi"
+
+#: fselect.c:571
+msgid "Directories"
+msgstr "Dosierujoj"
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr "Serĉi"
diff --git a/contrib/dialog/po/es.po b/contrib/dialog/po/es.po
new file mode 100644
index 0000000..958b98f
--- /dev/null
+++ b/contrib/dialog/po/es.po
@@ -0,0 +1,112 @@
+# 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: 2011-01-16 17:57-0500\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"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: buttons.c:387
+msgid "Yes"
+msgstr "Sí"
+
+#: buttons.c:395
+msgid "No"
+msgstr "No"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "Aceptar"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "Salir"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr "Extra"
+
+#: buttons.c:435
+msgid "Help"
+msgstr "Ayuda"
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr "Mes"
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr "Año"
+
+#: dialog.c:756
+msgid "Rename"
+msgstr "Renombrar"
+
+#: fselect.c:571
+msgid "Directories"
+msgstr "Directorios"
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr "Buscar"
diff --git a/contrib/dialog/po/et.po b/contrib/dialog/po/et.po
new file mode 100644
index 0000000..d8757d9
--- /dev/null
+++ b/contrib/dialog/po/et.po
@@ -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"
diff --git a/contrib/dialog/po/eu.po b/contrib/dialog/po/eu.po
new file mode 100644
index 0000000..76bfd30
--- /dev/null
+++ b/contrib/dialog/po/eu.po
@@ -0,0 +1,112 @@
+# 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: 2011-01-16 17:57-0500\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"
+"Language: eu\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:387
+msgid "Yes"
+msgstr "Bai"
+
+#: buttons.c:395
+msgid "No"
+msgstr "Ez"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "Ados"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "Utzi"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "IRTEN"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr "Gehigarria"
+
+#: buttons.c:435
+msgid "Help"
+msgstr "Laguntza"
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr "Hilabetea"
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr "Urtea"
+
+#: dialog.c:756
+msgid "Rename"
+msgstr "Berizendatu"
+
+#: fselect.c:571
+msgid "Directories"
+msgstr "Direktorioak"
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr "Bilaketa"
diff --git a/contrib/dialog/po/fa.po b/contrib/dialog/po/fa.po
new file mode 100644
index 0000000..9be8d8b
--- /dev/null
+++ b/contrib/dialog/po/fa.po
@@ -0,0 +1,113 @@
+# Dialog
+# Copyright 2003-2007,2008 # Thomas Dickey
+# This file is distributed under the same license as the dialog package.
+#
+# Seyed Ali Akbar Najafian <s.ali.najafian@chmail.ir>, 2012.
+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: 2013-08-03 17:04+0330\n"
+"Last-Translator: سید‌علی‌اکبر نجÙیان <s.ali.najafian@chmail.ir>\n"
+"Language-Team: Persian <translation-team-fa@lists.sourceforge.net>\n"
+"Language: persian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.5.4\n"
+
+#: buttons.c:385
+#, fuzzy
+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 "N/A"
+
+#: mixedgauge.c:193
+msgid "Overall Progress"
+msgstr "پیشرÙت جاری"
+
+#: textbox.c:489
+msgid "Search"
+msgstr "جستجو"
diff --git a/contrib/dialog/po/fi.po b/contrib/dialog/po/fi.po
new file mode 100644
index 0000000..e39897c
--- /dev/null
+++ b/contrib/dialog/po/fi.po
@@ -0,0 +1,114 @@
+# Finnish translation for dialog.
+# Copyright © 2010 Free Software Foundation, Inc.
+# 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.
+# Jorma Karvonen <karvonen.jorma@gmail.com>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: dialog 1.1.20080819\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-01-16 17:57-0500\n"
+"PO-Revision-Date: 2010-09-06 21:24+0200\n"
+"Last-Translator: Jorma Karvonen <karvonen.jorma@gmail.com>\n"
+"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
+"Language: fi\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:387
+msgid "Yes"
+msgstr "Kyllä"
+
+#: buttons.c:395
+msgid "No"
+msgstr "Ei"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "Valmis"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "Peru"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "Poistu"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr "Painike"
+
+#: buttons.c:435
+msgid "Help"
+msgstr "Opaste"
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr "Kuukausi"
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr "Vuosi"
+
+#: dialog.c:756
+msgid "Rename"
+msgstr "Nimeä"
+
+#: fselect.c:571
+msgid "Directories"
+msgstr "Kansiot"
+
+#: fselect.c:572
+msgid "Files"
+msgstr "Tiedostot"
+
+#: mixedgauge.c:58
+msgid "Succeeded"
+msgstr "Onnistui"
+
+#: mixedgauge.c:61
+msgid "Failed"
+msgstr "Epäonnistui"
+
+#: mixedgauge.c:64
+msgid "Passed"
+msgstr "Hyväksytty"
+
+#: mixedgauge.c:67
+msgid "Completed"
+msgstr "Valmis"
+
+#: mixedgauge.c:70
+msgid "Checked"
+msgstr "Valittu"
+
+#: mixedgauge.c:73
+msgid "Done"
+msgstr "Valmis"
+
+#: mixedgauge.c:76
+msgid "Skipped"
+msgstr "Ohitettiin"
+
+#: mixedgauge.c:79
+msgid "In Progress"
+msgstr "Edistyminen"
+
+#: mixedgauge.c:85
+msgid "N/A"
+msgstr "N/A"
+
+#: mixedgauge.c:193
+msgid "Overall Progress"
+msgstr "Kokonaisedistyminen"
+
+#: textbox.c:468
+msgid "Search"
+msgstr "Etsi"
diff --git a/contrib/dialog/po/fr.po b/contrib/dialog/po/fr.po
new file mode 100644
index 0000000..1edb08b
--- /dev/null
+++ b/contrib/dialog/po/fr.po
@@ -0,0 +1,111 @@
+# 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: 2011-01-16 17:57-0500\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"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: buttons.c:387
+msgid "Yes"
+msgstr "Oui"
+
+#: buttons.c:395
+msgid "No"
+msgstr "Non"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "Accepter"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "Annuler"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "SORTIR"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr "Extra"
+
+#: buttons.c:435
+msgid "Help"
+msgstr "Aide"
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr "Mois"
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr "Année"
+
+#: dialog.c:756
+msgid "Rename"
+msgstr "Renommer"
+
+#: fselect.c:571
+msgid "Directories"
+msgstr "Répertoires"
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr "Rechercher"
diff --git a/contrib/dialog/po/ga.po b/contrib/dialog/po/ga.po
new file mode 100644
index 0000000..c2d7bfc
--- /dev/null
+++ b/contrib/dialog/po/ga.po
@@ -0,0 +1,109 @@
+# 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: 2011-01-16 17:57-0500\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"
+"Language: ga\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: buttons.c:387
+msgid "Yes"
+msgstr "Tá"
+
+#: buttons.c:395
+msgid "No"
+msgstr "Níl"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "OK"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "Cealaigh"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "SCOIR"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr "Breise"
+
+#: buttons.c:435
+msgid "Help"
+msgstr "Cabhair"
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr "Mí"
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr "Bliain"
+
+#: dialog.c:756
+msgid "Rename"
+msgstr "Athainmnigh"
+
+#: fselect.c:571
+msgid "Directories"
+msgstr "Comhadlanna"
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr "Cuardaigh"
diff --git a/contrib/dialog/po/gl.po b/contrib/dialog/po/gl.po
new file mode 100644
index 0000000..6068e86
--- /dev/null
+++ b/contrib/dialog/po/gl.po
@@ -0,0 +1,119 @@
+# Galician translation of dialog
+# This file is distributed under the same license as the dialog package.
+# Copyright 2003-2006, 2007 Thomas Dickey
+# Copyright 2012 Leandro Regueiro
+#
+# Diego Pérez Montes <kabute@gulo.org>, 2008
+# Leandro Regueiro <leandro.regueiro@gmail.com>, 2012.
+#
+# Proxecto Trasno - Adaptación do software libre á lingua galega: Se desexas
+# colaborar connosco, podes atopar máis información en <http://www.trasno.net>
+#
+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: 2012-11-10 13:53+0200\n"
+"Last-Translator: Leandro Regueiro <leandro.regueiro@gmail.com>\n"
+"Language-Team: Galician <proxecto@trasno.net>\n"
+"Language: gl\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"
+"X-Generator: Virtaal 0.7.0\n"
+
+#: buttons.c:385
+msgid "Yes"
+msgstr "Si"
+
+#: 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 "Extra"
+
+#: 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ñíbel"
+
+#: mixedgauge.c:193
+msgid "Overall Progress"
+msgstr "Progreso total"
+
+#: textbox.c:489
+msgid "Search"
+msgstr "Buscar"
diff --git a/contrib/dialog/po/hi.po b/contrib/dialog/po/hi.po
new file mode 100644
index 0000000..57459fe
--- /dev/null
+++ b/contrib/dialog/po/hi.po
@@ -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 "à€…à€šà¥Âà€žà€šà¥Âà€§à€Ÿà€š"
diff --git a/contrib/dialog/po/hr.po b/contrib/dialog/po/hr.po
new file mode 100644
index 0000000..c3661db
--- /dev/null
+++ b/contrib/dialog/po/hr.po
@@ -0,0 +1,112 @@
+# Dialog
+# Copyright 2003-2007,2008 # Thomas Dickey
+# This file is distributed under the same license as the dialog package.
+# Tomislav Krznar <tomislav.krznar@gmail.com>, 2012.
+#
+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: 2012-03-31 00:10+0200\n"
+"Last-Translator: Tomislav Krznar <tomislav.krznar@gmail.com>\n"
+"Language-Team: Croatian <lokalizacija@linux.hr>\n"
+"Language: hr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 "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 "IZLAZ"
+
+#: buttons.c:425
+msgid "Extra"
+msgstr "Dodatno"
+
+#: buttons.c:433
+msgid "Help"
+msgstr "Pomoć"
+
+#. Headline "Month"
+#: calendar.c:273
+msgid "Month"
+msgstr "Mjesec"
+
+#. Headline "Year"
+#: calendar.c:293
+msgid "Year"
+msgstr "Godina"
+
+#: dialog.c:741
+msgid "Rename"
+msgstr "Preimenuj"
+
+#: fselect.c:550
+msgid "Directories"
+msgstr "Direktoriji"
+
+#: fselect.c:551
+msgid "Files"
+msgstr "Datoteke"
+
+#: mixedgauge.c:58
+msgid "Succeeded"
+msgstr "Uspjeh"
+
+#: mixedgauge.c:61
+msgid "Failed"
+msgstr "Neuspjeh"
+
+#: mixedgauge.c:64
+msgid "Passed"
+msgstr "Prošlo"
+
+#: mixedgauge.c:67
+msgid "Completed"
+msgstr "Dovršeno"
+
+#: mixedgauge.c:70
+msgid "Checked"
+msgstr "Provjereno"
+
+#: mixedgauge.c:73
+msgid "Done"
+msgstr "Gotovo"
+
+#: mixedgauge.c:76
+msgid "Skipped"
+msgstr "PreskoÄeno"
+
+#: mixedgauge.c:79
+msgid "In Progress"
+msgstr "U tijeku"
+
+#: mixedgauge.c:85
+msgid "N/A"
+msgstr "Nedostupno"
+
+#: mixedgauge.c:193
+msgid "Overall Progress"
+msgstr "Ukupni napredak"
+
+#: textbox.c:489
+msgid "Search"
+msgstr "Pretraga"
diff --git a/contrib/dialog/po/hu.po b/contrib/dialog/po/hu.po
new file mode 100644
index 0000000..6975b92
--- /dev/null
+++ b/contrib/dialog/po/hu.po
@@ -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"
diff --git a/contrib/dialog/po/ia.po b/contrib/dialog/po/ia.po
new file mode 100644
index 0000000..dfee2ff
--- /dev/null
+++ b/contrib/dialog/po/ia.po
@@ -0,0 +1,111 @@
+# Interlingua translation of Dialog
+# Copyright (C) 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the dialog package.
+# Nik Kalach <nik.kalach@inbox.ru>, 2012.
+#
+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: 2012-12-04 00:56+0400\n"
+"Last-Translator: Nik Kalach <nik.kalach@inbox.ru>\n"
+"Language-Team: Interlingua <translation-team-ia@lists.sourceforge.net>\n"
+"Language: ia\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 "Si"
+
+#: buttons.c:393
+msgid "No"
+msgstr "No"
+
+#: buttons.c:401
+msgid "OK"
+msgstr "OK"
+
+#: buttons.c:409
+msgid "Cancel"
+msgstr "Annullar"
+
+#: buttons.c:417
+msgid "EXIT"
+msgstr "SORTIR"
+
+#: buttons.c:425
+msgid "Extra"
+msgstr "Extra"
+
+#: buttons.c:433
+msgid "Help"
+msgstr "Adjuta"
+
+#. Headline "Month"
+#: calendar.c:273
+msgid "Month"
+msgstr "Mense"
+
+#. Headline "Year"
+#: calendar.c:293
+msgid "Year"
+msgstr "Anno"
+
+#: dialog.c:741
+msgid "Rename"
+msgstr "Renominar"
+
+#: fselect.c:550
+msgid "Directories"
+msgstr "Directorios"
+
+#: fselect.c:551
+msgid "Files"
+msgstr "Files"
+
+#: mixedgauge.c:58
+msgid "Succeeded"
+msgstr "Succedite"
+
+#: mixedgauge.c:61
+msgid "Failed"
+msgstr "Fallite"
+
+#: mixedgauge.c:64
+msgid "Passed"
+msgstr "Passate"
+
+#: mixedgauge.c:67
+msgid "Completed"
+msgstr "Completate"
+
+#: mixedgauge.c:70
+msgid "Checked"
+msgstr "Controlate"
+
+#: mixedgauge.c:73
+msgid "Done"
+msgstr "Facite"
+
+#: mixedgauge.c:76
+msgid "Skipped"
+msgstr "Saltate"
+
+#: mixedgauge.c:79
+msgid "In Progress"
+msgstr "In curso"
+
+#: mixedgauge.c:85
+msgid "N/A"
+msgstr "N/A"
+
+#: mixedgauge.c:193
+msgid "Overall Progress"
+msgstr "Progresso general"
+
+#: textbox.c:489
+msgid "Search"
+msgstr "Cerca"
diff --git a/contrib/dialog/po/id.po b/contrib/dialog/po/id.po
new file mode 100644
index 0000000..8db8329
--- /dev/null
+++ b/contrib/dialog/po/id.po
@@ -0,0 +1,111 @@
+# 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: 2011-01-16 17:57-0500\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"
+"Language: id\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: buttons.c:387
+msgid "Yes"
+msgstr "Ya"
+
+#: buttons.c:395
+msgid "No"
+msgstr "Tidak"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "OK"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "Batal"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "KELUAR"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr "Ekstra"
+
+#: buttons.c:435
+msgid "Help"
+msgstr "Bantuan"
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr "Bulan"
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr "Tahun"
+
+#: dialog.c:756
+msgid "Rename"
+msgstr "Ganti Nama"
+
+#: fselect.c:571
+msgid "Directories"
+msgstr "Kamus"
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr "Telusur"
diff --git a/contrib/dialog/po/is.po b/contrib/dialog/po/is.po
new file mode 100644
index 0000000..aaeb850
--- /dev/null
+++ b/contrib/dialog/po/is.po
@@ -0,0 +1,112 @@
+# 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: 2011-01-16 17:57-0500\n"
+"PO-Revision-Date: 2009-09-03 17:02+0000\n"
+"Last-Translator: Sveinn í Felli <sveinki@nett.is>\n"
+"Language-Team: Icelandic <(nothing)>\n"
+"Language: is\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:387
+msgid "Yes"
+msgstr "Já"
+
+#: buttons.c:395
+msgid "No"
+msgstr "Nei"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "Ã lagi"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "Hætta við"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "LOKA"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr "Auka"
+
+#: buttons.c:435
+msgid "Help"
+msgstr "Hjálp"
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr "Mánuður"
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr "Ãr"
+
+#: dialog.c:756
+msgid "Rename"
+msgstr "Endurnefna"
+
+#: fselect.c:571
+msgid "Directories"
+msgstr "Möppur"
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr "Leita"
diff --git a/contrib/dialog/po/it.po b/contrib/dialog/po/it.po
new file mode 100644
index 0000000..c9ad194
--- /dev/null
+++ b/contrib/dialog/po/it.po
@@ -0,0 +1,112 @@
+# 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: 2011-01-16 17:57-0500\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"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: buttons.c:387
+msgid "Yes"
+msgstr "Sì"
+
+#: buttons.c:395
+msgid "No"
+msgstr "No"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "OK"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "Annulla"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "Esci"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr "Extra"
+
+#: buttons.c:435
+msgid "Help"
+msgstr "Aiuto"
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr "Mese"
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr "Anno"
+
+#: dialog.c:756
+msgid "Rename"
+msgstr "Rinomina"
+
+#: fselect.c:571
+msgid "Directories"
+msgstr "Cartelle"
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr "Ricerca"
diff --git a/contrib/dialog/po/ja.po b/contrib/dialog/po/ja.po
new file mode 100644
index 0000000..366ca28
--- /dev/null
+++ b/contrib/dialog/po/ja.po
@@ -0,0 +1,112 @@
+# 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: 2011-01-16 17:57-0500\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"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=EUC-JP\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: buttons.c:387
+msgid "Yes"
+msgstr "¤Ï¤¤"
+
+#: buttons.c:395
+msgid "No"
+msgstr "¤¤¤¤¤¨"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "λ²ò"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "¼è¾Ã"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "½ªÎ»"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr "³ÈÄ¥"
+
+#: buttons.c:435
+msgid "Help"
+msgstr "¥Ø¥ë¥×"
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr "·î"
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr "ǯ"
+
+#: dialog.c:756
+msgid "Rename"
+msgstr "̾Á°Êѹ¹"
+
+#: fselect.c:571
+msgid "Directories"
+msgstr "¥Ç¥£¥ì¥¯¥È¥ê"
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr "Ä´ºº"
diff --git a/contrib/dialog/po/ku.po b/contrib/dialog/po/ku.po
new file mode 100644
index 0000000..e8352e1
--- /dev/null
+++ b/contrib/dialog/po/ku.po
@@ -0,0 +1,113 @@
+# 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: 2011-01-16 17:57-0500\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"
+"Language: ku\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:387
+msgid "Yes"
+msgstr "Erê"
+
+#: buttons.c:395
+msgid "No"
+msgstr "Na"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "TEMAM"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "Betal"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "DERKETIN"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr "Ekstra"
+
+#: buttons.c:435
+msgid "Help"
+msgstr "Alîkarî"
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr "Meh"
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr "Sal"
+
+#: dialog.c:756
+msgid "Rename"
+msgstr "Nav guherandin"
+
+#: fselect.c:571
+msgid "Directories"
+msgstr "Peldank"
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr "Lêgerîn"
diff --git a/contrib/dialog/po/lt.po b/contrib/dialog/po/lt.po
new file mode 100644
index 0000000..c98299a
--- /dev/null
+++ b/contrib/dialog/po/lt.po
@@ -0,0 +1,112 @@
+# translation of dialog to Lithuanian
+# This file is distributed under the same license as the dialog package.
+# Gintautas Miliauskas <gintas@akl.lt>, 2008.
+# Rimas Kudelis <rq@akl.lt>, 2013.
+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: 2013-06-28 18:38+0300\n"
+"Last-Translator: Rimas Kudelis <rq@akl.lt>\n"
+"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
+"Language: lt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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"
+"X-Generator: Virtaal 0.7.1\n"
+
+#: buttons.c:385
+msgid "Yes"
+msgstr "Taip"
+
+#: buttons.c:393
+msgid "No"
+msgstr "Ne"
+
+#: buttons.c:401
+msgid "OK"
+msgstr "Gerai"
+
+#: buttons.c:409
+msgid "Cancel"
+msgstr "Atsisakyti"
+
+#: buttons.c:417
+msgid "EXIT"
+msgstr "IÅ EITI"
+
+#: buttons.c:425
+msgid "Extra"
+msgstr "Kita"
+
+#: 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 "Pavyko"
+
+#: mixedgauge.c:61
+msgid "Failed"
+msgstr "Nepavyko"
+
+#: mixedgauge.c:64
+msgid "Passed"
+msgstr "PraÄ—jo"
+
+#: mixedgauge.c:67
+msgid "Completed"
+msgstr "Užbaigta"
+
+#: mixedgauge.c:70
+msgid "Checked"
+msgstr "Patikrinta"
+
+#: mixedgauge.c:73
+msgid "Done"
+msgstr "Atlikta"
+
+#: mixedgauge.c:76
+msgid "Skipped"
+msgstr "Praleista"
+
+#: mixedgauge.c:79
+msgid "In Progress"
+msgstr "Vykdoma"
+
+#: mixedgauge.c:85
+msgid "N/A"
+msgstr "Nepasiekiama"
+
+#: mixedgauge.c:193
+msgid "Overall Progress"
+msgstr "Bendras progresas"
+
+#: textbox.c:489
+msgid "Search"
+msgstr "Ieškoti"
diff --git a/contrib/dialog/po/lv.po b/contrib/dialog/po/lv.po
new file mode 100644
index 0000000..289eefe
--- /dev/null
+++ b/contrib/dialog/po/lv.po
@@ -0,0 +1,114 @@
+# 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: 2011-01-16 17:57-0500\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"
+"Language: lv\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:387
+msgid "Yes"
+msgstr "JÄ"
+
+#: buttons.c:395
+msgid "No"
+msgstr "NÄ“"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "Labi"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "Atcelt"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "IZIET"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr "Papildus"
+
+#: buttons.c:435
+msgid "Help"
+msgstr "Palīdzība"
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr "MÄ“nesis"
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr "Gads"
+
+#: dialog.c:756
+msgid "Rename"
+msgstr "PÄrdÄ“vÄ“t"
+
+#: fselect.c:571
+msgid "Directories"
+msgstr "Direktorijas"
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr "Meklēt"
diff --git a/contrib/dialog/po/makefile.inn b/contrib/dialog/po/makefile.inn
new file mode 100644
index 0000000..c246198
--- /dev/null
+++ b/contrib/dialog/po/makefile.inn
@@ -0,0 +1,249 @@
+# 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@
+NLS_TEXTDOMAIN = @NLS_TEXTDOMAIN@
+
+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@
+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=$(NLS_TEXTDOMAIN) --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
+ @mkdir -p $(DESTDIR)$(datadir); \
+ 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; \
+ mkdir -p $$dir; \
+ if test -r $$cat; then \
+ $(INSTALL_DATA) $$cat $$dir/$(NLS_TEXTDOMAIN)$(INSTOBJEXT); \
+ echo "installing $$cat as $$dir/$(NLS_TEXTDOMAIN)$(INSTOBJEXT)"; \
+ else \
+ $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(NLS_TEXTDOMAIN)$(INSTOBJEXT); \
+ echo "installing $(srcdir)/$$cat as" \
+ "$$dir/$(NLS_TEXTDOMAIN)$(INSTOBJEXT)"; \
+ fi; \
+ if test -r $$cat.m; then \
+ $(INSTALL_DATA) $$cat.m $$dir/$(NLS_TEXTDOMAIN)$(INSTOBJEXT).m; \
+ echo "installing $$cat.m as $$dir/$(NLS_TEXTDOMAIN)$(INSTOBJEXT).m"; \
+ else \
+ if test -r $(srcdir)/$$cat.m ; then \
+ $(INSTALL_DATA) $(srcdir)/$$cat.m \
+ $$dir/$(NLS_TEXTDOMAIN)$(INSTOBJEXT).m; \
+ echo "installing $(srcdir)/$$cat as" \
+ "$$dir/$(NLS_TEXTDOMAIN)$(INSTOBJEXT).m"; \
+ else \
+ true; \
+ fi; \
+ fi; \
+ done
+ if test "$(NLS_TEXTDOMAIN)" = "gettext"; then \
+ mkdir -p $(DESTDIR)$(gettextsrcdir); \
+ $(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/$(NLS_TEXTDOMAIN)$(INSTOBJEXT); \
+ rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(NLS_TEXTDOMAIN)$(INSTOBJEXT).m; \
+ rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(NLS_TEXTDOMAIN)$(INSTOBJEXT); \
+ rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(NLS_TEXTDOMAIN)$(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:
diff --git a/contrib/dialog/po/mg.po b/contrib/dialog/po/mg.po
new file mode 100644
index 0000000..558754a
--- /dev/null
+++ b/contrib/dialog/po/mg.po
@@ -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 ""
diff --git a/contrib/dialog/po/mk.po b/contrib/dialog/po/mk.po
new file mode 100644
index 0000000..898e76e
--- /dev/null
+++ b/contrib/dialog/po/mk.po
@@ -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 ""
diff --git a/contrib/dialog/po/ms.po b/contrib/dialog/po/ms.po
new file mode 100644
index 0000000..6f3ee01
--- /dev/null
+++ b/contrib/dialog/po/ms.po
@@ -0,0 +1,110 @@
+# 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: 2011-01-16 17:57-0500\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"
+"Language: ms\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: buttons.c:387
+msgid "Yes"
+msgstr "Ya"
+
+#: buttons.c:395
+msgid "No"
+msgstr "Tidak"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "OK"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "Batal"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "KELUAR"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr "Ekstra"
+
+#: buttons.c:435
+msgid "Help"
+msgstr "Bantuan"
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr "Bulan"
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr "Tahun"
+
+#: dialog.c:756
+msgid "Rename"
+msgstr "Tukar nama"
+
+#: fselect.c:571
+msgid "Directories"
+msgstr "Direktori"
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr "Cari"
diff --git a/contrib/dialog/po/nb.po b/contrib/dialog/po/nb.po
new file mode 100644
index 0000000..2781d99
--- /dev/null
+++ b/contrib/dialog/po/nb.po
@@ -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"
diff --git a/contrib/dialog/po/nl.po b/contrib/dialog/po/nl.po
new file mode 100644
index 0000000..b686d5c
--- /dev/null
+++ b/contrib/dialog/po/nl.po
@@ -0,0 +1,113 @@
+# 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: 2011-01-16 17:57-0500\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"
+"Language: nl\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:387
+msgid "Yes"
+msgstr "Ja"
+
+#: buttons.c:395
+msgid "No"
+msgstr "Nee"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "OK"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "Afsluiten"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr "Extra"
+
+#: buttons.c:435
+msgid "Help"
+msgstr "Help"
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr "Maand"
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr "Jaar"
+
+#: dialog.c:756
+msgid "Rename"
+msgstr "Hernoemen"
+
+#: fselect.c:571
+msgid "Directories"
+msgstr "Mappen"
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr "Zoeken"
diff --git a/contrib/dialog/po/pl.po b/contrib/dialog/po/pl.po
new file mode 100644
index 0000000..c4fdfc5
--- /dev/null
+++ b/contrib/dialog/po/pl.po
@@ -0,0 +1,113 @@
+# 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: 2011-01-16 17:57-0500\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"
+"Language: pl\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:387
+msgid "Yes"
+msgstr "Tak"
+
+#: buttons.c:395
+msgid "No"
+msgstr "Nie"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "OK"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "Anuluj"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "WYJDŹ"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr "Ekstra"
+
+#: buttons.c:435
+msgid "Help"
+msgstr "Pomoc"
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr "MiesiÄ…c"
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr "Rok"
+
+#: dialog.c:756
+msgid "Rename"
+msgstr "Zmień nazwę"
+
+#: fselect.c:571
+msgid "Directories"
+msgstr "Katalogi"
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr "Szukaj"
diff --git a/contrib/dialog/po/pt.po b/contrib/dialog/po/pt.po
new file mode 100644
index 0000000..4a06e01
--- /dev/null
+++ b/contrib/dialog/po/pt.po
@@ -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"
diff --git a/contrib/dialog/po/pt_BR.po b/contrib/dialog/po/pt_BR.po
new file mode 100644
index 0000000..bff648d
--- /dev/null
+++ b/contrib/dialog/po/pt_BR.po
@@ -0,0 +1,113 @@
+# 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: 2011-01-16 17:57-0500\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"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: buttons.c:387
+msgid "Yes"
+msgstr "Sim"
+
+#: buttons.c:395
+msgid "No"
+msgstr "Não"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "Aceitar"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "Sair"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr "Extra"
+
+#: buttons.c:435
+msgid "Help"
+msgstr "Ajuda"
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr "Mês"
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr "Ano"
+
+#: dialog.c:756
+msgid "Rename"
+msgstr "Renomear"
+
+#: fselect.c:571
+msgid "Directories"
+msgstr "Diretórios"
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr "Pesquisa"
diff --git a/contrib/dialog/po/rm.po b/contrib/dialog/po/rm.po
new file mode 100644
index 0000000..d4d8197
--- /dev/null
+++ b/contrib/dialog/po/rm.po
@@ -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"
diff --git a/contrib/dialog/po/ro.po b/contrib/dialog/po/ro.po
new file mode 100644
index 0000000..f680d05
--- /dev/null
+++ b/contrib/dialog/po/ro.po
@@ -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"
diff --git a/contrib/dialog/po/ru.po b/contrib/dialog/po/ru.po
new file mode 100644
index 0000000..d78c680
--- /dev/null
+++ b/contrib/dialog/po/ru.po
@@ -0,0 +1,115 @@
+# 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: 2011-01-16 17:57-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"
+"Language: 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:387
+msgid "Yes"
+msgstr "Да"
+
+#: buttons.c:395
+msgid "No"
+msgstr "Ðет"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "OK"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "Отмена"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "Выход"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr "Дополнительно"
+
+#: buttons.c:435
+msgid "Help"
+msgstr "Справка"
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr "МеÑÑц"
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr "Год"
+
+#: dialog.c:756
+msgid "Rename"
+msgstr "Переименовать"
+
+#: fselect.c:571
+msgid "Directories"
+msgstr "Каталоги"
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr "ПоиÑк"
diff --git a/contrib/dialog/po/rw.po b/contrib/dialog/po/rw.po
new file mode 100644
index 0000000..0aad78f
--- /dev/null
+++ b/contrib/dialog/po/rw.po
@@ -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"
diff --git a/contrib/dialog/po/sk.po b/contrib/dialog/po/sk.po
new file mode 100644
index 0000000..e87991c
--- /dev/null
+++ b/contrib/dialog/po/sk.po
@@ -0,0 +1,111 @@
+# Dialog
+# Copyright 2003-2007,2008 # Thomas Dickey
+# This file is distributed under the same license as the dialog package.
+# Marián Čavojský <preklad@cavo.sk>, 2011
+#
+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: 2011-03-09 09:50+0100\n"
+"Last-Translator: Marián Čavojský <preklad@cavo.sk>\n"
+"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
+"Language: sk\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 "Ãno"
+
+#: buttons.c:393
+msgid "No"
+msgstr "Nie"
+
+#: buttons.c:401
+msgid "OK"
+msgstr "OK"
+
+#: buttons.c:409
+msgid "Cancel"
+msgstr "Zrušiť"
+
+#: buttons.c:417
+msgid "EXIT"
+msgstr "VÃCHOD"
+
+#: buttons.c:425
+msgid "Extra"
+msgstr "Extra"
+
+#: buttons.c:433
+msgid "Help"
+msgstr "Pomoc"
+
+#. Headline "Month"
+#: calendar.c:273
+msgid "Month"
+msgstr "Mesiac"
+
+#. Headline "Year"
+#: calendar.c:293
+msgid "Year"
+msgstr "Rok"
+
+#: dialog.c:741
+msgid "Rename"
+msgstr "Premenovať"
+
+#: fselect.c:550
+msgid "Directories"
+msgstr "Adresáre"
+
+#: fselect.c:551
+msgid "Files"
+msgstr "Súbory"
+
+#: mixedgauge.c:58
+msgid "Succeeded"
+msgstr "Vporiadku"
+
+#: mixedgauge.c:61
+msgid "Failed"
+msgstr "S chybou"
+
+#: mixedgauge.c:64
+msgid "Passed"
+msgstr "Prešlo"
+
+#: mixedgauge.c:67
+msgid "Completed"
+msgstr "Skompletované"
+
+#: mixedgauge.c:70
+msgid "Checked"
+msgstr "Skontrolované"
+
+#: mixedgauge.c:73
+msgid "Done"
+msgstr "DokonÄené"
+
+#: mixedgauge.c:76
+msgid "Skipped"
+msgstr "PreskoÄené"
+
+#: mixedgauge.c:79
+msgid "In Progress"
+msgstr "Spracováva"
+
+#: mixedgauge.c:85
+msgid "N/A"
+msgstr "N/A"
+
+#: mixedgauge.c:193
+msgid "Overall Progress"
+msgstr "Celkový pokrok"
+
+#: textbox.c:489
+msgid "Search"
+msgstr "Vyhľadať"
diff --git a/contrib/dialog/po/sl.po b/contrib/dialog/po/sl.po
new file mode 100644
index 0000000..c20e42f
--- /dev/null
+++ b/contrib/dialog/po/sl.po
@@ -0,0 +1,112 @@
+# Slovenian translation for dialog.
+# Copyright (C) 2003-2007, 2008 Thomas Dickey
+# This file is distributed under the same license as the dialog package.
+# Klemen Košir <klemen.kosir@gmx.com>, 2011.
+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: 2011-02-12 20:17+0100\n"
+"Last-Translator: Klemen Košir <klemen.kosir@gmx.com>\n"
+"Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
+"Language: sl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Slovenian\n"
+"X-Poedit-Country: SLOVENIA\n"
+
+#: buttons.c:385
+msgid "Yes"
+msgstr "Da"
+
+#: buttons.c:393
+msgid "No"
+msgstr "Ne"
+
+#: buttons.c:401
+msgid "OK"
+msgstr "V redu"
+
+#: buttons.c:409
+msgid "Cancel"
+msgstr "PrekliÄi"
+
+#: buttons.c:417
+msgid "EXIT"
+msgstr "IZHOD"
+
+#: buttons.c:425
+msgid "Extra"
+msgstr "Dodatno"
+
+#: buttons.c:433
+msgid "Help"
+msgstr "PomoÄ"
+
+#. Headline "Month"
+#: calendar.c:273
+msgid "Month"
+msgstr "Mesec"
+
+#. Headline "Year"
+#: calendar.c:293
+msgid "Year"
+msgstr "Leto"
+
+#: dialog.c:741
+msgid "Rename"
+msgstr "Preimenuj"
+
+#: fselect.c:550
+msgid "Directories"
+msgstr "Imeniki"
+
+#: fselect.c:551
+msgid "Files"
+msgstr "Datoteke"
+
+#: mixedgauge.c:58
+msgid "Succeeded"
+msgstr "Uspelo"
+
+#: mixedgauge.c:61
+msgid "Failed"
+msgstr "Spodletelo"
+
+#: mixedgauge.c:64
+msgid "Passed"
+msgstr "Prestalo"
+
+#: mixedgauge.c:67
+msgid "Completed"
+msgstr "KonÄano"
+
+#: mixedgauge.c:70
+msgid "Checked"
+msgstr "Preverjeno"
+
+#: mixedgauge.c:73
+msgid "Done"
+msgstr "Opravljeno"
+
+#: mixedgauge.c:76
+msgid "Skipped"
+msgstr "PreskoÄeno"
+
+#: mixedgauge.c:79
+msgid "In Progress"
+msgstr "V teku"
+
+#: mixedgauge.c:85
+msgid "N/A"
+msgstr "N/A"
+
+#: mixedgauge.c:193
+msgid "Overall Progress"
+msgstr "Skupni napredek"
+
+#: textbox.c:489
+msgid "Search"
+msgstr "Iskanje"
diff --git a/contrib/dialog/po/sq.po b/contrib/dialog/po/sq.po
new file mode 100644
index 0000000..592d4a1
--- /dev/null
+++ b/contrib/dialog/po/sq.po
@@ -0,0 +1,111 @@
+# 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: 2011-01-16 17:57-0500\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"
+"Language: sq\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: buttons.c:387
+msgid "Yes"
+msgstr "Po"
+
+#: buttons.c:395
+msgid "No"
+msgstr "Jo"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "mirë"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "Anullo"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "Dal"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr ""
+
+#: buttons.c:435
+msgid "Help"
+msgstr ""
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr ""
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr ""
+
+#: dialog.c:756
+msgid "Rename"
+msgstr ""
+
+#: fselect.c:571
+msgid "Directories"
+msgstr ""
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr ""
diff --git a/contrib/dialog/po/sr.po b/contrib/dialog/po/sr.po
new file mode 100644
index 0000000..46b049d
--- /dev/null
+++ b/contrib/dialog/po/sr.po
@@ -0,0 +1,112 @@
+# 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.
+# МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>, 2011.
+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: 2011-12-24 21:29+0200\n"
+"Last-Translator: МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>\n"
+"Language-Team: Serbian <gnu@prevod.org>\n"
+"Language: sr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 "У реду"
+
+#: 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 "Претрага"
diff --git a/contrib/dialog/po/sv.po b/contrib/dialog/po/sv.po
new file mode 100644
index 0000000..5c392b8
--- /dev/null
+++ b/contrib/dialog/po/sv.po
@@ -0,0 +1,110 @@
+# 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: 2011-01-16 17:57-0500\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"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: buttons.c:387
+msgid "Yes"
+msgstr "Ja"
+
+#: buttons.c:395
+msgid "No"
+msgstr "Nej"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "OK"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "AVSLUTA"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr "Extra"
+
+#: buttons.c:435
+msgid "Help"
+msgstr "Hjälp"
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr "MÃ¥nad"
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr "Ã…r"
+
+#: dialog.c:756
+msgid "Rename"
+msgstr "Byt namn"
+
+#: fselect.c:571
+msgid "Directories"
+msgstr "Kataloger"
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr "Sök"
diff --git a/contrib/dialog/po/sw.po b/contrib/dialog/po/sw.po
new file mode 100644
index 0000000..a8419fe
--- /dev/null
+++ b/contrib/dialog/po/sw.po
@@ -0,0 +1,111 @@
+# 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: 2011-01-16 17:57-0500\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"
+"Language: sw\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: buttons.c:387
+msgid "Yes"
+msgstr "Ndio"
+
+#: buttons.c:395
+msgid "No"
+msgstr "Hapana"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "Sawa"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "Ghahiri"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "Funga"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr "Nyongeza"
+
+#: buttons.c:435
+msgid "Help"
+msgstr "Msaada"
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr "Mwezi"
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr "Mwaka"
+
+#: dialog.c:756
+msgid "Rename"
+msgstr "Badili jina"
+
+#: fselect.c:571
+msgid "Directories"
+msgstr "Masaraka"
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr "Tafuta"
diff --git a/contrib/dialog/po/th.po b/contrib/dialog/po/th.po
new file mode 100644
index 0000000..bdc54dc
--- /dev/null
+++ b/contrib/dialog/po/th.po
@@ -0,0 +1,112 @@
+# 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: 2011-01-16 17:57-0500\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"
+"Language: th\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:387
+msgid "Yes"
+msgstr "ใช่"
+
+#: buttons.c:395
+msgid "No"
+msgstr "ไม่"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "ตà¸à¸¥à¸‡"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "ยà¸à¹€à¸¥à¸´à¸"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "ออà¸"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr "เพิ่มเติม"
+
+#: buttons.c:435
+msgid "Help"
+msgstr "ช่วยเหลือ"
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr "เดือน"
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr "ปี"
+
+#: dialog.c:756
+msgid "Rename"
+msgstr "เปลี่ยนชื่อ"
+
+#: fselect.c:571
+msgid "Directories"
+msgstr "ไดเร็à¸à¸—อรี่"
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr "ค้นหา"
diff --git a/contrib/dialog/po/tr.po b/contrib/dialog/po/tr.po
new file mode 100644
index 0000000..e6c052f
--- /dev/null
+++ b/contrib/dialog/po/tr.po
@@ -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"
diff --git a/contrib/dialog/po/uk.po b/contrib/dialog/po/uk.po
new file mode 100644
index 0000000..47269fe
--- /dev/null
+++ b/contrib/dialog/po/uk.po
@@ -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"
diff --git a/contrib/dialog/po/vi.po b/contrib/dialog/po/vi.po
new file mode 100644
index 0000000..5af6600
--- /dev/null
+++ b/contrib/dialog/po/vi.po
@@ -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"
diff --git a/contrib/dialog/po/wa.po b/contrib/dialog/po/wa.po
new file mode 100644
index 0000000..ac2a6f5
--- /dev/null
+++ b/contrib/dialog/po/wa.po
@@ -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"
diff --git a/contrib/dialog/po/zh_CN.po b/contrib/dialog/po/zh_CN.po
new file mode 100644
index 0000000..4b59780
--- /dev/null
+++ b/contrib/dialog/po/zh_CN.po
@@ -0,0 +1,112 @@
+# 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: 2011-01-16 17:57-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"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: buttons.c:387
+msgid "Yes"
+msgstr "是"
+
+#: buttons.c:395
+msgid "No"
+msgstr "å¦"
+
+#: buttons.c:403
+msgid "OK"
+msgstr "确认"
+
+#: buttons.c:411
+msgid "Cancel"
+msgstr "å–消"
+
+#: buttons.c:419
+msgid "EXIT"
+msgstr "退出"
+
+#: buttons.c:427
+msgid "Extra"
+msgstr "附加"
+
+#: buttons.c:435
+msgid "Help"
+msgstr "帮助"
+
+#. Headline "Month"
+#: calendar.c:298
+msgid "Month"
+msgstr "月"
+
+#. Headline "Year"
+#: calendar.c:318
+msgid "Year"
+msgstr "å¹´"
+
+#: dialog.c:756
+msgid "Rename"
+msgstr "é‡å‘½å"
+
+#: fselect.c:571
+msgid "Directories"
+msgstr "目录"
+
+#: fselect.c:572
+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:468
+msgid "Search"
+msgstr "æœç´¢"
diff --git a/contrib/dialog/po/zh_TW.po b/contrib/dialog/po/zh_TW.po
new file mode 100644
index 0000000..f96b50a
--- /dev/null
+++ b/contrib/dialog/po/zh_TW.po
@@ -0,0 +1,112 @@
+# 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 <bluebat@member.fsf.org>, 2005, 2007, 2013.
+#
+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: 2013-02-12 23:39+0800\n"
+"Last-Translator: Wei-Lun Chao <bluebat@member.fsf.org>\n"
+"Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
+"Language: zh_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 "æœå°‹"
diff --git a/contrib/dialog/prgbox.c b/contrib/dialog/prgbox.c
new file mode 100644
index 0000000..cbb1458
--- /dev/null
+++ b/contrib/dialog/prgbox.c
@@ -0,0 +1,117 @@
+/*
+ * $Id: prgbox.c,v 1.9 2012/12/02 23:40:30 tom Exp $
+ *
+ * prgbox.c -- implements the prg box
+ *
+ * Copyright 2011,2012 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>
+
+static void
+reapchild(int sig)
+{
+ (void) sig;
+}
+
+/*
+ * Open a pipe which ties stderr and stdout together.
+ */
+static FILE *
+dlg_popen(const char *command, const char *type)
+{
+ FILE *result = 0;
+ int fd[2];
+ char *blob;
+ char **argv;
+
+ if ((*type == 'r' || *type != 'w') && pipe(fd) == 0) {
+ switch (fork()) {
+ case -1: /* Error. */
+ (void) close(fd[0]);
+ (void) close(fd[1]);
+ break;
+ case 0: /* child. */
+ if (*type == 'r') {
+ if (fd[1] != STDOUT_FILENO) {
+ (void) dup2(fd[1], STDOUT_FILENO);
+ (void) close(fd[1]);
+ }
+ (void) dup2(STDOUT_FILENO, STDERR_FILENO);
+ (void) close(fd[0]);
+ } else {
+ if (fd[0] != STDIN_FILENO) {
+ (void) dup2(fd[0], STDIN_FILENO);
+ (void) close(fd[0]);
+ }
+ (void) close(fd[1]);
+ (void) close(STDERR_FILENO);
+ }
+ /*
+ * Bourne shell needs "-c" option to force it to use only the
+ * given command. Also, it needs the command to be parsed into
+ * tokens.
+ */
+ if ((blob = malloc(4 + strlen(command))) != 0) {
+ sprintf(blob, "-c %s", command);
+ argv = dlg_string_to_argv(blob);
+ execvp("sh", argv);
+ }
+ _exit(127);
+ /* NOTREACHED */
+ default: /* parent */
+ if (*type == 'r') {
+ result = fdopen(fd[0], type);
+ (void) close(fd[1]);
+ } else {
+ result = fdopen(fd[1], type);
+ (void) close(fd[0]);
+ }
+ break;
+ }
+ }
+
+ return result;
+}
+
+/*
+ * Display text from a pipe in a scrolling window.
+ */
+int
+dialog_prgbox(const char *title,
+ const char *cprompt,
+ const char *command,
+ int height,
+ int width,
+ int pauseopt)
+{
+ int code;
+ FILE *fp;
+ void (*oldreaper) (int) = signal(SIGCHLD, reapchild);
+
+ fp = dlg_popen(command, "r");
+ if (fp == NULL)
+ dlg_exiterr("pipe open failed: %s", command);
+
+ code = dlg_progressbox(title, cprompt, height, width, pauseopt, fp);
+
+ pclose(fp);
+ signal(SIGCHLD, oldreaper);
+
+ return code;
+}
diff --git a/contrib/dialog/progressbox.c b/contrib/dialog/progressbox.c
new file mode 100644
index 0000000..d9d0620
--- /dev/null
+++ b/contrib/dialog/progressbox.c
@@ -0,0 +1,306 @@
+/*
+ * $Id: progressbox.c,v 1.23 2012/12/21 10:00:05 tom Exp $
+ *
+ * progressbox.c -- implements the progress box
+ *
+ * Copyright 2005 Valery Reznic
+ * Copyright 2006-2012 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 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;
+
+ for (;;) {
+ if ((ch = getc(fp)) == EOF) {
+ obj->is_eof = 1;
+ if (col) {
+ break;
+ } else {
+ return NULL;
+ }
+ }
+ if (ch == '\n')
+ break;
+ if (ch == '\r')
+ break;
+ if (col >= MAX_LEN)
+ continue;
+ 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 {
+ break;
+ }
+ }
+ } else {
+ obj->line[col] = (char) ch;
+ ++col;
+ }
+ }
+
+ 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);
+ (void) y;
+ /* Clear 'residue' of previous line */
+ for (i = 0; i < width - x; i++)
+ (void) waddch(win, ' ');
+}
+
+static int
+pause_for_ok(WINDOW *dialog, int height, int width)
+{
+ /* *INDENT-OFF* */
+ static DLG_KEYS_BINDING binding[] = {
+ HELPKEY_BINDINGS,
+ ENTERKEY_BINDINGS,
+ TRAVERSE_BINDINGS,
+ END_KEYS_BINDING
+ };
+ /* *INDENT-ON* */
+
+ int button;
+ int key = 0, fkey;
+ int result = DLG_EXIT_UNKNOWN;
+ const char **buttons = dlg_ok_label();
+ int check;
+ int save_nocancel = dialog_vars.nocancel;
+ bool redraw = TRUE;
+
+ dialog_vars.nocancel = TRUE;
+ button = dlg_default_button();
+
+ dlg_register_window(dialog, "progressbox", binding);
+ dlg_register_buttons(dialog, "progressbox", buttons);
+
+ dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr);
+ mouse_mkbutton(height - 2, width / 2 - 4, 6, '\n');
+
+ while (result == DLG_EXIT_UNKNOWN) {
+ if (redraw) {
+ redraw = FALSE;
+ if (button < 0)
+ button = 0;
+ dlg_draw_buttons(dialog,
+ height - 2, 0,
+ buttons, button,
+ FALSE, width);
+ }
+
+ 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 = dlg_ok_buttoncode(check);
+ break;
+ }
+
+ if (fkey) {
+ switch (key) {
+ case DLGK_FIELD_NEXT:
+ button = dlg_next_button(buttons, button);
+ redraw = TRUE;
+ break;
+ case DLGK_FIELD_PREV:
+ button = dlg_prev_button(buttons, button);
+ redraw = TRUE;
+ break;
+ case DLGK_ENTER:
+ result = dlg_ok_buttoncode(button);
+ break;
+ default:
+ if (is_DLGK_MOUSE(key)) {
+ result = dlg_ok_buttoncode(key - M_EVENT);
+ if (result < 0)
+ result = DLG_EXIT_OK;
+ } else {
+ beep();
+ }
+ break;
+ }
+
+ } else {
+ beep();
+ }
+ }
+ dlg_unregister_window(dialog);
+
+ dialog_vars.nocancel = save_nocancel;
+ return result;
+}
+
+int
+dlg_progressbox(const char *title,
+ const char *cprompt,
+ int height,
+ int width,
+ int pauseopt,
+ FILE *fp)
+{
+ int i;
+ int x, y, thigh;
+ WINDOW *dialog, *text;
+ MY_OBJ *obj;
+ char *prompt = dlg_strclone(cprompt);
+ int result;
+
+ 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_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr);
+ dlg_draw_title(dialog, title);
+ dlg_draw_helpline(dialog, FALSE);
+
+ if (*prompt != '\0') {
+ int y2, x2;
+
+ (void) wattrset(dialog, dialog_attr);
+ dlg_print_autowrap(dialog, prompt, height, width);
+ getyx(dialog, y2, x2);
+ (void) 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, "dlg_progressbox");
+
+ obj->obj.input = fp;
+ 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) wrefresh(text);
+ dlg_trace_win(dialog);
+ if (obj->is_eof)
+ break;
+ }
+
+ if (pauseopt) {
+ scrollok(text, TRUE);
+ wscrl(text, 1 + MARGIN);
+ (void) wrefresh(text);
+ result = pause_for_ok(dialog, height, width);
+ } else {
+ wrefresh(dialog);
+ result = DLG_EXIT_OK;
+ }
+
+ dlg_del_window(dialog);
+ free(prompt);
+ free(obj);
+
+ return result;
+}
+
+/*
+ * Display text from a stdin in a scrolling window.
+ */
+int
+dialog_progressbox(const char *title, const char *cprompt, int height, int width)
+{
+ int result;
+ result = dlg_progressbox(title,
+ cprompt,
+ height,
+ width,
+ FALSE,
+ dialog_state.pipe_input);
+ dialog_state.pipe_input = 0;
+ return result;
+}
diff --git a/contrib/dialog/rangebox.c b/contrib/dialog/rangebox.c
new file mode 100644
index 0000000..c218966
--- /dev/null
+++ b/contrib/dialog/rangebox.c
@@ -0,0 +1,419 @@
+/*
+ * $Id: rangebox.c,v 1.17 2013/03/17 16:02:00 tom Exp $
+ *
+ * rangebox.c -- implements the rangebox dialog
+ *
+ * Copyright 2012,2013 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 ONE_HIGH 1
+
+#define MIN_HIGH (ONE_HIGH + 1 + (4 * MARGIN))
+#define MIN_WIDE (10 + 2 + (2 * MARGIN))
+
+struct _box;
+
+typedef struct _box {
+ WINDOW *parent;
+ WINDOW *window;
+ int x;
+ int y;
+ int width;
+ int height;
+ int period;
+ int value;
+} BOX;
+
+typedef struct {
+ /* window in which the value and slider are drawn */
+ WINDOW *window;
+ int min_value;
+ int max_value;
+ /* position and width of the numeric field */
+ int value_x;
+ int value_len;
+ int value_col;
+ /* position and width of the slider field */
+ int slide_x;
+ int slide_y;
+ int slide_len;
+ /* current value drawn */
+ int current;
+ /* value to add to make slider move by one cell */
+ int slide_inc;
+} VALUE;
+
+static int
+digits_of(int value)
+{
+ char temp[80];
+ sprintf(temp, "%d", value);
+ return (int) strlen(temp);
+}
+
+static int
+digit_of(VALUE * data)
+{
+ int col = data->value_col;
+ int result = 1;
+
+ while (++col < data->value_len) {
+ result *= 10;
+ }
+ return result;
+}
+
+static bool
+set_digit(VALUE * data, int chr)
+{
+ bool result = FALSE;
+ char buffer[80];
+ long check;
+ char *next = 0;
+
+ sprintf(buffer, "%*d", data->value_len, data->current);
+ buffer[data->value_col] = (char) chr;
+ check = strtol(buffer, &next, 10);
+ if (next == 0 || *next == '\0') {
+ if ((check <= (long) data->max_value) &&
+ (check >= (long) data->min_value)) {
+ result = TRUE;
+ data->current = (int) check;
+ }
+ }
+
+ return result;
+}
+
+/*
+ * This is similar to the gauge code, but differs in the way the number
+ * is displayed, etc.
+ */
+static void
+draw_value(VALUE * data, int value)
+{
+ if (value != data->current) {
+ WINDOW *win = data->window;
+ int y, x;
+ int n;
+ int ranges = (data->max_value + 1 - data->min_value);
+ int offset = (value - data->min_value);
+ int scaled;
+
+ getyx(win, y, x);
+
+ if (ranges > data->slide_len) {
+ scaled = (offset + data->slide_inc) / data->slide_inc;
+ } else if (ranges < data->slide_len) {
+ scaled = (offset + 1) * data->slide_inc;
+ } else {
+ scaled = offset;
+ }
+
+ (void) wattrset(win, gauge_attr);
+ wmove(win, data->slide_y, data->slide_x);
+ for (n = 0; n < data->slide_len; ++n) {
+ (void) waddch(win, ' ');
+ }
+ wmove(win, data->slide_y, data->value_x);
+ wprintw(win, "%*d", data->value_len, value);
+ if ((gauge_attr & A_REVERSE) != 0) {
+ wattroff(win, A_REVERSE);
+ } else {
+ (void) wattrset(win, A_REVERSE);
+ }
+ wmove(win, data->slide_y, data->slide_x);
+ for (n = 0; n < scaled; ++n) {
+ chtype ch2 = winch(win);
+ if (gauge_attr & A_REVERSE) {
+ ch2 &= ~A_REVERSE;
+ }
+ (void) waddch(win, ch2);
+ }
+ (void) wattrset(win, dialog_attr);
+
+ wmove(win, y, x);
+ data->current = value;
+
+ dlg_trace_msg("drew %d offset %d scaled %d limit %d inc %d\n",
+ value,
+ offset,
+ scaled,
+ data->slide_len,
+ data->slide_inc);
+
+ dlg_trace_win(win);
+ }
+}
+
+/*
+ * Allow the user to select from a range of values, e.g., using a slider.
+ */
+int
+dialog_rangebox(const char *title,
+ const char *cprompt,
+ int height,
+ int width,
+ int min_value,
+ int max_value,
+ int default_value)
+{
+ /* *INDENT-OFF* */
+ static DLG_KEYS_BINDING binding[] = {
+ DLG_KEYS_DATA( DLGK_DELETE_RIGHT,KEY_DC ),
+ HELPKEY_BINDINGS,
+ ENTERKEY_BINDINGS,
+ DLG_KEYS_DATA( DLGK_ENTER, ' ' ),
+ 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_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_PREV, '-' ),
+ DLG_KEYS_DATA( DLGK_ITEM_PREV, KEY_UP ),
+ DLG_KEYS_DATA( DLGK_PAGE_NEXT, KEY_NEXT),
+ DLG_KEYS_DATA( DLGK_PAGE_NEXT, KEY_NPAGE),
+ DLG_KEYS_DATA( DLGK_PAGE_PREV, KEY_PPAGE ),
+ DLG_KEYS_DATA( DLGK_PAGE_PREV, KEY_PREVIOUS ),
+ END_KEYS_BINDING
+ };
+ /* *INDENT-ON* */
+
+#ifdef KEY_RESIZE
+ int old_height = height;
+ int old_width = width;
+#endif
+ VALUE data;
+ int key = 0, key2, fkey;
+ int button;
+ int result = DLG_EXIT_UNKNOWN;
+ WINDOW *dialog;
+ int state = dlg_default_button();
+ const char **buttons = dlg_ok_labels();
+ char *prompt = dlg_strclone(cprompt);
+ char buffer[MAX_LEN];
+ int cur_value = default_value;
+ int usable;
+ int ranges;
+ int yorg, xorg;
+
+ if (max_value < min_value)
+ max_value = min_value;
+ if (cur_value > max_value)
+ cur_value = max_value;
+ if (cur_value < min_value)
+ cur_value = min_value;
+
+ 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,
+ yorg = dlg_box_y_ordinate(height),
+ xorg = dlg_box_x_ordinate(width));
+
+ data.window = dialog;
+
+ data.min_value = min_value;
+ data.max_value = max_value;
+
+ usable = (width - 2 - 4 * MARGIN);
+ ranges = max_value - min_value + 1;
+
+ /*
+ * Center the number after allowing for its maximum number of digits.
+ */
+ data.value_len = digits_of(max_value);
+ if (digits_of(min_value) > data.value_len)
+ data.value_len = digits_of(min_value);
+ data.value_x = (usable - data.value_len) / 2 + MARGIN;
+ data.value_col = data.value_len - 1;
+
+ /*
+ * The slider is scaled, to try to use the width of the dialog.
+ */
+ if (ranges > usable) {
+ data.slide_inc = (ranges + usable - 1) / usable;
+ data.slide_len = 1 + ranges / data.slide_inc;
+ } else if (ranges < usable) {
+ data.slide_inc = usable / ranges;
+ data.slide_len = ranges * data.slide_inc;
+ } else {
+ data.slide_inc = 1;
+ data.slide_len = usable;
+ }
+ data.slide_x = (usable - data.slide_len) / 2 + MARGIN + 2;
+ data.slide_y = height - 5;
+
+ data.current = cur_value - 1;
+
+ dlg_register_window(dialog, "rangebox", binding);
+ dlg_register_buttons(dialog, "rangebox", buttons);
+
+ dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr);
+ dlg_mouse_setbase(xorg, yorg);
+ dlg_mouse_mkregion(data.slide_y - 1, data.slide_x - 1, 3, usable + 2, 'i');
+ dlg_draw_box2(dialog,
+ height - 6, data.slide_x - MARGIN,
+ 2 + MARGIN, data.slide_len + 2 * MARGIN,
+ dialog_attr,
+ border_attr,
+ border2_attr);
+ dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr);
+ dlg_draw_title(dialog, title);
+ dlg_draw_helpline(dialog, FALSE);
+
+ (void) wattrset(dialog, dialog_attr);
+ dlg_print_autowrap(dialog, prompt, height, width);
+
+ dlg_trace_win(dialog);
+ while (result == DLG_EXIT_UNKNOWN) {
+ draw_value(&data, cur_value);
+ button = (state < 0) ? 0 : state;
+ dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width);
+ if (state < 0) {
+ data.value_col = data.value_len + state;
+ wmove(dialog, data.slide_y, data.value_x + data.value_col);
+ }
+
+ 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_ENTER:
+ result = dlg_ok_buttoncode(button);
+ break;
+ case DLGK_FIELD_PREV:
+ if (state < 0 && state > -data.value_len) {
+ --state;
+ } else {
+ state = dlg_prev_ok_buttonindex(state, -data.value_len);
+ }
+ break;
+ case DLGK_FIELD_NEXT:
+ if (state < 0) {
+ ++state;
+ } else {
+ state = dlg_next_ok_buttonindex(state, -data.value_len);
+ }
+ break;
+ case DLGK_ITEM_FIRST:
+ cur_value = min_value;
+ break;
+ case DLGK_ITEM_LAST:
+ cur_value = max_value;
+ break;
+ case DLGK_ITEM_PREV:
+ if (state < 0) {
+ cur_value -= digit_of(&data);
+ } else {
+ cur_value -= 1;
+ }
+ if (cur_value < min_value)
+ cur_value = min_value;
+ break;
+ case DLGK_ITEM_NEXT:
+ if (state < 0) {
+ cur_value += digit_of(&data);
+ } else {
+ cur_value += 1;
+ }
+ if (cur_value > max_value)
+ cur_value = max_value;
+ break;
+ case DLGK_PAGE_PREV:
+ cur_value -= data.slide_inc;
+ if (cur_value < min_value)
+ cur_value = min_value;
+ break;
+ case DLGK_PAGE_NEXT:
+ cur_value += data.slide_inc;
+ if (cur_value > max_value)
+ cur_value = max_value;
+ 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
+ case DLGK_MOUSE('i'):
+ state = -data.value_len;
+ break;
+ default:
+ if (is_DLGK_MOUSE(key)) {
+ result = dlg_ok_buttoncode(key - M_EVENT);
+ if (result < 0)
+ result = DLG_EXIT_OK;
+ }
+ break;
+ }
+ } else if (isdigit(key) && state < 0) {
+ if (set_digit(&data, key)) {
+ cur_value = data.current;
+ data.current--;
+ }
+ } else {
+ beep();
+ }
+ }
+ }
+
+ sprintf(buffer, "%d", cur_value);
+ dlg_add_result(buffer);
+ dlg_add_separator();
+ dlg_add_last_key(-1);
+
+ dlg_del_window(dialog);
+ dlg_mouse_free_regions();
+ free(prompt);
+
+ return result;
+}
diff --git a/contrib/dialog/rc.c b/contrib/dialog/rc.c
new file mode 100644
index 0000000..4a13455
--- /dev/null
+++ b/contrib/dialog/rc.c
@@ -0,0 +1,619 @@
+/*
+ * $Id: rc.c,v 1.51 2012/11/30 21:32:39 tom Exp $
+ *
+ * rc.c -- routines for processing the configuration file
+ *
+ * Copyright 2000-2011,2012 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 one of two forms:
+ *
+ * "(foreground,background,highlight)"
+ " "xxxx_color"
+ */
+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;
+ size_t have;
+
+ if (str[0] != '(' || lastch(str) != ')') {
+ if ((i = find_color(str)) >= 0) {
+ *fg = dlg_color_table[i].fg;
+ *bg = dlg_color_table[i].bg;
+ *hl = dlg_color_table[i].hilite;
+ return 0;
+ }
+ return -1; /* invalid representation */
+ }
+
+ /* remove the parenthesis */
+ have = strlen(str);
+ if (have > MAX_LEN) {
+ have = MAX_LEN - 1;
+ } else {
+ have -= 2;
+ }
+ memcpy(tempstr, str + 1, have);
+ tempstr[have] = '\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];
+ unsigned j;
+ bool repeat = FALSE;
+
+ fprintf(rc_file, "\n# %s\n", dlg_color_table[i].comment);
+ for (j = 0; j != i; ++j) {
+ if (dlg_color_table[i].fg == dlg_color_table[j].fg
+ && dlg_color_table[i].bg == dlg_color_table[j].bg
+ && dlg_color_table[i].hilite == dlg_color_table[j].hilite) {
+ fprintf(rc_file, "%s = %s\n",
+ dlg_color_table[i].name,
+ dlg_color_table[j].name);
+ repeat = TRUE;
+ break;
+ }
+ }
+
+ if (!repeat) {
+ 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 */
+ dlg_dump_keys(rc_file);
+
+ (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;
+ char *params;
+
+ /*
+ * 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(tempptr = str, "rt");
+ }
+ }
+
+ if (rc_file == NULL) { /* step (b) failed? */
+ /* try step (c) */
+ strcpy(str, GLOBALRC);
+ if ((rc_file = fopen(tempptr = str, "rt")) == NULL)
+ return 0; /* step (c) failed, use default values */
+ }
+
+ DLG_TRACE(("opened rc file \"%s\"\n", tempptr));
+ /* Scan each line and set variables */
+ while ((result == 0) && (fgets(str, MAX_LEN, rc_file) != NULL)) {
+ DLG_TRACE(("rc:%s", 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", &params)) {
+ if (!dlg_parse_bindkey(params)) {
+ fprintf(stderr, "\nParse error: line %d of configuration\n", l);
+ result = -1;
+ }
+ 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;
+}
diff --git a/contrib/dialog/rename.sh b/contrib/dialog/rename.sh
new file mode 100755
index 0000000..0151541
--- /dev/null
+++ b/contrib/dialog/rename.sh
@@ -0,0 +1,60 @@
+#! /bin/sh
+# $Id: rename.sh,v 1.4 2012/12/19 10:17:36 tom Exp $
+##############################################################################
+# Copyright (c) 2011,2012 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. #
+##############################################################################
+# install-helper for dialog's manpages, e.g., as "cdialog".
+#
+# $1 = input file
+# $2 = output file
+# $3 = actual program name that dialog is installed as
+# $4 = actual name that header/library are installed as
+# $5+ = install program and possible options
+
+LANG=C; export LANG
+LC_ALL=C; export LC_ALL
+LC_CTYPE=C; export LC_CTYPE
+LANGUAGE=C; export LANGUAGE
+
+SOURCE=$1; shift
+TARGET=$1; shift
+BINARY=$1; shift
+PACKAGE=$1; shift
+
+CHR_LEAD=`echo "$BINARY" | sed -e 's/^\(.\).*/\1/'`
+CHR_TAIL=`echo "$BINARY" | sed -e 's/^.//'`
+ONE_CAPS=`echo $CHR_LEAD | tr '[a-z]' '[A-Z]'`$CHR_TAIL
+ALL_CAPS=`echo "$BINARY" | tr '[a-z]' '[A-Z]'`
+
+sed -e "s,^\.ds p dialog\>,.ds p $BINARY," \
+ -e "s,^\.ds l dialog\>,.ds l $PACKAGE," \
+ -e "s,^\.ds L Dialog\>,.ds L $ONE_CAPS," \
+ -e "s,^\.ds D DIALOG\>,.ds D $ALL_CAPS," \
+ -e 's,^dialog \\- ,'"$PACKAGE"' \\- ,' \
+ <$SOURCE >source.tmp
+"$@" source.tmp $TARGET
+rm -f source.tmp
diff --git a/contrib/dialog/samples/README b/contrib/dialog/samples/README
new file mode 100644
index 0000000..604197c
--- /dev/null
+++ b/contrib/dialog/samples/README
@@ -0,0 +1,7 @@
+-- $Id: README,v 1.4 2012/12/02 18:52:52 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.
diff --git a/contrib/dialog/samples/buildlist b/contrib/dialog/samples/buildlist
new file mode 100755
index 0000000..72d871f
--- /dev/null
+++ b/contrib/dialog/samples/buildlist
@@ -0,0 +1,20 @@
+#!/bin/sh
+# $Id: buildlist,v 1.2 2012/12/04 11:45:21 tom Exp $
+
+. ./setup-vars
+
+. ./setup-tempfile
+
+$DIALOG --title "BUILDLIST DEMO" --backtitle "A user-built list" \
+ --separator "|" \
+ --buildlist "hello, this is a --buildlist..." 0 0 0 \
+ "1" "Item number 1" "on" \
+ "2" "Item number 2" "off" \
+ "3" "Item number 3" "on" \
+ "4" "Item number 4" "on" \
+ "5" "Item number 5" "off" \
+ "6" "Item number 6" "on" 2> $tempfile
+
+retval=$?
+
+. ./report-tempfile
diff --git a/contrib/dialog/samples/buildlist2 b/contrib/dialog/samples/buildlist2
new file mode 100755
index 0000000..d5cbfb7
--- /dev/null
+++ b/contrib/dialog/samples/buildlist2
@@ -0,0 +1,42 @@
+#!/bin/sh
+# $Id: buildlist2,v 1.6 2012/12/23 22:28:12 tom Exp $
+
+. ./setup-vars
+
+. ./setup-edit
+
+count=0
+ls -1 | while true
+do
+ read filename
+ test -z "$filename" && break
+ case $filename in
+ *.*)
+ state=off
+ ;;
+ *-*)
+ state=on
+ ;;
+ *)
+ continue
+ ;;
+ esac
+ case "x$DIALOGOPTS" in
+ *--no-items*|*--noitem*)
+ echo $filename $state >>$input
+ ;;
+ *)
+ echo $count $filename $state >>$input
+ ;;
+ esac
+ count=`expr $count + 1`
+done
+
+$DIALOG --title "BUILDLIST DEMO" --backtitle "A user-built list" \
+ --visit-items --scrollbar --separator "|" \
+ --buildlist "hello, this is a --buildlist..." 0 0 10 `cat $input` 2> $output
+
+retval=$?
+
+tempfile=$output
+. ./report-tempfile
diff --git a/contrib/dialog/samples/calendar b/contrib/dialog/samples/calendar
new file mode 100755
index 0000000..e984bce
--- /dev/null
+++ b/contrib/dialog/samples/calendar
@@ -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
diff --git a/contrib/dialog/samples/calendar-stdout b/contrib/dialog/samples/calendar-stdout
new file mode 100755
index 0000000..5dbbbce
--- /dev/null
+++ b/contrib/dialog/samples/calendar-stdout
@@ -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
diff --git a/contrib/dialog/samples/calendar2 b/contrib/dialog/samples/calendar2
new file mode 100755
index 0000000..f6214ce
--- /dev/null
+++ b/contrib/dialog/samples/calendar2
@@ -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
diff --git a/contrib/dialog/samples/calendar2-stdout b/contrib/dialog/samples/calendar2-stdout
new file mode 100755
index 0000000..af731d9
--- /dev/null
+++ b/contrib/dialog/samples/calendar2-stdout
@@ -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
diff --git a/contrib/dialog/samples/calendar3 b/contrib/dialog/samples/calendar3
new file mode 100755
index 0000000..aece69c
--- /dev/null
+++ b/contrib/dialog/samples/calendar3
@@ -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
diff --git a/contrib/dialog/samples/calendar3-stdout b/contrib/dialog/samples/calendar3-stdout
new file mode 100755
index 0000000..4b7ecdb
--- /dev/null
+++ b/contrib/dialog/samples/calendar3-stdout
@@ -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
diff --git a/contrib/dialog/samples/checklist b/contrib/dialog/samples/checklist
new file mode 100755
index 0000000..be3c8c6
--- /dev/null
+++ b/contrib/dialog/samples/checklist
@@ -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
diff --git a/contrib/dialog/samples/checklist-8bit b/contrib/dialog/samples/checklist-8bit
new file mode 100755
index 0000000..20b23f1
--- /dev/null
+++ b/contrib/dialog/samples/checklist-8bit
@@ -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
diff --git a/contrib/dialog/samples/checklist-utf8 b/contrib/dialog/samples/checklist-utf8
new file mode 100755
index 0000000..12ed723
--- /dev/null
+++ b/contrib/dialog/samples/checklist-utf8
@@ -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
diff --git a/contrib/dialog/samples/checklist1 b/contrib/dialog/samples/checklist1
new file mode 100755
index 0000000..a0e19b6
--- /dev/null
+++ b/contrib/dialog/samples/checklist1
@@ -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
diff --git a/contrib/dialog/samples/checklist10 b/contrib/dialog/samples/checklist10
new file mode 100755
index 0000000..2ebd5575
--- /dev/null
+++ b/contrib/dialog/samples/checklist10
@@ -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
diff --git a/contrib/dialog/samples/checklist11 b/contrib/dialog/samples/checklist11
new file mode 100755
index 0000000..85e2349
--- /dev/null
+++ b/contrib/dialog/samples/checklist11
@@ -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
diff --git a/contrib/dialog/samples/checklist12 b/contrib/dialog/samples/checklist12
new file mode 100755
index 0000000..e23f88b
--- /dev/null
+++ b/contrib/dialog/samples/checklist12
@@ -0,0 +1,44 @@
+#! /bin/sh
+# $Id: checklist12,v 1.3 2012/12/23 22:27:51 tom Exp $
+
+. ./setup-vars
+
+. ./setup-edit
+
+case "x$DIALOGOPTS" in
+*--no-items*|*--noitem*)
+ CUT="cut -d: -f1,3"
+ ;;
+*)
+ CUT="cat"
+ ;;
+esac
+
+$CUT >$input <<-EOF
+ 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
+EOF
+cat $input | sed -e 's/^/"/' -e 's/:/" "/g' -e 's/$/"/' >$output
+cat $output >$input
+
+$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 \
+ --file $input 2> $output
+
+retval=$?
+
+tempfile=$output
+. ./report-tempfile
diff --git a/contrib/dialog/samples/checklist2 b/contrib/dialog/samples/checklist2
new file mode 100755
index 0000000..c672a68
--- /dev/null
+++ b/contrib/dialog/samples/checklist2
@@ -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
diff --git a/contrib/dialog/samples/checklist3 b/contrib/dialog/samples/checklist3
new file mode 100755
index 0000000..ce713d4
--- /dev/null
+++ b/contrib/dialog/samples/checklist3
@@ -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
diff --git a/contrib/dialog/samples/checklist4 b/contrib/dialog/samples/checklist4
new file mode 100755
index 0000000..53adeed
--- /dev/null
+++ b/contrib/dialog/samples/checklist4
@@ -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
diff --git a/contrib/dialog/samples/checklist5 b/contrib/dialog/samples/checklist5
new file mode 100755
index 0000000..3890c85
--- /dev/null
+++ b/contrib/dialog/samples/checklist5
@@ -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
diff --git a/contrib/dialog/samples/checklist6 b/contrib/dialog/samples/checklist6
new file mode 100755
index 0000000..1a05d06
--- /dev/null
+++ b/contrib/dialog/samples/checklist6
@@ -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
diff --git a/contrib/dialog/samples/checklist7 b/contrib/dialog/samples/checklist7
new file mode 100755
index 0000000..1080b7e
--- /dev/null
+++ b/contrib/dialog/samples/checklist7
@@ -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
diff --git a/contrib/dialog/samples/checklist8 b/contrib/dialog/samples/checklist8
new file mode 100755
index 0000000..2ec1bbd
--- /dev/null
+++ b/contrib/dialog/samples/checklist8
@@ -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
diff --git a/contrib/dialog/samples/checklist9 b/contrib/dialog/samples/checklist9
new file mode 100755
index 0000000..e8d913f
--- /dev/null
+++ b/contrib/dialog/samples/checklist9
@@ -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
diff --git a/contrib/dialog/samples/checklist9.txt b/contrib/dialog/samples/checklist9.txt
new file mode 100644
index 0000000..cdb2652
--- /dev/null
+++ b/contrib/dialog/samples/checklist9.txt
@@ -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
diff --git a/contrib/dialog/samples/debian.rc b/contrib/dialog/samples/debian.rc
new file mode 100644
index 0000000..195d798
--- /dev/null
+++ b/contrib/dialog/samples/debian.rc
@@ -0,0 +1,143 @@
+# $Id: debian.rc,v 1.7 2011/10/15 01:00:09 tom Exp $
+# vile:confmode
+# Run-time configuration file for dialog, matches Debian color scheme.
+# (these are the default values for dialog)
+#
+# 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 = (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 = dialog_color
+
+# Active button key color
+button_key_active_color = button_active_color
+
+# 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 = dialog_color
+
+# Input box border color
+inputbox_border_color = dialog_color
+
+# Search box color
+searchbox_color = dialog_color
+
+# Search box title color
+searchbox_title_color = title_color
+
+# Search box border color
+searchbox_border_color = border_color
+
+# File position indicator color
+position_indicator_color = title_color
+
+# Menu box color
+menubox_color = dialog_color
+
+# Menu box border color
+menubox_border_color = border_color
+
+# Item color
+item_color = dialog_color
+
+# Selected item color
+item_selected_color = button_active_color
+
+# Tag color
+tag_color = title_color
+
+# Selected tag color
+tag_selected_color = button_label_active_color
+
+# Tag key color
+tag_key_color = button_key_inactive_color
+
+# Selected tag key color
+tag_key_selected_color = (RED,BLUE,ON)
+
+# Check box color
+check_color = dialog_color
+
+# Selected check box color
+check_selected_color = button_active_color
+
+# Up arrow color
+uarrow_color = (GREEN,WHITE,ON)
+
+# Down arrow color
+darrow_color = uarrow_color
+
+# Item help-text color
+itemhelp_color = (WHITE,BLACK,OFF)
+
+# Active form text color
+form_active_text_color = button_active_color
+
+# Form text color
+form_text_color = (WHITE,CYAN,ON)
+
+# Readonly form item color
+form_item_readonly_color = (CYAN,WHITE,ON)
+
+# Dialog box gauge color
+gauge_color = title_color
+
+# Dialog box border2 color
+border2_color = dialog_color
+
+# Input box border2 color
+inputbox_border2_color = dialog_color
+
+# Search box border2 color
+searchbox_border2_color = dialog_color
+
+# Menu box border2 color
+menubox_border2_color = dialog_color
diff --git a/contrib/dialog/samples/dft-cancel b/contrib/dialog/samples/dft-cancel
new file mode 100755
index 0000000..2b317fc
--- /dev/null
+++ b/contrib/dialog/samples/dft-cancel
@@ -0,0 +1,3 @@
+#!/bin/sh
+# $Id: dft-cancel,v 1.2 2012/07/03 09:44:02 tom Exp $
+DIALOGOPTS="$DIALOGOPTS --extra-button --help-button --default-button cancel" "$@"
diff --git a/contrib/dialog/samples/dft-extra b/contrib/dialog/samples/dft-extra
new file mode 100755
index 0000000..de08cd7
--- /dev/null
+++ b/contrib/dialog/samples/dft-extra
@@ -0,0 +1,3 @@
+#!/bin/sh
+# $Id: dft-extra,v 1.2 2012/07/03 09:44:02 tom Exp $
+DIALOGOPTS="$DIALOGOPTS --extra-button --help-button --default-button extra" "$@"
diff --git a/contrib/dialog/samples/dft-help b/contrib/dialog/samples/dft-help
new file mode 100755
index 0000000..cade8a7
--- /dev/null
+++ b/contrib/dialog/samples/dft-help
@@ -0,0 +1,3 @@
+#!/bin/sh
+# $Id: dft-help,v 1.2 2012/07/03 09:44:02 tom Exp $
+DIALOGOPTS="$DIALOGOPTS --extra-button --help-button --default-button help" "$@"
diff --git a/contrib/dialog/samples/dft-no b/contrib/dialog/samples/dft-no
new file mode 100755
index 0000000..172bcb2
--- /dev/null
+++ b/contrib/dialog/samples/dft-no
@@ -0,0 +1,3 @@
+#!/bin/sh
+# $Id: dft-no,v 1.2 2012/07/03 09:44:02 tom Exp $
+DIALOGOPTS="$DIALOGOPTS --extra-button --help-button --defaultno" "$@"
diff --git a/contrib/dialog/samples/dialog.py b/contrib/dialog/samples/dialog.py
new file mode 100644
index 0000000..5286b41
--- /dev/null
+++ b/contrib/dialog/samples/dialog.py
@@ -0,0 +1,354 @@
+#!/usr/bin/python
+# $Id: dialog.py,v 1.4 2012/06/29 09:33:18 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()
diff --git a/contrib/dialog/samples/editbox b/contrib/dialog/samples/editbox
new file mode 100755
index 0000000..8ae4c63
--- /dev/null
+++ b/contrib/dialog/samples/editbox
@@ -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
diff --git a/contrib/dialog/samples/editbox-utf8 b/contrib/dialog/samples/editbox-utf8
new file mode 100755
index 0000000..94f2fab
--- /dev/null
+++ b/contrib/dialog/samples/editbox-utf8
@@ -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/2 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
diff --git a/contrib/dialog/samples/editbox2 b/contrib/dialog/samples/editbox2
new file mode 100755
index 0000000..6662394
--- /dev/null
+++ b/contrib/dialog/samples/editbox2
@@ -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
diff --git a/contrib/dialog/samples/editbox3 b/contrib/dialog/samples/editbox3
new file mode 100755
index 0000000..aba30bd
--- /dev/null
+++ b/contrib/dialog/samples/editbox3
@@ -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
diff --git a/contrib/dialog/samples/editbox4 b/contrib/dialog/samples/editbox4
new file mode 100755
index 0000000..8153fac
--- /dev/null
+++ b/contrib/dialog/samples/editbox4
@@ -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
diff --git a/contrib/dialog/samples/form1 b/contrib/dialog/samples/form1
new file mode 100755
index 0000000..38e2364
--- /dev/null
+++ b/contrib/dialog/samples/form1
@@ -0,0 +1,79 @@
+#! /bin/sh
+# $Id: form1,v 1.15 2011/10/04 23:36:53 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_ERROR)
+ echo "ERROR!$value"
+ exit
+ ;;
+ $DIALOG_ESC)
+ echo "ESC pressed."
+ exit
+ ;;
+ *)
+ echo "Return code was $returncode"
+ exit
+ ;;
+ esac
+done
diff --git a/contrib/dialog/samples/form1-both b/contrib/dialog/samples/form1-both
new file mode 100755
index 0000000..f571830
--- /dev/null
+++ b/contrib/dialog/samples/form1-both
@@ -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
diff --git a/contrib/dialog/samples/form1-extra b/contrib/dialog/samples/form1-extra
new file mode 100755
index 0000000..ca180a9
--- /dev/null
+++ b/contrib/dialog/samples/form1-extra
@@ -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
diff --git a/contrib/dialog/samples/form1-help b/contrib/dialog/samples/form1-help
new file mode 100755
index 0000000..44c5543
--- /dev/null
+++ b/contrib/dialog/samples/form1-help
@@ -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
diff --git a/contrib/dialog/samples/form1-utf8 b/contrib/dialog/samples/form1-utf8
new file mode 100755
index 0000000..a2be4a6
--- /dev/null
+++ b/contrib/dialog/samples/form1-utf8
@@ -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
diff --git a/contrib/dialog/samples/form2 b/contrib/dialog/samples/form2
new file mode 100755
index 0000000..a005be3
--- /dev/null
+++ b/contrib/dialog/samples/form2
@@ -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
diff --git a/contrib/dialog/samples/form3 b/contrib/dialog/samples/form3
new file mode 100755
index 0000000..c3ac6d5
--- /dev/null
+++ b/contrib/dialog/samples/form3
@@ -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
diff --git a/contrib/dialog/samples/form4 b/contrib/dialog/samples/form4
new file mode 100755
index 0000000..a733865
--- /dev/null
+++ b/contrib/dialog/samples/form4
@@ -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
diff --git a/contrib/dialog/samples/form5 b/contrib/dialog/samples/form5
new file mode 100755
index 0000000..649c387
--- /dev/null
+++ b/contrib/dialog/samples/form5
@@ -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
diff --git a/contrib/dialog/samples/form6 b/contrib/dialog/samples/form6
new file mode 100755
index 0000000..8b5483f
--- /dev/null
+++ b/contrib/dialog/samples/form6
@@ -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
diff --git a/contrib/dialog/samples/fselect b/contrib/dialog/samples/fselect
new file mode 100755
index 0000000..20b8304
--- /dev/null
+++ b/contrib/dialog/samples/fselect
@@ -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
diff --git a/contrib/dialog/samples/fselect-stdout b/contrib/dialog/samples/fselect-stdout
new file mode 100755
index 0000000..02eefdb
--- /dev/null
+++ b/contrib/dialog/samples/fselect-stdout
@@ -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
diff --git a/contrib/dialog/samples/fselect0 b/contrib/dialog/samples/fselect0
new file mode 100755
index 0000000..3bd5b6d
--- /dev/null
+++ b/contrib/dialog/samples/fselect0
@@ -0,0 +1,11 @@
+#!/bin/sh
+# $Id: fselect0,v 1.1 2011/10/14 08:32:48 tom Exp $
+
+. ./setup-vars
+
+exec 3>&1
+RESULT=`$DIALOG --title "Please choose a file" "$@" --fselect '' 14 48 2>&1 1>&3`
+retval=$?
+exec 3>&-
+
+. ./report-string
diff --git a/contrib/dialog/samples/fselect1 b/contrib/dialog/samples/fselect1
new file mode 100755
index 0000000..5913794
--- /dev/null
+++ b/contrib/dialog/samples/fselect1
@@ -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
diff --git a/contrib/dialog/samples/fselect1-stdout b/contrib/dialog/samples/fselect1-stdout
new file mode 100755
index 0000000..01d1135
--- /dev/null
+++ b/contrib/dialog/samples/fselect1-stdout
@@ -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
diff --git a/contrib/dialog/samples/fselect2 b/contrib/dialog/samples/fselect2
new file mode 100755
index 0000000..6480c75
--- /dev/null
+++ b/contrib/dialog/samples/fselect2
@@ -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
diff --git a/contrib/dialog/samples/fselect2-stdout b/contrib/dialog/samples/fselect2-stdout
new file mode 100755
index 0000000..644fb2a
--- /dev/null
+++ b/contrib/dialog/samples/fselect2-stdout
@@ -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
diff --git a/contrib/dialog/samples/gauge b/contrib/dialog/samples/gauge
new file mode 100755
index 0000000..80dc188
--- /dev/null
+++ b/contrib/dialog/samples/gauge
@@ -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
diff --git a/contrib/dialog/samples/gauge0 b/contrib/dialog/samples/gauge0
new file mode 100755
index 0000000..97e654c
--- /dev/null
+++ b/contrib/dialog/samples/gauge0
@@ -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
diff --git a/contrib/dialog/samples/gauge0-input-fd b/contrib/dialog/samples/gauge0-input-fd
new file mode 100755
index 0000000..0b96fe4
--- /dev/null
+++ b/contrib/dialog/samples/gauge0-input-fd
@@ -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<&-
diff --git a/contrib/dialog/samples/gauge2 b/contrib/dialog/samples/gauge2
new file mode 100755
index 0000000..10455d1
--- /dev/null
+++ b/contrib/dialog/samples/gauge2
@@ -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
diff --git a/contrib/dialog/samples/infobox b/contrib/dialog/samples/infobox
new file mode 100755
index 0000000..91dd5dd
--- /dev/null
+++ b/contrib/dialog/samples/infobox
@@ -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
diff --git a/contrib/dialog/samples/infobox1 b/contrib/dialog/samples/infobox1
new file mode 100755
index 0000000..4ee6c9f
--- /dev/null
+++ b/contrib/dialog/samples/infobox1
@@ -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
diff --git a/contrib/dialog/samples/infobox2 b/contrib/dialog/samples/infobox2
new file mode 100755
index 0000000..fdf64ca
--- /dev/null
+++ b/contrib/dialog/samples/infobox2
@@ -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
diff --git a/contrib/dialog/samples/infobox3 b/contrib/dialog/samples/infobox3
new file mode 100755
index 0000000..edba1df
--- /dev/null
+++ b/contrib/dialog/samples/infobox3
@@ -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
diff --git a/contrib/dialog/samples/infobox4 b/contrib/dialog/samples/infobox4
new file mode 100755
index 0000000..7c96d6b
--- /dev/null
+++ b/contrib/dialog/samples/infobox4
@@ -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
diff --git a/contrib/dialog/samples/infobox5 b/contrib/dialog/samples/infobox5
new file mode 100755
index 0000000..58512c9
--- /dev/null
+++ b/contrib/dialog/samples/infobox5
@@ -0,0 +1,39 @@
+#! /bin/sh
+# $Id: infobox5,v 1.7 2011/01/18 09:19:09 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
diff --git a/contrib/dialog/samples/infobox6 b/contrib/dialog/samples/infobox6
new file mode 100755
index 0000000..a3a06ce
--- /dev/null
+++ b/contrib/dialog/samples/infobox6
@@ -0,0 +1,41 @@
+#! /bin/sh
+# $Id: infobox6,v 1.7 2011/01/18 09:20:59 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
diff --git a/contrib/dialog/samples/inputbox b/contrib/dialog/samples/inputbox
new file mode 100755
index 0000000..9975d44
--- /dev/null
+++ b/contrib/dialog/samples/inputbox
@@ -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
diff --git a/contrib/dialog/samples/inputbox-both b/contrib/dialog/samples/inputbox-both
new file mode 100755
index 0000000..4103ccf
--- /dev/null
+++ b/contrib/dialog/samples/inputbox-both
@@ -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
diff --git a/contrib/dialog/samples/inputbox-extra b/contrib/dialog/samples/inputbox-extra
new file mode 100755
index 0000000..9f2277c
--- /dev/null
+++ b/contrib/dialog/samples/inputbox-extra
@@ -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
diff --git a/contrib/dialog/samples/inputbox-help b/contrib/dialog/samples/inputbox-help
new file mode 100755
index 0000000..0dfe7c8
--- /dev/null
+++ b/contrib/dialog/samples/inputbox-help
@@ -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
diff --git a/contrib/dialog/samples/inputbox1 b/contrib/dialog/samples/inputbox1
new file mode 100755
index 0000000..487aa8c
--- /dev/null
+++ b/contrib/dialog/samples/inputbox1
@@ -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
diff --git a/contrib/dialog/samples/inputbox2 b/contrib/dialog/samples/inputbox2
new file mode 100755
index 0000000..f7b4b5f
--- /dev/null
+++ b/contrib/dialog/samples/inputbox2
@@ -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
diff --git a/contrib/dialog/samples/inputbox3 b/contrib/dialog/samples/inputbox3
new file mode 100755
index 0000000..d343e0a
--- /dev/null
+++ b/contrib/dialog/samples/inputbox3
@@ -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
diff --git a/contrib/dialog/samples/inputbox4 b/contrib/dialog/samples/inputbox4
new file mode 100755
index 0000000..416bf86
--- /dev/null
+++ b/contrib/dialog/samples/inputbox4
@@ -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
diff --git a/contrib/dialog/samples/inputbox5 b/contrib/dialog/samples/inputbox5
new file mode 100755
index 0000000..ad72623
--- /dev/null
+++ b/contrib/dialog/samples/inputbox5
@@ -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
diff --git a/contrib/dialog/samples/inputbox6-8bit b/contrib/dialog/samples/inputbox6-8bit
new file mode 100755
index 0000000..b7692e8
--- /dev/null
+++ b/contrib/dialog/samples/inputbox6-8bit
@@ -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
diff --git a/contrib/dialog/samples/inputbox6-utf8 b/contrib/dialog/samples/inputbox6-utf8
new file mode 100755
index 0000000..056757e
--- /dev/null
+++ b/contrib/dialog/samples/inputbox6-utf8
@@ -0,0 +1,18 @@
+#!/bin/sh
+# $Id: inputbox6-utf8,v 1.9 2013/09/24 00:06:02 tom Exp $
+
+. ./setup-vars
+
+. ./setup-tempfile
+
+. ./setup-utf8
+
+TITLE="ã‚ã„ã†ãˆãŠ"
+
+$DIALOG \
+--title "$TITLE" "$@" \
+--inputbox "$TITLE" 10 20 "D.O.G" 2>$tempfile
+
+retval=$?
+
+. ./report-tempfile
diff --git a/contrib/dialog/samples/inputbox7 b/contrib/dialog/samples/inputbox7
new file mode 100755
index 0000000..e79d9cc
--- /dev/null
+++ b/contrib/dialog/samples/inputbox7
@@ -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
diff --git a/contrib/dialog/samples/inputmenu b/contrib/dialog/samples/inputmenu
new file mode 100755
index 0000000..3c80811
--- /dev/null
+++ b/contrib/dialog/samples/inputmenu
@@ -0,0 +1,65 @@
+#! /bin/sh
+# $Id: inputmenu,v 1.15 2012/07/06 18:11:21 tom Exp $
+# 2002 - written by Tobias Rittweiler <tobrit@freebits.de>
+
+. ./setup-vars
+
+user="$USER"
+uid=`id|sed -e 's/^uid=//' -e 's/(.*//'`
+gid=`id|sed -e 's/^.*gid=//' -e 's/(.*//'`
+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=`echo "$value" | sed -e 's/^RENAMED //'`
+ tag=`echo "$value" | sed -e 's/:.*//'`
+ item=`echo "$value" | sed -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
diff --git a/contrib/dialog/samples/inputmenu-stdout b/contrib/dialog/samples/inputmenu-stdout
new file mode 100755
index 0000000..a778226
--- /dev/null
+++ b/contrib/dialog/samples/inputmenu-stdout
@@ -0,0 +1,63 @@
+#! /bin/sh
+# $Id: inputmenu-stdout,v 1.13 2012/07/06 18:11:12 tom Exp $
+# 2002 - written by Tobias Rittweiler <tobrit@freebits.de>
+
+. ./setup-vars
+
+user="$USER"
+uid=`id|sed -e 's/^uid=//' -e 's/(.*//'`
+gid=`id|sed -e 's/^.*gid=//' -e 's/(.*//'`
+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=`echo "$value" | sed -e 's/^RENAMED //'`
+ tag=`echo "$value" | sed -e 's/:.*//'`
+ item=`echo "$value" | sed -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
diff --git a/contrib/dialog/samples/inputmenu1 b/contrib/dialog/samples/inputmenu1
new file mode 100755
index 0000000..905c292
--- /dev/null
+++ b/contrib/dialog/samples/inputmenu1
@@ -0,0 +1,85 @@
+#! /bin/sh
+# $Id: inputmenu1,v 1.9 2012/07/01 00:59:54 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
diff --git a/contrib/dialog/samples/inputmenu2 b/contrib/dialog/samples/inputmenu2
new file mode 100755
index 0000000..ecef674
--- /dev/null
+++ b/contrib/dialog/samples/inputmenu2
@@ -0,0 +1,97 @@
+#! /bin/sh
+# $Id: inputmenu2,v 1.9 2012/07/01 01:00:34 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
diff --git a/contrib/dialog/samples/inputmenu3 b/contrib/dialog/samples/inputmenu3
new file mode 100755
index 0000000..4b9d522
--- /dev/null
+++ b/contrib/dialog/samples/inputmenu3
@@ -0,0 +1,106 @@
+#! /bin/sh
+# $Id: inputmenu3,v 1.11 2012/07/01 01:00:34 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
diff --git a/contrib/dialog/samples/inputmenu4 b/contrib/dialog/samples/inputmenu4
new file mode 100755
index 0000000..6688c9c
--- /dev/null
+++ b/contrib/dialog/samples/inputmenu4
@@ -0,0 +1,86 @@
+#! /bin/sh
+# $Id: inputmenu4,v 1.9 2012/07/01 01:00:34 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
diff --git a/contrib/dialog/samples/killall b/contrib/dialog/samples/killall
new file mode 100755
index 0000000..7030fe2
--- /dev/null
+++ b/contrib/dialog/samples/killall
@@ -0,0 +1,16 @@
+#! /bin/sh
+# $Id: killall,v 1.3 2012/06/29 09:39:19 tom Exp $
+# Linux has a program that does this correctly.
+
+. ./setup-vars
+
+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 -$SIG_HUP $pid || \
+ kill -$SIG_TERM $pid || \
+ kill -$SIG_KILL $pid
+ fi
+done
diff --git a/contrib/dialog/samples/listing b/contrib/dialog/samples/listing
new file mode 100755
index 0000000..71d85aa
--- /dev/null
+++ b/contrib/dialog/samples/listing
@@ -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
diff --git a/contrib/dialog/samples/menubox b/contrib/dialog/samples/menubox
new file mode 100755
index 0000000..0cea3bb
--- /dev/null
+++ b/contrib/dialog/samples/menubox
@@ -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
diff --git a/contrib/dialog/samples/menubox-8bit b/contrib/dialog/samples/menubox-8bit
new file mode 100755
index 0000000..91faa5c
--- /dev/null
+++ b/contrib/dialog/samples/menubox-8bit
@@ -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
diff --git a/contrib/dialog/samples/menubox-utf8 b/contrib/dialog/samples/menubox-utf8
new file mode 100755
index 0000000..cd6e429
--- /dev/null
+++ b/contrib/dialog/samples/menubox-utf8
@@ -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/2" "IBM OS/2" \
+ "WIN NT" "Microsoft Windows NT" \
+ "PCDOS" "IBM PC DOS" \
+ "MSDOS" "Microsoft DOS" 2> $tempfile
+
+retval=$?
+
+. ./report-tempfile
diff --git a/contrib/dialog/samples/menubox1 b/contrib/dialog/samples/menubox1
new file mode 100755
index 0000000..dc40d02
--- /dev/null
+++ b/contrib/dialog/samples/menubox1
@@ -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
diff --git a/contrib/dialog/samples/menubox10 b/contrib/dialog/samples/menubox10
new file mode 100755
index 0000000..8606934
--- /dev/null
+++ b/contrib/dialog/samples/menubox10
@@ -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
diff --git a/contrib/dialog/samples/menubox12 b/contrib/dialog/samples/menubox12
new file mode 100755
index 0000000..ee4b474
--- /dev/null
+++ b/contrib/dialog/samples/menubox12
@@ -0,0 +1,43 @@
+#!/bin/sh
+# $Id: menubox12,v 1.3 2012/12/23 22:28:26 tom Exp $
+
+. ./setup-vars
+
+. ./setup-edit
+
+case "x$DIALOGOPTS" in
+*--no-items*|*--noitem*)
+ CUT="cut -d: -f1,3"
+ ;;
+*)
+ CUT="cat"
+ ;;
+esac
+
+$CUT >$input <<-EOF
+ 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
+EOF
+cat $input | sed -e 's/^/"/' -e 's/:/" "/g' -e 's/$/"/' >$output
+cat $output >$input
+
+$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 \
+ --file $input 2> $output
+
+retval=$?
+
+tempfile=$output
+. ./report-tempfile
diff --git a/contrib/dialog/samples/menubox2 b/contrib/dialog/samples/menubox2
new file mode 100755
index 0000000..d81ba79
--- /dev/null
+++ b/contrib/dialog/samples/menubox2
@@ -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
diff --git a/contrib/dialog/samples/menubox3 b/contrib/dialog/samples/menubox3
new file mode 100755
index 0000000..d33b5d6
--- /dev/null
+++ b/contrib/dialog/samples/menubox3
@@ -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
diff --git a/contrib/dialog/samples/menubox4 b/contrib/dialog/samples/menubox4
new file mode 100755
index 0000000..e95342d
--- /dev/null
+++ b/contrib/dialog/samples/menubox4
@@ -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
diff --git a/contrib/dialog/samples/menubox5 b/contrib/dialog/samples/menubox5
new file mode 100755
index 0000000..c89be3a
--- /dev/null
+++ b/contrib/dialog/samples/menubox5
@@ -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
diff --git a/contrib/dialog/samples/menubox6 b/contrib/dialog/samples/menubox6
new file mode 100755
index 0000000..afcc90d
--- /dev/null
+++ b/contrib/dialog/samples/menubox6
@@ -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
diff --git a/contrib/dialog/samples/menubox7 b/contrib/dialog/samples/menubox7
new file mode 100755
index 0000000..2e85b43
--- /dev/null
+++ b/contrib/dialog/samples/menubox7
@@ -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
diff --git a/contrib/dialog/samples/menubox8 b/contrib/dialog/samples/menubox8
new file mode 100755
index 0000000..85448d0
--- /dev/null
+++ b/contrib/dialog/samples/menubox8
@@ -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
diff --git a/contrib/dialog/samples/menubox9 b/contrib/dialog/samples/menubox9
new file mode 100755
index 0000000..8373939
--- /dev/null
+++ b/contrib/dialog/samples/menubox9
@@ -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
diff --git a/contrib/dialog/samples/mixedform b/contrib/dialog/samples/mixedform
new file mode 100755
index 0000000..6178476
--- /dev/null
+++ b/contrib/dialog/samples/mixedform
@@ -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
diff --git a/contrib/dialog/samples/mixedform2 b/contrib/dialog/samples/mixedform2
new file mode 100755
index 0000000..07f1d66
--- /dev/null
+++ b/contrib/dialog/samples/mixedform2
@@ -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
diff --git a/contrib/dialog/samples/mixedgauge b/contrib/dialog/samples/mixedgauge
new file mode 100755
index 0000000..517ba11
--- /dev/null
+++ b/contrib/dialog/samples/mixedgauge
@@ -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
diff --git a/contrib/dialog/samples/msgbox b/contrib/dialog/samples/msgbox
new file mode 100755
index 0000000..adc204e
--- /dev/null
+++ b/contrib/dialog/samples/msgbox
@@ -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
diff --git a/contrib/dialog/samples/msgbox-help b/contrib/dialog/samples/msgbox-help
new file mode 100755
index 0000000..3825f6b
--- /dev/null
+++ b/contrib/dialog/samples/msgbox-help
@@ -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
diff --git a/contrib/dialog/samples/msgbox-utf8 b/contrib/dialog/samples/msgbox-utf8
new file mode 100755
index 0000000..e733150
--- /dev/null
+++ b/contrib/dialog/samples/msgbox-utf8
@@ -0,0 +1,14 @@
+#!/bin/sh
+# $Id: msgbox-utf8,v 1.1 2011/01/18 00:25:30 tom Exp $
+# from Debian #570634
+
+. ./setup-vars
+
+. ./setup-utf8
+
+${DIALOG-dialog} "$@" \
+ --title "ทดสอบวรรณยุà¸à¸•à¹Œ" \
+ --msgbox "วรรณยุà¸à¸•à¹Œà¸­à¸¢à¸¹à¹ˆà¸—้ายบรรทัดได้หรือไม่" 8 23
+retval=$?
+
+. ./report-button
diff --git a/contrib/dialog/samples/msgbox1 b/contrib/dialog/samples/msgbox1
new file mode 100755
index 0000000..b7ef824
--- /dev/null
+++ b/contrib/dialog/samples/msgbox1
@@ -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
diff --git a/contrib/dialog/samples/msgbox2 b/contrib/dialog/samples/msgbox2
new file mode 100755
index 0000000..b39f65a
--- /dev/null
+++ b/contrib/dialog/samples/msgbox2
@@ -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
diff --git a/contrib/dialog/samples/msgbox3 b/contrib/dialog/samples/msgbox3
new file mode 100755
index 0000000..d1ea108
--- /dev/null
+++ b/contrib/dialog/samples/msgbox3
@@ -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
diff --git a/contrib/dialog/samples/msgbox4-8bit b/contrib/dialog/samples/msgbox4-8bit
new file mode 100755
index 0000000..216ac8e
--- /dev/null
+++ b/contrib/dialog/samples/msgbox4-8bit
@@ -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
diff --git a/contrib/dialog/samples/msgbox4-eucjp b/contrib/dialog/samples/msgbox4-eucjp
new file mode 100755
index 0000000..9969c08
--- /dev/null
+++ b/contrib/dialog/samples/msgbox4-eucjp
@@ -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
diff --git a/contrib/dialog/samples/msgbox4-utf8 b/contrib/dialog/samples/msgbox4-utf8
new file mode 100755
index 0000000..acbbebe
--- /dev/null
+++ b/contrib/dialog/samples/msgbox4-utf8
@@ -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
diff --git a/contrib/dialog/samples/msgbox5 b/contrib/dialog/samples/msgbox5
new file mode 100755
index 0000000..f5d9427
--- /dev/null
+++ b/contrib/dialog/samples/msgbox5
@@ -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
diff --git a/contrib/dialog/samples/msgbox6 b/contrib/dialog/samples/msgbox6
new file mode 100755
index 0000000..1d30f02
--- /dev/null
+++ b/contrib/dialog/samples/msgbox6
@@ -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
diff --git a/contrib/dialog/samples/msgbox6a b/contrib/dialog/samples/msgbox6a
new file mode 100755
index 0000000..e84edbf
--- /dev/null
+++ b/contrib/dialog/samples/msgbox6a
@@ -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
diff --git a/contrib/dialog/samples/password b/contrib/dialog/samples/password
new file mode 100755
index 0000000..4517043
--- /dev/null
+++ b/contrib/dialog/samples/password
@@ -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
diff --git a/contrib/dialog/samples/password1 b/contrib/dialog/samples/password1
new file mode 100755
index 0000000..adeabc0
--- /dev/null
+++ b/contrib/dialog/samples/password1
@@ -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
diff --git a/contrib/dialog/samples/password2 b/contrib/dialog/samples/password2
new file mode 100755
index 0000000..91a7e45
--- /dev/null
+++ b/contrib/dialog/samples/password2
@@ -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
diff --git a/contrib/dialog/samples/passwordform1 b/contrib/dialog/samples/passwordform1
new file mode 100755
index 0000000..7c3c1f0
--- /dev/null
+++ b/contrib/dialog/samples/passwordform1
@@ -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
diff --git a/contrib/dialog/samples/passwordform1-utf8 b/contrib/dialog/samples/passwordform1-utf8
new file mode 100755
index 0000000..3dda34c
--- /dev/null
+++ b/contrib/dialog/samples/passwordform1-utf8
@@ -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
diff --git a/contrib/dialog/samples/pause b/contrib/dialog/samples/pause
new file mode 100755
index 0000000..64e211b
--- /dev/null
+++ b/contrib/dialog/samples/pause
@@ -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
diff --git a/contrib/dialog/samples/pause-both b/contrib/dialog/samples/pause-both
new file mode 100755
index 0000000..aa72936
--- /dev/null
+++ b/contrib/dialog/samples/pause-both
@@ -0,0 +1,14 @@
+#!/bin/sh
+# $Id: pause-both,v 1.1 2011/01/18 09:49:24 tom Exp $
+
+. ./setup-vars
+
+$DIALOG --title "PAUSE" \
+ --help-button \
+ --extra-button "$@" \
+ --pause "Hi, this is a pause widget" 20 70 10
+
+retval=$?
+echo return $retval
+
+. ./report-button
diff --git a/contrib/dialog/samples/pause-extra b/contrib/dialog/samples/pause-extra
new file mode 100755
index 0000000..846e108
--- /dev/null
+++ b/contrib/dialog/samples/pause-extra
@@ -0,0 +1,13 @@
+#!/bin/sh
+# $Id: pause-extra,v 1.1 2011/01/18 09:49:07 tom Exp $
+
+. ./setup-vars
+
+$DIALOG --title "PAUSE" \
+ --extra-button "$@" \
+ --pause "Hi, this is a pause widget" 20 70 10
+
+retval=$?
+echo return $retval
+
+. ./report-button
diff --git a/contrib/dialog/samples/pause-help b/contrib/dialog/samples/pause-help
new file mode 100755
index 0000000..2d3656e
--- /dev/null
+++ b/contrib/dialog/samples/pause-help
@@ -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
diff --git a/contrib/dialog/samples/prgbox b/contrib/dialog/samples/prgbox
new file mode 100755
index 0000000..c06a630
--- /dev/null
+++ b/contrib/dialog/samples/prgbox
@@ -0,0 +1,9 @@
+#!/bin/sh
+# $Id: prgbox,v 1.2 2012/07/02 09:46:24 tom Exp $
+
+. ./setup-vars
+
+$DIALOG --title "PRGBOX" "$@" --prgbox "./shortlist" 20 70
+
+retval=$?
+. ./report-button
diff --git a/contrib/dialog/samples/prgbox2 b/contrib/dialog/samples/prgbox2
new file mode 100755
index 0000000..ba94622
--- /dev/null
+++ b/contrib/dialog/samples/prgbox2
@@ -0,0 +1,9 @@
+#!/bin/sh
+# $Id: prgbox2,v 1.2 2012/07/02 09:46:24 tom Exp $
+
+. ./setup-vars
+
+$DIALOG --title "PRGBOX" "$@" --prgbox "./shortlist 3" 20 70
+
+retval=$?
+. ./report-button
diff --git a/contrib/dialog/samples/programbox b/contrib/dialog/samples/programbox
new file mode 100755
index 0000000..9fa0abc
--- /dev/null
+++ b/contrib/dialog/samples/programbox
@@ -0,0 +1,19 @@
+#!/bin/sh
+# $Id: programbox,v 1.1 2011/03/02 01:17:28 tom Exp $
+
+. ./setup-vars
+
+. ./setup-tempfile
+
+ls -1 >$tempfile
+(
+while true
+do
+read text
+test -z "$text" && break
+ls -ld "$text"
+sleep 0.1
+done <$tempfile
+) |
+
+$DIALOG --title "PROGRAMBOX" "$@" --programbox 20 70
diff --git a/contrib/dialog/samples/programbox2 b/contrib/dialog/samples/programbox2
new file mode 100755
index 0000000..63f87df
--- /dev/null
+++ b/contrib/dialog/samples/programbox2
@@ -0,0 +1,19 @@
+#!/bin/sh
+# $Id: programbox2,v 1.1 2011/03/02 01:25:31 tom Exp $
+
+. ./setup-vars
+
+. ./setup-tempfile
+
+ls -1 >$tempfile
+(
+while true
+do
+read text
+test -z "$text" && break
+ls -ld "$text"
+sleep 0.1
+done <$tempfile
+) |
+
+$DIALOG --title "PROGRAMBOX" "$@" --programbox "ProgramBox" 20 70
diff --git a/contrib/dialog/samples/progress b/contrib/dialog/samples/progress
new file mode 100755
index 0000000..6ad45d8
--- /dev/null
+++ b/contrib/dialog/samples/progress
@@ -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
diff --git a/contrib/dialog/samples/progress2 b/contrib/dialog/samples/progress2
new file mode 100755
index 0000000..564433b
--- /dev/null
+++ b/contrib/dialog/samples/progress2
@@ -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
diff --git a/contrib/dialog/samples/radiolist b/contrib/dialog/samples/radiolist
new file mode 100755
index 0000000..602ad82
--- /dev/null
+++ b/contrib/dialog/samples/radiolist
@@ -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
diff --git a/contrib/dialog/samples/radiolist1 b/contrib/dialog/samples/radiolist1
new file mode 100755
index 0000000..77defa5
--- /dev/null
+++ b/contrib/dialog/samples/radiolist1
@@ -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
diff --git a/contrib/dialog/samples/radiolist10 b/contrib/dialog/samples/radiolist10
new file mode 100755
index 0000000..2953871
--- /dev/null
+++ b/contrib/dialog/samples/radiolist10
@@ -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
diff --git a/contrib/dialog/samples/radiolist2 b/contrib/dialog/samples/radiolist2
new file mode 100755
index 0000000..e2965ea
--- /dev/null
+++ b/contrib/dialog/samples/radiolist2
@@ -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
diff --git a/contrib/dialog/samples/radiolist3 b/contrib/dialog/samples/radiolist3
new file mode 100755
index 0000000..6c695e7
--- /dev/null
+++ b/contrib/dialog/samples/radiolist3
@@ -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
diff --git a/contrib/dialog/samples/radiolist4 b/contrib/dialog/samples/radiolist4
new file mode 100755
index 0000000..67d920f
--- /dev/null
+++ b/contrib/dialog/samples/radiolist4
@@ -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
diff --git a/contrib/dialog/samples/rangebox b/contrib/dialog/samples/rangebox
new file mode 100755
index 0000000..d864026
--- /dev/null
+++ b/contrib/dialog/samples/rangebox
@@ -0,0 +1,11 @@
+#!/bin/sh
+# $Id: rangebox,v 1.3 2012/12/05 10:07:54 tom Exp $
+
+. ./setup-vars
+
+exec 3>&1
+RESULT=`$DIALOG --title "RANGE BOX" --rangebox "Please set the volume..." 0 60 0 123 5 2>&1 1>&3`
+retval=$?
+exec 3>&-
+
+. ./report-string
diff --git a/contrib/dialog/samples/rangebox2 b/contrib/dialog/samples/rangebox2
new file mode 100755
index 0000000..f67f02b
--- /dev/null
+++ b/contrib/dialog/samples/rangebox2
@@ -0,0 +1,11 @@
+#!/bin/sh
+# $Id: rangebox2,v 1.1 2012/12/05 10:28:58 tom Exp $
+
+. ./setup-vars
+
+exec 3>&1
+RESULT=`$DIALOG --title "RANGE BOX" --rangebox "Please set the volume..." 0 60 0 6 5 2>&1 1>&3`
+retval=$?
+exec 3>&-
+
+. ./report-string
diff --git a/contrib/dialog/samples/rangebox3 b/contrib/dialog/samples/rangebox3
new file mode 100755
index 0000000..19dad64
--- /dev/null
+++ b/contrib/dialog/samples/rangebox3
@@ -0,0 +1,11 @@
+#!/bin/sh
+# $Id: rangebox3,v 1.1 2012/12/05 10:19:42 tom Exp $
+
+. ./setup-vars
+
+exec 3>&1
+RESULT=`$DIALOG --title "RANGE BOX" --rangebox "Please set the volume..." 0 60 -48 55 5 2>&1 1>&3`
+retval=$?
+exec 3>&-
+
+. ./report-string
diff --git a/contrib/dialog/samples/rangebox4 b/contrib/dialog/samples/rangebox4
new file mode 100755
index 0000000..b8b68c2
--- /dev/null
+++ b/contrib/dialog/samples/rangebox4
@@ -0,0 +1,11 @@
+#!/bin/sh
+# $Id: rangebox4,v 1.1 2012/12/05 11:54:04 tom Exp $
+
+. ./setup-vars
+
+exec 3>&1
+RESULT=`$DIALOG --title "RANGE BOX" --rangebox "Please set the volume..." 0 60 10 100 5 2>&1 1>&3`
+retval=$?
+exec 3>&-
+
+. ./report-string
diff --git a/contrib/dialog/samples/report-button b/contrib/dialog/samples/report-button
new file mode 100644
index 0000000..c6a1730
--- /dev/null
+++ b/contrib/dialog/samples/report-button
@@ -0,0 +1,21 @@
+#!/bin/sh
+# $Id: report-button,v 1.3 2012/06/29 09:29:36 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
diff --git a/contrib/dialog/samples/report-edit b/contrib/dialog/samples/report-edit
new file mode 100644
index 0000000..37e3eb0
--- /dev/null
+++ b/contrib/dialog/samples/report-edit
@@ -0,0 +1,23 @@
+#!/bin/sh
+# $Id: report-edit,v 1.4 2012/06/29 09:29:41 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
diff --git a/contrib/dialog/samples/report-string b/contrib/dialog/samples/report-string
new file mode 100644
index 0000000..dc96c2f
--- /dev/null
+++ b/contrib/dialog/samples/report-string
@@ -0,0 +1,24 @@
+#!/bin/sh
+# $Id: report-string,v 1.3 2012/06/29 09:32:17 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
diff --git a/contrib/dialog/samples/report-tempfile b/contrib/dialog/samples/report-tempfile
new file mode 100644
index 0000000..4c5f099
--- /dev/null
+++ b/contrib/dialog/samples/report-tempfile
@@ -0,0 +1,24 @@
+#!/bin/sh
+# $Id: report-tempfile,v 1.5 2013/09/02 18:03:13 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: `cat $tempfile`";;
+ $DIALOG_EXTRA)
+ echo "Extra button pressed.";;
+ $DIALOG_ITEM_HELP)
+ echo "Item-help button pressed: `cat $tempfile`";;
+ $DIALOG_ESC)
+ if test -s $tempfile ; then
+ cat $tempfile
+ else
+ echo "ESC pressed."
+ fi
+ ;;
+esac
diff --git a/contrib/dialog/samples/report-yesno b/contrib/dialog/samples/report-yesno
new file mode 100644
index 0000000..d22ebe4
--- /dev/null
+++ b/contrib/dialog/samples/report-yesno
@@ -0,0 +1,21 @@
+#!/bin/sh
+# $Id: report-yesno,v 1.2 2012/06/29 09:32:12 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
diff --git a/contrib/dialog/samples/rotated-data b/contrib/dialog/samples/rotated-data
new file mode 100755
index 0000000..dc40714
--- /dev/null
+++ b/contrib/dialog/samples/rotated-data
@@ -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
diff --git a/contrib/dialog/samples/setup-edit b/contrib/dialog/samples/setup-edit
new file mode 100644
index 0000000..8f9d284
--- /dev/null
+++ b/contrib/dialog/samples/setup-edit
@@ -0,0 +1,7 @@
+#!/bin/sh
+# $Id: setup-edit,v 1.2 2012/06/29 09:31:49 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" $SIG_NONE $SIG_HUP $SIG_INT $SIG_TRAP $SIG_TERM
diff --git a/contrib/dialog/samples/setup-tempfile b/contrib/dialog/samples/setup-tempfile
new file mode 100644
index 0000000..3a67ea6
--- /dev/null
+++ b/contrib/dialog/samples/setup-tempfile
@@ -0,0 +1,6 @@
+#!/bin/sh
+# $Id: setup-tempfile,v 1.3 2012/07/06 17:51:56 tom Exp $
+# vile:shmode
+
+tempfile=`(tempfile) 2>/dev/null` || tempfile=/tmp/test$$
+trap "rm -f $tempfile" 0 $SIG_NONE $SIG_HUP $SIG_INT $SIG_TRAP $SIG_TERM
diff --git a/contrib/dialog/samples/setup-utf8 b/contrib/dialog/samples/setup-utf8
new file mode 100644
index 0000000..07cff39
--- /dev/null
+++ b/contrib/dialog/samples/setup-utf8
@@ -0,0 +1,12 @@
+#!/bin/sh
+# $Id: setup-utf8,v 1.2 2012/06/29 09:50:32 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
diff --git a/contrib/dialog/samples/setup-vars b/contrib/dialog/samples/setup-vars
new file mode 100644
index 0000000..f0ea779
--- /dev/null
+++ b/contrib/dialog/samples/setup-vars
@@ -0,0 +1,23 @@
+#!/bin/sh
+# $Id: setup-vars,v 1.3 2012/06/29 09:52:26 tom Exp $
+# vile:shmode
+
+# These symbols are defined to use in the sample shell scripts to make them
+# more readable. But they are (intentionally) not exported. If they were
+# exported, they would also be visible in the dialog program (a subprocess).
+
+: ${DIALOG=dialog}
+
+: ${DIALOG_OK=0}
+: ${DIALOG_CANCEL=1}
+: ${DIALOG_HELP=2}
+: ${DIALOG_EXTRA=3}
+: ${DIALOG_ITEM_HELP=4}
+: ${DIALOG_ESC=255}
+
+: ${SIG_NONE=0}
+: ${SIG_HUP=1}
+: ${SIG_INT=2}
+: ${SIG_QUIT=3}
+: ${SIG_KILL=9}
+: ${SIG_TERM=15}
diff --git a/contrib/dialog/samples/shortlist b/contrib/dialog/samples/shortlist
new file mode 100755
index 0000000..bda8b4e
--- /dev/null
+++ b/contrib/dialog/samples/shortlist
@@ -0,0 +1,19 @@
+#!/bin/sh
+# $Id: shortlist,v 1.2 2011/03/02 00:11:50 tom Exp $
+# make a short listing, which writes to both stdout and stderr.
+
+if test $# != 0
+then
+ count=$1
+else
+ count=10
+fi
+
+while test $count != 0
+do
+ echo "** $count -- `date`"
+ w >&2
+ sleep 1
+ count=`expr $count - 1 2>/dev/null`
+ test -z "$count" && count=0
+done
diff --git a/contrib/dialog/samples/slackware.rc b/contrib/dialog/samples/slackware.rc
new file mode 100644
index 0000000..82f1ee8
--- /dev/null
+++ b/contrib/dialog/samples/slackware.rc
@@ -0,0 +1,142 @@
+# $Id: slackware.rc,v 1.10 2012/12/01 00:36:55 tom Exp $
+# vile:confmode
+# 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 = dialog_color
+
+# Active button key color
+button_key_active_color = button_active_color
+
+# Inactive button key color
+button_key_inactive_color = (RED,CYAN,OFF)
+
+# Active button label color
+button_label_active_color = button_active_color
+
+# 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 = border_color
+
+# Search box color
+searchbox_color = (YELLOW,WHITE,ON)
+
+# Search box title color
+searchbox_title_color = (WHITE,WHITE,ON)
+
+# Search box border color
+searchbox_border_color = (RED,WHITE,OFF)
+
+# File position indicator color
+position_indicator_color = button_key_inactive_color
+
+# Menu box color
+menubox_color = dialog_color
+
+# Menu box border color
+menubox_border_color = border_color
+
+# Item color
+item_color = dialog_color
+
+# Selected item color
+item_selected_color = screen_color
+
+# Tag color
+tag_color = title_color
+
+# Selected tag color
+tag_selected_color = screen_color
+
+# Tag key color
+tag_key_color = button_key_inactive_color
+
+# Selected tag key color
+tag_key_selected_color = (RED,BLUE,ON)
+
+# Check box color
+check_color = dialog_color
+
+# Selected check box color
+check_selected_color = (WHITE,CYAN,ON)
+
+# Up arrow color
+uarrow_color = (GREEN,CYAN,ON)
+
+# Down arrow color
+darrow_color = uarrow_color
+
+# Item help-text color
+itemhelp_color = shadow_color
+
+# Active form text color
+form_active_text_color = inputbox_color
+
+# Form text color
+form_text_color = (CYAN,BLUE,ON)
+
+# Readonly form item color
+form_item_readonly_color = (CYAN,WHITE,ON)
+
+# Dialog box gauge color
+gauge_color = (BLUE,WHITE,ON)
+
+# Dialog box border2 color
+border2_color = dialog_color
+
+# Input box border2 color
+inputbox_border2_color = border2_color
+
+# Search box border2 color
+searchbox_border2_color = border2_color
+
+# Menu box border2 color
+menubox_border2_color = border2_color
diff --git a/contrib/dialog/samples/sourcemage.rc b/contrib/dialog/samples/sourcemage.rc
new file mode 100644
index 0000000..9384798
--- /dev/null
+++ b/contrib/dialog/samples/sourcemage.rc
@@ -0,0 +1,142 @@
+# $Id: sourcemage.rc,v 1.6 2011/10/15 01:00:41 tom Exp $
+# vile:confmode
+# 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 = dialog_color
+
+# Active button key color
+button_key_active_color = button_active_color
+
+# 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 = dialog_color
+
+# Input box border color
+inputbox_border_color = dialog_color
+
+# Search box color
+searchbox_color = dialog_color
+
+# Search box title color
+searchbox_title_color = title_color
+
+# Search box border color
+searchbox_border_color = border_color
+
+# File position indicator color
+position_indicator_color = title_color
+
+# Menu box color
+menubox_color = dialog_color
+
+# Menu box border color
+menubox_border_color = border_color
+
+# Item color
+item_color = dialog_color
+
+# Selected item color
+item_selected_color = button_active_color
+
+# Tag color
+tag_color = title_color
+
+# Selected tag color
+tag_selected_color = button_label_active_color
+
+# Tag key color
+tag_key_color = title_color
+
+# Selected tag key color
+tag_key_selected_color = button_active_color
+
+# Check box color
+check_color = dialog_color
+
+# Selected check box color
+check_selected_color = button_active_color
+
+# Up arrow color
+uarrow_color = title_color
+
+# Down arrow color
+darrow_color = title_color
+
+# Item help-text color
+itemhelp_color = (WHITE,BLACK,OFF)
+
+# Active form text color
+form_active_text_color = dialog_color
+
+# Form text color
+form_text_color = screen_color
+
+# Readonly form item color
+form_item_readonly_color = (CYAN,WHITE,ON)
+
+# Dialog box gauge color
+gauge_color = (BLUE,WHITE,ON)
+
+# Dialog box border2 color
+border2_color = dialog_color
+
+# Input box border2 color
+inputbox_border2_color = dialog_color
+
+# Search box border2 color
+searchbox_border2_color = dialog_color
+
+# Menu box border2 color
+menubox_border2_color = dialog_color
diff --git a/contrib/dialog/samples/suse.rc b/contrib/dialog/samples/suse.rc
new file mode 100644
index 0000000..c8ff099
--- /dev/null
+++ b/contrib/dialog/samples/suse.rc
@@ -0,0 +1,142 @@
+# $Id: suse.rc,v 1.5 2011/10/15 01:01:00 tom Exp $
+# vile:confmode
+# 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 = dialog_color
+
+# Active button key color
+button_key_active_color = button_active_color
+
+# 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 = dialog_color
+
+# Input box border color
+inputbox_border_color = dialog_color
+
+# Search box color
+searchbox_color = dialog_color
+
+# Search box title color
+searchbox_title_color = title_color
+
+# Search box border color
+searchbox_border_color = border_color
+
+# File position indicator color
+position_indicator_color = title_color
+
+# Menu box color
+menubox_color = dialog_color
+
+# Menu box border color
+menubox_border_color = border_color
+
+# Item color
+item_color = dialog_color
+
+# Selected item color
+item_selected_color = button_active_color
+
+# Tag color
+tag_color = title_color
+
+# Selected tag color
+tag_selected_color = button_label_active_color
+
+# Tag key color
+tag_key_color = button_key_inactive_color
+
+# Selected tag key color
+tag_key_selected_color = (RED,BLUE,ON)
+
+# Check box color
+check_color = dialog_color
+
+# Selected check box color
+check_selected_color = button_active_color
+
+# Up arrow color
+uarrow_color = (GREEN,WHITE,ON)
+
+# Down arrow color
+darrow_color = uarrow_color
+
+# Item help-text color
+itemhelp_color = (WHITE,BLACK,OFF)
+
+# Active form text color
+form_active_text_color = button_active_color
+
+# Form text color
+form_text_color = (WHITE,CYAN,ON)
+
+# Readonly form item color
+form_item_readonly_color = (CYAN,WHITE,ON)
+
+# Dialog box gauge color
+gauge_color = (BLUE,WHITE,ON)
+
+# Dialog box border2 color
+border2_color = dialog_color
+
+# Input box border2 color
+inputbox_border2_color = dialog_color
+
+# Search box border2 color
+searchbox_border2_color = dialog_color
+
+# Menu box border2 color
+menubox_border2_color = dialog_color
diff --git a/contrib/dialog/samples/tailbox b/contrib/dialog/samples/tailbox
new file mode 100755
index 0000000..227104e
--- /dev/null
+++ b/contrib/dialog/samples/tailbox
@@ -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
diff --git a/contrib/dialog/samples/tailboxbg b/contrib/dialog/samples/tailboxbg
new file mode 100755
index 0000000..bcc3434
--- /dev/null
+++ b/contrib/dialog/samples/tailboxbg
@@ -0,0 +1,22 @@
+#!/bin/sh
+# $Id: tailboxbg,v 1.10 2012/06/29 09:48:28 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 -$SIG_QUIT `cat $tempfile` 2>&1 >/dev/null 2>/dev/null
+
+# ...and the process that is making the listing
+./killall listing
diff --git a/contrib/dialog/samples/tailboxbg1 b/contrib/dialog/samples/tailboxbg1
new file mode 100755
index 0000000..f04567a
--- /dev/null
+++ b/contrib/dialog/samples/tailboxbg1
@@ -0,0 +1,32 @@
+#!/bin/sh
+# $Id: tailboxbg1,v 1.10 2012/06/29 09:51:46 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 -$SIG_QUIT $pid 2>&1 >/dev/null 2>/dev/null
+echo "killed [$pid]"
+fi
+
+# ...and the process that is making the listing
+./killall listing
diff --git a/contrib/dialog/samples/tailboxbg2 b/contrib/dialog/samples/tailboxbg2
new file mode 100755
index 0000000..628cb05
--- /dev/null
+++ b/contrib/dialog/samples/tailboxbg2
@@ -0,0 +1,33 @@
+#!/bin/sh
+# $Id: tailboxbg2,v 1.10 2012/06/29 09:51:11 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 -$SIG_QUIT $pid 2>&1 >/dev/null 2>/dev/null
+echo "killed [$pid]"
+fi
+
+# ...and the process that is making the listing
+./killall listing
diff --git a/contrib/dialog/samples/testdata-8bit b/contrib/dialog/samples/testdata-8bit
new file mode 100755
index 0000000..f09021d
--- /dev/null
+++ b/contrib/dialog/samples/testdata-8bit
@@ -0,0 +1,48 @@
+#!/bin/sh
+# $Id: testdata-8bit,v 1.2 2011/10/16 23:26:32 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
+
+# This script is source'd from other scripts, and uses the parameter list from
+# those explicitly. But they may use the parameter list later, to set options
+# specially for dialog. Work around the conflicting uses by removing the
+# parameter which we just used to select a set of data.
+if test $# != 0
+then
+ shift 1
+fi
diff --git a/contrib/dialog/samples/textbox b/contrib/dialog/samples/textbox
new file mode 100755
index 0000000..d3c7698
--- /dev/null
+++ b/contrib/dialog/samples/textbox
@@ -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
diff --git a/contrib/dialog/samples/textbox-both b/contrib/dialog/samples/textbox-both
new file mode 100755
index 0000000..7875153
--- /dev/null
+++ b/contrib/dialog/samples/textbox-both
@@ -0,0 +1,21 @@
+#!/bin/sh
+# $Id: textbox-both,v 1.1 2011/01/18 09:59:47 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" \
+ --help-button \
+ --extra-button "$@" \
+ --textbox "$tempfile" 22 77
+
+retval=$?
+
+. ./report-button
diff --git a/contrib/dialog/samples/textbox-help b/contrib/dialog/samples/textbox-help
new file mode 100755
index 0000000..cb30253
--- /dev/null
+++ b/contrib/dialog/samples/textbox-help
@@ -0,0 +1,20 @@
+#!/bin/sh
+# $Id: textbox-help,v 1.1 2011/01/18 09:59:20 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" \
+ --help-button "$@" \
+ --textbox "$tempfile" 22 77
+
+retval=$?
+
+. ./report-button
diff --git a/contrib/dialog/samples/textbox.txt b/contrib/dialog/samples/textbox.txt
new file mode 100644
index 0000000..3aaec0f
--- /dev/null
+++ b/contrib/dialog/samples/textbox.txt
@@ -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:
+
+
diff --git a/contrib/dialog/samples/textbox2 b/contrib/dialog/samples/textbox2
new file mode 100755
index 0000000..7c97de8
--- /dev/null
+++ b/contrib/dialog/samples/textbox2
@@ -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
diff --git a/contrib/dialog/samples/textbox3 b/contrib/dialog/samples/textbox3
new file mode 100755
index 0000000..2c076e9
--- /dev/null
+++ b/contrib/dialog/samples/textbox3
@@ -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
diff --git a/contrib/dialog/samples/timebox b/contrib/dialog/samples/timebox
new file mode 100755
index 0000000..cb6bf5c
--- /dev/null
+++ b/contrib/dialog/samples/timebox
@@ -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
diff --git a/contrib/dialog/samples/timebox-stdout b/contrib/dialog/samples/timebox-stdout
new file mode 100755
index 0000000..10a0026
--- /dev/null
+++ b/contrib/dialog/samples/timebox-stdout
@@ -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
diff --git a/contrib/dialog/samples/timebox2 b/contrib/dialog/samples/timebox2
new file mode 100755
index 0000000..088acdf
--- /dev/null
+++ b/contrib/dialog/samples/timebox2
@@ -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
diff --git a/contrib/dialog/samples/timebox2-stdout b/contrib/dialog/samples/timebox2-stdout
new file mode 100755
index 0000000..922921f
--- /dev/null
+++ b/contrib/dialog/samples/timebox2-stdout
@@ -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
diff --git a/contrib/dialog/samples/treeview b/contrib/dialog/samples/treeview
new file mode 100755
index 0000000..3421218
--- /dev/null
+++ b/contrib/dialog/samples/treeview
@@ -0,0 +1,22 @@
+#!/bin/sh
+# $Id: treeview,v 1.2 2012/12/04 10:53:09 tom Exp $
+
+. ./setup-vars
+
+. ./setup-tempfile
+
+$DIALOG --title "TREE VIEW DIALOG" \
+ --treeview "TreeView demo" 0 0 0 \
+ tag1 one off 0 \
+ tag2 two off 1 \
+ tag3 three on 2 \
+ tag4 four off 1 \
+ tag5 five off 2 \
+ tag6 six off 3 \
+ tag7 seven off 3 \
+ tag8 eight off 4 \
+ tag9 nine off 1 2> $tempfile
+
+retval=$?
+
+. ./report-tempfile
diff --git a/contrib/dialog/samples/treeview2 b/contrib/dialog/samples/treeview2
new file mode 100755
index 0000000..b3dde41
--- /dev/null
+++ b/contrib/dialog/samples/treeview2
@@ -0,0 +1,52 @@
+#!/bin/sh
+# $Id: treeview2,v 1.3 2012/12/23 22:28:00 tom Exp $
+
+. ./setup-vars
+
+. ./setup-edit
+
+case "x$DIALOGOPTS" in
+*--no-items*|*--noitem*)
+ CUT="cut -d: -f1,3,4"
+ ;;
+*)
+ CUT="cat"
+ ;;
+esac
+
+$CUT >$input <<-EOF
+ tag1:one:off:0
+ tag2:two:off:1
+ tag3:three:on:2
+ tag4:four:off:1
+ tag5:five:off:2
+ tag6:six:off:3
+ tag7:seven:off:3
+ tag8:eight:off:4
+ tag11:1one:off:0
+ tag12:1two:off:1
+ tag13:1three:on:2
+ tag14:1four:off:1
+ tag15:1five:off:2
+ tag16:1six:off:3
+ tag17:1seven:off:3
+ tag18:1eight:off:4
+ tag21:2one:off:0
+ tag22:2two:off:1
+ tag23:2three:on:2
+ tag24:2four:off:1
+ tag25:2five:off:2
+ tag26:2six:off:3
+ tag27:2seven:off:3
+ tag28:2eight:off:4
+ tag9:nine:off:1
+EOF
+
+$DIALOG --title "TREE VIEW DIALOG" \
+ --scrollbar \
+ --treeview "TreeView demo" 0 0 10 `cat $input | sed -e 's/:/ /g'` 2> $output
+
+retval=$?
+
+tempfile=$output
+. ./report-tempfile
diff --git a/contrib/dialog/samples/wheel b/contrib/dialog/samples/wheel
new file mode 100755
index 0000000..4adef26
--- /dev/null
+++ b/contrib/dialog/samples/wheel
@@ -0,0 +1,64 @@
+#!/bin/sh
+# $Id: wheel,v 1.8 2012/06/29 09:59:40 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() {
+ expr $1 \* $COLS / 132
+}
+scaley() {
+ expr $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
diff --git a/contrib/dialog/samples/whiptail.rc b/contrib/dialog/samples/whiptail.rc
new file mode 100644
index 0000000..81ad653
--- /dev/null
+++ b/contrib/dialog/samples/whiptail.rc
@@ -0,0 +1,142 @@
+# $Id: whiptail.rc,v 1.6 2012/12/01 01:15:04 tom Exp $
+# vile:confmode
+# Run-time configuration file for dialog, matches whiptail's 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 = 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 = dialog_color
+
+# Active button key color
+button_key_active_color = button_active_color
+
+# Inactive button key color
+button_key_inactive_color = dialog_color
+
+# Active button label color
+button_label_active_color = button_active_color
+
+# Inactive button label color
+button_label_inactive_color = (BLACK,WHITE,ON)
+
+# Input box color
+inputbox_color = dialog_color
+
+# Input box border color
+inputbox_border_color = dialog_color
+
+# Search box color
+searchbox_color = dialog_color
+
+# Search box title color
+searchbox_title_color = title_color
+
+# Search box border color
+searchbox_border_color = border_color
+
+# File position indicator color
+position_indicator_color = title_color
+
+# Menu box color
+menubox_color = (YELLOW,BLUE,OFF)
+
+# Menu box border color
+menubox_border_color = screen_color
+
+# Item color
+item_color = menubox_color
+
+# Selected item color
+item_selected_color = screen_color
+
+# Tag color
+tag_color = screen_color
+
+# Selected tag color
+tag_selected_color = screen_color
+
+# Tag key color
+tag_key_color = menubox_color
+
+# Selected tag key color
+tag_key_selected_color = (WHITE,BLUE,ON)
+
+# Check box color
+check_color = menubox_color
+
+# Selected check box color
+check_selected_color = screen_color
+
+# Up arrow color
+uarrow_color = screen_color
+
+# Down arrow color
+darrow_color = screen_color
+
+# Item help-text color
+itemhelp_color = (WHITE,BLACK,OFF)
+
+# Active form text color
+form_active_text_color = tag_key_selected_color
+
+# Form text color
+form_text_color = (WHITE,CYAN,ON)
+
+# Readonly form item color
+form_item_readonly_color = (CYAN,WHITE,ON)
+
+# Dialog box gauge color
+gauge_color = (BLUE,WHITE,ON)
+
+# Dialog box border2 color
+border2_color = dialog_color
+
+# Input box border2 color
+inputbox_border2_color = dialog_color
+
+# Search box border2 color
+searchbox_border2_color = dialog_color
+
+# Menu box border2 color
+menubox_border2_color = screen_color
diff --git a/contrib/dialog/samples/with-dquotes b/contrib/dialog/samples/with-dquotes
new file mode 100755
index 0000000..604f51b
--- /dev/null
+++ b/contrib/dialog/samples/with-dquotes
@@ -0,0 +1,3 @@
+#!/bin/sh
+# $Id: with-dquotes,v 1.1 2012/07/03 09:40:19 tom Exp $
+DIALOGOPTS="$DIALOGOPTS --quoted" "$@"
diff --git a/contrib/dialog/samples/with-squotes b/contrib/dialog/samples/with-squotes
new file mode 100755
index 0000000..6a08f9f
--- /dev/null
+++ b/contrib/dialog/samples/with-squotes
@@ -0,0 +1,3 @@
+#!/bin/sh
+# $Id: with-squotes,v 1.1 2012/07/03 09:40:29 tom Exp $
+DIALOGOPTS="$DIALOGOPTS --single-quoted" "$@"
diff --git a/contrib/dialog/samples/yesno b/contrib/dialog/samples/yesno
new file mode 100755
index 0000000..fa1ea44
--- /dev/null
+++ b/contrib/dialog/samples/yesno
@@ -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
diff --git a/contrib/dialog/samples/yesno-both b/contrib/dialog/samples/yesno-both
new file mode 100755
index 0000000..a408bdb
--- /dev/null
+++ b/contrib/dialog/samples/yesno-both
@@ -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
diff --git a/contrib/dialog/samples/yesno-extra b/contrib/dialog/samples/yesno-extra
new file mode 100755
index 0000000..ce31b81
--- /dev/null
+++ b/contrib/dialog/samples/yesno-extra
@@ -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
diff --git a/contrib/dialog/samples/yesno-help b/contrib/dialog/samples/yesno-help
new file mode 100755
index 0000000..1333f1c
--- /dev/null
+++ b/contrib/dialog/samples/yesno-help
@@ -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
diff --git a/contrib/dialog/samples/yesno-utf8 b/contrib/dialog/samples/yesno-utf8
new file mode 100755
index 0000000..4a6be30
--- /dev/null
+++ b/contrib/dialog/samples/yesno-utf8
@@ -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
diff --git a/contrib/dialog/samples/yesno2 b/contrib/dialog/samples/yesno2
new file mode 100755
index 0000000..d022352
--- /dev/null
+++ b/contrib/dialog/samples/yesno2
@@ -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
diff --git a/contrib/dialog/samples/yesno3 b/contrib/dialog/samples/yesno3
new file mode 100755
index 0000000..f67fb85
--- /dev/null
+++ b/contrib/dialog/samples/yesno3
@@ -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
diff --git a/contrib/dialog/samples/yesno4 b/contrib/dialog/samples/yesno4
new file mode 100755
index 0000000..99f65e8
--- /dev/null
+++ b/contrib/dialog/samples/yesno4
@@ -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
diff --git a/contrib/dialog/tailbox.c b/contrib/dialog/tailbox.c
new file mode 100644
index 0000000..bbb14c0
--- /dev/null
+++ b/contrib/dialog/tailbox.c
@@ -0,0 +1,401 @@
+/*
+ * $Id: tailbox.c,v 1.68 2012/11/18 15:48:52 tom Exp $
+ *
+ * tailbox.c -- implements the tail box
+ *
+ * Copyright 2000-2011,2012 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>
+#include <sys/stat.h>
+
+typedef struct {
+ DIALOG_CALLBACK obj;
+ WINDOW *text;
+ const char **buttons;
+ int hscroll;
+ int old_hscroll;
+ char line[MAX_LEN + 2];
+ off_t last_pos;
+} 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);
+ (void) y;
+ /* 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;
+ size_t inx;
+ int count = 0;
+ char buf[BUFSIZ + 1];
+ size_t size_to_read;
+ size_t size_as_read;
+ long offset = 0;
+ long fpos = 0;
+
+ if (fseek(fp, 0L, 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 = (size_t) fpos;
+ }
+ fpos = fpos - (long) size_to_read;
+ if (fseek(fp, fpos, SEEK_SET) == -1)
+ dlg_exiterr("Error moving file pointer in last_lines().");
+ size_as_read = fread(buf, sizeof(char), size_to_read, fp);
+ if (ferror(fp))
+ dlg_exiterr("Error reading file in last_lines().");
+
+ if (size_as_read == 0) {
+ fpos = 0;
+ offset = 0;
+ break;
+ }
+
+ offset += (long) size_as_read;
+ for (inx = size_as_read - 1; inx != 0; --inx) {
+ if (buf[inx] == '\n') {
+ if (++count > target)
+ break;
+ offset = (long) (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)
+{
+ FILE *fp = obj->obj.input;
+ int cur_y, cur_x;
+
+ getyx(obj->obj.win, cur_y, cur_x);
+ obj->old_hscroll = obj->hscroll;
+
+ print_last_page(obj);
+ obj->last_pos = ftell(fp);
+
+ (void) wmove(obj->obj.win, cur_y, cur_x); /* Restore cursor position */
+ wrefresh(obj->obj.win);
+}
+
+static bool
+handle_input(DIALOG_CALLBACK * cb)
+{
+ MY_OBJ *obj = (MY_OBJ *) cb;
+ FILE *fp = obj->obj.input;
+ struct stat sb;
+
+ if (fstat(fileno(fp), &sb) == 0
+ && sb.st_size != obj->last_pos) {
+ repaint_text(obj);
+ }
+
+ return TRUE;
+}
+
+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) {
+ handle_input(cb);
+ }
+ 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[] = {
+ HELPKEY_BINDINGS,
+ 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_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr);
+ dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr);
+ dlg_draw_title(dialog, title);
+ dlg_draw_helpline(dialog, FALSE);
+
+ 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.handle_input = bg_task ? handle_input : 0;
+ 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);
+
+ dlg_trace_win(dialog);
+ 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;
+}
diff --git a/contrib/dialog/textbox.c b/contrib/dialog/textbox.c
new file mode 100644
index 0000000..6398f03
--- /dev/null
+++ b/contrib/dialog/textbox.c
@@ -0,0 +1,978 @@
+/*
+ * $Id: textbox.c,v 1.110 2012/12/01 01:48:08 tom Exp $
+ *
+ * textbox.c -- implements the text box
+ *
+ * Copyright 2000-2011,2012 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) {
+ default:
+ 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, 0L, SEEK_CUR);
+}
+
+static void
+lseek_set(MY_OBJ * obj, long offset)
+{
+ long actual = lseek_obj(obj, offset, SEEK_SET);
+
+ if (actual != offset) {
+ dlg_exiterr("Cannot set file position to %ld (actual %ld)\n",
+ offset, actual);
+ }
+}
+
+static void
+lseek_end(MY_OBJ * obj, long offset)
+{
+ long actual = lseek_obj(obj, offset, SEEK_END);
+
+ if (actual > offset) {
+ obj->file_size = actual;
+ }
+}
+
+static void
+lseek_cur(MY_OBJ * obj, long offset)
+{
+ long actual = lseek_obj(obj, offset, SEEK_CUR);
+
+ if (actual != offset) {
+ dlg_trace_msg("Lseek returned %ld, expected %ld\n", actual, offset);
+ }
+}
+
+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_set(obj, fpos - obj->fd_bytes_read);
+
+ /* 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_set(obj, fpos);
+ 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_set(obj, 0L);
+ val_to_tabize = fpos - obj->fd_bytes_read;
+ } else { /* Move backward BUF_SIZE/2 bytes */
+ lseek_cur(obj, -(BUF_SIZE / 2 + obj->fd_bytes_read));
+ 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_set(obj, 0L);
+ val_to_tabize = fpos - obj->fd_bytes_read;
+ } else { /* Move backward BUF_SIZE/2 bytes */
+ lseek_cur(obj, -(BUF_SIZE / 2 + obj->fd_bytes_read));
+ 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);
+ dlg_trace_win(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,
+ HELPKEY_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;
+ const 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_box2(widget, 0, 0, box_height, box_width,
+ searchbox_attr,
+ searchbox_border_attr,
+ searchbox_border2_attr);
+ (void) 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_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 */
+ (void) 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));
+ 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, 2L);
+ }
+ }
+ if (found == FALSE) { /* not found */
+ (void) beep();
+ /* Restore program state to that before searching */
+ lseek_set(obj, fpos);
+
+ 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, 1L);
+ }
+ /* Reprint page */
+ (void) 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[] = {
+ HELPKEY_BINDINGS,
+ 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 = dlg_default_button();
+ 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 */
+ lseek_end(&obj, 0L);
+
+ /* Restore file pointer to beginning of file after getting file size */
+ lseek_set(&obj, 0L);
+
+ 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_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr);
+ dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr);
+ 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:
+ if (dialog_vars.nook)
+ result = DLG_EXIT_OK;
+ else
+ 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_set(&obj, 0L);
+
+ 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_end(&obj, -BUF_SIZE);
+
+ read_high(&obj, BUF_SIZE);
+ }
+ obj.in_buf = obj.bytes_read;
+ back_lines(&obj, (long) 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);
+ /* 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;
+}
diff --git a/contrib/dialog/timebox.c b/contrib/dialog/timebox.c
new file mode 100644
index 0000000..38abeec
--- /dev/null
+++ b/contrib/dialog/timebox.c
@@ -0,0 +1,418 @@
+/*
+ * $Id: timebox.c,v 1.54 2013/03/17 15:03:41 tom Exp $
+ *
+ * timebox.c -- implements the timebox dialog
+ *
+ * Copyright 2001-2012,2013 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 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_border2_attr);
+
+ (void) 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)
+{
+ (void) 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 ),
+ HELPKEY_BINDINGS,
+ 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_default_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));
+
+ if (hour >= 24 || minute >= 60 || second >= 60) {
+ return CleanupResult(DLG_EXIT_ERROR, dialog, prompt, &save_vars);
+ }
+
+ dlg_register_window(dialog, "timebox", binding);
+ dlg_register_buttons(dialog, "timebox", buttons);
+
+ dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr);
+ dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr);
+ dlg_draw_title(dialog, title);
+ dlg_draw_helpline(dialog, FALSE);
+
+ (void) 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);
+ }
+
+ dlg_trace_win(dialog);
+ 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('H'):
+ state = sHR;
+ break;
+ case DLGK_MOUSE('M'):
+ state = sMN;
+ break;
+ case DLGK_MOUSE('S'):
+ state = sSC;
+ break;
+ case DLGK_ENTER:
+ result = dlg_ok_buttoncode(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 (is_DLGK_MOUSE(key)) {
+ result = dlg_ok_buttoncode(key - M_EVENT);
+ if (result < 0)
+ result = DLG_EXIT_OK;
+ } else 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();
+ dlg_add_last_key(-1);
+
+ return CleanupResult(result, dialog, prompt, &save_vars);
+}
diff --git a/contrib/dialog/trace.c b/contrib/dialog/trace.c
new file mode 100644
index 0000000..50ccfac
--- /dev/null
+++ b/contrib/dialog/trace.c
@@ -0,0 +1,230 @@
+/*
+ * $Id: trace.c,v 1.20 2011/10/18 10:47:26 tom Exp $
+ *
+ * trace.c -- implements screen-dump and keystroke-logging
+ *
+ * Copyright 2007-2010,2011 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
+
+#ifdef NEED_WCHAR_H
+#include <wchar.h>
+#endif
+
+#include <dlg_keys.h>
+#include <time.h>
+
+#define myFP dialog_state.trace_output
+
+static void
+dlg_trace_time(const char *tag)
+{
+ time_t now = time((time_t *) 0);
+ fprintf(myFP, "%s %s", tag, ctime(&now));
+}
+
+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;
+ WINDOW *top = wgetparent(win);
+
+ while (top != 0 && top != stdscr) {
+ win = top;
+ top = wgetparent(win);
+ }
+
+ if (win != 0) {
+ 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) {
+#ifdef USE_WIDE_CURSES
+ char buffer[80];
+
+ ch = mvwinch(win, j, k) & (A_CHARTEXT | A_ALTCHARSET);
+ if (ch & A_ALTCHARSET) {
+ c2 = dlg_asciibox(ch);
+ if (c2 != 0) {
+ ch = c2;
+ }
+ buffer[0] = (char) ch;
+ buffer[1] = '\0';
+ } else {
+ cchar_t cch;
+ wchar_t *uc;
+
+ if (win_wch(win, &cch) == ERR
+ || (uc = wunctrl(&cch)) == 0
+ || uc[1] != 0
+ || wcwidth(uc[0]) <= 0) {
+ buffer[0] = '.';
+ buffer[1] = '\0';
+ } else {
+ mbstate_t state;
+ const wchar_t *ucp = uc;
+
+ memset(&state, 0, sizeof(state));
+ wcsrtombs(buffer, &ucp, sizeof(buffer), &state);
+ k += wcwidth(uc[0]) - 1;
+ }
+ }
+ fputs(buffer, myFP);
+#else
+ 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);
+#endif
+ }
+ fputc('\n', myFP);
+ }
+ wmove(win, y, x);
+ fflush(myFP);
+ }
+ }
+}
+
+void
+dlg_trace_chr(int ch, int fkey)
+{
+ static int last_err = 0;
+
+ /*
+ * Do not bother to trace ERR's indefinitely, since those are usually due
+ * to relatively short polling timeouts.
+ */
+ if (last_err && !fkey && ch == ERR) {
+ ++last_err;
+ } else if (myFP != 0) {
+ const char *fkey_name = "?";
+
+ if (last_err) {
+ fprintf(myFP, "skipped %d ERR's\n", last_err);
+ last_err = 0;
+ }
+
+ 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_FORM_FIRST);
+ CASE(DLGK_FORM_LAST);
+ CASE(DLGK_FORM_NEXT);
+ CASE(DLGK_FORM_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_HELPFILE);
+ CASE(DLGK_TRACE);
+ }
+ }
+ } else if (ch == ERR) {
+ fkey_name = "ERR";
+ last_err = 1;
+ } 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) {
+ dlg_trace_time("** opened at");
+ dlg_trace_msg("** dialog %s\n", dialog_version());
+ }
+ }
+ } else if (myFP != 0) {
+ dlg_trace_time("** closed at");
+ fclose(myFP);
+ myFP = 0;
+ }
+}
+#else
+#undef dlg_trace
+extern void dlg_trace(const char *);
+void
+dlg_trace(const char *fname)
+{
+ (void) fname;
+}
+#endif
diff --git a/contrib/dialog/treeview.c b/contrib/dialog/treeview.c
new file mode 100644
index 0000000..3e57d18
--- /dev/null
+++ b/contrib/dialog/treeview.c
@@ -0,0 +1,658 @@
+/*
+ * $Id: treeview.c,v 1.24 2013/09/02 17:13:33 tom Exp $
+ *
+ * treeview.c -- implements the treeview dialog
+ *
+ * Copyright 2012,2013 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 INDENT 3
+#define MIN_HIGH (1 + (5 * MARGIN))
+
+typedef struct {
+ /* the outer-window */
+ WINDOW *dialog;
+ bool is_check;
+ int box_y;
+ int box_x;
+ int check_x;
+ int item_x;
+ int use_height;
+ int use_width;
+ /* the inner-window */
+ WINDOW *list;
+ DIALOG_LISTITEM *items;
+ int item_no;
+ int *depths;
+ const char *states;
+} ALL_DATA;
+
+/*
+ * 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(ALL_DATA * data,
+ DIALOG_LISTITEM * item,
+ const char *states,
+ int depths,
+ int choice,
+ int selected)
+{
+ WINDOW *win = data->list;
+ chtype save = dlg_get_attrs(win);
+ int i;
+ bool first = TRUE;
+ int climit = (getmaxx(win) - data->check_x + 1);
+ const char *show = (dialog_vars.no_items
+ ? item->name
+ : item->text);
+
+ /* Clear 'residue' of last item */
+ (void) wattrset(win, menubox_attr);
+ (void) wmove(win, choice, 0);
+ for (i = 0; i < data->use_width; i++)
+ (void) waddch(win, ' ');
+
+ (void) wmove(win, choice, data->check_x);
+ (void) wattrset(win, selected ? check_selected_attr : check_attr);
+ (void) wprintw(win,
+ data->is_check ? "[%c]" : "(%c)",
+ states[item->state]);
+ (void) wattrset(win, menubox_attr);
+
+ (void) wattrset(win, selected ? item_selected_attr : item_attr);
+ for (i = 0; i < depths; ++i) {
+ int j;
+ (void) wmove(win, choice, data->item_x + INDENT * i);
+ (void) waddch(win, ACS_VLINE);
+ for (j = INDENT - 1; j > 0; --j)
+ (void) waddch(win, ' ');
+ }
+ (void) wmove(win, choice, data->item_x + INDENT * depths);
+
+ dlg_print_listitem(win, show, climit, first, selected);
+
+ if (selected) {
+ dlg_item_help(item->help);
+ }
+ (void) wattrset(win, save);
+}
+
+static void
+print_list(ALL_DATA * data,
+ int choice,
+ int scrollamt,
+ int max_choice)
+{
+ int i;
+ int cur_y, cur_x;
+
+ getyx(data->dialog, cur_y, cur_x);
+
+ for (i = 0; i < max_choice; i++) {
+ print_item(data,
+ &data->items[scrollamt + i],
+ data->states,
+ data->depths[scrollamt + i],
+ i, i == choice);
+ }
+ (void) wnoutrefresh(data->list);
+
+ dlg_draw_scrollbar(data->dialog,
+ (long) (scrollamt),
+ (long) (scrollamt),
+ (long) (scrollamt + max_choice),
+ (long) (data->item_no),
+ data->box_x + data->check_x,
+ data->box_x + data->use_width,
+ data->box_y,
+ data->box_y + data->use_height + 1,
+ menubox_border2_attr,
+ menubox_border_attr);
+
+ (void) wmove(data->dialog, cur_y, cur_x);
+}
+
+static bool
+check_hotkey(DIALOG_LISTITEM * items, int choice)
+{
+ bool result = FALSE;
+
+ if (dlg_match_char(dlg_last_getc(),
+ (dialog_vars.no_tags
+ ? items[choice].text
+ : items[choice].name))) {
+ result = TRUE;
+ }
+ return result;
+}
+
+/*
+ * This is an alternate interface to 'treeview' which allows the application
+ * to read the list item states back directly without putting them in the
+ * output buffer.
+ */
+int
+dlg_treeview(const char *title,
+ const char *cprompt,
+ int height,
+ int width,
+ int list_height,
+ int item_no,
+ DIALOG_LISTITEM * items,
+ const char *states,
+ int *depths,
+ int flag,
+ int *current_item)
+{
+ /* *INDENT-OFF* */
+ static DLG_KEYS_BINDING binding[] = {
+ HELPKEY_BINDINGS,
+ 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
+ ALL_DATA all;
+ int i, j, key2, found, x, y, cur_y, box_x, box_y;
+ int key = 0, fkey;
+ int button = dialog_state.visit_items ? -1 : dlg_default_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, tree_width;
+ int result = DLG_EXIT_UNKNOWN;
+ int num_states;
+ WINDOW *dialog, *list;
+ char *prompt = dlg_strclone(cprompt);
+ const char **buttons = dlg_ok_labels();
+ const char *widget_name;
+
+ /* we need at least two states */
+ if (states == 0 || strlen(states) < 2)
+ states = " *";
+ num_states = (int) strlen(states);
+
+ memset(&all, 0, sizeof(all));
+ all.items = items;
+ all.item_no = item_no;
+ all.states = states;
+ all.depths = depths;
+
+ dlg_does_output();
+ dlg_tab_correct_str(prompt);
+
+ /*
+ * If this is a radiobutton list, ensure that no more than one item is
+ * selected initially. Allow none to be selected, since some users may
+ * wish to provide this flavor.
+ */
+ if (flag == FLAG_RADIO) {
+ bool first = TRUE;
+
+ for (i = 0; i < item_no; i++) {
+ if (items[i].state) {
+ if (first) {
+ first = FALSE;
+ } else {
+ items[i].state = 0;
+ }
+ }
+ }
+ } else {
+ all.is_check = TRUE;
+ }
+ widget_name = "treeview";
+#ifdef KEY_RESIZE
+ retry:
+#endif
+
+ use_height = list_height;
+ use_width = dlg_calc_list_width(item_no, items) + 10;
+ use_width = MAX(26, use_width);
+ if (use_height == 0) {
+ /* calculate height without items (4) */
+ dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, use_width);
+ dlg_calc_listh(&height, &use_height, item_no);
+ } else {
+ dlg_auto_size(title, prompt, &height, &width, MIN_HIGH + use_height, use_width);
+ }
+ 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, widget_name, binding);
+ dlg_register_buttons(dialog, widget_name, buttons);
+
+ dlg_mouse_setbase(x, y);
+
+ dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr);
+ dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr);
+ dlg_draw_title(dialog, title);
+
+ (void) wattrset(dialog, dialog_attr);
+ dlg_print_autowrap(dialog, prompt, height, width);
+
+ all.use_width = width - 4;
+ cur_y = getcury(dialog);
+ box_y = cur_y + 1;
+ box_x = (width - all.use_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, all.use_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,
+ all.use_width + 2 * MARGIN,
+ menubox_border_attr, menubox_border2_attr);
+
+ text_width = 0;
+ name_width = 0;
+ tree_width = 0;
+ /* Find length of longest item to center treeview */
+ for (i = 0; i < item_no; i++) {
+ tree_width = MAX(tree_width, INDENT * depths[i]);
+ text_width = MAX(text_width, dlg_count_columns(items[i].text));
+ name_width = MAX(name_width, dlg_count_columns(items[i].name));
+ }
+ if (dialog_vars.no_tags && !dialog_vars.no_items) {
+ tree_width += text_width;
+ } else if (dialog_vars.no_items) {
+ tree_width += name_width;
+ } else {
+ tree_width += (text_width + name_width);
+ }
+
+ use_width = (all.use_width - 4);
+ tree_width = MIN(tree_width, all.use_width);
+
+ all.check_x = (use_width - tree_width) / 2;
+ all.item_x = ((dialog_vars.no_tags
+ ? 0
+ : (dialog_vars.no_items
+ ? 0
+ : (2 + name_width)))
+ + all.check_x + 4);
+
+ /* ensure we are scrolled to show the current choice */
+ if (choice >= (max_choice + scrollamt)) {
+ scrollamt = choice - max_choice + 1;
+ choice = max_choice - 1;
+ }
+
+ /* register the new window, along with its borders */
+ dlg_mouse_mkbigregion(box_y + 1, box_x,
+ use_height, all.use_width + 2,
+ KEY_MAX, 1, 1, 1 /* by lines */ );
+
+ all.dialog = dialog;
+ all.box_x = box_x;
+ all.box_y = box_y;
+ all.use_height = use_height;
+ all.list = list;
+ print_list(&all, choice, scrollamt, max_choice);
+
+ dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width);
+
+ dlg_trace_win(dialog);
+ while (result == DLG_EXIT_UNKNOWN) {
+ if (button < 0) /* --visit-items */
+ wmove(dialog, box_y + choice + 1, box_x + all.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)) {
+ i = (key - KEY_MAX);
+ if (i < max_choice) {
+ choice = (key - KEY_MAX);
+ print_list(&all, choice, scrollamt, max_choice);
+
+ 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.
+ */
+ if (key == ' ') {
+ int current = scrollamt + choice;
+ int next = items[current].state + 1;
+
+ if (next >= num_states)
+ next = 0;
+
+ if (flag == FLAG_CHECK) { /* checklist? */
+ items[current].state = next;
+ } else {
+ for (i = 0; i < item_no; i++) {
+ if (i != current) {
+ items[i].state = 0;
+ }
+ }
+ if (items[current].state) {
+ items[current].state = next ? next : 1;
+ } else {
+ items[current].state = 1;
+ }
+ }
+ print_list(&all, choice, scrollamt, max_choice);
+ 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 (check_hotkey(items, j)) {
+ found = TRUE;
+ i = j - scrollamt;
+ break;
+ }
+ }
+ if (!found) {
+ for (j = 0; j <= scrollamt + choice; j++) {
+ if (check_hotkey(items, j)) {
+ 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) {
+ if (i < 0 || i >= max_choice) {
+ if (i < 0) {
+ scrollamt += i;
+ choice = 0;
+ } else {
+ choice = max_choice - 1;
+ scrollamt += (i - max_choice + 1);
+ }
+ print_list(&all, choice, scrollamt, max_choice);
+ } else {
+ choice = i;
+ print_list(&all, choice, scrollamt, max_choice);
+ }
+ }
+ continue; /* wait for another key press */
+ }
+
+ if (fkey) {
+ switch (key) {
+ case DLGK_ENTER:
+ result = dlg_enter_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 set of items as a tree.
+ */
+int
+dialog_treeview(const char *title,
+ const char *cprompt,
+ int height,
+ int width,
+ int list_height,
+ int item_no,
+ char **items,
+ int flag)
+{
+ int result;
+ int i, j;
+ DIALOG_LISTITEM *listitems;
+ int *depths;
+ bool show_status = FALSE;
+ int current = 0;
+ char *help_result;
+
+ listitems = dlg_calloc(DIALOG_LISTITEM, (size_t) item_no + 1);
+ assert_ptr(listitems, "dialog_treeview");
+
+ depths = dlg_calloc(int, (size_t) item_no + 1);
+ assert_ptr(depths, "dialog_treeview");
+
+ for (i = j = 0; i < item_no; ++i) {
+ listitems[i].name = items[j++];
+ listitems[i].text = (dialog_vars.no_items
+ ? dlg_strempty()
+ : items[j++]);
+ listitems[i].state = !dlg_strcmp(items[j++], "on");
+ depths[i] = atoi(items[j++]);
+ listitems[i].help = ((dialog_vars.item_help)
+ ? items[j++]
+ : dlg_strempty());
+ }
+ dlg_align_columns(&listitems[0].text, (int) sizeof(DIALOG_LISTITEM), item_no);
+
+ result = dlg_treeview(title,
+ cprompt,
+ height,
+ width,
+ list_height,
+ item_no,
+ listitems,
+ NULL,
+ depths,
+ flag,
+ &current);
+
+ switch (result) {
+ case DLG_EXIT_OK: /* FALLTHRU */
+ case DLG_EXIT_EXTRA:
+ show_status = TRUE;
+ break;
+ case DLG_EXIT_HELP:
+ dlg_add_help_listitem(&result, &help_result, &listitems[current]);
+ if ((show_status = dialog_vars.help_status)) {
+ if (dialog_vars.separate_output) {
+ dlg_add_string(help_result);
+ dlg_add_separator();
+ } else {
+ dlg_add_quoted(help_result);
+ }
+ } else {
+ dlg_add_string(help_result);
+ }
+ break;
+ }
+
+ if (show_status) {
+ for (i = 0; i < item_no; i++) {
+ if (listitems[i].state) {
+ if (dialog_vars.separate_output) {
+ dlg_add_string(listitems[i].name);
+ dlg_add_separator();
+ } else {
+ if (dlg_need_separator())
+ dlg_add_separator();
+ if (flag == FLAG_CHECK)
+ dlg_add_quoted(listitems[i].name);
+ else
+ dlg_add_string(listitems[i].name);
+ }
+ }
+ }
+ dlg_add_last_key(-1);
+ }
+
+ dlg_free_columns(&listitems[0].text, (int) sizeof(DIALOG_LISTITEM), item_no);
+ free(depths);
+ free(listitems);
+ return result;
+}
diff --git a/contrib/dialog/ui_getc.c b/contrib/dialog/ui_getc.c
new file mode 100644
index 0000000..33e571f
--- /dev/null
+++ b/contrib/dialog/ui_getc.c
@@ -0,0 +1,659 @@
+/*
+ * $Id: ui_getc.c,v 1.67 2013/03/24 23:53:19 tom Exp $
+ *
+ * ui_getc.c - user interface glue for getc()
+ *
+ * Copyright 2001-2012,2013 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);
+}
+
+/*
+ * A select() might find more than one input ready for service. Handle them
+ * all.
+ */
+static bool
+handle_inputs(WINDOW *win)
+{
+ bool result = FALSE;
+ DIALOG_CALLBACK *p;
+ DIALOG_CALLBACK *q;
+ int cur_y, cur_x;
+ int state = ERR;
+
+ getyx(win, cur_y, cur_x);
+ for (p = dialog_state.getc_callbacks, q = 0; p != 0; p = q) {
+ q = p->next;
+ if ((p->handle_input != 0) && p->input_ready) {
+ p->input_ready = FALSE;
+ if (state == ERR) {
+ state = curs_set(0);
+ }
+ if (p->handle_input(p)) {
+ result = TRUE;
+ }
+ }
+ }
+ if (result) {
+ (void) wmove(win, cur_y, cur_x); /* Restore cursor position */
+ wrefresh(win);
+ curs_set(state);
+ }
+ return result;
+}
+
+static bool
+may_handle_inputs(void)
+{
+ bool result = FALSE;
+
+ DIALOG_CALLBACK *p;
+
+ for (p = dialog_state.getc_callbacks; p != 0; p = p->next) {
+ if (p->input != 0) {
+ result = TRUE;
+ break;
+ }
+ }
+
+ return result;
+}
+
+/*
+ * Check any any inputs registered via callbacks, to see if there is any input
+ * available. If there is, return a file-descriptor which should be read.
+ * Otherwise, return -1.
+ */
+static int
+check_inputs(void)
+{
+ DIALOG_CALLBACK *p;
+ fd_set read_fds;
+ struct timeval test;
+ int last_fd = -1;
+ int fd;
+ int found;
+ int result = -1;
+
+ if ((p = dialog_state.getc_callbacks) != 0) {
+ FD_ZERO(&read_fds);
+
+ while (p != 0) {
+ p->input_ready = FALSE;
+ if (p->input != 0 && (fd = fileno(p->input)) >= 0) {
+ FD_SET(fd, &read_fds);
+ if (last_fd < fd)
+ last_fd = fd;
+ }
+ p = p->next;
+ }
+
+ test.tv_sec = 0;
+ test.tv_usec = WTIMEOUT_VAL * 1000;
+ found = select(last_fd + 1, &read_fds,
+ (fd_set *) 0,
+ (fd_set *) 0,
+ &test);
+
+ if (found > 0) {
+ for (p = dialog_state.getc_callbacks; p != 0; p = p->next) {
+ if (p->input != 0
+ && (fd = fileno(p->input)) >= 0
+ && FD_ISSET(fd, &read_fds)) {
+ p->input_ready = TRUE;
+ result = fd;
+ }
+ }
+ }
+ }
+
+ return result;
+}
+
+int
+dlg_getc_callbacks(int ch, int fkey, int *result)
+{
+ int code = FALSE;
+ DIALOG_CALLBACK *p, *q;
+
+ if ((p = dialog_state.getc_callbacks) != 0) {
+ if (check_inputs() >= 0) {
+ do {
+ q = p->next;
+ if (p->input_ready) {
+ 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
+}
+
+/*
+ * Report the last key entered by the user. The 'mode' parameter controls
+ * the way it is separated from other results:
+ * -2 (no separator)
+ * -1 (separator after the key name)
+ * 0 (separator is optionally before the key name)
+ * 1 (same as -1)
+ */
+void
+dlg_add_last_key(int mode)
+{
+ if (dialog_vars.last_key) {
+ if (mode >= 0) {
+ if (mode > 0) {
+ dlg_add_last_key(-1);
+ } else {
+ if (dlg_need_separator())
+ dlg_add_separator();
+ dlg_add_last_key(-2);
+ }
+ } else {
+ char temp[80];
+ sprintf(temp, "%d", last_getc);
+ dlg_add_string(temp);
+ if (mode == -1)
+ dlg_add_separator();
+ }
+ }
+}
+
+/*
+ * 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) {
+ if (fcntl(fd, F_GETFL, 0) >= 0) {
+ code = TRUE;
+ }
+ }
+ return code;
+}
+
+static int
+really_getch(WINDOW *win, int *fkey)
+{
+ int ch;
+#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
+ return ch;
+}
+
+static DIALOG_CALLBACK *
+next_callback(DIALOG_CALLBACK * p)
+{
+ if ((p = dialog_state.getc_redirect) != 0) {
+ p = p->next;
+ } else {
+ p = dialog_state.getc_callbacks;
+ }
+ return p;
+}
+
+static DIALOG_CALLBACK *
+prev_callback(DIALOG_CALLBACK * p)
+{
+ DIALOG_CALLBACK *q;
+
+ if ((p = dialog_state.getc_redirect) != 0) {
+ if (p == dialog_state.getc_callbacks) {
+ for (p = dialog_state.getc_callbacks; p->next != 0; p = p->next) ;
+ } else {
+ for (q = dialog_state.getc_callbacks; q->next != p; q = q->next) ;
+ p = q;
+ }
+ } else {
+ p = dialog_state.getc_callbacks;
+ }
+ return p;
+}
+
+#define isBeforeChr(chr) ((chr) == before_chr && !before_fkey)
+#define isBeforeFkey(chr) ((chr) == before_chr && before_fkey)
+
+/*
+ * 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_chr;
+ int before_fkey;
+ int result;
+ bool done = FALSE;
+ bool literal = FALSE;
+ DIALOG_CALLBACK *p = 0;
+ int interval = (dialog_vars.timeout_secs * 1000);
+ time_t expired = time((time_t *) 0) + dialog_vars.timeout_secs;
+ time_t current;
+
+ if (may_handle_inputs())
+ wtimeout(win, WTIMEOUT_VAL);
+ else if (interval > 0)
+ wtimeout(win, interval);
+
+ while (!done) {
+ bool handle_others = FALSE;
+
+ /*
+ * If there was no pending file-input, check the keyboard.
+ */
+ ch = really_getch(win, fkey);
+ if (literal) {
+ done = TRUE;
+ continue;
+ }
+
+ before_chr = ch;
+ before_fkey = *fkey;
+
+ ch = dlg_lookup_key(win, ch, fkey);
+ dlg_trace_chr(ch, *fkey);
+
+ current = time((time_t *) 0);
+
+ /*
+ * If we acquired a fkey value, then it is one of dialog's builtin
+ * codes such as DLGK_HELPFILE.
+ */
+ if (!*fkey || *fkey != before_fkey) {
+ switch (ch) {
+ case CHR_LITERAL:
+ literal = TRUE;
+ keypad(win, FALSE);
+ continue;
+ 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 (!valid_file(stdin)
+ || !valid_file(dialog_state.screen_output)) {
+ ch = ESC;
+ done = TRUE;
+ } else if (check_inputs()) {
+ if (handle_inputs(win))
+ dlg_raise_window(win);
+ else
+ done = TRUE;
+ } else {
+ done = (interval <= 0);
+ }
+ break;
+ case DLGK_HELPFILE:
+ if (dialog_vars.help_file) {
+ int yold, xold;
+ getyx(win, yold, xold);
+ dialog_helpfile("HELP", dialog_vars.help_file, 0, 0);
+ dlg_raise_window(win);
+ wmove(win, yold, xold);
+ }
+ continue;
+ case DLGK_FIELD_PREV:
+ /* FALLTHRU */
+ case KEY_BTAB:
+ /* FALLTHRU */
+ case DLGK_FIELD_NEXT:
+ /* FALLTHRU */
+ case TAB:
+ /* Handle tab/backtab 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 &&
+ (isBeforeChr(TAB) ||
+ isBeforeFkey(KEY_BTAB))) {
+ p = (isBeforeChr(TAB)
+ ? next_callback(p)
+ : prev_callback(p));
+ 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 (isBeforeChr(DLG_CTRL('P'))) {
+ /* for testing, ^P closes the connection */
+ close(0);
+ close(1);
+ close(2);
+ break;
+ }
+#endif
+ handle_others = TRUE;
+ break;
+#ifdef HAVE_DLG_TRACE
+ case CHR_TRACE:
+ dlg_trace_win(win);
+ break;
+#endif
+ }
+ } else {
+ handle_others = TRUE;
+ }
+
+ if (handle_others) {
+ if ((p = dialog_state.getc_redirect) != 0) {
+ if (!(p->handle_getc(p, ch, *fkey, &result))) {
+ done = (p->win == save_win) && (!p->keep_win);
+ dlg_remove_callback(p);
+ dialog_state.getc_redirect = 0;
+ win = save_win;
+ }
+ } else {
+ done = TRUE;
+ }
+ }
+ }
+ 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);
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/contrib/dialog/util.c b/contrib/dialog/util.c
new file mode 100644
index 0000000..73a05a9
--- /dev/null
+++ b/contrib/dialog/util.c
@@ -0,0 +1,2708 @@
+/*
+ * $Id: util.c,v 1.258 2013/09/22 00:41:40 tom Exp $
+ *
+ * util.c -- miscellaneous utilities for dialog
+ *
+ * Copyright 2000-2012,2013 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_SETLOCALE
+#include <locale.h>
+#endif
+
+#ifdef NEED_WCHAR_H
+#include <wchar.h>
+#endif
+
+#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
+
+#if defined(HAVE_WCHGAT)
+# if defined(NCURSES_VERSION_PATCH)
+# if NCURSES_VERSION_PATCH >= 20060715
+# define USE_WCHGAT 1
+# else
+# define USE_WCHGAT 0
+# endif
+# else
+# define USE_WCHGAT 1
+# endif
+#else
+# define USE_WCHGAT 0
+#endif
+
+/* globals */
+DIALOG_STATE dialog_state;
+DIALOG_VARS dialog_vars;
+
+#if !(defined(HAVE_WGETPARENT) && defined(HAVE_WINDOW__PARENT))
+#define NEED_WGETPARENT 1
+#else
+#undef NEED_WGETPARENT
+#endif
+
+#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) }
+
+#define UseShadow(dw) ((dw) != 0 && (dw)->normal != 0 && (dw)->shadow != 0)
+
+/*
+ * Table of color and attribute values, default is for mono display.
+ * The order matches the DIALOG_ATR() values.
+ */
+/* *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"),
+ DATA(A_REVERSE, GAUGE, gauge, "Dialog box gauge"),
+ DATA(A_REVERSE, BORDER2, border2, "Dialog box border2"),
+ DATA(A_REVERSE, INPUTBOX_BORDER2, inputbox_border2, "Input box border2"),
+ DATA(A_REVERSE, SEARCHBOX_BORDER2, searchbox_border2, "Search box border2"),
+ DATA(A_REVERSE, MENUBOX_BORDER2, menubox_border2, "Menu box border2")
+};
+/* *INDENT-ON* */
+
+/*
+ * Maintain a list of subwindows so that we can delete them to cleanup.
+ * More important, this provides a fallback when wgetparent() is not available.
+ */
+static void
+add_subwindow(WINDOW *parent, WINDOW *child)
+{
+ DIALOG_WINDOWS *p = dlg_calloc(DIALOG_WINDOWS, 1);
+
+ if (p != 0) {
+ p->normal = parent;
+ p->shadow = child;
+ p->next = dialog_state.all_subwindows;
+ dialog_state.all_subwindows = p;
+ }
+}
+
+static void
+del_subwindows(WINDOW *parent)
+{
+ DIALOG_WINDOWS *p = dialog_state.all_subwindows;
+ DIALOG_WINDOWS *q = 0;
+ DIALOG_WINDOWS *r;
+
+ while (p != 0) {
+ if (p->normal == parent) {
+ delwin(p->shadow);
+ r = p->next;
+ if (q == 0) {
+ dialog_state.all_subwindows = r;
+ } else {
+ q->next = r;
+ }
+ free(p);
+ p = r;
+ } else {
+ q = p;
+ p = p->next;
+ }
+ }
+}
+
+/*
+ * 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);
+
+ (void) 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;
+
+ (void) 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);
+}
+
+#ifdef NCURSES_VERSION
+static int
+my_putc(int ch)
+{
+ char buffer[2];
+ int fd = fileno(dialog_state.screen_output);
+
+ buffer[0] = (char) ch;
+ return (int) write(fd, buffer, (size_t) 1);
+}
+#endif
+
+/*
+ * 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;
+
+ setlocale(LC_ALL, "");
+
+ 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");
+ }
+ close(fd1);
+ } else if (!isatty(fileno(stdin))) {
+ if ((fd1 = open_terminal(&device, O_RDONLY)) >= 0) {
+ if ((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);
+ }
+ close(fd1);
+ }
+ 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
+ && (fileno(dialog_state.screen_output) != fileno(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 wrote 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) refresh();
+ (void) tputs(exit_ca_mode, 0, my_putc);
+ (void) tputs(clear_screen, 0, my_putc);
+ /*
+ * 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();
+
+ if (!dialog_state.no_mouse) {
+ 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]);
+}
+
+/*
+ * Wrapper for getattrs(), or the more cumbersome X/Open wattr_get().
+ */
+chtype
+dlg_get_attrs(WINDOW *win)
+{
+ chtype result;
+#ifdef HAVE_GETATTRS
+ result = (chtype) getattrs(win);
+#else
+ attr_t my_result;
+ short my_pair;
+ wattr_get(win, &my_result, &my_pair, NULL);
+ result = my_result;
+#endif
+ 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.
+ */
+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 = dlg_get_attrs(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 ESCAPE_LEN 3
+#define isOurEscape(p) (((p)[0] == '\\') && ((p)[1] == 'Z') && ((p)[2] != 0))
+
+int
+dlg_count_real_columns(const char *text)
+{
+ int result = 0;
+ if (*text) {
+ result = dlg_count_columns(text);
+ if (result && dialog_vars.colors) {
+ int hidden = 0;
+ while (*text) {
+ if (dialog_vars.colors && isOurEscape(text)) {
+ hidden += ESCAPE_LEN;
+ text += ESCAPE_LEN;
+ } else {
+ ++text;
+ }
+ }
+ result -= hidden;
+ }
+ }
+ return result;
+}
+
+static int
+centered(int width, const char *string)
+{
+ int need = dlg_count_real_columns(string);
+ int left;
+
+ left = (width - need) / 2 - 1;
+ if (left < 0)
+ left = 0;
+ return left;
+}
+
+#ifdef USE_WIDE_CURSES
+static bool
+is_combining(const char *txt, int *combined)
+{
+ bool result = FALSE;
+
+ if (*combined == 0) {
+ if (UCH(*txt) >= 128) {
+ wchar_t wch;
+ mbstate_t state;
+ size_t given = strlen(txt);
+ size_t len;
+
+ memset(&state, 0, sizeof(state));
+ len = mbrtowc(&wch, txt, given, &state);
+ if ((int) len > 0 && wcwidth(wch) == 0) {
+ *combined = (int) len - 1;
+ result = TRUE;
+ }
+ }
+ } else {
+ result = TRUE;
+ *combined -= 1;
+ }
+ return result;
+}
+#endif
+
+/*
+ * Print the name (tag) or text from a DIALOG_LISTITEM, highlighting the
+ * first character if selected.
+ */
+void
+dlg_print_listitem(WINDOW *win,
+ const char *text,
+ int climit,
+ bool first,
+ int selected)
+{
+ chtype attr = A_NORMAL;
+ int limit;
+ const int *cols;
+ chtype attrs[4];
+
+ if (text == 0)
+ text = "";
+
+ if (first) {
+ const int *indx = dlg_index_wchars(text);
+ attrs[3] = tag_key_selected_attr;
+ attrs[2] = tag_key_attr;
+ attrs[1] = tag_selected_attr;
+ attrs[0] = tag_attr;
+
+ (void) wattrset(win, selected ? attrs[3] : attrs[2]);
+ (void) waddnstr(win, text, indx[1]);
+
+ if ((int) strlen(text) > indx[1]) {
+ limit = dlg_limit_columns(text, climit, 1);
+ if (limit > 1) {
+ (void) wattrset(win, selected ? attrs[1] : attrs[0]);
+ (void) waddnstr(win,
+ text + indx[1],
+ indx[limit] - indx[1]);
+ }
+ }
+ } else {
+ attrs[1] = item_selected_attr;
+ attrs[0] = item_attr;
+
+ cols = dlg_index_columns(text);
+ limit = dlg_limit_columns(text, climit, 0);
+
+ if (limit > 0) {
+ (void) wattrset(win, selected ? attrs[1] : attrs[0]);
+ dlg_print_text(win, text, cols[limit], &attr);
+ }
+ }
+}
+
+/*
+ * 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;
+#ifdef USE_WIDE_CURSES
+ int combined = 0;
+#endif
+
+ 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) y_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)
+#ifdef USE_WIDE_CURSES
+ && !is_combining(txt, &combined)
+#endif
+ )) {
+ 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;
+ const char *test_ptr;
+ const char *hide_ptr = 0;
+ 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 (dialog_vars.colors && isOurEscape(test_ptr)) {
+ hide_ptr = test_ptr;
+ hidden += ESCAPE_LEN;
+ n += (ESCAPE_LEN - 1);
+ }
+ 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];
+#ifdef USE_WIDE_CURSES
+ if (UCH(*wrap_ptr) >= 128) {
+ int combined = 0;
+ while (is_combining(wrap_ptr, &combined)) {
+ ++wrap_ptr;
+ }
+ }
+#endif
+
+ /*
+ * If we found hidden text past the last point that we will display,
+ * discount that from the displayed length.
+ */
+ if ((hide_ptr != 0) && (hide_ptr >= wrap_ptr)) {
+ hidden -= ESCAPE_LEN;
+ test_ptr = wrap_ptr;
+ while (test_ptr < wrap_ptr) {
+ if (dialog_vars.colors && isOurEscape(test_ptr)) {
+ hidden -= ESCAPE_LEN;
+ test_ptr += ESCAPE_LEN;
+ } else {
+ ++test_ptr;
+ }
+ }
+ }
+
+ /*
+ * 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;
+
+ *x -= hidden;
+
+ /* 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++;
+ dlg_finish_string(prompt);
+ 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;
+
+ (void) pauseopt; /* used only for ncurses */
+
+ 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);
+ if (dummy == 0) {
+ (void) wattrset(win, dialog_attr);
+ dlg_print_autowrap(win, prompt, height + 1 + (3 * MARGIN), width);
+ last = 0;
+ } else {
+ wbkgdset(dummy, dialog_attr | ' ');
+ (void) wattrset(dummy, dialog_attr);
+ werase(dummy);
+ dlg_print_autowrap(dummy, prompt, high, width);
+ getyx(dummy, y, x);
+ (void) 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) {
+ (void) wattrset(win, border_attr);
+ whline(win, dlg_boxchar(ACS_HLINE), 4 - len);
+ }
+ }
+ }
+ last = (y - height);
+ }
+ } else
+#endif
+ {
+ (void) offset;
+ (void) 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) {
+ if (prompt != 0) {
+ wide = MAX(title_length, mincols);
+ if (strchr(prompt, '\n') == 0) {
+ double val = (dialog_state.aspect_ratio *
+ dlg_count_real_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 = (int) offset;
+
+ count++;
+ }
+
+ /* now 'count' has the number of lines of fd and 'len' the max length */
+
+ *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);
+}
+
+static chtype
+dlg_get_cell_attrs(WINDOW *win)
+{
+ chtype result;
+#ifdef USE_WIDE_CURSES
+ cchar_t wch;
+ wchar_t cc;
+ attr_t attrs;
+ short pair;
+ if (win_wch(win, &wch) == OK
+ && getcchar(&wch, &cc, &attrs, &pair, NULL) == OK) {
+ result = attrs;
+ } else {
+ result = 0;
+ }
+#else
+ result = winch(win) & (A_ATTRIBUTES & ~A_COLOR);
+#endif
+ return result;
+}
+
+/*
+ * 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_box2(WINDOW *win, int y, int x, int height, int width,
+ chtype boxchar, chtype borderchar, chtype borderchar2)
+{
+ int i, j;
+ chtype save = dlg_get_attrs(win);
+
+ (void) 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, borderchar2 | dlg_boxchar(ACS_URCORNER));
+ else if (i == height - 1 && j == width - 1)
+ (void) waddch(win, borderchar2 | dlg_boxchar(ACS_LRCORNER));
+ else if (!i)
+ (void) waddch(win, borderchar | dlg_boxchar(ACS_HLINE));
+ else if (i == height - 1)
+ (void) waddch(win, borderchar2 | dlg_boxchar(ACS_HLINE));
+ else if (!j)
+ (void) waddch(win, borderchar | dlg_boxchar(ACS_VLINE));
+ else if (j == width - 1)
+ (void) waddch(win, borderchar2 | dlg_boxchar(ACS_VLINE));
+ else
+ (void) waddch(win, boxchar | ' ');
+ }
+ (void) wattrset(win, save);
+}
+
+void
+dlg_draw_box(WINDOW *win, int y, int x, int height, int width,
+ chtype boxchar, chtype borderchar)
+{
+ dlg_draw_box2(win, y, x, height, width, boxchar, borderchar, boxchar);
+}
+
+static DIALOG_WINDOWS *
+find_window(WINDOW *win)
+{
+ DIALOG_WINDOWS *result = 0;
+ DIALOG_WINDOWS *p;
+
+ for (p = dialog_state.all_windows; p != 0; p = p->next) {
+ if (p->normal == win) {
+ result = p;
+ break;
+ }
+ }
+ return result;
+}
+
+#ifdef HAVE_COLOR
+/*
+ * If we have wchgat(), use that for updating shadow attributes, to work with
+ * wide-character data.
+ */
+
+/*
+ * Check if the given point is "in" the given window. If so, return the window
+ * pointer, otherwise null.
+ */
+static WINDOW *
+in_window(WINDOW *win, int y, int x)
+{
+ WINDOW *result = 0;
+ int y_base = getbegy(win);
+ int x_base = getbegx(win);
+ int y_last = getmaxy(win) + y_base;
+ int x_last = getmaxx(win) + x_base;
+
+ if (y >= y_base && y <= y_last && x >= x_base && x <= x_last)
+ result = win;
+ return result;
+}
+
+static WINDOW *
+window_at_cell(DIALOG_WINDOWS * dw, int y, int x)
+{
+ WINDOW *result = 0;
+ DIALOG_WINDOWS *p;
+ int y_want = y + getbegy(dw->shadow);
+ int x_want = x + getbegx(dw->shadow);
+
+ for (p = dialog_state.all_windows; p != 0; p = p->next) {
+ if (dw->normal != p->normal
+ && dw->shadow != p->normal
+ && (result = in_window(p->normal, y_want, x_want)) != 0) {
+ break;
+ }
+ }
+ if (result == 0) {
+ result = stdscr;
+ }
+ return result;
+}
+
+static bool
+in_shadow(WINDOW *normal, WINDOW *shadow, int y, int x)
+{
+ bool result = FALSE;
+ int ybase = getbegy(normal);
+ int ylast = getmaxy(normal) + ybase;
+ int xbase = getbegx(normal);
+ int xlast = getmaxx(normal) + xbase;
+
+ y += getbegy(shadow);
+ x += getbegx(shadow);
+
+ if (y >= ybase + SHADOW_ROWS
+ && y < ylast + SHADOW_ROWS
+ && x >= xlast
+ && x < xlast + SHADOW_COLS) {
+ /* in the right-side */
+ result = TRUE;
+ } else if (y >= ylast
+ && y < ylast + SHADOW_ROWS
+ && x >= ybase + SHADOW_COLS
+ && x < ylast + SHADOW_COLS) {
+ /* check the bottom */
+ result = TRUE;
+ }
+
+ return result;
+}
+
+/*
+ * When erasing a shadow, check each cell to make sure that it is not part of
+ * another box's shadow. This is a little complicated since most shadows are
+ * merged onto stdscr.
+ */
+static bool
+last_shadow(DIALOG_WINDOWS * dw, int y, int x)
+{
+ DIALOG_WINDOWS *p;
+ bool result = TRUE;
+
+ for (p = dialog_state.all_windows; p != 0; p = p->next) {
+ if (p->normal != dw->normal
+ && in_shadow(p->normal, dw->shadow, y, x)) {
+ result = FALSE;
+ break;
+ }
+ }
+ return result;
+}
+
+static void
+repaint_cell(DIALOG_WINDOWS * dw, bool draw, int y, int x)
+{
+ WINDOW *win = dw->shadow;
+ WINDOW *cellwin;
+ int y2, x2;
+
+ if ((cellwin = window_at_cell(dw, y, x)) != 0
+ && (draw || last_shadow(dw, y, x))
+ && (y2 = (y + getbegy(win) - getbegy(cellwin))) >= 0
+ && (x2 = (x + getbegx(win) - getbegx(cellwin))) >= 0
+ && wmove(cellwin, y2, x2) != ERR) {
+ chtype the_cell = dlg_get_attrs(cellwin);
+ chtype the_attr = (draw ? shadow_attr : the_cell);
+
+ if (dlg_get_cell_attrs(cellwin) & A_ALTCHARSET) {
+ the_attr |= A_ALTCHARSET;
+ }
+#if USE_WCHGAT
+ wchgat(cellwin, 1,
+ the_attr & (chtype) (~A_COLOR),
+ (short) PAIR_NUMBER(the_attr),
+ NULL);
+#else
+ {
+ chtype the_char = ((winch(cellwin) & A_CHARTEXT) | the_attr);
+ (void) waddch(cellwin, the_char);
+ }
+#endif
+ wnoutrefresh(cellwin);
+ }
+}
+
+#define RepaintCell(dw, draw, y, x) repaint_cell(dw, draw, y, x)
+
+static void
+repaint_shadow(DIALOG_WINDOWS * dw, bool draw, int y, int x, int height, int width)
+{
+ int i, j;
+
+ if (UseShadow(dw)) {
+#if !USE_WCHGAT
+ chtype save = dlg_get_attrs(dw->shadow);
+ (void) wattrset(dw->shadow, draw ? shadow_attr : screen_attr);
+#endif
+ for (i = 0; i < SHADOW_ROWS; ++i) {
+ for (j = 0; j < width; ++j) {
+ RepaintCell(dw, draw, i + y + height, j + x + SHADOW_COLS);
+ }
+ }
+ for (i = 0; i < height; i++) {
+ for (j = 0; j < SHADOW_COLS; ++j) {
+ RepaintCell(dw, draw, i + y + SHADOW_ROWS, j + x + width);
+ }
+ }
+ (void) wnoutrefresh(dw->shadow);
+#if !USE_WCHGAT
+ (void) wattrset(dw->shadow, save);
+#endif
+ }
+}
+
+/*
+ * 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(DIALOG_WINDOWS * dw)
+{
+ if (UseShadow(dw)) {
+ repaint_shadow(dw,
+ TRUE,
+ getbegy(dw->normal) - getbegy(dw->shadow),
+ getbegx(dw->normal) - getbegx(dw->shadow),
+ getmaxy(dw->normal),
+ getmaxx(dw->normal));
+ }
+}
+
+/*
+ * Erase a shadow on the parent window corresponding to the right- and
+ * bottom-edge of the child window.
+ */
+static void
+erase_childs_shadow(DIALOG_WINDOWS * dw)
+{
+ if (UseShadow(dw)) {
+ repaint_shadow(dw,
+ FALSE,
+ getbegy(dw->normal) - getbegy(dw->shadow),
+ getbegx(dw->normal) - getbegx(dw->shadow),
+ getmaxy(dw->normal),
+ getmaxx(dw->normal));
+ }
+}
+
+/*
+ * 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)
+{
+ repaint_shadow(find_window(win), TRUE, y, x, height, width);
+}
+#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 = (int) 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 HAVE_DLG_TRACE
+ dlg_trace((const char *) 0); /* close it */
+#endif
+
+#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;
+ int bits = ((dialog_vars.no_tags ? 1 : 0)
+ + (dialog_vars.no_items ? 2 : 0));
+
+ for (i = 0; i < item_no; ++i) {
+ switch (bits) {
+ case 0:
+ /* FALLTHRU */
+ case 1:
+ if ((n = dlg_count_columns(items[i].name)) > len1)
+ len1 = n;
+ if ((n = dlg_count_columns(items[i].text)) > len2)
+ len2 = n;
+ break;
+ case 2:
+ /* FALLTHRU */
+ case 3:
+ if ((n = dlg_count_columns(items[i].name)) > len1)
+ len1 = n;
+ break;
+ }
+ }
+ 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 = dlg_get_attrs(win);
+ int x = centered(getmaxx(win), title);
+
+ (void) wattrset(win, title_attr);
+ wmove(win, 0, x);
+ dlg_print_text(win, title, getmaxx(win) - x, &attr);
+ (void) wattrset(win, save);
+ dlg_finish_string(title);
+ }
+}
+
+void
+dlg_draw_bottom_box2(WINDOW *win, chtype on_left, chtype on_right, chtype on_inside)
+{
+ int width = getmaxx(win);
+ int height = getmaxy(win);
+ int i;
+
+ (void) wattrset(win, on_left);
+ (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));
+ (void) wattrset(win, on_right);
+ (void) waddch(win, dlg_boxchar(ACS_RTEE));
+ (void) wattrset(win, on_inside);
+ (void) wmove(win, height - 2, 1);
+ for (i = 0; i < width - 2; i++)
+ (void) waddch(win, ' ');
+}
+
+void
+dlg_draw_bottom_box(WINDOW *win)
+{
+ dlg_draw_bottom_box2(win, border_attr, dialog_attr, dialog_attr);
+}
+
+/*
+ * 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) {
+ if (dialog_state.all_windows != 0)
+ erase_childs_shadow(q);
+ del_subwindows(q->normal);
+ dlg_unregister_window(q->normal);
+ delwin(q->normal);
+ free(q);
+ }
+ doupdate();
+}
+
+/*
+ * Create a window, optionally with a shadow.
+ */
+WINDOW *
+dlg_new_window(int height, int width, int y, int x)
+{
+ return dlg_new_modal_window(stdscr, height, width, y, x);
+}
+
+/*
+ * "Modal" windows differ from normal ones by having a shadow in a window
+ * separate from the standard screen.
+ */
+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 (p == 0
+ || (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) {
+ p->shadow = parent;
+ draw_childs_shadow(p);
+ }
+#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;
+
+ if (win != 0) {
+ dlg_ctl_size(height, width);
+
+ if ((p = find_window(win)) != 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
+ draw_childs_shadow(p);
+#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);
+ }
+
+ add_subwindow(parent, win);
+ (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;
+
+ (void) 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);
+ (void) y;
+ 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 = !dialog_vars.no_nl_expand && (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 ? (unsigned) 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
+ ? (unsigned) strlen(dialog_vars.input_result)
+ : 0);
+ unsigned want = (unsigned) 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_result = 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_result != 0)
+ strcpy(dialog_vars.input_result, save_result);
+ } 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') {
+ size_t 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 (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);
+}
+
+#define HELP_PREFIX "HELP "
+
+void
+dlg_add_help_listitem(int *result, char **tag, DIALOG_LISTITEM * item)
+{
+ dlg_add_result(HELP_PREFIX);
+ if (USE_ITEM_HELP(item->help)) {
+ *tag = dialog_vars.help_tags ? item->name : item->help;
+ *result = DLG_EXIT_ITEM_HELP;
+ } else {
+ *tag = item->name;
+ }
+}
+
+void
+dlg_add_help_formitem(int *result, char **tag, DIALOG_FORMITEM * item)
+{
+ dlg_add_result(HELP_PREFIX);
+ if (USE_ITEM_HELP(item->help)) {
+ *tag = dialog_vars.help_tags ? item->name : item->help;
+ *result = DLG_EXIT_ITEM_HELP;
+ } else {
+ *tag = item->name;
+ }
+}
+
+/*
+ * 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;
+}
+
+/*
+ * Most of the data in DIALOG_VARS is normally set by command-line options.
+ * The input_result member is an exception; it is normally set by the dialog
+ * library to return result values.
+ */
+void
+dlg_restore_vars(DIALOG_VARS * vars)
+{
+ char *save_result = dialog_vars.input_result;
+ unsigned save_length = dialog_vars.input_length;
+
+ dialog_vars = *vars;
+ dialog_vars.input_result = save_result;
+ dialog_vars.input_length = save_length;
+}
+
+/*
+ * 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
+dlg_getbegx(WINDOW *win)
+{
+ int y, x;
+ getbegyx(win, y, x);
+ return x;
+}
+int
+dlg_getbegy(WINDOW *win)
+{
+ int y, x;
+ getbegyx(win, y, x);
+ return y;
+}
+#endif
+
+#if !(defined(HAVE_GETCURX) && defined(HAVE_GETCURY))
+int
+dlg_getcurx(WINDOW *win)
+{
+ int y, x;
+ getyx(win, y, x);
+ return x;
+}
+int
+dlg_getcury(WINDOW *win)
+{
+ int y, x;
+ getyx(win, y, x);
+ return y;
+}
+#endif
+
+#if !(defined(HAVE_GETMAXX) && defined(HAVE_GETMAXY))
+int
+dlg_getmaxx(WINDOW *win)
+{
+ int y, x;
+ getmaxyx(win, y, x);
+ return x;
+}
+int
+dlg_getmaxy(WINDOW *win)
+{
+ int y, x;
+ getmaxyx(win, y, x);
+ return y;
+}
+#endif
+
+#if !(defined(HAVE_GETPARX) && defined(HAVE_GETPARY))
+int
+dlg_getparx(WINDOW *win)
+{
+ int y, x;
+ getparyx(win, y, x);
+ return x;
+}
+int
+dlg_getpary(WINDOW *win)
+{
+ int y, x;
+ getparyx(win, y, x);
+ return y;
+}
+#endif
+
+#ifdef NEED_WGETPARENT
+WINDOW *
+dlg_wgetparent(WINDOW *win)
+{
+#undef wgetparent
+ WINDOW *result = 0;
+ DIALOG_WINDOWS *p;
+
+ for (p = dialog_state.all_subwindows; p != 0; p = p->next) {
+ if (p->shadow == win) {
+ result = p->normal;
+ break;
+ }
+ }
+ return result;
+}
+#endif
diff --git a/contrib/dialog/version.c b/contrib/dialog/version.c
new file mode 100644
index 0000000..1e72ce4
--- /dev/null
+++ b/contrib/dialog/version.c
@@ -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;
+}
diff --git a/contrib/dialog/yesno.c b/contrib/dialog/yesno.c
new file mode 100644
index 0000000..d8a0c0b
--- /dev/null
+++ b/contrib/dialog/yesno.c
@@ -0,0 +1,161 @@
+/*
+ * $Id: yesno.c,v 1.57 2012/12/01 01:48:21 tom Exp $
+ *
+ * yesno.c -- implements the yes/no box
+ *
+ * Copyright 1999-2011,2012 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[] = {
+ HELPKEY_BINDINGS,
+ ENTERKEY_BINDINGS,
+ TRAVERSE_BINDINGS,
+ SCROLLKEY_BINDINGS,
+ END_KEYS_BINDING
+ };
+ /* *INDENT-ON* */
+
+ int x, y;
+ int key = 0, fkey;
+ int code;
+ int button = dlg_default_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_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr);
+ dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr);
+ dlg_draw_title(dialog, title);
+ dlg_draw_helpline(dialog, FALSE);
+
+ (void) 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);
+ dlg_trace_win(dialog);
+ 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;
+}
OpenPOWER on IntegriCloud