1DDPT_SGL(8)                          DDPT                          DDPT_SGL(8)
2
3
4

NAME

6       ddpt_sgl - helper for ddpt utility's scatter gather lists
7

SYNOPSIS

9       ddpt_sgl  [--action=ACT] [--a-sgl=SGL] [--b-sgl=SGL] [--chs=CHS] [--de‐
10       gen=DV] [--document]  [--elem=SE[,LE]]  [--extension=FNE]  [--flexible]
11       [--help]    [--hex]    [--iaf=IAF]    [--index=IA]    [--interleave=IL]
12       [--non-overlap] [--out=O_SGL]  [--quiet]  [--round=RB]  [--sort-cmp=SC]
13       [--stats] [--verbose] [--version]
14

DESCRIPTION

16       This utility is a scatter gather list helper for the ddpt utility which
17       copies data between or  within  SCSI  devices  (logical  units).  While
18       ddpt's command line syntax is modelled on that of the POSIX dd command,
19       this utility has a more standard Unix command  line  syntax  with  both
20       short and long variants of each option.
21
22       Scatter  gather  lists  (sgl_s) are made up of scatter gather elements.
23       Each element is made up a starting logical block address  (LBA)  and  a
24       number of blocks (NUM) from and including that LBA.
25
26       The scatter gather lists can also be viewed as arrays in which elements
27       can be accessed by an index. Multiple sgl elements can be accessed with
28       an  array of indexes, hence index arrays. Indexes in this utility start
29       at 0 and run to (n - 1) where n is the number of elements in  the  sgl.
30       Also  negative  indexes are permitted where -1 is the index of the last
31       sgl element, -2 is the index of the second last sgl element, etc.
32
33       For "twin" actions there is an assumed relationship between  a-sgl  and
34       b-sgl  as  there  is  between  two  sgl_s used as the gather list (e.g.
35       skip=) and the scatter list (e.g. seek=) in the ddpt utility.  Breaking
36       it  down  to  individual  logical blocks: LBAr0 is read and its data is
37       written to LBAw0, LBAr1-->LBAw1, LBAr2-->LBAw2, etc; or more  generally
38       LBAr_n-->LNAw_n.  Many  actions  will  change  the order in which those
39       "read-write" items are performed, the twin portion of  the  action  at‐
40       tempts  to  maintain  the  LBAr_n-->LNAw_n mapping. Generally speaking,
41       copies are the same no matter what order the LBAs are read and written.
42       One  exception  is an overlapping scatter list (i.e. on the write side)
43       in which case the order of writes onto the same LBA does matter,  hence
44       there  is  an  option  to  check sgl_s are well-formed in that respect:
45       --non-overlap.
46
47       For background on scatter gather lists see the section of that name  in
48       the  ddpt(8)  manpage  found  in  this  package. There is a web page at
49       https://sg.danny.cz/sg/ddpt.html .
50

OPTIONS

