Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package ft2-clone for openSUSE:Factory checked in at 2024-04-10 17:49:58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ft2-clone (Old) and /work/SRC/openSUSE:Factory/.ft2-clone.new.29460 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ft2-clone" Wed Apr 10 17:49:58 2024 rev:14 rq:1166626 version:1.81 Changes: -------- --- /work/SRC/openSUSE:Factory/ft2-clone/ft2-clone.changes 2024-03-19 17:32:10.367496530 +0100 +++ /work/SRC/openSUSE:Factory/.ft2-clone.new.29460/ft2-clone.changes 2024-04-10 17:50:56.989708886 +0200 @@ -1,0 +2,11 @@ +Tue Apr 9 17:41:44 UTC 2024 - Martin Hauke <[email protected]> + +- Update to version 1.81 + * Rewrote some of the MIDI init/close code, as it looked like + it could be buggy. +- Update to version 1.80 + * Doing note transpose on the whole song wouldn't count + overflowing notes properly (it would sometimes not show a + warning message first) + +------------------------------------------------------------------- Old: ---- ft2-clone-1.79.tar.gz New: ---- ft2-clone-1.81.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ft2-clone.spec ++++++ --- /var/tmp/diff_new_pack.XFLsAF/_old 2024-04-10 17:50:57.477726847 +0200 +++ /var/tmp/diff_new_pack.XFLsAF/_new 2024-04-10 17:50:57.477726847 +0200 @@ -17,7 +17,7 @@ Name: ft2-clone -Version: 1.79 +Version: 1.81 Release: 0 Summary: Fasttracker II clone License: BSD-3-Clause AND CC-BY-NC-SA-4.0 ++++++ ft2-clone-1.79.tar.gz -> ft2-clone-1.81.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_platform.h new/ft2-clone-1.81/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_platform.h --- old/ft2-clone-1.79/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_platform.h 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_platform.h 2024-04-09 19:31:47.000000000 +0200 @@ -199,8 +199,10 @@ #undef __GDK__ #define __GDK__ 1 #endif -#if defined(__PSP__) +#if defined(__PSP__) || defined(__psp__) +#ifdef __PSP__ #undef __PSP__ +#endif #define __PSP__ 1 #endif #if defined(PS2) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_revision.h new/ft2-clone-1.81/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_revision.h --- old/ft2-clone-1.79/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_revision.h 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_revision.h 2024-04-09 19:31:47.000000000 +0200 @@ -1,7 +1,7 @@ /* Generated by updaterev.sh, do not edit */ #ifdef SDL_VENDOR_INFO -#define SDL_REVISION "SDL-release-2.30.1-0-g5adbf3765 (" SDL_VENDOR_INFO ")" +#define SDL_REVISION "SDL-release-2.30.2-0-gf461d91cd (" SDL_VENDOR_INFO ")" #else -#define SDL_REVISION "SDL-release-2.30.1-0-g5adbf3765" +#define SDL_REVISION "SDL-release-2.30.2-0-gf461d91cd" #endif #define SDL_REVISION_NUMBER 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_version.h new/ft2-clone-1.81/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_version.h --- old/ft2-clone-1.79/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_version.h 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_version.h 2024-04-09 19:31:47.000000000 +0200 @@ -59,7 +59,7 @@ */ #define SDL_MAJOR_VERSION 2 #define SDL_MINOR_VERSION 30 -#define SDL_PATCHLEVEL 1 +#define SDL_PATCHLEVEL 2 /** * Macro to determine SDL version program was compiled against. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Resources/Info.plist new/ft2-clone-1.81/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Resources/Info.plist --- old/ft2-clone-1.79/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Resources/Info.plist 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Resources/Info.plist 2024-04-09 19:31:47.000000000 +0200 @@ -3,7 +3,7 @@ <plist version="1.0"> <dict> <key>BuildMachineOSBuild</key> - <string>23D60</string> + <string>23E224</string> <key>CFBundleDevelopmentRegion</key> <string>English</string> <key>CFBundleExecutable</key> @@ -19,7 +19,7 @@ <key>CFBundlePackageType</key> <string>FMWK</string> <key>CFBundleShortVersionString</key> - <string>2.30.1</string> + <string>2.30.2</string> <key>CFBundleSignature</key> <string>SDLX</string> <key>CFBundleSupportedPlatforms</key> @@ -27,7 +27,7 @@ <string>MacOSX</string> </array> <key>CFBundleVersion</key> - <string>2.30.1</string> + <string>2.30.2</string> <key>DTCompiler</key> <string>com.apple.compilers.llvm.clang.1_0</string> <key>DTPlatformBuild</key> @@ -35,15 +35,15 @@ <key>DTPlatformName</key> <string>macosx</string> <key>DTPlatformVersion</key> - <string>14.2</string> + <string>14.4</string> <key>DTSDKBuild</key> - <string>23C53</string> + <string>23E208</string> <key>DTSDKName</key> - <string>macosx14.2</string> + <string>macosx14.4</string> <key>DTXcode</key> - <string>1520</string> + <string>1530</string> <key>DTXcodeBuild</key> - <string>15C500b</string> + <string>15E204a</string> <key>LSMinimumSystemVersion</key> <string>10.11</string> </dict> Binary files old/ft2-clone-1.79/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Resources/default.metallib and new/ft2-clone-1.81/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Resources/default.metallib differ Binary files old/ft2-clone-1.79/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/SDL2 and new/ft2-clone-1.81/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/SDL2 differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/_CodeSignature/CodeResources new/ft2-clone-1.81/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/_CodeSignature/CodeResources --- old/ft2-clone-1.79/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/_CodeSignature/CodeResources 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/_CodeSignature/CodeResources 2024-04-09 19:31:47.000000000 +0200 @@ -14,7 +14,7 @@ </data> <key>Resources/Info.plist</key> <data> - ZHmmRK90boQu0lf8kuoupR5C534= + xxjLXf8umGDvorJwQToOZvJb+LI= </data> <key>Resources/License.txt</key> <data> @@ -26,7 +26,7 @@ </data> <key>Resources/default.metallib</key> <data> - QwX80pzFcZED9JtaD8IhQ/uayn0= + YrRnNqKCIDuni+6CKxtbY1kbYlw= </data> </dict> <key>files2</key> @@ -508,11 +508,11 @@ <dict> <key>hash</key> <data> - wJW6P5cSLWw7CLKwCduRMFILJMs= + NywZ7lb1AObplGXdgvKYUQnFr3E= </data> <key>hash2</key> <data> - rfvhg9xhDPbHHDguY5qvRo/mzZyCbJMSA9625XkbQy0= + /XPmip0lyp07Lnry52Ki2A7dornwXXFxn1W94/cdCO0= </data> </dict> <key>Headers/SDL_power.h</key> @@ -563,11 +563,11 @@ <dict> <key>hash</key> <data> - BP7HEBYnBwbk8tHzZPgc3YbrqxQ= + QR/EqmyEkjhJXrWe2LStfwBGG/4= </data> <key>hash2</key> <data> - OaVGrGQNu1FqBbGBlpCqSy2PHisu9o9LzvAg42f1/JI= + uR4gNQwz5IYMMHZflMaZxOTwGwrYDLcyYQlbbPMpm3w= </data> </dict> <key>Headers/SDL_rwops.h</key> @@ -706,11 +706,11 @@ <dict> <key>hash</key> <data> - OGZ8BfEEkHiQnTtIvNq9aYEj7FY= + WO6pCYeF3qTP69F4sWD442sgezQ= </data> <key>hash2</key> <data> - juogOjtV5ZeXFCoHo69XFA1QWPNDN4r0MdblxepalE8= + pXT1eYRliBTvr45AyMoEr960xzfZ19y99t80KzPQv3U= </data> </dict> <key>Headers/SDL_video.h</key> @@ -783,11 +783,11 @@ <dict> <key>hash</key> <data> - ZHmmRK90boQu0lf8kuoupR5C534= + xxjLXf8umGDvorJwQToOZvJb+LI= </data> <key>hash2</key> <data> - B6t0lho1afDvcrYh3u2JI7SM9qV8RRd+48xEAIyinO8= + Ikl+0G36oc/K1BK2OQNF3aybj3O5vaHu74adDuyR5P8= </data> </dict> <key>Resources/License.txt</key> @@ -816,11 +816,11 @@ <dict> <key>hash</key> <data> - QwX80pzFcZED9JtaD8IhQ/uayn0= + YrRnNqKCIDuni+6CKxtbY1kbYlw= </data> <key>hash2</key> <data> - 81kjRE2J1UCGqrIQCmKYXixkYjbOC68/+l4AoNBo6C8= + goC4ji0E3XChWw9+V/QA4PFdbLXiQkmV6QWCcaD6Wzo= </data> </dict> </dict> Binary files old/ft2-clone-1.79/release/win32/SDL2.dll and new/ft2-clone-1.81/release/win32/SDL2.dll differ Binary files old/ft2-clone-1.79/release/win64/SDL2.dll and new/ft2-clone-1.81/release/win64/SDL2.dll differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/src/ft2_checkboxes.c new/ft2-clone-1.81/src/ft2_checkboxes.c --- old/ft2-clone-1.79/src/ft2_checkboxes.c 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/src/ft2_checkboxes.c 2024-04-09 19:31:47.000000000 +0200 @@ -26,8 +26,8 @@ ** -- STRUCT INFO: -- ** x = x position ** y = y position - ** w = clickable width space, relative to x - ** h = clickable height space, relative to y + ** w = clickable width in pixels, relative to x + ** h = clickable height in pixels, relative to y ** funcOnUp = function to call when released */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/src/ft2_config.c new/ft2-clone-1.81/src/ft2_config.c --- old/ft2-clone-1.79/src/ft2_config.c 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/src/ft2_config.c 2024-04-09 19:31:47.000000000 +0200 @@ -290,7 +290,7 @@ audio.currInputDevice = getAudioInputDeviceFromConfig(); #ifdef HAS_MIDI - if (midi.initThreadDone) + if (midi.supported && midi.initThreadDone) { setMidiInputDeviceFromConfig(); if (ui.configScreenShown && editor.currConfigScreen == CONFIG_SCREEN_MIDI_INPUT) @@ -390,7 +390,8 @@ saveAudioDevicesToConfig(audio.currOutputDevice, audio.currInputDevice); #ifdef HAS_MIDI - saveMidiInputDeviceToConfig(); + if (midi.supported) + saveMidiInputDeviceToConfig(); #endif FILE *f = UNICHAR_FOPEN(editor.configFileLocationU, "wb"); @@ -673,7 +674,9 @@ strcat(editor.configFileLocationU, "/FT2.CFG"); #endif - editor.midiConfigFileLocationU = getFullMidiDevConfigPathU(); + if (midi.supported) + editor.midiConfigFileLocationU = getFullMidiDevConfigPathU(); + editor.audioDevConfigFileLocationU = getFullAudDevConfigPathU(); } @@ -781,6 +784,8 @@ { uint16_t tmpID; + + uncheckRadioButtonGroup(RB_GROUP_CONFIG_SELECT); switch (editor.currConfigScreen) { @@ -795,6 +800,14 @@ radioButtons[tmpID].state = RADIOBUTTON_CHECKED; showRadioButtonGroup(RB_GROUP_CONFIG_SELECT); + + // hide MIDI radio button if MIDI is not supported (hackish) + if (!midi.supported) + { + radioButton_t *t = &radioButtons[RB_CONFIG_MIDI_INPUT]; + hideRadioButton(RB_CONFIG_MIDI_INPUT); + fillRect(t->x, t->y, RADIOBUTTON_W, RADIOBUTTON_H, PAL_DESKTOP); + } } void setConfigAudioRadioButtonStates(void) // accessed by other .c files @@ -1018,7 +1031,10 @@ checkBoxes[CB_CONF_CHANGE_PATTLEN_INS_DEL].checked = config.recTrueInsert; checkBoxes[CB_CONF_MIDI_ALLOW_PC].checked = config.recMIDIAllowPC; #ifdef HAS_MIDI - checkBoxes[CB_CONF_MIDI_ENABLE].checked = midi.enable; + if (midi.supported) + checkBoxes[CB_CONF_MIDI_ENABLE].checked = midi.enable; + else + checkBoxes[CB_CONF_MIDI_ENABLE].checked = false; #else checkBoxes[CB_CONF_MIDI_ENABLE].checked = false; #endif @@ -1109,7 +1125,8 @@ textOutShadow(21, 35, PAL_FORGRND, PAL_DSKTOP2, "Layout"); textOutShadow(21, 51, PAL_FORGRND, PAL_DSKTOP2, "Miscellaneous"); #ifdef HAS_MIDI - textOutShadow(21, 67, PAL_FORGRND, PAL_DSKTOP2, "MIDI input"); + if (midi.supported) + textOutShadow(21, 67, PAL_FORGRND, PAL_DSKTOP2, "MIDI input"); #endif textOutShadow(20, 93, PAL_FORGRND, PAL_DSKTOP2, "Auto save"); @@ -1377,6 +1394,7 @@ } break; +#ifdef HAS_MIDI case CONFIG_SCREEN_MIDI_INPUT: { drawFramework(110, 0, 394, 173, FRAMEWORK_TYPE1); @@ -1387,15 +1405,14 @@ blitFast(517, 51, bmp.midiLogo, 103, 55); -#ifdef HAS_MIDI showPushButton(PB_CONFIG_MIDI_INPUT_DOWN); showPushButton(PB_CONFIG_MIDI_INPUT_UP); rescanMidiInputDevices(); drawMidiInputList(); showScrollBar(SB_MIDI_INPUT_SCROLL); -#endif } break; +#endif } } @@ -2072,7 +2089,17 @@ void cbMIDIEnable(void) { #ifdef HAS_MIDI - midi.enable ^= 1; + if (midi.supported) + { + midi.enable ^= 1; + } + else + { + checkBoxes[CB_CONF_MIDI_ENABLE].checked = false; + drawCheckBox(CB_CONF_MIDI_ENABLE); + + okBox(0, "System message", "MIDI support is disabled for Windows XP as it is buggy!", NULL); + } #else checkBoxes[CB_CONF_MIDI_ENABLE].checked = false; drawCheckBox(CB_CONF_MIDI_ENABLE); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/src/ft2_config.h new/ft2-clone-1.81/src/ft2_config.h --- old/ft2-clone-1.79/src/ft2_config.h 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/src/ft2_config.h 2024-04-09 19:31:47.000000000 +0200 @@ -13,7 +13,9 @@ CONFIG_SCREEN_AUDIO, CONFIG_SCREEN_LAYOUT, CONFIG_SCREEN_MISCELLANEOUS, +#ifdef HAS_MIDI CONFIG_SCREEN_MIDI_INPUT, +#endif CONFIG_HIDE_ERRORS = 0, CONFIG_SHOW_ERRORS = 1, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/src/ft2_edit.c new/ft2-clone-1.81/src/ft2_edit.c --- old/ft2-clone-1.79/src/ft2_edit.c 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/src/ft2_edit.c 2024-04-09 19:31:47.000000000 +0200 @@ -909,7 +909,7 @@ { note_t *p = pattern[i]; if (p == NULL) - return 0; // empty pattern + continue; // empty pattern, skip it for (int32_t row = 0; row < patternNumRows[i]; row++, p += pitch) { @@ -1052,7 +1052,7 @@ { note_t *p = pattern[i]; if (p == NULL) - continue; // empty pattern + continue; // empty pattern, skip it for (int32_t row = 0; row < patternNumRows[i]; row++, p += pitch) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/src/ft2_events.c new/ft2-clone-1.81/src/ft2_events.c --- old/ft2-clone-1.79/src/ft2_events.c 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/src/ft2_events.c 2024-04-09 19:31:47.000000000 +0200 @@ -33,7 +33,7 @@ #include "ft2_sample_ed_features.h" #include "ft2_structs.h" -#define CRASH_TEXT "Oh no! The Fasttracker II clone has crashed...\nA backup .xm was hopefully " \ +#define CRASH_TEXT "Oh no! The Fasttracker II clone has crashed...\nA backup of the song was hopefully " \ "saved to the current module directory.\n\nPlease report this bug if you can.\n" \ "Try to mention what you did before the crash happened.\n" \ "My email is on the bottom of https://16-bits.org" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/src/ft2_gui.c new/ft2-clone-1.81/src/ft2_gui.c --- old/ft2-clone-1.79/src/ft2_gui.c 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/src/ft2_gui.c 2024-04-09 19:31:47.000000000 +0200 @@ -139,15 +139,15 @@ // set uninitialized GUI struct entries - textBox_t *t = &textBoxes[1]; // skip first entry, it's reserved for inputBox()) + textBox_t *t = &textBoxes[1]; // skip first entry, it's reserved for inputBox() for (int32_t i = 1; i < NUM_TEXTBOXES; i++, t++) { t->visible = false; t->bufOffset = 0; t->cursorPos = 0; t->textPtr = NULL; - t->renderBufW = (9 + 1) * t->maxChars; // 9 = max character/glyph width possible - t->renderBufH = 10; // 10 = max character height possible + t->renderBufW = (9 + 1) * t->maxChars; // 9 = max text glyph width (+1 for kerning) + t->renderBufH = 10; // 10 = max text glyph height t->renderW = t->w - (t->tx * 2); t->renderBuf = (uint8_t *)malloc(t->renderBufW * t->renderBufH * sizeof (int8_t)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/src/ft2_header.h new/ft2-clone-1.81/src/ft2_header.h --- old/ft2-clone-1.79/src/ft2_header.h 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/src/ft2_header.h 2024-04-09 19:31:47.000000000 +0200 @@ -12,26 +12,24 @@ #endif #include "ft2_replayer.h" -#define PROG_VER_STR "1.79" +#define PROG_VER_STR "1.81" // do NOT change these! It will only mess things up... #define FT2_VBLANK_HZ 70.086302895323 /* nominal, 640x400 @ 70Hz */ #define SCREEN_W 632 #define SCREEN_H 400 - -/* "60Hz" ranges everywhere from 59..61Hz depending on the monitor, so with -** no vsync we will get stuttering because the rate is not perfect... -*/ #define VBLANK_HZ 60 // 70Hz (FT2 vblank) delta -> 60Hz vblank delta (rounded) #define SCALE_VBLANK_DELTA(x) (int32_t)(((x) * ((double)VBLANK_HZ / FT2_VBLANK_HZ)) + 0.5) -// scopes must be clocked slightly higher than the nominal vblank rate +/* Scopes must be clocked slightly higher than the nominal vblank rate +** to prevent update/draw racing issues. Setting it too high will +** cause more issues! +*/ #define SCOPE_HZ 64 - /* Amount of extra bytes to allocate for every instrument sample, ** this is used for a hack for resampling interpolation to be ** branchless in the inner channel mixer loop. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/src/ft2_help.c new/ft2-clone-1.81/src/ft2_help.c --- old/ft2-clone-1.79/src/ft2_help.c 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/src/ft2_help.c 2024-04-09 19:31:47.000000000 +0200 @@ -393,7 +393,7 @@ default: case 0: tmpID = RB_HELP_FEATURES; break; case 1: tmpID = RB_HELP_EFFECTS; break; - case 2: tmpID = RB_HELP_KEYBINDINGS; break; + case 2: tmpID = RB_HELP_KEYBINDINGS; break; case 3: tmpID = RB_HELP_HOW_TO_USE_FT2; break; case 4: tmpID = RB_HELP_FAQ; break; case 5: tmpID = RB_HELP_KNOWN_BUGS; break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/src/ft2_keyboard.c new/ft2-clone-1.81/src/ft2_keyboard.c --- old/ft2-clone-1.79/src/ft2_keyboard.c 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/src/ft2_keyboard.c 2024-04-09 19:31:47.000000000 +0200 @@ -24,6 +24,7 @@ #include "ft2_audio.h" #include "ft2_trim.h" #include "ft2_sample_ed_features.h" +#include "ft2_midi.h" #include "ft2_structs.h" keyb_t keyb; // globalized @@ -1280,16 +1281,18 @@ return true; } -#ifdef HAS_MIDI else if (keyb.leftCtrlPressed) { - editor.currConfigScreen = 3; - showConfigScreen(); - checkRadioButton(RB_CONFIG_MIDI_INPUT); - +#ifdef HAS_MIDI + if (midi.supported) + { + editor.currConfigScreen = 3; + showConfigScreen(); + checkRadioButton(RB_CONFIG_MIDI_INPUT); + } +#endif return true; } -#endif } break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/src/ft2_main.c new/ft2-clone-1.81/src/ft2_main.c --- old/ft2-clone-1.79/src/ft2_main.c 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/src/ft2_main.c 2024-04-09 19:31:47.000000000 +0200 @@ -9,6 +9,7 @@ #ifdef _WIN32 #define WIN32_MEAN_AND_LEAN #include <windows.h> +#include <versionhelpers.h> #include <SDL2/SDL_syswm.h> #else #include <unistd.h> // chdir() @@ -35,10 +36,6 @@ #include "ft2_structs.h" #include "ft2_hpc.h" -#ifdef HAS_MIDI -static SDL_Thread *initMidiThread; -#endif - static void initializeVars(void); static void cleanUpAndExit(void); // never call this inside the main loop #ifdef __APPLE__ @@ -99,6 +96,10 @@ #endif #ifdef _WIN32 + // disable MIDI support if using Windows XP, as it is unstable + if (!IsWindowsVistaOrGreater()) + midi.supported = false; + #ifndef _MSC_VER SetProcessDPIAware(); #endif @@ -231,14 +232,16 @@ #ifdef HAS_MIDI // set up MIDI input (in a thread because it can take quite a while on f.ex. macOS) - initMidiThread = SDL_CreateThread(initMidiFunc, NULL, NULL); - if (initMidiThread == NULL) + if (midi.supported) { - showErrorMsgBox("Couldn't create MIDI initialization thread!"); - cleanUpAndExit(); - return 1; + midi.initMidiThread = SDL_CreateThread(initMidiFunc, NULL, NULL); + if (midi.initMidiThread == NULL) + { + showErrorMsgBox("Couldn't create MIDI initialization thread!"); + cleanUpAndExit(); + return 1; + } } - SDL_DetachThread(initMidiThread); // don't wait for this thread, let it clean up when done #endif hpc_ResetCounters(&video.vblankHpc); // quirk: this is needed for potential okBox() calls in handleModuleLoadFromArg() @@ -271,6 +274,10 @@ cpu.hasSSE2 = SDL_HasSSE2(); // clear common structs +#ifdef HAS_MIDI + memset(&midi, 0, sizeof (midi)); + midi.supported = true; +#endif memset(&video, 0, sizeof (video)); memset(&keyb, 0, sizeof (keyb)); memset(&mouse, 0, sizeof (mouse)); @@ -289,7 +296,7 @@ // now set data that must be initialized to non-zero values... - audio.locked = true; + audio.locked = true; // XXX: Why..? audio.rescanAudioDevicesSupported = true; // set non-zero values @@ -305,7 +312,7 @@ editor.srcInstr = 1; editor.curInstr = 1; editor.curOctave = 4; - editor.smpEd_NoteNr = 48 + 1; // middle-C + editor.smpEd_NoteNr = 1+NOTE_C4; editor.ptnJumpPos[0] = 0x00; editor.ptnJumpPos[1] = 0x10; @@ -316,25 +323,41 @@ memset(editor.copyMask, 1, sizeof (editor.copyMask)); memset(editor.pasteMask, 1, sizeof (editor.pasteMask)); -#ifdef HAS_MIDI - midi.enable = true; -#endif - editor.diskOpReadOnOpen = true; audio.linearPeriodsFlag = true; calcReplayerLogTab(); +#ifdef HAS_MIDI + midi.enable = true; +#endif + editor.programRunning = true; } static void cleanUpAndExit(void) // never call this inside the main loop! { #ifdef HAS_MIDI - if (midi.closeMidiOnExit) + if (midi.supported) { + if (midi.initMidiThread != NULL) + { + SDL_WaitThread(midi.initMidiThread, NULL); + midi.initMidiThread = NULL; + } + + midi.enable = false; // stop MIDI callback from doing things + while (midi.callbackBusy) SDL_Delay(1); // wait for MIDI callback to finish + closeMidiInDevice(); freeMidiIn(); + freeMidiInputDeviceList(); + + if (midi.inputDeviceName != NULL) + { + free(midi.inputDeviceName); + midi.inputDeviceName = NULL; + } } #endif @@ -345,22 +368,11 @@ freeDiskOp(); clearCopyBuffer(); freeAudioDeviceSelectorBuffers(); -#ifdef HAS_MIDI - freeMidiInputDeviceList(); -#endif windUpFTHelp(); freeTextBoxes(); freeMouseCursors(); freeBMPs(); -#ifdef HAS_MIDI - if (midi.inputDeviceName != NULL) - { - free(midi.inputDeviceName); - midi.inputDeviceName = NULL; - } -#endif - if (editor.audioDevConfigFileLocationU != NULL) { free(editor.audioDevConfigFileLocationU); @@ -396,7 +408,7 @@ static void osxSetDirToProgramDirFromArgs(char **argv) { /* 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) + ** on the icon (for FT2.CFG loading) */ // if we launched from the terminal, argv[0][0] would be '.' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/src/ft2_midi.c new/ft2-clone-1.81/src/ft2_midi.c --- old/ft2-clone-1.79/src/ft2_midi.c 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/src/ft2_midi.c 2024-04-09 19:31:47.000000000 +0200 @@ -1,3 +1,5 @@ +// this implements MIDI input only! + #ifdef HAS_MIDI // for finding memory leaks in debug mode with Visual Studio @@ -18,20 +20,16 @@ #include "ft2_structs.h" #include "rtmidi/rtmidi_c.h" -#define MAX_DEV_STR_LEN 256 - // hide POSIX warnings #ifdef _MSC_VER #pragma warning(disable: 4996) #endif -// This implements MIDI input only! - midi_t midi; // globalized static volatile bool midiDeviceOpened; static bool recMIDIValidChn = true; -static RtMidiPtr midiDev; +static RtMidiPtr midiInDev; static inline void midiInSetChannel(uint8_t status) { @@ -97,13 +95,15 @@ } } -static void midiInCallback(double dTimeStamp, const unsigned char *message, size_t messageSize, void *userData) +static void midiInCallback(double timeStamp, const unsigned char *message, size_t messageSize, void *userData) { uint8_t byte[3]; if (!midi.enable || messageSize < 2) return; + midi.callbackBusy = true; + byte[0] = message[0]; if (byte[0] > 127 && byte[0] < 240) { @@ -122,25 +122,27 @@ else if (byte[0] >= 224 && byte[0] <= 224+15) midiInPitchBendChange(byte[1], byte[2]); } - (void)dTimeStamp; + midi.callbackBusy = false; + + (void)timeStamp; (void)userData; } static uint32_t getNumMidiInDevices(void) { - if (midiDev == NULL) + if (midiInDev == NULL) return 0; - return rtmidi_get_port_count(midiDev); + return rtmidi_get_port_count(midiInDev); } static char *getMidiInDeviceName(uint32_t deviceID) { - if (midiDev == NULL) - return NULL; + if (midiInDev == NULL) + return NULL; // MIDI not initialized - char *devStr = (char *)rtmidi_get_port_name(midiDev, deviceID); - if (!midiDev->ok) + char *devStr = (char *)rtmidi_get_port_name(midiInDev, deviceID); + if (devStr == NULL || !midiInDev->ok) return NULL; return devStr; @@ -148,14 +150,12 @@ void closeMidiInDevice(void) { - while (!midi.initThreadDone); - if (midiDeviceOpened) { - if (midiDev != NULL) + if (midiInDev != NULL) { - rtmidi_in_cancel_callback(midiDev); - rtmidi_close_port(midiDev); + rtmidi_in_cancel_callback(midiInDev); + rtmidi_close_port(midiInDev); } midiDeviceOpened = false; @@ -164,51 +164,48 @@ void freeMidiIn(void) { - while (!midi.initThreadDone); - - if (midiDev != NULL) + if (midiInDev != NULL) { - rtmidi_in_free(midiDev); - midiDev = NULL; + rtmidi_in_free(midiInDev); + midiInDev = NULL; } } bool initMidiIn(void) { - if (midiDev != NULL) - return false; // already initialized + midiInDev = rtmidi_in_create_default(); + if (midiInDev == NULL) + return false; - midiDev = rtmidi_in_create_default(); - if (!midiDev->ok) + if (!midiInDev->ok) { - midiDev = NULL; + rtmidi_in_free(midiInDev); return false; } - midiDeviceOpened = false; return true; } bool openMidiInDevice(uint32_t deviceID) { - if (midiDev == NULL) + if (midiDeviceOpened) return false; - if (getNumMidiInDevices() == 0) + if (midiInDev == NULL || getNumMidiInDevices() == 0) return false; - rtmidi_open_port(midiDev, deviceID, "FT2 Clone MIDI Port"); - if (!midiDev->ok) + rtmidi_open_port(midiInDev, deviceID, "FT2 Clone MIDI Port"); + if (!midiInDev->ok) return false; - rtmidi_in_set_callback(midiDev, midiInCallback, NULL); - if (!midiDev->ok) + rtmidi_in_set_callback(midiInDev, midiInCallback, NULL); + if (!midiInDev->ok) { - rtmidi_close_port(midiDev); + rtmidi_close_port(midiInDev); return false; } - rtmidi_in_ignore_types(midiDev, true, true, true); + rtmidi_in_ignore_types(midiInDev, true, true, true); midiDeviceOpened = true; return true; @@ -255,7 +252,7 @@ bool saveMidiInputDeviceToConfig(void) { - if (!midi.initThreadDone || midiDev == NULL || !midiDeviceOpened) + if (!midi.initThreadDone || midiInDev == NULL || !midiDeviceOpened) return false; const uint32_t numDevices = getNumMidiInDevices(); @@ -284,8 +281,10 @@ { uint32_t i; - if (midi.inputDeviceName != NULL) - free(midi.inputDeviceName); + // XXX: Something in here is corrupting! + + if (editor.midiConfigFileLocationU == NULL) + goto setDefMidiInputDev; const uint32_t numDevices = getNumMidiInDevices(); if (numDevices == 0) @@ -295,16 +294,15 @@ if (f == NULL) goto setDefMidiInputDev; - char *devString = (char *)malloc((MAX_DEV_STR_LEN+4) * sizeof (char)); + char *devString = (char *)malloc(1024+2); if (devString == NULL) { fclose(f); goto setDefMidiInputDev; } - devString[0] = '\0'; - if (fgets(devString, MAX_DEV_STR_LEN, f) == NULL) + if (fgets(devString, 1024, f) == NULL) { fclose(f); free(devString); @@ -334,6 +332,12 @@ if (i == numDevices) goto setDefMidiInputDev; + if (midi.inputDeviceName != NULL) + { + free(midi.inputDeviceName); + midi.inputDeviceName = NULL; + } + midi.inputDevice = i; midi.inputDeviceName = midiInStr; midi.numInputDevices = numDevices; @@ -342,9 +346,15 @@ // couldn't load device, set default setDefMidiInputDev: + if (midi.inputDeviceName != NULL) + { + free(midi.inputDeviceName); + midi.inputDeviceName = NULL; + } + midi.inputDevice = 0; midi.inputDeviceName = strdup("RtMidi"); - midi.numInputDevices = numDevices; + midi.numInputDevices = 1; return false; } @@ -371,7 +381,7 @@ if (midi.numInputDevices > MAX_MIDI_DEVICES) midi.numInputDevices = MAX_MIDI_DEVICES; - for (int32_t i = 0; i < midi.numInputDevices; i++) + for (uint32_t i = 0; i < midi.numInputDevices; i++) { char *deviceName = getMidiInDeviceName(i); if (deviceName == NULL) @@ -393,7 +403,7 @@ { clearRect(114, 4, 365, 165); - if (!midi.initThreadDone || midiDev == NULL || midi.numInputDevices == 0) + if (!midi.initThreadDone || midiInDev == NULL || midi.numInputDevices == 0) { textOut(114, 4 + (0 * 11), PAL_FORGRND, "No MIDI input devices found!"); textOut(114, 4 + (1 * 11), PAL_FORGRND, "Either wait a few seconds for MIDI to initialize, or restart the"); @@ -403,7 +413,10 @@ for (uint16_t i = 0; i < 15; i++) { - const int32_t deviceEntry = getScrollBarPos(SB_MIDI_INPUT_SCROLL) + i; + uint32_t deviceEntry = getScrollBarPos(SB_MIDI_INPUT_SCROLL) + i; + if (deviceEntry > MAX_MIDI_DEVICES) + deviceEntry = MAX_MIDI_DEVICES; + if (deviceEntry < midi.numInputDevices) { if (midi.inputDeviceNames[deviceEntry] == NULL) @@ -448,19 +461,19 @@ bool testMidiInputDeviceListMouseDown(void) { if (!ui.configScreenShown || editor.currConfigScreen != CONFIG_SCREEN_MIDI_INPUT) - return false; // we didn't click the area + return false; + + if (mouse.x < 114 || mouse.x > 479 || mouse.y < 4 || mouse.y > 166) + return false; // we didn't click inside the list area if (!midi.initThreadDone) return true; - const int32_t mx = mouse.x; - const int32_t my = mouse.y; + uint32_t deviceNum = (uint32_t)scrollBars[SB_MIDI_INPUT_SCROLL].pos + ((mouse.y - 4) / 11); + if (deviceNum > MAX_MIDI_DEVICES) + deviceNum = MAX_MIDI_DEVICES; - if (my < 4 || my > 166 || mx < 114 || mx > 479) - return false; // we didn't click the area - - const int32_t deviceNum = (int32_t)scrollBars[SB_MIDI_INPUT_SCROLL].pos + ((my - 4) / 11); - if (midi.numInputDevices <= 0 || deviceNum >= midi.numInputDevices) + if (midi.numInputDevices == 0 || deviceNum >= midi.numInputDevices) return true; if (midi.inputDeviceName != NULL) @@ -469,6 +482,7 @@ return true; // we clicked the currently selected device, do nothing free(midi.inputDeviceName); + midi.inputDeviceName = NULL; } midi.inputDeviceName = strdup(midi.inputDeviceNames[deviceNum]); @@ -485,21 +499,17 @@ int32_t SDLCALL initMidiFunc(void *ptr) { - midi.closeMidiOnExit = true; - midi.initThreadDone = false; initMidiIn(); setMidiInputDeviceFromConfig(); openMidiInDevice(midi.inputDevice); - midi.initThreadDone = true; - midi.rescanDevicesFlag = true; - + midi.initThreadDone = true; return true; (void)ptr; } #else -typedef int make_iso_compilers_happy; // kludge: prevent warning about empty .c file if HAS_MIDI is not defined +typedef int prevent_compiler_warning; // kludge: prevent warning about empty .c file if HAS_MIDI is not defined #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/src/ft2_midi.h new/ft2-clone-1.81/src/ft2_midi.h --- old/ft2-clone-1.79/src/ft2_midi.h 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/src/ft2_midi.h 2024-04-09 19:31:47.000000000 +0200 @@ -12,11 +12,11 @@ typedef struct midi_t { char *inputDeviceName, *inputDeviceNames[MAX_MIDI_DEVICES]; - volatile bool closeMidiOnExit, initThreadDone; - uint32_t inputDevice; - bool enable, rescanDevicesFlag; + volatile bool supported, initThreadDone, callbackBusy, enable; + bool rescanDevicesFlag; + uint32_t inputDevice, numInputDevices; int16_t currMIDIVibDepth, currMIDIPitch; - int32_t numInputDevices; + SDL_Thread *initMidiThread; } midi_t; extern midi_t midi; // ft2_midi.c diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/src/ft2_mouse.c new/ft2-clone-1.81/src/ft2_mouse.c --- old/ft2-clone-1.79/src/ft2_mouse.c 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/src/ft2_mouse.c 2024-04-09 19:31:47.000000000 +0200 @@ -915,6 +915,10 @@ my -= video.renderY; } + // kludge: this can happen and prevent buttons from pressing on the very first row of pixels + if (mx == -1) mx = 0; + if (my == -1) my = 0; + // multiply coords by video upscaling factors mouse.x = (int32_t)floor(mx * video.dMouseXMul); mouse.y = (int32_t)floor(my * video.dMouseYMul); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/src/ft2_radiobuttons.c new/ft2-clone-1.81/src/ft2_radiobuttons.c --- old/ft2-clone-1.79/src/ft2_radiobuttons.c 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/src/ft2_radiobuttons.c 2024-04-09 19:31:47.000000000 +0200 @@ -24,7 +24,7 @@ ** -- STRUCT INFO: -- ** x = x position ** y = y position - ** w = clickable width space, relative to x + ** w = clickable width in pixels, relative to x ** group = what group the radiobutton belongs to ** funcOnUp = function to call when released */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/src/ft2_video.c new/ft2-clone-1.81/src/ft2_video.c --- old/ft2-clone-1.79/src/ft2_video.c 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/src/ft2_video.c 2024-04-09 19:31:47.000000000 +0200 @@ -123,10 +123,10 @@ "HPC frequency (timer): %.4fMHz\n" \ "Audio frequency: %.1fkHz (expected %.1fkHz)\n" \ "Audio buffer samples: %d (expected %d)\n" \ - "Audio latency: %.1fms (expected %.1fms)\n" \ "Render size: %dx%d (offset %d,%d)\n" \ "Disp. size: %dx%d (window: %dx%d)\n" \ "Render scaling: x=%.4f, y=%.4f\n" \ + "DPI zoom factors: x=%.4f, y=%.4f\n" \ "Mouse pixel-space muls: x=%.4f, y=%.4f\n" \ "Relative mouse coords: %d,%d\n" \ "Absolute mouse coords: %d,%d\n" \ @@ -138,10 +138,10 @@ hpcFreq.freq64 / (1000.0 * 1000.0), audio.haveFreq / 1000.0, audio.wantFreq / 1000.0, audio.haveSamples, audio.wantSamples, - dAudLatency, ((audio.wantSamples * 1000.0) / audio.wantFreq), video.renderW, video.renderH, video.renderX, video.renderY, video.displayW, video.displayH, video.windowW, video.windowH, (double)video.renderW / SCREEN_W, (double)video.renderH / SCREEN_H, + video.dDpiZoomFactorX, video.dDpiZoomFactorY, video.dMouseXMul, video.dMouseYMul, mouse.x, mouse.y, mouse.absX, mouse.absY); @@ -255,20 +255,25 @@ void showErrorMsgBox(const char *fmt, ...) { - char strBuf[256]; + char strBuf[512+1]; va_list args; // format the text string va_start(args, fmt); - vsnprintf(strBuf, sizeof (strBuf), fmt, args); + vsnprintf(strBuf, sizeof (strBuf)-1, fmt, args); va_end(args); - // window can be NULL here, no problem... - SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Error", strBuf, video.window); + // SDL message boxes can be very buggy on Windows XP, use MessageBoxA() instead +#ifdef _WIN32 + MessageBoxA(NULL, strBuf, "Error", MB_OK | MB_ICONERROR); +#else + SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Error", strBuf, NULL); +#endif } static void updateRenderSizeVars(void) { + int32_t widthInPixels, heightInPixels; SDL_DisplayMode dm; int32_t di = SDL_GetWindowDisplayIndex(video.window); @@ -293,6 +298,11 @@ video.renderW = video.windowW; video.renderH = video.windowH; + + // get DPI zoom factors (Macs with Retina, etc... returns 1.0 if no zoom) + SDL_GL_GetDrawableSize(video.window, &widthInPixels, &heightInPixels); + video.dDpiZoomFactorX = (double)widthInPixels / video.windowW; + video.dDpiZoomFactorY = (double)heightInPixels / video.windowH; } else { @@ -304,16 +314,15 @@ video.renderX = (video.windowW - video.renderW) / 2; video.renderY = (video.windowH - video.renderH) / 2; - // get hi-DPI upscale factors (returns 1.0 if no hi-DPI upscaling) - int32_t widthInPixels, heightInPixels; + // get DPI zoom factors (Macs with Retina, etc... returns 1.0 if no zoom) SDL_GL_GetDrawableSize(video.window, &widthInPixels, &heightInPixels); - double dHiDPIScaleX = (double)widthInPixels / video.windowW; - double dHiDPIScaleY = (double)heightInPixels / video.windowH; + video.dDpiZoomFactorX = (double)widthInPixels / video.windowW; + video.dDpiZoomFactorY = (double)heightInPixels / video.windowH; - video.renderRect.x = (int32_t)floor(video.renderX * dHiDPIScaleX); - video.renderRect.y = (int32_t)floor(video.renderY * dHiDPIScaleY); - video.renderRect.w = (int32_t)floor(video.renderW * dHiDPIScaleX); - video.renderRect.h = (int32_t)floor(video.renderH * dHiDPIScaleY); + video.renderRect.x = (int32_t)floor(video.renderX * video.dDpiZoomFactorX); + video.renderRect.y = (int32_t)floor(video.renderY * video.dDpiZoomFactorY); + video.renderRect.w = (int32_t)floor(video.renderW * video.dDpiZoomFactorX); + video.renderRect.h = (int32_t)floor(video.renderH * video.dDpiZoomFactorY); video.useCustomRenderRect = true; // use the destination coordinates above in SDL_RenderCopy() } } @@ -322,6 +331,11 @@ // windowed mode SDL_GetWindowSize(video.window, &video.renderW, &video.renderH); + + // get DPI zoom factors (Macs with Retina, etc... returns 1.0 if no zoom) + SDL_GL_GetDrawableSize(video.window, &widthInPixels, &heightInPixels); + video.dDpiZoomFactorX = (double)widthInPixels / video.windowW; + video.dDpiZoomFactorY = (double)heightInPixels / video.windowH; } // "hardware mouse" calculations diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/src/ft2_video.h new/ft2-clone-1.81/src/ft2_video.h --- old/ft2-clone-1.79/src/ft2_video.h 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/src/ft2_video.h 2024-04-09 19:31:47.000000000 +0200 @@ -23,7 +23,7 @@ uint8_t windowModeUpscaleFactor; int32_t renderX, renderY, renderW, renderH, displayW, displayH, windowW, windowH; uint32_t mouseCursorUpscaleFactor, *frameBuffer, palette[PAL_NUM]; - double dMonitorRefreshRate, dMouseXMul, dMouseYMul; + double dMonitorRefreshRate, dDpiZoomFactorX, dDpiZoomFactorY, dMouseXMul, dMouseYMul; #ifdef _WIN32 HWND hWnd; #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/src/mixer/ft2_mix.h new/ft2-clone-1.81/src/mixer/ft2_mix.h --- old/ft2-clone-1.79/src/mixer/ft2_mix.h 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/src/mixer/ft2_mix.h 2024-04-09 19:31:47.000000000 +0200 @@ -2,7 +2,7 @@ #include <stdint.h> -#define MAX_TAPS 32 +#define MAX_TAPS 16 #define MAX_LEFT_TAPS ((MAX_TAPS/2)-1) #define MAX_RIGHT_TAPS (MAX_TAPS/2) Binary files old/ft2-clone-1.79/vs2019_project/ft2-clone/SDL2.dll and new/ft2-clone-1.81/vs2019_project/ft2-clone/SDL2.dll differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/vs2019_project/ft2-clone/ft2-clone.vcxproj new/ft2-clone-1.81/vs2019_project/ft2-clone/ft2-clone.vcxproj --- old/ft2-clone-1.79/vs2019_project/ft2-clone/ft2-clone.vcxproj 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/vs2019_project/ft2-clone/ft2-clone.vcxproj 2024-04-09 19:31:47.000000000 +0200 @@ -26,7 +26,7 @@ </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <PlatformToolset>v140</PlatformToolset> + <PlatformToolset>v141</PlatformToolset> <CharacterSet>Unicode</CharacterSet> <WholeProgramOptimization>true</WholeProgramOptimization> </PropertyGroup> @@ -37,7 +37,7 @@ </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> + <PlatformToolset>v141</PlatformToolset> <CharacterSet>Unicode</CharacterSet> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_platform.h new/ft2-clone-1.81/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_platform.h --- old/ft2-clone-1.79/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_platform.h 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_platform.h 2024-04-09 19:31:47.000000000 +0200 @@ -199,8 +199,10 @@ #undef __GDK__ #define __GDK__ 1 #endif -#if defined(__PSP__) +#if defined(__PSP__) || defined(__psp__) +#ifdef __PSP__ #undef __PSP__ +#endif #define __PSP__ 1 #endif #if defined(PS2) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_revision.h new/ft2-clone-1.81/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_revision.h --- old/ft2-clone-1.79/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_revision.h 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_revision.h 2024-04-09 19:31:47.000000000 +0200 @@ -1,7 +1,7 @@ /* Generated by updaterev.sh, do not edit */ #ifdef SDL_VENDOR_INFO -#define SDL_REVISION "SDL-release-2.30.1-0-g5adbf3765 (" SDL_VENDOR_INFO ")" +#define SDL_REVISION "SDL-release-2.30.2-0-gf461d91cd (" SDL_VENDOR_INFO ")" #else -#define SDL_REVISION "SDL-release-2.30.1-0-g5adbf3765" +#define SDL_REVISION "SDL-release-2.30.2-0-gf461d91cd" #endif #define SDL_REVISION_NUMBER 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ft2-clone-1.79/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_version.h new/ft2-clone-1.81/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_version.h --- old/ft2-clone-1.79/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_version.h 2024-03-18 15:44:31.000000000 +0100 +++ new/ft2-clone-1.81/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_version.h 2024-04-09 19:31:47.000000000 +0200 @@ -59,7 +59,7 @@ */ #define SDL_MAJOR_VERSION 2 #define SDL_MINOR_VERSION 30 -#define SDL_PATCHLEVEL 1 +#define SDL_PATCHLEVEL 2 /** * Macro to determine SDL version program was compiled against. Binary files old/ft2-clone-1.79/vs2019_project/x64/Debug/SDL2.dll and new/ft2-clone-1.81/vs2019_project/x64/Debug/SDL2.dll differ
