Initial Patch of Auction House bot rev. 135
[auctionmangos.git] / dep / ACE_wrappers / ace / OS_main.h
blob71be8c08e314bde72c3a0c87ab2b12519d42f4be
1 // -*- C++ -*-
3 //=============================================================================
4 /**
5 * @file OS_main.h
7 * $Id: OS_main.h 81843 2008-06-05 15:47:55Z schmidt $
9 * @author Douglas C. Schmidt <schmidt@cs.wustl.edu>
10 * @author Jesper S. M|ller<stophph@diku.dk>
11 * @author and a cast of thousands...
13 * Originally in OS.h.
15 //=============================================================================
17 #include /**/ "ace/ACE_export.h"
19 #ifndef ACE_OS_MAIN_H
20 # define ACE_OS_MAIN_H
22 # include /**/ "ace/pre.h"
24 # if !defined (ACE_LACKS_PRAGMA_ONCE)
25 # pragma once
26 # endif /* ACE_LACKS_PRAGMA_ONCE */
28 # if defined (ACE_HAS_RTEMS)
29 extern char* rtems_progname;
30 # endif /* ACE_HAS_RTEMS */
32 #if defined (ACE_VXWORKS) && (ACE_VXWORKS <= 0x640) && defined (__RTP__)
33 # include <resolvLib.h>
34 #endif
36 # if !defined (ACE_MAIN)
37 # define ACE_MAIN main
38 # endif /* ! ACE_MAIN */
40 # if !defined (ACE_WMAIN)
41 # define ACE_WMAIN wmain
42 # endif /* ! ACE_WMAIN */
44 # if defined (ACE_WIN32) && defined (ACE_USES_WCHAR)
45 # define ACE_TMAIN wmain
46 # else
47 # if defined (ACE_USES_WCHAR) /* Not Win32, but uses wchar */
48 // Replace main() with a version that converts the char** argv to
49 // ACE_TCHAR and calls the ACE_TMAIN entrypoint.
50 # include "ace/Argv_Type_Converter.h"
51 # define ACE_TMAIN \
52 ace_main_i (int, ACE_TCHAR *[]); /* forward declaration */ \
53 int main (int argc, char *argv[]) { \
54 ACE_Argv_Type_Converter wide_argv (argc, argv); \
55 return ace_main_i (argc, wide_argv.get_TCHAR_argv ()); \
56 } \
57 int ace_main_i
58 # else
59 # define ACE_TMAIN main
60 # endif /* ACE_USES_WCHAR */
61 # endif
63 # if defined (ACE_DOESNT_INSTANTIATE_NONSTATIC_OBJECT_MANAGER)
64 # if !defined (ACE_HAS_NONSTATIC_OBJECT_MANAGER)
65 # define ACE_HAS_NONSTATIC_OBJECT_MANAGER
66 # endif /* ACE_HAS_NONSTATIC_OBJECT_MANAGER */
67 # endif /* ACE_DOESNT_INSTANTIATE_NONSTATIC_OBJECT_MANAGER */
69 # if defined (ACE_HAS_NONSTATIC_OBJECT_MANAGER) \
70 && !defined (ACE_DOESNT_INSTANTIATE_NONSTATIC_OBJECT_MANAGER)
72 // Rename "main ()" on platforms that don't allow it to be called "main ()".
74 # if defined (ACE_VXWORKS) && !defined (__RTP__)
76 typedef int (*ace_main_proc_ptr)(int, char *[]);
78 extern ace_main_proc_ptr vx_ace_main_i_ptr;
80 // Declare ACE_MAIN as extern C so that it can be retrieved
81 // using symFindByName
82 extern "C"
84 int ACE_MAIN (int, char* []);
87 # define main \
88 ACE_MAIN (int, char *[]); /* forward decl to gobble up the 'int' if there is one */ \
89 ACE_BEGIN_VERSIONED_NAMESPACE_DECL \
90 int ace_os_main_i (int, char *[]); \
91 ACE_END_VERSIONED_NAMESPACE_DECL \
92 int ace_main_i(int, char *[]); \
93 int \
94 ACE_MAIN (int argc, char *argv[]) /* user's entry point, e.g., main */ \
95 { \
96 vx_ace_main_i_ptr = ace_main_i; \
97 return ace_os_main_i (argc, argv); /* what the user calls "main" */ \
98 } \
99 int \
100 ace_main_i
102 # elif defined (ACE_HAS_RTEMS)
104 # define main \
105 ACE_MAIN (int, char *[]); /* forward decl to gobble up the 'int' if there is one */ \
106 ACE_BEGIN_VERSIONED_NAMESPACE_DECL \
107 int ace_os_main_i (int, char *[]); \
108 ACE_END_VERSIONED_NAMESPACE_DECL \
109 int \
110 ACE_MAIN (int argc, char *argv[]) /* user's entry point, e.g., main */ \
112 if ((argc > 0) && argv && argv[0]) \
113 rtems_progname = argv[0]; \
114 else \
115 rtems_progname = "RTEMS"; \
116 return ace_os_main_i (argc, argv); /* what the user calls "main" */ \
118 int \
119 ace_main_i
121 # elif defined (ACE_VXWORKS) && (ACE_VXWORKS <= 0x640) && defined (__RTP__)
123 # define main \
124 ACE_MAIN (int, char *[]); /* forward decl to gobble up the 'int' if there is one */ \
125 ACE_BEGIN_VERSIONED_NAMESPACE_DECL \
126 int ace_os_main_i (int, char *[]); \
127 ACE_END_VERSIONED_NAMESPACE_DECL \
128 int \
129 ACE_MAIN (int argc, char *argv[]) /* user's entry point, e.g., main */ \
131 resolvInit(); \
132 return ace_os_main_i (argc, argv); /* what the user calls "main" */ \
134 int \
135 ace_main_i
137 # elif !defined (ACE_WIN32)
139 # define main \
140 ACE_MAIN (int, char *[]); /* forward decl to gobble up the 'int' if there is one */ \
141 ACE_BEGIN_VERSIONED_NAMESPACE_DECL \
142 int ace_os_main_i (int, char *[]); \
143 ACE_END_VERSIONED_NAMESPACE_DECL \
144 int \
145 ACE_MAIN (int argc, char *argv[]) /* user's entry point, e.g., main */ \
147 return ace_os_main_i (argc, argv); /* what the user calls "main" */ \
149 int \
150 ace_main_i
152 # elif !defined (ACE_HAS_WINCE)
154 # if defined (ACE_WIN32) && defined (ACE_USES_WCHAR)
156 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
158 class ACE_Export ACE_Main_Base
160 public:
161 int run (int, ACE_TCHAR *[]);
162 virtual int run_i (int, ACE_TCHAR *[]) = 0;
165 ACE_END_VERSIONED_NAMESPACE_DECL
167 # define wmain \
168 ace_wmain_i (int, ACE_TCHAR *[]); \
169 ACE_BEGIN_VERSIONED_NAMESPACE_DECL \
170 ACE_Export int ace_os_wmain_i (ACE_Main_Base&, int, ACE_TCHAR *[]); \
171 class ACE_Main : public ACE_Main_Base {int run_i (int, ACE_TCHAR *[]);}; \
172 ACE_END_VERSIONED_NAMESPACE_DECL \
173 inline int ACE_Main::run_i (int argc, ACE_TCHAR *argv[]) \
175 return ace_wmain_i (argc, argv); \
177 int \
178 ACE_WMAIN (int argc, ACE_TCHAR *argv[]) /* user's entry point, e.g., wmain */ \
180 ACE_Main m; \
181 return ace_os_wmain_i (m, argc, argv); /* what the user calls "main" */ \
183 int \
184 ace_wmain_i
186 # else /* ! (ACE_WIN32 && ACE_USES_WCHAR) */
188 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
190 class ACE_Export ACE_Main_Base
192 public:
193 ACE_Main_Base ();
194 virtual ~ACE_Main_Base ();
195 int run (int, char *[]);
196 virtual int run_i (int, char *[]) = 0;
199 ACE_END_VERSIONED_NAMESPACE_DECL
202 ** LabVIEW RT cannot directly use an executable. Need to build the program
203 ** as a DLL and call it from something else. The ACE test framework knows this
204 ** trick and uses a LabVIEW RT target-resident control program to load a
205 ** DLL, look up it's main() entrypoint, and call it.
207 # if defined (ACE_BUILD_LABVIEW_EXE_AS_DLL)
208 extern "C" __declspec (dllexport) int main (int, char *[]);
209 # endif /* ACE_BUILD_LABVIEW_EXE_AS_DLL) */
211 # define main \
212 ace_main_i (int, char *[]); \
213 ACE_BEGIN_VERSIONED_NAMESPACE_DECL \
214 ACE_Export int ace_os_main_i (ACE_Main_Base&, int, char *[]); \
215 class ACE_Main : public ACE_Main_Base {int run_i (int, char *[]);}; \
216 inline int ACE_Main::run_i (int argc, char *argv[]) \
218 return ace_main_i (argc, argv); \
220 ACE_END_VERSIONED_NAMESPACE_DECL \
221 int \
222 ACE_MAIN (int argc, char *argv[]) /* user's entry point, e.g., wmain */ \
224 ACE_Main m; \
225 return m.run (argc, argv); /*ace_os_main_i (m, argc, argv); what the user calls "main" */ \
227 int \
228 ace_main_i
230 # endif /* ACE_WIN32 && ACE_USES_WCHAR */
232 # else /* ACE_HAS_WINCE */
234 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
236 class ACE_Export ACE_Main_Base
238 public:
239 int run (HINSTANCE, HINSTANCE, LPWSTR, int);
240 virtual int run_i (int, ACE_TCHAR *[]) = 0;
243 ACE_END_VERSIONED_NAMESPACE_DECL
245 # if defined (ACE_TMAIN) // Use WinMain on CE; others give warning/error.
246 # undef ACE_TMAIN
247 # endif // ACE_TMAIN
249 // Support for ACE_TMAIN, which is a recommended way. It would be nice if
250 // CE had CommandLineToArgvW()... but it's only on NT3.5 and up.
252 # define ACE_TMAIN \
253 ace_tmain_i (int, ACE_TCHAR *[]); \
254 class ACE_Main : public ACE_Main_Base {int run_i (int argc, ACE_TCHAR *argv[]);}; \
255 inline int ACE_Main::run_i (int argc, ACE_TCHAR *argv[]) \
257 return ace_tmain_i (argc, argv); \
259 int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) \
261 ACE_Main m; \
262 return m.run (hInstance, hPrevInstance, lpCmdLine, nCmdShow); \
264 int ace_tmain_i
266 // Support for wchar_t but still can't fit to CE because of the command
267 // line parameters.
268 # define wmain \
269 ace_wmain_i (int, ACE_TCHAR *[]); \
270 ACE_Export int ace_os_winwmain_i (ACE_Main_Base&, hInstance, hPrevInstance, lpCmdLine, nCmdShow); /* forward declaration */ \
271 class ACE_Main : public ACE_Main_Base {int run_i (int argc, ACE_TCHAR *argv[]);}; \
272 inline int ACE_Main::run_i (int argc, ACE_TCHAR *argv[]) \
274 return ace_wmain_i (argc, argv); \
276 int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) \
278 return ace_os_winwmain_i (hInstance, hPrevInstance, lpCmdLine, nCmdShow); \
280 int ace_wmain_i
282 // Supporting legacy 'main' is A LOT easier for users than changing existing
283 // code on WinCE. Unfortunately, evc 3 can't grok a #include within the macro
284 // expansion, so it needs to go out here.
285 # include "ace/Argv_Type_Converter.h"
286 # define main \
287 ace_main_i (int, ACE_TCHAR *[]); \
288 ACE_Export int ace_os_winmain_i (ACE_Main_Base&, hInstance, hPrevInstance, lpCmdLine, nCmdShow); /* forward declaration */ \
289 class ACE_Main : public ACE_Main_Base {int run_i (int argc, ACE_TCHAR *argv[]);}; \
290 inline int ACE_Main::run_i (int argc, ACE_TCHAR *argv[]) \
292 return ace_main_i (argc, argv); \
294 int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) \
296 return ace_os_winmain_i (hInstance, hPrevInstance, lpCmdLine, nCmdShow); \
298 int ace_main_i
300 # endif /* ACE_PSOSIM */
301 # endif /* ACE_HAS_NONSTATIC_OBJECT_MANAGER && !ACE_HAS_WINCE && !ACE_DOESNT_INSTANTIATE_NONSTATIC_OBJECT_MANAGER */
303 # include /**/ "ace/post.h"
305 #endif /* ACE_OS_MAIN_H */