52       Arguments to long options are mandatory for short options as well.
53
54       -a, --action=ACT
55              ACT is some action  to  perform  on  the  given  scatter  gather
56              list(s).   To  list  the  available actions set ACT to 'xxx' (or
57              'enum'). The available actions are listed in the ACTIONS section
58              below.
59
60       -A, --a-sgl=SGL
61              SGL  is a scatter gather list, a sequence of comma separated un‐
62              signed integers (up to 64 bits each). SGL has several forms, the
63              simplest  is:  LBA0,NUM0,LBA1,NUM1,LBA2,NUM2... and there should
64              be an even number of values with the exception of LBA0 appearing
65              by itself. In this case NUM0 is assumed to be 0. Other SGL forms
66              are '@<filename>' and 'H@<filename>' where the contents  of  the
67              <filename>  is parsed as a scatter gather list.  Since there are
68              two options for inputting  SGLs,  this  one  is  termed  as  the
69              'a-sgl'.
70              See the section on FILE FORMATS below and the section on SCATTER
71              GATHER LISTS in the ddpt(8)  manpage  for  more  information  on
72              sgl_s and their associated terminology.
73
74       -B, --b-sgl=SGL
75              SGL  is  a  scatter  gather  list,  a  second list termed as the
76              'b-sgl' to differentiate it from the other sgl (a-sgl).
77
78       -C, --chs=CHS
79              CHS is a 3 element tuple, separated by commas. Currently 16  bit
80              values  from  1  to 0xffff are accepted (the cylinder can be one
81              more: 0x10000 (or 65536)). The first  value  is  the  number  of
82              cylinders,  the  second value is the number of heads (limited to
83              16), and the final value is the  number  of  sectors  per  track
84              (limited  to 255). Sectors are counted origin 1 according to CHS
85              conventions (cf. normal LBAs which nearly always count from 0).
86
87       -D, --degen=DV
88              DV of 0 (the default) means that all degenerate elements  (apart
89              from the last) are ignored (and dropped from the internal repre‐
90              sentation which may later be written to an output file).  If  DV
91              is  odd  then  a  degenerate element's LBA is taken into account
92              when calculating the highest and lowest LBA in a sgl (and may be
93              included  in  an output file). If DV is even (apart from a DV of
94              0) then a degenerate element's LBA it taken  into  account  when
95              determining if a sgl is monotonic increasing, decreasing or nei‐
96              ther (and may be included in an output file).
97
98       -d, --document
99              this option causes information about the a sgl or index array to
100              be written as comments (i.e. lines starting with '#') to the be‐
101              ginning of output file(s) created by this utility.
102              If this option is given twice then the command line that  caused
103              the output is added to the file as a comment (before any numbers
104              are output).
105
106       -E, --elem=SE[,LE]
107              this option allows a single sgl element (at position SE  (start‐
108              ing element index)) to be output to O_SGL or O_SGL.FNE (or IAF).
109              SE is origin 0. If LE (last element index) is given then a range
110              of  sgl elements are output starting at index SE to index LE in‐
111              clusive. If a "twin" operation is being performed then this  op‐
112              tion  only  applies to the "a" side output, not the "twin" side.
113              This option is ignored by the output of the split_n and tsplit_n
114              actions.
115
116              Negative  values  for either SE or LE count from the end of sgl.
117              For example --elem=0,-1 refers to the whole of the list.
118              If LE is less than SE (after any negative indexes are  converted
119              to their equivalent positive index) then that range is output in
120              reverse.
121
122       -e, --extension=FNE
123              FNE is the filename extension used  when  output  filenames  are
124              generated.  For non-split actions the generated filenames are of
125              the form: O_SGL.FNE . For the split_n action the generated file‐
126              names are of the form: O_SGL[1..n].FNE . For the tsplit_n action
127              the a-sg is named as per the previous sentence,  while  for  the
128              b-sgl the generated filenames are of the form: O_SGL[1..n]_t.FNE
129              .
130              If O_SGL is '-' (by itself) then all output is  sent  to  stdout
131              and this option is ignored.
132
133       -f, --flexible
134              this option effects the parsing (reading) of sgl_s and index ar‐
135              rays that are in files which  are  in  hexadecimal.  Such  files
136              should  have a leading line (i.e. before any numbers) with 'HEX'
137              on it. Without this option any such file must  be  invoked  with
138              'H@'  before the filename; in other words the 'H' in the invoca‐
139              tion needs to match the 'HEX' in the file. With  this  option  a
140              file  can be invoked with '@' and if a line with 'HEX' is parsed
141              before any numbers then it switches to hexadecimal mode; so that
142              all the parsed numbers are assumed to be in hexadecimal.
143
144       -h, --help
145              outputs  the usage message summarizing command line options then
146              exits.
147
148       -H, --hex
149              used to define the numeric format of sgl and  index  array  ele‐
150              ments written to output (often a file named O_SGL or stdout). If
151              not given then only decimal values are  written  to  output.  If
152              this option is given once then hexadecimal values, prefixed with
153              '0x', are written. If this option is given  twice  then  a  line
154              with  the  string 'HEX' is written to output, before any values,
155              and those values are implicitly  hexadecimal  (i.e.  no  leading
156              '0x' nor 'h' suffix).
157
158       -I, --iaf=IAF
159              where  IAF  is  a filename (or '-' for stdout) to write an index
160              array to. The only action that generates  an  index  array  cur‐
161              rently is --action=sort (and tsort). This option can be together
162              used with, or in place of, the --out=O_SGL option.
163              The --document, --elem=SE[,LE] and --hex options effect what  is
164              written. See the section on FILE FORMATS below.
165
166       -x, --index=IA
167              where IA is one or more indexes, comma separated or, if prefixed
168              by "@" or "H@", a filename containing a list of  indexes.  These
169              indexes  are used by the --action=select and --action=tselect to
170              select elements from the 'a-sgl'. Positive and negative  indexes
171              that  are  too  large (in absolute terms) are ignored and create
172              noise if the --verbose option is given. See the section on  FILE
173              FORMATS below.
174
175       -i, --interleave=IL
176              IL  is  an  integer, starting from 0. When IL is 0 (the default)
177              there is no interleave. The interleave only effects the  split_n
178              and  tsplit_n  actions and when greater than zero is the maximum
179              number of logical blocks written in each segment in  the  output
180              file, prior to moving to the next output file.
181              For  the  case  where IL is 1 and --action=split_1 is given then
182              the output file will have every LBA (given by the  a-sgl)  as  a
183              separate sgl element (and thus each will have a NUM of 1).
184              For  the  tsplit_n  action the interleave is only applied to the
185              a-sgl but it does effect the twin sgl files.
186
187       -N, --non-overlap
188              Checks any given sgl and any resulting sgl (from an  action)  to
189              see  if  any  portion of the sgl overlaps. This is done by first
190              sorting each sgl by the LBA field, then checking  every  element
191              against  the previous one to determine if there is overlap. SCSI
192              commands that accept sgl_s process degenerate  elements  without
193              error  but if two elements in a WRITE command overlap then it is
194              the storage device's choice which one to WRITE first.  The  last
195              one to be written will be the one read in subsequent read opera‐
196              tions.
197              If no errors are detected then if (all) are non-overlapping then
198              0 is returned. If no errors are detected then if (any) are over‐
199              lapping then 36 is returned.
200
201       -o, --out=O_SGL
202              O_SGL is the name of a file to write a resultant scatter  gather
203              list  to. If O_SGL is '-' then the output is directed to stdout.
204              If O_SGL starts with '+' then the output is appended to the file
205              whose name follows the '+'.
206              For the split and tsplit actions, the leading '+' is interpreted
207              as appended to all files that meet the template and exist,  oth‐
208              erwise  the  file is created. If '-' is given then all output is
209              directed to stdout (and the --extension=FNE option, if given, is
210              ignored).
211
212       -q, --quiet
213              suppresses  warning  and  messages announcing an action has suc‐
214              ceeded. When this option is given, actions that have  a  logical
215              (boolean)  result  don't  output messages but still yield an in‐
216              dicative exit status. The exit status will typically be either 0
217              for true or 36 for false.  are typically sent to stderr.
218
219       -r, --round=RB
220              RB is the number of round blocks. Without the option the split_n
221              action will divide the number of blocks to be split by '<n>' (or
222              use  IL)  to  get  a  nominal value. This value is the number of
223              blocks taken from the a-sgl before moving  to  the  next  output
224              file.  The  RB value (default 0) is the maximum number of blocks
225              the nominal value may be changed by to align  with  an  existing
226              element boundary in the a-sgl.
227              If  the  number  of  blocks  in  'a-sgl is less than 10 or RB is
228              greater than one third of the nominal value, then RB is  ignored
229              (with a notification written to stderr).
230              For the tsplit_n action this option only applies to the a-sgl.
231
232       -S, --sort-cmp=SC
233              where SC is a value indicating what the sort action's comparison
234              will be. When SC is 0 (the default) the sort is ascending  based
235              on  the  LBA;  when it is 1 the sort is descending based on LBA.
236              When SC is 2 the sort is ascending based on NUM; when  it  is  3
237              the  sort  is descending based on NUM. Any other value is mapped
238              to 0. All sorts are stable which means that  sgl  elements  with
239              the  same  LBA  (in the case of SC being 0 or 1) keep their same
240              relative position. A side effect of this is that  the  ascending
241              and descending sorts are not always reversals of one another.
242
243       -s, --stats
244              print out sgl statistics on any given sgl and any resultant sgl.
245
246       -v, --verbose
247              increase the level of verbosity, (i.e. debug output).
248
249       -V, --version
250              print the version string and then exit.
251

