foxygit / doom Log in
commit 37865c5d5b53fd0427b6f22d0a13f830a74c3064
Author:     Simon Howard <fraggle@gmail.com>
AuthorDate: Sun Sep 7 21:03:09 2008 +0000
Commit:     Simon Howard <fraggle@gmail.com>
CommitDate: Sun Sep 7 21:03:09 2008 +0000

    Move dehacked code to doom/. Split dehacked string replacement code into
    common code and remove dependencies on deh_main.h.

    Subversion-branch: /branches/raven-branch
    Subversion-revision: 1210
---
 src/Makefile.am               |  14 +----
 src/{deh_text.c => deh_str.c} | 116 +++++++-------------------------------
 src/deh_str.h                 |  46 +++++++++++++++
 src/doom/Makefile.am          |  18 +++++-
 src/{ => doom}/deh_ammo.c     |   0
 src/{ => doom}/deh_cheat.c    |   0
 src/{ => doom}/deh_defs.h     |   0
 src/{ => doom}/deh_frame.c    |   0
 src/{ => doom}/deh_io.c       |   0
 src/{ => doom}/deh_io.h       |   0
 src/{ => doom}/deh_main.c     |   0
 src/{ => doom}/deh_main.h     |  15 +----
 src/{ => doom}/deh_mapping.c  |   0
 src/{ => doom}/deh_mapping.h  |   0
 src/{ => doom}/deh_misc.c     |   0
 src/{ => doom}/deh_misc.h     |   0
 src/{ => doom}/deh_ptr.c      |   0
 src/{ => doom}/deh_sound.c    |   0
 src/doom/deh_text.c           | 126 ++++++++++++++++++++++++++++++++++++++++++
 src/{ => doom}/deh_thing.c    |   0
 src/{ => doom}/deh_weapon.c   |   0
 src/i_pcsound.c               |   2 +-
 src/i_sdlmusic.c              |   2 +-
 src/i_sdlsound.c              |   2 +-
 src/i_system.c                |   2 +-
 src/i_video.c                 |   2 +-
 src/m_config.c                |   2 +-
 src/m_misc.c                  |   2 +-
 src/net_client.c              |   1 +
 src/s_sound.c                 |   2 +-
 src/v_video.c                 |   2 +-
 31 files changed, 222 insertions(+), 132 deletions(-)

diff --git a/src/Makefile.am b/src/Makefile.am
index a91de106..9e751dd9 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -61,19 +61,7 @@ z_zone.c             z_zone.h
 # source files needed for FEATURE_DEHACKED

 FEATURE_DEHACKED_SOURCE_FILES=             \
-deh_ammo.c                                 \
-deh_cheat.c                                \
-deh_defs.h                                 \
-deh_frame.c                                \
-deh_io.c             deh_io.h              \
-deh_main.c           deh_main.h            \
-deh_mapping.c        deh_mapping.h         \
-deh_misc.c           deh_misc.h            \
-deh_ptr.c                                  \
-deh_sound.c                                \
-deh_text.c                                 \
-deh_thing.c                                \
-deh_weapon.c
+deh_str.c            deh_str.h

 # source files needed for FEATURE_MULTIPLAYER

diff --git a/src/deh_text.c b/src/deh_str.c
similarity index 65%
rename from src/deh_text.c
rename to src/deh_str.c
index 853e30e4..d2cc3ae6 100644
--- a/src/deh_text.c
+++ b/src/deh_str.c
@@ -24,23 +24,21 @@
 //
 //-----------------------------------------------------------------------------

+#include <stdlib.h>
 #include <string.h>

 #include "doomtype.h"
+#include "deh_str.h"

 #include "z_zone.h"

-#include "deh_defs.h"
-#include "deh_io.h"
-#include "deh_main.h"
-
 typedef struct
 {
     char *from_text;
     char *to_text;
 } deh_substitution_t;

-static deh_substitution_t **hash_table;
+static deh_substitution_t **hash_table = NULL;
 static int hash_table_entries;
 static int hash_table_length = -1;

@@ -91,6 +89,17 @@ char *DEH_String(char *s)
     return s;
 }

