PageRenderTime 56ms CodeModel.GetById 30ms RepoModel.GetById 0ms app.codeStats 0ms

/dep/acelite/ace/OS_main.h

https://github.com/kroolik/TrinityCore
C Header | 310 lines | 227 code | 51 blank | 32 comment | 28 complexity | 367d3e97ac74e3de4afc57f39a2ac8eb MD5 | raw file
  1. // -*- C++ -*-
  2. //=============================================================================
  3. /**
  4. * @file OS_main.h
  5. *
  6. * $Id: OS_main.h 85579 2009-06-08 18:46:54Z mitza $
  7. *
  8. * @author Douglas C. Schmidt <schmidt@cs.wustl.edu>
  9. * @author Jesper S. M|ller<stophph@diku.dk>
  10. * @author and a cast of thousands...
  11. *
  12. * Originally in OS.h.
  13. */
  14. //=============================================================================
  15. #include /**/ "ace/ACE_export.h"
  16. #ifndef ACE_OS_MAIN_H
  17. # define ACE_OS_MAIN_H
  18. # include /**/ "ace/pre.h"
  19. # if !defined (ACE_LACKS_PRAGMA_ONCE)
  20. # pragma once
  21. # endif /* ACE_LACKS_PRAGMA_ONCE */
  22. # if !defined (ACE_DOESNT_DEFINE_MAIN)
  23. # if defined (ACE_HAS_RTEMS)
  24. extern char* rtems_progname;
  25. # endif /* ACE_HAS_RTEMS */
  26. #if defined (ACE_VXWORKS) && (ACE_VXWORKS <= 0x640) && defined (__RTP__)
  27. # include <resolvLib.h>
  28. #endif
  29. # if !defined (ACE_MAIN)
  30. # define ACE_MAIN main
  31. # endif /* ! ACE_MAIN */
  32. # if !defined (ACE_WMAIN)
  33. # define ACE_WMAIN wmain
  34. # endif /* ! ACE_WMAIN */
  35. # if defined (ACE_WIN32) && defined (ACE_USES_WCHAR)
  36. # define ACE_TMAIN wmain
  37. # else
  38. # if defined (ACE_USES_WCHAR) /* Not Win32, but uses wchar */
  39. // Replace main() with a version that converts the char** argv to
  40. // ACE_TCHAR and calls the ACE_TMAIN entrypoint.
  41. # include "ace/Argv_Type_Converter.h"
  42. # define ACE_TMAIN \
  43. ace_main_i (int, ACE_TCHAR *[]); /* forward declaration */ \
  44. int main (int argc, char *argv[]) { \
  45. ACE_Argv_Type_Converter wide_argv (argc, argv); \
  46. return ace_main_i (argc, wide_argv.get_TCHAR_argv ()); \
  47. } \
  48. int ace_main_i
  49. # else
  50. # define ACE_TMAIN main
  51. # endif /* ACE_USES_WCHAR */
  52. # endif
  53. # if defined (ACE_DOESNT_INSTANTIATE_NONSTATIC_OBJECT_MANAGER)
  54. # if !defined (ACE_HAS_NONSTATIC_OBJECT_MANAGER)
  55. # define ACE_HAS_NONSTATIC_OBJECT_MANAGER
  56. # endif /* ACE_HAS_NONSTATIC_OBJECT_MANAGER */
  57. # endif /* ACE_DOESNT_INSTANTIATE_NONSTATIC_OBJECT_MANAGER */
  58. # if defined (ACE_HAS_NONSTATIC_OBJECT_MANAGER) \
  59. && !defined (ACE_DOESNT_INSTANTIATE_NONSTATIC_OBJECT_MANAGER)
  60. // Rename "main ()" on platforms that don't allow it to be called "main ()".
  61. # if defined (ACE_VXWORKS) && !defined (__RTP__)
  62. typedef int (*ace_main_proc_ptr)(int, char *[]);
  63. extern ace_main_proc_ptr vx_ace_main_i_ptr;
  64. // Declare ACE_MAIN as extern C so that it can be retrieved
  65. // using symFindByName
  66. extern "C"
  67. {
  68. int ACE_MAIN (int, char* []);
  69. }
  70. # define main \
  71. ACE_MAIN (int, char *[]); /* forward decl to gobble up the 'int' if there is one */ \
  72. ACE_BEGIN_VERSIONED_NAMESPACE_DECL \
  73. int ace_os_main_i (int, char *[]); \
  74. ACE_END_VERSIONED_NAMESPACE_DECL \
  75. int ace_main_i(int, char *[]); \
  76. int \
  77. ACE_MAIN (int argc, char *argv[]) /* user's entry point, e.g., main */ \
  78. { \
  79. vx_ace_main_i_ptr = ace_main_i; \
  80. return ace_os_main_i (argc, argv); /* what the user calls "main" */ \
  81. } \
  82. int \
  83. ace_main_i
  84. # elif defined (ACE_HAS_RTEMS)
  85. # define main \
  86. ACE_MAIN (int, char *[]); /* forward decl to gobble up the 'int' if there is one */ \
  87. ACE_BEGIN_VERSIONED_NAMESPACE_DECL \
  88. int ace_os_main_i (int, char *[]); \
  89. ACE_END_VERSIONED_NAMESPACE_DECL \
  90. int \
  91. ACE_MAIN (int argc, char *argv[]) /* user's entry point, e.g., main */ \
  92. { \
  93. if ((argc > 0) && argv && argv[0]) \
  94. rtems_progname = argv[0]; \
  95. else \
  96. rtems_progname = "RTEMS"; \
  97. return ace_os_main_i (argc, argv); /* what the user calls "main" */ \
  98. } \
  99. int \
  100. ace_main_i
  101. # elif defined (ACE_VXWORKS) && (ACE_VXWORKS <= 0x640) && defined (__RTP__)
  102. # define main \
  103. ACE_MAIN (int, char *[]); /* forward decl to gobble up the 'int' if there is one */ \
  104. ACE_BEGIN_VERSIONED_NAMESPACE_DECL \
  105. int ace_os_main_i (int, char *[]); \
  106. ACE_END_VERSIONED_NAMESPACE_DECL \
  107. int \
  108. ACE_MAIN (int argc, char *argv[]) /* user's entry point, e.g., main */ \
  109. { \
  110. resolvInit(); \
  111. return ace_os_main_i (argc, argv); /* what the user calls "main" */ \
  112. } \
  113. int \
  114. ace_main_i
  115. # elif !defined (ACE_WIN32)
  116. # define main \
  117. ACE_MAIN (int, char *[]); /* forward decl to gobble up the 'int' if there is one */ \
  118. ACE_BEGIN_VERSIONED_NAMESPACE_DECL \
  119. ACE_Export int ace_os_main_i (int, char *[]); \
  120. ACE_END_VERSIONED_NAMESPACE_DECL \
  121. int \
  122. ACE_MAIN (int argc, char *argv[]) /* user's entry point, e.g., main */ \
  123. { \
  124. return ace_os_main_i (argc, argv); /* what the user calls "main" */ \
  125. } \
  126. ACE_Proper_Export_Flag int \
  127. ace_main_i
  128. # elif !defined (ACE_HAS_WINCE)
  129. # if defined (ACE_WIN32) && defined (ACE_USES_WCHAR)
  130. ACE_BEGIN_VERSIONED_NAMESPACE_DECL
  131. class ACE_Export ACE_Main_Base
  132. {
  133. public:
  134. int run (int, ACE_TCHAR *[]);
  135. virtual int run_i (int, ACE_TCHAR *[]) = 0;
  136. };
  137. ACE_END_VERSIONED_NAMESPACE_DECL
  138. # define wmain \
  139. ace_wmain_i (int, ACE_TCHAR *[]); \
  140. ACE_BEGIN_VERSIONED_NAMESPACE_DECL \
  141. ACE_Export int ace_os_wmain_i (ACE_Main_Base&, int, ACE_TCHAR *[]); \
  142. class ACE_Main : public ACE_Main_Base {int run_i (int, ACE_TCHAR *[]);}; \
  143. ACE_END_VERSIONED_NAMESPACE_DECL \
  144. inline int ACE_Main::run_i (int argc, ACE_TCHAR *argv[]) \
  145. { \
  146. return ace_wmain_i (argc, argv); \
  147. } \
  148. int \
  149. ACE_WMAIN (int argc, ACE_TCHAR *argv[]) /* user's entry point, e.g., wmain */ \
  150. { \
  151. ACE_Main m; \
  152. return ace_os_wmain_i (m, argc, argv); /* what the user calls "main" */ \
  153. } \
  154. int \
  155. ace_wmain_i
  156. # else /* ! (ACE_WIN32 && ACE_USES_WCHAR) */
  157. ACE_BEGIN_VERSIONED_NAMESPACE_DECL
  158. class ACE_Export ACE_Main_Base
  159. {
  160. public:
  161. ACE_Main_Base ();
  162. virtual ~ACE_Main_Base ();
  163. int run (int, char *[]);
  164. virtual int run_i (int, char *[]) = 0;
  165. };
  166. ACE_END_VERSIONED_NAMESPACE_DECL
  167. /*
  168. ** LabVIEW RT cannot directly use an executable. Need to build the program
  169. ** as a DLL and call it from something else. The ACE test framework knows this
  170. ** trick and uses a LabVIEW RT target-resident control program to load a
  171. ** DLL, look up it's main() entrypoint, and call it.
  172. */
  173. # if defined (ACE_BUILD_LABVIEW_EXE_AS_DLL)
  174. extern "C" __declspec (dllexport) int main (int, char *[]);
  175. # endif /* ACE_BUILD_LABVIEW_EXE_AS_DLL) */
  176. # define main \
  177. ace_main_i (int, char *[]); \
  178. ACE_BEGIN_VERSIONED_NAMESPACE_DECL \
  179. ACE_Export int ace_os_main_i (ACE_Main_Base&, int, char *[]); \
  180. class ACE_Main : public ACE_Main_Base {int run_i (int, char *[]);}; \
  181. inline int ACE_Main::run_i (int argc, char *argv[]) \
  182. { \
  183. return ace_main_i (argc, argv); \
  184. } \
  185. ACE_END_VERSIONED_NAMESPACE_DECL \
  186. int \
  187. ACE_MAIN (int argc, char *argv[]) /* user's entry point, e.g., wmain */ \
  188. { \
  189. ACE_Main m; \
  190. return m.run (argc, argv); /*ace_os_main_i (m, argc, argv); what the user calls "main" */ \
  191. } \
  192. int \
  193. ace_main_i
  194. # endif /* ACE_WIN32 && ACE_USES_WCHAR */
  195. # else /* ACE_HAS_WINCE */
  196. ACE_BEGIN_VERSIONED_NAMESPACE_DECL
  197. class ACE_Export ACE_Main_Base
  198. {
  199. public:
  200. virtual ~ACE_Main_Base (void);
  201. int run (HINSTANCE, HINSTANCE, LPWSTR, int);
  202. virtual int run_i (int, ACE_TCHAR *[]) = 0;
  203. };
  204. ACE_END_VERSIONED_NAMESPACE_DECL
  205. # if defined (ACE_TMAIN) // Use WinMain on CE; others give warning/error.
  206. # undef ACE_TMAIN
  207. # endif // ACE_TMAIN
  208. // Support for ACE_TMAIN, which is a recommended way. It would be nice if
  209. // CE had CommandLineToArgvW()... but it's only on NT3.5 and up.
  210. # define ACE_TMAIN \
  211. ace_tmain_i (int, ACE_TCHAR *[]); \
  212. class ACE_Main : public ACE_Main_Base {int run_i (int argc, ACE_TCHAR *argv[]);}; \
  213. inline int ACE_Main::run_i (int argc, ACE_TCHAR *argv[]) \
  214. { \
  215. return ace_tmain_i (argc, argv); \
  216. } \
  217. int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) \
  218. { \
  219. ACE_Main m; \
  220. return m.run (hInstance, hPrevInstance, lpCmdLine, nCmdShow); \
  221. } \
  222. int ace_tmain_i
  223. // Support for wchar_t but still can't fit to CE because of the command
  224. // line parameters.
  225. # define wmain \
  226. ace_wmain_i (int, ACE_TCHAR *[]); \
  227. ACE_Export int ace_os_winwmain_i (ACE_Main_Base&, hInstance, hPrevInstance, lpCmdLine, nCmdShow); /* forward declaration */ \
  228. class ACE_Main : public ACE_Main_Base {int run_i (int argc, ACE_TCHAR *argv[]);}; \
  229. inline int ACE_Main::run_i (int argc, ACE_TCHAR *argv[]) \
  230. { \
  231. return ace_wmain_i (argc, argv); \
  232. } \
  233. int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) \
  234. { \
  235. return ace_os_winwmain_i (hInstance, hPrevInstance, lpCmdLine, nCmdShow); \
  236. } \
  237. int ace_wmain_i
  238. // Supporting legacy 'main' is A LOT easier for users than changing existing
  239. // code on WinCE. Unfortunately, evc 3 can't grok a #include within the macro
  240. // expansion, so it needs to go out here.
  241. # include "ace/Argv_Type_Converter.h"
  242. # define main \
  243. ace_main_i (int, ACE_TCHAR *[]); \
  244. ACE_Export int ace_os_winmain_i (ACE_Main_Base&, hInstance, hPrevInstance, lpCmdLine, nCmdShow); /* forward declaration */ \
  245. class ACE_Main : public ACE_Main_Base {int run_i (int argc, ACE_TCHAR *argv[]);}; \
  246. inline int ACE_Main::run_i (int argc, ACE_TCHAR *argv[]) \
  247. { \
  248. return ace_main_i (argc, argv); \
  249. } \
  250. int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) \
  251. { \
  252. return ace_os_winmain_i (hInstance, hPrevInstance, lpCmdLine, nCmdShow); \
  253. } \
  254. int ace_main_i
  255. # endif /* ACE_PSOSIM */
  256. # endif /* ACE_HAS_NONSTATIC_OBJECT_MANAGER && !ACE_HAS_WINCE && !ACE_DOESNT_INSTANTIATE_NONSTATIC_OBJECT_MANAGER */
  257. #endif /* ACE_DOESNT_DEFINE_MAIN */
  258. # include /**/ "ace/post.h"
  259. #endif /* ACE_OS_MAIN_H */