From 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d Mon Sep 17 00:00:00 2001 From: Jef Date: Tue, 24 Sep 2024 14:54:57 +0200 Subject: Initial community commit --- Src/Wasabi/api/application/api_applicationi.cpp | 204 ++++++++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 Src/Wasabi/api/application/api_applicationi.cpp (limited to 'Src/Wasabi/api/application/api_applicationi.cpp') diff --git a/Src/Wasabi/api/application/api_applicationi.cpp b/Src/Wasabi/api/application/api_applicationi.cpp new file mode 100644 index 00000000..694bc865 --- /dev/null +++ b/Src/Wasabi/api/application/api_applicationi.cpp @@ -0,0 +1,204 @@ +#include +//" +#include "api_applicationi.h" +//?> + +#include +#include +#include +#include + +#ifdef WA3COMPATIBILITY +#include // CUT! +#include // CUT! +#include +#endif + +StringW g_resourcepath; + +// {3CBD4483-DC44-11d3-B608-000086340885} +static const GUID _baseGUID = + { 0x3cbd4483, 0xdc44, 0x11d3, { 0xb6, 0x8, 0x0, 0x0, 0x86, 0x34, 0x8, 0x85 } }; + +api_application *applicationApi = NULL; +api_applicationI::api_applicationI(HINSTANCE instance, const wchar_t *_userPath) +: appInstance(instance), mainthread(0), shuttingdown(0) +{ + userPath = _userPath; +#ifndef _WASABIRUNTIME + +#ifdef WASABI_DIRS_FROMEXEPATH + HINSTANCE hInst = GetModuleHandle(0); +#else + HINSTANCE hInst = appInstance; +#endif + + StringW path; + { + wchar_t g[WA_MAX_PATH]; + GetModuleFileNameW(hInst, g, WA_MAX_PATH - 1); + wchar_t *p = wcsrchr(g, '\\'); + if (p) *p = 0; + path = g; + } +#ifdef WIN32 + g_resourcepath = path; +#elif defined(LINUX) + g_resourcepath = "/usr/local/share/"; + g_resourcepath += WasabiVersion::getAppName(); +#endif + +#ifdef LINUX + //char *file = getenv( "WASABI_LOG_FILE" ); + //if (!ACCESS(file, 0)) UNLINK(file); +#endif + + apppath = path; + + g_resourcepath.AddBackslash(); + +#if defined(WASABI_COMPILE_SKIN) || defined(WASABI_COMPILE_IMGLDR) + g_resourcepath.AppendPath(WASABI_RESOURCES_SUBDIRECTORY); +#endif + +#endif + +#ifdef WIN32 + HANDLE h = NULL; + DuplicateHandle(GetCurrentProcess(), GetCurrentThread(), GetCurrentProcess(), &h, 0, FALSE, DUPLICATE_SAME_ACCESS); + mainthread = h; // 32-bit writes assumed atomic +#endif +#ifdef LINUX + DebugString("portme: api main thread handle dup\n"); +#endif +} + +api_applicationI::~api_applicationI() +{ + g_resourcepath.purge(); +} + +const wchar_t *api_applicationI::main_getAppName() +{ + return WasabiVersion::getAppName(); +} + +const wchar_t *api_applicationI::main_getVersionString() +{ + return WasabiVersion::getVersionString(); +} + +unsigned int api_applicationI::main_getBuildNumber() +{ + return WasabiVersion::getBuildNumber(); +} + +GUID api_applicationI::main_getGUID() +{ + return guid; +} + +HANDLE api_applicationI::main_getMainThreadHandle() +{ + if (mainthread == 0) return (HANDLE)0; + HANDLE h = (HANDLE)0; +#ifdef WIN32 + DuplicateHandle(GetCurrentProcess(), mainthread, GetCurrentProcess(), &h, 0, FALSE, DUPLICATE_SAME_ACCESS); +#endif +#ifdef LINUX + DebugString("portme: dup handle\n"); +#endif + return h; +} + +HINSTANCE api_applicationI::main_gethInstance() +{ + return appInstance; +} + +const wchar_t *api_applicationI::main_getCommandLine() +{ + return cmdLine; +} + +void api_applicationI::main_shutdown(int deferred) +{ + int x = 1; +#ifdef WASABI_CHECK_CAN_EXIT + WASABI_CHECK_CAN_EXIT(x) +#endif + if (!x) return ; + shuttingdown = 1; +#ifdef _WASABIRUNTIME + Main::doAction(ACTION_CLOSE, deferred); +#endif +#ifdef WASABI_CUSTOM_QUIT + WASABI_CUSTOM_QUITFN +#endif + +} + +void api_applicationI::main_cancelShutdown() +{ +#ifdef _WASABIRUNTIME + Main::cancelShutdown(); +#endif + shuttingdown = 0; +} + +int api_applicationI::main_isShuttingDown() +{ + return shuttingdown; +} + +const wchar_t *api_applicationI::path_getAppPath() +{ +#ifdef _WASABIRUNTIME + return Main::getMainAppPath(); +#endif + return apppath; +} + +const wchar_t *api_applicationI::path_getUserSettingsPath() +{ + return userPath; + //return PathMgr::getUserSettingsPath(); +} + +void api_applicationI::setHInstance(HINSTANCE instance) +{ + appInstance = instance; +}; + +void api_applicationI::setCommandLine(const wchar_t *cmdline) +{ + cmdLine = cmdline; +} + +void api_applicationI::setGUID(GUID g) +{ + guid = g; +} + +int api_applicationI::app_getInitCount() +{ + return ApiInit::getInitCount(); +} + + +int api_applicationI::app_messageLoopStep() +{ +#if defined(WASABI_COMPILE_TIMERS) || defined(WASABI_COMPILE_WND) + MSG msg; + if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) + { + if (!GetMessage( &msg, NULL, 0, 0 )) return 0; +#ifdef WASABI_COMPILE_WND + TranslateMessage( &msg ); +#endif + DispatchMessage( &msg ); + } +#endif + return 1; +} + -- cgit