+static void InitHashTable(void)
+{
+    // init hash table
+
+    hash_table_entries = 0;
+    hash_table_length = 16;
+    hash_table = Z_Malloc(sizeof(deh_substitution_t *) * hash_table_length,
+                          PU_STATIC, NULL);
+    memset(hash_table, 0, sizeof(deh_substitution_t *) * hash_table_length);
+}
+
 static void DEH_AddToHashtable(deh_substitution_t *sub);

 static void IncreaseHashtable(void)
@@ -150,105 +159,22 @@ static void DEH_AddToHashtable(deh_substitution_t *sub)
     ++hash_table_entries;
 }

-// Given a string length, find the maximum length of a
-// string that can replace it.
-
-static int TXT_MaxStringLength(int len)
-{
-    // Enough bytes for the string and the NUL terminator
-
-    len += 1;
-
-    // All strings in doom.exe are on 4-byte boundaries, so we may be able
-    // to support a slightly longer string.
-    // Extend up to the next 4-byte boundary
-
-    len += (4 - (len % 4)) % 4;
-
-    // Less one for the NUL terminator.
-
-    return len - 1;
-}
-
-static void DEH_TextInit(void)
-{
-    // init hash table
-
-    hash_table_entries = 0;
-    hash_table_length = 16;
-    hash_table = Z_Malloc(sizeof(deh_substitution_t *) * hash_table_length,
-                          PU_STATIC, NULL);
-    memset(hash_table, 0, sizeof(deh_substitution_t *) * hash_table_length);
-}
-
-static void *DEH_TextStart(deh_context_t *context, char *line)
+void DEH_AddStringReplacement(char *from_text, char *to_text)
 {
     deh_substitution_t *sub;
-    int fromlen, tolen;
-    int i;
-
-    if (sscanf(line, "Text %i %i", &fromlen, &tolen) != 2)
-    {
-        DEH_Warning(context, "Parse error on section start");
-        return NULL;
-    }
-
-    // Only allow string replacements that are possible in Vanilla Doom.
-    // Chocolate Doom is unforgiving!
-
-    if (!deh_allow_long_strings && tolen > TXT_MaxStringLength(fromlen))
-    {
-        DEH_Error(context, "Replacement string is longer than the maximum "
-                           "possible in doom.exe");
-        return NULL;
-    }
-
-    sub = Z_Malloc(sizeof(deh_substitution_t), PU_STATIC, NULL);
-    sub->from_text = Z_Malloc(fromlen + 1, PU_STATIC, NULL);
-    sub->to_text = Z_Malloc(tolen + 1, PU_STATIC, NULL);

-    // read in the "from" text
+    // Initialise the hash table if this is the first time

-    for (i=0; i<fromlen; ++i)
+    if (hash_table_length < 0)
     {
-        int c;
-
-        c = DEH_GetChar(context);
-
-        sub->from_text[i] = c;
+        InitHashTable();
     }

-    sub->from_text[fromlen] = '\0';
-
-    // read in the "to" text
+    sub = Z_Malloc(sizeof(*sub), PU_STATIC, 0);

-    for (i=0; i<tolen; ++i)
-    {
-        int c;
-
-        c = DEH_GetChar(context);
-
-        sub->to_text[i] = c;
-    }
-    sub->to_text[tolen] = '\0';
+    sub->from_text = from_text;
+    sub->to_text = to_text;

     DEH_AddToHashtable(sub);
-
-    return NULL;
-}
-
-static void DEH_TextParseLine(deh_context_t *context, char *line, void *tag)
-{
-    // not used
 }

