summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/d_iwad.c2
-rw-r--r--src/d_iwad.h2
-rw-r--r--src/deh_str.c4
-rw-r--r--src/doom/d_main.c4
-rw-r--r--src/doom/d_net.h2
-rw-r--r--src/doom/deh_defs.h2
-rw-r--r--src/doom/deh_main.c4
-rw-r--r--src/doom/deh_ptr.c2
-rw-r--r--src/doom/p_doors.c37
-rw-r--r--src/doom/p_map.c3
-rw-r--r--src/doom/p_spec.c150
-rw-r--r--src/doomtype.h2
-rw-r--r--src/i_joystick.c2
-rw-r--r--src/i_pcsound.c18
-rw-r--r--src/i_sdlmusic.c74
-rw-r--r--src/i_sdlsound.c16
-rw-r--r--src/i_sound.c38
-rw-r--r--src/i_timer.c2
-rw-r--r--src/i_timer.h2
-rw-r--r--src/i_video.c102
-rw-r--r--src/m_config.c9
-rw-r--r--src/m_misc.c8
-rw-r--r--src/m_misc.h1
-rw-r--r--src/net_client.c4
-rw-r--r--src/net_common.c4
-rw-r--r--src/net_defs.h4
-rw-r--r--src/net_gui.c2
-rw-r--r--src/net_loop.c4
-rw-r--r--src/net_sdl.c2
-rw-r--r--src/net_server.c14
-rw-r--r--src/net_server.h2
-rw-r--r--src/setup/Makefile.am1
-rw-r--r--src/setup/execute.c123
-rw-r--r--src/setup/joystick.c2
-rw-r--r--src/setup/mainmenu.c9
-rw-r--r--src/setup/multiplayer.c2
-rw-r--r--src/setup/sound.c29
-rw-r--r--src/w_merge.c2
38 files changed, 473 insertions, 217 deletions
diff --git a/src/d_iwad.c b/src/d_iwad.c
index 59760adb..ba9f9ae1 100644
--- a/src/d_iwad.c
+++ b/src/d_iwad.c
@@ -19,7 +19,7 @@
// 02111-1307, USA.
//
// DESCRIPTION:
-// Search for and locate an IWAD file, and initialise according
+// Search for and locate an IWAD file, and initialize according
// to the IWAD type.
//
//-----------------------------------------------------------------------------
diff --git a/src/d_iwad.h b/src/d_iwad.h
index 055463a9..f95b4258 100644
--- a/src/d_iwad.h
+++ b/src/d_iwad.h
@@ -19,7 +19,7 @@
// 02111-1307, USA.
//
// DESCRIPTION:
-// Find IWAD and initialise according to IWAD type.
+// Find IWAD and initialize according to IWAD type.
//
//-----------------------------------------------------------------------------
diff --git a/src/deh_str.c b/src/deh_str.c
index 3ede4508..0baaa7e8 100644
--- a/src/deh_str.c
+++ b/src/deh_str.c
@@ -66,7 +66,7 @@ char *DEH_String(char *s)
{
int entry;
- // Fallback if we have not initialised the hash table yet
+ // Fallback if we have not initialized the hash table yet
if (hash_table_length < 0)
return s;
@@ -164,7 +164,7 @@ void DEH_AddStringReplacement(char *from_text, char *to_text)
{
deh_substitution_t *sub;
- // Initialise the hash table if this is the first time
+ // Initialize the hash table if this is the first time
if (hash_table_length < 0)
{
diff --git a/src/doom/d_main.c b/src/doom/d_main.c
index 9fa9ae3b..4e7812cc 100644
--- a/src/doom/d_main.c
+++ b/src/doom/d_main.c
@@ -901,7 +901,7 @@ static struct
{ NULL, NULL, 0},
};
-// Initialise the game version
+// Initialize the game version
static void InitGameVersion(void)
{
@@ -1701,7 +1701,7 @@ void D_DoomMain (void)
I_InitJoystick();
#ifdef FEATURE_MULTIPLAYER
- printf ("NET_Init: Initialise network subsystem.\n");
+ printf ("NET_Init: Init network subsystem.\n");
NET_Init ();
#endif
diff --git a/src/doom/d_net.h b/src/doom/d_net.h
index 6d162d20..f801d216 100644
--- a/src/doom/d_net.h
+++ b/src/doom/d_net.h
@@ -42,7 +42,7 @@ void D_QuitNetGame (void);
//? how many ticks to run?
void TryRunTics (void);
-// Called at start of game loop to initialise timers
+// Called at start of game loop to initialize timers
void D_StartGameLoop(void);
extern boolean drone;
diff --git a/src/doom/deh_defs.h b/src/doom/deh_defs.h
index a6650544..e7b76182 100644
--- a/src/doom/deh_defs.h
+++ b/src/doom/deh_defs.h
@@ -41,7 +41,7 @@ struct deh_section_s
{
char *name;
- // Called on startup to initialise code
+ // Called on startup to initialize code
deh_section_init_t init;
diff --git a/src/doom/deh_main.c b/src/doom/deh_main.c
index 59e63ea3..63cae460 100644
--- a/src/doom/deh_main.c
+++ b/src/doom/deh_main.c
@@ -110,7 +110,7 @@ void DEH_Checksum(md5_digest_t digest)
// Called on startup to call the Init functions
-static void InitialiseSections(void)
+static void InitializeSections(void)
{
unsigned int i;
@@ -385,7 +385,7 @@ void DEH_Init(void)
char *filename;
int p;
- InitialiseSections();
+ InitializeSections();
//!
// @category mod
diff --git a/src/doom/deh_ptr.c b/src/doom/deh_ptr.c
index 87daf7d8..d757a178 100644
--- a/src/doom/deh_ptr.c
+++ b/src/doom/deh_ptr.c
@@ -56,7 +56,7 @@ static void DEH_PointerInit(void)
{
int i;
- // Initialise list of dehacked pointers
+ // Initialize list of dehacked pointers
for (i=0; i<NUMSTATES; ++i)
codeptrs[i] = states[i].action;
diff --git a/src/doom/p_doors.c b/src/doom/p_doors.c
index b681a8d0..89b65328 100644
--- a/src/doom/p_doors.c
+++ b/src/doom/p_doors.c
@@ -420,8 +420,41 @@ EV_VerticalDoor
{
if (!thing->player)
return; // JDC: bad guys never close doors
-
- door->direction = -1; // start going down immediately
+
+ // When is a door not a door?
+ // In Vanilla, door->direction is set, even though
+ // "specialdata" might not actually point at a door.
+
+ if (door->thinker.function.acp1 == (actionf_p1) T_VerticalDoor)
+ {
+ door->direction = -1; // start going down immediately
+ }
+ else if (door->thinker.function.acp1 == (actionf_p1) T_PlatRaise)
+ {
+ // Erm, this is a plat, not a door.
+ // This notably causes a problem in ep1-0500.lmp where
+ // a plat and a door are cross-referenced; the door
+ // doesn't open on 64-bit.
+ // The direction field in vldoor_t corresponds to the wait
+ // field in plat_t. Let's set that to -1 instead.
+
+ plat_t *plat;
+
+ plat = (plat_t *) door;
+ plat->wait = -1;
+ }
+ else
+ {
+ // This isn't a door OR a plat. Now we're in trouble.
+
+ fprintf(stderr, "EV_VerticalDoor: Tried to close "
+ "something that wasn't a door.\n");
+
+ // Try closing it anyway. At least it will work on 32-bit
+ // machines.
+
+ door->direction = -1;
+ }
}
return;
}
diff --git a/src/doom/p_map.c b/src/doom/p_map.c
index 9198d59e..3f88aabc 100644
--- a/src/doom/p_map.c
+++ b/src/doom/p_map.c
@@ -36,6 +36,7 @@
#include "doomdef.h"
#include "m_argv.h"
+#include "m_misc.h"
#include "p_local.h"
#include "s_sound.h"
@@ -1412,7 +1413,7 @@ static void SpechitOverrun(line_t *ld)
if (p > 0)
{
- baseaddr = atoi(myargv[p+1]);
+ M_StrToInt(myargv[p+1], (int *) &baseaddr);
}
else
{
diff --git a/src/doom/p_spec.c b/src/doom/p_spec.c
index 27042b5d..37beb850 100644
--- a/src/doom/p_spec.c
+++ b/src/doom/p_spec.c
@@ -38,6 +38,7 @@
#include "i_system.h"
#include "z_zone.h"
#include "m_argv.h"
+#include "m_misc.h"
#include "m_random.h"
#include "w_wad.h"
@@ -1169,10 +1170,94 @@ void P_UpdateSpecials (void)
memset(&buttonlist[i],0,sizeof(button_t));
}
}
-
}
+//
+// Donut overrun emulation
+//
+// Derived from the code from PrBoom+. Thanks go to Andrey Budko (entryway)
+// as usual :-)
+//
+
+#define DONUT_FLOORHEIGHT_DEFAULT 0x00000000
+#define DONUT_FLOORPIC_DEFAULT 0x16
+
+static void DonutOverrun(fixed_t *s3_floorheight, short *s3_floorpic,
+ line_t *line, sector_t *pillar_sector)
+{
+ static int first = 1;
+ static int tmp_s3_floorheight;
+ static int tmp_s3_floorpic;
+
+ extern int numflats;
+
+ if (first)
+ {
+ int p;
+
+ // This is the first time we have had an overrun.
+ first = 0;
+
+ // Default values
+ tmp_s3_floorheight = DONUT_FLOORHEIGHT_DEFAULT;
+ tmp_s3_floorpic = DONUT_FLOORPIC_DEFAULT;
+
+ //!
+ // @category compat
+ // @arg <x> <y>
+ //
+ // Use the specified magic values when emulating behavior caused
+ // by memory overruns from improperly constructed donuts.
+ // In Vanilla Doom this can differ depending on the operating
+ // system. The default (if this option is not specified) is to
+ // emulate the behavior when running under Windows 98.
+
+ p = M_CheckParm("-donut");
+
+ if (p > 0 && p < myargc - 2)
+ {
+ // Dump of needed memory: (fixed_t)0000:0000 and (short)0000:0008
+ //
+ // C:\>debug
+ // -d 0:0
+ //
+ // DOS 6.22:
+ // 0000:0000 (57 92 19 00) F4 06 70 00-(16 00)
+ // DOS 7.1:
+ // 0000:0000 (9E 0F C9 00) 65 04 70 00-(16 00)
+ // Win98:
+ // 0000:0000 (00 00 00 00) 65 04 70 00-(16 00)
+ // DOSBox under XP:
+ // 0000:0000 (00 00 00 F1) ?? ?? ?? 00-(07 00)
+
+ M_StrToInt(myargv[p + 1], &tmp_s3_floorheight);
+ M_StrToInt(myargv[p + 2], &tmp_s3_floorpic);
+
+ if (tmp_s3_floorpic >= numflats)
+ {
+ fprintf(stderr,
+ "DonutOverrun: The second parameter for \"-donut\" "
+ "switch should be greater than 0 and less than number "
+ "of flats (%d). Using default value (%d) instead. \n",
+ numflats, DONUT_FLOORPIC_DEFAULT);
+ tmp_s3_floorpic = DONUT_FLOORPIC_DEFAULT;
+ }
+ }
+ }
+
+ /*
+ fprintf(stderr,
+ "Linedef: %d; Sector: %d; "
+ "New floor height: %d; New floor pic: %d\n",
+ line->iLineID, pillar_sector->iSectorID,
+ tmp_s3_floorheight >> 16, tmp_s3_floorpic);
+ */
+
+ *s3_floorheight = (fixed_t) tmp_s3_floorheight;
+ *s3_floorpic = (short) tmp_s3_floorpic;
+}
+
//
// Special Stuff that can not be categorized
@@ -1186,26 +1271,67 @@ int EV_DoDonut(line_t* line)
int rtn;
int i;
floormove_t* floor;
-
+ fixed_t s3_floorheight;
+ short s3_floorpic;
+
secnum = -1;
rtn = 0;
while ((secnum = P_FindSectorFromLineTag(line,secnum)) >= 0)
{
s1 = &sectors[secnum];
-
+
// ALREADY MOVING? IF SO, KEEP GOING...
if (s1->specialdata)
continue;
-
+
rtn = 1;
s2 = getNextSector(s1->lines[0],s1);
- for (i = 0;i < s2->linecount;i++)
+
+ // Vanilla Doom does not check if the linedef is one sided. The
+ // game does not crash, but reads invalid memory and causes the
+ // sector floor to move "down" to some unknown height.
+ // DOSbox prints a warning about an invalid memory access.
+ //
+ // I'm not sure exactly what invalid memory is being read. This
+ // isn't something that should be done, anyway.
+ // Just print a warning and return.
+
+ if (s2 == NULL)
+ {
+ fprintf(stderr,
+ "EV_DoDonut: linedef had no second sidedef! "
+ "Unexpected behavior may occur in Vanilla Doom. \n");
+ break;
+ }
+
+ for (i = 0; i < s2->linecount; i++)
{
- if ((!s2->lines[i]->flags & ML_TWOSIDED) ||
- (s2->lines[i]->backsector == s1))
- continue;
s3 = s2->lines[i]->backsector;
-
+
+ if (s3 == s1)
+ continue;
+
+ if (s3 == NULL)
+ {
+ // e6y
+ // s3 is NULL, so
+ // s3->floorheight is an int at 0000:0000
+ // s3->floorpic is a short at 0000:0008
+ // Trying to emulate
+
+ fprintf(stderr,
+ "EV_DoDonut: WARNING: emulating buffer overrun due to "
+ "NULL back sector. "
+ "Unexpected behavior may occur in Vanilla Doom.\n");
+
+ DonutOverrun(&s3_floorheight, &s3_floorpic, line, s1);
+ }
+ else
+ {
+ s3_floorheight = s3->floorheight;
+ s3_floorpic = s3->floorpic;
+ }
+
// Spawn rising slime
floor = Z_Malloc (sizeof(*floor), PU_LEVSPEC, 0);
P_AddThinker (&floor->thinker);
@@ -1216,9 +1342,9 @@ int EV_DoDonut(line_t* line)
floor->direction = 1;
floor->sector = s2;
floor->speed = FLOORSPEED / 2;
- floor->texture = s3->floorpic;
+ floor->texture = s3_floorpic;
floor->newspecial = 0;
- floor->floordestheight = s3->floorheight;
+ floor->floordestheight = s3_floorheight;
// Spawn lowering donut-hole
floor = Z_Malloc (sizeof(*floor), PU_LEVSPEC, 0);
@@ -1230,7 +1356,7 @@ int EV_DoDonut(line_t* line)
floor->direction = -1;
floor->sector = s1;
floor->speed = FLOORSPEED / 2;
- floor->floordestheight = s3->floorheight;
+ floor->floordestheight = s3_floorheight;
break;
}
}
diff --git a/src/doomtype.h b/src/doomtype.h
index e38d921f..b458c1cd 100644
--- a/src/doomtype.h
+++ b/src/doomtype.h
@@ -52,7 +52,7 @@
//
// The packed attribute forces structures to be packed into the minimum
// space necessary. If this is not done, the compiler may align structure
-// fields differently to optimise memory access, inflating the overall
+// fields differently to optimize memory access, inflating the overall
// structure size. It is important to use the packed attribute on certain
// structures where alignment is important, particularly data read/written
// to disk.
diff --git a/src/i_joystick.c b/src/i_joystick.c
index d11d3084..7767c19d 100644
--- a/src/i_joystick.c
+++ b/src/i_joystick.c
@@ -115,7 +115,7 @@ void I_InitJoystick(void)
SDL_JoystickEventState(SDL_ENABLE);
- // Initialised okay!
+ // Initialized okay!
printf("I_InitJoystick: %s\n", SDL_JoystickName(joystick_index));
}
diff --git a/src/i_pcsound.c b/src/i_pcsound.c
index 36d4873e..907aeb54 100644
--- a/src/i_pcsound.c
+++ b/src/i_pcsound.c
@@ -36,7 +36,7 @@
#include "pcsound.h"
-static boolean pcs_initialised = false;
+static boolean pcs_initialized = false;
static SDL_mutex *sound_lock;
static boolean use_sfx_prefix;
@@ -178,7 +178,7 @@ static int I_PCS_StartSound(sfxinfo_t *sfxinfo,
{
int result;
- if (!pcs_initialised)
+ if (!pcs_initialized)
{
return -1;
}
@@ -214,7 +214,7 @@ static int I_PCS_StartSound(sfxinfo_t *sfxinfo,
static void I_PCS_StopSound(int handle)
{
- if (!pcs_initialised)
+ if (!pcs_initialized)
{
return;
}
@@ -258,7 +258,7 @@ static int I_PCS_GetSfxLumpNum(sfxinfo_t* sfx)
static boolean I_PCS_SoundIsPlaying(int handle)
{
- if (!pcs_initialised)
+ if (!pcs_initialized)
{
return false;
}
@@ -279,21 +279,21 @@ static boolean I_PCS_InitSound(boolean _use_sfx_prefix)
PCSound_SetSampleRate(snd_samplerate);
- // Initialise the PC speaker subsystem.
+ // Initialize the PC speaker subsystem.
- pcs_initialised = PCSound_Init(PCSCallbackFunc);
+ pcs_initialized = PCSound_Init(PCSCallbackFunc);
- if (pcs_initialised)
+ if (pcs_initialized)
{
sound_lock = SDL_CreateMutex();
}
- return pcs_initialised;
+ return pcs_initialized;
}
static void I_PCS_ShutdownSound(void)
{
- if (pcs_initialised)
+ if (pcs_initialized)
{
PCSound_Shutdown();
}
diff --git a/src/i_sdlmusic.c b/src/i_sdlmusic.c
index 602fd17b..1e907739 100644
--- a/src/i_sdlmusic.c
+++ b/src/i_sdlmusic.c
@@ -43,12 +43,12 @@
#define MAXMIDLENGTH (96 * 1024)
-static boolean music_initialised = false;
+static boolean music_initialized = false;
-// If this is true, this module initialised SDL sound and has the
+// If this is true, this module initialized SDL sound and has the
// responsibility to shut it down
-static boolean sdl_was_initialised = false;
+static boolean sdl_was_initialized = false;
static boolean musicpaused = false;
static int current_music_volume;
@@ -57,21 +57,21 @@ static int current_music_volume;
static void I_SDL_ShutdownMusic(void)
{
- if (music_initialised)
+ if (music_initialized)
{
Mix_HaltMusic();
- music_initialised = false;
+ music_initialized = false;
- if (sdl_was_initialised)
+ if (sdl_was_initialized)
{
Mix_CloseAudio();
SDL_QuitSubSystem(SDL_INIT_AUDIO);
- sdl_was_initialised = false;
+ sdl_was_initialized = false;
}
}
}
-static boolean SDLIsInitialised(void)
+static boolean SDLIsInitialized(void)
{
int freq, channels;
Uint16 format;
@@ -79,25 +79,35 @@ static boolean SDLIsInitialised(void)
return Mix_QuerySpec(&freq, &format, &channels) != 0;
}
-// Initialise music subsystem
+// Initialize music subsystem
static boolean I_SDL_InitMusic(void)
-{
- // When trying to run with music enabled on OSX, display
- // a warning message.
-
-#ifdef __APPLE__
- printf("\n"
- " *** WARNING ***\n"
- " Music playback on OSX may cause crashes and\n"
- " is disabled by default.\n"
- "\n");
+{
+ // SDL_mixer prior to v1.2.11 has a bug that causes crashes
+ // with MIDI playback. Print a warning message if we are
+ // using an old version.
+
+#ifdef __MACOSX__
+ {
+ const SDL_version *v = Mix_Linked_Version();
+
+ if (SDL_VERSIONNUM(v->major, v->minor, v->patch)
+ < SDL_VERSIONNUM(1, 2, 11))
+ {
+ printf("\n"
+ " *** WARNING ***\n"
+ " You are using an old version of SDL_mixer.\n"
+ " Music playback on this version may cause crashes\n"
+ " under OS X and is disabled by default.\n"
+ "\n");
+ }
+ }
#endif
-
- // If SDL_mixer is not initialised, we have to initialise it
+
+ // If SDL_mixer is not initialized, we have to initialize it
// and have the responsibility to shut it down later on.
- if (!SDLIsInitialised())
+ if (!SDLIsInitialized())
{
if (SDL_Init(SDL_INIT_AUDIO) < 0)
{
@@ -107,17 +117,17 @@ static boolean I_SDL_InitMusic(void)
if (Mix_OpenAudio(snd_samplerate, AUDIO_S16SYS, 2, 1024) < 0)
{
- fprintf(stderr, "Error initialising SDL_mixer: %s\n", Mix_GetError());
+ fprintf(stderr, "Error initializing SDL_mixer: %s\n", Mix_GetError());
SDL_QuitSubSystem(SDL_INIT_AUDIO);
return false;
}
SDL_PauseAudio(0);
- sdl_was_initialised = true;
+ sdl_was_initialized = true;
}
- music_initialised = true;
+ music_initialized = true;
return true;
}
@@ -160,7 +170,7 @@ static void I_SDL_PlaySong(void *handle, boolean looping)
Mix_Music *music = (Mix_Music *) handle;
int loops;
- if (!music_initialised)
+ if (!music_initialized)
{
return;
}
@@ -184,7 +194,7 @@ static void I_SDL_PlaySong(void *handle, boolean looping)
static void I_SDL_PauseSong(void)
{
- if (!music_initialised)
+ if (!music_initialized)
{
return;
}
@@ -196,7 +206,7 @@ static void I_SDL_PauseSong(void)
static void I_SDL_ResumeSong(void)
{
- if (!music_initialised)
+ if (!music_initialized)
{
return;
}
@@ -208,7 +218,7 @@ static void I_SDL_ResumeSong(void)
static void I_SDL_StopSong(void)
{
- if (!music_initialised)
+ if (!music_initialized)
{
return;
}
@@ -220,7 +230,7 @@ static void I_SDL_UnRegisterSong(void *handle)
{
Mix_Music *music = (Mix_Music *) handle;
- if (!music_initialised)
+ if (!music_initialized)
{
return;
}
@@ -271,7 +281,7 @@ static void *I_SDL_RegisterSong(void *data, int len)
char *filename;
Mix_Music *music;
- if (!music_initialised)
+ if (!music_initialized)
{
return NULL;
}
@@ -315,7 +325,7 @@ static void *I_SDL_RegisterSong(void *data, int len)
// Is the song playing?
static boolean I_SDL_MusicIsPlaying(void)
{
- if (!music_initialised)
+ if (!music_initialized)
{
return false;
}
diff --git a/src/i_sdlsound.c b/src/i_sdlsound.c
index ff0ef10e..3273907e 100644
--- a/src/i_sdlsound.c
+++ b/src/i_sdlsound.c
@@ -51,7 +51,7 @@
#define LOW_PASS_FILTER
#define NUM_CHANNELS 16
-static boolean sound_initialised = false;
+static boolean sound_initialized = false;
static sfxinfo_t *channels_playing[NUM_CHANNELS];
@@ -311,7 +311,7 @@ static void ExpandSoundData_SDL(sfxinfo_t *sfxinfo,
chunk = AllocateChunk(sfxinfo, expanded_length);
- // If we can, use the standard / optimised SDL conversion routines.
+ // If we can, use the standard / optimized SDL conversion routines.
if (samplerate <= mixer_freq
&& ConvertibleRatio(samplerate, mixer_freq)
@@ -554,7 +554,7 @@ static void I_SDL_UpdateSoundParams(int handle, int vol, int sep)
{
int left, right;
- if (!sound_initialised)
+ if (!sound_initialized)
{
return;
}
@@ -588,7 +588,7 @@ static int I_SDL_StartSound(sfxinfo_t *sfxinfo, int channel, int vol, int sep)
{
Mix_Chunk *chunk;
- if (!sound_initialised)
+ if (!sound_initialized)
{
return -1;
}
@@ -622,7 +622,7 @@ static int I_SDL_StartSound(sfxinfo_t *sfxinfo, int channel, int vol, int sep)
static void I_SDL_StopSound (int handle)
{
- if (!sound_initialised)
+ if (!sound_initialized)
{
return;
}
@@ -670,7 +670,7 @@ static void I_SDL_UpdateSound(void)
static void I_SDL_ShutdownSound(void)
{
- if (!sound_initialised)
+ if (!sound_initialized)
{
return;
}
@@ -678,7 +678,7 @@ static void I_SDL_ShutdownSound(void)
Mix_CloseAudio();
SDL_QuitSubSystem(SDL_INIT_AUDIO);
- sound_initialised = false;
+ sound_initialized = false;
}
@@ -735,7 +735,7 @@ static boolean I_SDL_InitSound(boolean _use_sfx_prefix)
SDL_PauseAudio(0);
- sound_initialised = true;
+ sound_initialized = true;
return true;
}
diff --git a/src/i_sound.c b/src/i_sound.c
index 34f4ea46..a9e953ce 100644
--- a/src/i_sound.c
+++ b/src/i_sound.c
@@ -26,6 +26,8 @@
#include <stdio.h>
#include <stdlib.h>
+#include "SDL_mixer.h"
+
#include "config.h"
#include "doomfeatures.h"
#include "doomtype.h"
@@ -35,14 +37,6 @@
#include "m_argv.h"
#include "m_config.h"
-// Disable music on OSX by default; there are problems with SDL_mixer.
-
-#ifndef __APPLE__
-#define DEFAULT_MUSIC_DEVICE SNDDEVICE_SB
-#else
-#define DEFAULT_MUSIC_DEVICE SNDDEVICE_NONE
-#endif
-
// Sound sample rate to use for digital output (Hz)
int snd_samplerate = 44100;
@@ -52,7 +46,7 @@ int snd_samplerate = 44100;
static sound_module_t *sound_module;
static music_module_t *music_module;
-int snd_musicdevice = DEFAULT_MUSIC_DEVICE;
+int snd_musicdevice = SNDDEVICE_SB;
int snd_sfxdevice = SNDDEVICE_SB;
// Sound modules
@@ -109,7 +103,7 @@ static boolean SndDeviceInList(snddevice_t device, snddevice_t *list,
return false;
}
-// Find and initialise a sound_module_t appropriate for the setting
+// Find and initialize a sound_module_t appropriate for the setting
// in snd_sfxdevice.
static void InitSfxModule(boolean use_sfx_prefix)
@@ -127,7 +121,7 @@ static void InitSfxModule(boolean use_sfx_prefix)
sound_modules[i]->sound_devices,
sound_modules[i]->num_sound_devices))
{
- // Initialise the module
+ // Initialize the module
if (sound_modules[i]->Init(use_sfx_prefix))
{
@@ -138,7 +132,7 @@ static void InitSfxModule(boolean use_sfx_prefix)
}
}
-// Initialise music according to snd_musicdevice.
+// Initialize music according to snd_musicdevice.
static void InitMusicModule(void)
{
@@ -155,7 +149,7 @@ static void InitMusicModule(void)
music_modules[i]->sound_devices,
music_modules[i]->num_sound_devices))
{
- // Initialise the module
+ // Initialize the module
if (music_modules[i]->Init())
{
@@ -200,7 +194,7 @@ void I_InitSound(boolean use_sfx_prefix)
nomusic = M_CheckParm("-nomusic") > 0;
- // Initialise the sound and music subsystems.
+ // Initialize the sound and music subsystems.
if (!nosound && !screensaver_mode)
{
@@ -416,5 +410,21 @@ void I_BindSoundVariables(void)
#ifdef FEATURE_SOUND
M_BindVariable("use_libsamplerate", &use_libsamplerate);
#endif
+
+ // Before SDL_mixer version 1.2.11, MIDI music caused the game
+ // to crash when it looped. If this is an old SDL_mixer version,
+ // disable MIDI.
+
+#ifdef __MACOSX__
+ {
+ const SDL_version *v = Mix_Linked_Version();
+
+ if (SDL_VERSIONNUM(v->major, v->minor, v->patch)
+ < SDL_VERSIONNUM(1, 2, 11))
+ {
+ snd_musicdevice = SNDDEVICE_NONE;
+ }
+ }
+#endif
}
diff --git a/src/i_timer.c b/src/i_timer.c
index ef97b7b7..d2c455e9 100644
--- a/src/i_timer.c
+++ b/src/i_timer.c
@@ -81,7 +81,7 @@ void I_WaitVBL(int count)
void I_InitTimer(void)
{
- // initialise timer
+ // initialize timer
SDL_Init(SDL_INIT_TIMER);
}
diff --git a/src/i_timer.h b/src/i_timer.h
index 17390884..56810468 100644
--- a/src/i_timer.h
+++ b/src/i_timer.h
@@ -40,7 +40,7 @@ int I_GetTimeMS (void);
// Pause for a specified number of ms
void I_Sleep(int ms);
-// Initialise timer
+// Initialize timer
void I_InitTimer(void);
// Wait for vertical retrace or pause a bit.
diff --git a/src/i_video.c b/src/i_video.c
index 6f82e60a..64a2e8eb 100644
--- a/src/i_video.c
+++ b/src/i_video.c
@@ -93,6 +93,9 @@ static const char shiftxform[] =
};
+#define LOADING_DISK_W 16
+#define LOADING_DISK_H 16
+
// Non aspect ratio-corrected modes (direct multiples of 320x200)
static screen_mode_t *screen_modes[] = {
@@ -145,7 +148,7 @@ static int windowwidth, windowheight;
// display has been set up?
-static boolean initialised = false;
+static boolean initialized = false;
// disable mouse?
@@ -221,7 +224,6 @@ static grabmouse_callback_t grabmouse_callback = NULL;
// restored by EndRead
static byte *disk_image = NULL;
-static int disk_image_w, disk_image_h;
static byte *saved_background;
static boolean window_focused;
@@ -338,7 +340,7 @@ static void UpdateFocus(void)
state = SDL_GetAppState();
// We should have input (keyboard) focus and be visible
- // (not minimised)
+ // (not minimized)
window_focused = (state & SDL_APPINPUTFOCUS) && (state & SDL_APPACTIVE);
@@ -378,20 +380,18 @@ void I_EnableLoadingDisk(void)
tmpbuf = Z_Malloc(SCREENWIDTH * (disk->height + 1), PU_STATIC, NULL);
V_UseBuffer(tmpbuf);
- disk_image_w = SHORT(disk->width);
- disk_image_h = SHORT(disk->height);
- V_DrawPatch(0, 0, disk);
+ // Draw the disk to the screen:
- // Copy the disk into the disk_image buffer.
+ V_DrawPatch(0, 0, disk);
- disk_image = Z_Malloc(disk_image_w * disk_image_h, PU_STATIC, NULL);
- saved_background = Z_Malloc(disk_image_w * disk_image_h, PU_STATIC, NULL);
+ disk_image = Z_Malloc(LOADING_DISK_W * LOADING_DISK_H, PU_STATIC, NULL);
+ saved_background = Z_Malloc(LOADING_DISK_W * LOADING_DISK_H, PU_STATIC, NULL);
- for (y=0; y<disk_image_h; ++y)
+ for (y=0; y<LOADING_DISK_H; ++y)
{
- memcpy(disk_image + disk_image_w * y,
+ memcpy(disk_image + LOADING_DISK_W * y,
tmpbuf + SCREENWIDTH * y,
- disk_image_w);
+ LOADING_DISK_W);
}
// All done - free the screen buffer and restore the normal
@@ -435,7 +435,9 @@ static int TranslateKey(SDL_keysym *sym)
case SDLK_PAUSE: return KEY_PAUSE;
+#if !SDL_VERSION_ATLEAST(1, 3, 0)
case SDLK_EQUALS: return KEY_EQUALS;
+#endif
case SDLK_MINUS: return KEY_MINUS;
@@ -448,9 +450,11 @@ static int TranslateKey(SDL_keysym *sym)
return KEY_RCTRL;
case SDLK_LALT:
- case SDLK_LMETA:
case SDLK_RALT:
+#if !SDL_VERSION_ATLEAST(1, 3, 0)
+ case SDLK_LMETA:
case SDLK_RMETA:
+#endif
return KEY_RALT;
case SDLK_CAPSLOCK: return KEY_CAPSLOCK;
@@ -497,14 +501,14 @@ static int TranslateKey(SDL_keysym *sym)
void I_ShutdownGraphics(void)
{
- if (initialised)
+ if (initialized)
{
SDL_ShowCursor(1);
SDL_WM_GrabInput(SDL_GRAB_OFF);
SDL_QuitSubSystem(SDL_INIT_VIDEO);
- initialised = false;
+ initialized = false;
}
}
@@ -521,9 +525,15 @@ void I_StartFrame (void)
static int MouseButtonState(void)
{
- Uint8 state = SDL_GetMouseState(NULL, NULL);
+ Uint8 state;
int result = 0;
+#if SDL_VERSION_ATLEAST(1, 3, 0)
+ state = SDL_GetMouseState(0, NULL, NULL);
+#else
+ state = SDL_GetMouseState(NULL, NULL);
+#endif
+
// Note: button "0" is left, button "1" is right,
// button "2" is middle for Doom. This is different
// to how SDL sees things.
@@ -739,7 +749,11 @@ static void CenterMouse(void)
// Clear any relative movement caused by warping
SDL_PumpEvents();
+#if SDL_VERSION_ATLEAST(1, 3, 0)
+ SDL_GetRelativeMouseState(0, NULL, NULL);
+#else
SDL_GetRelativeMouseState(NULL, NULL);
+#endif
}
//
@@ -753,7 +767,11 @@ static void I_ReadMouse(void)
int x, y;
event_t ev;
+#if SDL_VERSION_ATLEAST(1, 3, 0)
+ SDL_GetRelativeMouseState(0, &x, &y);
+#else
SDL_GetRelativeMouseState(&x, &y);
+#endif
if (x != 0 || y != 0)
{
@@ -784,7 +802,7 @@ static void I_ReadMouse(void)
//
void I_StartTic (void)
{
- if (!initialised)
+ if (!initialized)
{
return;
}
@@ -898,50 +916,54 @@ static void UpdateRect(int x1, int y1, int x2, int y2)
void I_BeginRead(void)
{
+ byte *screenloc = I_VideoBuffer
+ + (SCREENHEIGHT - LOADING_DISK_H) * SCREENWIDTH
+ + (SCREENWIDTH - LOADING_DISK_W);
int y;
- if (!initialised || disk_image == NULL)
+ if (!initialized || disk_image == NULL)
return;
// save background and copy the disk image in
- for (y=0; y<disk_image_h; ++y)
+ for (y=0; y<LOADING_DISK_H; ++y)
{
- byte *screenloc =
- I_VideoBuffer
- + (SCREENHEIGHT - 1 - disk_image_h + y) * SCREENWIDTH
- + (SCREENWIDTH - 1 - disk_image_w);
-
- memcpy(saved_background + y * disk_image_w,
+ memcpy(saved_background + y * LOADING_DISK_W,
screenloc,
- disk_image_w);
- memcpy(screenloc, disk_image + y * disk_image_w, disk_image_w);
+ LOADING_DISK_W);
+ memcpy(screenloc,
+ disk_image + y * LOADING_DISK_W,
+ LOADING_DISK_W);
+
+ screenloc += SCREENWIDTH;
}
- UpdateRect(SCREENWIDTH - disk_image_w, SCREENHEIGHT - disk_image_h,
+ UpdateRect(SCREENWIDTH - LOADING_DISK_W, SCREENHEIGHT - LOADING_DISK_H,
SCREENWIDTH, SCREENHEIGHT);
}
void I_EndRead(void)
{
+ byte *screenloc = I_VideoBuffer
+ + (SCREENHEIGHT - LOADING_DISK_H) * SCREENWIDTH
+ + (SCREENWIDTH - LOADING_DISK_W);
int y;
- if (!initialised || disk_image == NULL)
+ if (!initialized || disk_image == NULL)
return;
// save background and copy the disk image in
- for (y=0; y<disk_image_h; ++y)
+ for (y=0; y<LOADING_DISK_H; ++y)
{
- byte *screenloc =
- I_VideoBuffer
- + (SCREENHEIGHT - 1 - disk_image_h + y) * SCREENWIDTH
- + (SCREENWIDTH - 1 - disk_image_w);
+ memcpy(screenloc,
+ saved_background + y * LOADING_DISK_W,
+ LOADING_DISK_W);
- memcpy(screenloc, saved_background + y * disk_image_w, disk_image_w);
+ screenloc += SCREENWIDTH;
}
- UpdateRect(SCREENWIDTH - disk_image_w, SCREENHEIGHT - disk_image_h,
+ UpdateRect(SCREENWIDTH - LOADING_DISK_W, SCREENHEIGHT - LOADING_DISK_H,
SCREENWIDTH, SCREENHEIGHT);
}
@@ -955,7 +977,7 @@ void I_FinishUpdate (void)
int i;
// UNUSED static unsigned char *bigscreen=0;
- if (!initialised)
+ if (!initialized)
return;
if (noblit)
@@ -1697,7 +1719,7 @@ void I_InitGraphics(void)
if (SDL_Init(SDL_INIT_VIDEO) < 0)
{
- I_Error("Failed to initialise video: %s", SDL_GetError());
+ I_Error("Failed to initialize video: %s", SDL_GetError());
}
// Check for command-line video-related parameters.
@@ -1750,7 +1772,9 @@ void I_InitGraphics(void)
// has to be done before the call to SDL_SetVideoMode.
I_InitWindowTitle();
+#if !SDL_VERSION_ATLEAST(1, 3, 0)
I_InitWindowIcon();
+#endif
// Set the video mode.
@@ -1874,7 +1898,7 @@ void I_InitGraphics(void)
CenterMouse();
}
- initialised = true;
+ initialized = true;
// Call I_ShutdownGraphics on quit
diff --git a/src/m_config.c b/src/m_config.c
index f70e112a..056861cc 100644
--- a/src/m_config.c
+++ b/src/m_config.c
@@ -1214,7 +1214,14 @@ static void LoadDefaultCollection(default_collection_t *collection)
intparm = ParseIntParameter(strparm);
def->untranslated = intparm;
- intparm = scantokey[intparm];
+ if (intparm >= 0 && intparm < 128)
+ {
+ intparm = scantokey[intparm];
+ }
+ else
+ {
+ intparm = 0;
+ }
def->original_translated = intparm;
* (int *) def->location = intparm;
diff --git a/src/m_misc.c b/src/m_misc.c
index 4f3becfb..5847f1a2 100644
--- a/src/m_misc.c
+++ b/src/m_misc.c
@@ -199,6 +199,14 @@ char *M_TempFile(char *s)
return result;
}
+boolean M_StrToInt(const char *str, int *result)
+{
+ return sscanf(str, " 0x%x", result) == 1
+ || sscanf(str, " 0X%x", result) == 1
+ || sscanf(str, " 0%o", result) == 1
+ || sscanf(str, " %d", result) == 1;
+}
+
void M_ExtractFileBase(char *path, char *dest)
{
char* src;
diff --git a/src/m_misc.h b/src/m_misc.h
index ec70a405..c92ddde8 100644
--- a/src/m_misc.h
+++ b/src/m_misc.h
@@ -39,6 +39,7 @@ void M_MakeDirectory(char *dir);
char *M_TempFile(char *s);
boolean M_FileExists(char *file);
long M_FileLength(FILE *handle);
+boolean M_StrToInt(const char *str, int *result);
void M_ExtractFileBase(char *path, char *dest);
void M_ForceUppercase(char *text);
diff --git a/src/net_client.c b/src/net_client.c
index bcd5831d..131397e9 100644
--- a/src/net_client.c
+++ b/src/net_client.c
@@ -1155,7 +1155,7 @@ boolean NET_CL_Connect(net_addr_t *addr)
client_context = NET_NewContext();
- // initialise module for client mode
+ // initialize module for client mode
if (!addr->module->InitClient())
{
@@ -1167,7 +1167,7 @@ boolean NET_CL_Connect(net_addr_t *addr)
net_client_connected = true;
net_client_received_wait_data = false;
- // Initialise connection
+ // Initialize connection
NET_Conn_InitClient(&client_connection, addr);
diff --git a/src/net_common.c b/src/net_common.c
index d1d4390a..57699fd9 100644
--- a/src/net_common.c
+++ b/src/net_common.c
@@ -61,7 +61,7 @@ static void NET_Conn_Init(net_connection_t *conn, net_addr_t *addr)
conn->reliable_recv_seq = 0;
}
-// Initialise as a client connection
+// Initialize as a client connection
void NET_Conn_InitClient(net_connection_t *conn, net_addr_t *addr)
{
@@ -69,7 +69,7 @@ void NET_Conn_InitClient(net_connection_t *conn, net_addr_t *addr)
conn->state = NET_CONN_STATE_CONNECTING;
}
-// Initialise as a server connection
+// Initialize as a server connection
void NET_Conn_InitServer(net_connection_t *conn, net_addr_t *addr)
{
diff --git a/src/net_defs.h b/src/net_defs.h
index cb491124..a5fddc4d 100644
--- a/src/net_defs.h
+++ b/src/net_defs.h
@@ -60,11 +60,11 @@ struct _net_packet_s
struct _net_module_s
{
- // Initialise this module for use as a client
+ // Initialize this module for use as a client
boolean (*InitClient)(void);
- // Initialise this module for use as a server
+ // Initialize this module for use as a server
boolean (*InitServer)(void);
diff --git a/src/net_gui.c b/src/net_gui.c
index da7bde04..8c848d1c 100644
--- a/src/net_gui.c
+++ b/src/net_gui.c
@@ -263,7 +263,7 @@ void NET_WaitForStart(void)
{
if (!TXT_Init())
{
- fprintf(stderr, "Failed to initialise GUI\n");
+ fprintf(stderr, "Failed to initialize GUI\n");
exit(-1);
}
diff --git a/src/net_loop.c b/src/net_loop.c
index 825609d9..9f371bcb 100644
--- a/src/net_loop.c
+++ b/src/net_loop.c
@@ -99,7 +99,7 @@ static boolean NET_CL_InitClient(void)
static boolean NET_CL_InitServer(void)
{
- I_Error("NET_CL_InitServer: attempted to initialise client pipe end as a server!");
+ I_Error("NET_CL_InitServer: attempted to initialize client pipe end as a server!");
return false;
}
@@ -161,7 +161,7 @@ net_module_t net_loop_client_module =
static boolean NET_SV_InitClient(void)
{
- I_Error("NET_SV_InitClient: attempted to initialise server pipe end as a client!");
+ I_Error("NET_SV_InitClient: attempted to initialize server pipe end as a client!");
return false;
}
diff --git a/src/net_sdl.c b/src/net_sdl.c
index db129853..aa7fbd6e 100644
--- a/src/net_sdl.c
+++ b/src/net_sdl.c
@@ -57,7 +57,7 @@ typedef struct
static addrpair_t **addr_table;
static int addr_table_size = -1;
-// Initialises the address table
+// Initializes the address table
static void NET_SDL_InitAddrTable(void)
{
diff --git a/src/net_server.c b/src/net_server.c
index 5e256122..904d932e 100644
--- a/src/net_server.c
+++ b/src/net_server.c
@@ -120,7 +120,7 @@ typedef struct
} net_client_recv_t;
static net_server_state_t server_state;
-static boolean server_initialised = false;
+static boolean server_initialized = false;
static net_client_t clients[MAXNETNODES];
static net_client_t *sv_players[MAXPLAYERS];
static net_context_t *server_context;
@@ -613,7 +613,7 @@ static void NET_SV_ParseSYN(net_packet_t *packet,
return;
}
- // Activate, initialise connection
+ // Activate, initialize connection
NET_SV_InitNewClient(client, addr, player_name);
@@ -1490,13 +1490,13 @@ void NET_SV_AddModule(net_module_t *module)
NET_AddModule(server_context, module);
}
-// Initialise server and wait for connections
+// Initialize server and wait for connections
void NET_SV_Init(void)
{
int i;
- // initialise send/receive context
+ // initialize send/receive context
server_context = NET_NewContext();
@@ -1511,7 +1511,7 @@ void NET_SV_Init(void)
server_state = SERVER_WAITING_START;
sv_gamemode = indetermined;
- server_initialised = true;
+ server_initialized = true;
}
// Run server code to check for new packets/send packets as the server
@@ -1523,7 +1523,7 @@ void NET_SV_Run(void)
net_packet_t *packet;
int i;
- if (!server_initialised)
+ if (!server_initialized)
{
return;
}
@@ -1565,7 +1565,7 @@ void NET_SV_Shutdown(void)
boolean running;
int start_time;
- if (!server_initialised)
+ if (!server_initialized)
{
return;
}
diff --git a/src/net_server.h b/src/net_server.h
index 3d0cf6e4..93b22fc3 100644
--- a/src/net_server.h
+++ b/src/net_server.h
@@ -24,7 +24,7 @@
#ifndef NET_SERVER_H
#define NET_SERVER_H
-// initialise server and wait for connections
+// initialize server and wait for connections
void NET_SV_Init(void);
diff --git a/src/setup/Makefile.am b/src/setup/Makefile.am
index 737dd278..58561b62 100644
--- a/src/setup/Makefile.am
+++ b/src/setup/Makefile.am
@@ -2,6 +2,7 @@
gamesdir = $(prefix)/games
AM_CFLAGS = @SDL_CFLAGS@ \
+ @SDLMIXER_CFLAGS@ \
-I$(top_builddir)/textscreen -I.. \
-DINSTALL_DIR="\"$(gamesdir)\""
diff --git a/src/setup/execute.c b/src/setup/execute.c
index 18a07156..be7214f5 100644
--- a/src/setup/execute.c
+++ b/src/setup/execute.c
@@ -159,81 +159,69 @@ static unsigned int WaitForProcessExit(HANDLE subprocess)
}
}
-static wchar_t *GetFullExePath(const char *program)
+static void ConcatWCString(wchar_t *buf, const char *value)
+{
+ MultiByteToWideChar(CP_OEMCP, 0,
+ value, strlen(value) + 1,
+ buf + wcslen(buf), strlen(value) + 1);
+}
+
+// Build the command line string, a wide character string of the form:
+//
+// "program" "arg"
+
+static wchar_t *BuildCommandLine(const char *program, const char *arg)
{
wchar_t *result;
- unsigned int path_len;
char *sep;
- // Find the full path to the EXE to execute, by taking the path
- // to this program and concatenating the EXE name:
+ result = calloc(strlen(myargv[0]) + strlen(program) + strlen(arg) + 6,
+ sizeof(wchar_t));
+
+ wcscpy(result, L"\"");
sep = strrchr(myargv[0], DIR_SEPARATOR);
- if (sep == NULL)
- {
- path_len = 0;
- result = calloc(strlen(program) + 1, sizeof(wchar_t));
- }
- else
+ if (sep != NULL)
{
- path_len = sep - myargv[0] + 1;
-
- result = calloc(path_len + strlen(program) + 1,
- sizeof(wchar_t));
- MultiByteToWideChar(CP_OEMCP, 0,
- myargv[0], path_len,
- result, path_len);
- }
-
- MultiByteToWideChar(CP_OEMCP, 0,
- program, strlen(program) + 1,
- result + path_len, strlen(program) + 1);
-
- return result;
-}
+ ConcatWCString(result, myargv[0]);
-// Convert command line argument to wchar_t string and add surrounding
-// "" quotes:
+ // Cut off the string after the last directory separator,
+ // before appending the actual program.
-static wchar_t *GetPaddedWideArg(const char *arg)
-{
- wchar_t *result;
- unsigned int len = strlen(arg);
+ result[sep - myargv[0] + 2] = '\0';
+
+ }
- // Convert the command line arg to a wide char string:
+ ConcatWCString(result, program);
- result = calloc(len + 3, sizeof(wchar_t));
- MultiByteToWideChar(CP_OEMCP, 0,
- arg, len + 1,
- result + 1, len + 1);
+ wcscat(result, L"\" \"");
- // Surrounding quotes:
+ ConcatWCString(result, arg);
- result[0] = '"';
- result[len + 1] = '"';
- result[len + 2] = 0;
+ wcscat(result, L"\"");
return result;
}
static int ExecuteCommand(const char *program, const char *arg)
{
+ STARTUPINFOW startup_info;
PROCESS_INFORMATION proc_info;
- wchar_t *exe_path;
- wchar_t *warg;
+ wchar_t *command;
int result = 0;
- exe_path = GetFullExePath(program);
- warg = GetPaddedWideArg(arg);
+ command = BuildCommandLine(program, arg);
// Invoke the program:
memset(&proc_info, 0, sizeof(proc_info));
+ memset(&startup_info, 0, sizeof(startup_info));
+ startup_info.cb = sizeof(startup_info);
- if (!CreateProcessW(exe_path, warg,
- NULL, NULL, FALSE, 0, NULL, NULL, NULL,
- &proc_info))
+ if (!CreateProcessW(NULL, command,
+ NULL, NULL, FALSE, 0, NULL, NULL,
+ &startup_info, &proc_info))
{
result = -1;
}
@@ -247,19 +235,48 @@ static int ExecuteCommand(const char *program, const char *arg)
CloseHandle(proc_info.hThread);
}
- free(exe_path);
- free(warg);
+ free(command);
return result;
}
#else
+// Given the specified program name, get the full path to the program,
+// assuming that it is in the same directory as this program is.
+
+static char *GetFullExePath(const char *program)
+{
+ char *result;
+ char *sep;
+ unsigned int path_len;
+
+ sep = strrchr(myargv[0], DIR_SEPARATOR);
+
+ if (sep == NULL)
+ {
+ result = strdup(program);
+ }
+ else
+ {
+ path_len = sep - myargv[0] + 1;
+
+ result = malloc(strlen(program) + path_len + 1);
+
+ strncpy(result, myargv[0], path_len);
+ result[path_len] = '\0';
+
+ strcat(result, program);
+ }
+
+ return result;
+}
+
static int ExecuteCommand(const char *program, const char *arg)
{
pid_t childpid;
int result;
- const char *argv[] = { program, arg, NULL };
+ const char *argv[3];
childpid = fork();
@@ -267,7 +284,11 @@ static int ExecuteCommand(const char *program, const char *arg)
{
// This is the child. Execute the command.
- execv(argv[0], (char **) argv);
+ argv[0] = GetFullExePath(program);
+ argv[1] = arg;
+ argv[2] = NULL;
+
+ execvp(argv[0], (char **) argv);
exit(-1);
}
diff --git a/src/setup/joystick.c b/src/setup/joystick.c
index 3d2b713b..0094dd81 100644
--- a/src/setup/joystick.c
+++ b/src/setup/joystick.c
@@ -38,7 +38,7 @@ typedef enum
CALIBRATE_UP,
} calibration_stage_t;
-// SDL joystick successfully initialised?
+// SDL joystick successfully initialized?
static int joystick_initted = 0;
diff --git a/src/setup/mainmenu.c b/src/setup/mainmenu.c
index 3b79bc94..46e4b4e6 100644
--- a/src/setup/mainmenu.c
+++ b/src/setup/mainmenu.c
@@ -19,6 +19,7 @@
// 02111-1307, USA.
//
+#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -175,6 +176,10 @@ void MainMenu(void)
TXT_SetWindowAction(window, TXT_HORIZ_LEFT, quit_action);
}
+//
+// Initialize all configuration variables, load config file, etc
+//
+
static void InitConfig(void)
{
InitBindings();
@@ -228,7 +233,7 @@ static void SetIcon(void)
}
//
-// Initialise and run the textscreen GUI.
+// Initialize and run the textscreen GUI.
//
static void RunGUI(void)
@@ -237,7 +242,7 @@ static void RunGUI(void)
if (!TXT_Init())
{
- fprintf(stderr, "Failed to initialise GUI\n");
+ fprintf(stderr, "Failed to initialize GUI\n");
exit(-1);
}
diff --git a/src/setup/multiplayer.c b/src/setup/multiplayer.c
index 131ec068..f3b3221d 100644
--- a/src/setup/multiplayer.c
+++ b/src/setup/multiplayer.c
@@ -783,7 +783,7 @@ void SetChatMacroDefaults(void)
HUSTR_CHATMACRO0,
};
- // If the chat macros have not been set, initialise with defaults.
+ // If the chat macros have not been set, initialize with defaults.
for (i=0; i<10; ++i)
{
diff --git a/src/setup/sound.c b/src/setup/sound.c
index 0361ac62..97037ee9 100644
--- a/src/setup/sound.c
+++ b/src/setup/sound.c
@@ -23,6 +23,8 @@
#include <stdlib.h>
+#include "SDL_mixer.h"
+
#include "textscreen.h"
#include "m_config.h"
@@ -60,19 +62,10 @@ static char *musicmode_strings[] =
"CD audio"
};
-// Disable MIDI music on OSX: there are problems with the native
-// MIDI code in SDL_mixer.
-
-#ifdef __MACOSX__
-#define DEFAULT_MUSIC_DEVICE SNDDEVICE_NONE
-#else
-#define DEFAULT_MUSIC_DEVICE SNDDEVICE_SB
-#endif
-
// Config file variables:
int snd_sfxdevice = SNDDEVICE_SB;
-int snd_musicdevice = DEFAULT_MUSIC_DEVICE;
+int snd_musicdevice = SNDDEVICE_SB;
int snd_samplerate = 22050;
static int numChannels = 8;
@@ -237,5 +230,21 @@ void BindSoundVariables(void)
M_BindVariable("snd_sbirq", &snd_sbirq);
M_BindVariable("snd_sbdma", &snd_sbdma);
M_BindVariable("snd_mport", &snd_mport);
+
+ // Before SDL_mixer version 1.2.11, MIDI music caused the game
+ // to crash when it looped. If this is an old SDL_mixer version,
+ // disable MIDI.
+
+#ifdef __MACOSX__
+ {
+ const SDL_version *v = Mix_Linked_Version();
+
+ if (SDL_VERSIONNUM(v->major, v->minor, v->patch)
+ < SDL_VERSIONNUM(1, 2, 11))
+ {
+ snd_musicdevice = SNDDEVICE_NONE;
+ }
+ }
+#endif
}
diff --git a/src/w_merge.c b/src/w_merge.c
index 8f5690c9..150f075c 100644
--- a/src/w_merge.c
+++ b/src/w_merge.c
@@ -144,7 +144,7 @@ static void SetupLists(void)
SetupList(&pwad_sprites, &pwad, "S_START", "S_END", "SS_START", "SS_END");
}
-// Initialise the replace list
+// Initialize the replace list
static void InitSpriteList(void)
{