xz/dos
Lasse Collin c21983c760 Build: Add string_conversion.c to CMake, DOS, and VS files. 2022-11-30 17:50:17 +02:00
..
INSTALL.txt DOS: Update instructions in dos/INSTALL.txt. 2020-03-11 19:36:07 +02:00
Makefile Build: Add string_conversion.c to CMake, DOS, and VS files. 2022-11-30 17:50:17 +02:00
README.txt DOS: Update the docs and include notes about 8.3 filenames. 2011-04-10 14:58:10 +03:00
config.h DOS: Update Makefile and config.h to include ARM64 and .lz support. 2022-11-09 14:57:48 +02:00

README.txt

XZ Utils on DOS
===============

DOS-specific filename handling

    xz detects at runtime if long filename (LFN) support is
    available and will use it by default. It can be disabled by
    setting an environment variable:

        set lfn=n

    When xz is in LFN mode, it behaves pretty much the same as it
    does on other operating systems. Examples:

        xz foo.tar          -> foo.tar.xz
        xz -d foo.tar.xz    -> foo.tar

        xz -F lzma foo.tar  -> foo.tar.lzma
        xz -d foo.tar.lzma  -> foo.tar

    When LFN support isn't available or it is disabled with LFN=n
    environment setting, xz works in short filename (SFN) mode. This
    affects filename suffix handling when compressing.

    When compressing to the .xz format in SFN mode:

      - Files without an extension get .xz just like on LFN systems.

      - *.tar files become *.txz (shorthand for *.tar.xz). *.txz
        is recognized by xz on all supported operating systems.
        (Try to avoid confusing this with gzipped .txt files.)

      - Files with 1-3 character extension have their extension modified
        so that the last character is a dash ("-"). If the extension
        is already three characters, the last character is lost. The
        resulting *.?- or *.??- filename is recognized in LFN mode, but
        it isn't recognized by xz on other operating systems.

    Examples:

        xz foo              -> foo.xz     |   xz -d foo.xz    -> foo
        xz foo.tar          -> foo.txz    |   xz -d foo.txz   -> foo.tar
        xz foo.c            -> foo.c-     |   xz -d foo.c-    -> foo.c
        xz read.me          -> read.me-   |   xz -d read.me-  -> read.me
        xz foo.txt          -> foo.tx-    |   xz -d foo.tx-   -> foo.tx   !

    Note that in the last example above, the third character of the
    filename extension is lost.

    When compressing to the legacy .lzma format in SFN mode:

      - *.tar files become *.tlz (shorthand for *.tar.lzma). *.tlz
        is recognized by xz on all supported operating systems.

      - Other files become *.lzm. The original filename extension
        is lost. *.lzm is recognized also in LFN mode, but it is not
        recognized by xz on other operating systems.

    Examples:

        xz -F lzma foo      -> foo.lzm    |   xz -d foo.lzm   -> foo
        xz -F lzma foo.tar  -> foo.tlz    |   xz -d foo.tlz   -> foo.tar
        xz -F lzma foo.c    -> foo.lzm    |   xz -d foo.lzm   -> foo      !
        xz -F lzma read.me  -> read.lzm   |   xz -d read.lzm  -> read     !
        xz -F lzma foo.txt  -> foo.lzm    |   xz -d foo.lzm   -> foo      !

    When compressing with a custom suffix (-S .SUF, --suffix=.SUF) to
    any file format:

      - If the suffix begins with a dot, the filename extension is
        replaced with the new suffix. The original extension is lost.

      - If the suffix doesn't begin with a dot and the filename has no
        extension and the filename given on the command line doesn't
        have a dot at the end, the custom suffix is appended just like
        on LFN systems.

      - If the suffix doesn't begin with a dot and the filename has
        an extension (or an extension-less filename is given with a dot
        at the end), the last 1-3 characters of the filename extension
        may get overwritten to fit the given custom suffix.

    Examples:

        xz -S x foo        -> foox      |  xz -dS x foox      -> foo
        xz -S x foo.       -> foo.x     |  xz -dS x foo.x     -> foo
        xz -S .x foo       -> foo.x     |  xz -dS .x foo.x    -> foo
        xz -S .x foo.      -> foo.x     |  xz -dS .x foo.x    -> foo
        xz -S x.y foo      -> foox.y    |  xz -dS x.y foox.y  -> foo
        xz -S .a foo.c     -> foo.a     |  xz -dS .a foo.a    -> foo      !
        xz -S a  foo.c     -> foo.ca    |  xz -dS a foo.ca    -> foo.c
        xz -S ab foo.c     -> foo.cab   |  xz -dS ab foo.cab  -> foo.c
        xz -S ab read.me   -> read.mab  |  xz -dS ab read.mab -> read.m   !
        xz -S ab foo.txt   -> foo.tab   |  xz -dS ab foo.tab  -> foo.t    !
        xz -S abc foo.txt  -> foo.abc   |  xz -dS abc foo.abc -> foo      !

    When decompressing, the suffix handling in SFN mode is the same as
    in LFN mode. The DOS-specific filenames *.lzm, *.?-, and *.??- are
    recognized also in LFN mode.

    xz handles certain uncommon situations safely:

      - If the generated output filename refers to the same file as
        the input file, xz detects this and refuses to compress or
        decompress the input file even if --force is used. This can
        happen when giving an overlong filename in SFN mode. E.g.
        "xz -S x foo.texinfo" would try to write to foo.tex which on
        SFN system is the same file as foo.texinfo.

      - If the generated output filename is a special file like "con"
        or "prn", xz detects this and refuses to compress or decompress
        the input file even if --force is used.


Bugs

    xz doesn't necessarily work in Dosbox. It should work in DOSEMU.

    Pressing Ctrl-c or Ctrl-Break won't remove the incomplete target file
    when running under Windows XP Command Prompt (something goes wrong
    with SIGINT handling). It works correctly under Windows 95/98/98SE/ME.