]> rtime.felk.cvut.cz Git - orte.git/blob - orte/contrib/pharlap/ortedll.c
Change uncrustify configuration according to discussion with Pavel
[orte.git] / orte / contrib / pharlap / ortedll.c
1 #include "windows.h"\r
2 #include "ortedll.h"\r
3 #include <assert.h>\r
4 \r
5 #ifdef _DEBUG\r
6         #define ASSERT(x)               assert(x)\r
7 #else\r
8         #define ASSERT(x)\r
9 #endif\r
10 \r
11 \r
12 #define COUNTOF(arr)            (sizeof(arr)/sizeof((arr)[0]))\r
13 \r
14 #ifdef _DEBUG\r
15         #define __ORTE_DLL_NAME         "orted.dll"\r
16 #else\r
17         #define __ORTE_DLL_NAME         "orte.dll"\r
18 #endif\r
19 \r
20 struct __ORTE_DLL __orte;\r
21 \r
22 static const LPCSTR orteFnNames[] = {\r
23         "ORTEInit",\r
24         "ORTEDomainStart",\r
25         "ORTEDomainPropDefaultGet",\r
26         "ORTEDomainInitEvents",\r
27         "ORTEDomainAppCreate",\r
28         "ORTEDomainAppDestroy",\r
29         "ORTEDomainAppSubscriptionPatternAdd",\r
30         "ORTEDomainAppSubscriptionPatternRemove",\r
31         "ORTEDomainAppSubscriptionPatternDestroy",\r
32         "ORTEDomainMgrCreate",\r
33         "ORTEDomainMgrDestroy",\r
34         "ORTEPublicationCreate",\r
35         "ORTEPublicationDestroy",\r
36         "ORTEPublicationPropertiesGet",\r
37         "ORTEPublicationPropertiesSet",\r
38         "ORTEPublicationWaitForSubscriptions",\r
39         "ORTEPublicationGetStatus",\r
40         "ORTEPublicationSend",\r
41         "ORTEPublicationSendEx",\r
42         "ORTESubscriptionCreate",\r
43         "ORTESubscriptionDestroy",\r
44         "ORTESubscriptionPropertiesGet",\r
45         "ORTESubscriptionPropertiesSet",\r
46         "ORTESubscriptionWaitForPublications",\r
47         "ORTESubscriptionGetStatus",\r
48         "ORTESubscriptionPull",\r
49         "ORTETypeRegisterAdd",\r
50         "ORTETypeRegisterDestroyAll",\r
51         "ORTEVerbositySetOptions",\r
52         "ORTEVerbositySetLogFile",\r
53         "ORTESleepMs",\r
54         "IPAddressToString",\r
55         "StringToIPAddress",\r
56         "NtpTimeToStringMs",\r
57         "NtpTimeToStringUs"\r
58 };\r
59 \r
60 DWORD GetProcAddresses(\r
61         HINSTANCE hInst,\r
62         FARPROC *functionTable,\r
63         const LPCSTR *names,\r
64         unsigned count\r
65 )\r
66 {\r
67         FARPROC *pfnMax = functionTable + count;\r
68 \r
69         while (functionTable < pfnMax) {\r
70                 *functionTable = GetProcAddress(hInst, *names);\r
71                 if (!*functionTable)\r
72                         return GetLastError();\r
73                 ++functionTable;\r
74                 ++names;\r
75         }\r
76 \r
77         return ERROR_SUCCESS;\r
78 }\r
79 \r
80 #if 0\r
81 #define ORTE_GET_PROC_ADDRESS(symbol)   __orte.apis.symbol = (PFN_##symbol)GetProcAddress(__orte.hInstance, #symbol)\r
82 \r
83 int SomePointerNull(FARPROC *functionTable, unsigned count)\r
84 {\r
85         FARPROC *max = functionTable + count;\r
86 \r
87         while (functionTable < max) {\r
88                 if (*functionTable == NULL)\r
89                         return 1;\r
90                 ++functionTable;\r
91         }\r
92 \r
93         return 0;\r
94 }\r
95 #endif\r
96 \r
97 DWORD __ORTEDllLoad(void)\r
98 {\r
99         if (!__orte.cLoads && !__orte.fLoadTried) {\r
100                 __orte.fLoadTried = 1;\r
101                 \r
102                 __orte.hInstance = LoadLibrary(__ORTE_DLL_NAME);\r
103                 \r
104                 if (__orte.hInstance) {\r
105                         \r
106                         ASSERT(sizeof(struct __ORTE_APIS) / sizeof(FARPROC) == COUNTOF(orteFnNames));\r
107 \r
108                         __orte.dwResult = GetProcAddresses(\r
109                                 __orte.hInstance,\r
110                                 (FARPROC*)&__orte.apis,\r
111                                 orteFnNames,\r
112                                 COUNTOF(orteFnNames));\r
113                         \r
114                         if (__orte.dwResult != ERROR_SUCCESS) {\r
115                                 FreeLibrary(__orte.hInstance);\r
116                                 __orte.hInstance = NULL;\r
117                         } else {\r
118                                 __orte.dwResult = ERROR_SUCCESS;\r
119                         }\r
120                 } else {\r
121                         __orte.dwResult = GetLastError();\r
122                 }\r
123         }\r
124 \r
125         if (__orte.dwResult == ERROR_SUCCESS)\r
126                 InterlockedIncrement(&__orte.cLoads);\r
127 \r
128         return __orte.dwResult;\r
129 }\r
130 \r
131 DWORD __ORTEInit(void)\r
132 {\r
133         DWORD res = __ORTEDllLoad();\r
134 \r
135         if (res == ERROR_SUCCESS)\r
136                 __orte.apis.pfnORTEInit();\r
137 \r
138         return res;\r
139 }\r