Re: git: 3e42d7194bdc - main - contrib/bsddialog: Import version 1.0.5

From: Alfonso Siciliano <asiciliano.freebsd_at_gmail.com>
Date: Thu, 09 Oct 2025 15:42:28 UTC
Sorry for the delayed import. Some of these features were requested a
few months ago. Requests for bar widgets haven't been implemented yet;
please see below for details.

At the moment, I'm working on projects that are completely unrelated to
TUIs. I've also received some very discouraging comments about bsddialog
in the past.

That said, I cannot abandon bsddialog, as it's used by bsdinstall,
tzsetup, vidfont, and other utilities. Moreover, I've received several
requests to provide a Lua API.

The current plan is as follows:

1. Import a new version soon, sponsored by Google as part of a
Google Summer of Code project.

2. Release another version, sponsored by the FreeBSD Foundation,
focusing on improving accessibility for visually impaired users.

3. Refactor bsddialog, since maintaining and extending the current
codebase has become too difficult. It will likely be largely rewritten
in Lua, and I hope to complete this by 2025, as the Lua version will be
used in a personal installer primarily written in Lua.
Feel free to submit a feature request (even via private email) if the
feature is not already listed in "TODO & Ideas"
https://gitlab.com/alfix/bsddialog#todo-and-ideas.

Best,
Alfonso

On Thu, Oct 9, 2025 at 5:41 PM Alfonso S. Siciliano <asiciliano@freebsd.org>
wrote:

