From 44e561005ad8b94bf50d9d3bebf052b11198a3fb Mon Sep 17 00:00:00 2001 From: Robert Broglia Date: Sun, 27 Aug 2023 04:31:17 -0400 Subject: [PATCH] 1.5.74 release * EmuFramework: Fix writing input device configs when no saved key config is present and write them at the end of the file * EmuFramework: Add option to reset a category to defaults in ButtonConfigView * C64.emu: Recognize headerless VIC-20 cart file extensions (.20, .40, etc.) * C64.emu: Test more filename patterns when checking for split VIC-20 cart path * C64.emu: Default loading headerless 16KB VIC-20 carts to 0x6000-0xBFFF * Various code clean up --- C64.emu/src/main/Main.cc | 71 +++-- C64.emu/src/main/MainSystem.hh | 1 + C64.emu/src/vice/vic20/cart/vic20-generic.c | 3 +- .../include/emuframework/ButtonConfigView.hh | 4 +- EmuFramework/include/emuframework/EmuInput.hh | 2 +- EmuFramework/metadata/conf.mk | 2 +- EmuFramework/src/ConfigFile.cc | 8 +- EmuFramework/src/EmuApp.cc | 1 + EmuFramework/src/EmuInput.cc | 8 +- EmuFramework/src/gui/ButtonConfigView.cc | 281 ++++++++++-------- EmuFramework/src/gui/InputManagerView.cc | 1 + EmuFramework/src/privateInput.hh | 2 - imagine/build.mk | 2 +- imagine/include/imagine/config/version.h | 2 +- 14 files changed, 210 insertions(+), 178 deletions(-) diff --git a/C64.emu/src/main/Main.cc b/C64.emu/src/main/Main.cc index 0a94903a7..d5c9957b6 100755 --- a/C64.emu/src/main/Main.cc +++ b/C64.emu/src/main/Main.cc @@ -210,7 +210,8 @@ bool hasC64TapeExtension(std::string_view name) bool hasC64CartExtension(std::string_view name) { - return IG::endsWithAnyCaseless(name, ".bin", ".crt"); + return endsWithAnyCaseless(name, ".bin", ".crt", + ".20", ".40", ".60", ".70", ".a0", ".b0"); // VIC-20 headerless carts } static bool hasC64Extension(std::string_view name) @@ -353,21 +354,19 @@ bool C64App::willCreateSystem(ViewAttachParams attach, const Input::Event &e) return false; } -static FS::PathString vic20ExtraCartPath(IG::ApplicationContext ctx, std::string_view baseCartName, std::string_view searchPath) +static FS::PathString vic20ExtraCartPath(ApplicationContext ctx, std::string_view baseCartName, std::string_view searchPath) { - auto findAddrSuffixOffset = - [](std::string_view baseCartName) -> uintptr_t + auto findAddrSuffixOffset = [](std::string_view baseCartName) -> uintptr_t { - constexpr std::array addrSuffixStr - { - "-2000.", "-4000.", "-6000.", "-a000.", "-b000." - }; - for(auto suffixStr : addrSuffixStr) + for(auto suffixStr : std::array{ + "-2000.", "-4000.", "-6000.", "-a000.", "-b000.", + "[2000]", "[4000]", "[6000]", "[A000]", "[B000]", // TOSEC names + ".20", ".40", ".60", ".a0", ".b0"}) { if(auto offset = baseCartName.rfind(suffixStr); offset != baseCartName.npos) { - return offset; + return offset + 1; // skip '-', '[', or '.' } } return 0; @@ -377,17 +376,14 @@ static FS::PathString vic20ExtraCartPath(IG::ApplicationContext ctx, std::string { return {}; } - addrSuffixOffset++; // skip '-' - constexpr std::array addrSuffixChar - { - '2', '4', '6', 'a', 'b' - }; - for(auto suffixChar : addrSuffixChar) // looks for a matching file with a valid memory address suffix + const auto &addrSuffixChar = baseCartName[addrSuffixOffset]; + bool addrCharIsUpper = addrSuffixChar == 'A' || addrSuffixChar == 'B'; + for(auto c : std::array{'2', '4', '6', 'a', 'b'}) // looks for a matching file with a valid memory address suffix { - if(suffixChar == baseCartName[addrSuffixOffset]) + if(c == tolower(addrSuffixChar)) continue; // skip original filename FS::FileString cartName{baseCartName}; - cartName[addrSuffixOffset] = suffixChar; + cartName[addrSuffixOffset] = addrCharIsUpper ? toupper(c) : c; auto cartPath = FS::uriString(searchPath, cartName); if(ctx.fileUriExists(cartPath)) { @@ -397,6 +393,21 @@ static FS::PathString vic20ExtraCartPath(IG::ApplicationContext ctx, std::string return {}; } +void C64System::tryLoadingSplitVic20Cart() +{ + if(!contentDirectory().size()) + return; + auto extraCartPath = vic20ExtraCartPath(appContext(), contentFileName(), contentDirectory()); + if(extraCartPath.size()) + { + logMsg("loading extra cart image:%s", extraCartPath.data()); + if(plugin.cartridge_attach_image(CARTRIDGE_VIC20_DETECT, extraCartPath.data()) != 0) + { + EmuSystem::throwFileReadError(); + } + } +} + void C64System::loadContent(IO &, EmuSystemCreateParams params, OnLoadProgressDelegate) { initC64(EmuApp::get(appContext())); @@ -405,12 +416,20 @@ void C64System::loadContent(IO &, EmuSystemCreateParams params, OnLoadProgressDe if(shouldAutostart && plugin.autostart_autodetect_) { logMsg("loading & autostarting:%s", contentLocation().data()); - if(IG::endsWithAnyCaseless(contentFileName(), ".prg")) + if(endsWithAnyCaseless(contentFileName(), ".prg")) { // needed to store AutostartPrgDisk.d64 fallbackSaveDirectory(true); } - if(plugin.autostart_autodetect(contentLocation().data(), nullptr, 0, AUTOSTART_MODE_RUN) != 0) + if(currSystem == ViceSystem::VIC20 && hasC64CartExtension(contentFileName())) + { + if(plugin.cartridge_attach_image(CARTRIDGE_VIC20_DETECT, contentLocation().data()) != 0) + { + EmuSystem::throwFileReadError(); + } + tryLoadingSplitVic20Cart(); + } + else if(plugin.autostart_autodetect(contentLocation().data(), nullptr, 0, AUTOSTART_MODE_RUN) != 0) { EmuSystem::throwFileReadError(); } @@ -440,17 +459,9 @@ void C64System::loadContent(IO &, EmuSystemCreateParams params, OnLoadProgressDe { EmuSystem::throwFileReadError(); } - if(currSystem == ViceSystem::VIC20 && contentDirectory().size()) // check if the cart is part of a *-x000.prg pair + if(currSystem == ViceSystem::VIC20) { - auto extraCartPath = vic20ExtraCartPath(appContext(), contentFileName(), contentDirectory()); - if(extraCartPath.size()) - { - logMsg("loading extra cart image:%s", extraCartPath.data()); - if(plugin.cartridge_attach_image(systemCartType(currSystem), extraCartPath.data()) != 0) - { - EmuSystem::throwFileReadError(); - } - } + tryLoadingSplitVic20Cart(); } } optionAutostartOnLaunch = false; diff --git a/C64.emu/src/main/MainSystem.hh b/C64.emu/src/main/MainSystem.hh index de485dc59..14cb39947 100644 --- a/C64.emu/src/main/MainSystem.hh +++ b/C64.emu/src/main/MainSystem.hh @@ -229,6 +229,7 @@ protected: void startCanvasRunningFrame(); void setCanvasSkipFrame(bool on); bool updateCanvasPixelFormat(struct video_canvas_s *, PixelFormat); + void tryLoadingSplitVic20Cart(); }; using MainSystem = C64System; diff --git a/C64.emu/src/vice/vic20/cart/vic20-generic.c b/C64.emu/src/vice/vic20/cart/vic20-generic.c index 1244d32ad..fc3c96983 100644 --- a/C64.emu/src/vice/vic20/cart/vic20-generic.c +++ b/C64.emu/src/vice/vic20/cart/vic20-generic.c @@ -261,7 +261,8 @@ static int attach_image(int type, const char *filename) } else if (addr == 0x6000) { type = CARTRIDGE_VIC20_16KB_6000; } else { - log_error(LOG_DEFAULT, "could not determine type of cartridge."); + type = CARTRIDGE_VIC20_16KB_6000; + log_message(LOG_DEFAULT, "could not determine type of cartridge, defaulting to 16KiB $6000-$bfff"); } } else if (len == 0x2000) { /* 8K image */ diff --git a/EmuFramework/include/emuframework/ButtonConfigView.hh b/EmuFramework/include/emuframework/ButtonConfigView.hh index b0988c941..e3b3b9184 100644 --- a/EmuFramework/include/emuframework/ButtonConfigView.hh +++ b/EmuFramework/include/emuframework/ButtonConfigView.hh @@ -69,12 +69,14 @@ public: private: InputManagerView &rootIMView; TextMenuItem reset; + TextMenuItem resetDefaults; std::unique_ptr btn; const KeyCategory &cat; - InputDeviceConfig *devConf{}; + InputDeviceConfig &devConf; SteadyClockTimePoint leftKeyPushTime{}; void onSet(int catIdx, MappedKeys); + void updateKeyNames(const KeyConfig &); }; } diff --git a/EmuFramework/include/emuframework/EmuInput.hh b/EmuFramework/include/emuframework/EmuInput.hh index 6aa26e481..558aad59b 100644 --- a/EmuFramework/include/emuframework/EmuInput.hh +++ b/EmuFramework/include/emuframework/EmuInput.hh @@ -107,7 +107,7 @@ public: void unbindCategory(const KeyCategory &category); void resetCategory(const KeyCategory &category, KeyConfigDesc defaultConf); constexpr auto find(KeyInfo key) { return std::ranges::find_if(keyMap, [&](auto &val){ return val.key == key; }); } - constexpr MappedKeys get(KeyInfo key) { return desc().get(key); } + constexpr MappedKeys get(KeyInfo key) const { return desc().get(key); } static KeyConfig readConfig(MapIO &); void writeConfig(FileIO &) const; diff --git a/EmuFramework/metadata/conf.mk b/EmuFramework/metadata/conf.mk index 7c48b0d72..93186e759 100644 --- a/EmuFramework/metadata/conf.mk +++ b/EmuFramework/metadata/conf.mk @@ -1,4 +1,4 @@ -metadata_version = 1.5.73 +metadata_version = 1.5.74 metadata_supportedMIMETypes = application/zip metadata_supportedFileExtensions = rar 7z android_metadata_versionCodeExtra = 16 diff --git a/EmuFramework/src/ConfigFile.cc b/EmuFramework/src/ConfigFile.cc index a80ed6ec4..2fe90a919 100644 --- a/EmuFramework/src/ConfigFile.cc +++ b/EmuFramework/src/ConfigFile.cc @@ -21,6 +21,7 @@ #include #include #include +#include #include namespace EmuEx @@ -150,15 +151,12 @@ void EmuApp::saveConfigFile(FileIO &io) writeOptionValueIfNotDefault(io, CFGKEY_RENDERER_PRESENT_MODE, presentMode, Gfx::PresentMode::Auto); if(used(usePresentationTime) && renderer.supportsPresentationTime()) writeOptionValueIfNotDefault(io, CFGKEY_RENDERER_PRESENTATION_TIME, usePresentationTime, true); - - inputManager.writeCustomKeyConfigs(io); - inputManager.writeSavedInputDevices(appContext(), io); - writeStringOptionValue(io, CFGKEY_LAST_DIR, contentSearchPath()); writeStringOptionValue(io, CFGKEY_SAVE_PATH, system().userSaveDirectory()); writeStringOptionValue(io, CFGKEY_SCREENSHOTS_PATH, userScreenshotPath); - system().writeConfig(ConfigType::MAIN, io); + inputManager.writeCustomKeyConfigs(io); + inputManager.writeSavedInputDevices(appContext(), io); } EmuApp::ConfigParams EmuApp::loadConfigFile(IG::ApplicationContext ctx) diff --git a/EmuFramework/src/EmuApp.cc b/EmuFramework/src/EmuApp.cc index b7a0088d7..6d10e2571 100644 --- a/EmuFramework/src/EmuApp.cc +++ b/EmuFramework/src/EmuApp.cc @@ -50,6 +50,7 @@ #include #include #include +#include #include namespace EmuEx diff --git a/EmuFramework/src/EmuInput.cc b/EmuFramework/src/EmuInput.cc index bb612a1a3..a4263d66a 100644 --- a/EmuFramework/src/EmuInput.cc +++ b/EmuFramework/src/EmuInput.cc @@ -124,7 +124,6 @@ void InputManager::writeSavedInputDevices(ApplicationContext ctx, FileIO &io) co // write to config file logMsg("saving %d input device configs, %d bytes", (int)savedInputDevs.size(), (int)bytes); io.put(uint16_t(bytes)); - auto startOffset = io.tell(); io.put(uint16_t(CFGKEY_INPUT_DEVICE_CONFIGS)); io.put(uint8_t(savedInputDevs.size())); for(auto &ePtr : savedInputDevs) @@ -146,7 +145,7 @@ void InputManager::writeSavedInputDevices(ApplicationContext ctx, FileIO &io) co auto devPtr = ctx.inputDevice(e.name, e.enumId); uint8_t keyConfMap = devPtr ? (uint8_t)devPtr->map() : 0; io.put(keyConfMap); - if(keyConfMap) + if(e.keyConfName.size()) { logMsg("has key conf %s, map %d", e.keyConfName.data(), keyConfMap); uint8_t keyConfNameLen = e.keyConfName.size(); @@ -154,11 +153,6 @@ void InputManager::writeSavedInputDevices(ApplicationContext ctx, FileIO &io) co io.write(e.keyConfName.data(), keyConfNameLen); } } - if(auto writtenBytes = io.tell() - startOffset; - writtenBytes != bytes) - { - logErr("expected %d bytes written, got %d", (int)bytes, (int)writtenBytes); - } } bool InputManager::readCustomKeyConfig(MapIO &io) diff --git a/EmuFramework/src/gui/ButtonConfigView.cc b/EmuFramework/src/gui/ButtonConfigView.cc index b6209fedb..9de820b71 100644 --- a/EmuFramework/src/gui/ButtonConfigView.cc +++ b/EmuFramework/src/gui/ButtonConfigView.cc @@ -20,7 +20,6 @@ #include "../privateInput.hh" #include #include -#include #include #include #include @@ -28,20 +27,147 @@ namespace EmuEx { -bool ButtonConfigSetView::pointerUIIsInit() +constexpr SystemLogger log; +constexpr int resetItemsSize = 2; + +static std::string keyNames(MappedKeys keys, const Input::Device &dev) { - return unbindB.x != unbindB.x2; + Input::KeyNameFlags flags{.basicModifiers = keys.size() > 1}; + std::string s{dev.keyString(keys[0], flags)}; + for(const auto &b : keys | std::ranges::views::drop(1)) + { + s += " + "; + s += dev.keyString(b, flags); + } + return s; } -void ButtonConfigSetView::initPointerUI() +ButtonConfigView::ButtonConfigView(ViewAttachParams attach, InputManagerView &rootIMView_, const KeyCategory &cat_, InputDeviceConfig &devConf_): + TableView + { + cat_.name, + attach, + [this](const TableView &) + { + return resetItemsSize + cat.keys.size(); + }, + [this](const TableView &, size_t idx) -> MenuItem& + { + if(idx == 0) + return resetDefaults; + else if(idx == 1) + return reset; + else + return btn[idx - resetItemsSize]; + } + }, + rootIMView{rootIMView_}, + reset + { + "Unbind All", &defaultFace(), + [this](const Input::Event &e) + { + pushAndShowModal(makeView("Really unbind all keys in this category?", + YesNoAlertView::Delegates + { + .onYes = [this] + { + auto conf = devConf.makeMutableKeyConf(app()); + if(!conf) + return; + conf->unbindCategory(cat); + updateKeyNames(*conf); + devConf.buildKeyMap(app().inputManager); + } + }), e); + } + }, + resetDefaults + { + "Reset Defaults", &defaultFace(), + [this](const Input::Event &e) + { + pushAndShowModal(makeView("Really reset all keys in this category to defaults?", + YesNoAlertView::Delegates + { + .onYes = [this] + { + auto conf = devConf.mutableKeyConf(app().inputManager); + if(!conf) + return; + conf->resetCategory(cat, app().inputManager.defaultConfig(devConf.device())); + updateKeyNames(*conf); + devConf.buildKeyMap(app().inputManager); + } + }), e); + } + }, + cat{cat_}, + devConf{devConf_} +{ + log.info("init button config view for {}", Input::KeyEvent::mapName(devConf_.device().map())); + auto keyConfig = devConf_.keyConf(app().inputManager); + btn = std::make_unique(cat_.keys.size()); + for(auto &&[i, key]: enumerate(cat.keys)) + { + btn[i] = + { + app().inputManager.toString(key), + keyNames(keyConfig.get(key), devConf_.device()), + &defaultFace(), + [this, keyIdxToSet = i](const Input::Event &e) + { + auto btnSetView = makeView(rootIMView, + devConf.device(), app().inputManager.toString(cat.keys[keyIdxToSet]), + [this, keyIdxToSet](const MappedKeys &val) + { + onSet(keyIdxToSet, val); + }); + pushAndShowModal(std::move(btnSetView), e); + } + }; + btn[i].text2Color = Gfx::ColorName::YELLOW; + } +} + +void ButtonConfigView::onSet(int catIdx, MappedKeys mapKey) +{ + if(!devConf.setKey(app(), cat.keys[catIdx], mapKey)) + return; + devConf.buildKeyMap(app().inputManager); + auto &b = btn[catIdx]; + b.set2ndName(keyNames(mapKey, devConf.device())); + b.compile2nd(renderer()); +} + +bool ButtonConfigView::inputEvent(const Input::Event &e) +{ + if(e.keyEvent() && e.keyEvent()->pushed(Input::DefaultKey::LEFT) && selected >= resetItemsSize) + { + auto &keyEv = *e.keyEvent(); + auto durationSinceLastKeySet = hasTime(leftKeyPushTime) ? keyEv.time() - leftKeyPushTime : SteadyClockTime{}; + leftKeyPushTime = keyEv.time(); + if(durationSinceLastKeySet.count() && durationSinceLastKeySet <= Milliseconds(500)) + { + // unset key + leftKeyPushTime = {}; + onSet(selected - resetItemsSize, {}); + postDraw(); + } + return true; + } + else + { + return TableView::inputEvent(e); + } +} + +void ButtonConfigView::updateKeyNames(const KeyConfig &conf) { - if(!pointerUIIsInit()) + for(auto &&[i, key]: enumerate(cat.keys)) { - logMsg("init pointer UI elements"); - waitForDrawFinished(); - unbind = {"Unbind", &defaultFace()}; - cancel = {"Cancel", &defaultFace()}; - unbindB.x2 = 1; + btn[i].set2ndName(keyNames(conf.get(key), devConf.device())); + btn[i].compile2nd(renderer()); } } @@ -55,16 +181,29 @@ ButtonConfigSetView::ButtonConfigSetView(ViewAttachParams attach, rootIMView{rootIMView}, actionStr{actionName} {} +bool ButtonConfigSetView::pointerUIIsInit() +{ + return unbindB.x != unbindB.x2; +} + +void ButtonConfigSetView::initPointerUI() +{ + if(pointerUIIsInit()) + return; + log.info("init pointer UI elements"); + unbind = {"Unbind", &defaultFace()}; + cancel = {"Cancel", &defaultFace()}; + unbindB.x2 = 1; +} + void ButtonConfigSetView::place() { text.compile(renderer()); - if(pointerUIIsInit()) { unbind.compile(renderer()); cancel.compile(renderer()); - - IG::WindowRect btnFrame; + WRect btnFrame; btnFrame.setPosRel(viewRect().pos(LB2DO), unbind.nominalHeight() * 2, LB2DO); unbindB = btnFrame; unbindB.x = (viewRect().xSize()/2)*0; @@ -94,7 +233,7 @@ bool ButtonConfigSetView::inputEvent(const Input::Event &e) { if(unbindB.overlaps(motionEv.pos())) { - logMsg("unbinding key"); + log.info("unbinding key"); auto onSet = onSetD; dismiss(); onSet(MappedKeys{}); @@ -188,118 +327,4 @@ void ButtonConfigSetView::onAddedToController(ViewController *, const Input::Eve } } -static std::string keyNames(MappedKeys keys, const Input::Device &dev) -{ - Input::KeyNameFlags flags{.basicModifiers = keys.size() > 1}; - std::string s{dev.keyString(keys[0], flags)}; - for(const auto &b : keys | std::ranges::views::drop(1)) - { - s += " + "; - s += dev.keyString(b, flags); - } - return s; -} - -void ButtonConfigView::onSet(int catIdx, MappedKeys mapKey) -{ - if(!devConf->setKey(app(), cat.keys[catIdx], mapKey)) - return; - devConf->buildKeyMap(app().inputManager); - auto &b = btn[catIdx]; - b.set2ndName(keyNames(mapKey, devConf->device())); - b.compile2nd(renderer()); -} - -bool ButtonConfigView::inputEvent(const Input::Event &e) -{ - if(e.keyEvent() && e.keyEvent()->pushed(Input::DefaultKey::LEFT) && selected > 0) - { - auto &keyEv = *e.keyEvent(); - auto durationSinceLastKeySet = hasTime(leftKeyPushTime) ? keyEv.time() - leftKeyPushTime : SteadyClockTime{}; - leftKeyPushTime = keyEv.time(); - if(durationSinceLastKeySet.count() && durationSinceLastKeySet <= IG::Milliseconds(500)) - { - // unset key - leftKeyPushTime = {}; - onSet(selected - 1, {}); - postDraw(); - } - return true; - } - else - { - return TableView::inputEvent(e); - } -} - -ButtonConfigView::ButtonConfigView(ViewAttachParams attach, InputManagerView &rootIMView_, const KeyCategory &cat_, InputDeviceConfig &devConf_): - TableView - { - cat_.name, - attach, - [this](const TableView &) - { - return 1 + cat.keys.size(); - }, - [this](const TableView &, size_t idx) -> MenuItem& - { - if(idx == 0) - return reset; - else - return btn[idx-1]; - } - }, - rootIMView{rootIMView_}, - reset - { - "Unbind All", &defaultFace(), - [this](const Input::Event &e) - { - pushAndShowModal(makeView("Really unbind all keys in this category?", - YesNoAlertView::Delegates - { - .onYes = [this] - { - auto conf = devConf->makeMutableKeyConf(app()); - if(!conf) - return; - conf->unbindCategory(cat); - for(auto &&[i, key]: enumerate(cat.keys)) - { - btn[i].set2ndName(keyNames(conf->get(key), devConf->device())); - btn[i].compile2nd(renderer()); - } - devConf->buildKeyMap(app().inputManager); - } - }), e); - } - }, - cat{cat_} -{ - logMsg("init button config view for %s", Input::KeyEvent::mapName(devConf_.device().map()).data()); - devConf = &devConf_; - auto keyConfig = devConf_.keyConf(app().inputManager); - btn = std::make_unique(cat_.keys.size()); - for(auto &&[i, key]: enumerate(cat.keys)) - { - btn[i] = - { - app().inputManager.toString(key), - keyNames(keyConfig.get(key), devConf_.device()), - &defaultFace(), - [this, keyIdxToSet = i](const Input::Event &e) - { - auto btnSetView = makeView(rootIMView, - devConf->device(), app().inputManager.toString(cat.keys[keyIdxToSet]), - [this, keyIdxToSet](const MappedKeys &val) - { - onSet(keyIdxToSet, val); - }); - pushAndShowModal(std::move(btnSetView), e); - } - }; - btn[i].text2Color = Gfx::ColorName::YELLOW; - } -} - } diff --git a/EmuFramework/src/gui/InputManagerView.cc b/EmuFramework/src/gui/InputManagerView.cc index 541709e76..c4b1497d0 100644 --- a/EmuFramework/src/gui/InputManagerView.cc +++ b/EmuFramework/src/gui/InputManagerView.cc @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include diff --git a/EmuFramework/src/privateInput.hh b/EmuFramework/src/privateInput.hh index 863d1a3cd..47aea2e31 100644 --- a/EmuFramework/src/privateInput.hh +++ b/EmuFramework/src/privateInput.hh @@ -19,10 +19,8 @@ #include #include #include -#include #include #include -#include #include #include diff --git a/imagine/build.mk b/imagine/build.mk index 8d8b26943..5ce25fbfd 100644 --- a/imagine/build.mk +++ b/imagine/build.mk @@ -47,7 +47,7 @@ prefix ?= $(IMAGINE_SDK_PLATFORM_PATH) imaginePkgconfigTemplate := $(IMAGINE_PATH)/pkgconfig/imagine.pc pkgName := $(libName) pkgDescription := Game/Multimedia Engine -pkgVersion := 1.5.73 +pkgVersion := 1.5.74 LDLIBS := -l$(libName) $(LDLIBS) ifdef libNameExt pkgCFlags := -DIMAGINE_CONFIG_H=$(configFilename) diff --git a/imagine/include/imagine/config/version.h b/imagine/include/imagine/config/version.h index 01cf5958c..dab8973f2 100755 --- a/imagine/include/imagine/config/version.h +++ b/imagine/include/imagine/config/version.h @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with Imagine. If not, see */ -#define IMAGINE_VERSION_BASE "1.5.73" +#define IMAGINE_VERSION_BASE "1.5.74" #ifdef NDEBUG #define IMAGINE_VERSION IMAGINE_VERSION_BASE