1.\" Copyright (c) 2013-2014 Devin Teske 2.\" All rights reserved. 3.\" 4.\" Redistribution and use in source and binary forms, with or without 5.\" modification, are permitted provided that the following conditions 6.\" are met: 7.\" 1. Redistributions of source code must retain the above copyright 8.\" notice, this list of conditions and the following disclaimer. 9.\" 2. Redistributions in binary form must reproduce the above copyright 10.\" notice, this list of conditions and the following disclaimer in the 11.\" documentation and/or other materials provided with the distribution. 12.\" 13.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23.\" SUCH DAMAGE. 24.\" 25.\" $FreeBSD$ 26.\" 27.Dd Sep 7, 2014 28.Dt DPV 1 29.Os 30.Sh NAME 31.Nm dpv 32.Nd stream data from stdin or multiple paths with dialog progress view 33.Sh SYNOPSIS 34.Nm 35.Op options 36.Ar [bytes:]label 37.Nm 38.Op options 39.Fl m 40.Ar [bytes1:]label1 41.Ar path1 42.Op Ar [bytes2:]label2 path2 ... 43.Sh DESCRIPTION 44.Nm 45provides a dialog progress view, allowing a user to see current throughput rate 46and total data transferred for one or more streams. 47.Pp 48The 49.Nm 50utility has two main modes for processing input. 51.Pp 52The default input mode, without 53.Ql Fl m , 54.Nm 55reads bytes from standard input. 56A label for the data must be provided. 57.Pp 58The secondary input mode, with 59.Ql Fl m , 60.Nm 61reads multiple paths 62.Pq up to 2047 or Dq ARG_MAX/2-1 , 63sequentially. 64.Pp 65Data read in either mode is either thrown away 66.Pq default , 67sent to a spawned instance of the program specified via 68.Ql Fl x Ar cmd , 69or sent to a unique file specified by 70.Ql Fl o Ar file . 71.Pp 72With or without 73.Ql Fl m , 74progress is displayed using one of 75.Xr dialog 3 76.Pq default , 77.Xr dialog 1 78.Pq see Ql Fl D , 79or instead 80.Xr Xdialog 1 81.Pq see Ql Fl X . 82.Pp 83The following options are available: 84.Bl -tag -width ".Fl b Ar backtitle" 85.It Fl a Ar text 86Display 87.Ar text 88below the file progress indicator(s). 89.It Fl b Ar backtitle 90Display 91.Ar backtitle 92on the backdrop, at top-left, behind the dialog widget. 93When using 94.Xr Xdialog 1 , 95this is displayed inside the window 96.Pq at the top 97followed by a separator line. 98.It Fl d 99Debug mode. 100Print dialog prompt data to standard out and provide additional debugging on 101standard error. 102.It Fl D 103Do not use the default interface of 104.Xr dialog 3 , 105but instead spawn an instance of 106.Xr dialog 1 . 107The path to 108.Xr dialog 1 109is taken from the 110.Ev DIALOG 111environment variable or simply 112.Dq Li dialog 113if unset or NULL. 114.It Fl h 115Produce a short syntax usage with brief option descriptions and exit. 116Output is produced on standard error. 117.It Fl i Ar format 118Customize the single-file format string used to update the status line. 119Ignored when using either 120.Ql Fl D 121or 122.Ql Fl X 123which lack the ability to display the status line 124.Pq containing bytes/rate/thread information . 125Default value 126is 127.Dq Li %'10lli bytes read @ %'9.1f bytes/sec. . 128This format is used when handling one file. 129.It Fl I Ar format 130Customize the multi-file format string used to update the status line. 131Ignored when using either 132.Ql Fl D 133or 134.Ql Fl X 135which lack the ability to display the status line 136.Pq containing bytes/rate/thread information . 137Default value 138is 139.Dq Li %'10lli bytes read @ %'9.1f bytes/sec. [%i/%i busy/wait] . 140This format is used when handling more than one file. 141.It Fl l 142Line mode. Read lines from input instead of bytes. 143.It Fl L Ar size 144Label size. 145If negative, shrink to longest label width. 146.It Fl m 147Multi-input mode. 148Instead of reading bytes from standard input, read from a set of paths 149.Pq one for each label . 150By default, each path is processed sequentially in the order given. 151.It Fl n Ar num 152Display at-most 153.Ar num 154progress indicators per screen. 155If zero, display as many as possible. 156If negative, only display the main progress indicator. 157Default is 0. 158Maximum value is 10. 159.It Fl N 160No overrun. 161If enabled, stop reading known-length inputs when input reaches stated length. 162.It Fl o Ar file 163Output data to 164.Ar file . 165The first occurrence of 166.Ql %s 167.Pq if any 168in 169.Ql Ar file 170will be replaced with the 171.Ar label 172text. 173.It Fl p Ar text 174Display 175.Ar text 176above the file progress indicator(s). 177.It Fl P Ar size 178Mini-progressbar size. 179If negative, don't display mini-progressbars 180.Pq only the large overall progress indicator is shown . 181If zero, auto-adjust based on number of files to read. 182When zero and only one file to read, defaults to -1. 183When zero and more than one file to read, defaults to 17. 184.It Fl t Ar title 185Display 186.Ar title 187atop the dialog box. 188Note that if you use this option at the same time as 189.Ql Fl X 190and 191.Ql Fl b Ar backtitle , 192the 193.Ar backtitle 194and 195.Ar title 196are effectively switched 197.Pq see BUGS section below . 198.It Fl T 199Test mode. 200Simulate reading a number of bytes, divided evenly across the number of files, 201while stepping through each percent value of each file to process. 202Appends 203.Dq Li [TEST MODE] 204to the status line 205.Pq to override, use Ql Fl u Ar format . 206No data is actually read. 207.It Fl U Ar num 208Update status line 209.Ar num 210times per-second. 211Default value is 212.Ql Li 2 . 213A value of 214.Ql Li 0 215disables status line updates. 216If negative, update the status line as fast as possible. 217Ignored when using either 218.Ql Fl D 219or 220.Ql Fl X 221which lack the ability to display the status line 222.Pq containing bytes/rate/thread information . 223.It Fl w 224Wide mode. 225Allows long 226.Ar text 227arguments used with 228.Ql Fl p 229and 230.Ql Fl a 231to bump the dialog width. 232Prompts wider than the maximum width will wrap 233.Pq unless using Xr Xdialog 1 ; see BUGS section below . 234.It Fl x Ar cmd 235Execute 236.Ar cmd 237.Pq via Xr sh 1 238and send it data that has been read. 239Data is available to 240.Ar cmd 241on standard input. 242With 243.Ql Fl m , 244.Ar cmd 245is executed once for each 246.Ar path 247argument. 248The first occurrence of 249.Ql %s 250.Pq if any 251in 252.Ql Ar cmd 253will be replaced with the 254.Ar label 255text. 256.It Fl X 257Enable X11 mode by using 258.Xr Xdialog 1 259instead of 260.Xr dialog 1 261or 262.Xr dialog 3 . 263.El 264.Sh ENVIRONMENT 265The following environment variables are referenced by 266.Nm : 267.Bl -tag -width ".Ev USE_COLOR" 268.It Ev DIALOG 269Override command string used to launch 270.Xr dialog 1 271.Pq requires Ql Fl D 272or 273.Xr Xdialog 1 274.Pq requires Ql Fl X ; 275default is either 276.Ql dialog 277.Pq for Ql Fl D 278or 279.Ql Xdialog 280.Pq for Ql Fl X . 281.It Ev DIALOGRC 282If set and non-NULL, path to 283.Ql .dialogrc 284file. 285.It Ev HOME 286If 287.Ql Ev $DIALOGRC 288is either not set or NULL, used as a prefix to 289.Ql .dialogrc 290.Pq i.e., Ql $HOME/.dialogrc . 291.It Ev USE_COLOR 292If set and NULL, disables the use of color when using 293.Xr dialog 1 294.Pq does not apply to Xr Xdialog 1 . 295.El 296.Sh DEPENDENCIES 297If using 298.Ql Fl D , 299.Xr dialog 1 300is required. 301.Pp 302If using 303.Ql Fl X , 304.Xr Xdialog 1 305is required. 306.Sh FILES 307.Bl -tag -width ".Pa $HOME/.dialogrc" -compact 308.It Pa $HOME/.dialogrc 309.El 310.Sh EXAMPLES 311Simple example to show how fast 312.Xr yes 1 313produces lines 314.Pq usually about ten-million per-second; your results may vary : 315.Bd -literal -offset indent 316yes | dpv -l yes 317.Ed 318.Pp 319Display progress while timing how long it takes 320.Xr yes 1 321to produce a half-billion lines 322.Pq usually under one minute; your results may vary : 323.Bd -literal -offset indent 324time yes | dpv -Nl 500000000:yes 325.Ed 326.Pp 327An example to watch how quickly a file is transferred using 328.Xr nc 1 : 329.Bd -literal -offset indent 330dpv -x "nc -w 1 somewhere.com 3000" -m label file 331.Ed 332.Pp 333A similar example, transferring a file from another process and passing the 334expected size to 335.Nm : 336.Bd -literal -offset indent 337cat file | dpv -x "nc -w 1 somewhere.com 3000" 12345:label 338.Ed 339.Pp 340A more complicated example: 341.Bd -literal -offset indent 342tar cf - . | dpv -x "gzip -9 > out.tgz" \\ 343 $( du -s . | awk '{print $1 * 1024}' ):label 344.Ed 345.Pp 346Taking an image of a disk: 347.Bd -literal -offset indent 348dpv -o disk-image.img -m label /dev/ada0 349.Ed 350.Pp 351Writing an image back to a disk: 352.Bd -literal -offset indent 353dpv -o /dev/ada0 -m label disk-image.img 354.Ed 355.Pp 356Zeroing a disk: 357.Bd -literal -offset indent 358dpv -o /dev/md42 < /dev/zero 359.Ed 360.Sh SEE ALSO 361.Xr dialog 1 , 362.Xr sh 1 , 363.Xr Xdialog 1 , 364.Xr dialog 3 365.Sh HISTORY 366A 367.Nm 368utility first appeared in 369.Fx 11.0 . 370.Sh AUTHORS 371.An Devin Teske Aq dteske@FreeBSD.org 372.Sh BUGS 373.Xr Xdialog 1 , 374when given both 375.Ql Fl -title Ar title 376.Pq see above Ql Fl t Ar title 377and 378.Ql Fl -backtitle Ar backtitle 379.Pq see above Ql Fl b Ar backtitle , 380displays the backtitle in place of the title and vice-versa. 381.Pp 382.Xr Xdialog 1 383does not wrap long prompt texts received after initial launch. 384This is a known issue with the 385.Ql --gauge 386widget in 387.Xr Xdialog 1 . 388.Pp 389.Xr dialog 1 390does not display the first character after a series of escaped escape-sequences 391(e.g., ``\\\\n'' produces ``\\'' instead of ``\\n''). 392This is a known issue with 393.Xr dialog 1 394and does not affect 395.Xr dialog 3 396or 397.Xr Xdialog 1 . 398.Pp 399If your application ignores 400.Ev USE_COLOR 401when set and NULL before calling 402.Xr dpv 1 403with color escape sequences anyway, 404.Xr dialog 3 405and 406.Xr dialog 1 407may not render properly. 408Workaround is to detect when 409.Ev USE_COLOR 410is set and NULL and either not use color escape sequences at that time or use 411.Xr unset 1 412.Xr [ sh 1 ] 413or 414.Xr unsetenv 1 415.Xr [ csh 1 ] 416to unset 417.Ev USE_COLOR , 418forcing interpretation of color sequences. 419This does not effect 420.Xr Xdialog 1 , 421which renders the color escape sequences as plain text. 422See 423.Do 424embedded "\\Z" sequences 425.Dc 426in 427.Xr dialog 1 428for additional information. 429