-deh_section_t deh_section_text =
-{
-    "Text",
-    DEH_TextInit,
-    DEH_TextStart,
-    DEH_TextParseLine,
-    NULL,
-    NULL,
-};
-
diff --git a/src/deh_str.h b/src/deh_str.h
new file mode 100644
index 00000000..986536de
--- /dev/null
+++ b/src/deh_str.h
@@ -0,0 +1,46 @@
+// Emacs style mode select   -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 2005 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.
+//
+//-----------------------------------------------------------------------------
+//
+// Dehacked string replacements
+//
+//-----------------------------------------------------------------------------
+
+#ifndef DEH_STR_H
+#define DEH_STR_H
+
+#include "doomfeatures.h"
+
+// Used to do dehacked text substitutions throughout the program
+
+#ifdef FEATURE_DEHACKED
+
+char *DEH_String(char *s);
+void DEH_AddStringReplacement(char *from_text, char *to_text);
+
+#else
+
+#define DEH_String(x) (x)
+
+#endif
+
+#endif /* #ifndef DEH_STR_H */
+
diff --git a/src/doom/Makefile.am b/src/doom/Makefile.am
index 4d95266e..3e142f93 100644
--- a/src/doom/Makefile.am
+++ b/src/doom/Makefile.am
@@ -60,5 +60,21 @@ st_lib.c           st_lib.h     \
 st_stuff.c         st_stuff.h   \
 wi_stuff.c         wi_stuff.h

-libdoom_a_SOURCES=$(SOURCE_FILES)
+FEATURE_DEHACKED_SOURCE_FILES =            \
+deh_ammo.c                                 \
+deh_cheat.c                                \
+deh_defs.h                                 \
+deh_frame.c                                \
+deh_io.c             deh_io.h              \
+deh_main.c           deh_main.h            \
+deh_mapping.c        deh_mapping.h         \
+deh_misc.c           deh_misc.h            \
+deh_ptr.c                                  \
+deh_sound.c                                \
+deh_text.c                                 \
+deh_thing.c                                \
+deh_weapon.c
+
+libdoom_a_SOURCES = $(SOURCE_FILES)                   \
+                    $(FEATURE_DEHACKED_SOURCE_FILES)

diff --git a/src/deh_ammo.c b/src/doom/deh_ammo.c
similarity index 100%
rename from src/deh_ammo.c
rename to src/doom/deh_ammo.c
diff --git a/src/deh_cheat.c b/src/doom/deh_cheat.c
similarity index 100%
rename from src/deh_cheat.c
rename to src/doom/deh_cheat.c
diff --git a/src/deh_defs.h b/src/doom/deh_defs.h
similarity index 100%
rename from src/deh_defs.h
rename to src/doom/deh_defs.h
diff --git a/src/deh_frame.c b/src/doom/deh_frame.c
similarity index 100%
rename from src/deh_frame.c
rename to src/doom/deh_frame.c
diff --git a/src/deh_io.c b/src/doom/deh_io.c
similarity index 100%
rename from src/deh_io.c
rename to src/doom/deh_io.c
diff --git a/src/deh_io.h b/src/doom/deh_io.h
similarity index 100%
rename from src/deh_io.h
rename to src/doom/deh_io.h
diff --git a/src/deh_main.c b/src/doom/deh_main.c
similarity index 100%
rename from src/deh_main.c
rename to src/doom/deh_main.c
diff --git a/src/deh_main.h b/src/doom/deh_main.h
similarity index 90%
rename from src/deh_main.h
rename to src/doom/deh_main.h
index 388c56de..8a0587ff 100644
--- a/src/deh_main.h
+++ b/src/doom/deh_main.h
@@ -30,6 +30,7 @@
 #include "doomtype.h"
 #include "doomfeatures.h"
 #include "md5.h"
+#include "deh_str.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
@@ -45,20 +46,6 @@ boolean DEH_ParseAssignment(char *line, char **variable_name, char **value);

 void DEH_Checksum(md5_digest_t digest);

-// deh_text.c:
-//
-// Used to do dehacked text substitutions throughout the program
-
-#ifdef FEATURE_DEHACKED
-
-char *DEH_String(char *s);
-
-#else
-
-#define DEH_String(x) (x)
-
-#endif
-
 extern boolean deh_allow_long_strings;
 extern boolean deh_allow_long_cheats;

