DeuTex release notes
====================

5.2.1 (2019-08-10)
------------------

Build systems
-------------
  * `./configure` was broken in 5.2.0 for systems without AsciiDoc
    installed.  It now properly checks for a2x conditionally along
    with the possible `--disable-man` parameter.

5.2.0 (2019-06-23)
------------------

Graphics
~~~~~~~~
  * DeuTex supports textures in TX_START and TX_END markers.  These
    are used by certain editors/engines for textures, with support for
    storing PNG and JPEG files directly in the WAD.  Extraction is
    likewise handled for all formats.

Build systems and code standards
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  * Instances of `== true` and `!= false` were simplified to more
    idiomatic C, such as `if (cond)` and `if (!cond)`.
  * Manual page generation can be disabled, even if `a2x` is
    available, by using `./configure --disable-man`.  This feature may
    be useful for penguin distributions.

5.1.2 (2018-08-12)
------------------

General
~~~~~~~
  * `--help` no longer causes a segfault (thanks andwj).

5.1.1 (2018-01-08)
------------------

General
~~~~~~~
  * The texture name array was fixed so the maximum possible string
    size is now supported.
  * Some warnings and errors with old versions of pkg-config and gcc
    have been fixed.
  * Aliasing errors have been resolved, which caused crashes on some
    architectures, such as sparc64.
  * DeuTex can now build WADs with an arbitrary number of lumps, but
    prints a warning when more than 4046 are included (the Vanilla
    Doom limit).

5.1.0 (2017-08-11)
------------------

General
~~~~~~~
  * The `-overwrite` option now works.
  * Levels are extracted/inserted in a way to preserve GL nodes.
  * Inserting pictures with a height of 1 pixel no longer causes a
    malloc error, and allows the operation of rebuilding a _Doom_ 1 or
    2 IWAD.
  * texture lump file names can now be overridden.

Graphics
~~~~~~~~
  * DeuTex supports reading and writing sprite offsets based on PNG
    +grAb+ chunks in a manner compatible with SLADE and ZDoom.
    +wadinfo.txt+ overrides these offsets unless `-pngoffsets` is
    used.

5.0.0 (2017-07-31)
------------------

Removed features
~~~~~~~~~~~~~~~~
  * DeuSF.
  * `-man` troff format generation.
  * WinTex options.
  * `-fullsnd`: now the only mode.
  * MS-DOS and OS/2 compatibility.
  * Incomplete (and conditioned out) Rise of the Triad support.

File format support
~~~~~~~~~~~~~~~~~~~
  * PNG support added, creating an optional dependency on libpng 1.6.
    If compiled in, it is the default extraction format, PPM
    otherwise.
  * Au and VOC sound formats removed.  WAV is the only supported
    format for extraction and creation.
  * Full sound lumps from the WAD are always extracted.
  * MIDI files can be included just by being named *.mid, and are
    extracted to the same file name extension.

