shithub: choc

Download patch

ref: 5ff1698982eb861a55031de14654a195a6895006
parent: ded7e89d0f5ee328b88c90000dcf3e3e2cba7b88
parent: f3ce0c7fdd434b100fd0aa51066602c1a8a7599d
author: Simon Howard <fraggle@soulsphere.org>
date: Sat Mar 17 19:49:03 EDT 2018

Merge branch 'master' of github.com:chocolate-doom/chocolate-doom

--- a/man/Makefile.am
+++ b/man/Makefile.am
@@ -17,6 +17,12 @@
 
 if HAVE_PYTHON
 
+if HAVE_WINDRES
+
+WIN32=-D_WIN32
+
+endif
+
 GENERATED_MAN_PAGES =               \
            @PROGRAM_PREFIX@doom.6         \
            default.cfg.5            \
@@ -73,7 +79,7 @@
                   $(top_srcdir)/src/ $(top_srcdir)/src/doom/ > $@
 
 INSTALL.doom: INSTALL.template
-	$(srcdir)/simplecpp -DDOOM \
+	$(srcdir)/simplecpp -DDOOM $(WIN32) \
             -DLONG_GAME_NAME="@PACKAGE_SHORTNAME@ Doom" \
             -DLONG_EXE_NAME="@PROGRAM_PREFIX@doom" \
             -DPRECOMPILED < $(srcdir)/INSTALL.template > $@
@@ -99,7 +105,7 @@
                   $(top_srcdir)/src/ $(top_srcdir)/src/heretic/ > $@
 
 INSTALL.heretic: INSTALL.template
-	$(srcdir)/simplecpp -DHERETIC \
+	$(srcdir)/simplecpp -DHERETIC $(WIN32) \
             -DLONG_GAME_NAME="@PACKAGE_SHORTNAME@ Heretic" \
             -DLONG_EXE_NAME="@PROGRAM_PREFIX@heretic" \
             -DPRECOMPILED < $(srcdir)/INSTALL.template > $@
@@ -126,7 +132,7 @@
                   $(top_srcdir)/src/ $(top_srcdir)/src/hexen/ > $@
 
 INSTALL.hexen: INSTALL.template
-	$(srcdir)/simplecpp -DHEXEN \
+	$(srcdir)/simplecpp -DHEXEN $(WIN32) \
             -DLONG_GAME_NAME="@PACKAGE_SHORTNAME@ Hexen" \
             -DLONG_EXE_NAME="@PROGRAM_PREFIX@hexen" \
             -DPRECOMPILED < $(srcdir)/INSTALL.template > $@
@@ -163,7 +169,7 @@
                   $(top_srcdir)/src/ $(top_srcdir)/src/strife/ > $@
 
 INSTALL.strife: INSTALL.template
-	$(srcdir)/simplecpp -DSTRIFE  \
+	$(srcdir)/simplecpp -DSTRIFE $(WIN32) \
             -DLONG_EXE_NAME="@PROGRAM_PREFIX@strife" \
             -DLONG_GAME_NAME="@PACKAGE_SHORTNAME@ Strife" \
             -DPRECOMPILED < $(srcdir)/INSTALL.template > $@
--- a/pkg/win32/GNUmakefile
+++ b/pkg/win32/GNUmakefile
@@ -53,11 +53,7 @@
 		cp $(TOPLEVEL)/$$f $@/$$(basename $$f .md).txt;  \
 	done
 	cp $(TOPLEVEL)/man/CMDLINE.$* $@/CMDLINE.txt
-
-	$(TOPLEVEL)/man/simplecpp -D_WIN32 -DPRECOMPILED  \
-	             -D$(shell echo $* | tr a-z A-Z)      \
-	         < $(TOPLEVEL)/man/INSTALL.template       \
-	         > $@/INSTALL.txt
+	cp $(TOPLEVEL)/man/INSTALL.$* $@/INSTALL.txt
 
 clean:
 	rm -f $(ZIPS)
