PageRenderTime 45ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/dep/ACE_wrappers/ace/OS_main.h

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