aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/application/api_applicationi.cpp
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Wasabi/api/application/api_applicationi.cpp
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/Wasabi/api/application/api_applicationi.cpp')
-rw-r--r--Src/Wasabi/api/application/api_applicationi.cpp204
1 files changed, 204 insertions, 0 deletions
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 <precomp.h>
+//<?#include "<class data="implementationheader"/>"
+#include "api_applicationi.h"
+//?>
+
+#include <wasabicfg.h>
+#include <api/application/pathmgr.h>
+#include <api/application/version.h>
+#include <api/apiinit.h>
+
+#ifdef WA3COMPATIBILITY
+#include <runtime/main.h> // CUT!
+#include <wndmgr/layout.h> // CUT!
+#include <skin/skinparse.h>
+#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;
+}
+