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/apiinit.cpp | 548 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 548 insertions(+) create mode 100644 Src/Wasabi/api/apiinit.cpp (limited to 'Src/Wasabi/api/apiinit.cpp') 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 +//" +#include "apiinit.h" +//?> + +#include + +#define WASABI_SAYMYNAME +#include +#undef WASABI_SAYMYNAME + +#include +#include +#include +#include +#ifdef WASABI_COMPILE_FONTS +#include +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef WASABI_COMPILE_FONTS +#ifdef WIN32 +# include +#elif defined(LINUX) +# include +#else +# error port me +#endif // platform +#endif // fonts + +#include + +#ifdef WASABI_COMPILE_MAKIDEBUG +#include +#endif +#ifdef WASABI_COMPILE_MAKIDEBUG +#include +#endif +#ifdef WASABI_COMPILE_FILEREADER +#include +#ifdef WASABI_COMPILE_ZIPREADER +#include +#endif +#endif +#ifdef WASABI_COMPILE_LINUX +#include +#endif +#ifdef WASABI_COMPILE_TEXTMODE +#if defined(WIN32) +#include +#elif defined(LINUX) +#include +#else // dummy +#include +#endif +#endif + + +#if defined(WASABI_COMPILE_COMPONENTS) | defined(GEN_FF) // MULTIAPI-FIXME +#include +#endif + +#include + +#include +#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(sf->getInterface()); + + // ------------------------------------------------------------------------ + // Init application API + // ------------------------------------------------------------------------ + + sf = WASABI_API_SVC->service_getServiceByGuid(applicationApiServiceGuid); + if (sf) applicationApi = reinterpret_cast(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(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; +#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; + 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(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; + 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 -- cgit