> The branch main has been updated by asiciliano:
>
> URL:
> https://cgit.FreeBSD.org/src/commit/?id=3e42d7194bdcd4fbfd781518258f919d6ac803d3
>
> commit 3e42d7194bdcd4fbfd781518258f919d6ac803d3
> Merge: a28b44ddc348 653f765f05b8
> Author:     Alfonso S. Siciliano <asiciliano@FreeBSD.org>
> AuthorDate: 2025-10-09 15:39:10 +0000
> Commit:     Alfonso S. Siciliano <asiciliano@FreeBSD.org>
> CommitDate: 2025-10-09 15:39:10 +0000
>
>     contrib/bsddialog: Import version 1.0.5
>
>     Version for change and feature requests.
>
>     * Improve documentation for --alternate-screen and --normal-screen.
>       Request: https://bugs.freebsd.org/285459. (This PR is not about
>       bsddialog itself but is used as an example for an official FreeBSD
>       documentation request.)
>
>     * Reduce the number of screen refreshes to improve performance over a
>       115200 UART connection.
>       Request: https://gitlab.com/alfix/bsddialog/-/issues/8.
>
>     * Change textbox buttons to return distinct values (previously always
>       returned OK).
>       Request: https://reviews.freebsd.org/D48668; already committed in
>       contrib/ 96a241a35905078bdc5d20bf25943cdb67758dea
>
>     * Change forms navigation key behavior for ENTER and TAB.
>       Request: https://bugs.freebsd.org/287592.
>
>     Refer to /usr/src/contrib/bsddialog/CHANGELOG to know more.
>
>     PR:             287592
>     Reported by:    adrian
>     Sponsored by:   The FreeBSD Foundation
>
>     Merge commit '653f765f05b8c7e3908ae92e9bf61522a50cefc9' into YYY
>
>  contrib/bsddialog/.gitignore                 |  1 +
>  contrib/bsddialog/CHANGELOG                  | 50 ++++++++++++++++++++-
>  contrib/bsddialog/LICENSE                    |  2 +-
>  contrib/bsddialog/Makefile                   | 13 +++++-
>  contrib/bsddialog/README.md                  |  5 +--
>  contrib/bsddialog/examples_library/compile   |  8 ++--
>  contrib/bsddialog/examples_library/textbox.c | 38 ++++++++++++++++
>  contrib/bsddialog/lib/GNUmakefile            | 19 +++++++-
>  contrib/bsddialog/lib/Makefile               | 21 ++++++++-
>  contrib/bsddialog/lib/barbox.c               | 37 ++++++++--------
>  contrib/bsddialog/lib/bsddialog.3            | 16 +++++--
>  contrib/bsddialog/lib/bsddialog.h            |  5 ++-
>  contrib/bsddialog/lib/bsddialog_theme.h      |  2 +-
>  contrib/bsddialog/lib/datebox.c              | 28 ++++++------
>  contrib/bsddialog/lib/formbox.c              | 48 ++++++++++++++------
>  contrib/bsddialog/lib/lib_util.c             |  3 +-
>  contrib/bsddialog/lib/lib_util.h             |  4 +-
>  contrib/bsddialog/lib/libbsddialog.c         | 14 +++++-
>  contrib/bsddialog/lib/menubox.c              | 18 ++++----
>  contrib/bsddialog/lib/messagebox.c           | 16 +++----
>  contrib/bsddialog/lib/textbox.c              | 16 +++----
>  contrib/bsddialog/lib/theme.c                |  6 +--
>  contrib/bsddialog/lib/timebox.c              | 16 +++----
>  contrib/bsddialog/utility/GNUmakefile        | 11 ++++-
>  contrib/bsddialog/utility/Makefile           | 11 ++++-
>  contrib/bsddialog/utility/bsddialog.1        | 21 ++++++---
>  contrib/bsddialog/utility/bsddialog.c        |  2 +-
>  contrib/bsddialog/utility/util.h             |  2 +-
>  contrib/bsddialog/utility/util_builders.c    | 66
> ++++++++++++++--------------
>  contrib/bsddialog/utility/util_cli.c         |  2 +-
>  contrib/bsddialog/utility/util_theme.c       |  4 +-
>  31 files changed, 353 insertions(+), 152 deletions(-)
>
> diff --cc contrib/bsddialog/.gitignore
> index c8fc68ed8a0e,000000000000..c9613d477f7f
> mode 100644,000000..100644
> --- a/contrib/bsddialog/.gitignore
> +++ b/contrib/bsddialog/.gitignore
> @@@ -1,26 -1,0 +1,27 @@@
>  +bsddialog
>  +.depend*
>  +*.o
>  +*.so*
>  +*.a
>  +*.gz
>  +*.core
>  +*~
>  +BSDDIALOG.geany
>  +BSDDIALOG.tags
>  +examples_library/calendar
>  +examples_library/checklist
>  +examples_library/datebox
>  +examples_library/form
>  +examples_library/gauge
>  +examples_library/infobox
>  +examples_library/menu
>  +examples_library/mixedgauge
>  +examples_library/mixedlist
>  +examples_library/msgbox
>  +examples_library/pause
>  +examples_library/radiolist
>  +examples_library/rangebox
> ++examples_library/textbox
>  +examples_library/theme
>  +examples_library/timebox
>  +examples_library/yesno
> diff --cc contrib/bsddialog/Makefile
> index a6af8813a48e,000000000000..335b693470e6
> mode 100644,000000..100644
> --- a/contrib/bsddialog/Makefile
> +++ b/contrib/bsddialog/Makefile
> @@@ -1,38 -1,0 +1,47 @@@
>  +# PUBLIC DOMAIN - NO WARRANTY, see:
>  +#     <http://creativecommons.org/publicdomain/zero/1.0/>
>  +#
>  +# Written in 2023 by Alfonso Sabato Siciliano
>  +
>  +OUTPUT = bsddialog
> - export VERSION=1.0.4
> ++export VERSION=1.0.5
>  +.CURDIR ?= ${CURDIR}
>  +LIBPATH = ${.CURDIR}/lib
>  +LIBBSDDIALOG = ${LIBPATH}/libbsddialog.so
>  +UTILITYPATH = ${.CURDIR}/utility
>  +
>  +RM= rm -f
>  +LN = ln -s -f
>  +
>  +### command-line options ###
>  +# FreeBSD port Makefile: 'MAKE_ARGS = -DNORPATH'
>  +NORPATH ?=
>  +export DISABLERPATH=${NORPATH}
>  +# Debug: `make -DDEBUG` or `gmake DEBUG=1`
>  +DEBUG ?=
>  +export ENABLEDEBUG=${DEBUG}
>  +###################
>  +
> - all : ${OUTPUT}
> ++all: ${OUTPUT}
> ++
> ++install: all
> ++      ${MAKE} -C ${LIBPATH} install
> ++      ${MAKE} -C ${UTILITYPATH} install
> ++
> ++uninstall:
> ++      ${MAKE} -C ${UTILITYPATH} uninstall
> ++      ${MAKE} -C ${LIBPATH} uninstall
>  +
>  +${OUTPUT}: ${LIBBSDDIALOG}
>  +      ${MAKE} -C ${UTILITYPATH} LIBPATH=${LIBPATH}
>  +      ${LN} ${UTILITYPATH}/${OUTPUT} ${.CURDIR}/${OUTPUT}
>  +
>  +${LIBBSDDIALOG}:
>  +      ${MAKE} -C ${LIBPATH}
>  +
>  +clean:
>  +      ${MAKE} -C ${LIBPATH} clean
>  +      ${MAKE} -C ${UTILITYPATH} clean
>  +      ${RM} ${OUTPUT} *.core
>  +
> ++.PHONY: all install uninstall clean
> diff --cc contrib/bsddialog/README.md
> index 7b9b6cf8e84d,000000000000..5a25109775fe
> mode 100644,000000..100644
> --- a/contrib/bsddialog/README.md
> +++ b/contrib/bsddialog/README.md
> @@@ -1,142 -1,0 +1,141 @@@
> - # BSDDialog 1.0.4
> ++# BSDDialog 1.0.5
>  +
>  +This project provides **bsddialog** and **libbsddialog**, an utility
>  +and a library to build scripts and tools with TUI dialogs and widgets.
>  +
>  +
>  +## Demo
>  +
>  +[Screenshots](
> https://www.flickr.com/photos/alfonsosiciliano/albums/72157720215006074).
>  +
>  +
>  +## Getting Started
>  +
>  +FreeBSD and Linux:
>  +
>  +```
>  +% git clone https://gitlab.com/alfix/bsddialog.git
>  +% cd bsddialog
>  +% make
>  +% ./bsddialog --msgbox "Hello World!" 8 20
>  +```
>  +
>  +Output:
>  +
>  +![screenshot](screenshot.png)
>  +
>  +
>  +## Utility
>  +
>  +**Dialogs:**
>  +
>  +--calendar, --checklist, --datebox, --form, --gauge, --infobox,
> --inputbox,
>  +--menu, --mixedform, --mixedgauge, --msgbox, --passwordbox,
> --passwordform,
>  +--pause, --radiolist, --rangebox, --textbox, --timebox, --treeview,
> --yesno.
>  +
>  +**Manual**
>  +
>  + - [bsddialog(1)](
> https://alfonsosiciliano.gitlab.io/posts/2022-01-26-manual-bsddialog.html)
>  +
>  +
>  +**Examples**:
>  +
>  +```
>  +% ./bsddialog --backtitle "TITLE" --title msgbox --msgbox "Hello World!"
> 5 30
>  +% ./bsddialog --theme blackwhite --title msgbox --msgbox "Hello World!"
> 5 30
>  +% ./bsddialog --begin-y 2 --default-no --title yesno --yesno "Hello
> World!" 5 30
>  +% ./bsddialog --ascii-lines --pause "Hello World!" 8 50 10
>  +% ./bsddialog --checklist "Space to select" 0 0 0 Name1 Desc1 off Name2
> Desc2 on
>  +% ./bsddialog --title yesno --hline "bsddialog" --yesno "Hello World!" 5
> 25
>  +% ./bsddialog --extra-button --help-button --yesno "Hello World!" 0 0
>  +```
>  +
>  +and [Examples](
> https://gitlab.com/alfix/bsddialog/-/tree/main/examples_utility)
>  +in the _Public Domain_ to build new projects:
>  +```
>  +% sh ./examples_utility/calendar.sh
>  +% sh ./examples_utility/checklist.sh
>  +% sh ./examples_utility/datebox.sh
>  +% sh ./examples_utility/form.sh
>  +% sh ./examples_utility/gauge.sh
>  +% sh ./examples_utility/infobox.sh
>  +% sh ./examples_utility/inputbox.sh
>  +% sh ./examples_utility/menu.sh
>  +% sh ./examples_utility/mixedform.sh
>  +% sh ./examples_utility/mixedgauge.sh
>  +% sh ./examples_utility/msgbox.sh
>  +% sh ./examples_utility/passwordbox.sh
>  +% sh ./examples_utility/passwordform.sh
>  +% sh ./examples_utility/pause.sh
>  +% sh ./examples_utility/radiolist.sh
>  +% sh ./examples_utility/rangebox.sh
>  +% sh ./examples_utility/timebox.sh
>  +% sh ./examples_utility/yesno.sh
>  +```
>  +
>  +## Library
>  +
>  +**API**
>  +
>  + - [bsddialog.h](
> https://gitlab.com/alfix/bsddialog/-/blob/main/lib/bsddialog.h)
>  + - [bsddialog\_theme.h](
> https://gitlab.com/alfix/bsddialog/-/blob/main/lib/bsddialog_theme.h)
>  +
>  +
>  +**Manual**
>  +
>  + - [bsddialog(3)](
> https://alfonsosiciliano.gitlab.io/posts/2022-01-15-manual-libbsddialog.html
> )
>  +
>  +
>  +**Examples**:
>  +
>  +[Examples](
> https://gitlab.com/alfix/bsddialog/-/tree/main/examples_library)
>  +in the _Public Domain_ to build new projects:
>  +```
>  +% cd examples_library
>  +% sh compile
>  +% ./calendar
>  +% ./checklist
>  +% ./datebox
>  +% ./form
>  +% ./gauge
>  +% ./infobox
>  +% ./menu
>  +% ./mixedgauge
>  +% ./mixedlist
>  +% ./msgbox
>  +% ./pause
>  +% ./radiolist
>  +% ./rangebox
>  +% ./theme
>  +% ./timebox
>  +% ./yesno
>  +```
>  +
>  +
>  +## TODO and Ideas
>  +
>  + - menubar feature.
>  + - key callback.
>  + - Right-To-Left text.
>  + - some terminal does not hide the cursor, move it bottom-right before
> to getch.
>  + - refactor backtitle: add WINDOW \*dialog.backtitle for multiline and
> fix expanding screen.
>  + - refactor bottomdesc: add WINDOW \*dialog.bottomdesc to fix expandig
> screen.
>  + - accessibility https://wiki.freebsd.org/Accessibility/Wishlist/Base.
>  + - add bool conf.menu.depthlines.
>  + - implement custom getopt\_long().
>  + - refactor/redesign gauge().
>  + - improve grey lines expanding terminal (maybe redrawwin() in
> hide\_dialog()).
>  + - more restrictive strtol() and strtoul().
>  + - implement global buttons handler.
>  + - doc: external tutorial, theming guide.
>  + - implement menutype.min\_on.
> -  - improve refresh at startup, avoid dialog refresh before drawing text.
>  + - add debug API: bsddialog\_debug(y,x,refresh,"fmt",...).
>  + - add mouse support.
>  + - use alarm(2) for bsddialog\_pause.
>  + - delete form fieldlen constraint, hide or truncate long field in
> little screens.
>  + - improve --inputbox autosizing, consider also input length.
>  + - fix --form "" 0 0 0 Label 1 0 Init 1 12 0 0 (with 0 editable field).
>  + - fix --mixedform "" 0 0 0 Label 1 0 Init 1 12 0 0 2 (with 0 editable
> field).
>  + - add *text* customization to --hmsg *help-message*
>  + - check --passwordform *fieldlen* like --form and --mixedform.
> -
> ++ - add manuals to Makefiles installe and uninstall targets.
> diff --cc contrib/bsddialog/examples_library/textbox.c
> index 000000000000,2e76cbb97891..2e76cbb97891
> mode 000000,100644..100644
> --- a/contrib/bsddialog/examples_library/textbox.c
> +++ b/contrib/bsddialog/examples_library/textbox.c
> diff --cc contrib/bsddialog/lib/Makefile
> index 252b33f79848,000000000000..c728541a9f7a
> mode 100644,000000..100644
> --- a/contrib/bsddialog/lib/Makefile
> +++ b/contrib/bsddialog/lib/Makefile
> @@@ -1,44 -1,0 +1,63 @@@
>  +# PUBLIC DOMAIN - NO WARRANTY, see:
>  +#     <http://creativecommons.org/publicdomain/zero/1.0/>
>  +#
>  +# Written in 2021 by Alfonso Sabato Siciliano
>  +
>  +LIBRARY = bsddialog
>  +LIBRARY_SO = lib${LIBRARY:=.so}
>  +LIBRARY_A = lib${LIBRARY:=.a}
>  +HEADERS = bsddialog.h bsddialog_theme.h bsddialog_progressview.h
>  +SOURCES = barbox.c datebox.c formbox.c libbsddialog.c lib_util.c \
>  +      menubox.c messagebox.c textbox.c theme.c timebox.c
>  +OBJECTS = ${SOURCES:.c=.o}
> ++PREFIX = /usr/local
>  +
>  +.if defined(DEBUG)
>  +CFLAGS += -g
>  +.endif
>  +CFLAGS += -D_XOPEN_SOURCE_EXTENDED -fPIC -Wall -Wextra -std=gnu99 \
>  +      -fstack-protector-strong
>  +LDFLAGS += -fstack-protector-strong -shared -Wl,-x -Wl,--fatal-warnings \
>  +      -Wl,--warn-shared-textrel -Wl,-soname,${LIBRARY_SO}.${VERSION} \
>  +      -L/usr/lib -lncursesw -ltinfow
>  +
>  +LN = ln -s -f
>  +RM = rm -f
>  +
> - all : ${LIBRARY}
> ++all: ${LIBRARY}
> ++
> ++install: all
> ++      ${INSTALL} -m 0644 bsddialog.h
> ${DESTDIR}${PREFIX}/include/bsddialog.h
> ++      ${INSTALL} -m 0644 bsddialog_progressview.h
> ${DESTDIR}${PREFIX}/include/bsddialog_progressview.h
> ++      ${INSTALL} -m 0644 bsddialog_theme.h
> ${DESTDIR}${PREFIX}/include/bsddialog_theme.h
> ++      ${INSTALL} -m 0644 ${LIBRARY_A}
> ${DESTDIR}${PREFIX}/lib/${LIBRARY_A}
> ++      ${INSTALL} -m 0755 ${LIBRARY_SO}.${VERSION}
> ${DESTDIR}${PREFIX}/lib/${LIBRARY_SO}.${VERSION}
> ++      ${LN} ${LIBRARY_SO}.${VERSION}
> ${DESTDIR}${PREFIX}/lib/${LIBRARY_SO}
> ++
> ++uninstall:
> ++      ${RM} ${DESTDIR}${PREFIX}/include/bsddialog.h
> ++      ${RM} ${DESTDIR}${PREFIX}/include/bsddialog_progressview.h
> ++      ${RM} ${DESTDIR}${PREFIX}/include/bsddialog_theme.h
> ++      ${RM} ${DESTDIR}${PREFIX}/lib/${LIBRARY_A}
> ++      ${RM} ${DESTDIR}${PREFIX}/lib/${LIBRARY_SO}.${VERSION}
> ++      ${RM} ${DESTDIR}${PREFIX}/lib/${LIBRARY_SO}
>  +
>  +${LIBRARY}: ${LIBRARY_SO} ${LIBRARY_A}
>  +
>  +${LIBRARY_SO}.${VERSION}: ${OBJECTS}
>  +      ${CC} ${LDFLAGS} ${.ALLSRC} -o ${LIBRARY_SO}.${VERSION}
>  +
>  +${LIBRARY_SO}: ${LIBRARY_SO}.${VERSION}
>  +      ${LN} ${LIBRARY_SO}.${VERSION} ${LIBRARY_SO}
>  +
>  +${LIBRARY_A}: ${OBJECTS}
>  +      ${AR} cr ${.TARGET} ${OBJECTS}
>  +      ${RANLIB} ${.TARGET}
>  +
>  +.c.o:
>  +      ${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
>  +
>  +clean:
>  +      ${RM} ${LIBRARY_SO}* *.o *~ *.gz ${LIBRARY_A}
> ++
> ++.PHONY: all install uninstall ${LIBRARY} clean
>