/*
 * CHANGELOG.
 *
 *  Please do NOT harrass Ken Silverman about any code modifications
 *   (including this file) to BUILD.
 */

07112000 - Initial release from icculus.  C code compiles, doesn't link, lots
            of bastard assembly.
07122000 - LOTS of ASM cleanups by Andrew Henderson.
07132000 - Ryan adds some missing functionality: SDL equivalents for most of
            the VESA functions, filelength(), and some other piddly stuff.
07142000 - Dan Olson cleans up the code a bunch, fills in a bunch of the
            ASM routines with C equivalents, and puts some VESA replacements
            in place. Other good stuff. Ryan cleans up some, too, put some
            more stubs/implementations in place, and continues to flesh out
            the SDL driver.
07212000 - A BUTTLOAD of updates. "build" links, and segfaults, because I
            screwed up all the inline ASM that I did. Will be correcting,
            shortly. "game" doesn't link yet. Haven't looked at it in detail.
            Moved anything with i/o port calls into dos_driver.c, and put
            stub equivalents in sdl_driver.c ... The setupmouse() function got
            commented out because it was getting called before the video got
            setup, I think. Will check.  (never released.)
07272000 - Assembly in pragmas.c was borked (thanks to RYAN.), and is now
            halfway fixed. Ryan will be fixing this completely Real Soon Now.
            Other ASM may be screwey, too, if Ryan touched it, but the NASM
            code that Andrew did is probably fine (mostly because he knows
            what he's doing... :)  )
07282000 - Fixed borked ASM code. Fixed a text file reading routine that
            depended on finding DOS-style newlines. Moved some more stuff to
            sdl_driver.c and dos_driver.c ...
07292000 - Fixes in pragmas.c by Dan Olson, who also knows more about this
            inline ASM stuff than Ryan. Dan also cleaned up engine.c's ASM.
            Thanks to Dan and Ryan, game.c now compiles, albeit with a
            thousand warnings. "game" does not link yet.
07312000 - Thanks to Dan, "game" now links, other minor fixups by Ryan. Broke
            up CHANGELOG into some standard docs. (README, CREDITS, etc...)
08012000 - Andrew does some graphic porting. Looks like we've got blocks where
            fonts should be, and a mouse cursor. Huh. Ryan abstracts 0xa0000
            addresses to VIDEOBASE define. Under non-DOS platforms, this is
            currently "surface->pixels". Basic events were hooked up. Added
            FreeVGA to README. Lots of fun new segfaults.
08042000 - Ryan gets the keyboard working apparently fully, and the mouse
            sorta. The grid now draws correctly. No more segfaults on exit.
            You can zoom in and out on the grid with the 'Z' and 'A' keys.
            Fun, huh? sdl_driver's drawing routines (most notably, drawline16)
            are MUCH more robust. Some minor structure changes. Other things
            seem to work within build (space draws a line from a point to the
            mouse, etc.), but I dunno what any of this means; must find a
            BUILD HOWTO. Probably other stuff. Timer is hooked up, but SDL
            won't fire a timer faster than every 10ms, or 100 times a second.
            BUILD expects this timer to fire every 8.3~ seconds, or 120 times
            a second. This may be problematic in the game, but it probably won't
            be a problem in the BUILD editor, where it just handles keyboard
            updates. An alternate timer system might get swapped in later.
            Game still links, but aborts on initing the timer, since I need to
            sync with the editor; Ken saw it fit to commit the mortal sin of
            cut-and-paste instead of having a unified BUILD_Init() function,
            so I need to update it to the new structure (using sdl_driver or
            dos_driver, calling _platform_init(), blah blah blah...)
08052000 - Dan fixed an ASM screwup in getkensmessagecrc(). Ryan fixed the
            mouse button event code. Added event thread, and some bits of
            thread safety in sdl_driver.c. Mouse now seems to move okay if the
            X11 cursor is hidden, and we grab the input. Goes to fullscreen
            and grabs input by default; export BUILD_WINDOWED=y and
            BUILD_NO_MOUSE_GRAB=y, respectively, to disable. Got myself a
            copy of Duke3D Atomic Edition for the data files. Fixed the
            #pragma packs in build.h. Fixed _platform_init() functions.
            Improved SDL driver. Commented out a bunch of self-modifying ASM.
            Dan got the fonts to display. Ryan got the correct palette loaded.
            Lots of other little cleanups. Good stuff.
08062000 - Ryan fixed clear2dscreen() in SDL driver. It's (hopefully) correct,
            now. Also, all that missing text should (hopefully) now display.
            drawline16 is more correct now. Other little cleanups and
            move-arounds. It seems that "pageoffset" is the big enemy around
            here today. Hum.
08072000 - Ryan gets the BUILD title text to stop flickering. Prints our names
            at exit (maybe someone will want to hump OUR legs, too). Added the
            _idle() function to dos_driver and sdl_driver, and sprinkled some
            calls through overheadeditor() in build.c ... ideally, we'd
            eventually want to not have the editor wipe the surface and
            redraw everything like mad constantly, but rather wipe and draw
            as needed to choke the processor even less. Added implementation
            of getfilenames() in build.c...seems to work well enough. Got
            map loading dialog to appear (in the wrong place), but the arrow
            keys don't seem to work to test further. Added caption to window's
            title bar. Dan completely the Herculean effort of cleaning up
            EVERY compiler warning in the editor. Other tinkering.
            Adrian Neill and Christian Zander cleaned up all the compile
            warnings in game.c and multi.c. Christian also supplied a shell
            script to set the BUILD_* variables for developing. Ryan fixed
            permissions of map files in saveboard() in engine.c. game.c had a
            static variable called "sync" that conflicted with unistd.h's
            sync() function, so the static's been changed to _sync. Fixed
            more graphic stuff; pageoffset is just blindly set to zero on
            Unix, now, and that seems to fix some stuff. printext16() was
            changed to statusbar_printext16() in the appropriate places, so
            I could remove my ypos += 336 hack in the actual implementation,
            make this #define to regular printext16 on DOS, and be a one-line
            function to add 336 to ypos in Unix. sdl_key_filter now has
            support for extended keys; in init_new_res_vars(), just add keys
            with values of 0xE0** where "**" is the normal value. This allowed
            me to add the arrow keys and the keypad enter key. Tried loading
            Ken's maps, and they WORK. With today's graphic fixes and the
            arrow keys, you can select a file from the loading menu, and
            navigate around in 2D mode. Cool. Switching to 3D mode segfaults
            immediately.  :)  Changed sdl_driver to NOT double buffer, and
            the SDL_Flip() call is now a screen-wide SDL_UpdateRect(). Added
            Ken's maps for his test game to the archive.
