# History of changes for DeuTex

DeuTex 4.4.0 (AYM 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.

  - Game: 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.

  - Game: 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/`.

  - Game: 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.

  - Misc: got rid of the "don't bother Olivier" banner. People must have got the message by now.

DeuTex 4.3.0 (AYM 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 :

    > 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.

  - Misc: bumped version number and cleaned things up for public release.

  - Misc: 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.

DeuTex 4.2.2 (AYM 1999-11-20) (not for public consumption)

  - 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.

DeuTex 4.2.1 (AYM 1999-11-16) (not for public consumption)

  - CLI: 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 me decide which index should be used to store the transparent colour for Hexen.

  - Misc: made certain failure messages more informative.

  - Misc: made printing of lump names garbage-proof.

  - Platform: fixed a huge DOS bug that made DeuTex fail with a "`Can't read WAD`" error whenever it had to read more than 65535 bytes from a wad at once.

  - Platform: 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.

DeuTex 4.2.0 (AYM 1999-11-14)

  - Doc: fixed error in documentation of `-pkgfx`, `-pknormal` and `-usedtex`.

  - Game: 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.

DeuTex 4.1.0 (AYM 1999-11-01)

  - CLI: new options `-sneas`, `-sneaps` and `-sneats`.

  - Code: removed all occurrences of "`huge`" on the theory that, on platforms where it's meaningful, we always use the huge memory model anyway.

  - Code: replaced certain occurrences of "`Int32`" by "`iolen_t`".

  - Code: 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 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.

  - Misc: cosmetic changes in the generated `wadinfo.txt` and in the phase messages.

  - Misc: no more messages "`Creating PWAD`" and "`WAD is complete...`" during level extraction.

  - Misc: set a limit of 10 warnings per picture, to prevent invalid pictures from uselessly flooding the output.

DeuTex 4.0.3 (AYM 1999-10-02)

  - CLI: 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.

DeuTex 4.0.2 (AYM 1999-09-19)

  - CLI: 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`)

    Use those options where you would have used `-doom` and friends. For example, to extract the contents of the Doom 0.4 iwad that is in `c:\doom0_4`, type "`deutex -doom04 c:\doom0_4 -xtract`".

  - 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 pre-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 use just `-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.

DeuTex 4.0.1 (AYM 1999-09-10)

  - CLI: 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.

  - Code: 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 configured 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.

  - Code: added to the distribution archive `gifcodec.c` that I had forgotten to include (it's not used anyway).

  - Code: 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.

  - Doc: made more legal updates.

  - Doc: 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.

  - Misc: 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).

  - Platform: now compiles on DOS with Borland C++ 4.0.

  - Platform: 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).

  - Platform: in response to Udo's remarks, DJGPP and Cygwin are now properly identified (`__DJGPP__` and `__CYGWIN__`).

  - Platform: added sanity checks on specified-size types `Int32` and friends.

DeuTex 4.0.0a3 (AYM 1999-09-05)

  - Code: removed incongruous `#define`-ing of `O_BINARY` and `SEEK_SET`.

  - Code: 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)`

  - Doc: updated `making.txt`.

  - 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`).

  - Makefile: `clean` now removes the DOS executables if they exist.

  - Makefile: does not compile with debug information in by default anymore.

  - Makefile: new targets `dall`, `ddt`, `dds`, `ddeutex` and `ddeusf` for compiling with debug information and all warnings.

  - Makefile: new target `help`.

  - Makefile: new target `distdos`.

  - Platform: replaced `unlink()` by `remove()` for portability. Thanks to Udo for reporting this.

  - Platform: 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`.

DeuTex 4.0.0a2 (AYM 1999-08-14)

  - Game: easier to use with Strife (now looks for "`strife1.wad`", new option "`-strife`").

  - Game: easier to use with Hexen (new option "`-hexen`").

  - Command line: new options "`-hexen`" and "`-strife`".

  - Command line: 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.

DeuTex 4.0.0a1 (AYM 1999-08-12)

  - General: fixed many segfaults that were caused by attempts to `fclose (NULL)`.

  - Game: Strife is now supported.

  - 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.

  - Wad: made "`%`" legal in names, to deal with Strife's "`INVFONG%`" and "`INVFONY%`".

  - Wad, 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).

  - Graphics: 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.

  - Graphics: now supports pictures and textures up to 509 high (was limited to 128).

  - Graphics: now supports pictures and textures up to 1024 wide (was limited to 512).

  - Graphics: 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, platform: 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.

  - Command line: not case insensitive anymore.

  - Command line: changed the wording of error messages to use "option" instead of "command".

  - Command line: 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.

  - Doc: the version number is now a free-form string.

  - Doc: Made on-line help more compact.

  - Doc: updated "`making.txt`".

  - Doc: made a proper `README` file.

  - Makefile: renamed "`unix`" target as "`strip`".

  - Makefile: new target "`install`".

  - Makefile: 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`.