aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/apiinit.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/apiinit.cpp
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/Wasabi/api/apiinit.cpp')
-rw-r--r--Src/Wasabi/api/apiinit.cpp548
1 files changed, 548 insertions, 0 deletions
diff --git a/Src/Wasabi/api/apiinit.cpp b/Src/Wasabi/api/apiinit.cpp
new file mode 100644
index 00000000..0b198ad6
--- /dev/null
+++ b/Src/Wasabi/api/apiinit.cpp
@@ -0,0 +1,548 @@
+#include "./wndmgr/layout.h"
+
+#include <tataki/export.h>
+//<?#include "<class data="implementationheader"/>"
+#include "apiinit.h"
+//?>
+
+#include <api/memmgr/api_memmgr.h>
+
+#define WASABI_SAYMYNAME
+#include <wasabicfg.h>
+#undef WASABI_SAYMYNAME
+
+#include <api/service/servicei.h>
+#include <api/locales/api_localesi.h>
+#include <api/config/api_configi.h>
+#include <api/config/items/cfgitem.h>
+#ifdef WASABI_COMPILE_FONTS
+#include <api/font/FontCreator.h>
+#include <api/font/fontapi.h>
+#endif
+#include <api/skin/skinapi.h>
+#include <api/skin/groupwndcreate.h>
+#include <api/script/makiapi.h>
+#include <api/script/objecttable.h>
+#include <api/wnd/wndapi.h>
+#include <api/wnd/wndclass/foreignwnd.h>
+#include <api/wnd/wndclass/clickwnd.h>
+#include <api/imgldr/imgldrapi.h>
+
+#ifdef WASABI_COMPILE_FONTS
+#ifdef WIN32
+# include <api/font/win32/truetypefont_win32.h>
+#elif defined(LINUX)
+# include <api/font/linux/truetypefont_linux.h>
+#else
+# error port me
+#endif // platform
+#endif // fonts
+
+#include <api/wndmgr/wndmgrapi.h>
+
+#ifdef WASABI_COMPILE_MAKIDEBUG
+#include <api/script/debugger/debugapi.h>
+#endif
+#ifdef WASABI_COMPILE_MAKIDEBUG
+#include <api/core/api_core.h>
+#endif
+#ifdef WASABI_COMPILE_FILEREADER
+#include <api/filereader/filereaderapi.h>
+#ifdef WASABI_COMPILE_ZIPREADER
+#include <api/filereader/zip/zipread.h>
+#endif
+#endif
+#ifdef WASABI_COMPILE_LINUX
+#include <api/linux/api_linuxi.h>
+#endif
+#ifdef WASABI_COMPILE_TEXTMODE
+#if defined(WIN32)
+#include <api/textmode/textmode_win32.h>
+#elif defined(LINUX)
+#include <api/textmode/textmode_ncurses.h>
+#else // dummy
+#include <api/textmode/api_textmodeI.h>
+#endif
+#endif
+
+
+#if defined(WASABI_COMPILE_COMPONENTS) | defined(GEN_FF) // MULTIAPI-FIXME
+#include <api/wac/compon.h>
+#endif
+
+#include <api/wndmgr/gc.h>
+
+#include <api/application/api_application.h>
+#ifndef WASABI_CUSTOM_MODULE_SVCMGR
+DECLARE_MODULE_SVCMGR;
+#endif
+
+#ifdef _WIN32
+extern HINSTANCE hInstance;
+#endif
+
+extern StringW g_resourcepath;
+api_application *applicationApi = NULL;
+timer_api *timerApi = NULL;
+
+int ApiInit::init(OSMODULEHANDLE hinstance, OSWINDOWHANDLE mainwnd, api_service *wa5_svc)
+{
+ Tataki::Init(wa5_svc);
+ serviceApi = wa5_svc;
+ initcount++;
+
+#ifndef WA3COMPATIBILITY
+
+ // ------------------------------------------------------------------------
+ // Init callback system
+ // ------------------------------------------------------------------------
+
+ waServiceFactory *sf = WASABI_API_SVC->service_getServiceByGuid(syscbApiServiceGuid);
+ if (sf) sysCallbackApi = reinterpret_cast<api_syscb *>(sf->getInterface());
+
+ // ------------------------------------------------------------------------
+ // Init application API
+ // ------------------------------------------------------------------------
+
+ sf = WASABI_API_SVC->service_getServiceByGuid(applicationApiServiceGuid);
+ if (sf) applicationApi = reinterpret_cast<api_application *>(sf->getInterface());
+
+g_resourcepath = StringPathCombine(WASABI_API_APP->path_getAppPath(), WASABI_RESOURCES_SUBDIRECTORY);
+
+ // ------------------------------------------------------------------------
+ // Init centralized memory manager api
+ // ------------------------------------------------------------------------
+
+ sf = WASABI_API_SVC->service_getServiceByGuid(memMgrApiServiceGuid);
+ if (sf) WASABI_API_MEMMGR = reinterpret_cast<api_memmgr *>(sf->getInterface());
+
+#ifdef WASABI_COMPILE_FILEREADER
+ // ------------------------------------------------------------------------
+ // Init file reader api and optional file readers
+ // ------------------------------------------------------------------------
+ fr = new FileReaderApi();
+ fileApi = fr;
+ WASABI_API_SVC->service_register(frapisvc = new FileReaderApiService());
+ //WASABI_API_SVC->service_register(&diskReader);
+ // set up custom file readers
+#ifdef WASABI_COMPILE_ZIPREADER
+ zipRead = new waServiceTSingle<svc_fileReader, ZipRead>;
+#endif
+#ifdef WASABI_COMPILE_ZIPREADER
+ WASABI_API_SVC->service_register(zipRead);
+#endif
+#endif // WASABI_COMPILE_FILEREADER
+
+
+ // ------------------------------------------------------------------------
+ // Init config api and register optional config items
+ // ------------------------------------------------------------------------
+#ifdef WASABI_COMPILE_CONFIG
+ cfg = new api_configI();
+ configApi = cfg;
+ WASABI_API_SVC->service_register(cfgapisvc = new ConfigApiService());
+#endif
+
+ // if no static service was ever declared, we need to init it so we don't hit null
+ INIT_MODULE_SVCMGR();
+
+ DebugStringW(L"Auto-initializing %d services (system pass)\n", staticServiceMgr->__m_modules2.getNumItems());
+ MODULE_SVCMGR_ONINIT2();
+
+#ifdef WASABI_COMPILE_IMGLDR
+ // ------------------------------------------------------------------------
+ // Init image loading api and optional image formats
+ // ------------------------------------------------------------------------
+ img = new ImgLdrApi();
+ imgLoaderApi = img;
+ WASABI_API_SVC->service_register(imgldrapisvc = new ImgLdrApiService());
+
+#endif
+
+#ifdef WASABI_COMPILE_FONTS
+ // ------------------------------------------------------------------------
+ // Init font rendering api
+ // ------------------------------------------------------------------------
+ font = new FontApi();
+ fontApi = font;
+ win32Font = new FontCreator<TrueTypeFont_Win32>;
+ WASABI_API_SVC->service_register(win32Font);
+ WASABI_API_SVC->service_register(fontapisvc = new FontApiService());
+#endif
+
+
+#ifdef WASABI_COMPILE_LOCALES
+ // ------------------------------------------------------------------------
+ // Init localization
+ // ------------------------------------------------------------------------
+ loc = new api_localesI();
+ localesApi = loc;
+ WASABI_API_SVC->service_register(localesapisvc = new LocalesApiService());
+#endif
+
+ // ------------------------------------------------------------------------
+ // Init timer api
+ // ------------------------------------------------------------------------
+ sf = WASABI_API_SVC->service_getServiceByGuid(timerApiServiceGuid);
+ if (sf) timerApi = reinterpret_cast<timer_api *>(sf->getInterface());
+
+
+#ifdef WASABI_COMPILE_WND
+ // ------------------------------------------------------------------------
+ // Init window api
+ // ------------------------------------------------------------------------
+ wnd = new WndApi();
+ wndApi = wnd;
+#ifdef _WIN32
+ if (mainwnd != NULL)
+ {
+ mainWnd = new ForeignWnd(mainwnd, hInstance);
+ DebugStringW(L"main wnd handle is %x\n", mainWnd->gethWnd());
+ wnd->main_setRootWnd(mainWnd);
+ }
+ else
+ {
+ default_mainWnd = new ClickWnd();
+ default_mainWnd->init(hInstance, NULL, TRUE);
+ wnd->main_setRootWnd(default_mainWnd);
+ }
+ #endif
+ WASABI_API_SVC->service_register(wndapisvc = new WndApiService());
+#endif
+
+ // ------------------------------------------------------------------------
+ // Init media core api
+ // ------------------------------------------------------------------------
+#ifdef WASABI_COMPILE_MEDIACORE
+ #ifndef WA3COMPATIBILITY
+ #ifdef WASABI_CUSTOMIMPL_MEDIACORE
+ coreApi = createCustomCoreApi();
+#else
+ #error "not done yet"
+ #endif
+ #endif
+ WASABI_API_SVC->service_register(coreapisvc = new CoreApiService());
+#endif
+
+#ifdef WASABI_COMPILE_WNDMGR
+ // ------------------------------------------------------------------------
+ // Init window manager api
+ // ------------------------------------------------------------------------
+ wndmgr = new WndMgrApi ();
+ wndManagerApi = wndmgr;
+ WASABI_API_SVC->service_register(wndmgrapisvc = new WndMgrApiService());
+#endif
+
+
+
+#ifdef WASABI_COMPILE_SKIN
+ // ------------------------------------------------------------------------
+ // Init skin
+ // ------------------------------------------------------------------------
+ skin = new SkinApi();
+ skinApi = skin;
+
+#ifdef WASABI_COMPILE_COMPONENTS
+ groupcreate = new waServiceTSingle<svc_windowCreate, GroupWndCreateSvc>;
+ WASABI_API_SVC->service_register(groupcreate);
+#endif
+
+ WASABI_API_SVC->service_register(skinapisvc = new SkinApiService());
+
+#endif
+
+#ifdef WASABI_COMPILE_MAKIDEBUG
+ // ------------------------------------------------------------------------
+ // Init script debugger api
+ // ------------------------------------------------------------------------
+ debug = new MakiDebuggerApi();
+ debugApi = debug;
+ WASABI_API_SVC->service_register(makidebugapisvc = new MakiDebugApiService());
+#endif
+
+#ifdef WASABI_COMPILE_SKIN
+ widgets = new Widgets();
+#endif
+
+#endif
+
+
+ DebugStringW(L"Auto-initializing %d services (user pass)\n", staticServiceMgr->__m_modules.getNumItems());
+ MODULE_SVCMGR_ONINIT();
+
+#ifndef WA3COMPATIBILITY
+
+#ifdef WASABI_COMPILE_SCRIPT
+ // ------------------------------------------------------------------------
+ // Init scripting api
+ // ------------------------------------------------------------------------
+ maki = new api_makiI();
+ makiApi = maki;
+ WASABI_API_SVC->service_register(makiapisvc = new MakiApiService());
+ maki->init();
+
+
+
+#ifdef WASABI_COMPILE_WNDMGR
+ garbageCollector = new GarbageCollector();
+#endif
+
+ ObjectTable::start();
+#endif
+
+#endif //wa3compat
+
+ return 1; // success
+}
+
+int ApiInit::shutdown()
+{
+#ifndef WA3COMPATIBILITY
+
+ garbageCollector->gccb_onGarbageCollect();
+ delete garbageCollector;
+
+#ifdef WASABI_COMPILE_SKIN
+ skin->preShutdown();
+#endif
+
+ MODULE_SVCMGR_ONSHUTDOWN();
+
+#ifdef _WIN32
+ ComponentManager::unloadAll();
+#else
+#warning port me?
+#endif
+
+ WASABI_API_SVC->service_deregister(skinapisvc);
+ delete skin;
+ skinApi = NULL;
+
+ delete skinapisvc;
+ skinapisvc = 0;
+
+#ifdef WASABI_COMPILE_SCRIPT
+ ObjectTable::shutdown();
+#endif
+
+#ifdef WASABI_COMPILE_SKIN
+ delete widgets;
+ widgets = NULL;
+#endif
+ WASABI_API_SVC->service_deregister(makiapisvc);
+ delete maki;
+ makiApi = NULL;
+
+ delete makiapisvc;
+ makiapisvc = 0;
+
+#ifdef WASABI_COMPILE_COMPONENTS
+ WASABI_API_SVC->service_deregister(groupcreate);
+ delete groupcreate;
+ groupcreate = 0;
+#endif
+
+ WASABI_API_SVC->service_deregister(win32Font);
+ delete win32Font;
+ win32Font = 0;
+
+#ifdef WASABI_COMPILE_MEDIACORE
+ #ifndef WA3COMPATIBILITY
+ #ifdef WASABI_CUSTOMIMPL_MEDIACORE
+ destroyCustomCoreApi(coreApi);
+#else
+ #error "not done yet"
+ #endif
+ #endif
+
+ WASABI_API_SVC->service_deregister(coreapisvc);
+ delete coreapisvc;
+ coreapisvc = 0;
+#endif
+
+
+
+ WASABI_API_SVC->service_deregister(wndmgrapisvc);
+ delete wndmgr;
+ wndManagerApi = NULL;
+
+
+ delete wndmgrapisvc;
+ wndmgrapisvc = 0;
+
+
+ delete loc;
+ localesApi = NULL;
+
+ WASABI_API_SVC->service_deregister(localesapisvc);
+ delete localesapisvc;
+ localesapisvc = 0;
+
+
+#ifdef WASABI_COMPILE_FILEREADER
+#ifdef WASABI_COMPILE_ZIPREADER
+ WASABI_API_SVC->service_deregister(zipRead);
+ delete zipRead;
+#endif
+
+
+ delete fr;
+ fileApi = NULL;
+
+ WASABI_API_SVC->service_deregister(frapisvc);
+ delete frapisvc;
+ frapisvc = 0;
+#endif
+
+#endif
+
+ delete mainWnd;
+ mainWnd = NULL;
+ delete default_mainWnd;
+ default_mainWnd = NULL;
+ WASABI_API_SVC->service_deregister(wndapisvc);
+ delete wnd;
+ wndApi = NULL;
+
+ delete wndapisvc;
+ wndapisvc = 0;
+
+#ifdef WASABI_COMPILE_FONTS
+ WASABI_API_SVC->service_deregister(fontapisvc);
+ delete font;
+ fontApi = NULL;
+
+ delete fontapisvc;
+ fontapisvc = 0;
+#endif
+
+#ifndef WA3COMPATIBILITY
+
+
+ delete img;
+ imgLoaderApi = NULL;
+
+ WASABI_API_SVC->service_deregister(imgldrapisvc);
+ delete imgldrapisvc;
+ imgldrapisvc = 0;
+
+#ifdef WASABI_COMPILE_CONFIG
+ WASABI_API_SVC->service_deregister(cfgapisvc);
+ delete cfg;
+ configApi = NULL;
+
+ delete cfgapisvc;
+ cfgapisvc = 0;
+#endif
+
+ MODULE_SVCMGR_ONSHUTDOWN2();
+
+ WASABI_API_MEMMGR = NULL;
+
+applicationApi=NULL;
+#endif //wa3compatibility
+
+#ifdef WASABI_COMPILE_MAKIDEBUG
+ delete debug;
+ debugApi = NULL;
+
+ WASABI_API_SVC->service_deregister(makidebugapisvc);
+ delete makidebugapisvc;
+ makidebugapisvc = 0;
+#endif
+
+ if (alphaMgr)
+ delete alphaMgr;
+ alphaMgr=0;
+
+ // TODO: releaseInterface
+ timerApi = NULL;
+
+ Tataki::Quit();
+ sysCallbackApi = NULL;
+
+ return 1; // success
+}
+
+int ApiInit::getInitCount()
+{
+ return initcount;
+}
+
+#ifdef WASABI_COMPILE_SKIN
+#ifdef WASABI_COMPILE_COMPONENTS
+waServiceFactoryI * ApiInit::groupcreate = NULL;
+#endif
+#endif //WASABI_COMPILE_SKIN
+
+#ifdef WASABI_COMPILE_FONTS
+waServiceFactoryI * ApiInit::win32Font = NULL;
+FontApiService *ApiInit::fontapisvc = NULL;
+#endif //WASABI_COMPILE_FONTS
+
+#ifdef WASABI_COMPILE_SKIN
+Widgets * ApiInit::widgets = NULL;
+SkinApiService *ApiInit::skinapisvc = NULL;
+#endif
+
+#ifdef WASABI_COMPILE_CONFIG
+api_configI * ApiInit::cfg = NULL;
+ConfigApiService *ApiInit::cfgapisvc = NULL;
+#endif
+
+#ifdef WASABI_COMPILE_IMGLDR
+ImgLdrApi * ApiInit::img = NULL;
+ImgLdrApiService *ApiInit::imgldrapisvc = NULL;
+#endif
+
+#ifdef WASABI_COMPILE_FONTS
+FontApi * ApiInit::font = NULL;
+#endif
+
+#ifdef WASABI_COMPILE_FILEREADER
+FileReaderApi * ApiInit::fr = NULL;
+#ifdef WASABI_COMPILE_ZIPREADER
+waServiceFactoryI * ApiInit::zipRead = NULL;
+#endif
+FileReaderApiService *ApiInit::frapisvc = NULL;
+#endif
+
+#ifdef WASABI_COMPILE_LOCALES
+api_localesI * ApiInit::loc = NULL;
+LocalesApiService *ApiInit::localesapisvc = NULL;
+#endif
+
+#ifdef WASABI_COMPILE_WND
+WndApi * ApiInit::wnd = NULL;
+ForeignWnd * ApiInit::mainWnd = NULL;
+ClickWnd * ApiInit::default_mainWnd = NULL;
+WndApiService *ApiInit::wndapisvc = NULL;
+#endif
+
+#ifdef WASABI_COMPILE_WNDMGR
+WndMgrApi * ApiInit::wndmgr = NULL;
+WndMgrApiService *ApiInit::wndmgrapisvc = NULL;
+#endif
+
+#ifdef WASABI_COMPILE_SCRIPT
+api_makiI * ApiInit::maki = NULL;
+MakiApiService *ApiInit::makiapisvc = NULL;
+#endif
+
+#ifdef WASABI_COMPILE_SKIN
+SkinApi * ApiInit::skin = NULL;
+#endif
+
+#ifdef WASABI_COMPILE_MAKIDEBUG
+MakiDebuggerApi * ApiInit::debug = NULL;
+MakiDebugApiService *ApiInit::makidebugapisvc = NULL;
+#endif
+
+#ifdef WASABI_COMPILE_MEDIACORE
+CoreApiService *ApiInit::coreapisvc = NULL;
+#endif
+
+
+int ApiInit::initcount = 0;
+
+api_memmgr *memmgrApi = NULL; \ No newline at end of file