08082000 - Added key bindings to sdl_driver: ALT-Enter (or ALT-Return) to
            toggle between windowed and fullscreen, and CTRL-G to grab/ungrab
            the mouse pointer. Increased sensitivity of mouse movement. Dan
            fixed the editor's status bar; it now draws. I think Dan also
            squashed the rest of the pageoffset annoyances in the editor.
            Dan tracked down the line drawing problem, and Ryan patched some
            ASM (clearbufbyte(), specifically), so you can add walls, now.
            Things are REALLY starting to look good.
08092000 - ASM day. Fixes and fights from Dan and Ryan, with lots of wisdom
            from Andrew. Realized that we were in violation of Ken Silverman's
            license by not updating/including his copyright header on all
            source files. This has been fixed; sorry, Ken. Other video stuff.
            Tweakage. 3D mode no longer segfaults, but is still garbage.
08112000 - Fixed a bug; ALT-Enter wasn't changing sdl_flags, so next time you
            changed resolutions, you went back to your original (non)windowed
            state. Did the same for mouse grab state. Dan converted the ASM
            for some more engine.c functions, and added a missing key to our
            SDL scancode table. Hooked up keybindings in the (still not
            functional) 3D mode. Discovered that we were missing some data
            files. More sdl_driver tinkering. Moved stuff out of dos_driver's
            _nextpage(), and back into the abstract engine.c section.
            I don't know what I changed, but the sprite and vector squares
            don't draw in the correct place anymore in engine.c's
            draw2dscreen() ... culprit is something in sdl_driver.c...someone
            diff this version against the last. Grrr. Generally, I'd fix this
            before sending out a tarball, but it's 5:00a.m., and I need to get
            something out the door here. Will fix for tommorow, and it doesn't
            otherwise impede your use.