General
~~~~~~~
  * Log file support has been removed, in favor of the user doing a
    shell redirection (eg, with `>` or `2>`) instead.
  * Arch-vile sprites are now extracted and inserted using literal
    names for sprites with the `[` and `]` characters in names
    (illegal file name characters on DOS, but not current Windows
    systems), and sprite names with `\` are now altered to use `^`
    on-disk, matching the ZDoom PK3 standard.
  * Graphics with a height > 128 are now inserted into Doom WAD files
    correctly.
  * UDMF (Universal Doom Map Format) support.

Build systems, code standards
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  * Real Autoconf+Automake build system to replace the
    barely-functioning imitation one.  `./configure`, `make`, and
    related environment variables work as should be expected.
  * MS-DOS and OS/2 batch files removed.
  * A `malloc.h` include was removed to allow compilation on Mac OS X,
    and is not needed by current Unix systems in general.
  * Thousands of lines of code deleted and the entire tree reformated
    (primarily by using `indent -kr`, followed up by manual
    touch-ups).  Several unused files, functions, and commented out
    code removed.
  * C99-style cleanups to use (`u`)`intN_t` types, `bool`, `true`,
    `false` throughout the code, replacing old defines.
  * AsciiDoc now used for documentation, and building the manpage
    requires it to be installed.

4.4.902 (2005-08-31)
--------------------

Build
~~~~~
  * Vanilla `make` compatibility: removed all occurrences of `$<` not in
    inference rules in the makefile.
  * Vanilla `make` compatibility: removed all `\` followed by empty
    lines.  On NCR MP-RAS, `make` quotes all empty lines that follow!
  * There is now a `./configure` script (GNU autoconf work-alike). +
    +
    Installing somewhere else than `/usr/local` is now done by giving
    `./configure` the `--prefix` option. +
    +
    `CC`, `CFLAGS` and `LDFLAGS` are now auto-detected.  The defaults
    can be overridden by passing `./configure` the `--cc`, `--cflags`
    and `--ldflags` options. +
    +
    The fixed-size types (`Int16` etc.) are now correctly set on all
    LP64 platforms, not just Alpha.
  * The OPTIONS section is now updated automatically.  This impacts
    no-one but hackers.

Code
~~~~
  * two `char[8]` were used as `char[9]` (caught by NCR/MetaWare `cc` on
    NCR MP-RAS).
  * C89 compatibility: removed a few `//` comments that had slipped into
    the source.
  * A few functions were declared as `static` but defined as `extern`
    (caught by NCR/MetaWare `cc` on NCR MP-RAS).
  * `static`- and `const`-correctness fixes.
  * Removed the little-used `Legal()` function.

Doc
~~~
  * Man page: in DESCRIPTION, added a short list of examples to help new
    users getting started.  Added a FILES section.  Made the SEE ALSO
    section a bit more specific.
  * In `--help` and the man page, divided the options into groups and
    sorted them alphabetically within each group.  It seems to be
    clearer that way.
  * Added a FAQ.
  * Obfuscated all email addresses (`tr .@ +=`).

_Strife_
~~~~~~~~
The `SCRIPTnn` lumps are now extracted in human-readable form into the
`scripts/` directory.  The reverse operation is not implemented.  Since
we understand the Strife script format only partially, the output format
is still in flux.  New option `-scripts` to extract only the scripts.
The reverse engineering was done in collaboration with
Matthew W. Miller.

Graphics
~~~~~~~~
  * It’s now possible to build wads that use a custom `PLAYPAL`.
    Previously, DeuTex always used the PLAYPAL from the iwad when
    building. It now uses the one in `lumps/` if it exists.  Thanks to
    Ras2 for reporting the problem.
  * Rewrote `COLdiff()` as a macro.  On my system, the time to build a
    wad made of a single 1M-pixel patch is down from 1.32s to 0.85s (35%
    faster), which is not surprising since DeuTex used to spend about
    40% of its time in `COLdiff()`.  The time to rebuild the _Strife_
    iwad is down from 8.6s to 7.2s (16% faster).
  * Removed the “quantisation is slow” warnings that DeuTex used to spew
    when composing from PPMs and 24-bit BMPs.  Those warnings were
    relevant to an old quantisation algorithm that has not been used
    since at least version 3.8 (`#ifdef QUANTSLOW`).
  * Lifted the arbitrary limit of 256 patches per texture.  DeuTex will
    now accept as many patches as the wad format allows (32,767).  If a
    texture definition has more than that many patches, DeuTex will
    discard the excess patches with a warning, instead of dying with a
    cryptic message like `Line n: Illegal char '*'`.
  * Lifted the arbitrary limit of 4096 on patch width.  DeuTex now
    handles patches as wide as the wad format allows (32,767).
  * Textures wider than 4096 are now accepted with a warning.  PrBoom
    2.2.3 is known to take textures as wide as 16,384 pixels.  8192×128
    textures make XDoom 20001001 crash in `Z_Malloc`.  1024×128 textures
    make Doom freeze in `R_Init`.  The maximum acceptable widths might
    be higher if the height of the texture is lesser than 128 but I
    haven’t looked into it.  Thanks to David Damerell for testing.

