GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages


Manual Reference Pages  -  DPV (3)

NAME

dpv - dialog progress view library

CONTENTS

Library
Synopsis
Description
Environment
Files
See Also
History
Authors
Bugs

LIBRARY


.Lb libdpv

SYNOPSIS


.In dpv.h int
.Fo dpv struct dpv_config *config, struct dpv_file_node *file_list
.Fc void
.Fo dpv_free void
.Fc

DESCRIPTION

The dpv library provides an interface for creating complex "gauge" widgets for displaying progress on various actions. The dpv library can display progress with one of dialog(3), dialog(1), or Xdialog(1) (x11/xdialog from the ports tree).

The dpv config argument contains the following properties for configuring global display features:

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 */ };

The options member of the dpv config argument is a mask of bit fields indicating various processing options. Possible flags are as follows:
DPV_TEST_MODE Enable test mode. In test mode, the action callback of the config argument is not called but instead simulated-data is used to drive progress. Appends "[TEST MODE]" to the status line ( to override, set the status_format member of the dpv config argument; e.g., to DPV_STATUS_DEFAULT ).
DPV_WIDE_MODE Enable wide mode. In wide mode, the length of the aprompt and pprompt members of the dpv config argument will bump the width of the gauge widget. Prompts wider than the maximum width will wrap ( unless using Xdialog(1); see BUGS section below ).
DPV_NO_LABELS Disables the display of labels associated with each transfer ( label_size member of dpv config argument is ignored ).
DPV_USE_COLOR Force the use of color even if the display_type does not support color ( USE_COLOR environment variable is ignored ).
DPV_NO_OVERRUN
  When enabled, callbacks for the current
.Vt dpv_file_node are terminated when action returns 100 or greater ( alleviates the need to change the status of the current
.Vt dpv_file_node but may also cause file truncation if the stream exceeds expected length ).

The file_list argument to dpv is a pointer to a "linked-list", described as follows in
.In dpv.h :

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) */
};

For each of the items in the file_list "linked-list" argument, the action callback member of the dpv config argument is called. The action function should perform a "nominal" action on the file and return. The return value of
.Vt int represents the current progress percentage (0-100) for the current file.

The action callback provides two variables for each call. file provides a reference to the current
.Vt dpv_file_node being processed. out provides a file descriptor where the data should go.

If the output member of the dpv config argument was set to DPV_OUTPUT_NONE (default; when invoking dpv), the out file descriptor of action will be zero and should be ignored. If output was set to DPV_OUTPUT_FILE, out will be an open file descriptor to a file. If output was set to DPV_OUTPUT_SHELL, out will be an open file descriptor to a pipe for a spawned shell program. When out is greater than zero, you should write any data you have read back to out.

To abort dpv, either from the action callback or asynchronously from a signal handler, two globals are provided via
.In dpv.h :

extern int dpv_interrupt; /* Set to TRUE in interrupt handler */
extern int dpv_abort;     /* Set to true in callback to abort */

These globals are not automatically reset and must be manually maintained. Don’t forget to reset these globals before subsequent invocations of dpv when making multiple calls from the same program.

In addition, the status member of the action file argument can be used to control callbacks for the current file. The status member can be set to any of the following from
.In dpv.h :

enum dpv_status {
        DPV_STATUS_RUNNING = 0, /* Running (default) */
        DPV_STATUS_DONE,        /* Completed */
        DPV_STATUS_FAILED,      /* Oops, something went wrong */
};

The default status is zero, DPV_STATUS_RUNING, which keeps the callbacks coming for the current file. Setting file->status’ to anything other than DPV_STATUS_RUNNING will cause dpv to loop to the next file, effecting the next callback, if any.

The action callback is responsible for calculating percentages and (recommended) maintaining a dpv global counter so dpv can display throughput statistics. Percentages are reported through the
.Vt int return value of the action callback. Throughput statistics are calculated from the following global
.Vt int in
.In dpv.h :

extern int dpv_overall_read;

This should be set to the number of bytes that have been read for all files. Throughput information is displayed in the status line (only available when using dialog(3)) at the bottom of the screen. See DPV_DISPLAY_LIBDIALOG above.

Note that dpv_overall_read does not have to represent bytes. For example, you can change the status_format to display something other than "bytes" and increment dpv_overall_read accordingly (e.g., counting lines).

When dpv is processing the current file, the length and read members of the action file argument are used for calculating the display of mini progress bars ( if enabled; see pbar_size above ). If the length member of the current file is less than zero (indicating an unknown file length), a humanize_number(3) version of the read member is used instead of a traditional progress bar. Otherwise a progress bar is calculated as percentage read to file length. action callback must maintain these member values for mini-progress bars.

The dpv_free function performs free(3) on private global variables initialized by dpv.

ENVIRONMENT

The following environment variables are referenced by dpv:
DIALOG Override command string used to launch dialog(1) (requires DPV_DISPLAY_DIALOG) or Xdialog(1) (requires DPV_DISPLAY_XDIALOG); default is either dialog (for DPV_DISPLAY_DIALOG) or Xdialog (for DPV_DISPLAY_XDIALOG).
DIALOGRC If set and non-NULL, path to .dialogrc’ file.
HOME If $DIALOGRC’ is either not set or NULL, used as a prefix to .dialogrc (i.e.,‘$HOME/.dialogrc’).
USE_COLOR
  If set and NULL, disables the use of color when using dialog(1) (does not apply to Xdialog(1)).
msg_done msg_fail msg_pending
  Internationalization strings for overriding the default English strings Done’, Fail’, and Pending’ respectively. To prevent their usage, explicitly set the msg_done, msg_fail, and msg_pending members of dpv config argument to default macros (DPV_DONE_DEFAULT, DPV_FAIL_DEFAULT, and DPV_PENDING_DEFAULT) or desired values.

FILES

$HOME/.dialogrc
 

SEE ALSO

dialog(1), dialog(3), Xdialog(1)

HISTORY

The dpv library first appeared in
.Fx 10.2 .

AUTHORS


.An Devin Teske Aq dteske@FreeBSD.org

BUGS

Xdialog(1), when given both --title title ( see above title’ member of struct dpv_config ) and --backtitle backtitle ( see above backtitle’ member of struct dpv_config ), displays the backtitle in place of the title and vice-versa.

Xdialog(1) does not wrap long prompt texts received after initial launch. This is a known issue with the --gauge’ widget in Xdialog(1). Embed escaped newlines within prompt text(s) to force line breaks.

dialog(1) does not display the first character after a series of escaped escape-sequences (e.g., ‘‘\\n’’ produces ‘‘#146;’ instead of ‘‘\n’’). This is a known issue with dialog(1) and does not affect dialog(3) or Xdialog(1).

If your application ignores USE_COLOR when set and NULL before calling dpv(3) with color escape sequences anyway, dialog(3) and dialog(1) may not render properly. Workaround is to detect when USE_COLOR is set and NULL and either not use color escape sequences at that time or use unsetenv(3) to unset USE_COLOR, forcing interpretation of color sequences. This does not effect Xdialog(1), which renders the color escape sequences as plain text. See " embedded "\Z" sequences " in dialog(1) for additional information.

Search for    or go to Top of page |  Section 3 |  Main Index


Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with manServer 1.07.