From 7c82c576a3e3e4522dd528c3643a2396b9bee2eb Mon Sep 17 00:00:00 2001 From: Edoardo Prezioso Date: Tue, 29 Dec 2015 10:33:20 +0100 Subject: [PATCH 1/3] - Fixed Linux compiler errors and snd_mididevice. -- errno.h is required for 'errno'; -- don't use str(n)casecmp and rely on ZDoom CMake handling; -- add a missing parenthesis around a 'signed char' cast; -- remove an unneeded GNU_SOURCE redefinition; -- the non-MSVC side of snd_mididevice was not adapted to the new code, making wildmidi unavailable through the menu. --- src/sound/music_midi_base.cpp | 4 ++-- src/wildmidi/file_io.cpp | 2 ++ src/wildmidi/lock.cpp | 1 - src/wildmidi/wildmidi_lib.cpp | 44 +++++++++++++++++------------------ 4 files changed, 26 insertions(+), 25 deletions(-) diff --git a/src/sound/music_midi_base.cpp b/src/sound/music_midi_base.cpp index e1afa09a8..048e52e3f 100644 --- a/src/sound/music_midi_base.cpp +++ b/src/sound/music_midi_base.cpp @@ -198,8 +198,8 @@ CCMD (snd_listmididevices) CUSTOM_CVAR(Int, snd_mididevice, -1, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) { - if (self < -5) - self = -5; + if (self < -6) + self = -6; else if (self > -1) self = -1; else diff --git a/src/wildmidi/file_io.cpp b/src/wildmidi/file_io.cpp index f14e22bbf..c2ef55715 100644 --- a/src/wildmidi/file_io.cpp +++ b/src/wildmidi/file_io.cpp @@ -33,6 +33,8 @@ ** */ +#include + #include "../files.h" #include "wm_error.h" #include "file_io.h" diff --git a/src/wildmidi/lock.cpp b/src/wildmidi/lock.cpp index f8abfe926..c5d3fc7da 100644 --- a/src/wildmidi/lock.cpp +++ b/src/wildmidi/lock.cpp @@ -29,7 +29,6 @@ #ifdef _WIN32 #include #else -#define _GNU_SOURCE #include #endif diff --git a/src/wildmidi/wildmidi_lib.cpp b/src/wildmidi/wildmidi_lib.cpp index f20420e75..8f8d558b9 100644 --- a/src/wildmidi/wildmidi_lib.cpp +++ b/src/wildmidi/wildmidi_lib.cpp @@ -47,11 +47,11 @@ #ifdef _WIN32 #include #include -*/ #undef strcasecmp #define strcasecmp _stricmp #undef strncasecmp #define strncasecmp _strnicmp +*/ @@ -699,7 +699,7 @@ static int WM_LoadConfig(const char *config_file) { if (config_ptr != line_start_ptr) { line_tokens = WM_LC_Tokenize_Line(&config_buffer[line_start_ptr]); if (line_tokens) { - if (strcasecmp(line_tokens[0], "dir") == 0) { + if (stricmp(line_tokens[0], "dir") == 0) { free(config_dir); if (!line_tokens[1]) { _WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_INVALID_ARG, @@ -724,7 +724,7 @@ static int WM_LoadConfig(const char *config_file) { config_dir[strlen(config_dir) + 1] = '\0'; config_dir[strlen(config_dir)] = '/'; } - } else if (strcasecmp(line_tokens[0], "source") == 0) { + } else if (stricmp(line_tokens[0], "source") == 0) { char *new_config = NULL; if (!line_tokens[1]) { _WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_INVALID_ARG, @@ -772,7 +772,7 @@ static int WM_LoadConfig(const char *config_file) { return -1; } free(new_config); - } else if (strcasecmp(line_tokens[0], "bank") == 0) { + } else if (stricmp(line_tokens[0], "bank") == 0) { if (!line_tokens[1] || !wm_isdigit(line_tokens[1][0])) { _WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_INVALID_ARG, "(syntax error in bank line)", 0); @@ -785,7 +785,7 @@ static int WM_LoadConfig(const char *config_file) { return -1; } patchid = (atoi(line_tokens[1]) & 0xFF) << 8; - } else if (strcasecmp(line_tokens[0], "drumset") == 0) { + } else if (stricmp(line_tokens[0], "drumset") == 0) { if (!line_tokens[1] || !wm_isdigit(line_tokens[1][0])) { _WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_INVALID_ARG, "(syntax error in drumset line)", 0); @@ -798,7 +798,7 @@ static int WM_LoadConfig(const char *config_file) { return -1; } patchid = ((atoi(line_tokens[1]) & 0xFF) << 8) | 0x80; - } else if (strcasecmp(line_tokens[0], "reverb_room_width") == 0) { + } else if (stricmp(line_tokens[0], "reverb_room_width") == 0) { if (!line_tokens[1] || !wm_isdigit(line_tokens[1][0])) { _WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_INVALID_ARG, "(syntax error in reverb_room_width line)", @@ -823,7 +823,7 @@ static int WM_LoadConfig(const char *config_file) { 0); reverb_room_width = 100.0f; } - } else if (strcasecmp(line_tokens[0], "reverb_room_length") == 0) { + } else if (stricmp(line_tokens[0], "reverb_room_length") == 0) { if (!line_tokens[1] || !wm_isdigit(line_tokens[1][0])) { _WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_INVALID_ARG, "(syntax error in reverb_room_length line)", @@ -848,7 +848,7 @@ static int WM_LoadConfig(const char *config_file) { 0); reverb_room_length = 100.0f; } - } else if (strcasecmp(line_tokens[0], "reverb_listener_posx") == 0) { + } else if (stricmp(line_tokens[0], "reverb_listener_posx") == 0) { if (!line_tokens[1] || !wm_isdigit(line_tokens[1][0])) { _WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_INVALID_ARG, "(syntax error in reverb_listen_posx line)", @@ -869,7 +869,7 @@ static int WM_LoadConfig(const char *config_file) { 0); reverb_listen_posx = reverb_room_width / 2.0f; } - } else if (strcasecmp(line_tokens[0], + } else if (stricmp(line_tokens[0], "reverb_listener_posy") == 0) { if (!line_tokens[1] || !wm_isdigit(line_tokens[1][0])) { _WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_INVALID_ARG, @@ -891,13 +891,13 @@ static int WM_LoadConfig(const char *config_file) { 0); reverb_listen_posy = reverb_room_length * 0.75f; } - } else if (strcasecmp(line_tokens[0], + } else if (stricmp(line_tokens[0], "guspat_editor_author_cant_read_so_fix_release_time_for_me") == 0) { fix_release = 1; - } else if (strcasecmp(line_tokens[0], "auto_amp") == 0) { + } else if (stricmp(line_tokens[0], "auto_amp") == 0) { auto_amp = 1; - } else if (strcasecmp(line_tokens[0], "auto_amp_with_amp") + } else if (stricmp(line_tokens[0], "auto_amp_with_amp") == 0) { auto_amp = 1; auto_amp_with_amp = 1; @@ -1038,7 +1038,7 @@ static int WM_LoadConfig(const char *config_file) { return -1; } } - if (strncasecmp( + if (strnicmp( &tmp_patch->filename[strlen(tmp_patch->filename) - 4], ".pat", 4) != 0) { strcat(tmp_patch->filename, ".pat"); @@ -1054,7 +1054,7 @@ static int WM_LoadConfig(const char *config_file) { token_count = 0; while (line_tokens[token_count]) { - if (strncasecmp(line_tokens[token_count], "amp=", 4) + if (strnicmp(line_tokens[token_count], "amp=", 4) == 0) { if (!wm_isdigit(line_tokens[token_count][4])) { _WM_ERROR(__FUNCTION__, __LINE__, @@ -1065,7 +1065,7 @@ static int WM_LoadConfig(const char *config_file) { &line_tokens[token_count][4]) << 10) / 100; } - } else if (strncasecmp(line_tokens[token_count], + } else if (strnicmp(line_tokens[token_count], "note=", 5) == 0) { if (!wm_isdigit(line_tokens[token_count][5])) { _WM_ERROR(__FUNCTION__, __LINE__, @@ -1075,7 +1075,7 @@ static int WM_LoadConfig(const char *config_file) { tmp_patch->note = atoi( &line_tokens[token_count][5]); } - } else if (strncasecmp(line_tokens[token_count], + } else if (strnicmp(line_tokens[token_count], "env_time", 8) == 0) { if ((!wm_isdigit(line_tokens[token_count][8])) || (!wm_isdigit( @@ -1110,7 +1110,7 @@ static int WM_LoadConfig(const char *config_file) { } } } - } else if (strncasecmp(line_tokens[token_count], + } else if (strnicmp(line_tokens[token_count], "env_level", 9) == 0) { if ((!wm_isdigit(line_tokens[token_count][9])) || (!wm_isdigit( @@ -1144,16 +1144,16 @@ static int WM_LoadConfig(const char *config_file) { } } } - } else if (strcasecmp(line_tokens[token_count], + } else if (stricmp(line_tokens[token_count], "keep=loop") == 0) { tmp_patch->keep |= SAMPLE_LOOP; - } else if (strcasecmp(line_tokens[token_count], + } else if (stricmp(line_tokens[token_count], "keep=env") == 0) { tmp_patch->keep |= SAMPLE_ENVELOPE; - } else if (strcasecmp(line_tokens[token_count], + } else if (stricmp(line_tokens[token_count], "remove=sustain") == 0) { tmp_patch->remove |= SAMPLE_SUSTAIN; - } else if (strcasecmp(line_tokens[token_count], + } else if (stricmp(line_tokens[token_count], "remove=clamped") == 0) { tmp_patch->remove |= SAMPLE_CLAMPED; } @@ -1695,7 +1695,7 @@ static void do_control_channel_balance(struct _mdi *mdi, static void do_control_channel_pan(struct _mdi *mdi, struct _event_data *data) { unsigned char ch = data->channel; - mdi->channel[ch].pan = signed char(data->data - 64); + mdi->channel[ch].pan = (signed char)(data->data - 64); do_pan_adjust(mdi, ch); } From 944360557f79480b4b39571d06fbe4b97e58b87e Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Tue, 29 Dec 2015 11:23:43 +0100 Subject: [PATCH 2/3] - removed unused header stuff. --- src/wildmidi/wildmidi_lib.cpp | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/wildmidi/wildmidi_lib.cpp b/src/wildmidi/wildmidi_lib.cpp index 8f8d558b9..1e78f7feb 100644 --- a/src/wildmidi/wildmidi_lib.cpp +++ b/src/wildmidi/wildmidi_lib.cpp @@ -43,18 +43,6 @@ #include #include -/* -#ifdef _WIN32 -#include -#include -#undef strcasecmp -#define strcasecmp _stricmp -#undef strncasecmp -#define strncasecmp _strnicmp -*/ - - - #include "common.h" #include "wm_error.h" #include "file_io.h" From 7fa289109b9fdcdd1cecf3f72708b7ea4ee95820 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Tue, 29 Dec 2015 11:36:56 +0100 Subject: [PATCH 3/3] - removed all uses of __builtin_expect from WildMidi code. --- src/wildmidi/wildmidi_lib.cpp | 91 +++++++++++++++-------------------- 1 file changed, 39 insertions(+), 52 deletions(-) diff --git a/src/wildmidi/wildmidi_lib.cpp b/src/wildmidi/wildmidi_lib.cpp index 1e78f7feb..26e4965ba 100644 --- a/src/wildmidi/wildmidi_lib.cpp +++ b/src/wildmidi/wildmidi_lib.cpp @@ -60,9 +60,6 @@ #define IS_ABSOLUTE_PATH(f) (IS_DIR_SEPARATOR((f)[0]) || HAS_DRIVE_SPEC((f))) -// Why is this shit even being used...? :( -#define __builtin_expect(a, b) a - /* * ========================= * Global Data and Data Structs @@ -1459,15 +1456,15 @@ static inline unsigned long int get_inc(struct _mdi *mdi, struct _note *nte) { signed long int note_f; unsigned long int freq; - if (__builtin_expect((nte->patch->note != 0), 0)) { + if (nte->patch->note != 0) { note_f = nte->patch->note * 100; } else { note_f = (nte->noteid & 0x7f) * 100; } note_f += mdi->channel[ch].pitch_adjust; - if (__builtin_expect((note_f < 0), 0)) { + if (note_f < 0) { note_f = 0; - } else if (__builtin_expect((note_f > 12700), 0)) { + } else if (note_f > 12700) { note_f = 12700; } freq = freq_table[(note_f % 1200)] >> (10 - (note_f / 1200)); @@ -3202,7 +3199,7 @@ static int *WM_Mix_Linear(midi * handle, int * buffer, unsigned long int count) do { note_data = mdi->note; left_mix = right_mix = 0; - if (__builtin_expect((note_data != NULL), 1)) { + if (note_data != NULL) { while (note_data) { /* * =================== @@ -3231,44 +3228,38 @@ static int *WM_Mix_Linear(midi * handle, int * buffer, unsigned long int count) * ======================== */ note_data->sample_pos += note_data->sample_inc; - if (__builtin_expect( - (note_data->sample_pos > note_data->sample->loop_end), - 0)) { + if (note_data->sample_pos > note_data->sample->loop_end) { if (note_data->modes & SAMPLE_LOOP) { note_data->sample_pos = note_data->sample->loop_start + ((note_data->sample_pos - note_data->sample->loop_start) % note_data->sample->loop_size); - } else if (__builtin_expect( - (note_data->sample_pos - >= note_data->sample->data_length), - 0)) { - if (__builtin_expect((note_data->replay == NULL), 1)) { + } else if (note_data->sample_pos >= note_data->sample->data_length) { + if (note_data->replay == NULL) { goto KILL_NOTE; } goto RESTART_NOTE; } } - if (__builtin_expect((note_data->env_inc == 0), 0)) { + if (note_data->env_inc == 0) { note_data = note_data->next; continue; } note_data->env_level += note_data->env_inc; - if (__builtin_expect((note_data->env_level > 4194304), 0)) { + if (note_data->env_level > 4194304) { note_data->env_level = note_data->sample->env_target[note_data->env]; } - if (__builtin_expect( - ((note_data->env_inc < 0) - && (note_data->env_level - > note_data->sample->env_target[note_data->env])) - || ((note_data->env_inc > 0) - && (note_data->env_level - < note_data->sample->env_target[note_data->env])), - 1)) { + if (((note_data->env_inc < 0) + && (note_data->env_level + > note_data->sample->env_target[note_data->env])) + || ((note_data->env_inc > 0) + && (note_data->env_level + < note_data->sample->env_target[note_data->env]))) + { note_data = note_data->next; continue; } @@ -3304,7 +3295,7 @@ static int *WM_Mix_Linear(midi * handle, int * buffer, unsigned long int count) } break; case 5: - if (__builtin_expect((note_data->env_level == 0), 1)) { + if (note_data->env_level == 0) { goto KILL_NOTE; } /* sample release */ @@ -3314,7 +3305,7 @@ static int *WM_Mix_Linear(midi * handle, int * buffer, unsigned long int count) note_data = note_data->next; continue; case 6: - if (__builtin_expect((note_data->replay != NULL), 1)) { + if (note_data->replay != NULL) { RESTART_NOTE: note_data->active = 0; { struct _note *prev_note = NULL; @@ -3409,7 +3400,7 @@ static int *WM_Mix_Gauss(midi * handle, int * buffer, unsigned long int count) do { note_data = mdi->note; left_mix = right_mix = 0; - if (__builtin_expect((note_data != NULL), 1)) { + if (note_data != NULL) { while (note_data) { /* * =================== @@ -3471,44 +3462,40 @@ static int *WM_Mix_Gauss(midi * handle, int * buffer, unsigned long int count) * ======================== */ note_data->sample_pos += note_data->sample_inc; - if (__builtin_expect( - (note_data->sample_pos > note_data->sample->loop_end), - 0)) { + if (note_data->sample_pos > note_data->sample->loop_end) + { if (note_data->modes & SAMPLE_LOOP) { note_data->sample_pos = note_data->sample->loop_start + ((note_data->sample_pos - note_data->sample->loop_start) % note_data->sample->loop_size); - } else if (__builtin_expect( - (note_data->sample_pos - >= note_data->sample->data_length), - 0)) { - if (__builtin_expect((note_data->replay == NULL), 1)) { + } else if (note_data->sample_pos >= note_data->sample->data_length) { + if (note_data->replay == NULL) { goto KILL_NOTE; } goto RESTART_NOTE; } } - if (__builtin_expect((note_data->env_inc == 0), 0)) { + if (note_data->env_inc == 0) { note_data = note_data->next; continue; } note_data->env_level += note_data->env_inc; - if (__builtin_expect((note_data->env_level > 4194304), 0)) { + if (note_data->env_level > 4194304) { note_data->env_level = note_data->sample->env_target[note_data->env]; } - if (__builtin_expect( + if ( ((note_data->env_inc < 0) && (note_data->env_level > note_data->sample->env_target[note_data->env])) || ((note_data->env_inc > 0) && (note_data->env_level - < note_data->sample->env_target[note_data->env])), - 1)) { + < note_data->sample->env_target[note_data->env])) + ) { note_data = note_data->next; continue; } @@ -3544,7 +3531,7 @@ static int *WM_Mix_Gauss(midi * handle, int * buffer, unsigned long int count) } break; case 5: - if (__builtin_expect((note_data->env_level == 0), 1)) { + if (note_data->env_level == 0) { goto KILL_NOTE; } /* sample release */ @@ -3554,7 +3541,7 @@ static int *WM_Mix_Gauss(midi * handle, int * buffer, unsigned long int count) note_data = note_data->next; continue; case 6: - if (__builtin_expect((note_data->replay != NULL), 1)) { + if (note_data->replay != NULL) { RESTART_NOTE: note_data->active = 0; { struct _note *prev_note = NULL; @@ -3671,7 +3658,7 @@ static int WM_DoGetOutput(midi * handle, char * buffer, out_buffer = tmp_buffer; do { - if (__builtin_expect((!mdi->samples_to_mix), 0)) { + if (!mdi->samples_to_mix) { while ((!mdi->samples_to_mix) && (event->do_event)) { event->do_event(mdi, &event->event_data); event++; @@ -3692,7 +3679,7 @@ static int WM_DoGetOutput(midi * handle, char * buffer, } } } - if (__builtin_expect((mdi->samples_to_mix > (size >> 2)), 1)) { + if (mdi->samples_to_mix > (size >> 2)) { real_samples_to_mix = size >> 2; } else { real_samples_to_mix = mdi->samples_to_mix; @@ -4016,7 +4003,7 @@ WM_SYMBOL int WildMidi_FastSeek(midi * handle, unsigned long int *sample_pos) { _WM_reset_reverb(mdi->reverb); while (count) { - if (__builtin_expect((!mdi->samples_to_mix), 0)) { + if (!mdi->samples_to_mix) { while ((!mdi->samples_to_mix) && (event->do_event)) { event->do_event(mdi, &event->event_data); event++; @@ -4034,7 +4021,7 @@ WM_SYMBOL int WildMidi_FastSeek(midi * handle, unsigned long int *sample_pos) { } } - if (__builtin_expect((mdi->samples_to_mix > count), 0)) { + if (mdi->samples_to_mix > count) { real_samples_to_mix = count; } else { real_samples_to_mix = mdi->samples_to_mix; @@ -4066,24 +4053,24 @@ WM_SYMBOL int WildMidi_FastSeek(midi * handle, unsigned long int *sample_pos) { } WM_SYMBOL int WildMidi_GetOutput(midi * handle, char *buffer, unsigned long int size) { - if (__builtin_expect((!WM_Initialized), 0)) { + if (!WM_Initialized) { _WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_NOT_INIT, NULL, 0); return -1; } - if (__builtin_expect((handle == NULL), 0)) { + if (handle == NULL) { _WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_INVALID_ARG, "(NULL handle)", 0); return -1; } - if (__builtin_expect((buffer == NULL), 0)) { + if (buffer == NULL) { _WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_INVALID_ARG, "(NULL buffer pointer)", 0); return -1; } - if (__builtin_expect((size == 0), 0)) { + if (size == 0) { return 0; } - if (__builtin_expect((!!(size % 4)), 0)) { + if (!!(size % 4)) { _WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_INVALID_ARG, "(size not a multiple of 4)", 0); return -1;