221 lines
5.4 KiB
C
221 lines
5.4 KiB
C
/*
|
|
* Output command-line help to stdout.
|
|
*/
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include "config.h"
|
|
#endif
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <errno.h>
|
|
|
|
#define N_(String) (String)
|
|
|
|
struct optdesc_s {
|
|
char *optshort;
|
|
char *optlong;
|
|
char *param;
|
|
char *description;
|
|
};
|
|
|
|
|
|
/*
|
|
* Display command-line help.
|
|
*/
|
|
void display_help(void)
|
|
{
|
|
struct optdesc_s optlist[] = {
|
|
{"-p", "--progress", 0,
|
|
N_("show progress bar")},
|
|
{"-t", "--timer", 0,
|
|
N_("show elapsed time")},
|
|
{"-e", "--eta", 0,
|
|
N_("show estimated time of arrival (completion)")},
|
|
{"-I", "--fineta", 0,
|
|
N_
|
|
("show absolute estimated time of arrival (completion)")},
|
|
{"-r", "--rate", 0,
|
|
N_("show data transfer rate counter")},
|
|
{"-a", "--average-rate", 0,
|
|
N_("show data transfer average rate counter")},
|
|
{"-m", "--average-rate-window", N_("SEC"),
|
|
N_
|
|
("compute average rate over past SEC seconds (default 30s)")},
|
|
{"-b", "--bytes", 0,
|
|
N_("show number of bytes transferred")},
|
|
{"-8", "--bits", 0,
|
|
N_("show number of bits transferred")},
|
|
{"-T", "--buffer-percent", 0,
|
|
N_("show percentage of transfer buffer in use")},
|
|
{"-A", "--last-written", _("NUM"),
|
|
N_("show NUM bytes last written")},
|
|
{"-F", "--format", N_("FORMAT"),
|
|
N_("set output format to FORMAT")},
|
|
{"-n", "--numeric", 0,
|
|
N_("output percentages, not visual information")},
|
|
{"-q", "--quiet", 0,
|
|
N_("do not output any transfer information at all")},
|
|
{"", 0, 0, 0},
|
|
{"-W", "--wait", 0,
|
|
N_("display nothing until first byte transferred")},
|
|
{"-D", "--delay-start", N_("SEC"),
|
|
N_("display nothing until SEC seconds have passed")},
|
|
{"-s", "--size", N_("SIZE"),
|
|
N_("set estimated data size to SIZE bytes")},
|
|
{"-l", "--line-mode", 0,
|
|
N_("count lines instead of bytes")},
|
|
{"-0", "--null", 0,
|
|
N_("lines are null-terminated")},
|
|
{"-i", "--interval", N_("SEC"),
|
|
N_("update every SEC seconds")},
|
|
{"-w", "--width", N_("WIDTH"),
|
|
N_("assume terminal is WIDTH characters wide")},
|
|
{"-H", "--height", N_("HEIGHT"),
|
|
N_("assume terminal is HEIGHT rows high")},
|
|
{"-N", "--name", N_("NAME"),
|
|
N_("prefix visual information with NAME")},
|
|
{"-f", "--force", 0,
|
|
N_("output even if standard error is not a terminal")},
|
|
{"-c", "--cursor", 0,
|
|
N_("use cursor positioning escape sequences")},
|
|
{"", 0, 0, 0},
|
|
{"-L", "--rate-limit", N_("RATE"),
|
|
N_("limit transfer to RATE bytes per second")},
|
|
{"-B", "--buffer-size", N_("BYTES"),
|
|
N_("use a buffer size of BYTES")},
|
|
{"-C", "--no-splice", 0,
|
|
N_("never use splice(), always use read/write")},
|
|
{"-E", "--skip-errors", 0,
|
|
N_("skip read errors in input")},
|
|
{"-S", "--stop-at-size", 0,
|
|
N_("stop after --size bytes have been transferred")},
|
|
#ifdef HAVE_IPC
|
|
{"-R", "--remote", N_("PID"),
|
|
N_("update settings of process PID")},
|
|
#endif /* HAVE_IPC */
|
|
{"", 0, 0, 0},
|
|
{"-P", "--pidfile", N_("FILE"),
|
|
N_("save process ID in FILE")},
|
|
{"", 0, 0, 0},
|
|
{"-d", "--watchfd", N_("PID[:FD]"),
|
|
N_("watch file FD opened by process PID")},
|
|
{"", 0, 0, 0},
|
|
{"-h", "--help", 0,
|
|
N_("show this help and exit")},
|
|
{"-V", "--version", 0,
|
|
N_("show version information and exit")},
|
|
{0, 0, 0, 0}
|
|
};
|
|
unsigned int i, col1max = 0, tw = 77;
|
|
char *optbuf;
|
|
|
|
printf(_("Usage: %s [OPTION] [FILE]..."), PROGRAM_NAME);
|
|
printf("\n%s\n\n",
|
|
_
|
|
("Concatenate FILE(s), or standard input, to standard output,\n"
|
|
"with monitoring."));
|
|
|
|
for (i = 0; optlist[i].optshort; i++) {
|
|
unsigned int width = 0;
|
|
char *param;
|
|
|
|
width = 2 + (unsigned int) strlen(optlist[i].optshort);
|
|
#ifdef HAVE_GETOPT_LONG
|
|
if (optlist[i].optlong)
|
|
width +=
|
|
2 + (unsigned int) strlen(optlist[i].optlong);
|
|
#endif
|
|
param = optlist[i].param;
|
|
if (param)
|
|
param = _(param);
|
|
if (param)
|
|
width += 1 + strlen(param);
|
|
|
|
if (width > col1max)
|
|
col1max = width;
|
|
}
|
|
|
|
col1max++;
|
|
|
|
optbuf = malloc((size_t) (col1max + 16));
|
|
if (NULL == optbuf) {
|
|
fprintf(stderr, "%s: %s\n", PROGRAM_NAME, strerror(errno));
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
for (i = 0; optlist[i].optshort; i++) {
|
|
char *param;
|
|
char *description;
|
|
char *start;
|
|
char *end;
|
|
|
|
if ('\0' == optlist[i].optshort[0]) {
|
|
printf("\n");
|
|
continue;
|
|
}
|
|
|
|
param = optlist[i].param;
|
|
if (param)
|
|
param = _(param);
|
|
description = optlist[i].description;
|
|
if (description)
|
|
description = _(description);
|
|
|
|
#ifdef HAVE_SNPRINTF
|
|
(void) snprintf(optbuf, (size_t) (col1max + 15),
|
|
"%s%s%s%s%s", optlist[i].optshort,
|
|
#else
|
|
sprintf(optbuf, "%s%s%s%s%s", optlist[i].optshort,
|
|
#endif
|
|
#ifdef HAVE_GETOPT_LONG
|
|
optlist[i].optlong ? ", " : "",
|
|
optlist[i].optlong ? optlist[i].optlong : "",
|
|
#else
|
|
"", "",
|
|
#endif
|
|
param ? " " : "", param ? param : "");
|
|
|
|
printf(" %-*s ", (int) (col1max - 2), optbuf);
|
|
|
|
if (NULL == description) {
|
|
printf("\n");
|
|
continue;
|
|
}
|
|
|
|
start = description;
|
|
|
|
while ((unsigned int) strlen(start) > tw - col1max) {
|
|
end = start + tw - col1max;
|
|
while ((end > start) && (end[0] != ' '))
|
|
end--;
|
|
if (end == start) {
|
|
end = start + tw - col1max;
|
|
} else {
|
|
end++;
|
|
}
|
|
printf("%.*s\n%*s ", (int) (end - start), start,
|
|
(int) col1max, "");
|
|
if (end == start)
|
|
end++;
|
|
start = end;
|
|
}
|
|
|
|
printf("%s\n", start);
|
|
}
|
|
|
|
#ifdef ENABLE_DEBUGGING
|
|
printf("\n");
|
|
printf("%s",
|
|
_
|
|
("Debugging is enabled; export the DEBUG environment variable to define the\noutput filename.\n"));
|
|
#endif
|
|
|
|
printf("\n");
|
|
printf(_("Please report any bugs to %s."), BUG_REPORTS_TO);
|
|
printf("\n");
|
|
}
|
|
|
|
/* EOF */
|