Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F146012354
D55424.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
198 KB
Referenced Files
None
Subscribers
None
D55424.id.diff
View Options
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -62,7 +62,6 @@
/lib/libc/sys/kevent.c @jmgurney
/lib/libefivar/ @bsdimp
/lib/libfetch @dag-erling
-/lib/libfigpar @dag-erling
/lib/libpam/ @dag-erling
/lib/libsecureboot/ @stephane-rochoy-stormshield
/lib/libveriexec/ @stephane-rochoy-stormshield
diff --git a/MAINTAINERS b/MAINTAINERS
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -57,9 +57,7 @@
geli pjd Pre-commit review requested (both sys/geom/eli/ and sbin/geom/class/eli/).
iwm(4) adrian Pre-commit review requested, send to freebsd-wireless@freebsd.org
iwn(4) adrian Pre-commit review requested, send to freebsd-wireless@freebsd.org
-libdpv dteske Pre-commit review requested. Keep in sync with dpv(1).
libfetch des Pre-commit review requested
-libfigpar dteske Pre-commit review requested.
libm freebsd-numerics Send email with patches to freebsd-numerics@
libpam des Pre-commit review requested, email only.
linprocfs des Pre-commit review requested, email only.
@@ -117,7 +115,6 @@
top(1) eadler Pre-commit review requested.
ufshci(4) jaeyoon Pre-commit review requested.
usr.sbin/bsdconfig dteske Pre-commit phabricator review requested.
-usr.sbin/dpv dteske Pre-commit review requested. Keep in sync with libdpv.
usr.sbin/pkg pkg@ Please coordinate behavior or flag changes with pkg team.
usr.sbin/sysrc dteske Pre-commit phabricator review requested. Keep in sync with bsdconfig(8) sysrc.subr.
vmm(4) #bhyve Pre-commit review requested via #bhyve phabricator group.
diff --git a/Makefile.inc1 b/Makefile.inc1
--- a/Makefile.inc1
+++ b/Makefile.inc1
@@ -3350,7 +3350,6 @@
lib/libbz2 ${_libcom_err} lib/libcrypt \
lib/libc++ \
lib/libelf lib/libexpat \
- lib/libfigpar \
${_lib_libgssapi} \
lib/libjail \
lib/libkiconv lib/libkldelf lib/libkvm \
@@ -3389,11 +3388,6 @@
${_secure_lib_libcrypto} ${_secure_lib_libssl} \
${_lib_libldns} ${_secure_lib_libssh}
-.if ${MK_DIALOG} != "no"
-_prebuild_libs+= gnu/lib/libdialog
-gnu/lib/libdialog__L: lib/msun__L lib/ncurses/tinfo__L lib/ncurses/ncurses__L
-.endif
-
.if ${MK_GOOGLETEST} != "no"
_prebuild_libs+= lib/libregex
.endif
diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc
--- a/ObsoleteFiles.inc
+++ b/ObsoleteFiles.inc
@@ -51,6 +51,32 @@
# xargs -n1 | sort | uniq -d;
# done
+# 20260222: Removed dialog, figpar, dpv
+OLD_FILES+=usr/bin/dialog
+OLD_FILES+=usr/bin/dpv
+OLD_FILES+=usr/lib/libdialog.a
+OLD_FILES+=usr/lib/libdialog.so
+OLD_LIBS+=usr/lib/libdialog.so.10
+OLD_FILES+=usr/lib/libdpv.a
+OLD_FILES+=usr/lib/libdpv.so
+OLD_LIBS+=usr/lib/libdpv.so.3
+OLD_FILES+=usr/lib/libfigpar.a
+OLD_FILES+=usr/lib/libfigpar.so
+OLD_LIBS+=usr/lib/libfigpar.so.0
+OLD_FILES+=usr/share/man/man1/dialog.1.gz
+OLD_FILES+=usr/share/man/man1/dpv.1.gz
+OLD_FILES+=usr/share/man/man3/dialog.3.gz
+OLD_FILES+=usr/share/man/man3/dpv.3.gz
+OLD_FILES+=usr/share/man/man3/dpv_free.3.gz
+OLD_FILES+=usr/share/man/man3/figpar.3.gz
+OLD_FILES+=usr/share/man/man3/get_config_option.3.gz
+OLD_FILES+=usr/share/man/man3/parse_config.3.gz
+OLD_FILES+=usr/share/man/man3/replaceall.3.gz
+OLD_FILES+=usr/share/man/man3/strcount.3.gz
+OLD_FILES+=usr/share/man/man3/strexpand.3.gz
+OLD_FILES+=usr/share/man/man3/strexpandnl.3.gz
+OLD_FILES+=usr/share/man/man3/strtolower.3.gz
+
# 20260209: Moved allwinner pages to share/man/man4
OLD_FILES+=usr/share/man/man4/arm/aw_gpio.4.gz
OLD_FILES+=usr/share/man/man4/arm/aw_mmc.4.gz
diff --git a/gnu/lib/Makefile b/gnu/lib/Makefile
--- a/gnu/lib/Makefile
+++ b/gnu/lib/Makefile
@@ -1,7 +1,6 @@
.include <src.opts.mk>
SUBDIR=
-SUBDIR.${MK_DIALOG}+= libdialog
SUBDIR.${MK_TESTS}+= tests
SUBDIR_PARALLEL=
diff --git a/gnu/lib/libdialog/Makefile b/gnu/lib/libdialog/Makefile
deleted file mode 100644
--- a/gnu/lib/libdialog/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-DIALOG= ${SRCTOP}/contrib/dialog
-
-LIB= dialog
-SHLIB_MAJOR= 10
-SRCS= argv.c arrows.c buildlist.c buttons.c calendar.c checklist.c \
- columns.c dlg_keys.c editbox.c fselect.c formbox.c guage.c \
- help.c inputbox.c inputstr.c menubox.c mixedform.c \
- mixedgauge.c mouse.c mousewget.c msgbox.c pause.c prgbox.c \
- progressbox.c rangebox.c rc.c tailbox.c textbox.c timebox.c \
- trace.c treeview.c ttysize.c ui_getc.c util.c version.c yesno.c
-INCS= dialog.h dlg_colors.h dlg_config.h dlg_keys.h
-MAN= dialog.3
-
-LIBADD= tinfow ncursesw m
-
-CFLAGS+= -I${.CURDIR} -I${DIALOG} -D_XOPEN_SOURCE_EXTENDED
-.PATH: ${DIALOG}
-WARNS?= 1
-
-.include <bsd.lib.mk>
diff --git a/gnu/lib/libdialog/Makefile.depend b/gnu/lib/libdialog/Makefile.depend
deleted file mode 100644
--- a/gnu/lib/libdialog/Makefile.depend
+++ /dev/null
@@ -1,18 +0,0 @@
-# Autogenerated - do NOT edit!
-
-DIRDEPS = \
- include \
- include/xlocale \
- lib/${CSU_DIR} \
- lib/libc \
- lib/libcompiler_rt \
- lib/msun \
- lib/ncurses/ncurses \
- lib/ncurses/tinfo \
-
-
-.include <dirdeps.mk>
-
-.if ${DEP_RELDIR} == ${_DEP_RELDIR}
-# local dependencies - needed for -jN in clean tree
-.endif
diff --git a/gnu/lib/libdialog/dlg_config.h b/gnu/lib/libdialog/dlg_config.h
deleted file mode 100644
--- a/gnu/lib/libdialog/dlg_config.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/* dlg_config.h. Generated automatically by configure. */
-/*
- * The configure script expands this as a set of definitions
- */
-
-#define CURSES_WACS_ARRAY _nc_wacs
-#define CURSES_WACS_SYMBOLS 1
-#define DIALOG_PATCHDATE 20210117
-#define DIALOG_VERSION "1.3"
-#ifndef GCC_NORETURN
-#define GCC_NORETURN __attribute__((noreturn))
-#endif
-#define GCC_PRINTF 1
-#ifndef GCC_PRINTFLIKE
-#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
-#endif
-#define GCC_SCANF 1
-#ifndef GCC_SCANFLIKE
-#define GCC_SCANFLIKE(fmt,var) __attribute__((format(scanf,fmt,var)))
-#endif
-#ifndef GCC_UNUSED
-#define GCC_UNUSED __attribute__((unused))
-#endif
-#define HAVE_ALLOCA 1
-#define HAVE_BTOWC 1
-#define HAVE_COLOR 1
-#define HAVE_DIRENT_H 1
-#define HAVE_DLG_FORMBOX 1
-#define HAVE_DLG_GAUGE 1
-#define HAVE_DLG_MIXEDFORM 1
-#define HAVE_DLG_TAILBOX 1
-#define HAVE_DLG_TRACE 1
-#define HAVE_FEOF_UNLOCKED 1
-#define HAVE_FLUSHINP 1
-#define HAVE_FSEEKO 1
-#define HAVE_GETATTRS 1
-#define HAVE_GETBEGX 1
-#define HAVE_GETBEGY 1
-#define HAVE_GETBEGYX 1
-#define HAVE_GETCURX 1
-#define HAVE_GETCURY 1
-#define HAVE_GETCWD 1
-#define HAVE_GETEGID 1
-#define HAVE_GETEUID 1
-#define HAVE_GETGID 1
-#define HAVE_GETMAXX 1
-#define HAVE_GETMAXY 1
-#define HAVE_GETMAXYX 1
-#define HAVE_GETPAGESIZE 1
-#define HAVE_GETPARX 1
-#define HAVE_GETPARY 1
-#define HAVE_GETPARYX 1
-#define HAVE_GETUID 1
-#define HAVE_ICONV 1
-#define HAVE_INTTYPES_H 1
-#define HAVE_LANGINFO_CODESET 1
-#define HAVE_LC_MESSAGES 1
-#define HAVE_LIMITS_H 1
-#define HAVE_LOCALE_H 1
-#define HAVE_MBLEN 1
-#define HAVE_MBRLEN 1
-#define HAVE_MBRTOWC 1
-#define HAVE_MBSTATE_T 1
-#define HAVE_MBTOWC 1
-#define HAVE_MEMORY_H 1
-#define HAVE_MIXEDGAUGE 1
-#define HAVE_MKTIME 1
-#define HAVE_MMAP 1
-#define HAVE_MUNMAP 1
-#define HAVE_NCURSES_H 1
-#define HAVE_NL_TYPES_H 1
-#define HAVE_PUTENV 1
-#define HAVE_RC_FILE 1
-#define HAVE_RC_FILE2 1
-#define HAVE_SEARCH_H 1
-#define HAVE_SETENV 1
-#define HAVE_SETLOCALE 1
-#define HAVE_SIZECHANGE 1
-#define HAVE_STDDEF_H 1
-#define HAVE_STDINT_H 1
-#define HAVE_STDLIB_H 1
-#define HAVE_STPCPY 1
-#define HAVE_STRCASECMP 1
-#define HAVE_STRCHR 1
-#define HAVE_STRDUP 1
-#define HAVE_STRFTIME 1
-#define HAVE_STRINGS_H 1
-#define HAVE_STRING_H 1
-#define HAVE_STRTOUL 1
-#define HAVE_SYS_IOCTL_H 1
-#define HAVE_SYS_PARAM_H 1
-#define HAVE_SYS_STAT_H 1
-#define HAVE_SYS_TYPES_H 1
-#define HAVE_SYS_WAIT_H 1
-#define HAVE_TERMIOS_H 1
-#define HAVE_TERM_H 1
-#define HAVE_TSEARCH 1
-#define HAVE_TYPE_CHTYPE 1
-#define HAVE_UNCTRL_H 1
-#define HAVE_UNISTD_H 1
-#define HAVE_USE_DEFAULT_COLORS 1
-#define HAVE_WAITPID 1
-#define HAVE_WCHGAT 1
-#define HAVE_WCSRTOMBS 1
-#define HAVE_WCSTOMBS 1
-#define HAVE_WCTOB 1
-#define HAVE_WCTOMB 1
-#define HAVE_WCURSYNCUP 1
-#define HAVE_WGETPARENT 1
-#define HAVE_WGET_WCH 1
-#define HAVE_WHIPTAIL 1
-#define HAVE_WSYNCUP 1
-#define HAVE_XDIALOG 1
-#define HAVE_XDIALOG2 1
-#define ICONV_CONST
-#define MIXEDCASE_FILENAMES 1
-#define NCURSES 1
-#define NEED_WCHAR_H 1
-#define PACKAGE "dialog"
-#define RETSIGTYPE void
-#define STDC_HEADERS 1
-#define SYSTEM_NAME "FreeBSD"
-#define TIME_WITH_SYS_TIME 1
-#define TYPE_CHTYPE_IS_SCALAR 1
-#define USE_WIDE_CURSES 1
-#define WIDEC_CURSES 1
diff --git a/gnu/usr.bin/Makefile b/gnu/usr.bin/Makefile
--- a/gnu/usr.bin/Makefile
+++ b/gnu/usr.bin/Makefile
@@ -1,6 +1,5 @@
.include <src.opts.mk>
-SUBDIR.${MK_DIALOG}+= dialog
SUBDIR.${MK_TESTS}+= tests
SUBDIR_PARALLEL=
diff --git a/gnu/usr.bin/dialog/Makefile b/gnu/usr.bin/dialog/Makefile
deleted file mode 100644
--- a/gnu/usr.bin/dialog/Makefile
+++ /dev/null
@@ -1,8 +0,0 @@
-DIALOG= ${SRCTOP}/contrib/dialog
-PROG= dialog
-
-LIBADD= dialog tinfow ncursesw m
-CFLAGS+= -I${.CURDIR} -I${DIALOG}
-.PATH: ${DIALOG}
-
-.include <bsd.prog.mk>
diff --git a/gnu/usr.bin/dialog/Makefile.depend b/gnu/usr.bin/dialog/Makefile.depend
deleted file mode 100644
--- a/gnu/usr.bin/dialog/Makefile.depend
+++ /dev/null
@@ -1,19 +0,0 @@
-# Autogenerated - do NOT edit!
-
-DIRDEPS = \
- gnu/lib/libdialog \
- include \
- include/xlocale \
- lib/${CSU_DIR} \
- lib/libc \
- lib/libcompiler_rt \
- lib/msun \
- lib/ncurses/ncurses \
- lib/ncurses/tinfo \
-
-
-.include <dirdeps.mk>
-
-.if ${DEP_RELDIR} == ${_DEP_RELDIR}
-# local dependencies - needed for -jN in clean tree
-.endif
diff --git a/lib/Makefile b/lib/Makefile
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -134,7 +134,6 @@
SUBDIR_DEPEND_libcasper= libnv
SUBDIR_DEPEND_libcrypt= libmd
SUBDIR_DEPEND_libdevstat= libkvm
-SUBDIR_DEPEND_libdpv= libfigpar ncurses libutil
SUBDIR_DEPEND_libedit= ncurses
SUBDIR_DEPEND_libgeom= libexpat libsbuf
.if ${MK_MITKRB5} == "no"
@@ -176,7 +175,6 @@
SUBDIR.${MK_CUSE}+= libcuse
SUBDIR.${MK_TOOLCHAIN}+=libpe
-SUBDIR.${MK_DIALOG}+= libdpv libfigpar
SUBDIR.${MK_FDT}+= libfdt
SUBDIR.${MK_FILE}+= libmagic
SUBDIR.${MK_GPIO}+= libgpio
diff --git a/lib/libdpv/Makefile b/lib/libdpv/Makefile
deleted file mode 100644
--- a/lib/libdpv/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-PACKAGE= dpv
-LIB= dpv
-SHLIB_MAJOR= 3
-INCS= dpv.h
-MAN= dpv.3
-MLINKS= dpv.3 dpv_free.3
-
-LIBADD= dialog figpar util tinfow ncursesw
-
-SRCS= dialog_util.c dialogrc.c dprompt.c dpv.c status.c util.c
-
-CFLAGS+= -I${.CURDIR}
-
-.include <bsd.lib.mk>
diff --git a/lib/libdpv/Makefile.depend b/lib/libdpv/Makefile.depend
deleted file mode 100644
--- a/lib/libdpv/Makefile.depend
+++ /dev/null
@@ -1,21 +0,0 @@
-# Autogenerated - do NOT edit!
-
-DIRDEPS = \
- gnu/lib/libdialog \
- include \
- include/xlocale \
- lib/${CSU_DIR} \
- lib/libc \
- lib/libcompiler_rt \
- lib/libfigpar \
- lib/libutil \
- lib/msun \
- lib/ncurses/ncurses \
- lib/ncurses/tinfo \
-
-
-.include <dirdeps.mk>
-
-.if ${DEP_RELDIR} == ${_DEP_RELDIR}
-# local dependencies - needed for -jN in clean tree
-.endif
diff --git a/lib/libdpv/dialog_util.h b/lib/libdpv/dialog_util.h
deleted file mode 100644
--- a/lib/libdpv/dialog_util.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*-
- * Copyright (c) 2013-2014 Devin Teske <dteske@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _DIALOG_UTIL_H_
-#define _DIALOG_UTIL_H_
-
-#include <sys/types.h>
-
-#include "dialogrc.h"
-
-#define DIALOG_SPAWN_DEBUG 0 /* Debug spawning of [X]dialog(1) */
-
-/* dialog(3) and [X]dialog(1) characteristics */
-#define DIALOG "dialog"
-#define XDIALOG "Xdialog"
-#define PROMPT_MAX 16384
-#define ENV_DIALOG "DIALOG"
-#define ENV_USE_COLOR "USE_COLOR"
-#define ENV_XDIALOG_HIGH_DIALOG_COMPAT "XDIALOG_HIGH_DIALOG_COMPAT"
-extern uint8_t dialog_test;
-extern uint8_t use_libdialog;
-extern uint8_t use_dialog;
-extern uint8_t use_xdialog;
-extern uint8_t use_color;
-extern char dialog[];
-
-/* dialog(3) and [X]dialog(1) functionality */
-extern char *title, *backtitle;
-extern int dheight, dwidth;
-
-__BEGIN_DECLS
-uint8_t dialog_prompt_nlstate(const char *_prompt);
-void dialog_maxsize_free(void);
-char *dialog_prompt_lastline(char *_prompt, uint8_t _nlstate);
-int dialog_maxcols(void);
-int dialog_maxrows(void);
-int dialog_prompt_wrappedlines(char *_prompt, int _ncols,
- uint8_t _nlstate);
-int dialog_spawn_gauge(char *_init_prompt, pid_t *_pid);
-int tty_maxcols(void);
-#define tty_maxrows() dialog_maxrows()
-unsigned int dialog_prompt_longestline(const char *_prompt,
- uint8_t _nlstate);
-unsigned int dialog_prompt_numlines(const char *_prompt, uint8_t _nlstate);
-__END_DECLS
-
-#endif /* !_DIALOG_UTIL_H_ */
diff --git a/lib/libdpv/dialog_util.c b/lib/libdpv/dialog_util.c
deleted file mode 100644
--- a/lib/libdpv/dialog_util.c
+++ /dev/null
@@ -1,637 +0,0 @@
-/*-
- * Copyright (c) 2013-2018 Devin Teske <dteske@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-#include <sys/ioctl.h>
-
-#include <ctype.h>
-#include <err.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <spawn.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <termios.h>
-#include <unistd.h>
-
-#include "dialog_util.h"
-#include "dpv.h"
-#include "dpv_private.h"
-
-extern char **environ;
-
-#define TTY_DEFAULT_ROWS 24
-#define TTY_DEFAULT_COLS 80
-
-/* [X]dialog(1) characteristics */
-uint8_t dialog_test = 0;
-uint8_t use_dialog = 0;
-uint8_t use_libdialog = 1;
-uint8_t use_xdialog = 0;
-uint8_t use_color = 1;
-char dialog[PATH_MAX] = DIALOG;
-
-/* [X]dialog(1) functionality */
-char *title = NULL;
-char *backtitle = NULL;
-int dheight = 0;
-int dwidth = 0;
-static char *dargv[64] = { NULL };
-
-/* TTY/Screen characteristics */
-static struct winsize *maxsize = NULL;
-
-/* Function prototypes */
-static void tty_maxsize_update(void);
-static void x11_maxsize_update(void);
-
-/*
- * Update row/column fields of `maxsize' global (used by dialog_maxrows() and
- * dialog_maxcols()). If the `maxsize' pointer is NULL, it will be initialized.
- * The `ws_row' and `ws_col' fields of `maxsize' are updated to hold current
- * maximum height and width (respectively) for a dialog(1) widget based on the
- * active TTY size.
- *
- * This function is called automatically by dialog_maxrows/cols() to reflect
- * changes in terminal size in-between calls.
- */
-static void
-tty_maxsize_update(void)
-{
- int fd = STDIN_FILENO;
- struct termios t;
-
- if (maxsize == NULL) {
- if ((maxsize = malloc(sizeof(struct winsize))) == NULL)
- errx(EXIT_FAILURE, "Out of memory?!");
- memset((void *)maxsize, '\0', sizeof(struct winsize));
- }
-
- if (!isatty(fd))
- fd = open("/dev/tty", O_RDONLY);
- if ((tcgetattr(fd, &t) < 0) || (ioctl(fd, TIOCGWINSZ, maxsize) < 0)) {
- maxsize->ws_row = TTY_DEFAULT_ROWS;
- maxsize->ws_col = TTY_DEFAULT_COLS;
- }
-}
-
-/*
- * Update row/column fields of `maxsize' global (used by dialog_maxrows() and
- * dialog_maxcols()). If the `maxsize' pointer is NULL, it will be initialized.
- * The `ws_row' and `ws_col' fields of `maxsize' are updated to hold current
- * maximum height and width (respectively) for an Xdialog(1) widget based on
- * the active video resolution of the X11 environment.
- *
- * This function is called automatically by dialog_maxrows/cols() to initialize
- * `maxsize'. Since video resolution changes are less common and more obtrusive
- * than changes to terminal size, the dialog_maxrows/cols() functions only call
- * this function when `maxsize' is set to NULL.
- */
-static void
-x11_maxsize_update(void)
-{
- FILE *f = NULL;
- char *cols;
- char *cp;
- char *rows;
- char cmdbuf[LINE_MAX];
- char rbuf[LINE_MAX];
-
- if (maxsize == NULL) {
- if ((maxsize = malloc(sizeof(struct winsize))) == NULL)
- errx(EXIT_FAILURE, "Out of memory?!");
- memset((void *)maxsize, '\0', sizeof(struct winsize));
- }
-
- /* Assemble the command necessary to get X11 sizes */
- snprintf(cmdbuf, LINE_MAX, "%s --print-maxsize 2>&1", dialog);
-
- fflush(STDIN_FILENO); /* prevent popen(3) from seeking on stdin */
-
- if ((f = popen(cmdbuf, "r")) == NULL) {
- if (debug)
- warnx("WARNING! Command `%s' failed", cmdbuf);
- return;
- }
-
- /* Read in the line returned from Xdialog(1) */
- if ((fgets(rbuf, LINE_MAX, f) == NULL) || (pclose(f) < 0))
- return;
-
- /* Check for X11-related errors */
- if (strncmp(rbuf, "Xdialog: Error", 14) == 0)
- return;
-
- /* Parse expected output: MaxSize: YY, XXX */
- if ((rows = strchr(rbuf, ' ')) == NULL)
- return;
- if ((cols = strchr(rows, ',')) != NULL) {
- /* strtonum(3) doesn't like trailing junk */
- *(cols++) = '\0';
- if ((cp = strchr(cols, '\n')) != NULL)
- *cp = '\0';
- }
-
- /* Convert to unsigned short */
- maxsize->ws_row = (unsigned short)strtonum(
- rows, 0, USHRT_MAX, (const char **)NULL);
- maxsize->ws_col = (unsigned short)strtonum(
- cols, 0, USHRT_MAX, (const char **)NULL);
-}
-
-/*
- * Return the current maximum height (rows) for an [X]dialog(1) widget.
- */
-int
-dialog_maxrows(void)
-{
-
- if (use_xdialog && maxsize == NULL)
- x11_maxsize_update(); /* initialize maxsize for GUI */
- else if (!use_xdialog)
- tty_maxsize_update(); /* update maxsize for TTY */
- return (maxsize->ws_row);
-}
-
-/*
- * Return the current maximum width (cols) for an [X]dialog(1) widget.
- */
-int
-dialog_maxcols(void)
-{
-
- if (use_xdialog && maxsize == NULL)
- x11_maxsize_update(); /* initialize maxsize for GUI */
- else if (!use_xdialog)
- tty_maxsize_update(); /* update maxsize for TTY */
-
- if (use_dialog || use_libdialog) {
- if (use_shadow)
- return (maxsize->ws_col - 2);
- else
- return (maxsize->ws_col);
- } else
- return (maxsize->ws_col);
-}
-
-/*
- * Return the current maximum width (cols) for the terminal.
- */
-int
-tty_maxcols(void)
-{
-
- if (use_xdialog && maxsize == NULL)
- x11_maxsize_update(); /* initialize maxsize for GUI */
- else if (!use_xdialog)
- tty_maxsize_update(); /* update maxsize for TTY */
-
- return (maxsize->ws_col);
-}
-
-/*
- * Spawn an [X]dialog(1) `--gauge' box with a `--prompt' value of init_prompt.
- * Writes the resulting process ID to the pid_t pointed at by `pid'. Returns a
- * file descriptor (int) suitable for writing data to the [X]dialog(1) instance
- * (data written to the file descriptor is seen as standard-in by the spawned
- * [X]dialog(1) process).
- */
-int
-dialog_spawn_gauge(char *init_prompt, pid_t *pid)
-{
- char dummy_init[2] = "";
- char *cp;
- int height;
- int width;
- int error;
- posix_spawn_file_actions_t action;
-#if DIALOG_SPAWN_DEBUG
- unsigned int i;
-#endif
- unsigned int n = 0;
- int stdin_pipe[2] = { -1, -1 };
-
- /* Override `dialog' with a path from ENV_DIALOG if provided */
- if ((cp = getenv(ENV_DIALOG)) != NULL)
- snprintf(dialog, PATH_MAX, "%s", cp);
-
- /* For Xdialog(1), set ENV_XDIALOG_HIGH_DIALOG_COMPAT */
- setenv(ENV_XDIALOG_HIGH_DIALOG_COMPAT, "1", 1);
-
- /* Constrain the height/width */
- height = dialog_maxrows();
- if (backtitle != NULL)
- height -= use_shadow ? 5 : 4;
- if (dheight < height)
- height = dheight;
- width = dialog_maxcols();
- if (dwidth < width)
- width = dwidth;
-
- /* Populate argument array */
- dargv[n++] = dialog;
- if (title != NULL) {
- if ((dargv[n] = malloc(8)) == NULL)
- errx(EXIT_FAILURE, "Out of memory?!");
- sprintf(dargv[n++], "--title");
- dargv[n++] = title;
- } else {
- if ((dargv[n] = malloc(8)) == NULL)
- errx(EXIT_FAILURE, "Out of memory?!");
- sprintf(dargv[n++], "--title");
- if ((dargv[n] = malloc(1)) == NULL)
- errx(EXIT_FAILURE, "Out of memory?!");
- *dargv[n++] = '\0';
- }
- if (backtitle != NULL) {
- if ((dargv[n] = malloc(12)) == NULL)
- errx(EXIT_FAILURE, "Out of memory?!");
- sprintf(dargv[n++], "--backtitle");
- dargv[n++] = backtitle;
- }
- if (use_color) {
- if ((dargv[n] = malloc(11)) == NULL)
- errx(EXIT_FAILURE, "Out of memory?!");
- sprintf(dargv[n++], "--colors");
- }
- if (use_xdialog) {
- if ((dargv[n] = malloc(7)) == NULL)
- errx(EXIT_FAILURE, "Out of memory?!");
- sprintf(dargv[n++], "--left");
-
- /*
- * NOTE: Xdialog(1)'s `--wrap' appears to be broken for the
- * `--gauge' widget prompt-updates. Add it anyway (in-case it
- * gets fixed in some later release).
- */
- if ((dargv[n] = malloc(7)) == NULL)
- errx(EXIT_FAILURE, "Out of memory?!");
- sprintf(dargv[n++], "--wrap");
- }
- if ((dargv[n] = malloc(8)) == NULL)
- errx(EXIT_FAILURE, "Out of memory?!");
- sprintf(dargv[n++], "--gauge");
- dargv[n++] = use_xdialog ? dummy_init : init_prompt;
- if ((dargv[n] = malloc(40)) == NULL)
- errx(EXIT_FAILURE, "Out of memory?!");
- snprintf(dargv[n++], 40, "%u", height);
- if ((dargv[n] = malloc(40)) == NULL)
- errx(EXIT_FAILURE, "Out of memory?!");
- snprintf(dargv[n++], 40, "%u", width);
- dargv[n] = NULL;
-
- /* Open a pipe(2) to communicate with [X]dialog(1) */
- if (pipe(stdin_pipe) < 0)
- err(EXIT_FAILURE, "%s: pipe(2)", __func__);
-
- /* Fork [X]dialog(1) process */
-#if DIALOG_SPAWN_DEBUG
- fprintf(stderr, "%s: spawning `", __func__);
- for (i = 0; i < n; i++) {
- if (i == 0)
- fprintf(stderr, "%s", dargv[i]);
- else if (*dargv[i] == '-' && *(dargv[i] + 1) == '-')
- fprintf(stderr, " %s", dargv[i]);
- else
- fprintf(stderr, " \"%s\"", dargv[i]);
- }
- fprintf(stderr, "'\n");
-#endif
- posix_spawn_file_actions_init(&action);
- posix_spawn_file_actions_adddup2(&action, stdin_pipe[0], STDIN_FILENO);
- posix_spawn_file_actions_addclose(&action, stdin_pipe[1]);
- error = posix_spawnp(pid, dialog, &action,
- (const posix_spawnattr_t *)NULL, dargv, environ);
- if (error != 0) err(EXIT_FAILURE, "%s", dialog);
-
- /* NB: Do not free(3) *dargv[], else SIGSEGV */
-
- return (stdin_pipe[1]);
-}
-
-/*
- * Returns the number of lines in buffer pointed to by `prompt'. Takes both
- * newlines and escaped-newlines into account.
- */
-unsigned int
-dialog_prompt_numlines(const char *prompt, uint8_t nlstate)
-{
- uint8_t nls = nlstate; /* See dialog_prompt_nlstate() */
- const char *cp = prompt;
- unsigned int nlines = 1;
-
- if (prompt == NULL || *prompt == '\0')
- return (0);
-
- while (*cp != '\0') {
- if (use_dialog) {
- if (strncmp(cp, "\\n", 2) == 0) {
- cp++;
- nlines++;
- nls = TRUE; /* See declaration comment */
- } else if (*cp == '\n') {
- if (!nls)
- nlines++;
- nls = FALSE; /* See declaration comment */
- }
- } else if (use_libdialog) {
- if (*cp == '\n')
- nlines++;
- } else if (strncmp(cp, "\\n", 2) == 0) {
- cp++;
- nlines++;
- }
- cp++;
- }
-
- return (nlines);
-}
-
-/*
- * Returns the length in bytes of the longest line in buffer pointed to by
- * `prompt'. Takes newlines and escaped newlines into account. Also discounts
- * dialog(1) color escape codes if enabled (via `use_color' global).
- */
-unsigned int
-dialog_prompt_longestline(const char *prompt, uint8_t nlstate)
-{
- uint8_t backslash = 0;
- uint8_t nls = nlstate; /* See dialog_prompt_nlstate() */
- const char *p = prompt;
- int longest = 0;
- int n = 0;
-
- /* `prompt' parameter is required */
- if (prompt == NULL)
- return (0);
- if (*prompt == '\0')
- return (0); /* shortcut */
-
- /* Loop until the end of the string */
- while (*p != '\0') {
- /* dialog(1) and dialog(3) will render literal newlines */
- if (use_dialog || use_libdialog) {
- if (*p == '\n') {
- if (!use_libdialog && nls)
- n++;
- else {
- if (n > longest)
- longest = n;
- n = 0;
- }
- nls = FALSE; /* See declaration comment */
- p++;
- continue;
- }
- }
-
- /* Check for backslash character */
- if (*p == '\\') {
- /* If second backslash, count as a single-char */
- if ((backslash ^= 1) == 0)
- n++;
- } else if (backslash) {
- if (*p == 'n' && !use_libdialog) { /* new line */
- /* NB: dialog(3) ignores escaped newlines */
- nls = TRUE; /* See declaration comment */
- if (n > longest)
- longest = n;
- n = 0;
- } else if (use_color && *p == 'Z') {
- if (*++p != '\0')
- p++;
- backslash = 0;
- continue;
- } else /* [X]dialog(1)/dialog(3) only expand those */
- n += 2;
-
- backslash = 0;
- } else
- n++;
- p++;
- }
- if (n > longest)
- longest = n;
-
- return (longest);
-}
-
-/*
- * Returns a pointer to the last line in buffer pointed to by `prompt'. Takes
- * both newlines (if using dialog(1) versus Xdialog(1)) and escaped newlines
- * into account. If no newlines (escaped or otherwise) appear in the buffer,
- * `prompt' is returned. If passed a NULL pointer, returns NULL.
- */
-char *
-dialog_prompt_lastline(char *prompt, uint8_t nlstate)
-{
- uint8_t nls = nlstate; /* See dialog_prompt_nlstate() */
- char *lastline;
- char *p;
-
- if (prompt == NULL)
- return (NULL);
- if (*prompt == '\0')
- return (prompt); /* shortcut */
-
- lastline = p = prompt;
- while (*p != '\0') {
- /* dialog(1) and dialog(3) will render literal newlines */
- if (use_dialog || use_libdialog) {
- if (*p == '\n') {
- if (use_libdialog || !nls)
- lastline = p + 1;
- nls = FALSE; /* See declaration comment */
- }
- }
- /* dialog(3) does not expand escaped newlines */
- if (use_libdialog) {
- p++;
- continue;
- }
- if (*p == '\\' && *(p + 1) != '\0' && *(++p) == 'n') {
- nls = TRUE; /* See declaration comment */
- lastline = p + 1;
- }
- p++;
- }
-
- return (lastline);
-}
-
-/*
- * Returns the number of extra lines generated by wrapping the text in buffer
- * pointed to by `prompt' within `ncols' columns (for prompts, this should be
- * dwidth - 4). Also discounts dialog(1) color escape codes if enabled (via
- * `use_color' global).
- */
-int
-dialog_prompt_wrappedlines(char *prompt, int ncols, uint8_t nlstate)
-{
- uint8_t backslash = 0;
- uint8_t nls = nlstate; /* See dialog_prompt_nlstate() */
- char *cp;
- char *p = prompt;
- int n = 0;
- int wlines = 0;
-
- /* `prompt' parameter is required */
- if (p == NULL)
- return (0);
- if (*p == '\0')
- return (0); /* shortcut */
-
- /* Loop until the end of the string */
- while (*p != '\0') {
- /* dialog(1) and dialog(3) will render literal newlines */
- if (use_dialog || use_libdialog) {
- if (*p == '\n') {
- if (use_dialog || !nls)
- n = 0;
- nls = FALSE; /* See declaration comment */
- }
- }
-
- /* Check for backslash character */
- if (*p == '\\') {
- /* If second backslash, count as a single-char */
- if ((backslash ^= 1) == 0)
- n++;
- } else if (backslash) {
- if (*p == 'n' && !use_libdialog) { /* new line */
- /* NB: dialog(3) ignores escaped newlines */
- nls = TRUE; /* See declaration comment */
- n = 0;
- } else if (use_color && *p == 'Z') {
- if (*++p != '\0')
- p++;
- backslash = 0;
- continue;
- } else /* [X]dialog(1)/dialog(3) only expand those */
- n += 2;
-
- backslash = 0;
- } else
- n++;
-
- /* Did we pass the width barrier? */
- if (n > ncols) {
- /*
- * Work backward to find the first whitespace on-which
- * dialog(1) will wrap the line (but don't go before
- * the start of this line).
- */
- cp = p;
- while (n > 1 && !isspace(*cp)) {
- cp--;
- n--;
- }
- if (n > 0 && isspace(*cp))
- p = cp;
- wlines++;
- n = 1;
- }
-
- p++;
- }
-
- return (wlines);
-}
-
-/*
- * Returns zero if the buffer pointed to by `prompt' contains an escaped
- * newline but only if appearing after any/all literal newlines. This is
- * specific to dialog(1) and does not apply to Xdialog(1).
- *
- * As an attempt to make shell scripts easier to read, dialog(1) will "eat"
- * the first literal newline after an escaped newline. This however has a bug
- * in its implementation in that rather than allowing `\\n\n' to be treated
- * similar to `\\n' or `\n', dialog(1) expands the `\\n' and then translates
- * the following literal newline (with or without characters between [!]) into
- * a single space.
- *
- * If you want to be compatible with Xdialog(1), it is suggested that you not
- * use literal newlines (they aren't supported); but if you have to use them,
- * go right ahead. But be forewarned... if you set $DIALOG in your environment
- * to something other than `cdialog' (our current dialog(1)), then it should
- * do the same thing w/respect to how to handle a literal newline after an
- * escaped newline (you could do no wrong by translating every literal newline
- * into a space but only when you've previously encountered an escaped one;
- * this is what dialog(1) is doing).
- *
- * The ``newline state'' (or nlstate for short; as I'm calling it) is helpful
- * if you plan to combine multiple strings into a single prompt text. In lead-
- * up to this procedure, a common task is to calculate and utilize the widths
- * and heights of each piece of prompt text to later be combined. However, if
- * (for example) the first string ends in a positive newline state (has an
- * escaped newline without trailing literal), the first literal newline in the
- * second string will be mangled.
- *
- * The return value of this function should be used as the `nlstate' argument
- * to dialog_*() functions that require it to allow accurate calculations in
- * the event such information is needed.
- */
-uint8_t
-dialog_prompt_nlstate(const char *prompt)
-{
- const char *cp;
-
- if (prompt == NULL)
- return 0;
-
- /*
- * Work our way backward from the end of the string for efficiency.
- */
- cp = prompt + strlen(prompt);
- while (--cp >= prompt) {
- /*
- * If we get to a literal newline first, this prompt ends in a
- * clean state for rendering with dialog(1). Otherwise, if we
- * get to an escaped newline first, this prompt ends in an un-
- * clean state (following literal will be mangled; see above).
- */
- if (*cp == '\n')
- return (0);
- else if (*cp == 'n' && --cp > prompt && *cp == '\\')
- return (1);
- }
-
- return (0); /* no newlines (escaped or otherwise) */
-}
-
-/*
- * Free allocated items initialized by tty_maxsize_update() and
- * x11_maxsize_update()
- */
-void
-dialog_maxsize_free(void)
-{
- if (maxsize != NULL) {
- free(maxsize);
- maxsize = NULL;
- }
-}
diff --git a/lib/libdpv/dialogrc.h b/lib/libdpv/dialogrc.h
deleted file mode 100644
--- a/lib/libdpv/dialogrc.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*-
- * Copyright (c) 2013-2015 Devin Teske <dteske@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _DIALOGRC_H_
-#define _DIALOGRC_H_
-
-#include <sys/types.h>
-
-#include <figpar.h>
-
-/* dialog(3) dlg_color_table[] attributes */
-#define GAUGE_ATTR 33 /* entry used for gauge_color */
-
-/* dialog(1) characteristics */
-#define DIALOGRC ".dialogrc"
-#define ENV_DIALOGRC "DIALOGRC"
-#define ENV_HOME "HOME"
-
-/* dialog(1) `.dialogrc' characteristics */
-extern uint8_t use_colors;
-extern uint8_t use_shadow;
-extern char gauge_color[];
-extern char separator[];
-
-__BEGIN_DECLS
-void dialogrc_free(void);
-int parse_dialogrc(void);
-struct figpar_config *dialogrc_config_option(const char *_directive);
-__END_DECLS
-
-#endif /* !_DIALOGRC_H_ */
diff --git a/lib/libdpv/dialogrc.c b/lib/libdpv/dialogrc.c
deleted file mode 100644
--- a/lib/libdpv/dialogrc.c
+++ /dev/null
@@ -1,357 +0,0 @@
-/*-
- * Copyright (c) 2013-2015 Devin Teske <dteske@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/types.h>
-
-#include <err.h>
-#include <errno.h>
-#include <figpar.h>
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <string_m.h>
-
-#include "dialogrc.h"
-
-#define STR_BUFSIZE 255
-
-/* dialog(1) `.dialogrc' characteristics */
-uint8_t use_colors = 1;
-uint8_t use_shadow = 1;
-char gauge_color[STR_BUFSIZE] = "47b"; /* (BLUE,WHITE,ON) */
-char separator[STR_BUFSIZE] = "";
-
-/* Function prototypes */
-static int setattr(struct figpar_config *, uint32_t, char *, char *);
-static int setbool(struct figpar_config *, uint32_t, char *, char *);
-static int setnum(struct figpar_config *, uint32_t, char *, char *);
-static int setstr(struct figpar_config *, uint32_t, char *, char *);
-
-/*
- * Anatomy of DIALOGRC (~/.dialogrc by default)
- * NOTE: Must appear after private function prototypes (above)
- * NB: Brace-initialization of union requires cast to *first* member of union
- */
-static struct figpar_config dialogrc_config[] = {
- /* TYPE DIRECTIVE DEFAULT HANDLER */
- {FIGPAR_TYPE_INT, "aspect", {(void *)0}, &setnum},
- {FIGPAR_TYPE_STR, "separate_widget", {separator}, &setstr},
- {FIGPAR_TYPE_INT, "tab_len", {(void *)0}, &setnum},
- {FIGPAR_TYPE_BOOL, "visit_items", {(void *)0}, &setbool},
- {FIGPAR_TYPE_BOOL, "use_shadow", {(void *)1}, &setbool},
- {FIGPAR_TYPE_BOOL, "use_colors", {(void *)1}, &setbool},
- {FIGPAR_TYPE_STR, "screen_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "shadow_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "dialog_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "title_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "border_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "button_active_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "button_inactive_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "button_key_active_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "button_key_inactive_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "button_label_active_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "button_label_inactive_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "inputbox_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "inputbox_border_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "searchbox_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "searchbox_title_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "searchbox_border_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "position_indicator_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "menubox_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "menubox_border_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "item_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "item_selected_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "tag_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "tag_selected_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "tag_key_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "tag_key_selected_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "check_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "check_selected_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "uarrow_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "darrow_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "itemhelp_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "form_active_text_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "form_text_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "form_item_readonly_color", {NULL}, &setattr},
- {FIGPAR_TYPE_STR, "gauge_color", {gauge_color}, &setattr},
- {0, NULL, {0}, NULL}
-};
-
-/*
- * figpar call-back for interpreting value as .dialogrc `Attribute'
- */
-static int
-setattr(struct figpar_config *option, uint32_t line __unused,
- char *directive __unused, char *value)
-{
- char *cp = value;
- char *val;
- size_t len;
- char attrbuf[4];
-
- if (option == NULL) {
- warnx("%s:%d:%s: Missing callback parameter", __FILE__,
- __LINE__, __func__);
- return (-1); /* Abort processing */
- }
-
- /* Allocate memory for the data if not already done */
- if (option->value.str == NULL) {
- if ((option->value.str = malloc(STR_BUFSIZE)) == NULL)
- return (-1);
- }
-
- /*
- * If the first character is left-parenthesis, the format is
- * `(background,foreground,highlight)' otherwise, we should take it
- * as a reference to another color.
- */
- if (*cp != '(') {
- /* Copy the [current] value from the referenced color */
- val = dialogrc_config_option(cp)->value.str;
- if (val != NULL)
- snprintf(option->value.str, STR_BUFSIZE, "%s", val);
-
- return (0);
- } else
- cp++;
-
- strtolower(cp);
-
- /* Initialize the attrbuf (fg,bg,hi,NUL) */
- attrbuf[0] = '0';
- attrbuf[1] = '0';
- attrbuf[2] = 'B'; /* \ZB = disable; \Zb = enable (see dialog(1)) */
- attrbuf[3] = '\0';
-
- /* Interpret the foreground color */
- if (strncmp(cp, "red,", 4) == 0) attrbuf[0] = '1';
- else if (strncmp(cp, "green,", 6) == 0) attrbuf[0] = '2';
- else if (strncmp(cp, "yellow,", 7) == 0) attrbuf[0] = '3';
- else if (strncmp(cp, "blue,", 5) == 0) attrbuf[0] = '4';
- else if (strncmp(cp, "magenta,", 8) == 0) attrbuf[0] = '5';
- else if (strncmp(cp, "cyan,", 5) == 0) attrbuf[0] = '6';
- else if (strncmp(cp, "white,", 6) == 0) attrbuf[0] = '7';
- else if (strncmp(cp, "black,", 6) == 0) attrbuf[0] = '8';
-
- /* Advance to the background color */
- cp = strchr(cp, ',');
- if (cp == NULL)
- goto write_attrbuf;
- else
- cp++;
-
- /* Interpret the background color */
- if (strncmp(cp, "red,", 4) == 0) attrbuf[1] = '1';
- else if (strncmp(cp, "green,", 6) == 0) attrbuf[1] = '2';
- else if (strncmp(cp, "yellow,", 7) == 0) attrbuf[1] = '3';
- else if (strncmp(cp, "blue,", 5) == 0) attrbuf[1] = '4';
- else if (strncmp(cp, "magenta,", 8) == 0) attrbuf[1] = '5';
- else if (strncmp(cp, "cyan,", 5) == 0) attrbuf[1] = '6';
- else if (strncmp(cp, "white,", 6) == 0) attrbuf[1] = '7';
- else if (strncmp(cp, "black,", 6) == 0) attrbuf[1] = '8';
-
- /* Advance to the highlight */
- cp = strchr(cp, ',');
- if (cp == NULL)
- goto write_attrbuf;
- else
- cp++;
-
- /* Trim trailing parenthesis */
- len = strlen(cp);
- if (cp[len - 1] == ')')
- cp[len - 1] = '\0';
-
- /* Interpret the highlight (initialized to off above) */
- if (strcmp(cp, "on") == 0 || strncmp(cp, "on,", 3) == 0)
- attrbuf[2] = 'b'; /* \Zb = enable bold (see dialog(1)) */
-
-write_attrbuf:
- sprintf(option->value.str, "%s", attrbuf);
-
- return (0);
-}
-
-/*
- * figpar call-back for interpreting value as .dialogrc `Boolean'
- */
-static int
-setbool(struct figpar_config *option, uint32_t line __unused,
- char *directive __unused, char *value)
-{
-
- if (option == NULL) {
- warnx("%s:%d:%s: Missing callback parameter", __FILE__,
- __LINE__, __func__);
- return (-1); /* Abort processing */
- }
-
- /* Assume ON, check for OFF (case-insensitive) */
- option->value.boolean = 1;
- strtolower(value);
- if (strcmp(value, "off") == 0)
- option->value.boolean = 0;
-
- return (0);
-}
-
-/*
- * figpar call-back for interpreting value as .dialogrc `Number'
- */
-static int
-setnum(struct figpar_config *option, uint32_t line __unused,
- char *directive __unused, char *value)
-{
-
- if (option == NULL) {
- warnx("%s:%d:%s: Missing callback parameter", __FILE__,
- __LINE__, __func__);
- return (-1); /* Abort processing */
- }
-
- /* Convert the string to a 32-bit signed integer */
- option->value.num = (int32_t)strtol(value, (char **)NULL, 10);
-
- return (0);
-}
-
-/*
- * figpar call-back for interpreting value as .dialogrc `String'
- */
-static int
-setstr(struct figpar_config *option, uint32_t line __unused,
- char *directive __unused, char *value)
-{
- size_t len;
-
- if (option == NULL) {
- warnx("%s:%d:%s: Missing callback parameter", __FILE__,
- __LINE__, __func__);
- return (-1); /* Abort processing */
- }
-
- /* Allocate memory for the data if not already done */
- if (option->value.str == NULL) {
- if ((option->value.str = malloc(STR_BUFSIZE)) == NULL)
- return (-1);
- }
-
- /* Trim leading quote */
- if (*value == '"')
- value++;
-
- /* Write the data into the buffer */
- snprintf(option->value.str, STR_BUFSIZE, "%s", value);
-
- /* Trim trailing quote */
- len = strlen(option->value.str);
- if (option->value.str[len - 1] == '"')
- option->value.str[len - 1] = '\0';
-
- return (0);
-}
-
-/*
- * Parse (in order of preference) $DIALOGRC or `$HOME/.dialogrc'. Returns zero
- * on success, -1 on failure (and errno should be consulted).
- */
-int
-parse_dialogrc(void)
-{
- char *cp;
- int res;
- size_t len;
- char path[PATH_MAX];
-
- /* Allow $DIALOGRC to override `$HOME/.dialogrc' default */
- if ((cp = getenv(ENV_DIALOGRC)) != NULL && *cp != '\0')
- snprintf(path, PATH_MAX, "%s", cp);
- else if ((cp = getenv(ENV_HOME)) != NULL) {
- /* Copy $HOME into buffer and append trailing `/' if missing */
- snprintf(path, PATH_MAX, "%s", cp);
- len = strlen(path);
- cp = path + len;
- if (len > 0 && len < (PATH_MAX - 1) && *(cp - 1) != '/') {
- *cp++ = '/';
- *cp = '\0';
- len++;
- }
-
- /* If we still have room, shove in the name of rc file */
- if (len < (PATH_MAX - 1))
- snprintf(cp, PATH_MAX - len, "%s", DIALOGRC);
- } else {
- /* Like dialog(1), don't process a file if $HOME is unset */
- errno = ENOENT;
- return (-1);
- }
-
- /* Process file (either $DIALOGRC if set, or `$HOME/.dialogrc') */
- res = parse_config(dialogrc_config,
- path, NULL, FIGPAR_BREAK_ON_EQUALS);
-
- /* Set some globals based on what we parsed */
- use_shadow = dialogrc_config_option("use_shadow")->value.boolean;
- use_colors = dialogrc_config_option("use_colors")->value.boolean;
- snprintf(gauge_color, STR_BUFSIZE, "%s",
- dialogrc_config_option("gauge_color")->value.str);
-
- return (res);
-}
-
-/*
- * Return a pointer to the `.dialogrc' config option specific to `directive' or
- * static figpar_dummy_config (full of NULLs) if none found (see
- * get_config_option(3); part of figpar(3)).
- */
-struct figpar_config *
-dialogrc_config_option(const char *directive)
-{
- return (get_config_option(dialogrc_config, directive));
-}
-
-/*
- * Free allocated items initialized by setattr() (via parse_config() callback
- * matrix [dialogrc_config] used in parse_dialogrc() above).
- */
-void
-dialogrc_free(void)
-{
- char *value;
- uint32_t n;
-
- for (n = 0; dialogrc_config[n].directive != NULL; n++) {
- if (dialogrc_config[n].action != &setattr)
- continue;
- value = dialogrc_config[n].value.str;
- if (value != NULL && value != gauge_color) {
- free(dialogrc_config[n].value.str);
- dialogrc_config[n].value.str = NULL;
- }
- }
-}
diff --git a/lib/libdpv/dprompt.h b/lib/libdpv/dprompt.h
deleted file mode 100644
--- a/lib/libdpv/dprompt.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*-
- * Copyright (c) 2013-2014 Devin Teske <dteske@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _DPROMPT_H_
-#define _DPROMPT_H_
-
-#include <sys/cdefs.h>
-
-#include "dpv.h"
-
-/* Display characteristics */
-#define ENV_MSG_DONE "msg_done"
-#define ENV_MSG_FAIL "msg_fail"
-#define ENV_MSG_PENDING "msg_pending"
-extern int display_limit;
-extern int label_size;
-extern int pbar_size;
-
-__BEGIN_DECLS
-void dprompt_clear(void);
-void dprompt_dprint(int _fd, const char *_prefix, const char *_append,
- int _overall);
-void dprompt_free(void);
-void dprompt_init(struct dpv_file_node *_file_list);
-void dprompt_libprint(const char *_prefix, const char *_append,
- int _overall);
-void dprompt_recreate(struct dpv_file_node *_file_list,
- struct dpv_file_node *_curfile, int _pct);
-int dprompt_add(const char *_format, ...);
-int dprompt_sprint(char * restrict _str, const char *_prefix,
- const char *_append);
-__END_DECLS
-
-#endif /* !_DPROMPT_H_ */
diff --git a/lib/libdpv/dprompt.c b/lib/libdpv/dprompt.c
deleted file mode 100644
--- a/lib/libdpv/dprompt.c
+++ /dev/null
@@ -1,764 +0,0 @@
-/*-
- * Copyright (c) 2013-2014 Devin Teske <dteske@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/types.h>
-
-#define _BSD_SOURCE /* to get dprintf() prototype in stdio.h below */
-#include <dialog.h>
-#include <err.h>
-#include <libutil.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <string_m.h>
-#include <unistd.h>
-
-#include "dialog_util.h"
-#include "dialogrc.h"
-#include "dprompt.h"
-#include "dpv.h"
-#include "dpv_private.h"
-
-#define FLABEL_MAX 1024
-
-static int fheight = 0; /* initialized by dprompt_init() */
-static char dprompt[PROMPT_MAX + 1] = "";
-static char *dprompt_pos = (char *)(0); /* treated numerically */
-
-/* Display characteristics */
-#define FM_DONE 0x01
-#define FM_FAIL 0x02
-#define FM_PEND 0x04
-static uint8_t dprompt_free_mask;
-static char *done = NULL;
-static char *fail = NULL;
-static char *pend = NULL;
-int display_limit = DISPLAY_LIMIT_DEFAULT; /* Max entries to show */
-int label_size = LABEL_SIZE_DEFAULT; /* Max width for labels */
-int pbar_size = PBAR_SIZE_DEFAULT; /* Mini-progressbar size */
-static int gauge_percent = 0;
-static int done_size, done_lsize, done_rsize;
-static int fail_size, fail_lsize, fail_rsize;
-static int mesg_size, mesg_lsize, mesg_rsize;
-static int pend_size, pend_lsize, pend_rsize;
-static int pct_lsize, pct_rsize;
-static void *gauge = NULL;
-#define SPIN_SIZE 4
-static char spin[SPIN_SIZE + 1] = "/-\\|";
-static char msg[PROMPT_MAX + 1];
-static char *spin_cp = spin;
-
-/* Function prototypes */
-static char spin_char(void);
-static int dprompt_add_files(struct dpv_file_node *file_list,
- struct dpv_file_node *curfile, int pct);
-
-/*
- * Returns a pointer to the current spin character in the spin string and
- * advances the global position to the next character for the next call.
- */
-static char
-spin_char(void)
-{
- char ch;
-
- if (*spin_cp == '\0')
- spin_cp = spin;
- ch = *spin_cp;
-
- /* Advance the spinner to the next char */
- if (++spin_cp >= (spin + SPIN_SIZE))
- spin_cp = spin;
-
- return (ch);
-}
-
-/*
- * Initialize heights and widths based on various strings and environment
- * variables (such as ENV_USE_COLOR).
- */
-void
-dprompt_init(struct dpv_file_node *file_list)
-{
- uint8_t nls = 0;
- int len;
- int max_cols;
- int max_rows;
- int nthfile;
- int numlines;
- struct dpv_file_node *curfile;
-
- /*
- * Initialize dialog(3) `colors' support and draw backtitle
- */
- if (use_libdialog && !debug) {
- init_dialog(stdin, stdout);
- dialog_vars.colors = 1;
- if (backtitle != NULL) {
- dialog_vars.backtitle = (char *)backtitle;
- dlg_put_backtitle();
- }
- }
-
- /* Calculate width of dialog(3) or [X]dialog(1) --gauge box */
- dwidth = label_size + pbar_size + 9;
-
- /*
- * Calculate height of dialog(3) or [X]dialog(1) --gauge box
- */
- dheight = 5;
- max_rows = dialog_maxrows();
- /* adjust max_rows for backtitle and/or dialog(3) statusLine */
- if (backtitle != NULL)
- max_rows -= use_shadow ? 3 : 2;
- if (use_libdialog && use_shadow)
- max_rows -= 2;
- /* add lines for `-p text' */
- numlines = dialog_prompt_numlines(pprompt, 0);
- if (debug)
- warnx("`-p text' is %i line%s long", numlines,
- numlines == 1 ? "" : "s");
- dheight += numlines;
- /* adjust dheight for various implementations */
- if (use_dialog) {
- dheight -= dialog_prompt_nlstate(pprompt);
- nls = dialog_prompt_nlstate(pprompt);
- } else if (use_xdialog) {
- if (pprompt == NULL || *pprompt == '\0')
- dheight++;
- } else if (use_libdialog) {
- if (pprompt != NULL && *pprompt != '\0')
- dheight--;
- }
- /* limit the number of display items (necessary per dialog(1,3)) */
- if (display_limit == 0 || display_limit > DPV_DISPLAY_LIMIT)
- display_limit = DPV_DISPLAY_LIMIT;
- /* verify fheight will fit (stop if we hit 1) */
- for (; display_limit > 0; display_limit--) {
- nthfile = numlines = 0;
- fheight = (int)dpv_nfiles > display_limit ?
- (unsigned int)display_limit : dpv_nfiles;
- for (curfile = file_list; curfile != NULL;
- curfile = curfile->next) {
- nthfile++;
- numlines += dialog_prompt_numlines(curfile->name, nls);
- if ((nthfile % display_limit) == 0) {
- if (numlines > fheight)
- fheight = numlines;
- numlines = nthfile = 0;
- }
- }
- if (numlines > fheight)
- fheight = numlines;
- if ((dheight + fheight +
- (int)dialog_prompt_numlines(aprompt, use_dialog) -
- (use_dialog ? (int)dialog_prompt_nlstate(aprompt) : 0))
- <= max_rows)
- break;
- }
- /* don't show any items if we run the risk of hitting a blank set */
- if ((max_rows - (use_shadow ? 5 : 4)) >= fheight)
- dheight += fheight;
- else
- fheight = 0;
- /* add lines for `-a text' */
- numlines = dialog_prompt_numlines(aprompt, use_dialog);
- if (debug)
- warnx("`-a text' is %i line%s long", numlines,
- numlines == 1 ? "" : "s");
- dheight += numlines;
-
- /* If using Xdialog(1), adjust accordingly (based on testing) */
- if (use_xdialog)
- dheight += dheight / 4;
-
- /* For wide mode, long prefix (`pprompt') or append (`aprompt')
- * strings will bump width */
- if (wide) {
- len = (int)dialog_prompt_longestline(pprompt, 0); /* !nls */
- if ((len + 4) > dwidth)
- dwidth = len + 4;
- len = (int)dialog_prompt_longestline(aprompt, 1); /* nls */
- if ((len + 4) > dwidth)
- dwidth = len + 4;
- }
-
- /* Enforce width constraints to maximum values */
- max_cols = dialog_maxcols();
- if (max_cols > 0 && dwidth > max_cols)
- dwidth = max_cols;
-
- /* Optimize widths to sane values*/
- if (pbar_size > dwidth - 9) {
- pbar_size = dwidth - 9;
- label_size = 0;
- /* -9 = "| - [" ... "] |" */
- }
- if (pbar_size < 0)
- label_size = dwidth - 8;
- /* -8 = "| " ... " - |" */
- else if (label_size > (dwidth - pbar_size - 9) || wide)
- label_size = no_labels ? 0 : dwidth - pbar_size - 9;
- /* -9 = "| " ... " - [" ... "] |" */
-
- /* Hide labels if requested */
- if (no_labels)
- label_size = 0;
-
- /* Touch up the height (now that we know dwidth) */
- dheight += dialog_prompt_wrappedlines(pprompt, dwidth - 4, 0);
- dheight += dialog_prompt_wrappedlines(aprompt, dwidth - 4, 1);
-
- if (debug)
- warnx("dheight = %i dwidth = %i fheight = %i",
- dheight, dwidth, fheight);
-
- /* Calculate left/right portions of % */
- pct_lsize = (pbar_size - 4) / 2; /* -4 == printf("%-3s%%", pct) */
- pct_rsize = pct_lsize;
- /* If not evenly divisible by 2, increment the right-side */
- if ((pct_rsize + pct_rsize + 4) != pbar_size)
- pct_rsize++;
-
- /* Initialize "Done" text */
- if (done == NULL && (done = msg_done) == NULL) {
- if ((done = getenv(ENV_MSG_DONE)) != NULL)
- done_size = strlen(done);
- else {
- done_size = strlen(DPV_DONE_DEFAULT);
- if ((done = malloc(done_size + 1)) == NULL)
- errx(EXIT_FAILURE, "Out of memory?!");
- dprompt_free_mask |= FM_DONE;
- snprintf(done, done_size + 1, DPV_DONE_DEFAULT);
- }
- }
- if (pbar_size < done_size) {
- done_lsize = done_rsize = 0;
- *(done + pbar_size) = '\0';
- done_size = pbar_size;
- } else {
- /* Calculate left/right portions for mini-progressbar */
- done_lsize = (pbar_size - done_size) / 2;
- done_rsize = done_lsize;
- /* If not evenly divisible by 2, increment the right-side */
- if ((done_rsize + done_size + done_lsize) != pbar_size)
- done_rsize++;
- }
-
- /* Initialize "Fail" text */
- if (fail == NULL && (fail = msg_fail) == NULL) {
- if ((fail = getenv(ENV_MSG_FAIL)) != NULL)
- fail_size = strlen(fail);
- else {
- fail_size = strlen(DPV_FAIL_DEFAULT);
- if ((fail = malloc(fail_size + 1)) == NULL)
- errx(EXIT_FAILURE, "Out of memory?!");
- dprompt_free_mask |= FM_FAIL;
- snprintf(fail, fail_size + 1, DPV_FAIL_DEFAULT);
- }
- }
- if (pbar_size < fail_size) {
- fail_lsize = fail_rsize = 0;
- *(fail + pbar_size) = '\0';
- fail_size = pbar_size;
- } else {
- /* Calculate left/right portions for mini-progressbar */
- fail_lsize = (pbar_size - fail_size) / 2;
- fail_rsize = fail_lsize;
- /* If not evenly divisible by 2, increment the right-side */
- if ((fail_rsize + fail_size + fail_lsize) != pbar_size)
- fail_rsize++;
- }
-
- /* Initialize "Pending" text */
- if (pend == NULL && (pend = msg_pending) == NULL) {
- if ((pend = getenv(ENV_MSG_PENDING)) != NULL)
- pend_size = strlen(pend);
- else {
- pend_size = strlen(DPV_PENDING_DEFAULT);
- if ((pend = malloc(pend_size + 1)) == NULL)
- errx(EXIT_FAILURE, "Out of memory?!");
- dprompt_free_mask |= FM_PEND;
- snprintf(pend, pend_size + 1, DPV_PENDING_DEFAULT);
- }
- }
- if (pbar_size < pend_size) {
- pend_lsize = pend_rsize = 0;
- *(pend + pbar_size) = '\0';
- pend_size = pbar_size;
- } else {
- /* Calculate left/right portions for mini-progressbar */
- pend_lsize = (pbar_size - pend_size) / 2;
- pend_rsize = pend_lsize;
- /* If not evenly divisible by 2, increment the right-side */
- if ((pend_rsize + pend_lsize + pend_size) != pbar_size)
- pend_rsize++;
- }
-
- if (debug)
- warnx("label_size = %i pbar_size = %i", label_size, pbar_size);
-
- dprompt_clear();
-}
-
-/*
- * Clear the [X]dialog(1) `--gauge' prompt buffer.
- */
-void
-dprompt_clear(void)
-{
-
- *dprompt = '\0';
- dprompt_pos = dprompt;
-}
-
-/*
- * Append to the [X]dialog(1) `--gauge' prompt buffer. Syntax is like printf(3)
- * and returns the number of bytes appended to the buffer.
- */
-int
-dprompt_add(const char *format, ...)
-{
- int len;
- va_list ap;
-
- if (dprompt_pos >= (dprompt + PROMPT_MAX))
- return (0);
-
- va_start(ap, format);
- len = vsnprintf(dprompt_pos, (size_t)(PROMPT_MAX -
- (dprompt_pos - dprompt)), format, ap);
- va_end(ap);
- if (len == -1)
- errx(EXIT_FAILURE, "%s: Oops, dprompt buffer overflow",
- __func__);
-
- if ((dprompt_pos + len) < (dprompt + PROMPT_MAX))
- dprompt_pos += len;
- else
- dprompt_pos = dprompt + PROMPT_MAX;
-
- return (len);
-}
-
-/*
- * Append active files to the [X]dialog(1) `--gauge' prompt buffer. Syntax
- * requires a pointer to the head of the dpv_file_node linked-list. Returns the
- * number of files processed successfully.
- */
-static int
-dprompt_add_files(struct dpv_file_node *file_list,
- struct dpv_file_node *curfile, int pct)
-{
- char c;
- char bold_code = 'b'; /* default: enabled */
- char color_code = '4'; /* default: blue */
- uint8_t after_curfile = curfile != NULL ? FALSE : TRUE;
- uint8_t nls = 0;
- char *cp;
- char *lastline;
- char *name;
- const char *bg_code;
- const char *estext;
- const char *format;
- enum dprompt_state dstate;
- int estext_lsize;
- int estext_rsize;
- int flabel_size;
- int hlen;
- int lsize;
- int nlines = 0;
- int nthfile = 0;
- int pwidth;
- int rsize;
- struct dpv_file_node *fp;
- char flabel[FLABEL_MAX + 1];
- char human[32];
- char pbar[pbar_size + 16]; /* +15 for optional color */
- char pbar_cap[sizeof(pbar)];
- char pbar_fill[sizeof(pbar)];
-
-
- /* Override color defaults with that of main progress bar */
- if (use_colors || use_shadow) { /* NB: shadow enables color */
- color_code = gauge_color[0];
- /* NB: str[1] aka bg is unused */
- bold_code = gauge_color[2];
- }
-
- /*
- * Create mini-progressbar for current file (if applicable)
- */
- *pbar = '\0';
- if (pbar_size >= 0 && pct >= 0 && curfile != NULL &&
- (curfile->length >= 0 || dialog_test)) {
- snprintf(pbar, pbar_size + 1, "%*s%3u%%%*s", pct_lsize, "",
- pct, pct_rsize, "");
- if (use_color) {
- /* Calculate the fill-width of progressbar */
- pwidth = pct * pbar_size / 100;
- /* Round up based on one-tenth of a percent */
- if ((pct * pbar_size % 100) > 50)
- pwidth++;
-
- /*
- * Make two copies of pbar. Make one represent the fill
- * and the other the remainder (cap). We'll insert the
- * ANSI delimiter in between.
- */
- *pbar_fill = '\0';
- *pbar_cap = '\0';
- strncat(pbar_fill, (const char *)(pbar), dwidth);
- *(pbar_fill + pwidth) = '\0';
- strncat(pbar_cap, (const char *)(pbar+pwidth), dwidth);
-
- /* Finalize the mini [color] progressbar */
- snprintf(pbar, sizeof(pbar),
- "\\Z%c\\Zr\\Z%c%s%s%s\\Zn", bold_code, color_code,
- pbar_fill, "\\ZR", pbar_cap);
- }
- }
-
- for (fp = file_list; fp != NULL; fp = fp->next) {
- flabel_size = label_size;
- name = fp->name;
- nthfile++;
-
- /*
- * Support multiline filenames (where the filename is taken as
- * the last line and the text leading up to the last line can
- * be used as (for example) a heading/separator between files.
- */
- if (use_dialog)
- nls = dialog_prompt_nlstate(pprompt);
- nlines += dialog_prompt_numlines(name, nls);
- lastline = dialog_prompt_lastline(name, 1);
- if (name != lastline) {
- c = *lastline;
- *lastline = '\0';
- dprompt_add("%s", name);
- *lastline = c;
- name = lastline;
- }
-
- /* Support color codes (for dialog(1,3)) in file names */
- if ((use_dialog || use_libdialog) && use_color) {
- cp = name;
- while (*cp != '\0') {
- if (*cp == '\\' && *(cp + 1) != '\0' &&
- *(++cp) == 'Z' && *(cp + 1) != '\0') {
- cp++;
- flabel_size += 3;
- }
- cp++;
- }
- if (flabel_size > FLABEL_MAX)
- flabel_size = FLABEL_MAX;
- }
-
- /* If no mini-progressbar, increase label width */
- if (pbar_size < 0 && flabel_size <= FLABEL_MAX - 2 &&
- no_labels == FALSE)
- flabel_size += 2;
-
- /* If name is too long, add an ellipsis */
- if (snprintf(flabel, flabel_size + 1, "%s", name) >
- flabel_size) sprintf(flabel + flabel_size - 3, "...");
-
- /*
- * Append the label (processing the current file differently)
- */
- if (fp == curfile && pct < 100) {
- /*
- * Add an ellipsis to current file name if it will fit.
- * There may be an ellipsis already from truncating the
- * label (in which case, we already have one).
- */
- cp = flabel + strlen(flabel);
- if (cp < (flabel + flabel_size))
- snprintf(cp, flabel_size -
- (cp - flabel) + 1, "...");
-
- /* Append label (with spinner and optional color) */
- dprompt_add("%s%-*s%s %c", use_color ? "\\Zb" : "",
- flabel_size, flabel, use_color ? "\\Zn" : "",
- spin_char());
- } else
- dprompt_add("%-*s%s %s", flabel_size,
- flabel, use_color ? "\\Zn" : "", " ");
-
- /*
- * Append pbar/status (processing the current file differently)
- */
- dstate = DPROMPT_NONE;
- if (fp->msg != NULL)
- dstate = DPROMPT_CUSTOM_MSG;
- else if (pbar_size < 0)
- dstate = DPROMPT_NONE;
- else if (pbar_size < 4)
- dstate = DPROMPT_MINIMAL;
- else if (after_curfile)
- dstate = DPROMPT_PENDING;
- else if (fp == curfile) {
- if (*pbar == '\0') {
- if (fp->length < 0)
- dstate = DPROMPT_DETAILS;
- else if (fp->status == DPV_STATUS_RUNNING)
- dstate = DPROMPT_DETAILS;
- else
- dstate = DPROMPT_END_STATE;
- }
- else if (dialog_test) /* status/length ignored */
- dstate = pct < 100 ?
- DPROMPT_PBAR : DPROMPT_END_STATE;
- else if (fp->status == DPV_STATUS_RUNNING)
- dstate = fp->length < 0 ?
- DPROMPT_DETAILS : DPROMPT_PBAR;
- else /* not running */
- dstate = fp->length < 0 ?
- DPROMPT_DETAILS : DPROMPT_END_STATE;
- } else { /* before curfile */
- if (dialog_test)
- dstate = DPROMPT_END_STATE;
- else
- dstate = fp->length < 0 ?
- DPROMPT_DETAILS : DPROMPT_END_STATE;
- }
- format = use_color ?
- " [\\Z%c%s%-*s%s%-*s\\Zn]\\n" :
- " [%-*s%s%-*s]\\n";
- if (fp->status == DPV_STATUS_FAILED) {
- bg_code = "\\Zr\\Z1"; /* Red */
- estext_lsize = fail_lsize;
- estext_rsize = fail_rsize;
- estext = fail;
- } else { /* e.g., DPV_STATUS_DONE */
- bg_code = "\\Zr\\Z2"; /* Green */
- estext_lsize = done_lsize;
- estext_rsize = done_rsize;
- estext = done;
- }
- switch (dstate) {
- case DPROMPT_PENDING: /* Future file(s) */
- dprompt_add(" [%-*s%s%-*s]\\n",
- pend_lsize, "", pend, pend_rsize, "");
- break;
- case DPROMPT_PBAR: /* Current file */
- dprompt_add(" [%s]\\n", pbar);
- break;
- case DPROMPT_END_STATE: /* Past/Current file(s) */
- if (use_color)
- dprompt_add(format, bold_code, bg_code,
- estext_lsize, "", estext,
- estext_rsize, "");
- else
- dprompt_add(format,
- estext_lsize, "", estext,
- estext_rsize, "");
- break;
- case DPROMPT_DETAILS: /* Past/Current file(s) */
- humanize_number(human, pbar_size + 2, fp->read, "",
- HN_AUTOSCALE, HN_NOSPACE | HN_DIVISOR_1000);
-
- /* Calculate center alignment */
- hlen = (int)strlen(human);
- lsize = (pbar_size - hlen) / 2;
- rsize = lsize;
- if ((lsize+hlen+rsize) != pbar_size)
- rsize++;
-
- if (use_color)
- dprompt_add(format, bold_code, bg_code,
- lsize, "", human, rsize, "");
- else
- dprompt_add(format,
- lsize, "", human, rsize, "");
- break;
- case DPROMPT_CUSTOM_MSG: /* File-specific message override */
- snprintf(msg, PROMPT_MAX + 1, "%s", fp->msg);
- if (pbar_size < (mesg_size = strlen(msg))) {
- mesg_lsize = mesg_rsize = 0;
- *(msg + pbar_size) = '\0';
- mesg_size = pbar_size;
- } else {
- mesg_lsize = (pbar_size - mesg_size) / 2;
- mesg_rsize = mesg_lsize;
- if ((mesg_rsize + mesg_size + mesg_lsize)
- != pbar_size)
- mesg_rsize++;
- }
- if (use_color)
- dprompt_add(format, bold_code, bg_code,
- mesg_lsize, "", msg, mesg_rsize, "");
- else
- dprompt_add(format, mesg_lsize, "", msg,
- mesg_rsize, "");
- break;
- case DPROMPT_MINIMAL: /* Short progress bar, minimal room */
- if (use_color)
- dprompt_add(format, bold_code, bg_code,
- pbar_size, "", "", 0, "");
- else
- dprompt_add(format, pbar_size, "", "", 0, "");
- break;
- case DPROMPT_NONE: /* pbar_size < 0 */
- /* FALLTHROUGH */
- default:
- dprompt_add(" \\n");
- /*
- * NB: Leading space required for the case when
- * spin_char() returns a single backslash [\] which
- * without the space, changes the meaning of `\n'
- */
- }
-
- /* Stop building if we've hit the internal limit */
- if (nthfile >= display_limit)
- break;
-
- /* If this is the current file, all others are pending */
- if (fp == curfile)
- after_curfile = TRUE;
- }
-
- /*
- * Since we cannot change the height/width of the [X]dialog(1) widget
- * after spawn, to make things look nice let's pad the height so that
- * the `-a text' always appears in the same spot.
- *
- * NOTE: fheight is calculated in dprompt_init(). It represents the
- * maximum height required to display the set of items (broken up into
- * pieces of display_limit chunks) whose names contain the most
- * newlines for any given set.
- */
- while (nlines < fheight) {
- dprompt_add("\n");
- nlines++;
- }
-
- return (nthfile);
-}
-
-/*
- * Process the dpv_file_node linked-list of named files, re-generating the
- * [X]dialog(1) `--gauge' prompt text for the current state of transfers.
- */
-void
-dprompt_recreate(struct dpv_file_node *file_list,
- struct dpv_file_node *curfile, int pct)
-{
- size_t len;
-
- /*
- * Re-Build the prompt text
- */
- dprompt_clear();
- if (display_limit > 0)
- dprompt_add_files(file_list, curfile, pct);
-
- /* Xdialog(1) requires newlines (a) escaped and (b) in triplicate */
- if (use_xdialog) {
- /* Replace `\n' with `\n\\n\n' in dprompt */
- len = strlen(dprompt);
- len += strcount(dprompt, "\\n") * 5; /* +5 chars per count */
- if (len > PROMPT_MAX)
- errx(EXIT_FAILURE, "%s: Oops, dprompt buffer overflow "
- "(%zu > %i)", __func__, len, PROMPT_MAX);
- if (replaceall(dprompt, "\\n", "\n\\n\n") < 0)
- err(EXIT_FAILURE, "%s: replaceall()", __func__);
- }
- else if (use_libdialog)
- strexpandnl(dprompt);
-}
-
-/*
- * Print the [X]dialog(1) `--gauge' prompt text to a buffer.
- */
-int
-dprompt_sprint(char * restrict str, const char *prefix, const char *append)
-{
-
- return (snprintf(str, PROMPT_MAX, "%s%s%s%s", use_color ? "\\Zn" : "",
- prefix ? prefix : "", dprompt, append ? append : ""));
-}
-
-/*
- * Print the [X]dialog(1) `--gauge' prompt text to file descriptor fd (could
- * be STDOUT_FILENO or a pipe(2) file descriptor to actual [X]dialog(1)).
- */
-void
-dprompt_dprint(int fd, const char *prefix, const char *append, int overall)
-{
- int percent = gauge_percent;
-
- if (overall >= 0 && overall <= 100)
- gauge_percent = percent = overall;
- dprintf(fd, "XXX\n%s%s%s%s\nXXX\n%i\n", use_color ? "\\Zn" : "",
- prefix ? prefix : "", dprompt, append ? append : "", percent);
- fsync(fd);
-}
-
-/*
- * Print the dialog(3) `gauge' prompt text using libdialog.
- */
-void
-dprompt_libprint(const char *prefix, const char *append, int overall)
-{
- int percent = gauge_percent;
- char buf[DPV_PPROMPT_MAX + DPV_APROMPT_MAX + DPV_DISPLAY_LIMIT * 1024];
-
- dprompt_sprint(buf, prefix, append);
-
- if (overall >= 0 && overall <= 100)
- gauge_percent = percent = overall;
- gauge = dlg_reallocate_gauge(gauge, title == NULL ? "" : title,
- buf, dheight, dwidth, percent);
- dlg_update_gauge(gauge, percent);
-}
-
-/*
- * Free allocated items initialized by dprompt_init()
- */
-void
-dprompt_free(void)
-{
- if ((dprompt_free_mask & FM_DONE) != 0) {
- dprompt_free_mask ^= FM_DONE;
- free(done);
- done = NULL;
- }
- if ((dprompt_free_mask & FM_FAIL) != 0) {
- dprompt_free_mask ^= FM_FAIL;
- free(fail);
- fail = NULL;
- }
- if ((dprompt_free_mask & FM_PEND) != 0) {
- dprompt_free_mask ^= FM_PEND;
- free(pend);
- pend = NULL;
- }
-}
diff --git a/lib/libdpv/dpv.h b/lib/libdpv/dpv.h
deleted file mode 100644
--- a/lib/libdpv/dpv.h
+++ /dev/null
@@ -1,163 +0,0 @@
-/*-
- * Copyright (c) 2013-2016 Devin Teske <dteske@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _DPV_H_
-#define _DPV_H_
-
-#include <sys/types.h>
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-/* localeconv(3) */
-#define LC_NUMERIC_DEFAULT "en_US.ISO8859-1"
-
-/* Data to process */
-extern long long dpv_overall_read;
-
-/* Interrupt flag */
-extern int dpv_interrupt; /* Set to TRUE in interrupt handler */
-extern int dpv_abort; /* Set to true in callback to abort */
-
-/*
- * Display types for use with display_type member of dpv_config structure
- */
-enum dpv_display {
- DPV_DISPLAY_LIBDIALOG = 0, /* Display using dialog(3) (default) */
- DPV_DISPLAY_STDOUT, /* Display on stdout */
- DPV_DISPLAY_DIALOG, /* Display using spawned dialog(1) */
- DPV_DISPLAY_XDIALOG, /* Display using spawned Xdialog(1) */
-};
-
-/*
- * Output types for use with output_type member of dpv_config structure
- */
-enum dpv_output {
- DPV_OUTPUT_NONE = 0, /* No output (default) */
- DPV_OUTPUT_FILE, /* Read `output' member as file path */
- DPV_OUTPUT_SHELL, /* Read `output' member as shell cmd */
-};
-
-/*
- * Activity types for use with status member of dpv_file_node structure.
- * If you set a status other than DPV_STATUS_RUNNING on the current file in the
- * action callback of dpv_config structure, you'll end callbacks for that
- * dpv_file_node.
- */
-enum dpv_status {
- DPV_STATUS_RUNNING = 0, /* Running (default) */
- DPV_STATUS_DONE, /* Completed */
- DPV_STATUS_FAILED, /* Oops, something went wrong */
-};
-
-/*
- * Anatomy of file option; pass an array of these as dpv() file_list argument
- * terminated with a NULL pointer.
- */
-struct dpv_file_node {
- enum dpv_status status; /* status of read operation */
- char *msg; /* display instead of "Done/Fail" */
- char *name; /* name of file to read */
- char *path; /* path to file */
- long long length; /* expected size */
- long long read; /* number units read (e.g., bytes) */
- struct dpv_file_node *next; /* pointer to next (end with NULL) */
-};
-
-/*
- * Anatomy of config option to pass as dpv() config argument
- */
-struct dpv_config {
- uint8_t keep_tite; /* Prevent visually distracting exit */
- enum dpv_display display_type; /* Display (default TYPE_LIBDIALOG) */
- enum dpv_output output_type; /* Output (default TYPE_NONE) */
- int debug; /* Enable debugging output on stderr */
- int display_limit; /* Files per `page'. Default -1 */
- int label_size; /* Label size. Default 28 */
- int pbar_size; /* Mini-progress size. See dpv(3) */
- int dialog_updates_per_second; /* Progress updates/s. Default 16 */
- int status_updates_per_second; /* dialog(3) status updates/second.
- * Default 2 */
- uint16_t options; /* Special options. Default 0 */
- char *title; /* widget title */
- char *backtitle; /* Widget backtitle */
- char *aprompt; /* Prompt append. Default NULL */
- char *pprompt; /* Prompt prefix. Default NULL */
- char *msg_done; /* Progress text. Default `Done' */
- char *msg_fail; /* Progress text. Default `Fail' */
- char *msg_pending; /* Progress text. Default `Pending' */
- char *output; /* Output format string; see dpv(3) */
- const char *status_solo; /* dialog(3) solo-status format.
- * Default DPV_STATUS_SOLO */
- const char *status_many; /* dialog(3) many-status format.
- * Default DPV_STATUS_MANY */
-
- /*
- * Function pointer; action to perform data transfer
- */
- int (*action)(struct dpv_file_node *file, int out);
-};
-
-/*
- * Macros for dpv() options bitmask argument
- */
-#define DPV_TEST_MODE 0x0001 /* Test mode (fake reading data) */
-#define DPV_WIDE_MODE 0x0002 /* prefix/append bump dialog width */
-#define DPV_NO_LABELS 0x0004 /* Hide file_node.name labels */
-#define DPV_USE_COLOR 0x0008 /* Override to force color output */
-#define DPV_NO_OVERRUN 0x0010 /* Stop transfers when they hit 100% */
-
-/*
- * Limits (modify with extreme care)
- */
-#define DPV_APROMPT_MAX 4096 /* Buffer size for `-a text' */
-#define DPV_DISPLAY_LIMIT 10 /* Max file progress lines */
-#define DPV_PPROMPT_MAX 4096 /* Buffer size for `-p text' */
-#define DPV_STATUS_FORMAT_MAX 80 /* Buffer size for `-u format' */
-
-/*
- * Extra display information
- */
-#define DPV_STATUS_SOLO "%'10lli bytes read @ %'9.1f bytes/sec."
-#define DPV_STATUS_MANY (DPV_STATUS_SOLO " [%i/%i busy/wait]")
-
-/*
- * Strings
- */
-#define DPV_DONE_DEFAULT "Done"
-#define DPV_FAIL_DEFAULT "Fail"
-#define DPV_PENDING_DEFAULT "Pending"
-
-__BEGIN_DECLS
-void dpv_free(void);
-int dpv(struct dpv_config *_config, struct dpv_file_node *_file_list);
-__END_DECLS
-
-#endif /* !_DPV_H_ */
diff --git a/lib/libdpv/dpv.3 b/lib/libdpv/dpv.3
deleted file mode 100644
--- a/lib/libdpv/dpv.3
+++ /dev/null
@@ -1,529 +0,0 @@
-.\" Copyright (c) 2013-2018 Devin Teske
-.\" All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.Dd March 13, 2018
-.Dt DPV 3
-.Os
-.Sh NAME
-.Nm dpv
-.Nd dialog progress view library
-.Sh LIBRARY
-.Lb libdpv
-.Sh SYNOPSIS
-.In dpv.h
-.Ft int
-.Fo dpv
-.Fa "struct dpv_config *config"
-.Fa "struct dpv_file_node *file_list"
-.Fc
-.Ft void
-.Fo dpv_free
-.Fa "void"
-.Fc
-.Sh DESCRIPTION
-The
-.Nm
-library provides an interface for creating complex
-.Dq gauge
-widgets for displaying progress on various actions.
-The
-.Nm
-library can display progress with one of
-.Xr dialog 3 ,
-.Xr dialog 1 ,
-or
-.Xr Xdialog 1 Pq Pa ports/x11/xdialog .
-.Pp
-The
-.Fn dpv
-.Fa config
-argument properties for configuring global display features:
-.Bd -literal -offset indent
-struct dpv_config {
- uint8_t keep_tite; /* Cleaner exit for scripts */
- enum dpv_display display_type; /* Def. DPV_DISPLAY_LIBDIALOG */
- enum dpv_output output_type; /* Default DPV_OUTPUT_NONE */
- int debug; /* Enable debug on stderr */
- int display_limit; /* Files/page. Default -1 */
- int label_size; /* Label size. Default 28 */
- int pbar_size; /* Mini-progress size */
- int dialog_updates_per_second; /* Default 16 */
- int status_updates_per_second; /* Default 2 */
- uint16_t options; /* Default 0 (none) */
- char *title; /* Widget title */
- char *backtitle; /* Widget backtitle */
- char *aprompt; /* Append. Default NULL */
- char *pprompt; /* Prefix. Default NULL */
- char *msg_done; /* Default `Done' */
- char *msg_fail; /* Default `Fail' */
- char *msg_pending; /* Default `Pending' */
- char *output; /* Output format string */
- const char *status_solo; /* dialog(3) solo-status format.
- * Default DPV_STATUS_SOLO */
- const char *status_many; /* dialog(3) many-status format.
- * Default DPV_STATUS_MANY */
-
- /*
- * Function pointer; action to perform data transfer
- */
- int (*action)(struct dpv_file_node *file, int out);
-};
-
-enum dpv_display {
- DPV_DISPLAY_LIBDIALOG = 0, /* Use dialog(3) (default) */
- DPV_DISPLAY_STDOUT, /* Use stdout */
- DPV_DISPLAY_DIALOG, /* Use spawned dialog(1) */
- DPV_DISPLAY_XDIALOG, /* Use spawned Xdialog(1) */
-};
-
-enum dpv_output {
- DPV_OUTPUT_NONE = 0, /* No output (default) */
- DPV_OUTPUT_FILE, /* Read `output' member as file path */
- DPV_OUTPUT_SHELL, /* Read `output' member as shell cmd */
-};
-.Ed
-.Pp
-The
-.Va options
-member of the
-.Fn dpv
-.Fa config
-argument is a mask of bit fields indicating various processing options.
-Possible flags are:
-.Bl -tag -width DPV_NO_OVERRUN
-.It Dv DPV_TEST_MODE
-Enable test mode.
-In test mode,
-the
-.Fn action
-callback of the
-.Fa config
-argument is not called but instead simulated-data is used to drive progress.
-Appends
-.Dq [TEST MODE]
-to the status line
-.Po
-to override,
-set the
-.Va status_format
-member of the
-.Fn dpv
-.Fa config
-argument;
-for example,
-to
-.Dv DPV_STATUS_DEFAULT
-.Pc .
-.It Dv DPV_WIDE_MODE
-Enable wide mode.
-In wide mode,
-the length of the
-.Va aprompt
-and
-.Va pprompt
-members of the
-.Fn dpv
-.Fa config
-argument will bump the width of the gauge widget.
-Prompts wider than the maximum width will wrap
-.Po
-unless using
-.Xr Xdialog 1 Pq Pa ports/x11/xdialog ;
-see BUGS section below
-.Pc .
-.It Dv DPV_NO_LABELS
-Disables the display of labels associated with each transfer
-.Po
-.Va label_size
-member of
-.Fn dpv
-.Fa config
-argument is ignored
-.Pc .
-.It Dv DPV_USE_COLOR
-Force the use of color even if the
-.Va display_type
-does not support color
-.Po
-.Ev USE_COLOR
-environment variable is ignored
-.Pc .
-.It Dv DPV_NO_OVERRUN
-When enabled,
-callbacks for the current
-.Vt dpv_file_node
-are terminated when
-.Fn action
-returns 100 or greater
-.Po
-alleviates the need to change the
-.Va status
-of the current
-.Vt dpv_file_node
-but may also cause file truncation if the stream exceeds expected length
-.Pc .
-.El
-.Pp
-The
-.Fa file_list
-argument to
-.Fn dpv
-is a pointer to a
-.Dq linked-list ,
-described in
-.In dpv.h :
-.Bd -literal -offset indent
-struct dpv_file_node {
- enum dpv_status status; /* status of read operation */
- char *msg; /* display instead of "Done/Fail" */
- char *name; /* name of file to read */
- char *path; /* path to file */
- long long length; /* expected size */
- long long read; /* number units read (e.g., bytes) */
- struct dpv_file_node *next;/* pointer to next (end with NULL) */
-};
-.Ed
-.Pp
-For each of the items in the
-.Fa file_list
-.Dq linked-list
-argument,
-the
-.Fn action
-callback member of the
-.Fn dpv
-.Fa config
-argument is called.
-The
-.Fn action
-function performs a
-.Dq nominal
-action on the file and return.
-The return value of
-.Vt int
-represents the current progress percentage
-.Pq 0-100
-for the current file.
-.Pp
-The
-.Fn action
-callback provides two variables for each call.
-.Fa file
-provides a reference to the current
-.Vt dpv_file_node
-being processed.
-.Fa out
-provides a file descriptor where the data goes.
-.Pp
-If the
-.Va output
-member of the
-.Fn dpv
-.Fa config
-argument was set to DPV_OUTPUT_NONE
-.Pq default ; when invoking Fn dpv ,
-the
-.Fa out
-file descriptor of
-.Fn action
-will be zero and can be ignored.
-If
-.Fa output
-was set to DPV_OUTPUT_FILE,
-.Fa out
-will be an open file descriptor to a file.
-If
-.Fa output
-was set to DPV_OUTPUT_SHELL,
-.Fa out
-will be an open file descriptor to a pipe for a spawned shell program.
-When
-.Fa out
-is greater than zero,
-write data that has been read back to
-.Fa out .
-.Pp
-To abort
-.Fn dpv ,
-either from the
-.Fn action
-callback or asynchronously from a signal handler,
-two globals are provided via
-.In dpv.h :
-.Bd -literal -offset indent
-extern int dpv_interrupt; /* Set to TRUE in interrupt handler */
-extern int dpv_abort; /* Set to true in callback to abort */
-.Ed
-.Pp
-These globals are not automatically reset and must be manually maintained.
-Do not forget to reset these globals before subsequent invocations of
-.Fn dpv
-when making multiple calls from the same program.
-.Pp
-In addition,
-the
-.Va status
-member of the
-.Fn action
-.Fa file
-argument can be used to control callbacks for the current file.
-The
-.Va status
-member can be set to any of the below from
-.In dpv.h :
-.Bd -literal -offset indent
-enum dpv_status {
- DPV_STATUS_RUNNING = 0, /* Running (default) */
- DPV_STATUS_DONE, /* Completed */
- DPV_STATUS_FAILED, /* Oops, something went wrong */
-};
-.Ed
-.Pp
-The default
-.Fa status
-is zero,
-DPV_STATUS_RUNNING,
-which keeps the callbacks coming for the current
-.Fn file .
-Setting
-.Ql file->status
-to anything other than DPV_STATUS_RUNNING will cause
-.Fn dpv
-to loop to the next file,
-effecting the next callback,
-if any.
-.Pp
-The
-.Fn action
-callback is responsible for calculating percentages and
-.Pq recommended
-maintaining a
-.Nm
-global counter so
-.Fn dpv
-can display throughput statistics.
-Percentages are reported through the
-.Vt int
-return value of the
-.Fn action
-callback.
-Throughput statistics are calculated from the below global
-.Vt int
-in
-.In dpv.h :
-.Bd -literal -offset indent
-extern int dpv_overall_read;
-.Ed
-.Pp
-Set this to the number of bytes that have been read for all files.
-Throughput information is displayed in the status line
-.Pq only available when using Xr dialog 3
-at the bottom of the screen.
-See DPV_DISPLAY_LIBDIALOG above.
-.Pp
-Note that
-.Va dpv_overall_read
-does not have to represent bytes.
-For example,
-the
-.Va status_format
-can be changed to display something other than
-.Dq Li bytes
-and increment
-.Va dpv_overall_read
-accordingly
-.Pq for example, counting lines .
-.Pp
-When
-.Fn dpv
-is processing the current file,
-the
-.Va length
-and
-.Va read
-members of the
-.Fn action
-.Fa file
-argument are used for calculating the display of mini progress bars
-.Po
-if enabled;
-see
-.Va pbar_size
-above
-.Pc .
-If the
-.Va length
-member of the current
-.Fa file
-is less than zero
-.Pq indicating an unknown file length ,
-a
-.Xr humanize_number 3
-version of the
-.Va read
-member is used instead of a traditional progress bar.
-Otherwise a progress bar is calculated as percentage read to file length.
-.Fn action
-callback must maintain these member values for mini-progress bars.
-.Pp
-The
-.Fn dpv_free
-function performs
-.Xr free 3
-on private global variables initialized by
-.Fn dpv .
-.Sh ENVIRONMENT
-The below environment variables are referenced by
-.Nm :
-.Bl -tag -width ".Ev USE_COLOR"
-.It Ev DIALOG
-Override command string used to launch
-.Xr dialog 1
-.Pq requires Dv DPV_DISPLAY_DIALOG
-or
-.Xr Xdialog 1 Pq Pa ports/x11/xdialog
-.Pq requires Dv DPV_DISPLAY_XDIALOG ;
-default is either
-.Ql dialog
-.Pq for Dv DPV_DISPLAY_DIALOG
-or
-.Ql Xdialog
-.Pq for Dv DPV_DISPLAY_XDIALOG .
-.It Ev DIALOGRC
-If set and non-NULL,
-path to
-.Ql .dialogrc
-file.
-.It Ev HOME
-If
-.Ql Ev $DIALOGRC
-is either not set or NULL,
-used as a prefix to
-.Ql .dialogrc
-.Pq that is, Ql $HOME/.dialogrc .
-.It Ev USE_COLOR
-If set and NULL,
-disables the use of color when using
-.Xr dialog 1 .
-Does not apply to
-.Xr Xdialog 1 Pq Pa ports/x11/xdialog .
-.It Ev msg_done Ev msg_fail Ev msg_pending
-Internationalization strings for overriding the default English strings
-.Ql Done ,
-.Ql Fail ,
-and
-.Ql Pending
-respectively.
-To prevent their usage,
-explicitly set the
-.Va msg_done ,
-.Va msg_fail ,
-and
-.Va msg_pending
-members of
-.Fn dpv
-.Fa config
-argument to default macros
-.Pq DPV_DONE_DEFAULT, DPV_FAIL_DEFAULT, and DPV_PENDING_DEFAULT
-or desired values.
-.El
-.Sh FILES
-.Bl -tag -width ".Pa $HOME/.dialogrc" -compact
-.It Pa $HOME/.dialogrc
-.El
-.Sh SEE ALSO
-.Xr dialog 1 ,
-.Xr Xdialog 1 Pq Pa ports/x11/xdialog ,
-.Xr dialog 3
-.Sh HISTORY
-The
-.Nm
-library first appeared in
-.Fx 10.2 .
-.Sh AUTHORS
-.An Devin Teske Aq dteske@FreeBSD.org
-.Sh BUGS
-.Xr Xdialog 1 Pq Pa ports/x11/xdialog ,
-when given both
-.Ql Fl -title Ar title
-.Po
-see above
-.Ql Va title
-member of
-.Va struct dpv_config
-.Pc
-and
-.Ql Fl -backtitle Ar backtitle
-.Po
-see above
-.Ql Va backtitle
-member of
-.Va struct dpv_config
-.Pc ,
-displays the backtitle in place of the title and vice-versa.
-.Pp
-.Xr Xdialog 1 Pq Pa ports/x11/xdialog
-does not wrap long prompt texts received after initial launch.
-This is a known issue with the
-.Ql --gauge
-widget in
-.Xr Xdialog 1 Pq Pa ports/x11/xdialog .
-Embed escaped newlines within prompt text to force line breaks.
-.Pp
-.Xr dialog 1
-does not display the first character after a series of escaped escape-sequences
-(for example, ``\\\\n'' produces ``\\'' instead of ``\\n'').
-This is a known issue with
-.Xr dialog 1
-and does not affect
-.Xr dialog 3
-or
-.Xr Xdialog 1 Pq Pa ports/x11/xdialog .
-.Pp
-If an application ignores
-.Ev USE_COLOR
-when set and NULL before calling
-.Fn dpv
-with color escape sequences anyway,
-.Xr dialog 3
-and
-.Xr dialog 1
-may not render properly.
-Workaround is to detect when
-.Ev USE_COLOR
-is set and NULL and either not use color escape sequences at that time or use
-.Xr unsetenv 3
-to unset
-.Ev USE_COLOR ,
-forcing interpretation of color sequences.
-This does not effect
-.Xr Xdialog 1 Pq Pa ports/x11/xdialog ,
-which renders the color escape sequences as plain text.
-See
-.Do
-embedded "\\Z" sequences
-.Dc
-in
-.Xr dialog 1
-for additional information.
diff --git a/lib/libdpv/dpv.c b/lib/libdpv/dpv.c
deleted file mode 100644
--- a/lib/libdpv/dpv.c
+++ /dev/null
@@ -1,728 +0,0 @@
-/*-
- * Copyright (c) 2013-2016 Devin Teske <dteske@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#include <ctype.h>
-#include <dialog.h>
-#include <err.h>
-#include <limits.h>
-#include <locale.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <string_m.h>
-#include <unistd.h>
-
-#include "dialog_util.h"
-#include "dialogrc.h"
-#include "dprompt.h"
-#include "dpv.h"
-#include "dpv_private.h"
-#include "status.h"
-#include "util.h"
-
-/* Test Mechanics (Only used when dpv_config.options |= DPV_TEST_MODE) */
-#define INCREMENT 1 /* Increment % per-pass test-mode */
-#define XDIALOG_INCREMENT 15 /* different for slower Xdialog(1) */
-static uint8_t increment = INCREMENT;
-
-/* Debugging */
-uint8_t debug = FALSE;
-
-/* Data to process */
-int dpv_interrupt = FALSE;
-int dpv_abort = FALSE;
-unsigned int dpv_nfiles = 0;
-
-/* Data processing */
-long long dpv_overall_read = 0;
-static char pathbuf[PATH_MAX];
-
-/* Extra display information */
-uint8_t keep_tite = FALSE; /* dpv_config.keep_tite */
-uint8_t no_labels = FALSE; /* dpv_config.options & DPV_NO_LABELS */
-uint8_t wide = FALSE; /* dpv_config.options & DPV_WIDE_MODE */
-char *aprompt = NULL; /* dpv_config.aprompt */
-char *msg_done = NULL; /* dpv_config.msg_done */
-char *msg_fail = NULL; /* dpv_config.msg_fail */
-char *msg_pending = NULL; /* dpv_config.msg_pending */
-char *pprompt = NULL; /* dpv_config.pprompt */
-
-/* Status-Line format for when using dialog(3) */
-static const char *status_format_custom = NULL;
-static char status_format_default[DPV_STATUS_FORMAT_MAX];
-
-/*
- * Takes a pointer to a dpv_config structure containing layout details and
- * pointer to initial element in a linked-list of dpv_file_node structures,
- * each presenting a file to process. Executes the `action' function passed-in
- * as a member to the `config' structure argument.
- */
-int
-dpv(struct dpv_config *config, struct dpv_file_node *file_list)
-{
- char c;
- uint8_t keep_going;
- uint8_t nls = FALSE; /* See dialog_prompt_nlstate() */
- uint8_t no_overrun = FALSE;
- uint8_t pprompt_nls = FALSE; /* See dialog_prompt_nlstate() */
- uint8_t shrink_label_size = FALSE;
- mode_t mask;
- uint16_t options;
- char *cp;
- char *fc;
- char *last;
- char *name;
- char *output;
- const char *status_fmt;
- const char *path_fmt;
- enum dpv_display display_type;
- enum dpv_output output_type;
- enum dpv_status status;
- int (*action)(struct dpv_file_node *file, int out);
- int backslash;
- int dialog_last_update = 0;
- int dialog_old_nthfile = 0;
- int dialog_old_seconds = -1;
- int dialog_out = STDOUT_FILENO;
- int dialog_update_usec = 0;
- int dialog_updates_per_second;
- int files_left;
- int max_cols;
- int nthfile = 0;
- int output_out;
- int overall = 0;
- int pct;
- int res;
- int seconds;
- int status_last_update = 0;
- int status_old_nthfile = 0;
- int status_old_seconds = -1;
- int status_update_usec = 0;
- int status_updates_per_second;
- pid_t output_pid;
- pid_t pid;
- size_t len;
- struct dpv_file_node *curfile;
- struct dpv_file_node *first_file;
- struct dpv_file_node *list_head;
- struct timeval now;
- struct timeval start;
- char init_prompt[PROMPT_MAX + 1] = "";
-
- /* Initialize globals to default values */
- aprompt = NULL;
- pprompt = NULL;
- options = 0;
- action = NULL;
- backtitle = NULL;
- debug = FALSE;
- dialog_test = FALSE;
- dialog_updates_per_second = DIALOG_UPDATES_PER_SEC;
- display_limit = DISPLAY_LIMIT_DEFAULT;
- display_type = DPV_DISPLAY_LIBDIALOG;
- keep_tite = FALSE;
- label_size = LABEL_SIZE_DEFAULT;
- msg_done = NULL;
- msg_fail = NULL;
- msg_pending = NULL;
- no_labels = FALSE;
- output = NULL;
- output_type = DPV_OUTPUT_NONE;
- pbar_size = PBAR_SIZE_DEFAULT;
- status_format_custom = NULL;
- status_updates_per_second = STATUS_UPDATES_PER_SEC;
- title = NULL;
- wide = FALSE;
-
- /* Process config options (overriding defaults) */
- if (config != NULL) {
- if (config->aprompt != NULL) {
- if (aprompt == NULL) {
- aprompt = malloc(DPV_APROMPT_MAX);
- if (aprompt == NULL)
- return (-1);
- }
- snprintf(aprompt, DPV_APROMPT_MAX, "%s",
- config->aprompt);
- }
- if (config->pprompt != NULL) {
- if (pprompt == NULL) {
- pprompt = malloc(DPV_PPROMPT_MAX + 2);
- /* +2 is for implicit "\n" appended later */
- if (pprompt == NULL)
- return (-1);
- }
- snprintf(pprompt, DPV_APROMPT_MAX, "%s",
- config->pprompt);
- }
-
- options = config->options;
- action = config->action;
- backtitle = config->backtitle;
- debug = config->debug;
- dialog_test = ((options & DPV_TEST_MODE) != 0);
- dialog_updates_per_second = config->dialog_updates_per_second;
- display_limit = config->display_limit;
- display_type = config->display_type;
- keep_tite = config->keep_tite;
- label_size = config->label_size;
- msg_done = (char *)config->msg_done;
- msg_fail = (char *)config->msg_fail;
- msg_pending = (char *)config->msg_pending;
- no_labels = ((options & DPV_NO_LABELS) != 0);
- no_overrun = ((options & DPV_NO_OVERRUN) != 0);
- output = config->output;
- output_type = config->output_type;
- pbar_size = config->pbar_size;
- status_updates_per_second = config->status_updates_per_second;
- title = config->title;
- wide = ((options & DPV_WIDE_MODE) != 0);
-
- /* Enforce some minimums (pedantic) */
- if (display_limit < -1)
- display_limit = -1;
- if (label_size < -1)
- label_size = -1;
- if (pbar_size < -1)
- pbar_size = -1;
-
- /* For the mini-pbar, -1 means hide, zero is invalid unless
- * only one file is given */
- if (pbar_size == 0) {
- if (file_list == NULL || file_list->next == NULL)
- pbar_size = -1;
- else
- pbar_size = PBAR_SIZE_DEFAULT;
- }
-
- /* For the label, -1 means auto-size, zero is invalid unless
- * specifically requested through the use of options flag */
- if (label_size == 0 && no_labels == FALSE)
- label_size = LABEL_SIZE_DEFAULT;
-
- /* Status update should not be zero */
- if (status_updates_per_second == 0)
- status_updates_per_second = STATUS_UPDATES_PER_SEC;
- } /* config != NULL */
-
- /* Process the type of display we've been requested to produce */
- switch (display_type) {
- case DPV_DISPLAY_STDOUT:
- debug = TRUE;
- use_color = FALSE;
- use_dialog = FALSE;
- use_libdialog = FALSE;
- use_xdialog = FALSE;
- break;
- case DPV_DISPLAY_DIALOG:
- use_color = TRUE;
- use_dialog = TRUE;
- use_libdialog = FALSE;
- use_xdialog = FALSE;
- break;
- case DPV_DISPLAY_XDIALOG:
- snprintf(dialog, PATH_MAX, XDIALOG);
- use_color = FALSE;
- use_dialog = FALSE;
- use_libdialog = FALSE;
- use_xdialog = TRUE;
- break;
- default:
- use_color = TRUE;
- use_dialog = FALSE;
- use_libdialog = TRUE;
- use_xdialog = FALSE;
- break;
- } /* display_type */
-
- /* Enforce additional minimums that require knowing our display type */
- if (dialog_updates_per_second == 0)
- dialog_updates_per_second = use_xdialog ?
- XDIALOG_UPDATES_PER_SEC : DIALOG_UPDATES_PER_SEC;
-
- /* Allow forceful override of use_color */
- if (config != NULL && (config->options & DPV_USE_COLOR) != 0)
- use_color = TRUE;
-
- /* Count the number of files in provided list of dpv_file_node's */
- if (use_dialog && pprompt != NULL && *pprompt != '\0')
- pprompt_nls = dialog_prompt_nlstate(pprompt);
-
- max_cols = dialog_maxcols();
- if (label_size == -1)
- shrink_label_size = TRUE;
-
- /* Process file arguments */
- for (curfile = file_list; curfile != NULL; curfile = curfile->next) {
- dpv_nfiles++;
-
- /* dialog(3) only expands literal newlines */
- if (use_libdialog) strexpandnl(curfile->name);
-
- /* Optionally calculate label size for file */
- if (shrink_label_size) {
- nls = FALSE;
- name = curfile->name;
- if (curfile == file_list)
- nls = pprompt_nls;
- last = (char *)dialog_prompt_lastline(name, nls);
- if (use_dialog) {
- c = *last;
- *last = '\0';
- nls = dialog_prompt_nlstate(name);
- *last = c;
- }
- len = dialog_prompt_longestline(last, nls);
- if ((int)len > (label_size - 3)) {
- if (label_size > 0)
- label_size += 3;
- label_size = len;
- /* Room for ellipsis (unless NULL) */
- if (label_size > 0)
- label_size += 3;
- }
-
- if (max_cols > 0 && label_size > (max_cols - pbar_size
- - 9))
- label_size = max_cols - pbar_size - 9;
- }
-
- if (debug)
- warnx("label=[%s] path=[%s] size=%lli",
- curfile->name, curfile->path, curfile->length);
- } /* file_list */
-
- /* Optionally process the contents of DIALOGRC (~/.dialogrc) */
- if (use_dialog) {
- res = parse_dialogrc();
- if (debug && res == 0) {
- warnx("Successfully read `%s' config file", DIALOGRC);
- warnx("use_shadow = %i (Boolean)", use_shadow);
- warnx("use_colors = %i (Boolean)", use_colors);
- warnx("gauge_color=[%s] (FBH)", gauge_color);
- }
- } else if (use_libdialog) {
- init_dialog(stdin, stdout);
- use_shadow = dialog_state.use_shadow;
- use_colors = dialog_state.use_colors;
- gauge_color[0] = 48 + dlg_color_table[GAUGE_ATTR].fg;
- gauge_color[1] = 48 + dlg_color_table[GAUGE_ATTR].bg;
- gauge_color[2] = dlg_color_table[GAUGE_ATTR].hilite ?
- 'b' : 'B';
- gauge_color[3] = '\0';
- end_dialog();
- if (debug) {
- warnx("Finished initializing dialog(3) library");
- warnx("use_shadow = %i (Boolean)", use_shadow);
- warnx("use_colors = %i (Boolean)", use_colors);
- warnx("gauge_color=[%s] (FBH)", gauge_color);
- }
- }
-
- /* Enable mini progress bar automatically for stdin streams if unable
- * to calculate progress (missing `lines:' syntax). */
- if (dpv_nfiles <= 1 && file_list != NULL && file_list->length < 0 &&
- !dialog_test)
- pbar_size = PBAR_SIZE_DEFAULT;
-
- /* If $USE_COLOR is set and non-NULL enable color; otherwise disable */
- if ((cp = getenv(ENV_USE_COLOR)) != 0)
- use_color = *cp != '\0' ? 1 : 0;
-
- /* Print error and return `-1' if not given at least one name */
- if (dpv_nfiles == 0) {
- warnx("%s: no labels provided", __func__);
- return (-1);
- } else if (debug)
- warnx("%s: %u label%s provided", __func__, dpv_nfiles,
- dpv_nfiles == 1 ? "" : "s");
-
- /* If only one file and pbar size is zero, default to `-1' */
- if (dpv_nfiles <= 1 && pbar_size == 0)
- pbar_size = -1;
-
- /* Print some debugging information */
- if (debug) {
- warnx("%s: %s(%i) max rows x cols = %i x %i",
- __func__, use_xdialog ? XDIALOG : DIALOG,
- use_libdialog ? 3 : 1, dialog_maxrows(),
- dialog_maxcols());
- }
-
- /* Xdialog(1) updates a lot slower than dialog(1) */
- if (dialog_test && use_xdialog)
- increment = XDIALOG_INCREMENT;
-
- /* Always add implicit newline to pprompt (when specified) */
- if (pprompt != NULL && *pprompt != '\0') {
- len = strlen(pprompt);
- /*
- * NOTE: pprompt = malloc(PPROMPT_MAX + 2)
- * NOTE: (see getopt(2) section above for pprompt allocation)
- */
- pprompt[len++] = '\\';
- pprompt[len++] = 'n';
- pprompt[len++] = '\0';
- }
-
- /* Xdialog(1) requires newlines (a) escaped and (b) in triplicate */
- if (use_xdialog && pprompt != NULL) {
- /* Replace `\n' with `\n\\n\n' in pprompt */
- len = strlen(pprompt);
- len += strcount(pprompt, "\\n") * 2;
- if (len > DPV_PPROMPT_MAX)
- errx(EXIT_FAILURE, "%s: Oops, pprompt buffer overflow "
- "(%zu > %i)", __func__, len, DPV_PPROMPT_MAX);
- if (replaceall(pprompt, "\\n", "\n\\n\n") < 0)
- err(EXIT_FAILURE, "%s: replaceall()", __func__);
- }
- /* libdialog requires literal newlines */
- else if (use_libdialog && pprompt != NULL)
- strexpandnl(pprompt);
-
- /* Xdialog(1) requires newlines (a) escaped and (b) in triplicate */
- if (use_xdialog && aprompt != NULL) {
- /* Replace `\n' with `\n\\n\n' in aprompt */
- len = strlen(aprompt);
- len += strcount(aprompt, "\\n") * 2;
- if (len > DPV_APROMPT_MAX)
- errx(EXIT_FAILURE, "%s: Oops, aprompt buffer overflow "
- " (%zu > %i)", __func__, len, DPV_APROMPT_MAX);
- if (replaceall(aprompt, "\\n", "\n\\n\n") < 0)
- err(EXIT_FAILURE, "%s: replaceall()", __func__);
- }
- /* libdialog requires literal newlines */
- else if (use_libdialog && aprompt != NULL)
- strexpandnl(aprompt);
-
- /*
- * Warn user about an obscure dialog(1) bug (neither Xdialog(1) nor
- * libdialog are affected) in the `--gauge' widget. If the first non-
- * whitespace letter of "{new_prompt}" in "XXX\n{new_prompt}\nXXX\n"
- * is a number, the number can sometimes be mistaken for a percentage
- * to the overall progressbar. Other nasty side-effects such as the
- * entire prompt not displaying or displaying improperly are caused by
- * this bug too.
- *
- * NOTE: When we can use color, we have a work-around... prefix the
- * output with `\Zn' (used to terminate ANSI and reset to normal).
- */
- if (use_dialog && !use_color) {
- backslash = 0;
-
- /* First, check pprompt (falls through if NULL) */
- fc = pprompt;
- while (fc != NULL && *fc != '\0') {
- if (*fc == '\n') /* leading literal newline OK */
- break;
- if (!isspace(*fc) && *fc != '\\' && backslash == 0)
- break;
- else if (backslash > 0 && *fc != 'n')
- break;
- else if (*fc == '\\') {
- backslash++;
- if (backslash > 2)
- break; /* we're safe */
- }
- fc++;
- }
- /* First non-whitespace character that dialog(1) will see */
- if (fc != NULL && *fc >= '0' && *fc <= '9')
- warnx("%s: WARNING! text argument to `-p' begins with "
- "a number (not recommended)", __func__);
- else if (fc > pprompt)
- warnx("%s: WARNING! text argument to `-p' begins with "
- "whitespace (not recommended)", __func__);
-
- /*
- * If no pprompt or pprompt is all whitespace, check the first
- * file name provided to make sure it is alright too.
- */
- if ((pprompt == NULL || *fc == '\0') && file_list != NULL) {
- first_file = file_list;
- fc = first_file->name;
- while (fc != NULL && *fc != '\0' && isspace(*fc))
- fc++;
- /* First non-whitespace char that dialog(1) will see */
- if (fc != NULL && *fc >= '0' && *fc <= '9')
- warnx("%s: WARNING! File name `%s' begins "
- "with a number (use `-p text' for safety)",
- __func__, first_file->name);
- }
- }
-
- dprompt_init(file_list);
- /* Reads: label_size pbar_size pprompt aprompt dpv_nfiles */
- /* Inits: dheight and dwidth */
-
- /* Default localeconv(3) settings for dialog(3) status */
- setlocale(LC_NUMERIC,
- getenv("LC_ALL") == NULL && getenv("LC_NUMERIC") == NULL ?
- LC_NUMERIC_DEFAULT : "");
-
- if (!debug) {
- /* Internally create the initial `--gauge' prompt text */
- dprompt_recreate(file_list, (struct dpv_file_node *)NULL, 0);
-
- /* Spawn [X]dialog(1) `--gauge', returning pipe descriptor */
- if (use_libdialog) {
- status_printf("");
- dprompt_libprint(pprompt, aprompt, 0);
- } else {
- dprompt_sprint(init_prompt, pprompt, aprompt);
- dialog_out = dialog_spawn_gauge(init_prompt, &pid);
- dprompt_dprint(dialog_out, pprompt, aprompt, 0);
- }
- } /* !debug */
-
- /* Seed the random(3) generator */
- if (dialog_test)
- srandom(0xf1eeface);
-
- /* Set default/custom status line format */
- if (dpv_nfiles > 1) {
- snprintf(status_format_default, DPV_STATUS_FORMAT_MAX, "%s",
- DPV_STATUS_MANY);
- status_format_custom = config->status_many;
- } else {
- snprintf(status_format_default, DPV_STATUS_FORMAT_MAX, "%s",
- DPV_STATUS_SOLO);
- status_format_custom = config->status_solo;
- }
-
- /* Add test mode identifier to default status line if enabled */
- if (dialog_test && (strlen(status_format_default) + 12) <
- DPV_STATUS_FORMAT_MAX)
- strcat(status_format_default, " [TEST MODE]");
-
- /* Verify custom status format */
- status_fmt = fmtcheck(status_format_custom, status_format_default);
- if (status_format_custom != NULL &&
- status_fmt == status_format_default) {
- warnx("WARNING! Invalid status_format configuration `%s'",
- status_format_custom);
- warnx("Default status_format `%s'", status_format_default);
- }
-
- /* Record when we started (used to prevent updating too quickly) */
- (void)gettimeofday(&start, (struct timezone *)NULL);
-
- /* Calculate number of microseconds in-between sub-second updates */
- if (status_updates_per_second != 0)
- status_update_usec = 1000000 / status_updates_per_second;
- if (dialog_updates_per_second != 0)
- dialog_update_usec = 1000000 / dialog_updates_per_second;
-
- /*
- * Process the file list [serially] (one for each argument passed)
- */
- files_left = dpv_nfiles;
- list_head = file_list;
- for (curfile = file_list; curfile != NULL; curfile = curfile->next) {
- keep_going = TRUE;
- output_out = -1;
- pct = 0;
- nthfile++;
- files_left--;
-
- if (dpv_interrupt)
- break;
- if (dialog_test)
- pct = 0 - increment;
-
- /* Attempt to spawn output program for this file */
- if (!dialog_test && output != NULL) {
- mask = umask(0022);
- (void)umask(mask);
-
- switch (output_type) {
- case DPV_OUTPUT_SHELL:
- output_out = shell_spawn_pipecmd(output,
- curfile->name, &output_pid);
- break;
- case DPV_OUTPUT_FILE:
- path_fmt = fmtcheck(output, "%s");
- if (path_fmt == output)
- len = snprintf(pathbuf,
- PATH_MAX, output, curfile->name);
- else
- len = snprintf(pathbuf,
- PATH_MAX, "%s", output);
- if (len >= PATH_MAX) {
- warnx("%s:%d:%s: pathbuf[%u] too small"
- "to hold output argument",
- __FILE__, __LINE__, __func__,
- PATH_MAX);
- return (-1);
- }
- if ((output_out = open(pathbuf,
- O_CREAT|O_WRONLY, DEFFILEMODE & ~mask))
- < 0) {
- warn("%s", pathbuf);
- return (-1);
- }
- break;
- default:
- break;
- }
- }
-
- while (!dpv_interrupt && keep_going) {
- if (dialog_test) {
- usleep(50000);
- pct += increment;
- dpv_overall_read +=
- (int)(random() / 512 / dpv_nfiles);
- /* 512 limits fake readout to Megabytes */
- } else if (action != NULL)
- pct = action(curfile, output_out);
-
- if (no_overrun || dialog_test)
- keep_going = (pct < 100);
- else {
- status = curfile->status;
- keep_going = (status == DPV_STATUS_RUNNING);
- }
-
- /* Get current time and calculate seconds elapsed */
- gettimeofday(&now, (struct timezone *)NULL);
- now.tv_sec = now.tv_sec - start.tv_sec;
- now.tv_usec = now.tv_usec - start.tv_usec;
- if (now.tv_usec < 0)
- now.tv_sec--, now.tv_usec += 1000000;
- seconds = now.tv_sec + (now.tv_usec / 1000000.0);
-
- /* Update dialog (be it dialog(3), dialog(1), etc.) */
- if ((dialog_updates_per_second != 0 &&
- (
- seconds != dialog_old_seconds ||
- now.tv_usec - dialog_last_update >=
- dialog_update_usec ||
- nthfile != dialog_old_nthfile
- )) || pct == 100
- ) {
- /* Calculate overall progress (rounding up) */
- overall = (100 * nthfile - 100 + pct) /
- dpv_nfiles;
- if (((100 * nthfile - 100 + pct) * 10 /
- dpv_nfiles % 100) > 50)
- overall++;
-
- dprompt_recreate(list_head, curfile, pct);
-
- if (use_libdialog && !debug) {
- /* Update dialog(3) widget */
- dprompt_libprint(pprompt, aprompt,
- overall);
- } else {
- /* stdout, dialog(1), or Xdialog(1) */
- dprompt_dprint(dialog_out, pprompt,
- aprompt, overall);
- fsync(dialog_out);
- }
- dialog_old_seconds = seconds;
- dialog_old_nthfile = nthfile;
- dialog_last_update = now.tv_usec;
- }
-
- /* Update the status line */
- if ((use_libdialog && !debug) &&
- status_updates_per_second != 0 &&
- (
- keep_going != TRUE ||
- seconds != status_old_seconds ||
- now.tv_usec - status_last_update >=
- status_update_usec ||
- nthfile != status_old_nthfile
- )
- ) {
- status_printf(status_fmt, dpv_overall_read,
- (dpv_overall_read / (seconds == 0 ? 1 :
- seconds) * 1.0),
- 1, /* XXX until we add parallelism XXX */
- files_left);
- status_old_seconds = seconds;
- status_old_nthfile = nthfile;
- status_last_update = now.tv_usec;
- }
- }
-
- if (!dialog_test && output_out >= 0) {
- close(output_out);
- waitpid(output_pid, (int *)NULL, 0);
- }
-
- if (dpv_abort)
- break;
-
- /* Advance head of list when we hit the max display lines */
- if (display_limit > 0 && nthfile % display_limit == 0)
- list_head = curfile->next;
- }
-
- if (!debug) {
- if (use_libdialog)
- end_dialog();
- else {
- close(dialog_out);
- waitpid(pid, (int *)NULL, 0);
- }
- if (!keep_tite && !dpv_interrupt)
- printf("\n");
- } else
- warnx("%s: %lli overall read", __func__, dpv_overall_read);
-
- if (dpv_interrupt || dpv_abort)
- return (-1);
- else
- return (0);
-}
-
-/*
- * Free allocated items initialized by dpv()
- */
-void
-dpv_free(void)
-{
- dialogrc_free();
- dprompt_free();
- dialog_maxsize_free();
- if (aprompt != NULL) {
- free(aprompt);
- aprompt = NULL;
- }
- if (pprompt != NULL) {
- free(pprompt);
- pprompt = NULL;
- }
- status_free();
-}
diff --git a/lib/libdpv/dpv_private.h b/lib/libdpv/dpv_private.h
deleted file mode 100644
--- a/lib/libdpv/dpv_private.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*-
- * Copyright (c) 2013-2016 Devin Teske <dteske@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _DPV_PRIVATE_H_
-#define _DPV_PRIVATE_H_
-
-#include <sys/types.h>
-
-/* Debugging */
-extern uint8_t debug;
-
-/* Data to process */
-extern unsigned int dpv_nfiles;
-
-/* Extra display information */
-extern uint8_t keep_tite;
-extern uint8_t no_labels;
-extern uint8_t wide;
-extern char *msg_done, *msg_fail, *msg_pending;
-extern char *pprompt, *aprompt;
-extern const char status_format[];
-
-/* Defaults */
-#define DIALOG_UPDATES_PER_SEC 16
-#define XDIALOG_UPDATES_PER_SEC 4
-#define DISPLAY_LIMIT_DEFAULT 0 /* Auto-calculate */
-#define LABEL_SIZE_DEFAULT 28
-#define PBAR_SIZE_DEFAULT 17
-#define STATUS_UPDATES_PER_SEC 2
-
-/* states for dprompt_add_files() of dprompt.c */
-enum dprompt_state {
- DPROMPT_NONE = 0, /* Default */
- DPROMPT_PENDING, /* Pending */
- DPROMPT_PBAR, /* Progress bar */
- DPROMPT_END_STATE, /* Done/Fail */
- DPROMPT_DETAILS, /* dpv_file_node->read */
- DPROMPT_CUSTOM_MSG, /* dpv_file_node->msg */
- DPROMPT_MINIMAL, /* whitespace */
-};
-
-#endif /* !_DPV_PRIVATE_H_ */
diff --git a/lib/libdpv/status.h b/lib/libdpv/status.h
deleted file mode 100644
--- a/lib/libdpv/status.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*-
- * Copyright (c) 2013-2014 Devin Teske <dteske@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _STATUS_H_
-#define _STATUS_H_
-
-#include <sys/cdefs.h>
-
-/* dialog(3) dlg_color_table[] attributes */
-#define SCREEN_ATTR 0 /* entry used for status line bg */
-#define BUTTON_ACTIVE_ATTR 5 /* entry used for status line fg */
-
-__BEGIN_DECLS
-void status_free(void);
-void status_printf(const char *_format, ...);
-__END_DECLS
-
-#endif /* !_STATUS_H_ */
diff --git a/lib/libdpv/status.c b/lib/libdpv/status.c
deleted file mode 100644
--- a/lib/libdpv/status.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/*-
- * Copyright (c) 2013-2014 Devin Teske <dteske@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-#include <curses.h>
-#include <dialog.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "dialog_util.h"
-#include "status.h"
-
-/* static globals */
-static char *status_buf = NULL;
-static int status_bufsize = -1;
-static int status_row;
-static int status_width;
-
-/*
- * Print a `one-liner' status message at the bottom of the screen. Messages are
- * trimmed to fit within the console length (ANSI coloring not accounted for).
- */
-void
-status_printf(const char *fmt, ...)
-{
- int n, attrs;
- chtype color = dlg_color_pair(dlg_color_table[BUTTON_ACTIVE_ATTR].fg,
- dlg_color_table[SCREEN_ATTR].bg) | A_BOLD;
- va_list args;
-
- status_row = tty_maxrows() - 1;
- status_width = tty_maxcols();
-
- /* NULL is a special convention meaning "erase the old stuff" */
- if (fmt == NULL) {
- move(status_row, 0);
- clrtoeol();
- return;
- }
-
- /* Resize buffer if terminal width is greater */
- if ((status_width + 1) > status_bufsize) {
- status_buf = realloc(status_buf, status_width + 1);
- if (status_buf == NULL) {
- status_bufsize = -1;
- return;
- }
- status_bufsize = status_width + 1;
- }
-
- /* Print the message within a space-filled buffer */
- memset(status_buf, ' ', status_width);
- va_start(args, fmt);
- n = vsnprintf(status_buf, status_width + 1, fmt, args);
- va_end(args);
-
- /* If vsnprintf(3) produced less bytes than the maximum, change the
- * implicitly-added NUL-terminator into a space and terminate at max */
- if (n < status_width) {
- status_buf[n] = ' ';
- status_buf[status_width] = '\0';
- }
-
- /* Print text in screen bg, button active fg, and bold */
- attrs = getattrs(stdscr);
- attrset(color);
- mvaddstr(status_row, 0, status_buf);
- attrset(attrs);
-
- /* Seat the cursor over the last character at absolute lower-right */
- move(status_row, status_width - 1);
- refresh();
-}
-
-/*
- * Free allocated items initialized by status_printf()
- */
-void
-status_free(void)
-{
- if (status_buf != NULL) {
- free(status_buf);
- status_buf = NULL;
- }
-}
diff --git a/lib/libdpv/util.h b/lib/libdpv/util.h
deleted file mode 100644
--- a/lib/libdpv/util.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*-
- * Copyright (c) 2013-2016 Devin Teske <dteske@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _UTIL_H_
-#define _UTIL_H_
-
-#include <sys/types.h>
-
-#include <paths.h>
-
-#define SHELL_SPAWN_DEBUG 0 /* Debug spawning of sh(1) commands */
-
-#ifdef _PATH_BSHELL
-#define PATH_SHELL _PATH_BSHELL
-#else
-#define PATH_SHELL "/bin/sh"
-#endif
-
-#define CMDBUFMAX 65536
-
-__BEGIN_DECLS
-int shell_spawn_pipecmd(const char *_cmd, const char *_label, pid_t *_pid);
-__END_DECLS
-
-#endif /* !_UTIL_H_ */
diff --git a/lib/libdpv/util.c b/lib/libdpv/util.c
deleted file mode 100644
--- a/lib/libdpv/util.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*-
- * Copyright (c) 2013-2018 Devin Teske <dteske@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-#include <err.h>
-#include <limits.h>
-#include <spawn.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include "util.h"
-
-extern char **environ;
-static char cmdbuf[CMDBUFMAX] = "";
-static char shellcmd[PATH_MAX] = PATH_SHELL;
-static char *shellcmd_argv[6] = {
- shellcmd,
- __DECONST(char *, "-c"),
- cmdbuf,
- __DECONST(char *, "--"),
- shellcmd,
- NULL,
-};
-
-/*
- * Spawn a sh(1) command. Writes the resulting process ID to the pid_t pointed
- * at by `pid'. Returns a file descriptor (int) suitable for writing data to
- * the spawned command (data written to file descriptor is seen as standard-in
- * by the spawned sh(1) command). Returns `-1' if unable to spawn command.
- *
- * If cmd contains a single "%s" sequence, replace it with label if non-NULL.
- */
-int
-shell_spawn_pipecmd(const char *cmd, const char *label, pid_t *pid)
-{
- int error;
- int len;
- posix_spawn_file_actions_t action;
-#if SHELL_SPAWN_DEBUG
- unsigned int i;
-#endif
- int stdin_pipe[2] = { -1, -1 };
-
- /* Populate argument array */
- if (label != NULL && fmtcheck(cmd, "%s") == cmd)
- len = snprintf(cmdbuf, CMDBUFMAX, cmd, label);
- else
- len = snprintf(cmdbuf, CMDBUFMAX, "%s", cmd);
- if (len >= CMDBUFMAX) {
- warnx("%s:%d:%s: cmdbuf[%u] too small to hold cmd argument",
- __FILE__, __LINE__, __func__, CMDBUFMAX);
- return (-1);
- }
-
- /* Open a pipe to communicate with [X]dialog(1) */
- if (pipe(stdin_pipe) < 0)
- err(EXIT_FAILURE, "%s: pipe(2)", __func__);
-
- /* Fork sh(1) process */
-#if SHELL_SPAWN_DEBUG
- fprintf(stderr, "%s: spawning `", __func__);
- for (i = 0; shellcmd_argv[i] != NULL; i++) {
- if (i == 0)
- fprintf(stderr, "%s", shellcmd_argv[i]);
- else if (i == 2)
- fprintf(stderr, " '%s'", shellcmd_argv[i]);
- else
- fprintf(stderr, " %s", shellcmd_argv[i]);
- }
- fprintf(stderr, "'\n");
-#endif
- posix_spawn_file_actions_init(&action);
- posix_spawn_file_actions_adddup2(&action, stdin_pipe[0], STDIN_FILENO);
- posix_spawn_file_actions_addclose(&action, stdin_pipe[1]);
- error = posix_spawnp(pid, shellcmd, &action,
- (const posix_spawnattr_t *)NULL, shellcmd_argv, environ);
- if (error != 0) err(EXIT_FAILURE, "%s", shellcmd);
-
- return stdin_pipe[1];
-}
diff --git a/lib/libfigpar/Makefile b/lib/libfigpar/Makefile
deleted file mode 100644
--- a/lib/libfigpar/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-PACKAGE= dpv
-LIB= figpar
-SHLIB_MAJOR= 0
-INCS= figpar.h string_m.h
-MAN= figpar.3
-MLINKS= figpar.3 get_config_option.3 \
- figpar.3 parse_config.3 \
- figpar.3 replaceall.3 \
- figpar.3 strcount.3 \
- figpar.3 strexpand.3 \
- figpar.3 strexpandnl.3 \
- figpar.3 strtolower.3
-
-CFLAGS+= -I${.CURDIR}
-
-SRCS= figpar.c string_m.c
-
-.include <bsd.lib.mk>
diff --git a/lib/libfigpar/Makefile.depend b/lib/libfigpar/Makefile.depend
deleted file mode 100644
--- a/lib/libfigpar/Makefile.depend
+++ /dev/null
@@ -1,15 +0,0 @@
-# Autogenerated - do NOT edit!
-
-DIRDEPS = \
- include \
- include/xlocale \
- lib/${CSU_DIR} \
- lib/libc \
- lib/libcompiler_rt \
-
-
-.include <dirdeps.mk>
-
-.if ${DEP_RELDIR} == ${_DEP_RELDIR}
-# local dependencies - needed for -jN in clean tree
-.endif
diff --git a/lib/libfigpar/figpar.h b/lib/libfigpar/figpar.h
deleted file mode 100644
--- a/lib/libfigpar/figpar.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*-
- * Copyright (c) 2002-2015 Devin Teske <dteske@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _FIGPAR_H_
-#define _FIGPAR_H_
-
-#include <sys/types.h>
-
-/*
- * Union for storing various types of data in a single common container.
- */
-union figpar_cfgvalue {
- void *data; /* Pointer to NUL-terminated string */
- char *str; /* Pointer to NUL-terminated string */
- char **strarray; /* Pointer to an array of strings */
- int32_t num; /* Signed 32-bit integer value */
- uint32_t u_num; /* Unsigned 32-bit integer value */
- uint32_t boolean:1; /* Boolean integer value (0 or 1) */
-};
-
-/*
- * Option types (based on above cfgvalue union)
- */
-enum figpar_cfgtype {
- FIGPAR_TYPE_NONE = 0x0000, /* directives with no value */
- FIGPAR_TYPE_BOOL = 0x0001, /* boolean */
- FIGPAR_TYPE_INT = 0x0002, /* signed 32 bit integer */
- FIGPAR_TYPE_UINT = 0x0004, /* unsigned 32 bit integer */
- FIGPAR_TYPE_STR = 0x0008, /* string pointer */
- FIGPAR_TYPE_STRARRAY = 0x0010, /* string array pointer */
- FIGPAR_TYPE_DATA1 = 0x0020, /* void data type-1 (open) */
- FIGPAR_TYPE_DATA2 = 0x0040, /* void data type-2 (open) */
- FIGPAR_TYPE_DATA3 = 0x0080, /* void data type-3 (open) */
- FIGPAR_TYPE_RESERVED1 = 0x0100, /* reserved data type-1 */
- FIGPAR_TYPE_RESERVED2 = 0x0200, /* reserved data type-2 */
- FIGPAR_TYPE_RESERVED3 = 0x0400, /* reserved data type-3 */
-};
-
-/*
- * Options to parse_config() for processing_options bitmask
- */
-#define FIGPAR_BREAK_ON_EQUALS 0x0001 /* stop reading directive at `=' */
-#define FIGPAR_BREAK_ON_SEMICOLON 0x0002 /* `;' starts a new line */
-#define FIGPAR_CASE_SENSITIVE 0x0004 /* directives are case sensitive */
-#define FIGPAR_REQUIRE_EQUALS 0x0008 /* assignment directives only */
-#define FIGPAR_STRICT_EQUALS 0x0010 /* `=' must be part of directive */
-
-/*
- * Anatomy of a config file option
- */
-struct figpar_config {
- enum figpar_cfgtype type; /* Option value type */
- const char *directive; /* config file keyword */
- union figpar_cfgvalue value; /* NB: set by action */
-
- /*
- * Function pointer; action to be taken when the directive is found
- */
- int (*action)(struct figpar_config *option, uint32_t line,
- char *directive, char *value);
-};
-extern struct figpar_config figpar_dummy_config;
-
-__BEGIN_DECLS
-int parse_config(struct figpar_config _options[],
- const char *_path,
- int (*_unknown)(struct figpar_config *_option,
- uint32_t _line, char *_directive, char *_value),
- uint16_t _processing_options);
-struct figpar_config *get_config_option(struct figpar_config _options[],
- const char *_directive);
-__END_DECLS
-
-#endif /* _FIGPAR_H_ */
diff --git a/lib/libfigpar/figpar.3 b/lib/libfigpar/figpar.3
deleted file mode 100644
--- a/lib/libfigpar/figpar.3
+++ /dev/null
@@ -1,263 +0,0 @@
-.\" Copyright (c) 2013-2018 Devin Teske <dteske@FreeBSD.org>
-.\" All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.Dd March 13, 2018
-.Dt FIGPAR 3
-.Os
-.Sh NAME
-.Nm figpar ,
-.Nm parse_config ,
-.Nm get_config_option
-.Nd configuration file parsing library
-.Sh LIBRARY
-.Lb libfigpar
-.Sh SYNOPSIS
-.In figpar.h
-.Ft int
-.Fo parse_config
-.Fa "struct figpar_config options[]"
-.Fa "const char *path"
-.Fa "int \*[lp]*unknown\*[rp]\*[lp]struct figpar_config *option"
-.Fa "uint32_t line"
-.Fa "char *directive"
-.Fa "char *value\*[rp]"
-.Fa "uint8_t processing_options"
-.Fc
-.Ft "struct figpar_config *"
-.Fo get_config_option
-.Fa "struct figpar_config options[]"
-.Fa "const char *directive"
-.Fc
-.In string_m.h
-.Ft int
-.Fo replaceall
-.Fa "char *source"
-.Fa "const char *find"
-.Fa "const char *replace"
-.Fc
-.Ft unsigned int
-.Fo strcount
-.Fa "const char *source"
-.Fa "const char *find"
-.Fc
-.Ft void
-.Fo strexpand
-.Fa "char *source"
-.Fc
-.Ft void
-.Fo strexpandnl
-.Fa "char *source"
-.Fc
-.Ft void
-.Fo strtolower
-.Fa "char *source"
-.Fc
-.Sh DESCRIPTION
-The
-.Nm
-library provides a light-weight,
-portable framework for parsing configuration
-files.
-The library uses
-.Xr open 2 ,
-.Xr read 2 ,
-and
-.Xr lseek 2
-within the file pointed to by
-.Fa path
-to find directives and values which are then made available to the application.
-.Pp
-Due to the fact that configuration files may have basic syntax differences,
-the library does not attempt to impose any structure on the data but instead
-provides raw data to a set of callback functions.
-These callback functions can in-turn initiate abort through their return value,
-allowing custom syntax validation during parsing.
-.Pp
-Configuration directives,
-types,
-and callback functions are provided through data structures defined in
-.In figpar.h :
-.Bd -literal -offset indent
-struct figpar_config {
- enum figpar_cfgtype type; /* value type */
- const char *directive; /* keyword */
- union figpar_cfgvalue value; /* value */
-
- /* Pointer to function used when directive is found */
- int (*action)(struct figpar_config *option, uint32_t line,
- char *directive, char *value);
-};
-
-enum figpar_cfgtype {
- FIGPAR_TYPE_NONE = 0x0000, /* directives with no value */
- FIGPAR_TYPE_BOOL = 0x0001, /* boolean */
- FIGPAR_TYPE_INT = 0x0002, /* signed 32 bit integer */
- FIGPAR_TYPE_UINT = 0x0004, /* unsigned 32 bit integer */
- FIGPAR_TYPE_STR = 0x0008, /* string pointer */
- FIGPAR_TYPE_STRARRAY = 0x0010, /* string array pointer */
- FIGPAR_TYPE_DATA1 = 0x0020, /* void data type-1 (open) */
- FIGPAR_TYPE_DATA2 = 0x0040, /* void data type-2 (open) */
- FIGPAR_TYPE_DATA3 = 0x0080, /* void data type-3 (open) */
- FIGPAR_TYPE_RESERVED1 = 0x0100, /* reserved data type-1 */
- FIGPAR_TYPE_RESERVED2 = 0x0200, /* reserved data type-2 */
- FIGPAR_TYPE_RESERVED3 = 0x0400, /* reserved data type-3 */
-};
-
-union figpar_cfgvalue {
- void *data; /* Pointer to NUL-terminated string */
- char *str; /* Pointer to NUL-terminated string */
- char **strarray; /* Pointer to an array of strings */
- int32_t num; /* Signed 32-bit integer value */
- uint32_t u_num; /* Unsigned 32-bit integer value */
- uint32_t boolean:1; /* Boolean integer value (0 or 1) */
-};
-.Ed
-.Pp
-The
-.Fa processing_options
-argument to
-.Fn parse_config
-is a mask of bit fields which indicate various
-processing options.
-The possible flags are:
-.Bl -tag -width FIGPAR_BREAK_ON_SEMICOLON
-.It Dv FIGPAR_BREAK_ON_EQUALS
-An equals sign
-.Pq Ql Li =
-is normally considered part of the directive.
-This flag enables terminating the directive at the equals sign.
-Also makes equals sign optional and transient.
-.It Dv FIGPAR_BREAK_ON_SEMICOLON
-A semicolon
-.Pq Ql Li \;
-is normally considered part of the value.
-This flag enables terminating the value at the semicolon.
-Also allows multiple statements on a single line separated by semicolon.
-.It Dv FIGPAR_CASE_SENSITIVE
-Normally directives are matched case insensitively using
-.Xr fnmatch 3 .
-This flag enables directive matching to be case sensitive.
-.It Dv FIGPAR_REQUIRE_EQUALS
-If a directive is not followed by an equals,
-processing is aborted.
-.It Dv FIGPAR_STRICT_EQUALS
-Equals must be part of the directive to be considered a delimiter between
-directive and value.
-.El
-.Pp
-The
-.Fa options
-struct array pointer can be NULL and every directive will run the
-.Fn unknown
-function argument.
-.Pp
-The directive for each figpar_config item in the
-.Fn parse_config
-options argument is matched against each parsed directive using
-.Xr fnmatch 3
-until a match is found.
-If a match is found,
-the
-.Fn action
-function for that figpar_config directive is run with the line number,
-directive,
-and value.
-Otherwise if no match,
-the
-.Fn unknown
-function is run
-.Pq with the same arguments .
-.Pp
-If either
-.Fa action
-or
-.Fa unknown
-return non-zero,
-.Fn parse_config
-aborts reading the file and returns the error value to its caller.
-.Pp
-.Fn get_config_option
-traverses the options-array and returns the option that matches via
-.Xr strcmp 3 ,
-or if no match a pointer to a static dummy struct is returned
-.Pq whose values are all zero or NULL .
-.Pp
-The use of
-.Fa "struct figpar_config"
-is entirely optional as-is the use of
-.Fa "enum figpar_cfgtype"
-or
-.Fa "union figpar_cfgvalue" .
-For example,
-a NULL pointer can be passed to
-.Fn parse_config
-for the first argument while providing a simple
-.Fa unknown
-function based on
-.Xr queue 3
-that populates a singly-linked list of a struct containing the
-.Fa directive
-and
-.Fa value .
-.Pp
-In addition,
-miscellaneous string manipulation routines are provided by
-.In string_m.h :
-.Bl -tag -width strexpandnl()
-.It Fn replaceall
-Replace all occurrences of
-.Fa find
-in
-.Fa source
-with
-.Fa replace .
-.It Fn strcount
-Count the number of occurrences of one string that appear in the
-.Fa source
-string.
-Return value is the total count.
-An example use would be to show how large a block of memory needs to be for a
-.Fn replaceall
-series.
-.It Fn strexpand
-Expand escape sequences in a buffer pointed to by
-.Fa source .
-.It Fn strexpandnl
-Expand only the escaped newlines in a buffer pointed to by
-.Fa source .
-.It Fn strtolower
-Convert a string to lower case.
-.El
-.Sh SEE ALSO
-.Xr queue 3
-.Sh HISTORY
-The
-.Nm
-library first appeared in
-.Fx 10.2 .
-.Sh AUTHORS
-.An Devin Teske Aq dteske@FreeBSD.org
-.Sh BUGS
-This is the first implementation of the library,
-and the interface may be subject to refinement.
diff --git a/lib/libfigpar/figpar.c b/lib/libfigpar/figpar.c
deleted file mode 100644
--- a/lib/libfigpar/figpar.c
+++ /dev/null
@@ -1,464 +0,0 @@
-/*-
- * Copyright (c) 2002-2015 Devin Teske <dteske@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/param.h>
-
-#include <ctype.h>
-#include <fcntl.h>
-#include <fnmatch.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "figpar.h"
-#include "string_m.h"
-
-struct figpar_config figpar_dummy_config = {0, NULL, {0}, NULL};
-
-/*
- * Search for config option (struct figpar_config) in the array of config
- * options, returning the struct whose directive matches the given parameter.
- * If no match is found, a pointer to the static dummy array (above) is
- * returned.
- *
- * This is to eliminate dependency on the index position of an item in the
- * array, since the index position is more apt to be changed as code grows.
- */
-struct figpar_config *
-get_config_option(struct figpar_config options[], const char *directive)
-{
- uint32_t n;
-
- /* Check arguments */
- if (options == NULL || directive == NULL)
- return (&figpar_dummy_config);
-
- /* Loop through the array, return the index of the first match */
- for (n = 0; options[n].directive != NULL; n++)
- if (strcmp(options[n].directive, directive) == 0)
- return (&(options[n]));
-
- /* Re-initialize the dummy variable in case it was written to */
- figpar_dummy_config.directive = NULL;
- figpar_dummy_config.type = 0;
- figpar_dummy_config.action = NULL;
- figpar_dummy_config.value.u_num = 0;
-
- return (&figpar_dummy_config);
-}
-
-/*
- * Parse the configuration file at `path' and execute the `action' call-back
- * functions for any directives defined by the array of config options (first
- * argument).
- *
- * For unknown directives that are encountered, you can optionally pass a
- * call-back function for the third argument to be called for unknowns.
- *
- * Returns zero on success; otherwise returns -1 and errno should be consulted.
-*/
-int
-parse_config(struct figpar_config options[], const char *path,
- int (*unknown)(struct figpar_config *option, uint32_t line,
- char *directive, char *value), uint16_t processing_options)
-{
- uint8_t bequals;
- uint8_t bsemicolon;
- uint8_t case_sensitive;
- uint8_t comment = 0;
- uint8_t end;
- uint8_t found;
- uint8_t have_equals = 0;
- uint8_t quote;
- uint8_t require_equals;
- uint8_t strict_equals;
- char p[2];
- char *directive;
- char *t;
- char *value;
- int error;
- int fd;
- ssize_t r = 1;
- uint32_t dsize;
- uint32_t line = 1;
- uint32_t n;
- uint32_t vsize;
- uint32_t x;
- off_t charpos;
- off_t curpos;
- char rpath[PATH_MAX];
-
- /* Sanity check: if no options and no unknown function, return */
- if (options == NULL && unknown == NULL)
- return (-1);
-
- /* Processing options */
- bequals = (processing_options & FIGPAR_BREAK_ON_EQUALS) == 0 ? 0 : 1;
- bsemicolon =
- (processing_options & FIGPAR_BREAK_ON_SEMICOLON) == 0 ? 0 : 1;
- case_sensitive =
- (processing_options & FIGPAR_CASE_SENSITIVE) == 0 ? 0 : 1;
- require_equals =
- (processing_options & FIGPAR_REQUIRE_EQUALS) == 0 ? 0 : 1;
- strict_equals =
- (processing_options & FIGPAR_STRICT_EQUALS) == 0 ? 0 : 1;
-
- /* Initialize strings */
- directive = value = 0;
- vsize = dsize = 0;
-
- /* Resolve the file path */
- if (realpath(path, rpath) == 0)
- return (-1);
-
- /* Open the file */
- if ((fd = open(rpath, O_RDONLY)) < 0)
- return (-1);
-
- /* Read the file until EOF */
- while (r != 0) {
- r = read(fd, p, 1);
-
- /* skip to the beginning of a directive */
- while (r != 0 && (isspace(*p) || *p == '#' || comment ||
- (bsemicolon && *p == ';'))) {
- if (*p == '#')
- comment = 1;
- else if (*p == '\n') {
- comment = 0;
- line++;
- }
- r = read(fd, p, 1);
- }
- /* Test for EOF; if EOF then no directive was found */
- if (r == 0) {
- close(fd);
- return (0);
- }
-
- /* Get the current offset */
- if ((curpos = lseek(fd, 0, SEEK_CUR)) == -1) {
- close(fd);
- return (-1);
- }
- curpos--;
-
- /* Find the length of the directive */
- for (n = 0; r != 0; n++) {
- if (isspace(*p))
- break;
- if (bequals && *p == '=') {
- have_equals = 1;
- break;
- }
- if (bsemicolon && *p == ';')
- break;
- r = read(fd, p, 1);
- }
-
- /* Test for EOF, if EOF then no directive was found */
- if (n == 0 && r == 0) {
- close(fd);
- return (0);
- }
-
- /* Go back to the beginning of the directive */
- if (lseek(fd, curpos, SEEK_SET) == -1) {
- close(fd);
- return (-1);
- }
-
- /* Allocate and read the directive into memory */
- if (n > dsize) {
- if ((directive = realloc(directive, n + 1)) == NULL) {
- close(fd);
- return (-1);
- }
- dsize = n;
- }
- r = read(fd, directive, n);
-
- /* Advance beyond the equals sign if appropriate/desired */
- if (bequals && *p == '=') {
- if (lseek(fd, 1, SEEK_CUR) != -1)
- r = read(fd, p, 1);
- if (strict_equals && isspace(*p))
- *p = '\n';
- }
-
- /* Terminate the string */
- directive[n] = '\0';
-
- /* Convert directive to lower case before comparison */
- if (!case_sensitive)
- strtolower(directive);
-
- /* Move to what may be the start of the value */
- if (!(bsemicolon && *p == ';') &&
- !(strict_equals && *p == '=')) {
- while (r != 0 && isspace(*p) && *p != '\n')
- r = read(fd, p, 1);
- }
-
- /* An equals sign may have stopped us, should we eat it? */
- if (r != 0 && bequals && *p == '=' && !strict_equals) {
- have_equals = 1;
- r = read(fd, p, 1);
- while (r != 0 && isspace(*p) && *p != '\n')
- r = read(fd, p, 1);
- }
-
- /* If no value, allocate a dummy value and jump to action */
- if (r == 0 || *p == '\n' || *p == '#' ||
- (bsemicolon && *p == ';')) {
- /* Initialize the value if not already done */
- if (value == NULL && (value = malloc(1)) == NULL) {
- close(fd);
- return (-1);
- }
- value[0] = '\0';
- goto call_function;
- }
-
- /* Get the current offset */
- if ((curpos = lseek(fd, 0, SEEK_CUR)) == -1) {
- close(fd);
- return (-1);
- }
- curpos--;
-
- /* Find the end of the value */
- quote = 0;
- end = 0;
- while (r != 0 && end == 0) {
- /* Advance to the next character if we know we can */
- if (*p != '\"' && *p != '#' && *p != '\n' &&
- (!bsemicolon || *p != ';')) {
- r = read(fd, p, 1);
- continue;
- }
-
- /*
- * If we get this far, we've hit an end-key
- */
-
- /* Get the current offset */
- if ((charpos = lseek(fd, 0, SEEK_CUR)) == -1) {
- close(fd);
- return (-1);
- }
- charpos--;
-
- /*
- * Go back so we can read the character before the key
- * to check if the character is escaped (which means we
- * should continue).
- */
- if (lseek(fd, -2, SEEK_CUR) == -1) {
- close(fd);
- return (-1);
- }
- r = read(fd, p, 1);
-
- /*
- * Count how many backslashes there are (an odd number
- * means the key is escaped, even means otherwise).
- */
- for (n = 1; *p == '\\'; n++) {
- /* Move back another offset to read */
- if (lseek(fd, -2, SEEK_CUR) == -1) {
- close(fd);
- return (-1);
- }
- r = read(fd, p, 1);
- }
-
- /* Move offset back to the key and read it */
- if (lseek(fd, charpos, SEEK_SET) == -1) {
- close(fd);
- return (-1);
- }
- r = read(fd, p, 1);
-
- /*
- * If an even number of backslashes was counted meaning
- * key is not escaped, we should evaluate what to do.
- */
- if ((n & 1) == 1) {
- switch (*p) {
- case '\"':
- /*
- * Flag current sequence of characters
- * to follow as being quoted (hashes
- * are not considered comments).
- */
- quote = !quote;
- break;
- case '#':
- /*
- * If we aren't in a quoted series, we
- * just hit an inline comment and have
- * found the end of the value.
- */
- if (!quote)
- end = 1;
- break;
- case '\n':
- /*
- * Newline characters must always be
- * escaped, whether inside a quoted
- * series or not, otherwise they
- * terminate the value.
- */
- end = 1;
- case ';':
- if (!quote && bsemicolon)
- end = 1;
- break;
- }
- } else if (*p == '\n')
- /* Escaped newline character. increment */
- line++;
-
- /* Advance to the next character */
- r = read(fd, p, 1);
- }
-
- /* Get the current offset */
- if ((charpos = lseek(fd, 0, SEEK_CUR)) == -1) {
- close(fd);
- return (-1);
- }
-
- /* Get the length of the value */
- n = (uint32_t)(charpos - curpos);
- if (r != 0) /* more to read, but don't read ending key */
- n--;
-
- /* Move offset back to the beginning of the value */
- if (lseek(fd, curpos, SEEK_SET) == -1) {
- close(fd);
- return (-1);
- }
-
- /* Allocate and read the value into memory */
- if (n > vsize) {
- if ((value = realloc(value, n + 1)) == NULL) {
- close(fd);
- return (-1);
- }
- vsize = n;
- }
- r = read(fd, value, n);
-
- /* Terminate the string */
- value[n] = '\0';
-
- /* Cut trailing whitespace off by termination */
- t = value + n;
- while (isspace(*--t))
- *t = '\0';
-
- /* Escape the escaped quotes (replaceall is in string_m.c) */
- x = strcount(value, "\\\""); /* in string_m.c */
- if (x != 0 && (n + x) > vsize) {
- if ((value = realloc(value, n + x + 1)) == NULL) {
- close(fd);
- return (-1);
- }
- vsize = n + x;
- }
- if (replaceall(value, "\\\"", "\\\\\"") < 0) {
- /* Replace operation failed for some unknown reason */
- close(fd);
- return (-1);
- }
-
- /* Remove all new line characters */
- if (replaceall(value, "\\\n", "") < 0) {
- /* Replace operation failed for some unknown reason */
- close(fd);
- return (-1);
- }
-
- /* Resolve escape sequences */
- strexpand(value); /* in string_m.c */
-
-call_function:
- /* Abort if we're seeking only assignments */
- if (require_equals && !have_equals)
- return (-1);
-
- found = have_equals = 0; /* reset */
-
- /* If there are no options defined, call unknown and loop */
- if (options == NULL && unknown != NULL) {
- error = unknown(NULL, line, directive, value);
- if (error != 0) {
- close(fd);
- return (error);
- }
- continue;
- }
-
- /* Loop through the array looking for a match for the value */
- for (n = 0; options[n].directive != NULL; n++) {
- error = fnmatch(options[n].directive, directive,
- FNM_NOESCAPE);
- if (error == 0) {
- found = 1;
- /* Call function for array index item */
- if (options[n].action != NULL) {
- error = options[n].action(
- &options[n],
- line, directive, value);
- if (error != 0) {
- close(fd);
- return (error);
- }
- }
- } else if (error != FNM_NOMATCH) {
- /* An error has occurred */
- close(fd);
- return (-1);
- }
- }
- if (!found && unknown != NULL) {
- /*
- * No match was found for the value we read from the
- * file; call function designated for unknown values.
- */
- error = unknown(NULL, line, directive, value);
- if (error != 0) {
- close(fd);
- return (error);
- }
- }
- }
-
- close(fd);
- return (0);
-}
diff --git a/lib/libfigpar/string_m.h b/lib/libfigpar/string_m.h
deleted file mode 100644
--- a/lib/libfigpar/string_m.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*-
- * Copyright (c) 2001-2014 Devin Teske <dteske@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _STRING_M_H_
-#define _STRING_M_H_
-
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-void strexpand(char *_source);
-void strexpandnl(char *_source);
-void strtolower(char *_source);
-int replaceall(char *_source, const char *_find,
- const char *_replace);
-unsigned int strcount(const char *_source, const char *_find);
-__END_DECLS
-
-#endif /* !_STRING_M_H_ */
diff --git a/lib/libfigpar/string_m.c b/lib/libfigpar/string_m.c
deleted file mode 100644
--- a/lib/libfigpar/string_m.c
+++ /dev/null
@@ -1,304 +0,0 @@
-/*-
- * Copyright (c) 2001-2014 Devin Teske <dteske@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <ctype.h>
-#include <errno.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "string_m.h"
-
-/*
- * Counts the number of occurrences of one string that appear in the source
- * string. Return value is the total count.
- *
- * An example use would be if you need to know how large a block of memory
- * needs to be for a replaceall() series.
- */
-unsigned int
-strcount(const char *source, const char *find)
-{
- const char *p = source;
- size_t flen;
- unsigned int n = 0;
-
- /* Both parameters are required */
- if (source == NULL || find == NULL)
- return (0);
-
- /* Cache the length of find element */
- flen = strlen(find);
- if (strlen(source) == 0 || flen == 0)
- return (0);
-
- /* Loop until the end of the string */
- while (*p != '\0') {
- if (strncmp(p, find, flen) == 0) { /* found an instance */
- p += flen;
- n++;
- } else
- p++;
- }
-
- return (n);
-}
-
-/*
- * Replaces all occurrences of `find' in `source' with `replace'.
- *
- * You should not pass a string constant as the first parameter, it needs to be
- * a pointer to an allocated block of memory. The block of memory that source
- * points to should be large enough to hold the result. If the length of the
- * replacement string is greater than the length of the find string, the result
- * will be larger than the original source string. To allocate enough space for
- * the result, use the function strcount() declared above to determine the
- * number of occurrences and how much larger the block size needs to be.
- *
- * If source is not large enough, the application will crash. The return value
- * is the length (in bytes) of the result.
- *
- * When an error occurs, -1 is returned and the global variable errno is set
- * accordingly. Returns zero on success.
- */
-int
-replaceall(char *source, const char *find, const char *replace)
-{
- char *p;
- char *t;
- char *temp;
- size_t flen;
- size_t rlen;
- size_t slen;
- uint32_t n = 0;
-
- errno = 0; /* reset global error number */
-
- /* Check that we have non-null parameters */
- if (source == NULL)
- return (0);
- if (find == NULL)
- return (strlen(source));
-
- /* Cache the length of the strings */
- slen = strlen(source);
- flen = strlen(find);
- rlen = replace ? strlen(replace) : 0;
-
- /* Cases where no replacements need to be made */
- if (slen == 0 || flen == 0 || slen < flen)
- return (slen);
-
- /* If replace is longer than find, we'll need to create a temp copy */
- if (rlen > flen) {
- temp = malloc(slen + 1);
- if (temp == NULL) /* could not allocate memory */
- return (-1);
- memcpy(temp, source, slen + 1);
- } else
- temp = source;
-
- /* Reconstruct the string with the replacements */
- p = source; t = temp; /* position elements */
-
- while (*t != '\0') {
- if (strncmp(t, find, flen) == 0) {
- /* found an occurrence */
- for (n = 0; replace && replace[n]; n++)
- *p++ = replace[n];
- t += flen;
- } else
- *p++ = *t++; /* copy character and increment */
- }
-
- /* Terminate the string */
- *p = '\0';
-
- /* Free the temporary allocated memory */
- if (temp != source)
- free(temp);
-
- /* Return the length of the completed string */
- return (strlen(source));
-}
-
-/*
- * Expands escape sequences in a buffer pointed to by `source'. This function
- * steps through each character, and converts escape sequences such as "\n",
- * "\r", "\t" and others into their respective meanings.
- *
- * You should not pass a string constant or literal to this function or the
- * program will likely segmentation fault when it tries to modify the data.
- *
- * The string length will either shorten or stay the same depending on whether
- * any escape sequences were converted but the amount of memory allocated does
- * not change.
- *
- * Interpreted sequences are:
- *
- * \0NNN character with octal value NNN (0 to 3 digits)
- * \N character with octal value N (0 thru 7)
- * \a alert (BEL)
- * \b backslash
- * \f form feed
- * \n new line
- * \r carriage return
- * \t horizontal tab
- * \v vertical tab
- * \xNN byte with hexadecimal value NN (1 to 2 digits)
- *
- * All other sequences are unescaped (ie. '\"' and '\#').
- */
-void strexpand(char *source)
-{
- uint8_t c;
- char *chr;
- char *pos;
- char d[4];
-
- /* Initialize position elements */
- pos = chr = source;
-
- /* Loop until we hit the end of the string */
- while (*pos != '\0') {
- if (*chr != '\\') {
- *pos = *chr; /* copy character to current offset */
- pos++;
- chr++;
- continue;
- }
-
- /* Replace the backslash with the correct character */
- switch (*++chr) {
- case 'a': *pos = '\a'; break; /* bell/alert (BEL) */
- case 'b': *pos = '\b'; break; /* backspace */
- case 'f': *pos = '\f'; break; /* form feed */
- case 'n': *pos = '\n'; break; /* new line */
- case 'r': *pos = '\r'; break; /* carriage return */
- case 't': *pos = '\t'; break; /* horizontal tab */
- case 'v': *pos = '\v'; break; /* vertical tab */
- case 'x': /* hex value (1 to 2 digits)(\xNN) */
- d[2] = '\0'; /* pre-terminate the string */
-
- /* verify next two characters are hex */
- d[0] = isxdigit(*(chr+1)) ? *++chr : '\0';
- if (d[0] != '\0')
- d[1] = isxdigit(*(chr+1)) ? *++chr : '\0';
-
- /* convert the characters to decimal */
- c = (uint8_t)strtoul(d, 0, 16);
-
- /* assign the converted value */
- *pos = (c != 0 || d[0] == '0') ? c : *++chr;
- break;
- case '0': /* octal value (0 to 3 digits)(\0NNN) */
- d[3] = '\0'; /* pre-terminate the string */
-
- /* verify next three characters are octal */
- d[0] = (isdigit(*(chr+1)) && *(chr+1) < '8') ?
- *++chr : '\0';
- if (d[0] != '\0')
- d[1] = (isdigit(*(chr+1)) && *(chr+1) < '8') ?
- *++chr : '\0';
- if (d[1] != '\0')
- d[2] = (isdigit(*(chr+1)) && *(chr+1) < '8') ?
- *++chr : '\0';
-
- /* convert the characters to decimal */
- c = (uint8_t)strtoul(d, 0, 8);
-
- /* assign the converted value */
- *pos = c;
- break;
- default: /* single octal (\0..7) or unknown sequence */
- if (isdigit(*chr) && *chr < '8') {
- d[0] = *chr;
- d[1] = '\0';
- *pos = (uint8_t)strtoul(d, 0, 8);
- } else
- *pos = *chr;
- }
-
- /* Increment to next offset, possible next escape sequence */
- pos++;
- chr++;
- }
-}
-
-/*
- * Expand only the escaped newlines in a buffer pointed to by `source'. This
- * function steps through each character, and converts the "\n" sequence into
- * a literal newline and the "\\n" sequence into "\n".
- *
- * You should not pass a string constant or literal to this function or the
- * program will likely segmentation fault when it tries to modify the data.
- *
- * The string length will either shorten or stay the same depending on whether
- * any escaped newlines were converted but the amount of memory allocated does
- * not change.
- */
-void strexpandnl(char *source)
-{
- uint8_t backslash = 0;
- char *cp1;
- char *cp2;
-
- /* Replace '\n' with literal in dprompt */
- cp1 = cp2 = source;
- while (*cp2 != '\0') {
- *cp1 = *cp2;
- if (*cp2 == '\\')
- backslash++;
- else if (*cp2 != 'n')
- backslash = 0;
- else if (backslash > 0) {
- *(--cp1) = (backslash & 1) == 1 ? '\n' : 'n';
- backslash = 0;
- }
- cp1++;
- cp2++;
- }
- *cp1 = *cp2;
-}
-
-/*
- * Convert a string to lower case. You should not pass a string constant to
- * this function. Only pass pointers to allocated memory with null terminated
- * string data.
- */
-void
-strtolower(char *source)
-{
- char *p = source;
-
- if (source == NULL)
- return;
-
- while (*p != '\0') {
- *p = tolower(*p);
- p++; /* would have just used `*p++' but gcc 3.x warns */
- }
-}
diff --git a/lib/libsysdecode/Makefile.depend b/lib/libsysdecode/Makefile.depend
--- a/lib/libsysdecode/Makefile.depend
+++ b/lib/libsysdecode/Makefile.depend
@@ -9,7 +9,6 @@
cddl/lib/libzutil \
cddl/usr.bin/zinject \
cddl/usr.sbin/zdb \
- gnu/lib/libdialog \
include \
include/arpa \
include/gssapi \
@@ -66,7 +65,6 @@
lib/libdevdctl \
lib/libdevinfo \
lib/libdevstat \
- lib/libdpv \
lib/libdwarf \
lib/libedit \
lib/libedit/readline \
@@ -76,7 +74,6 @@
lib/libexecinfo \
lib/libexpat \
lib/libfetch \
- lib/libfigpar \
lib/libgeom \
lib/libgpio \
lib/libjail \
diff --git a/share/man/man3/intro.3 b/share/man/man3/intro.3
--- a/share/man/man3/intro.3
+++ b/share/man/man3/intro.3
@@ -24,7 +24,7 @@
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
-.Dd November 10, 2025
+.Dd February 17, 2026
.Dt INTRO 3
.Os
.Sh NAME
@@ -164,11 +164,6 @@
The file transfer library.
See
.Xr fetch 3 .
-.It Em libfigpar
-.Pq Fl l Ns Ar figpar
-The configuration file parsing library.
-See
-.Xr figpar 3 .
.It Em libgpio
.Pq Fl l Ns Ar gpio
The general-purpose input output library (GPIO).
diff --git a/share/man/man5/src.conf.5 b/share/man/man5/src.conf.5
--- a/share/man/man5/src.conf.5
+++ b/share/man/man5/src.conf.5
@@ -553,13 +553,6 @@
non-functioning binaries.
.It Va WITH_DETECT_TZ_CHANGES
Make the time handling code detect changes to the timezone files.
-.It Va WITH_DIALOG
-Do build
-.Xr dialog 1 ,
-.Xr dialog 3 ,
-.Xr dpv 1 ,
-and
-.Xr dpv 3 .
.It Va WITHOUT_DICT
Do not build the Webster dictionary files.
.It Va WITH_DIRDEPS_BUILD
diff --git a/share/mk/bsd.libnames.mk b/share/mk/bsd.libnames.mk
--- a/share/mk/bsd.libnames.mk
+++ b/share/mk/bsd.libnames.mk
@@ -53,7 +53,6 @@
LIBDEVDCTL?= ${LIBDESTDIR}${LIBDIR_BASE}/libdevdctl.a
LIBDEVINFO?= ${LIBDESTDIR}${LIBDIR_BASE}/libdevinfo.a
LIBDEVSTAT?= ${LIBDESTDIR}${LIBDIR_BASE}/libdevstat.a
-LIBDIALOG?= ${LIBDESTDIR}${LIBDIR_BASE}/libdialog.a
LIBDL?= ${LIBDESTDIR}${LIBDIR_BASE}/libdl.a
LIBDNS?= ${LIBDESTDIR}${LIBDIR_BASE}/libdns.a
LIBDPV?= ${LIBDESTDIR}${LIBDIR_BASE}/libdpv.a
@@ -64,7 +63,6 @@
LIBELF?= ${LIBDESTDIR}${LIBDIR_BASE}/libelf.a
LIBEXECINFO?= ${LIBDESTDIR}${LIBDIR_BASE}/libexecinfo.a
LIBFETCH?= ${LIBDESTDIR}${LIBDIR_BASE}/libfetch.a
-LIBFIGPAR?= ${LIBDESTDIR}${LIBDIR_BASE}/libfigpar.a
LIBFL?= "don't use LIBFL, use LIBL"
LIBFORMW?= ${LIBDESTDIR}${LIBDIR_BASE}/libformw.a
LIBG2C?= ${LIBDESTDIR}${LIBDIR_BASE}/libg2c.a
diff --git a/share/mk/src.libnames.mk b/share/mk/src.libnames.mk
--- a/share/mk/src.libnames.mk
+++ b/share/mk/src.libnames.mk
@@ -147,7 +147,6 @@
devstat \
dialog \
dl \
- dpv \
dtrace \
dwarf \
edit \
@@ -155,7 +154,6 @@
elf \
execinfo \
fetch \
- figpar \
formw \
geom \
gpio \
@@ -393,8 +391,6 @@
.endif
_DP_execinfo= elf
_DP_dwarf= elf z
-_DP_dpv= dialog figpar util tinfow ncursesw
-_DP_dialog= tinfow ncursesw m
_DP_cuse= pthread
_DP_atf_cxx= atf_c
_DP_gtest= pthread regex
@@ -812,7 +808,6 @@
LIBOPENSMDIR= ${_LIB_OBJTOP}/lib/ofed/libopensm
LIBOSMVENDORDIR=${_LIB_OBJTOP}/lib/ofed/libvendor
-LIBDIALOGDIR= ${_LIB_OBJTOP}/gnu/lib/libdialog
LIBSSPDIR= ${_LIB_OBJTOP}/lib/libssp
LIBSSP_NONSHAREDDIR= ${_LIB_OBJTOP}/lib/libssp_nonshared
.if ${MK_MITKRB5} != "no"
diff --git a/share/mk/src.opts.mk b/share/mk/src.opts.mk
--- a/share/mk/src.opts.mk
+++ b/share/mk/src.opts.mk
@@ -202,7 +202,6 @@
CLANG_EXTRAS \
CLANG_FORMAT \
CLEAN \
- DIALOG \
DETECT_TZ_CHANGES \
DISK_IMAGE_TOOLS_BOOTSTRAP \
DTRACE_ASAN \
diff --git a/targets/pseudo/userland/lib/Makefile.depend b/targets/pseudo/userland/lib/Makefile.depend
--- a/targets/pseudo/userland/lib/Makefile.depend
+++ b/targets/pseudo/userland/lib/Makefile.depend
@@ -71,7 +71,6 @@
lib/libexecinfo \
lib/libexpat \
lib/libfetch \
- lib/libfigpar \
lib/libgeom \
lib/libgssapi \
lib/libiconv_modules/BIG5 \
@@ -229,10 +228,6 @@
.endif
-.if ${MK_DIALOG} != "no"
-DIRDEPS+= lib/libdpv
-.endif
-
.if ${MK_GPIO} != "no"
DIRDEPS+= lib/libgpio
.endif
diff --git a/tools/build/mk/OptionalObsoleteFiles.inc b/tools/build/mk/OptionalObsoleteFiles.inc
--- a/tools/build/mk/OptionalObsoleteFiles.inc
+++ b/tools/build/mk/OptionalObsoleteFiles.inc
@@ -1461,33 +1461,6 @@
OLD_FILES+=tests/lib/libc/stdtime/detect_tz_changes_test
.endif
-.if ${MK_DIALOG} == no
-OLD_FILES+=usr/bin/dialog
-OLD_FILES+=usr/bin/dpv
-OLD_FILES+=usr/lib/libdialog.a
-OLD_FILES+=usr/lib/libdialog.so
-OLD_LIBS+=usr/lib/libdialog.so.10
-OLD_FILES+=usr/lib/libdpv.a
-OLD_FILES+=usr/lib/libdpv.so
-OLD_LIBS+=usr/lib/libdpv.so.3
-OLD_FILES+=usr/lib/libfigpar.a
-OLD_FILES+=usr/lib/libfigpar.so
-OLD_LIBS+=usr/lib/libfigpar.so.0
-OLD_FILES+=usr/share/man/man1/dialog.1.gz
-OLD_FILES+=usr/share/man/man1/dpv.1.gz
-OLD_FILES+=usr/share/man/man3/dialog.3.gz
-OLD_FILES+=usr/share/man/man3/dpv.3.gz
-OLD_FILES+=usr/share/man/man3/dpv_free.3.gz
-OLD_FILES+=usr/share/man/man3/figpar.3.gz
-OLD_FILES+=usr/share/man/man3/get_config_option.3.gz
-OLD_FILES+=usr/share/man/man3/parse_config.3.gz
-OLD_FILES+=usr/share/man/man3/replaceall.3.gz
-OLD_FILES+=usr/share/man/man3/strcount.3.gz
-OLD_FILES+=usr/share/man/man3/strexpand.3.gz
-OLD_FILES+=usr/share/man/man3/strexpandnl.3.gz
-OLD_FILES+=usr/share/man/man3/strtolower.3.gz
-.endif
-
.if ${MK_DICT} == no
OLD_FILES+=usr/share/dict/README
OLD_FILES+=usr/share/dict/freebsd
diff --git a/tools/build/options/WITHOUT_DIALOG b/tools/build/options/WITHOUT_DIALOG
deleted file mode 100644
--- a/tools/build/options/WITHOUT_DIALOG
+++ /dev/null
@@ -1,6 +0,0 @@
-Do not build
-.Xr dialog 1 ,
-.Xr dialog 3 ,
-.Xr dpv 1 ,
-and
-.Xr dpv 3 .
diff --git a/tools/build/options/WITH_DIALOG b/tools/build/options/WITH_DIALOG
deleted file mode 100644
--- a/tools/build/options/WITH_DIALOG
+++ /dev/null
@@ -1,6 +0,0 @@
-Do build
-.Xr dialog 1 ,
-.Xr dialog 3 ,
-.Xr dpv 1 ,
-and
-.Xr dpv 3 .
diff --git a/usr.bin/dpv/Makefile b/usr.bin/dpv/Makefile
deleted file mode 100644
--- a/usr.bin/dpv/Makefile
+++ /dev/null
@@ -1,9 +0,0 @@
-PACKAGE= dpv
-
-PROG= dpv
-
-CFLAGS+= -I${.CURDIR}
-
-LIBADD= dpv dialog
-
-.include <bsd.prog.mk>
diff --git a/usr.bin/dpv/Makefile.depend b/usr.bin/dpv/Makefile.depend
deleted file mode 100644
--- a/usr.bin/dpv/Makefile.depend
+++ /dev/null
@@ -1,20 +0,0 @@
-# Autogenerated - do NOT edit!
-
-DIRDEPS = \
- gnu/lib/libdialog \
- include \
- include/xlocale \
- lib/${CSU_DIR} \
- lib/libc \
- lib/libcompiler_rt \
- lib/libdpv \
- lib/libfigpar \
- lib/msun \
- lib/ncurses/tinfo \
-
-
-.include <dirdeps.mk>
-
-.if ${DEP_RELDIR} == ${_DEP_RELDIR}
-# local dependencies - needed for -jN in clean tree
-.endif
diff --git a/usr.bin/dpv/dpv.1 b/usr.bin/dpv/dpv.1
deleted file mode 100644
--- a/usr.bin/dpv/dpv.1
+++ /dev/null
@@ -1,448 +0,0 @@
-.\" Copyright (c) 2013-2016 Devin Teske
-.\" All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.Dd November 2, 2021
-.Dt DPV 1
-.Os
-.Sh NAME
-.Nm dpv
-.Nd stream data from stdin or multiple paths with dialog progress view
-.Sh SYNOPSIS
-.Nm
-.Op options
-.Sm off
-.Op Ar bytes Cm \&:
-.Ar label
-.Sm on
-.Nm
-.Op options
-.Fl m
-.Sm off
-.Op Ar bytes1 Cm \& :
-. Ar label1
-.Sm on
-.Ar path1
-.Oo
-.Sm off
-.Op Ar bytes2 Cm \&:
-.Ar label2
-.Sm on
-.Ar path2
-.Ar ...
-.Oc
-.Sh DESCRIPTION
-.Nm
-provides a dialog progress view, allowing a user to see current throughput rate
-and total data transferred for one or more streams.
-.Pp
-The
-.Nm
-utility has two main modes for processing input.
-.Pp
-The default input mode, without
-.Ql Fl m ,
-.Nm
-reads bytes from standard input.
-A label for the data must be provided.
-.Pp
-The secondary input mode, with
-.Ql Fl m ,
-.Nm
-reads multiple paths
-.Pq up to 2047 or Dq ARG_MAX/2-1 ,
-sequentially.
-.Pp
-Data read in either mode is either thrown away
-.Pq default ,
-sent to a spawned instance of the program specified via
-.Ql Fl x Ar cmd ,
-or sent to a unique file specified by
-.Ql Fl o Ar file .
-.Pp
-With or without
-.Ql Fl m ,
-progress is displayed using one of
-.Xr dialog 3
-.Pq default ,
-.Xr dialog 1
-.Pq see Ql Fl D ,
-or instead
-.Xr Xdialog 1 Pq Pa ports/x11/xdialog
-.Pq see Ql Fl X .
-.Pp
-The following options are available:
-.Bl -tag -width "-b backtitle"
-.It Fl a Ar text
-Display
-.Ar text
-below the file progress indicator(s).
-.It Fl b Ar backtitle
-Display
-.Ar backtitle
-on the backdrop, at top-left, behind the dialog widget.
-When using
-.Xr Xdialog 1 Pq Pa ports/x11/xdialog ,
-this is displayed inside the window
-.Pq at the top
-followed by a separator line.
-.It Fl D
-Do not use the default interface of
-.Xr dialog 3 ,
-but instead spawn an instance of
-.Xr dialog 1 .
-The path to
-.Xr dialog 1
-is taken from the
-.Ev DIALOG
-environment variable or simply
-.Dq Li dialog
-if unset or NULL.
-.It Fl d
-Debug mode.
-Print dialog prompt data to standard out and provide additional debugging on
-standard error.
-.It Fl h
-Produce a short syntax usage with brief option descriptions and exit.
-Output is produced on standard error.
-.It Fl I Ar format
-Customize the multi-file format string used to update the status line.
-Ignored when using either
-.Ql Fl D
-or
-.Ql Fl X
-which lack the ability to display the status line
-.Pq containing bytes/rate/thread information .
-Default value
-is
-.Dq Li %'10lli bytes read @ %'9.1f bytes/sec. [%i/%i busy/wait] .
-This format is used when handling more than one file.
-.It Fl i Ar format
-Customize the single-file format string used to update the status line.
-Ignored when using either
-.Ql Fl D
-or
-.Ql Fl X
-which lack the ability to display the status line
-.Pq containing bytes/rate/thread information .
-Default value
-is
-.Dq Li %'10lli bytes read @ %'9.1f bytes/sec. .
-This format is used when handling one file.
-.It Fl k
-Keep tite.
-Prevent visually distracting initialization/exit routines for scripts running
-.Xr dialog 1
-several times.
-.It Fl L Ar size
-Label size.
-If negative, shrink to longest label width.
-.It Fl l
-Line mode.
-Read lines from input instead of bytes.
-.It Fl m
-Multi-input mode.
-Instead of reading bytes from standard input, read from a set of paths
-.Pq one for each label .
-By default, each path is processed sequentially in the order given.
-.It Fl N
-No overrun.
-If enabled, stop reading known-length inputs when input reaches stated length.
-.It Fl n Ar num
-Display at-most
-.Ar num
-progress indicators per screen.
-If zero, display as many as possible.
-If negative, only display the main progress indicator.
-Default is 0.
-Maximum value is 10.
-.It Fl o Ar file
-Output data to
-.Ar file .
-The first occurrence of
-.Ql %s
-.Pq if any
-in
-.Ql Ar file
-will be replaced with the
-.Ar label
-text.
-.It Fl P Ar size
-Mini-progressbar size.
-If negative, don't display mini-progressbars
-.Pq only the large overall progress indicator is shown .
-If zero, auto-adjust based on number of files to read.
-When zero and only one file to read, defaults to -1.
-When zero and more than one file to read, defaults to 17.
-.It Fl p Ar text
-Display
-.Ar text
-above the file progress indicator(s).
-.It Fl T
-Test mode.
-Simulate reading a number of bytes, divided evenly across the number of files,
-while stepping through each percent value of each file to process.
-Appends
-.Dq Li [TEST MODE]
-to the status line
-.Pq to override, use Ql Fl u Ar format .
-No data is actually read.
-.It Fl t Ar title
-Display
-.Ar title
-atop the dialog box.
-Note that if you use this option at the same time as
-.Ql Fl X
-and
-.Ql Fl b Ar backtitle ,
-the
-.Ar backtitle
-and
-.Ar title
-are effectively switched
-.Pq see BUGS section below .
-.It Fl U Ar num
-Update status line
-.Ar num
-times per-second.
-Default value is
-.Ql Li 2 .
-A value of
-.Ql Li 0
-disables status line updates.
-If negative, update the status line as fast as possible.
-Ignored when using either
-.Ql Fl D
-or
-.Ql Fl X
-which lack the ability to display the status line
-.Pq containing bytes/rate/thread information .
-.It Fl w
-Wide mode.
-Allows long
-.Ar text
-arguments used with
-.Ql Fl p
-and
-.Ql Fl a
-to bump the dialog width.
-Prompts wider than the maximum width will wrap
-unless using
-.Xr Xdialog 1 Pq Pa ports/x11/xdialog ;
-see BUGS section below.
-.It Fl X
-Enable X11 mode by using
-.Xr Xdialog 1 Pq Pa ports/x11/xdialog
-instead of
-.Xr dialog 1
-or
-.Xr dialog 3 .
-.It Fl x Ar cmd
-Execute
-.Ar cmd
-.Pq via Xr sh 1
-and send it data that has been read.
-Data is available to
-.Ar cmd
-on standard input.
-With
-.Ql Fl m ,
-.Ar cmd
-is executed once for each
-.Ar path
-argument.
-The first occurrence of
-.Ql %s
-.Pq if any
-in
-.Ql Ar cmd
-will be replaced with the
-.Ar label
-text.
-.El
-.Sh ENVIRONMENT
-The following environment variables are referenced by
-.Nm :
-.Bl -tag -width ".Ev USE_COLOR"
-.It Ev DIALOG
-Override command string used to launch
-.Xr dialog 1
-.Pq requires Ql Fl D
-or
-.Xr Xdialog 1 Pq Pa ports/x11/xdialog
-.Pq requires Ql Fl X ;
-default is either
-.Ql dialog
-.Pq for Ql Fl D
-or
-.Ql Xdialog
-.Pq for Ql Fl X .
-.It Ev DIALOGRC
-If set and non-NULL, path to
-.Ql .dialogrc
-file.
-.It Ev HOME
-If
-.Ql Ev $DIALOGRC
-is either not set or NULL, used as a prefix to
-.Ql .dialogrc
-.Pq i.e., Ql $HOME/.dialogrc .
-.It Ev USE_COLOR
-If set and NULL, disables the use of color when using
-.Xr dialog 1 .
-Does not apply to
-.Xr Xdialog 1 Pq Pa ports/x11/xdialog .
-.El
-.Sh DEPENDENCIES
-If using
-.Ql Fl D ,
-.Xr dialog 1
-is required.
-.Pp
-If using
-.Ql Fl X ,
-.Xr Xdialog 1 Pq Pa ports/x11/xdialog
-is required.
-.Sh FILES
-.Bl -tag -width "$HOME/.dialogrc" -compact
-.It Pa $HOME/.dialogrc
-.El
-.Sh EXAMPLES
-Simple example to show how fast
-.Xr yes 1
-produces lines
-.Pq usually about ten-million per-second; your results may vary :
-.Bd -literal -offset indent
-yes | dpv -l yes
-.Ed
-.Pp
-Display progress while timing how long it takes
-.Xr yes 1
-to produce a half-billion lines
-.Pq usually under one minute; your results may vary :
-.Bd -literal -offset indent
-time yes | dpv -Nl 500000000:yes
-.Ed
-.Pp
-An example to watch how quickly a file is transferred using
-.Xr nc 1 :
-.Bd -literal -offset indent
-dpv -x "nc -w 1 somewhere.com 3000" -m label file
-.Ed
-.Pp
-A similar example, transferring a file from another process and passing the
-expected size to
-.Nm :
-.Bd -literal -offset indent
-cat file | dpv -x "nc -w 1 somewhere.com 3000" 12345:label
-.Ed
-.Pp
-A more complicated example:
-.Bd -literal -offset indent
-tar cf - . | dpv -x "gzip -9 > out.tgz" \\
- $( du -s . | awk '{print $1 * 1024}' ):label
-.Ed
-.Pp
-Taking an image of a disk:
-.Bd -literal -offset indent
-dpv -o disk-image.img -m label /dev/ada0
-.Ed
-.Pp
-Writing an image back to a disk:
-.Bd -literal -offset indent
-dpv -o /dev/ada0 -m label disk-image.img
-.Ed
-.Pp
-Zeroing a disk:
-.Bd -literal -offset indent
-dpv -o /dev/md42 "Zeroing md42" < /dev/zero
-.Ed
-.Sh SEE ALSO
-.Xr dialog 1 ,
-.Xr sh 1 ,
-.Xr Xdialog 1 Pq Pa ports/x11/xdialog ,
-.Xr dialog 3
-.Sh HISTORY
-A
-.Nm
-utility first appeared in
-.Fx 10.2 .
-.Sh AUTHORS
-.An Devin Teske Aq dteske@FreeBSD.org
-.Sh BUGS
-.Xr Xdialog 1 Pq Pa ports/x11/xdialog ,
-when given both
-.Ql Fl -title Ar title
-.Pq see above Ql Fl t Ar title
-and
-.Ql Fl -backtitle Ar backtitle
-.Pq see above Ql Fl b Ar backtitle ,
-displays the backtitle in place of the title and vice-versa.
-.Pp
-.Xr Xdialog 1 Pq Pa ports/x11/xdialog
-does not wrap long prompt texts received after initial launch.
-This is a known issue with the
-.Ql --gauge
-widget in
-.Xr Xdialog 1 Pq Pa ports/x11/xdialog .
-.Pp
-.Xr dialog 1
-does not display the first character after a series of escaped escape-sequences
-(e.g., ``\\\\n'' produces ``\\'' instead of ``\\n'').
-This is a known issue with
-.Xr dialog 1
-and does not affect
-.Xr dialog 3
-or
-.Xr Xdialog 1 Pq Pa ports/x11/xdialog .
-.Pp
-If your application ignores
-.Ev USE_COLOR
-when set and NULL before calling
-.Xr dpv 1
-with color escape sequences anyway,
-.Xr dialog 3
-and
-.Xr dialog 1
-may not render properly.
-Workaround is to detect when
-.Ev USE_COLOR
-is set and NULL and either not use color escape sequences at that time or use
-.Xr unset 1
-.Xr [ sh 1 ]
-or
-.Xr unsetenv 1
-.Xr [ csh 1 ]
-to unset
-.Ev USE_COLOR ,
-forcing interpretation of color sequences.
-This does not effect
-.Xr Xdialog 1 Pq Pa ports/x11/xdialog ,
-which renders the color escape sequences as plain text.
-See
-.Do
-embedded "\\Z" sequences
-.Dc
-in
-.Xr dialog 1
-for additional information.
diff --git a/usr.bin/dpv/dpv.c b/usr.bin/dpv/dpv.c
deleted file mode 100644
--- a/usr.bin/dpv/dpv.c
+++ /dev/null
@@ -1,543 +0,0 @@
-/*-
- * Copyright (c) 2013-2016 Devin Teske <dteske@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#define _BSD_SOURCE /* to get dprintf() prototype in stdio.h below */
-#include <dialog.h>
-#include <dpv.h>
-#include <err.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <string_m.h>
-#include <unistd.h>
-
-#include "dpv_util.h"
-
-/* Debugging */
-static uint8_t debug = FALSE;
-
-/* Data to process */
-static struct dpv_file_node *file_list = NULL;
-static unsigned int nfiles = 0;
-
-/* Data processing */
-static uint8_t line_mode = FALSE;
-static uint8_t no_overrun = FALSE;
-static char *buf = NULL;
-static int fd = -1;
-static int output_type = DPV_OUTPUT_NONE;
-static size_t bsize;
-static char rpath[PATH_MAX];
-
-/* Extra display information */
-static uint8_t multiple = FALSE; /* `-m' */
-static char *pgm; /* set to argv[0] by main() */
-
-/* Function prototypes */
-static void sig_int(int sig);
-static void usage(void);
-int main(int argc, char *argv[]);
-static int operate_common(struct dpv_file_node *file, int out);
-static int operate_on_bytes(struct dpv_file_node *file, int out);
-static int operate_on_lines(struct dpv_file_node *file, int out);
-
-static int
-operate_common(struct dpv_file_node *file, int out)
-{
- struct stat sb;
-
- /* Open the file if necessary */
- if (fd < 0) {
- if (multiple) {
- /* Resolve the file path and attempt to open it */
- if (realpath(file->path, rpath) == 0 ||
- (fd = open(rpath, O_RDONLY)) < 0) {
- warn("%s", file->path);
- file->status = DPV_STATUS_FAILED;
- return (-1);
- }
- } else {
- /* Assume stdin, but if that's a TTY instead use the
- * highest numbered file descriptor (obtained by
- * generating new fd and then decrementing).
- *
- * NB: /dev/stdin should always be open(2)'able
- */
- fd = STDIN_FILENO;
- if (isatty(fd)) {
- fd = open("/dev/stdin", O_RDONLY);
- close(fd--);
- }
-
- /* This answer might be wrong, if dpv(3) has (by
- * request) opened an output file or pipe. If we
- * told dpv(3) to open a file, subtract one from
- * previous answer. If instead we told dpv(3) to
- * prepare a pipe output, subtract two.
- */
- switch(output_type) {
- case DPV_OUTPUT_FILE:
- fd -= 1;
- break;
- case DPV_OUTPUT_SHELL:
- fd -= 2;
- break;
- }
- }
- }
-
- /* Allocate buffer if necessary */
- if (buf == NULL) {
- /* Use output block size as buffer size if available */
- if (out >= 0) {
- if (fstat(out, &sb) != 0) {
- warn("%i", out);
- file->status = DPV_STATUS_FAILED;
- return (-1);
- }
- if (S_ISREG(sb.st_mode)) {
- if (sysconf(_SC_PHYS_PAGES) >
- PHYSPAGES_THRESHOLD)
- bsize = MIN(BUFSIZE_MAX, MAXPHYS * 8);
- else
- bsize = BUFSIZE_SMALL;
- } else
- bsize = MAX(sb.st_blksize,
- (blksize_t)sysconf(_SC_PAGESIZE));
- } else
- bsize = MIN(BUFSIZE_MAX, MAXPHYS * 8);
-
- /* Attempt to allocate */
- if ((buf = malloc(bsize+1)) == NULL) {
- end_dialog();
- err(EXIT_FAILURE, "Out of memory?!");
- }
- }
-
- return (0);
-}
-
-static int
-operate_on_bytes(struct dpv_file_node *file, int out)
-{
- int progress;
- ssize_t r, w;
-
- if (operate_common(file, out) < 0)
- return (-1);
-
- /* [Re-]Fill the buffer */
- if ((r = read(fd, buf, bsize)) <= 0) {
- if (fd != STDIN_FILENO)
- close(fd);
- fd = -1;
- file->status = DPV_STATUS_DONE;
- return (100);
- }
-
- /* [Re-]Dump the buffer */
- if (out >= 0) {
- if ((w = write(out, buf, r)) < 0) {
- end_dialog();
- err(EXIT_FAILURE, "output");
- }
- fsync(out);
- }
-
- dpv_overall_read += r;
- file->read += r;
-
- /* Calculate percentage of completion (if possible) */
- if (file->length >= 0) {
- progress = (file->read * 100 / (file->length > 0 ?
- file->length : 1));
-
- /* If no_overrun, do not return 100% until read >= length */
- if (no_overrun && progress == 100 && file->read < file->length)
- progress--;
-
- return (progress);
- } else
- return (-1);
-}
-
-static int
-operate_on_lines(struct dpv_file_node *file, int out)
-{
- char *p;
- int progress;
- ssize_t r, w;
-
- if (operate_common(file, out) < 0)
- return (-1);
-
- /* [Re-]Fill the buffer */
- if ((r = read(fd, buf, bsize)) <= 0) {
- if (fd != STDIN_FILENO)
- close(fd);
- fd = -1;
- file->status = DPV_STATUS_DONE;
- return (100);
- }
- buf[r] = '\0';
-
- /* [Re-]Dump the buffer */
- if (out >= 0) {
- if ((w = write(out, buf, r)) < 0) {
- end_dialog();
- err(EXIT_FAILURE, "output");
- }
- fsync(out);
- }
-
- /* Process the buffer for number of lines */
- for (p = buf; p != NULL && *p != '\0';)
- if ((p = strchr(p, '\n')) != NULL)
- dpv_overall_read++, p++, file->read++;
-
- /* Calculate percentage of completion (if possible) */
- if (file->length >= 0) {
- progress = (file->read * 100 / file->length);
-
- /* If no_overrun, do not return 100% until read >= length */
- if (no_overrun && progress == 100 && file->read < file->length)
- progress--;
-
- return (progress);
- } else
- return (-1);
-}
-
-/*
- * Takes a list of names that are to correspond to input streams coming from
- * stdin or fifos and produces necessary config to drive dpv(3) `--gauge'
- * widget. If the `-d' flag is used, output is instead send to terminal
- * standard output (and the output can then be saved to a file, piped into
- * custom [X]dialog(1) invocation, or whatever.
- */
-int
-main(int argc, char *argv[])
-{
- char dummy;
- int ch;
- int n = 0;
- size_t config_size = sizeof(struct dpv_config);
- size_t file_node_size = sizeof(struct dpv_file_node);
- struct dpv_config *config;
- struct dpv_file_node *curfile;
- struct sigaction act;
-
- pgm = argv[0]; /* store a copy of invocation name */
-
- /* Allocate config structure */
- if ((config = malloc(config_size)) == NULL)
- errx(EXIT_FAILURE, "Out of memory?!");
- memset((void *)(config), '\0', config_size);
-
- /*
- * Process command-line options
- */
- while ((ch = getopt(argc, argv,
- "a:b:dDhi:I:klL:mn:No:p:P:t:TU:wx:X")) != -1) {
- switch(ch) {
- case 'a': /* additional message text to append */
- if (config->aprompt == NULL) {
- config->aprompt = malloc(DPV_APROMPT_MAX);
- if (config->aprompt == NULL)
- errx(EXIT_FAILURE, "Out of memory?!");
- }
- snprintf(config->aprompt, DPV_APROMPT_MAX, "%s",
- optarg);
- break;
- case 'b': /* [X]dialog(1) backtitle */
- if (config->backtitle != NULL)
- free((char *)config->backtitle);
- config->backtitle = malloc(strlen(optarg) + 1);
- if (config->backtitle == NULL)
- errx(EXIT_FAILURE, "Out of memory?!");
- *(config->backtitle) = '\0';
- strcat(config->backtitle, optarg);
- break;
- case 'd': /* debugging */
- debug = TRUE;
- config->debug = debug;
- break;
- case 'D': /* use dialog(1) instead of libdialog */
- config->display_type = DPV_DISPLAY_DIALOG;
- break;
- case 'h': /* help/usage */
- usage();
- break; /* NOTREACHED */
- case 'i': /* status line format string for single-file */
- config->status_solo = optarg;
- break;
- case 'I': /* status line format string for many-files */
- config->status_many = optarg;
- break;
- case 'k': /* keep tite */
- config->keep_tite = TRUE;
- break;
- case 'l': /* Line mode */
- line_mode = TRUE;
- break;
- case 'L': /* custom label size */
- config->label_size =
- (int)strtol(optarg, (char **)NULL, 10);
- if (config->label_size == 0 && errno == EINVAL)
- errx(EXIT_FAILURE,
- "`-L' argument must be numeric");
- else if (config->label_size < -1)
- config->label_size = -1;
- break;
- case 'm': /* enable multiple file arguments */
- multiple = TRUE;
- break;
- case 'o': /* `-o path' for sending data-read to file */
- output_type = DPV_OUTPUT_FILE;
- config->output_type = DPV_OUTPUT_FILE;
- config->output = optarg;
- break;
- case 'n': /* custom number of files per `page' */
- config->display_limit =
- (int)strtol(optarg, (char **)NULL, 10);
- if (config->display_limit == 0 && errno == EINVAL)
- errx(EXIT_FAILURE,
- "`-n' argument must be numeric");
- else if (config->display_limit < 0)
- config->display_limit = -1;
- break;
- case 'N': /* No overrun (truncate reads of known-length) */
- no_overrun = TRUE;
- config->options |= DPV_NO_OVERRUN;
- break;
- case 'p': /* additional message text to use as prefix */
- if (config->pprompt == NULL) {
- config->pprompt = malloc(DPV_PPROMPT_MAX + 2);
- if (config->pprompt == NULL)
- errx(EXIT_FAILURE, "Out of memory?!");
- /* +2 is for implicit "\n" appended later */
- }
- snprintf(config->pprompt, DPV_PPROMPT_MAX, "%s",
- optarg);
- break;
- case 'P': /* custom size for mini-progressbar */
- config->pbar_size =
- (int)strtol(optarg, (char **)NULL, 10);
- if (config->pbar_size == 0 && errno == EINVAL)
- errx(EXIT_FAILURE,
- "`-P' argument must be numeric");
- else if (config->pbar_size < -1)
- config->pbar_size = -1;
- break;
- case 't': /* [X]dialog(1) title */
- if (config->title != NULL)
- free(config->title);
- config->title = malloc(strlen(optarg) + 1);
- if (config->title == NULL)
- errx(EXIT_FAILURE, "Out of memory?!");
- *(config->title) = '\0';
- strcat(config->title, optarg);
- break;
- case 'T': /* test mode (don't read data, fake it) */
- config->options |= DPV_TEST_MODE;
- break;
- case 'U': /* updates per second */
- config->status_updates_per_second =
- (int)strtol(optarg, (char **)NULL, 10);
- if (config->status_updates_per_second == 0 &&
- errno == EINVAL)
- errx(EXIT_FAILURE,
- "`-U' argument must be numeric");
- break;
- case 'w': /* `-p' and `-a' widths bump [X]dialog(1) width */
- config->options |= DPV_WIDE_MODE;
- break;
- case 'x': /* `-x cmd' for sending data-read to sh(1) code */
- output_type = DPV_OUTPUT_SHELL;
- config->output_type = DPV_OUTPUT_SHELL;
- config->output = optarg;
- break;
- case 'X': /* X11 support through x11/xdialog */
- config->display_type = DPV_DISPLAY_XDIALOG;
- break;
- case '?': /* unknown argument (based on optstring) */
- /* FALLTHROUGH */
- default: /* unhandled argument (based on switch) */
- usage();
- /* NOTREACHED */
- }
- }
- argc -= optind;
- argv += optind;
-
- /* Process remaining arguments as list of names to display */
- for (curfile = file_list; n < argc; n++) {
- nfiles++;
-
- /* Allocate a new struct for the file argument */
- if (curfile == NULL) {
- if ((curfile = malloc(file_node_size)) == NULL)
- errx(EXIT_FAILURE, "Out of memory?!");
- memset((void *)(curfile), '\0', file_node_size);
- file_list = curfile;
- } else {
- if ((curfile->next = malloc(file_node_size)) == NULL)
- errx(EXIT_FAILURE, "Out of memory?!");
- memset((void *)(curfile->next), '\0', file_node_size);
- curfile = curfile->next;
- }
- curfile->name = argv[n];
-
- /* Read possible `lines:' prefix from label syntax */
- if (sscanf(curfile->name, "%lli:%c", &(curfile->length),
- &dummy) == 2)
- curfile->name = strchr(curfile->name, ':') + 1;
- else
- curfile->length = -1;
-
- /* Read path argument if enabled */
- if (multiple) {
- if (++n >= argc)
- errx(EXIT_FAILURE, "Missing path argument "
- "for label number %i", nfiles);
- curfile->path = argv[n];
- } else
- break;
- }
-
- /* Display usage and exit if not given at least one name */
- if (nfiles == 0) {
- warnx("no labels provided");
- usage();
- /* NOTREACHED */
- }
-
- /*
- * Set cleanup routine for Ctrl-C action
- */
- if (config->display_type == DPV_DISPLAY_LIBDIALOG) {
- act.sa_handler = sig_int;
- sigaction(SIGINT, &act, 0);
- }
-
- /* Set status formats and action */
- if (line_mode) {
- config->status_solo = LINE_STATUS_SOLO;
- config->status_many = LINE_STATUS_SOLO;
- config->action = operate_on_lines;
- } else {
- config->status_solo = BYTE_STATUS_SOLO;
- config->status_many = BYTE_STATUS_SOLO;
- config->action = operate_on_bytes;
- }
-
- /*
- * Hand off to dpv(3)...
- */
- if (dpv(config, file_list) != 0 && debug)
- warnx("dpv(3) returned error!?");
-
- if (!config->keep_tite)
- end_dialog();
- dpv_free();
-
- exit(EXIT_SUCCESS);
-}
-
-/*
- * Interrupt handler to indicate we received a Ctrl-C interrupt.
- */
-static void
-sig_int(int sig __unused)
-{
- dpv_interrupt = TRUE;
-}
-
-/*
- * Print short usage statement to stderr and exit with error status.
- */
-static void
-usage(void)
-{
-
- if (debug) /* No need for usage */
- exit(EXIT_FAILURE);
-
- fprintf(stderr, "Usage: %s [options] [bytes:]label\n", pgm);
- fprintf(stderr, " %s [options] -m [bytes1:]label1 path1 "
- "[[bytes2:]label2 path2 ...]\n", pgm);
- fprintf(stderr, "OPTIONS:\n");
-#define OPTFMT "\t%-14s %s\n"
- fprintf(stderr, OPTFMT, "-a text",
- "Append text. Displayed below file progress indicators.");
- fprintf(stderr, OPTFMT, "-b backtitle",
- "String to be displayed on the backdrop, at top-left.");
- fprintf(stderr, OPTFMT, "-D",
- "Use dialog(1) instead of dialog(3) [default].");
- fprintf(stderr, OPTFMT, "-d",
- "Debug. Write to standard output instead of dialog.");
- fprintf(stderr, OPTFMT, "-h",
- "Produce this output on standard error and exit.");
- fprintf(stderr, OPTFMT, "-I format",
- "Customize status line format. See fdpv(1) for details.");
- fprintf(stderr, OPTFMT, "-i format",
- "Customize status line format. See fdpv(1) for details.");
- fprintf(stderr, OPTFMT, "-L size",
- "Label size. Must be a number greater than 0, or -1.");
- fprintf(stderr, OPTFMT, "-m",
- "Enable processing of multiple file argiments.");
- fprintf(stderr, OPTFMT, "-N",
- "No overrun. Stop reading input at stated length, if any.");
- fprintf(stderr, OPTFMT, "-n num",
- "Display at-most num files per screen. Default is -1.");
- fprintf(stderr, OPTFMT, "-o file",
- "Output data to file. First %s replaced with label text.");
- fprintf(stderr, OPTFMT, "-P size",
- "Mini-progressbar size. Must be a number greater than 3.");
- fprintf(stderr, OPTFMT, "-p text",
- "Prefix text. Displayed above file progress indicators.");
- fprintf(stderr, OPTFMT, "-T",
- "Test mode. Don't actually read any data, but fake it.");
- fprintf(stderr, OPTFMT, "-t title",
- "Title string to be displayed at top of dialog(1) box.");
- fprintf(stderr, OPTFMT, "-U num",
- "Update status line num times per-second. Default is 2.");
- fprintf(stderr, OPTFMT, "-w",
- "Wide. Width of `-p' and `-a' text bump dialog(1) width.");
- fprintf(stderr, OPTFMT, "-X",
- "X11. Use Xdialog(1) instead of dialog(1).");
- fprintf(stderr, OPTFMT, "-x cmd",
- "Send data to executed cmd. First %s replaced with label.");
- exit(EXIT_FAILURE);
-}
diff --git a/usr.bin/dpv/dpv_util.h b/usr.bin/dpv/dpv_util.h
deleted file mode 100644
--- a/usr.bin/dpv/dpv_util.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*-
- * Copyright (c) 2013-2014 Devin Teske <dteske@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _DPV_UTIL_H_
-#define _DPV_UTIL_H_
-
-/* Limits */
-#define BUFSIZE_MAX (2 * 1024 * 1024)
- /* Buffer size for read(2) input */
-#ifndef MAXPHYS
-#define MAXPHYS (128 * 1024)
- /* max raw I/O transfer size */
-#endif
-
-/*
- * Memory strategry threshold, in pages: if physmem is larger than this,
- * use a large buffer.
- */
-#define PHYSPAGES_THRESHOLD (32 * 1024)
-
-/*
- * Small (default) buffer size in bytes. It's inefficient for this to be
- * smaller than MAXPHYS.
- */
-#define BUFSIZE_SMALL (MAXPHYS)
-
-/*
- * Math macros
- */
-#undef MIN
-#define MIN(x,y) ((x) < (y) ? (x) : (y))
-#undef MAX
-#define MAX(x,y) ((x) > (y) ? (x) : (y))
-
-/*
- * Extra display information
- */
-#define BYTE_STATUS_SOLO "%'10lli bytes read @ %'9.1f bytes/sec."
-#define BYTE_STATUS_MANY (BYTE_STATUS_SOLO " [%i/%i busy/wait]")
-#define LINE_STATUS_SOLO "%'10lli lines read @ %'9.1f lines/sec."
-#define LINE_STATUS_MANY (LINE_STATUS_SOLO " [%i/%i busy/wait]")
-
-#endif /* !_DPV_UTIL_H_ */
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Feb 28, 12:53 AM (17 h, 32 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29045924
Default Alt Text
D55424.id.diff (198 KB)
Attached To
Mode
D55424: Retire dialog
Attached
Detach File
Event Timeline
Log In to Comment