--- a/src/deh_str.c
+++ b/src/deh_str.c
@@ -38,9 +38,9 @@
 
 // This is the algorithm used by glib
 
-static unsigned int strhash(char *s)
+static unsigned int strhash(const char *s)
 {
-    char *p = s;
+    const char *p = s;
     unsigned int h = *p;
   
     if (h)
@@ -52,7 +52,7 @@
     return h;
 }
 
-static deh_substitution_t *SubstitutionForString(char *s)
+static deh_substitution_t *SubstitutionForString(const char *s)
 {
     int entry;
 
@@ -165,7 +165,7 @@
     ++hash_table_entries;
 }
 
-void DEH_AddStringReplacement(char *from_text, char *to_text)
+void DEH_AddStringReplacement(const char *from_text, const char *to_text)
 {
     deh_substitution_t *sub;
     size_t len;
@@ -251,7 +251,7 @@
 // Given the specified string, get the type of the first format
 // string encountered.
 
-static format_arg_t NextFormatArgument(char **str)
+static format_arg_t NextFormatArgument(const char **str)
 {
     format_arg_t argtype;
 
@@ -326,10 +326,10 @@
 
 // Return true if the specified string contains no format arguments.
 
-static boolean ValidFormatReplacement(char *original, char *replacement)
+static boolean ValidFormatReplacement(const char *original, const char *replacement)
 {
-    char *rover1;
-    char *rover2;
+    const char *rover1;
+    const char *rover2;
     int argtype1, argtype2;
 
     // Check each argument in turn and compare types.
--- a/src/deh_str.h
+++ b/src/deh_str.h
@@ -28,7 +28,7 @@
 void DEH_printf(char *fmt, ...) PRINTF_ATTR(1, 2);
 void DEH_fprintf(FILE *fstream, char *fmt, ...) PRINTF_ATTR(2, 3);
 void DEH_snprintf(char *buffer, size_t len, char *fmt, ...) PRINTF_ATTR(3, 4);
-void DEH_AddStringReplacement(char *from_text, char *to_text);
+void DEH_AddStringReplacement(const char *from_text, const char *to_text);
 
 
 #if 0
--- a/src/doom/hu_lib.c
+++ b/src/doom/hu_lib.c
@@ -208,8 +208,8 @@
 void
 HUlib_addMessageToSText
 ( hu_stext_t*	s,
-  char*		prefix,
-  char*		msg )
+  const char*	prefix,
+  const char*	msg )
 {
     HUlib_addLineToSText(s);
     if (prefix)
--- a/src/doom/hu_lib.h
+++ b/src/doom/hu_lib.h
@@ -134,8 +134,8 @@
 void
 HUlib_addMessageToSText
 ( hu_stext_t*	s,
-  char*		prefix,
-  char*		msg );
+  const char*	prefix,
+  const char*	msg );
 
 // draws stext
 void HUlib_drawSText(hu_stext_t* s);
--- a/src/i_sdlmusic.c
+++ b/src/i_sdlmusic.c
@@ -632,32 +632,38 @@
 
 static boolean ReadSubstituteConfig(char *filename)
 {
-    char line[128];
-    FILE *fs;
-    char *error;
+    char *buffer;
+    char *line;
     int linenum = 1;
-//    int old_subst_music_len;
 
-    fs = fopen(filename, "r");
-
-    if (fs == NULL)
+    // This unnecessarily opens the file twice...
+    if (!M_FileExists(filename))
     {
         return false;
     }
 
-//    old_subst_music_len = subst_music_len;
+    M_ReadFile(filename, (byte **) &buffer);
 
-    while (!feof(fs))
+    line = buffer;
+
+    while (line != NULL)
     {
-        char *retval;
-        M_StringCopy(line, "", sizeof(line));
-        retval = fgets(line, sizeof(line), fs);
+        char *error;
+        char *next;
 
-        if (retval == NULL)
+        // find end of line
+        char *eol = strchr(line, '\n');
+        if (eol != NULL)
         {
-            fprintf(stderr, "%s:%i: Unexpected end of file\n", filename, linenum);
-            break;
+            // change the newline into NUL
+            *eol = '\0';
+            next = eol + 1;
         }
+        else
+        {
+            // end of buffer
+            next = NULL;
+        }
 
         error = ParseSubstituteLine(filename, line);
 
@@ -667,9 +673,10 @@
         }
 
         ++linenum;
+        line = next;
     }
 
-    fclose(fs);
+    Z_Free(buffer);
 
     return true;
 }
--- a/src/i_system.c
+++ b/src/i_system.c
@@ -158,7 +158,7 @@
     return zonemem;
 }
 