08122000 - Turned optimizations back on, and the broken drawing from last
            night works again. Yikes. Dan stubbed out lots of the missing C
            functions in a.c (someday, we'll fill really these in, I hope.),
            and made mad progress on attacking our palette issues. Some compile
            fixes (incomplete) to allow building without SUPERBUILD defined
            (for removing voxel support...might be needed for pre-voxel games
            like Duke3D...) The self-modifying ASM passes function parameters
            in registers, so I needed to do an inline wrapper. This also now
            sits in a.c.  (Still crashes and otherwise doesn't WORK the same
            in 3D mode, but still...) Added tiles000.art to the archive from
            Duke3D shareware's duke3d.GRP file. I hope this doesn't violate
            anyone's copyrights.
08132000 - (For reference, apparently GCC requires -O2 for inline asm to work.
            That would explain the drawing barfs...)  Dan fixed the status bar
            (after Ryan broke it again.  :)  ), and moved krecipasm() into
            a_linux.asm, since FPU opcodes don't inline correctly. Added Ken's
            stuff.dat. As a milestone, 3D mode now seems to work a LITTLE.
            Looking in the wrong place causes a segfault, and generally, what
            very little draws seems mostly incorrect, but progress is being
            made. Changed out all the collected data files with Ken's original
            STUFF.DAT. initgroupfile() now aborts the program if it can't
            open a data file. (Without stuff.dat, you get a blank surface, and
            you have to blindly feel your way out of the program.) Dan also
            started work on the command line tools, like kextract. Those are
            in a separate tarball on the website.
08152000 - (Stuck at LinuxWorld...sorry for delays.) 3D mode now does not (by
            default) segfault, and you can stumble around. Some walls seem to
            render correctly. Lots of things cause segfaults. Disabled the MMX
            overlays for now, as that is a little less self-modified code in
            use. Dan fixed some keyboard scancodes (and also independently
            fixed the same 3D mode things. hah. :)  )
08192000 - Back from LinuxWorld. Added an obnoxious hall of mirrors detector
            for 3D mode. _asm_slopevlin now returns immediately, which for now
            stops most 3D mode segfaults. This will have to change, but it
            helps for now. Put in a hack for checking frames-per-second.
            Added some new keyboard scancodes.
08212000 - Another keyboard scancode added by Dan. Changed 3D mode to prompt
            to save changes before dropping out of graphics mode; the stdio
            thing was pretty obnoxious. Now we are basically waiting on a copy
            of Watcom C to show up, so I can trace through the original code
            and verify that I'm getting sane parameters and return values.
            Needless to say, productivity has dropped off quite a bit.
08232000 - Dan found a screwup in the inlined dmulscale32()'s return value.
            Consequently, now the hall of mirrors are gone. Cool. Walls seem
            to render correctly all the time now. Other visual problems, and
            no floors or ceilings, but this is a BIG win. Thanks, Dan! (A few
            other ASM functions in pragmas.c had this problem. dmulscale32()
            was the most noticable fix, though.)
08242000 - Dan added/fixed some more ASM. The SDL parachute is now in place,
            so we will go back to the correct resolution, and the mouse
            will ungrab in case of a segfault. A C version (mostly working?)
            of qinterpolatedown16short() has been added to pragmas.c, and
            the ASM version had a fix that allows ceilings to show (though they
            render incorrectly in the correct place, and now certain sprites
            segfault. Ugh. PageUp/PageDown scancodes now work, so you can
            raise and lower ceilings and floors. Changed caption in titlebar
            of windowed mode.
08292000 - Matt Helsley contributed some ASM -> C conversions, and some test
            code to help with further porting. Cleaned up some cruft in the
            sdl_driver. Dan nailed another clobber list issue in pragmas.c.
            Thanks to Nicholas Vining, we now have a copy of Watcom C. Ryan
            sat down and stepped through the ASM in gdb (NOT fun at all),
            while Nicholas stepped through the DOS version in parallel.
            Eventually we stumbled upon some misassembled opcodes; we ended
            up filling some registers with a pointer, and not what the pointer
            pointed at!  Ryan went through a_linux.asm and fixed all these,
            and now 3D mode is almost entirely FLAWLESS.  This is so cool.
            Bedtime; I hope you all enjoy this.  :)  Thanks Nicholas!