diff --git a/src/deh_mapping.c b/src/doom/deh_mapping.c
similarity index 100%
rename from src/deh_mapping.c
rename to src/doom/deh_mapping.c
diff --git a/src/deh_mapping.h b/src/doom/deh_mapping.h
similarity index 100%
rename from src/deh_mapping.h
rename to src/doom/deh_mapping.h
diff --git a/src/deh_misc.c b/src/doom/deh_misc.c
similarity index 100%
rename from src/deh_misc.c
rename to src/doom/deh_misc.c
diff --git a/src/deh_misc.h b/src/doom/deh_misc.h
similarity index 100%
rename from src/deh_misc.h
rename to src/doom/deh_misc.h
diff --git a/src/deh_ptr.c b/src/doom/deh_ptr.c
similarity index 100%
rename from src/deh_ptr.c
rename to src/doom/deh_ptr.c
diff --git a/src/deh_sound.c b/src/doom/deh_sound.c
similarity index 100%
rename from src/deh_sound.c
rename to src/doom/deh_sound.c
diff --git a/src/doom/deh_text.c b/src/doom/deh_text.c
new file mode 100644
index 00000000..caac59a3
--- /dev/null
+++ b/src/doom/deh_text.c
@@ -0,0 +1,126 @@
+// Emacs style mode select   -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 2005 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.
+//
+//-----------------------------------------------------------------------------
+//
+// Parses Text substitution sections in dehacked files
+//
+//-----------------------------------------------------------------------------
+
+#include <string.h>
+
+#include "doomtype.h"
+
+#include "z_zone.h"
+
+#include "deh_defs.h"
+#include "deh_io.h"
+#include "deh_main.h"
+
+// Given a string length, find the maximum length of a
+// string that can replace it.
+
+static int TXT_MaxStringLength(int len)
+{
+    // Enough bytes for the string and the NUL terminator
+
+    len += 1;
+
+    // All strings in doom.exe are on 4-byte boundaries, so we may be able
+    // to support a slightly longer string.
+    // Extend up to the next 4-byte boundary
+
+    len += (4 - (len % 4)) % 4;
+
+    // Less one for the NUL terminator.
+
+    return len - 1;
+}
+
+static void *DEH_TextStart(deh_context_t *context, char *line)
+{
+    char *from_text, *to_text;
+    int fromlen, tolen;
+    int i;
+
+    if (sscanf(line, "Text %i %i", &fromlen, &tolen) != 2)
+    {
+        DEH_Warning(context, "Parse error on section start");
+        return NULL;
+    }
+
+    // Only allow string replacements that are possible in Vanilla Doom.
+    // Chocolate Doom is unforgiving!
+
+    if (!deh_allow_long_strings && tolen > TXT_MaxStringLength(fromlen))
+    {
+        DEH_Error(context, "Replacement string is longer than the maximum "
+                           "possible in doom.exe");
+        return NULL;
+    }
+
+    from_text = Z_Malloc(fromlen + 1, PU_STATIC, NULL);
+    to_text = Z_Malloc(tolen + 1, PU_STATIC, NULL);
+
+    // read in the "from" text
+
+    for (i=0; i<fromlen; ++i)
+    {
+        int c;
+
+        c = DEH_GetChar(context);
+
+        from_text[i] = c;
+    }
+
+    from_text[fromlen] = '\0';
+
+    // read in the "to" text
+
+    for (i=0; i<tolen; ++i)
+    {
+        int c;
+
+        c = DEH_GetChar(context);
+
+        to_text[i] = c;
+    }
+    to_text[tolen] = '\0';
+
+    DEH_AddStringReplacement(from_text, to_text);
+
+    return NULL;
+}
+
+static void DEH_TextParseLine(deh_context_t *context, char *line, void *tag)
+{
+    // not used
+}
+
+deh_section_t deh_section_text =
+{
+    "Text",
+    NULL,
+    DEH_TextStart,
+    DEH_TextParseLine,
+    NULL,
+    NULL,
+};
+
diff --git a/src/deh_thing.c b/src/doom/deh_thing.c
similarity index 100%
rename from src/deh_thing.c
rename to src/doom/deh_thing.c
diff --git a/src/deh_weapon.c b/src/doom/deh_weapon.c
similarity index 100%
rename from src/deh_weapon.c
rename to src/doom/deh_weapon.c
diff --git a/src/i_pcsound.c b/src/i_pcsound.c
index 620acf39..ad82180c 100644
--- a/src/i_pcsound.c
+++ b/src/i_pcsound.c
@@ -27,7 +27,7 @@

 #include "doomtype.h"

