aboutsummaryrefslogtreecommitdiff
path: root/usr.bin
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/Makefile1
-rw-r--r--usr.bin/dpv/Makefile9
-rw-r--r--usr.bin/dpv/Makefile.depend20
-rw-r--r--usr.bin/dpv/dpv.1448
-rw-r--r--usr.bin/dpv/dpv.c543
-rw-r--r--usr.bin/dpv/dpv_util.h66
6 files changed, 0 insertions, 1087 deletions
diff --git a/usr.bin/Makefile b/usr.bin/Makefile
index 0b3558924382..a0e2742db656 100644
--- a/usr.bin/Makefile
+++ b/usr.bin/Makefile
@@ -192,7 +192,6 @@ SUBDIR.${MK_CALENDAR}+= calendar
${MK_LLD} != "no" || ${MK_LLDB} != "no"
SUBDIR+= clang
.endif
-SUBDIR.${MK_DIALOG}+= dpv
SUBDIR.${MK_EE}+= ee
SUBDIR.${MK_FILE}+= file
SUBDIR.${MK_FINGER}+= finger
diff --git a/usr.bin/dpv/Makefile b/usr.bin/dpv/Makefile
deleted file mode 100644
index 104c865626b9..000000000000
--- 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
index 2313ff2ff894..000000000000
--- 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
index 5d91a5ef379e..000000000000
--- 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
index 1fd89eca77c8..000000000000
--- 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
index 98f7a55ced67..000000000000
--- 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_ */