08302000 - GAME now works. There was something awful in multi.c, probably
            memory corruption with a static initializer, so SDL_Init() would
            die in XOpenDisplay(NULL). Yikes. I've stubbed out what game.c
            needs for multiplayer and put it in multi_tcpip.c (guess what
            THAT'S for.  :)  ). The original multiplayer code is completely
            modem and COMit based, and is useless anywhere but DOS, so this
            isn't a big loss. Added some support for building under Cygwin,
            but not much. Note that distributing binaries of BUILD built with
            Cygwin violates the GPL, due to newlib's license, so don't do it.
            But you can try compiling your own local copies. Where the hell
            did CONTRIB go? Quick rewrite of that file. Minor glitches and
            sound (and networking?) are the only things pending.
08302000 - Temporary fix; either nsqrtasm() or its tables are not correct
            (our C rewrite gives exactly the same results as the ASM version,
            too), so we've replaced it with a call to the C runtime's sqrt()
            function, which seems to work fine. I hacked at getting better
            calls to timerhandler(); still not happy with the results.
            I also fixed some stuff in sdl_driver.c, so you can have
            resolutions > 320x200 in 3D mode. Use F4 in the game to change
            modes. Dunno how you change it in the editor, but you'll note that
            the 3D mode defaults to 640x480 now...this is where the editor
            SHOULD be, but I had 320, 320 hardcoded in _setgamemode() for some
            strange reason. Oh, and CONTRIB was lowercased. That's where it
            went. URL for this project is now listed on Ken's homepage.
09012000 - Happy September. Code tree is now available via CVS, thanks to
            Matt and "witten". Dan fixed another keysym. port i/o macros were
            being called when changing to 3D mode in the editor; #ifdef'd to
            PLATFORM_DOS, now. Misassembled opcode in msqrtasm() is now fixed,
            so the function operates correctly. Removed the #if 0, so that
            ASM now gets used.
09032000 - Dan fixed some printext16 calls in 2D mode. Added a BUILD_NOPENTIUM
            environment variable: if set, it disables PentiumPro/PentiumII/MMX
            optimizations. The code runs at more than 10fps less without
            the Pentium overlays on my box (62fps to 50fps in the start of
            nukeland.map at 640x480). I tried adding all the crazy compiler
            optimizations I could think of. First, anything above -O2 causes
            engine.c's compile to fail with a duplicate label from setgotpic.
            This is an optimizer bug in inline asm. It cuts and pastes it
            to inline it into each function, despite __volatile__ and the
            lack of an inline keyword on the function where the ASM exists,
            and you get a duplicate label. It's dumb. All the other
            optimizations I threw at it worked, including pentiumpro
            compilation, -fexpensive-optimizations, and -funroll-loops, but
            there was absolutely NO increase in frame rate. I imagine most of
            the time in 3D mode is being spent in a_linux.asm anyhow. If we
            ever get this converted to C, those optimizations will be more
            handy, I imagine, but for now, I've not committed the Makefile.
            Cleaned up the README. After some tinkering, I managed to get
            build to compile and RUN on Windows 98 with Cygwin. I can't
            distribute binaries of this, as it would violate the GPL.
            However, I will be merging the changes back into the main source
            once I figure out the best way how. Mostly, the inline ASM needed
            some hacks, but nothing I can cleanly #ifdef. Amazingly,
            mprotect() worked identically on Linux and Cygwin. The mind
            boggles. Changes that have made it into the CVS repository for the
            Cygwin work follow: Removed dependency on the SDL event thread
            (SDL_Init() fails on Win32 if you request an event thread), and
            put SDL_PumpEvents() calls into _idle() and _nextpage(). This
            seems to work fine, but there can be some breakage if there's a
            keyboard polling loop somewhere that doesn't call either of these
            functions. Added some %define macros to a_linux.asm to handle
            C compilers that append an underscore to C identifiers. Updated the
            Makefile for cygwin and other improvements.
09052000 - Checked if Duke3d maps can be edited. Apparently they can be,
            but only sorta. Quitting from 2D mode only prompts you to save
            if you've changed something, now. Fixed the CVS info in README.
            Added Duke3D and Shadow Warrior data file info to README. Minor
            cleanups in the Makefile. Moved VIDEOBASE defines to display.h.
            _platform_init() now takes icon and titlebar titles, and has been
            updated in all drivers.
02102001 - Someone on the 3DRealms Web Forums finds icculus.org:
            http://www.3drealms.com/cgi-bin/ultimatebb.cgi?ubb=get_topic&f=5&t=001318
02132001 - (Five months later...ugh.) Dan noticed that my webpage is being
            discussed on the 3DRealms forums, so I went back into the code
            and finished the work to get this running under Cygwin. Here's
            the list of that work: Makefile is now more robust, added a
            non-__attribute__ version of asm_prohlineasm4() to a.h, moved some
            #includes in cache1d.c to prevent a double-definition of O_BINARY.
            Fixed the inline asm in engine.c and pragmas.c to handle C
            compilers that add underscores to identifiers. Removed the
            SDL_HWSURFACE flag in sdl_driver.c (didn't realize this is
            actually slower on most hardware, and it also breaks fullscreen
            mode in Win32 on my box). Had to #ifndef CYGWIN the fnmatch stuff
            in build.c until I find a portable, non-GPL solution.
02142001 - Dan Olson nailed an assembly bug that caused segfaults in the
            2nd overhead view in Ken's game. After that fix was applied, I
            tagged the current CVS as "final-non-win32", as I start the effort
            to make this thing compile as a native win32 executable with
            (gasp!) Watcom C. Lots of stuff is getting torn around, as
            assumptions get challenged: PLATFORM_UNIX vs. PLATFORM_DOS? Now
            there's a PLATFORM_WIN32. unix_compat.h's display stuff has been
            moved to display.h, and all the files include "platform.h" instead
            of unix_compat.h, which allows us to choose the correct
            compatibility header at compile time (win32_compat.h,
            unix_compat.h, or doscmpat.h). All the platform-specific includes
            (io.h, and such) have been moved into their respective compat
            header, which cleaned up a lot of mess. Just to keep it real with
            Cygwin, the Makefile now autodetects Cygwin, and sets the build
            properties accordingly. Using a non-Cygwin GCC on Linux doesn't
            set the Cygwin-related properties. SDL_INC_DIR and SDL_LIB_DIR can
            be set as environment variables, so you never need to touch the
            Makefile directly with Cygwin. "make clean" now cleans up various
            Watcom C output, and vi's annoying "~" backup files. Tons of
            patches and enhancements and little cleanups just to get this
            to build on Watcom. Thing builds now, but has lots of problems
            running, which will be resolved, hopefully, tonight. The Linux
            version still works fine, and presumably so will the Cygwin
            version. Overall, the quality of the port's codebase is improving
            through this effort. I wonder if the DOS version will build now...
02152001 - Did initial work to get a protected mode DOS binary running again.
            Hey, why not? Not complete (compiles clean, no link). Lots of
            cleanups, and again, this is improving the quality of the port's
            codebase. As usual, the Linux, and presumably Cygwin, versions
            still compile clean and run. Haven't tried Watcom/Win32 tonight.
            Renamed dos_driver.c to dos_drvr.c, so you can build the DOS bits
            on a regular FAT filesystem. Added a Makefile.dos for use with
            Watcom C's wmake (based on Ken's original). Lots of other files
            touched. Added a "make package" rule to the Makefile, to improve
            the quality of my own life. Added (har) a FILEID.DIZ file, which
            is really used for the package's zipfile comment, but I always
            wanted to have one of those.  :)