Misc
~~~~
  * Removed the annoying startup banner.
  * If no command is given, emit a meaningful error message instead of
    suggesting to switch to WinTex.  And exit with code 1 instead
    of 255.
  * All messages now look like this: +
    +
        _c code string_ +
    +
    _c_ is the class of the message: *i* for information, *w* for
    warning, *E* for error, *B* for bug. +
    +
    _code_ is a unique 4-character alphanumeric code which unambiguously
    identifies the message. +
    +
    Some of the messages have been rewritten to be more informative
    (mention the filename, the nature of the error, etc.).
  * At the request of Kim “Sparky” Parrott, all messages are now copied
    to a file named `deutex.log` (`deusf.log` for DeuSF).  The default
    log file name can be overridden through the `-log` option.  If you
    don’t want a log file, try `-log /dev/null` (Unix) or `-log nul`
    (DOS). +
    +
    The log is only written if a command that works with wads is
    given. `--help`, `--version` etc. do not create a log.
  * Removed the 30 command-line arguments limit.
  * Made exit status a little bit more normal (2 for errors and 3 for
    bugs instead of -5 and -10).

Sound
~~~~~
  * New option `-rate` to specify what DeuTex should do when including
    sound files whose sample rate is not exactly 11025 Hz.  The choices
    are: +
    +
    `reject`: consider it a fatal error and exit immediately with a
    non-zero exit code. +
    `force`: emit a warning and force it to 11025 Hz by resampling up or
    down. +
    `warn`: emit a warning but include it as is anyway. +
    `accept`: silently include it as is. +
    +
    Previously, the default (and only option) used to be `force`.  It’s
    now `warn`. +
    +
    Thanks to Matthew W. Miller for telling me about this issue (which
    he did in 1999; the six-year delay is mine, all mine).
  * Write errors while extracting PC speaker sounds are now actually
    detected and reported.

4.4.0 (2000-01-05)
------------------

Game
~~~~
  * _Hexen_: musics are now identified and extracted properly. +
     +
    The old music identification code assumed that any lump whose name
    does not begin with either `D_` or `MUS_` can’t be a music.  It
    worked for _Doom_, _Heretic_ and _Strife_ but, for _Hexen_, it
    caused all musics to be seen as plain lumps and extracted
    accordingly into the `lumps/` directory.  DeuTex even tried to
    interprete `STALKR` and `WINNOWR` as pictures and said silly things
    about them having a “width greater than 4096”. +
     +
    The new code really checks whether the lump begins with `MUS\x1a`
    instead of just looking at its name.  A lump is now deemed to be a
    music if and only if it begins with `MUS\x1a`. +
     +
    As a side-effect, certain operations (appending sprites and flats
    and merging) must have become slower.  Furthermore, since these used
    to blindly assume that any lump whose name begins with either `D_`
    or `MUS_` is a music, their semantics might have changed.  If you
    find they don’t do what you want, try again using the `-musid`
    option and let me know whether it improves your condition.
  * _Hexen_, _Doom_ alpha 0.4/0.5: levels are now properly extracted and
    included. +
     +
    There have been changes in the undocumented details of DeuTex’s
    behaviour with respect to levels.  The one that is most likely to be
    noticed is that, when including a level, DeuTex now copies the
    entire contents of the `levels/` pwad, starting from the level
    label.  Previously, it included at most the 11 following lumps, and
    only if they had the expected names (`THINGS`, `VERTEXES` and so
    on). +
     +
    But, basically, if the `levels/` pwads contain, as they should, all
    the needed lumps and nothing else, there shouldn’t be any trouble.
  * _Heretic_ and _Hexen_: does not abort anymore with `Bug: *** idinx
    (12) ***` when trying to include the graphic lumps (resp. `CREDIT`,
    `E2END`, `FINAL1`, `FINAL2`, `HELP1`, `HELP2`, `TITLE` and `CREDIT`,
    `FINALE1`, `FINALE2`, `FINALE3`, `HELP1`, `HELP2`, `INTERPIC`,
    `TITLE`).  More generally, DeuTex now accepts to compose wads even
    when there are graphic files in `lumps/`.
  * _Hexen_: does not abort anymore with `Height of
    FLAT ./flats/x_001.ppm is not 64 or 65` when trying to include flats
    `X_001` through `X_011`.  In addition, DeuTex now just emits a
    warning instead of aborting for other oddball heights (i.e. not 64,
    65 or 128).  Have fun. ;-) This is true for all iwads, not only
    _Hexen_.