-#include "deh_main.h"
+#include "deh_str.h"
 #include "s_sound.h"
 #include "sounds.h"

diff --git a/src/i_sdlmusic.c b/src/i_sdlmusic.c
index 2e4562ab..2ac207d1 100644
--- a/src/i_sdlmusic.c
+++ b/src/i_sdlmusic.c
@@ -34,7 +34,7 @@
 #include "memio.h"
 #include "mus2mid.h"

-#include "deh_main.h"
+#include "deh_str.h"
 #include "m_misc.h"
 #include "s_sound.h"
 #include "w_wad.h"
diff --git a/src/i_sdlsound.c b/src/i_sdlsound.c
index 6f765be4..5c6dd5f7 100644
--- a/src/i_sdlsound.c
+++ b/src/i_sdlsound.c
@@ -38,7 +38,7 @@
 #include <samplerate.h>
 #endif

-#include "deh_main.h"
+#include "deh_str.h"
 #include "i_system.h"
 #include "s_sound.h"
 #include "m_argv.h"
diff --git a/src/i_system.c b/src/i_system.c
index 218acc59..c3b3211e 100644
--- a/src/i_system.c
+++ b/src/i_system.c
@@ -38,7 +38,7 @@
 #include <unistd.h>
 #endif

-#include "deh_main.h"
+#include "deh_str.h"
 #include "doomtype.h"
 #include "doomstat.h"
 #include "m_argv.h"
diff --git a/src/i_video.c b/src/i_video.c
index dc4a249e..4c70c48c 100644
--- a/src/i_video.c
+++ b/src/i_video.c
@@ -33,7 +33,7 @@
 #include "icon.c"

 #include "config.h"
-#include "deh_main.h"
+#include "deh_str.h"
 #include "doomtype.h"
 #include "doomkeys.h"
 #include "i_joystick.h"
diff --git a/src/m_config.c b/src/m_config.c
index bea255d2..bb8d5020 100644
--- a/src/m_config.c
+++ b/src/m_config.c
@@ -32,7 +32,7 @@
 #include <errno.h>

 #include "config.h"
-#include "deh_main.h"
+#include "deh_str.h"
 #include "doomtype.h"
 #include "doomkeys.h"
 #include "doomfeatures.h"
diff --git a/src/m_misc.c b/src/m_misc.c
index 88519b3c..db62fd42 100644
--- a/src/m_misc.c
+++ b/src/m_misc.c
@@ -45,7 +45,7 @@
 #include "doomtype.h"
 #include "doomstat.h"

-#include "deh_main.h"
+#include "deh_str.h"

 #include "i_swap.h"
 #include "i_system.h"
diff --git a/src/net_client.c b/src/net_client.c
index 26cd2133..f85f2b94 100644
--- a/src/net_client.c
+++ b/src/net_client.c
@@ -29,6 +29,7 @@
 #include "doomtype.h"
 #include "doomstat.h"
 #include "deh_main.h"
+#include "deh_str.h"
 #include "g_game.h"
 #include "i_system.h"
 #include "i_timer.h"
diff --git a/src/s_sound.c b/src/s_sound.c
index f3f6bf1f..26bbb5fd 100644
--- a/src/s_sound.c
+++ b/src/s_sound.c
@@ -29,7 +29,7 @@
 #include "i_system.h"

 #include "doomfeatures.h"
-#include "deh_main.h"
+#include "deh_str.h"

 #include "doomstat.h"
 #include "doomtype.h"
diff --git a/src/v_video.c b/src/v_video.c
index bea0171c..918e64e1 100644
--- a/src/v_video.c
+++ b/src/v_video.c
@@ -34,7 +34,7 @@
 #include "doomtype.h"
 #include "doomdata.h"

-#include "deh_main.h"
+#include "deh_str.h"
 #include "m_bbox.h"
 #include "i_swap.h"
 #include "i_video.h"