ACTIONS

253       Actions  are  given on the command line as part of the --action=ACT op‐
254       tion. Currently only one action is allowed per invocation. If more  are
255       allowed  in  the  future, they will be comma separated and performed in
256       the order in which they appear (i.e. left to right).
257
258       If no action is given and the --a-sgl=SGL and --out=O_SGL options (with
259       no  --b-sgl=SGL option) are given then the a-sgl is copied to O_SGL (or
260       O_SGL.FNE if the --extension=FNE option is given).
261
262       The actions are listed below in alphabetical order.
263
264       append-b2a
265              appends the b-sgl to the end of the a-sgl and outputs the result
266              to  O_SGL (or O_SGL.FNE if the --extension=FNE option is given).
267              Requires the --a-sgl=SGL, --b-sgl=SGL and --out=O_SGL options.
268
269       divisible<n>[,L|N] or divisible_<n>[,L|N]
270              where <n> is an integer, 1 or higher. This action checks if each
271              LBA  and  NUM in a-sgl is divisible by <n> (where 'is divisible'
272              is equivalent to having a remainder of zero). If all are divisi‐
273              ble  then  true  is returned (i.e. the exit status 0); otherwise
274              false is returned (i.e.  exit status 36).
275              If the optional ",L" suffix (or ",LBA") is given then only  each
276              LBA  element  in  a-sgl  is checked for divisibility. If the op‐
277              tional ",N" suffix (or ",NUM") then only  each  NUM  element  in
278              a-sgl is checked for divisibility.
279              The  output  of the string to stderr announcing divisibility, or
280              lack of it, can be suppressed by the --quiet option.
281
282       enum   prints out the list of supported actions then exits. Giving  the
283              action 'xxx' has the same effect.
284
285       equal  this   action  compares  the  sgl_s  given  to  --a-sgl=SGL  and
286              --b-sgl=SGL. If the same LBAs are in the  same  order  with  the
287              same overall number of blocks (but not necessarily the same num‐
288              ber of elements) then true is returned (i.e. the exit status 0);
289              otherwise  false is returned (i.e.  exit status 36). For example
290              the two element sgl "0x10,0x5, 0x15,0x2" is 'equal' to  the  one
291              element sgl "0x10, 0x7".
292              The  output of the string to stderr announcing equality, or lack
293              of it, can be suppressed by the --quiet option.
294
295       none   this action  does  nothing.  This  is  the  default  action.  If
296              --a-sgl=SGL  and  --out=O_SGL options are given and no other ac‐
297              tion, then a-sgl is copied to O_SGL.
298               It is a placeholder.
299
300       part-equal
301              this action is similar to the equal action but relaxes the  con‐
302              dition  that  both  lists  must  have the same overall number of
303              blocks. For example the two element sgl "0x10,0x5, 0x15,0x2"  is
304              'part-equal' to the one element sgl "0x10, 0x12".
305
306       part-same
307              this action is similar to the same action but relaxes the condi‐
308              tion that both lists  must  have  the  same  overall  number  of
309              blocks.  For  example the two element sgl "0x15,0x2,0x10,0x5" is
310              'part-same' as the one element sgl "0x10, 0x12".
311
312       same   this action is similar to the equal action but relaxes the  con‐
313              dition  that both lists must be in the same order. The implemen‐
314              tation sorts both given lists before comparing them.  For  exam‐
315              ple  the  two  element sgl "0x15,0x2, 0x10,0x5" is the 'same' as
316              the one element sgl "0x10, 0x7".
317
318       scale<n> or scale_<n>
319              where <n> is an integer, positive or negative but not zero. When
320              <n>  is positive then the starting LBA and the NUM in each a-sgl
321              element is multiplied by <n> . The new (scaled) sgl  is  written
322              to O_SGL (or O_SGL.FNE if the --extension=FNE option is given).
323              When <n> is negative then the absolute value of <n> is used as a
324              divisor for each starting LBA and NUM in each a-sgl element.
325              As an example: converting a 512 byte logical block (LB) size sgl
326              to  a  4096 byte LB size and vice versa is relatively common. To
327              convert from 4096 --> 512 byte LB size then --action=scale_8  is
328              appropriate.  To  convert  from  512  --> 4096 byte LB size then
329              --action=scale_-8 is appropriate.
330              Note: because an integer division is used (that rounds  'towards
331              zero')  when  <n>  is negative then LBs or NUMs may be "lost" in
332              this conversion. This can be checked beforehand with  the  --ac‐
333              tion=divisible<n>[,L|N]  option.  For  example: for 512 --> 4096
334              conversions: --action=divisible_8 will report  if  any  starting
335              LBAs or NUMs are not divisible be 8 and hence are not able to be
336              precisely represented as 4096 byte LB  addresses  or  number  of
337              4096 byte blocks.
338
339       select this  action can be used to select a subset (or superset) of the
340              a-sgl in the specified order. Alternatively it can  be  seen  as
341              re-ordering the elements in a-sgl such as is done toward the end
342              of a sort operation. Assuming all the indexes in IA  are  valid,
343              then  the  O_SGL  file  will have the same number of elements as
344              there are indexes in IA.
345              This option requires non-empty --a-sgl=SGL  and  --index=IA  op‐
346              tions, plus the --out=O_SGL option.
347
348       sort   this  action will sort the sgl given by --a-sgl=SGL in ascending
349              order by LBA. The resulting sgl is output to O_SGL (or O_SGL.FNE
350              if the --extension=FNE option is given).
351              The  sort is "stable", so if two elements have the same starting
352              LBA then they will appear in the same relative order in the out‐
353              put.
354
355       split<n> or split_<n>
356              where  <n>  is  an  integer,  1  or  higher. This action divides
357              --a-sgl=SGL into  <n>  roughly  equal  length  (i.e.  number  of
358              blocks)  output  sgl_s. The output files are named "O_SGL<1..n>"
359              or "O_SGL<1..n>.FNE". Both the  --interleave=IL  and  --round=RB
360              options are taken into account during the split process.
361
362       to-chs this  action  takes  the 'flat' LBA SGL given to --a-sgl=SGL and
363              converts it into CHS (cylinder/head/sector) based SGL  which  is
364              written out as directed to --out=O_SGL. This action requires the
365              --chs=CHS option as well as the --a-sgl=SGL and --out=O_SGL  op‐
366              tions.
367
368       tselect
369              this  is  a  "twin  select" action that selects from --a-sgl=SGL
370              (a-sgl) then re-orders --b-sgl=SGL (b-sgl) in unison. The select
371              from  a-sgl  is  the  same  as described under the select action
372              above. Additionally b-sgl is is broken up so it has "breaks"  at
373              the  same positions (i.e. number of blocks from the start of the
374              sgl) as a-sgl does; plus the "breaks" b-sgl has already got.  So
375              the  "broken  up"  b-sgl  will have at least as many elements as
376              a-sgl. The output of the re-ordered b-sgl  is  then  written  to
377              O_SGL_t or O_SGL_t.FNE if the --extension=FNE option is given.
378
379       tsort  this  is a "twin sort" action that sorts --a-sgl=SGL (a-sgl) and
380              re-orders --b-sgl=SGL (b-sgl) in unison. The sort  of  a-sgl  is
381              the  same as described under the sort action above. Additionally
382              b-sgl is is broken up so it has "breaks" at the  same  positions
383              (i.e. number of blocks from the start of the sgl) as a-sgl does;
384              plus the "breaks" b-sgl has already  got.  So  the  "broken  up"
385              b-sgl  will  have at least as many elements as a-sgl. The re-or‐
386              dering vector generated by the stable sort of a-sgl is then  ap‐
387              plied to the broken up b-sgl. The output of the re-ordered b-sgl
388              is then written to O_SGL_t or O_SGL_t.FNE if the --extension=FNE
389              option is given.
390
391       tsplit<n> or tsplit_<n>
392              this  is  a  "twin split" action that splits the --a-sgl=SGL and
393              --b-sgl=SGL into separate series of output files. These separate
394              series  maintain  the  LBA to LBA correspondence of the original
395              a_sgl and b_sgl lists. <n> is an integer, 1 or higher. This  ac‐
396              tion  divides  --a-sgl=SGL  into  <n> roughly equal length (i.e.
397              number of blocks) output sgl_s. The "roughly  equal  length"  is
398              influenced  by  the  --interleave=IL and --round=RB options. The
399              output filenames are generated the same way as described for the
400              split  action.  The  sgl  from  --a-sgl=SGL  is expected to be a
401              "hard" sgl which means its last element should not be degenerate
402              (i.e. have a NUM of 0).
403              The  second half of the "twin split" is to split the --b-sgl=SGL
404              sgl. The same number of output files are used  as  for  the  'A'
405              side   but   the  filenames  have  a  slightly  different  form:
406              "O_SGL<1..n>_t" or "O_SGL<1..n>_t.FNE" (if  the  --extension=FNE
407              option  is  given).  The critical point of this split is that it
408              moves in lockstep with the 'A' side  split  in  the  sense  that
409              whatever block count an 'A' side segment uses, the following 'B'
410              side segment split uses the  same  block  count.  The  sgl  from
411              --b-sgl=SGL  may be a "hard" or "soft" sgl. In the simplest case
412              the 'B' side sgl can be just '0' which gets  expanded  to  '0,0'
413              (i.e.  degenerate  list  starting  at  LBA 0); this will use the
414              overall block count from the 'A' side.
415

FILE FORMATS

417       Both sgl_s and index arrays can be read from,  or  written  to,  files.
418       The  options  that  supply  sgl_s  or  index  arrays  to  be read (e.g.
419       --a-sgl=SGL, --b-sgl=SGL and --index=IA) by default allow  them  to  be
420       given directly on the command line. These will typically be comma sepa‐
421       rated lists (although space and tab could be used as separators if they
422       were  appropriately  escaped). So with these options when reading sgl_s
423       and index arrays, a leading "@" or "H@" is needed to  indicate  that  a
424       file name follows.
425
426       By  default,  numbers given in this utility and other utilities in this
427       package are assumed to be in decimal. Hexadecimal (hex) numbers can  be
428       given  with  either a leading "0x" or trailing "h". A whole file can be
429       flagged as containing hex numbers (and thus not needing a leading  "0x"
430       nor  trailing "h" on each number) by using "H@" on the command line be‐
431       fore the filename. The file itself may contain a line with 'HEX' in it,
432       prior to any numbers that are to be parsed. If the --flexible option is
433       given then "@" can be used before the filename and when  'HEX'  is  de‐
434       tected  in the file (before any numbers) the code switches to hex mode.
435       Without the --flexible option "H@" must be use before the filename.  As
436       a  convenience  the 'HEX' string may appear after hex numbers have been
437       decoded and it will be ignored. This is to allow hex sgl_s files to  be
438       concatenated together and still be parsed without error.
439
440       A  file being parsed may contain comments following a "#" symbols.  Ev‐
441       erything from and include the hash mark to the end of  a  line  is  ig‐
442       nored.  Blank  lines  and  "whitespace" (spaces, tabs, CRs and LFs) are
443       also ignored.
444
445       If large sgl_s or index arrays are being used it is better to have  one
446       element  per line in the file to be read. This is because a line is not
447       expected to be over 1024 bytes long with more than 254  parsable  items
448       on  it.  This utility imposes no limit on the number of lines a file to
449       be parsed may have.
450
451       Files to be written out by this utility have their names  specified  by
452       the  --out=O_SGL  (optionally  together  with  --extension=FNE) and the
453       --iaf=IAF options. Unlike the file reading options,  no  "@"  character
454       should  be  placed  in  front of the filename on the command line. If a
455       filename of "-" is given then output is written to stdout instead of  a
456       file.  stdout  is normally the console. If the filename starts with "+"
457       then that character is skipped the output  will  be  appended  to  that
458       file,  if  it exists. If the filename starts with "+" and the file does
459       not exist then it is created. If "+" is not given and the file  already
460       exists  then  it is truncated (to 0) then overwritten. Some output file
461       names have numbers (e.g. as a result of the --action=spilt_<n>  option)
462       or  "_t"  (e.g. as a result of "twin" actions) appended to them (before
463       the extension, if any). Sgl elements are output one per  line,  with  a
464       comma  separating the LBA and the NUM. Index arrays are output one ele‐
465       ment (an index) per line. The --hex option controls the form  of  those
466       numbers  output. If --hex is not given, the numbers are output in deci‐
467       mal. If the --hex option is given one the number are output in hex with
468       a  "0x"  prefix. If the --hex option is given twice then the line 'HEX'
469       is written to the file before any numbers and those numbers are in  hex
470       without any adornment (i.e. with no leading "0x").
471
472       If  the  --document  option  is given then some information including a
473       date timestamp of generation is placed as comments at the beginning  of
474       files that are written out by this utility. If the --document option is
475       given twice then the invocation line of this utility  that  caused  the
476       output is placed in the written file as an additional comment.
477
478       The  written  file  format is compatible with the read file format. So,
479       for example, a sgl generated by a invocation of this utility can  later
480       be used as a file to be read by another invocation of this utility.
481

EXIT STATUS

483       The  exit status of ddpt_sgl is 0 when it is successful. Note that some
484       options and actions that return a boolean value return 0 for  true  and
485       36 for false. Otherwise the exit status for this utility is the same as
486       that for ddpt. See the EXIT STATUS section in the ddpt man page.
487

EXAMPLES

489       Examples are needed. See testing/test_sgl.sh script  in  this  package.
490       That  script  can  be  run without root permissions and places its work
491       file (sgl_s) in the /tmp directory.
492

AUTHORS

494       Written by Douglas Gilbert.
495

REPORTING BUGS

497       Report bugs to <dgilbert at interlog dot com>.
498
500       Copyright © 2020-2021 Douglas Gilbert
501       This software is distributed under a FreeBSD license. There is NO  war‐
502       ranty;  not  even  for MERCHANTABILITY or FITNESS FOR A PARTICULAR PUR‐
503       POSE.
504

SEE ALSO

506       ddpt(8), ddptctl(8)
507
508
509
510ddpt-0.97                         April 2021                       DDPT_SGL(8)
Impressum