lha, etc.: Minor changes to error handling, etc.
[deark.git] / readme.md
blob002335704eb1bcc7ffc014de5ca78ff288885009
1 # Deark #
3 Deark is a command-line utility that can decode certain types of files, and
4 either:
6 1. convert them to a more-modern or more-readable format; or
7 2. extract embedded files from them
9 The files it writes are usually named "output.*".
11 This program is still being developed, and its features are subject to change
12 without notice.
14 For additional information, see the [technical.md](technical.md) file.
16 ## Usage ##
18     deark [options] [-file] <input-file> [options]
19     deark <-h|-version|-modules>
21 Command-line options:
22 <pre>
23 -m &lt;module>
24    The "module" to use to process the input file. The default is to autodetect.
25    A module may represent one file format, or a group of related formats, or
26    may have some special purpose.
27    See formats.txt for a list of modules. You usually don't need to use -m,
28    unless the format can't be detected, or you want to use a special-purpose
29    module such as "copy". See also the -onlydetect option.
31    Don't extract, but list the files that would be extracted.
32    This option is not necessarily very efficient. Deark will still go through
33    all the motions of extracting the files, but will not actually write them.
34 -main
35    Extract only "primary" files (e.g. not thumbnail images).
36 -aux
37    Extract only "auxiliary" files, such as thumbnail images.
38 -a, -extractall
39    Extract more data than usual, including things that are rarely of interest,
40    such as comments. See also the "-opt extract..." options.
41    Note that, as a general rule, Deark doesn't extract the same data twice.
42    In rare cases, the -a option can actually *prevent* it from extracting
43    certain data, because it may now, for example, extract a block of Exif
44    data, instead of drilling down and extracting the thumbnail image within
45    it.
46 -o &lt;name>
47    Output filenames begin with this string. This can include a directory
48    path. Default is "output", except in some cases when using -zip/-tar.
49 -k, -k2, -k3
50    "Keep" the input filename, and use it as the initial part of the output
51    filename(s). Incompatible with -o.
52    -k: Use only the base filename.
53    -k2: Use the full path, but not as an actual path.
54    -k3: Use the full path, as-is.
55 -od &lt;directory>
56    The directory in which to write output files. The directory must exist.
57    This affects only files that Deark writes directly, not e.g. the names of
58    ZIP member files when using -zip.
60    Do not overwrite existing output files.
61 -file &lt;input-file>
62    This is an alternate syntax for specifying the primary input file. It works
63    even if the filename begins with "-".
64 -file2 &lt;file>
65    Some formats are composed of more than one file. In some cases, you can
66    use the -file2 option to specify the secondary file. Refer to the
67    formats.txt file for details.
68 -zip
69    Write output files to a .zip file, instead of to individual files.
70    If the input format is an "archive" format (e.g. "ar" or "zoo"), then
71    by default, the filenames in the ZIP archive might not include the usual
72    "output.NNN" prefix.
73 -tar
74    Write output files to a .tar file, instead of to individual files.
75    Similar to -zip, but may work better with large files.
76    The -tostdout option is not currently supported when using -tar.
77 -arcfn &lt;filename>
78    When using -zip/-tar, use this name for the output file. Default is
79    "output.zip" or "output.tar".
80 -ka, -ka2, -ka3
81    When uzing -zip/-tar, "keep" the input filename, and use it as the initial
82    part of the archive output filename. A suitable filename extenson like
83    ".zip" will be appended. Incompatible with -arcfn.
84    -ka: Use only the base filename.
85    -ka2: Use the full path, but not as an actual path.
86    -ka3: Use the full path, as-is.
87 -extrlist &lt;filename>
88    Also create a text file containing a list of the names of the extracted
89    files. Format is UTF-8, no BOM, LF terminators. To append to the file
90    instead of overwriting, use with "-opt extrlist:append".
91 -tostdout
92    Write the output file(s) to the standard output stream (stdout).
93    It is recommended to put -tostdout early on the command line. The
94    -msgstostderr option is enabled automatically.
95    If used with -zip: Write the ZIP file to standard output.
96    Otherwise: The "-maxfiles 1" option is enabled automatically. Including the
97    -main option is recommended.
98 -fromstdin
99    Read the input file from the standard input stream (stdin).
100    If you use -fromstdin, supplying an input filename is optional. If it is
101    supplied, the file will not be read (and need not exist), but the name
102    might be used to help guess the file format.
103    This option might not be very efficient, and might not work with extremely
104    large files.
105 -start &lt;n>
106    Pretend that the input file starts at byte offset &lt;n>.
107 -size &lt;n>
108    Pretend that the input file contains only (up to) &lt;n> bytes.
109 -firstfile &lt;n>
110    Don't extract the first &lt;n> files found.
111 -maxfiles &lt;n>
112    Extract at most &lt;n> files.
113 -get &lt;n>
114    Extract only the file identifed by &lt;n>. The first file is 0.
115    Equivalent to "-firstfile &lt;n> -maxfiles 1".
116    To unconditionally show the file identifiers, use "-l -opt list:fileid".
117 -maxfilesize &lt;n>
118    Do not write a file larger than &lt;n> bytes. The default is 10 GiB.
119    This is an "emergency brake". If the limit is exceeded, Deark will stop all
120    processing.
121    This setting is for physical output files, so if you use -zip/-tar, it
122    applies to the ZIP/tar file, not to the individual member files.
123    This option implicitly increases the -maxtotalsize setting to be at least
124    &lt;n>.
125 -maxtotalsize &lt;n>
126    Do not write files totaling more than about &lt;n> bytes. The default is
127    15 GiB.
128    Currently, this feature is not implemented very precisely. The limit is only
129    checked when an output file is completed.
130 -maxdim &lt;n>
131    Allow image dimensions up to &lt;n> pixels.
132    By default, Deark refuses to generate images with a dimension larger than
133    10000 pixels. You can use -maxdim to decrease or increase the limit.
134    Increase the limit at your own risk. Deark does not generate large images
135    efficiently. In practice, a large dimension will only work if the other
136    dimension is very small.
137 -padpix
138    Include "padding" pixels/bits in the image output.
139    Some images have extra bits at the end of each row that are used for
140    alignment, and are not normally made visible.
141    This option is not implemented for all formats.
142 -nobom
143    Do not add a BOM to UTF-8 output files generated or converted by Deark. Note
144    that if a BOM already exists in the source data, it will not necessarily be
145    removed.
146 -nodens
147    Do not try to record the original aspect ratio and pixel density in output
148    image files.
149 -asciihtml
150    When generating an HTML document, use ASCII encoding instead of UTF-8. This
151    does not change how a browser will render the file; it just makes it larger
152    and very slightly more portable.
153 -nonames
154    Make Deark less likely to try to improve output filenames by using names
155    from the contents of the input file. The output filenames will be more
156    predictable, but less informative.
157 -nomodtime
158    In some cases, mainly when reading archive formats, a last-modified
159    timestamp contained in an input file will be used to set the timestamp of an
160    output file written directly to your computer (or with -zip/-tar, of a
161    member file inside that file). Use -nomodtime to disable this.
162    This does not affect internal timestamps that may be maintained when Deark
163    converts an item to some other format (such as PNG or HTML).
164 -opt &lt;module:option>=&lt;value>
165    Module-specific and feature-specific options. See formats.txt.
166    Caution: Unrecognized or misspelled options will be silently ignored.
167    Options not specific to one format:
168     -opt font:charsperrow=&lt;n>
169        The number of characters per row, when rendering a font to a bitmap
170     -opt font:tounicode=&lt;0|1>
171        [Don't] Try to translate a font's codepoints to Unicode codepoints.
172     -opt char:output=&lt;html|image>
173        The output format for character graphics (such as ANSI Art).
174     -opt char:charwidth=&lt;8|9>
175        The VGA character cell width for character graphics, when the output
176        format is "image".
177     -opt archive:subdirs=0
178        When using -zip/-tar, disallow subdirectories (the "/" character) in
179        member filenames.
180     -opt archive:zipcmprlevel=&lt;n>
181        When using -zip, the compression level to use, from 0 (none) to 9 (max).
182     -opt pngcmprlevel=&lt;n>
183        When generating a PNG file, the compression level to use, from 0 (low)
184        to 10 (max).
185     -opt archive:timestamp=&lt;n>
186     -opt archive:repro
187        Make the -zip/-tar output reproducible, by not including modification
188        times that are not contained in the source file. (That is, don't use the
189        current time, or the source file's timestamp.) If you use "repro", the
190        times will be set to some arbitrary value. If you use "timestamp", the
191        times will be set to the value you supply, in Unix time format (the
192        number of seconds since the beginning of 1970).
193     -opt keepdirentries=&lt;0|1>
194        Select whether an archive file's directory entries are ignored (0), or
195        "extracted" (1). For details, see the technical.md file.
196     -opt list:fileid=&lt;0|1>
197        Select whether the -l (list) option also prints the numeric file
198        identifiers.
199     -opt extrlist:append
200        Affects the -extrlist option.
201     -opt extractexif[=0]
202     -opt extract8bim
203     -opt extractiptc[=0]
204     -opt extractplist
205        Extract the specified type of data to a file, instead of decoding it.
206        For more about the ".8bimtiff" and ".iptctiff" formats, see the
207        technical.md file.
208     -opt atari:palbits=&lt;9|12|15>
209        For some Atari image formats, the number of significant bits per
210        palette color. The default is to autodetect.
211     -opt macrsrc=&lt;raw|as|ad|mbin>
212        The preferred way to extract Macintosh resource forks, and data files
213        associated with a non-empty resource fork.
214         raw = Write the raw resource fork to a separate .rsrc file.
215         ad = Put the resource fork in an AppleDouble container (default).
216         as = Put both forks in an AppleSingle container.
217         mbin = Put both forks in a MacBinary container.
218        For input files already in AppleDouble or AppleSingle format, see the
219        formats.txt file for more information.
221    Stop after the format identification phase. This can be used to show what
222    module Deark will run, without actually running it.
223 -h, -?, -help:
224    Print the help message.
225    Use with -m to get help for a specific module. Use with a filename to get
226    help for the detected format of that file. Note that most modules have no
227    module-specific help to speak of.
228 -version
229    Print the version number, and other version information.
230 -modules
231    Print the names of the available modules.
232    With -a, list all modules, including internal modules, and modules that
233    don't work.
234 -noinfo
235    Suppress informational messages.
236 -nowarn
237    Suppress warning messages.
239    Suppress informational and warning messages.
240 -d, -d2, -d3
241    Print technical and debugging information. -d2 and -d3 are more verbose.
242 -dprefix &lt;msg>
243    Start each line printed by -d with this prefix. Default is "DEBUG: ".
244 -colormode &lt;none|auto|ansi|ansi24|winconsole>
245    Control whether Deark uses color and similar features in its debug output.
246    Currently, this is mainly used to highlight unprintable characters, and
247    preview color palettes (usually requires -d2).
248    none: No color (default).
249    ansi: Use ANSI codes, but not the less-standard ones for 24-bit color.
250    ansi24: Use ANSI codes, including codes for 24-bit color. Works on most
251      Linux terminals, and on sufficiently new versions of Windows 10.
252    winconsole: Use Windows console commands. Works on all versions of Windows,
253      but does not support 24-bit color.
254    auto: Request color. Let Deark decide how to do it.
255 -color
256    Same as "-colormode auto".
257 -enc &lt;ascii|oem>
258    Set the encoding of the messages that are printed to the console. This does
259    not affect the extracted data files.
260    The default is to use Unicode (UTF-8, when the encoding is relevant).
261    ascii: Use ASCII characters only.
262    oem: [Windows only; has no effect on other platforms] Use the "OEM"
263      character set. This may be useful when paging the output with "|more".
264 -nochcp
265    [Windows only] Never change the console OEM code page (to UTF-8).
266    For technical reasons, Deark sometimes changes the code page of the Windows
267    console it is running in, when its output is going to a pipe or file.
268 -inenc &lt;ascii|utf8|latin1|latin2|cp437|windows874|windows1250|windows1251|
269      windows1252|windows1253|windows1254|macroman|palm|riscos|atarist>
270    Supply a hint as to the encoding of the text contained in the input file.
271    This option is not supported by all formats, and may be ignored if the
272    encoding can be reliably determined by other means. Admittedly, it would be
273    nice if Deark knew more encodings than this.
274 -intz &lt;offset>
275    Supply a hint as to the time zone used by timestamps contained in the input
276    file.
277    Many file formats unfortunately contain timestamps in "local time", with no
278    information about their time zone. In such cases, the supplied -intz offset
279    will be used to convert the timestamp to UTC.
280    The "offset" parameter is in hours east of UTC. For example, New York City
281    is -5.0, or -4.0 when Daylight Saving Time is in effect.
282    This option does not respect Daylight Saving Time. It cannot deal with the
283    case where some of the timestamps in a file are in DST, and others are not.
284 -msgstostderr
285    Print all messages to stderr, instead of stdout. This option should be
286    placed early on the command line, as it might not affect messages
287    related to options that appear before it.
288 -nodetect &lt;module1,module2,...>
289 -onlydetect &lt;module1,module2,...>
290    Disable autodetection of the formats in the list (or for -onlydetect, the
291    formats *not* in the list).
292 -disablemods &lt;module1,module2,...>
293 -onlymods &lt;module1,module2,...>
294    Completely disable the main functionality, and the autodetection
295    functionality, of the modules in the list (or for -onlymods, the modules
296    *not* in the list). This can have unexpected side effects, because modules
297    often use other modules internally. These options exist mainly to help
298    address potential security-related concerns in some workflows.
299 -modcodes &lt;codes>
300    Run the module in a non-default "mode".
301    The existence of this option (though not its details) is documented in the
302    interest of transparency, but it is mainly for developers, and to make it
303    possible to do things whose usefulness was not anticipated.
304 </pre>
306 ## Exit status ##
308 Deark sets the exit status to nonzero only if it wasn't able to do its job,
309 e.g. due to a read or write failure. A malformed input file usually does not
310 cause such an error, and the exit status will be zero even if an error message
311 was printed.
313 However, all fatal errors result in a nonzero exit status, and in extreme cases
314 it is possible for the input file to cause a fatal error, due to certain
315 resource limits being exceeded.
317 ## Terms of use ##
319 Starting with version 1.4.x, Deark is distributed under an MIT-style license.
320 See the [COPYING](COPYING) file for the license text.
322 The main Deark license does not necessarily apply to the code in the "foreign"
323 subdirectory. Each file there may have its own licensing terms. In particular:
325 uncompface.h: Copyright (c) James Ashton - Sydney University - June 1990
326 (See the file foreign/readme-compface.txt for details.)
328 By necessity, Deark contains knowledge about how to decode various
329 third-party file formats. This knowledge includes data structures,
330 algorithms, tables, color palettes, etc. The author(s) of Deark make no
331 intellectual property claims to this essential knowledge, but they cannot
332 guarantee that no one else will attempt to do so.
334 Deark contains VGA and CGA bitmapped fonts, which have no known copyright
335 claims.
337 Be particularly wary of relying on Deark to decode archive and compression
338 formats (tar, ar, gzip, cpio, ...). For example, to decode tar format, you
339 really should use a battle-hardened application like GNU Tar, not Deark.
340 Deark's support for such formats is often incomplete, and it does not always
341 do integrity checking.
343 ## Feedback and contributions ##
345 (As of 2020-09.) Suggestions and bug reports are welcome. This can be done by
346 opening a GitHub issue, or by email. If you prefer to do it in the form of a
347 GitHub "pull request", that's fine too, but as a general rule, such requests
348 won't be merged directly.
350 Deark is not really a collaborative project at this time. Unsolicited
351 contributions of more than a few lines of code are unlikely to be accepted.
352 It's okay to offer them, but please don't do a lot of work with the
353 expectation that it will be accepted.
355 Any code copyrighted by someone other than the main Deark developer(s) is only
356 allowed in the "foreign" section of the project. Pointers to existing open
357 source format decoders, that might be useful in Deark, are welcome. However,
358 most such code will be rejected for one reason or another (incompatible
359 license, too large, too trivial, etc.).
361 ## How to build ##
363 See the [technical.md](technical.md) file.
365 ## Acknowledgements ##
367 Thanks to Rich Geldreich for the miniz library.
369 Thanks to James Ashton for much of the code used by the X-Face format decoder.
371 Thanks to Mark Adler for the ZIP "implode" decompression code.
373 Thanks to countless others who have documented the supported file formats.
375 ## Authors ##
377 Written by Jason Summers, 2014-2020.<br>
378 Copyright &copy; 2016-2020 Jason Summers<br>
379 [https://entropymine.com/deark/](https://entropymine.com/deark/)<br>
380 [https://github.com/jsummers/deark](https://github.com/jsummers/deark)