git » swiftpm » main » tree

[main] / Sources / c_snikket / iinclude / hx / HxcppMain.h

#ifdef HXCPP_DLL_IMPORT

   extern "C" EXPORT_EXTRA void __main__()
   {
     __boot_all();
     __hxcpp_main();
   }

#elif defined(HX_ANDROID) && !defined(HXCPP_EXE_LINK)

   // Java Main....
   #include <jni.h>
   #include <hx/Thread.h>
   #include <android/log.h>

   extern "C" EXPORT_EXTRA void hxcpp_main()
   {
      HX_TOP_OF_STACK
      try
      {
         hx::Boot();
         __boot_all();
         __hxcpp_main();
      }
      catch (Dynamic e)
      {
         __hx_dump_stack();
         __android_log_print(ANDROID_LOG_ERROR, "Exception", "%s", e==null() ? "null" : e->toString().__CStr());
      }
      hx::SetTopOfStack((int *)0,true);
   }

   extern "C" EXPORT_EXTRA JNIEXPORT void JNICALL Java_org_haxe_HXCPP_main(JNIEnv * env)
   {
      hxcpp_main();
   }

#elif defined(HX_WINRT) && defined(__cplusplus_winrt)

   #include <Roapi.h>
   [ Platform::MTAThread ]
   int main(Platform::Array<Platform::String^>^)
   {
      HX_TOP_OF_STACK
      RoInitialize(RO_INIT_MULTITHREADED);
      hx::Boot();
      try
      {
         __boot_all();
         __hxcpp_main();
      }
      catch (Dynamic e)
      {
         __hx_dump_stack();
         return -1;
      }
      return 0;
   }

#else

   #if defined(HX_WIN_MAIN) && !defined(_WINDOWS_)
   #ifndef HINSTANCE
   #define HINSTANCE void*
   #endif
   #ifndef LPSTR
   #define LPSTR char*
   #endif
   extern "C" int __stdcall MessageBoxA(void *,const char *,const char *,int);
   #endif


   #if defined(TIZEN)
   extern "C" EXPORT_EXTRA int OspMain (int argc, char* pArgv[])
   {
   #elif defined(HX_WIN_MAIN)
   int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
   {
   #else

   extern int _hxcpp_argc;
   extern char **_hxcpp_argv;
   int main(int argc,char **argv)
   {
      _hxcpp_argc = argc;
      _hxcpp_argv = argv;
   #endif
      HX_TOP_OF_STACK
      hx::Boot();
      try
      {
         __boot_all();
         __hxcpp_main();
      }
      catch (Dynamic e)
      {
          auto customStack = e->__Field(HX_CSTRING("_hx_customStack"), HX_PROP_DYNAMIC).asString();
          if (::hx::IsNotNull(customStack))
          {
              printf("%s\n", customStack.utf8_str());
          }
          else
          {
              __hx_dump_stack();
          }

#ifdef HX_WIN_MAIN
          MessageBoxA(0, e == null() ? "null" : e->toString().__CStr(), "Error", 0);
#else
          printf("Error : %s\n", e == null() ? "null" : e->toString().__CStr());
#endif
          return -1;
      }
      return 0;
   }
   #if 0
   }
   }
   #endif

#endif