Graphics
~~~~~~~~
The annoying “quantisation is slow” warnings now appear at most once.

Misc
~~~~
  * To disambiguate the `<count> warnings omitted` message, added
    optional scope prefix and changed the picture extraction function to
    use it.
  * Got rid of the “don’t bother Olivier” banner. People must have got
    the message by now.

4.3.0 (1999-12-24)
------------------

Graphics
~~~~~~~~
Fixed ancient bug where DeuTex sometimes failed to include custom
patches if they were not explicitly listed in the `[patches]` section.
If the first patch used in `texture1.txt` was a custom patch, it had to
be listed in `[patches]` or DeuTex would forget to include it.  This is
the same bug Olivier mentioned in the home page:

[quote]
The support for wall patches in DeuTex has been modified.  You must now
explicitely declare all your patches in a [PATCHE] section. +
 +
If you don’t do this, DeuTex will attempt to work as usual, but there
seems to ba a bug in this part of the code, so sometime some needed
patches are not loaded.

After some summary testing, looks like it’s fixed.

Misc
~~~~
  * More error handling improvements.
  * Bumped version number and cleaned things up for public release.
  * Decreased maximum number of warnings per picture from 10 to 5.

Platform
~~~~~~~~
Fixed `ftruncate()` being undeclared when compiling with DJGPP and
updated the building-on-DOS section of the doc.

4.2.2 (1999-11-20)
------------------

Misc
~~~~
Made certain failure messages more informative.

Platform
~~~~~~~~
Fixed several bugs that showed in the DOS precompiled executables for
4.1.0 and 4.2.0 (most common symptom: DeuTex aborting with a `Can't read
WAD` error message).

Lengthy technical explanation: in 4.1.0, I removed the `huge` pointer
qualifiers that were scattered throughout the source not unlike nitrates
in groundwater.  The reasoning was that, since DeuTex is always compiled
in the `huge` memory model anyway, those qualifiers were redundant.  As
I found out at the end of a long and painful debugging session, they
weren’t.

Had I read the doc of the compiler, I would have known that, even when
in the huge memory model, pointers are `far` by default, not `huge`.
Far pointers wrap around at 64 kB; this is not what you want when you’re
trying to work with lumps larger than that.  And, apparently, there is
no way to specify that pointers should be huge by default.

On top of that, there was a genuine bug in `WADRreadBytes2()` that would
have prevented the DOS port from working, even if all pointers had been
huge.  But this one was fixed in 4.2.1.

I switched to DJGPP, with which you can get working executables without
having to contaminate your code with carcinogenic keywords.  The bad
news: firstly, the executables are somewhat larger.  Secondly, since
DJGPP executables use protected mode, they tend to be more fussy.

Thanks to Kim Parrott for reporting the bug and alpha testing my fixes.

All the above applies only to the DOS precompiled executables. Other
platforms did not have these problems.

4.2.1 (1999-11-16)
------------------

Command line
~~~~~~~~~~~~
Fixed segfault on `deutex --vers`.

Graphics
~~~~~~~~
New option `-usedidx`.  When called with this option, DeuTex scans all
the graphics in the wad and prints statistics about which palette
indices they use.  (By “graphics” is meant “any data that is converted
into an RGB triplet by looking up `PLAYPAL` or `TITLEPAL` ”.  That
includes flats, graphics, patches, sneaps, sneats and sprites.)  I’ve
added this command for my own use, to help my decide which index should
be used to store the transparent colour for _Hexen_.

Misc
~~~~
  * Made certain failure messages more informative.
  * Made printing of lump names garbage-proof.

Platform
~~~~~~~~
  * Fixed a huge DOS bug that made DeuTex fail with `Can't read WAD`
    error whenever it had to read more than 65535 bytes from a wad at
    once.
  * Flushing `stdout` before writing to `stderr` so that messages come
    out in the right order when both outputs are redirected.