02182001 - Removed the ENDLINE_CHAR stuff in build.c; that textfile reading
            code is now able to handle '\n', '\r', and "\r\n" endlines.
            The findfirst/findnext/whatnot code now works on Linux, Cygwin,
            and Watcom C (dos, and win32). It's still kludgy, though. More
            compat header cleanups. Figured out how to get SDL working fully
            with Watcom C (-ei command line to wcc386.exe, and declare your
            SDL callbacks as __cdecl, etc.).
02192001 - More Watcom fixes; build.exe's 3D mode is now fully operational.
            One graphical glitch in 2D mode, still, but otherwise appears
            fully functional. Put safety checks in a.h. Put a fix in build.c's
            overheadeditor(), so it doesn't try to reference element -1 in an
            array when clicking the left mouse button. Other ASM cleanups.
            Fixed an annoying function declaration in bstub.c. Fixed an
            incorrect assumption in sdl_driver.c's VBE_setPalette() that was
            exposed by game.c under Watcom/win32. One quick addition of the
            keyword "extern" to game.c, and we have a working game.exe under
            Windows that isn't GPL encumbered. Woohoo! Added a Watcom/win32
            Makefile, updated the README, and released win32 binaries.
02202001 - Turned on more optimizations in the Watcom makefile, and cleaned
            it up/abstracted it for public use. Added an nt_win option to that
            makefile to make it not pop up a console window when started from
            an icon. Added README-win32bins.txt to the CVS repository. Fixme
            note to self added in engine.c, and an incorrect use of ASM in
            pragmas.h was repaired. Now the drawpixel16 function is working,
            closing the last bug specific to the Watcom/win32 port. Yay.
