diff options
81 files changed, 4194 insertions, 2061 deletions
@@ -1,276 +1,428 @@ +2012-02-04 23:05:42 fraggle + + On Windows, convert the USER and USERNAME environment variables from + OEM codepage to UTF-8 encoding. This should fix the case where the + user has a username that includes non-ASCII characters (thanks + Alexandre Xavier). + +2012-02-03 22:05:49 fraggle + + Fix crash when typing lots of Unicode characters into a number input + box. + +2012-02-03 21:46:55 fraggle + + Fix chat macros when vanilla_keyboard_mapping is turned off. + +2012-02-03 21:38:06 fraggle + + Fix CP437-Unicode mapping of cedilla character. + +2012-02-03 21:10:36 fraggle + + Upgrade the input box and label widgets to use UTF-8 strings. + +2012-02-03 21:09:57 fraggle + + Support Unicode input by mapping typed Unicode characters >= 128 up + into a higher range to avoid conflicts with Doom's key constants. + +2012-02-03 20:21:17 fraggle + + Split off UTF-8 code into separate file and add extra functions. + +2012-02-02 23:35:16 fraggle + + Beginnings of limited textscreen UTF-8 support. + +2012-02-02 21:59:46 fraggle + + Re-resolve the address of the master server every eight hours, to + adapt to changes in DNS configuration. + +2012-02-02 21:10:20 fraggle + + Fix scroll bar behavior (thanks Alexandre Xavier). + +2012-02-02 20:34:09 fraggle + + Only use the SDL mouse lag workaround on Windows - not all systems + allow the cursor to be changed. This fixes Chocolate Doom on AmigaOS + (thanks Timo Sievänen). + +2012-01-05 02:33:25 fraggle + + Add hack command-line option for on-screen OPL status output - useful + for GENMIDI development. + +2011-11-26 22:09:42 fraggle + + Fix weapon cycling keys when using IDKFA in Shareware Doom (thanks + Alexandre Xavier). + +2011-11-03 22:18:36 fraggle + + Remove use of $< in Makefiles, for compatibility with OpenBSD's make. + +2011-10-23 23:55:43 fraggle + + Fix chat macro defaults in setup tool. + +2011-10-23 20:53:06 fraggle + + Fix numeric keypad when entering values in text boxes (thanks Twelve). + +2011-10-23 20:42:43 fraggle + + Fix crash when closing a window. + +2011-10-23 20:28:10 fraggle + + Don't save value when destructor is called. + +2011-10-23 20:25:55 fraggle + + Rework textscreen focus handling so that input boxes will stop editing + when they lose their focus (thanks Twelve). + +2011-10-22 19:24:08 fraggle + + Fix teleport behavior when emulating the alternate Final Doom + executable. Change the default Final Doom emulation mode to be the + original executable. + +2011-10-16 17:59:19 fraggle + + Zero out bottom two bits of palette data, to more accurately emulate + the PC hardware that only supports 6 bits per channel (thanks + GhostlyDeath). + +2011-09-17 16:55:08 fraggle + + Change query loop to sleep for 1ms rather than 50ms intervals, so that + precision is not lost in ping times. + +2011-09-17 16:43:25 fraggle + + Refactor query code so that it is possible to query by polling, rather + than blocking on a query function. + +2011-09-17 14:44:58 fraggle + + Fix ping calculation with LAN search. + +2011-09-11 18:01:56 fraggle + + Don't show error dialog if running from the console on OS X. + +2011-08-29 21:37:26 fraggle + + Fix bug with detection of IWAD type by filename (thanks mether). + +2011-08-22 19:40:26 fraggle + + Add clarification note about icon copyright status (thanks to Chris + Metcalf for clarification by email). + +2011-08-20 19:20:43 fraggle + + Update COPYING to latest version of GPL2 with new address of FSF + (thanks Rahul Sundaram). + +2011-08-20 19:10:23 fraggle + + Fix gnome-screensaver .desktop file (thanks Rahul Sundaram). + +2011-07-24 21:55:27 fraggle + + Fix default mouse buttons in setup tool (Thanks Alexandre Xavier). + +2011-07-21 15:21:57 fraggle + + Don't use $^ in Makefiles, as it s a GNU make extension (thanks Jakub + Lach). + +2011-06-17 00:14:14 fraggle + + Add AM_SILENT_RULES macro for terser build output. + +2011-05-17 23:59:44 fraggle + + Update NEWS and ChangeLog, bump version number. + 2011-05-17 23:51:37 fraggle - + Add dependency for INSTALL generation. 2011-05-17 23:06:22 fraggle - + Detect chex.deh if it is in the same directory as the IWAD file. 2011-05-14 22:50:46 fraggle - + Fix display of ENDOOM screen. 2011-05-14 22:47:12 fraggle - + Fix install of screensaver desktop file. 2011-05-14 22:07:55 fraggle - + Add freedesktop.org desktop files for chocolate-doom, chocolate-setup (thanks Adrián Chaves Fernández). 2011-05-14 21:11:26 fraggle - + Convert build system to using the PROGRAM_PREFIX system used on raven-branch. 2011-05-08 19:32:02 fraggle - + Update NEWS. 2011-05-08 19:29:46 fraggle - + Allow IWAD files to be double-clicked in the finder to set the IWAD configuration. 2011-05-08 01:31:01 fraggle - + Shut up compiler warnings. 2011-05-08 00:52:26 fraggle - + Rework OS X launcher package. Include documentation files within the application bundle and add a help menu with links. Rework .dmg generation to generate a file with a "fancy" background image and overall nicer appearance. 2011-04-26 06:49:53 quasar_te - + Support for Win32 native OPL output when compiled with Microsoft Visual C++. Confirmed to work with Aureal Vortex AU8830 in Win98SE by GhostlyDeath. 2011-04-24 23:22:11 fraggle - + Infer -server when -privateserver is specified (thanks Porsche Monty). 2011-04-24 22:39:31 fraggle - + Add test button to joystick menu in setup tool (thanks Alexandre Xavier). 2011-04-18 23:10:16 fraggle - + Add test hack for simulating Porsche Monty's scanline emulation (see comment in file). 2011-04-17 18:33:04 fraggle - + Fix libtextscreen window hotkeys to work when shift is held down / capslock turned on. Fix a similar problem in-game when typing cheat codes or using menu hotkeys (thanks Alexandre Xavier). 2011-04-17 17:53:47 fraggle - + Make Final Doom IWAD labels shorter, so they don't make the launch windows grow. 2011-04-11 20:49:45 fraggle - + Allow the shift key to be held down when changing key/mouse/joystick bindings to prevent bindings to the same key from being cleared (thanks myk). 2011-04-09 01:27:13 fraggle - + Fix action area minimum width calculation. 2011-04-04 21:30:17 fraggle - + Close dropdown list popup windows when clicking outside the window. 2011-04-04 21:12:59 fraggle - + Fix crash. 2011-04-04 21:09:42 fraggle - + Fix crash. 2011-04-04 21:07:07 fraggle - + Change the background color when hovering over widgets. 2011-04-04 19:40:28 fraggle - + Change setup tool default sampling rate to 44100Hz to match the game (thanks Alexandre Xavier). 2011-03-30 20:16:40 fraggle - + Add a symlink hack to work around the fact that OS X doesn't like paths in MANPATH to contain spaces. 2011-03-30 20:00:51 fraggle - + On OS X, display a dialog box when exiting with I_Error, like on Windows. 2011-03-29 00:48:31 fraggle - + Remove the BUGS file as it doesn't really contain any useful information. 2011-03-29 00:39:48 fraggle - + Add vim modeline for text wrapping to documentation text files. 2011-03-29 00:33:09 fraggle - + Emulate bug with IDMUS cheat when emulating v1.9 (thanks Alexandre Xavier). 2011-03-28 22:36:00 fraggle - + Fix OPL MIDI playback when using an empty .mus / .mid file (thanks Alexandre Xavier). 2011-03-28 22:32:14 fraggle - + Allow .lmp files to be loaded (and demo files to be played back) that have long filenames (thanks blzut3). 2011-03-28 01:24:47 fraggle - + Fix weapon cycling from the shotgun to the chaingun in Doom 1 (thanks Alexandre Xavier). 2011-03-28 00:45:53 fraggle - + Scroll faster in reaction to the scroll wheel. 2011-03-28 00:42:00 fraggle - + Change default sfx/music volume in setup tool to 8, to match the game (thanks Alexandre Xavier). 2011-03-22 21:33:17 fraggle - + Switch separator to show "screen mode" or "window size" depending on whether fullscreen is turned on or not. 2011-03-22 21:08:04 fraggle - + Fix scrollbars so that clicks scroll the pane to a location that matches the clicked location. Interpret mousewheel events so that scroll panes can be scrolled. 2011-03-22 19:49:31 fraggle - + Reorganise the display settings window. 2011-03-17 22:54:33 fraggle - + Add back -a option to automake, and remove INSTALL if automake installs it. 2011-03-17 22:43:56 fraggle - + Fix up placement of display settings window. 2011-03-15 22:41:22 fraggle - + Fix NEWS entry to list the full name for Alexandre Xavier. 2011-03-10 19:47:14 fraggle - + Include Unix manpages in MacOS package, and set MANPATH to point to them when opening a terminal window. 2011-03-10 19:45:29 fraggle - + Minor tweaks to MacOS instructions. 2011-03-10 19:20:10 fraggle - + Minor tweak to INSTALL instructions. 2011-03-10 19:03:23 fraggle - + Replace the INSTALL file with a template version that is customized to different platforms. 2011-03-09 19:02:15 fraggle - + Add null sector dereference emulation code from Prboom+, to fix desync with CLNJ-506.LMP (thanks entryway). 2011-03-09 01:06:07 fraggle - + Add support for the alternate version of the Final Doom executable that fixes the demo loop crash (thanks Porsche Monty, Enjay). 2011-03-06 20:59:51 fraggle - + Discard very short sound effects and strip lead-in / lead-out samples that apparently aren't played by Vanilla Doom (thanks Quasar). 2011-03-03 21:41:51 fraggle - + Fix Visual Studio build (thanks GhostlyDeath). 2011-02-28 20:48:27 fraggle - + Fix autoadjust of pixel depth in setup tool. 2011-02-05 16:50:28 fraggle - + Fix bug with libtextscreen where it was not possible to type a '+' (thanks Alexandre Xavier). 2011-01-31 01:25:47 fraggle - + When large numbers of screen resolutions are detected, increase the number of columns in the mode list to fit them all on-screen. Remove superfluous left-side spacing from the checkbox and radio button widgets so that the modes can be packed closer together. 2011-01-23 21:42:09 fraggle - + Fix default joystick buttons in setup tool to match Vanilla (thanks twipley). 2011-01-13 20:34:55 fraggle - + In configuration files, use the scan code for right shift, not left shift, to match Vanilla (thanks AlexXav). 2011-01-12 23:22:20 fraggle - + Fix menu navigation when using joystick / joypad (thanks AlexXav). 2011-01-02 18:14:59 fraggle - + Update NEWS and ChangeLog, bump version number. 2011-01-02 17:45:24 fraggle - + Remove redundant package version label from top of OS X launcher window. 2011-01-02 02:49:20 fraggle - + Restore window title when changing video driver in setup tool (thanks AlexXav). 2011-01-02 02:31:20 fraggle - + Turn off dynamic window resizing feature on OS X, as it adds an ugly resize handle to the corner of the window that overlaps the view of the game. 2010-12-28 16:43:41 fraggle - + Make demo loop handling of DEMO4 case depend on the executable version being emulated: the Vanilla versions did not have any conditional behavior based on gamemode/gamemission. This has the side effect of @@ -278,71 +430,71 @@ but this is Vanilla behavior. 2010-12-25 22:42:40 fraggle - + Include NOT-BUGS in rpm packages. 2010-12-25 21:51:24 fraggle - + Pass through all command line arguments specified to the setup tool to the game, to match Vanilla behavior (thanks AlexXav). 2010-12-25 21:04:10 fraggle - + Remove the -wart parameter (thanks Sander van Dijk). 2010-12-25 20:55:30 fraggle - + Remove the 32 character limit on the lengths of filenames specified to -record (thanks AlexXav). 2010-12-19 20:15:09 fraggle - + Change setup tool skill level names to match Doom's "new game" menu exactly (thanks AlexXav). 2010-12-18 23:55:07 fraggle - + Add a M_CheckParmWithArgs function, that behaves like M_CheckParm but also checks that extra options were provided on the command line (thanks Sander van Dijk). 2010-12-14 20:55:30 fraggle - + Check that an address is provided to the -query command line option (thanks Sander van Dijk). 2010-12-12 13:11:11 fraggle - + Add -privateserver and -servername options to chocolate-server manpage. Add server registration option to setup tool (thanks exp(x)). 2010-12-10 23:56:32 fraggle - + Fix memory leak when dynamically resizing window in true color video modes. 2010-12-10 22:37:29 fraggle - + Fix build problem (thanks Proteh). 2010-12-10 22:21:56 fraggle - + Remove "Error:" from the message displayed by I_Error, to match Vanilla. 2010-12-10 20:53:23 fraggle - + Update NEWS. 2010-12-10 20:43:05 fraggle - + Change alignment of actions in a window's action area so that there is equal space either side of the center widget. This is more aesthetically pleasing. 2010-12-10 20:31:46 fraggle - + Replace txt_widget_t#selectable with a callback function to query whether the widget is selectable. This stops the table code from selecting things that aren't really selectable - eg. empty tables, @@ -350,531 +502,531 @@ the warp menu (thanks Proteh). 2010-12-10 19:15:37 fraggle - + Add "warp" menu to the main menu of the setup tool, like Vanilla setup.exe (thanks Proteh). 2010-12-10 18:15:12 fraggle - + Fix typo (thanks Sander van Dijk). 2010-12-10 17:53:50 fraggle - + Specify master server port explicitly, so that server registration works when using -port. 2010-12-07 23:13:34 rtc_marine - + - Update chocolate-server codeblocks project 2010-12-07 22:35:17 fraggle - + Assign the oldest client to be the controller, not the first found in the clients[] array. 2010-12-06 23:37:27 fraggle - + Fix -solo-net to actually behave the same as other ports. 2010-12-06 22:38:24 fraggle - + Rename -netdemo command line parameter to -solo-net, for consistency with other ports (-netdemo is still recognised). 2010-12-06 00:04:08 fraggle - + Update NEWS. 2010-12-05 14:42:09 fraggle - + Allow textscreen font to be overridden using the TEXTSCREEN_FONT command line variable. 2010-12-04 20:56:04 fraggle - + Rename search command line options: -search to search the Internet, -localsearch to search local LAN. 2010-12-04 20:48:07 fraggle - + Add ping time to query output. 2010-12-04 20:40:10 fraggle - + Fix formatting for -masterquery to match -search. 2010-12-04 20:34:39 fraggle - + Fix bug when running with -server option. 2010-12-02 21:34:51 fraggle - + Make multiple query attempts to servers before giving up. Display a warning if the master server does not respond. 2010-12-02 20:32:52 fraggle - + Add -servername parameter to allow the owner to change the name returned in response to queries (thanks AlexMax). 2010-12-02 20:11:24 fraggle - + More refactoring of querying code, to not be specific to the purpose of printing out a list. 2010-12-02 19:26:05 fraggle - + Refactor query code and add a -masterquery command line parameter to query the master server. 2010-12-02 18:23:09 fraggle - + Register servers with Internet master server. 2010-11-30 21:52:38 fraggle - + Oops. 2010-11-30 20:44:20 fraggle - + Remove "-debugfile" command line option and associated variable. 2010-11-30 20:26:37 fraggle - + Update NEWS. 2010-11-30 20:09:22 rtc_marine - + - Update codeblocks project 2010-11-30 20:00:06 fraggle - + Add support for HACX v1.2 IWAD file. 2010-11-30 01:08:59 fraggle - + Add NOT-BUGS file with some common Vanilla gotchas. 2010-11-29 20:18:10 fraggle - + Auto-adjust the screen color depth if the configured color depth is not supported by the hardware. 2010-11-27 23:23:12 fraggle - + Add dropdown list to setup tool to select screen BPP. 2010-11-27 19:39:14 fraggle - + When generating the texture name lookup hash table, add new entries to the end of chains. This way, entries earlier in the texture list trump later entries with the same name. This fixes a bug with the wrong sky being shown in Spooky01.wad (thanks Porsche Monty). 2010-11-27 15:36:43 fraggle - + Fix -timer / -avg options to work like Vanilla when playing demos. 2010-11-26 18:56:45 fraggle - + In non-palettized boxed screen modes, don't update the border areas of the screen. This is more CPU and memory efficient, and also fixes the "flashing border" bug when palette flashes occur. 2010-11-26 18:36:48 fraggle - + Turn double buffering on for non-palettized screen modes, as this may be the cause of screen tearing reports. 2010-11-24 23:34:18 fraggle - + Detect when running on Windows Vista or later, and switch to 32 bpp screen mode. 2010-11-24 22:43:37 fraggle - + Add configuration file parameter and command line option to specify the screen pixel depth. 2010-11-24 08:09:48 fraggle - + Add workaround to stop freezeups with old versions of SDL_mixer. 2010-11-21 15:44:43 fraggle - + Add -8in32 command line parameter to make the game run in 32-bit color mode, scaling up into an intermediate 8-bit buffer first. This should help with the palette problems experienced by Windows Vista/7 users. 2010-11-09 16:10:52 fraggle - + Update Python scripts to work in Python 3. 2010-09-19 21:09:36 fraggle - + Read response file in binary mode, to fix incomplete response file bug. 2010-08-31 21:00:20 fraggle - + Add weapon cycling buttons to joystick button list. 2010-08-31 20:59:24 fraggle - + Don't double OPL sample values, as it causes horrible things to happen with the Heretic title screen music. 2010-08-28 19:35:08 fraggle - + Update NEWS. 2010-08-28 19:28:05 fraggle - + Include INSTALL file in distribution packages. 2010-08-22 18:59:12 fraggle - + Shut up compiler warning. 2010-08-22 02:21:27 fraggle - + Change span drawing functions to work the same as Vanilla, so that in screenshots, floors and ceilings are pixel-perfect identical to Vanilla Doom (thanks Porsche Monty). 2010-08-21 19:49:20 fraggle - + Change default mouse acceleration in setup tool to match the game's default. 2010-08-21 18:47:24 fraggle - + "Bug fix". 2010-08-20 14:01:29 fraggle - + Remove debug printf(). 2010-08-20 13:20:58 fraggle - + Align memory allocated by zone memory system to 8 byte boundaries on 64-bit machines. Possibly fixes problems on sparc64? 2010-08-20 12:30:30 fraggle - + Extend mouse code to support up to 8 buttons (allows mouse wheel to be used). 2010-08-15 16:23:28 fraggle - + Fix volume multiply; DBOPL now generating output. 2010-08-15 15:57:37 fraggle - + Hook DBOPL into OPL library and remove FMOPL. Does not generate any sound yet. 2010-08-13 19:42:52 fraggle - + Add C-converted version of DOSbox OPL emulator. 2010-08-09 18:53:10 fraggle - + Add weapon cycling bindings for mouse and joystick buttons. Add weapon cycling bindings to configuration file and setup tool. 2010-08-07 18:23:09 fraggle - + Change back filter frequency. Add debug code to dump resampled sound effects to WAV files. 2010-08-07 17:07:00 fraggle - + Fix sound resampling low pass filter. 2010-08-04 19:25:04 fraggle - + Initial code for previous/next weapon switching keys. 2010-08-03 21:12:36 fraggle - + When in windowed mode, allow the screen size to be dynamically resized by dragging the window borders. 2010-07-31 20:25:17 fraggle - + Add multiplayer spy key binding. 2010-07-28 21:39:07 fraggle - + Add config file parameter to set OPL I/O port. 2010-07-17 01:33:57 fraggle - + Check for libm, to fix Fedora compile issues. 2010-07-14 21:36:53 fraggle - + Set MACOSX_DEPLOYMENT_TARGET to target 10.4, so that the launcher will work on older versions. 2010-07-10 17:06:15 fraggle - + Update NEWS and ChangeLog, bump version number. 2010-07-10 16:56:18 fraggle - + Add key bindings for multiplayer messaging. 2010-07-10 16:27:52 fraggle - + Add key binding to change demo recording quit key. 2010-05-30 04:03:44 fraggle - + Add INSTALL to all distribution packages, add note in README. 2010-05-30 03:56:58 fraggle - + Clarify/update install instructions. 2010-05-14 19:42:32 fraggle - + Don't grab the mouse when the demo sequence advances. 2010-05-03 17:47:25 fraggle - + Oops. 2010-05-03 16:58:52 fraggle - + Update NEWS. 2010-05-01 22:47:26 fraggle - + Further sanity checking on use of strcpy() with dehacked string replacements. 2010-05-01 22:20:30 fraggle - + Silence printf(DEH_String(...)) warnings, by providing a DEH_printf function that checks the format string is a valid replacement. Also add DEH_fprintf and DEH_snprintf functions to use throughout the code to do similar checking. 2010-05-01 20:22:52 fraggle - + Fix compiler warnings with savegame and response file code. 2010-04-30 20:58:30 fraggle - + Merge contents of OPL-TODO into TODO file. 2010-04-30 20:38:24 fraggle - + Add textscreen Doxyfile to dist. Add .desktop file to svn:ignore. Add opl ctags file to localvimrc. 2010-04-25 00:53:03 fraggle - + Add -reject_pad_with_ff parameter to allow padding value to be specified. 2010-04-23 21:46:29 fraggle - + Add REJECT buffer overflow emulation, based on code from PrBoom+ (thanks entryway). Fixes YDFEAR25.LMP. 2010-04-22 22:38:51 fraggle - + Disable OPL debugging messages. 2010-03-08 18:52:59 fraggle - + Add OPL-TODO to dist, set svn:ignore properties. 2010-03-08 18:50:29 fraggle - + Use native MIDI music by default. 2010-03-08 01:14:23 fraggle - + Merge opl-branch to trunk. OPL support still isn't perfect, and it certainly isn't complete. However, for now, it's good enough. 2010-02-10 20:21:21 fraggle - + Bump version number, update ChangeLog and NEWS. 2010-01-31 18:21:50 fraggle - + Change Windows resource file to use PACKAGE_COPYRIGHT and PACKAGE_LICENSE macros. 2010-01-30 16:14:04 fraggle - + Change directory to home directory before launching the game, so that recorded demos go somewhere sensible. 2010-01-30 16:04:24 fraggle - + Set launch button as default button, so that it is possible to launch the game by pressing return. 2010-01-30 00:37:17 fraggle - + Rename mus2mid functions to be consistent with coding standard. 2010-01-29 23:28:35 fraggle - + Remove unused PACKAGE_LONGDESC. 2010-01-29 19:17:56 fraggle - + When doing a MUS to MID conversion, allocate MIDI channels so that the lowest-numbered MIDI channels are used before higher-numbered ones. Fixes ear-piercing whistle sound in the MAP05 music when playing with timidity and EAWPATS (thanks entryway / HackNeyed). 2010-01-29 03:55:20 fraggle - + Fix indentation/style etc. in mus2mid.c. 2010-01-27 19:16:26 fraggle - + Add tags files to svn:ignore properties. 2010-01-26 19:21:18 fraggle - + Minor fix of British spelling -> American. 2010-01-26 19:18:18 fraggle - + Fix glass hack windows where a linedef is flagged as two sided but has only one side. Fixes WADs such as OTTAWAU.WAD (thanks Never_Again). 2010-01-23 23:06:45 fraggle - + Add menu item to launcher to open a terminal window that can be used to start the game. Add missing 'edit' menu. Set svn:ignore property for osx directory. 2010-01-18 19:40:50 fraggle - + Fix package source URL. 2010-01-18 19:29:48 fraggle - + Tweak package description slightly. 2010-01-18 19:14:54 fraggle - + Define project short description, copyright, maintainer and URL in configure.in. Use these for the Info-gnustep.plist file. Add generated .spec file for building RPM packages. 2010-01-17 16:58:37 fraggle - + Update NEWS. 2010-01-17 16:31:03 fraggle - + Restore the original cursor when shutting down video code, this should hopefully fix the problem with the mouse cursor disappearing when exiting on Win9x (thanks Janizdreg). 2010-01-16 19:20:11 fraggle - + Update TODO file. 2010-01-15 19:29:28 fraggle - + Don't open the configuration window when the launcher is first run; display an error message if the user tries to launch the game without an IWAD selected. 2010-01-15 19:14:02 fraggle - + Fix GNUstep info panel. 2010-01-15 18:51:35 fraggle - + Center the launcher window and config window on startup. 2010-01-15 18:40:37 fraggle - + Add wadfile.png for GNUstep build. 2010-01-15 18:13:05 fraggle - + Extend osx makefile to allow building of a working GNUstep application, for testing purposes. Add GNUstep version of Info.plist, remove app-skeleton directory and move contents up. 2010-01-14 18:47:03 fraggle - + In Chex Quest, use the radiation suit colormap instead of the red colormaps that are usually used when taking damage (or using the berserk pack). This matches the Vanilla chex.exe behavior (thanks Fuzztooth). 2010-01-12 20:16:25 fraggle - + Oops. 2010-01-12 20:15:34 fraggle - + Strip executables when building Windows CE packages. 2010-01-12 20:14:11 fraggle - + Rearrange order of Makefile generation to alphabetical order. 2010-01-12 20:12:56 fraggle - + Move Makefile definitions for CC and STRIP into config.make, use versions from autoconf. 2010-01-12 20:09:54 fraggle - + Set main menu title based on package name, not fixed string. 2010-01-12 20:09:01 fraggle - + Place commercial level name strings consecutively in the same array, so that overflowing the end of one list accesses the start of the next. This trick is used by pl2.wad for its MAP33 secret level. 2010-01-12 01:32:24 fraggle - + Add missing connection for plutonia.wad set button. 2010-01-12 01:20:48 fraggle - + Add document icon file and use for file associations. 2010-01-11 19:10:42 fraggle - + Insert new files into the command line at the correct location, allowing multiple files to be opened at once. 2010-01-11 01:35:04 fraggle - + When launching a file from the finder, add the new file into the command line at the appropriate position in the command line string. 2010-01-10 20:46:15 fraggle - + Change "@executable_path@" to "@executable_path" 2010-01-10 18:48:21 fraggle - + Install docs with a single cp, rather than using a for loop. 2010-01-10 18:42:35 fraggle - + Recursively copy library dependencies into destination package. Identify libraries to be installed based on the path in which they are located, rather than whether there is "libSDL" in the name. Use @@ -883,30 +1035,30 @@ machine upon which the program was built. 2010-01-09 21:06:31 fraggle - + Clear existing arguments when adding a file. 2010-01-09 20:42:30 fraggle - + Add file to command line when opened; add link from AppController to LauncherManager. 2010-01-09 18:54:04 fraggle - + Initial code to identify file type by extension and add file to command line. 2010-01-09 18:38:48 fraggle - + Hook in AppController as delegate for application, add file associations to property list file. 2010-01-05 17:20:58 fraggle - + Add "clean" target to package makefiles. 2010-01-05 15:52:12 fraggle - + Move config.make up to pkg/ directory. Use static makefiles to generate all packages, rather than dynamically generated makefiles. Add pkg/osx to dist. Make OS X staging directory depend on top level @@ -914,218 +1066,218 @@ is not already present. Set svn:ignore properties. 2010-01-04 22:53:44 fraggle - + Fix single space error when listing libraries. 2010-01-04 22:45:45 fraggle - + Copy binaries into app dir along with libraries. 2010-01-04 22:24:48 fraggle - + Include documentation files in package. 2010-01-04 22:19:53 fraggle - + Fix GNUstep build. 2010-01-04 22:11:11 fraggle - + Generate Info.plist and config.make in configure and remove temporary versions. Include config.h from top level. 2010-01-04 22:01:32 fraggle - + Import OS X launcher code to trunk. 2010-01-03 03:49:11 fraggle - + Add quotes around $@ in autogen script (thanks exp[x]) 2009-12-28 20:57:20 fraggle - + When recording low resolution (non-longtics) Vanilla demos, carry forward the error from angleturn caused by the reduced resolution, so that consecutive errors can accumulate, possibly making turning slightly smoother. 2009-12-27 01:42:13 fraggle - + Oops. 2009-12-27 00:11:18 fraggle - + Allow DOOMWADDIR/DOOMWADPATH to contain the complete path to IWAD files, as well as directories in which to search for IWAD files. 2009-12-18 22:11:06 fraggle - + Fix poor quality application icons seen when the game is running. Add back 8-bit icon files alongside files including both 8-bit and high quality 32-bit versions. Use the high quality icon files for resource files includes, and the low quality ones for in-game SDL. 2009-12-18 21:11:32 fraggle - + Update generated source files containing icon data. 2009-12-18 21:10:35 fraggle - + Make ExecuteCommand() under Unix return a failure when the executable cannot be executed. 2009-12-14 20:57:04 fraggle - + Use GetModuleFileNameW to get the (Unicode) path to the Doom executable. This hopefully fixes problems with Unicode directory names. 2009-12-14 18:54:25 fraggle - + Add Chocolate Doom/setup icons with scaled versions for various different icon sizes (thanks MikeRS). 2009-12-12 01:20:49 fraggle - + Fix textscreen black border bug. 2009-12-09 02:40:39 fraggle - + Fix the setup tool on Windows Vista/7 to not prompt for elevated permissions and to disable the "Program Compatibility Assistant" (thanks hobbs and MikeRS). 2009-11-29 22:50:17 fraggle - + Add other missing files to dist. 2009-11-29 22:25:51 fraggle - + Include .lvimrc in dist. 2009-11-21 03:56:59 fraggle - + Add Makefile to build Win32 packages. 2009-11-21 02:05:56 fraggle - + Use execvp() rather than execv(), to look up Doom binary in the PATH if necessary. 2009-11-21 00:40:58 fraggle - + Apply configuration file invalid key setting fix to setup code. 2009-11-21 00:38:16 fraggle - + Don't crash if key settings are set in a configuration file that are out of range (thanks entryway). 2009-11-21 00:24:59 fraggle - + Fix crash with chocolate-setup under Windows (thanks Janizdreg). 2009-11-19 21:49:13 fraggle - + Rework the OS X MIDI disabling code, as SDL_mixer 1.2.11 fixes the crash. Check and disable MIDI by default if using an older version of SDL on OS X. 2009-11-19 21:07:31 fraggle - + Make chocolate-setup use its own location in the filesystem to find the location of the chocolate-doom executable. Remove INSTALL_DIR define. 2009-11-05 19:57:55 fraggle - + Perform bounds checking on values passed to TXT_UpdateScreenArea() to avoid crashes. 2009-10-26 19:28:12 fraggle - + Initial hacks for compiling under SDL 1.3. 2009-10-17 21:13:54 fraggle - + Fix error in last change. 2009-10-17 20:39:37 fraggle - + Use M_StrToInt() when processing values passed with -spechit, so that hex values can be specified. 2009-10-17 20:29:46 fraggle - + Import donut overrun emulation code from PrBoom+ (Thanks entryway). 2009-10-16 19:10:30 fraggle - + Fix compilation under MSVC (thanks entryway). 2009-10-10 23:58:25 fraggle - + Rename pkg/wince/Makefile to pkg/wince/GNUmakefile (it uses GNU extensions). 2009-10-10 22:46:14 fraggle - + Add pkg directory to make dist. 2009-10-10 02:02:58 fraggle - + Don't crash when using the donut special type and the joining linedef is one sided (thanks Alexander Waldmann). 2009-10-05 21:25:53 fraggle - + Fix desync in ep1-0500.lmp on 64-bit (thanks exp(x)). 2009-10-05 00:38:14 fraggle - + Provide pointer to STARTUPINFO structure when calling CreateProcessW, to stop crash under normal Windows (not CE) when launching Doom from the setup tools (thanks Janizdreg). 2009-10-01 20:08:21 fraggle - + Oops. 2009-10-01 02:04:00 fraggle - + Oops. 2009-10-01 00:07:03 fraggle - + Change British English spellings to American English, for consistency. 2009-09-20 16:27:40 fraggle - + Use "const char" in libtextscreen where appropriate (thanks entryway). 2009-09-11 22:56:47 fraggle - + Add (lack of) copyright notice for SDL workaround. 2009-09-07 20:43:04 fraggle - + Fix compilation under MacOS X. 2009-09-06 19:15:52 fraggle - + Fixes for MSVC compile (thanks entryway). 2009-08-28 00:27:47 fraggle - + Allow PGUP/PGDN to scroll up and down in scroll panes (thanks LionsPhil). 2009-07-20 23:27:59 fraggle - + Remove redundant variable assignment (thanks Quasar/Yagisan) 2009-07-20 01:37:41 fraggle - + Save and display the loading disk icon as a fixed 16x16 square, from an image drawn at the bottom right corner of the screen. This seems to be the same as how Vanilla behaves, and fixes chook3.wad, that uses @@ -1133,978 +1285,978 @@ left. 2009-07-13 23:43:06 fraggle - + Add stdio.h include to fix MSVC build (thanks Kaiser) 2009-07-12 17:47:12 fraggle - + Fix compile with libsamplerate. 2009-07-12 15:00:50 fraggle - + On Windows CE, use the Windows API to find the amount of available memory, so that at least two megabytes are always left available to the OS. 2009-07-11 12:15:32 fraggle - + Add missing item to NEWS. 2009-07-07 20:46:55 fraggle - + Update NEWS. 2009-07-07 20:38:00 fraggle - + Fix launching of the game from the setup tool in Windows CE. 2009-06-21 20:33:35 fraggle - + Add Makefile for building CAB files, dependency calculation. 2009-06-21 20:19:43 fraggle - + Use correct filename for SDL_net DLL. 2009-06-21 20:03:38 fraggle - + Remove temporary files after generating CAB file. 2009-06-20 23:13:44 fraggle - + Add script to generate Windows CE install package. 2009-06-16 20:47:13 fraggle - + Automatically allocate a smaller zone size if it was not possible to allocate the default 16 MiB. 2009-06-13 18:10:18 fraggle - + Don't post zero key events. 2009-06-12 20:07:55 fraggle - + On Windows CE systems without a keyboard, patch the default settings to use hardware keys. 2009-06-12 18:58:42 fraggle - + Remove debug messages. 2009-06-12 18:35:39 fraggle - + Set the USER environment variable based on the owner information from the registry. 2009-06-12 18:34:27 fraggle - + Always grab input on Windows CE. 2009-06-11 22:34:36 fraggle - + Include libc_wince.a in chocolate-server build. 2009-06-11 20:41:20 fraggle - + Grab the input in setup when reading a new key binding, so that Windows CE buttons are read properly. Map buttons to PC function keys. 2009-06-11 19:19:05 fraggle - + Include libc_wince.h on Windows CE. 2009-06-11 19:18:12 fraggle - + Declare getenv/putenv on Windows CE for recent SDL versions that do not declare it. 2009-06-10 20:03:08 fraggle - + Add key bindings for pause, message refresh. 2009-06-08 20:26:29 fraggle - + Remove debugging code. 2009-06-08 19:15:57 fraggle - + Use SDL's getenv/putenv implementation, and populate at startup. 2009-06-08 00:41:10 fraggle - + Use CreateFileW instead of OpenFile (doesn't exist on Windows CE) 2009-06-07 20:08:08 fraggle - + Fix header includes (thanks exp[x]) 2009-06-07 19:18:02 fraggle - + Don't add DirectX/Windib selector on Windows CE. 2009-06-07 18:53:25 fraggle - + Use home dir to store configuration and savegames under Windows CE. 2009-06-07 18:33:19 fraggle - + Fix setup tool display configuration dialog when fullscreen is not supported. 2009-06-07 18:10:05 fraggle - + Make auto-adjust code switch to windowed mode if no fullscreen modes are available. 2009-06-07 17:41:46 fraggle - + Catch errors when initialising SDL. Use the small textscreen font by default on Windows CE if no fullscreen modes are available. 2009-06-07 17:39:08 fraggle - + Add missing SDL_thread include. 2009-06-07 17:35:43 fraggle - + Don't try to use the SDL DirectX driver under Windows CE. 2009-06-07 16:21:41 fraggle - + Fix setup tool compile on Windows CE. 2009-06-07 16:15:40 fraggle - + Remove call to setbuf. 2009-06-07 15:35:27 fraggle - + Add IWAD search dirs for Windows CE. 2009-06-07 15:20:46 fraggle - + Exit with an error on failure to allocate zone memory. 2009-06-07 03:10:21 fraggle - + Use MessageBoxW instead of MessageBox (doesn't exist on Windows CE) 2009-06-07 02:59:49 fraggle - + Add README file for Windows CE library. 2009-06-07 02:56:21 fraggle - + Detect Windows CE target and build/include libc_wince files as necessary. 2009-06-07 02:50:47 rtc_marine - + - Update textscreen codeblocks project to include txt_scrollpane.* and txt_smallfont.h 2009-06-07 02:33:58 fraggle - + Include libc_wince.h when on Windows CE. 2009-06-07 02:32:15 fraggle - + Add CPU affinity function for Windows CE. 2009-06-07 02:27:58 fraggle - + Add libc_wince.h header, and EISDIR error value. 2009-06-07 02:27:30 fraggle - + Use GetUserNameExW, not GetUserName (doesn't exist on WinCE) 2009-06-07 02:26:45 fraggle - + Fix compile with FEATURE_MULTIPLAYER disabled. 2009-06-07 02:24:40 fraggle - + Fix compile with FEATURE_SOUND disabled. 2009-06-07 01:56:23 fraggle - + Add Windows CE implementations of some ANSI C functions that are missing. 2009-06-06 22:13:44 fraggle - + Don't check for Steam/CD installer versions on Windows CE. 2009-06-05 17:58:48 fraggle - + Add key binding variables for automap and weapon keys. 2009-06-04 00:37:02 fraggle - + Increase height of menu bindings dialog. 2009-06-04 00:35:05 fraggle - + Use newer keyboard bindings dialog layout from raven-branch. 2009-06-04 00:20:37 fraggle - + Add unique key groups for menu navigation and shortcuts. 2009-06-04 00:20:06 fraggle - + Use key for confirming menu messages, not typed char. 2009-06-03 21:45:54 fraggle - + Add dialog to setup tool for editing menu shortcuts. 2009-06-03 21:18:04 fraggle - + Add config file variables to increase/decrease screen size. 2009-06-03 20:59:26 fraggle - + Fix shortcut keys for menu items. 2009-06-03 20:55:50 fraggle - + Add configuration file entries for menu key bindings. 2009-06-03 20:37:19 fraggle - + Add key_ variables for the keys used to control the menu. 2009-05-26 23:14:24 fraggle - + Fix tags for functions using TXT_UNCAST_ARG. 2009-05-26 22:13:18 fraggle - + Set appropriate vim 'tags' variable for ctags files. 2009-05-21 20:18:38 fraggle - + Set display settings window position based on screen dimensions, rather than hard coding position. 2009-05-19 18:07:49 fraggle - + Fix manpage documentation for DOOMWADPATH (thanks MikeRS) 2009-05-18 19:30:49 fraggle - + Fix A_BossDeath behavior in v1.9 emulation mode (thanks entryway) 2009-05-17 14:54:19 fraggle - + Always use an SDL buffer size that is a power of two. Reduce buffer size to 70ms. 2009-05-12 19:03:20 fraggle - + Add option to "join game" dialog in setup tool to autojoin a LAN game. 2009-05-12 19:01:27 fraggle - + Make txt_inputboxes emit a "changed" signal when their value is changed. 2009-05-07 22:59:38 fraggle - + Calculate SDL buffer size automatically based on sample rate. 2009-05-05 01:00:53 fraggle - + Better ASCII chart. 2009-05-05 00:46:27 fraggle - + Minor smallfont fixups. 2009-05-01 22:05:57 fraggle - + Add copyright headers to textscreen examples. 2009-04-26 17:59:08 fraggle - + More smallfont fixups. 2009-04-23 20:58:11 fraggle - + Fix up some extended ASCII characters. 2009-04-23 19:19:52 fraggle - + Oops. 2009-04-23 19:18:43 fraggle - + Add small textscreen font for low resolution displays, based on the Atari-Small font by Tom Fine. 2009-03-15 14:44:23 fraggle - + Fix clipped sounds when using libsamplerate (thanks David Flater) 2009-03-14 15:28:41 fraggle - + Add check to allow sched_setaffinity code to work on older versions of libc. 2009-03-12 18:55:27 fraggle - + Define INVALID_SET_FILE_POINTER if it is not defined, to fix compilation under MSVC6 (thanks Quasar) 2009-03-08 22:51:25 fraggle - + Add "make doc" target to run Doxygen, and add a Doxyfile. Add @file tags to start of header files so that Doxygen will process them. 2009-03-07 00:35:08 fraggle - + Add documentation for high-level txt_desktop.h functions. 2009-03-07 00:24:45 fraggle - + Add documentation for high-level textscreen functions. 2009-03-06 20:01:32 fraggle - + Fix signed/unsigned conversion warning. 2009-03-03 19:26:20 fraggle - + Look up SetProcessAffinityMask function at runtime, so that the program should work under Win9x again. 2009-01-30 23:53:47 fraggle - + Fix layout of widgets within scroll panes. Scroll scroll panes in response to keyboard events. 2009-01-29 23:26:03 fraggle - + Shrink text box slightly. 2009-01-29 23:00:14 fraggle - + Allow clicking within scroll bars to set position. 2009-01-29 22:54:13 fraggle - + Add scrollable pane widget to textscreen library. 2009-01-17 14:05:31 fraggle - + Fix '-mmap' command line parameter. 2009-01-07 22:05:13 fraggle - + Create the ~/.chocolate-doom/savegames directory on startup if it does not exist. 2009-01-07 21:51:37 fraggle - + Replace -nommap with -mmap; do not use mmap()ed file access by default. Fixes Plutonia 2, and several other minor things. 2008-12-10 20:25:05 fraggle - + Bump version to 1.2.1, update NEWS and ChangeLog. 2008-12-10 20:20:10 fraggle - + Fix crash when playing Doom 1 levels. 2008-12-10 01:06:08 fraggle - + Bump version to 1.2.0, update NEWS and ChangeLog. 2008-12-10 01:01:19 fraggle - + Undo previous change. 2008-12-10 00:42:49 fraggle - + Set icon before calling TXT_Init, for setup and ENDOOM screens. 2008-12-10 00:00:55 fraggle - + Fix window icon/title under Windows XP Luna theme. 2008-12-09 23:32:19 fraggle - + Make intermission screen work on MAP33, to be consistent with Vanilla Doom. Also, make levels after MAP33 trigger a V_DrawPatch error. 2008-12-09 20:35:17 fraggle - + Add check for sched_setaffinity to configure and only use it if it is found. Display a message if we don't have any way to set processor affinity. 2008-12-09 19:56:43 fraggle - + Add SDL_CFLAGS, SDL_LDFLAGS to default compile flags, and check for SDL in configure before checking for libraries and headers, to fix Windows. 2008-12-03 22:09:22 fraggle - + Use FILE_MAP_COPY instead of FILE_MAP_ALL_ACCESS for mapping files (thanks to Christian Chech). 2008-12-01 21:08:23 fraggle - + Don't try to read SDL events until initialised. 2008-10-01 21:22:09 fraggle - + Add .lvimrc local vim project settings. 2008-09-21 19:20:32 fraggle - + Don't play DEMO4 if gameversion is emulating chex.exe - it only plays demos 1-3. 2008-09-20 19:18:06 fraggle - + Set processor affinity under non-Windows platforms using the POSIX API. 2008-09-16 01:17:20 rtc_marine - + - Force use of dwarf-2 debugging information - Fix an age-old problem of not being able to find -lpcsound, the debug target was looking for it rather than -lpcsound-dbg 2008-09-14 19:14:46 fraggle - + Add -nocheat command line parameter to disable applying cheats from dehacked files. 2008-09-07 18:47:08 fraggle - + Strip out NUL characters from dehacked files; this makes the dehacked patch with portal.wad load properly. 2008-08-29 00:31:53 fraggle - + Update TODO. 2008-08-24 03:06:26 fraggle - + Update INSTALL to include some notes about Chex Quest. 2008-08-24 02:58:57 fraggle - + Update missing chex.deh to reference its location in the idgames repository. 2008-08-20 19:27:56 fraggle - + Use / as a path separator, to allow cross-compiling of resource files (thanks Anonymous bug reporter) 2008-08-19 20:51:41 fraggle - + Fix crash related to A_BFGSpray with NULL target when using dehacked patches - discovered with insaned2.deh (thanks CSonicGo) 2008-08-09 18:09:23 fraggle - + Don't modify level lumps when loading levels. 2008-08-08 23:38:25 fraggle - + Use FILE_MAP_ALL_ACCESS rather than FILE_MAP_READ when mmapping files under Windows (thanks entryway) 2008-08-02 14:29:37 fraggle - + Search for chex.deh in WAD path. 2008-07-31 23:01:38 fraggle - + Update netcode to allow chex quest gameversion. 2008-07-31 22:29:20 fraggle - + Update Chocolate Setup to support chex.wad. 2008-07-31 21:21:58 fraggle - + Fix crash on Chex Quest intermission screen (thanks entryway) 2008-07-31 21:06:42 fraggle - + Automatically load chex.deh on startup if playing in chex mode. 2008-07-31 20:43:45 fraggle - + Fix mistake in exit confirmation string that was breaking dehacked patches that replace it. 2008-07-31 12:55:35 rtc_marine - + Update codeblocks project to locate setup manifest 2008-07-29 19:06:04 fraggle - + Don't do the Final Doom teleport quirk with Chex Quest, as chex.exe doesn't do it. 2008-07-29 19:05:16 fraggle - + Monsters don't drop ammo in Chex Quest. 2008-07-29 01:50:56 fraggle - + Add magic dehacked comment to enable long cheat sequences (also for Chex Quest support) 2008-07-27 00:51:25 fraggle - + In chex mode, always warp to an episode 1 level, and display the level title in the automap for the equivalent episode 1 level. 2008-07-26 16:45:52 fraggle - + Allow magic comments in dehacked files that disable the DOS dehacked text replacement limit, so that we can use a dehacked patch to emulate chex.exe. 2008-07-26 16:29:08 fraggle - + Chex Quest's chex.exe is based on the Final Doom exe, not the Ultimate Doom exe. 2008-07-26 16:23:06 fraggle - + Fix "dimensional shambler waiting at the dos prompt" quit message to match the one in doom2.exe precisely. 2008-07-25 20:56:39 fraggle - + Initial chex.exe emulation. 2008-07-10 00:22:34 fraggle - + Fix dehacked replacements for the "press y to quit to dos" string. 2008-07-07 10:10:26 fraggle - + Fix quit screen confirm message to say "quit to dos" rather than just "quit" (thanks MikeRS) 2008-06-14 18:42:06 fraggle - + Add a helpful message for people trying to play with the wrong IWAD. 2008-06-11 01:14:07 fraggle - + Only apply dehacked green armor class to the green armor shirt, not the armor helmets as well. 2008-06-09 19:11:24 fraggle - + Always set armor class to 2 when picking up a megasphere (thanks entryway). 2008-05-05 04:52:08 GhostlyDeath - + Updated Code::Blocks project for new files 2008-05-05 04:48:45 fraggle - + Add setup-manifest.xml to dist. 2008-05-05 04:44:28 GhostlyDeath - + Updated VC++ Project for added files; Manifest should have version 1.1.1.0 not 1.0.0.0; the rc files in the codeblocks folder have been updated 2008-05-05 04:11:29 fraggle - + (Hopefully) fix for Windows Vista asking for security elevation when running chocolate-setup. 2008-05-04 22:43:38 fraggle - + Remove Vanilla Doom reload hack. 2008-05-04 18:09:51 fraggle - + Add command line option to disable mmapped WAD I/O. 2008-05-04 17:45:10 fraggle - + Fix win32 mmap driver and add to build. 2008-05-02 23:52:00 fraggle - + Add Windows memory mapping backend. 2008-05-02 20:19:38 fraggle - + Memory-mapped WAD access. 2008-05-02 20:18:52 fraggle - + Fix up some more code calling Z_Free instead of W_ReleaseLumpNum. 2008-05-02 19:48:43 fraggle - + Add W_CacheLumpNum,Name API to WAD code for releasing a lump back to cache when it is no longer needed. Switch existing code to use the new API instead of Z_ChangeTag. 2008-05-02 18:32:09 fraggle - + Add WAD I/O abstraction layer - first step for mmapped WAD access. 2008-04-26 17:31:47 fraggle - + "Python Image Library" -> "Python Imaging Library" (thanks exp(x)). 2008-04-26 15:33:14 fraggle - + Add new Chocolate Doom icon. 2008-04-26 00:33:00 fraggle - + Generate transparency mask for the application icon from black parts of the image. 2008-04-23 08:44:17 GhostlyDeath - + VC++ Project now builds 2008-04-20 02:00:11 fraggle - + Bump version to 1.1.1, update ChangeLog and NEWS. 2008-04-19 17:41:58 fraggle - + Fix build problem when libsamplerate support is enabled. 2008-04-19 16:52:37 fraggle - + Bump version to 1.1.0, update ChangeLog and NEWS. 2008-04-19 16:30:42 fraggle - + Fix some more warnings. 2008-04-19 16:27:50 fraggle - + Fix warning. 2008-04-19 14:43:17 fraggle - + Don't successfully save a savegame if a buffer overrun occurs, and don't overwrite the existing savegame. 2008-04-19 14:24:59 fraggle - + Update NEWS. 2008-04-16 21:30:04 fraggle - + Update some of the documentation. 2008-04-16 00:16:16 fraggle - + Make the BSD PC speaker driver work on FreeBSD. 2008-04-15 22:40:33 fraggle - + Make use_libsamplerate be an integer value that controls conversion quality, rather than an on/off setting. 2008-04-15 22:19:35 fraggle - + Fix bug with joystick configuration. 2008-04-02 01:00:11 fraggle - + April Fools! 2008-04-01 01:10:20 fraggle - + Flip all levels on load - the game is more fun this way. 2008-03-30 23:17:13 rtc_marine - + Fix an error message 2008-03-15 23:54:00 rtc_marine - + Fix build of Chocolate Server 2008-03-13 18:41:00 fraggle - + Display a warning message if use_libsamplerate != 0, but libsamplerate support is not compiled in. 2008-03-13 18:33:59 fraggle - + Apply SRC patch from David Flater. 2008-03-12 20:12:51 fraggle - + Add "see also" sections to manpages and GPL note. Add "files" section to chocolate-doom.6 2008-03-09 03:19:35 rtc_marine - + update codeblocks project to reflect previous commit changes 2008-03-09 03:02:48 fraggle - + Split out configuration file code from m_misc.c into m_config.c. Move screenshot code into v_video.c Add M_FileLength common function for finding the length of an open file. 2008-02-28 21:22:41 fraggle - + Move vc9/ project files into the msvc/ directory and update the README file for the MSVC files. 2008-02-28 20:07:31 fraggle - + Fix MSVC project file and resource file for new filenames. 2008-02-28 20:04:10 fraggle - + Add fixes for MSVC warnings (thanks entryway). 2008-02-26 22:13:35 fraggle - + Update NEWS. 2008-02-26 22:10:06 fraggle - + Don't sort config file variables alphabetically. Throw an exception for unknown documentation comments. 2008-02-26 22:05:41 fraggle - + Minor config file documentation fixes. 2008-02-25 23:50:07 fraggle - + Replace manpage header, footer, environment files with a single template file. Generate documentation for the default.cfg and chocolate-doom.cfg configuration files. 2008-02-24 20:25:51 fraggle - + Switch to using CONFIG_VARIABLE_ macros for the configuration file tables. Add documentation for each value (for autogenerating documentation). 2008-02-24 00:55:07 fraggle - + Fix leftover "junk" displayed on the screen on the initial melt when using -warp. 2008-02-23 22:51:17 fraggle - + Perform a low-pass filter of converted sounds to filter out high-frequency noise from the upscaling process. 2008-02-21 20:01:30 fraggle - + Shut up compile warning. 2008-02-17 03:12:25 fraggle - + Add command line option for server to allow client version checking to be disabled. 2008-02-13 19:06:11 fraggle - + Don't try to precache sound effects that don't exist. 2008-02-12 22:16:12 fraggle - + Add comment. 2008-02-12 22:07:41 fraggle - + Use SRC_SINC_FASTEST for speed when using libsamplerate for conversions, and precache all sound effects for speed. 2008-02-12 21:29:58 fraggle - + Add use_libsamplerate variable to setup. 2008-02-12 21:26:31 fraggle - + Set the default startup_delay to 1s. 2008-02-11 22:59:51 fraggle - + Add support for sample rate conversion using libsamplerate (thanks to David Flater for this patch). 2008-02-10 18:44:05 fraggle - + Fix compiler warnings. Refactor the intercepts overrun code so that it should work properly on big endian machines as well as little endian machines. 2008-02-09 22:31:02 fraggle - + Fix up the R_Main startup progress dots. If stdout is a file, don't display the surrounding box. 2008-02-09 22:21:33 fraggle - + Set the process affinity mask to 1 on Windows, to work around a bug in SDL_mixer (thanks entryway). 2008-02-09 22:04:13 fraggle - + Set the SDL_VIDEODRIVER in setup, so that we get the correct modes list (different video drivers can give different results). Restart textscreen when the video driver is changed. 2008-02-09 20:30:27 fraggle - + Define WIN32_LEAN_AND_MEAN to fix windows build of i_system.c. 2008-02-09 19:17:19 fraggle - + Remove some unneeded functions from i_system.c. Make I_Error exit using exit() rather than abort(). Display a message box with the error on Windows. 2008-02-06 23:55:33 fraggle - + Use geometric distance to find the nearest mode when autoadjusting, rather than number of pixels. 2008-02-06 23:42:29 fraggle - + Add -geometry command line parameter to allow the screen size to be specified with one combined option. 2008-02-06 22:18:16 fraggle - + Make 320x240 a "good" mode when aspect ratio correction is turned off. Don't switch to "bad" modes when changing other settings. 2008-02-05 23:32:30 fraggle - + Set screen_{width,height} when finding the nearest mode. Save the last mode explicitly selected and use this as criteria for which mode is nearest. Align the display window so that the top always stays still. 2008-02-05 05:34:07 rtc_marine - + fix a few warnings 2008-02-04 22:45:53 fraggle - + Mark 512x400 as a "bad" mode (don't autoadjust to it in fullscreen). Makes 640x480 the default when 320x200 mode is not available. 2008-02-04 22:43:11 fraggle - + Update chocolate-setup to the new screen mode config system. 2008-01-31 22:43:20 rtc_marine - + Use project names as binary names 2008-01-30 19:09:31 fraggle - + Be more accurate in describing windowboxed modes as either "pillarboxed", "letterboxed" or "windowboxed". 2008-01-26 15:38:28 fraggle - + Update make dist for new codeblocks files. 2008-01-25 23:05:53 rtc_marine - + Change filenames to be name independant Update the project files and main workspace 2008-01-25 22:48:23 fraggle - + Update win32 resource files for the new icon filenames. 2008-01-25 17:37:48 fraggle - + Rename some files to be package name independent. 2008-01-24 19:26:12 fraggle - + Update NEWS. 2008-01-24 19:14:44 fraggle - + Add manpages for chocolate-setup, chocolate-server, based on the versions by Jon Dowland for the Chocolate Doom debian package (thanks!) 2008-01-24 19:10:49 fraggle - + Make lookup tables const where possible. 2008-01-24 19:09:47 fraggle - + Fix fast / respawning monsters parameter not exchanged when starting netgames (thanks GhostlyDeath). 2008-01-23 23:56:35 fraggle - + Add URLs for patches. 2008-01-22 20:02:02 fraggle - + Use MEM_SEEK_SET for memio, not SEEK_SET. 2008-01-22 20:00:42 fraggle - + Add SDL_mixer, SDL_net URLs and a section on timidity. 2008-01-22 19:55:50 fraggle - + Include MSVC project files in make dist. 2008-01-22 19:52:38 fraggle - + Add INSTALL file. 2008-01-21 15:07:15 GhostlyDeath - + Removed spaces from VC9 Project 2008-01-20 16:18:16 fraggle - + Fix loading disk icon. Add back -1, -2, -3 command line options for scale. Only allow 320x200, 640x400 special case for aspect ratio correct when running fullscreen. Clean up "nearest mode" autoadjustment. Fix crash with autoadjust when running windowed. 2008-01-20 04:59:50 fraggle - + Add -width, -height command line parameters for specifying the screen mode. 2008-01-20 04:47:52 fraggle - + Refactor the video mode configuration system. The previous system was built around the program choosing a screen mode from the user's settings, this is based around choosing settings from the specified @@ -2114,426 +2266,426 @@ complement to the existing vertical stretching). 2008-01-20 01:59:39 fraggle - + Use strcmp(), not strcasecmp() for checking driver name 2008-01-20 00:22:47 fraggle - + Revert doomdef.h include added to pcsound.c. 2008-01-16 14:41:07 rtc_marine - + Fix build Remove unused libraries from certain projects 2008-01-16 14:33:08 GhostlyDeath - + Updated VC9 project, -setup and -server now build correctly 2008-01-16 13:39:24 GhostlyDeath - + Added MSVC9 (2k8 Express) Project File; The client builds but -setup and -server just need to have files excluded/included from the project 2008-01-16 11:13:42 rtc_marine - + Update config.h to 1.0.0 for the codeblocks projects 2008-01-12 12:28:08 fraggle - + Make sure we credit Id in the manpage as well. Update copyright to 2008. 2008-01-10 00:46:53 fraggle - + Use the same spechits magic value that PrBoom-plus uses (thanks Lemonzest). 2007-12-30 04:51:56 fraggle - + Add environment variable section to manpage. 2007-12-18 22:09:51 fraggle - + Don't center the mouse on startup if the mouse is disabled (thanks Siggi) Reset the palette when the window is restored to clear any screen corruption (thanks Catoptromancy) 2007-12-14 22:23:13 fraggle - + Don't grab the mouse if the mouse is disabled by -nomouse or through use_mouse in the configuration file (thanks MikeRS). 2007-12-14 18:31:28 fraggle - + Update NEWS. 2007-12-14 18:29:23 fraggle - + Include doomfeatures.h in deh_misc.h so that FEATURE_DEHACKED is checked properly. Fixes STRAIN desyncs with BFG Cells/Shot not set properly. 2007-12-13 23:04:58 fraggle - + Add a list of wiki pages to link to and automatically insert links. 2007-12-13 22:32:33 fraggle - + Add missing argument to the extraconfig command line parameter. 2007-12-13 22:27:07 fraggle - + Add mmapped file IO note to TODO. 2007-12-13 22:26:16 fraggle - + Add @vanilla tag for Vanilla doom command line options. Add missing documentation for -nosound, -nomusic, -nosfx. Fix up some bugs with the docgen wikitext output and allow control over output of Vanilla options. 2007-12-10 21:03:28 fraggle - + Bump version to 1.0.0 and update ChangeLog. 2007-12-08 11:07:13 fraggle - + Update NEWS. 2007-11-23 18:26:40 fraggle - + Use _spawnv() to invoke Doom under Windows, rather than system(). Fixes bug with DOS window "flashing up" when opening the multiplayer dialogs. 2007-10-19 00:55:11 fraggle - + Reorder actionf_t union members to fix warnings in info.c. 2007-10-19 00:54:11 fraggle - + Shut up signed / unsigned comparison warnings. 2007-10-19 00:44:56 fraggle - + #define snprintf, vsnprintf to _snprintf, _vsnprintf in MSVC. 2007-10-19 00:40:50 fraggle - + #define inline to _inline in MSVC. 2007-10-19 00:38:53 fraggle - + Fix for strcasecmp in MSVC; #define to stricmp. Outside MSVC, use strings.h. 2007-09-15 18:09:47 fraggle - + Fix desyncs caused by previous change to A_Explode. 2007-09-15 14:13:00 fraggle - + Check for playeringame overflow when spawning a new player (for compatibility with vex6d.wad / bug_wald.lmp) 2007-09-15 13:35:33 fraggle - + Add intercepts overrun emulation from PrBoom-plus. 2007-09-14 23:20:08 fraggle - + Add P_SubstNullMobj, substitute NULL mobjs for a dummy mobj where mo->target is not checked for NULL. 2007-09-11 10:02:24 fraggle - + Remove obsolete autotools scripts from dist, require automake 1.8 (please upgrade!) 2007-09-05 00:50:56 fraggle - + Fix build failure when python is not installed. 2007-09-03 02:05:27 fraggle - + Up the default sample rate to 44100. 2007-09-03 02:00:19 fraggle - + Fix crash when playing long sounds (like DSBOSSIT) 2007-09-03 01:43:29 fraggle - + Try to open /dev/speaker in the parent process, so that we can tell if we don't have permission to open it before we fork. 2007-09-03 01:30:51 fraggle - + Add pcsound driver for OpenBSD. 2007-09-02 21:17:19 fraggle - + Disable "saving config in ... " message for setup (thanks MikeRS) 2007-09-02 21:14:40 fraggle - + Don't make novert affect the joystick as well (thanks Janizdreg) 2007-08-31 09:59:34 fraggle - + Make SHORT and LONG macros return signed values; this is the behaviour of the versions in the original source and some code depends on it. 2007-08-31 09:31:48 fraggle - + Use short for texpatch_t .originx, .originy: fixes problem caused by sign conversion in the endianness code. 2007-08-31 08:27:44 fraggle - + Use gcc packed attribute for all structures read/written to disk. This fixes architectures where structure fields are aligned differently to optimise reads, causing the game to crash. 2007-08-27 20:31:30 fraggle - + Fix bug where the automap always follows player 1 in multiplayer mode (thanks Janizdreg!) 2007-08-24 01:27:39 fraggle - + Initialise tracksize variable before mus2mid conversion, otherwise it is not reset the next time we convert a mid 2007-08-20 00:54:27 fraggle - + Use __APPLE__ instead of __MACOSX__. 2007-08-09 01:28:34 fraggle - + Remove debugging message. 2007-08-09 01:04:03 fraggle - + Don't crash when all players have quit. 2007-08-09 01:03:41 fraggle - + Disconnect any remaining drones when the last real player quits. 2007-08-08 22:14:48 fraggle - + Remove M_FileExists check for steam directories and add them as possible search paths anyway. 2007-08-08 22:11:29 fraggle - + Add the default DEICE install directories to the IWAD search path on Windows. 2007-08-08 21:06:46 fraggle - + Match steam IWAD directory order to IWAD search order. 2007-08-08 19:04:35 fraggle - + Move SCREENHEIGHT_4_3 to doomdef.h; remove some unused constants. 2007-08-08 19:03:32 fraggle - + Make M_FileExists work on directories. 2007-08-08 03:00:53 fraggle - + Add temporary debugging messages for Steam support. 2007-08-08 02:17:38 fraggle - + Don't assume Steam InstallPath ends in a \ 2007-08-07 05:26:16 fraggle - + All of the steam IWADs are in \base subdirectories. 2007-08-07 02:19:49 fraggle - + Autodetect IWADs installed by Steam. 2007-08-06 05:48:55 fraggle - + Remove duplicate FileExists function. 2007-08-03 23:17:15 fraggle - + Fix 'pop' at the end of sound effects caused by an audio conversion bug. 2007-07-30 03:03:23 fraggle - + Set timedemo start time when demo playback begins, not when the level begins. Using the level start time causes problems when timing multi-level demos. 2007-07-30 01:44:49 fraggle - + Make the z_native "out of memory" error message match the normal z_zone one. 2007-07-30 01:31:33 fraggle - + Fix bug in z_native linked list logic. Clear out all PU_CACHE blocks when out of memory. 2007-07-30 00:41:12 fraggle - + Allow more than the standard three mouse buttons to be defined through setup (hopefully) 2007-07-22 15:45:53 fraggle - + Add missing new mouse buttons to setup (thanks RazTK). 2007-07-10 14:37:58 fraggle - + Another crazy idea. 2007-07-10 14:37:44 fraggle - + Shut up compiler warning. 2007-07-08 21:53:18 fraggle - + Make the numeric keypad behave like Vanilla does. 2007-07-08 18:52:45 fraggle - + Add -netdemo for playing back netgame demos that only have a single player. 2007-07-08 00:58:24 fraggle - + Make drones quit when disconnected from the server. 2007-07-08 00:45:55 fraggle - + Don't grab the mouse if a drone player (no input, so it isn't needed). 2007-07-05 13:06:10 fraggle - + Clearer prompt when asking whether to save settings on exit of setup. 2007-07-05 12:57:18 fraggle - + Remove "startup delay" from the setup display configuration dialog. 2007-07-04 23:57:07 fraggle - + Add pcsound_internal.h to dist. 2007-06-30 15:34:03 fraggle - + Don't crash if there is a multiplayer demo in the demo loop. 2007-06-28 00:15:56 fraggle - + Interpret skill level setting as a signed integer, to allow -skill 0. 2007-06-22 20:14:49 fraggle - + Don't allow two actions bound to the same button in setup. 2007-06-22 12:55:14 fraggle - + Replace 35 with TICRATE where appropriate. 2007-06-21 23:51:47 fraggle - + Add a joystick dead zone for joysticks that don't have them. 2007-06-21 23:00:38 fraggle - + Revert previous change from bitshifts to divides; this causes demo desyncs. 2007-06-21 12:33:46 fraggle - + Add arrlen() macro as a clearer way of doing sizeof(array) / sizeof(*array) 2007-06-21 12:32:04 fraggle - + Add portability section to HACKING file. 2007-06-20 12:44:46 fraggle - + Update TODO. 2007-06-20 12:21:57 fraggle - + Add x5 screen scale (thanks MikeRS!) 2007-06-20 01:37:40 fraggle - + Add new configuration options for the mouse and joystick for controls that are available through the keyboard. Justification: this is already possible through advanced mouse drivers and programs like js2x, so there might as well be a proper interface for it. 2007-06-19 00:59:08 rtc_marine - + Update codeblocks projects for new sound stuff Include envvars in projects, which is part of the new format 2007-06-19 00:50:42 fraggle - + Add -iwad when joining a game, as well as when creating one (thanks MikeRS :-) 2007-06-19 00:47:44 fraggle - + Remove deleted headers from Makefile.am. 2007-06-17 20:19:37 fraggle - + Make the music code modular as well, although for the time being there is only one module. Remove s_dummy.c. 2007-06-17 19:40:02 fraggle - + Split i_sound.c into i_sdlsound.c, i_sdlmusic.c, with generic "sound driver" modules, one for PC speaker and one for digital output. 2007-06-16 17:16:45 fraggle - + Switch back to z_zone, not z_native (oops!) 2007-06-16 17:04:00 fraggle - + Clean up sound code 2007-06-16 17:03:10 fraggle - + Use divides instead of bitshifts, for clarity 2007-06-16 17:02:58 fraggle - + Shut up strict aliasing warnings 2007-06-16 17:02:46 fraggle - + Switch to djb2 hash function and shut up compiler warnings 2007-06-15 00:20:30 rtc_marine - + Update codeblocks project 2007-06-14 22:45:50 fraggle - + Add configuration file variable to change the sound sample rate (snd_samplerate) 2007-06-14 22:15:52 fraggle - + Support up to 20 joystick buttons. Justification: most modern joysticks and joypads have many more than four buttons. Keeping the limit at four buttons restricts the player into using the first four @@ -2541,219 +2693,219 @@ buttons. 2007-06-14 22:03:22 fraggle - + Don't send joystick updates when the joystick is disabled. Shut up warning caused by missing header. 2007-06-13 20:12:13 fraggle - + Working joystick code. 2007-06-12 19:49:29 fraggle - + Emulate overflows in P_FindNextHighestFloor. Thanks to entryway for this fix. 2007-06-09 23:28:55 fraggle - + Joystick calibration (untested) 2007-06-09 19:01:00 fraggle - + Add stamp-h1 to svn:ignore. 2007-06-09 19:00:19 fraggle - + Add *.exe to svn:ignore. 2007-06-09 18:51:16 fraggle - + Initial joystick calibration code. 2007-06-09 18:49:05 fraggle - + Open the joystick when prompting for a new button. 2007-06-09 18:45:14 fraggle - + Set svn:ignore on pcsound directory. 2007-06-04 19:35:51 fraggle - + Remove unneeded SDL.h include. 2007-06-04 19:34:51 fraggle - + Oops! 2007-06-04 19:34:24 fraggle - + Completed joystick button selection widget (untested) 2007-06-04 19:32:50 fraggle - + Rename txt_main.c to txt_sdl.c; add txt_sdl.h for SDL-specific API functions, while keeping txt_main.h for the common API. Add TXT_SDL_SetEventCallback to allow programs to intercept SDL events in the textscreen main loop. 2007-06-02 08:04:28 rtc_marine - + Update codeblocks projects for joystick stuff 2007-06-01 19:08:42 fraggle - + Display a meaningful message when trying to start with an invalid Joystick ID. 2007-06-01 19:08:09 fraggle - + Up the threshold for the always run hack to 20; it's conceivable that there are control pads with more than 10 buttons. 2007-06-01 19:06:15 fraggle - + Hide the joystick speed control when the always run hack is being used. 2007-06-01 00:16:23 fraggle - + Initial joystick support. 2007-05-24 15:31:54 fraggle - + Fix ByteSwapBlock macro. 2007-05-24 15:29:08 fraggle - + Add TXT_SetWindowTitle function to wrap SDL_WM_SetCaption, so that txt_desktop.c doesn't need to call SDL functions directly. 2007-05-24 15:26:08 fraggle - + Use I_Sleep in i_system.c instead of SDL_Delay directly. 2007-05-20 16:06:46 fraggle - + Fix crash when converting audio down to a lower sample rate. 2007-05-20 03:20:54 fraggle - + Stop music on sound shutdown so music isn't left playing at the ENDOOM screen. 2007-05-20 03:20:22 fraggle - + Initialise sound before network setup to fix bug with sound effects not playing when playing netgames on Windows (text mode waiting screen shutdown causes sound not to start up?) 2007-05-19 23:53:10 fraggle - + Update NEWS. 2007-05-19 23:48:39 fraggle - + Don't allow idclev in netgames. 2007-05-19 17:42:56 fraggle - + Fix tempo problems in pcsound linux driver. 2007-05-16 15:28:22 fraggle - + Add FEATURE_SOUND. 2007-05-16 14:52:09 fraggle - + Oops! 2007-05-16 14:49:04 fraggle - + Rejig net_cl_new_sync and drone to be in d_net.c instead of net_client.c. Fix FEATURE_MULTIPLAYER conditional compile. Move some function definitions in d_net.c into headers. Reorganise the Makefile to split out files into sections based on features. 2007-05-09 19:48:32 fraggle - + Fix ticdup. 2007-05-02 03:03:44 fraggle - + Check in autoconf if python is installed; if not, don't run python scripts. 2007-05-02 02:51:15 fraggle - + Add missing files to dist. 2007-04-29 15:53:37 fraggle - + Add missing codeblocks workspace files to dist. 2007-04-16 12:34:26 fraggle - + Fix crash: don't check for client resends after they have disconnected. 2007-04-03 10:31:12 rtc_marine - + Fix building with gcc 4.x 2007-03-27 12:57:28 fraggle - + Update NEWS. 2007-03-27 12:44:53 fraggle - + Update ChangeLog. 2007-03-27 12:40:04 fraggle - + <SDL.h> -> "SDL.h" 2007-03-27 00:20:10 fraggle - + Fix docgen makefile dependencies. 2007-03-27 00:19:22 fraggle - + Fix manpage copyright footer to include id as well as me. 2007-03-26 13:09:53 fraggle - + Search WAD search dirs when loading dehacked patches. 2007-03-19 16:44:49 fraggle - + Update TODO; PC speaker is supported now. 2007-03-16 22:26:06 fraggle - + Add back shiftxform table so that the shift key works in multiplayer chat when vanilla_keyboard_mapping is enabled. 2007-03-16 21:43:28 fraggle - + Add config file option to enable/disable native keyboard bindings. 2007-03-16 05:07:35 rtc_marine - + Update codeblocks project 2007-03-15 18:43:22 fraggle - + Change MD5 code to use the standard types used elsewhere in the program. 2007-03-15 18:38:55 fraggle - + Use SDL for endianness byte swapping. m_swap.c removed; m_swap.h renamed to i_swap.h. 2007-03-14 13:05:03 fraggle - + Use SDL's built-in audio conversion routines to convert sound effects to the output mixer device's sample rate. Simplistic (naive) resampling in cases where SDL's routines can't do a conversion. This @@ -2761,24 +2913,24 @@ 48khz output rate. 2007-03-12 12:38:54 fraggle - + Change "sound effects enabled" checkbox to a dropdown, allowing PC speaker to be selected as well. 2007-03-10 07:48:21 rtc_marine - + Minor changes: * No more shared libraries on windows, because they suck anyway and complicate things * Fix build virtual targets 2007-03-10 05:40:12 fraggle - + Ignore the HOME environment variable on Windows - just behave like Vanilla Doom. 2007-03-10 02:11:18 rtc_marine - + Lots of changes/additions: * Add libpcsound codeblocks project * Use libraries that are built and project dependencies inside main @@ -2787,20 +2939,20 @@ * Fix some warnings 2007-03-09 23:30:46 fraggle - + Add pcsound Linux driver. 2007-03-09 23:03:24 fraggle - + Don't build console mode apps; use the default -mwindows until the stdout.txt/stderr.txt thing can be fixed. 2007-03-09 22:50:48 fraggle - + Move the pcsound library to the top level, alongside textscreen. 2007-03-09 22:20:28 fraggle - + Partially revert the last change. I'm going with a mixed approach for handling key mappings. Chocolate Doom will use the original (broken) Doom behavior, in that keys will be unmapped. A German user will have @@ -2811,7 +2963,7 @@ wrong mappings when typing in text. 2007-03-09 12:56:45 fraggle - + Pay closer attention to keyboard mappings. In the menu code, distinguish between keys pressed and characters typed, so that, for example, when the menu prompts "press 'y' to continue", it responds to @@ -2819,92 +2971,92 @@ keyboard being pressed. Do the same when reading cheats. 2007-03-09 12:35:18 fraggle - + Fix discrepancy between Doom and setup program when prompting for keys. Add the ability to enable/disable key mappings so that the raw key can be read in setup, exactly the same way that it is in Doom. 2007-03-07 23:52:33 rtc_marine - + Update project Fix a warning 2007-03-07 19:08:27 fraggle - + Use native endianness for sound output, rather than always LSB. Add PC speaker code! 2007-02-24 02:30:17 fraggle - + Fix up setup tool to display the video driver setting tabulated with all the other settings. 2007-02-24 02:26:02 fraggle - + Fix video_driver setting. 2007-02-24 02:19:45 fraggle - + Fix library ordering for libtextscreen.a; fixes windows compile. 2007-02-23 23:42:56 fraggle - + Fix compile errors. 2007-02-23 23:41:58 fraggle - + Add an extra option to chocolate-setup on Windows to allow the video driver to be selected from directx and windib. 2007-02-23 23:26:26 fraggle - + Add a configuration file value to allow the SDL video driver to be explicitly specified. 2007-02-15 21:51:53 fraggle - + Really fix the menu corruption bug. 2007-02-14 19:11:30 fraggle - + Make I_Error call abort() instead of exit(), so that we can get a backtrace in the debugger. 2007-02-14 19:11:03 fraggle - + Expand buffer length to fix bug on Windows with cycling character on the quicksave screen. 2007-02-14 19:10:30 fraggle - + Read sound length as a 32 bit field, not 16 bit. Fixes death sound in marina.wad. 2007-02-10 03:19:30 fraggle - + Don't prepend a superfluous './' to the path when searching the current directory for an IWAD. 2007-02-07 13:04:46 fraggle - + Revert previous change: throwing away the key state seems to be the Doom 1.9 behavior. 2007-02-07 12:58:53 fraggle - + Don't throw away keypress state when passing between levels - allows shift to be held down for run when moving between levels. Thanks to Zack Friedrich <zack18@comcast.net> for pointing this out. 2007-02-01 12:21:14 fraggle - + Search IWAD search directories when loading PWAD files. 2007-01-14 05:20:28 fraggle - + Fix savegamedir directory generation. 2007-01-14 05:04:37 fraggle - + Change interpretation of DOOMWADDIR to the classic behavior: a single directory path where an IWAD can be found. Add DOOMWADPATH as a PATH-style list of directories to search for IWADs. This is to @@ -2912,837 +3064,837 @@ DOOMWADDIR name makes sense. 2007-01-08 22:46:05 fraggle - + More helpful SDL_mixer error messages. 2007-01-08 22:45:18 fraggle - + Bomb out with an error in configure if SDL_mixer or SDL_net are not found. 2007-01-07 01:58:16 fraggle - + Display a message on the console with details when WAD/DEH checksums do not match. 2007-01-06 22:26:23 fraggle - + Set svn:ignore properties on directories. 2007-01-06 03:26:00 fraggle - + Hide the mouse cursor using SDL_SetCursor to a blank cursor, not SDL_ShowCursor. This fixes mouse lag on Windows. Thanks to entryway. 2007-01-06 02:15:44 rtc_marine - + temp -> tempdir update codeblocks projects (which is a new format, latest cb svn build is needed) 2007-01-06 00:34:50 fraggle - + Choose the locations for temporary files more intelligently. 2007-01-05 23:42:38 fraggle - + Fix Batman Doom example in README. 2007-01-05 23:41:17 fraggle - + Make the WADs input box wider. Rename labels in the start multiplayer game dialog. 2007-01-05 23:39:39 fraggle - + Add quit prompt message missing in the Doom source release. 2007-01-05 23:38:19 fraggle - + Move response file code to m_argv.c 2007-01-05 23:36:35 fraggle - + Clear the current value when entering a new value in number input boxes. 2007-01-05 23:35:30 fraggle - + Fix typing '_' and '+' in textscreen code. 2007-01-02 06:59:58 rtc_marine - + Replace WINDOWS define with _WIN32 Update Codeblocks project 2007-01-02 04:41:29 rtc_marine - + sys/wait.h does not exist on windows (thank mingw for sucking), add WIFEXITED and WEXITSTATUS macros so it can compile under windows. 2006-12-26 18:01:25 fraggle - + Remove command line options from README; move to autogenerated CMDLINE file. 2006-12-26 15:43:16 fraggle - + On OSX, make MIDI music disabled by default. There are problems with the native MIDI code in SDL_mixer. 2006-12-25 12:28:27 fraggle - + Fix default network port in chocolate-setup. 2006-12-25 02:40:14 fraggle - + Fix up some text escaping errors. Add wikitext output for docgen. 2006-12-24 23:55:08 fraggle - + Fix setup tool crash when no IWADs found. 2006-12-24 23:54:41 fraggle - + Update TODO. 2006-12-24 23:53:15 fraggle - + Javadoc-style self-documenting system for command line options. 2006-12-24 16:32:47 fraggle - + Include "SDL.h", not <SDL.h>, as per http://www.libsdl.org/faq.php 2006-12-24 11:11:21 fraggle - + Add new item for TODO. 2006-12-23 21:24:56 fraggle - + Add '-findiwads' command line hack so that the setup program can find out what games are installed. Provide a drop-down list in setup to allow the game type to be selected. 2006-12-23 01:36:18 rtc_marine - + update cb project files 2006-12-23 01:32:22 fraggle - + Fix my email address. 2006-12-23 01:30:20 fraggle - + Add config.h for codeblocks build :-) 2006-12-22 15:22:40 fraggle - + Add definitions for PATH and directory separators. Allow multiple directories to be specified in DOOMWADDIR, in the same way as PATH. Make -iwad search through all search paths for the specified IWAD. 2006-12-22 15:18:12 fraggle - + Update NEWS. 2006-12-22 01:44:32 fraggle - + Add MSVC inttypes.h and stdint.h implementations: might be useful in the future. 2006-12-22 01:43:41 fraggle - + Switch from stdint.h to inttypes.h (which includes stdint.h). Old pre-C99 versions of Solaris only have inttypes.h. 2006-12-22 01:42:21 fraggle - + Update TODO - registry stuff is now done. 2006-12-22 01:42:10 rtc_marine - + update cb project for d_iwad.* 2006-12-22 01:39:03 fraggle - + Shut up compiler warnings. 2006-12-21 22:03:00 fraggle - + Add registry key for Doom 95 shareware version. 2006-12-21 21:43:47 fraggle - + Split off IWAD-related code into separate d_iwad.c. On Windows, search the registry to automatically find the locations of installed IWADs. 2006-12-19 23:04:04 fraggle - + Update to latest version of chocolate-setup icon. 2006-12-19 23:03:28 fraggle - + Update email address. Remove list of chocolate-doom.cfg options; it's easier to just use the setup tool. The list of command line options is also in dire need of updating ... 2006-12-18 23:40:40 rtc_marine - + make icons a little smoother around the edges 2006-12-18 19:21:21 fraggle - + Add missing copyright statement, comments. 2006-12-18 18:15:47 fraggle - + x3, x4 aspect ratio corrected scale functions. 2006-12-17 20:57:36 fraggle - + Make numbers in the chat macros configuration screen match the keyboard keys used to activate them. 2006-12-17 19:02:25 fraggle - + Update TODO 2006-12-16 23:12:40 fraggle - + Allow -warp 1 to warp to E1M1, -warp 2 -> E2M1, etc. when playing Doom 1. Thanks for RazTK for pointing this out. 2006-12-16 22:57:58 fraggle - + Fix value in autoadjust message. 2006-12-16 02:29:59 rtc_marine - + Add icon to chocolate-setup binary when built 2006-12-16 01:56:59 fraggle - + Add aspect ratio correction to setup tool. Redesign the display settings dialog. 2006-12-16 01:53:54 fraggle - + Add function to set radio button labels. 2006-12-16 01:53:17 fraggle - + Make dropdown lists emit a signal when set. 2006-12-16 00:58:12 fraggle - + Add icon for setup tool. 2006-12-16 00:54:18 fraggle - + Shut up datarootdir warnings. 2006-12-16 00:53:17 fraggle - + "\0" -> NULL 2006-12-15 23:15:05 rtc_marine - + Fix build Add new fields for code completion (stupid I know, but otherwise cb will probably have a fit) 2006-12-15 21:51:35 rtc_marine - + update project file to accomodate scaling code. 2006-12-15 21:10:00 fraggle - + Fix episode 3 bunny end screen (oops!!!!) 2006-12-15 19:35:46 fraggle - + Split off scaling code into i_scale.c. Add aspect ratio correction stretching (fullscreen 320x240, 640x480, etc)! 2006-12-08 16:37:41 fraggle - + Make trig tables const. 2006-12-06 09:14:25 fraggle - + Add notes about packages to TODO. 2006-12-05 21:45:32 fraggle - + More TODO items. That's all I can think of for now. 2006-12-05 21:10:22 fraggle - + Update TODO list: remove some things which are now complete and add some new ideas. 2006-12-05 21:05:46 fraggle - + Update BUGS list. 2006-12-05 21:05:26 fraggle - + Add missing #include. 2006-12-01 09:04:34 fraggle - + Add SPARC note to NEWS. 2006-12-01 08:57:15 fraggle - + Fixups to make compiles work under the Solaris/SPARC compiler. Thanks to Mike Spooner <spooferman@excite.com> for his work on porting this. 2006-11-29 00:53:37 fraggle - + Remove use of m4; use "Chocolate Doom" when referring to the program by its proper name. 2006-11-29 00:49:33 fraggle - + Use my gmail.com email address. 2006-11-27 21:45:50 rtc_marine - + * removal of FEATURE_* defines from codeblocks project * silence some warnings 2006-11-25 20:14:27 fraggle - + Use C99 types. 2006-11-25 19:45:02 fraggle - + Remove FixedDiv2; use actual fixed point version of FixedDiv (wtf?) 2006-11-25 18:31:54 fraggle - + Remove version from msvc/config.h. This is not generated automatically, so it is better to use a nonsensical version that will encourage anyone that uses it to set it properly. 2006-11-19 04:53:36 rtc_marine - + Silence warnings in debug build 2006-11-16 00:12:34 fraggle - + Display lowres turning warning message client-side, not through server-side broadcast messages. This avoids the possibility of malicious servers that might not send the message. 2006-11-16 00:05:44 fraggle - + Increase buffer size to fixes crashes due to buffer overruns. 2006-11-15 00:25:22 fraggle - + Use booleans in place of ints where possible. 2006-11-15 00:16:34 fraggle - + Fix endianness problem in mus2mid code (thanks denis) 2006-11-14 20:31:37 fraggle - + Use getenv/putenv, not SDL_getenv/SDL_putenv. 2006-11-14 20:09:26 fraggle - + Support running as a screensaver under X! 2006-11-10 17:32:54 fraggle - + Fix for playing demos on PPC (actually, fix for loading single lump files on non-little-endian machines). 2006-11-10 07:50:26 fraggle - + Add -gdi command line parameter as a shortcut for SDL_VIDEODRIVER=windib on Windows. 2006-11-06 18:04:26 fraggle - + Use DirectX by default on Windows. 2006-11-06 17:59:39 fraggle - + Center the mouse on startup to prevent abrupt turns when launching a game from the command line. 2006-11-02 19:01:30 fraggle - + Update NEWS file. 2006-10-31 01:01:48 fraggle - + Simulate overflowing the Doom frame table in dehacked patches (DOS dehacked's behavior). Overwrite the weaponinfo table instead when changes are made to the last element in states[]. Thanks to grazza for pointing out that Chococlate Doom did not emulate this bug. 2006-10-28 20:30:59 fraggle - + Explicitly support dehacked patches that overflow the ammo[] array with an invalid ammo type, allowing weapons that decrease the max ammo of other weapons. 2006-10-28 01:23:11 fraggle - + Display a warning when setting dehacked fields that would overflow buffers in Vanilla dehacked. This should help pick up bugs like the one in Batman Doom. 2006-10-28 00:15:23 fraggle - + Allow multiple dehacked patches to be specified with the -deh command line paramter, as with -file. 2006-10-26 00:44:23 fraggle - + Allow F10 to exit in testcontrols mode. 2006-10-25 21:04:58 fraggle - + "Always run" trick should only be when joyb_speed >= 10. Use 29 as the ideal value in setup as this works in Original, Ultimate and Final Doom, Heretic, Hexen and Strife. Thanks to Janizdreg for this. 2006-10-25 19:12:08 fraggle - + Make the "test controls" option work - write the current config to temporary config files and make Doom use these when executing it. 2006-10-25 19:07:57 fraggle - + Don't print arguments read from response files - Vanilla Doom doesn't do it. 2006-10-24 23:30:19 rtc_marine - + update chocolate-setup codeblocks project 2006-10-24 23:26:20 fraggle - + Don't rely on INSTALL_DIR for the Win32 build. 2006-10-24 23:25:55 fraggle - + Add missing header for Win32 build. 2006-10-24 21:07:32 fraggle - + Tweak capitalisation on the main menu to be more like setup.exe. 2006-10-24 21:00:38 fraggle - + Escape WAD filenames passed to Doom with " quotes, to allow WAD filenames with spaces. 2006-10-24 20:58:39 fraggle - + Pass through config variables into response file when launching Doom. 2006-10-24 20:50:00 fraggle - + Fix player name option in setup tool. 2006-10-24 20:44:04 fraggle - + Make "hurt me plenty" the default skill. 2006-10-24 20:32:26 fraggle - + Shut up compiler warnings. 2006-10-24 20:23:16 fraggle - + Detect failures to initialise textscreen library and bomb out with an error mess age. 2006-10-24 00:15:24 fraggle - + Build command line parameters for starting multiplayer games and joining multiplayer games. 2006-10-24 00:14:43 fraggle - + Write newlines in response files to separate parameters. 2006-10-23 23:27:10 fraggle - + Rename testconfig.[ch] to execute.[ch], add generalised framework for launching Doom. Make the "Save parameters and launch Doom" option on the main menu work. 2006-10-23 23:00:52 fraggle - + Add missing header. 2006-10-23 19:32:26 fraggle - + Detect when keyboard variables are changed and convert back so that the new values are saved to the config file. 2006-10-23 19:16:02 fraggle - + Load configuration on startup and save on quit. Functional setup program! 2006-10-23 19:00:30 fraggle - + Add m_argv.[ch] from Doom, fix up configfile.c so that it compiles properly. Add to build. 2006-10-23 18:59:51 fraggle - + Shut up compiler warnings. 2006-10-23 18:58:50 fraggle - + Change config variable names to be the same as used in Doom. 2006-10-23 18:57:56 fraggle - + Change config variable names to be the same as used in Doom. 2006-10-23 18:48:38 fraggle - + Move MakeDirectory function into m_misc.c. Move configdir related code into m_misc.c. 2006-10-23 08:15:26 fraggle - + Add initial setup config file code (derived from the Doom config file code). Not currently in build. 2006-10-23 08:13:16 fraggle - + Stackable clip areas (useful for a future implementation of scrollable panes). 2006-10-22 23:10:08 fraggle - + Standardise setup config variable names on the same variable names used in Doom. Add header files for source files where they are needed. Make variables static where appropriate. General cleanups etc. 2006-10-22 18:17:15 fraggle - + Fix problem caused by use of 'long' type instead of 'int' type in state_t structure: caused problems when using multiplayer on 64-bit (thanks exp[x]). 2006-10-22 18:13:12 fraggle - + Remove d_french.h from autotools build. 2006-10-22 18:12:39 fraggle - + Catch failure to initialise video when calling SDL_Init. 2006-10-18 02:07:28 fraggle - + Shut up warnings in w_wad.c. 2006-10-18 01:55:49 fraggle - + Timer functionssss, precious! 2006-10-18 01:51:11 fraggle - + Strip out CVS logs, RCS Id tags. 2006-10-16 14:52:12 fraggle - + Reformat coding style file. Add stuff about hungarian notation, jwz tab characters link and an introduction giving a brief explanation for the choices. 2006-10-15 02:06:27 rtc_marine - + update code::blocks project 2006-10-14 15:05:51 fraggle - + Refactor I_InitGraphics. 2006-10-14 14:59:28 fraggle - + Disable the "loading from disk" icon on MacOS. 2006-10-14 14:26:17 fraggle - + Display drone indicator on the netgame waiting screen if drones are connected. 2006-10-14 13:55:02 fraggle - + Display a different message from the normal WAD directory warning if players are mixing Freedoom/Original IWADs. 2006-10-14 12:53:08 fraggle - + Change wording on netgame warning message. 2006-10-12 18:34:32 fraggle - + Shut up compiler warnings for setup. 2006-10-12 00:03:19 fraggle - + Shut up compiler warnings 2006-10-11 23:55:06 fraggle - + Shut up compiler warnings. 2006-10-10 03:00:52 fraggle - + Remove d_french.h, other i18n-related stuff. If people want i18n, it should be done with dehacked and/or wad replacements - see my british english translation in the idgames archive. 2006-10-07 01:59:03 fraggle - + Add float spin control and use it for the acceleration controller in setup. 2006-10-06 23:22:10 rtc_marine - + update Code::Blocks project for new md5 code. 2006-10-06 18:10:16 fraggle - + Alternate textscreen palette that fits the Tango desktop guidelines: see http://uwstopia.nl/blog/2006/07/tango-terminal 2006-10-06 18:06:05 fraggle - + Send deh/wad md5sums to players at the waiting screen. Display a warning on the waiting screen if the checksums differ from the other players. 2006-10-06 08:02:42 fraggle - + Send deh/wad checksums to the server when connecting. 2006-10-05 23:12:22 fraggle - + Dehacked information checksum generation 2006-10-05 19:55:07 fraggle - + WAD directory checksum generation code 2006-10-05 18:19:43 fraggle - + Prevent against deadlock where client and server are both stuck waiting for each other to send data. 2006-10-05 18:18:14 fraggle - + Packet loss simulation code for test. 2006-09-30 11:52:25 fraggle - + Only allow drone mode when connecting. 2006-09-30 11:22:48 fraggle - + Make the server stop sending if one of the clients stops acknowledging. Fix check on number of players on connect. 2006-09-29 22:38:21 fraggle - + Working -left and -right options! 2006-09-29 22:25:13 fraggle - + Working drone clients! 2006-09-29 12:49:30 fraggle - + Use TXT_AddWidgets in setup for greatly enhanced readability. 2006-09-28 18:27:22 fraggle - + Add missing ellipsis to "Add WADs..." 2006-09-27 00:52:50 fraggle - + Switch over a bunch of code to TXT_NewButton2 - improves readability. 2006-09-27 00:50:39 fraggle - + When invoking chocolate doom, run it from the install dir on Unix. 2006-09-27 00:50:06 fraggle - + Add "join game" dialog. 2006-09-27 00:49:22 fraggle - + Move the "always run" checkbox to the movement section. 2006-09-27 00:48:23 fraggle - + Add TXT_NewButton2 for creating a button with a callback (for convenience). 2006-09-27 00:47:27 fraggle - + Add TXT_AddWidgets for adding multiple widgets to a table. 2006-09-26 00:22:56 fraggle - + Reduce the minimum width of the key/mouse input widgets and align the mouse config dialog a bit nicer. 2006-09-26 00:16:49 fraggle - + Add "Always run" checkbox to keyboard options. 2006-09-26 00:09:32 fraggle - + Make examples call TXT_Shutdown before quit. 2006-09-25 23:13:56 rtc_marine - + Update Code::Blocks setup project with added files 2006-09-25 22:45:30 fraggle - + Fix colors. 2006-09-25 21:47:11 fraggle - + Don't disable screen melt entirely in testcontrols mode; just on startup. 2006-09-25 21:42:37 fraggle - + Don't allow function keys to be used in testcontrols mode. 2006-09-25 21:41:59 fraggle - + Remove low-pass filter on mouse for testcontrols mode - seems to work ok with real mice. 2006-09-25 21:31:42 fraggle - + Add "test" window actions to the keyboard/mouse dialogs to invoke Chocolate Doom with the -testcontrols option. 2006-09-25 19:04:29 fraggle - + Add "test controls" mode - for setup.exe in the future. Start straight into the game with no melt effect and display a box showing mouse speed to allow the threshold to be set easily. When escape is pressed, quit straight away. 2006-09-24 14:27:55 fraggle - + Add "extra parameters" dialog for specifying exra command-line parameters. Move this and "UDP port" setting to a separate "Advanced" section. 2006-09-24 14:08:18 fraggle - + Add "time limit" control in multiplayer settings dialog. 2006-09-24 14:07:30 fraggle - + Convenience function for creating a horizontal box. 2006-09-24 14:06:32 fraggle - + Debug code for drawing an ASCII chart. 2006-09-24 14:05:44 fraggle - + Use proper arrow characters on spin controls and change their color. 2006-09-24 14:04:40 fraggle - + Fix declaration of TXT_NewWindowSelectAction 2006-09-22 23:43:28 fraggle - + Call the SpechitOverrun _after_ incrementing numspechit. Thanks to Quasar for pointing out this mistake. 2006-09-22 23:12:50 fraggle - + Continue to build things if we fail to update chocolate_doom_icon.c - display a warning about missing Python Image library. 2006-09-22 21:32:00 fraggle - + Add DEH_String() conversions on more strings that are not being converted. 2006-09-22 21:30:48 fraggle - + Fix warning. 2006-09-22 19:24:53 fraggle - + Add the ability to type in values for spin controls, like with normal input boxes. 2006-09-22 13:16:00 fraggle - + Fix warning about initialiser. 2006-09-21 22:49:26 fraggle - + Set default sound devices to SNDDEVICE_SB, so that sfx and music are on by default. 2006-09-21 19:25:55 fraggle - + Rename Accept to Select. 2006-09-21 19:21:16 fraggle - + Add compatibility options dialog. 2006-09-21 19:20:45 fraggle - + Add ENDOOM and startup delay to display settings dialog. 2006-09-21 17:25:10 fraggle - + Fix some warnings in textscreen code. 2006-09-21 12:49:13 fraggle - + Use NULL for initialising pointers rather than 0. 2006-09-21 12:48:38 fraggle - + Use DEFAULT_INT enum value rather than 0. 2006-09-21 12:47:56 fraggle - + "\0" != NULL 2006-09-21 12:13:28 rtc_marine - + Fix a lot of warnings (for fussy compilers) and one always-true check 2006-09-21 10:11:58 fraggle - + Add new codeblocks build files to dist. 2006-09-21 05:25:49 rtc_marine - + Code::Blocks project and workspace. * Rename workspace appropriately in editor. * Update project files for new spin control and fix compilation of @@ -3752,98 +3904,98 @@ anything. 2006-09-20 20:04:02 fraggle - + Make sure modified copyright banners always end in a newline. If they don't, add one. This fixes av.wad (thanks to myk for reporting). 2006-09-20 19:15:32 fraggle - + Fill in some default values for the player name and the chat macros (using the traditional defaults) 2006-09-20 19:06:34 fraggle - + Add sound config dialog. Convert some of the mouse settings to use spin controls. 2006-09-20 19:05:10 fraggle - + Add spin control widget. 2006-09-20 14:15:55 fraggle - + Change the default optimisation level to -O2 and add --enable-penis-extension to configure.in. 2006-09-20 12:47:24 fraggle - + Add multiplayer configuration dialog. 2006-09-20 11:49:19 fraggle - + Remove tab characters :-) 2006-09-20 11:47:13 fraggle - + Add HACKING file with guidelines for Chocolate Doom hackers. 2006-09-20 11:27:22 fraggle - + Fix code style :-) 2006-09-20 07:08:37 rtc_marine - + add extra defines when building don't crash if numlumps = 0 (which is caused when an iwad has an invalid path) 2006-09-20 01:06:21 fraggle - + Add "Enable mouse" checkbox to mouse config dialog. Reorder options. 2006-09-20 00:51:54 fraggle - + Fix chocolate-setup warnings. 2006-09-20 00:49:20 fraggle - + Fix textscreen warnings. 2006-09-20 00:24:29 fraggle - + Turn on -Wall as well. 2006-09-20 00:20:14 fraggle - + 'widgets' variable was used uninitialised. For some reason this didn't always crash! 2006-09-19 23:14:55 fraggle - + Build with debugging symbols by default. 2006-09-19 22:26:52 fraggle - + Move the grab mouse setting to the mouse config dialog. 2006-09-19 22:21:30 fraggle - + New display settings dialog! 2006-09-19 22:13:56 fraggle - + Check column is valid when finding a selectable column. Fixes weird scrolling behavior. 2006-09-19 21:12:27 fraggle - + Set mouse button defaults. 2006-09-19 04:38:15 rtc_marine - + make the icon work in the client binary 2006-09-19 00:34:17 rtc_marine - + Code::Blocks projects: * fixed directory locations * minor enhancements to project building and locations of object files @@ -3851,93 +4003,93 @@ * update workspace to accomodate chocolate-server project 2006-09-18 23:20:23 fraggle - + Level select dialog. 2006-09-18 23:19:30 fraggle - + Fix TXT_SelectWidgets with NULL spacers. 2006-09-18 23:19:00 fraggle - + Add function to set button label. 2006-09-18 13:13:40 fraggle - + Repeat key presses when the key is held down - thanks to Mad_Mac for this one :-) 2006-09-17 21:37:26 fraggle - + Split off query data into a net_querydata_t structure in net_structrw.c 2006-09-17 19:01:16 fraggle - + Fix local LAN queries. 2006-09-17 18:01:33 fraggle - + Always wait for a keypress before closing the ENDOOM window; do not close it automatically. 2006-09-17 15:33:49 fraggle - + Update TODO list :-) 2006-09-16 01:20:09 fraggle - + Undo previous commit: 'comport' and 'showmessages' are only generated by setup.exe. 2006-09-16 01:04:59 fraggle - + Preserve 'comport' variable in configuration files even though it is unused. Add 'showmessages' which is a duplicate of 'show_messages' but is how Vanilla Doom behaves! 2006-09-16 00:47:12 fraggle - + Interpret the snd_sfxdevice and snd_musicdevice values in the configuration file and act the same as Vanilla Doom. 2006-09-12 11:03:57 fraggle - + Fix Z_FreeTags in z_native.c (chains were not set to NULL when freed). 2006-09-11 09:48:57 fraggle - + Add codeblocks project files; thanks to Russell Rice. 2006-09-09 22:44:51 fraggle - + Fix the -nomusic parameter. 2006-09-09 20:11:05 fraggle - + Add command line arguments to main() in textscreen examples. 2006-09-09 20:05:27 fraggle - + Add config.h for a possible MSVC build in the future. Add mkinstalldirs to the list of files included in distribution. 2006-09-09 17:52:01 fraggle - + Include SDL.h in the textscreen headers; the SDL headers need to be included where main() is defined. 2006-09-09 17:48:09 fraggle - + Add reference counts on callback tables so that if a callback destroys the widget that owns the callback the program doesnt crash. 2006-09-09 16:49:39 fraggle - + Remove hack accidentally committed that always updates the palette 2006-09-02 20:10:07 fraggle - + Add -nwtmerge option, which behaves the same as NWT's -merge option. What this does is load a PWAD, then search through the IWAD sprites list, removing lumps where there are lumps of the same name in the @@ -3948,20 +4100,20 @@ handle. 2006-09-02 20:02:11 fraggle - + Allow loading dehacked 2.3 patches. 2006-09-02 20:01:35 fraggle - + Don't allow \0 in dehacked strings read with DEH_ReadLine. 2006-09-01 21:45:45 fraggle - + Sync the -loadgame parameter across all clients connected to a server. Loading/saving multiplayer games should all work now. 2006-09-01 21:07:25 fraggle - + Better spechits emulation. Remove support for emulating the higher-memory spechits overruns, as they will overwrite pointers with garbage and crash the game. Change the spechits base address to one @@ -3970,216 +4122,216 @@ explicitly specified if necessary. 2006-08-31 23:11:08 fraggle - + Call R_ExecuteSetViewSize immediately after calling I_InitGraphics. I_InitGraphics can change where screens[0] points to, so the player can end up with a blank screen sometimes. Thanks to Kurn for reporting this. 2006-08-31 21:40:48 fraggle - + Add missing copyright notices to textscreen and setup files. 2006-08-31 19:31:10 fraggle - + Add new chocolate-setup source files into build. 2006-08-31 19:15:36 fraggle - + Build man/ and setup/ directories from main makefile. 2006-08-31 19:15:16 fraggle - + Add manual pages to build 2006-08-31 19:14:45 fraggle - + Fix problem with 'c:\' in doom-options.in 2006-08-31 19:14:22 fraggle - + Change the 'abort' button to a quit button on the main menu. Change the confirmation dialog to use 'abort'. Working 'start network game' button. 2006-08-31 19:14:03 fraggle - + Add display.c with missing ConfigDisplay and multiplayer.c with multiplayer game start window. 2006-08-31 19:13:40 fraggle - + Add key and mouse input widgets for selecting keys and mouse buttons. 2006-08-31 19:13:23 fraggle - + Check for 'ff_end' not 'ff_start' when displaying warning message about merging flats. Some old Vanilla WADs used ff_start..f_end to add extra flats and this message should not be displayed for them. Use American spelling of 'behavior'. 2006-08-31 19:13:04 fraggle - + Allow the demo size limit to be disabled through the config file. 2006-08-31 19:12:43 fraggle - + Bomb out with an error when a dehacked string is set that is longer than is possible in Vanilla Doom with normal dehacked. Chocolate Doom is unforgiving! 2006-08-31 19:12:25 fraggle - + Use the new TXT_Sleep function in Doom. 2006-08-31 19:12:05 fraggle - + Add dropdown listbox widget 2006-08-31 19:11:47 fraggle - + Exit the main loop automatically after all windows are closed 2006-08-31 19:11:26 fraggle - + Add window listener functions to allow spying on keys and mouse buttons received by windows. Emit a 'closed' signal when a window is closed. Allow windows to have no action buttons. 2006-08-31 19:11:07 fraggle - + Change name of escape window actions to 'Close' and add a separate 'Abort' button creator. 2006-08-31 19:10:49 fraggle - + Center the calculator in the window. 2006-08-31 19:09:34 fraggle - + Add TXT_SelectWidget function to select a widget in a table, TXT_SetColumnWidths to set table column widths. Don't send key presses to unselectable widgets. 2006-08-31 19:09:25 fraggle - + Allow multiple callbacks for the same signal on widgets 2006-08-31 19:09:17 fraggle - + Initialise string input boxes to not editing 2006-08-31 19:08:43 fraggle - + More efficient TXT_Sleep function that puts the textscreen code to sleep until an event is received or the screen needs to blink. 2006-08-06 23:51:29 fraggle - + Bomb out with an error when trying to draw patches that go off the screen, as Vanilla Doom does. 2006-07-28 20:13:13 fraggle - + Try to convert MUS even if the MUS header is not present. The new code plays the deca.wad titlescreen music properly! 2006-07-24 22:32:39 fraggle - + Oops :-) 2006-07-22 17:43:12 fraggle - + New mus -> mid conversion code thanks to Ben Ryves <benryves@benryves.com> This plays back a lot of music closer to Vanilla Doom - eg. tnt.wad map02 2006-06-29 19:07:32 fraggle - + Add inverted checkboxes (tick in box when value is false) 2006-06-29 19:05:32 fraggle - + Initial mouse configuration window. 2006-06-29 10:05:54 fraggle - + Hugely refactor the response file loading code. Allow arguments to be enclosed in quotes; this allows long filenames with spaces in to be specified with -file in response files. 2006-06-21 20:08:20 fraggle - + Let the SDL parachute catch crashes and shut down properly. Don't crash after playing demos. 2006-06-20 19:49:36 fraggle - + Add a fake nonfunctional key bindings configuration menu. 2006-06-20 19:48:21 fraggle - + Always add a bit of padding inside windows (removes the need to add padding explicitly in labels). Set the window title from the desktop title. Only draw widget selection highlight in the window with focus (top window). 2006-06-18 23:54:48 fraggle - + Add deh_section_sound to dehacked sections list (thanks to rpeter on the dw forums). 2006-06-16 18:06:05 fraggle - + Add hash table for fast texture lookup; refactor P_GroupLines to use an O(n) rather than O(n^2) algorithm: faster loading maps like sid.wad map03 2006-06-03 19:23:09 fraggle - + Stop sending data to the server when a connection drops. Print a message to the console as well. 2006-06-03 17:12:08 fraggle - + Detect recursive calls to I_Error to prevent an infinite loop. 2006-06-03 13:38:24 fraggle - + Bomb out with an error message if game options are specified to a dedicated server. 2006-06-02 21:50:51 fraggle - + Make clicking on "accept" action buttons send enter keypresses to the window. 2006-06-02 21:14:39 fraggle - + Make mouse button presses on widgets actually do useful things 2006-06-02 20:52:01 fraggle - + Rearrange the buttons in the setup exit confirmation box. 2006-06-02 20:45:41 fraggle - + Add utility functions to create "Abort" and "Accept" window actions 2006-06-02 20:36:37 fraggle - + Draw the bottom separator in windows at the full window width. 2006-06-02 20:32:48 fraggle - + Add initial code for a setup utility. 2006-06-02 20:30:08 fraggle - + Update BUGS list. 2006-06-02 20:29:24 fraggle - + textscreen: Rejig how the entire drawing process works. Add a recursive layout method that assigns the position and size of widgets for the whole window before drawing. Add another method that responds @@ -4187,716 +4339,716 @@ specifying NULL as the title. 2006-05-29 22:39:12 fraggle - + Add ability to make widgets right aligned or centered within tables. 2006-05-29 22:02:38 fraggle - + Convert calculator example to struts 2006-05-29 21:55:20 fraggle - + Add -autojoin command line parameter to automatically search a local LAN for a server and join it. 2006-05-29 21:04:08 fraggle - + Fix broadcast transmits (-search works!) 2006-05-29 21:00:41 fraggle - + Add textscreen.h top level header to avoid having to include all txt_* headers individually. 2006-05-29 20:54:11 fraggle - + Allow struts to force height as well as width. Hide "start game" button for players which are not the game controller. 2006-05-29 20:31:45 fraggle - + Shut up compiler warnings. 2006-05-29 20:22:51 fraggle - + Add strut class to allow table column width to be forced. 2006-05-29 14:25:38 fraggle - + Warp mouse to screen center (possibly fix joe's mouse problem). 2006-05-29 12:19:53 fraggle - + Fix E1-3 intermission screen animations. 2006-05-29 11:38:27 fraggle - + Add missing newline to message. 2006-05-29 01:17:24 fraggle - + Change the mouse acceleration behavior to accelerate by multiplying by a linear amount when a threshold is exceeded. 2006-05-26 20:15:33 fraggle - + Switch netgame waiting screen to use the new text mode GUI system. 2006-05-26 20:15:05 fraggle - + Add key description for spacebar. 2006-05-26 16:37:09 fraggle - + Add an option to disable autoadjusting the video mode. 2006-05-25 23:39:57 fraggle - + Put savegames in separate directories depending on the IWAD. 2006-05-25 22:27:34 fraggle - + Allow NULL to be added to tables to specify a spacer (empty cell). 2006-05-25 22:26:13 fraggle - + Allow the fg/bg colors to be set on labels. 2006-05-25 22:07:14 fraggle - + Allow the fg/bg colors to be set on labels. 2006-05-25 21:40:57 fraggle - + Build textscreen/ before textscreen/examples/ 2006-05-25 21:18:19 fraggle - + Add screenmultiply x4 mode. 2006-05-24 23:51:36 fraggle - + Remove debug hack used for testing startup delay. 2006-05-24 22:35:45 fraggle - + Move textscreen GUI demos into an examples/ subdir. 2006-05-24 21:27:40 fraggle - + Add small calculator GUI demo. 2006-05-24 20:08:58 fraggle - + Only allow digits to be typed in number input boxes. 2006-05-23 23:56:28 fraggle - + Prevent crashes when loading savegames where mancubi were in the middle of firing. 2006-05-23 23:52:01 fraggle - + Add input box widget, and include in guitest. 2006-05-23 23:51:09 fraggle - + Make TXT_GetChar return the unicode value of the key pressed. For text boxes. 2006-05-23 20:33:35 fraggle - + Add a default action to close windows when escape is pressed. Do not make escape quit the program unless there are no open windows. Add TXT_ExitMainLoop(). 2006-05-23 12:46:09 fraggle - + Fix compiler warnings caused by missing includes. 2006-05-23 01:25:36 fraggle - + Add actions demonstration to guitest. 2006-05-23 01:07:02 fraggle - + Add window action class for action area labels at the bottom of windows. Adjust txt_table_t to expand tables to their maximum width when they only have one column (ensures separators reach the window edges). 2006-05-23 01:05:05 fraggle - + Eat keypresses when pressing buttons. 2006-05-23 01:04:27 fraggle - + Add TXT_GetKeyDescription() to provide descriptions of key codes. 2006-05-22 20:25:19 fraggle - + Updated GUI test which demonstrates signals used to update a label. 2006-05-22 20:23:28 fraggle - + Add TXT_SetLabel() function to set the label value. 2006-05-22 19:51:21 fraggle - + Allow specifying the full path and filename when playing back demos. 2006-05-22 12:59:11 fraggle - + CAST -> TXT_CAST_ARG, UNCAST -> TXT_UNCAST_ARG. 2006-05-22 01:56:12 fraggle - + Add casting macros to allow for easy casts between types. 2006-05-22 01:26:34 fraggle - + More signals to detect when checkboxes/radiobuttons are changed. 2006-05-22 01:20:48 fraggle - + Add a signals architecture to allow callbacks on GUI events. Make all widget classes initialise widgets by calling TXT_InitWidget. 2006-05-21 22:01:46 fraggle - + Reformat source files in Makefile.am. 2006-05-21 21:58:24 fraggle - + Add radio button class. 2006-05-21 21:56:28 fraggle - + Initialise the table selection on table creation. 2006-05-21 01:07:11 fraggle - + Always select a valid widget in a table before drawing the table. 2006-05-20 22:37:34 fraggle - + Add missing free() call. 2006-05-20 22:37:07 fraggle - + Updated guitest. 2006-05-20 22:36:28 fraggle - + Add label class. 2006-05-20 22:01:04 fraggle - + Make all windows be tables with one column. 2006-05-20 21:49:50 fraggle - + Add table class. Allow widgets with heights of more than one line. 2006-05-20 18:37:57 fraggle - + Checkbox class 2006-05-20 17:34:34 fraggle - + Add main loop function and forward key presses to widgets. 2006-05-20 17:24:58 fraggle - + Make Translatekey static. 2006-05-20 17:16:35 fraggle - + Split off keyboard key definitions to a separate file. 2006-05-20 16:45:36 fraggle - + Clip windows against the workspace boundaries. 2006-05-20 16:15:17 fraggle - + Add selectable and visible properties to widgets. Allow the position of windows to be set based on position of top/bottom/center,left/right,center coordinates. 2006-05-19 21:03:49 fraggle - + Initialise tracers to NULL on savegame load - fixes a problem with revenant tracers in savegames. 2006-05-19 21:01:59 fraggle - + Add a config file setting to allow a delay to be specified on startup. 2006-05-19 20:57:59 fraggle - + Split off text mode gui desktop code into a separate file. Rename some of the functions in txt_gui.c. 2006-05-18 20:48:03 fraggle - + Add TXT_SetDesktopTitle() 2006-05-18 19:55:24 fraggle - + Make TXT_AddWidget take a NULL pointer so different widget types can be passed to it. 2006-05-18 19:48:24 fraggle - + Initial working text-mode GUI framework. 2006-05-11 13:03:02 fraggle - + Allow port to be specified for client to connect to through -port or -connect hostname:port. 2006-05-08 22:54:32 fraggle - + Allow -3 scale. 2006-05-06 20:22:31 fraggle - + Respect the use_mouse value in configuration files. 2006-05-06 20:14:08 fraggle - + Add back -nomouse command line parameter. 2006-05-05 20:49:34 fraggle - + Syncronise the -timer/-avg parameters across all clients to avoid desyncs. 2006-05-03 20:23:54 fraggle - + Handle divide by zero in R_PointToDist: fixes crash in udm1.wad 2006-05-03 19:54:08 fraggle - + Allow .mid files in PWADs (via including a MID inside a music lump). This actually seems to work in Vanilla, as long as the MID is less than ~96k. This isn't perfect. 2006-04-28 18:31:21 fraggle - + Fix sky behavior to be like Vanilla Doom, ie. Doom II skies never change unless the player restores from a saved game. Thanks to sofaking for bringing this to my attention. There is more information here: http://doom.wikia.com/wiki/Sky_never_changes_in_Doom_II 2006-04-28 18:20:05 fraggle - + Fix spacing of the devparm mode dots! 2006-04-14 16:25:42 fraggle - + Add ability to play using the Vanilla player sync code 2006-04-14 16:24:32 fraggle - + Fix netgame respawn bug on MAP02 (may be 64-bit related) 2006-04-09 03:54:21 fraggle - + Add change missed from last commit 2006-04-09 03:50:34 fraggle - + Broadcast searches (currently broken) 2006-04-08 14:30:33 fraggle - + Forgot to add net_query.c to Makefile.am 2006-04-06 21:49:16 fraggle - + Debug code for tracking bandwidth usage 2006-04-06 21:48:35 fraggle - + Add the ability to query the current state of servers, and '-query' command line option to do so. 2006-04-06 20:44:06 fraggle - + Save demos when quitting normally - it is no longer neccessary to press 'q' to end a demo! Thanks to the 10,000 people who reported this bug. 2006-04-06 20:31:45 fraggle - + Use BACKUPTICS everywhere. Remove NET_TICCMD_QUEUE_SIZE 2006-04-06 18:53:43 fraggle - + Sanity check data received by the server. Send version string earlier in SYN packets to allow the fields that follow to be changed later on if necessary. 2006-04-01 21:16:43 fraggle - + Don't add modules to the server context until after they have been initialised - avoids crash when bombing out in the init function 2006-03-31 17:15:54 fraggle - + Remove reference to nonexistent i_main.h 2006-03-30 20:25:12 fraggle - + Increase the default heap size to 16MB, and add a -mb parameter to allow the heap size to be controlled from the command line. Who doesn't have 16MB of memory these days? 2006-03-30 20:16:06 fraggle - + When all players leave a server, start accepting new connections again. This lets people run proper dedicated servers. 2006-03-30 20:13:20 fraggle - + Add missing #include 2006-03-30 20:08:37 fraggle - + Split off timer code into separate i_timer.c file. Add d_dedicated.c and build chocolate-server, a standalone dedicated server. 2006-03-30 19:17:58 fraggle - + Dedicated server mode. 2006-03-30 01:23:20 fraggle - + Remove hard-coded use of network modules from server code. 2006-03-29 19:22:37 fraggle - + Removing dummy file. Goodbye, #chocolate-doom :-( 2006-03-29 19:21:51 fraggle - + Dummy commit to test the new IRC monitoring bot Hello #chocolate-doom! 2006-03-29 16:59:39 fraggle - + Removing dummy.txt 2006-03-29 16:58:54 fraggle - + This is a message. A multiline commit message. 2006-03-29 16:58:09 fraggle - + Dummy change 2006-03-29 16:56:36 fraggle - + Dummy commit 2006-03-28 00:24:03 fraggle - + Update NEWS file, incorporating changes from v0.1.4 as well. 2006-03-27 23:56:14 fraggle - + Fix divide by zero in 1427uv01.lmp caused by the use of int instead of angle_t in R_ScaleFromGlobalAngle() 2006-03-25 21:50:32 fraggle - + New feature to allow compiling without multiplayer support 2006-03-25 21:47:13 fraggle - + Improve Z_CheckHeap() 2006-03-25 20:08:58 fraggle - + Fix builds with FEATURE_DEHACKED disabled 2006-03-25 18:28:48 fraggle - + Run the menu at the correct speed 2006-03-24 21:43:43 fraggle - + Adjust anti-CPU-hogging sleep times. 2006-03-24 21:20:36 fraggle - + Add "native allocator" message to distinguish from z_zone.c 2006-03-24 20:40:08 fraggle - + Call W_GenerateHashTable to generate the lumpname hashtable. Do not constantly look up MAP01 to see if this is a store demo. 2006-03-24 20:39:28 fraggle - + Ooops! 2006-03-24 20:39:08 fraggle - + Generate a hash table for fast lump name lookups. 2006-03-24 19:59:03 fraggle - + Add a second implementation of the zone memory system which just uses malloc() and free() as a backend. This will be useful for running dedicated servers (no need to allocate an entire heap). 2006-03-24 19:55:04 fraggle - + Make memblock_t internal to z_zone.c. Adjust Z_ChangeTag #define to cope with this. 2006-03-24 17:35:17 fraggle - + Update TODO. Remove finished things (64-bit, netcode) and stuff which will never be done (z_zone short-circuit). Add some new TODOs. 2006-03-24 16:51:28 fraggle - + Use "sizeof(line_t *)" not "4". Fixes 64-bit builds. 2006-03-23 18:29:28 fraggle - + Remove "default sfx volume" message: this is confusing now, and isn't in Vanilla anyway. 2006-03-23 18:25:56 fraggle - + Fix sound range 2006-03-23 17:43:15 fraggle - + Separate variables for config file volume levels and sound API internal volume levels (this is how the Vanilla code behaves). Fixes sound behavior on level 8! 2006-03-19 00:12:00 fraggle - + Smarter fullscreen setting adjustment 2006-03-18 23:42:03 fraggle - + Auto adjust settings when running fullscreen so that we run in a valid video mode. 2006-03-18 23:24:04 fraggle - + Fix music startup/shutdown 2006-03-18 23:19:14 fraggle - + Catch failures to initialise SDL_mixer properly, and fail gracefully rather than crashing the game. 2006-03-18 21:22:09 fraggle - + Add missing SDL.h include for i_main.c - fixes play under MacOS X! 2006-03-17 18:36:50 fraggle - + Fix windres detection 2006-03-16 22:17:45 fraggle - + Better fix for the intermission screen crash. Don't call WI_End until after we change to gamestate != GS_INTERMISSION 2006-03-16 21:46:59 fraggle - + Fix crasher when starting new levels, because the intermissions code tries to draw patches which have been unloaded (WI_Drawer runs after WI_End, because it is waiting for the game loop to load the new level) 2006-03-15 18:53:06 fraggle - + fix DEH_UNSUPPORTED_MAPPING, add frame::codepointer as an unsupported mapping 2006-03-15 18:52:31 fraggle - + Check for IWADs in the same order as Vanilla Doom 2006-03-14 19:17:14 fraggle - + Detect the presence of 'windres' properly 2006-03-11 21:34:19 fraggle - + Shut up compiler warnings 2006-03-11 21:28:21 fraggle - + Fix bug with corruption of long player names. Remove tab characters. 2006-03-10 01:49:25 fraggle - + Add fullscreen "letterbox" mode for people without a functioning 320x200 video mode. 2006-03-07 19:02:08 fraggle - + If running with -timedemo, do not generate new ticcmds through NetUpdate. 2006-03-07 18:25:32 fraggle - + Indicate when a message has been received from the server. 2006-03-07 18:24:12 fraggle - + Store the reason when a connection is disconnected, and display a message indicating when clients time out from the server. 2006-03-07 12:57:52 fraggle - + Convert NET_CL_SafePuts to NET_SafePuts, and print rejection messages from the server. 2006-03-07 12:46:52 fraggle - + Generic console message mechanism. Inform all players when recording a low-res demo. 2006-03-06 20:48:07 fraggle - + Give a server-side warning when recording low resolution demos. 2006-03-06 20:44:43 fraggle - + Do not run TryRunTics until after we have started demo recording. Fix crash when recording demos. 2006-03-03 19:18:48 fraggle - + Fix loss of precision when turning with mouse. 2006-03-02 01:01:05 fraggle - + Add unsigned qualifiers on swapping functions, to stop problems on MacOS X. 2006-03-02 00:57:25 fraggle - + Remove redundant code, shut up warnings 2006-03-02 00:10:23 fraggle - + _Really_ fix -nomonsters. 2006-03-02 00:03:48 fraggle - + Rearrange client connect code; fix name resolving under windows 2006-03-01 23:36:44 fraggle - + Detect turbo mode more accurately 2006-03-01 20:02:53 fraggle - + Send the nomonsters flag on netgame start. 2006-03-01 17:07:39 fraggle - + Don't melt the screen on startup 2006-02-27 21:46:35 fraggle - + Fix consistency checks 2006-02-27 20:11:14 fraggle - + Fix problem starting games with four players 2006-02-27 19:39:26 fraggle - + Quit with an error when unable to resolve an address 2006-02-27 17:57:55 fraggle - + Fix chat mode 2006-02-27 17:57:39 fraggle - + Reduce the maximum latency to stop the game pausing and shooting ahead. 2006-02-27 16:31:08 fraggle - + Working client sync: adjust the clock to try to match the latency of other players. Allow the menu ticker to run even if the main game ticker doesn't run. Remove time request/response code (now using game latency). 2006-02-26 02:29:47 fraggle - + Change data files to binary files 2006-02-24 19:14:59 fraggle - + Fix -extratics 2006-02-24 19:14:22 fraggle - + Remove redundant stuff relating to the old network code 2006-02-24 08:19:45 fraggle - + Only advance the receive window if we have received ticcmds from all connected players. 2006-02-23 23:42:00 fraggle - + Replace -client with -connect which takes a hostname/ip to connect to. 2006-02-23 23:41:13 fraggle - + Track memory used by packet data to help detect memory leaks 2006-02-23 23:40:30 fraggle - + Free back packets sent to the server after parsing them 2006-02-23 20:53:03 fraggle - + Detect when clients are disconnected from the server, recover cleanly and display a message. 2006-02-23 20:31:09 fraggle - + Set ticdup from the command line with the -dup parameter. 2006-02-23 20:22:57 fraggle - + Do not allow tics to buffer up in single player (stops the gun instantly appearing on level start) 2006-02-23 19:15:18 fraggle - + Fix crash when NOT recording lowres 2006-02-23 19:12:43 fraggle - + Set maketic-gametic lag back to 1 second. 2006-02-23 19:12:02 fraggle - + Add lowres_turn to indicate whether we generate angleturns which are 8-bit as opposed to 16-bit. This is used when recording demos without -longtics enabled. Sync this option between clients in a netgame, so @@ -4904,540 +5056,540 @@ lowres. 2006-02-23 18:20:29 fraggle - + Fix bugs in resend code for server->client data 2006-02-23 18:19:05 fraggle - + Add lowres_turn parameter to net_full_ticcmd_t structure r/w functions 2006-02-22 18:35:55 fraggle - + Packet resends for server->client gamedata 2006-02-19 13:42:27 fraggle - + Move tic number expansion code to common code. Parse game data packets received from the server. Strip down d_net.[ch] to work through the new networking code. Remove game sync code. Remove i_net.[ch] as it is no longer needed. Working networking! 2006-02-19 13:38:59 fraggle - + Increase the size of BACKUPTICS to deal with heavy lag 2006-02-17 21:42:13 fraggle - + Remove debug code 2006-02-17 21:40:52 fraggle - + Full working resends for client->server comms 2006-02-17 20:15:16 fraggle - + Request resends for missed packets 2006-02-16 01:12:28 fraggle - + Define a new type net_full_ticcmd_t, a structure containing all ticcmds for a given tic. Store received game data in a receive window. Add send queues for clients and add data from the receive window to generate complete sets of ticcmds. 2006-02-15 12:57:58 fraggle - + Remove the savegame buffer entirely. Keep the old savegame size limit bug add a "vanilla_savegame_limit" config file option which allows the limit to be disabled if necessary. 2006-02-03 18:41:26 fraggle - + Support NWT-style WAD merging (-af and -as command line parameters). Restructure WAD loading so that merged WADs are always loaded before normal PWADs. Remove W_InitMultipleFiles(). 2006-01-30 08:12:49 fraggle - + Add manpage 2006-01-30 08:06:29 fraggle - + Install into the games directory, not bin (Thanks to Jon Dowland) 2006-01-29 15:07:12 fraggle - + Shut up compiler warnings 2006-01-29 15:05:05 fraggle - + Allow map things of type <= 0 - these are ignored by Vanilla Doom. Provides compatibility with plutonia.wad map12. 2006-01-28 20:03:09 fraggle - + Avoid conflict with stdc time function 2006-01-27 18:23:08 fraggle - + Exit with an error when playing a demo with the wrong version, like Vanilla Doom 2006-01-27 18:21:35 fraggle - + Fix compiler warning due to missing include 2006-01-27 18:18:41 fraggle - + dehacked replacements for switch texture names 2006-01-25 17:38:40 fraggle - + Allow overriding the animation texture/flat names via dehacked 2006-01-24 01:46:08 fraggle - + More endianness fixes 2006-01-23 21:56:18 fraggle - + Include the config header so that endianness is dealt with correctly 2006-01-23 01:40:24 fraggle - + Fix bug when expanding large sound effects with odd sample rates 2006-01-23 00:47:16 fraggle - + Rearrange the order of startup code to allow replacing the IWAD filename via dehacked 2006-01-23 00:37:14 fraggle - + Make the network waiting screen not thrash the CPU so much. 2006-01-23 00:17:43 fraggle - + Allow changing the names of level lump names via dehacked. 2006-01-23 00:12:25 fraggle - + Fix dehacked sky replacement 2006-01-23 00:07:56 fraggle - + More dehacked text substitutions for finale text names 2006-01-22 23:48:00 fraggle - + Allow changing of all menu graphic lumps via dehacked 2006-01-22 23:38:05 fraggle - + Allow changing the status bar graphic lumps via dehacked 2006-01-22 23:33:32 fraggle - + Allow changing the sky texture names via dehacked patches 2006-01-22 22:29:42 fraggle - + Periodically request the time from clients to estimate their offset to the server time. 2006-01-22 21:22:35 fraggle - + Dehacked string replacements for menu graphic lump names 2006-01-22 21:21:02 fraggle - + Dehacked string replacements for intermission screen graphic lumps 2006-01-22 21:20:20 fraggle - + Dehacked string replacements for sound and music lump names 2006-01-22 21:19:14 fraggle - + Dehacked string replacements for startup messages, IWAD names, demo names and backgrounds 2006-01-22 21:17:56 fraggle - + Catch calls to DEH_String before DEH_Init is called 2006-01-21 14:16:49 fraggle - + Add first game data sending code. Check the client version when connecting. 2006-01-21 14:15:29 fraggle - + Remove SAVESTRINGSIZE (now defined in p_saveg.h) 2006-01-20 21:05:16 fraggle - + Bump version to 0.2.0 2006-01-20 21:04:59 fraggle - + Import differences from stable branch. 2006-01-19 18:46:24 fraggle - + Move savegame header read/write code into p_saveg.c 2006-01-19 00:17:01 fraggle - + Remove now-redundant note about structure packing. 2006-01-19 00:09:20 fraggle - + Add functions to r/w structures to the savegame buffer, rather than copying the raw structures. This way, we read and write to the DOS savegame format always, regardless of the compiler and processor architecture, to ensure Vanilla compatibility. 2006-01-16 23:35:55 fraggle - + Write icon data as hex numbers, rather than decimal 2006-01-16 21:40:38 fraggle - + Vanilla savegame load/save 2006-01-14 02:06:48 fraggle - + Include the game version in the settings structure. 2006-01-14 00:27:16 fraggle - + Set the window caption and title 2006-01-14 00:13:04 fraggle - + Detect if disconnected from the server while waiting for the game start. 2006-01-14 00:10:54 fraggle - + Change the format of color commands. Reorganise the waiting dialog. 2006-01-13 23:56:00 fraggle - + Add text-mode I/O functions. Use text-mode screen for the waiting screen. 2006-01-13 23:52:12 fraggle - + Fix game start packet parsing logic. 2006-01-13 18:23:28 fraggle - + Textscreen getchar() function; remove SDL code from I_Endoom. 2006-01-13 02:22:47 fraggle - + Update prototypes to match header. Make sure we include the header in the source file. 2006-01-13 02:20:12 fraggle - + Signed integer read functions. Use these when reading ticcmd diffs. 2006-01-13 02:19:18 fraggle - + Only accept sane player values when starting a new game. 2006-01-12 02:18:59 fraggle - + Only start new games when in the waiting-for-start state. 2006-01-12 02:11:52 fraggle - + Game start packets 2006-01-12 01:34:48 fraggle - + Combine mouse motion for tics into single events. 2006-01-12 00:21:29 fraggle - + Interpret the dehacked "max health" setting properly. 2006-01-11 01:37:53 fraggle - + ticcmd diffs: allow compare and patching ticcmds, and reading/writing ticdiffs to packets. 2006-01-10 22:14:13 fraggle - + Shut up compiler warnings 2006-01-10 19:59:26 fraggle - + Reliable packet transport mechanism 2006-01-09 02:03:39 fraggle - + Send clients their player number, and indicate on the waiting screen which client we are. 2006-01-09 01:50:51 fraggle - + Deduce a sane player name by examining environment variables. Add a "player_name" setting to chocolate-doom.cfg. Transmit the name to the server and use the names players send in the waiting data list. 2006-01-08 18:22:39 fraggle - + Strip carriage returns from the end of lines when reading configuration files. 2006-01-08 18:14:19 fraggle - + Update NEWS 2006-01-08 18:13:33 fraggle - + show_endoom config file option to disable the endoom screen 2006-01-08 17:52:45 fraggle - + Play some random music for the players while waiting for the game to start. 2006-01-08 17:52:16 fraggle - + Seed the M_Random random number generator from the system time to give it some more randomness. 2006-01-08 17:51:53 fraggle - + Add S_MusicPlaying function to query if music is still playing. 2006-01-08 05:06:06 fraggle - + Reject new connections if the server is not in the waiting state. 2006-01-08 05:04:50 fraggle - + Don't grab the mouse on the net waiting screen 2006-01-08 04:52:26 fraggle - + Allow the server to reject clients 2006-01-08 03:36:40 fraggle - + Fix double free of addresses 2006-01-08 03:36:17 fraggle - + Fix packet send 2006-01-08 02:53:31 fraggle - + Detect when client connection is disconnected. 2006-01-08 02:53:05 fraggle - + Send keepalives if the connection is not doing anything else. Send all packets using a new NET_Conn_SendPacket to support this. 2006-01-08 00:10:48 fraggle - + Move common connection code into net_common.c, shared by server and client code. 2006-01-07 20:08:11 fraggle - + Send player name and address in the waiting data packets. Display these on the waiting screen, and improve the waiting screen appearance. 2006-01-07 19:16:39 fraggle - + Only display a warning when unable to emulate a spechit overrun 2006-01-07 19:11:54 fraggle - + Import the spechit overrun code from prboom-plus. Thanks to Andrey Budko for his investigation into this behavior. 2006-01-07 17:00:33 fraggle - + Mention the Chocolate Doom wiki, fix a spelling error. 2006-01-07 16:59:52 fraggle - + Update NEWS 2006-01-07 16:26:50 fraggle - + Fix the behavior when expanding sound effects (again). Doom actually does play sounds of any sample rate, but the sound effects in Scientist 2 are corrupted. Add some tests to check that the sound effect header is correct, and generic sound rate conversion code. 2006-01-06 19:26:02 fraggle - + Fix the "-skill 0" hack commonly used under DOS 2006-01-05 02:48:03 fraggle - + Fixes for big endian machines (thanks locust) 2006-01-05 02:42:58 fraggle - + Specify signed char explicitly for ticcmd_t fields. 2006-01-02 21:52:06 fraggle - + Move I_InitGraphics call to be invoked earlier in D_DoomMain. Call the NET_WaitForStart function to wait for a start signal in network games. 2006-01-02 21:50:26 fraggle - + Restructure the waiting screen code. Establish our own separate event loop while waiting for the game to start, to avoid affecting the original code too much. Move some _gui variables to net_client.c. 2006-01-02 21:48:37 fraggle - + fix client connected function 2006-01-02 21:04:10 fraggle - + Create NET_SV_Shutdown function to shut down the server. Call it when quitting the game. Print the IP of the server correctly when connecting. 2006-01-02 21:02:16 fraggle - + Change AddrToString function to use an internal static buffer, for ease of use. 2006-01-02 20:27:45 fraggle - + Clear the screen AFTER initialising the loading disk buffer, so that bits of loading disk are not visible on the initial screen melt. 2006-01-02 20:14:29 fraggle - + Add a "-client" option to test connecting to a local server. 2006-01-02 20:14:07 fraggle - + Fix connect timeout and shutdown client properly if we fail to connect. 2006-01-02 20:13:06 fraggle - + Refer to connected clients by their AddrToString() output rather than just the pointer to their struct. Listen for IP connections as well as loopback connections. 2006-01-02 20:11:49 fraggle - + Rename i_net_module -> net_sdl_module. Fix the AddrToString method. 2006-01-02 17:24:40 fraggle - + Remove test code 2006-01-02 00:54:17 fraggle - + Fix packet not freed back after being sent. Code to disconnect clients from the server side. 2006-01-02 00:17:42 fraggle - + Encapsulate the event queue code properly. Add a D_PopEvent function to read a new event from the event queue. 2006-01-02 00:06:30 fraggle - + Make functions static. Remove unused variable. 2006-01-02 00:00:08 fraggle - + Neater prefixes: NET_Client -> NET_CL_. NET_Server -> NET_SV_. 2006-01-01 23:54:31 fraggle - + Client disconnect code 2006-01-01 23:53:15 fraggle - + Remove GS_WAITINGSTART gamestate. This will be independent of the main loop to avoid interfering with the main game code too much. 2006-01-01 23:51:41 fraggle - + String read/write functions 2005-12-30 18:58:22 fraggle - + Fix client code to correctly send reply to server on connection. Add "waiting screen" while waiting for the game to start. Hook in the new networking code into the main game code. 2005-12-30 18:50:53 fraggle - + Millisecond clock function 2005-12-29 21:29:55 fraggle - + Working client connect code 2005-12-29 17:48:25 fraggle - + Add initial client/server connect code. Reorganise sources list in Makefile.am. 2005-12-29 17:47:47 fraggle - + Automatically initialise the address table 2005-11-17 09:41:24 fraggle - + Catch SDL_QUIT event on ENDOOM display 2005-10-30 19:56:15 fraggle - + Add foundation code for the new networking system 2005-10-29 22:50:08 fraggle - + Update ChangeLog 2005-10-29 22:48:55 fraggle - + 0.1.2 2005-10-29 22:38:55 fraggle - + Fix help screen orderings and skull positions to make Chocolate Doom behave exactly like the original executables. 2005-10-26 01:56:40 fraggle - + Final Doom teleport logic was backwards 2005-10-24 19:50:39 fraggle - + Allow the game version to emulate to be specified from the command line and set compatibility options accordingly. 2005-10-23 21:22:35 fraggle - + Drastically refactor the WAD merging code. Allow multiple replacements of the same sprite in a PWAD (fixes Scientist 2) 2005-10-23 19:39:45 fraggle - + Reproduce the behavior when playing a sound at a sample rate which is not 11025 or 22050Hz. This is to "fix" a bug in Scientist 2: however, it does not fix the playing of sounds, only silence them. I tested @@ -5446,893 +5598,893 @@ WAD, which has sound effects that have the wrong sample rate. 2005-10-18 20:06:31 fraggle - + Update ChangeLog 2005-10-18 20:05:18 fraggle - + 0.1.1 2005-10-18 13:32:55 fraggle - + Update ChangeLog 2005-10-18 10:13:07 fraggle - + Update NEWS 2005-10-18 00:48:05 fraggle - + DEH_CheckCommandLine -> DEH_Init, for consistency with other Init functions 2005-10-18 00:16:09 fraggle - + Add a "loading" message for each dehacked patch we load, to be orthogonal to the WAD loading code 2005-10-17 23:07:26 fraggle - + Fix "Monsters Infight" 2005-10-17 22:20:27 fraggle - + Add note that the "Monsters Infight" setting is not supported. 2005-10-17 22:14:31 fraggle - + Ignore comments in dehacked files. 2005-10-17 22:09:01 fraggle - + Dehacked Misc support: Controls for the armor and armor class set when using the ammo cheats. 2005-10-17 22:02:57 fraggle - + Dehacked Misc support: Max soulsphere, Soulsphere+Megasphere health bonus values, God mode health value 2005-10-17 21:49:42 fraggle - + Add dehacked "Misc" implementations for max armor+health, blue+green armor classes 2005-10-17 21:27:05 fraggle - + Start of Dehacked 'Misc' section support. Initial Health+Bullets, and bfg cells/shot are supported. 2005-10-17 20:46:22 fraggle - + Guard against multiple video shutdowns better. Fix crash due to improper screen clear at startup. 2005-10-16 21:55:50 fraggle - + Fix the '-cdrom' command-line option. 2005-10-16 17:16:03 fraggle - + Set the default number of channels to a more sensible 8 2005-10-16 02:18:10 fraggle - + Global "configdir" variable with directory to store config files in. Create a function to find the filename for a savegame slot. Store savegames in the config dir. 2005-10-15 23:50:57 fraggle - + Fix pink icon on startup 2005-10-15 18:57:47 fraggle - + Add warning message for WADs with FF_START or SS_START in, suggesting the -merge option. 2005-10-15 18:42:07 fraggle - + Mention dehacked banners 2005-10-15 18:38:49 fraggle - + Print startup banners which have been modified by dehacked. 2005-10-15 18:09:11 fraggle - + Add blackbug note 2005-10-15 17:58:31 fraggle - + Fix MIDI music not pausing when using SDL_mixer's native MIDI playback. The SDL_mixer native MIDI code does not pause music properly - use a workaround of setting the volume to 0. 2005-10-15 16:59:14 fraggle - + Map mouse buttons correctly. 2005-10-15 16:47:50 fraggle - + Update NEWS with info about bugs fixed. 2005-10-15 16:45:03 fraggle - + Check the return code from SDL_LockSurface to ensure a surface has been properly locked. Fixes crash when switching applications while running fullscreen. 2005-10-14 00:12:30 fraggle - + Fix Doom 1 skies 2005-10-13 23:23:55 fraggle - + Fix logic for lost soul bounce 2005-10-12 22:52:01 fraggle - + doomfeatures.h to allow certain features to be disabled in the build 2005-10-10 18:02:24 fraggle - + Update to do list 2005-10-10 00:52:28 fraggle - + Fix DEH_Warning call 2005-10-09 22:22:41 fraggle - + Update ChangeLog 2005-10-09 22:20:14 fraggle - + v0.1.0 2005-10-09 22:19:41 fraggle - + Include libtextscreen include in the right place, include deh_main.h in the dist. 2005-10-09 21:19:21 fraggle - + Handle blinking text in ENDOOM lumps properly. 2005-10-09 21:06:50 fraggle - + Check the header of dehacked files and make sure we only load valid dehacked files. 2005-10-09 17:42:46 fraggle - + Cannot do arithmetic on void pointers in standard C 2005-10-09 15:34:19 fraggle - + Fix banner string for ultimate doom 2005-10-09 01:25:49 fraggle - + Improved sprite merging 2005-10-09 01:20:24 fraggle - + Detect registered DOOM banner in dehacked patches 2005-10-08 22:02:55 fraggle - + Allow dehacked substitutions on sprite names 2005-10-08 22:01:55 fraggle - + Change dehacked startup message 2005-10-08 21:54:16 fraggle - + Proper dehacked error/warning framework. Catch a load more errors. 2005-10-08 21:14:38 fraggle - + Dehacked "Sound" section support 2005-10-08 21:14:24 fraggle - + Add the ability to specify unsupported fields 2005-10-08 21:10:51 fraggle - + Shut up compiler warning 2005-10-08 20:52:03 fraggle - + Update NEWS, ChangeLog 2005-10-08 20:33:48 fraggle - + Allow dehacked patches to override the name of the game via the startup banner. 2005-10-08 19:34:12 fraggle - + Print startup message to stdout, not stderr 2005-10-08 19:23:18 fraggle - + WAD merging code 2005-10-08 19:22:46 fraggle - + Store the cache as part of the lumpinfo_t struct. Add W_AddFile prototype to header. 2005-10-06 20:36:41 fraggle - + Must use the right no clipping cheat for the right game. 2005-10-06 20:32:38 fraggle - + Allow changing the background flats in finale text screens via dehacked 2005-10-04 23:10:32 fraggle - + Dehacked "Misc" section parser (currently a dummy) 2005-10-04 23:04:06 fraggle - + Parse dehacked "Ammo" sections properly 2005-10-04 22:41:42 fraggle - + Rewrite cheats code. Add dehacked cheat replacement. 2005-10-04 01:41:49 fraggle - + Move call to dehacked entrypoint to stop crashes 2005-10-03 22:39:39 fraggle - + Dehacked text substitutions 2005-10-03 14:44:12 fraggle - + Update ChangeLog 2005-10-03 14:21:11 fraggle - + Weapons mapping code 2005-10-03 12:08:16 fraggle - + Replace end of section functions with NULLs as they arent currently being used for anything. 2005-10-03 12:02:08 fraggle - + Add a weaponinfo_t mapping 2005-10-03 11:25:37 fraggle - + Add mapping code to map out structures and switch thing/frame code to use this. 2005-10-03 01:42:45 fraggle - + Frame numbers are indexed from 0 2005-10-03 00:49:01 fraggle - + The beginnings of dehacked support 2005-10-02 21:23:04 fraggle - + Guard against music lumps containing non-MUS data, document in bugs list 2005-10-02 05:23:42 fraggle - + Update NEWS 2005-10-02 05:22:06 fraggle - + Fix Final Doom automap level name display 2005-10-02 05:16:47 fraggle - + Fixes for Final Doom 2005-10-02 04:23:54 fraggle - + Fix the length of time that ENDOOM is displayed for 2005-10-02 04:16:29 fraggle - + ENDOOM support using text mode emulation 2005-10-02 04:16:03 fraggle - + Text mode emulation code 2005-10-02 04:03:40 fraggle - + Make sure loading disk is only shown if the display is initialised 2005-10-01 16:50:13 fraggle - + Update ChangeLog 2005-10-01 16:49:32 fraggle - + automake doesn't recognise .rc files unless there is a rule like this in here. Store the rule in both forms. 2005-09-28 01:08:45 fraggle - + Update ChangeLog 2005-09-27 23:33:42 fraggle - + Always use SDL_Flip to update the screen. Fixes problems in Windows when running fullscreen, introduced by fixes to the disk icon code. 2005-09-27 23:25:10 fraggle - + Fix .rc -> .o rule 2005-09-27 23:24:24 fraggle - + Add chocolate_doom_icon.c to CVS. This is kind of bad but saves having to have Python installed 2005-09-27 23:23:32 fraggle - + Don't write converted output file unless everything went through okay. 2005-09-27 22:46:53 fraggle - + 0.0.4 2005-09-27 22:46:43 fraggle - + Update ChangeLog 2005-09-26 22:44:30 fraggle - + Fix melting crap on startup - oops 2005-09-25 01:31:32 fraggle - + Fix disk icon appearing before palette is set (pink disk!) Cleanup and commenting 2005-09-25 00:46:48 fraggle - + Update ChangeLog 2005-09-25 00:45:18 fraggle - + Remove leftover debug code 2005-09-25 00:44:49 fraggle - + Enforce sane screenmultiply values 2005-09-25 00:41:07 fraggle - + Fix "loading" icon for all video modes 2005-09-25 00:16:43 fraggle - + Remove icon border 2005-09-24 23:58:01 fraggle - + Commit uac_dead fix 2005-09-24 23:04:03 fraggle - + Add application icon to running program 2005-09-22 22:42:24 fraggle - + 64-bit fixes 2005-09-22 14:57:32 fraggle - + Add some more useful information to the README 2005-09-22 14:23:58 fraggle - + Update ChangeLog 2005-09-22 14:22:49 fraggle - + Update NEWS 2005-09-22 14:20:49 fraggle - + Update bugs/todo lists 2005-09-22 14:13:47 fraggle - + Remove external statistics driver support (-statcopy): nonfunctional on modern systems and never used. Fix for systems where sizeof(int) != sizeof(void *) 2005-09-22 13:58:46 fraggle - + Use a new PU_FREE tag to mark free blocks, rather than the 'user' field (avoids using magic numbers to mark allocated blocks with no user) 2005-09-20 22:20:16 fraggle - + Generate chocolate-doom-res.rc with version and product info 2005-09-20 21:55:32 fraggle - + Conditionally build the resource file, dependent on whether windres exists 2005-09-20 21:13:55 fraggle - + Update to do list 2005-09-20 21:13:15 fraggle - + Include icon in exe, rather than the default icon. Thanks to Joe Kennedy for drawing this icon. 2005-09-17 22:37:04 fraggle - + Update changelog 2005-09-17 22:17:45 fraggle - + 0.0.3 2005-09-17 21:50:46 fraggle - + Mouse acceleration code to emulate old DOS drivers 2005-09-17 21:25:56 fraggle - + Set the default values for variables in their initialisers. Remove the "defaultvalue" parameter and associated code from the configuration file parsing code. 2005-09-17 21:06:45 fraggle - + Rewrite configuration loading code; assign a type to each configuration parameter. Allow float parameters, align all values in the configuration files 2005-09-17 19:40:32 fraggle - + Autogenerated changelog 2005-09-14 23:13:45 fraggle - + Remove mkinstalldirs (redundant now); include BUGS and TODO in distribution 2005-09-14 23:08:29 fraggle - + Fix startup messages displayed (build a console binary; remove CON redirection code) 2005-09-14 22:55:47 fraggle - + Lock surfaces properly when we have to (fixes crash under Windows 98) 2005-09-13 21:18:51 fraggle - + 0.0.2 2005-09-12 00:57:08 fraggle - + Remove temporary MIDI files generated by sound code. 2005-09-11 21:53:17 fraggle - + Fix sounds playing at the wrong volume (too quiet) 2005-09-11 21:42:26 fraggle - + Update NEWS with information about alt-tab bug 2005-09-11 21:35:18 fraggle - + chocolate-doom.cfg 2005-09-11 21:25:56 fraggle - + Second configuration file to allow chocolate doom-specific settings. Adjust some existing command line logic (for graphics settings and novert) to adjust for this. 2005-09-11 17:39:29 fraggle - + Fix declaration of I_Sleep (not I_Delay) and move to right header 2005-09-11 17:35:04 fraggle - + Missing declarations 2005-09-08 23:10:40 fraggle - + Delay calls so we don't use the entire CPU 2005-09-08 23:05:17 fraggle - + Allow alt-tab away while running fullscreen 2005-09-08 10:58:00 fraggle - + MAXINTERCEPTS got converted to INT_MAXERCEPTS accidentally when switching to the ANSI standard limit constants 2005-09-08 01:02:12 fraggle - + Fix description 2005-09-08 01:01:51 fraggle - + Fix switches not changing in Episode 4 2005-09-07 23:58:34 fraggle - + No SIGHUP on Windows 2005-09-07 23:55:28 fraggle - + v0.0.1 2005-09-07 23:24:26 fraggle - + Modify the sound effect caching behaviour: sounds which are not playing are now marked as PU_CACHE; it is otherwise possible to run out of memory. 2005-09-07 22:40:28 fraggle - + Catch signals and exit cleanly 2005-09-07 22:40:11 fraggle - + Remove non-ANSI C headers and functions 2005-09-07 22:30:42 fraggle - + Remove non-ANSI C headers. Use standard C file I/O functions. 2005-09-07 21:44:23 fraggle - + Fix up names of functions Make the quit button work (pops up the "quit doom?" prompt). Fix focus detection to release the mouse and ignore mouse events when window is not focused. 2005-09-07 13:34:47 fraggle - + Maintain dos-specific options in config file 2005-09-06 23:50:09 fraggle - + Bugs list; update TODO 2005-09-06 23:39:43 fraggle - + Restore -nosound, -nosfx, -nomusic 2005-09-06 22:40:28 fraggle - + Setting music volume 2005-09-06 22:15:08 fraggle - + Silly me - i misread cph's patch and got the logic backwards 2005-09-06 22:11:23 fraggle - + Working music! 2005-09-06 22:06:45 fraggle - + Newer versions of mmus2mid.c,h from prboom 2005-09-05 23:50:56 fraggle - + Add mmus2mid code from prboom. Use 'void *' for music handles. Pass length of data when registering music. 2005-09-05 22:03:43 fraggle - + 16-bit sound 2005-09-05 21:32:18 fraggle - + Use the system-nonspecific sound code to assign the channel number used by SDL. Remove handle tagging stuff. 2005-09-05 00:18:30 fraggle - + Remove dead code. Cope with the screen not having width == pitch. Lock the SDL screen surface properly. Rewrite 2x scaling code. 2005-09-04 19:44:23 fraggle - + shut up compiler warnings 2005-09-04 18:33:43 fraggle - + Support demos recorded with cph's modified "v1.91" doom exe - which contain higher resolution angleturn 2005-09-04 16:59:45 fraggle - + 'novert' command line option to disable vertical mouse movement 2005-09-04 16:23:29 fraggle - + Support the old "joyb_speed 31" hack to allow autorun 2005-09-04 15:55:53 fraggle - + Doom v1.9 doesnt allow cheats in nightmare mode! 2005-09-04 15:51:19 fraggle - + Display the correct quit messages according to which game is being played. Remove "language" variable (do this through gettext, if ever) 2005-09-04 15:34:20 fraggle - + These things have been done 2005-09-01 01:01:36 fraggle - + -nograbmouse option 2005-09-01 00:58:28 fraggle - + smarter mouse grabbing for windowed mode 2005-08-31 22:50:57 fraggle - + Nicer banner showing the game type (once we know). Remove dead code. Find the config file properly. 2005-08-31 22:35:42 fraggle - + Display the game name in the title bar. Move game start code to later in initialisation because of the IWAD detection changes. 2005-08-31 22:24:24 fraggle - + Remove the last traces of NORMALUNIX 2005-08-31 22:21:18 fraggle - + Better IWAD detection and identification. Support '-iwad' to specify the IWAD to use. 2005-08-30 23:15:11 fraggle - + More Windows fixes 2005-08-30 23:11:10 fraggle - + Windows fixes 2005-08-29 23:00:04 fraggle - + Add missing header to fix build 2005-08-29 22:57:40 fraggle - + Include autotools directory in dist 2005-08-23 10:54:23 fraggle - + Demo sync problem with teleports and final doom 2005-08-19 22:55:51 fraggle - + Make sounds louder. Use the correct maximum of 15 when doing sound calculations. 2005-08-12 17:54:15 fraggle - + Port network code to use SDL_net 2005-08-10 09:45:35 fraggle - + Remove "if (french)" stuff, FRENCH define, detect french wad automatically 2005-08-08 16:19:47 fraggle - + More TODOs/update 2005-08-07 21:01:00 fraggle - + Clear the screen on startup 2005-08-07 20:21:01 fraggle - + Cycle round sound channels to stop reuse and conflicts of channel numbers. Add debug to detect when incorrect sound handles are used. 2005-08-07 04:09:33 fraggle - + Fix gamma correction 2005-08-07 03:59:23 fraggle - + Clear disk image when loading at startup 2005-08-06 19:37:47 fraggle - + Fix low resolution mode 2005-08-06 18:30:30 fraggle - + Only change palette on screen updates 2005-08-06 18:05:51 fraggle - + Remove debug messages, send error messages to stderr Fix overflow when playing large sound files 2005-08-05 18:53:07 fraggle - + More sensible defaults 2005-08-04 23:55:08 fraggle - + Use DOOM_VERSION to define the Doom version (don't conflict with automake's config.h). Display GPL message instead of anti-piracy messages. 2005-08-04 23:23:07 fraggle - + Use zone memory function. Add command line options 2005-08-04 22:48:32 fraggle - + Turn on compiler optimisation and warning options Add SDL_mixer sound code 2005-08-04 20:54:56 fraggle - + Use keysym value rather than unicode value (fixes problems with shift key) 2005-08-04 19:42:15 fraggle - + Silence compiler warnings 2005-08-04 19:40:22 fraggle - + Use zone memory functions instead of alloca/malloc/free 2005-08-04 02:15:10 fraggle - + Fix clev cheat 2005-08-04 02:14:37 fraggle - + Begin/EndRead now in i_video.c 2005-08-04 02:13:46 fraggle - + Loading disk 2005-08-03 23:20:09 fraggle - + Display FPS on quit 2005-08-03 23:19:52 fraggle - + Set some flags to fix palette and improve performance 2005-08-03 22:58:02 fraggle - + Working scale*2 2005-07-25 21:50:55 fraggle - + mouse 2005-07-25 21:41:59 fraggle - + Port timer code to SDL 2005-07-24 04:07:24 fraggle - + Update to do list 2005-07-24 03:14:04 fraggle - + Move to SDL for graphics. Translate key scancodes to correct internal format when reading settings from config file - backwards compatible with config files for original exes 2005-07-24 00:07:04 fraggle - + Add back previously removed printfs as '.'s for startup progress bar 2005-07-23 22:42:52 fraggle - + Add missing null to end of sprite names list 2005-07-23 22:32:47 fraggle - + Add missing errno.h, fix crash on startup when no IWAD present 2005-07-23 20:42:56 fraggle - + Startup messages as in the DOS exes 2005-07-23 20:31:49 fraggle - + Update TODO list 2005-07-23 20:29:45 fraggle - + Put version number back to 1.9 2005-07-23 20:17:11 fraggle - + Use ANSI-standard limit constants. Remove LINUX define. 2005-07-23 19:56:07 fraggle - + Remove unneccessary pragmas 2005-07-23 19:54:30 fraggle - + Fix quit prompt not displayed properly 2005-07-23 19:54:06 fraggle - + Use standard C functions for WAD code 2005-07-23 19:50:34 fraggle - + Use standard C file functions for WAD code 2005-07-23 18:46:19 fraggle - + Import bouncing lost soul fix from prboom 2005-07-23 18:27:04 fraggle - + Stop crash on shutdown 2005-07-23 18:21:35 fraggle - + Remove step table (unused, adds dependency on pow function) 2005-07-23 18:20:33 fraggle - + Autotools build system 2005-07-23 17:54:24 fraggle - + Standard distribution files 2005-07-23 17:46:05 fraggle - + To do list 2005-07-23 17:44:57 fraggle - + Update copyright to GNU GPL 2005-07-23 17:19:41 fraggle - + Initial revision @@ -1,14 +1,46 @@ +1.7.0 (2012-06-09): + * Fixed gnome-screensaver desktop file (thanks Rahul Sundaram). * Updated COPYING to current version of GPL2 (thanks Rahul Sundaram). - * Fix bug with detection of IWAD type by filename (thanks mether). - * Reduce palette accuracy to 6 bits per channel, to more accurately - emulate the PC VGA hardware (thanks GhostlyDeath). - * Fix teleport behavior when emulating the alternate Final Doom + * Running servers now re-resolve the address of the master server + occasionally, to adapt to DNS address changes. + * Error dialog is no longer shown on OS X when running from the + console. + * The Makefiles no longer use GNU make extensions, so the package + builds on OpenBSD. + * There is now an OPL MIDI debug option (-opldev), useful for + when developing GENMIDI lumps. + * A workaround for SDL mouse lag is now only used on Windows + (where it is needed), and not on other systems. This fixes + Chocolate Doom on AmigaOS (thanks Timo Sievänen). + * UTF-8 usernames are supported, and Windows usernames with + non-ASCII characters are now supported (thanks Alexandre + Xavier). + + Compatibility: + * Palette accuracy is reduced to 6 bits per channel, to more + accurately emulate the PC VGA hardware (thanks GhostlyDeath). + * Fixed teleport behavior when emulating the alternate Final Doom executable (-gameversion final2) (thanks xttl). + Bugs fixed: + * Fixed weapon cycling keys when playing in Shareware Doom and using + the IDKFA cheat (thanks Alexandre Xavier). + * Fixed the default mouse buttons in the setup tool (thanks + Alexandre Xavier). + * Chat macros now work when vanilla_keyboard_mapping is turned + off. + * Default chat macros were fixed in the setup tool. + * Ping time calculation was fixed for LAN search, and made more + accurate for all searches. + * Fixed bug with detection of IWAD type by filename (thanks mether). + libtextscreen: + * There is now limited UTF-8 text support in the textscreen + library, used in the label and input box widgets. + * Scroll bar behavior was fixed (thanks Alexandre Xavier). * Input boxes stop editing and save when they lose their focus, correcting a previous counterintuitive behavior (thanks Twelve). diff --git a/configure.in b/configure.in index 094a87c3..77a7e6e9 100644 --- a/configure.in +++ b/configure.in @@ -1,7 +1,7 @@ AC_INIT(Chocolate Doom, 1.99.0, fraggle@gmail.com, chocolate-doom) PACKAGE_SHORTDESC="Conservative Doom source port" -PACKAGE_COPYRIGHT="Copyright (C) 1993-2011" +PACKAGE_COPYRIGHT="Copyright (C) 1993-2012" PACKAGE_LICENSE="GNU General Public License, version 2" PACKAGE_MAINTAINER="Simon Howard" PACKAGE_URL="http://www.chocolate-doom.org/" diff --git a/data/Makefile.am b/data/Makefile.am index 05951cb0..1fd4588c 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -14,8 +14,8 @@ icons_DATA = @PROGRAM_PREFIX@doom.png \ @PROGRAM_PREFIX@setup.png @PROGRAM_PREFIX@doom.png : doom.png - cp $< $@ + cp doom.png $@ @PROGRAM_PREFIX@setup.png : setup.png - cp $< $@ + cp setup.png $@ diff --git a/src/Makefile.am b/src/Makefile.am index af7a43a2..8f393089 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -69,7 +69,7 @@ m_cheat.c m_cheat.h \ m_config.c m_config.h \ m_controls.c m_controls.h \ m_fixed.c m_fixed.h \ -md5.c md5.h \ +sha1.c sha1.h \ memio.c memio.h \ tables.c tables.h \ v_video.c v_video.h \ @@ -95,6 +95,7 @@ deh_text.c # source files needed for FEATURE_MULTIPLAYER FEATURE_MULTIPLAYER_SOURCE_FILES= \ +aes_prng.c aes_prng.h \ net_client.c net_client.h \ net_common.c net_common.h \ net_dedicated.c net_dedicated.h \ @@ -210,13 +211,13 @@ appdir = $(prefix)/share/applications app_DATA = @PROGRAM_PREFIX@doom.desktop @PROGRAM_PREFIX@doom.desktop : doom.desktop - cp $< $@ + cp doom.desktop $@ screensaverdir = $(prefix)/share/applications/screensavers screensaver_DATA = @PROGRAM_PREFIX@doom-screensaver.desktop @PROGRAM_PREFIX@doom-screensaver.desktop: doom-screensaver.desktop - cp $< $@ + cp doom-screensaver.desktop $@ .rc.o: $(WINDRES) $< -o $@ diff --git a/src/aes_prng.c b/src/aes_prng.c new file mode 100644 index 00000000..4d9963f0 --- /dev/null +++ b/src/aes_prng.c @@ -0,0 +1,1048 @@ +// Emacs style mode select -*- C++ -*- +//----------------------------------------------------------------------------- +// +// Copyright(C) 2012 Simon Howard +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA. +// +//----------------------------------------------------------------------------- +// +// This implements a cryptographically secure pseudorandom number +// generator for implementing secure demos. The approach taken is to +// use the AES (Rijndael) stream cipher in "counter" mode, encrypting +// an incrementing counter. The cipher key acts as the random seed. +// Cryptanalysis of AES used in this way has shown it to be an +// effective PRNG (see: Empirical Evidence concerning AES, Hellekalek +// & Wegenkittl, 2003). +// +// The AES implementation is from GnuPG. Original copyright notice is +// below. +// +//----------------------------------------------------------------------------- + +/* Rijndael (AES) for GnuPG + * Copyright (C) 2000, 2001, 2008 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <http://www.gnu.org/licenses/>. + ******************************************************************* + * The code here is based on the optimized implementation taken from + * http://www.esat.kuleuven.ac.be/~rijmen/rijndael/ on Oct 2, 2000, + * which carries this notice: + *------------------------------------------ + * rijndael-alg-fst.c v2.3 April '2000 + * + * Optimised ANSI C code + * + * authors: v1.0: Antoon Bosselaers + * v2.0: Vincent Rijmen + * v2.3: Paulo Barreto + * + * This code is placed in the public domain. + *------------------------------------------ + */ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> /* for memcmp() */ + +#include "aes_prng.h" +#include "doomtype.h" +#include "i_system.h" + +#define MAXKC (256/32) +#define MAXROUNDS 14 + + +typedef struct +{ + int ROUNDS; /* key-length-dependent number of rounds */ + uint32_t keySched[MAXROUNDS+1][4]; /* key schedule */ +} RIJNDAEL_context; + +static const byte S[256] = +{ + 99, 124, 119, 123, 242, 107, 111, 197, + 48, 1, 103, 43, 254, 215, 171, 118, + 202, 130, 201, 125, 250, 89, 71, 240, + 173, 212, 162, 175, 156, 164, 114, 192, + 183, 253, 147, 38, 54, 63, 247, 204, + 52, 165, 229, 241, 113, 216, 49, 21, + 4, 199, 35, 195, 24, 150, 5, 154, + 7, 18, 128, 226, 235, 39, 178, 117, + 9, 131, 44, 26, 27, 110, 90, 160, + 82, 59, 214, 179, 41, 227, 47, 132, + 83, 209, 0, 237, 32, 252, 177, 91, + 106, 203, 190, 57, 74, 76, 88, 207, + 208, 239, 170, 251, 67, 77, 51, 133, + 69, 249, 2, 127, 80, 60, 159, 168, + 81, 163, 64, 143, 146, 157, 56, 245, + 188, 182, 218, 33, 16, 255, 243, 210, + 205, 12, 19, 236, 95, 151, 68, 23, + 196, 167, 126, 61, 100, 93, 25, 115, + 96, 129, 79, 220, 34, 42, 144, 136, + 70, 238, 184, 20, 222, 94, 11, 219, + 224, 50, 58, 10, 73, 6, 36, 92, + 194, 211, 172, 98, 145, 149, 228, 121, + 231, 200, 55, 109, 141, 213, 78, 169, + 108, 86, 244, 234, 101, 122, 174, 8, + 186, 120, 37, 46, 28, 166, 180, 198, + 232, 221, 116, 31, 75, 189, 139, 138, + 112, 62, 181, 102, 72, 3, 246, 14, + 97, 53, 87, 185, 134, 193, 29, 158, + 225, 248, 152, 17, 105, 217, 142, 148, + 155, 30, 135, 233, 206, 85, 40, 223, + 140, 161, 137, 13, 191, 230, 66, 104, + 65, 153, 45, 15, 176, 84, 187, 22 +}; + + +static const byte T1[256][4] = +{ + { 0xc6,0x63,0x63,0xa5 }, { 0xf8,0x7c,0x7c,0x84 }, + { 0xee,0x77,0x77,0x99 }, { 0xf6,0x7b,0x7b,0x8d }, + { 0xff,0xf2,0xf2,0x0d }, { 0xd6,0x6b,0x6b,0xbd }, + { 0xde,0x6f,0x6f,0xb1 }, { 0x91,0xc5,0xc5,0x54 }, + { 0x60,0x30,0x30,0x50 }, { 0x02,0x01,0x01,0x03 }, + { 0xce,0x67,0x67,0xa9 }, { 0x56,0x2b,0x2b,0x7d }, + { 0xe7,0xfe,0xfe,0x19 }, { 0xb5,0xd7,0xd7,0x62 }, + { 0x4d,0xab,0xab,0xe6 }, { 0xec,0x76,0x76,0x9a }, + { 0x8f,0xca,0xca,0x45 }, { 0x1f,0x82,0x82,0x9d }, + { 0x89,0xc9,0xc9,0x40 }, { 0xfa,0x7d,0x7d,0x87 }, + { 0xef,0xfa,0xfa,0x15 }, { 0xb2,0x59,0x59,0xeb }, + { 0x8e,0x47,0x47,0xc9 }, { 0xfb,0xf0,0xf0,0x0b }, + { 0x41,0xad,0xad,0xec }, { 0xb3,0xd4,0xd4,0x67 }, + { 0x5f,0xa2,0xa2,0xfd }, { 0x45,0xaf,0xaf,0xea }, + { 0x23,0x9c,0x9c,0xbf }, { 0x53,0xa4,0xa4,0xf7 }, + { 0xe4,0x72,0x72,0x96 }, { 0x9b,0xc0,0xc0,0x5b }, + { 0x75,0xb7,0xb7,0xc2 }, { 0xe1,0xfd,0xfd,0x1c }, + { 0x3d,0x93,0x93,0xae }, { 0x4c,0x26,0x26,0x6a }, + { 0x6c,0x36,0x36,0x5a }, { 0x7e,0x3f,0x3f,0x41 }, + { 0xf5,0xf7,0xf7,0x02 }, { 0x83,0xcc,0xcc,0x4f }, + { 0x68,0x34,0x34,0x5c }, { 0x51,0xa5,0xa5,0xf4 }, + { 0xd1,0xe5,0xe5,0x34 }, { 0xf9,0xf1,0xf1,0x08 }, + { 0xe2,0x71,0x71,0x93 }, { 0xab,0xd8,0xd8,0x73 }, + { 0x62,0x31,0x31,0x53 }, { 0x2a,0x15,0x15,0x3f }, + { 0x08,0x04,0x04,0x0c }, { 0x95,0xc7,0xc7,0x52 }, + { 0x46,0x23,0x23,0x65 }, { 0x9d,0xc3,0xc3,0x5e }, + { 0x30,0x18,0x18,0x28 }, { 0x37,0x96,0x96,0xa1 }, + { 0x0a,0x05,0x05,0x0f }, { 0x2f,0x9a,0x9a,0xb5 }, + { 0x0e,0x07,0x07,0x09 }, { 0x24,0x12,0x12,0x36 }, + { 0x1b,0x80,0x80,0x9b }, { 0xdf,0xe2,0xe2,0x3d }, + { 0xcd,0xeb,0xeb,0x26 }, { 0x4e,0x27,0x27,0x69 }, + { 0x7f,0xb2,0xb2,0xcd }, { 0xea,0x75,0x75,0x9f }, + { 0x12,0x09,0x09,0x1b }, { 0x1d,0x83,0x83,0x9e }, + { 0x58,0x2c,0x2c,0x74 }, { 0x34,0x1a,0x1a,0x2e }, + { 0x36,0x1b,0x1b,0x2d }, { 0xdc,0x6e,0x6e,0xb2 }, + { 0xb4,0x5a,0x5a,0xee }, { 0x5b,0xa0,0xa0,0xfb }, + { 0xa4,0x52,0x52,0xf6 }, { 0x76,0x3b,0x3b,0x4d }, + { 0xb7,0xd6,0xd6,0x61 }, { 0x7d,0xb3,0xb3,0xce }, + { 0x52,0x29,0x29,0x7b }, { 0xdd,0xe3,0xe3,0x3e }, + { 0x5e,0x2f,0x2f,0x71 }, { 0x13,0x84,0x84,0x97 }, + { 0xa6,0x53,0x53,0xf5 }, { 0xb9,0xd1,0xd1,0x68 }, + { 0x00,0x00,0x00,0x00 }, { 0xc1,0xed,0xed,0x2c }, + { 0x40,0x20,0x20,0x60 }, { 0xe3,0xfc,0xfc,0x1f }, + { 0x79,0xb1,0xb1,0xc8 }, { 0xb6,0x5b,0x5b,0xed }, + { 0xd4,0x6a,0x6a,0xbe }, { 0x8d,0xcb,0xcb,0x46 }, + { 0x67,0xbe,0xbe,0xd9 }, { 0x72,0x39,0x39,0x4b }, + { 0x94,0x4a,0x4a,0xde }, { 0x98,0x4c,0x4c,0xd4 }, + { 0xb0,0x58,0x58,0xe8 }, { 0x85,0xcf,0xcf,0x4a }, + { 0xbb,0xd0,0xd0,0x6b }, { 0xc5,0xef,0xef,0x2a }, + { 0x4f,0xaa,0xaa,0xe5 }, { 0xed,0xfb,0xfb,0x16 }, + { 0x86,0x43,0x43,0xc5 }, { 0x9a,0x4d,0x4d,0xd7 }, + { 0x66,0x33,0x33,0x55 }, { 0x11,0x85,0x85,0x94 }, + { 0x8a,0x45,0x45,0xcf }, { 0xe9,0xf9,0xf9,0x10 }, + { 0x04,0x02,0x02,0x06 }, { 0xfe,0x7f,0x7f,0x81 }, + { 0xa0,0x50,0x50,0xf0 }, { 0x78,0x3c,0x3c,0x44 }, + { 0x25,0x9f,0x9f,0xba }, { 0x4b,0xa8,0xa8,0xe3 }, + { 0xa2,0x51,0x51,0xf3 }, { 0x5d,0xa3,0xa3,0xfe }, + { 0x80,0x40,0x40,0xc0 }, { 0x05,0x8f,0x8f,0x8a }, + { 0x3f,0x92,0x92,0xad }, { 0x21,0x9d,0x9d,0xbc }, + { 0x70,0x38,0x38,0x48 }, { 0xf1,0xf5,0xf5,0x04 }, + { 0x63,0xbc,0xbc,0xdf }, { 0x77,0xb6,0xb6,0xc1 }, + { 0xaf,0xda,0xda,0x75 }, { 0x42,0x21,0x21,0x63 }, + { 0x20,0x10,0x10,0x30 }, { 0xe5,0xff,0xff,0x1a }, + { 0xfd,0xf3,0xf3,0x0e }, { 0xbf,0xd2,0xd2,0x6d }, + { 0x81,0xcd,0xcd,0x4c }, { 0x18,0x0c,0x0c,0x14 }, + { 0x26,0x13,0x13,0x35 }, { 0xc3,0xec,0xec,0x2f }, + { 0xbe,0x5f,0x5f,0xe1 }, { 0x35,0x97,0x97,0xa2 }, + { 0x88,0x44,0x44,0xcc }, { 0x2e,0x17,0x17,0x39 }, + { 0x93,0xc4,0xc4,0x57 }, { 0x55,0xa7,0xa7,0xf2 }, + { 0xfc,0x7e,0x7e,0x82 }, { 0x7a,0x3d,0x3d,0x47 }, + { 0xc8,0x64,0x64,0xac }, { 0xba,0x5d,0x5d,0xe7 }, + { 0x32,0x19,0x19,0x2b }, { 0xe6,0x73,0x73,0x95 }, + { 0xc0,0x60,0x60,0xa0 }, { 0x19,0x81,0x81,0x98 }, + { 0x9e,0x4f,0x4f,0xd1 }, { 0xa3,0xdc,0xdc,0x7f }, + { 0x44,0x22,0x22,0x66 }, { 0x54,0x2a,0x2a,0x7e }, + { 0x3b,0x90,0x90,0xab }, { 0x0b,0x88,0x88,0x83 }, + { 0x8c,0x46,0x46,0xca }, { 0xc7,0xee,0xee,0x29 }, + { 0x6b,0xb8,0xb8,0xd3 }, { 0x28,0x14,0x14,0x3c }, + { 0xa7,0xde,0xde,0x79 }, { 0xbc,0x5e,0x5e,0xe2 }, + { 0x16,0x0b,0x0b,0x1d }, { 0xad,0xdb,0xdb,0x76 }, + { 0xdb,0xe0,0xe0,0x3b }, { 0x64,0x32,0x32,0x56 }, + { 0x74,0x3a,0x3a,0x4e }, { 0x14,0x0a,0x0a,0x1e }, + { 0x92,0x49,0x49,0xdb }, { 0x0c,0x06,0x06,0x0a }, + { 0x48,0x24,0x24,0x6c }, { 0xb8,0x5c,0x5c,0xe4 }, + { 0x9f,0xc2,0xc2,0x5d }, { 0xbd,0xd3,0xd3,0x6e }, + { 0x43,0xac,0xac,0xef }, { 0xc4,0x62,0x62,0xa6 }, + { 0x39,0x91,0x91,0xa8 }, { 0x31,0x95,0x95,0xa4 }, + { 0xd3,0xe4,0xe4,0x37 }, { 0xf2,0x79,0x79,0x8b }, + { 0xd5,0xe7,0xe7,0x32 }, { 0x8b,0xc8,0xc8,0x43 }, + { 0x6e,0x37,0x37,0x59 }, { 0xda,0x6d,0x6d,0xb7 }, + { 0x01,0x8d,0x8d,0x8c }, { 0xb1,0xd5,0xd5,0x64 }, + { 0x9c,0x4e,0x4e,0xd2 }, { 0x49,0xa9,0xa9,0xe0 }, + { 0xd8,0x6c,0x6c,0xb4 }, { 0xac,0x56,0x56,0xfa }, + { 0xf3,0xf4,0xf4,0x07 }, { 0xcf,0xea,0xea,0x25 }, + { 0xca,0x65,0x65,0xaf }, { 0xf4,0x7a,0x7a,0x8e }, + { 0x47,0xae,0xae,0xe9 }, { 0x10,0x08,0x08,0x18 }, + { 0x6f,0xba,0xba,0xd5 }, { 0xf0,0x78,0x78,0x88 }, + { 0x4a,0x25,0x25,0x6f }, { 0x5c,0x2e,0x2e,0x72 }, + { 0x38,0x1c,0x1c,0x24 }, { 0x57,0xa6,0xa6,0xf1 }, + { 0x73,0xb4,0xb4,0xc7 }, { 0x97,0xc6,0xc6,0x51 }, + { 0xcb,0xe8,0xe8,0x23 }, { 0xa1,0xdd,0xdd,0x7c }, + { 0xe8,0x74,0x74,0x9c }, { 0x3e,0x1f,0x1f,0x21 }, + { 0x96,0x4b,0x4b,0xdd }, { 0x61,0xbd,0xbd,0xdc }, + { 0x0d,0x8b,0x8b,0x86 }, { 0x0f,0x8a,0x8a,0x85 }, + { 0xe0,0x70,0x70,0x90 }, { 0x7c,0x3e,0x3e,0x42 }, + { 0x71,0xb5,0xb5,0xc4 }, { 0xcc,0x66,0x66,0xaa }, + { 0x90,0x48,0x48,0xd8 }, { 0x06,0x03,0x03,0x05 }, + { 0xf7,0xf6,0xf6,0x01 }, { 0x1c,0x0e,0x0e,0x12 }, + { 0xc2,0x61,0x61,0xa3 }, { 0x6a,0x35,0x35,0x5f }, + { 0xae,0x57,0x57,0xf9 }, { 0x69,0xb9,0xb9,0xd0 }, + { 0x17,0x86,0x86,0x91 }, { 0x99,0xc1,0xc1,0x58 }, + { 0x3a,0x1d,0x1d,0x27 }, { 0x27,0x9e,0x9e,0xb9 }, + { 0xd9,0xe1,0xe1,0x38 }, { 0xeb,0xf8,0xf8,0x13 }, + { 0x2b,0x98,0x98,0xb3 }, { 0x22,0x11,0x11,0x33 }, + { 0xd2,0x69,0x69,0xbb }, { 0xa9,0xd9,0xd9,0x70 }, + { 0x07,0x8e,0x8e,0x89 }, { 0x33,0x94,0x94,0xa7 }, + { 0x2d,0x9b,0x9b,0xb6 }, { 0x3c,0x1e,0x1e,0x22 }, + { 0x15,0x87,0x87,0x92 }, { 0xc9,0xe9,0xe9,0x20 }, + { 0x87,0xce,0xce,0x49 }, { 0xaa,0x55,0x55,0xff }, + { 0x50,0x28,0x28,0x78 }, { 0xa5,0xdf,0xdf,0x7a }, + { 0x03,0x8c,0x8c,0x8f }, { 0x59,0xa1,0xa1,0xf8 }, + { 0x09,0x89,0x89,0x80 }, { 0x1a,0x0d,0x0d,0x17 }, + { 0x65,0xbf,0xbf,0xda }, { 0xd7,0xe6,0xe6,0x31 }, + { 0x84,0x42,0x42,0xc6 }, { 0xd0,0x68,0x68,0xb8 }, + { 0x82,0x41,0x41,0xc3 }, { 0x29,0x99,0x99,0xb0 }, + { 0x5a,0x2d,0x2d,0x77 }, { 0x1e,0x0f,0x0f,0x11 }, + { 0x7b,0xb0,0xb0,0xcb }, { 0xa8,0x54,0x54,0xfc }, + { 0x6d,0xbb,0xbb,0xd6 }, { 0x2c,0x16,0x16,0x3a } +}; + +static const byte T2[256][4] = +{ + { 0xa5,0xc6,0x63,0x63 }, { 0x84,0xf8,0x7c,0x7c }, + { 0x99,0xee,0x77,0x77 }, { 0x8d,0xf6,0x7b,0x7b }, + { 0x0d,0xff,0xf2,0xf2 }, { 0xbd,0xd6,0x6b,0x6b }, + { 0xb1,0xde,0x6f,0x6f }, { 0x54,0x91,0xc5,0xc5 }, + { 0x50,0x60,0x30,0x30 }, { 0x03,0x02,0x01,0x01 }, + { 0xa9,0xce,0x67,0x67 }, { 0x7d,0x56,0x2b,0x2b }, + { 0x19,0xe7,0xfe,0xfe }, { 0x62,0xb5,0xd7,0xd7 }, + { 0xe6,0x4d,0xab,0xab }, { 0x9a,0xec,0x76,0x76 }, + { 0x45,0x8f,0xca,0xca }, { 0x9d,0x1f,0x82,0x82 }, + { 0x40,0x89,0xc9,0xc9 }, { 0x87,0xfa,0x7d,0x7d }, + { 0x15,0xef,0xfa,0xfa }, { 0xeb,0xb2,0x59,0x59 }, + { 0xc9,0x8e,0x47,0x47 }, { 0x0b,0xfb,0xf0,0xf0 }, + { 0xec,0x41,0xad,0xad }, { 0x67,0xb3,0xd4,0xd4 }, + { 0xfd,0x5f,0xa2,0xa2 }, { 0xea,0x45,0xaf,0xaf }, + { 0xbf,0x23,0x9c,0x9c }, { 0xf7,0x53,0xa4,0xa4 }, + { 0x96,0xe4,0x72,0x72 }, { 0x5b,0x9b,0xc0,0xc0 }, + { 0xc2,0x75,0xb7,0xb7 }, { 0x1c,0xe1,0xfd,0xfd }, + { 0xae,0x3d,0x93,0x93 }, { 0x6a,0x4c,0x26,0x26 }, + { 0x5a,0x6c,0x36,0x36 }, { 0x41,0x7e,0x3f,0x3f }, + { 0x02,0xf5,0xf7,0xf7 }, { 0x4f,0x83,0xcc,0xcc }, + { 0x5c,0x68,0x34,0x34 }, { 0xf4,0x51,0xa5,0xa5 }, + { 0x34,0xd1,0xe5,0xe5 }, { 0x08,0xf9,0xf1,0xf1 }, + { 0x93,0xe2,0x71,0x71 }, { 0x73,0xab,0xd8,0xd8 }, + { 0x53,0x62,0x31,0x31 }, { 0x3f,0x2a,0x15,0x15 }, + { 0x0c,0x08,0x04,0x04 }, { 0x52,0x95,0xc7,0xc7 }, + { 0x65,0x46,0x23,0x23 }, { 0x5e,0x9d,0xc3,0xc3 }, + { 0x28,0x30,0x18,0x18 }, { 0xa1,0x37,0x96,0x96 }, + { 0x0f,0x0a,0x05,0x05 }, { 0xb5,0x2f,0x9a,0x9a }, + { 0x09,0x0e,0x07,0x07 }, { 0x36,0x24,0x12,0x12 }, + { 0x9b,0x1b,0x80,0x80 }, { 0x3d,0xdf,0xe2,0xe2 }, + { 0x26,0xcd,0xeb,0xeb }, { 0x69,0x4e,0x27,0x27 }, + { 0xcd,0x7f,0xb2,0xb2 }, { 0x9f,0xea,0x75,0x75 }, + { 0x1b,0x12,0x09,0x09 }, { 0x9e,0x1d,0x83,0x83 }, + { 0x74,0x58,0x2c,0x2c }, { 0x2e,0x34,0x1a,0x1a }, + { 0x2d,0x36,0x1b,0x1b }, { 0xb2,0xdc,0x6e,0x6e }, + { 0xee,0xb4,0x5a,0x5a }, { 0xfb,0x5b,0xa0,0xa0 }, + { 0xf6,0xa4,0x52,0x52 }, { 0x4d,0x76,0x3b,0x3b }, + { 0x61,0xb7,0xd6,0xd6 }, { 0xce,0x7d,0xb3,0xb3 }, + { 0x7b,0x52,0x29,0x29 }, { 0x3e,0xdd,0xe3,0xe3 }, + { 0x71,0x5e,0x2f,0x2f }, { 0x97,0x13,0x84,0x84 }, + { 0xf5,0xa6,0x53,0x53 }, { 0x68,0xb9,0xd1,0xd1 }, + { 0x00,0x00,0x00,0x00 }, { 0x2c,0xc1,0xed,0xed }, + { 0x60,0x40,0x20,0x20 }, { 0x1f,0xe3,0xfc,0xfc }, + { 0xc8,0x79,0xb1,0xb1 }, { 0xed,0xb6,0x5b,0x5b }, + { 0xbe,0xd4,0x6a,0x6a }, { 0x46,0x8d,0xcb,0xcb }, + { 0xd9,0x67,0xbe,0xbe }, { 0x4b,0x72,0x39,0x39 }, + { 0xde,0x94,0x4a,0x4a }, { 0xd4,0x98,0x4c,0x4c }, + { 0xe8,0xb0,0x58,0x58 }, { 0x4a,0x85,0xcf,0xcf }, + { 0x6b,0xbb,0xd0,0xd0 }, { 0x2a,0xc5,0xef,0xef }, + { 0xe5,0x4f,0xaa,0xaa }, { 0x16,0xed,0xfb,0xfb }, + { 0xc5,0x86,0x43,0x43 }, { 0xd7,0x9a,0x4d,0x4d }, + { 0x55,0x66,0x33,0x33 }, { 0x94,0x11,0x85,0x85 }, + { 0xcf,0x8a,0x45,0x45 }, { 0x10,0xe9,0xf9,0xf9 }, + { 0x06,0x04,0x02,0x02 }, { 0x81,0xfe,0x7f,0x7f }, + { 0xf0,0xa0,0x50,0x50 }, { 0x44,0x78,0x3c,0x3c }, + { 0xba,0x25,0x9f,0x9f }, { 0xe3,0x4b,0xa8,0xa8 }, + { 0xf3,0xa2,0x51,0x51 }, { 0xfe,0x5d,0xa3,0xa3 }, + { 0xc0,0x80,0x40,0x40 }, { 0x8a,0x05,0x8f,0x8f }, + { 0xad,0x3f,0x92,0x92 }, { 0xbc,0x21,0x9d,0x9d }, + { 0x48,0x70,0x38,0x38 }, { 0x04,0xf1,0xf5,0xf5 }, + { 0xdf,0x63,0xbc,0xbc }, { 0xc1,0x77,0xb6,0xb6 }, + { 0x75,0xaf,0xda,0xda }, { 0x63,0x42,0x21,0x21 }, + { 0x30,0x20,0x10,0x10 }, { 0x1a,0xe5,0xff,0xff }, + { 0x0e,0xfd,0xf3,0xf3 }, { 0x6d,0xbf,0xd2,0xd2 }, + { 0x4c,0x81,0xcd,0xcd }, { 0x14,0x18,0x0c,0x0c }, + { 0x35,0x26,0x13,0x13 }, { 0x2f,0xc3,0xec,0xec }, + { 0xe1,0xbe,0x5f,0x5f }, { 0xa2,0x35,0x97,0x97 }, + { 0xcc,0x88,0x44,0x44 }, { 0x39,0x2e,0x17,0x17 }, + { 0x57,0x93,0xc4,0xc4 }, { 0xf2,0x55,0xa7,0xa7 }, + { 0x82,0xfc,0x7e,0x7e }, { 0x47,0x7a,0x3d,0x3d }, + { 0xac,0xc8,0x64,0x64 }, { 0xe7,0xba,0x5d,0x5d }, + { 0x2b,0x32,0x19,0x19 }, { 0x95,0xe6,0x73,0x73 }, + { 0xa0,0xc0,0x60,0x60 }, { 0x98,0x19,0x81,0x81 }, + { 0xd1,0x9e,0x4f,0x4f }, { 0x7f,0xa3,0xdc,0xdc }, + { 0x66,0x44,0x22,0x22 }, { 0x7e,0x54,0x2a,0x2a }, + { 0xab,0x3b,0x90,0x90 }, { 0x83,0x0b,0x88,0x88 }, + { 0xca,0x8c,0x46,0x46 }, { 0x29,0xc7,0xee,0xee }, + { 0xd3,0x6b,0xb8,0xb8 }, { 0x3c,0x28,0x14,0x14 }, + { 0x79,0xa7,0xde,0xde }, { 0xe2,0xbc,0x5e,0x5e }, + { 0x1d,0x16,0x0b,0x0b }, { 0x76,0xad,0xdb,0xdb }, + { 0x3b,0xdb,0xe0,0xe0 }, { 0x56,0x64,0x32,0x32 }, + { 0x4e,0x74,0x3a,0x3a }, { 0x1e,0x14,0x0a,0x0a }, + { 0xdb,0x92,0x49,0x49 }, { 0x0a,0x0c,0x06,0x06 }, + { 0x6c,0x48,0x24,0x24 }, { 0xe4,0xb8,0x5c,0x5c }, + { 0x5d,0x9f,0xc2,0xc2 }, { 0x6e,0xbd,0xd3,0xd3 }, + { 0xef,0x43,0xac,0xac }, { 0xa6,0xc4,0x62,0x62 }, + { 0xa8,0x39,0x91,0x91 }, { 0xa4,0x31,0x95,0x95 }, + { 0x37,0xd3,0xe4,0xe4 }, { 0x8b,0xf2,0x79,0x79 }, + { 0x32,0xd5,0xe7,0xe7 }, { 0x43,0x8b,0xc8,0xc8 }, + { 0x59,0x6e,0x37,0x37 }, { 0xb7,0xda,0x6d,0x6d }, + { 0x8c,0x01,0x8d,0x8d }, { 0x64,0xb1,0xd5,0xd5 }, + { 0xd2,0x9c,0x4e,0x4e }, { 0xe0,0x49,0xa9,0xa9 }, + { 0xb4,0xd8,0x6c,0x6c }, { 0xfa,0xac,0x56,0x56 }, + { 0x07,0xf3,0xf4,0xf4 }, { 0x25,0xcf,0xea,0xea }, + { 0xaf,0xca,0x65,0x65 }, { 0x8e,0xf4,0x7a,0x7a }, + { 0xe9,0x47,0xae,0xae }, { 0x18,0x10,0x08,0x08 }, + { 0xd5,0x6f,0xba,0xba }, { 0x88,0xf0,0x78,0x78 }, + { 0x6f,0x4a,0x25,0x25 }, { 0x72,0x5c,0x2e,0x2e }, + { 0x24,0x38,0x1c,0x1c }, { 0xf1,0x57,0xa6,0xa6 }, + { 0xc7,0x73,0xb4,0xb4 }, { 0x51,0x97,0xc6,0xc6 }, + { 0x23,0xcb,0xe8,0xe8 }, { 0x7c,0xa1,0xdd,0xdd }, + { 0x9c,0xe8,0x74,0x74 }, { 0x21,0x3e,0x1f,0x1f }, + { 0xdd,0x96,0x4b,0x4b }, { 0xdc,0x61,0xbd,0xbd }, + { 0x86,0x0d,0x8b,0x8b }, { 0x85,0x0f,0x8a,0x8a }, + { 0x90,0xe0,0x70,0x70 }, { 0x42,0x7c,0x3e,0x3e }, + { 0xc4,0x71,0xb5,0xb5 }, { 0xaa,0xcc,0x66,0x66 }, + { 0xd8,0x90,0x48,0x48 }, { 0x05,0x06,0x03,0x03 }, + { 0x01,0xf7,0xf6,0xf6 }, { 0x12,0x1c,0x0e,0x0e }, + { 0xa3,0xc2,0x61,0x61 }, { 0x5f,0x6a,0x35,0x35 }, + { 0xf9,0xae,0x57,0x57 }, { 0xd0,0x69,0xb9,0xb9 }, + { 0x91,0x17,0x86,0x86 }, { 0x58,0x99,0xc1,0xc1 }, + { 0x27,0x3a,0x1d,0x1d }, { 0xb9,0x27,0x9e,0x9e }, + { 0x38,0xd9,0xe1,0xe1 }, { 0x13,0xeb,0xf8,0xf8 }, + { 0xb3,0x2b,0x98,0x98 }, { 0x33,0x22,0x11,0x11 }, + { 0xbb,0xd2,0x69,0x69 }, { 0x70,0xa9,0xd9,0xd9 }, + { 0x89,0x07,0x8e,0x8e }, { 0xa7,0x33,0x94,0x94 }, + { 0xb6,0x2d,0x9b,0x9b }, { 0x22,0x3c,0x1e,0x1e }, + { 0x92,0x15,0x87,0x87 }, { 0x20,0xc9,0xe9,0xe9 }, + { 0x49,0x87,0xce,0xce }, { 0xff,0xaa,0x55,0x55 }, + { 0x78,0x50,0x28,0x28 }, { 0x7a,0xa5,0xdf,0xdf }, + { 0x8f,0x03,0x8c,0x8c }, { 0xf8,0x59,0xa1,0xa1 }, + { 0x80,0x09,0x89,0x89 }, { 0x17,0x1a,0x0d,0x0d }, + { 0xda,0x65,0xbf,0xbf }, { 0x31,0xd7,0xe6,0xe6 }, + { 0xc6,0x84,0x42,0x42 }, { 0xb8,0xd0,0x68,0x68 }, + { 0xc3,0x82,0x41,0x41 }, { 0xb0,0x29,0x99,0x99 }, + { 0x77,0x5a,0x2d,0x2d }, { 0x11,0x1e,0x0f,0x0f }, + { 0xcb,0x7b,0xb0,0xb0 }, { 0xfc,0xa8,0x54,0x54 }, + { 0xd6,0x6d,0xbb,0xbb }, { 0x3a,0x2c,0x16,0x16 } +}; + +static const byte T3[256][4] = +{ + { 0x63,0xa5,0xc6,0x63 }, { 0x7c,0x84,0xf8,0x7c }, + { 0x77,0x99,0xee,0x77 }, { 0x7b,0x8d,0xf6,0x7b }, + { 0xf2,0x0d,0xff,0xf2 }, { 0x6b,0xbd,0xd6,0x6b }, + { 0x6f,0xb1,0xde,0x6f }, { 0xc5,0x54,0x91,0xc5 }, + { 0x30,0x50,0x60,0x30 }, { 0x01,0x03,0x02,0x01 }, + { 0x67,0xa9,0xce,0x67 }, { 0x2b,0x7d,0x56,0x2b }, + { 0xfe,0x19,0xe7,0xfe }, { 0xd7,0x62,0xb5,0xd7 }, + { 0xab,0xe6,0x4d,0xab }, { 0x76,0x9a,0xec,0x76 }, + { 0xca,0x45,0x8f,0xca }, { 0x82,0x9d,0x1f,0x82 }, + { 0xc9,0x40,0x89,0xc9 }, { 0x7d,0x87,0xfa,0x7d }, + { 0xfa,0x15,0xef,0xfa }, { 0x59,0xeb,0xb2,0x59 }, + { 0x47,0xc9,0x8e,0x47 }, { 0xf0,0x0b,0xfb,0xf0 }, + { 0xad,0xec,0x41,0xad }, { 0xd4,0x67,0xb3,0xd4 }, + { 0xa2,0xfd,0x5f,0xa2 }, { 0xaf,0xea,0x45,0xaf }, + { 0x9c,0xbf,0x23,0x9c }, { 0xa4,0xf7,0x53,0xa4 }, + { 0x72,0x96,0xe4,0x72 }, { 0xc0,0x5b,0x9b,0xc0 }, + { 0xb7,0xc2,0x75,0xb7 }, { 0xfd,0x1c,0xe1,0xfd }, + { 0x93,0xae,0x3d,0x93 }, { 0x26,0x6a,0x4c,0x26 }, + { 0x36,0x5a,0x6c,0x36 }, { 0x3f,0x41,0x7e,0x3f }, + { 0xf7,0x02,0xf5,0xf7 }, { 0xcc,0x4f,0x83,0xcc }, + { 0x34,0x5c,0x68,0x34 }, { 0xa5,0xf4,0x51,0xa5 }, + { 0xe5,0x34,0xd1,0xe5 }, { 0xf1,0x08,0xf9,0xf1 }, + { 0x71,0x93,0xe2,0x71 }, { 0xd8,0x73,0xab,0xd8 }, + { 0x31,0x53,0x62,0x31 }, { 0x15,0x3f,0x2a,0x15 }, + { 0x04,0x0c,0x08,0x04 }, { 0xc7,0x52,0x95,0xc7 }, + { 0x23,0x65,0x46,0x23 }, { 0xc3,0x5e,0x9d,0xc3 }, + { 0x18,0x28,0x30,0x18 }, { 0x96,0xa1,0x37,0x96 }, + { 0x05,0x0f,0x0a,0x05 }, { 0x9a,0xb5,0x2f,0x9a }, + { 0x07,0x09,0x0e,0x07 }, { 0x12,0x36,0x24,0x12 }, + { 0x80,0x9b,0x1b,0x80 }, { 0xe2,0x3d,0xdf,0xe2 }, + { 0xeb,0x26,0xcd,0xeb }, { 0x27,0x69,0x4e,0x27 }, + { 0xb2,0xcd,0x7f,0xb2 }, { 0x75,0x9f,0xea,0x75 }, + { 0x09,0x1b,0x12,0x09 }, { 0x83,0x9e,0x1d,0x83 }, + { 0x2c,0x74,0x58,0x2c }, { 0x1a,0x2e,0x34,0x1a }, + { 0x1b,0x2d,0x36,0x1b }, { 0x6e,0xb2,0xdc,0x6e }, + { 0x5a,0xee,0xb4,0x5a }, { 0xa0,0xfb,0x5b,0xa0 }, + { 0x52,0xf6,0xa4,0x52 }, { 0x3b,0x4d,0x76,0x3b }, + { 0xd6,0x61,0xb7,0xd6 }, { 0xb3,0xce,0x7d,0xb3 }, + { 0x29,0x7b,0x52,0x29 }, { 0xe3,0x3e,0xdd,0xe3 }, + { 0x2f,0x71,0x5e,0x2f }, { 0x84,0x97,0x13,0x84 }, + { 0x53,0xf5,0xa6,0x53 }, { 0xd1,0x68,0xb9,0xd1 }, + { 0x00,0x00,0x00,0x00 }, { 0xed,0x2c,0xc1,0xed }, + { 0x20,0x60,0x40,0x20 }, { 0xfc,0x1f,0xe3,0xfc }, + { 0xb1,0xc8,0x79,0xb1 }, { 0x5b,0xed,0xb6,0x5b }, + { 0x6a,0xbe,0xd4,0x6a }, { 0xcb,0x46,0x8d,0xcb }, + { 0xbe,0xd9,0x67,0xbe }, { 0x39,0x4b,0x72,0x39 }, + { 0x4a,0xde,0x94,0x4a }, { 0x4c,0xd4,0x98,0x4c }, + { 0x58,0xe8,0xb0,0x58 }, { 0xcf,0x4a,0x85,0xcf }, + { 0xd0,0x6b,0xbb,0xd0 }, { 0xef,0x2a,0xc5,0xef }, + { 0xaa,0xe5,0x4f,0xaa }, { 0xfb,0x16,0xed,0xfb }, + { 0x43,0xc5,0x86,0x43 }, { 0x4d,0xd7,0x9a,0x4d }, + { 0x33,0x55,0x66,0x33 }, { 0x85,0x94,0x11,0x85 }, + { 0x45,0xcf,0x8a,0x45 }, { 0xf9,0x10,0xe9,0xf9 }, + { 0x02,0x06,0x04,0x02 }, { 0x7f,0x81,0xfe,0x7f }, + { 0x50,0xf0,0xa0,0x50 }, { 0x3c,0x44,0x78,0x3c }, + { 0x9f,0xba,0x25,0x9f }, { 0xa8,0xe3,0x4b,0xa8 }, + { 0x51,0xf3,0xa2,0x51 }, { 0xa3,0xfe,0x5d,0xa3 }, + { 0x40,0xc0,0x80,0x40 }, { 0x8f,0x8a,0x05,0x8f }, + { 0x92,0xad,0x3f,0x92 }, { 0x9d,0xbc,0x21,0x9d }, + { 0x38,0x48,0x70,0x38 }, { 0xf5,0x04,0xf1,0xf5 }, + { 0xbc,0xdf,0x63,0xbc }, { 0xb6,0xc1,0x77,0xb6 }, + { 0xda,0x75,0xaf,0xda }, { 0x21,0x63,0x42,0x21 }, + { 0x10,0x30,0x20,0x10 }, { 0xff,0x1a,0xe5,0xff }, + { 0xf3,0x0e,0xfd,0xf3 }, { 0xd2,0x6d,0xbf,0xd2 }, + { 0xcd,0x4c,0x81,0xcd }, { 0x0c,0x14,0x18,0x0c }, + { 0x13,0x35,0x26,0x13 }, { 0xec,0x2f,0xc3,0xec }, + { 0x5f,0xe1,0xbe,0x5f }, { 0x97,0xa2,0x35,0x97 }, + { 0x44,0xcc,0x88,0x44 }, { 0x17,0x39,0x2e,0x17 }, + { 0xc4,0x57,0x93,0xc4 }, { 0xa7,0xf2,0x55,0xa7 }, + { 0x7e,0x82,0xfc,0x7e }, { 0x3d,0x47,0x7a,0x3d }, + { 0x64,0xac,0xc8,0x64 }, { 0x5d,0xe7,0xba,0x5d }, + { 0x19,0x2b,0x32,0x19 }, { 0x73,0x95,0xe6,0x73 }, + { 0x60,0xa0,0xc0,0x60 }, { 0x81,0x98,0x19,0x81 }, + { 0x4f,0xd1,0x9e,0x4f }, { 0xdc,0x7f,0xa3,0xdc }, + { 0x22,0x66,0x44,0x22 }, { 0x2a,0x7e,0x54,0x2a }, + { 0x90,0xab,0x3b,0x90 }, { 0x88,0x83,0x0b,0x88 }, + { 0x46,0xca,0x8c,0x46 }, { 0xee,0x29,0xc7,0xee }, + { 0xb8,0xd3,0x6b,0xb8 }, { 0x14,0x3c,0x28,0x14 }, + { 0xde,0x79,0xa7,0xde }, { 0x5e,0xe2,0xbc,0x5e }, + { 0x0b,0x1d,0x16,0x0b }, { 0xdb,0x76,0xad,0xdb }, + { 0xe0,0x3b,0xdb,0xe0 }, { 0x32,0x56,0x64,0x32 }, + { 0x3a,0x4e,0x74,0x3a }, { 0x0a,0x1e,0x14,0x0a }, + { 0x49,0xdb,0x92,0x49 }, { 0x06,0x0a,0x0c,0x06 }, + { 0x24,0x6c,0x48,0x24 }, { 0x5c,0xe4,0xb8,0x5c }, + { 0xc2,0x5d,0x9f,0xc2 }, { 0xd3,0x6e,0xbd,0xd3 }, + { 0xac,0xef,0x43,0xac }, { 0x62,0xa6,0xc4,0x62 }, + { 0x91,0xa8,0x39,0x91 }, { 0x95,0xa4,0x31,0x95 }, + { 0xe4,0x37,0xd3,0xe4 }, { 0x79,0x8b,0xf2,0x79 }, + { 0xe7,0x32,0xd5,0xe7 }, { 0xc8,0x43,0x8b,0xc8 }, + { 0x37,0x59,0x6e,0x37 }, { 0x6d,0xb7,0xda,0x6d }, + { 0x8d,0x8c,0x01,0x8d }, { 0xd5,0x64,0xb1,0xd5 }, + { 0x4e,0xd2,0x9c,0x4e }, { 0xa9,0xe0,0x49,0xa9 }, + { 0x6c,0xb4,0xd8,0x6c }, { 0x56,0xfa,0xac,0x56 }, + { 0xf4,0x07,0xf3,0xf4 }, { 0xea,0x25,0xcf,0xea }, + { 0x65,0xaf,0xca,0x65 }, { 0x7a,0x8e,0xf4,0x7a }, + { 0xae,0xe9,0x47,0xae }, { 0x08,0x18,0x10,0x08 }, + { 0xba,0xd5,0x6f,0xba }, { 0x78,0x88,0xf0,0x78 }, + { 0x25,0x6f,0x4a,0x25 }, { 0x2e,0x72,0x5c,0x2e }, + { 0x1c,0x24,0x38,0x1c }, { 0xa6,0xf1,0x57,0xa6 }, + { 0xb4,0xc7,0x73,0xb4 }, { 0xc6,0x51,0x97,0xc6 }, + { 0xe8,0x23,0xcb,0xe8 }, { 0xdd,0x7c,0xa1,0xdd }, + { 0x74,0x9c,0xe8,0x74 }, { 0x1f,0x21,0x3e,0x1f }, + { 0x4b,0xdd,0x96,0x4b }, { 0xbd,0xdc,0x61,0xbd }, + { 0x8b,0x86,0x0d,0x8b }, { 0x8a,0x85,0x0f,0x8a }, + { 0x70,0x90,0xe0,0x70 }, { 0x3e,0x42,0x7c,0x3e }, + { 0xb5,0xc4,0x71,0xb5 }, { 0x66,0xaa,0xcc,0x66 }, + { 0x48,0xd8,0x90,0x48 }, { 0x03,0x05,0x06,0x03 }, + { 0xf6,0x01,0xf7,0xf6 }, { 0x0e,0x12,0x1c,0x0e }, + { 0x61,0xa3,0xc2,0x61 }, { 0x35,0x5f,0x6a,0x35 }, + { 0x57,0xf9,0xae,0x57 }, { 0xb9,0xd0,0x69,0xb9 }, + { 0x86,0x91,0x17,0x86 }, { 0xc1,0x58,0x99,0xc1 }, + { 0x1d,0x27,0x3a,0x1d }, { 0x9e,0xb9,0x27,0x9e }, + { 0xe1,0x38,0xd9,0xe1 }, { 0xf8,0x13,0xeb,0xf8 }, + { 0x98,0xb3,0x2b,0x98 }, { 0x11,0x33,0x22,0x11 }, + { 0x69,0xbb,0xd2,0x69 }, { 0xd9,0x70,0xa9,0xd9 }, + { 0x8e,0x89,0x07,0x8e }, { 0x94,0xa7,0x33,0x94 }, + { 0x9b,0xb6,0x2d,0x9b }, { 0x1e,0x22,0x3c,0x1e }, + { 0x87,0x92,0x15,0x87 }, { 0xe9,0x20,0xc9,0xe9 }, + { 0xce,0x49,0x87,0xce }, { 0x55,0xff,0xaa,0x55 }, + { 0x28,0x78,0x50,0x28 }, { 0xdf,0x7a,0xa5,0xdf }, + { 0x8c,0x8f,0x03,0x8c }, { 0xa1,0xf8,0x59,0xa1 }, + { 0x89,0x80,0x09,0x89 }, { 0x0d,0x17,0x1a,0x0d }, + { 0xbf,0xda,0x65,0xbf }, { 0xe6,0x31,0xd7,0xe6 }, + { 0x42,0xc6,0x84,0x42 }, { 0x68,0xb8,0xd0,0x68 }, + { 0x41,0xc3,0x82,0x41 }, { 0x99,0xb0,0x29,0x99 }, + { 0x2d,0x77,0x5a,0x2d }, { 0x0f,0x11,0x1e,0x0f }, + { 0xb0,0xcb,0x7b,0xb0 }, { 0x54,0xfc,0xa8,0x54 }, + { 0xbb,0xd6,0x6d,0xbb }, { 0x16,0x3a,0x2c,0x16 } +}; + +static const byte T4[256][4] = +{ + { 0x63,0x63,0xa5,0xc6 }, { 0x7c,0x7c,0x84,0xf8 }, + { 0x77,0x77,0x99,0xee }, { 0x7b,0x7b,0x8d,0xf6 }, + { 0xf2,0xf2,0x0d,0xff }, { 0x6b,0x6b,0xbd,0xd6 }, + { 0x6f,0x6f,0xb1,0xde }, { 0xc5,0xc5,0x54,0x91 }, + { 0x30,0x30,0x50,0x60 }, { 0x01,0x01,0x03,0x02 }, + { 0x67,0x67,0xa9,0xce }, { 0x2b,0x2b,0x7d,0x56 }, + { 0xfe,0xfe,0x19,0xe7 }, { 0xd7,0xd7,0x62,0xb5 }, + { 0xab,0xab,0xe6,0x4d }, { 0x76,0x76,0x9a,0xec }, + { 0xca,0xca,0x45,0x8f }, { 0x82,0x82,0x9d,0x1f }, + { 0xc9,0xc9,0x40,0x89 }, { 0x7d,0x7d,0x87,0xfa }, + { 0xfa,0xfa,0x15,0xef }, { 0x59,0x59,0xeb,0xb2 }, + { 0x47,0x47,0xc9,0x8e }, { 0xf0,0xf0,0x0b,0xfb }, + { 0xad,0xad,0xec,0x41 }, { 0xd4,0xd4,0x67,0xb3 }, + { 0xa2,0xa2,0xfd,0x5f }, { 0xaf,0xaf,0xea,0x45 }, + { 0x9c,0x9c,0xbf,0x23 }, { 0xa4,0xa4,0xf7,0x53 }, + { 0x72,0x72,0x96,0xe4 }, { 0xc0,0xc0,0x5b,0x9b }, + { 0xb7,0xb7,0xc2,0x75 }, { 0xfd,0xfd,0x1c,0xe1 }, + { 0x93,0x93,0xae,0x3d }, { 0x26,0x26,0x6a,0x4c }, + { 0x36,0x36,0x5a,0x6c }, { 0x3f,0x3f,0x41,0x7e }, + { 0xf7,0xf7,0x02,0xf5 }, { 0xcc,0xcc,0x4f,0x83 }, + { 0x34,0x34,0x5c,0x68 }, { 0xa5,0xa5,0xf4,0x51 }, + { 0xe5,0xe5,0x34,0xd1 }, { 0xf1,0xf1,0x08,0xf9 }, + { 0x71,0x71,0x93,0xe2 }, { 0xd8,0xd8,0x73,0xab }, + { 0x31,0x31,0x53,0x62 }, { 0x15,0x15,0x3f,0x2a }, + { 0x04,0x04,0x0c,0x08 }, { 0xc7,0xc7,0x52,0x95 }, + { 0x23,0x23,0x65,0x46 }, { 0xc3,0xc3,0x5e,0x9d }, + { 0x18,0x18,0x28,0x30 }, { 0x96,0x96,0xa1,0x37 }, + { 0x05,0x05,0x0f,0x0a }, { 0x9a,0x9a,0xb5,0x2f }, + { 0x07,0x07,0x09,0x0e }, { 0x12,0x12,0x36,0x24 }, + { 0x80,0x80,0x9b,0x1b }, { 0xe2,0xe2,0x3d,0xdf }, + { 0xeb,0xeb,0x26,0xcd }, { 0x27,0x27,0x69,0x4e }, + { 0xb2,0xb2,0xcd,0x7f }, { 0x75,0x75,0x9f,0xea }, + { 0x09,0x09,0x1b,0x12 }, { 0x83,0x83,0x9e,0x1d }, + { 0x2c,0x2c,0x74,0x58 }, { 0x1a,0x1a,0x2e,0x34 }, + { 0x1b,0x1b,0x2d,0x36 }, { 0x6e,0x6e,0xb2,0xdc }, + { 0x5a,0x5a,0xee,0xb4 }, { 0xa0,0xa0,0xfb,0x5b }, + { 0x52,0x52,0xf6,0xa4 }, { 0x3b,0x3b,0x4d,0x76 }, + { 0xd6,0xd6,0x61,0xb7 }, { 0xb3,0xb3,0xce,0x7d }, + { 0x29,0x29,0x7b,0x52 }, { 0xe3,0xe3,0x3e,0xdd }, + { 0x2f,0x2f,0x71,0x5e }, { 0x84,0x84,0x97,0x13 }, + { 0x53,0x53,0xf5,0xa6 }, { 0xd1,0xd1,0x68,0xb9 }, + { 0x00,0x00,0x00,0x00 }, { 0xed,0xed,0x2c,0xc1 }, + { 0x20,0x20,0x60,0x40 }, { 0xfc,0xfc,0x1f,0xe3 }, + { 0xb1,0xb1,0xc8,0x79 }, { 0x5b,0x5b,0xed,0xb6 }, + { 0x6a,0x6a,0xbe,0xd4 }, { 0xcb,0xcb,0x46,0x8d }, + { 0xbe,0xbe,0xd9,0x67 }, { 0x39,0x39,0x4b,0x72 }, + { 0x4a,0x4a,0xde,0x94 }, { 0x4c,0x4c,0xd4,0x98 }, + { 0x58,0x58,0xe8,0xb0 }, { 0xcf,0xcf,0x4a,0x85 }, + { 0xd0,0xd0,0x6b,0xbb }, { 0xef,0xef,0x2a,0xc5 }, + { 0xaa,0xaa,0xe5,0x4f }, { 0xfb,0xfb,0x16,0xed }, + { 0x43,0x43,0xc5,0x86 }, { 0x4d,0x4d,0xd7,0x9a }, + { 0x33,0x33,0x55,0x66 }, { 0x85,0x85,0x94,0x11 }, + { 0x45,0x45,0xcf,0x8a }, { 0xf9,0xf9,0x10,0xe9 }, + { 0x02,0x02,0x06,0x04 }, { 0x7f,0x7f,0x81,0xfe }, + { 0x50,0x50,0xf0,0xa0 }, { 0x3c,0x3c,0x44,0x78 }, + { 0x9f,0x9f,0xba,0x25 }, { 0xa8,0xa8,0xe3,0x4b }, + { 0x51,0x51,0xf3,0xa2 }, { 0xa3,0xa3,0xfe,0x5d }, + { 0x40,0x40,0xc0,0x80 }, { 0x8f,0x8f,0x8a,0x05 }, + { 0x92,0x92,0xad,0x3f }, { 0x9d,0x9d,0xbc,0x21 }, + { 0x38,0x38,0x48,0x70 }, { 0xf5,0xf5,0x04,0xf1 }, + { 0xbc,0xbc,0xdf,0x63 }, { 0xb6,0xb6,0xc1,0x77 }, + { 0xda,0xda,0x75,0xaf }, { 0x21,0x21,0x63,0x42 }, + { 0x10,0x10,0x30,0x20 }, { 0xff,0xff,0x1a,0xe5 }, + { 0xf3,0xf3,0x0e,0xfd }, { 0xd2,0xd2,0x6d,0xbf }, + { 0xcd,0xcd,0x4c,0x81 }, { 0x0c,0x0c,0x14,0x18 }, + { 0x13,0x13,0x35,0x26 }, { 0xec,0xec,0x2f,0xc3 }, + { 0x5f,0x5f,0xe1,0xbe }, { 0x97,0x97,0xa2,0x35 }, + { 0x44,0x44,0xcc,0x88 }, { 0x17,0x17,0x39,0x2e }, + { 0xc4,0xc4,0x57,0x93 }, { 0xa7,0xa7,0xf2,0x55 }, + { 0x7e,0x7e,0x82,0xfc }, { 0x3d,0x3d,0x47,0x7a }, + { 0x64,0x64,0xac,0xc8 }, { 0x5d,0x5d,0xe7,0xba }, + { 0x19,0x19,0x2b,0x32 }, { 0x73,0x73,0x95,0xe6 }, + { 0x60,0x60,0xa0,0xc0 }, { 0x81,0x81,0x98,0x19 }, + { 0x4f,0x4f,0xd1,0x9e }, { 0xdc,0xdc,0x7f,0xa3 }, + { 0x22,0x22,0x66,0x44 }, { 0x2a,0x2a,0x7e,0x54 }, + { 0x90,0x90,0xab,0x3b }, { 0x88,0x88,0x83,0x0b }, + { 0x46,0x46,0xca,0x8c }, { 0xee,0xee,0x29,0xc7 }, + { 0xb8,0xb8,0xd3,0x6b }, { 0x14,0x14,0x3c,0x28 }, + { 0xde,0xde,0x79,0xa7 }, { 0x5e,0x5e,0xe2,0xbc }, + { 0x0b,0x0b,0x1d,0x16 }, { 0xdb,0xdb,0x76,0xad }, + { 0xe0,0xe0,0x3b,0xdb }, { 0x32,0x32,0x56,0x64 }, + { 0x3a,0x3a,0x4e,0x74 }, { 0x0a,0x0a,0x1e,0x14 }, + { 0x49,0x49,0xdb,0x92 }, { 0x06,0x06,0x0a,0x0c }, + { 0x24,0x24,0x6c,0x48 }, { 0x5c,0x5c,0xe4,0xb8 }, + { 0xc2,0xc2,0x5d,0x9f }, { 0xd3,0xd3,0x6e,0xbd }, + { 0xac,0xac,0xef,0x43 }, { 0x62,0x62,0xa6,0xc4 }, + { 0x91,0x91,0xa8,0x39 }, { 0x95,0x95,0xa4,0x31 }, + { 0xe4,0xe4,0x37,0xd3 }, { 0x79,0x79,0x8b,0xf2 }, + { 0xe7,0xe7,0x32,0xd5 }, { 0xc8,0xc8,0x43,0x8b }, + { 0x37,0x37,0x59,0x6e }, { 0x6d,0x6d,0xb7,0xda }, + { 0x8d,0x8d,0x8c,0x01 }, { 0xd5,0xd5,0x64,0xb1 }, + { 0x4e,0x4e,0xd2,0x9c }, { 0xa9,0xa9,0xe0,0x49 }, + { 0x6c,0x6c,0xb4,0xd8 }, { 0x56,0x56,0xfa,0xac }, + { 0xf4,0xf4,0x07,0xf3 }, { 0xea,0xea,0x25,0xcf }, + { 0x65,0x65,0xaf,0xca }, { 0x7a,0x7a,0x8e,0xf4 }, + { 0xae,0xae,0xe9,0x47 }, { 0x08,0x08,0x18,0x10 }, + { 0xba,0xba,0xd5,0x6f }, { 0x78,0x78,0x88,0xf0 }, + { 0x25,0x25,0x6f,0x4a }, { 0x2e,0x2e,0x72,0x5c }, + { 0x1c,0x1c,0x24,0x38 }, { 0xa6,0xa6,0xf1,0x57 }, + { 0xb4,0xb4,0xc7,0x73 }, { 0xc6,0xc6,0x51,0x97 }, + { 0xe8,0xe8,0x23,0xcb }, { 0xdd,0xdd,0x7c,0xa1 }, + { 0x74,0x74,0x9c,0xe8 }, { 0x1f,0x1f,0x21,0x3e }, + { 0x4b,0x4b,0xdd,0x96 }, { 0xbd,0xbd,0xdc,0x61 }, + { 0x8b,0x8b,0x86,0x0d }, { 0x8a,0x8a,0x85,0x0f }, + { 0x70,0x70,0x90,0xe0 }, { 0x3e,0x3e,0x42,0x7c }, + { 0xb5,0xb5,0xc4,0x71 }, { 0x66,0x66,0xaa,0xcc }, + { 0x48,0x48,0xd8,0x90 }, { 0x03,0x03,0x05,0x06 }, + { 0xf6,0xf6,0x01,0xf7 }, { 0x0e,0x0e,0x12,0x1c }, + { 0x61,0x61,0xa3,0xc2 }, { 0x35,0x35,0x5f,0x6a }, + { 0x57,0x57,0xf9,0xae }, { 0xb9,0xb9,0xd0,0x69 }, + { 0x86,0x86,0x91,0x17 }, { 0xc1,0xc1,0x58,0x99 }, + { 0x1d,0x1d,0x27,0x3a }, { 0x9e,0x9e,0xb9,0x27 }, + { 0xe1,0xe1,0x38,0xd9 }, { 0xf8,0xf8,0x13,0xeb }, + { 0x98,0x98,0xb3,0x2b }, { 0x11,0x11,0x33,0x22 }, + { 0x69,0x69,0xbb,0xd2 }, { 0xd9,0xd9,0x70,0xa9 }, + { 0x8e,0x8e,0x89,0x07 }, { 0x94,0x94,0xa7,0x33 }, + { 0x9b,0x9b,0xb6,0x2d }, { 0x1e,0x1e,0x22,0x3c }, + { 0x87,0x87,0x92,0x15 }, { 0xe9,0xe9,0x20,0xc9 }, + { 0xce,0xce,0x49,0x87 }, { 0x55,0x55,0xff,0xaa }, + { 0x28,0x28,0x78,0x50 }, { 0xdf,0xdf,0x7a,0xa5 }, + { 0x8c,0x8c,0x8f,0x03 }, { 0xa1,0xa1,0xf8,0x59 }, + { 0x89,0x89,0x80,0x09 }, { 0x0d,0x0d,0x17,0x1a }, + { 0xbf,0xbf,0xda,0x65 }, { 0xe6,0xe6,0x31,0xd7 }, + { 0x42,0x42,0xc6,0x84 }, { 0x68,0x68,0xb8,0xd0 }, + { 0x41,0x41,0xc3,0x82 }, { 0x99,0x99,0xb0,0x29 }, + { 0x2d,0x2d,0x77,0x5a }, { 0x0f,0x0f,0x11,0x1e }, + { 0xb0,0xb0,0xcb,0x7b }, { 0x54,0x54,0xfc,0xa8 }, + { 0xbb,0xbb,0xd6,0x6d }, { 0x16,0x16,0x3a,0x2c } +}; + +static const uint32_t rcon[30] = +{ + 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, + 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, + 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91 +}; + +static char *AES_SelfTest(void); + +/* Perform the key setup. + */ +static boolean AES_SetKey(RIJNDAEL_context *ctx, const byte *key, + const unsigned keylen) +{ + int ROUNDS; + byte k[MAXKC][4]; + int i,j, r, t, rconpointer = 0; + byte tk[MAXKC][4]; + int KC; + + if( keylen == 128/8 ) + { + ROUNDS = 10; + KC = 4; + } + else if ( keylen == 192/8 ) + { + ROUNDS = 12; + KC = 6; + } + else if ( keylen == 256/8 ) + { + ROUNDS = 14; + KC = 8; + } + else + { + return false; + } + + ctx->ROUNDS = ROUNDS; + + for (i = 0; i < keylen; i++) + { + k[i >> 2][i & 3] = key[i]; + } +#define W (ctx->keySched) + + for (j = KC-1; j >= 0; j--) + { + *((uint32_t*)tk[j]) = *((uint32_t*)k[j]); + } + r = 0; + t = 0; + /* copy values into round key array */ + for (j = 0; (j < KC) && (r < ROUNDS + 1); ) + { + for (; (j < KC) && (t < 4); j++, t++) + { + W[r][t] = *((uint32_t*)tk[j]); + } + if (t == 4) + { + r++; + t = 0; + } + } + + while (r < ROUNDS + 1) + { + /* while not enough round key material calculated */ + /* calculate new values */ + tk[0][0] ^= S[tk[KC-1][1]]; + tk[0][1] ^= S[tk[KC-1][2]]; + tk[0][2] ^= S[tk[KC-1][3]]; + tk[0][3] ^= S[tk[KC-1][0]]; + tk[0][0] ^= rcon[rconpointer++]; + + if (KC != 8) + { + for (j = 1; j < KC; j++) + { + *((uint32_t*)tk[j]) ^= *((uint32_t*)tk[j-1]); + } + } + else + { + for (j = 1; j < KC/2; j++) + { + *((uint32_t*)tk[j]) ^= *((uint32_t*)tk[j-1]); + } + tk[KC/2][0] ^= S[tk[KC/2 - 1][0]]; + tk[KC/2][1] ^= S[tk[KC/2 - 1][1]]; + tk[KC/2][2] ^= S[tk[KC/2 - 1][2]]; + tk[KC/2][3] ^= S[tk[KC/2 - 1][3]]; + for (j = KC/2 + 1; j < KC; j++) + { + *((uint32_t*)tk[j]) ^= *((uint32_t*)tk[j-1]); + } + } + /* copy values into round key array */ + for (j = 0; (j < KC) && (r < ROUNDS + 1); ) + { + for (; (j < KC) && (t < 4); j++, t++) + { + W[r][t] = *((uint32_t*)tk[j]); + } + if (t == 4) + { + r++; + t = 0; + } + } + } + +#undef W + return true; +} + +/* Encrypt one block. A and B need to be aligned on a 4 byte + boundary. A and B may be the same. */ +static void AES_EncryptAligned(const RIJNDAEL_context *ctx, + byte *b, const byte *a) +{ +#define rk (ctx->keySched) + int ROUNDS = ctx->ROUNDS; + int r; + union + { + uint32_t u32; + byte b[4]; + } temp[4]; + + temp[0].u32 = *((uint32_t*)(a )) ^ rk[0][0]; + temp[1].u32 = *((uint32_t*)(a+ 4)) ^ rk[0][1]; + temp[2].u32 = *((uint32_t*)(a+ 8)) ^ rk[0][2]; + temp[3].u32 = *((uint32_t*)(a+12)) ^ rk[0][3]; + *((uint32_t*)(b )) = (*((uint32_t*)T1[temp[0].b[0]]) + ^ *((uint32_t*)T2[temp[1].b[1]]) + ^ *((uint32_t*)T3[temp[2].b[2]]) + ^ *((uint32_t*)T4[temp[3].b[3]])); + *((uint32_t*)(b + 4)) = (*((uint32_t*)T1[temp[1].b[0]]) + ^ *((uint32_t*)T2[temp[2].b[1]]) + ^ *((uint32_t*)T3[temp[3].b[2]]) + ^ *((uint32_t*)T4[temp[0].b[3]])); + *((uint32_t*)(b + 8)) = (*((uint32_t*)T1[temp[2].b[0]]) + ^ *((uint32_t*)T2[temp[3].b[1]]) + ^ *((uint32_t*)T3[temp[0].b[2]]) + ^ *((uint32_t*)T4[temp[1].b[3]])); + *((uint32_t*)(b +12)) = (*((uint32_t*)T1[temp[3].b[0]]) + ^ *((uint32_t*)T2[temp[0].b[1]]) + ^ *((uint32_t*)T3[temp[1].b[2]]) + ^ *((uint32_t*)T4[temp[2].b[3]])); + + for (r = 1; r < ROUNDS-1; r++) + { + temp[0].u32 = *((uint32_t*)(b )) ^ rk[r][0]; + temp[1].u32 = *((uint32_t*)(b+ 4)) ^ rk[r][1]; + temp[2].u32 = *((uint32_t*)(b+ 8)) ^ rk[r][2]; + temp[3].u32 = *((uint32_t*)(b+12)) ^ rk[r][3]; + + *((uint32_t*)(b )) = (*((uint32_t*)T1[temp[0].b[0]]) + ^ *((uint32_t*)T2[temp[1].b[1]]) + ^ *((uint32_t*)T3[temp[2].b[2]]) + ^ *((uint32_t*)T4[temp[3].b[3]])); + *((uint32_t*)(b + 4)) = (*((uint32_t*)T1[temp[1].b[0]]) + ^ *((uint32_t*)T2[temp[2].b[1]]) + ^ *((uint32_t*)T3[temp[3].b[2]]) + ^ *((uint32_t*)T4[temp[0].b[3]])); + *((uint32_t*)(b + 8)) = (*((uint32_t*)T1[temp[2].b[0]]) + ^ *((uint32_t*)T2[temp[3].b[1]]) + ^ *((uint32_t*)T3[temp[0].b[2]]) + ^ *((uint32_t*)T4[temp[1].b[3]])); + *((uint32_t*)(b +12)) = (*((uint32_t*)T1[temp[3].b[0]]) + ^ *((uint32_t*)T2[temp[0].b[1]]) + ^ *((uint32_t*)T3[temp[1].b[2]]) + ^ *((uint32_t*)T4[temp[2].b[3]])); + } + + /* Last round is special. */ + temp[0].u32 = *((uint32_t*)(b )) ^ rk[ROUNDS-1][0]; + temp[1].u32 = *((uint32_t*)(b+ 4)) ^ rk[ROUNDS-1][1]; + temp[2].u32 = *((uint32_t*)(b+ 8)) ^ rk[ROUNDS-1][2]; + temp[3].u32 = *((uint32_t*)(b+12)) ^ rk[ROUNDS-1][3]; + b[ 0] = T1[temp[0].b[0]][1]; + b[ 1] = T1[temp[1].b[1]][1]; + b[ 2] = T1[temp[2].b[2]][1]; + b[ 3] = T1[temp[3].b[3]][1]; + b[ 4] = T1[temp[1].b[0]][1]; + b[ 5] = T1[temp[2].b[1]][1]; + b[ 6] = T1[temp[3].b[2]][1]; + b[ 7] = T1[temp[0].b[3]][1]; + b[ 8] = T1[temp[2].b[0]][1]; + b[ 9] = T1[temp[3].b[1]][1]; + b[10] = T1[temp[0].b[2]][1]; + b[11] = T1[temp[1].b[3]][1]; + b[12] = T1[temp[3].b[0]][1]; + b[13] = T1[temp[0].b[1]][1]; + b[14] = T1[temp[1].b[2]][1]; + b[15] = T1[temp[2].b[3]][1]; + *((uint32_t*)(b )) ^= rk[ROUNDS][0]; + *((uint32_t*)(b+ 4)) ^= rk[ROUNDS][1]; + *((uint32_t*)(b+ 8)) ^= rk[ROUNDS][2]; + *((uint32_t*)(b+12)) ^= rk[ROUNDS][3]; +#undef rk +} + +static void AES_Encrypt(const RIJNDAEL_context *ctx, + byte *bx, const byte *ax) +{ + /* BX and AX are not necessary correctly aligned. Thus we need to + copy them here. */ + uint32_t a[4]; + uint32_t b[4]; + + memcpy(a, ax, 16); + AES_EncryptAligned(ctx, (byte *) b, (byte *) a); + memcpy(bx, b, 16); +} + +/* Test a single encryption and decryption with each key size. */ + +static char *AES_SelfTest(void) +{ + RIJNDAEL_context ctx; + byte scratch[16]; + + /* The test vectors are from the AES supplied ones; more or less + * randomly taken from ecb_tbl.txt (I=42,81,14) + */ + static const byte plaintext[16] = { + 0x01,0x4B,0xAF,0x22,0x78,0xA6,0x9D,0x33, + 0x1D,0x51,0x80,0x10,0x36,0x43,0xE9,0x9A + }; + static const byte key[16] = { + 0xE8,0xE9,0xEA,0xEB,0xED,0xEE,0xEF,0xF0, + 0xF2,0xF3,0xF4,0xF5,0xF7,0xF8,0xF9,0xFA + }; + static const byte ciphertext[16] = { + 0x67,0x43,0xC3,0xD1,0x51,0x9A,0xB4,0xF2, + 0xCD,0x9A,0x78,0xAB,0x09,0xA5,0x11,0xBD + }; + + static const byte plaintext_192[16] = { + 0x76,0x77,0x74,0x75,0xF1,0xF2,0xF3,0xF4, + 0xF8,0xF9,0xE6,0xE7,0x77,0x70,0x71,0x72 + }; + static const byte key_192[24] = { + 0x04,0x05,0x06,0x07,0x09,0x0A,0x0B,0x0C, + 0x0E,0x0F,0x10,0x11,0x13,0x14,0x15,0x16, + 0x18,0x19,0x1A,0x1B,0x1D,0x1E,0x1F,0x20 + }; + static const byte ciphertext_192[16] = { + 0x5D,0x1E,0xF2,0x0D,0xCE,0xD6,0xBC,0xBC, + 0x12,0x13,0x1A,0xC7,0xC5,0x47,0x88,0xAA + }; + + static const byte plaintext_256[16] = { + 0x06,0x9A,0x00,0x7F,0xC7,0x6A,0x45,0x9F, + 0x98,0xBA,0xF9,0x17,0xFE,0xDF,0x95,0x21 + }; + static const byte key_256[32] = { + 0x08,0x09,0x0A,0x0B,0x0D,0x0E,0x0F,0x10, + 0x12,0x13,0x14,0x15,0x17,0x18,0x19,0x1A, + 0x1C,0x1D,0x1E,0x1F,0x21,0x22,0x23,0x24, + 0x26,0x27,0x28,0x29,0x2B,0x2C,0x2D,0x2E + }; + static const byte ciphertext_256[16] = { + 0x08,0x0E,0x95,0x17,0xEB,0x16,0x77,0x71, + 0x9A,0xCF,0x72,0x80,0x86,0x04,0x0A,0xE3 + }; + + AES_SetKey(&ctx, key, sizeof(key)); + AES_Encrypt(&ctx, scratch, plaintext); + if (memcmp (scratch, ciphertext, sizeof (ciphertext))) + return "Rijndael-128 test encryption failed."; + + AES_SetKey(&ctx, key_192, sizeof(key_192)); + AES_Encrypt(&ctx, scratch, plaintext_192); + if (memcmp (scratch, ciphertext_192, sizeof (ciphertext_192))) + return "Rijndael-192 test encryption failed."; + + AES_SetKey(&ctx, key_256, sizeof(key_256)); + AES_Encrypt(&ctx, scratch, plaintext_256); + if (memcmp (scratch, ciphertext_256, sizeof (ciphertext_256))) + return "Rijndael-256 test encryption failed."; + + return NULL; +} + +#ifndef TEST + +static boolean prng_enabled = false; +static RIJNDAEL_context prng_context; +static uint32_t prng_input_counter; +static uint32_t prng_values[4]; +static unsigned int prng_value_index = 0; + +// Initialize Pseudo-RNG using the specified 128-bit key. + +void PRNG_Start(prng_seed_t key) +{ + char *errormsg; + + errormsg = AES_SelfTest(); + + if (errormsg != NULL) + { + I_Error("Failed to initialize PRNG: %s", errormsg); + } + + AES_SetKey(&prng_context, key, sizeof(prng_seed_t)); + prng_value_index = 4; + prng_input_counter = 0; + prng_enabled = true; +} + +void PRNG_Stop(void) +{ + prng_enabled = false; +} + +// Generate a set of new PRNG values by encrypting a new block. + +static void PRNG_Generate(void) +{ + byte input[16], output[16]; + unsigned int i; + + // Input for the cipher is a consecutively increasing 32-bit counter. + + for (i = 0; i < 4; ++i) + { + input[4*i] = prng_input_counter & 0xff; + input[4*i + 1] = (prng_input_counter >> 8) & 0xff; + input[4*i + 2] = (prng_input_counter >> 16) & 0xff; + input[4*i + 3] = (prng_input_counter >> 24) & 0xff; + ++prng_input_counter; + } + + AES_Encrypt(&prng_context, output, input); + + for (i = 0; i < 4; ++i) + { + prng_values[i] = output[4*i] + | (output[4*i + 1] << 8) + | (output[4*i + 2] << 16) + | (output[4*i + 3] << 24); + } + + prng_value_index = 0; +} + +// Read a random 32-bit integer from the PRNG. + +unsigned int PRNG_Random(void) +{ + unsigned int result; + + if (!prng_enabled) + { + return 0; + } + + if (prng_value_index >= 4) + { + PRNG_Generate(); + } + + result = prng_values[prng_value_index]; + ++prng_value_index; + + return result; +} + + +#else /* #ifndef TEST */ + +int main(int argc, char *argv[]) +{ + char *errormsg; + + errormsg = AES_SelfTest(); + + if (errormsg == NULL) + { + printf("AES Self test passed.\n"); + return 0; + } + else + { + fprintf(stderr, "AES self test failed: %s\n", errormsg); + return 1; + } +} + +#endif diff --git a/src/aes_prng.h b/src/aes_prng.h new file mode 100644 index 00000000..4c06f3a3 --- /dev/null +++ b/src/aes_prng.h @@ -0,0 +1,40 @@ +// Emacs style mode select -*- C++ -*- +//----------------------------------------------------------------------------- +// +// Copyright(C) 2012 Simon Howard +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA. +// +// DESCRIPTION: +// Pseudo-random number generator for secure demos. +// +//----------------------------------------------------------------------------- + +#ifndef __AES_PRNG_H__ +#define __AES_PRNG_H__ + +#include "doomtype.h" + +// Nonce value used as random seed for secure demos. + +typedef byte prng_seed_t[16]; + +void PRNG_Start(prng_seed_t seed); +void PRNG_Stop(void); +unsigned int PRNG_Random(void); + +#endif /* #ifndef __AES_PRNG_H__ */ + diff --git a/src/d_iwad.c b/src/d_iwad.c index 8c29352b..aefb6872 100644 --- a/src/d_iwad.c +++ b/src/d_iwad.c @@ -175,6 +175,10 @@ static char *steam_install_subdirs[] = "steamapps\\common\\ultimate doom\\base", "steamapps\\common\\hexen\\base", "steamapps\\common\\heretic shadow of the serpent riders\\base" + + // From Doom 3: BFG Edition: + + "steamapps\\common\\DOOM 3 BFG Edition\\base\\wads", }; static char *GetRegistryString(registry_value_t *reg_val) @@ -219,7 +223,7 @@ static char *GetRegistryString(registry_value_t *reg_val) } // Close the key - + RegCloseKey(key); return result; diff --git a/src/deh_defs.h b/src/deh_defs.h index e7b76182..2ab65c5d 100644 --- a/src/deh_defs.h +++ b/src/deh_defs.h @@ -27,7 +27,7 @@ #ifndef DEH_DEFS_H #define DEH_DEFS_H -#include "md5.h" +#include "sha1.h" typedef struct deh_context_s deh_context_t; typedef struct deh_section_s deh_section_t; @@ -35,7 +35,7 @@ typedef void (*deh_section_init_t)(void); typedef void *(*deh_section_start_t)(deh_context_t *context, char *line); typedef void (*deh_section_end_t)(deh_context_t *context, void *tag); typedef void (*deh_line_parser_t)(deh_context_t *context, char *line, void *tag); -typedef void (*deh_md5_hash_t)(md5_context_t *context); +typedef void (*deh_sha1_hash_t)(sha1_context_t *context); struct deh_section_s { @@ -58,9 +58,9 @@ struct deh_section_s deh_section_end_t end; - // Called when generating an MD5 sum of the dehacked state + // Called when generating an SHA1 sum of the dehacked state - deh_md5_hash_t md5_hash; + deh_sha1_hash_t sha1_hash; }; #endif /* #ifndef DEH_DEFS_H */ diff --git a/src/deh_main.c b/src/deh_main.c index 39d59e8c..4bb3e383 100644 --- a/src/deh_main.c +++ b/src/deh_main.c @@ -54,22 +54,22 @@ boolean deh_allow_long_cheats = false; boolean deh_apply_cheats = true; -void DEH_Checksum(md5_digest_t digest) +void DEH_Checksum(sha1_digest_t digest) { - md5_context_t md5_context; + sha1_context_t sha1_context; unsigned int i; - MD5_Init(&md5_context); + SHA1_Init(&sha1_context); for (i=0; deh_section_types[i] != NULL; ++i) { - if (deh_section_types[i]->md5_hash != NULL) + if (deh_section_types[i]->sha1_hash != NULL) { - deh_section_types[i]->md5_hash(&md5_context); + deh_section_types[i]->sha1_hash(&sha1_context); } } - MD5_Final(digest, &md5_context); + SHA1_Final(digest, &sha1_context); } // Called on startup to call the Init functions diff --git a/src/deh_main.h b/src/deh_main.h index 9ac2c6c7..ea9e42da 100644 --- a/src/deh_main.h +++ b/src/deh_main.h @@ -29,8 +29,8 @@ #include "doomtype.h" #include "doomfeatures.h" -#include "md5.h" #include "deh_str.h" +#include "sha1.h" // These are the limits that dehacked uses (from dheinit.h in the dehacked // source). If these limits are exceeded, it does not generate an error, but @@ -46,7 +46,7 @@ int DEH_LoadLumpByName(char *name); boolean DEH_ParseAssignment(char *line, char **variable_name, char **value); -void DEH_Checksum(md5_digest_t digest); +void DEH_Checksum(sha1_digest_t digest); extern boolean deh_allow_long_strings; extern boolean deh_allow_long_cheats; diff --git a/src/deh_mapping.c b/src/deh_mapping.c index f061c298..85c675b4 100644 --- a/src/deh_mapping.c +++ b/src/deh_mapping.c @@ -163,8 +163,8 @@ boolean DEH_SetStringMapping(deh_context_t *context, deh_mapping_t *mapping, return true; } -void DEH_StructMD5Sum(md5_context_t *context, deh_mapping_t *mapping, - void *structptr) +void DEH_StructSHA1Sum(sha1_context_t *context, deh_mapping_t *mapping, + void *structptr) { int i; @@ -189,13 +189,13 @@ void DEH_StructMD5Sum(md5_context_t *context, deh_mapping_t *mapping, switch (entry->size) { case 1: - MD5_UpdateInt32(context, *((uint8_t *) location)); + SHA1_UpdateInt32(context, *((uint8_t *) location)); break; case 2: - MD5_UpdateInt32(context, *((uint16_t *) location)); + SHA1_UpdateInt32(context, *((uint16_t *) location)); break; case 4: - MD5_UpdateInt32(context, *((uint32_t *) location)); + SHA1_UpdateInt32(context, *((uint32_t *) location)); break; default: I_Error("Unknown dehacked mapping field type for '%s' (BUG)", diff --git a/src/deh_mapping.h b/src/deh_mapping.h index 129ddcfd..91e34323 100644 --- a/src/deh_mapping.h +++ b/src/deh_mapping.h @@ -31,7 +31,7 @@ #include "doomtype.h" #include "deh_io.h" -#include "md5.h" +#include "sha1.h" #define DEH_BEGIN_MAPPING(mapping_name, structname) \ static structname deh_mapping_base; \ @@ -95,8 +95,8 @@ boolean DEH_SetMapping(deh_context_t *context, deh_mapping_t *mapping, void *structptr, char *name, int value); boolean DEH_SetStringMapping(deh_context_t *context, deh_mapping_t *mapping, void *structptr, char *name, char *value); -void DEH_StructMD5Sum(md5_context_t *context, deh_mapping_t *mapping, - void *structptr); +void DEH_StructSHA1Sum(sha1_context_t *context, deh_mapping_t *mapping, + void *structptr); #endif /* #ifndef DEH_MAPPING_H */ diff --git a/src/doom/d_main.c b/src/doom/d_main.c index d91649a8..0746a579 100644 --- a/src/doom/d_main.c +++ b/src/doom/d_main.c @@ -123,9 +123,10 @@ int startloadgame; boolean advancedemo; // Store demo, do not accept any inputs - boolean storedemo; +// "BFG Edition" version of doom2.wad does not include TITLEPIC. +boolean bfgedition; char wadfile[1024]; // primary wad file char mapdir[1024]; // directory of development maps @@ -566,6 +567,13 @@ void D_DoAdvanceDemo (void) G_DeferedPlayDemo(DEH_String("demo4")); break; } + + // The Doom 3: BFG Edition version of doom2.wad does not have a + // TITLETPIC lump. Use INTERPIC instead as a workaround. + if (bfgedition && !strcasecmp(pagename, "TITLEPIC")) + { + pagename = "INTERPIC"; + } } @@ -1539,13 +1547,27 @@ void D_DoomMain (void) DEH_printf("ST_Init: Init status bar.\n"); ST_Init (); - // If Doom II without a MAP01 lump, this is a store demo. + // If Doom II without a MAP01 lump, this is a store demo. // Moved this here so that MAP01 isn't constantly looked up // in the main loop. if (gamemode == commercial && W_CheckNumForName("map01") < 0) storedemo = true; + // Doom 3: BFG Edition includes modified versions of the classic + // IWADs. The modified version of doom2.wad does not have a + // TITLEPIC lump, so detect this so we can apply a workaround. + // We specifically check for TITLEPIC here, after PWADs have been + // loaded - this means that we can play with the BFG Edition with + // PWADs that change the title screen and still see the modified + // titles. + + if (gamemode == commercial && W_CheckNumForName("titlepic") < 0) + { + printf("BFG Edition: Using INTERPIC instead of TITLEPIC.\n"); + bfgedition = true; + } + if (M_CheckParmWithArgs("-statdump", 1)) { I_AtExit(StatDump, true); diff --git a/src/doom/d_net.c b/src/doom/d_net.c index 74893724..4ab61425 100644 --- a/src/doom/d_net.c +++ b/src/doom/d_net.c @@ -215,8 +215,8 @@ static void SaveGameSettings(net_gamesettings_t *settings, // Read checksums of our WAD directory and dehacked information - W_Checksum(connect_data->wad_md5sum); - DEH_Checksum(connect_data->deh_md5sum); + W_Checksum(connect_data->wad_sha1sum); + DEH_Checksum(connect_data->deh_sha1sum); // Are we playing with the Freedoom IWAD? diff --git a/src/doom/deh_ammo.c b/src/doom/deh_ammo.c index 2c6a9022..952d8df3 100644 --- a/src/doom/deh_ammo.c +++ b/src/doom/deh_ammo.c @@ -89,14 +89,14 @@ static void DEH_AmmoParseLine(deh_context_t *context, char *line, void *tag) } } -static void DEH_AmmoMD5Hash(md5_context_t *context) +static void DEH_AmmoSHA1Hash(sha1_context_t *context) { int i; for (i=0; i<NUMAMMO; ++i) { - MD5_UpdateInt32(context, clipammo[i]); - MD5_UpdateInt32(context, maxammo[i]); + SHA1_UpdateInt32(context, clipammo[i]); + SHA1_UpdateInt32(context, maxammo[i]); } } @@ -107,6 +107,6 @@ deh_section_t deh_section_ammo = DEH_AmmoStart, DEH_AmmoParseLine, NULL, - DEH_AmmoMD5Hash, + DEH_AmmoSHA1Hash, }; diff --git a/src/doom/deh_frame.c b/src/doom/deh_frame.c index e59f09f4..8fc01803 100644 --- a/src/doom/deh_frame.c +++ b/src/doom/deh_frame.c @@ -148,13 +148,13 @@ static void DEH_FrameParseLine(deh_context_t *context, char *line, void *tag) } } -static void DEH_FrameMD5Sum(md5_context_t *context) +static void DEH_FrameSHA1Sum(sha1_context_t *context) { int i; for (i=0; i<NUMSTATES; ++i) { - DEH_StructMD5Sum(context, &state_mapping, &states[i]); + DEH_StructSHA1Sum(context, &state_mapping, &states[i]); } } @@ -165,6 +165,6 @@ deh_section_t deh_section_frame = DEH_FrameStart, DEH_FrameParseLine, NULL, - DEH_FrameMD5Sum, + DEH_FrameSHA1Sum, }; diff --git a/src/doom/deh_misc.c b/src/doom/deh_misc.c index b57d0ef0..eb5acece 100644 --- a/src/doom/deh_misc.c +++ b/src/doom/deh_misc.c @@ -215,13 +215,13 @@ static void DEH_MiscParseLine(deh_context_t *context, char *line, void *tag) DEH_Warning(context, "Unknown Misc variable '%s'", variable_name); } -static void DEH_MiscMD5Sum(md5_context_t *context) +static void DEH_MiscSHA1Sum(sha1_context_t *context) { unsigned int i; for (i=0; i<arrlen(misc_settings); ++i) { - MD5_UpdateInt32(context, *misc_settings[i].value); + SHA1_UpdateInt32(context, *misc_settings[i].value); } } @@ -232,6 +232,6 @@ deh_section_t deh_section_misc = DEH_MiscStart, DEH_MiscParseLine, NULL, - DEH_MiscMD5Sum, + DEH_MiscSHA1Sum, }; diff --git a/src/doom/deh_ptr.c b/src/doom/deh_ptr.c index d757a178..0d1764c9 100644 --- a/src/doom/deh_ptr.c +++ b/src/doom/deh_ptr.c @@ -129,13 +129,13 @@ static void DEH_PointerParseLine(deh_context_t *context, char *line, void *tag) } } -static void DEH_PointerMD5Sum(md5_context_t *context) +static void DEH_PointerSHA1Sum(sha1_context_t *context) { int i; for (i=0; i<NUMSTATES; ++i) { - MD5_UpdateInt32(context, CodePointerIndex(&states[i].action)); + SHA1_UpdateInt32(context, CodePointerIndex(&states[i].action)); } } @@ -146,6 +146,6 @@ deh_section_t deh_section_pointer = DEH_PointerStart, DEH_PointerParseLine, NULL, - DEH_PointerMD5Sum, + DEH_PointerSHA1Sum, }; diff --git a/src/doom/deh_thing.c b/src/doom/deh_thing.c index 5400ae60..d4e05f01 100644 --- a/src/doom/deh_thing.c +++ b/src/doom/deh_thing.c @@ -118,13 +118,13 @@ static void DEH_ThingParseLine(deh_context_t *context, char *line, void *tag) DEH_SetMapping(context, &thing_mapping, mobj, variable_name, ivalue); } -static void DEH_ThingMD5Sum(md5_context_t *context) +static void DEH_ThingSHA1Sum(sha1_context_t *context) { int i; for (i=0; i<NUMMOBJTYPES; ++i) { - DEH_StructMD5Sum(context, &thing_mapping, &mobjinfo[i]); + DEH_StructSHA1Sum(context, &thing_mapping, &mobjinfo[i]); } } @@ -135,6 +135,6 @@ deh_section_t deh_section_thing = DEH_ThingStart, DEH_ThingParseLine, NULL, - DEH_ThingMD5Sum, + DEH_ThingSHA1Sum, }; diff --git a/src/doom/deh_weapon.c b/src/doom/deh_weapon.c index b0c2400c..5c590fe8 100644 --- a/src/doom/deh_weapon.c +++ b/src/doom/deh_weapon.c @@ -88,13 +88,13 @@ static void DEH_WeaponParseLine(deh_context_t *context, char *line, void *tag) DEH_SetMapping(context, &weapon_mapping, weapon, variable_name, ivalue); } -static void DEH_WeaponMD5Sum(md5_context_t *context) +static void DEH_WeaponSHA1Sum(sha1_context_t *context) { int i; for (i=0; i<NUMWEAPONS ;++i) { - DEH_StructMD5Sum(context, &weapon_mapping, &weaponinfo[i]); + DEH_StructSHA1Sum(context, &weapon_mapping, &weaponinfo[i]); } } @@ -105,6 +105,6 @@ deh_section_t deh_section_weapon = DEH_WeaponStart, DEH_WeaponParseLine, NULL, - DEH_WeaponMD5Sum, + DEH_WeaponSHA1Sum, }; diff --git a/src/doom/g_game.c b/src/doom/g_game.c index 92577ff4..4ffddb41 100644 --- a/src/doom/g_game.c +++ b/src/doom/g_game.c @@ -257,6 +257,14 @@ static boolean WeaponSelectable(weapontype_t weapon) return false; } + // These weapons aren't available in shareware. + + if ((weapon == wp_plasma || weapon == wp_bfg) + && gamemission == doom && gamemode == shareware) + { + return false; + } + // Can't select a weapon if we don't own it. if (!players[consoleplayer].weaponowned[weapon]) diff --git a/src/doom/hu_stuff.c b/src/doom/hu_stuff.c index 9b67a1a5..3aaa5a33 100644 --- a/src/doom/hu_stuff.c +++ b/src/doom/hu_stuff.c @@ -595,11 +595,10 @@ boolean HU_Responder(event_t *ev) } else { - c = ev->data2; // send a macro if (altdown) { - c = c - '0'; + c = ev->data1 - '0'; if (c > 9) return false; // fprintf(stderr, "got here\n"); @@ -621,6 +620,8 @@ boolean HU_Responder(event_t *ev) } else { + c = ev->data2; + eatkey = HUlib_keyInIText(&w_chat, c); if (eatkey) { diff --git a/src/doom/m_menu.c b/src/doom/m_menu.c index e54ac7ff..b0eeee06 100644 --- a/src/doom/m_menu.c +++ b/src/doom/m_menu.c @@ -132,6 +132,7 @@ char savegamestrings[10][SAVESTRINGSIZE]; char endstring[160]; +static boolean opldev; // // MENU TYPEDEFS @@ -1887,6 +1888,39 @@ void M_StartControlPanel (void) itemOn = currentMenu->lastOn; // JDC } +// Display OPL debug messages - hack for GENMIDI development. + +static void M_DrawOPLDev(void) +{ + extern void I_OPL_DevMessages(char *); + char debug[1024]; + char *curr, *p; + int line; + + I_OPL_DevMessages(debug); + curr = debug; + line = 0; + + for (;;) + { + p = strchr(curr, '\n'); + + if (p != NULL) + { + *p = '\0'; + } + + M_WriteText(0, line * 8, curr); + ++line; + + if (p == NULL) + { + break; + } + + curr = p + 1; + } +} // // M_Drawer @@ -1938,6 +1972,11 @@ void M_Drawer (void) return; } + if (opldev) + { + M_DrawOPLDev(); + } + if (!menuactive) return; @@ -1965,7 +2004,6 @@ void M_Drawer (void) V_DrawPatchDirect(x + SKULLXOFF, currentMenu->y - 5 + itemOn*LINEHEIGHT, W_CacheLumpName(DEH_String(skullName[whichSkull]), PU_CACHE)); - } @@ -2046,6 +2084,7 @@ void M_Init (void) default: break; } - + + opldev = M_CheckParm("-opldev") > 0; } diff --git a/src/doom/p_spec.c b/src/doom/p_spec.c index 90d0bb7c..68f986dc 100644 --- a/src/doom/p_spec.c +++ b/src/doom/p_spec.c @@ -1474,6 +1474,11 @@ void P_SpawnSpecials (void) switch(lines[i].special) { case 48: + if (numlinespecials >= MAXLINEANIMS) + { + I_Error("Too many scrolling wall linedefs! " + "(Vanilla limit is 64)"); + } // EFFECT FIRSTCOL SCROLL+ linespeciallist[numlinespecials] = &lines[i]; numlinespecials++; diff --git a/src/heretic/d_net.c b/src/heretic/d_net.c index 6a6a8abb..73a09ec6 100644 --- a/src/heretic/d_net.c +++ b/src/heretic/d_net.c @@ -177,8 +177,8 @@ static void SaveGameSettings(net_gamesettings_t *settings, // Read checksums of our WAD directory and dehacked information - W_Checksum(connect_data->wad_md5sum); - DEH_Checksum(connect_data->deh_md5sum); + W_Checksum(connect_data->wad_sha1sum); + DEH_Checksum(connect_data->deh_sha1sum); connect_data->is_freedoom = 0; } diff --git a/src/heretic/deh_ammo.c b/src/heretic/deh_ammo.c index fe86c757..08241863 100644 --- a/src/heretic/deh_ammo.c +++ b/src/heretic/deh_ammo.c @@ -95,18 +95,18 @@ static void DEH_AmmoParseLine(deh_context_t *context, char *line, void *tag) } } -static void DEH_AmmoMD5Hash(md5_context_t *context) +static void DEH_AmmoSHA1Hash(sha1_context_t *context) { int i; for (i=0; i<NUMAMMO; ++i) { - MD5_UpdateInt32(context, maxammo[i]); + SHA1_UpdateInt32(context, maxammo[i]); } for (i=0; i<NUMWEAPONS; ++i) { - MD5_UpdateInt32(context, GetWeaponAmmo[i]); + SHA1_UpdateInt32(context, GetWeaponAmmo[i]); } } @@ -117,6 +117,6 @@ deh_section_t deh_section_ammo = DEH_AmmoStart, DEH_AmmoParseLine, NULL, - DEH_AmmoMD5Hash, + DEH_AmmoSHA1Hash, }; diff --git a/src/heretic/deh_frame.c b/src/heretic/deh_frame.c index 8623ab0c..4a1581a7 100644 --- a/src/heretic/deh_frame.c +++ b/src/heretic/deh_frame.c @@ -322,13 +322,13 @@ static void DEH_FrameParseLine(deh_context_t *context, char *line, void *tag) } } -static void DEH_FrameMD5Sum(md5_context_t *context) +static void DEH_FrameSHA1Sum(sha1_context_t *context) { int i; for (i=0; i<NUMSTATES; ++i) { - DEH_StructMD5Sum(context, &state_mapping, &states[i]); + DEH_StructSHA1Sum(context, &state_mapping, &states[i]); } } @@ -339,6 +339,6 @@ deh_section_t deh_section_frame = DEH_FrameStart, DEH_FrameParseLine, NULL, - DEH_FrameMD5Sum, + DEH_FrameSHA1Sum, }; diff --git a/src/heretic/deh_thing.c b/src/heretic/deh_thing.c index ffededf2..dbb239e4 100644 --- a/src/heretic/deh_thing.c +++ b/src/heretic/deh_thing.c @@ -128,13 +128,13 @@ static void DEH_ThingParseLine(deh_context_t *context, char *line, void *tag) DEH_SetMapping(context, &thing_mapping, mobj, variable_name, ivalue); } -static void DEH_ThingMD5Sum(md5_context_t *context) +static void DEH_ThingSHA1Sum(sha1_context_t *context) { int i; for (i=0; i<NUMMOBJTYPES; ++i) { - DEH_StructMD5Sum(context, &thing_mapping, &mobjinfo[i]); + DEH_StructSHA1Sum(context, &thing_mapping, &mobjinfo[i]); } } @@ -145,6 +145,6 @@ deh_section_t deh_section_thing = DEH_ThingStart, DEH_ThingParseLine, NULL, - DEH_ThingMD5Sum, + DEH_ThingSHA1Sum, }; diff --git a/src/heretic/deh_weapon.c b/src/heretic/deh_weapon.c index 28a90c68..0c417e2b 100644 --- a/src/heretic/deh_weapon.c +++ b/src/heretic/deh_weapon.c @@ -108,14 +108,14 @@ static void DEH_WeaponParseLine(deh_context_t *context, char *line, void *tag) DEH_SetMapping(context, &weapon_mapping, weapon, variable_name, ivalue); } -static void DEH_WeaponMD5Sum(md5_context_t *context) +static void DEH_WeaponSHA1Sum(sha1_context_t *context) { int i; for (i=0; i<NUMWEAPONS ;++i) { - DEH_StructMD5Sum(context, &weapon_mapping, &wpnlev1info[i]); - DEH_StructMD5Sum(context, &weapon_mapping, &wpnlev2info[i]); + DEH_StructSHA1Sum(context, &weapon_mapping, &wpnlev1info[i]); + DEH_StructSHA1Sum(context, &weapon_mapping, &wpnlev2info[i]); } } @@ -126,6 +126,6 @@ deh_section_t deh_section_weapon = DEH_WeaponStart, DEH_WeaponParseLine, NULL, - DEH_WeaponMD5Sum, + DEH_WeaponSHA1Sum, }; diff --git a/src/hexen/d_net.c b/src/hexen/d_net.c index 0fe5ed1e..7d663154 100644 --- a/src/hexen/d_net.c +++ b/src/hexen/d_net.c @@ -207,8 +207,8 @@ static void SaveGameSettings(net_gamesettings_t *settings, // Read checksums of our WAD directory and dehacked information - W_Checksum(connect_data->wad_md5sum); - memset(connect_data->deh_md5sum, 0, sizeof(md5_digest_t)); + W_Checksum(connect_data->wad_sha1sum); + memset(connect_data->deh_sha1sum, 0, sizeof(sha1_digest_t)); connect_data->is_freedoom = 0; } diff --git a/src/i_oplmusic.c b/src/i_oplmusic.c index dd35ce5e..3d309715 100644 --- a/src/i_oplmusic.c +++ b/src/i_oplmusic.c @@ -46,11 +46,14 @@ #define MAXMIDLENGTH (96 * 1024) #define GENMIDI_NUM_INSTRS 128 +#define GENMIDI_NUM_PERCUSSION 47 #define GENMIDI_HEADER "#OPL_II#" #define GENMIDI_FLAG_FIXED 0x0001 /* fixed pitch */ #define GENMIDI_FLAG_2VOICE 0x0004 /* double voice (OPL3) */ +#define PERCUSSION_LOG_LEN 16 + typedef struct { byte tremolo; @@ -313,6 +316,8 @@ static int current_music_volume; static genmidi_instr_t *main_instrs; static genmidi_instr_t *percussion_instrs; +static char (*main_instr_names)[32]; +static char (*percussion_names)[32]; // Voices: @@ -327,6 +332,11 @@ static unsigned int num_tracks = 0; static unsigned int running_tracks = 0; static boolean song_looping; +// Mini-log of recently played percussion instruments: + +static uint8_t last_perc[PERCUSSION_LOG_LEN]; +static unsigned int last_perc_count; + // Configuration file variable, containing the port number for the // adlib chip. @@ -351,6 +361,8 @@ static boolean LoadInstrumentTable(void) main_instrs = (genmidi_instr_t *) (lump + strlen(GENMIDI_HEADER)); percussion_instrs = main_instrs + GENMIDI_NUM_INSTRS; + main_instr_names = (char (*)[32]) (percussion_instrs + GENMIDI_NUM_PERCUSSION); + percussion_names = main_instr_names + GENMIDI_NUM_INSTRS; return true; } @@ -893,6 +905,9 @@ static void KeyOnEvent(opl_track_data_t *track, midi_event_t *event) } instrument = &percussion_instrs[key - 35]; + + last_perc[last_perc_count] = key; + last_perc_count = (last_perc_count + 1) % PERCUSSION_LOG_LEN; } else { @@ -1467,3 +1482,95 @@ music_module_t music_opl_module = I_OPL_MusicIsPlaying, }; +//---------------------------------------------------------------------- +// +// Development / debug message generation, to help developing GENMIDI +// lumps. +// +//---------------------------------------------------------------------- + +static int NumActiveChannels(void) +{ + int i; + + for (i = MIDI_CHANNELS_PER_TRACK - 1; i >= 0; --i) + { + if (tracks[0].channels[i].instrument != &main_instrs[0]) + { + return i + 1; + } + } + + return 0; +} + +static int ChannelInUse(opl_channel_data_t *channel) +{ + opl_voice_t *voice; + + for (voice = voice_alloced_list; voice != NULL; voice = voice->next) + { + if (voice->channel == channel) + { + return 1; + } + } + + return 0; +} + +void I_OPL_DevMessages(char *result) +{ + int instr_num; + int lines; + int i; + + if (num_tracks == 0) + { + sprintf(result, "No OPL track!"); + return; + } + + sprintf(result, "Tracks:\n"); + lines = 1; + + for (i = 0; i < NumActiveChannels(); ++i) + { + if (tracks[0].channels[i].instrument == NULL) + { + continue; + } + + instr_num = tracks[0].channels[i].instrument - main_instrs; + + sprintf(result + strlen(result), + "chan %i: %c i#%i (%s)\n", + i, + ChannelInUse(&tracks[0].channels[i]) ? '\'' : ' ', + instr_num + 1, + main_instr_names[instr_num]); + ++lines; + } + + sprintf(result + strlen(result), "\nLast percussion:\n"); + lines += 2; + + i = (last_perc_count + PERCUSSION_LOG_LEN - 1) % PERCUSSION_LOG_LEN; + + do { + if (last_perc[i] == 0) + { + break; + } + + sprintf(result + strlen(result), + "%cp#%i (%s)\n", + i == 0 ? '\'' : ' ', + last_perc[i], + percussion_names[last_perc[i] - 35]); + ++lines; + + i = (i + PERCUSSION_LOG_LEN - 1) % PERCUSSION_LOG_LEN; + } while (lines < 25 && i != last_perc_count); +} + diff --git a/src/i_video.c b/src/i_video.c index 7ba4c8cd..959a1472 100644 --- a/src/i_video.c +++ b/src/i_video.c @@ -378,6 +378,37 @@ static void UpdateFocus(void) screenvisible = (state & SDL_APPACTIVE) != 0; } +// Show or hide the mouse cursor. We have to use different techniques +// depending on the OS. + +static void ShowCursor(boolean show) +{ + // On Windows, using SDL_ShowCursor() adds lag to the mouse input, + // so work around this by setting an invisible cursor instead. On + // other systems, it isn't possible to change the cursor, so this + // hack has to be Windows-only. (Thanks to entryway for this) + +#ifdef _WIN32 + if (show) + { + SDL_SetCursor(cursors[1]); + } + else + { + SDL_SetCursor(cursors[0]); + } +#else + SDL_ShowCursor(show); +#endif + + // When the cursor is hidden, grab the input. + + if (!screensaver_mode) + { + SDL_WM_GrabInput(!show); + } +} + void I_EnableLoadingDisk(void) { patch_t *disk; @@ -532,12 +563,10 @@ void I_ShutdownGraphics(void) { if (initialized) { - SDL_SetCursor(cursors[1]); - SDL_ShowCursor(1); - SDL_WM_GrabInput(SDL_GRAB_OFF); + ShowCursor(true); SDL_QuitSubSystem(SDL_INIT_VIDEO); - + initialized = false; } } @@ -895,17 +924,15 @@ static void UpdateGrab(void) { // Hide the cursor in screensaver mode - SDL_SetCursor(cursors[0]); + ShowCursor(false); } else if (grab && !currently_grabbed) { - SDL_SetCursor(cursors[0]); - SDL_WM_GrabInput(SDL_GRAB_ON); + ShowCursor(false); } else if (!grab && currently_grabbed) { - SDL_SetCursor(cursors[1]); - SDL_WM_GrabInput(SDL_GRAB_OFF); + ShowCursor(true); } currently_grabbed = grab; diff --git a/src/m_misc.c b/src/m_misc.c index e14436a3..47aea8b9 100644 --- a/src/m_misc.c +++ b/src/m_misc.c @@ -32,9 +32,9 @@ #include <ctype.h> #include <errno.h> -// for mkdir: - #ifdef _WIN32 +#define WIN32_LEAN_AND_MEAN +#include <windows.h> #include <io.h> #ifdef _MSC_VER #include <direct.h> @@ -296,3 +296,22 @@ char *M_StrCaseStr(char *haystack, char *needle) return NULL; } +#ifdef _WIN32 + +char *M_OEMToUTF8(const char *oem) +{ + unsigned int len = strlen(oem) + 1; + wchar_t *tmp; + char *result; + + tmp = malloc(len * sizeof(wchar_t)); + MultiByteToWideChar(CP_OEMCP, 0, oem, len, tmp, len); + result = malloc(len * 4); + WideCharToMultiByte(CP_UTF8, 0, tmp, len, result, len * 4, NULL, NULL); + free(tmp); + + return result; +} + +#endif + diff --git a/src/m_misc.h b/src/m_misc.h index c6be6ccb..ac5b5164 100644 --- a/src/m_misc.h +++ b/src/m_misc.h @@ -43,6 +43,7 @@ boolean M_StrToInt(const char *str, int *result); void M_ExtractFileBase(char *path, char *dest); void M_ForceUppercase(char *text); char *M_StrCaseStr(char *haystack, char *needle); +char *M_OEMToUTF8(const char *ansi); #endif diff --git a/src/md5.c b/src/md5.c deleted file mode 100644 index 2b184f98..00000000 --- a/src/md5.c +++ /dev/null @@ -1,264 +0,0 @@ -/* - * This code implements the MD5 message-digest algorithm. - * The algorithm is due to Ron Rivest. This code was - * written by Colin Plumb in 1993, no copyright is claimed. - * This code is in the public domain; do with it what you wish. - * - * Equivalent code is available from RSA Data Security, Inc. - * This code has been tested against that, and is equivalent, - * except that you don't need to include two pages of legalese - * with every copy. - * - * To compute the message digest of a chunk of bytes, declare an - * MD5Context structure, pass it to MD5_Init, call MD5_Update as - * needed on buffers full of bytes, and then call MD5_Final, which - * will fill a supplied 16-byte array with the digest. - * - * Changed so as no longer to depend on Colin Plumb's `usual.h' header - * definitions; now uses stuff from dpkg's config.h. - * - Ian Jackson <ian@chiark.greenend.org.uk>. - * Still in the public domain. - */ - -#include "i_swap.h" - -#include <string.h> /* for memcpy() */ -#include <sys/types.h> /* for stupid systems */ - -#include "md5.h" - -#ifdef SYS_LITTLE_ENDIAN - -// Little endian system - no byte swapping required - -#define ByteSwapBlock(x, y) - -#else - -void ByteSwapBlock(uint32_t *buf, unsigned words) -{ - byte *p = (byte *)buf; - - do { - *buf++ = (uint32_t)((unsigned)p[3] << 8 | p[2]) << 16 | - ((unsigned)p[1] << 8 | p[0]); - p += 4; - } while (--words); -} - -#endif /* #ifndef SYS_LITTLE_ENDIAN */ - -/* - * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious - * initialization constants. - */ -void -MD5_Init(md5_context_t *ctx) -{ - ctx->buf[0] = 0x67452301; - ctx->buf[1] = 0xefcdab89; - ctx->buf[2] = 0x98badcfe; - ctx->buf[3] = 0x10325476; - - ctx->bytes[0] = 0; - ctx->bytes[1] = 0; -} - -/* - * Update context to reflect the concatenation of another buffer full - * of bytes. - */ -void -MD5_Update(md5_context_t *ctx, byte const *buf, unsigned len) -{ - uint32_t t; - - /* Update byte count */ - - t = ctx->bytes[0]; - if ((ctx->bytes[0] = t + len) < t) - ctx->bytes[1]++; /* Carry from low to high */ - - t = 64 - (t & 0x3f); /* Space available in ctx->in (at least 1) */ - if (t > len) { - memcpy((byte *)ctx->in + 64 - t, buf, len); - return; - } - /* First chunk is an odd size */ - memcpy((byte *)ctx->in + 64 - t, buf, t); - ByteSwapBlock(ctx->in, 16); - MD5_Transform(ctx->buf, ctx->in); - buf += t; - len -= t; - - /* Process data in 64-byte chunks */ - while (len >= 64) { - memcpy(ctx->in, buf, 64); - ByteSwapBlock(ctx->in, 16); - MD5_Transform(ctx->buf, ctx->in); - buf += 64; - len -= 64; - } - - /* Handle any remaining bytes of data. */ - memcpy(ctx->in, buf, len); -} - -void MD5_UpdateInt32(md5_context_t *context, unsigned int val) -{ - byte buf[4]; - - buf[0] = (val >> 24) & 0xff; - buf[1] = (val >> 16) & 0xff; - buf[2] = (val >> 8) & 0xff; - buf[3] = val & 0xff; - - MD5_Update(context, buf, 4); -} - -void MD5_UpdateString(md5_context_t *context, char *str) -{ - MD5_Update(context, (byte *) str, strlen(str) + 1); -} - -/* - * Final wrapup - pad to 64-byte boundary with the bit pattern - * 1 0* (64-bit count of bits processed, MSB-first) - */ -void -MD5_Final(byte digest[16], md5_context_t *ctx) -{ - int count = ctx->bytes[0] & 0x3f; /* Number of bytes in ctx->in */ - byte *p = (byte *)ctx->in + count; - - /* Set the first char of padding to 0x80. There is always room. */ - *p++ = 0x80; - - /* Bytes of padding needed to make 56 bytes (-8..55) */ - count = 56 - 1 - count; - - if (count < 0) { /* Padding forces an extra block */ - memset(p, 0, count + 8); - ByteSwapBlock(ctx->in, 16); - MD5_Transform(ctx->buf, ctx->in); - p = (byte *)ctx->in; - count = 56; - } - memset(p, 0, count); - ByteSwapBlock(ctx->in, 14); - - /* Append length in bits and transform */ - ctx->in[14] = ctx->bytes[0] << 3; - ctx->in[15] = ctx->bytes[1] << 3 | ctx->bytes[0] >> 29; - MD5_Transform(ctx->buf, ctx->in); - - ByteSwapBlock(ctx->buf, 4); - memcpy(digest, ctx->buf, 16); - memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */ -} - -#ifndef ASM_MD5 - -/* The four core functions - F1 is optimized somewhat */ - -/* #define F1(x, y, z) (x & y | ~x & z) */ -#define F1(x, y, z) (z ^ (x & (y ^ z))) -#define F2(x, y, z) F1(z, x, y) -#define F3(x, y, z) (x ^ y ^ z) -#define F4(x, y, z) (y ^ (x | ~z)) - -/* This is the central step in the MD5 algorithm. */ -#define MD5STEP(f,w,x,y,z,in,s) \ - (w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x) - -/* - * The core of the MD5 algorithm, this alters an existing MD5 hash to - * reflect the addition of 16 longwords of new data. MD5_Update blocks - * the data and converts bytes into longwords for this routine. - */ -void -MD5_Transform(uint32_t buf[4], uint32_t const in[16]) -{ - register uint32_t a, b, c, d; - - a = buf[0]; - b = buf[1]; - c = buf[2]; - d = buf[3]; - - MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7); - MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); - MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17); - MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); - MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); - MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12); - MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17); - MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22); - MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7); - MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); - MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); - MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); - MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); - MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); - MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); - MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); - - MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5); - MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9); - MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); - MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); - MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5); - MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); - MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); - MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); - MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); - MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); - MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); - MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20); - MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); - MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); - MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14); - MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); - - MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4); - MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11); - MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); - MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); - MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4); - MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); - MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); - MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); - MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); - MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11); - MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16); - MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23); - MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4); - MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); - MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); - MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23); - - MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6); - MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10); - MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); - MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21); - MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); - MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); - MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); - MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21); - MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); - MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); - MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15); - MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); - MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6); - MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); - MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); - MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21); - - buf[0] += a; - buf[1] += b; - buf[2] += c; - buf[3] += d; -} - -#endif - diff --git a/src/md5.h b/src/md5.h deleted file mode 100644 index 5df7f686..00000000 --- a/src/md5.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * This is the header file for the MD5 message-digest algorithm. - * The algorithm is due to Ron Rivest. This code was - * written by Colin Plumb in 1993, no copyright is claimed. - * This code is in the public domain; do with it what you wish. - * - * Equivalent code is available from RSA Data Security, Inc. - * This code has been tested against that, and is equivalent, - * except that you don't need to include two pages of legalese - * with every copy. - * - * To compute the message digest of a chunk of bytes, declare an - * md5_context_s structure, pass it to MD5_Init, call MD5_Update as - * needed on buffers full of bytes, and then call MD5_Final, which - * will fill a supplied 16-byte array with the digest. - * - * Changed so as no longer to depend on Colin Plumb's `usual.h' - * header definitions; now uses stuff from dpkg's config.h - * - Ian Jackson <ian@chiark.greenend.org.uk>. - * Still in the public domain. - */ - -#ifndef MD5_H -#define MD5_H - -#include "doomtype.h" - -typedef struct md5_context_s md5_context_t; -typedef byte md5_digest_t[16]; - -struct md5_context_s { - uint32_t buf[4]; - uint32_t bytes[2]; - uint32_t in[16]; -}; - -void MD5_Init(md5_context_t *context); -void MD5_Update(md5_context_t *context, byte const *buf, unsigned len); -void MD5_UpdateInt32(md5_context_t *context, unsigned int val); -void MD5_UpdateString(md5_context_t *context, char *str); -void MD5_Final(unsigned char digest[16], md5_context_t *context); -void MD5_Transform(uint32_t buf[4], uint32_t const in[16]); - -#endif /* !MD5_H */ - diff --git a/src/net_client.c b/src/net_client.c index 083dca8b..abd94145 100644 --- a/src/net_client.c +++ b/src/net_client.c @@ -154,8 +154,8 @@ static unsigned int gamedata_recv_time; // Hash checksums of our wad directory and dehacked data. -md5_digest_t net_local_wad_md5sum; -md5_digest_t net_local_deh_md5sum; +sha1_digest_t net_local_wad_sha1sum; +sha1_digest_t net_local_deh_sha1sum; // Are we playing with the freedoom IWAD? @@ -905,8 +905,8 @@ boolean NET_CL_Connect(net_addr_t *addr, net_connect_data_t *data) server_addr = addr; - memcpy(net_local_wad_md5sum, data->wad_md5sum, sizeof(md5_digest_t)); - memcpy(net_local_deh_md5sum, data->deh_md5sum, sizeof(md5_digest_t)); + memcpy(net_local_wad_sha1sum, data->wad_sha1sum, sizeof(sha1_digest_t)); + memcpy(net_local_deh_sha1sum, data->deh_sha1sum, sizeof(sha1_digest_t)); net_local_is_freedoom = data->is_freedoom; // create a new network I/O context and add just the @@ -1049,6 +1049,17 @@ void NET_CL_Init(void) net_player_name = getenv("USER"); if (net_player_name == NULL) net_player_name = getenv("USERNAME"); + + // On Windows, environment variables are in OEM codepage + // encoding, so convert to UTF8: + +#ifdef _WIN32 + if (net_player_name != NULL) + { + net_player_name = M_OEMToUTF8(net_player_name); + } +#endif + if (net_player_name == NULL) net_player_name = "Player"; } diff --git a/src/net_client.h b/src/net_client.h index 242bf958..3914849d 100644 --- a/src/net_client.h +++ b/src/net_client.h @@ -26,7 +26,7 @@ #include "doomtype.h" #include "d_ticcmd.h" -#include "md5.h" +#include "sha1.h" #include "net_defs.h" boolean NET_CL_Connect(net_addr_t *addr, net_connect_data_t *data); @@ -46,11 +46,11 @@ extern net_waitdata_t net_client_wait_data; extern boolean net_waiting_for_start; extern char *net_player_name; -extern md5_digest_t net_server_wad_md5sum; -extern md5_digest_t net_server_deh_md5sum; +extern sha1_digest_t net_server_wad_sha1sum; +extern sha1_digest_t net_server_deh_sha1sum; extern unsigned int net_server_is_freedoom; -extern md5_digest_t net_local_wad_md5sum; -extern md5_digest_t net_local_deh_md5sum; +extern sha1_digest_t net_local_wad_sha1sum; +extern sha1_digest_t net_local_deh_sha1sum; extern unsigned int net_local_is_freedoom; extern boolean drone; diff --git a/src/net_defs.h b/src/net_defs.h index aa7b6f6e..ba50f48e 100644 --- a/src/net_defs.h +++ b/src/net_defs.h @@ -30,7 +30,7 @@ #include "doomtype.h" #include "d_ticcmd.h" -#include "md5.h" +#include "sha1.h" // Absolute maximum number of "nodes" in the game. This is different to // NET_MAXPLAYERS, as there may be observers that are not participating @@ -140,7 +140,13 @@ typedef enum NET_MASTER_PACKET_TYPE_ADD, NET_MASTER_PACKET_TYPE_ADD_RESPONSE, NET_MASTER_PACKET_TYPE_QUERY, - NET_MASTER_PACKET_TYPE_QUERY_RESPONSE + NET_MASTER_PACKET_TYPE_QUERY_RESPONSE, + NET_MASTER_PACKET_TYPE_GET_METADATA, + NET_MASTER_PACKET_TYPE_GET_METADATA_RESPONSE, + NET_MASTER_PACKET_TYPE_SIGN_START, + NET_MASTER_PACKET_TYPE_SIGN_START_RESPONSE, + NET_MASTER_PACKET_TYPE_SIGN_END, + NET_MASTER_PACKET_TYPE_SIGN_END_RESPONSE, } net_master_packet_type_t; // Settings specified when the client connects to the server. @@ -153,8 +159,8 @@ typedef struct int drone; int max_players; int is_freedoom; - md5_digest_t wad_md5sum; - md5_digest_t deh_md5sum; + sha1_digest_t wad_sha1sum; + sha1_digest_t deh_sha1sum; int player_class; } net_connect_data_t; @@ -239,8 +245,8 @@ typedef struct int consoleplayer; char player_names[NET_MAXPLAYERS][MAXPLAYERNAME]; char player_addrs[NET_MAXPLAYERS][MAXPLAYERNAME]; - md5_digest_t wad_md5sum; - md5_digest_t deh_md5sum; + sha1_digest_t wad_sha1sum; + sha1_digest_t deh_sha1sum; int is_freedoom; } net_waitdata_t; diff --git a/src/net_gui.c b/src/net_gui.c index 7fff33f6..14d0d943 100644 --- a/src/net_gui.c +++ b/src/net_gui.c @@ -184,13 +184,13 @@ static void UpdateGUI(net_gamesettings_t *settings) TXT_SetWindowAction(window, TXT_HORIZ_RIGHT, startgame); } -static void PrintMD5Digest(char *s, byte *digest) +static void PrintSHA1Digest(char *s, byte *digest) { unsigned int i; printf("%s: ", s); - for (i=0; i<sizeof(md5_digest_t); ++i) + for (i=0; i<sizeof(sha1_digest_t); ++i) { printf("%02x", digest[i]); } @@ -198,7 +198,7 @@ static void PrintMD5Digest(char *s, byte *digest) printf("\n"); } -static void CheckMD5Sums(void) +static void CheckSHA1Sums(void) { boolean correct_wad, correct_deh; boolean same_freedoom; @@ -209,12 +209,12 @@ static void CheckMD5Sums(void) return; } - correct_wad = memcmp(net_local_wad_md5sum, - net_client_wait_data.wad_md5sum, - sizeof(md5_digest_t)) == 0; - correct_deh = memcmp(net_local_deh_md5sum, - net_client_wait_data.deh_md5sum, - sizeof(md5_digest_t)) == 0; + correct_wad = memcmp(net_local_wad_sha1sum, + net_client_wait_data.wad_sha1sum, + sizeof(sha1_digest_t)) == 0; + correct_deh = memcmp(net_local_deh_sha1sum, + net_client_wait_data.deh_sha1sum, + sizeof(sha1_digest_t)) == 0; same_freedoom = net_client_wait_data.is_freedoom == net_local_is_freedoom; if (correct_wad && correct_deh && same_freedoom) @@ -224,9 +224,9 @@ static void CheckMD5Sums(void) if (!correct_wad) { - printf("Warning: WAD MD5 does not match server:\n"); - PrintMD5Digest("Local", net_local_wad_md5sum); - PrintMD5Digest("Server", net_client_wait_data.wad_md5sum); + printf("Warning: WAD SHA1 does not match server:\n"); + PrintSHA1Digest("Local", net_local_wad_sha1sum); + PrintSHA1Digest("Server", net_client_wait_data.wad_sha1sum); } if (!same_freedoom) @@ -239,9 +239,9 @@ static void CheckMD5Sums(void) if (!correct_deh) { - printf("Warning: Dehacked MD5 does not match server:\n"); - PrintMD5Digest("Local", net_local_deh_md5sum); - PrintMD5Digest("Server", net_client_wait_data.deh_md5sum); + printf("Warning: Dehacked SHA1 does not match server:\n"); + PrintSHA1Digest("Local", net_local_deh_sha1sum); + PrintSHA1Digest("Server", net_client_wait_data.deh_sha1sum); } window = TXT_NewWindow("WARNING"); @@ -308,7 +308,7 @@ void NET_WaitForStart(net_gamesettings_t *settings) while (net_waiting_for_start) { UpdateGUI(settings); - CheckMD5Sums(); + CheckSHA1Sums(); TXT_DispatchEvents(); TXT_DrawDesktop(); diff --git a/src/net_query.c b/src/net_query.c index 26bcf26a..392ee022 100644 --- a/src/net_query.c +++ b/src/net_query.c @@ -46,6 +46,10 @@ #define QUERY_TIMEOUT_SECS 2 +// Time to wait for secure demo signatures before declaring a timeout. + +#define SIGNATURE_TIMEOUT_SECS 5 + // Number of query attempts to make before giving up on a server. #define QUERY_MAX_ATTEMPTS 3 @@ -89,6 +93,8 @@ static boolean query_loop_running = false; static boolean printed_header = false; static int last_query_time = 0; +static char *securedemo_start_message = NULL; + // Resolve the master server address. net_addr_t *NET_Query_ResolveMaster(net_context_t *context) @@ -815,3 +821,124 @@ net_addr_t *NET_FindLANServer(void) } } +// Block until a packet of the given type is received from the given +// address. + +static net_packet_t *BlockForPacket(net_addr_t *addr, unsigned int packet_type, + unsigned int timeout_ms) +{ + net_packet_t *packet; + net_addr_t *packet_src; + unsigned int read_packet_type; + unsigned int start_time; + + start_time = I_GetTimeMS(); + + while (I_GetTimeMS() < start_time + timeout_ms) + { + if (!NET_RecvPacket(query_context, &packet_src, &packet)) + { + I_Sleep(20); + continue; + } + + if (packet_src == addr + && NET_ReadInt16(packet, &read_packet_type) + && packet_type == read_packet_type) + { + return packet; + } + + NET_FreePacket(packet); + } + + // Timeout - no response. + + return NULL; +} + +// Query master server for secure demo start seed value. + +boolean NET_StartSecureDemo(prng_seed_t seed) +{ + net_packet_t *request, *response; + net_addr_t *master_addr; + char *signature; + boolean result; + + NET_Query_Init(); + master_addr = NET_Query_ResolveMaster(query_context); + + // Send request packet to master server. + + request = NET_NewPacket(10); + NET_WriteInt16(request, NET_MASTER_PACKET_TYPE_SIGN_START); + NET_SendPacket(master_addr, request); + NET_FreePacket(request); + + // Block for response and read contents. + // The signed start message will be saved for later. + + response = BlockForPacket(master_addr, + NET_MASTER_PACKET_TYPE_SIGN_START_RESPONSE, + SIGNATURE_TIMEOUT_SECS * 1000); + + result = false; + + if (response != NULL) + { + if (NET_ReadPRNGSeed(response, seed)) + { + signature = NET_ReadString(response); + + if (signature != NULL) + { + securedemo_start_message = strdup(signature); + result = true; + } + } + + NET_FreePacket(response); + } + + return result; +} + +// Query master server for secure demo end signature. + +char *NET_EndSecureDemo(sha1_digest_t demo_hash) +{ + net_packet_t *request, *response; + net_addr_t *master_addr; + char *signature; + + master_addr = NET_Query_ResolveMaster(query_context); + + // Construct end request and send to master server. + + request = NET_NewPacket(10); + NET_WriteInt16(request, NET_MASTER_PACKET_TYPE_SIGN_END); + NET_WriteSHA1Sum(request, demo_hash); + NET_WriteString(request, securedemo_start_message); + NET_SendPacket(master_addr, request); + NET_FreePacket(request); + + // Block for response. The response packet simply contains a string + // with the ASCII signature. + + response = BlockForPacket(master_addr, + NET_MASTER_PACKET_TYPE_SIGN_END_RESPONSE, + SIGNATURE_TIMEOUT_SECS * 1000); + + if (response == NULL) + { + return NULL; + } + + signature = NET_ReadString(response); + + NET_FreePacket(response); + + return signature; +} + diff --git a/src/net_sdl.c b/src/net_sdl.c index 6a4f24dc..de86172f 100644 --- a/src/net_sdl.c +++ b/src/net_sdl.c @@ -44,6 +44,7 @@ #define DEFAULT_PORT 2342 +static boolean initted = false; static int port = DEFAULT_PORT; static UDPsocket udpsocket; static UDPpacket *recvpacket; @@ -162,6 +163,9 @@ static boolean NET_SDL_InitClient(void) { int p; + if (initted) + return true; + //! // @category net // @arg <n> @@ -189,13 +193,18 @@ static boolean NET_SDL_InitClient(void) srand(time(NULL)); #endif + initted = true; + return true; } static boolean NET_SDL_InitServer(void) { int p; - + + if (initted) + return true; + p = M_CheckParmWithArgs("-port", 1); if (p > 0) port = atoi(myargv[p+1]); @@ -214,6 +223,8 @@ static boolean NET_SDL_InitServer(void) srand(time(NULL)); #endif + initted = true; + return true; } diff --git a/src/net_server.c b/src/net_server.c index b837bd70..585f0eac 100644 --- a/src/net_server.c +++ b/src/net_server.c @@ -50,6 +50,10 @@ #define MASTER_REFRESH_PERIOD 20 * 60 /* 20 minutes */ +// How often to re-resolve the address of the master server? + +#define MASTER_RESOLVE_PERIOD 8 * 60 * 60 /* 8 hours */ + typedef enum { // waiting for the game to start @@ -101,10 +105,10 @@ typedef struct boolean drone; - // MD5 hash sums of the client's WAD directory and dehacked data + // SHA1 hash sums of the client's WAD directory and dehacked data - md5_digest_t wad_md5sum; - md5_digest_t deh_md5sum; + sha1_digest_t wad_sha1sum; + sha1_digest_t deh_sha1sum; // Is this client is playing with the Freedoom IWAD? @@ -150,6 +154,7 @@ static net_gamesettings_t sv_settings; static net_addr_t *master_server = NULL; static unsigned int master_refresh_time; +static unsigned int master_resolve_time; // receive window @@ -646,10 +651,10 @@ static void NET_SV_ParseSYN(net_packet_t *packet, sv_gamemission = data.gamemission; } - // Save the MD5 checksums + // Save the SHA1 checksums - memcpy(client->wad_md5sum, data.wad_md5sum, sizeof(md5_digest_t)); - memcpy(client->deh_md5sum, data.deh_md5sum, sizeof(md5_digest_t)); + memcpy(client->wad_sha1sum, data.wad_sha1sum, sizeof(sha1_digest_t)); + memcpy(client->deh_sha1sum, data.deh_sha1sum, sizeof(sha1_digest_t)); client->is_freedoom = data.is_freedoom; client->max_players = data.max_players; @@ -1287,10 +1292,10 @@ static void NET_SV_SendWaitingData(net_client_t *client) controller = client; } - memcpy(&wait_data.wad_md5sum, &controller->wad_md5sum, - sizeof(md5_digest_t)); - memcpy(&wait_data.deh_md5sum, &controller->deh_md5sum, - sizeof(md5_digest_t)); + memcpy(&wait_data.wad_sha1sum, &controller->wad_sha1sum, + sizeof(sha1_digest_t)); + memcpy(&wait_data.deh_sha1sum, &controller->deh_sha1sum, + sizeof(sha1_digest_t)); wait_data.is_freedoom = controller->is_freedoom; // set name and address of each player: @@ -1605,6 +1610,42 @@ void NET_SV_Init(void) server_initialized = true; } +static void UpdateMasterServer(void) +{ + unsigned int now; + + now = I_GetTimeMS(); + + // The address of the master server can change. Periodically + // re-resolve the master server to update. + + if (now - master_resolve_time > MASTER_RESOLVE_PERIOD * 1000) + { + net_addr_t *new_addr; + printf("Re-resolve master server\n"); + + new_addr = NET_Query_ResolveMaster(server_context); + + // Has the master server changed address? + + if (new_addr != NULL && new_addr != master_server) + { + NET_FreeAddress(master_server); + master_server = new_addr; + } + + master_resolve_time = now; + } + + // Possibly refresh our registration with the master server. + + if (now - master_refresh_time > MASTER_REFRESH_PERIOD * 1000) + { + NET_Query_AddToMaster(master_server); + master_refresh_time = now; + } +} + void NET_SV_RegisterWithMaster(void) { //! @@ -1629,6 +1670,7 @@ void NET_SV_RegisterWithMaster(void) { NET_Query_AddToMaster(master_server); master_refresh_time = I_GetTimeMS(); + master_resolve_time = master_refresh_time; } } @@ -1652,13 +1694,9 @@ void NET_SV_Run(void) NET_FreePacket(packet); } - // Possibly refresh our registration with the master server. - - if (master_server != NULL - && I_GetTimeMS() - master_refresh_time > MASTER_REFRESH_PERIOD * 1000) + if (master_server != NULL) { - NET_Query_AddToMaster(master_server); - master_refresh_time = I_GetTimeMS(); + UpdateMasterServer(); } // "Run" any clients that may have things to do, independent of responses diff --git a/src/net_structrw.c b/src/net_structrw.c index f68a6130..8f6f8d57 100644 --- a/src/net_structrw.c +++ b/src/net_structrw.c @@ -39,8 +39,8 @@ void NET_WriteConnectData(net_packet_t *packet, net_connect_data_t *data) NET_WriteInt8(packet, data->drone); NET_WriteInt8(packet, data->max_players); NET_WriteInt8(packet, data->is_freedoom); - NET_WriteMD5Sum(packet, data->wad_md5sum); - NET_WriteMD5Sum(packet, data->deh_md5sum); + NET_WriteSHA1Sum(packet, data->wad_sha1sum); + NET_WriteSHA1Sum(packet, data->deh_sha1sum); NET_WriteInt8(packet, data->player_class); } @@ -52,8 +52,8 @@ boolean NET_ReadConnectData(net_packet_t *packet, net_connect_data_t *data) && NET_ReadInt8(packet, (unsigned int *) &data->drone) && NET_ReadInt8(packet, (unsigned int *) &data->max_players) && NET_ReadInt8(packet, (unsigned int *) &data->is_freedoom) - && NET_ReadMD5Sum(packet, data->wad_md5sum) - && NET_ReadMD5Sum(packet, data->deh_md5sum) + && NET_ReadSHA1Sum(packet, data->wad_sha1sum) + && NET_ReadSHA1Sum(packet, data->deh_sha1sum) && NET_ReadInt8(packet, (unsigned int *) &data->player_class); } @@ -461,8 +461,8 @@ void NET_WriteWaitData(net_packet_t *packet, net_waitdata_t *data) NET_WriteString(packet, data->player_addrs[i]); } - NET_WriteMD5Sum(packet, data->wad_md5sum); - NET_WriteMD5Sum(packet, data->deh_md5sum); + NET_WriteSHA1Sum(packet, data->wad_sha1sum); + NET_WriteSHA1Sum(packet, data->deh_sha1sum); NET_WriteInt8(packet, data->is_freedoom); } @@ -501,39 +501,59 @@ boolean NET_ReadWaitData(net_packet_t *packet, net_waitdata_t *data) strcpy(data->player_addrs[i], s); } - return NET_ReadMD5Sum(packet, data->wad_md5sum) - && NET_ReadMD5Sum(packet, data->deh_md5sum) + return NET_ReadSHA1Sum(packet, data->wad_sha1sum) + && NET_ReadSHA1Sum(packet, data->deh_sha1sum) && NET_ReadInt8(packet, (unsigned int *) &data->is_freedoom); } -boolean NET_ReadMD5Sum(net_packet_t *packet, md5_digest_t digest) +static boolean NET_ReadBlob(net_packet_t *packet, uint8_t *buf, size_t len) { unsigned int b; int i; - for (i=0; i<16; ++i) + for (i=0; i<len; ++i) { if (!NET_ReadInt8(packet, &b)) { return false; } - digest[i] = b; + buf[i] = b; } return true; } -void NET_WriteMD5Sum(net_packet_t *packet, md5_digest_t digest) +static void NET_WriteBlob(net_packet_t *packet, uint8_t *buf, size_t len) { int i; - for (i=0; i<16; ++i) + for (i=0; i<len; ++i) { - NET_WriteInt8(packet, digest[i]); + NET_WriteInt8(packet, buf[i]); } } +boolean NET_ReadSHA1Sum(net_packet_t *packet, sha1_digest_t digest) +{ + return NET_ReadBlob(packet, digest, sizeof(sha1_digest_t)); +} + +void NET_WriteSHA1Sum(net_packet_t *packet, sha1_digest_t digest) +{ + NET_WriteBlob(packet, digest, sizeof(sha1_digest_t)); +} + +boolean NET_ReadPRNGSeed(net_packet_t *packet, prng_seed_t seed) +{ + return NET_ReadBlob(packet, seed, sizeof(prng_seed_t)); +} + +void NET_WritePRNGSeed(net_packet_t *packet, prng_seed_t seed) +{ + NET_WriteBlob(packet, seed, sizeof(prng_seed_t)); +} + // "Safe" version of puts, for displaying messages received from the // network. diff --git a/src/net_structrw.h b/src/net_structrw.h index e894e170..3d446841 100644 --- a/src/net_structrw.h +++ b/src/net_structrw.h @@ -22,7 +22,8 @@ #ifndef NET_STRUCTRW_H #define NET_STRUCTRW_H -#include "md5.h" +#include "aes_prng.h" +#include "sha1.h" #include "net_defs.h" #include "net_packet.h" @@ -43,12 +44,15 @@ extern void NET_TiccmdPatch(ticcmd_t *src, net_ticdiff_t *diff, ticcmd_t *dest); boolean NET_ReadFullTiccmd(net_packet_t *packet, net_full_ticcmd_t *cmd, boolean lowres_turn); void NET_WriteFullTiccmd(net_packet_t *packet, net_full_ticcmd_t *cmd, boolean lowres_turn); -boolean NET_ReadMD5Sum(net_packet_t *packet, md5_digest_t digest); -void NET_WriteMD5Sum(net_packet_t *packet, md5_digest_t digest); +boolean NET_ReadSHA1Sum(net_packet_t *packet, sha1_digest_t digest); +void NET_WriteSHA1Sum(net_packet_t *packet, sha1_digest_t digest); void NET_WriteWaitData(net_packet_t *packet, net_waitdata_t *data); boolean NET_ReadWaitData(net_packet_t *packet, net_waitdata_t *data); void NET_SafePuts(char *msg); +boolean NET_ReadPRNGSeed(net_packet_t *packet, prng_seed_t seed); +void NET_WritePRNGSeed(net_packet_t *packet, prng_seed_t seed); + #endif /* #ifndef NET_STRUCTRW_H */ diff --git a/src/setup/Makefile.am b/src/setup/Makefile.am index 7fe051ee..f58c6294 100644 --- a/src/setup/Makefile.am +++ b/src/setup/Makefile.am @@ -31,7 +31,7 @@ appdir = $(prefix)/share/applications app_DATA = @PROGRAM_PREFIX@setup.desktop @PROGRAM_PREFIX@setup.desktop : setup.desktop - cp $^ $@ + cp setup.desktop $@ if HAVE_PYTHON diff --git a/src/setup/multiplayer.c b/src/setup/multiplayer.c index d9bda1fe..dc0643e3 100644 --- a/src/setup/multiplayer.c +++ b/src/setup/multiplayer.c @@ -978,6 +978,7 @@ void SetChatMacroDefaults(void) int i; char *defaults[] = { + HUSTR_CHATMACRO0, HUSTR_CHATMACRO1, HUSTR_CHATMACRO2, HUSTR_CHATMACRO3, @@ -987,7 +988,6 @@ void SetChatMacroDefaults(void) HUSTR_CHATMACRO7, HUSTR_CHATMACRO8, HUSTR_CHATMACRO9, - HUSTR_CHATMACRO0, }; // If the chat macros have not been set, initialize with defaults. @@ -1001,6 +1001,28 @@ void SetChatMacroDefaults(void) } } +#ifdef _WIN32 + +#define WIN32_LEAN_AND_MEAN +#include <windows.h> + +char *M_OEMToUTF8(const char *oem) +{ + unsigned int len = strlen(oem) + 1; + wchar_t *tmp; + char *result; + + tmp = malloc(len * sizeof(wchar_t)); + MultiByteToWideChar(CP_OEMCP, 0, oem, len, tmp, len); + result = malloc(len * 4); + WideCharToMultiByte(CP_UTF8, 0, tmp, len, result, len * 4, NULL, NULL); + free(tmp); + + return result; +} + +#endif + void SetPlayerNameDefault(void) { if (net_player_name == NULL) @@ -1013,6 +1035,16 @@ void SetPlayerNameDefault(void) net_player_name = strdup(getenv("USERNAME")); } + // On Windows, environment variables are in OEM codepage + // encoding, so convert to UTF8: + +#ifdef _WIN32 + if (net_player_name != NULL) + { + net_player_name = M_OEMToUTF8(net_player_name); + } +#endif + if (net_player_name == NULL) { net_player_name = strdup("player"); diff --git a/src/sha1.c b/src/sha1.c new file mode 100644 index 00000000..06ab40ad --- /dev/null +++ b/src/sha1.c @@ -0,0 +1,319 @@ +/* sha1.c - SHA1 hash function + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + * + * Please see below for more legal information! + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <http://www.gnu.org/licenses/>. + */ + + +/* Test vectors: + * + * "abc" + * A999 3E36 4706 816A BA3E 2571 7850 C26C 9CD0 D89D + * + * "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" + * 8498 3E44 1C3B D26E BAAE 4AA1 F951 29E5 E546 70F1 + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <assert.h> + +#include "i_swap.h" +#include "sha1.h" + +void SHA1_Init(sha1_context_t *hd) +{ + hd->h0 = 0x67452301; + hd->h1 = 0xefcdab89; + hd->h2 = 0x98badcfe; + hd->h3 = 0x10325476; + hd->h4 = 0xc3d2e1f0; + hd->nblocks = 0; + hd->count = 0; +} + + +/**************** + * Transform the message X which consists of 16 32-bit-words + */ +static void Transform(sha1_context_t *hd, byte *data) +{ + uint32_t a,b,c,d,e,tm; + uint32_t x[16]; + + /* get values from the chaining vars */ + a = hd->h0; + b = hd->h1; + c = hd->h2; + d = hd->h3; + e = hd->h4; + +#ifdef SYS_BIG_ENDIAN + memcpy(x, data, 64); +#else + { + int i; + byte *p2; + for(i=0, p2=(byte*)x; i < 16; i++, p2 += 4 ) + { + p2[3] = *data++; + p2[2] = *data++; + p2[1] = *data++; + p2[0] = *data++; + } + } +#endif + + +#define K1 0x5A827999L +#define K2 0x6ED9EBA1L +#define K3 0x8F1BBCDCL +#define K4 0xCA62C1D6L +#define F1(x,y,z) ( z ^ ( x & ( y ^ z ) ) ) +#define F2(x,y,z) ( x ^ y ^ z ) +#define F3(x,y,z) ( ( x & y ) | ( z & ( x | y ) ) ) +#define F4(x,y,z) ( x ^ y ^ z ) + +#define rol(x,n) ( ((x) << (n)) | ((x) >> (32-(n))) ) + +#define M(i) ( tm = x[i&0x0f] ^ x[(i-14)&0x0f] \ + ^ x[(i-8)&0x0f] ^ x[(i-3)&0x0f] \ + , (x[i&0x0f] = rol(tm,1)) ) + +#define R(a,b,c,d,e,f,k,m) do { e += rol( a, 5 ) \ + + f( b, c, d ) \ + + k \ + + m; \ + b = rol( b, 30 ); \ + } while(0) + R( a, b, c, d, e, F1, K1, x[ 0] ); + R( e, a, b, c, d, F1, K1, x[ 1] ); + R( d, e, a, b, c, F1, K1, x[ 2] ); + R( c, d, e, a, b, F1, K1, x[ 3] ); + R( b, c, d, e, a, F1, K1, x[ 4] ); + R( a, b, c, d, e, F1, K1, x[ 5] ); + R( e, a, b, c, d, F1, K1, x[ 6] ); + R( d, e, a, b, c, F1, K1, x[ 7] ); + R( c, d, e, a, b, F1, K1, x[ 8] ); + R( b, c, d, e, a, F1, K1, x[ 9] ); + R( a, b, c, d, e, F1, K1, x[10] ); + R( e, a, b, c, d, F1, K1, x[11] ); + R( d, e, a, b, c, F1, K1, x[12] ); + R( c, d, e, a, b, F1, K1, x[13] ); + R( b, c, d, e, a, F1, K1, x[14] ); + R( a, b, c, d, e, F1, K1, x[15] ); + R( e, a, b, c, d, F1, K1, M(16) ); + R( d, e, a, b, c, F1, K1, M(17) ); + R( c, d, e, a, b, F1, K1, M(18) ); + R( b, c, d, e, a, F1, K1, M(19) ); + R( a, b, c, d, e, F2, K2, M(20) ); + R( e, a, b, c, d, F2, K2, M(21) ); + R( d, e, a, b, c, F2, K2, M(22) ); + R( c, d, e, a, b, F2, K2, M(23) ); + R( b, c, d, e, a, F2, K2, M(24) ); + R( a, b, c, d, e, F2, K2, M(25) ); + R( e, a, b, c, d, F2, K2, M(26) ); + R( d, e, a, b, c, F2, K2, M(27) ); + R( c, d, e, a, b, F2, K2, M(28) ); + R( b, c, d, e, a, F2, K2, M(29) ); + R( a, b, c, d, e, F2, K2, M(30) ); + R( e, a, b, c, d, F2, K2, M(31) ); + R( d, e, a, b, c, F2, K2, M(32) ); + R( c, d, e, a, b, F2, K2, M(33) ); + R( b, c, d, e, a, F2, K2, M(34) ); + R( a, b, c, d, e, F2, K2, M(35) ); + R( e, a, b, c, d, F2, K2, M(36) ); + R( d, e, a, b, c, F2, K2, M(37) ); + R( c, d, e, a, b, F2, K2, M(38) ); + R( b, c, d, e, a, F2, K2, M(39) ); + R( a, b, c, d, e, F3, K3, M(40) ); + R( e, a, b, c, d, F3, K3, M(41) ); + R( d, e, a, b, c, F3, K3, M(42) ); + R( c, d, e, a, b, F3, K3, M(43) ); + R( b, c, d, e, a, F3, K3, M(44) ); + R( a, b, c, d, e, F3, K3, M(45) ); + R( e, a, b, c, d, F3, K3, M(46) ); + R( d, e, a, b, c, F3, K3, M(47) ); + R( c, d, e, a, b, F3, K3, M(48) ); + R( b, c, d, e, a, F3, K3, M(49) ); + R( a, b, c, d, e, F3, K3, M(50) ); + R( e, a, b, c, d, F3, K3, M(51) ); + R( d, e, a, b, c, F3, K3, M(52) ); + R( c, d, e, a, b, F3, K3, M(53) ); + R( b, c, d, e, a, F3, K3, M(54) ); + R( a, b, c, d, e, F3, K3, M(55) ); + R( e, a, b, c, d, F3, K3, M(56) ); + R( d, e, a, b, c, F3, K3, M(57) ); + R( c, d, e, a, b, F3, K3, M(58) ); + R( b, c, d, e, a, F3, K3, M(59) ); + R( a, b, c, d, e, F4, K4, M(60) ); + R( e, a, b, c, d, F4, K4, M(61) ); + R( d, e, a, b, c, F4, K4, M(62) ); + R( c, d, e, a, b, F4, K4, M(63) ); + R( b, c, d, e, a, F4, K4, M(64) ); + R( a, b, c, d, e, F4, K4, M(65) ); + R( e, a, b, c, d, F4, K4, M(66) ); + R( d, e, a, b, c, F4, K4, M(67) ); + R( c, d, e, a, b, F4, K4, M(68) ); + R( b, c, d, e, a, F4, K4, M(69) ); + R( a, b, c, d, e, F4, K4, M(70) ); + R( e, a, b, c, d, F4, K4, M(71) ); + R( d, e, a, b, c, F4, K4, M(72) ); + R( c, d, e, a, b, F4, K4, M(73) ); + R( b, c, d, e, a, F4, K4, M(74) ); + R( a, b, c, d, e, F4, K4, M(75) ); + R( e, a, b, c, d, F4, K4, M(76) ); + R( d, e, a, b, c, F4, K4, M(77) ); + R( c, d, e, a, b, F4, K4, M(78) ); + R( b, c, d, e, a, F4, K4, M(79) ); + + /* update chainig vars */ + hd->h0 += a; + hd->h1 += b; + hd->h2 += c; + hd->h3 += d; + hd->h4 += e; +} + + +/* Update the message digest with the contents + * of INBUF with length INLEN. + */ +void SHA1_Update(sha1_context_t *hd, byte *inbuf, size_t inlen) +{ + if (hd->count == 64) + { + /* flush the buffer */ + Transform(hd, hd->buf); + hd->count = 0; + hd->nblocks++; + } + if (!inbuf) + return; + if (hd->count) + { + for (; inlen && hd->count < 64; inlen--) + hd->buf[hd->count++] = *inbuf++; + SHA1_Update(hd, NULL, 0); + if (!inlen) + return; + } + + while (inlen >= 64) + { + Transform(hd, inbuf); + hd->count = 0; + hd->nblocks++; + inlen -= 64; + inbuf += 64; + } + for (; inlen && hd->count < 64; inlen--) + hd->buf[hd->count++] = *inbuf++; +} + + +/* The routine final terminates the computation and + * returns the digest. + * The handle is prepared for a new cycle, but adding bytes to the + * handle will the destroy the returned buffer. + * Returns: 20 bytes representing the digest. + */ + +void SHA1_Final(sha1_digest_t digest, sha1_context_t *hd) +{ + uint32_t t, msb, lsb; + byte *p; + + SHA1_Update(hd, NULL, 0); /* flush */; + + t = hd->nblocks; + /* multiply by 64 to make a byte count */ + lsb = t << 6; + msb = t >> 26; + /* add the count */ + t = lsb; + if ((lsb += hd->count) < t) + msb++; + /* multiply by 8 to make a bit count */ + t = lsb; + lsb <<= 3; + msb <<= 3; + msb |= t >> 29; + + if (hd->count < 56) + { + /* enough room */ + hd->buf[hd->count++] = 0x80; /* pad */ + while (hd->count < 56) + hd->buf[hd->count++] = 0; /* pad */ + } + else + { + /* need one extra block */ + hd->buf[hd->count++] = 0x80; /* pad character */ + while (hd->count < 64) + hd->buf[hd->count++] = 0; + SHA1_Update(hd, NULL, 0); /* flush */; + memset(hd->buf, 0, 56 ); /* fill next block with zeroes */ + } + /* append the 64 bit count */ + hd->buf[56] = msb >> 24; + hd->buf[57] = msb >> 16; + hd->buf[58] = msb >> 8; + hd->buf[59] = msb ; + hd->buf[60] = lsb >> 24; + hd->buf[61] = lsb >> 16; + hd->buf[62] = lsb >> 8; + hd->buf[63] = lsb ; + Transform(hd, hd->buf); + + p = hd->buf; +#ifdef SYS_BIG_ENDIAN +#define X(a) do { *(uint32_t*)p = hd->h##a ; p += 4; } while(0) +#else /* little endian */ +#define X(a) do { *p++ = hd->h##a >> 24; *p++ = hd->h##a >> 16; \ + *p++ = hd->h##a >> 8; *p++ = hd->h##a; } while(0) +#endif + X(0); + X(1); + X(2); + X(3); + X(4); +#undef X + + memcpy(digest, hd->buf, sizeof(sha1_digest_t)); +} + +void SHA1_UpdateInt32(sha1_context_t *context, unsigned int val) +{ + byte buf[4]; + + buf[0] = (val >> 24) & 0xff; + buf[1] = (val >> 16) & 0xff; + buf[2] = (val >> 8) & 0xff; + buf[3] = val & 0xff; + + SHA1_Update(context, buf, 4); +} + +void SHA1_UpdateString(sha1_context_t *context, char *str) +{ + SHA1_Update(context, (byte *) str, strlen(str) + 1); +} + diff --git a/src/sha1.h b/src/sha1.h new file mode 100644 index 00000000..a3b86395 --- /dev/null +++ b/src/sha1.h @@ -0,0 +1,48 @@ +// Emacs style mode select -*- C++ -*- +//----------------------------------------------------------------------------- +// +// Copyright(C) 2012 Simon Howard +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA. +// +// DESCRIPTION: +// SHA-1 digest. +// +//----------------------------------------------------------------------------- + +#ifndef __SHA1_H__ +#define __SHA1_H__ + +#include "doomtype.h" + +typedef struct sha1_context_s sha1_context_t; +typedef byte sha1_digest_t[20]; + +struct sha1_context_s { + uint32_t h0,h1,h2,h3,h4; + uint32_t nblocks; + byte buf[64]; + int count; +}; + +void SHA1_Init(sha1_context_t *context); +void SHA1_Update(sha1_context_t *context, byte *buf, size_t len); +void SHA1_Final(sha1_digest_t digest, sha1_context_t *context); +void SHA1_UpdateInt32(sha1_context_t *context, unsigned int val); +void SHA1_UpdateString(sha1_context_t *context, char *str); + +#endif /* #ifndef __SHA1_H__ */ + diff --git a/src/strife/d_net.c b/src/strife/d_net.c index cd0a5e66..a3f5513c 100644 --- a/src/strife/d_net.c +++ b/src/strife/d_net.c @@ -220,8 +220,8 @@ static void SaveGameSettings(net_gamesettings_t *settings, // Read checksums of our WAD directory and dehacked information - W_Checksum(connect_data->wad_md5sum); - DEH_Checksum(connect_data->deh_md5sum); + W_Checksum(connect_data->wad_sha1sum); + DEH_Checksum(connect_data->deh_sha1sum); connect_data->is_freedoom = 0; } diff --git a/src/strife/deh_ammo.c b/src/strife/deh_ammo.c index 2c6a9022..952d8df3 100644 --- a/src/strife/deh_ammo.c +++ b/src/strife/deh_ammo.c @@ -89,14 +89,14 @@ static void DEH_AmmoParseLine(deh_context_t *context, char *line, void *tag) } } -static void DEH_AmmoMD5Hash(md5_context_t *context) +static void DEH_AmmoSHA1Hash(sha1_context_t *context) { int i; for (i=0; i<NUMAMMO; ++i) { - MD5_UpdateInt32(context, clipammo[i]); - MD5_UpdateInt32(context, maxammo[i]); + SHA1_UpdateInt32(context, clipammo[i]); + SHA1_UpdateInt32(context, maxammo[i]); } } @@ -107,6 +107,6 @@ deh_section_t deh_section_ammo = DEH_AmmoStart, DEH_AmmoParseLine, NULL, - DEH_AmmoMD5Hash, + DEH_AmmoSHA1Hash, }; diff --git a/src/strife/deh_frame.c b/src/strife/deh_frame.c index 9383b94f..dc68fde5 100644 --- a/src/strife/deh_frame.c +++ b/src/strife/deh_frame.c @@ -146,13 +146,13 @@ static void DEH_FrameParseLine(deh_context_t *context, char *line, void *tag) } } -static void DEH_FrameMD5Sum(md5_context_t *context) +static void DEH_FrameSHA1Sum(sha1_context_t *context) { int i; for (i=0; i<NUMSTATES; ++i) { - DEH_StructMD5Sum(context, &state_mapping, &states[i]); + DEH_StructSHA1Sum(context, &state_mapping, &states[i]); } } @@ -163,6 +163,6 @@ deh_section_t deh_section_frame = DEH_FrameStart, DEH_FrameParseLine, NULL, - DEH_FrameMD5Sum, + DEH_FrameSHA1Sum, }; diff --git a/src/strife/deh_misc.c b/src/strife/deh_misc.c index e3f2606c..aaebbadd 100644 --- a/src/strife/deh_misc.c +++ b/src/strife/deh_misc.c @@ -215,13 +215,13 @@ static void DEH_MiscParseLine(deh_context_t *context, char *line, void *tag) DEH_Warning(context, "Unknown Misc variable '%s'", variable_name); } -static void DEH_MiscMD5Sum(md5_context_t *context) +static void DEH_MiscSHA1Sum(sha1_context_t *context) { unsigned int i; for (i=0; i<arrlen(misc_settings); ++i) { - MD5_UpdateInt32(context, *misc_settings[i].value); + SHA1_UpdateInt32(context, *misc_settings[i].value); } } @@ -232,6 +232,6 @@ deh_section_t deh_section_misc = DEH_MiscStart, DEH_MiscParseLine, NULL, - DEH_MiscMD5Sum, + DEH_MiscSHA1Sum, }; diff --git a/src/strife/deh_ptr.c b/src/strife/deh_ptr.c index d757a178..0d1764c9 100644 --- a/src/strife/deh_ptr.c +++ b/src/strife/deh_ptr.c @@ -129,13 +129,13 @@ static void DEH_PointerParseLine(deh_context_t *context, char *line, void *tag) } } -static void DEH_PointerMD5Sum(md5_context_t *context) +static void DEH_PointerSHA1Sum(sha1_context_t *context) { int i; for (i=0; i<NUMSTATES; ++i) { - MD5_UpdateInt32(context, CodePointerIndex(&states[i].action)); + SHA1_UpdateInt32(context, CodePointerIndex(&states[i].action)); } } @@ -146,6 +146,6 @@ deh_section_t deh_section_pointer = DEH_PointerStart, DEH_PointerParseLine, NULL, - DEH_PointerMD5Sum, + DEH_PointerSHA1Sum, }; diff --git a/src/strife/deh_thing.c b/src/strife/deh_thing.c index 14b23b0a..a1c1f94d 100644 --- a/src/strife/deh_thing.c +++ b/src/strife/deh_thing.c @@ -119,13 +119,13 @@ static void DEH_ThingParseLine(deh_context_t *context, char *line, void *tag) DEH_SetMapping(context, &thing_mapping, mobj, variable_name, ivalue); } -static void DEH_ThingMD5Sum(md5_context_t *context) +static void DEH_ThingSHA1Sum(sha1_context_t *context) { int i; for (i=0; i<NUMMOBJTYPES; ++i) { - DEH_StructMD5Sum(context, &thing_mapping, &mobjinfo[i]); + DEH_StructSHA1Sum(context, &thing_mapping, &mobjinfo[i]); } } @@ -136,6 +136,6 @@ deh_section_t deh_section_thing = DEH_ThingStart, DEH_ThingParseLine, NULL, - DEH_ThingMD5Sum, + DEH_ThingSHA1Sum, }; diff --git a/src/strife/deh_weapon.c b/src/strife/deh_weapon.c index 8e89b93e..67cbe5b6 100644 --- a/src/strife/deh_weapon.c +++ b/src/strife/deh_weapon.c @@ -89,13 +89,13 @@ static void DEH_WeaponParseLine(deh_context_t *context, char *line, void *tag) DEH_SetMapping(context, &weapon_mapping, weapon, variable_name, ivalue); } -static void DEH_WeaponMD5Sum(md5_context_t *context) +static void DEH_WeaponSHA1Sum(sha1_context_t *context) { int i; for (i=0; i<NUMWEAPONS ;++i) { - DEH_StructMD5Sum(context, &weapon_mapping, &weaponinfo[i]); + DEH_StructSHA1Sum(context, &weapon_mapping, &weaponinfo[i]); } } @@ -106,6 +106,6 @@ deh_section_t deh_section_weapon = DEH_WeaponStart, DEH_WeaponParseLine, NULL, - DEH_WeaponMD5Sum, + DEH_WeaponSHA1Sum, }; diff --git a/src/w_checksum.c b/src/w_checksum.c index ceda95d8..28451fda 100644 --- a/src/w_checksum.c +++ b/src/w_checksum.c @@ -27,7 +27,7 @@ #include <stdlib.h> #include <string.h> -#include "md5.h" +#include "sha1.h" #include "w_checksum.h" #include "w_wad.h" @@ -60,35 +60,35 @@ static int GetFileNumber(wad_file_t *handle) return result; } -static void ChecksumAddLump(md5_context_t *md5_context, lumpinfo_t *lump) +static void ChecksumAddLump(sha1_context_t *sha1_context, lumpinfo_t *lump) { char buf[9]; strncpy(buf, lump->name, 8); buf[8] = '\0'; - MD5_UpdateString(md5_context, buf); - MD5_UpdateInt32(md5_context, GetFileNumber(lump->wad_file)); - MD5_UpdateInt32(md5_context, lump->position); - MD5_UpdateInt32(md5_context, lump->size); + SHA1_UpdateString(sha1_context, buf); + SHA1_UpdateInt32(sha1_context, GetFileNumber(lump->wad_file)); + SHA1_UpdateInt32(sha1_context, lump->position); + SHA1_UpdateInt32(sha1_context, lump->size); } -void W_Checksum(md5_digest_t digest) +void W_Checksum(sha1_digest_t digest) { - md5_context_t md5_context; + sha1_context_t sha1_context; unsigned int i; - MD5_Init(&md5_context); + SHA1_Init(&sha1_context); num_open_wadfiles = 0; // Go through each entry in the WAD directory, adding information - // about each entry to the MD5 hash. + // about each entry to the SHA1 hash. for (i=0; i<numlumps; ++i) { - ChecksumAddLump(&md5_context, &lumpinfo[i]); + ChecksumAddLump(&sha1_context, &lumpinfo[i]); } - MD5_Final(digest, &md5_context); + SHA1_Final(digest, &sha1_context); } diff --git a/src/w_checksum.h b/src/w_checksum.h index b762e9b6..23bcfefa 100644 --- a/src/w_checksum.h +++ b/src/w_checksum.h @@ -28,7 +28,7 @@ #include "doomtype.h" -extern void W_Checksum(md5_digest_t digest); +extern void W_Checksum(sha1_digest_t digest); #endif /* #ifndef W_CHECKSUM_H */ diff --git a/textscreen/Makefile.am b/textscreen/Makefile.am index c1c6f392..ef1bfb59 100644 --- a/textscreen/Makefile.am +++ b/textscreen/Makefile.am @@ -30,6 +30,7 @@ libtextscreen_a_SOURCES = \ txt_smallfont.h \ txt_strut.c txt_strut.h \ txt_table.c txt_table.h \ + txt_utf8.c txt_utf8.h \ txt_widget.c txt_widget.h \ txt_window.c txt_window.h \ txt_window_action.c txt_window_action.h \ diff --git a/textscreen/examples/guitest.c b/textscreen/examples/guitest.c index df79be2d..a5aad93f 100644 --- a/textscreen/examples/guitest.c +++ b/textscreen/examples/guitest.c @@ -179,6 +179,10 @@ void Window2(void) NULL); TXT_AddWidget(unselectable_table, TXT_NewLabel("* Unselectable table *")); + TXT_AddWidget(unselectable_table, TXT_NewLabel( + "This is a UTF-8 string:\n" + "\xc3\x80 bient\xc3\xb4t na\xc3\xaet " + "\xc3\xa9v\xc3\xaaque \xc3\xa0 l'\xc5\x93uvre p\xc3\xa8re.")); TXT_AddWidget(window, TXT_NewSeparator("Input boxes")); table = TXT_NewTable(2); diff --git a/textscreen/txt_button.c b/textscreen/txt_button.c index 989bd4fc..c8e3fc77 100644 --- a/textscreen/txt_button.c +++ b/textscreen/txt_button.c @@ -46,8 +46,6 @@ static void TXT_ButtonDrawer(TXT_UNCAST_ARG(button)) w = button->widget.w; - TXT_FGColor(TXT_COLOR_BRIGHT_WHITE); - TXT_SetWidgetBG(button); TXT_DrawString(button->label); diff --git a/textscreen/txt_checkbox.c b/textscreen/txt_checkbox.c index 8c3271cf..3bd0a054 100644 --- a/textscreen/txt_checkbox.c +++ b/textscreen/txt_checkbox.c @@ -43,12 +43,13 @@ static void TXT_CheckBoxSizeCalc(TXT_UNCAST_ARG(checkbox)) static void TXT_CheckBoxDrawer(TXT_UNCAST_ARG(checkbox)) { TXT_CAST_ARG(txt_checkbox_t, checkbox); + txt_saved_colors_t colors; int i; int w; w = checkbox->widget.w; - TXT_BGColor(TXT_WINDOW_BACKGROUND, 0); + TXT_SaveColors(&colors); TXT_FGColor(TXT_COLOR_BRIGHT_CYAN); TXT_DrawString("("); @@ -67,11 +68,10 @@ static void TXT_CheckBoxDrawer(TXT_UNCAST_ARG(checkbox)) TXT_DrawString(") "); + TXT_RestoreColors(&colors); TXT_SetWidgetBG(checkbox); - TXT_FGColor(TXT_COLOR_BRIGHT_WHITE); - TXT_DrawString(checkbox->label); - + for (i=strlen(checkbox->label); i < w-5; ++i) { TXT_DrawString(" "); diff --git a/textscreen/txt_dropdown.c b/textscreen/txt_dropdown.c index efc94683..652c9a36 100644 --- a/textscreen/txt_dropdown.c +++ b/textscreen/txt_dropdown.c @@ -230,7 +230,6 @@ static void TXT_DropdownListDrawer(TXT_UNCAST_ARG(list)) // Set bg/fg text colors. TXT_SetWidgetBG(list); - TXT_FGColor(TXT_COLOR_BRIGHT_WHITE); // Select a string to draw from the list, if the current value is // in range. Otherwise fall back to a default. diff --git a/textscreen/txt_gui.c b/textscreen/txt_gui.c index d00e3a65..09ba87ef 100644 --- a/textscreen/txt_gui.c +++ b/textscreen/txt_gui.c @@ -25,9 +25,55 @@ #include "txt_gui.h" #include "txt_io.h" #include "txt_main.h" +#include "txt_utf8.h" typedef struct txt_cliparea_s txt_cliparea_t; +// Mapping table that converts from the Extended ASCII codes in the +// CP437 codepage to Unicode character numbers. + +static const uint16_t cp437_unicode[] = { + 0x00c7, 0x00fc, 0x00e9, 0x00e2, // 80-8f + 0x00e4, 0x00e0, 0x00e5, 0x00e7, + 0x00ea, 0x00eb, 0x00e8, 0x00ef, + 0x00ee, 0x00ec, 0x00c4, 0x00c5, + + 0x00c9, 0x00e6, 0x00c6, 0x00f4, // 90-9f + 0x00f6, 0x00f2, 0x00fb, 0x00f9, + 0x00ff, 0x00d6, 0x00dc, 0x00a2, + 0x00a3, 0x00a5, 0x20a7, 0x0192, + + 0x00e1, 0x00ed, 0x00f3, 0x00fa, // a0-af + 0x00f1, 0x00d1, 0x00aa, 0x00ba, + 0x00bf, 0x2310, 0x00ac, 0x00bd, + 0x00bc, 0x00a1, 0x00ab, 0x00bb, + + 0x2591, 0x2592, 0x2593, 0x2502, // b0-bf + 0x2524, 0x2561, 0x2562, 0x2556, + 0x2555, 0x2563, 0x2551, 0x2557, + 0x255D, 0x255C, 0x255B, 0x2510, + + 0x2514, 0x2534, 0x252C, 0x251C, // c0-cf + 0x2500, 0x253C, 0x255E, 0x255F, + 0x255A, 0x2554, 0x2569, 0x2566, + 0x2560, 0x2550, 0x256C, 0x2567, + + 0x2568, 0x2564, 0x2565, 0x2559, // d0-df + 0x2558, 0x2552, 0x2553, 0x256B, + 0x256A, 0x2518, 0x250C, 0x2588, + 0x2584, 0x258C, 0x2590, 0x2580, + + 0x03B1, 0x00DF, 0x0393, 0x03C0, // e0-ef + 0x03A3, 0x03C3, 0x00B5, 0x03C4, + 0x03A6, 0x0398, 0x03A9, 0x03B4, + 0x221E, 0x03C6, 0x03B5, 0x2229, + + 0x2261, 0x00B1, 0x2265, 0x2264, // f0-ff + 0x2320, 0x2321, 0x00F7, 0x2248, + 0x00B0, 0x2219, 0x00B7, 0x221A, + 0x207F, 0x00B2, 0x25A0, 0x00A0, +}; + struct txt_cliparea_s { int x1, x2; @@ -127,11 +173,12 @@ void TXT_DrawShadow(int x, int y, int w, int h) void TXT_DrawWindowFrame(const char *title, int x, int y, int w, int h) { + txt_saved_colors_t colors; int x1, y1; int bx, by; + TXT_SaveColors(&colors); TXT_FGColor(TXT_COLOR_BRIGHT_CYAN); - TXT_BGColor(TXT_WINDOW_BACKGROUND, 0); for (y1=y; y1<y+h; ++y1) { @@ -180,18 +227,21 @@ void TXT_DrawWindowFrame(const char *title, int x, int y, int w, int h) TXT_DrawShadow(x + 2, y + h, w, 1); TXT_DrawShadow(x + w, y + 1, 2, h); + + TXT_RestoreColors(&colors); } void TXT_DrawSeparator(int x, int y, int w) { + txt_saved_colors_t colors; unsigned char *data; int x1; int b; data = TXT_GetScreenData(); + TXT_SaveColors(&colors); TXT_FGColor(TXT_COLOR_BRIGHT_CYAN); - TXT_BGColor(TXT_WINDOW_BACKGROUND, 0); if (!VALID_Y(y)) { @@ -222,6 +272,8 @@ void TXT_DrawSeparator(int x, int y, int w) data += 2; } + + TXT_RestoreColors(&colors); } void TXT_DrawString(const char *s) @@ -251,8 +303,70 @@ void TXT_DrawString(const char *s) TXT_GotoXY(x + strlen(s), y); } +static void PutUnicodeChar(unsigned int c) +{ + unsigned int i; + + if (c < 128) + { + TXT_PutChar(c); + return; + } + + // We can only display this character if it is in the CP437 codepage. + + for (i = 0; i < 128; ++i) + { + if (cp437_unicode[i] == c) + { + TXT_PutChar(128 + i); + return; + } + } + + // Otherwise, print a fallback character (inverted question mark): + + TXT_PutChar('\xa8'); +} + +void TXT_DrawUTF8String(const char *s) +{ + int x, y; + int x1; + const char *p; + unsigned int c; + + TXT_GetXY(&x, &y); + + if (VALID_Y(y)) + { + x1 = x; + + for (p = s; *p != '\0'; ) + { + c = TXT_DecodeUTF8(&p); + + if (c == 0) + { + break; + } + + if (VALID_X(x1)) + { + TXT_GotoXY(x1, y); + PutUnicodeChar(c); + } + + x1 += 1; + } + } + + TXT_GotoXY(x + TXT_UTF8_Strlen(s), y); +} + void TXT_DrawHorizScrollbar(int x, int y, int w, int cursor, int range) { + txt_saved_colors_t colors; int x1; int cursor_x; @@ -261,6 +375,7 @@ void TXT_DrawHorizScrollbar(int x, int y, int w, int cursor, int range) return; } + TXT_SaveColors(&colors); TXT_FGColor(TXT_COLOR_BLACK); TXT_BGColor(TXT_COLOR_GREY, 0); @@ -269,9 +384,9 @@ void TXT_DrawHorizScrollbar(int x, int y, int w, int cursor, int range) cursor_x = x + 1; - if (range > 1) + if (range > 0) { - cursor_x += (cursor * (w - 3)) / (range - 1); + cursor_x += (cursor * (w - 3)) / range; } if (cursor_x > x + w - 2) @@ -295,10 +410,12 @@ void TXT_DrawHorizScrollbar(int x, int y, int w, int cursor, int range) } TXT_PutChar('\x1a'); + TXT_RestoreColors(&colors); } void TXT_DrawVertScrollbar(int x, int y, int h, int cursor, int range) { + txt_saved_colors_t colors; int y1; int cursor_y; @@ -307,6 +424,7 @@ void TXT_DrawVertScrollbar(int x, int y, int h, int cursor, int range) return; } + TXT_SaveColors(&colors); TXT_FGColor(TXT_COLOR_BLACK); TXT_BGColor(TXT_COLOR_GREY, 0); @@ -320,9 +438,9 @@ void TXT_DrawVertScrollbar(int x, int y, int h, int cursor, int range) cursor_y = y + h - 2; } - if (range > 1) + if (range > 0) { - cursor_y += (cursor * (h - 3)) / (range - 1); + cursor_y += (cursor * (h - 3)) / range; } for (y1=y+1; y1<y+h-1; ++y1) @@ -344,6 +462,7 @@ void TXT_DrawVertScrollbar(int x, int y, int h, int cursor, int range) TXT_GotoXY(x, y + h - 1); TXT_PutChar('\x19'); + TXT_RestoreColors(&colors); } void TXT_InitClipArea(void) diff --git a/textscreen/txt_gui.h b/textscreen/txt_gui.h index 06fc7a36..e4504af8 100644 --- a/textscreen/txt_gui.h +++ b/textscreen/txt_gui.h @@ -27,18 +27,19 @@ #ifndef TXT_GUI_H #define TXT_GUI_H -#define TXT_WINDOW_BACKGROUND TXT_COLOR_BLUE -#define TXT_HOVER_BACKGROUND TXT_COLOR_CYAN +#define TXT_INACTIVE_WINDOW_BACKGROUND TXT_COLOR_BLACK +#define TXT_ACTIVE_WINDOW_BACKGROUND TXT_COLOR_BLUE +#define TXT_HOVER_BACKGROUND TXT_COLOR_CYAN void TXT_DrawDesktopBackground(const char *title); void TXT_DrawWindowFrame(const char *title, int x, int y, int w, int h); void TXT_DrawSeparator(int x, int y, int w); void TXT_DrawString(const char *s); +void TXT_DrawUTF8String(const char *s); void TXT_DrawHorizScrollbar(int x, int y, int w, int cursor, int range); void TXT_DrawVertScrollbar(int x, int y, int h, int cursor, int range); - void TXT_InitClipArea(void); void TXT_PushClipArea(int x1, int x2, int y1, int y2); void TXT_PopClipArea(void); diff --git a/textscreen/txt_inputbox.c b/textscreen/txt_inputbox.c index 2ba08ac6..0f2986cc 100644 --- a/textscreen/txt_inputbox.c +++ b/textscreen/txt_inputbox.c @@ -30,6 +30,7 @@ #include "txt_gui.h" #include "txt_io.h" #include "txt_main.h" +#include "txt_utf8.h" #include "txt_window.h" extern txt_widget_class_t txt_inputbox_class; @@ -131,8 +132,6 @@ static void TXT_InputBoxDrawer(TXT_UNCAST_ARG(inputbox)) TXT_SetWidgetBG(inputbox); } - TXT_FGColor(TXT_COLOR_BRIGHT_WHITE); - if (!inputbox->editing) { // If not editing, use the current value from inputbox->value. @@ -140,9 +139,9 @@ static void TXT_InputBoxDrawer(TXT_UNCAST_ARG(inputbox)) SetBufferFromValue(inputbox); } - TXT_DrawString(inputbox->buffer); + TXT_DrawUTF8String(inputbox->buffer); - chars = strlen(inputbox->buffer); + chars = TXT_UTF8_Strlen(inputbox->buffer); if (chars < w && inputbox->editing && focused) { @@ -166,26 +165,36 @@ static void TXT_InputBoxDestructor(TXT_UNCAST_ARG(inputbox)) static void Backspace(txt_inputbox_t *inputbox) { - if (strlen(inputbox->buffer) > 0) + unsigned int len; + char *p; + + len = TXT_UTF8_Strlen(inputbox->buffer); + + if (len > 0) { - inputbox->buffer[strlen(inputbox->buffer) - 1] = '\0'; + p = TXT_UTF8_SkipChars(inputbox->buffer, len - 1); + *p = '\0'; } } static void AddCharacter(txt_inputbox_t *inputbox, int key) { - if (strlen(inputbox->buffer) < inputbox->size) + char *end, *p; + + if (TXT_UTF8_Strlen(inputbox->buffer) < inputbox->size) { // Add character to the buffer - inputbox->buffer[strlen(inputbox->buffer) + 1] = '\0'; - inputbox->buffer[strlen(inputbox->buffer)] = key; + end = inputbox->buffer + strlen(inputbox->buffer); + p = TXT_EncodeUTF8(end, key); + *p = '\0'; } } static int TXT_InputBoxKeyPress(TXT_UNCAST_ARG(inputbox), int key) { TXT_CAST_ARG(txt_inputbox_t, inputbox); + unsigned int c; if (!inputbox->editing) { @@ -208,16 +217,18 @@ static int TXT_InputBoxKeyPress(TXT_UNCAST_ARG(inputbox), int key) inputbox->editing = 0; } - if (isprint(key)) + if (key == KEY_BACKSPACE) { - // Add character to the buffer - - AddCharacter(inputbox, key); + Backspace(inputbox); } - if (key == KEY_BACKSPACE) + c = TXT_KEY_TO_UNICODE(key); + + if (c >= 128 || isprint(c)) { - Backspace(inputbox); + // Add character to the buffer + + AddCharacter(inputbox, c); } return 1; @@ -277,32 +288,32 @@ txt_widget_class_t txt_int_inputbox_class = TXT_InputBoxFocused, }; -txt_inputbox_t *TXT_NewInputBox(char **value, int size) +static txt_inputbox_t *NewInputBox(txt_widget_class_t *widget_class, + void *value, int size) { txt_inputbox_t *inputbox; inputbox = malloc(sizeof(txt_inputbox_t)); - TXT_InitWidget(inputbox, &txt_inputbox_class); + TXT_InitWidget(inputbox, widget_class); inputbox->value = value; inputbox->size = size; - inputbox->buffer = malloc(size + 1); + // 'size' is the maximum number of characters that can be entered, + // but for a UTF-8 string, each character can take up to four + // characters. + inputbox->buffer = malloc(size * 4 + 1); inputbox->editing = 0; return inputbox; } -txt_inputbox_t *TXT_NewIntInputBox(int *value, int size) +txt_inputbox_t *TXT_NewInputBox(char **value, int size) { - txt_inputbox_t *inputbox; - - inputbox = malloc(sizeof(txt_inputbox_t)); + return NewInputBox(&txt_inputbox_class, value, size); +} - TXT_InitWidget(inputbox, &txt_int_inputbox_class); - inputbox->value = value; - inputbox->size = size; - inputbox->buffer = malloc(15); - inputbox->editing = 0; - return inputbox; +txt_inputbox_t *TXT_NewIntInputBox(int *value, int size) +{ + return NewInputBox(&txt_int_inputbox_class, value, size); } diff --git a/textscreen/txt_io.c b/textscreen/txt_io.c index 1ecc7bd6..f7c9a7a4 100644 --- a/textscreen/txt_io.c +++ b/textscreen/txt_io.c @@ -30,48 +30,10 @@ #include "txt_io.h" #include "txt_main.h" -static struct -{ - txt_color_t color; - const char *name; -} colors[] = { - {TXT_COLOR_BLACK, "black"}, - {TXT_COLOR_BLUE, "blue"}, - {TXT_COLOR_GREEN, "green"}, - {TXT_COLOR_CYAN, "cyan"}, - {TXT_COLOR_RED, "red"}, - {TXT_COLOR_MAGENTA, "magenta"}, - {TXT_COLOR_BROWN, "brown"}, - {TXT_COLOR_GREY, "grey"}, - {TXT_COLOR_DARK_GREY, "darkgrey"}, - {TXT_COLOR_BRIGHT_BLUE, "brightblue"}, - {TXT_COLOR_BRIGHT_GREEN, "brightgreen"}, - {TXT_COLOR_BRIGHT_CYAN, "brightcyan"}, - {TXT_COLOR_BRIGHT_RED, "brightred"}, - {TXT_COLOR_BRIGHT_MAGENTA, "brightmagenta"}, - {TXT_COLOR_YELLOW, "yellow"}, - {TXT_COLOR_BRIGHT_WHITE, "brightwhite"}, -}; - static int cur_x = 0, cur_y = 0; static txt_color_t fgcolor = TXT_COLOR_GREY; static txt_color_t bgcolor = TXT_COLOR_BLACK; -static int GetColorForName(char *s) -{ - size_t i; - - for (i=0; i<sizeof(colors) / sizeof(*colors); ++i) - { - if (!strcmp(s, colors[i].name)) - { - return colors[i].color; - } - } - - return -1; -} - static void NewLine(unsigned char *screendata) { int i; @@ -104,7 +66,7 @@ static void NewLine(unsigned char *screendata) static void PutChar(unsigned char *screendata, int c) { unsigned char *p; - + p = screendata + cur_y * TXT_SCREEN_W * 2 + cur_x * 2; switch (c) @@ -149,66 +111,14 @@ void TXT_PutChar(int c) void TXT_Puts(const char *s) { - int previous_color = TXT_COLOR_BLACK; unsigned char *screen; const char *p; - char colorname_buf[20]; - char *ending; - int col; screen = TXT_GetScreenData(); for (p=s; *p != '\0'; ++p) { - if (*p == '<') - { - ++p; - - if (*p == '<') - { - PutChar(screen, '<'); - } - else - { - ending = strchr(p, '>'); - - if (ending == NULL) - { - return; - } - - strncpy(colorname_buf, p, 19); - colorname_buf[ending-p] = '\0'; - - if (!strcmp(colorname_buf, "/")) - { - // End of color block - - col = previous_color; - } - else - { - col = GetColorForName(colorname_buf); - - if (col < 0) - { - return; - } - - // Save the color for the ending marker - - previous_color = fgcolor; - } - - TXT_FGColor(col); - - p = ending; - } - } - else - { - PutChar(screen, *p); - } + PutChar(screen, *p); } PutChar(screen, '\n'); @@ -238,6 +148,18 @@ void TXT_BGColor(int color, int blinking) bgcolor |= TXT_COLOR_BLINKING; } +void TXT_SaveColors(txt_saved_colors_t *save) +{ + save->bgcolor = bgcolor; + save->fgcolor = fgcolor; +} + +void TXT_RestoreColors(txt_saved_colors_t *save) +{ + bgcolor = save->bgcolor; + fgcolor = save->fgcolor; +} + void TXT_ClearScreen(void) { unsigned char *screen; diff --git a/textscreen/txt_io.h b/textscreen/txt_io.h index dc25aa93..004fa562 100644 --- a/textscreen/txt_io.h +++ b/textscreen/txt_io.h @@ -29,12 +29,20 @@ #include "txt_main.h" +typedef struct +{ + int bgcolor; + int fgcolor; +} txt_saved_colors_t; + void TXT_PutChar(int c); void TXT_Puts(const char *s); void TXT_GotoXY(int x, int y); void TXT_GetXY(int *x, int *y); void TXT_FGColor(txt_color_t color); void TXT_BGColor(int color, int blinking); +void TXT_SaveColors(txt_saved_colors_t *save); +void TXT_RestoreColors(txt_saved_colors_t *save); void TXT_ClearScreen(void); #endif /* #ifndef TXT_IO_H */ diff --git a/textscreen/txt_label.c b/textscreen/txt_label.c index a2afc13b..39ea0e16 100644 --- a/textscreen/txt_label.c +++ b/textscreen/txt_label.c @@ -26,6 +26,7 @@ #include "txt_gui.h" #include "txt_io.h" #include "txt_main.h" +#include "txt_utf8.h" #include "txt_window.h" static void TXT_LabelSizeCalc(TXT_UNCAST_ARG(label)) @@ -46,8 +47,14 @@ static void TXT_LabelDrawer(TXT_UNCAST_ARG(label)) w = label->widget.w; - TXT_BGColor(label->bgcolor, 0); - TXT_FGColor(label->fgcolor); + if (label->bgcolor >= 0) + { + TXT_BGColor(label->bgcolor, 0); + } + if (label->fgcolor >= 0) + { + TXT_FGColor(label->fgcolor); + } TXT_GetXY(&origin_x, &origin_y); @@ -68,7 +75,7 @@ static void TXT_LabelDrawer(TXT_UNCAST_ARG(label)) align_indent = label->w - strlen(label->lines[y]); break; } - + // Draw this line TXT_GotoXY(origin_x, origin_y + y); @@ -82,8 +89,8 @@ static void TXT_LabelDrawer(TXT_UNCAST_ARG(label)) // The string itself - TXT_DrawString(label->lines[y]); - x += strlen(label->lines[y]); + TXT_DrawUTF8String(label->lines[y]); + x += TXT_UTF8_Strlen(label->lines[y]); // Gap at the end @@ -123,7 +130,7 @@ void TXT_SetLabel(txt_label_t *label, char *value) free(label->label); free(label->lines); - // Set the new value + // Set the new value label->label = strdup(value); @@ -144,7 +151,7 @@ void TXT_SetLabel(txt_label_t *label, char *value) label->lines = malloc(sizeof(char *) * label->h); label->lines[0] = label->label; y = 1; - + for (p = label->label; *p != '\0'; ++p) { if (*p == '\n') @@ -159,8 +166,12 @@ void TXT_SetLabel(txt_label_t *label, char *value) for (y=0; y<label->h; ++y) { - if (strlen(label->lines[y]) > label->w) - label->w = strlen(label->lines[y]); + unsigned int line_len; + + line_len = TXT_UTF8_Strlen(label->lines[y]); + + if (line_len > label->w) + label->w = line_len; } } @@ -176,8 +187,8 @@ txt_label_t *TXT_NewLabel(char *text) // Default colors - label->bgcolor = TXT_WINDOW_BACKGROUND; - label->fgcolor = TXT_COLOR_BRIGHT_WHITE; + label->bgcolor = -1; + label->fgcolor = -1; TXT_SetLabel(label, text); diff --git a/textscreen/txt_label.h b/textscreen/txt_label.h index 16395c93..c0a20bf2 100644 --- a/textscreen/txt_label.h +++ b/textscreen/txt_label.h @@ -45,8 +45,8 @@ struct txt_label_s char *label; char **lines; unsigned int w, h; - txt_color_t fgcolor; - txt_color_t bgcolor; + int fgcolor; + int bgcolor; }; /** diff --git a/textscreen/txt_main.h b/textscreen/txt_main.h index a415ee1b..a6dcc954 100644 --- a/textscreen/txt_main.h +++ b/textscreen/txt_main.h @@ -32,9 +32,21 @@ #include "txt_sdl.h" +// textscreen key values: +// Key values are difficult because we have to support multiple conflicting +// address spaces. +// First, Doom's key constants use 0-127 as ASCII and extra values from +// 128-255 to represent special keys. Second, mouse buttons are represented +// as buttons. Finally, we want to be able to support Unicode. +// +// So we define different ranges: +// 0-255: Doom key constants, including ASCII. +// 256-511: Mouse buttons and other reserved. +// >=512: Unicode values greater than 127 are offset up into this range. + // Special keypress values that correspond to mouse button clicks -#define TXT_MOUSE_BASE 0x10000 +#define TXT_MOUSE_BASE 256 #define TXT_MOUSE_LEFT (TXT_MOUSE_BASE + 0) #define TXT_MOUSE_RIGHT (TXT_MOUSE_BASE + 1) #define TXT_MOUSE_MIDDLE (TXT_MOUSE_BASE + 2) @@ -42,6 +54,22 @@ #define TXT_MOUSE_SCROLLDOWN (TXT_MOUSE_BASE + 4) #define TXT_MAX_MOUSE_BUTTONS 16 +#define TXT_KEY_TO_MOUSE_BUTTON(x) \ + ( (x) >= TXT_MOUSE_BASE \ + && (x) < TXT_MOUSE_BASE + TXT_MAX_MOUSE_BUTTONS ? \ + (x) - TXT_MOUSE_BASE : -1 ) + +// Unicode offset. Unicode values from 128 onwards are offset up into +// this range, so TXT_UNICODE_BASE = Unicode character #128, and so on. + +#define TXT_UNICODE_BASE 512 + +// Convert a key value to a Unicode character: + +#define TXT_KEY_TO_UNICODE(x) \ + ( (x) < 128 ? (x) : \ + (x) >= TXT_UNICODE_BASE ? ((x) - TXT_UNICODE_BASE + 128) : 0 ) + // Screen size #define TXT_SCREEN_W 80 diff --git a/textscreen/txt_radiobutton.c b/textscreen/txt_radiobutton.c index 10f94ad3..fa722c13 100644 --- a/textscreen/txt_radiobutton.c +++ b/textscreen/txt_radiobutton.c @@ -43,12 +43,13 @@ static void TXT_RadioButtonSizeCalc(TXT_UNCAST_ARG(radiobutton)) static void TXT_RadioButtonDrawer(TXT_UNCAST_ARG(radiobutton)) { TXT_CAST_ARG(txt_radiobutton_t, radiobutton); + txt_saved_colors_t colors; int i; int w; w = radiobutton->widget.w; - TXT_BGColor(TXT_WINDOW_BACKGROUND, 0); + TXT_SaveColors(&colors); TXT_FGColor(TXT_COLOR_BRIGHT_CYAN); TXT_DrawString("("); @@ -67,11 +68,11 @@ static void TXT_RadioButtonDrawer(TXT_UNCAST_ARG(radiobutton)) TXT_DrawString(") "); + TXT_RestoreColors(&colors); TXT_SetWidgetBG(radiobutton); - TXT_FGColor(TXT_COLOR_BRIGHT_WHITE); TXT_DrawString(radiobutton->label); - + for (i=strlen(radiobutton->label); i < w-5; ++i) { TXT_DrawString(" "); diff --git a/textscreen/txt_sdl.c b/textscreen/txt_sdl.c index 8ad5bf74..40fb9ff8 100644 --- a/textscreen/txt_sdl.c +++ b/textscreen/txt_sdl.c @@ -436,7 +436,17 @@ static int TranslateKey(SDL_keysym *sym) if (key_mapping) { - return sym->unicode; + // Unicode characters beyond the ASCII range need to be + // mapped up into textscreen's Unicode range. + + if (sym->unicode < 128) + { + return sym->unicode; + } + else + { + return sym->unicode - 128 + TXT_UNICODE_BASE; + } } else { diff --git a/textscreen/txt_separator.c b/textscreen/txt_separator.c index ce6e29ec..25d6f7bc 100644 --- a/textscreen/txt_separator.c +++ b/textscreen/txt_separator.c @@ -65,7 +65,6 @@ static void TXT_SeparatorDrawer(TXT_UNCAST_ARG(separator)) { TXT_GotoXY(x, y); - TXT_BGColor(TXT_WINDOW_BACKGROUND, 0); TXT_FGColor(TXT_COLOR_BRIGHT_GREEN); TXT_DrawString(" "); TXT_DrawString(separator->label); diff --git a/textscreen/txt_spinctrl.c b/textscreen/txt_spinctrl.c index a4d20343..1015ece5 100644 --- a/textscreen/txt_spinctrl.c +++ b/textscreen/txt_spinctrl.c @@ -147,16 +147,17 @@ static void TXT_SpinControlDrawer(TXT_UNCAST_ARG(spincontrol)) TXT_CAST_ARG(txt_spincontrol_t, spincontrol); unsigned int i; unsigned int padding; + txt_saved_colors_t colors; int focused; focused = spincontrol->widget.focused; - TXT_FGColor(TXT_COLOR_BRIGHT_CYAN); - TXT_BGColor(TXT_WINDOW_BACKGROUND, 0); + TXT_SaveColors(&colors); + TXT_FGColor(TXT_COLOR_BRIGHT_CYAN); TXT_DrawString("\x1b "); - - TXT_FGColor(TXT_COLOR_BRIGHT_WHITE); + + TXT_RestoreColors(&colors); // Choose background color @@ -173,7 +174,7 @@ static void TXT_SpinControlDrawer(TXT_UNCAST_ARG(spincontrol)) { SetBuffer(spincontrol); } - + i = 0; padding = spincontrol->widget.w - strlen(spincontrol->buffer) - 4; @@ -193,8 +194,8 @@ static void TXT_SpinControlDrawer(TXT_UNCAST_ARG(spincontrol)) ++i; } + TXT_RestoreColors(&colors); TXT_FGColor(TXT_COLOR_BRIGHT_CYAN); - TXT_BGColor(TXT_WINDOW_BACKGROUND, 0); TXT_DrawString(" \x1a"); } diff --git a/textscreen/txt_utf8.c b/textscreen/txt_utf8.c new file mode 100644 index 00000000..1306f265 --- /dev/null +++ b/textscreen/txt_utf8.c @@ -0,0 +1,160 @@ +// Emacs style mode select -*- C++ -*- +//----------------------------------------------------------------------------- +// +// Copyright(C) 2012 Simon Howard +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA. +// + +#include <stdlib.h> +#include <string.h> + +#include "txt_utf8.h" + +// Encode a Unicode character as UTF-8, storing it in the buffer 'p' +// and returning the new, incremented position. + +char *TXT_EncodeUTF8(char *p, unsigned int c) +{ + if (c < 0x80) // 1 character (ASCII): + { + p[0] = c; + return p + 1; + } + else if (c < 0x800) // 2 character: + { + p[0] = 0xc0 | (c >> 6); + p[1] = 0x80 | (c & 0x3f); + return p + 2; + } + else if (c < 0x10000) // 3 chacater: + { + p[0] = 0xe0 | (c >> 12); + p[1] = 0x80 | ((c >> 6) & 0x3f); + p[2] = 0x80 | (c & 0x3f); + return p + 3; + } + else if (c < 0x200000) // 4 character: + { + p[0] = 0xf0 | (c >> 18); + p[1] = 0x80 | ((c >> 12) & 0x3f); + p[2] = 0x80 | ((c >> 6) & 0x3f); + p[3] = 0x80 | (c & 0x3f); + return p + 4; + } + else + { + // Too big! + + return p; + } +} + +// Decode UTF-8 character, incrementing *ptr over the decoded bytes. + +unsigned int TXT_DecodeUTF8(const char **ptr) +{ + const char *p = *ptr; + unsigned int c; + + // UTF-8 decode. + + if ((*p & 0x80) == 0) // 1 character (ASCII): + { + c = *p; + *ptr += 1; + } + else if ((p[0] & 0xe0) == 0xc0 // 2 character: + && (p[1] & 0xc0) == 0x80) + { + c = ((p[0] & 0x1f) << 6) + | (p[1] & 0x3f); + *ptr += 2; + } + else if ((p[0] & 0xf0) == 0xe0 // 3 character: + && (p[1] & 0xc0) == 0x80 + && (p[2] & 0xc0) == 0x80) + { + c = ((p[0] & 0x0f) << 12) + | ((p[1] & 0x3f) << 6) + | (p[2] & 0x3f); + *ptr += 3; + } + else if ((p[0] & 0xf8) == 0xf0 // 4 character: + && (p[1] & 0xc0) == 0x80 + && (p[2] & 0xc0) == 0x80 + && (p[3] & 0xc0) == 0x80) + { + c = ((p[0] & 0x07) << 18) + | ((p[1] & 0x3f) << 12) + | ((p[2] & 0x3f) << 6) + | (p[3] & 0x3f); + *ptr += 4; + } + else + { + // Decode failure. + // Don't bother with 5/6 byte sequences. + + c = 0; + } + + return c; +} + +// Count the number of characters in a UTF-8 string. + +unsigned int TXT_UTF8_Strlen(const char *s) +{ + const char *p; + unsigned int result = 0; + unsigned int c; + + for (p = s; *p != '\0';) + { + c = TXT_DecodeUTF8(&p); + + if (c == 0) + { + break; + } + + ++result; + } + + return result; +} + +// Skip past the first n characters in a UTF-8 string. + +char *TXT_UTF8_SkipChars(const char *s, unsigned int n) +{ + unsigned int i; + const char *p; + + p = s; + + for (i = 0; i < n; ++i) + { + if (TXT_DecodeUTF8(&p) == 0) + { + break; + } + } + + return (char *) p; +} + diff --git a/textscreen/txt_utf8.h b/textscreen/txt_utf8.h new file mode 100644 index 00000000..dc519032 --- /dev/null +++ b/textscreen/txt_utf8.h @@ -0,0 +1,31 @@ +// Emacs style mode select -*- C++ -*- +//----------------------------------------------------------------------------- +// +// Copyright(C) 2012 Simon Howard +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA. +// + +#ifndef TXT_UTF8_H +#define TXT_UTF8_H + +char *TXT_EncodeUTF8(char *p, unsigned int c); +unsigned int TXT_DecodeUTF8(const char **ptr); +unsigned int TXT_UTF8_Strlen(const char *s); +char *TXT_UTF8_SkipChars(const char *s, unsigned int n); + +#endif /* #ifndef TXT_UTF8_H */ + diff --git a/textscreen/txt_widget.c b/textscreen/txt_widget.c index 7d31ad68..e0303531 100644 --- a/textscreen/txt_widget.c +++ b/textscreen/txt_widget.c @@ -162,14 +162,22 @@ void TXT_CalcWidgetSize(TXT_UNCAST_ARG(widget)) void TXT_DrawWidget(TXT_UNCAST_ARG(widget)) { TXT_CAST_ARG(txt_widget_t, widget); + txt_saved_colors_t colors; + + // The drawing function might change the fg/bg colors, + // so make sure we restore them after it's done. + + TXT_SaveColors(&colors); // For convenience... TXT_GotoXY(widget->x, widget->y); // Call drawer method - + widget->widget_class->drawer(widget); + + TXT_RestoreColors(&colors); } void TXT_DestroyWidget(TXT_UNCAST_ARG(widget)) @@ -319,7 +327,7 @@ void TXT_SetWidgetBG(TXT_UNCAST_ARG(widget)) } else { - TXT_BGColor(TXT_WINDOW_BACKGROUND, 0); + // Use normal window background. } } diff --git a/textscreen/txt_window.c b/textscreen/txt_window.c index 67543735..9ab6da9b 100644 --- a/textscreen/txt_window.c +++ b/textscreen/txt_window.c @@ -28,6 +28,7 @@ #include "txt_label.h" #include "txt_desktop.h" #include "txt_gui.h" +#include "txt_io.h" #include "txt_main.h" #include "txt_separator.h" #include "txt_window.h" @@ -321,7 +322,18 @@ void TXT_DrawWindow(txt_window_t *window) txt_widget_t *widgets; TXT_LayoutWindow(window); - + + if (window->table.widget.focused) + { + TXT_BGColor(TXT_ACTIVE_WINDOW_BACKGROUND, 0); + } + else + { + TXT_BGColor(TXT_INACTIVE_WINDOW_BACKGROUND, 0); + } + + TXT_FGColor(TXT_COLOR_BRIGHT_WHITE); + // Draw the window TXT_DrawWindowFrame(window->title, diff --git a/textscreen/txt_window_action.c b/textscreen/txt_window_action.c index cf5ac4a7..f195f06f 100644 --- a/textscreen/txt_window_action.c +++ b/textscreen/txt_window_action.c @@ -55,10 +55,6 @@ static void TXT_WindowActionDrawer(TXT_UNCAST_ARG(action)) { TXT_BGColor(TXT_COLOR_BLACK, 0); } - else - { - TXT_BGColor(TXT_WINDOW_BACKGROUND, 0); - } TXT_DrawString(" "); TXT_FGColor(TXT_COLOR_BRIGHT_GREEN); |