ft2-clone

Fasttracker 2 clone
Log | Files | Refs | README | LICENSE

commit ab964468d1763728715199d78def5e9382456690
parent 16c6ce7b7f1d8fc8e7a06f5e34510f129f209c68
Author: Olav Sørensen <olav.sorensen@live.no>
Date:   Thu, 19 Nov 2020 21:10:21 +0100

Pushed v1.41 code

- Code refactoring and code cleanup
- Fixed minor BPM duration issues when rendering song to WAV
- Fixed some mouse problems in fullscreen mode on multi-monitor setups
- Bugfix: Properly change pattern length after loading .xp pattern files (FT2 doesn't do this, but I think this makes sense!)

Diffstat:
Msrc/ft2_about.c | 51++++++++++++++++++++++++++-------------------------
Msrc/ft2_audio.c | 63++++++++++++++++++++++++---------------------------------------
Msrc/ft2_audioselector.c | 112++++++++++++++++++++++++++++---------------------------------------------------
Msrc/ft2_bmp.c | 88+++++++++++++++++++++++++++++++++++++------------------------------------------
Msrc/ft2_checkboxes.c | 16+++++-----------
Msrc/ft2_config.c | 68++++++++++++++++++++++++--------------------------------------------
Msrc/ft2_diskop.c | 211++++++++++++++++++++++++++++---------------------------------------------------
Msrc/ft2_edit.c | 307++++++++++++++++++++++++++++++-------------------------------------------------
Msrc/ft2_events.c | 70++++++++++++++++++++++++++++++++--------------------------------------
Msrc/ft2_gui.c | 414+++++++++++++++++++++++++++++--------------------------------------------------
Msrc/ft2_header.h | 2+-
Msrc/ft2_help.c | 62++++++++++++++++++++++++--------------------------------------
Msrc/ft2_inst_ed.c | 345++++++++++++++++++++++++++++++-------------------------------------------------
Msrc/ft2_keyboard.c | 12++++--------
Msrc/ft2_main.c | 22+++++++++-------------
Msrc/ft2_midi.c | 97+++++++++++++++++++++++++++++--------------------------------------------------
Msrc/ft2_module_loader.c | 143++++++++++++++++++++++++++++++++++---------------------------------------------
Msrc/ft2_module_saver.c | 31+++++++++++++++----------------
Msrc/ft2_mouse.c | 82++++++++++++++++++++++++++++++++++---------------------------------------------
Msrc/ft2_nibbles.c | 126++++++++++++++++++++++++++++++++++---------------------------------------------
Msrc/ft2_palette.c | 25++++++++++---------------
Msrc/ft2_pattern_draw.c | 351+++++++++++++++++++++++++++++++------------------------------------------------
Msrc/ft2_pattern_ed.c | 284+++++++++++++++++++++++++++++++------------------------------------------------
Msrc/ft2_pushbuttons.c | 30++++++++++++------------------
Msrc/ft2_radiobuttons.c | 56++++++++++++++++++++++++++------------------------------
Msrc/ft2_replayer.c | 322++++++++++++++++++++++++++++---------------------------------------------------
Msrc/ft2_sample_ed.c | 452++++++++++++++++++++++++++++---------------------------------------------------
Msrc/ft2_sample_ed_features.c | 340+++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/ft2_sample_loader.c | 216++++++++++++++++++++++++++++++++++++-------------------------------------------
Msrc/ft2_sample_saver.c | 3++-
Msrc/ft2_sampling.c | 64+++++++++++++++++++++++-----------------------------------------
Msrc/ft2_scopes.c | 107++++++++++++++++++++++++++++++++-----------------------------------------------
Msrc/ft2_scrollbars.c | 85+++++++++++++++++++++++++++++++++----------------------------------------------
Msrc/ft2_sysreqs.c | 66+++++++++++++++++++++++++++++-------------------------------------
Msrc/ft2_tables.c | 3+++
Msrc/ft2_tables.h | 2++
Msrc/ft2_textboxes.c | 205+++++++++++++++++++++++++++++++------------------------------------------------
Msrc/ft2_trim.c | 187+++++++++++++++++++++++++++++++++----------------------------------------------
Msrc/ft2_unicode.c | 109+++++++++++++++++++++++++++++++------------------------------------------------
Msrc/ft2_video.c | 158++++++++++++++++++++++++++++++++-----------------------------------------------
Msrc/ft2_wav_renderer.c | 69+++++++++++++++++++++++++++++++--------------------------------------
Atest.zip | 0
42 files changed, 2171 insertions(+), 3285 deletions(-)

diff --git a/src/ft2_about.c b/src/ft2_about.c @@ -7,7 +7,7 @@ #include "ft2_video.h" #include "ft2_structs.h" -#define NUM_STARS 1500 +#define NUM_STARS 1750 #define ABOUT_SCREEN_W 626 #define ABOUT_SCREEN_H 167 #define ABOUT_LOGO_W 449 @@ -49,12 +49,17 @@ static int32_t random32(void) static void rotateMatrix(void) { - const float sa = sinf(rotation.x * f2pi); - const float ca = cosf(rotation.x * f2pi); - const float sb = sinf(rotation.y * f2pi); - const float cb = cosf(rotation.y * f2pi); - const float sc = sinf(rotation.z * f2pi); - const float cc = cosf(rotation.z * f2pi); + const float xx = rotation.x * f2pi; + const float sa = sinf(xx); + const float ca = cosf(xx); + + const float yy = rotation.y * f2pi; + const float sb = sinf(yy); + const float cb = cosf(yy); + + const float zz = rotation.z * f2pi; + const float sc = sinf(zz); + const float cc = cosf(zz); // x matrix.x.x = (ca * cc) + (sc * sa * sb); @@ -79,9 +84,9 @@ static void aboutInit(void) vector_t *s = starPoints; for (int32_t i = 0; i < NUM_STARS; i++, s++) { - s->x = (float)(random32() * (1.0f / (UINT32_MAX+1.0f))); - s->y = (float)(random32() * (1.0f / (UINT32_MAX+1.0f))); - s->z = (float)(random32() * (1.0f / (UINT32_MAX+1.0f))); + s->x = (float)(random32() * (1.0 / (UINT32_MAX+1.0))); + s->y = (float)(random32() * (1.0 / (UINT32_MAX+1.0))); + s->z = (float)(random32() * (1.0 / (UINT32_MAX+1.0))); } rotation.x = rotation.y = rotation.z = 0.0f; @@ -104,10 +109,8 @@ static void starfield(void) lastStarScreenPos[i] = -1; } - /* - star->z += 0.00075f; + star->z += 0.00015f; if (star->z >= 0.5f) star->z -= 1.0f; - */ const float z = (matrix.x.z * star->x) + (matrix.y.z * star->y) + (matrix.z.z * star->z) + 0.5f; if (z <= 0.0f) @@ -131,24 +134,22 @@ static void starfield(void) screenBufferPos = ((uint32_t)outY * SCREEN_W) + (uint32_t)outX; if ((video.frameBuffer[screenBufferPos] >> 24) == PAL_BCKGRND) { - int32_t d = (int32_t)((255.0f - (z * 235.0f)) + 0.5f); - - d = (d * starfieldFade) >> 8; - if (d <= 0) - continue; - + int32_t d = (int32_t)(z * 255.0f); if (d > 255) d = 255; - int32_t r = d - 48; + d ^= 255; + d = (d * starfieldFade) >> 8; + + int32_t r = d - 61; if (r < 0) r = 0; - int32_t g = d - 14; + int32_t g = d - 35; if (g < 0) g = 0; - int32_t b = d + 72; + int32_t b = d + 75; if (b > 255) b = 255; @@ -163,9 +164,9 @@ void aboutFrame(void) rotateMatrix(); starfield(); - rotation.x += 0.00011f; - rotation.y += 0.00009f; - rotation.z -= 0.00007f; + rotation.x += 0.00009f; + rotation.y += 0.00007f; + rotation.z -= 0.00005f; // fade in starfield if (starfieldFade < 256) diff --git a/src/ft2_audio.c b/src/ft2_audio.c @@ -69,8 +69,6 @@ void stopVoice(int32_t i) bool setNewAudioSettings(void) // only call this from the main input/video thread { - uint32_t stringLen; - pauseAudio(); if (!setupAudio(CONFIG_HIDE_ERRORS)) @@ -89,7 +87,7 @@ bool setNewAudioSettings(void) // only call this from the main input/video threa audio.currOutputDevice = NULL; } - stringLen = (uint32_t)strlen(audio.lastWorkingAudioDeviceName); + const uint32_t stringLen = (uint32_t)strlen(audio.lastWorkingAudioDeviceName); audio.currOutputDevice = (char *)malloc(stringLen + 2); if (audio.currOutputDevice != NULL) @@ -286,17 +284,14 @@ static void voiceUpdateVolumes(int32_t i, uint8_t status) static void voiceTrigger(int32_t ch, sampleTyp *s, int32_t position) { - bool sampleIs16Bit; - uint8_t loopType; - int32_t length, loopStart, loopLength, loopEnd; - voice_t *v = &voice[ch]; - length = s->len; - loopStart = s->repS; - loopLength = s->repL; - loopEnd = s->repS + s->repL; - loopType = s->typ & 3; - sampleIs16Bit = (s->typ >> 4) & 1; + + int32_t length = s->len; + int32_t loopStart = s->repS; + int32_t loopLength = s->repL; + int32_t loopEnd = s->repS + s->repL; + uint8_t loopType = s->typ & 3; + const bool sampleIs16Bit = (s->typ >> 4) & 1; if (sampleIs16Bit) { @@ -324,15 +319,13 @@ static void voiceTrigger(int32_t ch, sampleTyp *s, int32_t position) { v->base16 = (const int16_t *)s->pek; v->revBase16 = &v->base16[loopStart + loopEnd]; // for pingpong loops - - v->leftEdgeTaps16 = s->leftEdgeTapSamples16 + 3; + v->leftEdgeTaps16 = s->leftEdgeTapSamples16 + SINC_LEFT_TAPS; } else { v->base8 = s->pek; v->revBase8 = &v->base8[loopStart + loopEnd]; // for pingpong loops - v->leftEdgeTaps8 = s->leftEdgeTapSamples8 + 3; - + v->leftEdgeTaps8 = s->leftEdgeTapSamples8 + SINC_LEFT_TAPS; } v->hasLooped = false; // for sinc interpolation special case @@ -368,17 +361,15 @@ void resetRampVolumes(void) void updateVoices(void) { - uint8_t status; - stmTyp *ch; - voice_t *v; - - ch = stm; - v = voice; + stmTyp *ch = stm; + voice_t *v = voice; for (int32_t i = 0; i < song.antChn; i++, ch++, v++) { - status = ch->tmpStatus = ch->status; // (tmpStatus is used for audio/video sync queue) - if (status == 0) continue; // nothing to do + const uint8_t status = ch->tmpStatus = ch->status; // (tmpStatus is used for audio/video sync queue) + if (status == 0) + continue; + ch->status = 0; if (status & IS_Vol) @@ -860,8 +851,6 @@ static void fillVisualsSyncBuffer(void) { pattSyncData_t pattSyncData; chSyncData_t chSyncData; - syncedChannel_t *c; - stmTyp *s; if (audio.resetSyncTickTimeFlag) { @@ -887,8 +876,8 @@ static void fillVisualsSyncBuffer(void) // push channel variables to sync queue - c = chSyncData.channels; - s = stm; + syncedChannel_t *c = chSyncData.channels; + stmTyp *s = stm; for (int32_t i = 0; i < song.antChn; i++, c++, s++) { @@ -967,7 +956,7 @@ static void SDLCALL audioCallback(void *userdata, Uint8 *stream, int len) // normalize mix buffer and send to audio stream sendAudSamplesFunc(stream, len, pmpChannels); - (void)userdata; // make compiler not complain + (void)userdata; } static bool setupAudioBuffers(void) @@ -1031,14 +1020,14 @@ void updateSendAudSamplesRoutine(bool lockMixer) static void calcAudioLatencyVars(int32_t audioBufferSize, int32_t audioFreq) { - double dInt, dFrac; + double dInt; if (audioFreq == 0) return; const double dAudioLatencySecs = audioBufferSize / (double)audioFreq; - dFrac = modf(dAudioLatencySecs * editor.dPerfFreq, &dInt); + double dFrac = modf(dAudioLatencySecs * editor.dPerfFreq, &dInt); // integer part audio.audLatencyPerfValInt = (int32_t)dInt; @@ -1052,8 +1041,6 @@ static void calcAudioLatencyVars(int32_t audioBufferSize, int32_t audioFreq) static void setLastWorkingAudioDevName(void) { - uint32_t stringLen; - if (audio.lastWorkingAudioDeviceName != NULL) { free(audio.lastWorkingAudioDeviceName); @@ -1062,7 +1049,7 @@ static void setLastWorkingAudioDevName(void) if (audio.currOutputDevice != NULL) { - stringLen = (uint32_t)strlen(audio.currOutputDevice); + const uint32_t stringLen = (uint32_t)strlen(audio.currOutputDevice); audio.lastWorkingAudioDeviceName = (char *)malloc(stringLen + 2); if (audio.lastWorkingAudioDeviceName != NULL) @@ -1076,8 +1063,6 @@ static void setLastWorkingAudioDevName(void) bool setupAudio(bool showErrorMsg) { - int8_t newBitDepth; - uint16_t configAudioBufSize; SDL_AudioSpec want, have; closeAudio(); @@ -1087,7 +1072,7 @@ bool setupAudio(bool showErrorMsg) // get audio buffer size from config special flags - configAudioBufSize = 1024; + uint16_t configAudioBufSize = 1024; if (config.specialFlags & BUFFSIZE_512) configAudioBufSize = 512; else if (config.specialFlags & BUFFSIZE_2048) @@ -1150,7 +1135,7 @@ bool setupAudio(bool showErrorMsg) // set new bit depth flag - newBitDepth = 16; + int8_t newBitDepth = 16; config.specialFlags &= ~BITDEPTH_32; config.specialFlags |= BITDEPTH_16; diff --git a/src/ft2_audioselector.c b/src/ft2_audioselector.c @@ -17,26 +17,21 @@ char *getAudioOutputDeviceFromConfig(void) { #define MAX_DEV_STR_LEN 256 - const char *devStringTmp; - char *devString; - uint32_t devStringLen; - FILE *f; - - devString = (char *)calloc(MAX_DEV_STR_LEN + 1, sizeof (char)); + char *devString = (char *)calloc(MAX_DEV_STR_LEN + 1, sizeof (char)); if (devString == NULL) return NULL; - f = UNICHAR_FOPEN(editor.audioDevConfigFileLocation, "r"); + FILE *f = UNICHAR_FOPEN(editor.audioDevConfigFileLocation, "r"); if (f == NULL) { - devStringTmp = SDL_GetAudioDeviceName(0, false); + const char *devStringTmp = SDL_GetAudioDeviceName(0, false); if (devStringTmp == NULL) { free(devString); return NULL; } - devStringLen = (uint32_t)strlen(devStringTmp); + const uint32_t devStringLen = (uint32_t)strlen(devStringTmp); if (devStringLen > 0) strncpy(devString, devStringTmp, MAX_DEV_STR_LEN); devString[devStringLen+1] = '\0'; // UTF-8 needs double null termination @@ -50,7 +45,7 @@ char *getAudioOutputDeviceFromConfig(void) return NULL; } - devStringLen = (uint32_t)strlen(devString); + const uint32_t devStringLen = (uint32_t)strlen(devString); if (devString[devStringLen-1] == '\n') devString[devStringLen-1] = '\0'; devString[devStringLen+1] = '\0'; // UTF-8 needs double null termination @@ -65,26 +60,21 @@ char *getAudioInputDeviceFromConfig(void) { #define MAX_DEV_STR_LEN 256 - const char *devStringTmp; - char *devString; - uint32_t devStringLen; - FILE *f; - - devString = (char *)calloc(MAX_DEV_STR_LEN + 1, sizeof (char)); + char *devString = (char *)calloc(MAX_DEV_STR_LEN + 1, sizeof (char)); if (devString == NULL) return NULL; - f = UNICHAR_FOPEN(editor.audioDevConfigFileLocation, "r"); + FILE *f = UNICHAR_FOPEN(editor.audioDevConfigFileLocation, "r"); if (f == NULL) { - devStringTmp = SDL_GetAudioDeviceName(0, true); + const char *devStringTmp = SDL_GetAudioDeviceName(0, true); if (devStringTmp == NULL) { free(devString); return NULL; } - devStringLen = (uint32_t)strlen(devStringTmp); + const uint32_t devStringLen = (uint32_t)strlen(devStringTmp); if (devStringLen > 0) strncpy(devString, devStringTmp, MAX_DEV_STR_LEN); devString[devStringLen+1] = '\0'; // UTF-8 needs double null termination @@ -106,7 +96,7 @@ char *getAudioInputDeviceFromConfig(void) return NULL; } - devStringLen = (uint32_t)strlen(devString); + const uint32_t devStringLen = (uint32_t)strlen(devString); if (devString[devStringLen-1] == '\n') devString[devStringLen-1] = '\0'; devString[devStringLen+1] = '\0'; // UTF-8 needs double null termination @@ -119,9 +109,7 @@ char *getAudioInputDeviceFromConfig(void) bool saveAudioDevicesToConfig(const char *outputDevice, const char *inputDevice) { - FILE *f; - - f = UNICHAR_FOPEN(editor.audioDevConfigFileLocation, "w"); + FILE *f = UNICHAR_FOPEN(editor.audioDevConfigFileLocation, "w"); if (f == NULL) return false; @@ -137,10 +125,6 @@ bool saveAudioDevicesToConfig(const char *outputDevice, const char *inputDevice) void drawAudioOutputList(void) { - char *tmpString; - uint16_t y; - int32_t deviceEntry; - clearRect(114, 18, AUDIO_SELECTORS_BOX_WIDTH, 66); if (audio.outputDeviceNum == 0) @@ -151,13 +135,13 @@ void drawAudioOutputList(void) for (int32_t i = 0; i < 6; i++) { - deviceEntry = getScrollBarPos(SB_AUDIO_OUTPUT_SCROLL) + i; + const int32_t deviceEntry = getScrollBarPos(SB_AUDIO_OUTPUT_SCROLL) + i; if (deviceEntry < audio.outputDeviceNum) { if (audio.outputDeviceNames[deviceEntry] == NULL) continue; - y = 18 + (uint16_t)(i * 11); + const uint16_t y = 18 + (uint16_t)(i * 11); if (audio.currOutputDevice != NULL) { @@ -165,7 +149,7 @@ void drawAudioOutputList(void) fillRect(114, y, AUDIO_SELECTORS_BOX_WIDTH, 10, PAL_BOXSLCT); // selection background color } - tmpString = utf8ToCp437(audio.outputDeviceNames[deviceEntry], true); + char *tmpString = utf8ToCp437(audio.outputDeviceNames[deviceEntry], true); if (tmpString != NULL) { textOutClipX(114, y, PAL_FORGRND, tmpString, 114 + AUDIO_SELECTORS_BOX_WIDTH); @@ -177,10 +161,6 @@ void drawAudioOutputList(void) void drawAudioInputList(void) { - char *tmpString; - uint16_t y; - int32_t deviceEntry; - clearRect(114, 105, AUDIO_SELECTORS_BOX_WIDTH, 44); if (audio.inputDeviceNum == 0) @@ -191,13 +171,13 @@ void drawAudioInputList(void) for (int32_t i = 0; i < 4; i++) { - deviceEntry = getScrollBarPos(SB_AUDIO_INPUT_SCROLL) + i; + const int32_t deviceEntry = getScrollBarPos(SB_AUDIO_INPUT_SCROLL) + i; if (deviceEntry < audio.inputDeviceNum) { if (audio.inputDeviceNames[deviceEntry] == NULL) continue; - y = 105 + (uint16_t)(i * 11); + const uint16_t y = 105 + (uint16_t)(i * 11); if (audio.currInputDevice != NULL) { @@ -205,7 +185,7 @@ void drawAudioInputList(void) fillRect(114, y, AUDIO_SELECTORS_BOX_WIDTH, 10, PAL_BOXSLCT); // selection background color } - tmpString = utf8ToCp437(audio.inputDeviceNames[deviceEntry], true); + char *tmpString = utf8ToCp437(audio.inputDeviceNames[deviceEntry], true); if (tmpString != NULL) { textOutClipX(114, y, PAL_FORGRND, tmpString, 114 + AUDIO_SELECTORS_BOX_WIDTH); @@ -217,15 +197,11 @@ void drawAudioInputList(void) bool testAudioDeviceListsMouseDown(void) { - char *devString; - int32_t mx, my, deviceNum; - uint32_t devStringLen; - if (!ui.configScreenShown || editor.currConfigScreen != CONFIG_SCREEN_IO_DEVICES) return false; - mx = mouse.x; - my = mouse.y; + const int32_t mx = mouse.x; + const int32_t my = mouse.y; if (my < 18 || my > 149 || mx < 114 || mx >= 114+AUDIO_SELECTORS_BOX_WIDTH) return false; @@ -234,17 +210,17 @@ bool testAudioDeviceListsMouseDown(void) { // output device list - deviceNum = (int32_t)scrollBars[SB_AUDIO_OUTPUT_SCROLL].pos + ((my - 18) / 11); + const int32_t deviceNum = (int32_t)scrollBars[SB_AUDIO_OUTPUT_SCROLL].pos + ((my - 18) / 11); if (audio.outputDeviceNum <= 0 || deviceNum >= audio.outputDeviceNum) return true; - devString = audio.outputDeviceNames[deviceNum]; + char *devString = audio.outputDeviceNames[deviceNum]; if (devString != NULL && (audio.currOutputDevice == NULL || strcmp(audio.currOutputDevice, devString) != 0)) { if (audio.currOutputDevice != NULL) free(audio.currOutputDevice); - devStringLen = (uint32_t)strlen(devString); + const uint32_t devStringLen = (uint32_t)strlen(devString); audio.currOutputDevice = (char *)malloc(devStringLen + 2); if (audio.currOutputDevice == NULL) @@ -266,17 +242,17 @@ bool testAudioDeviceListsMouseDown(void) { // input device list - deviceNum = (int32_t)scrollBars[SB_AUDIO_INPUT_SCROLL].pos + ((my - 105) / 11); + const int32_t deviceNum = (int32_t)scrollBars[SB_AUDIO_INPUT_SCROLL].pos + ((my - 105) / 11); if (audio.inputDeviceNum <= 0 || deviceNum >= audio.inputDeviceNum) return true; - devString = audio.inputDeviceNames[deviceNum]; + char *devString = audio.inputDeviceNames[deviceNum]; if (devString != NULL && (audio.currInputDevice == NULL || strcmp(audio.currInputDevice, devString) != 0)) { if (audio.currInputDevice != NULL) free(audio.currInputDevice); - devStringLen = (uint32_t)strlen(devString); + const uint32_t devStringLen = (uint32_t)strlen(devString); audio.currInputDevice = (char *)malloc(devStringLen + 2); if (audio.currInputDevice == NULL) @@ -297,7 +273,7 @@ bool testAudioDeviceListsMouseDown(void) void freeAudioDeviceLists(void) { - for (uint32_t i = 0; i < MAX_AUDIO_DEVICES; i++) + for (int32_t i = 0; i < MAX_AUDIO_DEVICES; i++) { if (audio.outputDeviceNames[i] != NULL) { @@ -347,10 +323,7 @@ void freeAudioDeviceSelectorBuffers(void) void setToDefaultAudioOutputDevice(void) { - const char *devString; - uint32_t stringLen; - - devString = SDL_GetAudioDeviceName(0, false); + const char *devString = SDL_GetAudioDeviceName(0, false); if (devString == NULL) { if (audio.currOutputDevice != NULL) @@ -362,7 +335,7 @@ void setToDefaultAudioOutputDevice(void) return; } - stringLen = (uint32_t)strlen(devString); + const uint32_t stringLen = (uint32_t)strlen(devString); if (audio.currOutputDevice != NULL) { @@ -382,10 +355,7 @@ void setToDefaultAudioOutputDevice(void) void setToDefaultAudioInputDevice(void) { - const char *devString; - uint32_t stringLen; - - devString = SDL_GetAudioDeviceName(0, true); + const char *devString = SDL_GetAudioDeviceName(0, true); if (devString == NULL) { if (audio.currInputDevice != NULL) @@ -397,7 +367,7 @@ void setToDefaultAudioInputDevice(void) return; } - stringLen = (uint32_t)strlen(devString); + const uint32_t stringLen = (uint32_t)strlen(devString); if (audio.currInputDevice != NULL) { @@ -417,11 +387,7 @@ void setToDefaultAudioInputDevice(void) void rescanAudioDevices(void) { - bool listShown; - const char *deviceName; - uint32_t stringLen; - - listShown = (ui.configScreenShown && editor.currConfigScreen == CONFIG_SCREEN_IO_DEVICES); + const bool listShown = (ui.configScreenShown && editor.currConfigScreen == CONFIG_SCREEN_IO_DEVICES); freeAudioDeviceLists(); @@ -433,14 +399,14 @@ void rescanAudioDevices(void) for (int32_t i = 0; i < audio.outputDeviceNum; i++) { - deviceName = SDL_GetAudioDeviceName(i, false); + const char *deviceName = SDL_GetAudioDeviceName(i, false); if (deviceName == NULL) { audio.outputDeviceNum--; // hide device continue; } - stringLen = (uint32_t)strlen(deviceName); + const uint32_t stringLen = (uint32_t)strlen(deviceName); audio.outputDeviceNames[i] = (char *)malloc(stringLen + 2); if (audio.outputDeviceNames[i] == NULL) @@ -460,14 +426,14 @@ void rescanAudioDevices(void) for (int32_t i = 0; i < audio.inputDeviceNum; i++) { - deviceName = SDL_GetAudioDeviceName(i, true); + const char *deviceName = SDL_GetAudioDeviceName(i, true); if (deviceName == NULL) { audio.inputDeviceNum--; // hide device continue; } - stringLen = (uint32_t)strlen(deviceName); + const uint32_t stringLen = (uint32_t)strlen(deviceName); audio.inputDeviceNames[i] = (char *)malloc(stringLen + 2); if (audio.inputDeviceNames[i] == NULL) @@ -517,16 +483,16 @@ void scrollAudOutputDevListDown(void) void sbAudOutputSetPos(uint32_t pos) { - (void)pos; - if (ui.configScreenShown && (editor.currConfigScreen == CONFIG_SCREEN_IO_DEVICES)) drawAudioOutputList(); + + (void)pos; } void sbAudInputSetPos(uint32_t pos) { - (void)pos; - if (ui.configScreenShown && (editor.currConfigScreen == CONFIG_SCREEN_IO_DEVICES)) drawAudioInputList(); + + (void)pos; } diff --git a/src/ft2_bmp.c b/src/ft2_bmp.c @@ -140,34 +140,32 @@ void freeBMPs(void) static uint32_t *loadBMPTo32Bit(const uint8_t *src) { - const uint8_t *pData, *src8; - int32_t len, byte, palIdx, i, x , y, lineEnd, palEntries, colorsInBitmap; - uint32_t *outData, *dst32, *tmp32, color, color2, pal[256]; - bmpHeader_t *hdr; + int32_t len, byte, palIdx; + uint32_t *tmp32, color, color2, pal[256]; - hdr = (bmpHeader_t *)&src[2]; - pData = &src[hdr->bfOffBits]; - colorsInBitmap = 1 << hdr->biBitCount; + bmpHeader_t *hdr = (bmpHeader_t *)&src[2]; + const uint8_t *pData = &src[hdr->bfOffBits]; + const int32_t colorsInBitmap = 1 << hdr->biBitCount; if (hdr->biCompression == COMP_RGB || hdr->biClrUsed > 256 || colorsInBitmap > 256) return NULL; - outData = (uint32_t *)malloc(hdr->biWidth * hdr->biHeight * sizeof (uint32_t)); + uint32_t *outData = (uint32_t *)malloc(hdr->biWidth * hdr->biHeight * sizeof (uint32_t)); if (outData == NULL) return NULL; // pre-fill image with first palette color - palEntries = hdr->biClrUsed == 0 ? colorsInBitmap : hdr->biClrUsed; + const int32_t palEntries = hdr->biClrUsed == 0 ? colorsInBitmap : hdr->biClrUsed; memcpy(pal, &src[0x36], palEntries * sizeof (uint32_t)); - for (i = 0; i < hdr->biWidth * hdr->biHeight; i++) + for (int32_t i = 0; i < hdr->biWidth * hdr->biHeight; i++) outData[i] = pal[0]; - lineEnd = hdr->biWidth; - src8 = pData; - dst32 = outData; - x = 0; - y = hdr->biHeight - 1; + const int32_t lineEnd = hdr->biWidth; + const uint8_t *src8 = pData; + uint32_t *dst32 = outData; + int32_t x = 0; + int32_t y = hdr->biHeight - 1; while (true) { @@ -194,7 +192,7 @@ static uint32_t *loadBMPTo32Bit(const uint8_t *src) if (hdr->biCompression == COMP_RLE8) { tmp32 = &dst32[(y * hdr->biWidth) + x]; - for (i = 0; i < byte; i++) + for (int32_t i = 0; i < byte; i++) *tmp32++ = pal[*src8++]; if (byte & 1) @@ -207,7 +205,7 @@ static uint32_t *loadBMPTo32Bit(const uint8_t *src) len = byte >> 1; tmp32 = &dst32[y * hdr->biWidth]; - for (i = 0; i < len; i++) + for (int32_t i = 0; i < len; i++) { palIdx = *src8++; tmp32[x++] = pal[palIdx >> 4]; @@ -227,7 +225,7 @@ static uint32_t *loadBMPTo32Bit(const uint8_t *src) { color = pal[palIdx]; tmp32 = &dst32[(y * hdr->biWidth) + x]; - for (i = 0; i < byte; i++) + for (int32_t i = 0; i < byte; i++) *tmp32++ = color; x += byte; @@ -239,7 +237,7 @@ static uint32_t *loadBMPTo32Bit(const uint8_t *src) len = byte >> 1; tmp32 = &dst32[y * hdr->biWidth]; - for (i = 0; i < len; i++) + for (int32_t i = 0; i < len; i++) { tmp32[x++] = color; if (x < lineEnd) tmp32[x++] = color2; @@ -253,24 +251,22 @@ static uint32_t *loadBMPTo32Bit(const uint8_t *src) static uint8_t *loadBMPTo1Bit(const uint8_t *src) // supports 4-bit RLE only { - const uint8_t *pData, *src8; - uint8_t palIdx, color, color2, *outData, *dst8, *tmp8; - int32_t len, byte, i, x , y, lineEnd, colorsInBitmap, palEntries; + uint8_t palIdx, color, color2, *tmp8; + int32_t len, byte, i; uint32_t pal[16]; - bmpHeader_t *hdr; - hdr = (bmpHeader_t *)&src[2]; - pData = &src[hdr->bfOffBits]; - colorsInBitmap = 1 << hdr->biBitCount; + bmpHeader_t *hdr = (bmpHeader_t *)&src[2]; + const uint8_t *pData = &src[hdr->bfOffBits]; + const int32_t colorsInBitmap = 1 << hdr->biBitCount; if (hdr->biCompression != COMP_RLE4 || hdr->biClrUsed > 16 || colorsInBitmap > 16) return NULL; - outData = (uint8_t *)malloc(hdr->biWidth * hdr->biHeight * sizeof (uint8_t)); + uint8_t *outData = (uint8_t *)malloc(hdr->biWidth * hdr->biHeight * sizeof (uint8_t)); if (outData == NULL) return NULL; - palEntries = hdr->biClrUsed == 0 ? colorsInBitmap : hdr->biClrUsed; + const int32_t palEntries = hdr->biClrUsed == 0 ? colorsInBitmap : hdr->biClrUsed; memcpy(pal, &src[0x36], palEntries * sizeof (uint32_t)); // pre-fill image with first palette color @@ -278,11 +274,11 @@ static uint8_t *loadBMPTo1Bit(const uint8_t *src) // supports 4-bit RLE only for (i = 0; i < hdr->biWidth * hdr->biHeight; i++) outData[i] = color; - lineEnd = hdr->biWidth; - src8 = pData; - dst8 = outData; - x = 0; - y = hdr->biHeight - 1; + const int32_t lineEnd = hdr->biWidth; + const uint8_t *src8 = pData; + uint8_t *dst8 = outData; + int32_t x = 0; + int32_t y = hdr->biHeight - 1; while (true) { @@ -341,24 +337,22 @@ static uint8_t *loadBMPTo1Bit(const uint8_t *src) // supports 4-bit RLE only static uint8_t *loadBMPTo4BitPal(const uint8_t *src) // supports 4-bit RLE only { - const uint8_t *pData, *src8; - uint8_t palIdx, *outData, *dst8, *tmp8, pal1, pal2; - int32_t len, byte, i, x , y, lineEnd, colorsInBitmap, palEntries; + uint8_t palIdx, *tmp8, pal1, pal2; + int32_t len, byte, i; uint32_t pal[16]; - bmpHeader_t *hdr; - hdr = (bmpHeader_t *)&src[2]; - pData = &src[hdr->bfOffBits]; - colorsInBitmap = 1 << hdr->biBitCount; + bmpHeader_t *hdr = (bmpHeader_t *)&src[2]; + const uint8_t *pData = &src[hdr->bfOffBits]; + const int32_t colorsInBitmap = 1 << hdr->biBitCount; if (hdr->biCompression != COMP_RLE4 || hdr->biClrUsed > 16 || colorsInBitmap > 16) return NULL; - outData = (uint8_t *)malloc(hdr->biWidth * hdr->biHeight * sizeof (uint8_t)); + uint8_t *outData = (uint8_t *)malloc(hdr->biWidth * hdr->biHeight * sizeof (uint8_t)); if (outData == NULL) return NULL; - palEntries = hdr->biClrUsed == 0 ? colorsInBitmap : hdr->biClrUsed; + const int32_t palEntries = hdr->biClrUsed == 0 ? colorsInBitmap : hdr->biClrUsed; memcpy(pal, &src[0x36], palEntries * sizeof (uint32_t)); // pre-fill image with first palette color @@ -366,11 +360,11 @@ static uint8_t *loadBMPTo4BitPal(const uint8_t *src) // supports 4-bit RLE only for (i = 0; i < hdr->biWidth * hdr->biHeight; i++) outData[i] = palIdx; - lineEnd = hdr->biWidth; - src8 = pData; - dst8 = outData; - x = 0; - y = hdr->biHeight - 1; + const int32_t lineEnd = hdr->biWidth; + const uint8_t *src8 = pData; + uint8_t *dst8 = outData; + int32_t x = 0; + int32_t y = hdr->biHeight - 1; while (true) { diff --git a/src/ft2_checkboxes.c b/src/ft2_checkboxes.c @@ -116,11 +116,10 @@ checkBox_t checkBoxes[NUM_CHECKBOXES] = void drawCheckBox(uint16_t checkBoxID) { - checkBox_t *checkBox; const uint8_t *gfxPtr; assert(checkBoxID < NUM_CHECKBOXES); - checkBox = &checkBoxes[checkBoxID]; + checkBox_t *checkBox = &checkBoxes[checkBoxID]; if (!checkBox->visible) return; @@ -154,10 +153,8 @@ void hideCheckBox(uint16_t checkBoxID) void handleCheckBoxesWhileMouseDown(void) { - checkBox_t *checkBox; - assert(mouse.lastUsedObjectID >= 0 && mouse.lastUsedObjectID < NUM_CHECKBOXES); - checkBox = &checkBoxes[mouse.lastUsedObjectID]; + checkBox_t *checkBox = &checkBoxes[mouse.lastUsedObjectID]; if (!checkBox->visible) return; @@ -180,7 +177,6 @@ void handleCheckBoxesWhileMouseDown(void) bool testCheckBoxMouseDown(void) { uint16_t start, end; - checkBox_t *checkBox; if (ui.sysReqShown) { @@ -194,9 +190,9 @@ bool testCheckBoxMouseDown(void) end = NUM_CHECKBOXES; } - for (uint16_t i = start; i < end; i++) + checkBox_t *checkBox = &checkBoxes[start]; + for (uint16_t i = start; i < end; i++, checkBox++) { - checkBox = &checkBoxes[i]; if (!checkBox->visible) continue; @@ -216,13 +212,11 @@ bool testCheckBoxMouseDown(void) void testCheckBoxMouseRelease(void) { - checkBox_t *checkBox; - if (mouse.lastUsedObjectType != OBJECT_CHECKBOX || mouse.lastUsedObjectID == OBJECT_ID_NONE) return; assert(mouse.lastUsedObjectID < NUM_CHECKBOXES); - checkBox = &checkBoxes[mouse.lastUsedObjectID]; + checkBox_t *checkBox = &checkBoxes[mouse.lastUsedObjectID]; if (!checkBox->visible) return; diff --git a/src/ft2_config.c b/src/ft2_config.c @@ -52,14 +52,11 @@ static void xorConfigBuffer(uint8_t *ptr8) static int32_t calcChecksum(uint8_t *p, uint16_t len) // for nibbles highscore data { - uint16_t data; - uint32_t checksum; - if (len == 0) return 0; - data = 0; - checksum = 0; + uint16_t data = 0; + uint32_t checksum = 0; do { @@ -74,14 +71,14 @@ static int32_t calcChecksum(uint8_t *p, uint16_t len) // for nibbles highscore d static void loadConfigFromBuffer(void) { - int32_t i, checksum; + int32_t i; lockMixerCallback(); memcpy(&config, configBuffer, CONFIG_FILE_SIZE); // if Nibbles highscore table checksum is incorrect, load default highscore table instead - checksum = calcChecksum((uint8_t *)&config.NI_HighScore, sizeof (config.NI_HighScore)); + const int32_t checksum = calcChecksum((uint8_t *)&config.NI_HighScore, sizeof (config.NI_HighScore)); if (config.NI_HighScoreChecksum != checksum) { memcpy(&config.NI_HighScore, &defConfigData[636], sizeof (config.NI_HighScore)); @@ -209,12 +206,10 @@ static void setDefaultConfigSettings(void) void resetConfig(void) { - uint8_t oldWindowFlags; - if (okBox(2, "System request", "Are you sure you want to completely reset your FT2 configuration?") != 1) return; - oldWindowFlags = config.windowFlags; + const uint8_t oldWindowFlags = config.windowFlags; setDefaultConfigSettings(); setToDefaultAudioOutputDevice(); @@ -247,9 +242,6 @@ void resetConfig(void) bool loadConfig(bool showErrorFlag) { - size_t fileSize; - FILE *in; - // this routine can be called at any time, so make sure we free these first... if (audio.currOutputDevice != NULL) @@ -286,7 +278,7 @@ bool loadConfig(bool showErrorFlag) return false; } - in = UNICHAR_FOPEN(editor.configFileLocation, "rb"); + FILE *in = UNICHAR_FOPEN(editor.configFileLocation, "rb"); if (in == NULL) { if (showErrorFlag) @@ -296,7 +288,7 @@ bool loadConfig(bool showErrorFlag) } fseek(in, 0, SEEK_END); - fileSize = (int32_t)ftell(in); + const size_t fileSize = ftell(in); rewind(in); if (fileSize > CONFIG_FILE_SIZE) @@ -350,9 +342,7 @@ bool loadConfig(bool showErrorFlag) void loadConfig2(void) // called by "Load config" button { - uint8_t oldWindowFlags; - - oldWindowFlags = config.windowFlags; + const uint8_t oldWindowFlags = config.windowFlags; loadConfig(CONFIG_SHOW_ERRORS); @@ -379,8 +369,6 @@ void loadConfig2(void) // called by "Load config" button bool saveConfig(bool showErrorFlag) { - FILE *out; - if (editor.configFileLocation == NULL) { if (showErrorFlag) @@ -395,7 +383,7 @@ bool saveConfig(bool showErrorFlag) saveMidiInputDeviceToConfig(); #endif - out = UNICHAR_FOPEN(editor.configFileLocation, "wb"); + FILE *out = UNICHAR_FOPEN(editor.configFileLocation, "wb"); if (out == NULL) { if (showErrorFlag) @@ -443,13 +431,12 @@ void saveConfig2(void) // called by "Save config" button static UNICHAR *getFullAudDevConfigPath(void) // kinda hackish { - UNICHAR *filePath; - int32_t ft2ConfPathLen, stringOffset, audiodevDotIniStrLen, ft2DotCfgStrLen; + int32_t audiodevDotIniStrLen, ft2DotCfgStrLen; if (editor.configFileLocation == NULL) return NULL; - ft2ConfPathLen = (int32_t)UNICHAR_STRLEN(editor.configFileLocation); + const int32_t ft2ConfPathLen = (int32_t)UNICHAR_STRLEN(editor.configFileLocation); #ifdef _WIN32 audiodevDotIniStrLen = (int32_t)UNICHAR_STRLEN(L"audiodev.ini"); @@ -459,11 +446,11 @@ static UNICHAR *getFullAudDevConfigPath(void) // kinda hackish ft2DotCfgStrLen = (int32_t)UNICHAR_STRLEN("FT2.CFG"); #endif - filePath = (UNICHAR *)calloc(ft2ConfPathLen + audiodevDotIniStrLen + 2, sizeof (UNICHAR)); + UNICHAR *filePath = (UNICHAR *)calloc(ft2ConfPathLen + audiodevDotIniStrLen + 2, sizeof (UNICHAR)); UNICHAR_STRCPY(filePath, editor.configFileLocation); - stringOffset = ft2ConfPathLen - ft2DotCfgStrLen; + const int32_t stringOffset = ft2ConfPathLen - ft2DotCfgStrLen; filePath[stringOffset+0] = '\0'; filePath[stringOffset+1] = '\0'; @@ -478,13 +465,12 @@ static UNICHAR *getFullAudDevConfigPath(void) // kinda hackish static UNICHAR *getFullMidiDevConfigPath(void) // kinda hackish { - UNICHAR *filePath; - int32_t ft2ConfPathLen, stringOffset, mididevDotIniStrLen, ft2DotCfgStrLen; + int32_t mididevDotIniStrLen, ft2DotCfgStrLen; if (editor.configFileLocation == NULL) return NULL; - ft2ConfPathLen = (int32_t)UNICHAR_STRLEN(editor.configFileLocation); + const int32_t ft2ConfPathLen = (int32_t)UNICHAR_STRLEN(editor.configFileLocation); #ifdef _WIN32 mididevDotIniStrLen = (int32_t)UNICHAR_STRLEN(L"mididev.ini"); @@ -494,11 +480,11 @@ static UNICHAR *getFullMidiDevConfigPath(void) // kinda hackish ft2DotCfgStrLen = (int32_t)UNICHAR_STRLEN("FT2.CFG"); #endif - filePath = (UNICHAR *)calloc(ft2ConfPathLen + mididevDotIniStrLen + 2, sizeof (UNICHAR)); + UNICHAR *filePath = (UNICHAR *)calloc(ft2ConfPathLen + mididevDotIniStrLen + 2, sizeof (UNICHAR)); UNICHAR_STRCPY(filePath, editor.configFileLocation); - stringOffset = ft2ConfPathLen - ft2DotCfgStrLen; + const int32_t stringOffset = ft2ConfPathLen - ft2DotCfgStrLen; filePath[stringOffset+0] = '\0'; filePath[stringOffset+1] = '\0'; @@ -513,7 +499,7 @@ static UNICHAR *getFullMidiDevConfigPath(void) // kinda hackish static void setConfigFileLocation(void) // kinda hackish { - int32_t result, ft2DotCfgStrLen; + int32_t ft2DotCfgStrLen; FILE *f; // Windows @@ -551,7 +537,7 @@ static void setConfigFileLocation(void) // kinda hackish UNICHAR_STRCPY(editor.configFileLocation, oldPath); if ((f = fopen("FT2.CFG", "rb")) == NULL) { - result = SHGetFolderPathW(NULL, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT, tmpPath); + int32_t result = SHGetFolderPathW(NULL, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT, tmpPath); if (result == S_OK) { if (SetCurrentDirectoryW(tmpPath) != 0) @@ -602,7 +588,7 @@ static void setConfigFileLocation(void) // kinda hackish { if (chdir(getenv("HOME")) == 0) { - result = chdir("Library/Application Support"); + int32_t result = chdir("Library/Application Support"); if (result == 0) { result = chdir("FT2 clone"); @@ -682,9 +668,6 @@ static void setConfigFileLocation(void) // kinda hackish void loadConfigOrSetDefaults(void) { - size_t fileSize; - FILE *in; - setConfigFileLocation(); if (editor.configFileLocation == NULL) @@ -693,7 +676,7 @@ void loadConfigOrSetDefaults(void) return; } - in = UNICHAR_FOPEN(editor.configFileLocation, "rb"); + FILE *in = UNICHAR_FOPEN(editor.configFileLocation, "rb"); if (in == NULL) { setDefaultConfigSettings(); @@ -701,7 +684,7 @@ void loadConfigOrSetDefaults(void) } fseek(in, 0, SEEK_END); - fileSize = ftell(in); + size_t fileSize = ftell(in); rewind(in); // not a valid FT2 config file (FT2.CFG filesize varies depending on version) @@ -755,14 +738,11 @@ static void drawMIDIChanValue(void) static void drawMIDITransp(void) { - char sign; - int8_t val; - fillRect(571, 123, 20, 8, PAL_DESKTOP); - sign = (config.recMIDITranspVal < 0) ? '-' : '+'; + const char sign = (config.recMIDITranspVal < 0) ? '-' : '+'; - val = (int8_t)(ABS(config.recMIDITranspVal)); + const int8_t val = (int8_t)(ABS(config.recMIDITranspVal)); if (val >= 10) { charOut(571, 123, PAL_FORGRND, sign); diff --git a/src/ft2_diskop.c b/src/ft2_diskop.c @@ -86,15 +86,10 @@ static void setDiskOpItem(uint8_t item); int32_t getFileSize(UNICHAR *fileNameU) // returning -1 = filesize over 2GB { -#ifdef _WIN32 - FILE *f; -#else - struct stat st; -#endif int64_t fSize; #ifdef _WIN32 - f = UNICHAR_FOPEN(fileNameU, "rb"); + FILE *f = UNICHAR_FOPEN(fileNameU, "rb"); if (f == NULL) return 0; @@ -102,6 +97,7 @@ int32_t getFileSize(UNICHAR *fileNameU) // returning -1 = filesize over 2GB fSize = _ftelli64(f); fclose(f); #else + struct stat st; if (stat(fileNameU, &st) != 0) return 0; @@ -111,9 +107,9 @@ int32_t getFileSize(UNICHAR *fileNameU) // returning -1 = filesize over 2GB fSize = 0; if (fSize > INT32_MAX) - return -1; + return -1; // -1 = ">2GB" flag - return fSize & 0xFFFFFFFF; + return (int32_t)fSize; } uint8_t getDiskOpItem(void) @@ -334,12 +330,10 @@ int32_t getExtOffset(char *s, int32_t stringLen) // get byte offset of file exte static void removeQuestionmarksFromString(char *s) { - int32_t len; - if (s == NULL || *s == '\0') return; - len = (int32_t)strlen(s); + const int32_t len = (int32_t)strlen(s); for (int32_t i = 0; i < len; i++) { if (s[i] == '?') @@ -351,14 +345,11 @@ static void removeQuestionmarksFromString(char *s) bool fileExistsAnsi(char *str) { - int32_t retVal; - UNICHAR *strU; - - strU = cp437ToUnichar(str); + UNICHAR *strU = cp437ToUnichar(str); if (strU == NULL) return false; - retVal = PathFileExistsW(strU); + bool retVal = PathFileExistsW(strU); free(strU); return retVal; @@ -378,14 +369,11 @@ static bool deleteDirRecursive(UNICHAR *strU) static bool makeDirAnsi(char *str) { - int32_t retVal; - UNICHAR *strU; - - strU = cp437ToUnichar(str); + UNICHAR *strU = cp437ToUnichar(str); if (strU == NULL) return false; - retVal = _wmkdir(strU); + int32_t retVal = _wmkdir(strU); free(strU); return (retVal == 0); @@ -393,14 +381,11 @@ static bool makeDirAnsi(char *str) static bool renameAnsi(UNICHAR *oldNameU, char *newName) { - int32_t retVal; - UNICHAR *newNameU; - - newNameU = cp437ToUnichar(newName); + UNICHAR *newNameU = cp437ToUnichar(newName); if (newNameU == NULL) return false; - retVal = UNICHAR_RENAME(oldNameU, newNameU); + int32_t retVal = UNICHAR_RENAME(oldNameU, newNameU); free(newNameU); return (retVal == 0); @@ -408,16 +393,12 @@ static bool renameAnsi(UNICHAR *oldNameU, char *newName) static void setupDiskOpDrives(void) // Windows only { - uint16_t i; - uint32_t drivesBitmask; - fillRect(134, 29, 31, 111, PAL_DESKTOP); - numLogicalDrives = 0; // get number of drives and drive names - drivesBitmask = GetLogicalDrives(); - for (i = 0; i < 8*sizeof (uint32_t); i++) + const uint32_t drivesBitmask = GetLogicalDrives(); + for (int32_t i = 0; i < 8*sizeof (uint32_t); i++) { if ((drivesBitmask & (1 << i)) != 0) { @@ -428,11 +409,11 @@ static void setupDiskOpDrives(void) // Windows only } // hide all buttons - for (i = 0; i < DISKOP_MAX_DRIVE_BUTTONS; i++) + for (uint16_t i = 0; i < DISKOP_MAX_DRIVE_BUTTONS; i++) hidePushButton(PB_DISKOP_DRIVE1 + i); // set button names and show buttons - for (i = 0; i < numLogicalDrives; i++) + for (uint16_t i = 0; i < numLogicalDrives; i++) { pushButtons[PB_DISKOP_DRIVE1 + i].caption = logicalDriveNames[driveIndexes[i]]; showPushButton(PB_DISKOP_DRIVE1 + i); @@ -463,14 +444,11 @@ static void openDrive(char *str) // Windows only bool fileExistsAnsi(char *str) { - int32_t retVal; - UNICHAR *strU; - - strU = cp437ToUnichar(str); + UNICHAR *strU = cp437ToUnichar(str); if (strU == NULL) return false; - retVal = access(strU, F_OK); + int32_t retVal = access(strU, F_OK); free(strU); return (retVal != -1); @@ -478,18 +456,14 @@ bool fileExistsAnsi(char *str) static bool deleteDirRecursive(UNICHAR *strU) { - int32_t ret; - FTS *ftsp; FTSENT *curr; char *files[] = { (char *)(strU), NULL }; - ftsp = NULL; - - ftsp = fts_open(files, FTS_NOCHDIR | FTS_PHYSICAL | FTS_XDEV, NULL); + FTS *ftsp = fts_open(files, FTS_NOCHDIR | FTS_PHYSICAL | FTS_XDEV, NULL); if (!ftsp) return false; - ret = true; + bool ret = true; while ((curr = fts_read(ftsp))) { switch (curr->fts_info) @@ -528,14 +502,11 @@ static bool deleteDirRecursive(UNICHAR *strU) static bool makeDirAnsi(char *str) { - int32_t retVal; - UNICHAR *strU; - - strU = cp437ToUnichar(str); + UNICHAR *strU = cp437ToUnichar(str); if (strU == NULL) return false; - retVal = mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + int32_t retVal = mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); free(strU); return (retVal == 0); @@ -586,12 +557,12 @@ bool diskOpGoParent(void) static char *getFilenameFromPath(char *p) { - int32_t i, len; + int32_t i; if (p == NULL || p[0] == '\0') return p; - len = (int32_t)strlen(p); + const int32_t len = (int32_t)strlen(p); if (len < 2 || p[len-1] == DIR_DELIMITER) return p; @@ -692,11 +663,8 @@ void diskOpSetFilename(uint8_t type, UNICHAR *pathU) static void openFile(UNICHAR *filenameU, bool songModifiedCheck) { - int32_t filesize; - FILE *f; - // first check if we can actually open the requested file - f = UNICHAR_FOPEN(filenameU, "rb"); + FILE *f = UNICHAR_FOPEN(filenameU, "rb"); if (f == NULL) { okBox(0, "System message", "Couldn't open file/directory! No permission or in use?"); @@ -704,7 +672,7 @@ static void openFile(UNICHAR *filenameU, bool songModifiedCheck) } fclose(f); - filesize = getFileSize(filenameU); + const int32_t filesize = getFileSize(filenameU); if (filesize == -1) // >2GB { okBox(0, "System message", "The file is too big and can't be loaded (over 2GB)."); @@ -761,9 +729,9 @@ static void removeFilenameExt(char *name) if (name == NULL || *name == '\0') return; - int32_t len = (int32_t)strlen(name); + const int32_t len = (int32_t)strlen(name); - int32_t extOffset = getExtOffset(name, len); + const int32_t extOffset = getExtOffset(name, len); if (extOffset != -1) name[extOffset] = '\0'; } @@ -775,7 +743,7 @@ void changeFilenameExt(char *name, char *ext, int32_t nameMaxLen) removeFilenameExt(name); - int32_t len = (int32_t)strlen(name); + const int32_t len = (int32_t)strlen(name); int32_t extLen = (int32_t)strlen(ext); if (len+extLen > nameMaxLen) @@ -797,11 +765,10 @@ void diskOpChangeFilenameExt(char *ext) void trimEntryName(char *name, bool isDir) { char extBuffer[24]; - int32_t j, extOffset, extLen; - j = (int32_t)strlen(name); - extOffset = getExtOffset(name, j); - extLen = (int32_t)strlen(&name[extOffset]); + int32_t j = (int32_t)strlen(name); + const int32_t extOffset = getExtOffset(name, j); + int32_t extLen = (int32_t)strlen(&name[extOffset]); j--; if (isDir) @@ -846,10 +813,9 @@ void trimEntryName(char *name, bool isDir) static void createOverwriteText(char *name) { char nameTmp[128]; - uint32_t nameLen; // read entry name to a small buffer - nameLen = (uint32_t)strlen(name); + const uint32_t nameLen = (uint32_t)strlen(name); memcpy(nameTmp, name, (nameLen >= sizeof (nameTmp)) ? sizeof (nameTmp) : (nameLen + 1)); nameTmp[sizeof (nameTmp) - 1] = '\0'; @@ -1031,15 +997,13 @@ void pbDiskOpSave(void) static void fileListPressed(int32_t index) { char *nameTmp; - int8_t mode; - int32_t result, entryIndex; - DirRec *dirEntry; + int32_t result; - entryIndex = FReq_DirPos + index; + const int32_t entryIndex = FReq_DirPos + index; if (entryIndex >= FReq_FileCount || FReq_FileCount == 0) return; // illegal entry - mode = mouse.mode; + const int8_t mode = mouse.mode; // set normal mouse cursor if (mouse.mode != MOUSE_MODE_NORMAL) @@ -1049,7 +1013,7 @@ static void fileListPressed(int32_t index) FReq_EntrySelected = -1; diskOp_DrawDirectory(); - dirEntry = &FReq_Buffer[entryIndex]; + DirRec *dirEntry = &FReq_Buffer[entryIndex]; switch (mode) { // open file/folder @@ -1147,12 +1111,12 @@ static void fileListPressed(int32_t index) bool testDiskOpMouseDown(bool mouseHeldDlown) { - int32_t tmpEntry, max; + int32_t tmpEntry; if (!ui.diskOpShown || FReq_FileCount == 0) return false; - max = FReq_FileCount - FReq_DirPos; + int32_t max = FReq_FileCount - FReq_DirPos; if (max > DISKOP_ENTRY_NUM) // needed kludge when mouse-scrolling max = DISKOP_ENTRY_NUM; @@ -1225,21 +1189,18 @@ void testDiskOpMouseRelease(void) static uint8_t handleEntrySkip(UNICHAR *nameU, bool isDir) { - char *name, *extPtr; - int32_t nameLen, extOffset, extLen; - // skip if illegal name or filesize >32-bit if (nameU == NULL) return true; - name = unicharToCp437(nameU, false); + char *name = unicharToCp437(nameU, false); if (name == NULL) return true; if (name[0] == '\0') goto skipEntry; - nameLen = (int32_t)strlen(name); + const int32_t nameLen = (int32_t)strlen(name); // skip ".name" dirs/files if (nameLen >= 2 && name[0] == '.' && name[1] != '.') @@ -1262,15 +1223,15 @@ static uint8_t handleEntrySkip(UNICHAR *nameU, bool isDir) } else if (!FReq_ShowAllFiles) { - extOffset = getExtOffset(name, nameLen); + const int32_t extOffset = getExtOffset(name, nameLen); if (extOffset == -1) goto skipEntry; - extLen = (int32_t)strlen(&name[extOffset]); + const int32_t extLen = (int32_t)strlen(&name[extOffset]); if (extLen < 3 || extLen > 5) goto skipEntry; // no possibly known extensions to filter out - extPtr = &name[extOffset]; + char *extPtr = &name[extOffset]; // decide what entries to keep based on file extension switch (FReq_Item) @@ -1589,12 +1550,10 @@ static void findClose(void) static bool swapBufferEntry(int32_t a, int32_t b) // used for sorting { - DirRec tmpBuffer; - if (a >= FReq_FileCount || b >= FReq_FileCount) return false; - tmpBuffer = FReq_Buffer[a]; + DirRec tmpBuffer = FReq_Buffer[a]; FReq_Buffer[a] = FReq_Buffer[b]; FReq_Buffer[b] = tmpBuffer; @@ -1603,24 +1562,20 @@ static bool swapBufferEntry(int32_t a, int32_t b) // used for sorting static char *ach(int32_t rad) // used for sortDirectory() { - char *p, *name; - int32_t i, nameLen, extLen; - DirRec *dirEntry; - - dirEntry = &FReq_Buffer[rad]; + DirRec *dirEntry = &FReq_Buffer[rad]; - name = unicharToCp437(dirEntry->nameU, true); + char *name = unicharToCp437(dirEntry->nameU, true); if (name == NULL) return NULL; - nameLen = (int32_t)strlen(name); + const int32_t nameLen = (int32_t)strlen(name); if (nameLen == 0) { free(name); return NULL; } - p = (char *)malloc(nameLen + 2); + char *p = (char *)malloc(nameLen + 2); if (p == NULL) { free(name); @@ -1645,7 +1600,7 @@ static char *ach(int32_t rad) // used for sortDirectory() { // file - i = getExtOffset(name, nameLen); + const int32_t i = getExtOffset(name, nameLen); if (config.cfg_SortPriority == 1 || i == -1) { // sort by filename @@ -1656,7 +1611,7 @@ static char *ach(int32_t rad) // used for sortDirectory() else { // sort by filename extension - extLen = nameLen - i; + const int32_t extLen = nameLen - i; if (extLen <= 1) { strcpy(p, name); @@ -1678,23 +1633,21 @@ static char *ach(int32_t rad) // used for sortDirectory() static void sortDirectory(void) { bool didSwap; - char *p1, *p2; - uint32_t offset, limit, i; if (FReq_FileCount < 2) return; // no need to sort - offset = FReq_FileCount / 2; + uint32_t offset = FReq_FileCount >> 1; while (offset > 0) { - limit = FReq_FileCount - offset; + const uint32_t limit = FReq_FileCount - offset; do { didSwap = false; - for (i = 0; i < limit; i++) + for (uint32_t i = 0; i < limit; i++) { - p1 = ach(i); - p2 = ach(offset + i); + char *p1 = ach(i); + char *p2 = ach(offset+i); if (p1 == NULL || p2 == NULL) { @@ -1722,7 +1675,7 @@ static void sortDirectory(void) } while (didSwap); - offset /= 2; + offset >>= 1; } } @@ -1744,9 +1697,9 @@ static uint8_t numDigits32(uint32_t x) static void printFormattedFilesize(uint16_t x, uint16_t y, uint32_t bufEntry) { char sizeStrBuffer[16]; - int32_t filesize, printFilesize; + int32_t printFilesize; - filesize = FReq_Buffer[bufEntry].filesize; + const int32_t filesize = FReq_Buffer[bufEntry].filesize; if (filesize == -1) { x += 6; @@ -1784,24 +1737,20 @@ forceMB: static void displayCurrPath(void) { - char *p, *delimiter, *asciiPath; - int32_t j; - uint32_t pathLen; - fillRect(4, 145, 162, 10, PAL_DESKTOP); - pathLen = (uint32_t)UNICHAR_STRLEN(FReq_CurPathU); + const uint32_t pathLen = (uint32_t)UNICHAR_STRLEN(FReq_CurPathU); if (pathLen == 0) return; - asciiPath = unicharToCp437(FReq_CurPathU, true); + char *asciiPath = unicharToCp437(FReq_CurPathU, true); if (asciiPath == NULL) { okBox(0, "System message", "Not enough memory!"); return; } - p = asciiPath; + char *p = asciiPath; if (textWidth(p) <= 162) { // path fits, print it all @@ -1820,7 +1769,7 @@ static void displayCurrPath(void) strcat(FReq_NameTemp, ".."); #endif - delimiter = strrchr(p, DIR_DELIMITER); + char *delimiter = strrchr(p, DIR_DELIMITER); if (delimiter != NULL) { #ifdef _WIN32 @@ -1830,7 +1779,7 @@ static void displayCurrPath(void) #endif } - j = (int32_t)strlen(FReq_NameTemp); + int32_t j = (int32_t)strlen(FReq_NameTemp); if (j > 6) { j--; @@ -1853,16 +1802,12 @@ static void displayCurrPath(void) void diskOp_DrawDirectory(void) { - char *readName; - uint16_t y; - int32_t bufEntry; - clearRect(FILENAME_TEXT_X - 1, 4, 162, 164); drawTextBox(TB_DISKOP_FILENAME); if (FReq_EntrySelected != -1) { - y = 4 + (uint16_t)((FONT1_CHAR_H + 1) * FReq_EntrySelected); + const uint16_t y = 4 + (uint16_t)((FONT1_CHAR_H + 1) * FReq_EntrySelected); fillRect(FILENAME_TEXT_X - 1, y, 162, FONT1_CHAR_H, PAL_PATTEXT); } @@ -1876,7 +1821,7 @@ void diskOp_DrawDirectory(void) for (uint16_t i = 0; i < DISKOP_ENTRY_NUM; i++) { - bufEntry = FReq_DirPos + i; + const int32_t bufEntry = FReq_DirPos + i; if (bufEntry >= FReq_FileCount) break; @@ -1884,11 +1829,11 @@ void diskOp_DrawDirectory(void) continue; // convert unichar name to codepage 437 - readName = unicharToCp437(FReq_Buffer[bufEntry].nameU, true); + char *readName = unicharToCp437(FReq_Buffer[bufEntry].nameU, true); if (readName == NULL) continue; - y = 4 + (i * (FONT1_CHAR_H + 1)); + const uint16_t y = 4 + (i * (FONT1_CHAR_H + 1)); // shrink entry name and add ".." if it doesn't fit on screen trimEntryName(readName, FReq_Buffer[bufEntry].isDir); @@ -1917,9 +1862,7 @@ void diskOp_DrawDirectory(void) static DirRec *bufferCreateEmptyDir(void) // special case: creates a dir entry with a ".." directory { - DirRec *dirEntry; - - dirEntry = (DirRec *)malloc(sizeof (DirRec)); + DirRec *dirEntry = (DirRec *)malloc(sizeof (DirRec)); if (dirEntry == NULL) return NULL; @@ -1938,8 +1881,7 @@ static DirRec *bufferCreateEmptyDir(void) // special case: creates a dir entry w static int32_t SDLCALL diskOp_ReadDirectoryThread(void *ptr) { - uint8_t lastFindFileFlag; - DirRec tmpBuffer, *newPtr; + DirRec tmpBuffer; FReq_DirPos = 0; @@ -1949,10 +1891,10 @@ static int32_t SDLCALL diskOp_ReadDirectoryThread(void *ptr) UNICHAR_GETCWD(FReq_CurPathU, PATH_MAX); // read first file - lastFindFileFlag = findFirst(&tmpBuffer); + int8_t lastFindFileFlag = findFirst(&tmpBuffer); if (lastFindFileFlag != LFF_DONE && lastFindFileFlag != LFF_SKIP) { - FReq_Buffer = (DirRec *)malloc(sizeof (DirRec) * (FReq_FileCount + 1)); + FReq_Buffer = (DirRec *)malloc(sizeof (DirRec) * (FReq_FileCount+1)); if (FReq_Buffer == NULL) { findClose(); @@ -1979,7 +1921,7 @@ static int32_t SDLCALL diskOp_ReadDirectoryThread(void *ptr) lastFindFileFlag = findNext(&tmpBuffer); if (lastFindFileFlag != LFF_DONE && lastFindFileFlag != LFF_SKIP) { - newPtr = (DirRec *)realloc(FReq_Buffer, sizeof (DirRec) * (FReq_FileCount + 1)); + DirRec *newPtr = (DirRec *)realloc(FReq_Buffer, sizeof (DirRec) * (FReq_FileCount + 1)); if (newPtr == NULL) { freeDirRecBuffer(); @@ -2011,11 +1953,11 @@ static int32_t SDLCALL diskOp_ReadDirectoryThread(void *ptr) } editor.diskOpReadDone = true; - setMouseBusy(false); - (void)ptr; return true; + + (void)ptr; } void diskOp_StartDirReadThread(void) @@ -2083,7 +2025,6 @@ static void setDiskOpItemRadioButtons(void) hideRadioButtonGroup(RB_GROUP_DISKOP_PAT_SAVEAS); hideRadioButtonGroup(RB_GROUP_DISKOP_TRK_SAVEAS); - if (editor.moduleSaveMode > 3) editor.moduleSaveMode = 3; @@ -2112,8 +2053,6 @@ static void setDiskOpItemRadioButtons(void) static void setDiskOpItem(uint8_t item) { - int32_t pathLen; - hideRadioButtonGroup(RB_GROUP_DISKOP_MOD_SAVEAS); hideRadioButtonGroup(RB_GROUP_DISKOP_INS_SAVEAS); hideRadioButtonGroup(RB_GROUP_DISKOP_SMP_SAVEAS); @@ -2204,7 +2143,7 @@ static void setDiskOpItem(uint8_t item) break; } - pathLen = (int32_t)UNICHAR_STRLEN(FReq_CurPathU); + const int32_t pathLen = (int32_t)UNICHAR_STRLEN(FReq_CurPathU); if (pathLen == 0) { memset(FReq_CurPathU, 0, (PATH_MAX + 2) * sizeof (UNICHAR)); diff --git a/src/ft2_edit.c b/src/ft2_edit.c @@ -46,7 +46,7 @@ void recordNote(uint8_t note, int8_t vol); // when the cursor is at the note slot static bool testNoteKeys(SDL_Scancode scancode) { - int8_t noteNum = scancodeKeyToNote(scancode); + const int8_t noteNum = scancodeKeyToNote(scancode); if (noteNum > 0 && noteNum <= 96) { recordNote(noteNum, -1); @@ -59,7 +59,7 @@ static bool testNoteKeys(SDL_Scancode scancode) // when the cursor is at the note slot void testNoteKeysRelease(SDL_Scancode scancode) { - int8_t noteNum = scancodeKeyToNote(scancode); // convert key scancode to note number + const int8_t noteNum = scancodeKeyToNote(scancode); // convert key scancode to note number if (noteNum > 0 && noteNum <= 96) recordNote(noteNum, 0); // release note } @@ -68,8 +68,6 @@ static bool testEditKeys(SDL_Scancode scancode, SDL_Keycode keycode) { int8_t i; uint8_t oldVal; - uint16_t pattLen; - tonTyp *ton; if (cursor.object == CURSOR_NOTE) { @@ -134,7 +132,7 @@ static bool testEditKeys(SDL_Scancode scancode, SDL_Keycode keycode) // insert slot data - ton = &patt[editor.editPattern][(editor.pattPos * MAX_VOICES) + cursor.ch]; + tonTyp *ton = &patt[editor.editPattern][(editor.pattPos * MAX_VOICES) + cursor.ch]; switch (cursor.object) { case CURSOR_INST1: @@ -228,7 +226,7 @@ static bool testEditKeys(SDL_Scancode scancode, SDL_Keycode keycode) // increase row (only in edit mode) - pattLen = pattLens[editor.editPattern]; + const int16_t pattLen = pattLens[editor.editPattern]; if (playMode == PLAYMODE_EDIT && pattLen >= 1) setPos(-1, (editor.pattPos + editor.ID_Add) % pattLen, true); @@ -242,13 +240,10 @@ static bool testEditKeys(SDL_Scancode scancode, SDL_Keycode keycode) // directly ported from the original FT2 code (fun fact: named EvulateTimeStamp() in the FT2 code) static void evaluateTimeStamp(int16_t *songPos, int16_t *pattNr, int16_t *pattPos, int16_t *tick) { - int16_t nr, t, p, r, sp, row; - uint16_t pattLen; - - sp = editor.songPos; - nr = editor.editPattern; - row = editor.pattPos; - t = editor.tempo - editor.timer; + int16_t sp = editor.songPos; + int16_t nr = editor.editPattern; + int16_t row = editor.pattPos; + int16_t t = editor.tempo - editor.timer; t = CLAMP(t, 0, editor.tempo - 1); @@ -256,10 +251,11 @@ static void evaluateTimeStamp(int16_t *songPos, int16_t *pattNr, int16_t *pattPo if (t > 15) t = 15; - pattLen = pattLens[nr]; + const int16_t pattLen = pattLens[nr]; if (config.recQuant > 0) { + int16_t r; if (config.recQuantRes >= 16) { t += (editor.tempo >> 1) + 1; @@ -268,7 +264,7 @@ static void evaluateTimeStamp(int16_t *songPos, int16_t *pattNr, int16_t *pattPo { r = tickArr[config.recQuantRes-1]; - p = row & (r - 1); + int16_t p = row & (r - 1); if (p < (r >> 1)) row -= p; else @@ -305,13 +301,12 @@ static void evaluateTimeStamp(int16_t *songPos, int16_t *pattNr, int16_t *pattPo // directly ported from the original FT2 code - what a mess, but it works... void recordNote(uint8_t note, int8_t vol) { - int8_t i, k, c, editmode, recmode; - int16_t nr, sp, oldpattpos, pattpos, tick; - uint16_t pattLen; + int8_t i; + int16_t nr, sp, pattpos, tick; int32_t time; tonTyp *noteData; - oldpattpos = editor.pattPos; + const int16_t oldpattpos = editor.pattPos; if (songPlaying) { @@ -326,14 +321,14 @@ void recordNote(uint8_t note, int8_t vol) tick = 0; } - editmode = (playMode == PLAYMODE_EDIT); - recmode = (playMode == PLAYMODE_RECSONG) || (playMode == PLAYMODE_RECPATT); + bool editmode = (playMode == PLAYMODE_EDIT); + bool recmode = (playMode == PLAYMODE_RECSONG) || (playMode == PLAYMODE_RECPATT); if (note == 97) vol = 0; - c = -1; - k = -1; + int8_t c = -1; + int8_t k = -1; if (editmode || recmode) { @@ -428,7 +423,7 @@ void recordNote(uint8_t note, int8_t vol) { if (allocatePattern(nr)) { - pattLen = pattLens[nr]; + const int16_t pattLen = pattLens[nr]; noteData = &patt[nr][(pattpos * MAX_VOICES) + c]; // insert data @@ -488,7 +483,7 @@ void recordNote(uint8_t note, int8_t vol) { // insert data - pattLen = pattLens[nr]; + int16_t pattLen = pattLens[nr]; noteData = &patt[nr][(pattpos * MAX_VOICES) + c]; if (noteData->ton != 0) @@ -535,10 +530,6 @@ void recordNote(uint8_t note, int8_t vol) bool handleEditKeys(SDL_Keycode keycode, SDL_Scancode scancode) { - bool frKeybHack; - uint16_t pattLen; - tonTyp *note; - // special case for delete - manipulate note data if (keycode == SDLK_DELETE) { @@ -548,7 +539,7 @@ bool handleEditKeys(SDL_Keycode keycode, SDL_Scancode scancode) if (patt[editor.editPattern] == NULL) return true; - note = &patt[editor.editPattern][(editor.pattPos * MAX_VOICES) + cursor.ch]; + tonTyp *note = &patt[editor.editPattern][(editor.pattPos * MAX_VOICES) + cursor.ch]; if (keyb.leftShiftPressed) { @@ -586,7 +577,7 @@ bool handleEditKeys(SDL_Keycode keycode, SDL_Scancode scancode) killPatternIfUnused(editor.editPattern); // increase row (only in edit mode) - pattLen = pattLens[editor.editPattern]; + const int16_t pattLen = pattLens[editor.editPattern]; if (playMode == PLAYMODE_EDIT && pattLen >= 1) setPos(-1, (editor.pattPos + editor.ID_Add) % pattLen, true); @@ -597,7 +588,7 @@ bool handleEditKeys(SDL_Keycode keycode, SDL_Scancode scancode) } // a kludge for french keyb. layouts to allow writing numbers in the pattern data with left SHIFT - frKeybHack = keyb.leftShiftPressed && !keyb.leftAltPressed && !keyb.leftCtrlPressed && + const bool frKeybHack = keyb.leftShiftPressed && !keyb.leftAltPressed && !keyb.leftCtrlPressed && (scancode >= SDL_SCANCODE_1) && (scancode <= SDL_SCANCODE_0); if (frKeybHack || !keyb.keyModifierDown) @@ -608,15 +599,12 @@ bool handleEditKeys(SDL_Keycode keycode, SDL_Scancode scancode) void writeToMacroSlot(uint8_t slot) { - uint16_t writeVol, writeEff; - tonTyp *note; - - writeVol = 0; - writeEff = 0; + uint16_t writeVol = 0; + uint16_t writeEff = 0; if (patt[editor.editPattern] != NULL) { - note = &patt[editor.editPattern][(editor.pattPos * MAX_VOICES) + cursor.ch]; + tonTyp *note = &patt[editor.editPattern][(editor.pattPos * MAX_VOICES) + cursor.ch]; writeVol = note->vol; writeEff = (note->effTyp << 8) | note->eff; } @@ -629,18 +617,14 @@ void writeToMacroSlot(uint8_t slot) void writeFromMacroSlot(uint8_t slot) { - uint8_t effTyp; - uint16_t pattLen; - tonTyp *note; - if (playMode != PLAYMODE_EDIT && playMode != PLAYMODE_RECSONG && playMode != PLAYMODE_RECPATT) return; if (!allocatePattern(editor.editPattern)) return; - pattLen = pattLens[editor.editPattern]; - note = &patt[editor.editPattern][(editor.pattPos * MAX_VOICES) + cursor.ch]; + const int16_t pattLen = pattLens[editor.editPattern]; + tonTyp *note = &patt[editor.editPattern][(editor.pattPos * MAX_VOICES) + cursor.ch]; if (cursor.object == CURSOR_VOL1 || cursor.object == CURSOR_VOL2) { @@ -648,7 +632,7 @@ void writeFromMacroSlot(uint8_t slot) } else { - effTyp = (uint8_t)(config.comMacro[slot] >> 8); + uint8_t effTyp = (uint8_t)(config.comMacro[slot] >> 8); if (effTyp > 35) { // illegal effect @@ -673,21 +657,17 @@ void writeFromMacroSlot(uint8_t slot) void insertPatternNote(void) { - int16_t nr, pattPos; - uint16_t pattLen; - tonTyp *pattPtr; - if (playMode != PLAYMODE_EDIT && playMode != PLAYMODE_RECPATT && playMode != PLAYMODE_RECSONG) return; - nr = editor.editPattern; + const int16_t nr = editor.editPattern; - pattPtr = patt[nr]; + tonTyp *pattPtr = patt[nr]; if (pattPtr == NULL) return; - pattPos = editor.pattPos; - pattLen = pattLens[nr]; + const int16_t pattPos = editor.pattPos; + const int16_t pattLen = pattLens[nr]; if (pattLen > 1) { @@ -705,21 +685,18 @@ void insertPatternNote(void) void insertPatternLine(void) { - int16_t nr, pattLen, pattPos; - tonTyp *pattPtr; - if (playMode != PLAYMODE_EDIT && playMode != PLAYMODE_RECPATT && playMode != PLAYMODE_RECSONG) return; - nr = editor.editPattern; + const int16_t nr = editor.editPattern; setPatternLen(nr, pattLens[nr] + config.recTrueInsert); // config.recTrueInsert is 0 or 1 - pattPtr = patt[nr]; + tonTyp *pattPtr = patt[nr]; if (pattPtr != NULL) { - pattPos = editor.pattPos; - pattLen = pattLens[nr]; + const int16_t pattPos = editor.pattPos; + const int16_t pattLen = pattLens[nr]; if (pattLen > 1) { @@ -741,18 +718,14 @@ void insertPatternLine(void) void deletePatternNote(void) { - int16_t nr, pattPos; - uint16_t pattLen; - tonTyp *pattPtr; - if (playMode != PLAYMODE_EDIT && playMode != PLAYMODE_RECPATT && playMode != PLAYMODE_RECSONG) return; - nr = editor.editPattern; - pattPos = editor.pattPos; - pattLen = pattLens[nr]; + const int16_t nr = editor.editPattern; + int16_t pattPos = editor.pattPos; + const int16_t pattLen = pattLens[nr]; - pattPtr = patt[editor.editPattern]; + tonTyp *pattPtr = patt[editor.editPattern]; if (pattPtr != NULL) { if (pattPos > 0) @@ -783,18 +756,14 @@ void deletePatternNote(void) void deletePatternLine(void) { - int16_t nr, pattPos; - uint16_t pattLen; - tonTyp *pattPtr; - if (playMode != PLAYMODE_EDIT && playMode != PLAYMODE_RECPATT && playMode != PLAYMODE_RECSONG) return; - nr = editor.editPattern; - pattPos = editor.pattPos; - pattLen = pattLens[nr]; + const int16_t nr = editor.editPattern; + int16_t pattPos = editor.pattPos; + const int16_t pattLen = pattLens[nr]; - pattPtr = patt[editor.editPattern]; + tonTyp *pattPtr = patt[editor.editPattern]; if (pattPtr != NULL) { if (pattPos > 0) @@ -1389,26 +1358,23 @@ void pasteNote(tonTyp *src, tonTyp *dst) void cutTrack(void) { - uint16_t i, pattLen; - tonTyp *pattPtr; - - pattPtr = patt[editor.editPattern]; + tonTyp *pattPtr = patt[editor.editPattern]; if (pattPtr == NULL) return; - pattLen = pattLens[editor.editPattern]; + const int16_t pattLen = pattLens[editor.editPattern]; if (config.ptnCutToBuffer) { memset(trackCopyBuff, 0, MAX_PATT_LEN * sizeof (tonTyp)); - for (i = 0; i < pattLen; i++) + for (int16_t i = 0; i < pattLen; i++) copyNote(&pattPtr[(i * MAX_VOICES) + cursor.ch], &trackCopyBuff[i]); trkBufLen = pattLen; } pauseMusic(); - for (i = 0; i < pattLen; i++) + for (int16_t i = 0; i < pattLen; i++) pasteNote(&clearNote, &pattPtr[(i * MAX_VOICES) + cursor.ch]); resumeMusic(); @@ -1420,17 +1386,14 @@ void cutTrack(void) void copyTrack(void) { - uint16_t i, pattLen; - tonTyp *pattPtr; - - pattPtr = patt[editor.editPattern]; + tonTyp *pattPtr = patt[editor.editPattern]; if (pattPtr == NULL) return; - pattLen = pattLens[editor.editPattern]; + const int16_t pattLen = pattLens[editor.editPattern]; memset(trackCopyBuff, 0, MAX_PATT_LEN * sizeof (tonTyp)); - for (i = 0; i < pattLen; i++) + for (int16_t i = 0; i < pattLen; i++) copyNote(&pattPtr[(i * MAX_VOICES) + cursor.ch], &trackCopyBuff[i]); trkBufLen = pattLen; @@ -1438,17 +1401,14 @@ void copyTrack(void) void pasteTrack(void) { - uint16_t i, pattLen; - tonTyp *pattPtr; - if (trkBufLen == 0 || !allocatePattern(editor.editPattern)) return; - pattPtr = patt[editor.editPattern]; - pattLen = pattLens[editor.editPattern]; + tonTyp *pattPtr = patt[editor.editPattern]; + const int16_t pattLen = pattLens[editor.editPattern]; pauseMusic(); - for (i = 0; i < pattLen; i++) + for (int16_t i = 0; i < pattLen; i++) pasteNote(&trackCopyBuff[i], &pattPtr[(i * MAX_VOICES) + cursor.ch]); resumeMusic(); @@ -1460,21 +1420,18 @@ void pasteTrack(void) void cutPattern(void) { - uint16_t i, x, pattLen; - tonTyp *pattPtr; - - pattPtr = patt[editor.editPattern]; + tonTyp *pattPtr = patt[editor.editPattern]; if (pattPtr == NULL) return; - pattLen = pattLens[editor.editPattern]; + const int16_t pattLen = pattLens[editor.editPattern]; if (config.ptnCutToBuffer) { memset(ptnCopyBuff, 0, (MAX_PATT_LEN * MAX_VOICES) * sizeof (tonTyp)); - for (x = 0; x < song.antChn; x++) + for (int16_t x = 0; x < song.antChn; x++) { - for (i = 0; i < pattLen; i++) + for (int16_t i = 0; i < pattLen; i++) copyNote(&pattPtr[(i * MAX_VOICES) + x], &ptnCopyBuff[(i * MAX_VOICES) + x]); } @@ -1482,9 +1439,9 @@ void cutPattern(void) } pauseMusic(); - for (x = 0; x < song.antChn; x++) + for (int16_t x = 0; x < song.antChn; x++) { - for (i = 0; i < pattLen; i++) + for (int16_t i = 0; i < pattLen; i++) pasteNote(&clearNote, &pattPtr[(i * MAX_VOICES) + x]); } resumeMusic(); @@ -1497,19 +1454,16 @@ void cutPattern(void) void copyPattern(void) { - uint16_t i, x, pattLen; - tonTyp *pattPtr; - - pattPtr = patt[editor.editPattern]; + tonTyp *pattPtr = patt[editor.editPattern]; if (pattPtr == NULL) return; - pattLen = pattLens[editor.editPattern]; + const int16_t pattLen = pattLens[editor.editPattern]; memset(ptnCopyBuff, 0, (MAX_PATT_LEN * MAX_VOICES) * sizeof (tonTyp)); - for (x = 0; x < song.antChn; x++) + for (int16_t x = 0; x < song.antChn; x++) { - for (i = 0; i < pattLen; i++) + for (int16_t i = 0; i < pattLen; i++) copyNote(&pattPtr[(i * MAX_VOICES) + x], &ptnCopyBuff[(i * MAX_VOICES) + x]); } @@ -1520,9 +1474,6 @@ void copyPattern(void) void pastePattern(void) { - uint16_t i, x, pattLen; - tonTyp *pattPtr; - if (ptnBufLen == 0) return; @@ -1535,13 +1486,13 @@ void pastePattern(void) if (!allocatePattern(editor.editPattern)) return; - pattPtr = patt[editor.editPattern]; - pattLen = pattLens[editor.editPattern]; + tonTyp *pattPtr = patt[editor.editPattern]; + const int16_t pattLen = pattLens[editor.editPattern]; pauseMusic(); - for (x = 0; x < song.antChn; x++) + for (int16_t x = 0; x < song.antChn; x++) { - for (i = 0; i < pattLen; i++) + for (int16_t i = 0; i < pattLen; i++) pasteNote(&ptnCopyBuff[(i * MAX_VOICES) + x], &pattPtr[(i * MAX_VOICES) + x]); } resumeMusic(); @@ -1554,21 +1505,18 @@ void pastePattern(void) void cutBlock(void) { - uint16_t x, y; - tonTyp *pattPtr; - if (pattMark.markY1 == pattMark.markY2 || pattMark.markY1 > pattMark.markY2) return; - pattPtr = patt[editor.editPattern]; + tonTyp *pattPtr = patt[editor.editPattern]; if (pattPtr == NULL) return; if (config.ptnCutToBuffer) { - for (x = pattMark.markX1; x <= pattMark.markX2; x++) + for (int16_t x = pattMark.markX1; x <= pattMark.markX2; x++) { - for (y = pattMark.markY1; y < pattMark.markY2; y++) + for (int16_t y = pattMark.markY1; y < pattMark.markY2; y++) { assert(x < song.antChn && y < pattLens[editor.editPattern]); copyNote(&pattPtr[(y * MAX_VOICES) + x], @@ -1578,9 +1526,9 @@ void cutBlock(void) } pauseMusic(); - for (x = pattMark.markX1; x <= pattMark.markX2; x++) + for (int16_t x = pattMark.markX1; x <= pattMark.markX2; x++) { - for (y = pattMark.markY1; y < pattMark.markY2; y++) + for (int16_t y = pattMark.markY1; y < pattMark.markY2; y++) pasteNote(&clearNote, &pattPtr[(y * MAX_VOICES) + x]); } resumeMusic(); @@ -1597,19 +1545,16 @@ void cutBlock(void) void copyBlock(void) { - uint16_t x, y; - tonTyp *pattPtr; - if (pattMark.markY1 == pattMark.markY2 || pattMark.markY1 > pattMark.markY2) return; - pattPtr = patt[editor.editPattern]; + tonTyp *pattPtr = patt[editor.editPattern]; if (pattPtr == NULL) return; - for (x = pattMark.markX1; x <= pattMark.markX2; x++) + for (int16_t x = pattMark.markX1; x <= pattMark.markX2; x++) { - for (y = pattMark.markY1; y < pattMark.markY2; y++) + for (int16_t y = pattMark.markY1; y < pattMark.markY2; y++) { assert(x < song.antChn && y < pattLens[editor.editPattern]); copyNote(&pattPtr[(y * MAX_VOICES) + x], @@ -1624,26 +1569,23 @@ void copyBlock(void) void pasteBlock(void) { - int32_t xpos, ypos, j, k, pattLen; - tonTyp *pattPtr; - if (!blockCopied || !allocatePattern(editor.editPattern)) return; - pattLen = pattLens[editor.editPattern]; + const int16_t pattLen = pattLens[editor.editPattern]; - xpos = cursor.ch; - ypos = editor.pattPos; + const int32_t xpos = cursor.ch; + const int32_t ypos = editor.pattPos; - j = markXSize; + int32_t j = markXSize; if (j+xpos >= song.antChn) j = song.antChn - xpos - 1; - k = markYSize; + int32_t k = markYSize; if (k+ypos >= pattLen) k = pattLen - ypos; - pattPtr = patt[editor.editPattern]; + tonTyp *pattPtr = patt[editor.editPattern]; pauseMusic(); for (int32_t x = xpos; x <= xpos+j; x++) @@ -1664,17 +1606,14 @@ void pasteBlock(void) static void remapInstrXY(uint16_t nr, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint8_t src, uint8_t dst) { - int32_t noteSkipLen; - tonTyp *pattPtr, *note; - // this routine is only used sanely, so no need to check input - pattPtr = patt[nr]; + tonTyp *pattPtr = patt[nr]; if (pattPtr == NULL) return; - noteSkipLen = MAX_VOICES - ((x2 + 1) - x1); - note = &pattPtr[(y1 * MAX_VOICES) + x1]; + const int32_t noteSkipLen = MAX_VOICES - ((x2 + 1) - x1); + tonTyp *note = &pattPtr[(y1 * MAX_VOICES) + x1]; for (uint16_t y = y1; y <= y2; y++) { @@ -1741,15 +1680,13 @@ void remapPattern(void) void remapSong(void) { - uint8_t pattNr; - if (editor.srcInstr == editor.curInstr) return; pauseMusic(); for (int32_t i = 0; i < MAX_PATTERNS; i++) { - pattNr = (uint8_t)i; + const uint8_t pattNr = (uint8_t)i; remapInstrXY(pattNr, 0, 0, @@ -1762,9 +1699,11 @@ void remapSong(void) setSongModifiedFlag(); } +// "scale-fade volume" routines + static int8_t getNoteVolume(tonTyp *note) { - int8_t nv, vv, ev, finalv; + int8_t nv, vv, ev; if (note->vol >= 0x10 && note->vol <= 0x50) vv = note->vol - 0x10; @@ -1781,7 +1720,7 @@ static int8_t getNoteVolume(tonTyp *note) else nv = -1; - finalv = -1; + int8_t finalv = -1; if (nv >= 0) finalv = nv; if (vv >= 0) finalv = vv; if (ev >= 0) finalv = ev; @@ -1791,12 +1730,10 @@ static int8_t getNoteVolume(tonTyp *note) static void setNoteVolume(tonTyp *note, int8_t newVol) { - int8_t oldv; - if (newVol < 0) return; - oldv = getNoteVolume(note); + const int8_t oldv = getNoteVolume(note); if (note->vol == oldv) return; // volume is the same @@ -1808,23 +1745,19 @@ static void setNoteVolume(tonTyp *note, int8_t newVol) static void scaleNote(uint16_t ptn, int8_t ch, int16_t row, double dScale) { - int32_t vol; - uint16_t pattLen; - tonTyp *note; - if (patt[ptn] == NULL) return; - pattLen = pattLens[ptn]; + const int16_t pattLen = pattLens[ptn]; if (row < 0 || row >= pattLen || ch < 0 || ch >= song.antChn) return; - note = &patt[ptn][(row * MAX_VOICES) + ch]; + tonTyp *note = &patt[ptn][(row * MAX_VOICES) + ch]; - vol = getNoteVolume(note); + int32_t vol = getNoteVolume(note); if (vol >= 0) { - vol = (int32_t)round(vol * dScale); + vol = (int32_t)((vol * dScale) + 0.5); // rounded vol = MIN(MAX(0, vol), 64); setNoteVolume(note, (int8_t)vol); } @@ -1832,20 +1765,19 @@ static void scaleNote(uint16_t ptn, int8_t ch, int16_t row, double dScale) static bool askForScaleFade(char *msg) { - char *val1, *val2, volstr[32 + 1]; - uint8_t err; + char volstr[32+1]; sprintf(volstr, "%0.2f,%0.2f", dVolScaleFK1, dVolScaleFK2); if (inputBox(1, msg, volstr, sizeof (volstr) - 1) != 1) return false; - err = false; + bool err = false; - val1 = volstr; + char *val1 = volstr; if (strlen(val1) < 3) err = true; - val2 = strchr(volstr, ','); + char *val2 = strchr(volstr, ','); if (val2 == NULL || strlen(val2) < 3) err = true; @@ -1856,32 +1788,29 @@ static bool askForScaleFade(char *msg) } dVolScaleFK1 = atof(val1); - dVolScaleFK2 = atof(val2 + 1); + dVolScaleFK2 = atof(val2+1); return true; } void scaleFadeVolumeTrack(void) { - uint16_t pattLen; - double dIPy, dVol; - if (!askForScaleFade("Volume scale-fade track (start-, end scale)")) return; if (patt[editor.editPattern] == NULL) return; - pattLen = pattLens[editor.editPattern]; + const int32_t pattLen = pattLens[editor.editPattern]; - dIPy = 0.0; + double dIPy = 0.0; if (pattLen > 0) dIPy = (dVolScaleFK2 - dVolScaleFK1) / pattLen; - dVol = dVolScaleFK1; + double dVol = dVolScaleFK1; pauseMusic(); - for (uint16_t row = 0; row < pattLen; row++) + for (int16_t row = 0; row < pattLen; row++) { scaleNote(editor.editPattern, cursor.ch, row, dVol); dVol += dIPy; @@ -1891,27 +1820,24 @@ void scaleFadeVolumeTrack(void) void scaleFadeVolumePattern(void) { - uint16_t pattLen; - double dIPy, dVol; - if (!askForScaleFade("Volume scale-fade pattern (start-, end scale)")) return; if (patt[editor.editPattern] == NULL) return; - pattLen = pattLens[editor.editPattern]; + const int32_t pattLen = pattLens[editor.editPattern]; - dIPy = 0.0; + double dIPy = 0.0; if (pattLen > 0) dIPy = (dVolScaleFK2 - dVolScaleFK1) / pattLen; - dVol = dVolScaleFK1; + double dVol = dVolScaleFK1; pauseMusic(); - for (uint16_t row = 0; row < pattLen; row++) + for (int16_t row = 0; row < pattLen; row++) { - for (uint8_t ch = 0; ch < song.antChn; ch++) + for (int8_t ch = 0; ch < song.antChn; ch++) scaleNote(editor.editPattern, ch, row, dVol); dVol += dIPy; @@ -1921,27 +1847,24 @@ void scaleFadeVolumePattern(void) void scaleFadeVolumeBlock(void) { - uint16_t dy; - double dIPy, dVol; - if (!askForScaleFade("Volume scale-fade block (start-, end scale)")) return; if (patt[editor.editPattern] == NULL || pattMark.markY1 == pattMark.markY2 || pattMark.markY1 > pattMark.markY2) return; - dy = pattMark.markY2 - pattMark.markY1; + const int32_t dy = pattMark.markY2 - pattMark.markY1; - dIPy = 0.0; + double dIPy = 0.0; if (dy > 0) dIPy = (dVolScaleFK2 - dVolScaleFK1) / dy; - dVol = dVolScaleFK1; + double dVol = dVolScaleFK1; pauseMusic(); - for (uint16_t row = pattMark.markY1; row < pattMark.markY2; row++) + for (int16_t row = pattMark.markY1; row < pattMark.markY2; row++) { - for (uint16_t ch = pattMark.markX1; ch <= pattMark.markX2; ch++) + for (int16_t ch = pattMark.markX1; ch <= pattMark.markX2; ch++) scaleNote(editor.editPattern, (uint8_t)ch, row, dVol); dVol += dIPy; diff --git a/src/ft2_events.c b/src/ft2_events.c @@ -255,29 +255,27 @@ bool handleSingleInstancing(int32_t argc, char **argv) static void handleSysMsg(SDL_Event inputEvent) { - SDL_SysWMmsg *wmMsg; + if (inputEvent.type != SDL_SYSWMEVENT) + return; - if (inputEvent.type == SDL_SYSWMEVENT) + SDL_SysWMmsg *wmMsg = inputEvent.syswm.msg; + if (wmMsg->subsystem == SDL_SYSWM_WINDOWS && wmMsg->msg.win.msg == SYSMSG_FILE_ARG) { - wmMsg = inputEvent.syswm.msg; - if (wmMsg->subsystem == SDL_SYSWM_WINDOWS && wmMsg->msg.win.msg == SYSMSG_FILE_ARG) + hMapFile = OpenFileMapping(FILE_MAP_READ, FALSE, SHARED_FILENAME); + if (hMapFile != NULL) { - hMapFile = OpenFileMapping(FILE_MAP_READ, FALSE, SHARED_FILENAME); - if (hMapFile != NULL) + sharedMemBuf = (LPTSTR)MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, ARGV_SHARED_MEM_MAX_LEN); + if (sharedMemBuf != NULL) { - sharedMemBuf = (LPTSTR)MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, ARGV_SHARED_MEM_MAX_LEN); - if (sharedMemBuf != NULL) - { - editor.autoPlayOnDrop = true; - loadDroppedFile((char *)sharedMemBuf, true); - - UnmapViewOfFile(sharedMemBuf); - sharedMemBuf = NULL; - } + editor.autoPlayOnDrop = true; + loadDroppedFile((char *)sharedMemBuf, true); - CloseHandle(hMapFile); - hMapFile = NULL; + UnmapViewOfFile(sharedMemBuf); + sharedMemBuf = NULL; } + + CloseHandle(hMapFile); + hMapFile = NULL; } } } @@ -295,12 +293,8 @@ static LONG WINAPI exceptionHandler(EXCEPTION_POINTERS *ptr) { #define BACKUP_FILES_TO_TRY 1000 char fileName[32]; - uint16_t i; - UNICHAR *fileNameU; struct stat statBuffer; - (void)ptr; - if (oneInstHandle != NULL) CloseHandle(oneInstHandle); @@ -309,16 +303,17 @@ static LONG WINAPI exceptionHandler(EXCEPTION_POINTERS *ptr) if (getDiskOpModPath() != NULL && UNICHAR_CHDIR(getDiskOpModPath()) == 0) { // find a free filename - for (i = 1; i < 1000; i++) + int32_t i; + for (i = 1; i < BACKUP_FILES_TO_TRY; i++) { sprintf(fileName, "backup%03d.xm", (int32_t)i); if (stat(fileName, &statBuffer) != 0) break; // filename OK } - if (i != 1000) + if (i != BACKUP_FILES_TO_TRY) { - fileNameU = cp437ToUnichar(fileName); + UNICHAR *fileNameU = cp437ToUnichar(fileName); if (fileNameU != NULL) { saveXM(fileNameU); @@ -332,14 +327,14 @@ static LONG WINAPI exceptionHandler(EXCEPTION_POINTERS *ptr) } return EXCEPTION_CONTINUE_SEARCH; + + (void)ptr; } #else static void exceptionHandler(int32_t signal) { #define BACKUP_FILES_TO_TRY 1000 char fileName[32]; - uint16_t i; - UNICHAR *fileNameU; struct stat statBuffer; if (signal == 15) @@ -350,16 +345,17 @@ static void exceptionHandler(int32_t signal) if (getDiskOpModPath() != NULL && UNICHAR_CHDIR(getDiskOpModPath()) == 0) { // find a free filename - for (i = 1; i < 1000; i++) + int32_t i; + for (i = 1; i < BACKUP_FILES_TO_TRY; i++) { sprintf(fileName, "backup%03d.xm", i); if (stat(fileName, &statBuffer) != 0) break; // filename OK } - if (i != 1000) + if (i != BACKUP_FILES_TO_TRY) { - fileNameU = cp437ToUnichar(fileName); + UNICHAR *fileNameU = cp437ToUnichar(fileName); if (fileNameU != NULL) { saveXM(fileNameU); @@ -398,10 +394,7 @@ void setupCrashHandler(void) static void handleInput(void) { - char *inputText; - uint32_t eventType; SDL_Event event; - SDL_Keycode key; if (!editor.busy) handleLastGUIObjectDown(); // this should be handled before main input poll (on next frame) @@ -430,11 +423,12 @@ static void handleInput(void) if (editor.busy) { - eventType = event.type; - key = event.key.keysym.scancode; + const uint32_t eventType = event.type; + const SDL_Keycode key = event.key.keysym.scancode; - /* The Echo tool in Smp. Ed. can literally take forever if abused, - ** let mouse buttons/ESC/SIGTERM force-stop it. */ + /* The Echo tool in Smp. Ed. can take forever if abused, let + ** mouse buttons/ESC/SIGTERM force-stop it. + */ if (eventType == SDL_MOUSEBUTTONDOWN || eventType == SDL_QUIT || (eventType == SDL_KEYUP && key == SDL_SCANCODE_ESCAPE)) { @@ -471,7 +465,7 @@ static void handleInput(void) continue; } - inputText = utf8ToCp437(event.text.text, false); + char *inputText = utf8ToCp437(event.text.text, false); if (inputText != NULL) { if (inputText[0] != '\0') @@ -542,7 +536,7 @@ static void handleInput(void) #ifdef HAS_MIDI // MIDI vibrato - uint8_t vibDepth = (midi.currMIDIVibDepth >> 9) & 0x0F; + const uint8_t vibDepth = (midi.currMIDIVibDepth >> 9) & 0x0F; if (vibDepth > 0) recordMIDIEffect(0x04, 0xA0 | vibDepth); #endif diff --git a/src/ft2_gui.c b/src/ft2_gui.c @@ -43,14 +43,9 @@ static void releaseMouseStates(void) void unstuckLastUsedGUIElement(void) { - pushButton_t *p; - radioButton_t *r; - checkBox_t *c; - scrollBar_t *s; - if (mouse.lastUsedObjectID == OBJECT_ID_NONE) { - /* if last object ID is OBJECT_ID_NONE, check if we moved the + /* If last object ID is OBJECT_ID_NONE, check if we moved the ** sample data loop pins, and unstuck them if so */ @@ -77,7 +72,7 @@ void unstuckLastUsedGUIElement(void) case OBJECT_PUSHBUTTON: { assert(mouse.lastUsedObjectID >= 0 && mouse.lastUsedObjectID < NUM_PUSHBUTTONS); - p = &pushButtons[mouse.lastUsedObjectID]; + pushButton_t *p = &pushButtons[mouse.lastUsedObjectID]; if (p->state == PUSHBUTTON_PRESSED) { p->state = PUSHBUTTON_UNPRESSED; @@ -90,7 +85,7 @@ void unstuckLastUsedGUIElement(void) case OBJECT_RADIOBUTTON: { assert(mouse.lastUsedObjectID >= 0 && mouse.lastUsedObjectID < NUM_RADIOBUTTONS); - r = &radioButtons[mouse.lastUsedObjectID]; + radioButton_t *r = &radioButtons[mouse.lastUsedObjectID]; if (r->state == RADIOBUTTON_PRESSED) { r->state = RADIOBUTTON_UNCHECKED; @@ -103,7 +98,7 @@ void unstuckLastUsedGUIElement(void) case OBJECT_CHECKBOX: { assert(mouse.lastUsedObjectID >= 0 && mouse.lastUsedObjectID < NUM_CHECKBOXES); - c = &checkBoxes[mouse.lastUsedObjectID]; + checkBox_t *c = &checkBoxes[mouse.lastUsedObjectID]; if (c->state == CHECKBOX_PRESSED) { c->state = CHECKBOX_UNPRESSED; @@ -116,7 +111,7 @@ void unstuckLastUsedGUIElement(void) case OBJECT_SCROLLBAR: { assert(mouse.lastUsedObjectID >= 0 && mouse.lastUsedObjectID < NUM_SCROLLBARS); - s = &scrollBars[mouse.lastUsedObjectID]; + scrollBar_t *s = &scrollBars[mouse.lastUsedObjectID]; if (s->state == SCROLLBAR_PRESSED) { s->state = SCROLLBAR_UNPRESSED; @@ -133,11 +128,6 @@ void unstuckLastUsedGUIElement(void) bool setupGUI(void) { int32_t i; - textBox_t *t; - pushButton_t *p; - checkBox_t *c; - radioButton_t *r; - scrollBar_t *s; // all memory will be NULL-tested and free'd if we return false somewhere in this function @@ -149,10 +139,9 @@ bool setupGUI(void) // set uninitialized GUI struct entries - for (i = 1; i < NUM_TEXTBOXES; i++) // skip first entry, it's reserved for inputBox()) + textBox_t *t = &textBoxes[1]; // skip first entry, it's reserved for inputBox()) + for (i = 1; i < NUM_TEXTBOXES; i++, t++) { - t = &textBoxes[i]; - t->visible = false; t->bufOffset = 0; t->cursorPos = 0; @@ -166,10 +155,9 @@ bool setupGUI(void) goto setupGUI_OOM; } - for (i = 0; i < NUM_PUSHBUTTONS; i++) + pushButton_t *p = pushButtons; + for (i = 0; i < NUM_PUSHBUTTONS; i++, p++) { - p = &pushButtons[i]; - p->state = 0; p->visible = false; @@ -185,27 +173,24 @@ bool setupGUI(void) } } - for (i = 0; i < NUM_CHECKBOXES; i++) + checkBox_t *c = checkBoxes; + for (i = 0; i < NUM_CHECKBOXES; i++, c++) { - c = &checkBoxes[i]; - c->state = 0; c->checked = false; c->visible = false; } - for (i = 0; i < NUM_RADIOBUTTONS; i++) + radioButton_t *r = radioButtons; + for (i = 0; i < NUM_RADIOBUTTONS; i++, r++) { - r = &radioButtons[i]; - r->state = 0; r->visible = false; } - for (i = 0; i < NUM_SCROLLBARS; i++) + scrollBar_t *s = scrollBars; + for (i = 0; i < NUM_SCROLLBARS; i++, s++) { - s = &scrollBars[i]; - s->visible = false; s->state = 0; s->pos = 0; @@ -253,11 +238,9 @@ uint8_t charWidth16(char ch) // return full pixel width of a text string uint16_t textWidth(const char *textPtr) { - uint16_t textWidth; - assert(textPtr != NULL); - textWidth = 0; + uint16_t textWidth = 0; while (*textPtr != '\0') textWidth += charWidth(*textPtr++); @@ -270,15 +253,12 @@ uint16_t textWidth(const char *textPtr) uint16_t textNWidth(const char *textPtr, int32_t length) { - char ch; - uint16_t textWidth; - assert(textPtr != NULL); - textWidth = 0; + uint16_t textWidth = 0; for (int32_t i = 0; i < length; i++) { - ch = textPtr[i]; + const char ch = textPtr[i]; if (ch == '\0') break; @@ -295,11 +275,9 @@ uint16_t textNWidth(const char *textPtr, int32_t length) // return full pixel width of a text string (big font) uint16_t textWidth16(const char *textPtr) { - uint16_t textWidth; - assert(textPtr != NULL); - textWidth = 0; + uint16_t textWidth = 0; while (*textPtr != '\0') textWidth += charWidth(*textPtr++); @@ -312,21 +290,15 @@ uint16_t textWidth16(const char *textPtr) void charOut(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, char chr) { - const uint8_t *srcPtr; - uint32_t *dstPtr, pixVal; -#ifndef __arm__ - uint32_t tmp; -#endif - assert(xPos < SCREEN_W && yPos < SCREEN_H); chr &= 0x7F; // this is important to get the nordic glyphs in the font if (chr == ' ') return; - pixVal = video.palette[paletteIndex]; - srcPtr = &bmp.font1[chr * FONT1_CHAR_W]; - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + const uint32_t pixVal = video.palette[paletteIndex]; + const uint8_t *srcPtr = &bmp.font1[chr * FONT1_CHAR_W]; + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; for (uint32_t y = 0; y < FONT1_CHAR_H; y++) { @@ -337,7 +309,7 @@ void charOut(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, char chr) dstPtr[x] = pixVal; #else // carefully written like this to generate conditional move instructions (font data is hard to predict) - tmp = dstPtr[x]; + uint32_t tmp = dstPtr[x]; if (srcPtr[x] != 0) tmp = pixVal; dstPtr[x] = tmp; #endif @@ -348,30 +320,27 @@ void charOut(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, char chr) } } -static void charOutFade(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, char chr, int32_t fade) +static void charOutFade(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, char chr, int32_t fade) // for about screen { - const uint8_t *srcPtr; - uint32_t *dstPtr, pixVal; - assert(xPos < SCREEN_W && yPos < SCREEN_H); chr &= 0x7F; // this is important to get the nordic glyphs in the font if (chr == ' ') return; - pixVal = video.palette[paletteIndex]; - srcPtr = &bmp.font1[chr * FONT1_CHAR_W]; - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + const uint32_t pixVal = video.palette[paletteIndex]; + const uint8_t *srcPtr = &bmp.font1[chr * FONT1_CHAR_W]; + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - for (uint32_t y = 0; y < FONT1_CHAR_H; y++) + for (int32_t y = 0; y < FONT1_CHAR_H; y++) { - for (uint32_t x = 0; x < FONT1_CHAR_W; x++) + for (int32_t x = 0; x < FONT1_CHAR_W; x++) { if (srcPtr[x] != 0) { - int32_t r = (RGB32_R(pixVal) * fade) >> 8; - int32_t g = (RGB32_G(pixVal) * fade) >> 8; - int32_t b = (RGB32_B(pixVal) * fade) >> 8; + const int32_t r = (RGB32_R(pixVal) * fade) >> 8; + const int32_t g = (RGB32_G(pixVal) * fade) >> 8; + const int32_t b = (RGB32_B(pixVal) * fade) >> 8; dstPtr[x] = RGB32(r, g, b) | 0xFF000000; } @@ -384,24 +353,21 @@ static void charOutFade(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, char void charOutBg(uint16_t xPos, uint16_t yPos, uint8_t fgPalette, uint8_t bgPalette, char chr) { - const uint8_t *srcPtr; - uint32_t *dstPtr, fg, bg; - assert(xPos < SCREEN_W && yPos < SCREEN_H); chr &= 0x7F; // this is important to get the nordic glyphs in the font if (chr == ' ') return; - fg = video.palette[fgPalette]; - bg = video.palette[bgPalette]; + const uint32_t fg = video.palette[fgPalette]; + const uint32_t bg = video.palette[bgPalette]; - srcPtr = &bmp.font1[chr * FONT1_CHAR_W]; - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + const uint8_t *srcPtr = &bmp.font1[chr * FONT1_CHAR_W]; + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - for (uint32_t y = 0; y < FONT1_CHAR_H; y++) + for (int32_t y = 0; y < FONT1_CHAR_H; y++) { - for (uint32_t x = 0; x < FONT1_CHAR_W-1; x++) + for (int32_t x = 0; x < FONT1_CHAR_W-1; x++) dstPtr[x] = srcPtr[x] ? fg : bg; // compiles nicely into conditional move instructions srcPtr += FONT1_WIDTH; @@ -421,27 +387,21 @@ void charOutOutlined(uint16_t x, uint16_t y, uint8_t paletteIndex, char chr) void charOutShadow(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, uint8_t shadowPaletteIndex, char chr) { - const uint8_t *srcPtr; - uint32_t *dstPtr1, *dstPtr2, pixVal1, pixVal2; -#ifndef __arm__ - uint32_t tmp; -#endif - assert(xPos < SCREEN_W && yPos < SCREEN_H); chr &= 0x7F; // this is important to get the nordic glyphs in the font if (chr == ' ') return; - pixVal1 = video.palette[paletteIndex]; - pixVal2 = video.palette[shadowPaletteIndex]; - srcPtr = &bmp.font1[chr * FONT1_CHAR_W]; - dstPtr1 = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - dstPtr2 = dstPtr1 + (SCREEN_W+1); + const uint32_t pixVal1 = video.palette[paletteIndex]; + const uint32_t pixVal2 = video.palette[shadowPaletteIndex]; + const uint8_t *srcPtr = &bmp.font1[chr * FONT1_CHAR_W]; + uint32_t *dstPtr1 = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + uint32_t *dstPtr2 = dstPtr1 + (SCREEN_W+1); - for (uint32_t y = 0; y < FONT1_CHAR_H; y++) + for (int32_t y = 0; y < FONT1_CHAR_H; y++) { - for (uint32_t x = 0; x < FONT1_CHAR_W; x++) + for (int32_t x = 0; x < FONT1_CHAR_W; x++) { #ifdef __arm__ if (srcPtr[x] != 0) @@ -451,7 +411,7 @@ void charOutShadow(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, uint8_t s } #else // carefully written like this to generate conditional move instructions (font data is hard to predict) - tmp = dstPtr2[x]; + uint32_t tmp = dstPtr2[x]; if (srcPtr[x] != 0) tmp = pixVal2; dstPtr2[x] = tmp; @@ -469,13 +429,6 @@ void charOutShadow(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, uint8_t s void charOutClipX(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, char chr, uint16_t clipX) { - const uint8_t *srcPtr; - uint16_t width; - uint32_t *dstPtr, pixVal; -#ifndef __arm__ - uint32_t tmp; -#endif - assert(xPos < SCREEN_W && yPos < SCREEN_H); if (xPos > clipX) @@ -485,24 +438,24 @@ void charOutClipX(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, char chr, if (chr == ' ') return; - pixVal = video.palette[paletteIndex]; - srcPtr = &bmp.font1[chr * FONT1_CHAR_W]; - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + const uint32_t pixVal = video.palette[paletteIndex]; + const uint8_t *srcPtr = &bmp.font1[chr * FONT1_CHAR_W]; + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - width = FONT1_CHAR_W; + int32_t width = FONT1_CHAR_W; if (xPos+width > clipX) width = FONT1_CHAR_W - ((xPos + width) - clipX); - for (uint32_t y = 0; y < FONT1_CHAR_H; y++) + for (int32_t y = 0; y < FONT1_CHAR_H; y++) { - for (uint32_t x = 0; x < width; x++) + for (int32_t x = 0; x < width; x++) { #ifdef __arm__ if (srcPtr[x] != 0) dstPtr[x] = pixVal; #else // carefully written like this to generate conditional move instructions (font data is hard to predict) - tmp = dstPtr[x]; + uint32_t tmp = dstPtr[x]; if (srcPtr[x] != 0) tmp = pixVal; dstPtr[x] = tmp; #endif @@ -515,32 +468,26 @@ void charOutClipX(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, char chr, void bigCharOut(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, char chr) { - const uint8_t *srcPtr; - uint32_t *dstPtr, pixVal; -#ifndef __arm__ - uint32_t tmp; -#endif - assert(xPos < SCREEN_W && yPos < SCREEN_H); chr &= 0x7F; // this is important to get the nordic glyphs in the font if (chr == ' ') return; - srcPtr = &bmp.font2[chr * FONT2_CHAR_W]; - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - pixVal = video.palette[paletteIndex]; + const uint8_t *srcPtr = &bmp.font2[chr * FONT2_CHAR_W]; + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + const uint32_t pixVal = video.palette[paletteIndex]; - for (uint32_t y = 0; y < FONT2_CHAR_H; y++) + for (int32_t y = 0; y < FONT2_CHAR_H; y++) { - for (uint32_t x = 0; x < FONT2_CHAR_W; x++) + for (int32_t x = 0; x < FONT2_CHAR_W; x++) { #ifdef __arm__ if (srcPtr[x] != 0) dstPtr[x] = pixVal; #else // carefully written like this to generate conditional move instructions (font data is hard to predict) - tmp = dstPtr[x]; + uint32_t tmp = dstPtr[x]; if (srcPtr[x] != 0) tmp = pixVal; dstPtr[x] = tmp; #endif @@ -553,27 +500,21 @@ void bigCharOut(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, char chr) static void bigCharOutShadow(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, uint8_t shadowPaletteIndex, char chr) { - const uint8_t *srcPtr; - uint32_t *dstPtr1, *dstPtr2, pixVal1, pixVal2; -#ifndef __arm__ - uint32_t tmp; -#endif - assert(xPos < SCREEN_W && yPos < SCREEN_H); chr &= 0x7F; // this is important to get the nordic glyphs in the font if (chr == ' ') return; - pixVal1 = video.palette[paletteIndex]; - pixVal2 = video.palette[shadowPaletteIndex]; - srcPtr = &bmp.font2[chr * FONT2_CHAR_W]; - dstPtr1 = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - dstPtr2 = dstPtr1 + (SCREEN_W+1); + const uint32_t pixVal1 = video.palette[paletteIndex]; + const uint32_t pixVal2 = video.palette[shadowPaletteIndex]; + const uint8_t *srcPtr = &bmp.font2[chr * FONT2_CHAR_W]; + uint32_t *dstPtr1 = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + uint32_t *dstPtr2 = dstPtr1 + (SCREEN_W+1); - for (uint32_t y = 0; y < FONT2_CHAR_H; y++) + for (int32_t y = 0; y < FONT2_CHAR_H; y++) { - for (uint32_t x = 0; x < FONT2_CHAR_W; x++) + for (int32_t x = 0; x < FONT2_CHAR_W; x++) { #ifdef __arm__ if (srcPtr[x] != 0) @@ -583,7 +524,7 @@ static void bigCharOutShadow(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, } #else // carefully written like this to generate conditional move instructions (font data is hard to predict) - tmp = dstPtr2[x]; + uint32_t tmp = dstPtr2[x]; if (srcPtr[x] != 0) tmp = pixVal2; dstPtr2[x] = tmp; @@ -601,15 +542,12 @@ static void bigCharOutShadow(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, void textOut(uint16_t x, uint16_t y, uint8_t paletteIndex, const char *textPtr) { - char chr; - uint16_t currX; - assert(textPtr != NULL); - currX = x; + uint16_t currX = x; while (true) { - chr = *textPtr++; + const char chr = *textPtr++; if (chr == '\0') break; @@ -618,8 +556,7 @@ void textOut(uint16_t x, uint16_t y, uint8_t paletteIndex, const char *textPtr) } } -// for about screen -void textOutFade(uint16_t x, uint16_t y, uint8_t paletteIndex, const char *textPtr, int32_t fade) +void textOutFade(uint16_t x, uint16_t y, uint8_t paletteIndex, const char *textPtr, int32_t fade) // for about screen { char chr; uint16_t currX; @@ -651,15 +588,12 @@ void textOutBorder(uint16_t x, uint16_t y, uint8_t paletteIndex, uint8_t borderP // fixed width void textOutFixed(uint16_t x, uint16_t y, uint8_t fgPaltete, uint8_t bgPalette, const char *textPtr) { - char chr; - uint16_t currX; - assert(textPtr != NULL); - currX = x; + uint16_t currX = x; while (true) { - chr = *textPtr++; + const char chr = *textPtr++; if (chr == '\0') break; @@ -670,15 +604,12 @@ void textOutFixed(uint16_t x, uint16_t y, uint8_t fgPaltete, uint8_t bgPalette, void textOutShadow(uint16_t x, uint16_t y, uint8_t paletteIndex, uint8_t shadowPaletteIndex, const char *textPtr) { - char chr; - uint16_t currX; - assert(textPtr != NULL); - currX = x; + uint16_t currX = x; while (true) { - chr = *textPtr++; + const char chr = *textPtr++; if (chr == '\0') break; @@ -689,15 +620,12 @@ void textOutShadow(uint16_t x, uint16_t y, uint8_t paletteIndex, uint8_t shadowP void bigTextOut(uint16_t x, uint16_t y, uint8_t paletteIndex, const char *textPtr) { - char chr; - uint16_t currX; - assert(textPtr != NULL); - currX = x; + uint16_t currX = x; while (true) { - chr = *textPtr++; + const char chr = *textPtr++; if (chr == '\0') break; @@ -708,15 +636,12 @@ void bigTextOut(uint16_t x, uint16_t y, uint8_t paletteIndex, const char *textPt void bigTextOutShadow(uint16_t x, uint16_t y, uint8_t paletteIndex, uint8_t shadowPaletteIndex, const char *textPtr) { - char chr; - uint16_t currX; - assert(textPtr != NULL); - currX = x; + uint16_t currX = x; while (true) { - chr = *textPtr++; + const char chr = *textPtr++; if (chr == '\0') break; @@ -727,15 +652,12 @@ void bigTextOutShadow(uint16_t x, uint16_t y, uint8_t paletteIndex, uint8_t shad void textOutClipX(uint16_t x, uint16_t y, uint8_t paletteIndex, const char *textPtr, uint16_t clipX) { - char chr; - uint16_t currX; - assert(textPtr != NULL); - currX = x; + uint16_t currX = x; while (true) { - chr = *textPtr++; + const char chr = *textPtr++; if (chr == '\0') break; @@ -749,32 +671,26 @@ void textOutClipX(uint16_t x, uint16_t y, uint8_t paletteIndex, const char *text void hexOut(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, uint32_t val, uint8_t numDigits) { - const uint8_t *srcPtr; - uint32_t *dstPtr, pixVal; -#ifndef __arm__ - uint32_t tmp; -#endif - assert(xPos < SCREEN_W && yPos < SCREEN_H); - pixVal = video.palette[paletteIndex]; - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + const uint32_t pixVal = video.palette[paletteIndex]; + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; for (int32_t i = numDigits-1; i >= 0; i--) { - srcPtr = &bmp.font6[((val >> (i * 4)) & 15) * FONT6_CHAR_W]; + const uint8_t *srcPtr = &bmp.font6[((val >> (i * 4)) & 15) * FONT6_CHAR_W]; // render glyph - for (uint32_t y = 0; y < FONT6_CHAR_H; y++) + for (int32_t y = 0; y < FONT6_CHAR_H; y++) { - for (uint32_t x = 0; x < FONT6_CHAR_W; x++) + for (int32_t x = 0; x < FONT6_CHAR_W; x++) { #ifdef __arm__ if (srcPtr[x] != 0) dstPtr[x] = pixVal; #else // carefully written like this to generate conditional move instructions (font data is hard to predict) - tmp = dstPtr[x]; + uint32_t tmp = dstPtr[x]; if (srcPtr[x] != 0) tmp = pixVal; dstPtr[x] = tmp; #endif @@ -790,24 +706,21 @@ void hexOut(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, uint32_t val, ui void hexOutBg(uint16_t xPos, uint16_t yPos, uint8_t fgPalette, uint8_t bgPalette, uint32_t val, uint8_t numDigits) { - const uint8_t *srcPtr; - uint32_t *dstPtr, fg, bg; - assert(xPos < SCREEN_W && yPos < SCREEN_H); - fg = video.palette[fgPalette]; - bg = video.palette[bgPalette]; - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + const uint32_t fg = video.palette[fgPalette]; + const uint32_t bg = video.palette[bgPalette]; + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; for (int32_t i = numDigits-1; i >= 0; i--) { // extract current nybble and set pointer to glyph - srcPtr = &bmp.font6[((val >> (i * 4)) & 15) * FONT6_CHAR_W]; + const uint8_t *srcPtr = &bmp.font6[((val >> (i * 4)) & 15) * FONT6_CHAR_W]; // render glyph - for (uint32_t y = 0; y < FONT6_CHAR_H; y++) + for (int32_t y = 0; y < FONT6_CHAR_H; y++) { - for (uint32_t x = 0; x < FONT6_CHAR_W; x++) + for (int32_t x = 0; x < FONT6_CHAR_W; x++) dstPtr[x] = srcPtr[x] ? fg : bg; // compiles nicely into conditional move instructions srcPtr += FONT6_WIDTH; @@ -828,32 +741,28 @@ void hexOutShadow(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, uint8_t sh void clearRect(uint16_t xPos, uint16_t yPos, uint16_t w, uint16_t h) { - uint32_t *dstPtr, fillNumDwords; - assert(xPos < SCREEN_W && yPos < SCREEN_H && (xPos + w) <= SCREEN_W && (yPos + h) <= SCREEN_H); - fillNumDwords = w * sizeof (int32_t); + const uint32_t width = w * sizeof (int32_t); - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - for (uint32_t y = 0; y < h; y++) + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + for (int32_t y = 0; y < h; y++) { - memset(dstPtr, 0, fillNumDwords); + memset(dstPtr, 0, width); dstPtr += SCREEN_W; } } void fillRect(uint16_t xPos, uint16_t yPos, uint16_t w, uint16_t h, uint8_t paletteIndex) { - uint32_t *dstPtr, pixVal; - assert(xPos < SCREEN_W && yPos < SCREEN_H && (xPos + w) <= SCREEN_W && (yPos + h) <= SCREEN_H); - pixVal = video.palette[paletteIndex]; - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + const uint32_t pixVal = video.palette[paletteIndex]; + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - for (uint32_t y = 0; y < h; y++) + for (int32_t y = 0; y < h; y++) { - for (uint32_t x = 0; x < w; x++) + for (int32_t x = 0; x < w; x++) dstPtr[x] = pixVal; dstPtr += SCREEN_W; @@ -862,14 +771,12 @@ void fillRect(uint16_t xPos, uint16_t yPos, uint16_t w, uint16_t h, uint8_t pale void blit32(uint16_t xPos, uint16_t yPos, const uint32_t* srcPtr, uint16_t w, uint16_t h) { - uint32_t* dstPtr; - assert(srcPtr != NULL && xPos < SCREEN_W && yPos < SCREEN_H && (xPos + w) <= SCREEN_W && (yPos + h) <= SCREEN_H); - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - for (uint32_t y = 0; y < h; y++) + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + for (int32_t y = 0; y < h; y++) { - for (uint32_t x = 0; x < w; x++) + for (int32_t x = 0; x < w; x++) { if (srcPtr[x] != 0x00FF00) dstPtr[x] = srcPtr[x] | 0xFF000000; // most significant 8 bits = palette number. 0xFF because no true palette @@ -880,26 +787,23 @@ void blit32(uint16_t xPos, uint16_t yPos, const uint32_t* srcPtr, uint16_t w, ui } } -// for about screen -void blit32Fade(uint16_t xPos, uint16_t yPos, const uint32_t* srcPtr, uint16_t w, uint16_t h, int32_t fade) +void blit32Fade(uint16_t xPos, uint16_t yPos, const uint32_t* srcPtr, uint16_t w, uint16_t h, int32_t fade) // for about screen { - uint32_t* dstPtr; - assert(srcPtr != NULL && xPos < SCREEN_W && yPos < SCREEN_H && (xPos + w) <= SCREEN_W && (yPos + h) <= SCREEN_H); - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - for (uint32_t y = 0; y < h; y++) + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + for (int32_t y = 0; y < h; y++) { - for (uint32_t x = 0; x < w; x++) + for (int32_t x = 0; x < w; x++) { - if (srcPtr[x] != 0x00FF00) + const uint32_t pixel = srcPtr[x]; + if (pixel != 0x00FF00) { - const uint32_t pixel = srcPtr[x]; - int32_t r = (RGB32_R(pixel) * fade) >> 8; - int32_t g = (RGB32_G(pixel) * fade) >> 8; - int32_t b = (RGB32_B(pixel) * fade) >> 8; + const int32_t r = (RGB32_R(pixel) * fade) >> 8; + const int32_t g = (RGB32_G(pixel) * fade) >> 8; + const int32_t b = (RGB32_B(pixel) * fade) >> 8; - dstPtr[x] = RGB32(r, g, b) | 0xFF000000; + dstPtr[x] = RGB32(r, g, b) | 0xFF000000; // most significant 8 bits = palette number. 0xFF because no true palette } } @@ -910,17 +814,16 @@ void blit32Fade(uint16_t xPos, uint16_t yPos, const uint32_t* srcPtr, uint16_t w void blit(uint16_t xPos, uint16_t yPos, const uint8_t *srcPtr, uint16_t w, uint16_t h) { - uint32_t *dstPtr; - assert(srcPtr != NULL && xPos < SCREEN_W && yPos < SCREEN_H && (xPos + w) <= SCREEN_W && (yPos + h) <= SCREEN_H); - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - for (uint32_t y = 0; y < h; y++) + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + for (int32_t y = 0; y < h; y++) { - for (uint32_t x = 0; x < w; x++) + for (int32_t x = 0; x < w; x++) { - if (srcPtr[x] != PAL_TRANSPR) - dstPtr[x] = video.palette[srcPtr[x]]; + const uint32_t pixel = srcPtr[x]; + if (pixel != PAL_TRANSPR) + dstPtr[x] = video.palette[pixel]; } srcPtr += w; @@ -930,20 +833,19 @@ void blit(uint16_t xPos, uint16_t yPos, const uint8_t *srcPtr, uint16_t w, uint1 void blitClipX(uint16_t xPos, uint16_t yPos, const uint8_t *srcPtr, uint16_t w, uint16_t h, uint16_t clipX) { - uint32_t *dstPtr; - if (clipX > w) clipX = w; assert(srcPtr != NULL && xPos < SCREEN_W && yPos < SCREEN_H && (xPos + clipX) <= SCREEN_W && (yPos + h) <= SCREEN_H); - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - for (uint32_t y = 0; y < h; y++) + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + for (int32_t y = 0; y < h; y++) { - for (uint32_t x = 0; x < clipX; x++) + for (int32_t x = 0; x < clipX; x++) { - if (srcPtr[x] != PAL_TRANSPR) - dstPtr[x] = video.palette[srcPtr[x]]; + const uint32_t pixel = srcPtr[x]; + if (pixel != PAL_TRANSPR) + dstPtr[x] = video.palette[pixel]; } srcPtr += w; @@ -953,14 +855,12 @@ void blitClipX(uint16_t xPos, uint16_t yPos, const uint8_t *srcPtr, uint16_t w, void blitFast(uint16_t xPos, uint16_t yPos, const uint8_t *srcPtr, uint16_t w, uint16_t h) // no transparency/colorkey { - uint32_t *dstPtr; - assert(srcPtr != NULL && xPos < SCREEN_W && yPos < SCREEN_H && (xPos + w) <= SCREEN_W && (yPos + h) <= SCREEN_H); - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - for (uint32_t y = 0; y < h; y++) + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + for (int32_t y = 0; y < h; y++) { - for (uint32_t x = 0; x < w; x++) + for (int32_t x = 0; x < w; x++) dstPtr[x] = video.palette[srcPtr[x]]; srcPtr += w; @@ -970,17 +870,15 @@ void blitFast(uint16_t xPos, uint16_t yPos, const uint8_t *srcPtr, uint16_t w, u void blitFastClipX(uint16_t xPos, uint16_t yPos, const uint8_t *srcPtr, uint16_t w, uint16_t h, uint16_t clipX) // no transparency/colorkey { - uint32_t *dstPtr; - if (clipX > w) clipX = w; assert(srcPtr != NULL && xPos < SCREEN_W && yPos < SCREEN_H && (xPos + clipX) <= SCREEN_W && (yPos + h) <= SCREEN_H); - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - for (uint32_t y = 0; y < h; y++) + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + for (int32_t y = 0; y < h; y++) { - for (uint32_t x = 0; x < clipX; x++) + for (int32_t x = 0; x < clipX; x++) dstPtr[x] = video.palette[srcPtr[x]]; srcPtr += w; @@ -992,27 +890,23 @@ void blitFastClipX(uint16_t xPos, uint16_t yPos, const uint8_t *srcPtr, uint16_t void hLine(uint16_t x, uint16_t y, uint16_t w, uint8_t paletteIndex) { - uint32_t *dstPtr, pixVal; - assert(x < SCREEN_W && y < SCREEN_H && (x + w) <= SCREEN_W); - pixVal = video.palette[paletteIndex]; + const uint32_t pixVal = video.palette[paletteIndex]; - dstPtr = &video.frameBuffer[(y * SCREEN_W) + x]; - for (uint32_t i = 0; i < w; i++) + uint32_t *dstPtr = &video.frameBuffer[(y * SCREEN_W) + x]; + for (int32_t i = 0; i < w; i++) dstPtr[i] = pixVal; } void vLine(uint16_t x, uint16_t y, uint16_t h, uint8_t paletteIndex) { - uint32_t *dstPtr, pixVal; - assert(x < SCREEN_W && y < SCREEN_H && (y + h) <= SCREEN_W); - pixVal = video.palette[paletteIndex]; + const uint32_t pixVal = video.palette[paletteIndex]; - dstPtr = &video.frameBuffer[(y * SCREEN_W) + x]; - for (uint32_t i = 0; i < h; i++) + uint32_t *dstPtr = &video.frameBuffer[(y * SCREEN_W) + x]; + for (int32_t i = 0; i < h; i++) { *dstPtr = pixVal; dstPtr += SCREEN_W; @@ -1033,29 +927,23 @@ void vLineDouble(uint16_t x, uint16_t y, uint16_t h, uint8_t paletteIndex) void line(int16_t x1, int16_t x2, int16_t y1, int16_t y2, uint8_t paletteIndex) { - int16_t d, x, y, sx, sy, dx, dy; - uint16_t ax, ay; - int32_t pitch; - uint32_t pixVal, *dst32; - - // get coefficients - dx = x2 - x1; - ax = ABS(dx) * 2; - sx = SGN(dx); - dy = y2 - y1; - ay = ABS(dy) * 2; - sy = SGN(dy); - x = x1; - y = y1; - - pixVal = video.palette[paletteIndex]; - pitch = sy * SCREEN_W; - dst32 = &video.frameBuffer[(y * SCREEN_W) + x]; + const int16_t dx = x2 - x1; + const uint16_t ax = ABS(dx) * 2; + const int16_t sx = SGN(dx); + const int16_t dy = y2 - y1; + const uint16_t ay = ABS(dy) * 2; + const int16_t sy = SGN(dy); + int16_t x = x1; + int16_t y = y1; + + uint32_t pixVal = video.palette[paletteIndex]; + const int32_t pitch = sy * SCREEN_W; + uint32_t *dst32 = &video.frameBuffer[(y * SCREEN_W) + x]; // draw line if (ax > ay) { - d = ay - (ax / 2); + int16_t d = ay - (ax >> 1); while (true) { *dst32 = pixVal; @@ -1075,7 +963,7 @@ void line(int16_t x1, int16_t x2, int16_t y1, int16_t y2, uint8_t paletteIndex) } else { - d = ax - (ay / 2); + int16_t d = ax - (ay >> 1); while (true) { *dst32 = pixVal; diff --git a/src/ft2_header.h b/src/ft2_header.h @@ -12,7 +12,7 @@ #endif #include "ft2_replayer.h" -#define PROG_VER_STR "1.40" +#define PROG_VER_STR "1.41" // do NOT change these! It will only mess things up... diff --git a/src/ft2_help.c b/src/ft2_help.c @@ -51,15 +51,13 @@ static void addText(helpRec *t, int16_t xPos, uint8_t color, char *text) static bool getLine(char *output) { - uint8_t strLen; - if (helpBufferPos >= (int32_t)sizeof (helpData)) { *output = '\0'; return false; } - strLen = helpData[helpBufferPos++]; + const uint8_t strLen = helpData[helpBufferPos++]; memcpy(output, &helpData[helpBufferPos], strLen); output[strLen] = '\0'; @@ -85,12 +83,10 @@ static char *ltrim(char *s) static char *rtrim(char *s) { - int32_t i; - if (*s == '\0') return (s); - i = (int32_t)strlen(s) - 1; + int32_t i = (int32_t)strlen(s) - 1; while (i >= 0) { if (s[i] != ' ') @@ -107,12 +103,10 @@ static char *rtrim(char *s) static void readHelp(void) // this is really messy, directly ported from Pascal code... { - char text[256], text2[256], *s, *sEnd, *s2, *s3; - uint8_t currColor; - int16_t a, b, i, k, currKol, strLen; - helpRec *tempText, *t; + char text[256], text2[256], *s, *sEnd, *s3; + int16_t a, b, i, k; - tempText = (helpRec *)malloc(HELP_SIZE * MAX_HELP_LINES); + helpRec *tempText = (helpRec *)malloc(HELP_SIZE * MAX_HELP_LINES); if (tempText == NULL) { okBox(0, "System message", "Not enough memory!"); @@ -122,14 +116,14 @@ static void readHelp(void) // this is really messy, directly ported from Pascal text[0] = '\0'; text2[0] = '\0'; - s2 = text2; + char *s2 = text2; helpBufferPos = 0; for (int16_t subj = 0; subj < MAX_SUBJ; subj++) { - textLine = 0; - currKol = 0; - currColor = PAL_FORGRND; + textLine = 0; + int16_t currKol = 0; + uint8_t currColor = PAL_FORGRND; getLine(text); s = text; while (strncmp(s, "END", 3) != 0) @@ -161,7 +155,7 @@ static void readHelp(void) // this is really messy, directly ported from Pascal s += 5; } - t = &tempText[textLine]; + helpRec *t = &tempText[textLine]; t->xPos = currKol; t->color = currColor; t->bigFont = true; @@ -202,22 +196,22 @@ static void readHelp(void) // this is really messy, directly ported from Pascal addText(&tempText[textLine], currKol, currColor, s2); } - strLen = (int16_t)strlen(s); + int16_t sLen = (int16_t)strlen(s); - sEnd = &s[strLen]; + sEnd = &s[sLen]; while (s < sEnd) { - if (strLen < 0) - strLen = 0; + if (sLen < 0) + sLen = 0; i = 0; - while (s[i] != ' ' && i < strLen) i++; + while (s[i] != ' ' && i < sLen) i++; i++; if (*(uint16_t *)s == 0x5440) // @T - "set absolute X position (in the middle of text)" { k = controlCodeToNum(&s[2]); - s += 5; strLen -= 5; + s += 5; sLen -= 5; s3 = &s2[strlen(s2)]; while (textWidth(s2) + charWidth(' ') + 1 < k-currKol) @@ -242,7 +236,7 @@ static void readHelp(void) // this is really messy, directly ported from Pascal strncat(s2, s, i); - s += i; strLen -= i; + s += i; sLen -= i; if ((*s == '\0') || (s >= sEnd)) strcat(s2, " "); } @@ -270,28 +264,23 @@ static void readHelp(void) // this is really messy, directly ported from Pascal static void bigTextOutHalf(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, bool lowerHalf, const char *textPtr) { - char chr; - const uint8_t *srcPtr; - uint16_t currX; - uint32_t *dstPtr, pixVal; - assert(textPtr != NULL); - currX = xPos; + uint16_t currX = xPos; while (true) { - chr = *textPtr++ & 0x7F; + const char chr = *textPtr++ & 0x7F; if (chr == '\0') break; if (chr != ' ') { - srcPtr = &bmp.font2[chr * FONT2_CHAR_W]; + const uint8_t *srcPtr = &bmp.font2[chr * FONT2_CHAR_W]; if (!lowerHalf) srcPtr += (FONT2_CHAR_H / 2) * FONT2_WIDTH; - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + currX]; - pixVal = video.palette[paletteIndex]; + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + currX]; + const uint32_t pixVal = video.palette[paletteIndex]; for (uint32_t y = 0; y < FONT2_CHAR_H/2; y++) { @@ -312,16 +301,13 @@ static void bigTextOutHalf(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, b static void writeHelp(void) { - int16_t k; - helpRec *pek; - - pek = subjPtrArr[fHlp_Nr]; + helpRec *pek = subjPtrArr[fHlp_Nr]; if (pek == NULL) return; for (int16_t i = 0; i < HELP_LINES; i++) { - k = i + fHlp_Line; + const int16_t k = i + fHlp_Line; if (k >= subjLen[fHlp_Nr]) break; diff --git a/src/ft2_inst_ed.c b/src/ft2_inst_ed.c @@ -107,6 +107,14 @@ static volatile bool updateVolEnv, updatePanEnv; static bool pianoKeyStatus[96]; static int32_t lastMouseX, lastMouseY, saveMouseX, saveMouseY; +static const uint8_t mx2PianoKey[77] = +{ + 0,0,0,0,0,0,0,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4, + 4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,8,8,8,8,8,8,8, + 9,9,9,9,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11 +}; + + // thread data static uint16_t saveInstrNr; static SDL_Thread *thread; @@ -126,16 +134,10 @@ static instrTyp *getCurDispInstr(void) static int32_t SDLCALL copyInstrThread(void *ptr) { - bool error; - int8_t *p; - int16_t destIns, sourceIns; - sampleTyp *src, *dst; - (void)ptr; - - error = false; + bool error = false; - destIns = editor.curInstr; - sourceIns = editor.srcInstr; + const int16_t destIns = editor.curInstr; + const int16_t sourceIns = editor.srcInstr; pauseAudio(); @@ -147,17 +149,17 @@ static int32_t SDLCALL copyInstrThread(void *ptr) { memcpy(instr[destIns], instr[sourceIns], sizeof (instrTyp)); - for (int16_t i = 0; i < MAX_SMP_PER_INST; i++) - { - src = &instr[sourceIns]->samp[i]; - dst = &instr[destIns]->samp[i]; + sampleTyp *src = instr[sourceIns]->samp; + sampleTyp *dst = instr[destIns]->samp; + for (int16_t i = 0; i < MAX_SMP_PER_INST; i++, src++, dst++) + { dst->origPek = NULL; dst->pek = NULL; if (src->origPek != NULL) { - p = (int8_t *)malloc(src->len + LOOP_FIX_LEN); + int8_t *p = (int8_t *)malloc(src->len + LOOP_FIX_LEN); if (p != NULL) { dst->origPek = p; @@ -184,6 +186,8 @@ static int32_t SDLCALL copyInstrThread(void *ptr) setMouseBusy(false); return false; + + (void)ptr; } void copyInstr(void) // dstInstr = srcInstr @@ -204,18 +208,16 @@ void copyInstr(void) // dstInstr = srcInstr void xchgInstr(void) // dstInstr <-> srcInstr { - instrTyp *dst, *src, dstTmp; - if (editor.curInstr == 0 || editor.srcInstr == editor.curInstr) return; lockMixerCallback(); - src = instr[editor.srcInstr]; - dst = instr[editor.curInstr]; + instrTyp *src = instr[editor.srcInstr]; + instrTyp *dst = instr[editor.curInstr]; // swap instruments - dstTmp = *dst; + instrTyp dstTmp = *dst; *dst = *src; *src = dstTmp; @@ -288,7 +290,6 @@ void midiBendUp(void) void sbMidiChPos(uint32_t pos) { instrTyp *ins = instr[editor.curInstr]; - if (ins == NULL || editor.curInstr == 0) { setScrollBarPos(SB_INST_EXT_MIDI_CH, 0, false); @@ -306,7 +307,6 @@ void sbMidiChPos(uint32_t pos) void sbMidiPrgPos(uint32_t pos) { instrTyp *ins = instr[editor.curInstr]; - if (ins == NULL || editor.curInstr == 0) { setScrollBarPos(SB_INST_EXT_MIDI_PRG, 0, false); @@ -324,7 +324,6 @@ void sbMidiPrgPos(uint32_t pos) void sbMidiBendPos(uint32_t pos) { instrTyp *ins = instr[editor.curInstr]; - if (ins == NULL || editor.curInstr == 0) { setScrollBarPos(SB_INST_EXT_MIDI_BEND, 0, false); @@ -420,7 +419,6 @@ static void drawPanEnvRepE(void) static void drawVolume(void) { sampleTyp *s; - if (instr[editor.curInstr] == NULL) s = &instr[0]->samp[0]; else @@ -432,7 +430,6 @@ static void drawVolume(void) static void drawPanning(void) { sampleTyp *s; - if (instr[editor.curInstr] == NULL) s = &instr[0]->samp[0]; else @@ -443,10 +440,7 @@ static void drawPanning(void) static void drawFineTune(void) { - char sign; - int16_t ftune; sampleTyp *s; - if (instr[editor.curInstr] == NULL) s = &instr[0]->samp[0]; else @@ -454,14 +448,14 @@ static void drawFineTune(void) fillRect(491, 205, 27, 8, PAL_DESKTOP); - ftune = s->fine; + int16_t ftune = s->fine; if (ftune == 0) { charOut(512, 205, PAL_FORGRND, '0'); return; } - sign = (ftune < 0) ? '-' : '+'; + const char sign = (ftune < 0) ? '-' : '+'; ftune = ABS(ftune); if (ftune >= 100) @@ -506,8 +500,8 @@ static void drawVibSweep(void) static void drawRelTone(void) { - char noteChar1, noteChar2, octaChar; - int8_t note2, note; + char noteChar1, noteChar2; + int8_t note2; if (instr[editor.curInstr] == NULL) { @@ -520,7 +514,7 @@ static void drawRelTone(void) else note2 = 48 + instr[editor.curInstr]->samp[editor.curSmp].relTon; - note = note2 % 12; + const int8_t note = note2 % 12; if (config.ptnAcc == 0) { noteChar1 = sharpNote1Char[note]; @@ -532,7 +526,7 @@ static void drawRelTone(void) noteChar2 = flatNote2Char[note]; } - octaChar = '0' + (note2 / 12); + const char octaChar = '0' + (note2 / 12); charOutBg(598, 299, PAL_FORGRND, PAL_BCKGRND, noteChar1); charOutBg(606, 299, PAL_FORGRND, PAL_BCKGRND, noteChar2); @@ -583,7 +577,6 @@ static void setStdPanEnvelope(instrTyp *ins, uint8_t num) static void setOrStoreVolEnvPreset(uint8_t num) { instrTyp *ins = instr[editor.curInstr]; - if (ins == NULL || editor.curInstr == 0) return; @@ -616,7 +609,6 @@ static void setOrStoreVolEnvPreset(uint8_t num) static void setOrStorePanEnvPreset(uint8_t num) { instrTyp *ins = instr[editor.curInstr]; - if (ins == NULL || editor.curInstr == 0) return; @@ -721,7 +713,6 @@ void panPreDef6(void) void relToneOctUp(void) { sampleTyp *s; - if (instr[editor.curInstr] == NULL || editor.curInstr == 0) return; @@ -738,7 +729,6 @@ void relToneOctUp(void) void relToneOctDown(void) { sampleTyp *s; - if (instr[editor.curInstr] == NULL || editor.curInstr == 0) return; @@ -755,7 +745,6 @@ void relToneOctDown(void) void relToneUp(void) { sampleTyp *s; - if (instr[editor.curInstr] == NULL || editor.curInstr == 0) return; @@ -771,7 +760,6 @@ void relToneUp(void) void relToneDown(void) { sampleTyp *s; - if (instr[editor.curInstr] == NULL || editor.curInstr == 0) return; @@ -786,16 +774,15 @@ void relToneDown(void) void volEnvAdd(void) { - int16_t i, ant; instrTyp *ins = instr[editor.curInstr]; if (editor.curInstr == 0 || ins == NULL) return; - ant = ins->envVPAnt; + const int16_t ant = ins->envVPAnt; if (ant >= 12) return; - i = (int16_t)editor.currVolEnvPoint; + int16_t i = (int16_t)editor.currVolEnvPoint; if (i < 0 || i >= ant) { i = ant-1; @@ -841,13 +828,11 @@ void volEnvAdd(void) void volEnvDel(void) { - uint8_t drawSust, drawRepS, drawRepE; - int16_t i; instrTyp *ins = instr[editor.curInstr]; if (ins == NULL || editor.curInstr == 0 || ins->envVPAnt <= 2) return; - i = (int16_t)editor.currVolEnvPoint; + int16_t i = (int16_t)editor.currVolEnvPoint; if (i < 0 || i >= ins->envVPAnt) return; @@ -857,9 +842,9 @@ void volEnvDel(void) ins->envVP[j][1] = ins->envVP[j+1][1]; } - drawSust = false; - drawRepS = false; - drawRepE = false; + bool drawSust = false; + bool drawRepS = false; + bool drawRepE = false; if (ins->envVSust > i) { ins->envVSust--; drawSust = true; } if (ins->envVRepS > i) { ins->envVRepS--; drawRepS = true; } @@ -977,16 +962,15 @@ void volEnvRepEDown(void) void panEnvAdd(void) { - int16_t i, ant; instrTyp *ins = instr[editor.curInstr]; if (ins == NULL || editor.curInstr == 0) return; - ant = ins->envPPAnt; + const int16_t ant = ins->envPPAnt; if (ant >= 12) return; - i = (int16_t)editor.currPanEnvPoint; + int16_t i = (int16_t)editor.currPanEnvPoint; if (i < 0 || i >= ant) { i = ant-1; @@ -1032,13 +1016,11 @@ void panEnvAdd(void) void panEnvDel(void) { - uint8_t drawSust, drawRepS, drawRepE; - int16_t i; instrTyp *ins = instr[editor.curInstr]; if (ins == NULL || editor.curInstr == 0 || ins->envPPAnt <= 2) return; - i = (int16_t)editor.currPanEnvPoint; + int16_t i = (int16_t)editor.currPanEnvPoint; if (i < 0 || i >= ins->envPPAnt) return; @@ -1048,9 +1030,9 @@ void panEnvDel(void) ins->envPP[j][1] = ins->envPP[j+1][1]; } - drawSust = false; - drawRepS = false; - drawRepE = false; + bool drawSust = false; + bool drawRepS = false; + bool drawRepE = false; if (ins->envPSust > i) { ins->envPSust--; drawSust = true; } if (ins->envPRepS > i) { ins->envPRepS--; drawRepS = true; } @@ -1252,8 +1234,6 @@ void vibSweepUp(void) void setVolumeScroll(uint32_t pos) { - sampleTyp *s; - if (instr[editor.curInstr] == NULL || editor.curInstr == 0) { if (editor.curInstr == 0 && editor.curSmp != 0) @@ -1264,7 +1244,7 @@ void setVolumeScroll(uint32_t pos) return; } - s = &instr[editor.curInstr]->samp[editor.curSmp]; + sampleTyp *s = &instr[editor.curInstr]->samp[editor.curSmp]; if (s->vol != (uint8_t)pos) { s->vol = (uint8_t)pos; @@ -1275,15 +1255,13 @@ void setVolumeScroll(uint32_t pos) void setPanningScroll(uint32_t pos) { - sampleTyp *s; - if (instr[editor.curInstr] == NULL || editor.curInstr == 0) { setScrollBarPos(SB_INST_PAN, 0x80, false); return; } - s = &instr[editor.curInstr]->samp[editor.curSmp]; + sampleTyp *s = &instr[editor.curInstr]->samp[editor.curSmp]; if (s->pan != (uint8_t)pos) { s->pan = (uint8_t)pos; @@ -1294,15 +1272,13 @@ void setPanningScroll(uint32_t pos) void setFinetuneScroll(uint32_t pos) { - sampleTyp *s; - if (instr[editor.curInstr] == NULL || editor.curInstr == 0) { setScrollBarPos(SB_INST_FTUNE, 128, false); // finetune 0 return; } - s = &instr[editor.curInstr]->samp[editor.curSmp]; + sampleTyp *s = &instr[editor.curInstr]->samp[editor.curSmp]; if (s->fine != (int8_t)(pos - 128)) { s->fine = (int8_t)(pos - 128); @@ -1314,7 +1290,6 @@ void setFinetuneScroll(uint32_t pos) void setFadeoutScroll(uint32_t pos) { instrTyp *ins = instr[editor.curInstr]; - if (ins == NULL) { setScrollBarPos(SB_INST_FADEOUT, 0, false); @@ -1338,7 +1313,6 @@ void setFadeoutScroll(uint32_t pos) void setVibSpeedScroll(uint32_t pos) { instrTyp *ins = instr[editor.curInstr]; - if (ins == NULL || editor.curInstr == 0) { setScrollBarPos(SB_INST_VIBSPEED, 0, false); @@ -1356,7 +1330,6 @@ void setVibSpeedScroll(uint32_t pos) void setVibDepthScroll(uint32_t pos) { instrTyp *ins = instr[editor.curInstr]; - if (ins == NULL || editor.curInstr == 0) { setScrollBarPos(SB_INST_VIBDEPTH, 0, false); @@ -1374,7 +1347,6 @@ void setVibDepthScroll(uint32_t pos) void setVibSweepScroll(uint32_t pos) { instrTyp *ins = instr[editor.curInstr]; - if (ins == NULL || editor.curInstr == 0) { setScrollBarPos(SB_INST_VIBSWEEP, 0, false); @@ -1533,19 +1505,16 @@ void cbPEnvLoop(void) static void pinoaNumberOut(uint16_t xPos, uint16_t yPos, uint8_t fgPalette, uint8_t bgPalette, uint8_t val) { - const uint8_t *srcPtr; - uint32_t *dstPtr, fg, bg; - assert(val <= 0xF); - fg = video.palette[fgPalette]; - bg = video.palette[bgPalette]; - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - srcPtr = &bmp.font8[val * 5]; + const uint32_t fg = video.palette[fgPalette]; + const uint32_t bg = video.palette[bgPalette]; + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + const uint8_t *srcPtr = &bmp.font8[val * 5]; - for (uint32_t y = 0; y < 7; y++) + for (int32_t y = 0; y < 7; y++) { - for (uint32_t x = 0; x < 5; x++) + for (int32_t x = 0; x < 5; x++) dstPtr[x] = srcPtr[x] ? fg : bg; dstPtr += SCREEN_W; @@ -1555,14 +1524,11 @@ static void pinoaNumberOut(uint16_t xPos, uint16_t yPos, uint8_t fgPalette, uint static void writePianoNumber(uint8_t note, uint8_t key, uint8_t octave) { - uint8_t number; - uint16_t x; - - number = 0; + uint8_t number = 0; if (instr[editor.curInstr] != NULL && editor.curInstr != 0) number = instr[editor.curInstr]->ta[note]; - x = keyDigitXPos[key] + (octave * 77); + const uint16_t x = keyDigitXPos[key] + (octave * 77); if (keyIsBlackTab[key]) pinoaNumberOut(x, 361, PAL_FORGRND, PAL_BCKGRND, number); @@ -1572,25 +1538,23 @@ static void writePianoNumber(uint8_t note, uint8_t key, uint8_t octave) static void drawBlackPianoKey(uint8_t key, uint8_t octave, bool keyDown) { - uint16_t x = keyXPos[key] + (octave * 77); + const uint16_t x = keyXPos[key] + (octave * 77); blit(x, 351, &bmp.blackPianoKeys[keyDown * (7*27)], 7, 27); } static void drawWhitePianoKey(uint8_t key, uint8_t octave, bool keyDown) { - uint16_t x = keyXPos[key] + (octave * 77); + const uint16_t x = keyXPos[key] + (octave * 77); blit(x, 351, &bmp.whitePianoKeys[(keyDown * (11*46*3)) + whiteKeysBmpOrder[key]], 11, 46); } void redrawPiano(void) { - uint8_t key, octave; - memset(pianoKeyStatus, 0, sizeof (pianoKeyStatus)); for (uint8_t i = 0; i < 96; i++) { - key = noteTab1[i]; - octave = noteTab2[i]; + const uint8_t key = noteTab1[i]; + const uint8_t octave = noteTab2[i]; if (keyIsBlackTab[key]) drawBlackPianoKey(key, octave, false); @@ -1603,8 +1567,7 @@ void redrawPiano(void) bool testPianoKeysMouseDown(bool mouseButtonDown) { - uint8_t key, note, octave; - int32_t mx, my, quotient, remainder; + uint8_t key, octave; if (!ui.instEditorShown) return false; // area not clicked @@ -1612,8 +1575,8 @@ bool testPianoKeysMouseDown(bool mouseButtonDown) if (editor.curInstr == 0 || instr[editor.curInstr] == NULL) return true; // area clicked, but don't do anything - mx = mouse.x; - my = mouse.y; + int32_t mx = mouse.x; + int32_t my = mouse.y; if (!mouseButtonDown) { @@ -1630,29 +1593,15 @@ bool testPianoKeysMouseDown(bool mouseButtonDown) mx -= 8; - quotient = mx / 77; - remainder = mx % 77; + const int32_t quotient = mx / 77; + const int32_t remainder = mx % 77; if (my < 378) { // white keys and black keys (top) - octave = (uint8_t)(quotient); - mx = remainder; // width of all keys in one octave - - // this is pretty disgusting... - if (mx >= 69) key = 11; - else if (mx >= 62) key = 10; - else if (mx >= 58) key = 9; - else if (mx >= 51) key = 8; - else if (mx >= 47) key = 7; - else if (mx >= 40) key = 6; - else if (mx >= 33) key = 5; - else if (mx >= 25) key = 4; - else if (mx >= 18) key = 3; - else if (mx >= 14) key = 2; - else if (mx >= 7) key = 1; - else key = 0; + octave = (uint8_t)quotient; + key = mx2PianoKey[remainder]; } else { @@ -1663,7 +1612,7 @@ bool testPianoKeysMouseDown(bool mouseButtonDown) key = whiteKeyIndex[remainder / whiteKeyWidth]; } - note = (octave * 12) + key; + const uint8_t note = (octave * 12) + key; if (instr[editor.curInstr]->ta[note] != editor.curSmp) { instr[editor.curInstr]->ta[note] = editor.curSmp; @@ -1677,8 +1626,6 @@ bool testPianoKeysMouseDown(bool mouseButtonDown) void drawPiano(chSyncData_t *chSyncData) { bool newStatus[96]; - int32_t i, note; - memset(newStatus, 0, sizeof (newStatus)); // find active notes @@ -1687,11 +1634,11 @@ void drawPiano(chSyncData_t *chSyncData) if (chSyncData != NULL) // song is playing, use replayer channel state { syncedChannel_t *c = chSyncData->channels; - for (i = 0; i < song.antChn; i++, c++) + for (int32_t i = 0; i < song.antChn; i++, c++) { if (c->instrNr == editor.curInstr && c->envSustainActive) { - note = getPianoKey(c->finalPeriod, c->fineTune, c->relTonNr); + const int32_t note = getPianoKey(c->finalPeriod, c->fineTune, c->relTonNr); if (note >= 0 && note <= 95) newStatus[note] = true; } @@ -1700,11 +1647,11 @@ void drawPiano(chSyncData_t *chSyncData) else // song is not playing (jamming from keyboard/MIDI) { stmTyp *c = stm; - for (i = 0; i < song.antChn; i++, c++) + for (int32_t i = 0; i < song.antChn; i++, c++) { if (c->instrNr == editor.curInstr && c->envSustainActive) { - note = getPianoKey(c->finalPeriod, c->fineTune, c->relTonNr); + const int32_t note = getPianoKey(c->finalPeriod, c->fineTune, c->relTonNr); if (note >= 0 && note <= 95) newStatus[note] = true; } @@ -1713,13 +1660,13 @@ void drawPiano(chSyncData_t *chSyncData) } // draw keys - for (i = 0; i < 96; i++) + for (int32_t i = 0; i < 96; i++) { const bool keyDown = newStatus[i]; if (pianoKeyStatus[i] ^ keyDown) { - uint8_t key = noteTab1[i]; - uint8_t octave = noteTab2[i]; + const uint8_t key = noteTab1[i]; + const uint8_t octave = noteTab2[i]; if (keyIsBlackTab[key]) drawBlackPianoKey(key, octave, keyDown); @@ -1733,11 +1680,6 @@ void drawPiano(chSyncData_t *chSyncData) static void envelopeLine(int32_t nr, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint8_t col) { - int16_t d, x, y, sx, sy, dx, dy; - uint16_t ax, ay; - int32_t pitch; - uint32_t pal1, pal2, pixVal, *dst32; - y1 = CLAMP(y1, 0, 66); y2 = CLAMP(y2, 0, 66); x1 = CLAMP(x1, 0, 335); @@ -1754,28 +1696,26 @@ static void envelopeLine(int32_t nr, int16_t x1, int16_t y1, int16_t x2, int16_t y2 += 276; } - // get coefficients - dx = x2 - x1; - ax = ABS(dx) << 1; - sx = SGN(dx); - dy = y2 - y1; - ay = ABS(dy) << 1; - sy = SGN(dy); - x = x1; - y = y1; + const int16_t dx = x2 - x1; + const uint16_t ax = ABS(dx) << 1; + const int16_t sx = SGN(dx); + const int16_t dy = y2 - y1; + const uint16_t ay = ABS(dy) << 1; + const int16_t sy = SGN(dy); + int16_t x = x1; + int16_t y = y1; - pal1 = video.palette[PAL_BLCKMRK]; - pal2 = video.palette[PAL_BLCKTXT]; - pixVal = video.palette[col]; - pitch = sy * SCREEN_W; + const uint32_t pal1 = video.palette[PAL_BLCKMRK]; + const uint32_t pal2 = video.palette[PAL_BLCKTXT]; + const uint32_t pixVal = video.palette[col]; + const int32_t pitch = sy * SCREEN_W; - dst32 = &video.frameBuffer[(y * SCREEN_W) + x]; + uint32_t *dst32 = &video.frameBuffer[(y * SCREEN_W) + x]; // draw line if (ax > ay) { - d = ay - (ax >> 1); - + int16_t d = ay - (ax >> 1); while (true) { // invert certain colors @@ -1803,8 +1743,7 @@ static void envelopeLine(int32_t nr, int16_t x1, int16_t y1, int16_t x2, int16_t } else { - d = ax - (ay >> 1); - + int16_t d = ax - (ay >> 1); while (true) { // invert certain colors @@ -1840,12 +1779,10 @@ static void envelopePixel(int32_t nr, int16_t x, int16_t y, uint8_t col) static void envelopeDot(int32_t nr, int16_t x, int16_t y) { - uint32_t *dstPtr, pixVal; - y += (nr == 0) ? 189 : 276; - pixVal = video.palette[PAL_BLCKTXT]; - dstPtr = &video.frameBuffer[(y * SCREEN_W) + x]; + const uint32_t pixVal = video.palette[PAL_BLCKTXT]; + uint32_t *dstPtr = &video.frameBuffer[(y * SCREEN_W) + x]; for (y = 0; y < 3; y++) { @@ -1859,14 +1796,12 @@ static void envelopeDot(int32_t nr, int16_t x, int16_t y) static void envelopeVertLine(int32_t nr, int16_t x, int16_t y, uint8_t col) { - uint32_t *dstPtr, pixVal1, pixVal2; - y += (nr == 0) ? 189 : 276; - pixVal1 = video.palette[col]; - pixVal2 = video.palette[PAL_BLCKTXT]; + const uint32_t pixVal1 = video.palette[col]; + const uint32_t pixVal2 = video.palette[PAL_BLCKTXT]; - dstPtr = &video.frameBuffer[(y * SCREEN_W) + x]; + uint32_t *dstPtr = &video.frameBuffer[(y * SCREEN_W) + x]; for (y = 0; y < 33; y++) { if (*dstPtr != pixVal2) @@ -1879,7 +1814,8 @@ static void envelopeVertLine(int32_t nr, int16_t x, int16_t y, uint8_t col) static void writeEnvelope(int32_t nr) { uint8_t selected; - int16_t i, x, y, lx, ly, nd, sp, ls, le, (*curEnvP)[2]; + int16_t i, nd, sp, ls, le, (*curEnvP)[2]; + instrTyp *ins = instr[editor.curInstr]; // clear envelope area @@ -1950,14 +1886,14 @@ static void writeEnvelope(int32_t nr) if (nd > 12) nd = 12; - lx = 0; - ly = 0; + int16_t lx = 0; + int16_t ly = 0; // draw envelope for (i = 0; i < nd; i++) { - x = curEnvP[i][0]; - y = curEnvP[i][1]; + int16_t x = curEnvP[i][0]; + int16_t y = curEnvP[i][1]; x = CLAMP(x, 0, 324); @@ -2011,11 +1947,7 @@ static void writeEnvelope(int32_t nr) static void textOutTiny(int32_t xPos, int32_t yPos, char *str, uint32_t color) { -#ifndef __arm__ - uint32_t tmp; -#endif uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - while (*str != '\0') { const char chr = *str++; @@ -2035,7 +1967,7 @@ static void textOutTiny(int32_t xPos, int32_t yPos, char *str, uint32_t color) dstPtr[x] = color; #else // carefully written like this to generate conditional move instructions (font data is hard to predict) - tmp = dstPtr[x]; + uint32_t tmp = dstPtr[x]; if (srcPtr[x] != 0) tmp = color; dstPtr[x] = tmp; #endif @@ -2109,9 +2041,10 @@ static void drawPanEnvCoords(int16_t tick, int16_t val) void handleInstEditorRedrawing(void) { + int16_t tick, val; + instrTyp *ins = instr[editor.curInstr]; - int16_t tick, val; if (updateVolEnv) { updateVolEnv = false; @@ -2456,21 +2389,19 @@ void toggleInstEditor(void) bool testInstrVolEnvMouseDown(bool mouseButtonDown) { - uint8_t ant; - int32_t x, y, mx, my, minX, maxX; - instrTyp *ins; + int32_t minX, maxX; if (!ui.instEditorShown || editor.curInstr == 0 || instr[editor.curInstr] == NULL) return false; - ins = instr[editor.curInstr]; + instrTyp *ins = instr[editor.curInstr]; - ant = ins->envVPAnt; + uint8_t ant = ins->envVPAnt; if (ant > 12) ant = 12; - mx = mouse.x; - my = mouse.y; + int32_t mx = mouse.x; + int32_t my = mouse.y; if (!mouseButtonDown) { @@ -2485,8 +2416,8 @@ bool testInstrVolEnvMouseDown(bool mouseButtonDown) for (uint8_t i = 0; i < ant; i++) { - x = 8 + ins->envVP[i][0]; - y = 190 + (64 - ins->envVP[i][1]); + const int32_t x = 8 + ins->envVP[i][0]; + const int32_t y = 190 + (64 - ins->envVP[i][1]); if (mx >= x-2 && mx <= x+2 && my >= y-2 && my <= y+2) { @@ -2555,21 +2486,19 @@ bool testInstrVolEnvMouseDown(bool mouseButtonDown) bool testInstrPanEnvMouseDown(bool mouseButtonDown) { - uint8_t ant; - int32_t x, y, mx, my, minX, maxX; - instrTyp *ins; + int32_t minX, maxX; if (!ui.instEditorShown || editor.curInstr == 0 || instr[editor.curInstr] == NULL) return false; - ins = instr[editor.curInstr]; + instrTyp *ins = instr[editor.curInstr]; - ant = ins->envPPAnt; + uint8_t ant = ins->envPPAnt; if (ant > 12) ant = 12; - mx = mouse.x; - my = mouse.y; + int32_t mx = mouse.x; + int32_t my = mouse.y; if (!mouseButtonDown) { @@ -2584,8 +2513,8 @@ bool testInstrPanEnvMouseDown(bool mouseButtonDown) for (uint8_t i = 0; i < ant; i++) { - x = 8 + ins->envPP[i][0]; - y = 277 + (63 - ins->envPP[i][1]); + const int32_t x = 8 + ins->envPP[i][0]; + const int32_t y = 277 + (63 - ins->envPP[i][1]); if (mx >= x-2 && mx <= x+2 && my >= y-2 && my <= y+2) { @@ -2972,16 +2901,8 @@ bool testInstrSwitcherMouseDown(void) static int32_t SDLCALL saveInstrThread(void *ptr) { - int16_t n; - int32_t i; - size_t result; - FILE *f; instrXIHeaderTyp ih; - instrTyp *ins; sampleTyp *s; - sampleHeaderTyp *dst; - - (void)ptr; if (editor.tmpFilenameU == NULL) { @@ -2989,14 +2910,14 @@ static int32_t SDLCALL saveInstrThread(void *ptr) return false; } - n = getUsedSamples(saveInstrNr); + const int16_t n = getUsedSamples(saveInstrNr); if (n == 0 || instr[saveInstrNr] == NULL) { okBoxThreadSafe(0, "System message", "Instrument is empty!"); return false; } - f = UNICHAR_FOPEN(editor.tmpFilenameU, "wb"); + FILE *f = UNICHAR_FOPEN(editor.tmpFilenameU, "wb"); if (f == NULL) { okBoxThreadSafe(0, "System message", "General I/O error during saving! Is the file in use?"); @@ -3013,7 +2934,7 @@ static int32_t SDLCALL saveInstrThread(void *ptr) ih.ver = 0x0102; // copy over instrument struct data to instrument header - ins = instr[saveInstrNr]; + instrTyp *ins = instr[saveInstrNr]; memcpy(ih.ta, ins->ta, 96); memcpy(ih.envVP, ins->envVP, 12*2*sizeof(int16_t)); memcpy(ih.envPP, ins->envPP, 12*2*sizeof(int16_t)); @@ -3040,10 +2961,10 @@ static int32_t SDLCALL saveInstrThread(void *ptr) ih.antSamp = n; // copy over sample struct datas to sample headers - for (i = 0; i < n; i++) + s = instr[saveInstrNr]->samp; + for (int32_t i = 0; i < n; i++, s++) { - s = &instr[saveInstrNr]->samp[i]; - dst = &ih.samp[i]; + sampleHeaderTyp *dst = &ih.samp[i]; dst->len = s->len; dst->repS = s->repS; @@ -3061,7 +2982,7 @@ static int32_t SDLCALL saveInstrThread(void *ptr) dst->len = 0; } - result = fwrite(&ih, INSTR_XI_HEADER_SIZE + (ih.antSamp * sizeof (sampleHeaderTyp)), 1, f); + size_t result = fwrite(&ih, INSTR_XI_HEADER_SIZE + (ih.antSamp * sizeof (sampleHeaderTyp)), 1, f); if (result != 1) { fclose(f); @@ -3070,9 +2991,9 @@ static int32_t SDLCALL saveInstrThread(void *ptr) } pauseAudio(); - for (i = 0; i < n; i++) + s = instr[saveInstrNr]->samp; + for (int32_t i = 0; i < n; i++, s++) { - s = &instr[saveInstrNr]->samp[i]; if (s->pek != NULL && s->len > 0) { restoreSample(s); @@ -3100,6 +3021,8 @@ static int32_t SDLCALL saveInstrThread(void *ptr) setMouseBusy(false); return true; + + (void)ptr; } void saveInstr(UNICHAR *filenameU, int16_t nr) @@ -3123,20 +3046,17 @@ void saveInstr(UNICHAR *filenameU, int16_t nr) static int16_t getPATNote(int32_t freq) { - double dNote = (log2(freq * (1.0 / 440000.0)) * 12.0) + 57.0; - int32_t note = (int32_t)(dNote + 0.5); + const double dNote = (log2(freq * (1.0 / 440000.0)) * 12.0) + 57.0; + const int32_t note = (const int32_t)(dNote + 0.5); return (int16_t)note; } static int32_t SDLCALL loadInstrThread(void *ptr) { - bool stereoWarning; int8_t *newPtr; int16_t a, b; int32_t i, j; - double dFreq; - FILE *f; instrXIHeaderTyp ih; instrPATHeaderTyp ih_PAT; instrPATWaveHeaderTyp ih_PATWave; @@ -3144,9 +3064,7 @@ static int32_t SDLCALL loadInstrThread(void *ptr) sampleTyp *s; instrTyp *ins; - (void)ptr; - - stereoWarning = false; + bool stereoWarning = false; if (editor.tmpInstrFilenameU == NULL) { @@ -3154,7 +3072,7 @@ static int32_t SDLCALL loadInstrThread(void *ptr) return false; } - f = UNICHAR_FOPEN(editor.tmpInstrFilenameU, "rb"); + FILE *f = UNICHAR_FOPEN(editor.tmpInstrFilenameU, "rb"); if (f == NULL) { okBoxThreadSafe(0, "System message", "General I/O error during loading! Is the file in use?"); @@ -3478,8 +3396,8 @@ static int32_t SDLCALL loadInstrThread(void *ptr) if (s->repS+s->repL > s->len) s->repL = s->len - s->repS; - dFreq = (1.0 + (ih_PATWave.fineTune / 512.0)) * ih_PATWave.sampleRate; - int32_t freq = (int32_t)(dFreq + 0.5); + const double dFreq = (1.0 + (ih_PATWave.fineTune / 512.0)) * ih_PATWave.sampleRate; + int32_t freq = (const int32_t)(dFreq + 0.5); tuneSample(s, freq); a = s->relTon - (getPATNote(ih_PATWave.rootFrq) - (12 * 3)); @@ -3530,14 +3448,15 @@ loadDone: okBoxThreadSafe(0, "System message", "Warning: The instrument contained stereo sample(s). They were mixed to mono!"); return true; + + (void)ptr; } static bool fileIsInstr(UNICHAR *filename) { char header[22]; - FILE *f; - f = UNICHAR_FOPEN(filename, "rb"); + FILE *f = UNICHAR_FOPEN(filename, "rb"); if (f == NULL) return false; diff --git a/src/ft2_keyboard.c b/src/ft2_keyboard.c @@ -42,13 +42,11 @@ static bool checkModifiedKeys(SDL_Keycode keycode); int8_t scancodeKeyToNote(SDL_Scancode scancode) { - int8_t note; - if (scancode == SDL_SCANCODE_CAPSLOCK || scancode == SDL_SCANCODE_NONUSBACKSLASH) return 97; // key off // translate key to note - note = 0; + int8_t note = 0; if (scancode >= SDL_SCANCODE_B && scancode <= SDL_SCANCODE_SLASH) note = scancodeKey2Note[(int32_t)scancode - SDL_SCANCODE_B]; @@ -73,8 +71,6 @@ void readKeyModifiers(void) void keyUpHandler(SDL_Scancode scancode, SDL_Keycode keycode) { - (void)keycode; - if (editor.editTextFlag || ui.sysReqShown) return; // kludge: don't handle key up! (XXX: Is this hack really needed anymore?) @@ -94,6 +90,8 @@ void keyUpHandler(SDL_Scancode scancode, SDL_Keycode keycode) keyb.numPadPlusPressed = false; keyb.keyRepeat = false; + + (void)keycode; } void keyDownHandler(SDL_Scancode scancode, SDL_Keycode keycode, bool keyWasRepeated) @@ -161,8 +159,6 @@ void keyDownHandler(SDL_Scancode scancode, SDL_Keycode keycode, bool keyWasRepea static void handleKeys(SDL_Keycode keycode, SDL_Scancode scanKey) { - uint16_t pattLen; - // if we're holding numpad plus but not pressing bank keys, don't check any other key if (keyb.numPadPlusPressed) { @@ -346,7 +342,7 @@ static void handleKeys(SDL_Keycode keycode, SDL_Scancode scanKey) patt[editor.editPattern][(editor.pattPos * MAX_VOICES) + cursor.ch].ton = 97; - pattLen = pattLens[editor.editPattern]; + const uint16_t pattLen = pattLens[editor.editPattern]; if (playMode == PLAYMODE_EDIT && pattLen >= 1) setPos(-1, (editor.pattPos + editor.ID_Add) % pattLen, true); diff --git a/src/ft2_main.c b/src/ft2_main.c @@ -256,8 +256,6 @@ int main(int argc, char *argv[]) static void initializeVars(void) { - int32_t i; - cpu.hasSSE = SDL_HasSSE(); cpu.hasSSE2 = SDL_HasSSE2(); @@ -271,7 +269,8 @@ static void initializeVars(void) memset(&chSync, 0, sizeof (chSync)); memset(&song, 0, sizeof (song)); - for (i = 0; i < MAX_VOICES; i++) + // used for scopes and sampling position line (sampler screen) + for (int32_t i = 0; i < MAX_VOICES; i++) { lastChInstr[i].instrNr = 255; lastChInstr[i].sampleNr = 255; @@ -380,9 +379,6 @@ static void cleanUpAndExit(void) // never call this inside the main loop! #ifdef __APPLE__ static void osxSetDirToProgramDirFromArgs(char **argv) { - char *tmpPath; - int32_t i, tmpPathLen; - /* OS X/macOS: hackish way of setting the current working directory to the place where we double clicked ** on the icon (for protracker.ini loading) */ @@ -390,12 +386,12 @@ static void osxSetDirToProgramDirFromArgs(char **argv) // if we launched from the terminal, argv[0][0] would be '.' if (argv[0] != NULL && argv[0][0] == DIR_DELIMITER) // don't do the hack if we launched from the terminal { - tmpPath = strdup(argv[0]); + char *tmpPath = strdup(argv[0]); if (tmpPath != NULL) { // cut off program filename - tmpPathLen = strlen(tmpPath); - for (i = tmpPathLen - 1; i >= 0; i--) + int32_t tmpPathLen = strlen(tmpPath); + for (int32_t i = tmpPathLen - 1; i >= 0; i--) { if (tmpPath[i] == DIR_DELIMITER) { @@ -415,17 +411,17 @@ static void osxSetDirToProgramDirFromArgs(char **argv) static void setupPerfFreq(void) { - uint64_t perfFreq64; - double dInt, dFrac; + double dInt; - perfFreq64 = SDL_GetPerformanceFrequency(); + const uint64_t perfFreq64 = SDL_GetPerformanceFrequency(); assert(perfFreq64 != 0); + editor.dPerfFreq = (double)perfFreq64; editor.dPerfFreqMulMicro = 1000000.0 / editor.dPerfFreq; editor.dPerfFreqMulMs = 1.0 / (editor.dPerfFreq / 1000.0); // calculate vblank time for performance counters and split into int/frac - dFrac = modf(editor.dPerfFreq / VBLANK_HZ, &dInt); + double dFrac = modf(editor.dPerfFreq / VBLANK_HZ, &dInt); // integer part video.vblankTimeLen = (int32_t)dInt; diff --git a/src/ft2_midi.c b/src/ft2_midi.c @@ -38,9 +38,7 @@ static inline void midiInSetChannel(uint8_t status) static inline void midiInKeyAction(int8_t m, uint8_t mv) { - int16_t vol; - - vol = (mv * 64 * config.recMIDIVolSens) / (127 * 100); + int16_t vol = (mv * 64 * config.recMIDIVolSens) / (127 * 100); if (vol > 64) vol = 64; @@ -61,8 +59,6 @@ static inline void midiInKeyAction(int8_t m, uint8_t mv) static inline void midiInControlChange(uint8_t data1, uint8_t data2) { - uint8_t vibDepth; - if (data1 != 1) // 1 = modulation wheel return; @@ -77,25 +73,24 @@ static inline void midiInControlChange(uint8_t data1, uint8_t data2) } } - vibDepth = (midi.currMIDIVibDepth >> 9) & 0x0F; + const uint8_t vibDepth = (midi.currMIDIVibDepth >> 9) & 0x0F; if (vibDepth > 0 && recMIDIValidChn) recordMIDIEffect(0x04, 0xA0 | vibDepth); } static inline void midiInPitchBendChange(uint8_t data1, uint8_t data2) { - int16_t pitch; - - pitch = (int16_t)((data2 << 7) | data1) - 8192; // -8192..8191 + int16_t pitch = (int16_t)((data2 << 7) | data1) - 8192; // -8192..8191 pitch >>= 6; // -128..127 midi.currMIDIPitch = pitch; if (recMIDIValidChn) { - for (uint8_t i = 0; i < song.antChn; i++) + stmTyp *ch = stm; + for (uint8_t i = 0; i < song.antChn; i++, ch++) { - if (stm[i].midiPitch != 0 || editor.keyOnTab[i] != 0) - stm[i].midiPitch = midi.currMIDIPitch; + if (ch->midiPitch != 0 || editor.keyOnTab[i] != 0) + ch->midiPitch = midi.currMIDIPitch; } } } @@ -104,9 +99,6 @@ static void midiInCallback(double dTimeStamp, const unsigned char *message, size { uint8_t byte[3]; - (void)dTimeStamp; - (void)userData; - if (!midi.enable || messageSize < 2) return; @@ -127,6 +119,9 @@ static void midiInCallback(double dTimeStamp, const unsigned char *message, size else if (byte[0] >= 176 && byte[0] <= 176+15) midiInControlChange(byte[1], byte[2]); else if (byte[0] >= 224 && byte[0] <= 224+15) midiInPitchBendChange(byte[1], byte[2]); } + + (void)dTimeStamp; + (void)userData; } static uint32_t getNumMidiInDevices(void) @@ -139,12 +134,10 @@ static uint32_t getNumMidiInDevices(void) static char *getMidiInDeviceName(uint32_t deviceID) { - char *devStr; - if (midiDev == NULL) return NULL; - devStr = (char *)rtmidi_get_port_name(midiDev, deviceID); + char *devStr = (char *)rtmidi_get_port_name(midiDev, deviceID); if (!midiDev->ok) return NULL; @@ -221,29 +214,25 @@ bool openMidiInDevice(uint32_t deviceID) void recordMIDIEffect(uint8_t effTyp, uint8_t effData) { - int16_t nr; - tonTyp *note; - // only handle this in record mode if (!midi.enable || (playMode != PLAYMODE_RECSONG && playMode != PLAYMODE_RECPATT)) return; - nr = editor.editPattern; + const int16_t nr = editor.editPattern; if (config.multiRec) { - for (uint16_t i = 0; i < song.antChn; i++) + tonTyp *note = &patt[nr][editor.pattPos * MAX_VOICES]; + for (int32_t i = 0; i < song.antChn; i++, note++) { if (config.multiRecChn[i] && editor.chnMode[i]) { if (!allocatePattern(nr)) return; - note = &patt[nr][(editor.pattPos * MAX_VOICES) + i]; if (note->effTyp == 0) { note->effTyp = effTyp; - note->eff = effData; - + note->eff = effData; setSongModifiedFlag(); } } @@ -254,33 +243,29 @@ void recordMIDIEffect(uint8_t effTyp, uint8_t effData) if (!allocatePattern(nr)) return; - note = &patt[nr][(editor.pattPos * MAX_VOICES) + cursor.ch]; + tonTyp *note = &patt[nr][(editor.pattPos * MAX_VOICES) + cursor.ch]; if (note->effTyp != effTyp || note->eff != effData) setSongModifiedFlag(); note->effTyp = effTyp; - note->eff = effData; + note->eff = effData; } } bool saveMidiInputDeviceToConfig(void) { - char *midiInStr; - uint32_t numDevices; - FILE *f; - if (!midi.initThreadDone || midiDev == NULL || !midiDeviceOpened) return false; - numDevices = getNumMidiInDevices(); + const uint32_t numDevices = getNumMidiInDevices(); if (numDevices == 0) return false; - midiInStr = getMidiInDeviceName(midi.inputDevice); + char *midiInStr = getMidiInDeviceName(midi.inputDevice); if (midiInStr == NULL) return false; - f = UNICHAR_FOPEN(editor.midiConfigFileLocation, "w"); + FILE *f = UNICHAR_FOPEN(editor.midiConfigFileLocation, "w"); if (f == NULL) { free(midiInStr); @@ -298,22 +283,20 @@ bool setMidiInputDeviceFromConfig(void) { #define MAX_DEV_STR_LEN 1024 - char *midiInStr, *devString; - uint32_t i, numDevices; - FILE *f; + uint32_t i; if (midi.inputDeviceName != NULL) free(midi.inputDeviceName); - numDevices = getNumMidiInDevices(); + const uint32_t numDevices = getNumMidiInDevices(); if (numDevices == 0) goto setDefMidiInputDev; - f = UNICHAR_FOPEN(editor.midiConfigFileLocation, "r"); + FILE *f = UNICHAR_FOPEN(editor.midiConfigFileLocation, "r"); if (f == NULL) goto setDefMidiInputDev; - devString = (char *)calloc(MAX_DEV_STR_LEN + 4, sizeof (char)); + char *devString = (char *)calloc(MAX_DEV_STR_LEN+4, sizeof (char)); if (devString == NULL) { fclose(f); @@ -330,7 +313,7 @@ bool setMidiInputDeviceFromConfig(void) fclose(f); // scan for device in list - midiInStr = NULL; + char *midiInStr = NULL; for (i = 0; i < numDevices; i++) { midiInStr = getMidiInDeviceName(i); @@ -381,8 +364,6 @@ void freeMidiInputDeviceList(void) void rescanMidiInputDevices(void) { - char *deviceName; - freeMidiInputDeviceList(); midi.numInputDevices = getNumMidiInDevices(); @@ -391,7 +372,7 @@ void rescanMidiInputDevices(void) for (int32_t i = 0; i < midi.numInputDevices; i++) { - deviceName = getMidiInDeviceName(i); + char *deviceName = getMidiInDeviceName(i); if (deviceName == NULL) { if (midi.numInputDevices > 0) @@ -409,10 +390,6 @@ void rescanMidiInputDevices(void) void drawMidiInputList(void) { - char *tmpString; - uint16_t y; - int32_t deviceEntry; - clearRect(114, 4, 365, 165); if (!midi.initThreadDone || midiDev == NULL || midi.numInputDevices == 0) @@ -425,13 +402,13 @@ void drawMidiInputList(void) for (uint16_t i = 0; i < 15; i++) { - deviceEntry = getScrollBarPos(SB_MIDI_INPUT_SCROLL) + i; + const int32_t deviceEntry = getScrollBarPos(SB_MIDI_INPUT_SCROLL) + i; if (deviceEntry < midi.numInputDevices) { if (midi.inputDeviceNames[deviceEntry] == NULL) continue; - y = 4 + (i * 11); + const uint16_t y = 4 + (i * 11); if (midi.inputDeviceName != NULL) { @@ -439,7 +416,7 @@ void drawMidiInputList(void) fillRect(114, y, 365, 10, PAL_BOXSLCT); // selection background color } - tmpString = utf8ToCp437(midi.inputDeviceNames[deviceEntry], true); + char *tmpString = utf8ToCp437(midi.inputDeviceNames[deviceEntry], true); if (tmpString != NULL) { textOutClipX(114, y, PAL_FORGRND, tmpString, 479); @@ -461,29 +438,27 @@ void scrollMidiInputDevListDown(void) void sbMidiInputSetPos(uint32_t pos) { - (void)pos; - if (ui.configScreenShown && editor.currConfigScreen == CONFIG_SCREEN_MIDI_INPUT) drawMidiInputList(); + + (void)pos; } bool testMidiInputDeviceListMouseDown(void) { - int32_t mx, my, deviceNum; - if (!ui.configScreenShown || editor.currConfigScreen != CONFIG_SCREEN_MIDI_INPUT) return false; // we didn't click the area if (!midi.initThreadDone) return true; - mx = mouse.x; - my = mouse.y; + const int32_t mx = mouse.x; + const int32_t my = mouse.y; if (my < 4 || my > 166 || mx < 114 || mx > 479) return false; // we didn't click the area - deviceNum = (int32_t)scrollBars[SB_MIDI_INPUT_SCROLL].pos + ((my - 4) / 11); + const int32_t deviceNum = (int32_t)scrollBars[SB_MIDI_INPUT_SCROLL].pos + ((my - 4) / 11); if (midi.numInputDevices <= 0 || deviceNum >= midi.numInputDevices) return true; @@ -509,8 +484,6 @@ bool testMidiInputDeviceListMouseDown(void) int32_t SDLCALL initMidiFunc(void *ptr) { - (void)ptr; - midi.closeMidiOnExit = true; midi.initThreadDone = false; @@ -522,6 +495,8 @@ int32_t SDLCALL initMidiFunc(void *ptr) midi.rescanDevicesFlag = true; return true; + + (void)ptr; } #else diff --git a/src/ft2_module_loader.c b/src/ft2_module_loader.c @@ -156,19 +156,18 @@ extern const char modSig[32][5]; static bool allocateTmpInstr(int16_t nr) { - instrTyp *p; - if (instrTmp[nr] != NULL) return false; // already allocated - p = (instrTyp *)calloc(1, sizeof (instrTyp)); + instrTyp *p = (instrTyp *)calloc(1, sizeof (instrTyp)); if (p == NULL) return false; - for (int8_t i = 0; i < MAX_SMP_PER_INST; i++) // set standard sample pan/vol + sampleTyp *s = p->samp; + for (int32_t i = 0; i < MAX_SMP_PER_INST; i++, s++) { - p->samp[i].pan = 128; - p->samp[i].vol = 64; + s->pan = 128; + s->vol = 64; } instrTmp[nr] = p; @@ -215,7 +214,6 @@ static uint8_t getModType(uint8_t *numChannels, const char *id) static bool loadMusicMOD(FILE *f, uint32_t fileLength, bool externalThreadFlag) { char ID[16]; - bool mightBeSTK, lateSTKVerFlag, veryLateSTKVerFlag; uint8_t bytes[4], modFormat, numChannels; int16_t i, j, k, ai; uint16_t a, b, period; @@ -227,9 +225,9 @@ static bool loadMusicMOD(FILE *f, uint32_t fileLength, bool externalThreadFlag) showMsg = externalThreadFlag ? okBoxThreadSafe : okBox; - veryLateSTKVerFlag = false; // "DFJ SoundTracker III" nad later - lateSTKVerFlag = false; // "TJC SoundTracker II" and later - mightBeSTK = false; + bool veryLateSTKVerFlag = false; // "DFJ SoundTracker III" nad later + bool lateSTKVerFlag = false; // "TJC SoundTracker II" and later + bool mightBeSTK = false; memset(&songTmp, 0, sizeof (songTmp)); memset(&h_MOD31, 0, sizeof (songMOD31HeaderTyp)); @@ -726,11 +724,11 @@ modLoadError: static uint8_t stmTempoToBPM(uint8_t tempo) // ported from original ST2.3 replayer code { const uint8_t slowdowns[16] = { 140, 50, 25, 15, 10, 7, 6, 4, 3, 3, 2, 2, 2, 2, 1, 1 }; - uint32_t bpm; uint16_t hz = 50; hz -= ((slowdowns[tempo >> 4] * (tempo & 15)) >> 4); // can and will underflow - bpm = (hz << 1) + (hz >> 1); // BPM = hz * 2.5 + + const uint32_t bpm = (hz << 1) + (hz >> 1); // BPM = hz * 2.5 return (uint8_t)CLAMP(bpm, 32, 255); // result can be slightly off, but close enough... } @@ -978,22 +976,18 @@ stmLoadError: static int8_t countS3MChannels(uint16_t antPtn) { - uint8_t j, k, channels; - int16_t i; - tonTyp ton; - - channels = 0; - for (i = 0; i < antPtn; i++) + int32_t channels = 0; + for (int32_t i = 0; i < antPtn; i++) { if (pattTmp[i] == NULL) continue; - for (j = 0; j < 64; j++) + tonTyp *ton = pattTmp[i]; + for (int32_t j = 0; j < 64; j++) { - for (k = 0; k < MAX_VOICES; k++) + for (int32_t k = 0; k < MAX_VOICES; k++, ton++) { - ton = pattTmp[i][(j * MAX_VOICES) + k]; - if (ton.eff == 0 && ton.effTyp == 0 && ton.instr == 0 && ton.ton == 0 && ton.vol == 0) + if (ton->eff == 0 && ton->effTyp == 0 && ton->instr == 0 && ton->ton == 0 && ton->vol == 0) continue; if (k > channels) @@ -1003,7 +997,7 @@ static int8_t countS3MChannels(uint16_t antPtn) } channels++; - return channels; + return (int8_t)channels; } static bool loadMusicS3M(FILE *f, uint32_t dataLength, bool externalThreadFlag) @@ -1873,8 +1867,9 @@ xmLoadError: static int32_t SDLCALL loadMusicThread(void *ptr) { - (void)ptr; return doLoadMusic(true); + + (void)ptr; } void loadMusic(UNICHAR *filenameU) @@ -1947,10 +1942,8 @@ bool loadMusicUnthreaded(UNICHAR *filenameU, bool autoPlay) static void freeTmpModule(void) // called on module load error { - int32_t i, j; - // free all patterns - for (i = 0; i < MAX_PATTERNS; i++) + for (int32_t i = 0; i < MAX_PATTERNS; i++) { if (pattTmp[i] != NULL) { @@ -1960,19 +1953,20 @@ static void freeTmpModule(void) // called on module load error } // free all instruments and samples - for (i = 1; i <= 256; i++) // if >128 instruments, we fake-load up to 128 extra (and discard them later) + for (int32_t i = 1; i <= 256; i++) // if >128 instruments, we fake-load up to 128 extra (and discard them later) { - if (instrTmp[i] != NULL) - { - for (j = 0; j < MAX_SMP_PER_INST; j++) - { - if (instrTmp[i]->samp[j].origPek != NULL) - free(instrTmp[i]->samp[j].origPek); - } + if (instrTmp[i] == NULL) + continue; - free(instrTmp[i]); - instrTmp[i] = NULL; + sampleTyp *s = instrTmp[i]->samp; + for (int32_t j = 0; j < MAX_SMP_PER_INST; j++, s++) + { + if (s->origPek != NULL) + free(s->origPek); } + + free(instrTmp[i]); + instrTmp[i] = NULL; } } @@ -2173,10 +2167,6 @@ void checkSampleRepeat(sampleTyp *s) static bool loadInstrSample(FILE *f, uint16_t i, bool externalThreadFlag) { - int8_t *newPtr; - uint16_t j, k; - int32_t l, bytesToSkip; - sampleTyp *s; int16_t (*showMsg)(int16_t, const char *, const char *); showMsg = externalThreadFlag ? okBoxThreadSafe : okBox; @@ -2184,30 +2174,29 @@ static bool loadInstrSample(FILE *f, uint16_t i, bool externalThreadFlag) if (instrTmp[i] == NULL) return true; // empty instrument, let's just pretend it got loaded successfully - k = instrTmp[i]->antSamp; + uint16_t k = instrTmp[i]->antSamp; if (k > MAX_SMP_PER_INST) k = MAX_SMP_PER_INST; + sampleTyp *s = instrTmp[i]->samp; + if (i > MAX_INST) // insNum > 128, just skip sample data { - for (j = 0; j < k; j++) + for (uint16_t j = 0; j < k; j++, s++) { - s = &instrTmp[i]->samp[j]; if (s->len > 0) fseek(f, s->len, SEEK_CUR); } } else { - for (j = 0; j < k; j++) + for (uint16_t j = 0; j < k; j++, s++) { - s = &instrTmp[i]->samp[j]; - // if a sample has both forward loop and pingpong loop set, make it pingpong loop only (FT2 mixer behavior) if ((s->typ & 3) == 3) s->typ &= 0xFE; - l = s->len; + int32_t l = s->len; if (l <= 0) { s->pek = NULL; @@ -2220,7 +2209,7 @@ static bool loadInstrSample(FILE *f, uint16_t i, bool externalThreadFlag) } else { - bytesToSkip = 0; + int32_t bytesToSkip = 0; if (l > MAX_SAMPLE_LEN) { bytesToSkip = l - MAX_SAMPLE_LEN; @@ -2257,7 +2246,7 @@ static bool loadInstrSample(FILE *f, uint16_t i, bool externalThreadFlag) s->repL >>= 1; s->repS >>= 1; - newPtr = (int8_t *)realloc(s->origPek, s->len + LOOP_FIX_LEN); + int8_t *newPtr = (int8_t *)realloc(s->origPek, s->len + LOOP_FIX_LEN); if (newPtr != NULL) { s->origPek = newPtr; @@ -2295,18 +2284,19 @@ static bool loadInstrSample(FILE *f, uint16_t i, bool externalThreadFlag) void unpackPatt(uint8_t *dst, uint8_t *src, uint16_t len, int32_t antChn) { uint8_t note, data; - int32_t srcEnd, srcIdx, j; + int32_t j; if (dst == NULL) return; - srcEnd = len * (sizeof (tonTyp) * antChn); - srcIdx = 0; + const int32_t srcEnd = len * (sizeof (tonTyp) * antChn); + int32_t srcIdx = 0; int32_t numChannels = antChn; if (numChannels > MAX_VOICES) numChannels = MAX_VOICES; + const int32_t pitch = sizeof (tonTyp) * (MAX_VOICES - antChn); for (int32_t i = 0; i < len; i++) { for (j = 0; j < numChannels; j++) @@ -2374,20 +2364,17 @@ void unpackPatt(uint8_t *dst, uint8_t *src, uint16_t len, int32_t antChn) // if song has <32 channels, align pointer to next row (skip unused channels) if (antChn < MAX_VOICES) - dst += sizeof (tonTyp) * (MAX_VOICES - antChn); + dst += pitch; } } static bool tmpPatternEmpty(uint16_t nr) { - uint8_t *scanPtr; - uint32_t scanLen; - if (pattTmp[nr] == NULL) return true; - scanPtr = (uint8_t *)pattTmp[nr]; - scanLen = pattLensTmp[nr] * TRACK_WIDTH; + uint8_t *scanPtr = (uint8_t *)pattTmp[nr]; + const uint32_t scanLen = pattLensTmp[nr] * TRACK_WIDTH; for (uint32_t i = 0; i < scanLen; i++) { @@ -2403,22 +2390,23 @@ void clearUnusedChannels(tonTyp *p, int16_t pattLen, int32_t antChn) if (p == NULL || antChn >= MAX_VOICES) return; - for (int32_t i = 0; i < pattLen; i++) - memset(&p[(i * MAX_VOICES) + antChn], 0, sizeof (tonTyp) * (MAX_VOICES - antChn)); + const int32_t width = sizeof (tonTyp) * (MAX_VOICES - antChn); + + tonTyp *ptr = &p[antChn]; + for (int32_t i = 0; i < pattLen; i++, ptr += MAX_VOICES) + memset(ptr, 0, width); } static bool loadPatterns(FILE *f, uint16_t antPtn, bool externalThreadFlag) { - bool pattLenWarn; uint8_t tmpLen; - uint16_t i; patternHeaderTyp ph; int16_t (*showMsg)(int16_t, const char *, const char *); showMsg = externalThreadFlag ? okBoxThreadSafe : okBox; - pattLenWarn = false; - for (i = 0; i < antPtn; i++) + bool pattLenWarn = false; + for (uint16_t i = 0; i < antPtn; i++) { if (fread(&ph.patternHeaderSize, 4, 1, f) != 1) goto pattCorrupt; @@ -2503,8 +2491,6 @@ pattCorrupt: // called from input/video thread after the module was done loading static void setupLoadedModule(void) { - int16_t i; - lockMixerCallback(); freeAllInstr(); @@ -2522,14 +2508,14 @@ static void setupLoadedModule(void) memset(editor.keyOnTab, 0, sizeof (editor.keyOnTab)); // copy over new pattern pointers and lengths - for (i = 0; i < MAX_PATTERNS; i++) + for (int32_t i = 0; i < MAX_PATTERNS; i++) { patt[i] = pattTmp[i]; pattLens[i] = pattLensTmp[i]; } // copy over new instruments (includes sample pointers) - for (i = 1; i <= MAX_INST; i++) + for (int16_t i = 1; i <= MAX_INST; i++) { instr[i] = instrTmp[i]; fixSampleName(i); @@ -2620,9 +2606,7 @@ static void setupLoadedModule(void) bool handleModuleLoadFromArg(int argc, char **argv) { - int32_t filesize; - uint32_t filenameLen; - UNICHAR *filenameU, tmpPathU[PATH_MAX+2]; + UNICHAR tmpPathU[PATH_MAX+2]; // this is crude, we always expect only one parameter, and that it is the module. @@ -2634,9 +2618,9 @@ bool handleModuleLoadFromArg(int argc, char **argv) return false; // OS X < 10.9 passes a -psn_x_xxxxx parameter on double-click launch #endif - filenameLen = (uint32_t)strlen(argv[1]); + const uint32_t filenameLen = (const uint32_t)strlen(argv[1]); - filenameU = (UNICHAR *)calloc(filenameLen+1, sizeof (UNICHAR)); + UNICHAR *filenameU = (UNICHAR *)calloc(filenameLen+1, sizeof (UNICHAR)); if (filenameU == NULL) { okBox(0, "System message", "Not enough memory!"); @@ -2655,7 +2639,7 @@ bool handleModuleLoadFromArg(int argc, char **argv) // set path to where the main executable is UNICHAR_CHDIR(editor.binaryPathU); - filesize = getFileSize(filenameU); + const int32_t filesize = getFileSize(filenameU); if (filesize == -1 || filesize >= 512L*1024*1024) // >=2GB or >=512MB { okBox(0, "System message", "Error: The module is too big to be loaded!"); @@ -2678,17 +2662,14 @@ bool handleModuleLoadFromArg(int argc, char **argv) void loadDroppedFile(char *fullPathUTF8, bool songModifiedCheck) { - int32_t fullPathLen, filesize; - UNICHAR *fullPathU; - if (ui.sysReqShown || fullPathUTF8 == NULL) return; - fullPathLen = (int32_t)strlen(fullPathUTF8); + const int32_t fullPathLen = (const int32_t)strlen(fullPathUTF8); if (fullPathLen == 0) return; - fullPathU = (UNICHAR *)calloc(fullPathLen + 2, sizeof (UNICHAR)); + UNICHAR *fullPathU = (UNICHAR *)calloc(fullPathLen + 2, sizeof (UNICHAR)); if (fullPathU == NULL) { okBox(0, "System message", "Not enough memory!"); @@ -2701,7 +2682,7 @@ void loadDroppedFile(char *fullPathUTF8, bool songModifiedCheck) strcpy(fullPathU, fullPathUTF8); #endif - filesize = getFileSize(fullPathU); + const int32_t filesize = getFileSize(fullPathU); if (filesize == -1) // >2GB { diff --git a/src/ft2_module_saver.c b/src/ft2_module_saver.c @@ -33,7 +33,7 @@ static const char modSig[32][5] = bool saveXM(UNICHAR *filenameU) { - int16_t ap, ai, i, j, k, a; + int16_t i, j, k, a; size_t result; songHeaderTyp h; patternHeaderTyp ph; @@ -41,9 +41,8 @@ bool saveXM(UNICHAR *filenameU) instrHeaderTyp ih; sampleTyp *s; sampleHeaderTyp *dst; - FILE *f; - f = UNICHAR_FOPEN(filenameU, "wb"); + FILE *f = UNICHAR_FOPEN(filenameU, "wb"); if (f == NULL) { okBoxThreadSafe(0, "System message", "Error opening file for saving, is it in use?"); @@ -64,7 +63,7 @@ bool saveXM(UNICHAR *filenameU) h.defSpeed = song.speed; // count number of patterns - ap = MAX_PATTERNS; + int16_t ap = MAX_PATTERNS; do { if (patternEmpty(ap - 1)) @@ -76,7 +75,7 @@ bool saveXM(UNICHAR *filenameU) h.antPtn = ap; // count number of instruments - ai = 128; + int16_t ai = 128; while (ai > 0 && getUsedSamples(ai) == 0 && song.instrName[ai][0] == '\0') ai--; h.antInstrs = ai; @@ -598,8 +597,6 @@ modSaveError: static int32_t SDLCALL saveMusicThread(void *ptr) { - (void)ptr; - assert(editor.tmpFilenameU != NULL); if (editor.tmpFilenameU == NULL) return false; @@ -613,6 +610,8 @@ static int32_t SDLCALL saveMusicThread(void *ptr) resumeAudio(); return true; + + (void)ptr; } void saveMusic(UNICHAR *filenameU) @@ -632,17 +631,17 @@ void saveMusic(UNICHAR *filenameU) static uint16_t packPatt(uint8_t *writePtr, uint8_t *pattPtr, uint16_t numRows) { - uint8_t bytes[5], packBits, *firstBytePtr; - uint16_t totalPackLen; - - totalPackLen = 0; + uint8_t bytes[5]; if (pattPtr == NULL) return 0; - for (uint16_t row = 0; row < numRows; row++) + uint16_t totalPackLen = 0; + + const int32_t pitch = sizeof (tonTyp) * (MAX_VOICES - song.antChn); + for (int32_t row = 0; row < numRows; row++) { - for (uint16_t chn = 0; chn < song.antChn; chn++) + for (int32_t chn = 0; chn < song.antChn; chn++) { bytes[0] = *pattPtr++; bytes[1] = *pattPtr++; @@ -650,9 +649,9 @@ static uint16_t packPatt(uint8_t *writePtr, uint8_t *pattPtr, uint16_t numRows) bytes[3] = *pattPtr++; bytes[4] = *pattPtr++; - firstBytePtr = writePtr++; + uint8_t *firstBytePtr = writePtr++; - packBits = 0; + uint8_t packBits = 0; if (bytes[0] > 0) { packBits |= 1; *writePtr++ = bytes[0]; } // note if (bytes[1] > 0) { packBits |= 2; *writePtr++ = bytes[1]; } // instrument if (bytes[2] > 0) { packBits |= 4; *writePtr++ = bytes[2]; } // volume column @@ -682,7 +681,7 @@ static uint16_t packPatt(uint8_t *writePtr, uint8_t *pattPtr, uint16_t numRows) } // skip unused channels (unpacked patterns always have 32 channels) - pattPtr += sizeof (tonTyp) * (MAX_VOICES - song.antChn); + pattPtr += pitch; } return totalPackLen; diff --git a/src/ft2_mouse.c b/src/ft2_mouse.c @@ -45,7 +45,7 @@ static bool setSystemCursor(SDL_Cursor *cur) void freeMouseCursors(void) { SDL_SetCursor(SDL_GetDefaultCursor()); - for (uint32_t i = 0; i < NUM_CURSORS; i++) + for (int32_t i = 0; i < NUM_CURSORS; i++) { if (cursors[i] != NULL) { @@ -69,9 +69,9 @@ bool createMouseCursors(void) // creates scaled SDL surfaces for current mouse p default: break; } - for (uint32_t i = 0; i < NUM_CURSORS; i++) + for (int32_t i = 0; i < NUM_CURSORS; i++) { - int32_t scaleFactor = video.yScale; + const int32_t scaleFactor = video.yScale; SDL_Surface *surface = SDL_CreateRGBSurface(0, MOUSE_CURSOR_W*scaleFactor, MOUSE_CURSOR_H*scaleFactor, 32, 0, 0, 0, 0); if (surface == NULL) @@ -81,9 +81,9 @@ bool createMouseCursors(void) // creates scaled SDL surfaces for current mouse p return false; } - uint32_t colorkey = SDL_MapRGB(surface->format, 0x00, 0xFF, 0x00); // colorkey - uint32_t fg = SDL_MapRGB(surface->format, 0xFF, 0xFF, 0xFF); // foreground - uint32_t border = SDL_MapRGB(surface->format, 0x00, 0x00, 0x00); // border + const uint32_t colorkey = SDL_MapRGB(surface->format, 0x00, 0xFF, 0x00); // colorkey + const uint32_t fg = SDL_MapRGB(surface->format, 0xFF, 0xFF, 0xFF); // foreground + const uint32_t border = SDL_MapRGB(surface->format, 0x00, 0x00, 0x00); // border SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_NONE); SDL_SetColorKey(surface, SDL_TRUE, colorkey); @@ -102,19 +102,19 @@ bool createMouseCursors(void) // creates scaled SDL surfaces for current mouse p SDL_LockSurface(surface); uint32_t *dstPixels32 = (uint32_t *)surface->pixels; - for (int32_t k = 0; k < surface->w*surface->h; k++) // fill surface with colorkey pixels dstPixels32[k] = colorkey; // blit upscaled cursor to surface - for (uint32_t y = 0; y < MOUSE_CURSOR_H; y++) + for (int32_t y = 0; y < MOUSE_CURSOR_H; y++) { uint32_t *outX = &dstPixels32[(y * scaleFactor) * surface->w]; for (int32_t yScale = 0; yScale < scaleFactor; yScale++) { + const uint8_t *srcPtr = &srcPixels8[y * MOUSE_CURSOR_W]; for (int32_t x = 0; x < MOUSE_CURSOR_W; x++) { - uint8_t srcPix = srcPixels8[(y * MOUSE_CURSOR_W) + x]; + const uint8_t srcPix = srcPtr[x]; if (srcPix != PAL_TRANSPR) { uint32_t pixel = colorkey; @@ -247,11 +247,11 @@ void setMouseShape(int16_t shape) gfxPtr = &bmp.mouseCursors[mouseModeGfxOffs]; switch (shape) { - case MOUSE_IDLE_SHAPE_NICE: gfxPtr += 0 * (MOUSE_CURSOR_W * MOUSE_CURSOR_H); break; - case MOUSE_IDLE_SHAPE_UGLY: gfxPtr += 1 * (MOUSE_CURSOR_W * MOUSE_CURSOR_H); break; - case MOUSE_IDLE_SHAPE_AWFUL: gfxPtr += 2 * (MOUSE_CURSOR_W * MOUSE_CURSOR_H); break; - case MOUSE_IDLE_SHAPE_USABLE: gfxPtr += 3 * (MOUSE_CURSOR_W * MOUSE_CURSOR_H); break; - case MOUSE_IDLE_TEXT_EDIT: gfxPtr += 12 * (MOUSE_CURSOR_W * MOUSE_CURSOR_H); break; + case MOUSE_IDLE_SHAPE_NICE: gfxPtr += 0 * (MOUSE_CURSOR_W * MOUSE_CURSOR_H); break; + case MOUSE_IDLE_SHAPE_UGLY: gfxPtr += 1 * (MOUSE_CURSOR_W * MOUSE_CURSOR_H); break; + case MOUSE_IDLE_SHAPE_AWFUL: gfxPtr += 2 * (MOUSE_CURSOR_W * MOUSE_CURSOR_H); break; + case MOUSE_IDLE_SHAPE_USABLE: gfxPtr += 3 * (MOUSE_CURSOR_W * MOUSE_CURSOR_H); break; + case MOUSE_IDLE_TEXT_EDIT: gfxPtr += 12 * (MOUSE_CURSOR_W * MOUSE_CURSOR_H); break; default: return; } } @@ -289,22 +289,21 @@ static void clearTextEditMouse(void) static void changeCursorIfOverTextBoxes(void) { - int32_t i, mx, my; - textBox_t *t; + int32_t i; mouse.mouseOverTextBox = false; if (editor.busy || mouse.mode != MOUSE_MODE_NORMAL) return; - mx = mouse.x; - my = mouse.y; + const int32_t mx = mouse.x; + const int32_t my = mouse.y; - for (i = 0; i < NUM_TEXTBOXES; i++) + textBox_t *t = textBoxes; + for (i = 0; i < NUM_TEXTBOXES; i++, t++) { if (ui.sysReqShown && i > 0) continue; - t = &textBoxes[i]; if (!t->visible) continue; @@ -378,12 +377,10 @@ void mouseAnimOff(void) static void mouseWheelDecRow(void) { - int16_t pattPos; - if (songPlaying) return; - pattPos = editor.pattPos - 1; + int16_t pattPos = editor.pattPos - 1; if (pattPos < 0) pattPos = pattLens[editor.editPattern] - 1; @@ -392,12 +389,10 @@ static void mouseWheelDecRow(void) static void mouseWheelIncRow(void) { - int16_t pattPos; - if (songPlaying) return; - pattPos = editor.pattPos + 1; + int16_t pattPos = editor.pattPos + 1; if (pattPos > (pattLens[editor.editPattern] - 1)) pattPos = 0; @@ -528,12 +523,10 @@ static bool testSamplerDataMouseDown(void) static bool testPatternDataMouseDown(void) { - uint16_t y1, y2; - if (ui.patternEditorShown) { - y1 = ui.extended ? 56 : 176; - y2 = ui.pattChanScrollShown ? 382 : 396; + const int32_t y1 = ui.extended ? 56 : 176; + const int32_t y2 = ui.pattChanScrollShown ? 382 : 396; if (mouse.y >= y1 && mouse.y <= y2 && mouse.x >= 29 && mouse.x <= 602) { @@ -726,7 +719,6 @@ static void sendMouseButtonUpEvent(uint8_t button) SDL_Event event; memset(&event, 0, sizeof (event)); - event.type = SDL_MOUSEBUTTONUP; event.button.button = button; @@ -802,20 +794,26 @@ void readMouseXY(void) } if (video.useDesktopMouseCoords) + { mouse.buttonState = SDL_GetGlobalMouseState(&mx, &my); + + // convert desktop coords to window coords + SDL_GetWindowPosition(video.window, &windowX, &windowY); + mx -= windowX; + my -= windowY; + } else + { + // special mode for KMSDRM (XXX: Confirm that this still works...) mouse.buttonState = SDL_GetMouseState(&mx, &my); + } if (video.fullscreen) { - /* If fullscreen without filtering mode, translate coords and warp mouse - ** inside the render space. - ** Fullscreen + filtering mode takes up 100% of the screen area used, so no - ** need to translate coords in that mode. - */ - + // centered fullscreen mode (not stretched) needs further coord translation if (!(config.specialFlags2 & STRETCH_IMAGE)) { + // if software mouse is enabled, warp mouse inside render space if (!(config.specialFlags2 & HARDWARE_MOUSE)) { bool warpMouse = false; @@ -851,16 +849,6 @@ void readMouseXY(void) my -= video.renderY; } } - else if (video.useDesktopMouseCoords) - { - // convert desktop coords to window coords - - // (a call to this function is really fast in windowed mode) - SDL_GetWindowPosition(video.window, &windowX, &windowY); - - mx -= windowX; - my -= windowY; - } // multiply coords by video upscaling factors (don't round) mouse.x = (int32_t)(mx * video.fMouseXMul); diff --git a/src/ft2_nibbles.c b/src/ft2_nibbles.c @@ -12,6 +12,8 @@ #include "ft2_tables.h" #include "ft2_structs.h" +#define STAGES_BMP_WIDTH 530 + #define NI_MAXLEVEL 30 static const char *NI_HelpText[] = @@ -86,8 +88,8 @@ static bool wallColorsAreCloseToBlack(void) { #define LUMINOSITY_THRESHOLD 4 - uint8_t wallColor1L = rgb24ToLuminosity(video.palette[PAL_DESKTOP]); - uint8_t wallColor2L = rgb24ToLuminosity(video.palette[PAL_BUTTONS]); + const uint8_t wallColor1L = rgb24ToLuminosity(video.palette[PAL_DESKTOP]); + const uint8_t wallColor2L = rgb24ToLuminosity(video.palette[PAL_BUTTONS]); /* Since the rest of the wall colors are based on lower and higher ** contrast values from these two primary colors, we don't really @@ -104,20 +106,17 @@ static bool wallColorsAreCloseToBlack(void) static void redrawNibblesScreen(void) { - uint8_t x, y, c; - int16_t xs, ys; - if (!editor.NI_Play) return; - for (x = 0; x < 51; x++) + for (int16_t x = 0; x < 51; x++) { - for (y = 0; y < 23; y++) + for (int16_t y = 0; y < 23; y++) { - xs = 152 + (x * 8); - ys = 7 + (y * 7); + const int16_t xs = 152 + (x * 8); + const int16_t ys = 7 + (y * 7); - c = NI_Screen[x][y]; + const uint8_t c = NI_Screen[x][y]; if (c < 16) { if (config.NI_Grid) @@ -153,9 +152,7 @@ static void redrawNibblesScreen(void) static void nibblesAddBuffer(int16_t nr, uint8_t typ) { - nibbleBufferTyp *n; - - n = &nibblesBuffer[nr]; + nibbleBufferTyp *n = &nibblesBuffer[nr]; if (n->antal < 8) { n->data[n->antal] = typ; @@ -170,13 +167,10 @@ static bool nibblesBufferFull(int16_t nr) static int16_t nibblesGetBuffer(int16_t nr) { - int16_t dataOut; - nibbleBufferTyp *n; - - n = &nibblesBuffer[nr]; + nibbleBufferTyp *n = &nibblesBuffer[nr]; if (n->antal > 0) { - dataOut = n->data[0]; + const int16_t dataOut = n->data[0]; memmove(&n->data[0], &n->data[1], 7); n->antal--; @@ -188,38 +182,39 @@ static int16_t nibblesGetBuffer(int16_t nr) static void nibblesGetLevel(int16_t nr) { - int16_t readX, readY, x, y; + const int32_t readX = 1 + ((51+2) * (nr % 10)); + const int32_t readY = 1 + ((23+2) * (nr / 10)); - readX = 1 + ((51+2) * (nr % 10)); - readY = 1 + ((23+2) * (nr / 10)); + const uint8_t *stagePtr = &bmp.nibblesStages[(readY * STAGES_BMP_WIDTH) + readX]; - for (x = 0; x < 51; x++) + for (int32_t y = 0; y < 23; y++) { - for (y = 0; y < 23; y++) - NI_Screen[x][y] = bmp.nibblesStages[((readY + y) * 530) + (readX + x)]; + for (int32_t x = 0; x < 51; x++) + NI_Screen[x][y] = stagePtr[x]; + + stagePtr += STAGES_BMP_WIDTH; } } static void nibblesCreateLevel(int16_t nr) { - uint8_t c; - int16_t x, y, x1, y1, x2, y2; - if (nr >= NI_MAXLEVEL) nr = NI_MAXLEVEL - 1; nibblesGetLevel(nr); - x1 = 0; x2 = 0; - y1 = 0; y2 = 0; + int32_t x1 = 0; + int32_t x2 = 0; + int32_t y1 = 0; + int32_t y2 = 0; - for (y = 0; y < 23; y++) + for (int32_t y = 0; y < 23; y++) { - for (x = 0; x < 51; x++) + for (int32_t x = 0; x < 51; x++) { if (NI_Screen[x][y] == 1 || NI_Screen[x][y] == 3) { - c = NI_Screen[x][y]; + const uint8_t c = NI_Screen[x][y]; if (c == 3) { @@ -238,11 +233,11 @@ static void nibblesCreateLevel(int16_t nr) } } - x = (51 + 2) * (nr % 10); - y = (23 + 2) * (nr / 10); + const int32_t readX = (51 + 2) * (nr % 10); + const int32_t readY = (23 + 2) * (nr / 10); - NI_P1Dir = bmp.nibblesStages[(y * 530) + (x + 1)]; - NI_P2Dir = bmp.nibblesStages[(y * 530) + (x + 0)]; + NI_P1Dir = bmp.nibblesStages[(readY * 530) + (readX + 1)]; + NI_P2Dir = bmp.nibblesStages[(readY * 530) + (readX + 0)]; NI_P1Len = 5; NI_P2Len = 5; @@ -252,7 +247,7 @@ static void nibblesCreateLevel(int16_t nr) nibblesBuffer[0].antal = 0; nibblesBuffer[1].antal = 0; - for (int16_t i = 0; i < 256; i++) + for (int32_t i = 0; i < 256; i++) { NI_P1[i].x = (uint8_t)x1; NI_P1[i].y = (uint8_t)y1; @@ -263,23 +258,19 @@ static void nibblesCreateLevel(int16_t nr) static void nibbleWriteLevelSprite(int16_t xOut, int16_t yOut, int16_t nr) { - uint8_t *src; - uint16_t readX, readY; - uint32_t *dst; + const int32_t readX = (51 + 2) * (nr % 10); + const int32_t readY = (23 + 2) * (nr / 10); - readX = (51 + 2) * (nr % 10); - readY = (23 + 2) * (nr / 10); + const uint8_t *src = (const uint8_t *)&bmp.nibblesStages[(readY * 530) + readX]; + uint32_t *dst = &video.frameBuffer[(yOut * SCREEN_W) + xOut]; - src = (uint8_t *)&bmp.nibblesStages[(readY * 530) + readX]; - dst = &video.frameBuffer[(yOut * SCREEN_W) + xOut]; - - for (uint16_t y = 0; y < 23+2; y++) + for (int32_t y = 0; y < 23+2; y++) { - for (uint16_t x = 0; x < 51+2; x++) - *dst++ = video.palette[*src++]; + for (int32_t x = 0; x < 51+2; x++) + dst[x] = video.palette[src[x]]; - src += 530 - (51+2); - dst += SCREEN_W - (51+2); + src += 530; + dst += SCREEN_W; } // overwrite start position pixels @@ -289,15 +280,12 @@ static void nibbleWriteLevelSprite(int16_t xOut, int16_t yOut, int16_t nr) static void highScoreTextOutClipX(uint16_t x, uint16_t y, uint8_t paletteIndex, uint8_t shadowPaletteIndex, const char *textPtr, uint16_t clipX) { - char ch; - uint16_t currX; - assert(textPtr != NULL); - currX = x; + uint16_t currX = x; for (uint16_t i = 0; i < 22; i++) { - ch = textPtr[i]; + const char ch = textPtr[i]; if (ch == '\0') break; @@ -335,10 +323,8 @@ void nibblesHighScore(void) static void setNibbleDot(uint8_t x, uint8_t y, uint8_t c) { - uint16_t xs, ys; - - xs = 152 + (x * 8); - ys = 7 + (y * 7); + const uint16_t xs = 152 + (x * 8); + const uint16_t ys = 7 + (y * 7); if (config.NI_Grid) { @@ -355,12 +341,10 @@ static void setNibbleDot(uint8_t x, uint8_t y, uint8_t c) static void nibblesGenNewNumber(void) { - int16_t x, y, xs, ys; - while (true) { - x = rand() % 51; - y = rand() % 23; + const int16_t x = rand() % 51; + const int16_t y = rand() % 23; bool blockIsSuitable; @@ -376,8 +360,8 @@ static void nibblesGenNewNumber(void) NI_NumberX = x; NI_NumberY = y; - xs = 152 + (x * 8); - ys = 7 + (y * 7); + const int16_t xs = 152 + (x * 8); + const int16_t ys = 7 + (y * 7); if (config.NI_Grid) { @@ -435,7 +419,7 @@ static void drawScoresLives(void) static void nibblesDecLives(int16_t l1, int16_t l2) { - char name[21 + 1]; + char name[21+1]; int16_t i, k; highScoreType *h; @@ -539,7 +523,7 @@ static void nibblesNewLevel(void) { char text[24]; - sprintf(text, "Level %d finished!", NI_Level + 1); + sprintf(text, "Level %d finished!", NI_Level+1); okBox(0, "Nibbles message", text); // cast to int16_t to simulate a bug in FT2 @@ -567,8 +551,6 @@ static void nibblesNewLevel(void) void moveNibblePlayers(void) { - int16_t i, j; - if (ui.sysReqShown || --NI_CurTick60Hz != 0) return; @@ -663,8 +645,8 @@ void moveNibblePlayers(void) } } - j = 0; - i = NI_Screen[NI_P1[0].x][NI_P1[0].y]; + int16_t j = 0; + int16_t i = NI_Screen[NI_P1[0].x][NI_P1[0].y]; if (i >= 16) { NI_P1Score += (i & 15) * 999 * (NI_Level + 1); @@ -876,7 +858,7 @@ void nibblesHelp(void) clearRect(152, 7, 409, 162); bigTextOut(160, 10, PAL_FORGRND, "Fasttracker Nibbles Help"); - for (uint8_t i = 0; i < NIBBLES_HELP_LINES; i++) + for (uint16_t i = 0; i < NIBBLES_HELP_LINES; i++) textOut(160, 36 + (11 * i), PAL_BUTTONS, NI_HelpText[i]); } diff --git a/src/ft2_palette.c b/src/ft2_palette.c @@ -94,13 +94,11 @@ uint8_t palMax(int32_t c) static void drawCurrentPaletteColor(void) { - uint8_t r, g, b, palIndex; + const uint8_t palIndex = FTC_EditOrder[cfg_ColorNr]; - palIndex = FTC_EditOrder[cfg_ColorNr]; - - r = P6_TO_P8(cfg_Red); - g = P6_TO_P8(cfg_Green); - b = P6_TO_P8(cfg_Blue); + const uint8_t r = P6_TO_P8(cfg_Red); + const uint8_t g = P6_TO_P8(cfg_Green); + const uint8_t b = P6_TO_P8(cfg_Blue); textOutShadow(516, 3, PAL_FORGRND, PAL_DSKTOP2, "Palette:"); hexOutBg(573, 3, PAL_FORGRND, PAL_DESKTOP, RGB32(r, g, b) & 0xFFFFFF, 6); @@ -110,7 +108,7 @@ static void drawCurrentPaletteColor(void) static void updatePaletteEditor(void) { - uint8_t nr = FTC_EditOrder[cfg_ColorNr]; + const uint8_t nr = FTC_EditOrder[cfg_ColorNr]; cfg_Red = palTable[config.cfg_StdPalNr][nr].r; cfg_Green = palTable[config.cfg_StdPalNr][nr].g; @@ -131,9 +129,6 @@ static void updatePaletteEditor(void) static void paletteDragMoved(void) { - uint8_t nr, p; - int16_t i, k; - if (config.cfg_StdPalNr != PAL_USER_DEFINED) { updatePaletteEditor(); // resets colors/contrast vars @@ -148,8 +143,8 @@ static void paletteDragMoved(void) return; } - nr = FTC_EditOrder[cfg_ColorNr]; - p = (uint8_t)config.cfg_StdPalNr; + const uint8_t nr = FTC_EditOrder[cfg_ColorNr]; + const uint8_t p = (uint8_t)config.cfg_StdPalNr; palTable[p][nr].r = cfg_Red; palTable[p][nr].g = cfg_Green; @@ -165,11 +160,11 @@ static void paletteDragMoved(void) if (contrast < 1) contrast = 1; - double dContrast = contrast * (1.0 / 40.0); + const double dContrast = contrast * (1.0 / 40.0); - for (i = 0; i < 3; i++) + for (int32_t i = 0; i < 3; i++) { - k = scaleOrder[i] + (cfg_ColorNr - 4) * 2; + const int32_t k = scaleOrder[i] + (cfg_ColorNr - 4) * 2; double dMul = palPow((i + 1) * (1.0 / 2.0), dContrast); diff --git a/src/ft2_pattern_draw.c b/src/ft2_pattern_draw.c @@ -46,25 +46,20 @@ static void drawNoteBig(uint32_t xPos, uint32_t yPos, int32_t ton, uint32_t colo void updatePattFontPtrs(void) { - //config.ptnFont is pre-clamped and safe + //config.ptnFont is pre-clamped and safe to use font4Ptr = &bmp.font4[config.ptnFont * (FONT4_WIDTH * FONT4_CHAR_H)]; font5Ptr = &bmp.font4[(4 + config.ptnFont) * (FONT4_WIDTH * FONT4_CHAR_H)]; } void drawPatternBorders(void) { - uint8_t chans; - uint16_t xOffs, chanWidth; - int32_t clearSize; - const pattCoord2_t *pattCoord; - // get heights/pos/rows depending on configuration - pattCoord = &pattCoord2Table[config.ptnUnpressed][ui.pattChanScrollShown][ui.extended]; + const pattCoord2_t *pattCoord = &pattCoord2Table[config.ptnUnpressed][ui.pattChanScrollShown][ui.extended]; // set pattern cursor Y position editor.ptnCursorY = pattCoord->lowerRowsY - 9; - chans = ui.numChannelsShown; + int32_t chans = ui.numChannelsShown; if (chans > ui.maxVisibleChannels) chans = ui.maxVisibleChannels; @@ -76,7 +71,7 @@ void drawPatternBorders(void) assert(chans >= 2 && chans <= 12); - chanWidth = chanWidths[(chans / 2) - 1] + 2; + const uint16_t chanWidth = chanWidths[(chans >> 1) - 1] + 2; // fill scrollbar framework (if needed) if (ui.pattChanScrollShown) @@ -131,8 +126,8 @@ void drawPatternBorders(void) drawFramework(604, pattCoord->lowerRowsY, 26, pattCoord->lowerRowsH, FRAMEWORK_TYPE2); // bottom right // draw channels - xOffs = 28; - for (uint8_t i = 0; i < chans; i++) + uint16_t xOffs = 28; + for (int32_t i = 0; i < chans; i++) { vLine(xOffs - 1, pattCoord->upperRowsY, pattCoord->upperRowsH, PAL_DESKTOP); vLine(xOffs - 1, pattCoord->lowerRowsY, pattCoord->lowerRowsH + 1, PAL_DESKTOP); @@ -152,12 +147,12 @@ void drawPatternBorders(void) if (ui.extended) { - clearSize = ui.pattChanScrollShown ? (SCREEN_W * sizeof (int32_t) * 330) : (SCREEN_W * sizeof (int32_t) * 347); + const int32_t clearSize = ui.pattChanScrollShown ? (SCREEN_W * sizeof (int32_t) * 330) : (SCREEN_W * sizeof (int32_t) * 347); memset(&video.frameBuffer[53 * SCREEN_W], 0, clearSize); } else { - clearSize = ui.pattChanScrollShown ? (SCREEN_W * sizeof(int32_t) * 210) : (SCREEN_W * sizeof(int32_t) * 227); + const int32_t clearSize = ui.pattChanScrollShown ? (SCREEN_W * sizeof(int32_t) * 210) : (SCREEN_W * sizeof(int32_t) * 227); memset(&video.frameBuffer[173 * SCREEN_W], 0, clearSize); } @@ -182,20 +177,18 @@ void drawPatternBorders(void) static void writeCursor(void) { - uint32_t *dstPtr, xPos, width, tabOffset; - - tabOffset = (config.ptnS3M * 32) + (columnModeTab[ui.numChannelsShown - 1] * 8) + cursor.object; + const int32_t tabOffset = (config.ptnS3M * 32) + (columnModeTab[ui.numChannelsShown-1] * 8) + cursor.object; - xPos = pattCursorXTab[tabOffset]; - width = pattCursorWTab[tabOffset]; + int32_t xPos = pattCursorXTab[tabOffset]; + const int32_t width = pattCursorWTab[tabOffset]; assert(editor.ptnCursorY > 0 && xPos > 0 && width > 0); xPos += ((cursor.ch - ui.channelOffset) * ui.patternChannelWidth); - dstPtr = &video.frameBuffer[(editor.ptnCursorY * SCREEN_W) + xPos]; - for (uint32_t y = 0; y < 9; y++) + uint32_t *dstPtr = &video.frameBuffer[(editor.ptnCursorY * SCREEN_W) + xPos]; + for (int32_t y = 0; y < 9; y++) { - for (uint32_t x = 0; x < width; x++) + for (int32_t x = 0; x < width; x++) dstPtr[x] = video.palette[(dstPtr[x] >> 24) ^ 4]; // ">> 24" to get palette, XOR 4 to change to cursor palette dstPtr += SCREEN_W; @@ -204,35 +197,33 @@ static void writeCursor(void) static void writePatternBlockMark(int32_t currRow, uint32_t rowHeight, const pattCoord_t *pattCoord) { - int32_t startCh, endCh, startRow, endRow, x1, x2, y1, y2, pattYStart, pattYEnd; - uint32_t w, h, *ptr32; - const markCoord_t *markCoord; + int32_t y1, y2; // this can happen (buggy FT2 code), treat like no mark if (pattMark.markY1 > pattMark.markY2) return; - startCh = ui.channelOffset; - endCh = ui.channelOffset + (ui.numChannelsShown - 1); - startRow = currRow - pattCoord->numUpperRows; - endRow = currRow + pattCoord->numLowerRows; + const int32_t startCh = ui.channelOffset; + const int32_t endCh = ui.channelOffset + (ui.numChannelsShown - 1); + const int32_t startRow = currRow - pattCoord->numUpperRows; + const int32_t endRow = currRow + pattCoord->numLowerRows; // test if pattern marking is outside of visible area (don't draw) if (pattMark.markX1 > endCh || pattMark.markX2 < startCh || pattMark.markY1 > endRow || pattMark.markY2 < startRow) return; - markCoord = &markCoordTable[config.ptnUnpressed][ui.pattChanScrollShown][ui.extended]; - pattYStart = markCoord->upperRowsY; + const markCoord_t *markCoord = &markCoordTable[config.ptnUnpressed][ui.pattChanScrollShown][ui.extended]; + const int32_t pattYStart = markCoord->upperRowsY; // X1 - x1 = 32 + ((pattMark.markX1 - ui.channelOffset) * ui.patternChannelWidth); + int32_t x1 = 32 + ((pattMark.markX1 - ui.channelOffset) * ui.patternChannelWidth); if (x1 < 32) x1 = 32; // X2 - x2 = (32 - 8) + (((pattMark.markX2 + 1) - ui.channelOffset) * ui.patternChannelWidth); + int32_t x2 = (32 - 8) + (((pattMark.markX2 + 1) - ui.channelOffset) * ui.patternChannelWidth); if (x2 > 608) x2 = 608; @@ -265,7 +256,7 @@ static void writePatternBlockMark(int32_t currRow, uint32_t rowHeight, const pat } else { - pattYEnd = markCoord->lowerRowsY + (pattCoord->numLowerRows * rowHeight); + const int32_t pattYEnd = markCoord->lowerRowsY + (pattCoord->numLowerRows * rowHeight); y2 = markCoord->lowerRowsY + ((pattMark.markY2 - (currRow + 1)) * rowHeight); if (y2 > pattYEnd) @@ -291,15 +282,15 @@ static void writePatternBlockMark(int32_t currRow, uint32_t rowHeight, const pat // pattern mark drawing - w = x2 - x1; - h = y2 - y1; + const int32_t w = x2 - x1; + const int32_t h = y2 - y1; assert(x1+w <= SCREEN_W && y1+h <= SCREEN_H); - ptr32 = &video.frameBuffer[(y1 * SCREEN_W) + x1]; - for (uint32_t y = 0; y < h; y++) + uint32_t *ptr32 = &video.frameBuffer[(y1 * SCREEN_W) + x1]; + for (int32_t y = 0; y < h; y++) { - for (uint32_t x = 0; x < w; x++) + for (int32_t x = 0; x < w; x++) ptr32[x] = video.palette[(ptr32[x] >> 24) ^ 2]; // ">> 24" to get palette of pixel, XOR 2 to change to mark palette ptr32 += SCREEN_W; @@ -308,9 +299,7 @@ static void writePatternBlockMark(int32_t currRow, uint32_t rowHeight, const pat static void drawChannelNumbering(uint16_t yPos) { -#define CH_NUM_XPOS 30 - - uint16_t xPos = CH_NUM_XPOS; + uint16_t xPos = 30; int32_t ch = ui.channelOffset + 1; for (uint8_t i = 0; i < ui.numChannelsShown; i++) @@ -335,8 +324,7 @@ static void drawRowNums(int32_t yPos, uint8_t row, bool selectedRowFlag) #define LEFT_ROW_XPOS 8 #define RIGHT_ROW_XPOS 608 - const uint8_t *src1Ptr, *src2Ptr; - uint32_t *dst1Ptr, *dst2Ptr, pixVal; + uint32_t pixVal; // set color based on some conditions if (selectedRowFlag) @@ -349,14 +337,14 @@ static void drawRowNums(int32_t yPos, uint8_t row, bool selectedRowFlag) if (!config.ptnHex) row = hex2Dec[row]; - src1Ptr = &font4Ptr[(row >> 4) * FONT4_CHAR_W]; - src2Ptr = &font4Ptr[(row & 0x0F) * FONT4_CHAR_W]; - dst1Ptr = &video.frameBuffer[(yPos * SCREEN_W) + LEFT_ROW_XPOS]; - dst2Ptr = dst1Ptr + (RIGHT_ROW_XPOS - LEFT_ROW_XPOS); + const uint8_t *src1Ptr = &font4Ptr[(row >> 4) * FONT4_CHAR_W]; + const uint8_t *src2Ptr = &font4Ptr[(row & 0x0F) * FONT4_CHAR_W]; + uint32_t *dst1Ptr = &video.frameBuffer[(yPos * SCREEN_W) + LEFT_ROW_XPOS]; + uint32_t *dst2Ptr = dst1Ptr + (RIGHT_ROW_XPOS - LEFT_ROW_XPOS); - for (uint32_t y = 0; y < FONT4_CHAR_H; y++) + for (int32_t y = 0; y < FONT4_CHAR_H; y++) { - for (uint32_t x = 0; x < FONT4_CHAR_W; x++) + for (int32_t x = 0; x < FONT4_CHAR_W; x++) { if (src1Ptr[x]) { @@ -408,7 +396,7 @@ static void showNoteNum(uint32_t xPos, uint32_t yPos, int16_t ton, uint32_t colo static void showInstrNum(uint32_t xPos, uint32_t yPos, uint8_t ins, uint32_t color) { - uint8_t chr1, chr2, charW, fontType; + uint8_t charW, fontType; if (ui.numChannelsShown <= 4) { @@ -436,8 +424,8 @@ static void showInstrNum(uint32_t xPos, uint32_t yPos, uint8_t ins, uint32_t col } else { - chr1 = ins >> 4; - chr2 = ins & 0x0F; + const uint8_t chr1 = ins >> 4; + const uint8_t chr2 = ins & 0x0F; if (chr1 > 0) pattCharOut(xPos, yPos, chr1, fontType, color); @@ -559,7 +547,7 @@ static void showNoteNumNoVolColumn(uint32_t xPos, uint32_t yPos, int16_t ton, ui static void showInstrNumNoVolColumn(uint32_t xPos, uint32_t yPos, uint8_t ins, uint32_t color) { - uint8_t chr1, chr2, charW, fontType; + uint8_t charW, fontType; if (ui.numChannelsShown <= 4) { @@ -593,8 +581,8 @@ static void showInstrNumNoVolColumn(uint32_t xPos, uint32_t yPos, uint8_t ins, u } else { - chr1 = ins >> 4; - chr2 = ins & 0x0F; + const uint8_t chr1 = ins >> 4; + const uint8_t chr2 = ins & 0x0F; if (chr1 > 0) pattCharOut(xPos, yPos, chr1, fontType, color); @@ -606,7 +594,6 @@ static void showInstrNumNoVolColumn(uint32_t xPos, uint32_t yPos, uint8_t ins, u static void showNoVolEfx(uint32_t xPos, uint32_t yPos, uint8_t vol, uint32_t color) { - // make compiler happy (void)xPos; (void)yPos; (void)vol; @@ -649,11 +636,8 @@ static void showEfxNoVolColumn(uint32_t xPos, uint32_t yPos, uint8_t effTyp, uin void writePattern(int32_t currRow, int32_t pattern) { - int32_t row, rowsOnScreen, numRows, afterCurrRow, numChannels; - int32_t textY, midRowTextY, lowerRowsTextY, xPos, xWidth; - uint32_t rowHeight, chanWidth, chans, noteTextColors[2], color; - tonTyp *note, *pattPtr; - const pattCoord_t *pattCoord; + uint32_t noteTextColors[2]; + void (*drawNote)(uint32_t, uint32_t, int16_t, uint32_t); void (*drawInst)(uint32_t, uint32_t, uint8_t, uint32_t); void (*drawVolEfx)(uint32_t, uint32_t, uint8_t, uint32_t); @@ -668,31 +652,30 @@ void writePattern(int32_t currRow, int32_t pattern) // setup variables - chans = ui.numChannelsShown; + uint32_t chans = ui.numChannelsShown; if (chans > ui.maxVisibleChannels) chans = ui.maxVisibleChannels; assert(chans >= 2 && chans <= 12); // get channel width - chanWidth = chanWidths[(chans / 2) - 1]; + const uint32_t chanWidth = chanWidths[(chans / 2) - 1]; ui.patternChannelWidth = (uint16_t)(chanWidth + 3); // get heights/pos/rows depending on configuration - rowHeight = config.ptnUnpressed ? 11 : 8; - pattCoord = &pattCoordTable[config.ptnUnpressed][ui.pattChanScrollShown][ui.extended]; - midRowTextY = pattCoord->midRowTextY; - lowerRowsTextY = pattCoord->lowerRowsTextY; - row = currRow - pattCoord->numUpperRows; - rowsOnScreen = pattCoord->numUpperRows + 1 + pattCoord->numLowerRows; - textY = pattCoord->upperRowsTextY; - - afterCurrRow = currRow + 1; - numChannels = ui.numChannelsShown; - pattPtr = patt[pattern]; - numRows = pattLens[pattern]; - noteTextColors[0] = video.palette[PAL_PATTEXT]; // not selected - noteTextColors[1] = video.palette[PAL_FORGRND]; // selected + uint32_t rowHeight = config.ptnUnpressed ? 11 : 8; + const pattCoord_t *pattCoord = &pattCoordTable[config.ptnUnpressed][ui.pattChanScrollShown][ui.extended]; + const int32_t midRowTextY = pattCoord->midRowTextY; + const int32_t lowerRowsTextY = pattCoord->lowerRowsTextY; + int32_t row = currRow - pattCoord->numUpperRows; + const int32_t rowsOnScreen = pattCoord->numUpperRows + 1 + pattCoord->numLowerRows; + int32_t textY = pattCoord->upperRowsTextY; + const int32_t afterCurrRow = currRow + 1; + const int32_t numChannels = ui.numChannelsShown; + tonTyp *pattPtr = patt[pattern]; + const int32_t numRows = pattLens[pattern]; + + // increment pattern data pointer by horizontal scrollbar offset/channel if (pattPtr != NULL) @@ -714,25 +697,24 @@ void writePattern(int32_t currRow, int32_t pattern) drawEfx = showEfxNoVolColumn; } + noteTextColors[0] = video.palette[PAL_PATTEXT]; // not selected + noteTextColors[1] = video.palette[PAL_FORGRND]; // selected + // draw pattern data for (int32_t i = 0; i < rowsOnScreen; i++) { if (row >= 0) { - bool selectedRowFlag = row == currRow; + const bool selectedRowFlag = (row == currRow); drawRowNums(textY, (uint8_t)row, selectedRowFlag); - - if (pattPtr == NULL) - note = emptyPattern; - else - note = &pattPtr[(uint32_t)row * MAX_VOICES]; - xPos = 29; - xWidth = ui.patternChannelWidth; + const tonTyp *note = (pattPtr == NULL) ? emptyPattern : &pattPtr[(uint32_t)row * MAX_VOICES]; + const int32_t xWidth = ui.patternChannelWidth; + const uint32_t color = noteTextColors[selectedRowFlag]; - color = noteTextColors[selectedRowFlag]; - for (int32_t j = 0; j < numChannels; j++) + int32_t xPos = 29; + for (int32_t j = 0; j < numChannels; j++, note++) { drawNote(xPos, textY, note->ton, color); drawInst(xPos, textY, note->instr, color); @@ -740,7 +722,6 @@ void writePattern(int32_t currRow, int32_t pattern) drawEfx(xPos, textY, note->effTyp, note->eff, color); xPos += xWidth; - note++; } } @@ -772,26 +753,20 @@ void writePattern(int32_t currRow, int32_t pattern) void pattTwoHexOut(uint32_t xPos, uint32_t yPos, uint8_t val, uint32_t color) { - const uint8_t *ch1Ptr, *ch2Ptr; - uint32_t *dstPtr; -#ifndef __arm__ - uint32_t tmp; -#endif - - ch1Ptr = &font4Ptr[(val >> 4) * FONT4_CHAR_W]; - ch2Ptr = &font4Ptr[(val & 0x0F) * FONT4_CHAR_W]; - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + const uint8_t *ch1Ptr = &font4Ptr[(val >> 4) * FONT4_CHAR_W]; + const uint8_t *ch2Ptr = &font4Ptr[(val & 0x0F) * FONT4_CHAR_W]; + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - for (uint32_t y = 0; y < FONT4_CHAR_H; y++) + for (int32_t y = 0; y < FONT4_CHAR_H; y++) { - for (uint32_t x = 0; x < FONT4_CHAR_W; x++) + for (int32_t x = 0; x < FONT4_CHAR_W; x++) { #ifdef __arm__ if (ch1Ptr[x] != 0) dstPtr[x] = color; if (ch2Ptr[x] != 0) dstPtr[FONT4_CHAR_W+x] = color; #else // carefully written like this to generate conditional move instructions (font data is hard to predict) - tmp = dstPtr[x]; + uint32_t tmp = dstPtr[x]; if (ch1Ptr[x] != 0) tmp = color; dstPtr[x] = tmp; @@ -810,12 +785,12 @@ void pattTwoHexOut(uint32_t xPos, uint32_t yPos, uint8_t val, uint32_t color) static void pattCharOut(uint32_t xPos, uint32_t yPos, uint8_t chr, uint8_t fontType, uint32_t color) { const uint8_t *srcPtr; - uint32_t x, y, *dstPtr; + int32_t x, y; #ifndef __arm__ uint32_t tmp; #endif - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; if (fontType == FONT_TYPE3) { @@ -909,25 +884,19 @@ static void pattCharOut(uint32_t xPos, uint32_t yPos, uint8_t chr, uint8_t fontT static void drawEmptyNoteSmall(uint32_t xPos, uint32_t yPos, uint32_t color) { - const uint8_t *srcPtr; - uint32_t *dstPtr; -#ifndef __arm__ - uint32_t tmp; -#endif - - srcPtr = &bmp.font7[18 * FONT7_CHAR_W]; - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + const uint8_t *srcPtr = &bmp.font7[18 * FONT7_CHAR_W]; + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - for (uint32_t y = 0; y < FONT7_CHAR_H; y++) + for (int32_t y = 0; y < FONT7_CHAR_H; y++) { - for (uint32_t x = 0; x < FONT7_CHAR_W*3; x++) + for (int32_t x = 0; x < FONT7_CHAR_W*3; x++) { #ifdef __arm__ if (srcPtr[x] != 0) dstPtr[x] = color; #else // carefully written like this to generate conditional move instructions (font data is hard to predict) - tmp = dstPtr[x]; + uint32_t tmp = dstPtr[x]; if (srcPtr[x] != 0) tmp = color; dstPtr[x] = tmp; #endif @@ -940,25 +909,19 @@ static void drawEmptyNoteSmall(uint32_t xPos, uint32_t yPos, uint32_t color) static void drawKeyOffSmall(uint32_t xPos, uint32_t yPos, uint32_t color) { - const uint8_t *srcPtr; - uint32_t *dstPtr; -#ifndef __arm__ - uint32_t tmp; -#endif + const uint8_t *srcPtr = &bmp.font7[21 * FONT7_CHAR_W]; + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + (xPos + 2)]; - srcPtr = &bmp.font7[21 * FONT7_CHAR_W]; - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + (xPos + 2)]; - - for (uint32_t y = 0; y < FONT7_CHAR_H; y++) + for (int32_t y = 0; y < FONT7_CHAR_H; y++) { - for (uint32_t x = 0; x < FONT7_CHAR_W*2; x++) + for (int32_t x = 0; x < FONT7_CHAR_W*2; x++) { #ifdef __arm__ if (srcPtr[x] != 0) dstPtr[x] = color; #else // carefully written like this to generate conditional move instructions (font data is hard to predict) - tmp = dstPtr[x]; + uint32_t tmp = dstPtr[x]; if (srcPtr[x] != 0) tmp = color; dstPtr[x] = tmp; #endif @@ -971,19 +934,13 @@ static void drawKeyOffSmall(uint32_t xPos, uint32_t yPos, uint32_t color) static void drawNoteSmall(uint32_t xPos, uint32_t yPos, int32_t ton, uint32_t color) { - const uint8_t *ch1Ptr, *ch2Ptr, *ch3Ptr; - uint8_t note; - uint32_t *dstPtr, char1, char2, char3; -#ifndef __arm__ - uint32_t tmp; -#endif + uint32_t char1, char2; assert(ton >= 1 && ton <= 97); - ton--; - note = noteTab1[ton]; - char3 = noteTab2[ton] * FONT7_CHAR_W; + const uint8_t note = noteTab1[ton]; + const uint32_t char3 = noteTab2[ton] * FONT7_CHAR_W; if (config.ptnAcc == 0) { @@ -996,14 +953,14 @@ static void drawNoteSmall(uint32_t xPos, uint32_t yPos, int32_t ton, uint32_t co char2 = flatNote2Char_small[note]; } - ch1Ptr = &bmp.font7[char1]; - ch2Ptr = &bmp.font7[char2]; - ch3Ptr = &bmp.font7[char3]; - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + const uint8_t *ch1Ptr = &bmp.font7[char1]; + const uint8_t *ch2Ptr = &bmp.font7[char2]; + const uint8_t *ch3Ptr = &bmp.font7[char3]; + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - for (uint32_t y = 0; y < FONT7_CHAR_H; y++) + for (int32_t y = 0; y < FONT7_CHAR_H; y++) { - for (uint32_t x = 0; x < FONT7_CHAR_W; x++) + for (int32_t x = 0; x < FONT7_CHAR_W; x++) { #ifdef __arm__ if (ch1Ptr[x] != 0) dstPtr[x] = color; @@ -1011,7 +968,7 @@ static void drawNoteSmall(uint32_t xPos, uint32_t yPos, int32_t ton, uint32_t co if (ch3Ptr[x] != 0) dstPtr[((FONT7_CHAR_W*2)-2)+x] = color; #else // carefully written like this to generate conditional move instructions (font data is hard to predict) - tmp = dstPtr[x]; + uint32_t tmp = dstPtr[x]; if (ch1Ptr[x] != 0) tmp = color; dstPtr[x] = tmp; @@ -1034,25 +991,19 @@ static void drawNoteSmall(uint32_t xPos, uint32_t yPos, int32_t ton, uint32_t co static void drawEmptyNoteMedium(uint32_t xPos, uint32_t yPos, uint32_t color) { - const uint8_t *srcPtr; - uint32_t *dstPtr; -#ifndef __arm__ - uint32_t tmp; -#endif + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + const uint8_t *srcPtr = &font4Ptr[43 * FONT4_CHAR_W]; - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - srcPtr = &font4Ptr[43 * FONT4_CHAR_W]; - - for (uint32_t y = 0; y < FONT4_CHAR_H; y++) + for (int32_t y = 0; y < FONT4_CHAR_H; y++) { - for (uint32_t x = 0; x < FONT4_CHAR_W*3; x++) + for (int32_t x = 0; x < FONT4_CHAR_W*3; x++) { #ifdef __arm__ if (srcPtr[x] != 0) dstPtr[x] = color; #else // carefully written like this to generate conditional move instructions (font data is hard to predict) - tmp = dstPtr[x]; + uint32_t tmp = dstPtr[x]; if (srcPtr[x] != 0) tmp = color; dstPtr[x] = tmp; #endif @@ -1065,25 +1016,19 @@ static void drawEmptyNoteMedium(uint32_t xPos, uint32_t yPos, uint32_t color) static void drawKeyOffMedium(uint32_t xPos, uint32_t yPos, uint32_t color) { - const uint8_t *srcPtr; - uint32_t *dstPtr; -#ifndef __arm__ - uint32_t tmp; -#endif - - srcPtr = &font4Ptr[40 * FONT4_CHAR_W]; - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + const uint8_t *srcPtr = &font4Ptr[40 * FONT4_CHAR_W]; + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - for (uint32_t y = 0; y < FONT4_CHAR_H; y++) + for (int32_t y = 0; y < FONT4_CHAR_H; y++) { - for (uint32_t x = 0; x < FONT4_CHAR_W*3; x++) + for (int32_t x = 0; x < FONT4_CHAR_W*3; x++) { #ifdef __arm__ if (srcPtr[x] != 0) dstPtr[x] = color; #else // carefully written like this to generate conditional move instructions (font data is hard to predict) - tmp = dstPtr[x]; + uint32_t tmp = dstPtr[x]; if (srcPtr[x] != 0) tmp = color; dstPtr[x] = tmp; #endif @@ -1096,16 +1041,12 @@ static void drawKeyOffMedium(uint32_t xPos, uint32_t yPos, uint32_t color) static void drawNoteMedium(uint32_t xPos, uint32_t yPos, int32_t ton, uint32_t color) { - const uint8_t *ch1Ptr, *ch2Ptr, *ch3Ptr; - uint32_t note, *dstPtr, char1, char2, char3; -#ifndef __arm__ - uint32_t tmp; -#endif + uint32_t char1, char2; ton--; - note = noteTab1[ton]; - char3 = noteTab2[ton] * FONT4_CHAR_W; + const uint8_t note = noteTab1[ton]; + const uint32_t char3 = noteTab2[ton] * FONT4_CHAR_W; if (config.ptnAcc == 0) { @@ -1118,14 +1059,14 @@ static void drawNoteMedium(uint32_t xPos, uint32_t yPos, int32_t ton, uint32_t c char2 = flatNote2Char_med[note]; } - ch1Ptr = &font4Ptr[char1]; - ch2Ptr = &font4Ptr[char2]; - ch3Ptr = &font4Ptr[char3]; - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + const uint8_t *ch1Ptr = &font4Ptr[char1]; + const uint8_t *ch2Ptr = &font4Ptr[char2]; + const uint8_t *ch3Ptr = &font4Ptr[char3]; + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - for (uint32_t y = 0; y < FONT4_CHAR_H; y++) + for (int32_t y = 0; y < FONT4_CHAR_H; y++) { - for (uint32_t x = 0; x < FONT4_CHAR_W; x++) + for (int32_t x = 0; x < FONT4_CHAR_W; x++) { #ifdef __arm__ if (ch1Ptr[x] != 0) dstPtr[x] = color; @@ -1133,7 +1074,7 @@ static void drawNoteMedium(uint32_t xPos, uint32_t yPos, int32_t ton, uint32_t c if (ch3Ptr[x] != 0) dstPtr[(FONT4_CHAR_W*2)+x] = color; #else // carefully written like this to generate conditional move instructions (font data is hard to predict) - tmp = dstPtr[x]; + uint32_t tmp = dstPtr[x]; if (ch1Ptr[x] != 0) tmp = color; dstPtr[x] = tmp; @@ -1156,25 +1097,19 @@ static void drawNoteMedium(uint32_t xPos, uint32_t yPos, int32_t ton, uint32_t c static void drawEmptyNoteBig(uint32_t xPos, uint32_t yPos, uint32_t color) { - const uint8_t *srcPtr; - uint32_t *dstPtr; -#ifndef __arm__ - uint32_t tmp; -#endif + const uint8_t *srcPtr = &font4Ptr[67 * FONT4_CHAR_W]; + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - srcPtr = &font4Ptr[67 * FONT4_CHAR_W]; - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - - for (uint32_t y = 0; y < FONT4_CHAR_H; y++) + for (int32_t y = 0; y < FONT4_CHAR_H; y++) { - for (uint32_t x = 0; x < FONT4_CHAR_W*6; x++) + for (int32_t x = 0; x < FONT4_CHAR_W*6; x++) { #ifdef __arm__ if (srcPtr[x] != 0) dstPtr[x] = color; #else // carefully written like this to generate conditional move instructions (font data is hard to predict) - tmp = dstPtr[x]; + uint32_t tmp = dstPtr[x]; if (srcPtr[x] != 0) tmp = color; dstPtr[x] = tmp; #endif @@ -1187,25 +1122,19 @@ static void drawEmptyNoteBig(uint32_t xPos, uint32_t yPos, uint32_t color) static void drawKeyOffBig(uint32_t xPos, uint32_t yPos, uint32_t color) { - const uint8_t *srcPtr; - uint32_t *dstPtr; -#ifndef __arm__ - uint32_t tmp; -#endif + const uint8_t *srcPtr = &bmp.font4[61 * FONT4_CHAR_W]; + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - srcPtr = &bmp.font4[61 * FONT4_CHAR_W]; - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - - for (uint32_t y = 0; y < FONT4_CHAR_H; y++) + for (int32_t y = 0; y < FONT4_CHAR_H; y++) { - for (uint32_t x = 0; x < FONT4_CHAR_W*6; x++) + for (int32_t x = 0; x < FONT4_CHAR_W*6; x++) { #ifdef __arm__ if (srcPtr[x] != 0) dstPtr[x] = color; #else // carefully written like this to generate conditional move instructions (font data is hard to predict) - tmp = dstPtr[x]; + uint32_t tmp = dstPtr[x]; if (srcPtr[x] != 0) tmp = color; dstPtr[x] = tmp; #endif @@ -1218,16 +1147,12 @@ static void drawKeyOffBig(uint32_t xPos, uint32_t yPos, uint32_t color) static void drawNoteBig(uint32_t xPos, uint32_t yPos, int32_t ton, uint32_t color) { - const uint8_t *ch1Ptr, *ch2Ptr, *ch3Ptr; - uint8_t note; - uint32_t *dstPtr, char1, char2, char3; -#ifndef __arm__ - uint32_t tmp; -#endif + uint32_t char1, char2; + ton--; - note = noteTab1[ton]; - char3 = noteTab2[ton] * FONT5_CHAR_W; + const uint8_t note = noteTab1[ton]; + const uint32_t char3 = noteTab2[ton] * FONT5_CHAR_W; if (config.ptnAcc == 0) { @@ -1240,14 +1165,14 @@ static void drawNoteBig(uint32_t xPos, uint32_t yPos, int32_t ton, uint32_t colo char2 = flatNote2Char_big[note]; } - ch1Ptr = &font5Ptr[char1]; - ch2Ptr = &font5Ptr[char2]; - ch3Ptr = &font5Ptr[char3]; - dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + const uint8_t *ch1Ptr = &font5Ptr[char1]; + const uint8_t *ch2Ptr = &font5Ptr[char2]; + const uint8_t *ch3Ptr = &font5Ptr[char3]; + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; - for (uint32_t y = 0; y < FONT5_CHAR_H; y++) + for (int32_t y = 0; y < FONT5_CHAR_H; y++) { - for (uint32_t x = 0; x < FONT5_CHAR_W; x++) + for (int32_t x = 0; x < FONT5_CHAR_W; x++) { #ifdef __arm__ if (ch1Ptr[x] != 0) dstPtr[x] = color; @@ -1255,7 +1180,7 @@ static void drawNoteBig(uint32_t xPos, uint32_t yPos, int32_t ton, uint32_t colo if (ch3Ptr[x] != 0) dstPtr[(FONT5_CHAR_W*2)+x] = color; #else // carefully written like this to generate conditional move instructions (font data is hard to predict) - tmp = dstPtr[x]; + uint32_t tmp = dstPtr[x]; if (ch1Ptr[x] != 0) tmp = color; dstPtr[x] = tmp; diff --git a/src/ft2_pattern_ed.c b/src/ft2_pattern_ed.c @@ -66,7 +66,6 @@ bool allocatePattern(uint16_t nr) // for tracker use only, not in loader! return false; } - // XXX: Do we really need this? Sounds redundant. song.pattLen = pattLens[nr]; } @@ -97,23 +96,11 @@ void killPatternIfUnused(uint16_t nr) // for tracker use only, not in loader! uint8_t getMaxVisibleChannels(void) { + assert(config.ptnMaxChannels >= 0 && config.ptnMaxChannels <= 3); if (config.ptnS3M) - { - if (config.ptnMaxChannels == 0) return 4; - else if (config.ptnMaxChannels == 1) return 6; - else if (config.ptnMaxChannels == 2) return 8; - else if (config.ptnMaxChannels == 3) return 8; - - } + return maxVisibleChans1[config.ptnMaxChannels]; else - { - if (config.ptnMaxChannels == 0) return 4; - else if (config.ptnMaxChannels == 1) return 6; - else if (config.ptnMaxChannels == 2) return 8; - else if (config.ptnMaxChannels == 3) return 12; - } - - return 8; + return maxVisibleChans2[config.ptnMaxChannels]; } void updatePatternWidth(void) @@ -499,7 +486,7 @@ void hidePatternEditor(void) static void updatePatternEditorGUI(void) { - uint8_t i; + uint16_t i; pushButton_t *p; textBox_t *t; @@ -508,10 +495,9 @@ static void updatePatternEditorGUI(void) // extended pattern editor // instrument names - for (i = 0; i < 8; i++) + t = &textBoxes[TB_INST1]; + for (i = 0; i < 8; i++, t++) { - t = &textBoxes[TB_INST1+i]; - if (i < 4) { t->x = 406; @@ -557,10 +543,9 @@ static void updatePatternEditorGUI(void) pushButtons[PB_PATTLEN_DOWN].y = 37; // instrument switcher - for (i = 0; i < 16; i++) + p = &pushButtons[PB_RANGE1]; + for (i = 0; i < 16; i++, p++) { - p = &pushButtons[PB_RANGE1+i]; - p->w = iSwitchExtW[i & 3]; p->x = iSwitchExtX[i & 3]; p->y = iSwitchExtY[i & 7]; @@ -569,10 +554,9 @@ static void updatePatternEditorGUI(void) else { // instrument names - for (i = 0; i < 8; i++) + t = &textBoxes[TB_INST1]; + for (i = 0; i < 8; i++, t++) { - t = &textBoxes[TB_INST1+i]; - t->y = 5 + (i * 11); t->x = 446; t->w = 140; @@ -611,10 +595,9 @@ static void updatePatternEditorGUI(void) pushButtons[PB_PATTLEN_DOWN].y = 48; // instrument switcher - for (i = 0; i < 16; i++) + p = &pushButtons[PB_RANGE1]; + for (i = 0; i < 16; i++, p++) { - p = &pushButtons[PB_RANGE1+i]; - p->w = 39; p->x = 590; p->y = iSwitchY[i & 7]; @@ -756,36 +739,31 @@ void clearPattMark(void) void checkMarkLimits(void) { - uint16_t limit; + const uint16_t limitY = pattLens[editor.editPattern]; + pattMark.markY1 = CLAMP(pattMark.markY1, 0, limitY); + pattMark.markY2 = CLAMP(pattMark.markY2, 0, limitY); - limit = pattLens[editor.editPattern]; - pattMark.markY1 = CLAMP(pattMark.markY1, 0, limit); - pattMark.markY2 = CLAMP(pattMark.markY2, 0, limit); + const uint16_t limitX = (uint16_t)(song.antChn - 1); + pattMark.markX1 = CLAMP(pattMark.markX1, 0, limitX); + pattMark.markX2 = CLAMP(pattMark.markX2, 0, limitX); - limit = (uint16_t)(song.antChn - 1); - pattMark.markX1 = CLAMP(pattMark.markX1, 0, limit); - pattMark.markX2 = CLAMP(pattMark.markX2, 0, limit); - - // will probably never happen? FT2 has this in CheckMarkLimits() though... + // XXX: will probably never happen? FT2 has this in CheckMarkLimits() though... if (pattMark.markX1 > pattMark.markX2) pattMark.markX1 = pattMark.markX2; } static int8_t mouseXToCh(void) // used to get channel num from mouse x (for pattern marking) { - int8_t ch, chEnd; - int32_t mouseX; - assert(ui.patternChannelWidth > 0); if (ui.patternChannelWidth == 0) return 0; - mouseX = mouse.x - 29; + int32_t mouseX = mouse.x - 29; mouseX = CLAMP(mouseX, 0, 573); - chEnd = (ui.channelOffset + ui.numChannelsShown) - 1; + const int8_t chEnd = (ui.channelOffset + ui.numChannelsShown) - 1; - ch = ui.channelOffset + (int8_t)(mouseX / ui.patternChannelWidth); + int8_t ch = ui.channelOffset + (int8_t)(mouseX / ui.patternChannelWidth); ch = CLAMP(ch, 0, chEnd); // in some setups there can be non-used channels to the right, do clamping @@ -797,23 +775,19 @@ static int8_t mouseXToCh(void) // used to get channel num from mouse x (for patt static int16_t mouseYToRow(void) // used to get row num from mouse y (for pattern marking) { - uint8_t charHeight, mode; - int16_t row, patternLen, my, maxY, maxRow; - const pattCoordsMouse_t *pattCoordsMouse; - - pattCoordsMouse = &pattCoordMouseTable[config.ptnUnpressed][ui.pattChanScrollShown][ui.extended]; + const pattCoordsMouse_t *pattCoordsMouse = &pattCoordMouseTable[config.ptnUnpressed][ui.pattChanScrollShown][ui.extended]; // clamp mouse y to boundaries - maxY = ui.pattChanScrollShown ? 382 : 396; - my = (int16_t)(CLAMP(mouse.y, pattCoordsMouse->upperRowsY, maxY)); + const int16_t maxY = ui.pattChanScrollShown ? 382 : 396; + const int16_t my = (int16_t)CLAMP(mouse.y, pattCoordsMouse->upperRowsY, maxY); - charHeight = config.ptnUnpressed ? 11 : 8; + const uint8_t charHeight = config.ptnUnpressed ? 11 : 8; // test top/middle/bottom rows if (my < pattCoordsMouse->midRowY) { // top rows - row = editor.pattPos - (pattCoordsMouse->numUpperRows - ((my - pattCoordsMouse->upperRowsY) / charHeight)); + int16_t row = editor.pattPos - (pattCoordsMouse->numUpperRows - ((my - pattCoordsMouse->upperRowsY) / charHeight)); if (row < 0) row = 0; @@ -827,17 +801,17 @@ static int16_t mouseYToRow(void) // used to get row num from mouse y (for patter else { // bottom rows - row = (editor.pattPos + 1) + ((my - pattCoordsMouse->lowerRowsY) / charHeight); + int16_t row = (editor.pattPos + 1) + ((my - pattCoordsMouse->lowerRowsY) / charHeight); // prevent being able to mark the next unseen row on the bottom (in some configurations) - mode = (ui.extended * 4) + (config.ptnUnpressed * 2) + ui.pattChanScrollShown; + const uint8_t mode = (ui.extended * 4) + (config.ptnUnpressed * 2) + ui.pattChanScrollShown; - maxRow = (ptnAntLine[mode] + (editor.pattPos - ptnLineSub[mode])) - 1; + const int16_t maxRow = (ptnAntLine[mode] + (editor.pattPos - ptnLineSub[mode])) - 1; if (row > maxRow) row = maxRow; // clamp to pattern length - patternLen = pattLens[editor.editPattern]; + const int16_t patternLen = pattLens[editor.editPattern]; if (row >= patternLen) row = patternLen - 1; @@ -847,9 +821,7 @@ static int16_t mouseYToRow(void) // used to get row num from mouse y (for patter void handlePatternDataMouseDown(bool mouseButtonHeld) { - bool forceMarking; - int8_t chTmp; - int16_t y1, y2, rowTmp, pattLen; + int16_t y1, y2; // non-FT2 feature: Use right mouse button to remove pattern marking if (mouse.rightButtonPressed) @@ -884,7 +856,7 @@ void handlePatternDataMouseDown(bool mouseButtonHeld) // we're holding down the mouse button inside the pattern data area - forceMarking = songPlaying; + bool forceMarking = songPlaying; // scroll left/right with mouse if (ui.pattChanScrollShown) @@ -906,7 +878,7 @@ void handlePatternDataMouseDown(bool mouseButtonHeld) { lastMouseX = mouse.x; - chTmp = mouseXToCh(); + int8_t chTmp = mouseXToCh(); if (chTmp < lastChMark) { pattMark.markX1 = chTmp; @@ -936,7 +908,6 @@ void handlePatternDataMouseDown(bool mouseButtonHeld) if (mouse.y < y1) { - pattLen = pattLens[editor.editPattern]; if (editor.pattPos > 0) setPos(-1, editor.pattPos - 1, true); @@ -945,8 +916,8 @@ void handlePatternDataMouseDown(bool mouseButtonHeld) } else if (mouse.y > y2) { - pattLen = pattLens[editor.editPattern]; - if (editor.pattPos < (pattLen - 1)) + const int16_t pattLen = pattLens[editor.editPattern]; + if (editor.pattPos < pattLen-1) setPos(-1, editor.pattPos + 1, true); forceMarking = true; @@ -959,7 +930,7 @@ void handlePatternDataMouseDown(bool mouseButtonHeld) { lastMouseY = mouse.y; - rowTmp = mouseYToRow(); + const int16_t rowTmp = mouseYToRow(); if (rowTmp < lastRowMark) { pattMark.markY1 = rowTmp; @@ -1062,11 +1033,8 @@ void rowDown(uint16_t amount) void keybPattMarkUp(void) { - int8_t xPos; - int16_t pattPos; - - xPos = cursor.ch; - pattPos = editor.pattPos; + int8_t xPos = cursor.ch; + int16_t pattPos = editor.pattPos; if (xPos != pattMark.markX1 && xPos != pattMark.markX2) { @@ -1099,11 +1067,8 @@ void keybPattMarkUp(void) void keybPattMarkDown(void) { - int8_t xPos; - int16_t pattPos; - - xPos = cursor.ch; - pattPos = editor.pattPos; + int8_t xPos = cursor.ch; + int16_t pattPos = editor.pattPos; if (xPos != pattMark.markX1 && xPos != pattMark.markX2) { @@ -1135,11 +1100,8 @@ void keybPattMarkDown(void) void keybPattMarkLeft(void) { - int8_t xPos; - int16_t pattPos; - - xPos = cursor.ch; - pattPos = editor.pattPos; + int8_t xPos = cursor.ch; + int16_t pattPos = editor.pattPos; if (pattPos != pattMark.markY1-1 && pattPos != pattMark.markY2) { @@ -1169,11 +1131,8 @@ void keybPattMarkLeft(void) void keybPattMarkRight(void) { - int8_t xPos; - int16_t pattPos; - - xPos = cursor.ch; - pattPos = editor.pattPos; + int8_t xPos = cursor.ch; + int16_t pattPos = editor.pattPos; if (pattPos != pattMark.markY1-1 && pattPos != pattMark.markY2) { @@ -1203,20 +1162,18 @@ void keybPattMarkRight(void) bool loadTrack(UNICHAR *filenameU) { - FILE *f; - uint16_t nr, pattLen; - tonTyp *pattPtr, loadBuff[MAX_PATT_LEN]; + tonTyp loadBuff[MAX_PATT_LEN]; trackHeaderType th; - f = UNICHAR_FOPEN(filenameU, "rb"); + FILE *f = UNICHAR_FOPEN(filenameU, "rb"); if (f == NULL) { okBox(0, "System message", "General I/O error during loading! Is the file in use?"); return false; } - nr = editor.editPattern; - pattLen = pattLens[nr]; + uint16_t nr = editor.editPattern; + int16_t pattLen = pattLens[nr]; if (fread(&th, 1, sizeof (th), f) != sizeof (th)) { @@ -1248,10 +1205,10 @@ bool loadTrack(UNICHAR *filenameU) goto trackLoadError; } - pattPtr = patt[nr]; + tonTyp *pattPtr = patt[nr]; lockMixerCallback(); - for (uint16_t i = 0; i < pattLen; i++) + for (int32_t i = 0; i < pattLen; i++) { pattPtr = &patt[nr][(i * MAX_VOICES) + cursor.ch]; *pattPtr = loadBuff[i]; @@ -1266,7 +1223,6 @@ bool loadTrack(UNICHAR *filenameU) pattPtr->eff = 0; } } - unlockMixerCallback(); fclose(f); @@ -1286,13 +1242,11 @@ trackLoadError: bool saveTrack(UNICHAR *filenameU) { - FILE *f; - uint16_t nr, pattLen, i; - tonTyp *pattPtr, saveBuff[MAX_PATT_LEN]; + tonTyp saveBuff[MAX_PATT_LEN]; trackHeaderType th; - nr = editor.editPattern; - pattPtr = patt[nr]; + uint16_t nr = editor.editPattern; + tonTyp *pattPtr = patt[nr]; if (pattPtr == NULL) { @@ -1300,15 +1254,15 @@ bool saveTrack(UNICHAR *filenameU) return false; } - f = UNICHAR_FOPEN(filenameU, "wb"); + FILE *f = UNICHAR_FOPEN(filenameU, "wb"); if (f == NULL) { okBox(0, "System message", "General I/O error during saving! Is the file in use?"); return false; } - pattLen = pattLens[nr]; - for (i = 0; i < pattLen; i++) + const int16_t pattLen = pattLens[nr]; + for (int32_t i = 0; i < pattLen; i++) saveBuff[i] = pattPtr[(i * MAX_VOICES) + cursor.ch]; th.len = pattLen; @@ -1334,19 +1288,16 @@ bool saveTrack(UNICHAR *filenameU) bool loadPattern(UNICHAR *filenameU) { - FILE *f; - uint16_t nr, pattLen; - tonTyp *pattPtr; patternHeaderType th; - f = UNICHAR_FOPEN(filenameU, "rb"); + FILE *f = UNICHAR_FOPEN(filenameU, "rb"); if (f == NULL) { okBox(0, "System message", "General I/O error during loading! Is the file in use?"); return false; } - nr = editor.editPattern; + uint16_t nr = editor.editPattern; if (!allocatePattern(nr)) { @@ -1354,8 +1305,8 @@ bool loadPattern(UNICHAR *filenameU) goto loadPattError; } - pattPtr = patt[nr]; - pattLen = pattLens[nr]; + tonTyp *pattPtr = patt[nr]; + uint16_t pattLen = pattLens[nr]; if (fread(&th, 1, sizeof (th), f) != sizeof (th)) { @@ -1372,8 +1323,7 @@ bool loadPattern(UNICHAR *filenameU) if (th.len > MAX_PATT_LEN) th.len = MAX_PATT_LEN; - if (pattLen > th.len) - pattLen = th.len; + pattLen = th.len; lockMixerCallback(); @@ -1385,9 +1335,9 @@ bool loadPattern(UNICHAR *filenameU) } // non-FT2 security fix: remove overflown (illegal) stuff - for (uint16_t i = 0; i < pattLen; i++) + for (int32_t i = 0; i < pattLen; i++) { - for (uint16_t j = 0; j < MAX_VOICES; j++) + for (int32_t j = 0; j < MAX_VOICES; j++) { pattPtr = &patt[nr][(i * MAX_VOICES) + j]; if (pattPtr->ton > 97) @@ -1401,6 +1351,16 @@ bool loadPattern(UNICHAR *filenameU) } } + // set new pattern length (FT2 doesn't do this, strange...) + pattLens[nr] = pattLen; + song.pattLen = pattLen; + if (song.pattPos >= pattLen) + { + song.pattPos = pattLen-1; + if (!songPlaying) + editor.pattPos = song.pattPos; + } + unlockMixerCallback(); fclose(f); @@ -1420,13 +1380,10 @@ loadPattError: bool savePattern(UNICHAR *filenameU) { - FILE *f; - uint16_t nr, pattLen; - tonTyp *pattPtr; patternHeaderType th; - nr = editor.editPattern; - pattPtr = patt[nr]; + uint16_t nr = editor.editPattern; + tonTyp *pattPtr = patt[nr]; if (pattPtr == NULL) { @@ -1434,14 +1391,14 @@ bool savePattern(UNICHAR *filenameU) return false; } - f = UNICHAR_FOPEN(filenameU, "wb"); + FILE *f = UNICHAR_FOPEN(filenameU, "wb"); if (f == NULL) { okBox(0, "System message", "General I/O error during saving! Is the file in use?"); return false; } - pattLen = pattLens[nr]; + uint16_t pattLen = pattLens[nr]; th.len = pattLen; th.ver = 1; @@ -1553,14 +1510,12 @@ void pbPosEdPosDown(void) void pbPosEdIns(void) { - uint8_t oldPatt; - if (song.len >= 255) return; lockMixerCallback(); - oldPatt = song.songTab[song.songPos]; + const uint8_t oldPatt = song.songTab[song.songPos]; for (uint16_t i = 0; i < 255-song.songPos; i++) song.songTab[255-i] = song.songTab[254-i]; song.songTab[song.songPos] = oldPatt; @@ -2014,13 +1969,6 @@ void pbPattLenDown(void) void drawPosEdNums(int16_t songPos) { - uint8_t y; - int16_t entry; - uint32_t color1, color2; - - color1 = video.palette[PAL_PATTEXT]; - color2 = video.palette[PAL_FORGRND]; - if (songPos >= song.len) songPos = song.len - 1; @@ -2038,10 +1986,13 @@ void drawPosEdNums(int16_t songPos) clearRect(8, 32, 39, 15); } + const uint32_t color1 = video.palette[PAL_PATTEXT]; + const uint32_t color2 = video.palette[PAL_FORGRND]; + // top two - for (y = 0; y < 2; y++) + for (int16_t y = 0; y < 2; y++) { - entry = songPos - (2 - y); + int16_t entry = songPos - (2 - y); if (entry < 0) continue; @@ -2074,9 +2025,9 @@ void drawPosEdNums(int16_t songPos) } // bottom two - for (y = 0; y < 2; y++) + for (int16_t y = 0; y < 2; y++) { - entry = songPos + (1 + y); + int16_t entry = songPos + (1 + y); if (entry >= song.len) break; @@ -2290,7 +2241,6 @@ void changeBadgeType(uint8_t badgeType) void updateInstrumentSwitcher(void) { - int8_t i; int16_t y; if (ui.aboutScreenShown || ui.configScreenShown || ui.helpScreenShown || ui.nibblesShown) @@ -2331,7 +2281,7 @@ void updateInstrumentSwitcher(void) } // draw numbers and texts - for (i = 0; i < 4; i++) + for (int16_t i = 0; i < 4; i++) { hexOut(388, 5 + (i * 11), PAL_FORGRND, 1 + editor.instrBankOffset + i, 2); hexOut(511, 5 + (i * 11), PAL_FORGRND, 5 + editor.instrBankOffset + i, 2); @@ -2363,7 +2313,7 @@ void updateInstrumentSwitcher(void) } // draw numbers and texts - for (i = 0; i < 8; i++) + for (int16_t i = 0; i < 8; i++) { hexOut(424, 5 + (i * 11), PAL_FORGRND, 1 + editor.instrBankOffset + i, 2); drawTextBox(TB_INST1 + i); @@ -2391,7 +2341,7 @@ void updateInstrumentSwitcher(void) } // draw numbers and texts - for (i = 0; i < 5; i++) + for (int16_t i = 0; i < 5; i++) { hexOut(424, 99 + (i * 11), PAL_FORGRND, editor.sampleBankOffset + i, 2); drawTextBox(TB_SAMP1 + i); @@ -2401,12 +2351,10 @@ void updateInstrumentSwitcher(void) void showInstrumentSwitcher(void) { - uint16_t i; - if (!ui.instrSwitcherShown) return; - for (i = 0; i < 8; i++) + for (uint16_t i = 0; i < 8; i++) showTextBox(TB_INST1 + i); if (ui.extended) @@ -2443,13 +2391,13 @@ void showInstrumentSwitcher(void) showPushButton(PB_SAMPLE_LIST_DOWN); showScrollBar(SB_SAMPLE_LIST); - for (i = 0; i < 5; i++) + for (uint16_t i = 0; i < 5; i++) showTextBox(TB_SAMP1 + i); } updateInstrumentSwitcher(); - for (i = 0; i < 8; i++) + for (uint16_t i = 0; i < 8; i++) showPushButton(PB_RANGE1 + i + (editor.instrBankSwapped * 8)); showPushButton(PB_SWAP_BANK); @@ -2457,9 +2405,7 @@ void showInstrumentSwitcher(void) void hideInstrumentSwitcher(void) { - uint8_t i; - - for (i = 0; i < 16; i++) + for (uint16_t i = 0; i < 16; i++) hidePushButton(PB_RANGE1 + i); hidePushButton(PB_SWAP_BANK); @@ -2467,10 +2413,10 @@ void hideInstrumentSwitcher(void) hidePushButton(PB_SAMPLE_LIST_DOWN); hideScrollBar(SB_SAMPLE_LIST); - for (i = 0; i < 8; i++) + for (uint16_t i = 0; i < 8; i++) hideTextBox(TB_INST1 + i); - for (i = 0; i < 5; i++) + for (uint16_t i = 0; i < 5; i++) hideTextBox(TB_SAMP1 + i); } @@ -2479,9 +2425,9 @@ void pbSwapInstrBank(void) editor.instrBankSwapped ^= 1; if (editor.instrBankSwapped) - editor.instrBankOffset += (8 * 8); + editor.instrBankOffset += 8*8; else - editor.instrBankOffset -= (8 * 8); + editor.instrBankOffset -= 8*8; updateTextBoxPointers(); @@ -2650,7 +2596,7 @@ static void zapSong(void) lockMixerCallback(); song.len = 1; - song.repS = 0; // Silly: FT2 doesn't do this! + song.repS = 0; // Bug: FT2 doesn't do this! song.speed = 125; song.tempo = 6; song.songPos = 0; @@ -2699,7 +2645,7 @@ static void zapInstrs(void) for (int16_t i = 1; i <= MAX_INST; i++) { freeInstr(i); - memset(song.instrName[i], 0, 22 + 1); + memset(song.instrName[i], 0, 22+1); } updateNewInstrument(); @@ -2719,7 +2665,7 @@ static void zapInstrs(void) void pbZap(void) { - int16_t choice = okBox(4, "System request", "Total devastation of the..."); + const int16_t choice = okBox(4, "System request", "Total devastation of the..."); if (choice == 1) // zap all { @@ -2779,35 +2725,32 @@ void resetChannelOffset(void) void shrinkPattern(void) { - uint16_t nr, pattLen; - tonTyp *pattPtr; - if (okBox(2, "System request", "Shrink pattern?") != 1) return; - nr = editor.editPattern; + uint16_t nr = editor.editPattern; - pattLen = pattLens[nr]; + int16_t pattLen = pattLens[nr]; if (pattLen > 1) { lockMixerCallback(); - pattPtr = patt[nr]; + tonTyp *pattPtr = patt[nr]; if (pattPtr != NULL) { - for (uint16_t i = 0; i < pattLen/2; i++) + for (int32_t i = 0; i < pattLen/2; i++) { - for (uint16_t j = 0; j < MAX_VOICES; j++) + for (int32_t j = 0; j < MAX_VOICES; j++) pattPtr[(i * MAX_VOICES) + j] = pattPtr[((i * 2) * MAX_VOICES) + j]; } } - pattLens[nr] /= 2; + pattLens[nr] >>= 1; if (song.pattNr == nr) song.pattLen = pattLens[nr]; - song.pattPos /= 2; + song.pattPos >>= 1; if (song.pattPos >= pattLens[nr]) song.pattPos = pattLens[nr] - 1; @@ -2823,12 +2766,9 @@ void shrinkPattern(void) void expandPattern(void) { - uint16_t nr, pattLen; - tonTyp *tmpPtn; - - nr = editor.editPattern; + uint16_t nr = editor.editPattern; - pattLen = pattLens[nr]; + int16_t pattLen = pattLens[nr]; if (pattLen > 128) { okBox(0, "System message", "Pattern is too long to be expanded."); @@ -2839,7 +2779,7 @@ void expandPattern(void) if (patt[nr] != NULL) { - tmpPtn = (tonTyp *)malloc((pattLen * 2) * TRACK_WIDTH); + tonTyp *tmpPtn = (tonTyp *)malloc((pattLen * 2) * TRACK_WIDTH); if (tmpPtn == NULL) { unlockMixerCallback(); @@ -2847,9 +2787,9 @@ void expandPattern(void) return; } - for (uint16_t i = 0; i < pattLen; i++) + for (int32_t i = 0; i < pattLen; i++) { - for (uint16_t j = 0; j < MAX_VOICES; j++) + for (int32_t j = 0; j < MAX_VOICES; j++) tmpPtn[((i * 2) * MAX_VOICES) + j] = patt[nr][(i * MAX_VOICES) + j]; memset(&tmpPtn[((i * 2) + 1) * MAX_VOICES], 0, TRACK_WIDTH); diff --git a/src/ft2_pushbuttons.c b/src/ft2_pushbuttons.c @@ -398,22 +398,20 @@ static uint32_t tmpCounter; void drawPushButton(uint16_t pushButtonID) { - uint8_t state; - uint16_t x, y, w, h, textX, textY, textW; - pushButton_t *b; + uint16_t textX, textY, textW; assert(pushButtonID < NUM_PUSHBUTTONS); - b = &pushButtons[pushButtonID]; + pushButton_t *b = &pushButtons[pushButtonID]; if (!b->visible) return; - state = b->state; + uint8_t state = b->state; - x = b->x; - y = b->y; - w = b->w; - h = b->h; + uint16_t x = b->x; + uint16_t y = b->y; + uint16_t w = b->w; + uint16_t h = b->h; assert(x < SCREEN_W && y < SCREEN_H && w >= 4 && h >= 4); @@ -497,10 +495,9 @@ void hidePushButton(uint16_t pushButtonID) void handlePushButtonsWhileMouseDown(void) { int8_t buttonDelay; - pushButton_t *pushButton; assert(mouse.lastUsedObjectID >= 0 && mouse.lastUsedObjectID < NUM_PUSHBUTTONS); - pushButton = &pushButtons[mouse.lastUsedObjectID]; + pushButton_t *pushButton = &pushButtons[mouse.lastUsedObjectID]; if (!pushButton->visible) return; @@ -550,7 +547,7 @@ void handlePushButtonsWhileMouseDown(void) { mouse.buttonCounter = 0; if (pushButton->callbackFuncOnDown != NULL) - pushButton->callbackFuncOnDown(); + pushButton->callbackFuncOnDown(); } } } @@ -558,7 +555,6 @@ void handlePushButtonsWhileMouseDown(void) bool testPushButtonMouseDown(void) { uint16_t start, end; - pushButton_t *pushButton; if (ui.sysReqShown) { @@ -572,9 +568,9 @@ bool testPushButtonMouseDown(void) end = NUM_PUSHBUTTONS; } - for (uint16_t i = start; i < end; i++) + pushButton_t *pushButton = &pushButtons[start]; + for (uint16_t i = start; i < end; i++, pushButton++) { - pushButton = &pushButtons[i]; if (!pushButton->visible) continue; @@ -605,13 +601,11 @@ bool testPushButtonMouseDown(void) int16_t testPushButtonMouseRelease(bool runCallback) { - pushButton_t *pushButton; - if (mouse.lastUsedObjectType != OBJECT_PUSHBUTTON || mouse.lastUsedObjectID == OBJECT_ID_NONE) return -1; assert(mouse.lastUsedObjectID < NUM_PUSHBUTTONS); - pushButton = &pushButtons[mouse.lastUsedObjectID]; + pushButton_t *pushButton = &pushButtons[mouse.lastUsedObjectID]; if (!pushButton->visible) return -1; diff --git a/src/ft2_radiobuttons.c b/src/ft2_radiobuttons.c @@ -222,17 +222,14 @@ radioButton_t radioButtons[NUM_RADIOBUTTONS] = void drawRadioButton(uint16_t radioButtonID) { - uint8_t *gfxPtr; - radioButton_t *radioButton; - assert(radioButtonID < NUM_RADIOBUTTONS); - radioButton = &radioButtons[radioButtonID]; + radioButton_t *radioButton = &radioButtons[radioButtonID]; if (!radioButton->visible) return; assert(radioButton->x < SCREEN_W && radioButton->y < SCREEN_H); - gfxPtr = &bmp.radiobuttonGfx[radioButton->state*(RADIOBUTTON_W*RADIOBUTTON_H)]; + const uint8_t *gfxPtr = &bmp.radiobuttonGfx[radioButton->state*(RADIOBUTTON_W*RADIOBUTTON_H)]; blitFast(radioButton->x, radioButton->y, gfxPtr, RADIOBUTTON_W, RADIOBUTTON_H); } @@ -252,16 +249,15 @@ void hideRadioButton(uint16_t radioButtonID) void checkRadioButton(uint16_t radioButtonID) { - radioButton_t *radioButton; - assert(radioButtonID < NUM_RADIOBUTTONS); - radioButton = &radioButtons[radioButtonID]; + const uint16_t testGroup = radioButtons[radioButtonID].group; - for (uint16_t i = 0; i < NUM_RADIOBUTTONS; i++) + radioButton_t *radioButton = radioButtons; + for (uint16_t i = 0; i < NUM_RADIOBUTTONS; i++, radioButton++) { - if (radioButtons[i].group == radioButton->group && radioButtons[i].state == RADIOBUTTON_CHECKED) + if (radioButton->group == testGroup && radioButton->state == RADIOBUTTON_CHECKED) { - radioButtons[i].state = RADIOBUTTON_UNCHECKED; + radioButton->state = RADIOBUTTON_UNCHECKED; drawRadioButton(i); break; } @@ -273,37 +269,38 @@ void checkRadioButton(uint16_t radioButtonID) void uncheckRadioButtonGroup(uint16_t radioButtonGroup) { - for (uint16_t i = 0; i < NUM_RADIOBUTTONS; i++) + radioButton_t *radioButton = radioButtons; + for (uint16_t i = 0; i < NUM_RADIOBUTTONS; i++, radioButton++) { - if (radioButtons[i].group == radioButtonGroup) - radioButtons[i].state = RADIOBUTTON_UNCHECKED; + if (radioButton->group == radioButtonGroup) + radioButton->state = RADIOBUTTON_UNCHECKED; } } void showRadioButtonGroup(uint16_t radioButtonGroup) { - for (uint16_t i = 0; i < NUM_RADIOBUTTONS; i++) + radioButton_t *radioButton = radioButtons; + for (uint16_t i = 0; i < NUM_RADIOBUTTONS; i++, radioButton++) { - if (radioButtons[i].group == radioButtonGroup) + if (radioButton->group == radioButtonGroup) showRadioButton(i); } } void hideRadioButtonGroup(uint16_t radioButtonGroup) { - for (uint16_t i = 0; i < NUM_RADIOBUTTONS; i++) + radioButton_t *radioButton = radioButtons; + for (uint16_t i = 0; i < NUM_RADIOBUTTONS; i++, radioButton++) { - if (radioButtons[i].group == radioButtonGroup) + if (radioButton->group == radioButtonGroup) hideRadioButton(i); } } void handleRadioButtonsWhileMouseDown(void) { - radioButton_t *radioButton; - assert(mouse.lastUsedObjectID >= 0 && mouse.lastUsedObjectID < NUM_RADIOBUTTONS); - radioButton = &radioButtons[mouse.lastUsedObjectID]; + radioButton_t *radioButton = &radioButtons[mouse.lastUsedObjectID]; if (!radioButton->visible || radioButton->state == RADIOBUTTON_CHECKED) return; @@ -325,19 +322,20 @@ void handleRadioButtonsWhileMouseDown(void) bool testRadioButtonMouseDown(void) { - radioButton_t *radioButton; - if (ui.sysReqShown) return false; - for (uint16_t i = 0; i < NUM_RADIOBUTTONS; i++) + const int32_t mx = mouse.x; + const int32_t my = mouse.y; + + radioButton_t *radioButton = radioButtons; + for (uint16_t i = 0; i < NUM_RADIOBUTTONS; i++, radioButton++) { - radioButton = &radioButtons[i]; if (!radioButton->visible || radioButton->state == RADIOBUTTON_CHECKED) continue; - if (mouse.x >= radioButton->x && mouse.x < radioButton->x+radioButton->clickAreaWidth && - mouse.y >= radioButton->y && mouse.y < radioButton->y+(RADIOBUTTON_H+1)) + if (mx >= radioButton->x && mx < radioButton->x+radioButton->clickAreaWidth && + my >= radioButton->y && my < radioButton->y+(RADIOBUTTON_H+1)) { mouse.lastUsedObjectID = i; mouse.lastUsedObjectType = OBJECT_RADIOBUTTON; @@ -350,13 +348,11 @@ bool testRadioButtonMouseDown(void) void testRadioButtonMouseRelease(void) { - radioButton_t *radioButton; - if (mouse.lastUsedObjectType != OBJECT_RADIOBUTTON || mouse.lastUsedObjectID == OBJECT_ID_NONE) return; assert(mouse.lastUsedObjectID < NUM_RADIOBUTTONS); - radioButton = &radioButtons[mouse.lastUsedObjectID]; + radioButton_t *radioButton = &radioButtons[mouse.lastUsedObjectID]; if (!radioButton->visible || radioButton->state == RADIOBUTTON_CHECKED) return; diff --git a/src/ft2_replayer.c b/src/ft2_replayer.c @@ -51,7 +51,7 @@ tonTyp *patt[MAX_PATTERNS]; void fixSongName(void) // removes spaces from right side of song name { - for (int16_t i = 20; i >= 0; i--) + for (int32_t i = 20; i >= 0; i--) { if (song.name[i] == ' ') song.name[i] = '\0'; @@ -62,10 +62,7 @@ void fixSongName(void) // removes spaces from right side of song name void fixSampleName(int16_t nr) // removes spaces from right side of ins/smp names { - int16_t i, j; - sampleTyp *s; - - for (i = 21; i >= 0; i--) + for (int32_t i = 21; i >= 0; i--) { if (song.instrName[nr][i] == ' ') song.instrName[nr][i] = '\0'; @@ -75,10 +72,10 @@ void fixSampleName(int16_t nr) // removes spaces from right side of ins/smp name if (instr[nr] != NULL) { - for (i = 0; i < MAX_SMP_PER_INST; i++) + sampleTyp *s = instr[nr]->samp; + for (int32_t i = 0; i < MAX_SMP_PER_INST; i++, s++) { - s = &instr[nr]->samp[i]; - for (j = 21; j >= 0; j--) + for (int16_t j = 21; j >= 0; j--) { if (s->name[j] == ' ') s->name[j] = '\0'; @@ -97,10 +94,10 @@ void resetChannels(void) lockAudio(); memset(stm, 0, sizeof (stm)); - for (int32_t i = 0; i < MAX_VOICES; i++) - { - stmTyp *ch = &stm[i]; + stmTyp *ch = stm; + for (int32_t i = 0; i < MAX_VOICES; i++, ch++) + { ch->instrPtr = instr[0]; ch->status = IS_Vol; ch->oldPan = 128; @@ -176,22 +173,19 @@ void setPatternLen(uint16_t nr, int16_t len) int16_t getUsedSamples(int16_t nr) { - int16_t i, j; - instrTyp *ins; - if (instr[nr] == NULL) return 0; - ins = instr[nr]; + instrTyp *ins = instr[nr]; - i = 16 - 1; + int16_t i = 16 - 1; while (i >= 0 && ins->samp[i].pek == NULL && ins->samp[i].name[0] == '\0') i--; /* Yes, 'i' can be -1 here, and will be set to at least 0 ** because of ins->ta values. Possibly an FT2 bug... */ - for (j = 0; j < 96; j++) + for (int16_t j = 0; j < 96; j++) { if (ins->ta[j] > i) i = ins->ta[j]; @@ -202,12 +196,10 @@ int16_t getUsedSamples(int16_t nr) int16_t getRealUsedSamples(int16_t nr) { - int8_t i; - if (instr[nr] == NULL) return 0; - i = 16 - 1; + int8_t i = 16 - 1; while (i >= 0 && instr[nr]->samp[i].pek == NULL) i--; @@ -245,7 +237,7 @@ static void calcPeriod2HzTable(void) // called every time "linear/amiga frequenc ** be beneficial if you are playing VERY tightly looped samples, and/or if the CPU has ** no DIV instruction (certain ARM CPUs, for instance). ** -** A bit hackish and extreme considering it's 65536*4 bytes, but that's My Game™ +** A bit hackish and extreme considering it's 65536*4 bytes long, but why not. */ void calcRevMixDeltaTable(void) { @@ -437,11 +429,6 @@ int32_t getPianoKey(uint16_t period, int32_t finetune, int32_t relativeNote) // static void startTone(uint8_t ton, uint8_t effTyp, uint8_t eff, stmTyp *ch) { - uint8_t smp; - uint16_t tmpTon; - sampleTyp *s; - instrTyp *ins; - if (ton == 97) { keyOff(ch); @@ -459,10 +446,9 @@ static void startTone(uint8_t ton, uint8_t effTyp, uint8_t eff, stmTyp *ch) ch->tonNr = ton; assert(ch->instrNr <= 130); - - ins = instr[ch->instrNr]; + instrTyp *ins = instr[ch->instrNr]; if (ins == NULL) - ins = instr[0]; + ins = instr[0]; // empty instruments use this placeholder instrument ch->instrPtr = ins; ch->mute = ins->mute; @@ -470,10 +456,10 @@ static void startTone(uint8_t ton, uint8_t effTyp, uint8_t eff, stmTyp *ch) if (ton > 96) // non-FT2 security (should never happen because I clamp in the patt. loader now) ton = 96; - smp = ins->ta[ton-1] & 0xF; + const uint8_t smp = ins->ta[ton-1] & 0xF; ch->sampleNr = smp; - s = &ins->samp[smp]; + sampleTyp *s = &ins->samp[smp]; ch->smpPtr = s; ch->relTonNr = s->relTon; @@ -491,7 +477,7 @@ static void startTone(uint8_t ton, uint8_t effTyp, uint8_t eff, stmTyp *ch) if (ton != 0) { - tmpTon = ((ton - 1) << 4) + (((ch->fineTune >> 3) + 16) & 0xFF); + const uint16_t tmpTon = ((ton - 1) << 4) + (((ch->fineTune >> 3) + 16) & 0xFF); if (tmpTon < MAX_NOTES) { assert(note2Period != NULL); @@ -1347,7 +1333,7 @@ static void fixaEnvelopeVibrato(stmTyp *ch) bool envInterpolateFlag, envDidInterpolate; uint8_t envPos; int16_t autoVibVal; - uint16_t tmpPeriod, autoVibAmp; + uint16_t autoVibAmp; double dVol, dEnvVal; instrTyp *ins = ch->instrPtr; @@ -1608,7 +1594,7 @@ static void fixaEnvelopeVibrato(stmTyp *ch) else autoVibVal = vibSineTab[ch->eVibPos]; // sine autoVibVal <<= 2; - tmpPeriod = (autoVibVal * (int16_t)autoVibAmp) >> 16; + uint16_t tmpPeriod = (autoVibVal * (int16_t)autoVibAmp) >> 16; tmpPeriod += ch->outPeriod; if (tmpPeriod > 32000-1) @@ -1639,17 +1625,17 @@ static void fixaEnvelopeVibrato(stmTyp *ch) // for arpeggio and portamento (semitone-slide mode) static uint16_t relocateTon(uint16_t period, uint8_t arpNote, stmTyp *ch) { - int32_t fineTune, loPeriod, hiPeriod, tmpPeriod, tableIndex; + int32_t tmpPeriod; - fineTune = ((ch->fineTune >> 3) + 16) << 1; - hiPeriod = (8 * 12 * 16) * 2; - loPeriod = 0; + const int32_t fineTune = ((ch->fineTune >> 3) + 16) << 1; + int32_t hiPeriod = (8 * 12 * 16) * 2; + int32_t loPeriod = 0; for (int32_t i = 0; i < 8; i++) { tmpPeriod = (((loPeriod + hiPeriod) >> 1) & 0xFFFFFFE0) + fineTune; - tableIndex = (uint32_t)(tmpPeriod - 16) >> 1; + int32_t tableIndex = (uint32_t)(tmpPeriod - 16) >> 1; tableIndex = CLAMP(tableIndex, 0, 1935); // 8bitbubsy: added security check if (period >= note2Period[tableIndex]) @@ -2323,54 +2309,50 @@ void setPos(int16_t songPos, int16_t pattPos, bool resetTimer) void delta2Samp(int8_t *p, int32_t len, uint8_t typ) { - int8_t *p8, news8, olds8L, olds8R; - int16_t *p16, news16, olds16L, olds16R, tmp16; - int32_t i, tmp32; - - if (typ & 16) len /= 2; // 16-bit - if (typ & 32) len /= 2; // stereo + if (typ & 16) len >>= 1; // 16-bit + if (typ & 32) len >>= 1; // stereo if (typ & 32) { if (typ & 16) { - p16 = (int16_t *)p; + int16_t *p16 = (int16_t *)p; - olds16L = 0; - olds16R = 0; + int16_t olds16L = 0; + int16_t olds16R = 0; - for (i = 0; i < len; i++) + for (int32_t i = 0; i < len; i++) { - news16 = p16[i] + olds16L; - p16[i] = news16; - olds16L = news16; + const int16_t news16L = p16[i] + olds16L; + p16[i] = news16L; + olds16L = news16L; - news16 = p16[len+i] + olds16R; - p16[len+i] = news16; - olds16R = news16; + const int16_t news16R = p16[len+i] + olds16R; + p16[len+i] = news16R; + olds16R = news16R; - tmp32 = olds16L + olds16R; + const int32_t tmp32 = olds16L + olds16R; p16[i] = (int16_t)(tmp32 >> 1); } } else { - p8 = (int8_t *)p; + int8_t *p8 = (int8_t *)p; - olds8L = 0; - olds8R = 0; + int8_t olds8L = 0; + int8_t olds8R = 0; - for (i = 0; i < len; i++) + for (int32_t i = 0; i < len; i++) { - news8 = p8[i] + olds8L; - p8[i] = news8; - olds8L = news8; + const int8_t news8L = p8[i] + olds8L; + p8[i] = news8L; + olds8L = news8L; - news8 = p8[len+i] + olds8R; - p8[len+i] = news8; - olds8R = news8; + const int8_t news8R = p8[len+i] + olds8R; + p8[len+i] = news8R; + olds8R = news8R; - tmp16 = olds8L + olds8R; + const int16_t tmp16 = olds8L + olds8R; p8[i] = (int8_t)(tmp16 >> 1); } } @@ -2379,24 +2361,24 @@ void delta2Samp(int8_t *p, int32_t len, uint8_t typ) { if (typ & 16) { - p16 = (int16_t *)p; + int16_t *p16 = (int16_t *)p; - olds16L = 0; - for (i = 0; i < len; i++) + int16_t olds16L = 0; + for (int32_t i = 0; i < len; i++) { - news16 = p16[i] + olds16L; + const int16_t news16 = p16[i] + olds16L; p16[i] = news16; olds16L = news16; } } else { - p8 = (int8_t *)p; + int8_t *p8 = (int8_t *)p; - olds8L = 0; - for (i = 0; i < len; i++) + int8_t olds8L = 0; + for (int32_t i = 0; i < len; i++) { - news8 = p8[i] + olds8L; + const int8_t news8 = p8[i] + olds8L; p8[i] = news8; olds8L = news8; } @@ -2406,32 +2388,29 @@ void delta2Samp(int8_t *p, int32_t len, uint8_t typ) void samp2Delta(int8_t *p, int32_t len, uint8_t typ) { - int8_t *p8, news8, olds8; - int16_t *p16, news16, olds16; - int32_t i; - - if (typ & 16) len /= 2; // 16-bit + if (typ & 16) + len >>= 1; // 16-bit if (typ & 16) { - p16 = (int16_t *)p; + int16_t *p16 = (int16_t *)p; - news16 = 0; - for (i = 0; i < len; i++) + int16_t news16 = 0; + for (int32_t i = 0; i < len; i++) { - olds16 = p16[i]; + const int16_t olds16 = p16[i]; p16[i] -= news16; news16 = olds16; } } else { - p8 = (int8_t *)p; + int8_t *p8 = (int8_t *)p; - news8 = 0; - for (i = 0; i < len; i++) + int8_t news8 = 0; + for (int32_t i = 0; i < len; i++) { - olds8 = p8[i]; + const int8_t olds8 = p8[i]; p8[i] -= news8; news8 = olds8; } @@ -2448,8 +2427,7 @@ bool allocateInstr(int16_t nr) return false; memset(p, 0, sizeof (instrTyp)); - - for (int32_t i = 0; i < MAX_SMP_PER_INST; i++) // set standard sample pan/vol + for (int32_t i = 0; i < MAX_SMP_PER_INST; i++) { p->samp[i].pan = 128; p->samp[i].vol = 64; @@ -2476,9 +2454,9 @@ void freeInstr(int32_t nr) pauseAudio(); // channel instrument pointers are now cleared - for (int32_t i = 0; i < MAX_SMP_PER_INST; i++) // free sample data + sampleTyp *s = instr[nr]->samp; + for (int32_t i = 0; i < MAX_SMP_PER_INST; i++, s++) // free sample data { - sampleTyp *s = &instr[nr]->samp[i]; if (s->origPek != NULL) free(s->origPek); } @@ -2492,13 +2470,13 @@ void freeInstr(int32_t nr) void freeAllInstr(void) { pauseAudio(); // channel instrument pointers are now cleared - for (int16_t i = 1; i <= MAX_INST; i++) + for (int32_t i = 1; i <= MAX_INST; i++) { if (instr[i] != NULL) { - for (int8_t j = 0; j < MAX_SMP_PER_INST; j++) // free sample data + sampleTyp *s = instr[i]->samp; + for (int32_t j = 0; j < MAX_SMP_PER_INST; j++, s++) // free sample data { - sampleTyp *s = &instr[i]->samp[j]; if (s->origPek != NULL) free(s->origPek); } @@ -2512,14 +2490,12 @@ void freeAllInstr(void) void freeSample(int16_t nr, int16_t nr2) { - sampleTyp *s; - if (instr[nr] == NULL) return; // instrument not allocated pauseAudio(); // voice sample pointers are now cleared - s = &instr[nr]->samp[nr2]; + sampleTyp *s = &instr[nr]->samp[nr2]; if (s->origPek != NULL) free(s->origPek); @@ -2534,7 +2510,7 @@ void freeSample(int16_t nr, int16_t nr2) void freeAllPatterns(void) { pauseAudio(); - for (uint16_t i = 0; i < MAX_PATTERNS; i++) + for (int32_t i = 0; i < MAX_PATTERNS; i++) { if (patt[i] != NULL) { @@ -2631,58 +2607,14 @@ void updateChanNums(void) { assert(!(song.antChn & 1)); - uint8_t pageLen = 8; - if (config.ptnS3M) - { - if (song.antChn == 2) pageLen = 4; - else if (song.antChn == 4) pageLen = 4; - else if (song.antChn == 6) pageLen = 6; - else if (song.antChn >= 8) pageLen = 8; - } - else - { - if (song.antChn == 2) pageLen = 4; - else if (song.antChn == 4) pageLen = 4; - else if (song.antChn == 6) pageLen = 6; - else if (song.antChn == 8) pageLen = 8; - else if (song.antChn == 10) pageLen = 10; - else if (song.antChn >= 12) pageLen = 12; - } - - ui.numChannelsShown = pageLen; - if (song.antChn == 2) - ui.numChannelsShown = 2; + const int32_t maxChannelsShown = getMaxVisibleChannels(); - if (config.ptnMaxChannels == 0) - { - if (ui.numChannelsShown > 4) - ui.numChannelsShown = 4; - } - else if (config.ptnMaxChannels == 1) - { - if (ui.numChannelsShown > 6) - ui.numChannelsShown = 6; - } - else if (config.ptnMaxChannels == 2) - { - if (ui.numChannelsShown > 8) - ui.numChannelsShown = 8; - } - else if (config.ptnMaxChannels == 3) - { - if (config.ptnS3M) - { - if (ui.numChannelsShown > 8) - ui.numChannelsShown = 8; - } - else - { - if (ui.numChannelsShown > 12) - ui.numChannelsShown = 12; - } - } + int32_t channelsShown = song.antChn; + if (channelsShown > maxChannelsShown) + channelsShown = maxChannelsShown; - ui.pattChanScrollShown = song.antChn > getMaxVisibleChannels(); + ui.numChannelsShown = (uint8_t)channelsShown; + ui.pattChanScrollShown = (song.antChn > maxChannelsShown); if (ui.patternEditorShown) { @@ -2719,58 +2651,50 @@ void updateChanNums(void) void conv8BitSample(int8_t *p, int32_t len, bool stereo) { - int8_t *p2, l, r; - int16_t tmp16; - int32_t i; - if (stereo) { len /= 2; - p2 = &p[len]; - for (i = 0; i < len; i++) + int8_t *p2 = &p[len]; + for (int32_t i = 0; i < len; i++) { - l = p[i] - 128; - r = p2[i] - 128; + const int8_t l = p[i] ^ 0x80; + const int8_t r = p2[i] ^ 0x80; - tmp16 = l + r; + int16_t tmp16 = l + r; p[i] = (int8_t)(tmp16 >> 1); } } else { - for (i = 0; i < len; i++) - p[i] -= 128; + for (int32_t i = 0; i < len; i++) + p[i] ^= 0x80; } } void conv16BitSample(int8_t *p, int32_t len, bool stereo) { - int16_t *p16_1, *p16_2, l, r; - int32_t i, tmp32; - - p16_1 = (int16_t *)p; - + int16_t *p16_1 = (int16_t *)p; len /= 2; if (stereo) { len /= 2; - p16_2 = (int16_t *)&p[len * 2]; - for (i = 0; i < len; i++) + int16_t *p16_2 = (int16_t *)&p[len * 2]; + for (int32_t i = 0; i < len; i++) { - l = p16_1[i] - 32768; - r = p16_2[i] - 32768; + const int16_t l = p16_1[i] ^ 0x8000; + const int16_t r = p16_2[i] ^ 0x8000; - tmp32 = l + r; + int32_t tmp32 = l + r; p16_1[i] = (int16_t)(tmp32 >> 1); } } else { - for (i = 0; i < len; i++) - p16_1[i] -= 32768; + for (int32_t i = 0; i < len; i++) + p16_1[i] ^= 0x8000; } } @@ -2804,28 +2728,24 @@ void closeReplayer(void) bool setupReplayer(void) { - int32_t i; - - for (i = 0; i < MAX_PATTERNS; i++) + for (int32_t i = 0; i < MAX_PATTERNS; i++) pattLens[i] = 64; playMode = PLAYMODE_IDLE; songPlaying = false; // unmute all channels (must be done before resetChannels() call) - for (i = 0; i < MAX_VOICES; i++) + for (int32_t i = 0; i < MAX_VOICES; i++) editor.chnMode[i] = 1; resetChannels(); song.len = 1; song.antChn = 8; - editor.speed = song.speed = 125; editor.tempo = song.tempo = 6; editor.globalVol = song.globVol = 64; song.initialTempo = song.tempo; - audio.linearFreqTable = true; note2Period = linearPeriods; @@ -2855,8 +2775,9 @@ bool setupReplayer(void) showErrorMsgBox("Not enough memory!"); return false; } + memset(instr[131], 0, sizeof (instrTyp)); - for (i = 0; i < 16; i++) + for (int32_t i = 0; i < 16; i++) instr[131]->samp[i].pan = 128; editor.tmpPattern = 65535; // pattern editor update/redraw kludge @@ -2868,7 +2789,6 @@ void startPlaying(int8_t mode, int16_t row) lockMixerCallback(); assert(mode != PLAYMODE_IDLE && mode != PLAYMODE_EDIT); - if (mode == PLAYMODE_PATT || mode == PLAYMODE_RECPATT) setPos(-1, row, true); else @@ -2894,10 +2814,7 @@ void startPlaying(int8_t mode, int16_t row) void stopPlaying(void) { - uint8_t i; - bool songWasPlaying; - - songWasPlaying = songPlaying; + bool songWasPlaying = songPlaying; playMode = PLAYMODE_IDLE; songPlaying = false; @@ -2909,7 +2826,7 @@ void stopPlaying(void) } else { - for (i = 0; i < MAX_VOICES; i++) + for (uint8_t i = 0; i < MAX_VOICES; i++) playTone(i, 0, 97, -1, 0, 0); } @@ -2936,15 +2853,12 @@ void stopPlaying(void) // from keyboard/smp. ed. void playTone(uint8_t stmm, uint8_t inst, uint8_t ton, int8_t vol, uint16_t midiVibDepth, uint16_t midiPitch) { - sampleTyp *s; - stmTyp *ch; instrTyp *ins = instr[inst]; - if (ins == NULL) return; assert(stmm < MAX_VOICES && inst <= MAX_INST && ton <= 97); - ch = &stm[stmm]; + stmTyp *ch = &stm[stmm]; // FT2 bugfix: Don't play tone if certain requirements are not met if (ton != 97) @@ -2952,7 +2866,7 @@ void playTone(uint8_t stmm, uint8_t inst, uint8_t ton, int8_t vol, uint16_t midi if (ton == 0 || ton > 96) return; - s = &ins->samp[ins->ta[ton-1] & 0xF]; + sampleTyp *s = &ins->samp[ins->ta[ton-1] & 0xF]; int16_t newTon = (int16_t)ton + s->relTon; if (s->pek == NULL || s->len == 0 || newTon <= 0 || newTon >= 12*10) @@ -2998,9 +2912,6 @@ void playTone(uint8_t stmm, uint8_t inst, uint8_t ton, int8_t vol, uint16_t midi // smp. ed. void playSample(uint8_t stmm, uint8_t inst, uint8_t smpNr, uint8_t ton, uint16_t midiVibDepth, uint16_t midiPitch) { - uint8_t vol; - stmTyp *ch; - if (instr[inst] == NULL) return; @@ -3011,11 +2922,11 @@ void playSample(uint8_t stmm, uint8_t inst, uint8_t smpNr, uint8_t ton, uint16_t editor.curPlaySmp = 255; assert(stmm < MAX_VOICES && inst <= MAX_INST && smpNr < MAX_SMP_PER_INST && ton <= 97); - ch = &stm[stmm]; + stmTyp *ch = &stm[stmm]; memcpy(&instr[130]->samp[0], &instr[inst]->samp[smpNr], sizeof (sampleTyp)); - vol = instr[inst]->samp[smpNr].vol; + uint8_t vol = instr[inst]->samp[smpNr].vol; lockAudio(); @@ -3052,11 +2963,6 @@ void playSample(uint8_t stmm, uint8_t inst, uint8_t smpNr, uint8_t ton, uint16_t // smp. ed. void playRange(uint8_t stmm, uint8_t inst, uint8_t smpNr, uint8_t ton, uint16_t midiVibDepth, uint16_t midiPitch, int32_t offs, int32_t len) { - uint8_t vol; - int32_t samplePlayOffset; - stmTyp *ch; - sampleTyp *s; - if (instr[inst] == NULL) return; @@ -3068,12 +2974,12 @@ void playRange(uint8_t stmm, uint8_t inst, uint8_t smpNr, uint8_t ton, uint16_t assert(stmm < MAX_VOICES && inst <= MAX_INST && smpNr < MAX_SMP_PER_INST && ton <= 97); - ch = &stm[stmm]; - s = &instr[130]->samp[0]; + stmTyp *ch = &stm[stmm]; + sampleTyp *s = &instr[130]->samp[0]; memcpy(s, &instr[inst]->samp[smpNr], sizeof (sampleTyp)); - vol = instr[inst]->samp[smpNr].vol; + uint8_t vol = instr[inst]->samp[smpNr].vol; if (s->typ & 16) { @@ -3088,7 +2994,7 @@ void playRange(uint8_t stmm, uint8_t inst, uint8_t smpNr, uint8_t ton, uint16_t s->repL = 0; s->typ &= 16; // only keep 8-bit/16-bit flag (disable loop) - samplePlayOffset = offs; + int32_t samplePlayOffset = offs; if (s->typ & 16) samplePlayOffset >>= 1; @@ -3130,10 +3036,9 @@ void stopVoices(void) if (audioWasntLocked) lockAudio(); - for (int32_t i = 0; i < MAX_VOICES; i++) + stmTyp *ch = stm; + for (int32_t i = 0; i < MAX_VOICES; i++, ch++) { - stmTyp *ch = &stm[i]; - lastChInstr[i].sampleNr = 255; lastChInstr[i].instrNr = 255; @@ -3324,14 +3229,13 @@ void pbRecPtn(void) void setSyncedReplayerVars(void) { uint8_t scopeUpdateStatus[MAX_VOICES]; - uint64_t frameTime64; pattSyncEntry = NULL; chSyncEntry = NULL; memset(scopeUpdateStatus, 0, sizeof (scopeUpdateStatus)); // this is needed - frameTime64 = SDL_GetPerformanceCounter(); + uint64_t frameTime64 = SDL_GetPerformanceCounter(); // handle channel sync queue diff --git a/src/ft2_sample_ed.c b/src/ft2_sample_ed.c @@ -460,10 +460,10 @@ void clearCopyBuffer(void) int32_t getSampleMiddleCRate(sampleTyp *s) { - int32_t realFineTune = (int32_t)s->fine >> 3; // the FT2 replayer is ASR'ing the finetune to the right by 3 - double dFTune = realFineTune * (1.0 / 16.0); // new range is -16..15 + const int32_t realFineTune = (int32_t)s->fine >> 3; // the FT2 replayer is ASR'ing the finetune to the right by 3 + const double dFTune = realFineTune / 16.0; // new range is -16..15 - double dFreq = 8363.0 * exp2((s->relTon + dFTune) * (1.0 / 12.0)); + const double dFreq = 8363.0 * exp2((s->relTon + dFTune) / 12.0); return (int32_t)(dFreq + 0.5); // rounded } @@ -501,20 +501,17 @@ static void updateScrPos(void) // sample pos -> screen x pos (if outside of visible area, will return <0 or >=SCREEN_W) static int32_t smpPos2Scr(int32_t pos) { - double dPos; - sampleTyp *s; - if (smpEd_ViewSize <= 0) return -1; - s = getCurSample(); + sampleTyp *s = getCurSample(); if (s == NULL) return -1; if (pos > s->len) pos = s->len; - dPos = (pos * dPos2ScrMul) + 0.5; // rounding is needed here (+ 0.5) + double dPos = (pos * dPos2ScrMul) + 0.5; // rounding is needed here (+ 0.5) dPos -= dScrPosScaled; // this is important, or else the result can mess up in some cases @@ -527,20 +524,17 @@ static int32_t smpPos2Scr(int32_t pos) // screen x pos -> sample pos static int32_t scr2SmpPos(int32_t x) { - double dPos; - sampleTyp *s; - if (smpEd_ViewSize <= 0) return 0; - s = getCurSample(); + sampleTyp *s = getCurSample(); if (s == NULL) return 0; if (x < 0) x = 0; - dPos = (dScrPosScaled + x) * dScr2SmpPosMul; + double dPos = (dScrPosScaled + x) * dScr2SmpPosMul; x = (int32_t)dPos; if (x > s->len) @@ -554,11 +548,9 @@ static int32_t scr2SmpPos(int32_t x) static void fixRepeatGadgets(void) { - int32_t repS, repE; - sampleTyp *s; bool showLoopPins = true; - s = getCurSample(); + sampleTyp *s = getCurSample(); if (s == NULL || s->len <= 0 || s->pek == NULL || (s->typ & 3) == 0 || !ui.sampleEditorShown) showLoopPins = false; @@ -578,8 +570,8 @@ static void fixRepeatGadgets(void) // draw sample loop points - repS = smpPos2Scr(curSmpRepS); - repE = smpPos2Scr(curSmpRepS+curSmpRepL); + int32_t repS = smpPos2Scr(curSmpRepS); + int32_t repE = smpPos2Scr(curSmpRepS+curSmpRepL); // do -8 test because part of the loop sprite sticks out on the left/right @@ -638,19 +630,12 @@ static bool getCopyBuffer(int32_t size) static int32_t SDLCALL copySampleThread(void *ptr) { - bool error; - int8_t *p; - int16_t destIns, destSmp, sourceIns, sourceSmp; - sampleTyp *src, *dst; - - (void)ptr; - - error = false; + bool error = false; - destIns = editor.curInstr; - destSmp = editor.curSmp; - sourceIns = editor.srcInstr; - sourceSmp = editor.srcSmp; + int16_t destIns = editor.curInstr; + int16_t destSmp = editor.curSmp; + int16_t sourceIns = editor.srcInstr; + int16_t sourceSmp = editor.srcSmp; pauseAudio(); @@ -661,12 +646,12 @@ static int32_t SDLCALL copySampleThread(void *ptr) { freeSample(destIns, destSmp); - src = &instr[sourceIns]->samp[sourceSmp]; - dst = &instr[destIns]->samp[destSmp]; + sampleTyp *src = &instr[sourceIns]->samp[sourceSmp]; + sampleTyp *dst = &instr[destIns]->samp[destSmp]; if (instr[sourceIns] != NULL && src->origPek != NULL) { - p = (int8_t *)malloc(src->len + LOOP_FIX_LEN); + int8_t *p = (int8_t *)malloc(src->len + LOOP_FIX_LEN); if (p != NULL) { memcpy(dst, src, sizeof (sampleTyp)); @@ -688,6 +673,8 @@ static int32_t SDLCALL copySampleThread(void *ptr) setMouseBusy(false); return true; + + (void)ptr; } void copySmp(void) // copy sample from srcInstr->srcSmp to curInstr->curSmp @@ -708,8 +695,6 @@ void copySmp(void) // copy sample from srcInstr->srcSmp to curInstr->curSmp void xchgSmp(void) // dstSmp <-> srcSmp { - sampleTyp *src, *dst, dstTmp; - if (editor.curInstr == 0 || (editor.curInstr == editor.srcInstr && editor.curSmp == editor.srcSmp) || instr[editor.curInstr] == NULL) @@ -717,11 +702,11 @@ void xchgSmp(void) // dstSmp <-> srcSmp return; } - src = &instr[editor.curInstr]->samp[editor.srcSmp]; - dst = &instr[editor.curInstr]->samp[editor.curSmp]; + sampleTyp *src = &instr[editor.curInstr]->samp[editor.srcSmp]; + sampleTyp *dst = &instr[editor.curInstr]->samp[editor.curSmp]; lockMixerCallback(); - dstTmp = *dst; + const sampleTyp dstTmp = *dst; *dst = *src; *src = dstTmp; unlockMixerCallback(); @@ -732,30 +717,27 @@ void xchgSmp(void) // dstSmp <-> srcSmp static void writeRange(void) { - int32_t start, end, rangeLen; - uint32_t *ptr32; - // very first sample (rx1=0,rx2=0) is the "no range" special case if (!ui.sampleEditorShown || smpEd_ViewSize == 0 || (smpEd_Rx1 == 0 && smpEd_Rx2 == 0)) return; // test if range is outside of view (passed it by scrolling) - start = smpPos2Scr(smpEd_Rx1); + int32_t start = smpPos2Scr(smpEd_Rx1); if (start >= SAMPLE_AREA_WIDTH) return; // test if range is outside of view (passed it by scrolling) - end = smpPos2Scr(smpEd_Rx2); + int32_t end = smpPos2Scr(smpEd_Rx2); if (end < 0) return; - start = CLAMP(start, 0, SAMPLE_AREA_WIDTH - 1); - end = CLAMP(end, 0, SAMPLE_AREA_WIDTH - 1); - rangeLen = (end + 1) - start; + start = CLAMP(start, 0, SAMPLE_AREA_WIDTH-1); + end = CLAMP(end, 0, SAMPLE_AREA_WIDTH-1); + int32_t rangeLen = (end + 1) - start; assert(start+rangeLen <= SCREEN_W); - ptr32 = &video.frameBuffer[(174 * SCREEN_W) + start]; + uint32_t *ptr32 = &video.frameBuffer[(174 * SCREEN_W) + start]; for (int32_t y = 0; y < SAMPLE_AREA_HEIGHT; y++) { for (int32_t x = 0; x < rangeLen; x++) @@ -768,7 +750,6 @@ static void writeRange(void) static int8_t getScaledSample(sampleTyp *s, int32_t index) // for drawing sample waveform in zoomed-in mode { int8_t sample; - int16_t *ptr16; int32_t tmp32; const int32_t loopEnd = s->repS + s->repL; @@ -781,7 +762,7 @@ static int8_t getScaledSample(sampleTyp *s, int32_t index) // for drawing sample assert(!(index & 1)); index >>= 1; - ptr16 = (int16_t *)s->pek; + int16_t *ptr16 = (int16_t *)s->pek; // don't read fixed mixer interpolation samples, read the prestine ones instead if (index >= s->fixedPos && index < s->fixedPos+SINC_RIGHT_TAPS && s->len > loopEnd && s->fixed) @@ -807,32 +788,26 @@ static int8_t getScaledSample(sampleTyp *s, int32_t index) // for drawing sample static void sampleLine(int16_t x1, int16_t x2, int16_t y1, int16_t y2) { - int16_t d, x, y, sx, sy, dx, dy; - uint16_t ax, ay; - int32_t pitch; - uint32_t pal1, pal2, pixVal, *dst32; - - // get coefficients - dx = x2 - x1; - ax = ABS(dx) * 2; - sx = SGN(dx); - dy = y2 - y1; - ay = ABS(dy) * 2; - sy = SGN(dy); - x = x1; - y = y1; - - pal1 = video.palette[PAL_DESKTOP]; - pal2 = video.palette[PAL_FORGRND]; - pixVal = video.palette[PAL_PATTEXT]; - pitch = sy * SCREEN_W; - - dst32 = &video.frameBuffer[(y * SCREEN_W) + x]; + int16_t d; + + const int16_t dx = x2 - x1; + const int16_t ax = ABS(dx) * 2; + const int16_t sx = SGN(dx); + const int16_t dy = y2 - y1; + const int16_t ay = ABS(dy) * 2; + const int16_t sy = SGN(dy); + int16_t x = x1; + int16_t y = y1; + const uint32_t pal1 = video.palette[PAL_DESKTOP]; + const uint32_t pal2 = video.palette[PAL_FORGRND]; + const uint32_t pixVal = video.palette[PAL_PATTEXT]; + const int32_t pitch = sy * SCREEN_W; + uint32_t *dst32 = &video.frameBuffer[(y * SCREEN_W) + x]; // draw line if (ax > ay) { - d = ay - (ax / 2); + d = ay - (ax >> 1); while (true) { @@ -861,7 +836,7 @@ static void sampleLine(int16_t x1, int16_t x2, int16_t y1, int16_t y2) } else { - d = ax - (ay / 2); + d = ax - (ay >> 1); while (true) { @@ -1072,12 +1047,12 @@ static void getMinMax8(const void *p, uint32_t scanLen, int8_t *min8, int8_t *ma // for scanning sample data peak where loopEnd+SINC_RIGHT_TAPS is within scan range (fixed interpolation tap samples) static void getSpecialMinMax16(sampleTyp *s, int32_t index, int32_t scanEnd, int16_t *min16, int16_t *max16) { - int16_t minVal, maxVal, minVal2, maxVal2; + int16_t minVal2, maxVal2; const int16_t *ptr16 = (const int16_t *)s->pek; - minVal = 32767; - maxVal = -32768; + int16_t minVal = 32767; + int16_t maxVal = -32768; // read samples before fixed samples (if needed) if (index < s->fixedPos) @@ -1117,12 +1092,12 @@ static void getSpecialMinMax16(sampleTyp *s, int32_t index, int32_t scanEnd, int // for scanning sample data peak where loopEnd+SINC_RIGHT_TAPS is within scan range (fixed interpolation tap samples) static void getSpecialMinMax8(sampleTyp *s, int32_t index, int32_t scanEnd, int8_t *min8, int8_t *max8) { - int8_t minVal, maxVal, minVal2, maxVal2; + int8_t minVal2, maxVal2; const int8_t *ptr8 = (const int8_t *)s->pek; - minVal = 127; - maxVal = -128; + int8_t minVal = 127; + int8_t maxVal = -128; // read samples before fixed samples (if needed) if (index < s->fixedPos) @@ -1226,10 +1201,7 @@ static void getSampleDataPeak(sampleTyp *s, int32_t index, int32_t numSamples, i static void writeWaveform(void) { - int16_t x, y1, y2, min, max, oldMin, oldMax; - int32_t smpIdx, smpNum, smpNumMin; - uint32_t viewSizeSamples; - sampleTyp *s; + int16_t y1, y2, min, max; // clear sample data area memset(&video.frameBuffer[174 * SCREEN_W], 0, SAMPLE_AREA_WIDTH * SAMPLE_AREA_HEIGHT * sizeof (int32_t)); @@ -1240,20 +1212,20 @@ static void writeWaveform(void) if (instr[editor.curInstr] == NULL || smpEd_ViewSize == 0) return; - s = &instr[editor.curInstr]->samp[editor.curSmp]; + sampleTyp *s = &instr[editor.curInstr]->samp[editor.curSmp]; if (s->pek == NULL || s->len == 0) return; y1 = SAMPLE_AREA_Y_CENTER - getScaledSample(s, scr2SmpPos(0)); - viewSizeSamples = smpEd_ViewSize; + uint32_t viewSizeSamples = smpEd_ViewSize; if (s->typ & 16) viewSizeSamples >>= 1; if (viewSizeSamples <= SAMPLE_AREA_WIDTH) { // 1:1 or zoomed in - for (x = 1; x < SAMPLE_AREA_WIDTH; x++) + for (int16_t x = 1; x < SAMPLE_AREA_WIDTH; x++) { y2 = SAMPLE_AREA_Y_CENTER - getScaledSample(s, scr2SmpPos(x)); sampleLine(x - 1, x, y1, y2); @@ -1264,14 +1236,14 @@ static void writeWaveform(void) { // zoomed out - oldMin = y1; - oldMax = y1; + int16_t oldMin = y1; + int16_t oldMax = y1; - smpNumMin = (s->typ & 16) ? 2 : 1; - for (x = 0; x < SAMPLE_AREA_WIDTH; x++) + int32_t smpNumMin = (s->typ & 16) ? 2 : 1; + for (int16_t x = 0; x < SAMPLE_AREA_WIDTH; x++) { - smpIdx = scr2SmpPos(x); - smpNum = scr2SmpPos(x+1) - smpIdx; + int32_t smpIdx = scr2SmpPos(x); + int32_t smpNum = scr2SmpPos(x+1) - smpIdx; // prevent look-up overflow (yes, this can happen near the end of the sample) if (smpIdx+smpNum > s->len) @@ -1398,8 +1370,6 @@ void writeSample(bool forceSmpRedraw) static void setSampleRange(int32_t start, int32_t end) { - sampleTyp *s; - if (instr[editor.curInstr] == NULL) { smpEd_Rx1 = 0; @@ -1407,7 +1377,7 @@ static void setSampleRange(int32_t start, int32_t end) return; } - s = &instr[editor.curInstr]->samp[editor.curSmp]; + sampleTyp *s = &instr[editor.curInstr]->samp[editor.curSmp]; if (start < 0) start = 0; @@ -1446,8 +1416,8 @@ void updateSampleEditorSample(void) void updateSampleEditor(void) { - char noteChar1, noteChar2, octaChar; - uint8_t note, typ; + char noteChar1, noteChar2; + uint8_t typ; int32_t sampleLen; if (!ui.sampleEditorShown) @@ -1489,7 +1459,7 @@ void updateSampleEditor(void) // draw sample play note - note = (editor.smpEd_NoteNr - 1) % 12; + const uint8_t note = (editor.smpEd_NoteNr - 1) % 12; if (config.ptnAcc == 0) { noteChar1 = sharpNote1Char[note]; @@ -1501,7 +1471,7 @@ void updateSampleEditor(void) noteChar2 = flatNote2Char[note]; } - octaChar = '0' + ((editor.smpEd_NoteNr - 1) / 12); + char octaChar = '0' + ((editor.smpEd_NoteNr - 1) / 12); charOutBg(7, 369, PAL_FORGRND, PAL_BCKGRND, noteChar1); charOutBg(15, 369, PAL_FORGRND, PAL_BCKGRND, noteChar2); @@ -1618,12 +1588,10 @@ void sampPlayRange(void) void showRange(void) { - sampleTyp *s; - if (editor.curInstr == 0 || instr[editor.curInstr] == NULL) return; - s = &instr[editor.curInstr]->samp[editor.curSmp]; + sampleTyp *s = &instr[editor.curInstr]->samp[editor.curSmp]; if (s->pek == NULL) return; @@ -1667,10 +1635,6 @@ void rangeAll(void) static void zoomSampleDataIn(int32_t step, int32_t x) { - int32_t tmp32, minViewSize; - int64_t newScrPos64; - sampleTyp *s; - if (editor.curInstr == 0 || instr[editor.curInstr] == NULL || instr[editor.curInstr]->samp[editor.curSmp].pek == NULL) @@ -1678,9 +1642,9 @@ static void zoomSampleDataIn(int32_t step, int32_t x) return; } - s = &instr[editor.curInstr]->samp[editor.curSmp]; + sampleTyp *s = &instr[editor.curInstr]->samp[editor.curSmp]; - minViewSize = (s->typ & 16) ? 4 : 2; + int32_t minViewSize = (s->typ & 16) ? 4 : 2; if (old_ViewSize <= minViewSize) return; @@ -1693,13 +1657,13 @@ static void zoomSampleDataIn(int32_t step, int32_t x) updateViewSize(); - tmp32 = (x - (SAMPLE_AREA_WIDTH / 2)) * step; + int32_t tmp32 = (x - (SAMPLE_AREA_WIDTH / 2)) * step; tmp32 += SAMPLE_AREA_WIDTH/4; // rounding bias tmp32 /= SAMPLE_AREA_WIDTH/2; step += tmp32; - newScrPos64 = old_SmpScrPos + step; + int64_t newScrPos64 = old_SmpScrPos + step; if (newScrPos64+smpEd_ViewSize > s->len) newScrPos64 = s->len - smpEd_ViewSize; @@ -1709,10 +1673,6 @@ static void zoomSampleDataIn(int32_t step, int32_t x) static void zoomSampleDataOut(int32_t step, int32_t x) { - int32_t tmp32; - int64_t newViewSize64; - sampleTyp *s; - if (editor.curInstr == 0 || instr[editor.curInstr] == NULL || instr[editor.curInstr]->samp[editor.curSmp].pek == NULL) @@ -1720,15 +1680,14 @@ static void zoomSampleDataOut(int32_t step, int32_t x) return; } - s = &instr[editor.curInstr]->samp[editor.curSmp]; - + sampleTyp *s = &instr[editor.curInstr]->samp[editor.curSmp]; if (old_ViewSize == s->len) return; if (step < 1) step = 1; - newViewSize64 = (int64_t)old_ViewSize + (step * 2); + int64_t newViewSize64 = (int64_t)old_ViewSize + (step * 2); if (newViewSize64 > s->len) { smpEd_ViewSize = s->len; @@ -1736,7 +1695,7 @@ static void zoomSampleDataOut(int32_t step, int32_t x) } else { - tmp32 = (x - (SAMPLE_AREA_WIDTH / 2)) * step; + int32_t tmp32 = (x - (SAMPLE_AREA_WIDTH / 2)) * step; tmp32 += SAMPLE_AREA_WIDTH/4; // rounding bias tmp32 /= SAMPLE_AREA_WIDTH/2; @@ -1765,7 +1724,7 @@ void mouseZoomSampleDataIn(void) return; } - zoomSampleDataIn((old_ViewSize + 5) / 10, mouse.x); + zoomSampleDataIn((old_ViewSize+5) / 10, mouse.x); } void mouseZoomSampleDataOut(void) @@ -1777,13 +1736,11 @@ void mouseZoomSampleDataOut(void) return; } - zoomSampleDataOut((old_ViewSize + 5) / 10, mouse.x); + zoomSampleDataOut((old_ViewSize+5) / 10, mouse.x); } void zoomOut(void) { - sampleTyp *s; - if (editor.curInstr == 0 || instr[editor.curInstr] == NULL || instr[editor.curInstr]->samp[editor.curSmp].pek == NULL) @@ -1791,8 +1748,7 @@ void zoomOut(void) return; } - s = &instr[editor.curInstr]->samp[editor.curSmp]; - + sampleTyp *s = &instr[editor.curInstr]->samp[editor.curSmp]; if (old_ViewSize == s->len) return; @@ -1837,8 +1793,6 @@ void showAll(void) void saveRange(void) { - UNICHAR *filenameU; - if (editor.curInstr == 0 || instr[editor.curInstr] == NULL || instr[editor.curInstr]->samp[editor.curSmp].pek == NULL) @@ -1881,7 +1835,7 @@ void saveRange(void) default: case SMP_SAVE_MODE_WAV: changeFilenameExt(smpEd_SysReqText, ".wav", sizeof (smpEd_SysReqText) - 1); break; } - filenameU = cp437ToUnichar(smpEd_SysReqText); + UNICHAR *filenameU = cp437ToUnichar(smpEd_SysReqText); if (filenameU == NULL) { okBox(0, "System message", "Error converting string locale!"); @@ -1894,10 +1848,7 @@ void saveRange(void) static bool cutRange(bool cropMode, int32_t r1, int32_t r2) { - int8_t *newPtr; - int32_t len, repE; sampleTyp *s = getCurSample(); - if (s == NULL) return false; @@ -1929,10 +1880,10 @@ static bool cutRange(bool cropMode, int32_t r1, int32_t r2) memmove(&s->pek[r1], &s->pek[r2], s->len - r2); - len = s->len - r2 + r1; + int32_t len = s->len - r2 + r1; if (len > 0) { - newPtr = (int8_t *)realloc(s->origPek, len + LOOP_FIX_LEN); + int8_t *newPtr = (int8_t *)realloc(s->origPek, len + LOOP_FIX_LEN); if (newPtr == NULL) { freeSample(editor.curInstr, editor.curSmp); @@ -1950,7 +1901,7 @@ static bool cutRange(bool cropMode, int32_t r1, int32_t r2) s->len = len; - repE = s->repS + s->repL; + int32_t repE = s->repS + s->repL; if (s->repS > r1) { s->repS -= r2 - r1; @@ -2010,20 +1961,19 @@ static bool cutRange(bool cropMode, int32_t r1, int32_t r2) static int32_t SDLCALL sampCutThread(void *ptr) { - (void)ptr; - if (!cutRange(false, smpEd_Rx1, smpEd_Rx2)) okBoxThreadSafe(0, "System message", "Not enough memory! (Disable \"cut to buffer\")"); else writeSampleFlag = true; return true; + + (void)ptr; } void sampCut(void) { sampleTyp *s = getCurSample(); - if (s == NULL || s->pek == NULL || s->len <= 0 || smpEd_Rx2 == 0 || smpEd_Rx2 < smpEd_Rx1) return; @@ -2041,9 +1991,6 @@ void sampCut(void) static int32_t SDLCALL sampCopyThread(void *ptr) { sampleTyp *s = getCurSample(); - - (void)ptr; - assert(s != NULL && (!(s->typ & 16) || (!(smpEd_Rx1 & 1) && !(smpEd_Rx2 & 1)))); if (!getCopyBuffer(smpEd_Rx2 - smpEd_Rx1)) @@ -2060,12 +2007,13 @@ static int32_t SDLCALL sampCopyThread(void *ptr) setMouseBusy(false); return true; + + (void)ptr; } void sampCopy(void) { sampleTyp *s = getCurSample(); - if (s == NULL || s->origPek == NULL || s->len <= 0 || smpEd_Rx2 == 0 || smpEd_Rx2 < smpEd_Rx1) return; @@ -2158,20 +2106,13 @@ static void pasteCopiedData(int8_t *pek, int32_t offset, int32_t length, bool sm static int32_t SDLCALL sampPasteThread(void *ptr) { - int8_t *p; - int32_t newLength, realCopyLen; - sampleTyp *s; - - (void)ptr; - if (instr[editor.curInstr] == NULL && !allocateInstr(editor.curInstr)) { okBoxThreadSafe(0, "System message", "Not enough memory!"); return true; } - s = getCurSample(); - + sampleTyp *s = getCurSample(); if (smpEd_Rx2 == 0 || s == NULL || s->pek == NULL) { pasteOverwrite(s); @@ -2179,7 +2120,6 @@ static int32_t SDLCALL sampPasteThread(void *ptr) } bool smpIs16Bit = (s->typ >> 4) & 1; - assert(!smpIs16Bit || (!(smpEd_Rx1 & 1) && !(smpEd_Rx2 & 1) && !(s->len & 1))); if (s->len+smpCopySize > MAX_SAMPLE_LEN) @@ -2188,7 +2128,7 @@ static int32_t SDLCALL sampPasteThread(void *ptr) return true; } - realCopyLen = smpCopySize; + int32_t realCopyLen = smpCopySize; if (smpIs16Bit) { @@ -2205,7 +2145,7 @@ static int32_t SDLCALL sampPasteThread(void *ptr) realCopyLen >>= 1; } - newLength = s->len + realCopyLen - (smpEd_Rx2 - smpEd_Rx1); + int32_t newLength = s->len + realCopyLen - (smpEd_Rx2 - smpEd_Rx1); if (newLength <= 0) return true; @@ -2215,7 +2155,7 @@ static int32_t SDLCALL sampPasteThread(void *ptr) return true; } - p = (int8_t *)malloc(newLength + LOOP_FIX_LEN); + int8_t *p = (int8_t *)malloc(newLength + LOOP_FIX_LEN); if (p == NULL) { okBoxThreadSafe(0, "System message", "Not enough memory!"); @@ -2293,6 +2233,8 @@ static int32_t SDLCALL sampPasteThread(void *ptr) writeSampleFlag = true; return true; + + (void)ptr; } void sampPaste(void) @@ -2323,15 +2265,11 @@ void sampPaste(void) static int32_t SDLCALL sampCropThread(void *ptr) { - int32_t r1, r2; sampleTyp *s = getCurSample(); - - (void)ptr; - assert(!(s->typ & 16) || (!(smpEd_Rx1 & 1) && !(smpEd_Rx2 & 1) && !(s->len & 1))); - r1 = smpEd_Rx1; - r2 = smpEd_Rx2; + int32_t r1 = smpEd_Rx1; + int32_t r2 = smpEd_Rx2; pauseAudio(); restoreSample(s); @@ -2360,12 +2298,13 @@ static int32_t SDLCALL sampCropThread(void *ptr) writeSampleFlag = true; return true; + + (void)ptr; } void sampCrop(void) { sampleTyp *s = getCurSample(); - if (s == NULL || s->pek == NULL || s->len <= 0 || smpEd_Rx1 >= smpEd_Rx2) return; @@ -2385,19 +2324,17 @@ void sampCrop(void) void sampXFade(void) { - bool is16Bit; - uint8_t t; - int16_t c ,d; - int32_t tmp32, i, x1, x2, y1, y2, a, b, d1, d2, d3, dist; + int16_t c, d; + int32_t tmp32, i, y1, y2, a, b, d1, d2, d3, dist; double dR, dS1, dS2, dS3, dS4; - sampleTyp *s = getCurSample(); + sampleTyp *s = getCurSample(); if (s == NULL || s->pek == NULL || s->len <= 0) return; assert(!(s->typ & 16) || (!(smpEd_Rx1 & 1) && !(smpEd_Rx2 & 1) && !(s->len & 1))); - t = s->typ; + uint8_t t = s->typ; // check if the sample has the loop flag enabled if ((t & 3) == 0) @@ -2420,10 +2357,10 @@ void sampXFade(void) return; } - x1 = smpEd_Rx1; - x2 = smpEd_Rx2; + int32_t x1 = smpEd_Rx1; + int32_t x2 = smpEd_Rx2; - is16Bit = (t & 16) ? true : false; + bool is16Bit = (t & 16) ? true : false; if ((t & 3) >= 2) { @@ -2657,7 +2594,6 @@ void sampXFade(void) void rbSampleNoLoop(void) { sampleTyp *s = getCurSample(); - if (s == NULL || s->pek == NULL || s->len <= 0) return; @@ -2677,7 +2613,6 @@ void rbSampleNoLoop(void) void rbSampleForwardLoop(void) { sampleTyp *s = getCurSample(); - if (s == NULL || s->pek == NULL || s->len <= 0) return; @@ -2685,7 +2620,6 @@ void rbSampleForwardLoop(void) restoreSample(s); s->typ = (s->typ & ~3) | 1; - if (s->repL+s->repS == 0) { s->repS = 0; @@ -2703,7 +2637,6 @@ void rbSampleForwardLoop(void) void rbSamplePingpongLoop(void) { sampleTyp *s = getCurSample(); - if (s == NULL || s->pek == NULL || s->len <= 0) return; @@ -2711,7 +2644,6 @@ void rbSamplePingpongLoop(void) restoreSample(s); s->typ = (s->typ & ~3) | 2; - if (s->repL+s->repS == 0) { s->repS = 0; @@ -2728,26 +2660,20 @@ void rbSamplePingpongLoop(void) static int32_t SDLCALL convSmp8Bit(void *ptr) { - int8_t *dst8, *newPtr; - int16_t *src16; - int32_t i, newLen; sampleTyp *s = getCurSample(); - (void)ptr; - pauseAudio(); restoreSample(s); - src16 = (int16_t *)s->pek; - dst8 = s->pek; + const int16_t *src16 = (const int16_t *)s->pek; + int32_t newLen = s->len >> 1; - newLen = s->len >> 1; - for (i = 0; i < newLen; i++) - dst8[i] = src16[i] >> 8; + for (int32_t i = 0; i < newLen; i++) + s->pek[i] = src16[i] >> 8; assert(s->origPek != NULL); - newPtr = (int8_t *)realloc(s->origPek, newLen + LOOP_FIX_LEN); + int8_t *newPtr = (int8_t *)realloc(s->origPek, newLen + LOOP_FIX_LEN); if (newPtr != NULL) { s->origPek = newPtr; @@ -2767,12 +2693,13 @@ static int32_t SDLCALL convSmp8Bit(void *ptr) setMouseBusy(false); return true; + + (void)ptr; } void rbSample8bit(void) { sampleTyp *s = getCurSample(); - if (s == NULL || s->pek == NULL || s->len <= 0) return; @@ -2807,19 +2734,14 @@ void rbSample8bit(void) static int32_t SDLCALL convSmp16Bit(void *ptr) { - int8_t *src8, *newPtr; - int16_t smp16, *dst16; - int32_t i; sampleTyp *s = getCurSample(); - (void)ptr; - pauseAudio(); restoreSample(s); assert(s->origPek != NULL); - newPtr = (int8_t *)realloc(s->origPek, (s->len * 2) + LOOP_FIX_LEN); + int8_t *newPtr = (int8_t *)realloc(s->origPek, (s->len * 2) + LOOP_FIX_LEN); if (newPtr == NULL) { okBoxThreadSafe(0, "System message", "Not enough memory!"); @@ -2831,14 +2753,9 @@ static int32_t SDLCALL convSmp16Bit(void *ptr) s->pek = s->origPek + SMP_DAT_OFFSET; } - src8 = s->pek; - dst16 = (int16_t *)s->pek; - - for (i = s->len-1; i >= 0; i--) - { - smp16 = src8[i] << 8; - dst16[i] = smp16; - } + int16_t *dst16 = (int16_t *)s->pek; + for (int32_t i = s->len-1; i >= 0; i--) + dst16[i] = s->pek[i] << 8; s->len <<= 1; s->repL <<= 1; @@ -2853,12 +2770,13 @@ static int32_t SDLCALL convSmp16Bit(void *ptr) setMouseBusy(false); return true; + + (void)ptr; } void rbSample16bit(void) { sampleTyp *s = getCurSample(); - if (s == NULL || s->pek == NULL || s->len <= 0) return; @@ -2899,7 +2817,6 @@ void rbSample16bit(void) void clearSample(void) { sampleTyp *s = getCurSample(); - if (s == NULL || s->pek == NULL || s->len <= 0) return; @@ -2913,9 +2830,7 @@ void clearSample(void) void sampMin(void) { - int8_t *newPtr; sampleTyp *s = getCurSample(); - if (s == NULL || s->pek == NULL || s->len <= 0) return; @@ -2929,7 +2844,7 @@ void sampMin(void) s->len = s->repS + s->repL; - newPtr = (int8_t *)realloc(s->origPek, s->len + LOOP_FIX_LEN); + int8_t *newPtr = (int8_t *)realloc(s->origPek, s->len + LOOP_FIX_LEN); if (newPtr != NULL) { s->origPek = newPtr; @@ -2948,9 +2863,9 @@ void sampMin(void) void sampRepeatUp(void) { - int32_t repS, repL, addVal, lenSub; - sampleTyp *s = getCurSample(); + int32_t addVal, lenSub; + sampleTyp *s = getCurSample(); if (s == NULL || s->pek == NULL || s->len <= 0) return; @@ -2965,8 +2880,8 @@ void sampRepeatUp(void) addVal = 1; } - repS = curSmpRepS; - repL = curSmpRepL; + int32_t repS = curSmpRepS; + int32_t repL = curSmpRepL; if (repS < s->len-lenSub) repS += addVal; @@ -2983,17 +2898,11 @@ void sampRepeatUp(void) void sampRepeatDown(void) { - int32_t repS; sampleTyp *s = getCurSample(); - if (s == NULL || s->pek == NULL || s->len <= 0) return; - if (s->typ & 16) - repS = curSmpRepS - 2; - else - repS = curSmpRepS - 1; - + int32_t repS = (s->typ & 16) ? curSmpRepS-2 : curSmpRepS-1; if (repS < 0) repS = 0; @@ -3005,17 +2914,11 @@ void sampRepeatDown(void) void sampReplenUp(void) { - int32_t repL; sampleTyp *s = getCurSample(); - if (s == NULL || s->pek == NULL || s->len <= 0) return; - if (s->typ & 16) - repL = curSmpRepL + 2; - else - repL = curSmpRepL + 1; - + int32_t repL = (s->typ & 16) ? curSmpRepL+2 : curSmpRepL+1; if (curSmpRepS+repL > s->len) repL = s->len - curSmpRepS; @@ -3028,8 +2931,8 @@ void sampReplenUp(void) void sampReplenDown(void) { int32_t repL; - sampleTyp *s = getCurSample(); + sampleTyp *s = getCurSample(); if (s == NULL || s->pek == NULL || s->len <= 0) return; @@ -3185,28 +3088,21 @@ void toggleSampleEditor(void) static void writeSmpXORLine(int32_t x) { - uint32_t *ptr32; - if (x < 0 || x >= SCREEN_W) return; - ptr32 = &video.frameBuffer[(174 * SCREEN_W) + x]; - for (int32_t y = 0; y < SAMPLE_AREA_HEIGHT; y++) - { + uint32_t *ptr32 = &video.frameBuffer[(174 * SCREEN_W) + x]; + for (int32_t y = 0; y < SAMPLE_AREA_HEIGHT; y++, ptr32 += SCREEN_W) *ptr32 = video.palette[(*ptr32 >> 24) ^ 1]; // ">> 24" to get palette, XOR 1 to switch between normal/inverted mode - ptr32 += SCREEN_W; - } } static void writeSamplePosLine(void) { uint8_t ins, smp; - int32_t smpPos, scrPos; - lastChInstr_t *c; assert(editor.curSmpChannel < MAX_VOICES); + lastChInstr_t *c = &lastChInstr[editor.curSmpChannel]; - c = &lastChInstr[editor.curSmpChannel]; if (c->instrNr == 130) // "Play Wave/Range/Display" in Smp. Ed. { ins = editor.curPlayInstr; @@ -3220,11 +3116,11 @@ static void writeSamplePosLine(void) if (editor.curInstr == ins && editor.curSmp == smp) { - smpPos = getSamplePosition(editor.curSmpChannel); + const int32_t smpPos = getSamplePosition(editor.curSmpChannel); if (smpPos != -1) { // convert sample position to screen position - scrPos = smpPos2Scr(smpPos); + const int32_t scrPos = smpPos2Scr(smpPos); if (scrPos != -1) { if (scrPos != smpEd_OldSmpPosLine) @@ -3267,16 +3163,13 @@ void handleSamplerRedrawing(void) static void setLeftLoopPinPos(int32_t x) { - int32_t repS, repL, newPos; sampleTyp *s = getCurSample(); - if (s == NULL || s->pek == NULL || s->len <= 0) return; - newPos = scr2SmpPos(x) - curSmpRepS; - - repS = curSmpRepS + newPos; - repL = curSmpRepL - newPos; + int32_t newPos = scr2SmpPos(x) - curSmpRepS; + int32_t repS = curSmpRepS + newPos; + int32_t repL = curSmpRepL - newPos; if (repS < 0) { @@ -3305,13 +3198,11 @@ static void setLeftLoopPinPos(int32_t x) static void setRightLoopPinPos(int32_t x) { - int32_t repL; sampleTyp *s = getCurSample(); - if (s == NULL || s->pek == NULL || s->len <= 0) return; - repL = scr2SmpPos(x) - curSmpRepS; + int32_t repL = scr2SmpPos(x) - curSmpRepS; if (repL < 0) repL = 0; @@ -3332,40 +3223,29 @@ static void setRightLoopPinPos(int32_t x) static int32_t mouseYToSampleY(int32_t my) { - int32_t tmp32; + my -= 174; // 0..SAMPLE_AREA_HEIGHT-1 - if (my == 250) // center - { - return 128; - } - else - { - tmp32 = my - 174; - tmp32 = ((tmp32 << 8) + (SAMPLE_AREA_HEIGHT/2)) / SAMPLE_AREA_HEIGHT; - tmp32 = CLAMP(tmp32, 0, 255); - tmp32 ^= 0xFF; - } + const double dTmp = round(my * (256.0 / SAMPLE_AREA_HEIGHT)); + const int32_t tmp32 = (const int32_t)dTmp; - return tmp32; + return 255 - CLAMP(tmp32, 0, 255); } static void editSampleData(bool mouseButtonHeld) { int8_t *ptr8; int16_t *ptr16; - int32_t mx, my, tmp32, p, vl, tvl, r, rl, rvl, start, end; - sampleTyp *s = getCurSample(); + int32_t tmp32, p, vl, tvl, r, rl, rvl, start, end; + sampleTyp *s = getCurSample(); if (s == NULL || s->pek == NULL || s->len <= 0) return; - // ported directly from FT2 and slightly modified - - mx = mouse.x; + int32_t mx = mouse.x; if (mx > SCREEN_W) mx = SCREEN_W; - my = mouse.y; + int32_t my = mouse.y; if (!mouseButtonHeld) { @@ -3521,13 +3401,11 @@ static void editSampleData(bool mouseButtonHeld) void handleSampleDataMouseDown(bool mouseButtonHeld) { - int32_t mx, my, leftLoopPinPos, rightLoopPinPos; - if (editor.curInstr == 0) return; - mx = CLAMP(mouse.x, 0, SCREEN_W+8); // allow some pixels outside of the screen - my = CLAMP(mouse.y, 0, SCREEN_H-1); + const int32_t mx = CLAMP(mouse.x, 0, SCREEN_W+8); // allow some pixels outside of the screen + const int32_t my = CLAMP(mouse.y, 0, SCREEN_H-1); if (!mouseButtonHeld) { @@ -3546,7 +3424,7 @@ void handleSampleDataMouseDown(bool mouseButtonHeld) // move loop pins if (my < 183) { - leftLoopPinPos = getSpritePosX(SPRITE_LEFT_LOOP_PIN); + const int32_t leftLoopPinPos = getSpritePosX(SPRITE_LEFT_LOOP_PIN); if (mx >= leftLoopPinPos && mx <= leftLoopPinPos+16) { mouseXOffs = (leftLoopPinPos + 8) - mx; @@ -3562,7 +3440,7 @@ void handleSampleDataMouseDown(bool mouseButtonHeld) } else if (my > 318) { - rightLoopPinPos = getSpritePosX(SPRITE_RIGHT_LOOP_PIN); + const int32_t rightLoopPinPos = getSpritePosX(SPRITE_RIGHT_LOOP_PIN); if (mx >= rightLoopPinPos && mx <= rightLoopPinPos+16) { mouseXOffs = (rightLoopPinPos + 8) - mx; @@ -3724,8 +3602,6 @@ static int32_t SDLCALL sampleBackwardsThread(void *ptr) int16_t tmp16, *ptrStart16, *ptrEnd16; sampleTyp *s = getCurSample(); - (void)ptr; - if (s->typ & 16) { if (smpEd_Rx1 >= smpEd_Rx2) @@ -3784,12 +3660,13 @@ static int32_t SDLCALL sampleBackwardsThread(void *ptr) writeSampleFlag = true; return true; + + (void)ptr; } void sampleBackwards(void) { sampleTyp *s = getCurSample(); - if (s == NULL || s->pek == NULL || s->len < 2) return; @@ -3811,8 +3688,6 @@ static int32_t SDLCALL sampleConvThread(void *ptr) int32_t i, len; sampleTyp *s = getCurSample(); - (void)ptr; - pauseAudio(); restoreSample(s); @@ -3841,12 +3716,13 @@ static int32_t SDLCALL sampleConvThread(void *ptr) writeSampleFlag = true; return true; + + (void)ptr; } void sampleConv(void) { sampleTyp *s = getCurSample(); - if (s == NULL || s->pek == NULL || s->len <= 0) return; @@ -3863,25 +3739,19 @@ void sampleConv(void) static int32_t SDLCALL sampleConvWThread(void *ptr) { - int8_t *ptr8, tmp; - int32_t len; sampleTyp *s = getCurSample(); - (void)ptr; - pauseAudio(); restoreSample(s); - len = s->len / 2; - ptr8 = s->pek; + int32_t len = s->len / 2; + int8_t *ptr8 = s->pek; - for (int32_t i = 0; i < len; i++) + for (int32_t i = 0; i < len; i++, ptr8 += 2) { - tmp = ptr8[0]; + const int8_t tmp = ptr8[0]; ptr8[0] = ptr8[1]; ptr8[1] = tmp; - - ptr8 += 2; } fixSample(s); @@ -3892,12 +3762,13 @@ static int32_t SDLCALL sampleConvWThread(void *ptr) writeSampleFlag = true; return true; + + (void)ptr; } void sampleConvW(void) { sampleTyp *s = getCurSample(); - if (s == NULL || s->pek == NULL || s->len <= 0) return; @@ -3917,12 +3788,9 @@ static int32_t SDLCALL fixDCThread(void *ptr) int8_t *ptr8; int16_t *ptr16; int32_t i, len, smpSub, smp32; - int64_t averageDC; sampleTyp *s = getCurSample(); - (void)ptr; - - averageDC = 0; + int64_t averageDC = 0; if (s->typ & 16) { @@ -4009,6 +3877,8 @@ static int32_t SDLCALL fixDCThread(void *ptr) setMouseBusy(false); return true; + + (void)ptr; } void fixDC(void) @@ -4038,13 +3908,11 @@ void smpEdStop(void) void testSmpEdMouseUp(void) // used for setting new loop points { - sampleTyp *s; - if (updateLoopsOnMouseUp) { updateLoopsOnMouseUp = false; - s = getCurSample(); + sampleTyp *s = getCurSample(); if (s == NULL) return; diff --git a/src/ft2_sample_ed_features.c b/src/ft2_sample_ed_features.c @@ -81,30 +81,21 @@ static void pbResampleTonesUp(void) static int32_t SDLCALL resampleThread(void *ptr) { - int8_t *p1, *p2, *src8, *dst8; - int16_t *src16, *dst16; - uint32_t newLen, mask, resampleLen; - uint64_t posFrac64, delta64; - double dNewLen, dLenMul; - sampleTyp *s; - - (void)ptr; - if (instr[editor.curInstr] == NULL) return true; - s = &instr[editor.curInstr]->samp[editor.curSmp]; + sampleTyp *s = &instr[editor.curInstr]->samp[editor.curSmp]; - mask = (s->typ & 16) ? 0xFFFFFFFE : 0xFFFFFFFF; - dLenMul = exp2(smpEd_RelReSmp * (1.0 / 12.0)); + const uint32_t mask = (s->typ & 16) ? 0xFFFFFFFE : 0xFFFFFFFF; + const double dRatio = exp2(smpEd_RelReSmp / 12.0); - dNewLen = s->len * dLenMul; + double dNewLen = s->len * dRatio; if (dNewLen > (double)MAX_SAMPLE_LEN) dNewLen = (double)MAX_SAMPLE_LEN; - newLen = (int32_t)dNewLen & mask; + const uint32_t newLen = (int32_t)dNewLen & mask; - p2 = (int8_t *)malloc(newLen + LOOP_FIX_LEN); + int8_t *p2 = (int8_t *)malloc(newLen + LOOP_FIX_LEN); if (p2 == NULL) { outOfMemory = true; @@ -114,25 +105,30 @@ static int32_t SDLCALL resampleThread(void *ptr) } int8_t *newPtr = p2 + SMP_DAT_OFFSET; + int8_t *p1 = s->pek; - p1 = s->pek; - - // don't use the potentially clamped newLen value here - delta64 = ((int64_t)s->len << 32) / (int64_t)(s->len * dLenMul); // 32.32 fixed point delta - - posFrac64 = 0; // 32.32 fixed point position.fraction + // 32.32 fixed-point logic + const uint64_t delta64 = (const uint64_t)round((UINT32_MAX+1.0) / dRatio); + uint64_t posFrac64 = 0; pauseAudio(); restoreSample(s); + /* Nearest-neighbor resampling (no interpolation). + ** + ** Could benefit from windowed-sinc interpolation, + ** but it seems like some people prefer no resampling + ** interpolation (like FT2). + */ + if (newLen > 0) { if (s->typ & 16) { - src16 = (int16_t *)p1; - dst16 = (int16_t *)newPtr; + const int16_t *src16 = (const int16_t *)p1; + int16_t *dst16 = (int16_t *)newPtr; - resampleLen = newLen >> 1; + const uint32_t resampleLen = newLen >> 1; for (uint32_t i = 0; i < resampleLen; i++) { dst16[i] = src16[posFrac64 >> 32]; @@ -141,8 +137,8 @@ static int32_t SDLCALL resampleThread(void *ptr) } else { - src8 = p1; - dst8 = newPtr; + const int8_t *src8 = p1; + int8_t *dst8 = newPtr; for (uint32_t i = 0; i < newLen; i++) { @@ -155,15 +151,11 @@ static int32_t SDLCALL resampleThread(void *ptr) free(s->origPek); s->relTon = CLAMP(s->relTon + smpEd_RelReSmp, -48, 71); - s->len = newLen & mask; - s->origPek = p2; s->pek = s->origPek + SMP_DAT_OFFSET; - - s->repS = (int32_t)(s->repS * dLenMul); - s->repL = (int32_t)(s->repL * dLenMul); - + s->repS = (int32_t)(s->repS * dRatio); + s->repL = (int32_t)(s->repL * dRatio); s->repS &= mask; s->repL &= mask; @@ -191,6 +183,8 @@ static int32_t SDLCALL resampleThread(void *ptr) ui.sysReqShown = false; return true; + + (void)ptr; } static void pbDoResampling(void) @@ -213,10 +207,6 @@ static void drawResampleBox(void) const int16_t y = 230; const int16_t w = 214; const int16_t h = 54; - uint16_t val; - uint32_t mask; - double dNewLen, dLenMul; - sampleTyp *s; // main fill fillRect(x + 1, y + 1, w - 2, h - 2, PAL_BUTTONS); @@ -233,12 +223,12 @@ static void drawResampleBox(void) vLine(x + w - 3, y + 2, h - 4, PAL_BUTTON1); hLine(x + 2, y + h - 3, w - 4, PAL_BUTTON1); - s = &instr[editor.curInstr]->samp[editor.curSmp]; + sampleTyp *s = &instr[editor.curInstr]->samp[editor.curSmp]; - mask = (s->typ & 16) ? 0xFFFFFFFE : 0xFFFFFFFF; - dLenMul = exp2(smpEd_RelReSmp * (1.0 / 12.0)); + uint32_t mask = (s->typ & 16) ? 0xFFFFFFFE : 0xFFFFFFFF; + double dLenMul = exp2(smpEd_RelReSmp * (1.0 / 12.0)); - dNewLen = s->len * dLenMul; + double dNewLen = s->len * dLenMul; if (dNewLen > (double)MAX_SAMPLE_LEN) dNewLen = (double)MAX_SAMPLE_LEN; @@ -250,7 +240,7 @@ static void drawResampleBox(void) else if (smpEd_RelReSmp < 0) sign = '-'; else sign = '+'; - val = ABS(smpEd_RelReSmp); + uint16_t val = ABS(smpEd_RelReSmp); if (val > 9) { charOut(291, 236, PAL_FORGRND, sign); @@ -405,7 +395,7 @@ static void pbEchoNumDown(void) static void pbEchoNumUp(void) { - if (echo_nEcho < 1024) + if (echo_nEcho < 64) echo_nEcho++; } @@ -435,41 +425,27 @@ static void pbEchoFadeoutUp(void) static int32_t SDLCALL createEchoThread(void *ptr) { - int8_t *readPtr, *writePtr, *writePtr8, *newPtr; - bool is16Bit; - int16_t *readPtr16, *writePtr16; - int32_t nEchoes, distance, readLen, writeLen, i, j; - int32_t smpOut, volChange, smpMul, echoRead, echoCycle, writeIdx; - int64_t tmp64; - sampleTyp *s; - - (void)ptr; - - s = &instr[editor.curInstr]->samp[editor.curSmp]; - - readLen = s->len; - readPtr = s->pek; - is16Bit = (s->typ & 16) ? true : false; - distance = echo_Distance * 16; - - // scale value for faster math and suitable rounding for PCM waveforms (DIV -> arithmetic bitshift right) - volChange = (echo_VolChange * 256) / 100; // 0..100 -> 0..256 - if (echo_nEcho < 1) { ui.sysReqShown = false; return true; } + sampleTyp *s = &instr[editor.curInstr]->samp[editor.curSmp]; + + int32_t readLen = s->len; + int8_t *readPtr = s->pek; + bool is16Bit = (s->typ & 16) ? true : false; + int32_t distance = echo_Distance * 16; + + double dVolChange = echo_VolChange / 100.0; + // calculate real number of echoes - j = 32768; - i = 0; - while (i < echo_nEcho && j > 0) - { - j = (j * volChange) >> 8; - i++; - } - nEchoes = i + 1; + double dSmp = is16Bit ? 32768.0 : 128.0; + int32_t k = 0; + while (k++ < echo_nEcho && dSmp >= 1.0) + dSmp *= dVolChange; + int32_t nEchoes = k + 1; if (nEchoes < 1) { @@ -478,10 +454,10 @@ static int32_t SDLCALL createEchoThread(void *ptr) } // set write length (either original length or full echo length) - writeLen = readLen; + int32_t writeLen = readLen; if (echo_AddMemory) { - tmp64 = (int64_t)distance * (nEchoes - 1); + int64_t tmp64 = (int64_t)distance * (nEchoes - 1); if (is16Bit) tmp64 <<= 1; @@ -495,7 +471,7 @@ static int32_t SDLCALL createEchoThread(void *ptr) writeLen &= 0xFFFFFFFE; } - writePtr = (int8_t *)malloc(writeLen + LOOP_FIX_LEN); + int8_t *writePtr = (int8_t *)malloc(writeLen + LOOP_FIX_LEN); if (writePtr == NULL) { outOfMemory = true; @@ -507,39 +483,42 @@ static int32_t SDLCALL createEchoThread(void *ptr) pauseAudio(); restoreSample(s); - writeIdx = 0; + int32_t writeIdx = 0; if (is16Bit) { - readPtr16 = (int16_t *)readPtr; - writePtr16 = (int16_t *)&writePtr[SMP_DAT_OFFSET]; + const int16_t *readPtr16 = (const int16_t *)readPtr; + int16_t *writePtr16 = (int16_t *)&writePtr[SMP_DAT_OFFSET]; writeLen >>= 1; readLen >>= 1; while (writeIdx < writeLen) { - smpOut = 0; - smpMul = 32768; + double dSmpOut = 0.0; + double dSmpMul = 1.0; - echoRead = writeIdx; - echoCycle = nEchoes; + int32_t echoRead = writeIdx; + int32_t echoCycle = nEchoes; while (!stopThread) { if (echoRead < readLen) - smpOut += (readPtr16[echoRead] * smpMul) >> 15; + dSmpOut += (int32_t)readPtr16[echoRead] * dSmpMul; - smpMul = (smpMul * volChange) >> 8; + dSmpMul *= dVolChange; echoRead -= distance; - echoCycle--; - - if (echoRead <= 0 || echoCycle <= 0) + if (echoRead <= 0 || --echoCycle <= 0) break; } - CLAMP16(smpOut); + // rounding (faster than calling round()) + if (dSmpOut < 0.0) dSmpOut -= 0.5; + else if (dSmpOut > 0.0) dSmpOut += 0.5; + + int32_t smpOut = (int32_t)dSmpOut; + CLAMP16(smpOut); writePtr16[writeIdx++] = (int16_t)smpOut; } @@ -547,31 +526,35 @@ static int32_t SDLCALL createEchoThread(void *ptr) } else { - writePtr8 = writePtr + SMP_DAT_OFFSET; + int8_t *writePtr8 = writePtr + SMP_DAT_OFFSET; while (writeIdx < writeLen) { - smpOut = 0; - smpMul = 32768; + double dSmpOut = 0.0; + double dSmpMul = 1.0; - echoRead = writeIdx; - echoCycle = nEchoes; + int32_t echoRead = writeIdx; + int32_t echoCycle = nEchoes; while (!stopThread) { if (echoRead < readLen) - smpOut += (readPtr[echoRead] * smpMul) >> (15-8); + dSmpOut += (int32_t)readPtr[echoRead] * dSmpMul; - smpMul = (smpMul * volChange) >> 8; + dSmpMul *= dVolChange; echoRead -= distance; - echoCycle--; - - if (echoRead <= 0 || echoCycle <= 0) + if (echoRead <= 0 || --echoCycle <= 0) break; } - CLAMP16(smpOut); - writePtr8[writeIdx++] = (int8_t)(smpOut >> 8); + // rounding (faster than calling round()) + if (dSmpOut < 0.0) dSmpOut -= 0.5; + else if (dSmpOut > 0.0) dSmpOut += 0.5; + + int32_t smpOut = (int32_t)dSmpOut; + if (smpOut < -128) smpOut = -128; + else if (smpOut > 127) smpOut = 127; + writePtr8[writeIdx++] = (int8_t)smpOut; } } @@ -581,7 +564,7 @@ static int32_t SDLCALL createEchoThread(void *ptr) { writeLen = writeIdx; - newPtr = (int8_t *)realloc(writePtr, writeIdx + LOOP_FIX_LEN); + int8_t *newPtr = (int8_t *)realloc(writePtr, writeIdx + LOOP_FIX_LEN); if (newPtr != NULL) { s->origPek = newPtr; @@ -617,6 +600,8 @@ static int32_t SDLCALL createEchoThread(void *ptr) ui.sysReqShown = false; return true; + + (void)ptr; } static void pbCreateEcho(void) @@ -661,11 +646,8 @@ static void drawEchoBox(void) textOutShadow(177, 254, PAL_FORGRND, PAL_BUTTON2, "Fade out"); textOutShadow(192, 270, PAL_FORGRND, PAL_BUTTON2, "Add memory to sample"); - assert(echo_nEcho <= 1024); - - charOut(315 + (0 * 7), 226, PAL_FORGRND, '0' + (char)(echo_nEcho / 1000)); - charOut(315 + (1 * 7), 226, PAL_FORGRND, '0' + (echo_nEcho / 100) % 10); - charOut(315 + (2 * 7), 226, PAL_FORGRND, '0' + (echo_nEcho / 10) % 10); + assert(echo_nEcho <= 64); + charOut(315 + (2 * 7), 226, PAL_FORGRND, '0' + (char)(echo_nEcho / 10)); charOut(315 + (3 * 7), 226, PAL_FORGRND, '0' + (echo_nEcho % 10)); assert(echo_Distance <= 0x4000); @@ -800,7 +782,7 @@ static void setupEchoBoxWidgets(void) s->callbackFunc = sbSetEchoNumPos; s->visible = true; setScrollBarPageLength(0, 1); - setScrollBarEnd(0, 1024); + setScrollBarEnd(0, 64); // echo distance scrollbar s = &scrollBars[1]; @@ -881,17 +863,14 @@ void pbSampleEcho(void) static int32_t SDLCALL mixThread(void *ptr) { - int8_t *destPtr, *mixPtr, *p; + int8_t *destPtr, *mixPtr; uint8_t mixTyp, destTyp; - int16_t destIns, destSmp, mixIns, mixSmp; - int32_t mixMul1, mixMul2, smp32, x1, x2, i, destLen, mixLen, maxLen, dest8Size, max8Size, mix8Size; - - (void)ptr; + int32_t destLen, mixLen; - destIns = editor.curInstr; - destSmp = editor.curSmp; - mixIns = editor.srcInstr; - mixSmp = editor.srcSmp; + int16_t destIns = editor.curInstr; + int16_t destSmp = editor.curSmp; + int16_t mixIns = editor.srcInstr; + int16_t mixSmp = editor.srcSmp; if (destIns == mixIns && destSmp == mixSmp) { @@ -941,10 +920,10 @@ static int32_t SDLCALL mixThread(void *ptr) bool src16Bits = (mixTyp >> 4) & 1; bool dst16Bits = (destTyp >> 4) & 1; - mix8Size = src16Bits ? (mixLen >> 1) : mixLen; - dest8Size = dst16Bits ? (destLen >> 1) : destLen; - max8Size = (dest8Size > mix8Size) ? dest8Size : mix8Size; - maxLen = dst16Bits ? (max8Size << 1) : max8Size; + int32_t mix8Size = src16Bits ? (mixLen >> 1) : mixLen; + int32_t dest8Size = dst16Bits ? (destLen >> 1) : destLen; + int32_t max8Size = (dest8Size > mix8Size) ? dest8Size : mix8Size; + int32_t maxLen = dst16Bits ? (max8Size << 1) : max8Size; if (maxLen <= 0) { @@ -953,7 +932,7 @@ static int32_t SDLCALL mixThread(void *ptr) return true; } - p = (int8_t *)calloc(maxLen + LOOP_FIX_LEN, sizeof (int8_t)); + int8_t *p = (int8_t *)calloc(maxLen + LOOP_FIX_LEN, sizeof (int8_t)); if (p == NULL) { outOfMemory = true; @@ -978,26 +957,38 @@ static int32_t SDLCALL mixThread(void *ptr) if (instr[mixIns] != NULL) restoreSample(&instr[mixIns]->samp[mixSmp]); - // scale value for faster math and suitable rounding for PCM waveforms (DIV -> arithmetic bitshift right) - mixMul1 = (mix_Balance * 256) / 100; - mixMul2 = 256 - mixMul1; + const double dAmp1 = mix_Balance / 100.0; + const double dAmp2 = 1.0 - dAmp1; int8_t *destPek = p + SMP_DAT_OFFSET; - for (i = 0; i < max8Size; i++) + for (int32_t i = 0; i < max8Size; i++) { int32_t index16 = i << 1; - x1 = (i >= mix8Size) ? 0 : getSampleValue(mixPtr, mixTyp, src16Bits ? index16 : i); - x2 = (i >= dest8Size) ? 0 : getSampleValue(destPtr, destTyp, dst16Bits ? index16 : i); - - if (!src16Bits) x1 <<= 8; - if (!dst16Bits) x2 <<= 8; + int32_t smp1 = (i >= mix8Size) ? 0 : getSampleValue(mixPtr, mixTyp, src16Bits ? index16 : i); + int32_t smp2 = (i >= dest8Size) ? 0 : getSampleValue(destPtr, destTyp, dst16Bits ? index16 : i); - smp32 = ((x1 * mixMul1) >> 8) + ((x2 * mixMul2) >> 8); - CLAMP16(smp32); + if (!src16Bits) smp1 <<= 8; + if (!dst16Bits) smp2 <<= 8; + double dSmp = (smp1 * dAmp1) + (smp2 * dAmp2); if (!dst16Bits) - smp32 >>= 8; + dSmp *= 1.0 / 256.0; + + // rounding (faster than calling round()) + if (dSmp < 0.0) dSmp -= 0.5; + else if (dSmp > 0.0) dSmp += 0.5; + + int32_t smp32 = (int32_t)dSmp; + if (dst16Bits) + { + CLAMP16(smp32); + } + else + { + if (smp32 < -128) smp32 = -128; + else if (smp32 > 127) smp32 = 127; + } putSampleValue(destPek, destTyp, dst16Bits ? index16 : i, (int16_t)smp32); } @@ -1026,6 +1017,8 @@ static int32_t SDLCALL mixThread(void *ptr) ui.sysReqShown = false; return true; + + (void)ptr; } static void pbMix(void) @@ -1256,16 +1249,12 @@ static void pbSampEndVolUp(void) static int32_t SDLCALL applyVolumeThread(void *ptr) { -#define AMP_BITS 15 - int8_t *ptr8; - int16_t *ptr16; - int32_t amp32, x1, x2, len, i; - sampleTyp *s; + int32_t x1, x2; if (instr[editor.curInstr] == NULL) goto applyVolumeExit; - s = &instr[editor.curInstr]->samp[editor.curSmp]; + sampleTyp *s = &instr[editor.curInstr]->samp[editor.curSmp]; if (smpEd_Rx1 < smpEd_Rx2) { @@ -1299,43 +1288,48 @@ static int32_t SDLCALL applyVolumeThread(void *ptr) x2 >>= 1; } - len = x2 - x1; + const int32_t len = x2 - x1; if (len <= 0) goto applyVolumeExit; - const double dVol1 = vol_StartVol * ((1 << AMP_BITS) / 100.0); - const double dVol2 = vol_EndVol * ((1 << AMP_BITS) / 100.0); - - /* 8bitbubsy: Rewritten to use 64-bit deltas instead, to - ** prevent having to do a 64-bit mul for every output sample. - */ - const int64_t delta64 = (int64_t)round(((dVol2 - dVol1) * (UINT32_MAX+1.0)) / len); - int64_t pos64 = (int64_t)dVol1 << 32; + const double dVol1 = vol_StartVol / 100.0; + const double dVol2 = vol_EndVol / 100.0; + const double dPosMul = (dVol2 - dVol1) / len; pauseAudio(); restoreSample(s); if (s->typ & 16) { - ptr16 = (int16_t *)s->pek; - for (i = x1; i < x2; i++) + int16_t *ptr16 = (int16_t *)s->pek + x1; + for (int32_t i = 0; i < len; i++) { - amp32 = (int32_t)(pos64 >> 32); - pos64 += delta64; + const double dAmp = dVol1 + (i * dPosMul); // linear interpolation - amp32 = (ptr16[i] * amp32) >> AMP_BITS; + double dSmp = ptr16[i] * dAmp; + + // rounding (faster than calling round()) + if (dSmp < 0.0) dSmp -= 0.5; + else if (dSmp > 0.0) dSmp += 0.5; + + int32_t amp32 = (int32_t)dSmp; CLAMP16(amp32); ptr16[i] = (int16_t)amp32; } } else { - ptr8 = s->pek; - for (i = x1; i < x2; i++) + int8_t *ptr8 = s->pek + x1; + for (int32_t i = 0; i < len; i++) { - amp32 = (int32_t)(pos64 >> 32); - pos64 += delta64; + const double dAmp = dVol1 + (i * dPosMul); // linear interpolation + + double dSmp = ptr8[i] * dAmp; + + // rounding (faster than calling round()) + if (dSmp < 0.0) dSmp -= 0.5; + else if (dSmp > 0.0) dSmp += 0.5; - amp32 = (ptr8[i] * amp32) >> AMP_BITS; + int32_t amp32 = (int32_t)dSmp; CLAMP8(amp32); ptr8[i] = (int8_t)amp32; } @@ -1349,8 +1343,9 @@ applyVolumeExit: setMouseBusy(false); ui.sysReqShown = false; - (void)ptr; return true; + + (void)ptr; } static void pbApplyVolume(void) @@ -1374,17 +1369,12 @@ static void pbApplyVolume(void) static int32_t SDLCALL getMaxScaleThread(void *ptr) { - int8_t *ptr8; - int16_t *ptr16; - int32_t vol, absSmp, x1, x2, len, i, maxAmp; - sampleTyp *s; - - (void)ptr; + int32_t x1, x2; if (instr[editor.curInstr] == NULL) goto getScaleExit; - s = &instr[editor.curInstr]->samp[editor.curSmp]; + sampleTyp *s = &instr[editor.curInstr]->samp[editor.curSmp]; if (smpEd_Rx1 < smpEd_Rx2) { @@ -1413,9 +1403,9 @@ static int32_t SDLCALL getMaxScaleThread(void *ptr) x2 = s->len; } - len = x2 - x1; + uint32_t len = x2 - x1; if (s->typ & 16) - len /= 2; + len >>= 1; if (len <= 0) { @@ -1426,23 +1416,23 @@ static int32_t SDLCALL getMaxScaleThread(void *ptr) restoreSample(s); - maxAmp = 0; + int32_t maxAmp = 0; if (s->typ & 16) { - ptr16 = (int16_t *)&s->pek[x1]; - for (i = 0; i < len; i++) + const int16_t *ptr16 = (const int16_t *)&s->pek[x1]; + for (uint32_t i = 0; i < len; i++) { - absSmp = ABS(ptr16[i]); + const int32_t absSmp = ABS(ptr16[i]); if (absSmp > maxAmp) maxAmp = absSmp; } } else { - ptr8 = &s->pek[x1]; - for (i = 0; i < len; i++) + const int8_t *ptr8 = (const int8_t *)&s->pek[x1]; + for (uint32_t i = 0; i < len; i++) { - absSmp = ABS(ptr8[i]); + const int32_t absSmp = ABS(ptr8[i]); if (absSmp > maxAmp) maxAmp = absSmp; } @@ -1459,7 +1449,7 @@ static int32_t SDLCALL getMaxScaleThread(void *ptr) } else { - vol = (100 * 32768) / maxAmp; + int32_t vol = (100 * 32768) / maxAmp; if (vol > 500) vol = 500; @@ -1470,6 +1460,8 @@ static int32_t SDLCALL getMaxScaleThread(void *ptr) getScaleExit: setMouseBusy(false); return true; + + (void)ptr; } static void pbGetMaxScale(void) diff --git a/src/ft2_sample_loader.c b/src/ft2_sample_loader.c @@ -59,34 +59,28 @@ void removeSampleIsLoadingFlag(void) static int32_t getAIFFRate(uint8_t *in) { - int32_t exp; - uint32_t lo, hi; - double dOut; - - exp = (int32_t)(((in[0] & 0x7F) << 8) | in[1]); - lo = (in[2] << 24) | (in[3] << 16) | (in[4] << 8) | in[5]; - hi = (in[6] << 24) | (in[7] << 16) | (in[8] << 8) | in[9]; + int32_t exp = (int32_t)(((in[0] & 0x7F) << 8) | in[1]); + uint32_t lo = (in[2] << 24) | (in[3] << 16) | (in[4] << 8) | in[5]; + uint32_t hi = (in[6] << 24) | (in[7] << 16) | (in[8] << 8) | in[9]; if (exp == 0 && lo == 0 && hi == 0) return 0; exp -= 16383; - dOut = ldexp(lo, -31 + exp) + ldexp(hi, -63 + exp); - return (int32_t)(dOut + 0.5); + double dOut = ldexp(lo, -31 + exp) + ldexp(hi, -63 + exp); + return (int32_t)(dOut + 0.5); // rounded } static bool aiffIsStereo(FILE *f) // only ran on files that are confirmed to be AIFFs { uint16_t numChannels; - int32_t bytesRead, endOfChunk, filesize; - uint32_t chunkID, chunkSize, commPtr, commLen; - uint32_t oldPos; + uint32_t chunkID, chunkSize; - oldPos = ftell(f); + uint32_t oldPos = ftell(f); fseek(f, 0, SEEK_END); - filesize = ftell(f); + int32_t filesize = ftell(f); if (filesize < 12) { @@ -96,15 +90,16 @@ static bool aiffIsStereo(FILE *f) // only ran on files that are confirmed to be fseek(f, 12, SEEK_SET); - commPtr = 0; commLen = 0; + uint32_t commPtr = 0; + uint32_t commLen = 0; - bytesRead = 0; + int32_t bytesRead = 0; while (!feof(f) && bytesRead < filesize-12) { fread(&chunkID, 4, 1, f); chunkID = SWAP32(chunkID); if (feof(f)) break; fread(&chunkSize, 4, 1, f); chunkSize = SWAP32(chunkSize); if (feof(f)) break; - endOfChunk = (ftell(f) + chunkSize) + (chunkSize & 1); + int32_t endOfChunk = (ftell(f) + chunkSize) + (chunkSize & 1); switch (chunkID) { case 0x434F4D4D: // "COMM" @@ -137,14 +132,12 @@ static bool aiffIsStereo(FILE *f) // only ran on files that are confirmed to be static bool wavIsStereo(FILE *f) // only ran on files that are confirmed to be WAVs { uint16_t numChannels; - int32_t bytesRead, endOfChunk, filesize; - uint32_t chunkID, chunkSize, fmtPtr, fmtLen; - uint32_t oldPos; + uint32_t chunkID, chunkSize; - oldPos = ftell(f); + uint32_t oldPos = ftell(f); fseek(f, 0, SEEK_END); - filesize = ftell(f); + int32_t filesize = ftell(f); if (filesize < 12) { @@ -154,16 +147,16 @@ static bool wavIsStereo(FILE *f) // only ran on files that are confirmed to be W fseek(f, 12, SEEK_SET); - fmtPtr = 0; - fmtLen = 0; + uint32_t fmtPtr = 0; + uint32_t fmtLen = 0; - bytesRead = 0; + int32_t bytesRead = 0; while (!feof(f) && bytesRead < filesize-12) { fread(&chunkID, 4, 1, f); if (feof(f)) break; fread(&chunkSize, 4, 1, f); if (feof(f)) break; - endOfChunk = (ftell(f) + chunkSize) + (chunkSize & 1); + int32_t endOfChunk = (ftell(f) + chunkSize) + (chunkSize & 1); switch (chunkID) { case 0x20746D66: // "fmt " @@ -195,23 +188,19 @@ static bool wavIsStereo(FILE *f) // only ran on files that are confirmed to be W static int32_t SDLCALL loadAIFFSample(void *ptr) { - char *tmpFilename, *tmpPtr, compType[4]; - int8_t *audioDataS8, *newPtr; + char compType[4]; + int8_t *audioDataS8; uint8_t sampleRateBytes[10], *audioDataU8; int16_t *audioDataS16, *audioDataS16_2, smp16; uint16_t numChannels, bitDepth; - int32_t j, filesize, smp32, *audioDataS32; - uint32_t i, filenameLen, sampleRate, sampleLength, blockName, blockSize; - uint32_t commPtr, commLen, ssndPtr, ssndLen, offset, len32; + int32_t j, smp32, *audioDataS32; + uint32_t i, blockName, blockSize; + uint32_t offset, len32; int64_t smp64; - FILE *f; - UNICHAR *filename; - sampleTyp tmpSmp, *s; - - (void)ptr; + sampleTyp tmpSmp; // this is important for the "goto" on load error - f = NULL; + FILE *f = NULL; memset(&tmpSmp, 0, sizeof (tmpSmp)); if (editor.tmpFilenameU == NULL) @@ -220,7 +209,7 @@ static int32_t SDLCALL loadAIFFSample(void *ptr) goto aiffLoadError; } - filename = editor.tmpFilenameU; + UNICHAR *filename = editor.tmpFilenameU; f = UNICHAR_FOPEN(filename, "rb"); if (f == NULL) @@ -230,7 +219,7 @@ static int32_t SDLCALL loadAIFFSample(void *ptr) } fseek(f, 0, SEEK_END); - filesize = ftell(f); + int32_t filesize = ftell(f); if (filesize < 12) { okBoxThreadSafe(0, "System message", "Error loading sample: The sample is not supported or is invalid!"); @@ -239,8 +228,10 @@ static int32_t SDLCALL loadAIFFSample(void *ptr) // handle chunks - commPtr = 0; commLen = 0; - ssndPtr = 0; ssndLen = 0; + uint32_t commPtr = 0; + uint32_t commLen = 0; + uint32_t ssndPtr = 0; + uint32_t ssndLen = 0; fseek(f, 12, SEEK_SET); while (!feof(f) && ftell(f) < filesize-12) @@ -315,7 +306,7 @@ static int32_t SDLCALL loadAIFFSample(void *ptr) } } - sampleRate = getAIFFRate(sampleRateBytes); + uint32_t sampleRate = getAIFFRate(sampleRateBytes); // sample data chunk @@ -332,7 +323,7 @@ static int32_t SDLCALL loadAIFFSample(void *ptr) ssndLen -= 8; // don't include offset and blockSize datas - sampleLength = ssndLen; + uint32_t sampleLength = ssndLen; if (sampleLength > MAX_SAMPLE_LEN) sampleLength = MAX_SAMPLE_LEN; @@ -647,7 +638,7 @@ static int32_t SDLCALL loadAIFFSample(void *ptr) } // adjust memory needed - newPtr = (int8_t *)realloc(tmpSmp.origPek, sampleLength + LOOP_FIX_LEN); + int8_t *newPtr = (int8_t *)realloc(tmpSmp.origPek, sampleLength + LOOP_FIX_LEN); if (newPtr != NULL) { tmpSmp.origPek = newPtr; @@ -662,7 +653,7 @@ static int32_t SDLCALL loadAIFFSample(void *ptr) tuneSample(&tmpSmp, sampleRate); // set sample name - tmpFilename = unicharToCp437(filename, true); + char *tmpFilename = unicharToCp437(filename, true); if (tmpFilename != NULL) { j = (int32_t)strlen(tmpFilename); @@ -672,13 +663,13 @@ static int32_t SDLCALL loadAIFFSample(void *ptr) break; } - tmpPtr = tmpFilename; + char *tmpPtr = tmpFilename; if (j > 0) tmpPtr += j + 1; sanitizeFilename(tmpPtr); - filenameLen = (uint32_t)strlen(tmpPtr); + uint32_t filenameLen = (uint32_t)strlen(tmpPtr); for (i = 0; i < 22; i++) { if (i < filenameLen) @@ -704,7 +695,7 @@ static int32_t SDLCALL loadAIFFSample(void *ptr) if (instr[editor.curInstr] != NULL) { - s = &instr[editor.curInstr]->samp[sampleSlot]; + sampleTyp *s = &instr[editor.curInstr]->samp[sampleSlot]; freeSample(editor.curInstr, sampleSlot); memcpy(s, &tmpSmp, sizeof (sampleTyp)); @@ -734,25 +725,20 @@ aiffLoadError: sampleIsLoading = false; return false; + + (void)ptr; } static int32_t SDLCALL loadIFFSample(void *ptr) { - char *tmpFilename, *tmpPtr, hdr[4 + 1]; - bool is16Bit; + char hdr[4+1]; uint8_t i; - uint16_t sampleRate; - int32_t j, filesize; - uint32_t filenameLen, sampleVol, sampleLength, sampleLoopStart, sampleLoopLength, blockName, blockSize; - uint32_t vhdrPtr, vhdrLen, bodyPtr, bodyLen, namePtr, nameLen; - FILE *f; - UNICHAR *filename; - sampleTyp tmpSmp, *s; - - (void)ptr; + int32_t j; + uint32_t blockName, blockSize; + sampleTyp tmpSmp; // this is important for the "goto" on load error - f = NULL; + FILE *f = NULL; memset(&tmpSmp, 0, sizeof (tmpSmp)); if (editor.tmpFilenameU == NULL) @@ -761,7 +747,7 @@ static int32_t SDLCALL loadIFFSample(void *ptr) goto iffLoadError; } - filename = editor.tmpFilenameU; + UNICHAR *filename = editor.tmpFilenameU; f = UNICHAR_FOPEN(filename, "rb"); if (f == NULL) @@ -771,7 +757,7 @@ static int32_t SDLCALL loadIFFSample(void *ptr) } fseek(f, 0, SEEK_END); - filesize = ftell(f); + int32_t filesize = ftell(f); if (filesize < 12) { okBoxThreadSafe(0, "System message", "Error loading sample: The sample is not supported or is invalid!"); @@ -781,17 +767,20 @@ static int32_t SDLCALL loadIFFSample(void *ptr) fseek(f, 8, SEEK_SET); fread(hdr, 1, 4, f); hdr[4] = '\0'; - is16Bit = !strncmp(hdr, "16SV", 4); + bool is16Bit = !strncmp(hdr, "16SV", 4); - sampleLength = 0; - sampleVol = 64; - sampleLoopStart = 0; - sampleLoopLength = 0; - sampleRate = 16726; + uint32_t sampleLength = 0; + uint32_t sampleVol = 64; + uint32_t sampleLoopStart = 0; + uint32_t sampleLoopLength = 0; + uint16_t sampleRate = 16726; - vhdrPtr = 0; vhdrLen = 0; - bodyPtr = 0; bodyLen = 0; - namePtr = 0; nameLen = 0; + uint32_t vhdrPtr = 0; + uint32_t vhdrLen = 0; + uint32_t bodyPtr = 0; + uint32_t bodyLen = 0; + uint32_t namePtr = 0; + uint32_t nameLen = 0; fseek(f, 12, SEEK_SET); while (!feof(f) && ftell(f) < filesize-12) @@ -947,7 +936,7 @@ static int32_t SDLCALL loadIFFSample(void *ptr) else { // set sample name from filename if we didn't load name from .wav - tmpFilename = unicharToCp437(filename, true); + char *tmpFilename = unicharToCp437(filename, true); if (tmpFilename != NULL) { j = (int32_t)strlen(tmpFilename); @@ -957,13 +946,13 @@ static int32_t SDLCALL loadIFFSample(void *ptr) break; } - tmpPtr = tmpFilename; + char *tmpPtr = tmpFilename; if (j > 0) tmpPtr += j + 1; sanitizeFilename(tmpPtr); - filenameLen = (uint32_t)strlen(tmpPtr); + uint32_t filenameLen = (uint32_t)strlen(tmpPtr); for (i = 0; i < 22; i++) { if (i < filenameLen) @@ -990,7 +979,7 @@ static int32_t SDLCALL loadIFFSample(void *ptr) if (instr[editor.curInstr] != NULL) { - s = &instr[editor.curInstr]->samp[sampleSlot]; + sampleTyp *s = &instr[editor.curInstr]->samp[sampleSlot]; freeSample(editor.curInstr, sampleSlot); memcpy(s, &tmpSmp, sizeof (sampleTyp)); @@ -1020,21 +1009,18 @@ iffLoadError: sampleIsLoading = false; return false; + + (void)ptr; } static int32_t SDLCALL loadRawSample(void *ptr) { - char *tmpFilename, *tmpPtr; int32_t j; - uint32_t filenameLen, i, filesize; - FILE *f; - UNICHAR *filename; - sampleTyp tmpSmp, *s; - - (void)ptr; + uint32_t i; + sampleTyp tmpSmp; // this is important for the "goto" on load error - f = NULL; + FILE *f = NULL; memset(&tmpSmp, 0, sizeof (tmpSmp)); if (editor.tmpFilenameU == NULL) @@ -1043,7 +1029,7 @@ static int32_t SDLCALL loadRawSample(void *ptr) goto rawLoadError; } - filename = editor.tmpFilenameU; + UNICHAR *filename = editor.tmpFilenameU; f = UNICHAR_FOPEN(filename, "rb"); if (f == NULL) @@ -1053,7 +1039,7 @@ static int32_t SDLCALL loadRawSample(void *ptr) } fseek(f, 0, SEEK_END); - filesize = ftell(f); + uint32_t filesize = ftell(f); rewind(f); if (filesize > MAX_SAMPLE_LEN) @@ -1085,7 +1071,7 @@ static int32_t SDLCALL loadRawSample(void *ptr) fclose(f); - tmpFilename = unicharToCp437(filename, true); + char *tmpFilename = unicharToCp437(filename, true); if (tmpFilename != NULL) { j = (int32_t)strlen(tmpFilename); @@ -1095,13 +1081,13 @@ static int32_t SDLCALL loadRawSample(void *ptr) break; } - tmpPtr = tmpFilename; + char *tmpPtr = tmpFilename; if (j > 0) tmpPtr += j + 1; sanitizeFilename(tmpPtr); - filenameLen = (uint32_t)strlen(tmpPtr); + uint32_t filenameLen = (uint32_t)strlen(tmpPtr); for (i = 0; i < 22; i++) { if (i < filenameLen) @@ -1129,7 +1115,7 @@ static int32_t SDLCALL loadRawSample(void *ptr) if (instr[editor.curInstr] != NULL) { - s = &instr[editor.curInstr]->samp[sampleSlot]; + sampleTyp *s = &instr[editor.curInstr]->samp[sampleSlot]; freeSample(editor.curInstr, sampleSlot); memcpy(s, &tmpSmp, sizeof (sampleTyp)); @@ -1159,6 +1145,8 @@ rawLoadError: sampleIsLoading = false; return false; + + (void)ptr; } static int32_t SDLCALL loadWAVSample(void *ptr) @@ -1175,14 +1163,10 @@ static int32_t SDLCALL loadWAVSample(void *ptr) int64_t smp64; float *fAudioDataFloat; double *dAudioDataDouble; - FILE *f; sampleTyp tmpSmp, *s; - UNICHAR *filename; - - (void)ptr; // this is important for the "goto" on load error - f = NULL; + FILE *f = NULL; memset(&tmpSmp, 0, sizeof (tmpSmp)); // zero out chunk pointers and lengths @@ -1198,7 +1182,7 @@ static int32_t SDLCALL loadWAVSample(void *ptr) goto wavLoadError; } - filename = editor.tmpFilenameU; + UNICHAR *filename = editor.tmpFilenameU; f = UNICHAR_FOPEN(filename, "rb"); if (f == NULL) @@ -1967,12 +1951,13 @@ wavLoadError: sampleIsLoading = false; return false; + + (void)ptr; } bool loadSample(UNICHAR *filenameU, uint8_t smpNr, bool instrFlag) { char tmpBuffer[16+1]; - FILE *f; if (sampleIsLoading) return false; @@ -1988,7 +1973,7 @@ bool loadSample(UNICHAR *filenameU, uint8_t smpNr, bool instrFlag) return false; } - f = UNICHAR_FOPEN(filenameU, "rb"); + FILE *f = UNICHAR_FOPEN(filenameU, "rb"); if (f == NULL) { okBox(0, "System message", "General I/O error during loading! Is the file in use?"); @@ -2109,13 +2094,12 @@ bool loadSample(UNICHAR *filenameU, uint8_t smpNr, bool instrFlag) static void normalize32bitSigned(int32_t *sampleData, uint32_t sampleLength) { - uint32_t i, sample, sampleVolPeak; - double dGain; + uint32_t i; - sampleVolPeak = 0; + uint32_t sampleVolPeak = 0; for (i = 0; i < sampleLength; i++) { - sample = ABS(sampleData[i]); + const uint32_t sample = ABS(sampleData[i]); if (sampleVolPeak < sample) sampleVolPeak = sample; } @@ -2123,7 +2107,7 @@ static void normalize32bitSigned(int32_t *sampleData, uint32_t sampleLength) if (sampleVolPeak <= 0) return; - dGain = (double)INT32_MAX / sampleVolPeak; + const double dGain = (double)INT32_MAX / sampleVolPeak; for (i = 0; i < sampleLength; i++) sampleData[i] = (int32_t)(sampleData[i] * dGain); } @@ -2131,12 +2115,11 @@ static void normalize32bitSigned(int32_t *sampleData, uint32_t sampleLength) static void normalize16bitFloatSigned(float *fSampleData, uint32_t sampleLength) { uint32_t i; - float fSample, fSampleVolPeak, fGain; - fSampleVolPeak = 0.0f; + float fSampleVolPeak = 0.0f; for (i = 0; i < sampleLength; i++) { - fSample = fabsf(fSampleData[i]); + const float fSample = fabsf(fSampleData[i]); if (fSampleVolPeak < fSample) fSampleVolPeak = fSample; } @@ -2144,7 +2127,7 @@ static void normalize16bitFloatSigned(float *fSampleData, uint32_t sampleLength) if (fSampleVolPeak <= 0.0f) return; - fGain = (float)INT16_MAX / fSampleVolPeak; + const float fGain = (float)INT16_MAX / fSampleVolPeak; for (i = 0; i < sampleLength; i++) fSampleData[i] *= fGain; } @@ -2152,12 +2135,11 @@ static void normalize16bitFloatSigned(float *fSampleData, uint32_t sampleLength) static void normalize64bitDoubleSigned(double *dSampleData, uint32_t sampleLength) { uint32_t i; - double dSample, dSampleVolPeak, dGain; - dSampleVolPeak = 0.0; + double dSampleVolPeak = 0.0; for (i = 0; i < sampleLength; i++) { - dSample = fabs(dSampleData[i]); + const double dSample = fabs(dSampleData[i]); if (dSampleVolPeak < dSample) dSampleVolPeak = dSample; } @@ -2165,15 +2147,14 @@ static void normalize64bitDoubleSigned(double *dSampleData, uint32_t sampleLengt if (dSampleVolPeak <= 0.0) return; - dGain = (double)INT16_MAX / dSampleVolPeak; + const double dGain = (double)INT16_MAX / dSampleVolPeak; for (i = 0; i < sampleLength; i++) dSampleData[i] *= dGain; } bool fileIsInstrument(char *fullPath) { - char *filename; - int32_t i, len, extOffset; + int32_t i, len; // this assumes that fullPath is not empty @@ -2187,7 +2168,7 @@ bool fileIsInstrument(char *fullPath) break; } - filename = fullPath; + char *filename = fullPath; if (i > 0) filename += i + 1; // -------------------------- @@ -2199,7 +2180,7 @@ bool fileIsInstrument(char *fullPath) if (!_strnicmp("xi.", filename, 3) || (len >= 4 && !_strnicmp("pat.", filename, 4))) return true; - extOffset = getExtOffset(filename, len); + int32_t extOffset = getExtOffset(filename, len); if (extOffset != -1) { if ((extOffset <= len-4) && !_strnicmp(".pat", &filename[extOffset], 4)) return true; @@ -2211,8 +2192,7 @@ bool fileIsInstrument(char *fullPath) bool fileIsSample(char *fullPath) { - char *filename; - int32_t i, len, extOffset; + int32_t i, len; // this assumes that fullPath is not empty @@ -2226,7 +2206,7 @@ bool fileIsSample(char *fullPath) break; } - filename = fullPath; + char *filename = fullPath; if (i > 0) filename += i + 1; // -------------------------- @@ -2243,7 +2223,7 @@ bool fileIsSample(char *fullPath) return false; // definitely a module } - extOffset = getExtOffset(filename, len); + int32_t extOffset = getExtOffset(filename, len); if (extOffset != -1) { if (extOffset <= len-4) diff --git a/src/ft2_sample_saver.c b/src/ft2_sample_saver.c @@ -509,8 +509,9 @@ static int32_t SDLCALL saveSampleThread(void *ptr) if (saveRangeFlag) UNICHAR_CHDIR(oldPathU); - (void)ptr; return true; + + (void)ptr; } void saveSample(UNICHAR *filenameU, bool saveAsRange) diff --git a/src/ft2_sampling.c b/src/ft2_sampling.c @@ -28,17 +28,12 @@ static int16_t rightChSmpSlot = -1; static void SDLCALL samplingCallback(void *userdata, Uint8 *stream, int len) { - int8_t *newPtr; - sampleTyp *s; - - (void)userdata; - if (instr[editor.curInstr] == NULL || len < 0 || len > samplingBufferBytes) return; - s = &instr[editor.curInstr]->samp[editor.curSmp]; + sampleTyp *s = &instr[editor.curInstr]->samp[editor.curSmp]; - newPtr = (int8_t *)realloc(s->origPek, (s->len + len) + LOOP_FIX_LEN); + int8_t *newPtr = (int8_t *)realloc(s->origPek, (s->len + len) + LOOP_FIX_LEN); if (newPtr == NULL) { drawSamplingBufferFlag = false; @@ -77,6 +72,8 @@ static void SDLCALL samplingCallback(void *userdata, Uint8 *stream, int len) drawSamplingBufferFlag = true; } + + (void)userdata; } void stopSampling(void) @@ -84,7 +81,6 @@ void stopSampling(void) int8_t *newPtr; int16_t *dst16, *src16; int32_t i, len; - sampleTyp *currSmp, *nextSmp; resumeAudio(); mouseAnimOff(); @@ -92,8 +88,8 @@ void stopSampling(void) SDL_CloseAudioDevice(recordDev); editor.samplingAudioFlag = false; - currSmp = NULL; - nextSmp = NULL; + sampleTyp *currSmp = NULL; + sampleTyp *nextSmp = NULL; if (instr[editor.curInstr] != NULL) currSmp = &instr[editor.curInstr]->samp[editor.curSmp]; @@ -161,16 +157,12 @@ void stopSampling(void) static uint8_t getDispBuffPeakMono(const int16_t *smpData, int32_t smpNum) { - int16_t smp16; - uint32_t smpAbs, max; - int32_t i; - - max = 0; - for (i = 0; i < smpNum; i++) + uint32_t max = 0; + for (int32_t i = 0; i < smpNum; i++) { - smp16 = smpData[i]; + const int16_t smp16 = smpData[i]; - smpAbs = ABS(smp16); + const uint32_t smpAbs = ABS(smp16); if (smpAbs > max) max = smpAbs; } @@ -184,18 +176,14 @@ static uint8_t getDispBuffPeakMono(const int16_t *smpData, int32_t smpNum) static uint8_t getDispBuffPeakLeft(const int16_t *smpData, int32_t smpNum) { - int16_t smp16; - uint32_t smpAbs, max; - int32_t i; - smpNum <<= 1; - max = 0; - for (i = 0; i < smpNum; i += 2) + uint32_t max = 0; + for (int32_t i = 0; i < smpNum; i += 2) { - smp16 = smpData[i]; + const int16_t smp16 = smpData[i]; - smpAbs = ABS(smp16); + const uint32_t smpAbs = ABS(smp16); if (smpAbs > max) max = smpAbs; } @@ -209,18 +197,14 @@ static uint8_t getDispBuffPeakLeft(const int16_t *smpData, int32_t smpNum) static uint8_t getDispBuffPeakRight(const int16_t *smpData, int32_t smpNum) { - int16_t smp16; - uint32_t smpAbs, max; - int32_t i; - smpNum <<= 1; - max = 0; - for (i = 0; i < smpNum; i += 2) + uint32_t max = 0; + for (int32_t i = 0; i < smpNum; i += 2) { - smp16 = smpData[i]; + const int16_t smp16 = smpData[i]; - smpAbs = ABS(smp16); + const uint32_t smpAbs = ABS(smp16); if (smpAbs > max) max = smpAbs; } @@ -243,9 +227,9 @@ static void drawSamplingPreview(void) int16_t *readBuf; uint16_t x; int32_t smpIdx, smpNum; - uint32_t *centerPtrL, *centerPtrR, pixVal; + uint32_t *centerPtrL, *centerPtrR; - pixVal = video.palette[PAL_PATTEXT]; + const uint32_t pixVal = video.palette[PAL_PATTEXT]; // select buffer currently not being written to (double-buffering) if (currWriteBuf == displayBuffer1) @@ -352,14 +336,12 @@ void startSampling(void) okBox(0, "System message", "This program needs to be compiled with SDL 2.0.5 or later to support audio sampling."); return; #else - int16_t result; SDL_AudioSpec want, have; - sampleTyp *s, *nextSmp; if (editor.samplingAudioFlag || editor.curInstr == 0) return; - result = okBox(9, "System request", "Stereo sampling will use the next sample slot. While ongoing, press any key to stop."); + int16_t result = okBox(9, "System request", "Stereo sampling will use the next sample slot. While ongoing, press any key to stop."); if (result == 0 || result == 3) return; @@ -399,7 +381,7 @@ void startSampling(void) return; } - s = &instr[editor.curInstr]->samp[editor.curSmp]; + sampleTyp *s = &instr[editor.curInstr]->samp[editor.curSmp]; // wipe current sample and prepare it freeSample(editor.curInstr, editor.curSmp); @@ -421,7 +403,7 @@ void startSampling(void) { // wipe current sample and prepare it freeSample(editor.curInstr, rightChSmpSlot); - nextSmp = &instr[editor.curInstr]->samp[rightChSmpSlot]; + sampleTyp *nextSmp = &instr[editor.curInstr]->samp[rightChSmpSlot]; strcpy(nextSmp->name, "Right sample"); nextSmp->typ |= 16; // we always sample in 16-bit diff --git a/src/ft2_scopes.c b/src/ft2_scopes.c @@ -43,20 +43,16 @@ void resetCachedScopeVars(void) int32_t getSamplePosition(uint8_t ch) { - volatile bool active, sampleIs16Bit; - volatile int32_t pos, end; - volatile scope_t *sc; - if (ch >= song.antChn) return -1; - sc = &scope[ch]; + volatile scope_t *sc = &scope[ch]; // cache some stuff - active = sc->active; - pos = sc->pos; - end = sc->end; - sampleIs16Bit = sc->sampleIs16Bit; + volatile bool active = sc->active; + volatile int32_t pos = sc->pos; + volatile int32_t end = sc->end; + volatile bool sampleIs16Bit = sc->sampleIs16Bit; if (!active || end == 0) return -1; @@ -76,9 +72,10 @@ void stopAllScopes(void) { // wait for scopes to finish updating while (scopesUpdatingFlag); - - for (uint8_t i = 0; i < MAX_VOICES; i++) - scope[i].active = false; + + volatile scope_t *sc = scope; + for (int32_t i = 0; i < MAX_VOICES; i++, sc++) + sc->active = false; // wait for scope displaying to be done (safety) while (scopesDisplayingFlag); @@ -87,9 +84,7 @@ void stopAllScopes(void) // toggle mute static void setChannel(int32_t nr, bool on) { - stmTyp *ch; - - ch = &stm[nr]; + stmTyp *ch = &stm[nr]; ch->stOff = !on; if (ch->stOff) @@ -145,20 +140,18 @@ static void drawScopeNumber(uint16_t scopeXOffs, uint16_t scopeYOffs, uint8_t ch static void redrawScope(int32_t ch) { - const uint16_t *scopeLens; - uint16_t x, y, scopeLen, muteGfxLen, muteGfxX; - int32_t i, chanLookup, chansPerRow; + int32_t i; - chansPerRow = (uint32_t)song.antChn >> 1; - chanLookup = chansPerRow - 1; - scopeLens = scopeLenTab[chanLookup]; + int32_t chansPerRow = (uint32_t)song.antChn >> 1; + int32_t chanLookup = chansPerRow - 1; + const uint16_t *scopeLens = scopeLenTab[chanLookup]; // get x,y,len for scope according to channel (we must do it this way since 'len' can differ!) - x = 2; - y = 94; + uint16_t x = 2; + uint16_t y = 94; - scopeLen = 0; // prevent compiler warning + uint16_t scopeLen = 0; // prevent compiler warning for (i = 0; i < song.antChn; i++) { scopeLen = scopeLens[i]; @@ -182,8 +175,8 @@ static void redrawScope(int32_t ch) // draw mute graphics if channel is muted if (!editor.chnMode[i]) { - muteGfxLen = scopeMuteBMP_Widths[chanLookup]; - muteGfxX = x + ((scopeLen - muteGfxLen) >> 1); + const uint16_t muteGfxLen = scopeMuteBMP_Widths[chanLookup]; + const uint16_t muteGfxX = x + ((scopeLen - muteGfxLen) >> 1); blitFastClipX(muteGfxX, y + 6, bmp.scopeMute+scopeMuteBMP_Offs[chanLookup], 162, scopeMuteBMP_Heights[chanLookup], muteGfxLen); @@ -202,17 +195,16 @@ void refreshScopes(void) static void channelMode(int32_t chn) { - bool m, m2, test; int32_t i; assert(chn < song.antChn); - m = mouse.leftButtonPressed && !mouse.rightButtonPressed; - m2 = mouse.rightButtonPressed && mouse.leftButtonPressed; + bool m = mouse.leftButtonPressed && !mouse.rightButtonPressed; + bool m2 = mouse.rightButtonPressed && mouse.leftButtonPressed; if (m2) { - test = false; + bool test = false; for (i = 0; i < song.antChn; i++) { if (i != chn && !editor.chnMode[i]) @@ -264,9 +256,7 @@ static void channelMode(int32_t chn) bool testScopesMouseDown(void) { - uint16_t x; - const uint16_t *scopeLens; - int32_t i, chansPerRow, chanToToggle; + int32_t i; if (!ui.scopesShown) return false; @@ -276,11 +266,11 @@ bool testScopesMouseDown(void) if (mouse.y > 130 && mouse.y < 134) return true; - chansPerRow = (uint32_t)song.antChn >> 1; - scopeLens = scopeLenTab[chansPerRow-1]; + int32_t chansPerRow = (uint32_t)song.antChn >> 1; + const uint16_t *scopeLens = scopeLenTab[chansPerRow-1]; // find out if we clicked inside a scope - x = 3; + uint16_t x = 3; for (i = 0; i < chansPerRow; i++) { if (mouse.x >= x && mouse.x < x+scopeLens[i]) @@ -292,7 +282,7 @@ bool testScopesMouseDown(void) if (i == chansPerRow) return true; // scope framework was clicked instead - chanToToggle = i; + int32_t chanToToggle = i; if (mouse.y >= 134) // second row of scopes? chanToToggle += chansPerRow; // yes, increase lookup offset @@ -305,20 +295,16 @@ bool testScopesMouseDown(void) static void scopeTrigger(int32_t ch, const sampleTyp *s, int32_t playOffset) { - bool sampleIs16Bit; - uint8_t loopType; - int32_t length, loopStart, loopLength, loopEnd; - volatile scope_t *sc; scope_t tempState; - sc = &scope[ch]; + volatile scope_t *sc = &scope[ch]; - length = s->len; - loopStart = s->repS; - loopLength = s->repL; - loopEnd = s->repS + s->repL; - loopType = s->typ & 3; - sampleIs16Bit = (s->typ >> 4) & 1; + int32_t length = s->len; + int32_t loopStart = s->repS; + int32_t loopLength = s->repL; + int32_t loopEnd = s->repS + s->repL; + uint8_t loopType = s->typ & 3; + bool sampleIs16Bit = (s->typ >> 4) & 1; if (sampleIs16Bit) { @@ -444,18 +430,13 @@ static void updateScopes(void) void drawScopes(void) { - int16_t scopeLineY; - const uint16_t *scopeLens; - uint16_t scopeXOffs, scopeYOffs, scopeDrawLen; - int32_t chansPerRow; - scopesDisplayingFlag = true; - chansPerRow = (uint32_t)song.antChn >> 1; + int32_t chansPerRow = (uint32_t)song.antChn >> 1; - scopeLens = scopeLenTab[chansPerRow-1]; - scopeXOffs = 3; - scopeYOffs = 95; - scopeLineY = 112; + const uint16_t *scopeLens = scopeLenTab[chansPerRow-1]; + uint16_t scopeXOffs = 3; + uint16_t scopeYOffs = 95; + int16_t scopeLineY = 112; for (int32_t i = 0; i < song.antChn; i++) { @@ -467,7 +448,7 @@ void drawScopes(void) scopeLineY = 151; } - scopeDrawLen = scopeLens[i]; + const uint16_t scopeDrawLen = scopeLens[i]; if (!editor.chnMode[i]) // scope muted (mute graphics blit()'ed elsewhere) { scopeXOffs += scopeDrawLen+3; // align x to next scope @@ -526,13 +507,11 @@ void drawScopeFramework(void) void handleScopesFromChQueue(chSyncData_t *chSyncData, uint8_t *scopeUpdateStatus) { - uint8_t status; - volatile scope_t *sc = scope; syncedChannel_t *ch = chSyncData->channels; for (int32_t i = 0; i < song.antChn; i++, sc++, ch++) { - status = scopeUpdateStatus[i]; + const uint8_t status = scopeUpdateStatus[i]; if (status & IS_Vol) sc->vol = (int32_t)((ch->dFinalVol * SCOPE_HEIGHT) + 0.5); // rounded @@ -631,10 +610,10 @@ static int32_t SDLCALL scopeThreadFunc(void *ptr) bool initScopes(void) { - double dInt, dFrac; + double dInt; // calculate scope time for performance counters and split into int/frac - dFrac = modf(editor.dPerfFreq / SCOPE_HZ, &dInt); + double dFrac = modf(editor.dPerfFreq / SCOPE_HZ, &dInt); // integer part scopeTimeLen = (int32_t)dInt; diff --git a/src/ft2_scrollbars.c b/src/ft2_scrollbars.c @@ -110,21 +110,17 @@ scrollBar_t scrollBars[NUM_SCROLLBARS] = void drawScrollBar(uint16_t scrollBarID) { - int16_t thumbX, thumbY, thumbW, thumbH; - scrollBar_t *scrollBar; - assert(scrollBarID < NUM_SCROLLBARS); - - scrollBar = &scrollBars[scrollBarID]; + scrollBar_t *scrollBar = &scrollBars[scrollBarID]; if (!scrollBar->visible) return; assert(scrollBar->x < SCREEN_W && scrollBar->y < SCREEN_H && scrollBar->w >= 3 && scrollBar->h >= 3); - thumbX = scrollBar->thumbX; - thumbY = scrollBar->thumbY; - thumbW = scrollBar->thumbW; - thumbH = scrollBar->thumbH; + int16_t thumbX = scrollBar->thumbX; + int16_t thumbY = scrollBar->thumbY; + int16_t thumbW = scrollBar->thumbW; + int16_t thumbH = scrollBar->thumbH; // clear scrollbar background (lazy, but sometimes even faster than filling bg gaps) clearRect(scrollBar->x, scrollBar->y, scrollBar->w, scrollBar->h); @@ -178,10 +174,9 @@ static void setScrollBarThumbCoords(uint16_t scrollBarID) int16_t thumbX, thumbY, thumbW, thumbH, scrollEnd, realThumbLength; int32_t tmp32, length, end; double dTmp; - scrollBar_t *scrollBar; assert(scrollBarID < NUM_SCROLLBARS); - scrollBar = &scrollBars[scrollBarID]; + scrollBar_t *scrollBar = &scrollBars[scrollBarID]; assert(scrollBar->page > 0); @@ -313,10 +308,8 @@ static void setScrollBarThumbCoords(uint16_t scrollBarID) void scrollBarScrollUp(uint16_t scrollBarID, uint32_t amount) { - scrollBar_t *scrollBar; - assert(scrollBarID < NUM_SCROLLBARS); - scrollBar = &scrollBars[scrollBarID]; + scrollBar_t *scrollBar = &scrollBars[scrollBarID]; assert(scrollBar->page > 0 && scrollBar->end > 0); @@ -337,18 +330,15 @@ void scrollBarScrollUp(uint16_t scrollBarID, uint32_t amount) void scrollBarScrollDown(uint16_t scrollBarID, uint32_t amount) { - uint32_t endPos; - scrollBar_t *scrollBar; - assert(scrollBarID < NUM_SCROLLBARS); - scrollBar = &scrollBars[scrollBarID]; + scrollBar_t *scrollBar = &scrollBars[scrollBarID]; assert(scrollBar->page > 0 && scrollBar->end > 0); if (scrollBar->end < scrollBar->page) return; - endPos = scrollBar->end; + uint32_t endPos = scrollBar->end; if (scrollBar->thumbType == SCROLLBAR_THUMB_FLAT) { if (endPos >= scrollBar->page) @@ -384,14 +374,12 @@ void scrollBarScrollRight(uint16_t scrollBarID, uint32_t amount) void setScrollBarPos(uint16_t scrollBarID, uint32_t pos, bool triggerCallBack) { - uint32_t endPos; - scrollBar_t *scrollBar; - assert(scrollBarID < NUM_SCROLLBARS); - scrollBar = &scrollBars[scrollBarID]; + scrollBar_t *scrollBar = &scrollBars[scrollBarID]; if (scrollBar->oldPos == pos) return; + scrollBar->oldPos = pos; if (scrollBar->page == 0) @@ -407,7 +395,7 @@ void setScrollBarPos(uint16_t scrollBarID, uint32_t pos, bool triggerCallBack) return; } - endPos = scrollBar->end; + uint32_t endPos = scrollBar->end; if (scrollBar->thumbType == SCROLLBAR_THUMB_FLAT) { if (endPos >= scrollBar->page) @@ -435,22 +423,20 @@ uint32_t getScrollBarPos(uint16_t scrollBarID) void setScrollBarEnd(uint16_t scrollBarID, uint32_t end) { - uint8_t setPos; - scrollBar_t *scrollBar; - assert(scrollBarID < NUM_SCROLLBARS); - scrollBar = &scrollBars[scrollBarID]; + scrollBar_t *scrollBar = &scrollBars[scrollBarID]; if (end < 1) end = 1; if (scrollBar->oldEnd == end) return; + scrollBar->oldEnd = end; scrollBar->end = end; - setPos = false; + bool setPos = false; if (scrollBar->pos >= end) { scrollBar->pos = end - 1; @@ -474,16 +460,15 @@ void setScrollBarEnd(uint16_t scrollBarID, uint32_t end) void setScrollBarPageLength(uint16_t scrollBarID, uint32_t pageLength) { - scrollBar_t *scrollBar; - assert(scrollBarID < NUM_SCROLLBARS); - scrollBar = &scrollBars[scrollBarID]; + scrollBar_t *scrollBar = &scrollBars[scrollBarID]; if (pageLength < 1) pageLength = 1; if (scrollBar->oldPage == pageLength) return; + scrollBar->oldPage = pageLength; scrollBar->page = pageLength; @@ -500,7 +485,6 @@ bool testScrollBarMouseDown(void) uint16_t start, end; int32_t scrollPos, length; double dTmp; - scrollBar_t *scrollBar; if (ui.sysReqShown) { @@ -514,14 +498,17 @@ bool testScrollBarMouseDown(void) end = NUM_SCROLLBARS; } - for (uint16_t i = start; i < end; i++) + const int32_t mx = mouse.x; + const int32_t my = mouse.y; + + scrollBar_t *scrollBar = &scrollBars[start]; + for (uint16_t i = start; i < end; i++, scrollBar++) { - scrollBar = &scrollBars[i]; if (!scrollBar->visible) continue; - if (mouse.x >= scrollBar->x && mouse.x < scrollBar->x+scrollBar->w && - mouse.y >= scrollBar->y && mouse.y < scrollBar->y+scrollBar->h) + if (mx >= scrollBar->x && mx < scrollBar->x+scrollBar->w && + my >= scrollBar->y && my < scrollBar->y+scrollBar->h) { mouse.lastUsedObjectID = i; mouse.lastUsedObjectType = OBJECT_SCROLLBAR; @@ -533,9 +520,9 @@ bool testScrollBarMouseDown(void) if (scrollBar->type == SCROLLBAR_HORIZONTAL) { - mouse.lastScrollXTmp = mouse.lastScrollX = mouse.x; + mouse.lastScrollXTmp = mouse.lastScrollX = mx; - if (mouse.x >= scrollBar->thumbX && mouse.x < scrollBar->thumbX+scrollBar->thumbW) + if (mx >= scrollBar->thumbX && mx < scrollBar->thumbX+scrollBar->thumbW) { mouse.saveMouseX = mouse.lastScrollX - scrollBar->thumbX; } @@ -565,8 +552,8 @@ bool testScrollBarMouseDown(void) } else { - mouse.lastScrollY = mouse.y; - if (mouse.y >= scrollBar->thumbY && mouse.y < scrollBar->thumbY+scrollBar->thumbH) + mouse.lastScrollY = my; + if (my >= scrollBar->thumbY && my < scrollBar->thumbY+scrollBar->thumbH) { mouse.saveMouseY = mouse.lastScrollY - scrollBar->thumbY; } @@ -607,14 +594,12 @@ bool testScrollBarMouseDown(void) void testScrollBarMouseRelease(void) { - scrollBar_t *scrollBar; - if (mouse.lastUsedObjectType != OBJECT_SCROLLBAR || mouse.lastUsedObjectID == OBJECT_ID_NONE) return; assert(mouse.lastUsedObjectID < NUM_SCROLLBARS); + scrollBar_t *scrollBar = &scrollBars[mouse.lastUsedObjectID]; - scrollBar = &scrollBars[mouse.lastUsedObjectID]; if (scrollBar->visible) { scrollBar->state = SCROLLBAR_UNPRESSED; @@ -626,10 +611,9 @@ void handleScrollBarsWhileMouseDown(void) { int32_t scrollX, scrollY, length; double dTmp; - scrollBar_t *scrollBar; assert(mouse.lastUsedObjectID >= 0 && mouse.lastUsedObjectID < NUM_SCROLLBARS); - scrollBar = &scrollBars[mouse.lastUsedObjectID]; + scrollBar_t *scrollBar = &scrollBars[mouse.lastUsedObjectID]; if (!scrollBar->visible) return; @@ -691,11 +675,12 @@ void handleScrollBarsWhileMouseDown(void) void initializeScrollBars(void) { - for (int32_t i = 0; i < NUM_SCROLLBARS; i++) + scrollBar_t *scrollBar = scrollBars; + for (int32_t i = 0; i < NUM_SCROLLBARS; i++, scrollBar++) { - scrollBars[i].oldEnd = UINT32_MAX; - scrollBars[i].oldPage = UINT32_MAX; - scrollBars[i].oldPos = UINT32_MAX; + scrollBar->oldEnd = UINT32_MAX; + scrollBar->oldPage = UINT32_MAX; + scrollBar->oldPos = UINT32_MAX; } // pattern editor diff --git a/src/ft2_sysreqs.c b/src/ft2_sysreqs.c @@ -77,10 +77,8 @@ static quitType_t quitMessage[QUIT_MESSAGES] = static void drawWindow(uint16_t w) { const uint16_t h = SYSTEM_REQUEST_H; - uint16_t x, y; - - x = (SCREEN_W - w) >> 1; - y = ui.extended ? 91 : SYSTEM_REQUEST_Y; + const uint16_t x = (SCREEN_W - w) >> 1; + const uint16_t y = ui.extended ? 91 : SYSTEM_REQUEST_Y; // main fill fillRect(x + 1, y + 1, w - 2, h - 2, PAL_BUTTONS); @@ -159,11 +157,9 @@ int16_t okBox(int16_t typ, const char *headline, const char *text) { #define PUSHBUTTON_W 80 - int16_t returnVal, oldLastUsedObjectID, oldLastUsedObjectType; - uint16_t x, y, i, tlen, hlen, wlen, tx, knp, headlineX, textX; + uint16_t i; SDL_Event inputEvent; pushButton_t *p; - checkBox_t *c; if (editor.editTextFlag) exitTextEditing(); @@ -180,22 +176,22 @@ int16_t okBox(int16_t typ, const char *headline, const char *text) ui.sysReqShown = true; mouseAnimOff(); - oldLastUsedObjectID = mouse.lastUsedObjectID; - oldLastUsedObjectType = mouse.lastUsedObjectType; + int16_t oldLastUsedObjectID = mouse.lastUsedObjectID; + int16_t oldLastUsedObjectType = mouse.lastUsedObjectType; // count number of buttons - knp = 0; + uint16_t knp = 0; while (buttonText[typ][knp][0] != '\0' && knp < 5) knp++; - tlen = textWidth(text); - hlen = textWidth(headline); + uint16_t tlen = textWidth(text); + uint16_t hlen = textWidth(headline); - wlen = tlen; + uint16_t wlen = tlen; if (hlen > tlen) wlen = hlen; - tx = (knp * 100) - 20; + uint16_t tx = (knp * 100) - 20; if (tx > wlen) wlen = tx; @@ -203,12 +199,12 @@ int16_t okBox(int16_t typ, const char *headline, const char *text) if (wlen > 600) wlen = 600; - headlineX = (SCREEN_W - hlen) >> 1; - textX = (SCREEN_W - tlen) >> 1; - x = (SCREEN_W - wlen) >> 1; + uint16_t headlineX = (SCREEN_W - hlen) >> 1; + uint16_t textX = (SCREEN_W - tlen) >> 1; + uint16_t x = (SCREEN_W - wlen) >> 1; // the box y position differs in extended pattern editor mode - y = ui.extended ? SYSTEM_REQUEST_Y_EXT : SYSTEM_REQUEST_Y; + uint16_t y = ui.extended ? SYSTEM_REQUEST_Y_EXT : SYSTEM_REQUEST_Y; // set up buttons for (i = 0; i < knp; i++) @@ -226,7 +222,7 @@ int16_t okBox(int16_t typ, const char *headline, const char *text) // set up checkbox (special okBox types only!) if (typ >= 6 && typ <= 7) { - c = &checkBoxes[0]; + checkBox_t *c = &checkBoxes[0]; c->x = x + 5; c->y = y + 50; c->clickAreaWidth = 116; @@ -253,7 +249,7 @@ int16_t okBox(int16_t typ, const char *headline, const char *text) mouse.rightButtonPressed = 0; // input/rendering loop - returnVal = 0; + int16_t returnVal = 0; while (ui.sysReqShown) { beginFPSCounter(); @@ -368,12 +364,8 @@ int16_t inputBox(int16_t typ, const char *headline, char *edText, uint16_t maxSt #define PUSHBUTTON_W 80 #define TEXTBOX_W 250 - char *inputText; - int16_t returnVal, oldLastUsedObjectID, oldLastUsedObjectType; - uint16_t y, wlen, tx, knp, headlineX, i; + uint16_t wlen, i; SDL_Event inputEvent; - pushButton_t *p; - textBox_t *t; if (editor.editTextFlag) exitTextEditing(); @@ -385,10 +377,10 @@ int16_t inputBox(int16_t typ, const char *headline, char *edText, uint16_t maxSt if (ui.sysReqShown) return 0; - oldLastUsedObjectID = mouse.lastUsedObjectID; - oldLastUsedObjectType = mouse.lastUsedObjectType; + int16_t oldLastUsedObjectID = mouse.lastUsedObjectID; + int16_t oldLastUsedObjectType = mouse.lastUsedObjectType; - t = &textBoxes[0]; + textBox_t *t = &textBoxes[0]; // set up text box memset(t, 0, sizeof (textBox_t)); @@ -416,14 +408,14 @@ int16_t inputBox(int16_t typ, const char *headline, char *edText, uint16_t maxSt mouseAnimOff(); wlen = textWidth(headline); - headlineX = (SCREEN_W - wlen) >> 1; + uint16_t headlineX = (SCREEN_W - wlen) >> 1; // count number of buttons - knp = 0; + uint16_t knp = 0; while (buttonText[typ][knp][0] != '\0' && knp < 5) knp++; - tx = TEXTBOX_W; + uint16_t tx = TEXTBOX_W; if (tx > wlen) wlen = tx; @@ -436,7 +428,7 @@ int16_t inputBox(int16_t typ, const char *headline, char *edText, uint16_t maxSt wlen = 600; // the box y position differs in extended pattern editor mode - y = ui.extended ? SYSTEM_REQUEST_Y_EXT : SYSTEM_REQUEST_Y; + uint16_t y = ui.extended ? SYSTEM_REQUEST_Y_EXT : SYSTEM_REQUEST_Y; // set further text box settings t->x = (SCREEN_W - TEXTBOX_W) >> 1; @@ -444,10 +436,10 @@ int16_t inputBox(int16_t typ, const char *headline, char *edText, uint16_t maxSt t->visible = true; // setup buttons - for (i = 0; i < knp; i++) - { - p = &pushButtons[i]; + pushButton_t *p = pushButtons; + for (i = 0; i < knp; i++, p++) + { p->w = PUSHBUTTON_W; p->h = 16; p->x = ((SCREEN_W - tx) >> 1) + (i * 100); @@ -469,7 +461,7 @@ int16_t inputBox(int16_t typ, const char *headline, char *edText, uint16_t maxSt mouse.rightButtonPressed = 0; // input/rendering loop - returnVal = 0; + int16_t returnVal = 0; while (ui.sysReqShown) { beginFPSCounter(); @@ -497,7 +489,7 @@ int16_t inputBox(int16_t typ, const char *headline, char *edText, uint16_t maxSt continue; } - inputText = utf8ToCp437(inputEvent.text.text, false); + char *inputText = utf8ToCp437(inputEvent.text.text, false); if (inputText != NULL) { if (inputText[0] != '\0') diff --git a/src/ft2_tables.c b/src/ft2_tables.c @@ -458,6 +458,9 @@ pal16 palTable[12][16] = // FT2 palettes (18-bit VGA RGB, 16 color palette) } }; +const int8_t maxVisibleChans1[4] = { 4, 6, 8, 8 }; +const int8_t maxVisibleChans2[4] = { 4, 6, 8, 12 }; + const uint16_t chanWidths[6] = { 141, 141, 93, 69, 45, 45 }; const pattCoordsMouse_t pattCoordMouseTable[2][2][2] = diff --git a/src/ft2_tables.h b/src/ft2_tables.h @@ -23,6 +23,8 @@ extern const char *dec3StrTab[256]; extern const uint8_t font1Widths[128]; extern const uint8_t font2Widths[128]; extern pal16 palTable[12][16]; +extern const int8_t maxVisibleChans1[4]; +extern const int8_t maxVisibleChans2[4]; extern const uint16_t chanWidths[6]; extern const pattCoordsMouse_t pattCoordMouseTable[2][2][2]; extern const uint8_t noteTab1[96]; diff --git a/src/ft2_textboxes.c b/src/ft2_textboxes.c @@ -132,24 +132,21 @@ static int16_t getTextLength(textBox_t *t, uint16_t offset) static void deleteMarkedText(textBox_t *t) { - int16_t start, end; - int32_t i, deleteTextWidth, length; - if (!textIsMarked()) return; - start = getTextMarkStart(); - end = getTextMarkEnd(); + const int16_t start = getTextMarkStart(); + const int16_t end = getTextMarkEnd(); assert(start < t->maxChars && end <= t->maxChars); // calculate pixel width of string to delete - deleteTextWidth = 0; - for (i = start; i < end; i++) + int32_t deleteTextWidth = 0; + for (int32_t i = start; i < end; i++) deleteTextWidth += charWidth(t->textPtr[i]); // copy markEnd part to markStart, and add null termination - length = (int32_t)strlen(&t->textPtr[end]); + const int32_t length = (int32_t)strlen(&t->textPtr[end]); if (length > 0) memcpy(&t->textPtr[start], &t->textPtr[end], length); t->textPtr[start+length] = '\0'; @@ -168,21 +165,17 @@ static void deleteMarkedText(textBox_t *t) static void setCursorToMarkStart(textBox_t *t) { - char ch; - int16_t start; - int32_t startXPos; - if (!textIsMarked()) return; - start = getTextMarkStart(); + const int16_t start = getTextMarkStart(); assert(start < t->maxChars); t->cursorPos = start; - startXPos = 0; + int32_t startXPos = 0; for (int32_t i = 0; i < start; i++) { - ch = t->textPtr[i]; + const char ch = t->textPtr[i]; if (ch == '\0') break; @@ -196,21 +189,17 @@ static void setCursorToMarkStart(textBox_t *t) static void setCursorToMarkEnd(textBox_t *t) { - char ch; - int16_t end; - int32_t endXPos; - if (!textIsMarked()) return; - end = getTextMarkEnd(); + const int16_t end = getTextMarkEnd(); assert(end <= t->maxChars); t->cursorPos = end; - endXPos = 0; + int32_t endXPos = 0; for (int32_t i = 0; i < end; i++) { - ch = t->textPtr[i]; + const char ch = t->textPtr[i]; if (ch == '\0') break; @@ -224,30 +213,27 @@ static void setCursorToMarkEnd(textBox_t *t) static void copyMarkedText(textBox_t *t) { - int32_t length, start, end; - char *utf8Text, oldChar; - if (!textIsMarked()) return; - start = getTextMarkStart(); - end = getTextMarkEnd(); + const int32_t start = getTextMarkStart(); + const int32_t end = getTextMarkEnd(); assert(start < t->maxChars && end <= t->maxChars); - length = end - start; + const int32_t length = end - start; if (length < 1) return; /* Change mark-end character to NUL so that we - * we only copy the marked section of the string. - * There's always room for a NUL at the end of - * the text box string, so this is safe. - */ - oldChar = t->textPtr[end]; + ** we only copy the marked section of the string. + ** There's always room for a NUL at the end of + ** the text box string, so this is safe. + **/ + const char oldChar = t->textPtr[end]; t->textPtr[end] = '\0'; - utf8Text = cp437ToUtf8(&t->textPtr[start]); + char *utf8Text = cp437ToUtf8(&t->textPtr[start]); if (utf8Text != NULL) { SDL_SetClipboardText(utf8Text); @@ -271,9 +257,7 @@ static void cutMarkedText(textBox_t *t) static void pasteText(textBox_t *t) { - char *copiedText, *copiedTextUtf8, *endPart; - uint16_t endOffset; - int32_t textLength, roomLeft, copiedTextLength, endPartLength; + char *endPart; if (!SDL_HasClipboardText()) return; @@ -288,29 +272,29 @@ static void pasteText(textBox_t *t) if (t->cursorPos >= t->maxChars) return; - textLength = getTextLength(t, 0); + const int32_t textLength = getTextLength(t, 0); - roomLeft = t->maxChars - textLength; + const int32_t roomLeft = t->maxChars - textLength; if (roomLeft <= 0) return; // no more room! - copiedTextUtf8 = SDL_GetClipboardText(); + char *copiedTextUtf8 = SDL_GetClipboardText(); - copiedText = utf8ToCp437(copiedTextUtf8, true); + char *copiedText = utf8ToCp437(copiedTextUtf8, true); if (copiedText == NULL) return; - copiedTextLength = (int32_t)strlen(copiedText); + int32_t copiedTextLength = (int32_t)strlen(copiedText); if (copiedTextLength > roomLeft) copiedTextLength = roomLeft; - endOffset = t->cursorPos; + const uint16_t endOffset = t->cursorPos; endPart = NULL; // prevent false compiler warning - endPartLength = getTextLength(t, endOffset); + const int32_t endPartLength = getTextLength(t, endOffset); if (endPartLength > 0) { - endPart = (char *)malloc(endPartLength + 1); + endPart = (char *)malloc(endPartLength+1); if (endPart == NULL) { free(copiedText); @@ -373,11 +357,9 @@ void exitTextEditing(void) static int16_t cursorPosToX(textBox_t *t) { - int32_t x; - assert(t->textPtr != NULL); - x = -1; // cursor starts one pixel before character + int32_t x = -1; // cursor starts one pixel before character for (int16_t i = 0; i < t->cursorPos; i++) x += charWidth(t->textPtr[i]); @@ -405,12 +387,10 @@ static void scrollTextBufferLeft(textBox_t *t) static void scrollTextBufferRight(textBox_t *t, uint16_t numCharsInText) { - int32_t textEnd; - assert(numCharsInText <= t->maxChars); // get end of text position - textEnd = 0; + int32_t textEnd = 0; for (uint16_t j = 0; j < numCharsInText; j++) textEnd += charWidth(t->textPtr[j]); @@ -427,29 +407,26 @@ static void scrollTextBufferRight(textBox_t *t, uint16_t numCharsInText) static void moveTextCursorToMouseX(uint16_t textBoxID) { - int8_t cw; - int16_t i, numChars, cursorPos; - int32_t mx, tx, tx2; - textBox_t *t; + int16_t i; - t = &textBoxes[textBoxID]; + textBox_t *t = &textBoxes[textBoxID]; if ((mouse.x == t->x && t->bufOffset == 0) || t->textPtr == NULL || t->textPtr[0] == '\0') { t->cursorPos = 0; return; } - numChars = getTextLength(t, 0); + int16_t numChars = getTextLength(t, 0); // find out what character we are clicking at, and set cursor to that character - mx = t->bufOffset + mouse.x; - tx = (t->x + t->tx) - 1; - cw = -1; + const int32_t mx = t->bufOffset + mouse.x; + int32_t tx = (t->x + t->tx) - 1; + int32_t cw = -1; for (i = 0; i < numChars; i++) { cw = charWidth(t->textPtr[i]); - tx2 = tx + cw; + const int32_t tx2 = tx + cw; if (mx >= tx && mx < tx2) { @@ -466,7 +443,7 @@ static void moveTextCursorToMouseX(uint16_t textBoxID) if (cw != -1) { - cursorPos = cursorPosToX(t); + const int16_t cursorPos = cursorPosToX(t); // scroll buffer to the right if needed if (cursorPos+cw > t->renderW) @@ -482,26 +459,21 @@ static void moveTextCursorToMouseX(uint16_t textBoxID) static void textOutBuf(uint8_t *dstBuffer, uint32_t dstWidth, uint8_t paletteIndex, char *text, uint32_t maxTextLen) { - char chr; - uint8_t *dstPtr; - const uint8_t *srcPtr; - uint16_t currX; - assert(text != NULL); if (*text == '\0') return; // empty string - currX = 0; + uint16_t currX = 0; for (uint32_t i = 0; i < maxTextLen; i++) { - chr = *text++ & 0x7F; + const char chr = *text++ & 0x7F; if (chr == '\0') break; if (chr != ' ') { - srcPtr = &bmp.font1[chr * FONT1_CHAR_W]; - dstPtr = &dstBuffer[currX]; + const uint8_t *srcPtr = &bmp.font1[chr * FONT1_CHAR_W]; + uint8_t *dstPtr = &dstBuffer[currX]; for (uint32_t y = 0; y < FONT1_CHAR_H; y++) { @@ -523,14 +495,11 @@ static void textOutBuf(uint8_t *dstBuffer, uint32_t dstWidth, uint8_t paletteInd // a lot of filling here, but textboxes are small so no problem... void drawTextBox(uint16_t textBoxID) { - char ch; int8_t cw; uint8_t pal; - int32_t start, end, x1, x2, length; - textBox_t *t; assert(textBoxID < NUM_TEXTBOXES); - t = &textBoxes[textBoxID]; + textBox_t *t = &textBoxes[textBoxID]; if (!t->visible) return; @@ -551,17 +520,19 @@ void drawTextBox(uint16_t textBoxID) { hideSprite(SPRITE_TEXT_CURSOR); - start = getTextMarkStart(); - end = getTextMarkEnd(); + int32_t start = getTextMarkStart(); + int32_t end = getTextMarkEnd(); assert(start < t->maxChars && end <= t->maxChars); // find pixel start/length from markX1 and markX2 - x1 = 0; x2 = 0; + int32_t x1 = 0; + int32_t x2 = 0; + for (int32_t i = 0; i < end; i++) { - ch = t->textPtr[i]; + const char ch = t->textPtr[i]; if (ch == '\0') break; @@ -576,11 +547,13 @@ void drawTextBox(uint16_t textBoxID) if (x1 != x2) { start = x1; - length = x2 - x1; + const int32_t length = x2 - x1; assert(start+length <= t->renderBufW); - for (uint16_t y = 0; y < t->renderBufH; y++) - memset(&t->renderBuf[(y * t->renderBufW) + start], PAL_TEXTMRK, length); + + uint8_t *ptr32 = &t->renderBuf[start]; + for (uint16_t y = 0; y < t->renderBufH; y++, ptr32 += t->renderBufW) + memset(ptr32, PAL_TEXTMRK, length); } } @@ -610,9 +583,7 @@ void hideTextBox(uint16_t textBoxID) static void setMarkX2ToMouseX(textBox_t *t) { - int8_t cw; - int16_t i, numChars; - int32_t mx, tx, tx2; + int16_t i; if (t->textPtr == NULL || t->textPtr[0] == '\0') { @@ -626,16 +597,16 @@ static void setMarkX2ToMouseX(textBox_t *t) return; } - numChars = getTextLength(t, 0); + const int16_t numChars = getTextLength(t, 0); // find out what character we are clicking at, and set markX2 to that character - mx = t->bufOffset + mouse.x; - tx = (t->x + t->tx) - 1; + const int32_t mx = t->bufOffset + mouse.x; + int32_t tx = (t->x + t->tx) - 1; for (i = 0; i < numChars; i++) { - cw = charWidth(t->textPtr[i]); - tx2 = tx + cw; + const int32_t cw = charWidth(t->textPtr[i]); + const int32_t tx2 = tx + cw; if (mx >= tx && mx < tx2) { @@ -674,10 +645,8 @@ static void setMarkX2ToMouseX(textBox_t *t) void handleTextBoxWhileMouseDown(void) { - textBox_t *t; - assert(mouse.lastUsedObjectID >= 0 && mouse.lastUsedObjectID < NUM_TEXTBOXES); - t = &textBoxes[mouse.lastUsedObjectID]; + textBox_t *t = &textBoxes[mouse.lastUsedObjectID]; if (!t->visible) return; @@ -695,7 +664,6 @@ void handleTextBoxWhileMouseDown(void) bool testTextBoxMouseDown(void) { uint16_t start, end; - textBox_t *t; oldMouseX = mouse.x; oldCursorPos = 0; @@ -712,14 +680,17 @@ bool testTextBoxMouseDown(void) end = NUM_TEXTBOXES; } - for (uint16_t i = start; i < end; i++) + const int32_t mx = mouse.x; + const int32_t my = mouse.y; + + textBox_t *t = &textBoxes[start]; + for (uint16_t i = start; i < end; i++, t++) { - t = &textBoxes[i]; if (!t->visible || t->textPtr == NULL) continue; - if (mouse.y >= t->y && mouse.y < t->y+t->h && - mouse.x >= t->x && mouse.x < t->x+t->w) + if (my >= t->y && my < t->y+t->h && + mx >= t->x && mx < t->x+t->w) { if (!mouse.rightButtonPressed && t->rightMouseButton) break; @@ -755,7 +726,7 @@ bool testTextBoxMouseDown(void) void updateTextBoxPointers(void) { - uint8_t i; + int32_t i; instrTyp *curIns = instr[editor.curInstr]; // instrument names @@ -789,15 +760,13 @@ void setupInitialTextBoxPointers(void) void setTextCursorToEnd(textBox_t *t) { - char ch; uint16_t numChars; - uint32_t textWidth; // count number of chars and get full text width - textWidth = 0; + uint32_t textWidth = 0; for (numChars = 0; numChars < t->maxChars; numChars++) { - ch = t->textPtr[numChars]; + const char ch = t->textPtr[numChars]; if (ch == '\0') break; @@ -836,11 +805,10 @@ void handleTextEditControl(SDL_Keycode keycode) uint16_t numChars; int32_t textLength; uint32_t textWidth; - textBox_t *t; assert(mouse.lastEditBox >= 0 && mouse.lastEditBox < NUM_TEXTBOXES); - t = &textBoxes[mouse.lastEditBox]; + textBox_t *t = &textBoxes[mouse.lastEditBox]; assert(t->textPtr != NULL); switch (keycode) @@ -1123,17 +1091,13 @@ void handleTextEditControl(SDL_Keycode keycode) void handleTextEditInputChar(char textChar) { - int8_t ch; - int16_t i; - textBox_t *t; - assert(mouse.lastEditBox >= 0 && mouse.lastEditBox < NUM_TEXTBOXES); - t = &textBoxes[mouse.lastEditBox]; + textBox_t *t = &textBoxes[mouse.lastEditBox]; if (t->textPtr == NULL) return; - ch = (int8_t)textChar; + const int8_t ch = (const int8_t)textChar; if (ch < 32 && ch != -124 && ch != -108 && ch != -122 && ch != -114 && ch != -103 && ch != -113) return; // allow certain codepage 437 nordic characters @@ -1145,7 +1109,7 @@ void handleTextEditInputChar(char textChar) if (t->cursorPos >= 0 && t->cursorPos < t->maxChars) { - i = getTextLength(t, 0); + int32_t i = getTextLength(t, 0); if (i < t->maxChars) // do we have room for a new character? { t->textPtr[i+1] = '\0'; @@ -1167,9 +1131,7 @@ void handleTextEditInputChar(char textChar) static void moveTextCursorLeft(int16_t i, bool updateTextBox) { - textBox_t *t; - - t = &textBoxes[i]; + textBox_t *t = &textBoxes[i]; if (t->cursorPos == 0) return; @@ -1187,12 +1149,9 @@ static void moveTextCursorLeft(int16_t i, bool updateTextBox) static void moveTextCursorRight(int16_t i, bool updateTextBox) { - uint16_t numChars; - textBox_t *t; + textBox_t *t = &textBoxes[i]; - t = &textBoxes[i]; - - numChars = getTextLength(t, 0); + const uint16_t numChars = getTextLength(t, 0); if (t->cursorPos >= numChars) return; @@ -1210,12 +1169,10 @@ static void moveTextCursorRight(int16_t i, bool updateTextBox) void freeTextBoxes(void) { - textBox_t *t; - // free text box buffers (skip first entry, it's reserved for inputBox()) - for (int32_t i = 1; i < NUM_TEXTBOXES; i++) + textBox_t *t = &textBoxes[1]; + for (int32_t i = 1; i < NUM_TEXTBOXES; i++, t++) { - t = &textBoxes[i]; if (t->renderBuf != NULL) { free(t->renderBuf); diff --git a/src/ft2_trim.c b/src/ft2_trim.c @@ -68,19 +68,16 @@ static bool setTmpInstruments(void) static void remapInstrInSong(uint8_t src, uint8_t dst, int32_t ap) { - int32_t readLen; - tonTyp *pattPtr, *note; - for (int32_t i = 0; i < ap; i++) { - pattPtr = patt[i]; + tonTyp *pattPtr = patt[i]; if (pattPtr == NULL) continue; - readLen = pattLens[i] * MAX_VOICES; + const int32_t readLen = pattLens[i] * MAX_VOICES; for (int32_t j = 0; j < readLen; j++) { - note = &pattPtr[j]; + tonTyp *note = &pattPtr[j]; if (note->instr == src) note->instr = dst; } @@ -89,22 +86,19 @@ static void remapInstrInSong(uint8_t src, uint8_t dst, int32_t ap) static int16_t getUsedTempSamples(uint16_t nr) { - int16_t i, j; - instrTyp *ins; - if (tmpInstr[nr] == NULL) return 0; - ins = tmpInstr[nr]; + instrTyp *ins = tmpInstr[nr]; - i = 16 - 1; + int16_t i = 16 - 1; while (i >= 0 && ins->samp[i].pek == NULL && ins->samp[i].name[0] == '\0') i--; /* Yes, 'i' can be -1 here, and will be set to at least 0 ** because of ins->ta values. Possibly an FT2 bug... **/ - for (j = 0; j < 96; j++) + for (int16_t j = 0; j < 96; j++) { if (ins->ta[j] > i) i = ins->ta[j]; @@ -115,15 +109,13 @@ static int16_t getUsedTempSamples(uint16_t nr) static int64_t getTempInsAndSmpSize(void) { - int16_t a, j, ai; - int64_t currSize64; - instrTyp *ins; + int16_t j; - ai = MAX_INST; + int16_t ai = MAX_INST; while (ai > 0 && getUsedTempSamples(ai) == 0 && tmpInstrName[ai][0] == '\0') ai--; - currSize64 = 0; + int64_t currSize64 = 0; // count instrument and sample data size in song for (int16_t i = 1; i <= ai; i++) @@ -133,13 +125,13 @@ static int64_t getTempInsAndSmpSize(void) else j = i; - a = getUsedTempSamples(i); + const int16_t a = getUsedTempSamples(i); if (a > 0) currSize64 += INSTR_HEADER_SIZE + (a * sizeof (sampleHeaderTyp)); else currSize64 += 22+11; - ins = tmpInstr[j]; + instrTyp *ins = tmpInstr[j]; for (int16_t k = 0; k < a; k++) { if (ins->samp[k].pek != NULL) @@ -153,11 +145,11 @@ static int64_t getTempInsAndSmpSize(void) static void wipeInstrUnused(bool testWipeSize, int16_t *ai, int32_t ap, int32_t antChn) { uint8_t newInst; - int16_t newNumInsts, instToDel, pattLen; - int32_t numInsts, i, j, k; + int16_t pattLen; + int32_t i, j, k; tonTyp *pattPtr; - numInsts = *ai; + int32_t numInsts = *ai; // calculate what instruments are used memset(instrUsed, 0, numInsts); @@ -188,9 +180,9 @@ static void wipeInstrUnused(bool testWipeSize, int16_t *ai, int32_t ap, int32_t } } - instToDel = 0; + int16_t instToDel = 0; newInst = 0; - newNumInsts = 0; + int16_t newNumInsts = 0; memset(instrOrder, 0, numInsts); for (i = 0; i < numInsts; i++) @@ -278,13 +270,13 @@ static void wipeInstrUnused(bool testWipeSize, int16_t *ai, int32_t ap, int32_t static void wipePattsUnused(bool testWipeSize, int16_t *ap) { uint8_t newPatt; - int16_t usedPatts, newUsedPatts, i, *pLens; + int16_t i, *pLens; tonTyp **p; - usedPatts = *ap; + int16_t usedPatts = *ap; memset(pattUsed, 0, usedPatts); - newUsedPatts = 0; + int16_t newUsedPatts = 0; for (i = 0; i < song.len; i++) { newPatt = song.songTab[i]; @@ -366,12 +358,12 @@ static void wipePattsUnused(bool testWipeSize, int16_t *ap) static void wipeSamplesUnused(bool testWipeSize, int16_t ai) { - uint8_t newSamp, smpUsed[16], smpOrder[16]; - int16_t i, j, k, l; + uint8_t smpUsed[16], smpOrder[16]; + int16_t j, k, l; instrTyp *ins; - sampleTyp *s, tempSamples[16]; + sampleTyp tempSamples[16]; - for (i = 1; i <= ai; i++) + for (int16_t i = 1; i <= ai; i++) { if (!testWipeSize) { @@ -397,10 +389,9 @@ static void wipeSamplesUnused(bool testWipeSize, int16_t ai) memset(smpUsed, 0, l); if (l > 0) { - for (j = 0; j < l; j++) + sampleTyp *s = ins->samp; + for (j = 0; j < l; j++, s++) { - s = &ins->samp[j]; - // check if sample is referenced in instrument for (k = 0; k < 96; k++) { @@ -425,7 +416,7 @@ static void wipeSamplesUnused(bool testWipeSize, int16_t ai) } // create re-order list - newSamp = 0; + uint8_t newSamp = 0; memset(smpOrder, 0, l); for (j = 0; j < l; j++) { @@ -459,10 +450,8 @@ static void wipeSamplesUnused(bool testWipeSize, int16_t ai) static void wipeSmpDataAfterLoop(bool testWipeSize, int16_t ai) { - int8_t *newPtr; int16_t l; instrTyp *ins; - sampleTyp *s; for (int16_t i = 1; i <= ai; i++) { @@ -487,9 +476,9 @@ static void wipeSmpDataAfterLoop(bool testWipeSize, int16_t ai) l = getUsedTempSamples(i); } - for (int16_t j = 0; j < l; j++) + sampleTyp *s = ins->samp; + for (int16_t j = 0; j < l; j++, s++) { - s = &ins->samp[j]; if (s->origPek != NULL && s->typ & 3 && s->len > 0 && s->len > s->repS+s->repL) { if (!testWipeSize) @@ -508,7 +497,7 @@ static void wipeSmpDataAfterLoop(bool testWipeSize, int16_t ai) } else { - newPtr = (int8_t *)realloc(s->origPek, s->len + LOOP_FIX_LEN); + int8_t *newPtr = (int8_t *)realloc(s->origPek, s->len + LOOP_FIX_LEN); if (newPtr != NULL) { s->origPek = newPtr; @@ -526,11 +515,8 @@ static void wipeSmpDataAfterLoop(bool testWipeSize, int16_t ai) static void convertSamplesTo8bit(bool testWipeSize, int16_t ai) { - int8_t *dst8, smp8, *newPtr; - int16_t *src16, k; - int32_t newLen; + int16_t k; instrTyp *ins; - sampleTyp *s; for (int16_t i = 1; i <= ai; i++) { @@ -555,9 +541,9 @@ static void convertSamplesTo8bit(bool testWipeSize, int16_t ai) k = getUsedTempSamples(i); } - for (int16_t j = 0; j < k; j++) + sampleTyp *s = ins->samp; + for (int16_t j = 0; j < k; j++, s++) { - s = &ins->samp[j]; if (s->origPek != NULL && (s->typ & 16) && s->len > 0) { if (testWipeSize) @@ -572,22 +558,19 @@ static void convertSamplesTo8bit(bool testWipeSize, int16_t ai) restoreSample(s); assert(s->pek != NULL); - src16 = (int16_t *)s->pek; - dst8 = s->pek; + const int16_t *src16 = (const int16_t *)s->pek; + int8_t *dst8 = s->pek; - newLen = s->len >> 1; + const int32_t newLen = s->len >> 1; for (int32_t a = 0; a < newLen; a++) - { - smp8 = src16[a] >> 8; - dst8[a] = smp8; - } + dst8[a] = src16[a] >> 8; s->repL >>= 1; s->repS >>= 1; s->len >>= 1; s->typ &= ~16; - newPtr = (int8_t *)realloc(s->origPek, s->len + LOOP_FIX_LEN); + int8_t *newPtr = (int8_t *)realloc(s->origPek, s->len + LOOP_FIX_LEN); if (newPtr != NULL) { s->origPek = newPtr; @@ -603,14 +586,12 @@ static void convertSamplesTo8bit(bool testWipeSize, int16_t ai) static uint16_t getPackedPattSize(tonTyp *pattern, int32_t numRows, int32_t antChn) { - uint8_t bytes[sizeof (tonTyp)], packBits, *writePtr, *firstBytePtr, *pattPtr; - uint16_t totalPackLen; - - totalPackLen = 0; + uint8_t bytes[sizeof (tonTyp)]; - pattPtr = (uint8_t *)pattern; + uint16_t totalPackLen = 0; + uint8_t *pattPtr = (uint8_t *)pattern; + uint8_t *writePtr = pattPtr; - writePtr = pattPtr; for (int32_t row = 0; row < numRows; row++) { for (int32_t chn = 0; chn < antChn; chn++) @@ -621,9 +602,9 @@ static uint16_t getPackedPattSize(tonTyp *pattern, int32_t numRows, int32_t antC bytes[3] = *pattPtr++; bytes[4] = *pattPtr++; - firstBytePtr = writePtr++; + uint8_t *firstBytePtr = writePtr++; - packBits = 0; + uint8_t packBits = 0; if (bytes[0] > 0) { packBits |= 1; writePtr++; } // note if (bytes[1] > 0) { packBits |= 2; writePtr++; } // instrument if (bytes[2] > 0) { packBits |= 4; writePtr++; } // volume column @@ -634,7 +615,6 @@ static uint16_t getPackedPattSize(tonTyp *pattern, int32_t numRows, int32_t antC // no packing needed, write pattern data as is totalPackLen += 5; writePtr += 5; - continue; } @@ -652,15 +632,12 @@ static uint16_t getPackedPattSize(tonTyp *pattern, int32_t numRows, int32_t antC static bool tmpPatternEmpty(uint16_t nr, int32_t antChn) { - uint8_t *scanPtr; - int32_t pattLen, scanLen; - if (tmpPatt[nr] == NULL) return true; - scanPtr = (uint8_t *)tmpPatt[nr]; - scanLen = antChn * sizeof (tonTyp); - pattLen = tmpPattLens[nr]; + uint8_t *scanPtr = (uint8_t *)tmpPatt[nr]; + int32_t scanLen = antChn * sizeof (tonTyp); + int32_t pattLen = tmpPattLens[nr]; for (int32_t i = 0; i < pattLen; i++) { @@ -678,15 +655,11 @@ static bool tmpPatternEmpty(uint16_t nr, int32_t antChn) static int64_t calculateXMSize(void) { - int16_t i, j, ap, ai, a; - int64_t currSize64; - instrTyp *ins; - // count header size in song - currSize64 = sizeof (songHeaderTyp); + int64_t currSize64 = sizeof (songHeaderTyp); // count number of patterns that would be saved - ap = MAX_PATTERNS; + int16_t ap = MAX_PATTERNS; do { if (patternEmpty(ap - 1)) @@ -697,12 +670,12 @@ static int64_t calculateXMSize(void) while (ap > 0); // count number of instruments - ai = 128; + int16_t ai = 128; while (ai > 0 && getUsedSamples(ai) == 0 && song.instrName[ai][0] == '\0') ai--; // count packed pattern data size in song - for (i = 0; i < ap; i++) + for (int16_t i = 0; i < ap; i++) { currSize64 += sizeof (patternHeaderTyp); if (!patternEmpty(i)) @@ -710,20 +683,21 @@ static int64_t calculateXMSize(void) } // count instrument and sample data size in song - for (i = 1; i <= ai; i++) + for (int16_t i = 1; i <= ai; i++) { + int16_t j; if (instr[i] == NULL) j = 0; else j = i; - a = getUsedSamples(i); + const int16_t a = getUsedSamples(i); if (a > 0) currSize64 += INSTR_HEADER_SIZE + (a * sizeof (sampleHeaderTyp)); else currSize64 += 22+11; - ins = instr[j]; + instrTyp *ins = instr[j]; for (int16_t k = 0; k < a; k++) { if (ins->samp[k].pek != NULL) @@ -736,16 +710,13 @@ static int64_t calculateXMSize(void) static int64_t calculateTrimSize(void) { - int16_t ap, i, j, k, ai, highestChan, pattLen; - int32_t antChn, pattDataLen, newPattDataLen; - int64_t bytes64, oldInstrSize64, newInstrSize64; - tonTyp *note, *pattPtr; + int16_t i, j, k; - antChn = song.antChn; - pattDataLen = 0; - newPattDataLen = 0; - bytes64 = 0; - oldInstrSize64 = 0; + int32_t antChn = song.antChn; + int32_t pattDataLen = 0; + int32_t newPattDataLen = 0; + int64_t bytes64 = 0; + int64_t oldInstrSize64 = 0; // copy over temp data memcpy(tmpPatt, patt, sizeof (tmpPatt)); @@ -763,7 +734,7 @@ static int64_t calculateTrimSize(void) oldInstrSize64 = getTempInsAndSmpSize(); // count number of patterns that would be saved - ap = MAX_PATTERNS; + int16_t ap = MAX_PATTERNS; do { if (tmpPatternEmpty(ap - 1, antChn)) @@ -774,7 +745,7 @@ static int64_t calculateTrimSize(void) while (ap > 0); // count number of instruments that would be saved - ai = MAX_INST; + int16_t ai = MAX_INST; while (ai > 0 && getUsedTempSamples(ai) == 0 && tmpInstrName[ai][0] == '\0') ai--; @@ -802,19 +773,19 @@ static int64_t calculateTrimSize(void) if (removeChans) { // get real number of channels - highestChan = -1; + int16_t highestChan = -1; for (i = 0; i < ap; i++) { - pattPtr = tmpPatt[i]; + tonTyp *pattPtr = tmpPatt[i]; if (pattPtr == NULL) continue; - pattLen = tmpPattLens[i]; + const int16_t pattLen = tmpPattLens[i]; for (j = 0; j < pattLen; j++) { for (k = 0; k < antChn; k++) { - note = &pattPtr[(j * MAX_VOICES) + k]; + tonTyp *note = &pattPtr[(j * MAX_VOICES) + k]; if (note->eff || note->effTyp || note->instr || note->ton || note->vol) { if (k > highestChan) @@ -860,10 +831,9 @@ static int64_t calculateTrimSize(void) // calculat new instruments and samples size if (removeInst || removeSamp || removeSmpDataAfterLoop || convSmpsTo8Bit) { - newInstrSize64 = getTempInsAndSmpSize(); + int64_t newInstrSize64 = getTempInsAndSmpSize(); assert(oldInstrSize64 >= newInstrSize64); - if (oldInstrSize64 > newInstrSize64) bytes64 += (oldInstrSize64 - newInstrSize64); } @@ -874,10 +844,7 @@ static int64_t calculateTrimSize(void) static int32_t SDLCALL trimThreadFunc(void *ptr) { - int16_t ap, ai, i, j, k, pattLen, highestChan; - tonTyp *pattPtr, *note; - - (void)ptr; + int16_t i, j, k; if (!setTmpInstruments()) { @@ -888,7 +855,7 @@ static int32_t SDLCALL trimThreadFunc(void *ptr) // audio callback is not running now, so we're safe // count number of patterns - ap = MAX_PATTERNS; + int16_t ap = MAX_PATTERNS; do { if (patternEmpty(ap - 1)) @@ -899,7 +866,7 @@ static int32_t SDLCALL trimThreadFunc(void *ptr) while (ap > 0); // count number of instruments - ai = MAX_INST; + int16_t ai = MAX_INST; while (ai > 0 && getUsedSamples(ai) == 0 && song.instrName[ai][0] == '\0') ai--; @@ -919,19 +886,19 @@ static int32_t SDLCALL trimThreadFunc(void *ptr) if (removeChans) { // count used channels - highestChan = -1; + int16_t highestChan = -1; for (i = 0; i < ap; i++) { - pattPtr = patt[i]; + tonTyp *pattPtr = patt[i]; if (pattPtr == NULL) continue; - pattLen = pattLens[i]; + const int16_t pattLen = pattLens[i]; for (j = 0; j < pattLen; j++) { for (k = 0; k < song.antChn; k++) { - note = &pattPtr[(j * MAX_VOICES) + k]; + tonTyp *note = &pattPtr[(j * MAX_VOICES) + k]; if (note->eff || note->effTyp || note->instr || note->ton || note->vol) { if (k > highestChan) @@ -956,11 +923,11 @@ static int32_t SDLCALL trimThreadFunc(void *ptr) { for (i = 0; i < MAX_PATTERNS; i++) { - pattPtr = patt[i]; + tonTyp *pattPtr = patt[i]; if (pattPtr == NULL) continue; - pattLen = pattLens[i]; + const int16_t pattLen = pattLens[i]; for (j = 0; j < pattLen; j++) memset(&pattPtr[(j * MAX_VOICES) + song.antChn], 0, sizeof (tonTyp) * (MAX_VOICES - song.antChn)); } @@ -979,6 +946,8 @@ static int32_t SDLCALL trimThreadFunc(void *ptr) editor.trimThreadWasDone = true; return true; + + (void)ptr; } void trimThreadDone(void) diff --git a/src/ft2_unicode.c b/src/ft2_unicode.c @@ -20,22 +20,20 @@ // Windows routines char *cp437ToUtf8(char *src) { - char *x; - int32_t reqSize, retVal, srcLen; - wchar_t *w; + int32_t retVal; if (src == NULL) return NULL; - srcLen = (int32_t)strlen(src); + int32_t srcLen = (int32_t)strlen(src); if (srcLen <= 0) return NULL; - reqSize = MultiByteToWideChar(437, 0, src, srcLen, 0, 0); + int32_t reqSize = MultiByteToWideChar(437, 0, src, srcLen, 0, 0); if (reqSize <= 0) return NULL; - w = (wchar_t *)malloc((reqSize + 1) * sizeof (wchar_t)); + wchar_t *w = (wchar_t *)malloc((reqSize + 1) * sizeof (wchar_t)); if (w == NULL) return NULL; @@ -59,7 +57,7 @@ char *cp437ToUtf8(char *src) return NULL; } - x = (char *)malloc((reqSize + 2) * sizeof (char)); + char *x = (char *)malloc((reqSize + 2) * sizeof (char)); if (x == NULL) { free(w); @@ -83,27 +81,24 @@ char *cp437ToUtf8(char *src) UNICHAR *cp437ToUnichar(char *src) { - int32_t reqSize, retVal, srcLen; - UNICHAR *w; - if (src == NULL) return NULL; - srcLen = (int32_t)strlen(src); + int32_t srcLen = (int32_t)strlen(src); if (srcLen <= 0) return NULL; - reqSize = MultiByteToWideChar(437, 0, src, srcLen, 0, 0); + int32_t reqSize = MultiByteToWideChar(437, 0, src, srcLen, 0, 0); if (reqSize <= 0) return NULL; - w = (wchar_t *)malloc((reqSize + 1) * sizeof (wchar_t)); + UNICHAR *w = (wchar_t *)malloc((reqSize + 1) * sizeof (wchar_t)); if (w == NULL) return NULL; w[reqSize] = 0; - retVal = MultiByteToWideChar(437, 0, src, srcLen, w, reqSize); + int32_t retVal = MultiByteToWideChar(437, 0, src, srcLen, w, reqSize); if (!retVal) { free(w); @@ -115,29 +110,24 @@ UNICHAR *cp437ToUnichar(char *src) char *utf8ToCp437(char *src, bool removeIllegalChars) { - char *x; - int8_t ch; - int32_t reqSize, retVal, srcLen; - wchar_t *w; - if (src == NULL) return NULL; - srcLen = (int32_t)strlen(src); + int32_t srcLen = (int32_t)strlen(src); if (srcLen <= 0) return NULL; - reqSize = MultiByteToWideChar(CP_UTF8, 0, src, srcLen, 0, 0); + int32_t reqSize = MultiByteToWideChar(CP_UTF8, 0, src, srcLen, 0, 0); if (reqSize <= 0) return NULL; - w = (wchar_t *)malloc((reqSize + 1) * sizeof (wchar_t)); + wchar_t *w = (wchar_t *)malloc((reqSize + 1) * sizeof (wchar_t)); if (w == NULL) return NULL; w[reqSize] = 0; - retVal = MultiByteToWideChar(CP_UTF8, 0, src, srcLen, w, reqSize); + int32_t retVal = MultiByteToWideChar(CP_UTF8, 0, src, srcLen, w, reqSize); if (!retVal) { free(w); @@ -158,7 +148,7 @@ char *utf8ToCp437(char *src, bool removeIllegalChars) return NULL; } - x = (char *)calloc(reqSize + 1, sizeof (char)); + char *x = (char *)calloc(reqSize + 1, sizeof (char)); if (x == NULL) { free(w); @@ -181,7 +171,7 @@ char *utf8ToCp437(char *src, bool removeIllegalChars) // remove illegal characters (only allow certain nordic ones) for (int32_t i = 0; i < reqSize; i++) { - ch = (int8_t)x[i]; + const int8_t ch = (const int8_t)x[i]; if (ch < 32 && ch != 0 && ch != -124 && ch != -108 && ch != -122 && ch != -114 && ch != -103 && ch != -113) { @@ -195,28 +185,24 @@ char *utf8ToCp437(char *src, bool removeIllegalChars) char *unicharToCp437(UNICHAR *src, bool removeIllegalChars) { - char *x; - int8_t ch; - int32_t reqSize, retVal, srcLen, i; - if (src == NULL) return NULL; - srcLen = (int32_t)UNICHAR_STRLEN(src); + int32_t srcLen = (int32_t)UNICHAR_STRLEN(src); if (srcLen <= 0) return NULL; - reqSize = WideCharToMultiByte(437, 0, src, srcLen, 0, 0, 0, 0); + int32_t reqSize = WideCharToMultiByte(437, 0, src, srcLen, 0, 0, 0, 0); if (reqSize <= 0) return NULL; - x = (char *)malloc((reqSize + 1) * sizeof (char)); + char *x = (char *)malloc((reqSize + 1) * sizeof (char)); if (x == NULL) return NULL; x[reqSize] = '\0'; - retVal = WideCharToMultiByte(437, 0, src, srcLen, x, reqSize, 0, 0); + int32_t retVal = WideCharToMultiByte(437, 0, src, srcLen, x, reqSize, 0, 0); if (!retVal) { free(x); @@ -226,9 +212,9 @@ char *unicharToCp437(UNICHAR *src, bool removeIllegalChars) if (removeIllegalChars) { // remove illegal characters (only allow certain nordic ones) - for (i = 0; i < reqSize; i++) + for (int32_t i = 0; i < reqSize; i++) { - ch = (int8_t)x[i]; + const int8_t ch = (const int8_t)x[i]; if (ch < 32 && ch != 0 && ch != -124 && ch != -108 && ch != -122 && ch != -114 && ch != -103 && ch != -113) { @@ -245,36 +231,31 @@ char *unicharToCp437(UNICHAR *src, bool removeIllegalChars) // non-Windows routines char *cp437ToUtf8(char *src) { - char *inPtr, *outPtr, *outBuf; - int32_t rc; - size_t srcLen, inLen, outLen; - iconv_t cd; - if (src == NULL) return NULL; - srcLen = strlen(src); + size_t srcLen = strlen(src); if (srcLen <= 0) return NULL; - cd = iconv_open("UTF-8", "437"); + iconv_t cd = iconv_open("UTF-8", "437"); if (cd == (iconv_t)-1) return NULL; - outLen = srcLen * 2; // should be sufficient + size_t outLen = srcLen * 2; // should be sufficient - outBuf = (char *)calloc(outLen + 2, sizeof (char)); + char *outBuf = (char *)calloc(outLen + 2, sizeof (char)); if (outBuf == NULL) return NULL; - inPtr = src; - inLen = srcLen; - outPtr = outBuf; + char *inPtr = src; + size_t inLen = srcLen; + char *outPtr = outBuf; #if defined(__NetBSD__) || defined(__sun) || defined(sun) - rc = iconv(cd, (const char **)&inPtr, &inLen, &outPtr, &outLen); + int32_t rc = iconv(cd, (const char **)&inPtr, &inLen, &outPtr, &outLen); #else - rc = iconv(cd, &inPtr, &inLen, &outPtr, &outLen); + int32_t rc = iconv(cd, &inPtr, &inLen, &outPtr, &outLen); #endif iconv(cd, NULL, NULL, &outPtr, &outLen); // flush iconv_close(cd); @@ -290,43 +271,37 @@ char *cp437ToUtf8(char *src) char *utf8ToCp437(char *src, bool removeIllegalChars) { - char *inPtr, *outPtr, *outBuf; - int8_t ch; - int32_t rc; - size_t srcLen, inLen, outLen; - iconv_t cd; - if (src == NULL) return NULL; - srcLen = strlen(src); + size_t srcLen = strlen(src); if (srcLen <= 0) return NULL; #ifdef __APPLE__ - cd = iconv_open("437//TRANSLIT//IGNORE", "UTF-8-MAC"); + iconv_t cd = iconv_open("437//TRANSLIT//IGNORE", "UTF-8-MAC"); #elif defined(__NetBSD__) || defined(__sun) || defined(sun) - cd = iconv_open("437", "UTF-8"); + iconv_t cd = iconv_open("437", "UTF-8"); #else - cd = iconv_open("437//TRANSLIT//IGNORE", "UTF-8"); + iconv_t cd = iconv_open("437//TRANSLIT//IGNORE", "UTF-8"); #endif if (cd == (iconv_t)-1) return NULL; - outLen = srcLen * 2; // should be sufficient + size_t outLen = srcLen * 2; // should be sufficient - outBuf = (char *)calloc(outLen + 1, sizeof (char)); + char *outBuf = (char *)calloc(outLen + 1, sizeof (char)); if (outBuf == NULL) return NULL; - inPtr = src; - inLen = srcLen; - outPtr = outBuf; + char *inPtr = src; + size_t inLen = srcLen; + char *outPtr = outBuf; #if defined(__NetBSD__) || defined(__sun) || defined(sun) - rc = iconv(cd, (const char **)&inPtr, &inLen, &outPtr, &outLen); + int32_t rc = iconv(cd, (const char **)&inPtr, &inLen, &outPtr, &outLen); #else - rc = iconv(cd, &inPtr, &inLen, &outPtr, &outLen); + int32_t rc = iconv(cd, &inPtr, &inLen, &outPtr, &outLen); #endif iconv(cd, NULL, NULL, &outPtr, &outLen); // flush iconv_close(cd); @@ -342,7 +317,7 @@ char *utf8ToCp437(char *src, bool removeIllegalChars) // remove illegal characters (only allow certain nordic ones) for (size_t i = 0; i < outLen; i++) { - ch = (int8_t)outBuf[i]; + const int8_t ch = (const int8_t)outBuf[i]; if (ch < 32 && ch != 0 && ch != -124 && ch != -108 && ch != -122 && ch != -114 && ch != -103 && ch != -113) { diff --git a/src/ft2_video.c b/src/ft2_video.c @@ -80,10 +80,6 @@ void beginFPSCounter(void) static void drawFPSCounter(void) { - char *textPtr, ch; - uint16_t xPos, yPos; - double dRefreshRate, dAudLatency; - if (editor.framesPassed >= FPS_SCAN_FRAMES && (editor.framesPassed % FPS_SCAN_FRAMES) == 0) { dAvgFPS = dRunningFPS * (1.0 / FPS_SCAN_FRAMES); @@ -106,11 +102,11 @@ static void drawFPSCounter(void) return; } - dRefreshRate = video.dMonitorRefreshRate; + double dRefreshRate = video.dMonitorRefreshRate; if (dRefreshRate < 0.0 || dRefreshRate > 9999.9) dRefreshRate = 9999.9; // prevent number from overflowing text box - dAudLatency = audio.dAudioLatencyMs; + double dAudLatency = audio.dAudioLatencyMs; if (dAudLatency < 0.0 || dAudLatency > 999999999.9999) dAudLatency = 999999999.9999; // prevent number from overflowing text box @@ -131,13 +127,13 @@ static void drawFPSCounter(void) // draw text - xPos = FPS_RENDER_X + 3; - yPos = FPS_RENDER_Y + 3; + uint16_t xPos = FPS_RENDER_X+3; + uint16_t yPos = FPS_RENDER_Y+3; - textPtr = fpsTextBuf; + char *textPtr = fpsTextBuf; while (*textPtr != '\0') { - ch = *textPtr++; + const char ch = *textPtr++; if (ch == '\n') { yPos += FONT1_CHAR_H+1; @@ -152,15 +148,12 @@ static void drawFPSCounter(void) void endFPSCounter(void) { - uint64_t frameTimeDiff; - double dHz; - - if (!video.showFPSCounter || frameStartTime == 0) - return; - - frameTimeDiff = SDL_GetPerformanceCounter() - frameStartTime; - dHz = 1000.0 / (frameTimeDiff * editor.dPerfFreqMulMs); - dRunningFPS += dHz; + if (video.showFPSCounter && frameStartTime > 0) + { + const uint64_t frameTimeDiff = SDL_GetPerformanceCounter() - frameStartTime; + const double dHz = 1000.0 / (frameTimeDiff * editor.dPerfFreqMulMs); + dRunningFPS += dHz; + } } void flipFrame(void) @@ -220,15 +213,10 @@ void showErrorMsgBox(const char *fmt, ...) static void updateRenderSizeVars(void) { - int32_t di; -#ifdef __APPLE__ - int32_t actualScreenW, actualScreenH; - double dXUpscale, dYUpscale; -#endif float fXScale, fYScale; SDL_DisplayMode dm; - di = SDL_GetWindowDisplayIndex(video.window); + int32_t di = SDL_GetWindowDisplayIndex(video.window); if (di < 0) di = 0; // return display index 0 (default) on error @@ -252,12 +240,13 @@ static void updateRenderSizeVars(void) video.renderW = (int32_t)(SCREEN_W * fXScale); video.renderH = (int32_t)(SCREEN_H * fYScale); -#ifdef __APPLE__ // retina high-DPI hackery (SDL2 is bad at reporting actual rendering sizes on macOS w/ high-DPI) +#ifdef __APPLE__ + int32_t actualScreenW, actualScreenH; SDL_GL_GetDrawableSize(video.window, &actualScreenW, &actualScreenH); - dXUpscale = (double)actualScreenW / video.displayW; - dYUpscale = (double)actualScreenH / video.displayH; + const double dXUpscale = (const double)actualScreenW / video.displayW; + const double dYUpscale = (const double)actualScreenH / video.displayH; // downscale back to correct sizes if (dXUpscale != 0.0) video.renderW = (int32_t)(video.renderW / dXUpscale); @@ -361,10 +350,11 @@ bool setupSprites(void) hideSprite(SPRITE_TEXT_CURSOR); // setup refresh buffer (used to clear sprites after each frame) - for (uint32_t i = 0; i < SPRITE_NUM; i++) + s = sprites; + for (uint32_t i = 0; i < SPRITE_NUM; i++, s++) { - sprites[i].refreshBuffer = (uint32_t *)malloc(sprites[i].w * sprites[i].h * sizeof (int32_t)); - if (sprites[i].refreshBuffer == NULL) + s->refreshBuffer = (uint32_t *)malloc(s->w * s->h * sizeof (int32_t)); + if (s->refreshBuffer == NULL) return false; } @@ -379,12 +369,13 @@ void changeSpriteData(int32_t sprite, const uint8_t *data) void freeSprites(void) { - for (int32_t i = 0; i < SPRITE_NUM; i++) + sprite_t *s = sprites; + for (int32_t i = 0; i < SPRITE_NUM; i++, s++) { - if (sprites[i].refreshBuffer != NULL) + if (s->refreshBuffer != NULL) { - free(sprites[i].refreshBuffer); - sprites[i].refreshBuffer = NULL; + free(s->refreshBuffer); + s->refreshBuffer = NULL; } } } @@ -417,24 +408,18 @@ void hideSprite(int32_t sprite) void eraseSprites(void) { - int8_t i; - int32_t sx, sy, x, y, sw, sh, srcPitch, dstPitch; - const uint32_t *src32; - uint32_t *dst32; - sprite_t *s; - - for (i = SPRITE_NUM-1; i >= 0; i--) // erasing must be done in reverse order + sprite_t *s = &sprites[SPRITE_NUM-1]; + for (int32_t i = SPRITE_NUM-1; i >= 0; i--, s--) // erasing must be done in reverse order { - s = &sprites[i]; if (s->x >= SCREEN_W || s->y >= SCREEN_H) // sprite is hidden, don't draw nor fill clear buffer continue; assert(s->refreshBuffer != NULL); - sw = s->w; - sh = s->h; - sx = s->x; - sy = s->y; + int32_t sw = s->w; + int32_t sh = s->h; + int32_t sx = s->x; + int32_t sy = s->y; // if x is negative, adjust variables if (sx < 0) @@ -450,19 +435,19 @@ void eraseSprites(void) sy = 0; } - src32 = s->refreshBuffer; - dst32 = &video.frameBuffer[(sy * SCREEN_W) + sx]; + const uint32_t *src32 = s->refreshBuffer; + uint32_t *dst32 = &video.frameBuffer[(sy * SCREEN_W) + sx]; // handle x/y clipping if (sx+sw >= SCREEN_W) sw = SCREEN_W - sx; if (sy+sh >= SCREEN_H) sh = SCREEN_H - sy; - srcPitch = s->w - sw; - dstPitch = SCREEN_W - sw; + const int32_t srcPitch = s->w - sw; + const int32_t dstPitch = SCREEN_W - sw; - for (y = 0; y < sh; y++) + for (int32_t y = 0; y < sh; y++) { - for (x = 0; x < sw; x++) + for (int32_t x = 0; x < sw; x++) *dst32++ = *src32++; src32 += srcPitch; @@ -473,12 +458,8 @@ void eraseSprites(void) void renderSprites(void) { - const uint8_t *src8; - int32_t sx, sy, x, y, sw, sh, srcPitch, dstPitch; - uint32_t i, *clr32, *dst32, windowFlags; - sprite_t *s; - - for (i = 0; i < SPRITE_NUM; i++) + sprite_t *s = sprites; + for (int32_t i = 0; i < SPRITE_NUM; i++, s++) { if (i == SPRITE_LEFT_LOOP_PIN || i == SPRITE_RIGHT_LOOP_PIN) continue; // these need special drawing (done elsewhere) @@ -487,13 +468,11 @@ void renderSprites(void) if (i == SPRITE_TEXT_CURSOR) { assert(video.window != NULL); - windowFlags = SDL_GetWindowFlags(video.window); + const uint32_t windowFlags = SDL_GetWindowFlags(video.window); if (!(windowFlags & SDL_WINDOW_INPUT_FOCUS)) continue; } - s = &sprites[i]; - // set new sprite position s->x = s->newX; s->y = s->newY; @@ -503,11 +482,11 @@ void renderSprites(void) assert(s->data != NULL && s->refreshBuffer != NULL); - sw = s->w; - sh = s->h; - sx = s->x; - sy = s->y; - src8 = s->data; + int32_t sw = s->w; + int32_t sh = s->h; + int32_t sx = s->x; + int32_t sy = s->y; + const uint8_t *src8 = s->data; // if x is negative, adjust variables if (sx < 0) @@ -528,22 +507,22 @@ void renderSprites(void) if (sw <= 0 || sh <= 0) // sprite is hidden, don't draw nor fill clear buffer continue; - dst32 = &video.frameBuffer[(sy * SCREEN_W) + sx]; - clr32 = s->refreshBuffer; + uint32_t *dst32 = &video.frameBuffer[(sy * SCREEN_W) + sx]; + uint32_t *clr32 = s->refreshBuffer; // handle x/y clipping if (sx+sw >= SCREEN_W) sw = SCREEN_W - sx; if (sy+sh >= SCREEN_H) sh = SCREEN_H - sy; - srcPitch = s->w - sw; - dstPitch = SCREEN_W - sw; + const int32_t srcPitch = s->w - sw; + const int32_t dstPitch = SCREEN_W - sw; if (mouse.mouseOverTextBox && i == SPRITE_MOUSE_POINTER) { // text edit mouse pointer (has color changing depending on content under it) - for (y = 0; y < sh; y++) + for (int32_t y = 0; y < sh; y++) { - for (x = 0; x < sw; x++) + for (int32_t x = 0; x < sw; x++) { *clr32++ = *dst32; // fill clear buffer @@ -567,9 +546,9 @@ void renderSprites(void) else { // normal sprites - for (y = 0; y < sh; y++) + for (int32_t y = 0; y < sh; y++) { - for (x = 0; x < sw; x++) + for (int32_t x = 0; x < sw; x++) { *clr32++ = *dst32; // fill clear buffer @@ -593,15 +572,13 @@ void renderSprites(void) void renderLoopPins(void) { - uint8_t pal; const uint8_t *src8; int32_t sx, x, y, sw, sh, srcPitch, dstPitch; uint32_t *clr32, *dst32; - sprite_t *s; // left loop pin - s = &sprites[SPRITE_LEFT_LOOP_PIN]; + sprite_t *s = &sprites[SPRITE_LEFT_LOOP_PIN]; assert(s->data != NULL && s->refreshBuffer != NULL); // set new sprite position @@ -704,7 +681,7 @@ void renderLoopPins(void) if (y < 9 && *src8 == PAL_LOOPPIN) { // don't draw marker line on top of left loop pin's thumb graphics - pal = *dst32 >> 24; + const uint8_t pal = *dst32 >> 24; if (pal != PAL_DESKTOP && pal != PAL_DSKTOP1 && pal != PAL_DSKTOP2) *dst32 = video.palette[*src8]; } @@ -796,7 +773,7 @@ void setWindowSizeFromConfig(bool updateRenderer) { #define MAX_UPSCALE_FACTOR 16 // 10112x6400 - ought to be good enough for many years to come - uint8_t i, oldUpscaleFactor; + uint8_t i; SDL_DisplayMode dm; /* Kludge for Raspbarry Pi. Upscaling of 3x or higher makes everything slow as a snail. @@ -811,7 +788,7 @@ void setWindowSizeFromConfig(bool updateRenderer) } #endif - oldUpscaleFactor = video.upscaleFactor; + uint8_t oldUpscaleFactor = video.upscaleFactor; if (config.windowFlags & WINSIZE_AUTO) { // find out which upscaling factor is the biggest to fit on screen @@ -862,12 +839,10 @@ void setWindowSizeFromConfig(bool updateRenderer) void updateWindowTitle(bool forceUpdate) { - char *songTitle; - if (!forceUpdate && songIsModified == song.isModified) return; // window title is already set to the same - songTitle = getCurrSongFilename(); + char *songTitle = getCurrSongFilename(); if (songTitle != NULL) { if (song.isModified) @@ -913,12 +888,11 @@ bool recreateTexture(void) bool setupWindow(void) { - uint32_t windowFlags; SDL_DisplayMode dm; video.vsync60HzPresent = false; - windowFlags = SDL_WINDOW_ALLOW_HIGHDPI; + uint32_t windowFlags = SDL_WINDOW_ALLOW_HIGHDPI; #if defined (__APPLE__) || defined (_WIN32) // yet another quirk! windowFlags |= SDL_WINDOW_HIDDEN; #endif @@ -959,9 +933,7 @@ bool setupWindow(void) bool setupRenderer(void) { - uint32_t rendererFlags; - - rendererFlags = SDL_RENDERER_ACCELERATED; + uint32_t rendererFlags = SDL_RENDERER_ACCELERATED; if (video.vsync60HzPresent) rendererFlags |= SDL_RENDERER_PRESENTVSYNC; @@ -1033,8 +1005,6 @@ bool setupRenderer(void) void handleRedrawing(void) { - textBox_t *txt; - if (!ui.configScreenShown && !ui.helpScreenShown) { if (ui.aboutScreenShown) @@ -1111,7 +1081,7 @@ void handleRedrawing(void) { assert(mouse.lastEditBox >= 0 && mouse.lastEditBox < NUM_TEXTBOXES); - txt = &textBoxes[mouse.lastEditBox]; + textBox_t *txt = &textBoxes[mouse.lastEditBox]; if (editor.textCursorBlinkCounter < 256/2 && !textIsMarked() && !(mouse.leftButtonPressed | mouse.rightButtonPressed)) setSpritePos(SPRITE_TEXT_CURSOR, getTextCursorX(txt), getTextCursorY(txt) - 1); // show text cursor else @@ -1128,8 +1098,6 @@ void handleRedrawing(void) static void drawReplayerData(void) { - bool drawPosText; - if (songPlaying) { if (ui.drawReplayerPianoFlag) @@ -1139,7 +1107,7 @@ static void drawReplayerData(void) drawPiano(chSyncEntry); } - drawPosText = true; + bool drawPosText = true; if (ui.configScreenShown || ui.nibblesShown || ui.helpScreenShown || ui.aboutScreenShown || ui.diskOpShown) diff --git a/src/ft2_wav_renderer.c b/src/ft2_wav_renderer.c @@ -175,10 +175,8 @@ void exitWavRenderer(void) static bool dump_Init(uint32_t frq, int16_t amp, int16_t songPos) { - uint32_t maxSamplesPerTick, sampleSize; - - maxSamplesPerTick = (int32_t)ceil((frq * 2.5) / MIN_BPM); // absolute max samples per tick - sampleSize = (WDBitDepth / 8) * 2; // 2 channels + const int32_t maxSamplesPerTick = (const int32_t)ceil((frq * 2.5) / MIN_BPM); // absolute max samples per tick + uint32_t sampleSize = (WDBitDepth / 8) * 2; // 2 channels // *2 for stereo wavRenderBuffer = (uint8_t *)malloc((TICKS_PER_RENDER_CHUNK * maxSamplesPerTick) * sampleSize); @@ -205,7 +203,6 @@ static bool dump_Init(uint32_t frq, int16_t amp, int16_t songPos) static void dump_Close(FILE *f, uint32_t totalSamples) { - uint32_t tmpLen, totalBytes; wavHeader_t wavHeader; if (wavRenderBuffer != NULL) @@ -214,6 +211,7 @@ static void dump_Close(FILE *f, uint32_t totalSamples) wavRenderBuffer = NULL; } + uint32_t totalBytes; if (WDBitDepth == 16) totalBytes = totalSamples * sizeof (int16_t); else @@ -222,7 +220,7 @@ static void dump_Close(FILE *f, uint32_t totalSamples) if (totalBytes & 1) fputc(0, f); // write pad byte - tmpLen = ftell(f) - 8; + uint32_t tmpLen = ftell(f)-8; // go back and fill in WAV header rewind(f); @@ -278,7 +276,7 @@ static bool dump_EndOfTune(int16_t endSongPos) return returnValue; } -void dump_RenderTick(uint32_t samplesPerTick, uint8_t *buffer) +void dump_TickReplayer(void) { replayerBusy = true; @@ -289,8 +287,6 @@ void dump_RenderTick(uint32_t samplesPerTick, uint8_t *buffer) updateVoices(); replayerBusy = false; - - mixReplayerTickToBuffer(samplesPerTick, buffer, WDBitDepth); } static void updateVisuals(void) @@ -313,14 +309,7 @@ static void updateVisuals(void) static int32_t SDLCALL renderWavThread(void *ptr) { - bool renderDone; - uint8_t *ptr8, tickCounter; - uint32_t samplesInChunk, sampleCounter; - FILE *f; - - (void)ptr; - - f = (FILE *)editor.wavRendererFileHandle; + FILE *f = (FILE *)editor.wavRendererFileHandle; fseek(f, sizeof (wavHeader_t), SEEK_SET); pauseAudio(); @@ -332,19 +321,18 @@ static int32_t SDLCALL renderWavThread(void *ptr) return true; } - sampleCounter = 0; - renderDone = false; - tickCounter = 4; - - double dTickSamples = audio.dSamplesPerTick; + uint32_t sampleCounter = 0; + bool renderDone = false; + uint8_t tickCounter = 4; + double dTickSampleCounter = 0.0; editor.wavReachedEndFlag = false; while (!renderDone) { - samplesInChunk = 0; + uint32_t samplesInChunk = 0; // render several ticks at once to prevent frequent disk I/O (speeds up the process) - ptr8 = wavRenderBuffer; + uint8_t *ptr8 = wavRenderBuffer; for (uint32_t i = 0; i < TICKS_PER_RENDER_CHUNK; i++) { if (!editor.wavIsRendering || dump_EndOfTune(WDStopPos)) @@ -353,21 +341,27 @@ static int32_t SDLCALL renderWavThread(void *ptr) break; } - int32_t tickSamples = (int32_t)dTickSamples; - dump_RenderTick(tickSamples, ptr8); + if (dTickSampleCounter <= 0.0) + { + // new replayer tick + dump_TickReplayer(); + dTickSampleCounter += audio.dSamplesPerTick; + } + + int32_t remainingTick = (int32_t)ceil(dTickSampleCounter); - dTickSamples -= tickSamples; // keep fractional part - dTickSamples += audio.dSamplesPerTick; + mixReplayerTickToBuffer(remainingTick, ptr8, WDBitDepth); + dTickSampleCounter -= remainingTick; - tickSamples *= 2; // stereo - samplesInChunk += tickSamples; - sampleCounter += tickSamples; + remainingTick *= 2; // stereo + samplesInChunk += remainingTick; + sampleCounter += remainingTick; // increase buffer pointer if (WDBitDepth == 16) - ptr8 += tickSamples * sizeof (int16_t); + ptr8 += remainingTick * sizeof (int16_t); else - ptr8 += tickSamples * sizeof (float); + ptr8 += remainingTick * sizeof (float); if (++tickCounter >= 4) { @@ -394,15 +388,16 @@ static int32_t SDLCALL renderWavThread(void *ptr) editor.diskOpReadOnOpen = true; return true; + + (void)ptr; } static void createOverwriteText(char *name) { char nameTmp[128]; - uint32_t nameLen; // read entry name to a small buffer - nameLen = (uint32_t)strlen(name); + uint32_t nameLen = (uint32_t)strlen(name); memcpy(nameTmp, name, (nameLen >= sizeof (nameTmp)) ? sizeof (nameTmp) : (nameLen + 1)); nameTmp[sizeof (nameTmp) - 1] = '\0'; @@ -413,8 +408,6 @@ static void createOverwriteText(char *name) static void wavRender(bool checkOverwrite) { - char *filename; - WDStartPos = (uint8_t)(MAX(0, MIN(WDStartPos, song.len - 1))); WDStopPos = (uint8_t)(MAX(0, MIN(MAX(WDStartPos, WDStopPos), song.len - 1))); @@ -422,7 +415,7 @@ static void wavRender(bool checkOverwrite) diskOpChangeFilenameExt(".wav"); - filename = getDiskOpFilename(); + char *filename = getDiskOpFilename(); if (checkOverwrite && fileExistsAnsi(filename)) { createOverwriteText(filename); diff --git a/test.zip b/test.zip Binary files differ.