Sound
~~~~~
All conditions that used to be fatal errors when extracting sound lumps
now just elicit a warning message, indicating which lump it was and what
action was taken.

4.2.0 (1999-11-14)
------------------

Doc
~~~
Fixed error in documentation of `-pkgfx`, `-pknormal` and `-usedtex`.

_Strife_
~~~~~~~~
Fixed DeuTex aborting when extracting textures for versions of _Strife_
≥ 1.1.  The problem was that _Strife_ 1.1 and above use a different
format for the `TEXTURE1` and `TEXTURE2` lumps (_Strife_ 1.0 uses the
same format as _Doom_).  New options `-tf strife11`, `-itf strife11` and
`-otf strife11` to support that format.  Option `-strife` has been
changed to imply `-tf strife11`.  New option `-strife10` that is
identical to `-strife` except that it does not imply `-tf strife11`.
Summary:

  * If you have the Strife 1.0 iwad, use `-strife10` (or `-tf normal`).
  * If you have Strife 1.1 or above, use `-strife` (or `-tf strife11`).

Thanks to Kim Parrott for reporting the bug and Len Pitre for pointing
me in the right direction.

Sound
~~~~~
Fixed two bugs in reading Sun audio (`.au`) files.  Fixes error `WAV:
can't read data of./sounds/foo.au` [sic] when trying to build a wad.
One of these bugs prevented from reading Sun audio files on
little-endian machines.  It had been there for a long time; v3.8 has it
and the v3.6 binary behaves like it had it too.  I doubt that anyone had
ever been able to use `.au` files on little-endian machines before.

4.1.0 (1999-11-01)
------------------

Command line
~~~~~~~~~~~~
New options `-sneas`, `-sneaps` and `-sneats`.

Code
~~~~
  * Replaced certain occurrences of `Int32` by `iolen_t`.
  * Replaced certain occurrences of `256` by `NCOLOURS`.

_Doom_ alpha 0.4
~~~~~~~~~~~~~~~~
`AMENA0` and `MSKUL*` are now correctly recognized as graphics and not
as lumps anymore.  The 21 graphic lumps that ended up in `lumps/` are
now properly extracted (into `sneaps/` and `sneats/`).  (The first item
involved propagating to `IDENTgraphic()` the changes made to
`PICtoRAW()` in v. 4.0.2.  The second item needed heavy hacking,
creating a new image type (christened “snea”) and managing an alternate
palette for `TITLEPAL`.)  Still extracted as lumps: `GNUM[0-9]` and
`HUFONT`.

_Doom_ alpha 0.5
~~~~~~~~~~~~~~~~
The 86 graphic lumps that ended up in `lumps/` are now properly
extracted (into `sneaps/` and `sneats/`).  Still extracted as lump:
`HUFONT`.

Graphics
~~~~~~~~
Errors that used to cause DeuTex to give up on extracting a picture now
just make it skip the rest of the column.  It also prints detailed
messages about what it didn’t like and in which picture it occurred
instead of bailing out silently.

Misc
~~~~
  * New option `-di` to debug entry identification.  Useful mainly to
    hackers.
  * Cosmetic changes in the generated `wadinfo.txt` and in the phase
    messages.
  * No more messages `Creating PWAD` and `WAD is complete...` during
    level extraction.
  * Set a limit of 10 warnings per picture, to prevent invalid pictures
    from uselessly flooding the output.

4.0.3 (1999-10-02)
------------------

Command line
~~~~~~~~~~~~
New option `-doom2` as suggested by Matthew Miller.

Graphics
~~~~~~~~
Now accepts to extract pictures as large as 4096×4096 (previously the
limit was 320×200).  This fixes `Failed to write sprite` errors when
trying to extract `PSYBA0` and `PSYBB0` from `strain.wad`.  Thanks to
Matthew miller for reporting the bug.

Misc
~~~~
Added a useful URL to the GIF warning.

Platform
~~~~~~~~
Now builds without errors on FAT filesystems (replaced `.deutex` and
`.deusf` by `tmp/_deutex` and `tmp/_deusf`).