02212001 - Fixed the timer bug! It was a one line change in game.c, pointed
            out by Matt Saettler. Amen. This led to a better abstraction:
            PLATFORM_TIMER_HZ, defined in platform.h ... Removed the wedged-in
            call to SDL_PumpEvents() in game.c...not needed anymore.
02222001 - Ported the codebase back to DOS. Point wmake.exe at Makefile.dos.
02262001 - Added code to enable write access to self-modified ASM memory pages
            so this will work on WinNT and Win2K. Discovered it wasn't needed,
            and the real problem is that Watcom produces an incorrect PE
            header in the generated EXE files. Steven Fuller dug up a program
            that fixes this, and did a ton of debugging. Added him to the
            CONTRIB file. Fixed Makefile.w32 and changed the default builds
            to optimized and not debug to make binary distribution easier.
            Automated the packaging of binary releases in Makefile.
04262001 - EDuke 2.1 goes into private beta. Will it be the last release based
            on Ken Silverman's original BUILD object code for Duke Nukem 3D?
05102001 - Embedded a Perl interpreter that runs a function in game.pl once
            per frame into the KenBuild game. This is just a test for a future
            project, and probably shouldn't be compiled by the average person.
            Changes to the Makefile, game.c, game.pl, and buildperl.[ch] were
            added. Changed all occurances of my email address from
            lokigames.com to linuxgames.com. One or two comment tweaks
            elsewhere. Updated README with SDL12 CVS instructions.
05192001 - Demands SDL_HWPALETTE, which seems to fix 8bit color targets. Added
            other debugging info to sdl_driver.c, and put the (commented out)
            starts of hardware surface/double buffering/page flipping support.
            Updated TODO.
05222001 - Updated TODO again. Cleaned up engine.c's forward function
            references. Put together engine.h, so that the engine's exported
            functionality can be referenced via one header instead of a list
            of function declarations plugged into every file. Made everything
            that shouldn't be exported from engine.c static, but this is an
            error-prone process, so it'll probably get tweaked as other Build
            related code gets tried with this engine. Similar cleanups in
            build.c, display.h, and elsewhere. Laid foundation for an OpenGL
            renderer. No actual rendering is done, just context creation and
            library setup when _setgamemode() is called on a system that uses
            the SDL driver. This work may never get finished, but why not try?
            Flip the "useopengl" flag in the Makefile to use this code.
            Cleaned out a commented-out printf in maskwallscan(). Moved
            New static flag in engine.c: initengine_called is set when
            (surprise) initengine() is called. This is currently just used
            with the MMX overlay code...now dommxoverlay is no longer exposed;
            use setmmxoverlay() and getmmxoverlay() instead. Updated
            build2.txt with this information. Removed global var: cachedebug
            in engine.c, and put #define BUILD_CACHEDEBUG 0 at the top of the
            source. Flip it to 1 if you ever need to tinker in the cache code.
            Removed krecip() from engine.c, since nothing uses it (it just
            wrapped krecipasm(), which IS used all over the place).
            Other cleanups were made, along with update in build.txt. Lots of
            code was touched in ways not appropriate to mention in polite
            company.
05232001 - Added lookup.dat support code, thanks to TerminX's help. Changed
            initgroupfile() to not exit() if the groupfile won't open().
            instead, we check for failed return values in ExtInit() (bstub.c),
            like we should have done from the start. Added check in ExtInit()
            for the environment variable BUILD_GROUPFILE, which will be the
            groupfile to open if the variable exists. If the variable isn't
            set, we default to Ken's "stuff.dat". Between this and TerminX's
            lookup.dat code, we should be able to wander around a Duke3D map
            without segfaults all over the place. Changed initgroupfile() and
            kopen4load() to take a (const char *) argument. Should probably
            show some diligence in adding this elsewhere, too, for the sake
            of cleanliness and bughunting. Added some more function
            declarations to engine.h. Updated README with new info on
            Mapster and Duke3D.
05262001 - Finally unearthed a copy of Watcom 11.0! Fixed up all the GNU
            inline asm so that the Watcom preprocessor wouldn't puke on it,
            and built new win32 binaries...apparently Watcom 11, unlike 10.6,
            can make a PE header that WinNT and Win2000 will accept. Moved the
            Win32 version up to SDL 1.2.0 from SDL-1.1.8, and added a Watcom
            __cdecl pragma in display.h for SDL_VideoDriverName(). Updated
            TODO.