-void I_PrintBanner(char *msg)
+void I_PrintBanner(const char *msg)
 {
     int i;
     int spaces = 35 - (strlen(msg) / 2);
@@ -181,7 +181,7 @@
     putchar('\n');
 }
 
-void I_PrintStartupBanner(char *gamedescription)
+void I_PrintStartupBanner(const char *gamedescription)
 {
     I_PrintDivider();
     I_PrintBanner(gamedescription);
@@ -261,7 +261,7 @@
 
 static boolean already_quitting = false;
 
-void I_Error (char *error, ...)
+void I_Error (const char *error, ...)
 {
     char msgbuf[512];
     va_list argptr;
--- a/src/i_system.h
+++ b/src/i_system.h
@@ -52,7 +52,7 @@
 // Clean exit, displays sell blurb.
 void I_Quit (void);
 
-void I_Error (char *error, ...) PRINTF_ATTR(1, 2);
+void I_Error (const char *error, ...) PRINTF_ATTR(1, 2);
 
 void I_Tactile (int on, int off, int total);
 
@@ -72,11 +72,11 @@
 
 // Print startup banner copyright message.
 
-void I_PrintStartupBanner(char *gamedescription);
+void I_PrintStartupBanner(const char *gamedescription);
 
 // Print a centered text banner displaying the given string.
 
-void I_PrintBanner(char *text);
+void I_PrintBanner(const char *text);
 
 // Print a dividing line for startup banners.
 
--- a/src/m_misc.c
+++ b/src/m_misc.c
@@ -52,7 +52,7 @@
 // Create a directory
 //
 
-void M_MakeDirectory(char *path)
+void M_MakeDirectory(const char *path)
 {
 #ifdef _WIN32
     mkdir(path);
@@ -63,7 +63,7 @@
 
 // Check if a file exists
 
-boolean M_FileExists(char *filename)
+boolean M_FileExists(const char *filename)
 {
     FILE *fstream;
 
@@ -86,7 +86,7 @@
 // Check if a file exists by probing for common case variation of its filename.
 // Returns a newly allocated string that the caller is responsible for freeing.
 
-char *M_FileCaseExists(char *path)
+char *M_FileCaseExists(const char *path)
 {
     char *path_dup, *filename, *ext;
 
@@ -178,7 +178,7 @@
 // M_WriteFile
 //
 
-boolean M_WriteFile(char *name, void *source, int length)
+boolean M_WriteFile(const char *name, void *source, int length)
 {
     FILE *handle;
     int	count;
@@ -202,7 +202,7 @@
 // M_ReadFile
 //
 
-int M_ReadFile(char *name, byte **buffer)
+int M_ReadFile(const char *name, byte **buffer)
 {
     FILE *handle;
     int	count, length;
@@ -217,7 +217,7 @@
 
     length = M_FileLength(handle);
     
-    buf = Z_Malloc (length, PU_STATIC, NULL);
+    buf = Z_Malloc (length + 1, PU_STATIC, NULL);
     count = fread(buf, 1, length, handle);
     fclose (handle);
 	
@@ -224,6 +224,7 @@
     if (count < length)
 	I_Error ("Couldn't read file %s", name);
 		
+    buf[length] = '\0';
     *buffer = buf;
     return length;
 }
@@ -233,7 +234,7 @@
 //
 // The returned value must be freed with Z_Free after use.
 
-char *M_TempFile(char *s)
+char *M_TempFile(const char *s)
 {
     char *tempdir;
 
@@ -264,10 +265,10 @@
         || sscanf(str, " %d", result) == 1;
 }
 
-void M_ExtractFileBase(char *path, char *dest)
+void M_ExtractFileBase(const char *path, char *dest)
 {
-    char *src;
-    char *filename;
+    const char *src;
+    const char *filename;
     int length;
 
     src = path + strlen(path) - 1;
@@ -343,7 +344,7 @@
 // Case-insensitive version of strstr()
 //
 
-char *M_StrCaseStr(char *haystack, char *needle)
+const char *M_StrCaseStr(const char *haystack, const char *needle)
 {
     unsigned int haystack_len;
     unsigned int needle_len;
--- a/src/m_misc.h
+++ b/src/m_misc.h
@@ -25,18 +25,18 @@
 
 #include "doomtype.h"
 
-boolean M_WriteFile(char *name, void *source, int length);
-int M_ReadFile(char *name, byte **buffer);
-void M_MakeDirectory(char *dir);
-char *M_TempFile(char *s);
-boolean M_FileExists(char *file);
-char *M_FileCaseExists(char *file);
+boolean M_WriteFile(const char *name, void *source, int length);
+int M_ReadFile(const char *name, byte **buffer);
+void M_MakeDirectory(const char *dir);
+char *M_TempFile(const char *s);
+boolean M_FileExists(const char *file);
+char *M_FileCaseExists(const char *file);
 long M_FileLength(FILE *handle);
 boolean M_StrToInt(const char *str, int *result);
-void M_ExtractFileBase(char *path, char *dest);
+void M_ExtractFileBase(const char *path, char *dest);
 void M_ForceUppercase(char *text);
 void M_ForceLowercase(char *text);
-char *M_StrCaseStr(char *haystack, char *needle);
+const char *M_StrCaseStr(const char *haystack, const char *needle);
 char *M_StringDuplicate(const char *orig);
 boolean M_StringCopy(char *dest, const char *src, size_t dest_size);
 boolean M_StringConcat(char *dest, const char *src, size_t dest_size);
--- a/src/w_wad.c
+++ b/src/w_wad.c
@@ -258,7 +258,7 @@
 // Returns -1 if name not found.
 //
 
-lumpindex_t W_CheckNumForName(char* name)
+lumpindex_t W_CheckNumForName(const char *name)
 {
     lumpindex_t i;
 
@@ -307,7 +307,7 @@
 // W_GetNumForName
 // Calls W_CheckNumForName, but bombs out if not found.
 //
-lumpindex_t W_GetNumForName(char* name)
+lumpindex_t W_GetNumForName(const char *name)
 {
     lumpindex_t i;
 
@@ -428,7 +428,7 @@
 //
 // W_CacheLumpName
 //
-void *W_CacheLumpName(char *name, int tag)
+void *W_CacheLumpName(const char *name, int tag)
 {
     return W_CacheLumpNum(W_GetNumForName(name), tag);
 }
@@ -464,7 +464,7 @@
     }
 }
 
-void W_ReleaseLumpName(char *name)
+void W_ReleaseLumpName(const char *name)
 {
     W_ReleaseLumpNum(W_GetNumForName(name));
 }
--- a/src/w_wad.h
+++ b/src/w_wad.h
@@ -56,14 +56,14 @@
 wad_file_t *W_AddFile(char *filename);
 void W_Reload(void);
 
-lumpindex_t W_CheckNumForName(char *name);
-lumpindex_t W_GetNumForName(char *name);
+lumpindex_t W_CheckNumForName(const char *name);
+lumpindex_t W_GetNumForName(const char *name);
 
 int W_LumpLength(lumpindex_t lump);
 void W_ReadLump(lumpindex_t lump, void *dest);
 
 void *W_CacheLumpNum(lumpindex_t lump, int tag);
-void *W_CacheLumpName(char *name, int tag);
+void *W_CacheLumpName(const char *name, int tag);
 
 void W_GenerateHashTable(void);
 
@@ -70,6 +70,6 @@
 extern unsigned int W_LumpNameHash(const char *s);
 
 void W_ReleaseLumpNum(lumpindex_t lump);
-void W_ReleaseLumpName(char *name);
+void W_ReleaseLumpName(const char *name);
 
 #endif
--- a/src/z_native.c
+++ b/src/z_native.c
@@ -442,7 +442,7 @@
 // Z_ChangeTag
 //
 
-void Z_ChangeTag2(void *ptr, int tag, char *file, int line)
+void Z_ChangeTag2(void *ptr, int tag, const char *file, int line)
 {
     memblock_t*	block;
 	
--- a/src/z_zone.c
+++ b/src/z_zone.c
@@ -490,7 +490,7 @@
 //
 // Z_ChangeTag
 //
-void Z_ChangeTag2(void *ptr, int tag, char *file, int line)
+void Z_ChangeTag2(void *ptr, int tag, const char *file, int line)
 {
     memblock_t*	block;
 	
--- a/src/z_zone.h
+++ b/src/z_zone.h
@@ -57,7 +57,7 @@
 void    Z_DumpHeap (int lowtag, int hightag);
 void    Z_FileDumpHeap (FILE *f);
 void    Z_CheckHeap (void);
-void    Z_ChangeTag2 (void *ptr, int tag, char *file, int line);
+void    Z_ChangeTag2 (void *ptr, int tag, const char *file, int line);
 void    Z_ChangeUser(void *ptr, void **user);
 int     Z_FreeMemory (void);
 unsigned int Z_ZoneSize(void);
--- a/textscreen/txt_button.c
+++ b/textscreen/txt_button.c
@@ -93,13 +93,13 @@
     NULL,
 };
 
-void TXT_SetButtonLabel(txt_button_t *button, char *label)
+void TXT_SetButtonLabel(txt_button_t *button, const char *label)
 {
     free(button->label);
     button->label = strdup(label);
 }
 
-txt_button_t *TXT_NewButton(char *label)
+txt_button_t *TXT_NewButton(const char *label)
 {
     txt_button_t *button;
 
@@ -113,7 +113,7 @@
 
 // Button with a callback set automatically
 
-txt_button_t *TXT_NewButton2(char *label, TxtWidgetSignalFunc func,
+txt_button_t *TXT_NewButton2(const char *label, TxtWidgetSignalFunc func,
                              void *user_data)
 {
     txt_button_t *button;
--- a/textscreen/txt_button.h
+++ b/textscreen/txt_button.h
@@ -45,7 +45,7 @@
  * @return             Pointer to the new button widget.
  */
 
-txt_button_t *TXT_NewButton(char *label);
+txt_button_t *TXT_NewButton(const char *label);
 
 /**
  * Create a new button widget, binding the "pressed" signal to a
@@ -57,7 +57,7 @@
  * @return             Pointer to the new button widget.
  */
 
-txt_button_t *TXT_NewButton2(char *label, TxtWidgetSignalFunc func,
+txt_button_t *TXT_NewButton2(const char *label, TxtWidgetSignalFunc func,
                              void *user_data);
 
 /**
@@ -67,7 +67,7 @@
  * @param label        The new label (UTF-8 format).
  */
 
-void TXT_SetButtonLabel(txt_button_t *button, char *label);
+void TXT_SetButtonLabel(txt_button_t *button, const char *label);
 
 #endif /* #ifndef TXT_BUTTON_H */
 
--- a/textscreen/txt_checkbox.c
+++ b/textscreen/txt_checkbox.c
@@ -116,7 +116,7 @@
     NULL,
 };
 
-txt_checkbox_t *TXT_NewCheckBox(char *label, int *variable)
+txt_checkbox_t *TXT_NewCheckBox(const char *label, int *variable)
 {
     txt_checkbox_t *checkbox;
 
@@ -130,7 +130,7 @@
     return checkbox;
 }
 
-txt_checkbox_t *TXT_NewInvertedCheckBox(char *label, int *variable)
+txt_checkbox_t *TXT_NewInvertedCheckBox(const char *label, int *variable)
 {
     txt_checkbox_t *result;
 
--- a/textscreen/txt_checkbox.h
+++ b/textscreen/txt_checkbox.h
@@ -55,7 +55,7 @@
  * @return              Pointer to the new checkbox.
  */
 
-txt_checkbox_t *TXT_NewCheckBox(char *label, int *variable);
+txt_checkbox_t *TXT_NewCheckBox(const char *label, int *variable);
 
 /**
  * Create a new inverted checkbox.
@@ -69,7 +69,7 @@
  * @return              Pointer to the new checkbox.
  */
 
-txt_checkbox_t *TXT_NewInvertedCheckBox(char *label, int *variable);
+txt_checkbox_t *TXT_NewInvertedCheckBox(const char *label, int *variable);
 
 #endif /* #ifndef TXT_CHECKBOX_H */
 
--- a/textscreen/txt_desktop.c
+++ b/textscreen/txt_desktop.c
@@ -220,7 +220,7 @@
     TXT_DrawString("=Help ");
 }
 
-void TXT_SetDesktopTitle(char *title)
+void TXT_SetDesktopTitle(const char *title)
 {
     free(desktop_title);
     desktop_title = strdup(title);
--- a/textscreen/txt_desktop.h
+++ b/textscreen/txt_desktop.h
@@ -39,7 +39,7 @@
  * @param title         The title to display (UTF-8 format).
  */
 
-void TXT_SetDesktopTitle(char *title);
+void TXT_SetDesktopTitle(const char *title);
 
 /**
  * Exit the currently-running main loop and return from the
--- a/textscreen/txt_fileselect.c
+++ b/textscreen/txt_fileselect.c
@@ -155,7 +155,7 @@
     return 0;
 }
 
-char *TXT_SelectFile(char *window_title, char **extensions)
+char *TXT_SelectFile(const char *window_title, char **extensions)
 {
     return NULL;
 }
@@ -517,7 +517,7 @@
 // return a pointer to a string that is a case-insensitive
 // pattern representation (like [Ww][Aa][Dd])
 //
-static char *ExpandExtension(char *orig)
+static char *ExpandExtension(const char *orig)
 {
     int oldlen, newlen, i;
     char *c, *newext = NULL;
@@ -550,7 +550,7 @@
     return newext;
 }
 
-char *TXT_SelectFile(char *window_title, char **extensions)
+char *TXT_SelectFile(const char *window_title, char **extensions)
 {
     unsigned int i;
     size_t len;
--- a/textscreen/txt_fileselect.h
+++ b/textscreen/txt_fileselect.h
@@ -50,7 +50,7 @@
  *                    to select directories.
  */
 
-char *TXT_SelectFile(char *prompt, char **extensions);
+char *TXT_SelectFile(const char *prompt, char **extensions);
 
 /**
  * Create a new txt_fileselect_t widget.
--- a/textscreen/txt_label.c
+++ b/textscreen/txt_label.c
@@ -113,7 +113,7 @@
     NULL,
 };
 
-void TXT_SetLabel(txt_label_t *label, char *value)
+void TXT_SetLabel(txt_label_t *label, const char *value)
 {
     char *p;
     unsigned int y;
@@ -131,7 +131,7 @@
 
     label->h = 1;
 
-    for (p = value; *p != '\0'; ++p)
+    for (p = label->label; *p != '\0'; ++p)
     {
         if (*p == '\n')
         {
@@ -168,7 +168,7 @@
     }
 }
 
-txt_label_t *TXT_NewLabel(char *text)
+txt_label_t *TXT_NewLabel(const char *text)
 {
     txt_label_t *label;
 
--- a/textscreen/txt_label.h
+++ b/textscreen/txt_label.h
@@ -49,7 +49,7 @@
  * @return              Pointer to the new label widget.
  */
 
-txt_label_t *TXT_NewLabel(char *label);
+txt_label_t *TXT_NewLabel(const char *label);
 
 /**
  * Set the string displayed in a label widget.
@@ -58,7 +58,7 @@
  * @param value         The string to display (UTF-8 format).
  */
 
-void TXT_SetLabel(txt_label_t *label, char *value);
+void TXT_SetLabel(txt_label_t *label, const char *value);
 
 /**
  * Set the background color of a label widget.
--- a/textscreen/txt_main.h
+++ b/textscreen/txt_main.h
@@ -180,7 +180,7 @@
 void TXT_SetInputMode(txt_input_mode_t mode);
 
 // Set the window title of the window containing the text mode screen
-void TXT_SetWindowTitle(char *title);
+void TXT_SetWindowTitle(const char *title);
 
 // Safe string copy.
 void TXT_StringCopy(char *dest, const char *src, size_t dest_len);
--- a/textscreen/txt_radiobutton.c
+++ b/textscreen/txt_radiobutton.c
@@ -121,7 +121,7 @@
     NULL,
 };
 
-txt_radiobutton_t *TXT_NewRadioButton(char *label, int *variable, int value)
+txt_radiobutton_t *TXT_NewRadioButton(const char *label, int *variable, int value)
 {
     txt_radiobutton_t *radiobutton;
 
@@ -135,7 +135,7 @@
     return radiobutton;
 }
 
-void TXT_SetRadioButtonLabel(txt_radiobutton_t *radiobutton, char *value)
+void TXT_SetRadioButtonLabel(txt_radiobutton_t *radiobutton, const char *value)
 {
     free(radiobutton->label);
     radiobutton->label = strdup(value);
--- a/textscreen/txt_radiobutton.h
+++ b/textscreen/txt_radiobutton.h
@@ -63,7 +63,7 @@
  * @return               Pointer to the new radio button widget.
  */
 
-txt_radiobutton_t *TXT_NewRadioButton(char *label, int *variable, int value);
+txt_radiobutton_t *TXT_NewRadioButton(const char *label, int *variable, int value);
 
 /**
  * Set the label on a radio button.
@@ -72,7 +72,7 @@
  * @param value          The new label (UTF-8 format).
  */
 
-void TXT_SetRadioButtonLabel(txt_radiobutton_t *radiobutton, char *value);
+void TXT_SetRadioButtonLabel(txt_radiobutton_t *radiobutton, const char *value);
 
 #endif /* #ifndef TXT_RADIOBUTTON_H */
 
--- a/textscreen/txt_sdl.c
+++ b/textscreen/txt_sdl.c
@@ -34,7 +34,7 @@
 
 typedef struct
 {
-    char *name;
+    const char *name;
     const uint8_t *data;
     unsigned int w;
     unsigned int h;
@@ -133,7 +133,7 @@
 
 #endif
 
-static const txt_font_t *FontForName(char *name)
+static const txt_font_t *FontForName(const char *name)
 {
     int i;
     const txt_font_t *fonts[] =
@@ -518,7 +518,7 @@
     }
 }
 
-static int TranslateKeysym(SDL_Keysym *sym)
+static int TranslateKeysym(const SDL_Keysym *sym)
 {
     int translated;
 
@@ -558,7 +558,7 @@
 
 // Convert an SDL wheel motion to a textscreen button index.
 
-static int SDLWheelToTXTButton(SDL_MouseWheelEvent *wheel)
+static int SDLWheelToTXTButton(const SDL_MouseWheelEvent *wheel)
 {
     if (wheel->y <= 0)
     {
@@ -890,7 +890,7 @@
     input_mode = mode;
 }
 
-void TXT_SetWindowTitle(char *title)
+void TXT_SetWindowTitle(const char *title)
 {
     SDL_SetWindowTitle(TXT_SDLWindow, title);
 }
--- a/textscreen/txt_separator.c
+++ b/textscreen/txt_separator.c
@@ -73,7 +73,7 @@
     free(separator->label);
 }
 
-void TXT_SetSeparatorLabel(txt_separator_t *separator, char *label)
+void TXT_SetSeparatorLabel(txt_separator_t *separator, const char *label)
 {
     free(separator->label);
 
@@ -98,7 +98,7 @@
     NULL,
 };
 
-txt_separator_t *TXT_NewSeparator(char *label)
+txt_separator_t *TXT_NewSeparator(const char *label)
 {
     txt_separator_t *separator;
 
--- a/textscreen/txt_separator.h
+++ b/textscreen/txt_separator.h
@@ -50,7 +50,7 @@
  * @return              The new separator widget.
  */
 
-txt_separator_t *TXT_NewSeparator(char *label);
+txt_separator_t *TXT_NewSeparator(const char *label);
 
 /**
  * Change the label on a separator.
@@ -59,7 +59,7 @@
  * @param label         The new label (UTF-8 format).
  */
 
-void TXT_SetSeparatorLabel(txt_separator_t *separator, char *label);
+void TXT_SetSeparatorLabel(txt_separator_t *separator, const char *label);
 
 #endif /* #ifndef TXT_SEPARATOR_H */
 
--- a/textscreen/txt_window.c
+++ b/textscreen/txt_window.c
@@ -52,7 +52,7 @@
     }
 }
 
-txt_window_t *TXT_NewWindow(char *title)
+txt_window_t *TXT_NewWindow(const char *title)
 {
     int i;
 
@@ -508,7 +508,7 @@
     TXT_SetWidgetFocus(window, focused);
 }
 
-void TXT_SetWindowHelpURL(txt_window_t *window, char *help_url)
+void TXT_SetWindowHelpURL(txt_window_t *window, const char *help_url)
 {
     window->help_url = help_url;
 }
@@ -515,7 +515,7 @@
 
 #ifdef _WIN32
 
-void TXT_OpenURL(char *url)
+void TXT_OpenURL(const char *url)
 {
     ShellExecute(NULL, "open", url, NULL, NULL, SW_SHOWNORMAL);
 }
@@ -522,7 +522,7 @@
 
 #else
 
-void TXT_OpenURL(char *url)
+void TXT_OpenURL(const char *url)
 {
     char *cmd;
     size_t cmd_len;
@@ -566,7 +566,7 @@
     }
 }
 
-txt_window_t *TXT_MessageBox(char *title, char *message, ...)
+txt_window_t *TXT_MessageBox(const char *title, const char *message, ...)
 {
     txt_window_t *window;
     char buf[256];
--- a/textscreen/txt_window.h
+++ b/textscreen/txt_window.h
@@ -88,7 +88,7 @@
 
     // URL of a webpage with help about this window. If set, a help key
     // indicator is shown while this window is active.
-    char *help_url;
+    const char *help_url;
 };
 
 /**
@@ -100,7 +100,7 @@
  *                     representing the new window.
  */
 
-txt_window_t *TXT_NewWindow(char *title);
+txt_window_t *TXT_NewWindow(const char *title);
 
 /**
  * Close a window.
@@ -197,7 +197,7 @@
  * @return                The new window.
  */
 
-txt_window_t *TXT_MessageBox(char *title, char *message, ...);
+txt_window_t *TXT_MessageBox(const char *title, const char *message, ...);
 
 /**
  * Set the help URL for the given window.
@@ -207,7 +207,7 @@
  *                        window, or NULL to set no help for this window.
  */
 
-void TXT_SetWindowHelpURL(txt_window_t *window, char *help_url);
+void TXT_SetWindowHelpURL(txt_window_t *window, const char *help_url);
 
 /**
  * Open the help URL for the given window, if one is set.