Sound
~~~~~
Fixed a bug that caused DeuTex to extract sounds with unlikely sample
rates like 4 GHz whenever the sample rate in the lump was higher than
32767 Hz (for example `DSVILACT` and `DSVILSIT` from `ncc1701.wad`, with
a sample rate of 44.1 kHz).  Thanks to Matthew Miller for reporting
the bug.

4.0.2 (1999-09-19)
------------------

Command line
~~~~~~~~~~~~
New options

  * `-doom02` (implies `-ipf alpha`, `-itf none`, and `-itl none`)
  * `-doom04` (implies `-ipf alpha`, `-itf nameless`, and `-itl textures`)
  * `-doom05` (implies `-ipf alpha` and `-itl textures`)
  * `-doompr` (implies `ipf pr`)

Code
~~~~
Replaced certain unjustified uses of `Int32` by `long`.

Doc
~~~
Removed `old/readme.txt`.  It’s so out of date that it’s more confusing
than useful.

Game
~~~~
_Doom_ alpha and _Doom_ PR: it’s now possible to extract graphics, patches,
sprites, and textures from those iwads.  Three new options:

`-ipf {normal|pr|alpha}`::
    Use `alpha` for _Doom_ alpha 0.2, 0.4, and 0.5. +
    Use `pr` for _Doom_ PR (press release and beta). +
    Use `normal` for everything else.

`-itf {normal|nameless|none}`::
    Use `none` for _Doom_ alpha 0.2. +
    Use `nameless` for _Doom_ alpha 0.4. +
    Use `normal` for everything else, including _Doom_ alpha 0.5.

`-itl {normal|textures|none}`::
    Use `none` for _Doom_ alpha 0.2. +
    Use `textures` for _Doom_ alpha 0.4 and 0.5. +
    Use `normal` for everything else, including _Doom_ alpha 0.5.

You shouldn’t ever have to use those options directly.  It’s better to
just use `-doom02`, `-doom04`, `-doom05`, and `-doompr`, which take care
of setting ipf, itf, and itl properly for you.

Note that extracting levels and some other lumps from the _Doom_ alpha
iwads does not work yet.

Platform
~~~~~~~~
New target in the makefile to generate a binary DOS distribution with
the executables and the user documentation in DOS format, with DOS-ish
names.

4.0.1 (1999-09-10)
------------------

Command line
~~~~~~~~~~~~
Reworked the command line arguments parsing, with the following
consequences.

  * Options can now be abbreviated freely, as long as the abbreviation
    is not ambiguous.  For example, you can use `-heretic`, `-hereti`,
    `-heret`, `-here` or `-her` but not `-he` because that could also be
    the abbreviation for `-help` (or `-hexen`, for that matter). On the
    other hand, `-h` is allowed because it’s not an abbreviation
    (there’s really a `-h` option).
  * `-heretic` and `-hexen` now work (they were “hidden” by `-h[elp]`).
  * `-v@` has been split in `-v0`, `-v1` ... `-v5` because the new code
    does not allow excess characters after an option.  `-vstring` where
    string is anything else than `0` through `5` now triggers an error
    (it used to be accepted silently).  I hope no one relied on the old
    undocumented behaviour.
  * Certain silly command line arguments that would have worked before
    would now trigger an error.  For example, it used to be possible to
    type `-extramarital` or `-extermination` for `-extract` but not
    anymore. The old code defined relatively short options (-ext) and
    accepted command line arguments as long as the defined option was an
    initial substring of the command line argument. The new code does
    the reverse; it defines relatively long options (`-extract`) and
    accepts command line argument as long as they’re an initial
    substring of the defined option.

Code
~~~~
  * Replaced direct testing of `__MSDOS__`, `__OS2__`, `__GNUC__`,
    `__BORLANDC__` by `DT_CC` and `DT_OS`.  This is hopefully going to
    make Udo’s job a bit easier.
  * Now uses the same `fopen()` modes for all platforms: `{rw}b` for
    binary mode and `{rw}` for text mode, as per the ANSI/ISO C
    standard.  This will fix the problem Udo Munk reported with the
    Cygwin build opening binary files in text mode and thus failing
    miserably.  Note that certain DOS C compilers can be confused so
    that `{rw}` opens files in _binary_ mode.  Don’t do that!  If you
    have problems with text files on DOS, make sure your C compiler is
    configured so that `{rw}` opens files in _text_ mode.
  * Added to the distribution archive `gifcodec.c` that I had forgotten
    to include (it’s not used anyway).
  * Added to the distribution archive
    `src/{deusf,deusfos,deutex,deutexos}.def` that I had forgotten to
    include.  I guess that’s Windows/OS/2-only stuff.