05272001 - Added engine.h to dos_drvr.c to get the DOS binaries to compile.
            Added README and CHANGELOG to the win32 and dos bin distros, and
            updated README-dosbins.txt and README-win32bins.txt. Updated
            README with info on Watcom 10 vs 11, porting to new OSes, etc.
            Updated TODO, AGAIN. :) Wrote a hopefully-robust function that
            toggles the screen surface between windowed and full screen
            without using SDL_WM_ToggleFullScreen(), so that you can use
            ALT-Enter on Win32. Accordingly, removed references to
            SDL_WM_ToggleFullScreen() in display.h and sdl_driver.c ...
            The new fullscreen toggle code throws up on Windows if you destroy
            the window (via SDL_SetVideoMode()) while in the middle of
            handling one of its events...we were processing all events via the
            SDL event filter during the SDL_PumpEvents() call. I've added
            handle_events() to sdl_driver.c, and replaced all the PumpEvents
            calls with that. This gets its events via SDL_PollEvent(), and
            passes them on to our filter manually. That's just generally better
            practice anyhow. Put hardcoded environment variables in
            sdl_driver.c into constants. Hall of mirror debugging, and all the
            BUILDSDL output to stderr is now all compiled in, and trigged by
            the existence of the BUILD_SDLDEBUG environment variable. Build
            now always claims to have standard resolutions (up to the largest
            your system claims to handle) available, and SDL will fake it if
            they aren't there. This should fix the Win32 F4 problem, and
            people without other modelines listed in their XF86Config. Also,
            by setting the environment variable BUILD_SCREENRES, you can add
            one window of any dimension to the list. For example,
            "export BUILD_SCREENRES=666x666".
05282001 - Added a maximum screen resolution of 1600x1200. This can be raised
            or lowered with an environment variable: export
            BUILD_MAXSCREENRES=1024x768, if you like. Renamed
            BUILD_NO_MOUSE_GRAB to BUILD_NOMOUSEGRAB for consistency. Renamed
            BUILD_SCREENRES to BUILD_USERSCREENRES. Rewrote the spaghetti that
            all this resolution management code had quickly become. The fight
            with attempt_fullscreen_toggle() continues: gave up, and just
            called setbrightness() to fix the palettes. Now tries to use
            SDL_WM_ToggleFullscreen() first before doing it The Hard Way, and
            just returns if there's no window manager reported by
            SDL_GetVideoInfo->wm_available. All the debugging output (of which
            there is still more added today) has been cleaned up and is
            passed through a function called sdldebug() that is used like
            fprintf(stderr), but adds the "BUILDSDL: " string to the front,
            a newline to the end, and prints nothing if debugging is disabled.
            TODO is, as usual, expanding. Added BUILD_HALLOFMIRRORS environment
            var, so that it isn't bound to BUILD_SDLDEBUG anymore. The
            BUILD_SDLDEBUG variable now needs a value: the file to write debug
            information to. The value can be "-" to write to stdout. This is
            for that obnoxious win32 platform.  :)
05292001 - Added a hack for Windows systems using the "windib" driver.
            Apparently windib has no way to distinguish between the return key
            and the keypad enter, and they both come up as the former. Now, if
            you hold down SHIFT while hitting either return or the keypad
            enter, sdl_driver.c reports to the engine that the keypad enter
            was pressed. Now I can get into 3D mode on WinNT 4.0.  :)
05302001 - More toggle_fulscreen work. Check to see if the debug output file
            was opened, and printf() a warning if not. setbuf(..., NULL) was
            no longer called on stderr and stdout in sdl_driver.c's version
            of _platform_init(), but the buffer is set to NULL for the debug
            file now, which may or may not be stdout. Just for a goof, I added
            vmWare virtual machine detection code, which returns false in the
            portable C version, and does some lowlevel voodoo in i386 asm.
06012001 - Added sdldebug() output to list the version of SDL we compiled
            against, and the version we are linked (dynamically) against.
