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