Doc
~~~
  * Updated `making.txt` and renamed it as `INSTALL` for homogeneity.
    Removed obsolete reference to `alpha.sh` and the file itself.
  * Made more legal updates.
  * Documented `DOOMWADDIR` in the man page.

Misc
~~~~
  * Changed the default graphics format for Unix from GIF to PPM, so
    that fewer user sites are broken if and when GIF support is removed.
    For the same reason, added a warning message when `-gif` is used or
    the first time an image is read from a GIF file.
  * Changed the lookup order for images to PPM, BMP, GIF (was BMP, GIF,
    PPM).

Platform
~~~~~~~~
  * Fixed a couple of things that didn’t work on 16-bit platforms
    (real-mode DOS).
  * Now compiles on DOS with Borland C++ 4.0.
  * Now compiles on DOS with MSC 6.0. The MSC 6.0 build is functional
    but limited because it can’t allocate blocks larger than 64 kB,
    which is insufficient for certain images.  I can’t use `halloc()`
    instead of `malloc()` because it does not supporting resizing
    (i.e. there’s no `hrealloc()` function).
  * In response to Udo’s remarks, DJGPP and Cygwin are now properly
    identified (`__DJGPP__` and `__CYGWIN__`).
  * Added sanity checks on specified-size types Int32 and friends.

4.0.0a3 (1999-09-05)
--------------------

Code
~~~~
  * Removed incongruous `#define`-ing of `O_BINARY` and `SEEK_SET`.
  * After Udo Munk’s report, fixed warnings in
    ** `src/color.c(74)`
    ** `src/ident.c(583)`
    ** `src/ident.c(658)`
    ** `src/mkwad.c(78)`
    ** `src/mkwad.c(79)`
    ** `src/mkwad.c(80)`
    ** `src/mkwad.c(81)`
    ** `src/picture.c(903)`
    ** `src/picture.c(912)`

Legal
~~~~~
As agreed to by Olivier Montanuy, DeuTex is now entirely GPL’d.  Well,
_almost_ entirely, since it includes code written by different authors
in `lzw.c` and elsewhere.  Changed the notices in the source files and
added new file `LICENSE` to clarify things.

Makefile
~~~~~~~~
  * Should now work with all C compilers (removed `-Wall` from
    `CFLAGS`).
  * `clean` now removes the DOS executables if they exist.
  * Does not compile with debug information in by default anymore.
  * New targets `dall`, `ddt`, `dds`, `ddeutex` and `ddeusf` for
    compiling with debug information and all warnings.
  * New target `help`.
  * New target `distdos`.

Platform
~~~~~~~~
  * Replaced `unlink()` by `remove()` for portability.  Thanks to Udo
    for reporting this.
  * On 8.3 filesystems, `make` should not choke on `docsrc/changes.html`
    anymore.  Thanks to Udo for reporting this.

Sound
~~~~~
Corrected some misleading endianness comments in `sound.c`.

4.0.0a2 (1999-08-14)
--------------------

Game
~~~~
  * Easier to use with _Strife_ (now looks for `strife1.wad`, new option
    `-strife` ).
  * Easier to use with _Hexen_ (new option `-hexen`).

Command line
~~~~~~~~~~~~
  * New options `-hexen` and `-strife`.
  * New option `--version` (prints version number and returns 0).

Doc
~~~
Various changes in the man page, in the output of `-help` and `-man` and
elsewhere.

Makefile
~~~~~~~~
Various improvements.

Distribution
~~~~~~~~~~~~
Set modes straight.

4.0.0a1 (1999-08-12)
--------------------

General
~~~~~~~
  * Fixed many segfaults that were caused by attempts to `fclose
    (NULL)`.