06082001 - It's Neurotic Cleanup Day! Started putting support for compiling
            with Visual C in place, and found how anal their anal settings
            can be (does this beat -ansi -pendantic on Linux? Probably not.).
            Converted all the "//" comments to "/*" (ugh), and added explicit
            casting where needed. Replaced references to "long long" with
            "__int64", which is #defined appropriately in the compat headers.
            Now compiling the codebase with -ansi and -pendantic on Linux and
            Cygwin. Changed PORTSIG in build.h. Moved the sound stubs out of
            sdl_driver.c and into a #ifndef PLATFORM_DOS block in game.c; it's
            KenBuild-specific, and I'm not interested in implementing it
            cleanly, or at all, for non-DOS platforms. Cleaned up rest of
            the forward references in game.c and build.c. Cleaned up the
            OpenGL debugging output (it's now unified with the sdldebug()
            code). Renamed a_linux.asm to a_nasm.asm, since it's used on Linux
            and Windows (and probably everywhere else that there's an x86
            system that isn't using Watcom). Implemented stricmp() on unix
            (damned -ansi flag). Updated TODO and README. Changed the display
            driver function _initkeys into initkeys. This will force a link
            error in Build games, so they can be updated to call the driver's
            init function; updated this in build.txt, too.
06122001 - Made mmulti.c compile with -ansi and -pedantic, as that might be
            needed later. Testing the OpenGL waters again. Added string_dupe()
            to replace strdup(), and changed a snprintf() call to sprintf() in
            sdl_driver.c, so I could remove the _GNU_SOURCE define.
06132001 - Changed Unix makefile, so that you can (by setting usedlls=true)
            compile buildengine.so and buildnet.so, and the game and build
            binaries only statically link what is absolutely necessary. Setting
            usedlls=false statically links all the Build code together,
            although currently external libraries like SDL are still
            linked dynamically. Platform drivers now need to store _argv and
            _argc. Commented a few functions in engine.c as I start to grok
            what each bit of code does.
06232001 - Cleaned up some whitespace issues in pragmas.c. The one SDL
            dependency in engine.c has been abstracted into
            _updateScreenRect() and implemented in the display drivers.
            OpenGL should now always be compiled in unless you can't even
            build it (and thus, I've officially flipped useopengl to "true"
            in the Makefile). You can now choose your renderer at runtime by
            setting the BUILD_RENDERER environment variable: Set it to
            "software" for the usual drill, "opengl2d" for using OpenGL to
            move the software-rendered framebuffer to the screen (got this
            idea from zsnes. cool.), and "opengl3d" to try to render an actual
            3D scene in OpenGL. Default is "software". The 3D stuff hasn't
            even been started, since it'll need an actual implementation in
            engine.c. The gl2D stuff is an hour's work. After the 3D
            implementation is in there, I'll be adding Makefile flags and code
            #ifdefs to prevent compilation of the software renderer, which
            will end the need for most, if not all, of the assembly, and get
            us running on different platforms. I know, easier said than done.
            Other little cleanups and enhancements.
06242001 - Followed through on my threat, and split off most of the OpenGL
            code into buildgl.c.  :) Added more GL func pointers, and tried
            (failingly) to get OpenGL2D more working. It's way too slow;
            I guess all that conversion from 8-bit, through the lookup tables,
            to 32-bit, back to whatever the screen depth is, etc is expensive.
            Looks like it's just software rendering and full 3D. Sigh.
            More SDL cleanups. (committed on Aug 1st).
07082001 - Implemented support for PhysicsFS in cache1d.c; this allows you to
            replace your GRP file with a compressed ZIP file. This is optional,
            since it's an extra dependency. PhysicsFS is another one of my
            projects, and information and source for it can be found at:
            http://www.icculus.org/physfs/   ... (committed on Aug 1st).
07162001 - Moved CVS repository to icculus.org. Updated README.
08012001 - Committed some stuff, fixed a bug in the PhysicsFS code. Flipped
            the useopengl flag in the Makefile back to false for now. Added
            PhysicsFS info to README. Changed all occurances of my email
            address from linuxgames.com to clutteredmind.org.
08232001 - Moved a.c to a_gnu.c and pragmas.c to pragmas_gnu.c. Added
            pragmas_visual.c and a_visualc.c, and got everything compiling on
            Visual C. Added VisualC.zip. Unzip it and use those files to build
            with Visual C. Updated Makefiles, READMEs, etc with the new
            *_[gnu|visualc]* files. Cleanups elsewhere. Added a "distclean"
            target which just calls "clean". The Visual C project doesn't work
            right now; I gave up on it.
06232001 - Fixed a hang when lotagging a wall (closing bugzilla bug #25).

--ryan. (icculus@clutteredmind.org)

/* end of CHANGELOG ... */

