xref: /freebsd/lib/libdpv/dpv.3 (revision 041394f38a59889f0e14ace3306df5310cd5aeac)
1*041394f3SDevin Teske.\" Copyright (c) 2013-2014 Devin Teske
2*041394f3SDevin Teske.\" All rights reserved.
3*041394f3SDevin Teske.\"
4*041394f3SDevin Teske.\" Redistribution and use in source and binary forms, with or without
5*041394f3SDevin Teske.\" modification, are permitted provided that the following conditions
6*041394f3SDevin Teske.\" are met:
7*041394f3SDevin Teske.\" 1. Redistributions of source code must retain the above copyright
8*041394f3SDevin Teske.\"    notice, this list of conditions and the following disclaimer.
9*041394f3SDevin Teske.\" 2. Redistributions in binary form must reproduce the above copyright
10*041394f3SDevin Teske.\"    notice, this list of conditions and the following disclaimer in the
11*041394f3SDevin Teske.\"    documentation and/or other materials provided with the distribution.
12*041394f3SDevin Teske.\"
13*041394f3SDevin Teske.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14*041394f3SDevin Teske.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15*041394f3SDevin Teske.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16*041394f3SDevin Teske.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17*041394f3SDevin Teske.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18*041394f3SDevin Teske.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19*041394f3SDevin Teske.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20*041394f3SDevin Teske.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21*041394f3SDevin Teske.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22*041394f3SDevin Teske.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23*041394f3SDevin Teske.\" SUCH DAMAGE.
24*041394f3SDevin Teske.\"
25*041394f3SDevin Teske.\" $FreeBSD$
26*041394f3SDevin Teske.\"
27*041394f3SDevin Teske.Dd Oct 24, 2014
28*041394f3SDevin Teske.Dt DPV 3
29*041394f3SDevin Teske.Os
30*041394f3SDevin Teske.Sh NAME
31*041394f3SDevin Teske.Nm dpv
32*041394f3SDevin Teske.Nd dialog progress view library
33*041394f3SDevin Teske.Sh LIBRARY
34*041394f3SDevin Teske.Lb libdpv
35*041394f3SDevin Teske.Sh SYNOPSIS
36*041394f3SDevin Teske.In dpv.h
37*041394f3SDevin Teske.Ft int
38*041394f3SDevin Teske.Fo dpv
39*041394f3SDevin Teske.Fa "struct dpv_config *config, struct dpv_file_node *file_list"
40*041394f3SDevin Teske.Fc
41*041394f3SDevin Teske.Ft void
42*041394f3SDevin Teske.Fo dpv_free
43*041394f3SDevin Teske.Fa "void"
44*041394f3SDevin Teske.Fc
45*041394f3SDevin Teske.Sh DESCRIPTION
46*041394f3SDevin TeskeThe
47*041394f3SDevin Teske.Nm
48*041394f3SDevin Teskelibrary provides an interface for creating complex
49*041394f3SDevin Teske.Dq gauge
50*041394f3SDevin Teskewidgets for displaying progress on various actions.
51*041394f3SDevin TeskeThe
52*041394f3SDevin Teske.Nm
53*041394f3SDevin Teskelibrary can display progress with one of
54*041394f3SDevin Teske.Xr dialog 3 ,
55*041394f3SDevin Teske.Xr dialog 1 ,
56*041394f3SDevin Teskeor
57*041394f3SDevin Teske.Xr Xdialog 1
58*041394f3SDevin Teske.Pq x11/xdialog from the ports tree .
59*041394f3SDevin Teske.Pp
60*041394f3SDevin TeskeThe
61*041394f3SDevin Teske.Fn dpv
62*041394f3SDevin Teske.Fa config
63*041394f3SDevin Teskeargument contains the following properties for configuring global display
64*041394f3SDevin Teskefeatures:
65*041394f3SDevin Teske.Bd -literal -offset indent
66*041394f3SDevin Teskestruct dpv_config {
67*041394f3SDevin Teske    enum dpv_display display_type;  /* Def. DPV_DISPLAY_LIBDIALOG */
68*041394f3SDevin Teske    enum dpv_output  output_type;   /* Default DPV_OUTPUT_NONE */
69*041394f3SDevin Teske    int              debug;         /* Enable debug on stderr */
70*041394f3SDevin Teske    int              display_limit; /* Files/page. Default -1 */
71*041394f3SDevin Teske    int              label_size;    /* Label size. Default 28 */
72*041394f3SDevin Teske    int              pbar_size;     /* Mini-progress size */
73*041394f3SDevin Teske    int              dialog_updates_per_second; /* Default 16 */
74*041394f3SDevin Teske    int              status_updates_per_second; /* Default 2 */
75*041394f3SDevin Teske    uint16_t         options;       /* Default 0 (none) */
76*041394f3SDevin Teske    char             *title;        /* Widget title */
77*041394f3SDevin Teske    char             *backtitle;    /* Widget backtitle */
78*041394f3SDevin Teske    char             *aprompt;      /* Append. Default NULL */
79*041394f3SDevin Teske    char             *pprompt;      /* Prefix. Default NULL */
80*041394f3SDevin Teske    char             *msg_done;     /* Default `Done' */
81*041394f3SDevin Teske    char             *msg_fail;     /* Default `Fail' */
82*041394f3SDevin Teske    char             *msg_pending;  /* Default `Pending' */
83*041394f3SDevin Teske    char             *output;       /* Output format string */
84*041394f3SDevin Teske    const char       *status_solo;  /* dialog(3) solo-status format.
85*041394f3SDevin Teske                                     * Default DPV_STATUS_SOLO */
86*041394f3SDevin Teske    const char       *status_many;  /* dialog(3) many-status format.
87*041394f3SDevin Teske                                     * Default DPV_STATUS_MANY */
88*041394f3SDevin Teske
89*041394f3SDevin Teske    /*
90*041394f3SDevin Teske     * Function pointer; action to perform data transfer
91*041394f3SDevin Teske     */
92*041394f3SDevin Teske    int (*action)(struct dpv_file_node *file, int out);
93*041394f3SDevin Teske};
94*041394f3SDevin Teske
95*041394f3SDevin Teskeenum dpv_display {
96*041394f3SDevin Teske    DPV_DISPLAY_LIBDIALOG = 0, /* Use dialog(3) (default) */
97*041394f3SDevin Teske    DPV_DISPLAY_STDOUT,        /* Use stdout */
98*041394f3SDevin Teske    DPV_DISPLAY_DIALOG,        /* Use spawned dialog(1) */
99*041394f3SDevin Teske    DPV_DISPLAY_XDIALOG,       /* Use spawned Xdialog(1) */
100*041394f3SDevin Teske};
101*041394f3SDevin Teske
102*041394f3SDevin Teskeenum dpv_output {
103*041394f3SDevin Teske    DPV_OUTPUT_NONE = 0, /* No output (default) */
104*041394f3SDevin Teske    DPV_OUTPUT_FILE,     /* Read `output' member as file path */
105*041394f3SDevin Teske    DPV_OUTPUT_SHELL,    /* Read `output' member as shell cmd */
106*041394f3SDevin Teske};
107*041394f3SDevin Teske.Ed
108*041394f3SDevin Teske.Pp
109*041394f3SDevin TeskeThe
110*041394f3SDevin Teske.Va options
111*041394f3SDevin Teskemember of the
112*041394f3SDevin Teske.Fn dpv
113*041394f3SDevin Teske.Fa config
114*041394f3SDevin Teskeargument is a mask of bit fields indicating various processing options.
115*041394f3SDevin TeskePossible flags are as follows:
116*041394f3SDevin Teske.Bl -tag -width DPV_NO_OVERRUN
117*041394f3SDevin Teske.It Dv DPV_TEST_MODE
118*041394f3SDevin TeskeEnable test mode.
119*041394f3SDevin TeskeIn test mode, the
120*041394f3SDevin Teske.Fn action
121*041394f3SDevin Teskecallback of the
122*041394f3SDevin Teske.Fa config
123*041394f3SDevin Teskeargument is not called but instead simulated-data is used to drive progress.
124*041394f3SDevin TeskeAppends
125*041394f3SDevin Teske.Dq [TEST MODE]
126*041394f3SDevin Tesketo the status line
127*041394f3SDevin Teske.Po
128*041394f3SDevin Tesketo override, set the
129*041394f3SDevin Teske.Va status_format
130*041394f3SDevin Teskemember of the
131*041394f3SDevin Teske.Fn dpv
132*041394f3SDevin Teske.Fa config
133*041394f3SDevin Teskeargument;
134*041394f3SDevin Teskee.g., to
135*041394f3SDevin Teske.Dv DPV_STATUS_DEFAULT
136*041394f3SDevin Teske.Pc .
137*041394f3SDevin Teske.It Dv DPV_WIDE_MODE
138*041394f3SDevin TeskeEnable wide mode.
139*041394f3SDevin TeskeIn wide mode, the length of the
140*041394f3SDevin Teske.Va aprompt
141*041394f3SDevin Teskeand
142*041394f3SDevin Teske.Va pprompt
143*041394f3SDevin Teskemembers of the
144*041394f3SDevin Teske.Fn dpv
145*041394f3SDevin Teske.Fa config
146*041394f3SDevin Teskeargument will bump the width of the gauge widget.
147*041394f3SDevin TeskePrompts wider than the maximum width will wrap
148*041394f3SDevin Teske.Po
149*041394f3SDevin Teskeunless using
150*041394f3SDevin Teske.Xr Xdialog 1 ;
151*041394f3SDevin Teskesee BUGS section below
152*041394f3SDevin Teske.Pc .
153*041394f3SDevin Teske.It Dv DPV_NO_LABELS
154*041394f3SDevin TeskeDisables the display of labels associated with each transfer
155*041394f3SDevin Teske.Po
156*041394f3SDevin Teske.Va label_size
157*041394f3SDevin Teskemember of
158*041394f3SDevin Teske.Fn dpv
159*041394f3SDevin Teske.Fa config
160*041394f3SDevin Teskeargument is ignored
161*041394f3SDevin Teske.Pc .
162*041394f3SDevin Teske.It Dv DPV_USE_COLOR
163*041394f3SDevin TeskeForce the use of color even if the
164*041394f3SDevin Teske.Va display_type
165*041394f3SDevin Teskedoes not support color
166*041394f3SDevin Teske.Po
167*041394f3SDevin Teske.Ev USE_COLOR
168*041394f3SDevin Teskeenvironment variable is ignored
169*041394f3SDevin Teske.Pc .
170*041394f3SDevin Teske.It Dv DPV_NO_OVERRUN
171*041394f3SDevin TeskeWhen enabled, callbacks for the current
172*041394f3SDevin Teske.Vt dpv_file_node
173*041394f3SDevin Teskeare terminated when
174*041394f3SDevin Teske.Fn action
175*041394f3SDevin Teskereturns 100 or greater
176*041394f3SDevin Teske.Po
177*041394f3SDevin Teskealleviates the need to change the
178*041394f3SDevin Teske.Va status
179*041394f3SDevin Teskeof the current
180*041394f3SDevin Teske.Vt dpv_file_node
181*041394f3SDevin Teskebut may also cause file truncation if the stream exceeds expected length
182*041394f3SDevin Teske.Pc .
183*041394f3SDevin Teske.El
184*041394f3SDevin Teske.Pp
185*041394f3SDevin TeskeThe
186*041394f3SDevin Teske.Fa file_list
187*041394f3SDevin Teskeargument to
188*041394f3SDevin Teske.Fn dpv
189*041394f3SDevin Teskeis a pointer to a
190*041394f3SDevin Teske.Dq linked-list ,
191*041394f3SDevin Teskedescribed as follows in
192*041394f3SDevin Teske.In dpv.h :
193*041394f3SDevin Teske.Bd -literal -offset indent
194*041394f3SDevin Teskestruct dpv_file_node {
195*041394f3SDevin Teske    enum dpv_status    status; /* status of read operation */
196*041394f3SDevin Teske    char               *msg;   /* display instead of "Done/Fail" */
197*041394f3SDevin Teske    char               *name;  /* name of file to read */
198*041394f3SDevin Teske    char               *path;  /* path to file */
199*041394f3SDevin Teske    long long          length; /* expected size */
200*041394f3SDevin Teske    long long          read;   /* number units read (e.g., bytes) */
201*041394f3SDevin Teske    struct dpv_file_node *next;/* pointer to next (end with NULL) */
202*041394f3SDevin Teske};
203*041394f3SDevin Teske.Ed
204*041394f3SDevin Teske.Pp
205*041394f3SDevin TeskeFor each of the items in the
206*041394f3SDevin Teske.Fa file_list
207*041394f3SDevin Teske.Dq linked-list
208*041394f3SDevin Teskeargument, the
209*041394f3SDevin Teske.Fn action
210*041394f3SDevin Teskecallback member of the
211*041394f3SDevin Teske.Fn dpv
212*041394f3SDevin Teske.Fa config
213*041394f3SDevin Teskeargument is called.
214*041394f3SDevin TeskeThe
215*041394f3SDevin Teske.Fn action
216*041394f3SDevin Teskefunction should perform a
217*041394f3SDevin Teske.Dq nominal
218*041394f3SDevin Teskeaction on the file and return.
219*041394f3SDevin TeskeThe return value of
220*041394f3SDevin Teske.Vt int
221*041394f3SDevin Teskerepresents the current progress percentage
222*041394f3SDevin Teske.Pq 0-100
223*041394f3SDevin Teskefor the current file.
224*041394f3SDevin Teske.Pp
225*041394f3SDevin TeskeThe
226*041394f3SDevin Teske.Fn action
227*041394f3SDevin Teskecallback provides two variables for each call.
228*041394f3SDevin Teske.Fa file
229*041394f3SDevin Teskeprovides a reference to the current
230*041394f3SDevin Teske.Vt dpv_file_node
231*041394f3SDevin Teskebeing processed.
232*041394f3SDevin Teske.Fa out
233*041394f3SDevin Teskeprovides a file descriptor where the data should go.
234*041394f3SDevin Teske.Pp
235*041394f3SDevin TeskeIf the
236*041394f3SDevin Teske.Va output
237*041394f3SDevin Teskemember of the
238*041394f3SDevin Teske.Fn dpv
239*041394f3SDevin Teske.Fa config
240*041394f3SDevin Teskeargument was set to DPV_OUTPUT_NONE
241*041394f3SDevin Teske.Pq default ; when invoking Fn dpv ,
242*041394f3SDevin Teskethe
243*041394f3SDevin Teske.Fa out
244*041394f3SDevin Teskefile descriptor of
245*041394f3SDevin Teske.Fn action
246*041394f3SDevin Teskewill be zero and should be ignored.
247*041394f3SDevin TeskeIf
248*041394f3SDevin Teske.Fa output
249*041394f3SDevin Teskewas set to DPV_OUTPUT_FILE,
250*041394f3SDevin Teske.Fa out
251*041394f3SDevin Teskewill be an open file descriptor to a file.
252*041394f3SDevin TeskeIf
253*041394f3SDevin Teske.Fa output
254*041394f3SDevin Teskewas set to DPV_OUTPUT_SHELL,
255*041394f3SDevin Teske.Fa out
256*041394f3SDevin Teskewill be an open file descriptor to a pipe for a spawned shell program.
257*041394f3SDevin TeskeWhen
258*041394f3SDevin Teske.Fa out
259*041394f3SDevin Teskeis greater than zero, you should write any data you have read back to
260*041394f3SDevin Teske.Fa out .
261*041394f3SDevin Teske.Pp
262*041394f3SDevin TeskeTo abort
263*041394f3SDevin Teske.Fn dpv ,
264*041394f3SDevin Teskeeither from the
265*041394f3SDevin Teske.Fn action
266*041394f3SDevin Teskecallback or asynchronously from a signal handler, two globals are provided via
267*041394f3SDevin Teske.In dpv.h :
268*041394f3SDevin Teske.Bd -literal -offset indent
269*041394f3SDevin Teskeextern int dpv_interrupt; /* Set to TRUE in interrupt handler */
270*041394f3SDevin Teskeextern int dpv_abort;     /* Set to true in callback to abort */
271*041394f3SDevin Teske.Ed
272*041394f3SDevin Teske.Pp
273*041394f3SDevin TeskeThese globals are not automatically reset and must be manually maintained.
274*041394f3SDevin TeskeDon't forget to reset these globals before subsequent invocations of
275*041394f3SDevin Teske.Fn dpv
276*041394f3SDevin Teskewhen making multiple calls from the same program.
277*041394f3SDevin Teske.Pp
278*041394f3SDevin TeskeIn addition, the
279*041394f3SDevin Teske.Va status
280*041394f3SDevin Teskemember of the
281*041394f3SDevin Teske.Fn action
282*041394f3SDevin Teske.Fa file
283*041394f3SDevin Teskeargument can be used to control callbacks for the current file.
284*041394f3SDevin TeskeThe
285*041394f3SDevin Teske.Va status
286*041394f3SDevin Teskemember can be set to any of the following from
287*041394f3SDevin Teske.In dpv.h :
288*041394f3SDevin Teske.Bd -literal -offset indent
289*041394f3SDevin Teskeenum dpv_status {
290*041394f3SDevin Teske	DPV_STATUS_RUNNING = 0, /* Running (default) */
291*041394f3SDevin Teske	DPV_STATUS_DONE,        /* Completed */
292*041394f3SDevin Teske	DPV_STATUS_FAILED,      /* Oops, something went wrong */
293*041394f3SDevin Teske};
294*041394f3SDevin Teske.Ed
295*041394f3SDevin Teske.Pp
296*041394f3SDevin TeskeThe default
297*041394f3SDevin Teske.Fa status
298*041394f3SDevin Teskeis zero, DPV_STATUS_RUNING, which keeps the callbacks coming for the current
299*041394f3SDevin Teske.Fn file .
300*041394f3SDevin TeskeSetting
301*041394f3SDevin Teske.Ql file->status
302*041394f3SDevin Tesketo anything other than DPV_STATUS_RUNNING will cause
303*041394f3SDevin Teske.Fn dpv
304*041394f3SDevin Tesketo loop to the next file, effecting the next callback, if any.
305*041394f3SDevin Teske.Pp
306*041394f3SDevin TeskeThe
307*041394f3SDevin Teske.Fn action
308*041394f3SDevin Teskecallback is responsible for calculating percentages and
309*041394f3SDevin Teske.Pq recommended
310*041394f3SDevin Teskemaintaining a
311*041394f3SDevin Teske.Nm
312*041394f3SDevin Teskeglobal counter so
313*041394f3SDevin Teske.Fn dpv
314*041394f3SDevin Teskecan display throughput statistics.
315*041394f3SDevin TeskePercentages are reported through the
316*041394f3SDevin Teske.Vt int
317*041394f3SDevin Teskereturn value of the
318*041394f3SDevin Teske.Fn action
319*041394f3SDevin Teskecallback.
320*041394f3SDevin TeskeThroughput statistics are calculated from the following global
321*041394f3SDevin Teske.Vt int
322*041394f3SDevin Teskein
323*041394f3SDevin Teske.In dpv.h :
324*041394f3SDevin Teske.Bd -literal -offset indent
325*041394f3SDevin Teskeextern int dpv_overall_read;
326*041394f3SDevin Teske.Ed
327*041394f3SDevin Teske.Pp
328*041394f3SDevin TeskeThis should be set to the number of bytes that have been read for all files.
329*041394f3SDevin TeskeThroughput information is displayed in the status line
330*041394f3SDevin Teske.Pq only available when using Xr dialog 3
331*041394f3SDevin Teskeat the bottom of the screen.
332*041394f3SDevin TeskeSee DPV_DISPLAY_LIBDIALOG above.
333*041394f3SDevin Teske.Pp
334*041394f3SDevin TeskeNote that
335*041394f3SDevin Teske.Va dpv_overall_read
336*041394f3SDevin Teskedoes not have to represent bytes.
337*041394f3SDevin TeskeFor example, you can change the
338*041394f3SDevin Teske.Va status_format
339*041394f3SDevin Tesketo display something other than
340*041394f3SDevin Teske.Dq Li bytes
341*041394f3SDevin Teskeand increment
342*041394f3SDevin Teske.Va dpv_overall_read
343*041394f3SDevin Teskeaccordingly
344*041394f3SDevin Teske.Pq e.g., counting lines .
345*041394f3SDevin Teske.Pp
346*041394f3SDevin TeskeWhen
347*041394f3SDevin Teske.Fn dpv
348*041394f3SDevin Teskeis processing the current file, the
349*041394f3SDevin Teske.Va length
350*041394f3SDevin Teskeand
351*041394f3SDevin Teske.Va read
352*041394f3SDevin Teskemembers of the
353*041394f3SDevin Teske.Fn action
354*041394f3SDevin Teske.Fa file
355*041394f3SDevin Teskeargument are used for calculating the display of mini progress bars
356*041394f3SDevin Teske.Po
357*041394f3SDevin Teskeif enabled; see
358*041394f3SDevin Teske.Va pbar_size
359*041394f3SDevin Teskeabove
360*041394f3SDevin Teske.Pc .
361*041394f3SDevin TeskeIf the
362*041394f3SDevin Teske.Va length
363*041394f3SDevin Teskemember of the current
364*041394f3SDevin Teske.Fa file
365*041394f3SDevin Teskeis less than zero
366*041394f3SDevin Teske.Pq indicating an unknown file length ,
367*041394f3SDevin Teskea
368*041394f3SDevin Teske.Xr humanize_number 3
369*041394f3SDevin Teskeversion of the
370*041394f3SDevin Teske.Va read
371*041394f3SDevin Teskemember is used instead of a traditional progress bar.
372*041394f3SDevin TeskeOtherwise a progress bar is calculated as percentage read to file length.
373*041394f3SDevin Teske.Fn action
374*041394f3SDevin Teskecallback must maintain these member values for mini-progress bars.
375*041394f3SDevin Teske.Pp
376*041394f3SDevin TeskeThe
377*041394f3SDevin Teske.Fn dpv_free
378*041394f3SDevin Teskefunction performs
379*041394f3SDevin Teske.Xr free 3
380*041394f3SDevin Teskeon private global variables initialized by
381*041394f3SDevin Teske.Fn dpv .
382*041394f3SDevin Teske.Sh ENVIRONMENT
383*041394f3SDevin TeskeThe following environment variables are referenced by
384*041394f3SDevin Teske.Nm :
385*041394f3SDevin Teske.Bl -tag -width ".Ev USE_COLOR"
386*041394f3SDevin Teske.It Ev DIALOG
387*041394f3SDevin TeskeOverride command string used to launch
388*041394f3SDevin Teske.Xr dialog 1
389*041394f3SDevin Teske.Pq requires Dv DPV_DISPLAY_DIALOG
390*041394f3SDevin Teskeor
391*041394f3SDevin Teske.Xr Xdialog 1
392*041394f3SDevin Teske.Pq requires Dv DPV_DISPLAY_XDIALOG ;
393*041394f3SDevin Teskedefault is either
394*041394f3SDevin Teske.Ql dialog
395*041394f3SDevin Teske.Pq for Dv DPV_DISPLAY_DIALOG
396*041394f3SDevin Teskeor
397*041394f3SDevin Teske.Ql Xdialog
398*041394f3SDevin Teske.Pq for Dv DPV_DISPLAY_XDIALOG .
399*041394f3SDevin Teske.It Ev DIALOGRC
400*041394f3SDevin TeskeIf set and non-NULL, path to
401*041394f3SDevin Teske.Ql .dialogrc
402*041394f3SDevin Teskefile.
403*041394f3SDevin Teske.It Ev HOME
404*041394f3SDevin TeskeIf
405*041394f3SDevin Teske.Ql Ev $DIALOGRC
406*041394f3SDevin Teskeis either not set or NULL, used as a prefix to
407*041394f3SDevin Teske.Ql .dialogrc
408*041394f3SDevin Teske.Pq i.e., Ql $HOME/.dialogrc .
409*041394f3SDevin Teske.It Ev USE_COLOR
410*041394f3SDevin TeskeIf set and NULL, disables the use of color when using
411*041394f3SDevin Teske.Xr dialog 1
412*041394f3SDevin Teske.Pq does not apply to Xr Xdialog 1 .
413*041394f3SDevin Teske.It Ev msg_done Ev msg_fail Ev msg_pending
414*041394f3SDevin TeskeInternationalization strings for overriding the default English strings
415*041394f3SDevin Teske.Ql Done ,
416*041394f3SDevin Teske.Ql Fail ,
417*041394f3SDevin Teskeand
418*041394f3SDevin Teske.Ql Pending
419*041394f3SDevin Teskerespectively.
420*041394f3SDevin TeskeTo prevent their usage, explicitly set the
421*041394f3SDevin Teske.Va msg_done ,
422*041394f3SDevin Teske.Va msg_fail ,
423*041394f3SDevin Teskeand
424*041394f3SDevin Teske.Va msg_pending
425*041394f3SDevin Teskemembers of
426*041394f3SDevin Teske.Fn dpv
427*041394f3SDevin Teske.Fa config
428*041394f3SDevin Teskeargument to default macros
429*041394f3SDevin Teske.Pq DPV_DONE_DEFAULT, DPV_FAIL_DEFAULT, and DPV_PENDING_DEFAULT
430*041394f3SDevin Teskeor desired values.
431*041394f3SDevin Teske.El
432*041394f3SDevin Teske.Sh FILES
433*041394f3SDevin Teske.Bl -tag -width ".Pa $HOME/.dialogrc" -compact
434*041394f3SDevin Teske.It Pa $HOME/.dialogrc
435*041394f3SDevin Teske.El
436*041394f3SDevin Teske.Sh SEE ALSO
437*041394f3SDevin Teske.Xr dialog 1 ,
438*041394f3SDevin Teske.Xr dialog 3 ,
439*041394f3SDevin Teske.Xr Xdialog 1
440*041394f3SDevin Teske.Sh HISTORY
441*041394f3SDevin TeskeThe
442*041394f3SDevin Teske.Nm
443*041394f3SDevin Teskelibrary first appeared in
444*041394f3SDevin Teske.Fx 11.0 .
445*041394f3SDevin Teske.Sh AUTHORS
446*041394f3SDevin Teske.An Devin Teske Aq dteske@FreeBSD.org
447*041394f3SDevin Teske.Sh BUGS
448*041394f3SDevin Teske.Xr Xdialog 1 ,
449*041394f3SDevin Teskewhen given both
450*041394f3SDevin Teske.Ql Fl -title Ar title
451*041394f3SDevin Teske.Po
452*041394f3SDevin Teskesee above
453*041394f3SDevin Teske.Ql Va title
454*041394f3SDevin Teskemember of
455*041394f3SDevin Teske.Va struct dpv_config
456*041394f3SDevin Teske.Pc
457*041394f3SDevin Teskeand
458*041394f3SDevin Teske.Ql Fl -backtitle Ar backtitle
459*041394f3SDevin Teske.Po
460*041394f3SDevin Teskesee above
461*041394f3SDevin Teske.Ql Va backtitle
462*041394f3SDevin Teskemember of
463*041394f3SDevin Teske.Va struct dpv_config
464*041394f3SDevin Teske.Pc ,
465*041394f3SDevin Teskedisplays the backtitle in place of the title and vice-versa.
466*041394f3SDevin Teske.Pp
467*041394f3SDevin Teske.Xr Xdialog 1
468*041394f3SDevin Teskedoes not wrap long prompt texts received after initial launch.
469*041394f3SDevin TeskeThis is a known issue with the
470*041394f3SDevin Teske.Ql --gauge
471*041394f3SDevin Teskewidget in
472*041394f3SDevin Teske.Xr Xdialog 1 .
473*041394f3SDevin TeskeEmbed escaped newlines within prompt text(s) to force line breaks.
474*041394f3SDevin Teske.Pp
475*041394f3SDevin Teske.Xr dialog 1
476*041394f3SDevin Teskedoes not display the first character after a series of escaped escape-sequences
477*041394f3SDevin Teske(e.g., ``\\\\n'' produces ``\\'' instead of ``\\n'').
478*041394f3SDevin TeskeThis is a known issue with
479*041394f3SDevin Teske.Xr dialog 1
480*041394f3SDevin Teskeand does not affect
481*041394f3SDevin Teske.Xr dialog 3
482*041394f3SDevin Teskeor
483*041394f3SDevin Teske.Xr Xdialog 1 .
484*041394f3SDevin Teske.Pp
485*041394f3SDevin TeskeIf your application ignores
486*041394f3SDevin Teske.Ev USE_COLOR
487*041394f3SDevin Teskewhen set and NULL before calling
488*041394f3SDevin Teske.Xr dpv 3
489*041394f3SDevin Teskewith color escape sequences anyway,
490*041394f3SDevin Teske.Xr dialog 3
491*041394f3SDevin Teskeand
492*041394f3SDevin Teske.Xr dialog 1
493*041394f3SDevin Teskemay not render properly.
494*041394f3SDevin TeskeWorkaround is to detect when
495*041394f3SDevin Teske.Ev USE_COLOR
496*041394f3SDevin Teskeis set and NULL and either not use color escape sequences at that time or use
497*041394f3SDevin Teske.Xr unsetenv 3
498*041394f3SDevin Tesketo unset
499*041394f3SDevin Teske.Ev USE_COLOR ,
500*041394f3SDevin Teskeforcing interpretation of color sequences.
501*041394f3SDevin TeskeThis does not effect
502*041394f3SDevin Teske.Xr Xdialog 1 ,
503*041394f3SDevin Teskewhich renders the color escape sequences as plain text.
504*041394f3SDevin TeskeSee
505*041394f3SDevin Teske.Do Li
506*041394f3SDevin Teskeembedded "\\Z" sequences
507*041394f3SDevin Teske.Dc
508*041394f3SDevin Teskein
509*041394f3SDevin Teske.Xr dialog 1
510*041394f3SDevin Teskefor additional information.
511