Wad
~~~
  * New options `-be`, `-le`, `-ibe`, `-ile`, `-obe`, and `-ole` to
    control the endianness of the wads. *Caution*: don’t use them if
    you don’t know what you’re doing!  As far as I know, wads are
    always little-endian regardless of the architecture of the host.
    Therefore, I see no reason for someone in his/her right mind to
    create a big-endian wad.  Those options are here more for the sake
    of completeness than anything else.
  * Made `%` legal in names, to deal with _Strife_’s `INVFONG%` and
    `INVFONY%`.
  * _(Also graphics)_ End-of-flats marker is now `F_END` by default
    instead of `FF_END`.  The reason for this change is that, with
    `F_END`, you don’t need DeuSF to get _Doom_ to see your new flats.
    Should you need to, it’s still possible to get `FF_END` by using
    `-fend`.

Graphics
~~~~~~~~
  * The default transparent colour is now a dark blue-green
    (rgb:00/2f/2f).  It used to be cyan (rgb:00/ff/ff) which was
    blindingly bright, especially compared to the usually dark colours
    used in _Doom_ textures.  It’s no fun to tweak shades of dark brown
    on a cyan background. +
    +
    To reuse images done with/for a previous version of DeuTex, you
    need to either invoke DeuTex with `-rgb 0 255 255` or convert your
    images by replacing all occurrences of colour (0, 255, 255) by
    colour (0, 47, 47).  To preserve compatibility with WinTex, I
    didn’t change the default transparent colour in WinTex mode; it’s
    still (0, 255, 255).
  * Fixed segfaults due to bug in conversion of bitmap images to _Doom_
    pictures.  Occured in certain 2-pixel high images such as `STBFN045`
    in the _Strife_ iwad.
  * Now supports pictures and textures up to 509 high (was limited to
    128).
  * Now supports pictures and textures up to 1024 wide (was limited to
    512).
  * New option `-pf` to deal with the different picture format in the
    _Doom_ alpha iwad (the underlying functionality is not implemented
    yet!)
  * Graphics: using `-ppm` does not cause anymore DeuTex to abort with
    `Bug: *** psvit ***`.
  * Graphics: fixed `-ppm` message.

Sound
~~~~~
  * A bug that must have prevented reading `.wav` files on big endian
    machines has been squashed.

Command line
~~~~~~~~~~~~
  * Options can’t start with a slash (`/`) anymore. I don’t think
    anyone used it and was a silly feature for a Unix program.
  * Not case insensitive anymore.
  * Changed the wording of error messages to use “option” instead of
    “command”.
  * Added options `-?` and `--help` as synonyms for `-help`.

Doc
~~~
  * New option `-man` to print help in `troff -man` source format for
    inclusion in the man page.
  * The version number is now a free-form string.
  * Made on-line help more compact.
  * Updated `making.txt`.
  * Made a proper `README` file.

Makefile
~~~~~~~~
  * Renamed `unix` target as `strip`.
  * New target `install`.
  * New target `dist`.

Platform
~~~~~~~~
Reworked the handling of endianness.  DeuTex used to deal with that
through a set of macros that swapped bytes whenever the required
endianness was not the same as the native endianness.  To known the
native endianness, DeuTex relied on a macro defined via `-D`.

There were two problems with this scheme.  Firstly, Olivier got the
meaning of “little endian” and “big endian” backwards and defining
`LITTLE_ENDIAN` in fact caused DeuTex to believe it was being compiled
for a big endian machine.  As the glibc headers happen to define
`LITTLE_ENDIAN` if the machine is little endian, compiling DeuTex on a
glibc little endian Linux system was impossible unless you made changes
to the source.

The other, more fundamental, objection against the old approach is that,
as it needed the user to tell it about the native endianness by
modifying the makefile, it prevented unattended builds and made things
difficult for naive users.

The new method eliminates this problem by using a different algorithm
that does not need to know the native endianness.  The end result is
that you don’t have to worry about endianness anymore.

Internal
~~~~~~~~
  * In `TXTinit()`, removed useless `% 0xFF` in index of `TXTval`.
