1 #############################################################################
3 # Copyright 2008 Tungsten Graphics, Inc.
5 # This program is free software: you can redistribute it and/or modify it
6 # under the terms of the GNU Lesser General Public License as published
7 # by the Free Software Foundation, either version 3 of the License, or
8 # (at your option) any later version.
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU Lesser General Public License for more details.
15 # You should have received a copy of the GNU Lesser General Public License
16 # along with this program. If not, see <http://www.gnu.org/licenses/>.
18 #############################################################################
24 SHORT = Intrinsic("SHORT", "%i")
25 USHORT = Intrinsic("USHORT", "%u")
26 INT = Intrinsic("INT", "%i")
27 UINT = Intrinsic("UINT", "%u")
28 LONG = Intrinsic("LONG", "%li")
29 ULONG = Intrinsic("ULONG", "%lu")
30 FLOAT = Intrinsic("FLOAT", "%f")
32 INT32 = Intrinsic("INT32", "%i")
33 UINT32 = Intrinsic("UINT32", "%i")
35 BYTE = Intrinsic("BYTE", "0x%02lx")
36 WORD = Intrinsic("WORD", "0x%04lx")
37 DWORD = Intrinsic("DWORD", "0x%08lx")
39 BOOL = Intrinsic("BOOL", "%i")
41 LPLONG = Pointer(LONG)
42 LPWORD = Pointer(WORD)
43 LPDWORD = Pointer(DWORD)
44 LPBOOL = Pointer(BOOL)
48 LPCSTR = Const(String)
50 LPCWSTR = Const(WString)
52 LARGE_INTEGER = Intrinsic("LARGE_INTEGER", "0x%llx")
53 SIZE_T = Alias("SIZE_T", SizeT)
55 HRESULT = Alias("HRESULT", Int)
57 PVOID = Intrinsic("PVOID", "%p")
59 HANDLE = Intrinsic("HANDLE", "%p")
60 HWND = Intrinsic("HWND", "%p")
61 HDC = Intrinsic("HDC", "%p")
62 HMONITOR = Intrinsic("HMONITOR", "%p")
64 GUID = Struct("GUID", [
77 LPGUID = Pointer(GUID)
79 #REFGUID = Alias("REFGUID", Pointer(GUID))
80 REFGUID = Alias("REFGUID", GUID)
82 IID = Alias("IID", GUID)
83 #REFIID = Alias("REFIID", Pointer(IID))
84 REFIID = Alias("REFIID", IID)
86 CLSID = Alias("CLSID", GUID)
87 #REFCLSID = Alias("REFCLSID", Pointer(CLSID))
88 REFCLSID = Alias("REFCLSID", CLSID)
90 LUID = Struct("LUID", [
95 POINT = Struct("POINT", (
99 LPPOINT = Pointer(POINT)
101 RECT = Struct("RECT", (
107 LPRECT = Pointer(RECT)
109 PALETTEENTRY = Struct("PALETTEENTRY", (
115 LPPALETTEENTRY = Pointer(PALETTEENTRY)
118 RGNDATAHEADER = Struct("RGNDATAHEADER", [
126 RGNDATA = Struct("RGNDATA", [
127 (RGNDATAHEADER, "rdh"),
128 #(Char, "Buffer[1]"),
130 LPRGNDATA = Pointer(RGNDATA)
132 HMODULE = Alias("HMODULE", LPVOID)
134 IUnknown = Interface("IUnknown")
137 Method(HRESULT, "QueryInterface", ((REFIID, "riid"), (Pointer(Pointer(Void)), "ppvObj"))),
138 Method(ULONG, "AddRef", ()),
139 Method(ULONG, "Release", ()),
143 class DllFunction(Function):
145 def get_true_pointer(self):
146 ptype = self.pointer_type()
147 pvalue = self.pointer_value()
148 print ' if(!g_hDll) {'
149 print ' g_hDll = LoadLibrary(g_szDll);'
153 print ' if(!%s) {' % (pvalue,)
154 print ' %s = (%s)GetProcAddress(g_hDll, "%s");' % (pvalue, ptype, self.name)
155 print ' if(!%s)' % (pvalue,)
162 def __init__(self, name):
165 if self not in towrap:
169 return "Wrap" + self.name
171 def wrap_pre_decl(self):
175 print 'static HINSTANCE g_hDll = NULL;'
176 print 'static TCHAR g_szDll[MAX_PATH] = {0};'
178 print 'BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved);'
180 for function in self.functions:
185 print r'BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {'
186 print r' switch(fdwReason) {'
187 print r' case DLL_PROCESS_ATTACH:'
188 print r' if(!GetSystemDirectory(g_szDll, MAX_PATH))'
189 print r' return FALSE;'
190 print r' _tcscat(g_szDll, TEXT("\\%s.dll"));' % self.name
191 print r' Log::Open("%s");' % self.name
192 print r' case DLL_THREAD_ATTACH:'
193 print r' return TRUE;'
194 print r' case DLL_THREAD_DETACH:'
195 print r' return TRUE;'
196 print r' case DLL_PROCESS_DETACH:'
197 print r' Log::Close();'
198 print r' if(g_hDll) {'
199 print r' FreeLibrary(g_hDll);'
200 print r' g_hDll = NULL;'
202 print r' return TRUE;'
204 print r' (void)hinstDLL;'
205 print r' (void)lpvReserved;'
206 print r' return TRUE;'
209 for function in self.functions: