Merged all API files into two files (Win16/Win32).
diff --git a/tools/winapi/config.pm b/tools/winapi/config.pm
index bda39c7..f148160 100644
--- a/tools/winapi/config.pm
+++ b/tools/winapi/config.pm
@@ -31,7 +31,7 @@
&file_directory
&file_type &files_filter
&file_skip &files_skip
- &get_api_files &get_c_files &get_h_files &get_spec_files
+ &get_c_files &get_h_files &get_spec_files
);
@EXPORT_OK = qw(
$current_dir $wine_dir $winapi_dir $winapi_check_dir
@@ -174,10 +174,6 @@
return @files;
}
-sub get_api_files {
- my $name = shift;
- return _get_files("api", undef, "$winapi_check_dir/$name");
-}
sub get_c_files { return _get_files("c", @_); }
sub get_h_files { return _get_files("h", @_); }
sub get_spec_files { return _get_files("spec", @_); }
diff --git a/tools/winapi/win16.api b/tools/winapi/win16.api
new file mode 100644
index 0000000..a010e7e
--- /dev/null
+++ b/tools/winapi/win16.api
@@ -0,0 +1,1348 @@
+%%avifile.dll
+
+%long
+
+DWORD
+HRESULT
+LONG
+UINT
+ULONG
+
+%ptr
+
+IAVIFile *
+LPCLSID
+PAVIFILE
+PAVIFILE *
+PAVISTREAM *
+
+%str
+
+LPCSTR
+
+%void
+
+void
+
+%%commdlg.dll
+
+%long
+
+BOOL
+DWORD
+LONG
+LPARAM
+LRESULT
+
+%ptr
+
+LPCHOOSECOLOR16
+LPCHOOSEFONT16
+LPPRINTDLG16
+
+%segptr
+
+SEGPTR
+
+%str
+
+LPCSTR
+LPSTR
+
+%word
+
+BOOL16
+HINSTANCE16
+HWND16
+INT16
+UINT16
+WORD
+WPARAM16
+short
+
+%%compobj.dll
+
+%long
+
+BOOL
+DWORD
+HRESULT
+INT
+ULONG
+
+%ptr
+
+CLSID *
+COSERVERINFO *
+FILETIME *
+GUID *
+HTASK16 *
+IMalloc16 *
+LPCLSID
+LPDWORD
+LPMALLOC16 *
+LPMESSAGEFILTER
+LPMESSAGEFILTER *
+LPOLESTR16 *
+LPUNKNOWN
+LPVOID
+LPVOID *
+LPWORD
+REFCLSID
+REFGUID
+REFIID
+
+%segptr
+
+SEGPTR
+
+%str
+
+LPCOLESTR16
+LPOLESTR
+
+%void
+
+VOID
+void
+
+%word
+
+BOOL16
+HINSTANCE16
+HTASK16
+INT16
+WORD
+
+%%ddeml.dll
+
+%long
+
+DWORD
+HCONV
+HCONVLIST
+HDDEDATA
+HSZ
+
+%long --forbidden
+
+int
+
+%ptr
+
+LPBYTE
+LPCONVCONTEXT16
+LPCONVINFO16
+LPDWORD
+LPVOID
+PFNCALLBACK16
+
+%str
+
+LPCSTR
+LPSTR
+
+%word
+
+BOOL16
+INT16
+UINT16
+
+%%dispdib.dll
+
+%ptr
+
+LPBITMAPINFO
+
+%str
+
+LPSTR
+
+%word
+
+WORD
+
+%%display.dll
+
+%long
+
+DWORD
+
+%ptr
+
+LPCURSORINFO
+struct tagCURSORICONINFO *
+
+%str
+
+LPSTR
+
+%void
+
+VOID
+
+%word
+
+BOOL16
+WORD
+
+%%gdi.exe
+
+%long
+
+COLORREF
+DWORD
+HANDLE
+LONG
+LPARAM
+UINT
+int
+
+%ptr
+
+ABORTPROC16
+BITMAP16 *
+BITMAPINFO *
+BITMAPINFOHEADER *
+DEVMODEA *
+DOCINFO16 *
+FARPROC16 *
+HANDLETABLE16 *
+INT16 *
+LOGBRUSH16 *
+LOGFONT16 *
+LOGPALETTE *
+LOGPEN16 *
+LPABC16
+LPBYTE
+LPCVOID
+LPDEVMODEA
+LPDWORD
+LPENUMLOGFONT16
+LPFONTINFO16
+LPGLYPHMETRICS16
+LPINT16
+LPKERNINGPAIR16
+LPLOGFONT16
+LPNEWTEXTMETRIC16
+LPOUTLINETEXTMETRIC16
+LPPALETTEENTRY
+LPPDEVICE
+LPPOINT16
+LPRASTERIZER_STATUS
+LPRECT16
+LPRGNDATA
+LPSIZE16
+LPTEXTXFORM16
+LPVOID
+MAT2 *
+METARECORD *
+PALETTEENTRY *
+POINT16 *
+RECT16 *
+RGBQUAD *
+SEGPTR *
+TEXTMETRIC16 *
+VOID *
+
+%segptr
+
+FARPROC16
+FONTENUMPROC16
+FONTENUMPROCEX16
+GOBJENUMPROC16
+LINEDDAPROC16
+MFENUMPROC16
+SEGPTR
+
+%str
+
+LPCSTR
+LPSTR
+
+%void
+
+VOID
+void
+
+%word
+
+BOOL16
+BYTE
+HANDLE16
+HBITMAP16
+HBRUSH16
+HDC16
+HFONT16
+HGDIOBJ16
+HGLOBAL16
+HMETAFILE16
+HMODULE16
+HPALETTE16
+HPEN16
+HPJOB16
+HPQ16
+HRGN16
+INT16
+UINT16
+WORD
+
+%%kernel.dll
+
+%long
+
+BOOL
+DWORD
+HANDLE
+HINSTANCE
+HMODULE
+INT
+LONG
+UINT
+
+%ptr
+
+BYTE *
+CONTEXT86 *
+FARPROC
+FARPROC *
+FARPROC16 *
+HANDLE *
+LPBYTE
+LPCATCHBUF
+LPCVOID
+LPDWORD
+LPHKEY
+LPVOID
+OFSTRUCT *
+OSVERSIONINFO16 *
+SECURITY_ATTRIBUTES *
+SEGINFO *
+SEGPTR *
+SYSLEVEL *
+THUNKLET *
+UINT16 *
+UTGLUEPROC
+WIN32_FIND_DATAA *
+WINDEBUGINFO16 *
+struct ThunkDataCommon *
+
+%segptr
+
+FARPROC16
+SEGPTR
+
+%str
+
+LPCSTR
+LPSTR
+
+%void
+
+VOID
+void
+
+%word
+
+ATOM
+BOOL16
+BYTE
+HANDLE16
+HFILE16
+HGLOBAL16
+HINSTANCE16
+HKEY
+HLOCAL16
+HMODULE16
+HQUEUE16
+HRSRC16
+HTASK16
+INT16
+UINT16
+WORD
+
+%wstr
+
+LPCWSTR
+
+%%keyboard.dll
+
+%long
+
+DWORD
+LONG
+
+%ptr
+
+LPBYTE
+LPKBINFO
+LPVOID
+
+%segptr
+
+FARPROC16
+
+%str
+
+LPCSTR
+LPSTR
+
+%void
+
+VOID
+void
+
+%word
+
+CHAR
+INT16
+UINT16
+WORD
+
+%%lzexpand.dll
+
+%long
+
+LONG
+
+%ptr
+
+LPOFSTRUCT
+LPVOID
+
+%str
+
+LPCSTR
+LPSTR
+
+%void
+
+void
+
+%word
+
+HFILE16
+INT16
+UINT16
+
+%%mmsystem.dll
+
+%long
+
+BOOL
+DWORD
+FOURCC
+HINSTANCE
+HWND
+LONG
+LPARAM
+LRESULT
+
+%ptr
+
+DWORD *
+HINSTANCE16 *
+HMIDIIN16 *
+HMIDIOUT16 *
+HMIDISTRM16 *
+HPCSTR
+HPSTR
+HWAVEIN16 *
+HWAVEOUT16 *
+LPAUXCAPS16
+LPBYTE
+LPDWORD
+LPHANDLE
+LPHMIXER16
+LPJOYCAPS16
+LPJOYINFO16
+LPJOYINFOEX
+LPMIDIHDR16
+LPMIDIINCAPS16
+LPMIDIOUTCAPS16
+LPMIXERCAPS16
+LPMIXERCONTROLDETAILS16
+LPMIXERLINE16
+LPMIXERLINECONTROLS16
+LPMMCKINFO
+LPMMIOPROC16
+LPMMTIME16
+LPTIMECAPS16
+LPUINT16
+LPWAVEFORMATEX
+LPWAVEHDR
+LPWAVEINCAPS16
+LPWAVEOUTCAPS16
+MIDIHDR16 *
+MMCKINFO *
+MMIOINFO16 *
+UINT16 *
+WAVEHDR *
+WORD *
+YIELDPROC16
+
+%segptr
+
+FARPROC16
+LPTIMECALLBACK16
+SEGPTR
+
+%str
+
+LPCSTR
+LPSTR
+
+%void
+
+void
+
+%word
+
+BOOL16
+HANDLE16
+HDRVR16
+HINSTANCE16
+HMIDIIN16
+HMIDIOUT16
+HMIDISTRM16
+HMIXER16
+HMIXEROBJ16
+HMMIO16
+HMODULE16
+HTASK16
+HWAVEIN16
+HWAVEOUT16
+HWND16
+INT16
+MMRESULT16
+UINT16
+WORD
+
+%%mouse.dll
+
+%ptr
+
+LPMOUSEINFO
+
+%segptr
+
+FARPROC16
+
+%void
+
+VOID
+
+%word
+
+WORD
+
+%%msacm.dll
+
+%long
+
+BOOL
+DWORD
+LPARAM
+LRESULT
+
+%ptr
+
+ACMDRIVERENUMCB16
+ACMFILTERENUMCB16
+ACMFILTERTAGENUMCB16
+ACMFORMATENUMCB16
+ACMFORMATTAGENUMCB16
+LPACMDRIVERDETAILS16
+LPACMFILTERCHOOSE16
+LPACMFILTERDETAILS16
+LPACMFILTERTAGDETAILS16
+LPACMFORMATCHOOSE16
+LPACMFORMATDETAILS16
+LPACMFORMATTAGDETAILS16
+LPACMSTREAMHEADER16
+LPDWORD
+LPHACMDRIVER16
+LPHACMDRIVERID16
+LPHACMSTREAM16
+LPVOID
+LPWAVEFILTER
+LPWAVEFORMATEX
+
+%word
+
+HACMDRIVER16
+HACMDRIVERID16
+HACMOBJ16
+HACMSTREAM16
+HINSTANCE16
+MMRESULT16
+UINT16
+WORD
+
+%%msvideo.dll
+
+%long
+
+DWORD
+LONG
+LRESULT
+
+%ptr
+
+LPBITMAPINFOHEADER
+LPDWORD
+LPVOID
+
+%segptr
+
+FARPROC16
+ICINFO16 *
+
+%str
+
+LPSTR
+
+%word
+
+BOOL16
+HDC16
+HDRAWDIB16
+HIC16
+HPALETTE16
+HWND16
+INT16
+UINT16
+WORD
+
+%%ole2.dll
+
+%long
+
+DWORD
+HRESULT
+
+%ptr
+
+LPDROPTARGET
+LPMONIKER *
+LPRUNNINGOBJECTTABLE *
+LPVOID
+
+%str
+
+LPCOLESTR16
+
+%void
+
+void
+
+%word
+
+HGLOBAL16
+HICON16
+HWND16
+UINT16
+
+%%ole2disp.dll
+
+%long
+
+DWORD
+HRESULT
+LCID
+int
+
+%ptr
+
+BSTR16 *
+INTERFACEDATA *
+ITypeInfo *
+ITypeInfo **
+IUnknown *
+IUnknown **
+LPBSTR16
+REFCLSID
+char *
+unsigned long *
+void *
+
+%segstr
+
+BSTR16
+
+%str
+
+LPCOLESTR16
+
+%void
+
+void
+
+%word
+
+INT16
+
+%%ole2nls.dll
+
+%long
+
+DWORD
+LCID
+LCTYPE
+
+%ptr
+
+LPVOID
+LPWORD
+
+%str
+
+LPCSTR
+LPSTR
+
+%word
+
+BOOL16
+INT16
+LANGID
+UINT16
+
+%%olecli.dll
+
+%long
+
+LHCLIENTDOC
+LONG
+
+%ptr
+
+LHCLIENTDOC *
+LPOLEOBJECT
+
+%segptr
+
+SEGPTR
+
+%str
+
+LPCSTR
+
+%word
+
+BOOL16
+HDC16
+OLESTATUS
+UINT16
+
+%%olesvr.dll
+
+%long
+
+LHSERVER
+LHSERVERDOC
+
+%ptr
+
+BOOL16 *
+LHSERVER *
+LHSERVERDOC *
+LPOLESERVER
+LPOLESERVERDOC
+
+%str
+
+LPCSTR
+
+%word
+
+HINSTANCE16
+OLESTATUS
+OLE_SERVER_USE
+
+%%setupx.dll
+
+%long
+
+BOOL
+DWORD
+LPARAM
+int
+
+%ptr
+
+HINF16 *
+LPBYTE
+LPDWORD
+LPEXPANDVTBL
+LPHKEY
+LPLOGDISKDESC
+LPLPDEVICE_INFO16
+LPVIRTNODE
+LPVOID
+VIFPROC
+
+%str
+
+LPCSTR
+LPSTR
+
+%void
+
+void
+
+%word
+
+HINF16
+HINSTANCE16
+HKEY
+HWND16
+INT16
+LOGDISKID16
+RETERR16
+UINT16
+VHSTR
+WORD
+WPARAM
+
+%%shell.dll
+
+%long
+
+BOOL
+DWORD
+LPARAM
+LRESULT
+
+%ptr
+
+HICON16 *
+LPDWORD
+LPHKEY
+LPWORD
+POINT16 *
+
+%segptr
+
+SEGPTR
+
+%str
+
+LPCSTR
+LPSTR
+
+%void
+
+void
+
+%word
+
+BOOL16
+HDROP16
+HGLOBAL16
+HICON16
+HINSTANCE16
+HKEY
+HWND16
+INT16
+UINT16
+WORD
+WPARAM16
+
+%%sound.dll
+
+%long
+
+DWORD
+
+%ptr
+
+LPINT16
+
+%void
+
+void
+
+%word
+
+INT16
+
+%%storage.dll
+
+%long
+
+DWORD
+HRESULT
+ULONG
+
+%longlong
+
+LARGE_INTEGER
+
+%ptr
+
+IID *
+IStorage16 *
+IStorage16 **
+IStream16 *
+IStream16 **
+LPSTORAGE16
+LPVOID *
+REFIID
+SNB16
+STATSTG16 *
+ULARGE_INTEGER *
+ULONG *
+void *
+
+%str
+
+LPCOLESTR16
+
+%%stress.dll
+
+%long
+
+DWORD
+LONG
+
+%void
+
+void
+
+%word
+
+BOOL16
+INT16
+UINT16
+
+%%system.dll
+
+%long
+
+DWORD
+
+%ptr
+
+char *
+
+%segptr
+
+FARPROC16
+
+%void
+
+void
+
+%word
+
+WORD
+
+%%toolhelp.dll
+
+%long
+
+DWORD
+
+%ptr
+
+CLASSENTRY *
+FARPROC
+GLOBALENTRY *
+GLOBALINFO *
+LOCAL32ENTRY *
+LOCAL32INFO *
+LOCALENTRY *
+LOCALINFO *
+MEMMANINFO *
+MODULEENTRY *
+STACKTRACEENTRY *
+SYSHEAPINFO *
+TASKENTRY *
+TIMERINFO *
+void *
+
+%segptr
+
+FARPROC16
+
+%str
+
+LPCSTR
+
+%void
+
+void
+
+%word
+
+BOOL16
+HGLOBAL16
+HMODULE16
+HTASK16
+WORD
+
+%%typelib.dll
+
+%long
+
+DWORD
+HRESULT
+LCID
+
+%ptr
+
+ITypeLib **
+LPBSTR16
+REFGUID
+
+%str
+
+LPOLESTR
+
+%word
+
+WORD
+
+%%user.exe
+
+%long
+
+BOOL
+COLORREF
+DWORD
+HHOOK
+INT
+LONG
+LPARAM
+LRESULT
+POINT16
+UINT
+
+%ptr
+
+BOOL16 *
+COLORREF *
+CONTEXT86 *
+CURSORICONINFO *
+DRAWSTATEPROC16
+DWORD *
+HANDLE *
+HHOOK *
+INT16 *
+LPBYTE
+LPCOMSTAT16
+LPCVOID
+LPDCB16
+LPDEVMODEA
+LPDRIVERINFOSTRUCT16
+LPDWORD
+LPICONINFO16
+LPINT16
+LPMSG16
+LPMSGBOXPARAMS16
+LPPAINTSTRUCT16
+LPPOINT16
+LPQUEUESTRUCT16 *
+LPRECT16
+LPSCROLLINFO
+LPVOID
+MENUITEMINFO16 *
+MSG16 *
+MSG32_16 *
+PAINTSTRUCT16 *
+POINT16 *
+RECT16 *
+SCROLLINFO *
+SEGPTR *
+UINT16 *
+WINDOWPLACEMENT16 *
+WNDCLASS16 *
+WNDCLASSEX16 *
+WNDPROC
+WORD *
+void *
+
+%segptr
+
+DLGPROC16
+FARPROC16
+GRAYSTRINGPROC16
+HOOKPROC16
+PROPENUMPROC16
+SEGPTR
+TIMERPROC16
+WNDENUMPROC16
+WNDPROC16
+
+%str
+
+LPCSTR
+LPSTR
+
+%void
+
+VOID
+void
+
+%word
+
+ATOM
+BOOL16
+BYTE
+CHAR
+HACCEL16
+HANDLE16
+HBITMAP16
+HBRUSH16
+HCURSOR16
+HDC16
+HDRVR16
+HDWP16
+HFONT16
+HGLOBAL16
+HICON16
+HINSTANCE16
+HMENU16
+HMODULE16
+HPALETTE16
+HQUEUE16
+HRGN16
+HRSRC16
+HTASK16
+HWND16
+INT16
+UINT16
+WORD
+WPARAM16
+
+%%ver.dll
+
+%long
+
+DWORD
+
+%ptr
+
+LPDWORD
+LPVOID
+SEGPTR *
+UINT16 *
+
+%segptr
+
+SEGPTR
+
+%str
+
+LPCSTR
+LPSTR
+
+%word
+
+UINT16
+
+%%w32sys.dll
+
+%long
+
+DWORD
+
+%ptr
+
+LPWIN32SINFO
+
+%segptr
+
+SEGPTR
+
+%word
+
+HFILE16
+WORD
+
+%%win32s16.dll
+
+%long
+
+BOOL
+DWORD
+HANDLE
+
+%ptr
+
+LPCVOID
+LPDWORD
+LPMEMORY_BASIC_INFORMATION
+LPVOID
+
+%segptr
+
+SEGPTR
+
+%void
+
+void
+
+%word
+
+WORD
+
+%%win87em.dll
+
+%long
+
+int
+
+%ptr
+
+CONTEXT86 *
+struct Win87EmInfoStruct *
+void *
+
+%void
+
+void
+
+%%winaspi.dll
+
+%long
+
+DWORD
+
+%segptr
+
+FARPROC16
+SEGPTR
+
+%word
+
+BOOL16
+WORD
+
+%%windebug.dll
+
+%ptr
+
+CONTEXT86 *
+
+%void
+
+void
+
+%%wineps16.dll
+
+%long
+
+DWORD
+
+%ptr
+
+LPDEVMODEA
+
+%str
+
+LPCSTR
+LPSTR
+
+%void
+
+void
+
+%word
+
+HANDLE16
+HWND16
+INT16
+WORD
+
+%%wing.dll
+
+%long
+
+COLORREF
+
+%ptr
+
+BITMAPINFO *
+RGBQUAD *
+SEGPTR *
+
+%segptr
+
+SEGPTR
+
+%word
+
+BOOL16
+HBITMAP16
+HBRUSH16
+HDC16
+HPALETTE16
+INT16
+UINT16
+WING_DITHER_TYPE
+
+%%winnls.dll
+
+%long
+
+BOOL
+
+%word
+
+HWND16
+
+%%winsock.dll
+
+%long
+
+BOOL
+INT
+LONG
+u_long
+
+%ptr
+
+INT16 *
+LPWSADATA16
+ULONG *
+char *
+struct WS_sockaddr *
+struct WS_timeval *
+ws_fd_set16 *
+
+%segptr
+
+FARPROC16
+SEGPTR
+
+%str
+
+LPCSTR
+
+%unknown
+
+struct in_addr
+
+%void
+
+void
+
+%word
+
+HANDLE16
+HWND16
+INT16
+SOCKET16
+UINT16
+u_short
+
+%%wprocs.dll
+
+%ptr
+
+CONTEXT86 *
+
+%void
+
+void
diff --git a/tools/winapi/win32.api b/tools/winapi/win32.api
new file mode 100644
index 0000000..4822e9f
--- /dev/null
+++ b/tools/winapi/win32.api
@@ -0,0 +1,3111 @@
+%%advapi32.dll
+
+%long
+
+ACCESS_MASK
+ALG_ID
+BOOL
+BYTE
+DWORD
+HANDLE
+HCRYPTHASH
+HCRYPTKEY
+HCRYPTPROV
+HKEY
+LONG
+NTSTATUS
+POLICY_INFORMATION_CLASS
+REGSAM
+SC_HANDLE
+SECURITY_IMPERSONATION_LEVEL
+SECURITY_INFORMATION
+SERVICE_STATUS_HANDLE
+TOKEN_INFORMATION_CLASS
+ULONG
+WORD
+
+%long --extension
+
+LSA_HANDLE
+
+%ptr
+
+BYTE *
+DWORD *
+FILETIME *
+HANDLE *
+HCRYPTHASH *
+HCRYPTKEY *
+HCRYPTPROV *
+LPBOOL
+LPBYTE
+LPCSTR *
+LPCWSTR *
+LPDWORD
+LPENUM_SERVICE_STATUSA
+LPENUM_SERVICE_STATUSW
+LPHANDLER_FUNCTION
+LPHKEY
+LPHW_PROFILE_INFOA
+LPLONG
+LPSECURITY_ATTRIBUTES
+LPSERVICE_STATUS
+LPSERVICE_TABLE_ENTRYA
+LPSERVICE_TABLE_ENTRYW
+LPVOID
+LPVOID *
+PACL
+PACL *
+PBOOL
+PDWORD
+PGENERIC_MAPPING
+PHANDLE
+PHKEY
+PLSA_HANDLE
+PLSA_OBJECT_ATTRIBUTES
+PLSA_REFERENCED_DOMAIN_LIST *
+PLSA_TRANSLATED_NAME *
+PLSA_UNICODE_STRING
+PLUID
+PPRIVILEGE_SET
+PSECURITY_DESCRIPTOR
+PSECURITY_DESCRIPTOR_CONTROL
+PSID
+PSID *
+PSID_IDENTIFIER_AUTHORITY
+PSID_NAME_USE
+PUCHAR
+PVOID
+PVOID *
+SECURITY_ATTRIBUTES *
+SECURITY_DESCRIPTOR *
+
+%str
+
+LPCSTR
+LPSTR
+
+%wstr
+
+LPCWSTR
+LPWSTR
+
+%%avicap32.dll
+
+%long
+
+BOOL
+INT
+WORD
+
+%str
+
+LPSTR
+
+%wstr
+
+LPWSTR
+
+%%avifil32.dll
+
+%long
+
+DWORD
+HRESULT
+LONG
+UINT
+ULONG
+
+%ptr
+
+AVICOMPRESSOPTIONS *
+AVISTREAMINFOA *
+AVISTREAMINFOW *
+CLSID *
+IAVIFile *
+LONG *
+LPAVIFILEINFOA
+LPAVIFILEINFOW
+LPBITMAPINFOHEADER
+LPCLSID
+LPVOID
+PAVIFILE
+PAVIFILE *
+PAVISTREAM
+PAVISTREAM *
+PGETFRAME
+
+%str
+
+LPCSTR
+
+%void
+
+void
+
+%%comcat.dll
+
+%long
+
+HRESULT
+
+%ptr
+
+LPVOID *
+REFCLSID
+REFIID
+
+%%comctl32.dll
+
+%long
+
+BOOL
+CHAR
+COLORREF
+DWORD
+HANDLE
+HBITMAP
+HDC
+HDPA
+HDSA
+HICON
+HIMAGELIST
+HINSTANCE
+HMENU
+HPROPSHEETPAGE
+HRESULT
+HWND
+INT
+LANGID
+LPARAM
+LRESULT
+UINT
+WORD
+WPARAM
+int
+
+%longlong
+
+POINT
+
+%ptr
+
+DLLVERSIONINFO *
+DPAENUMPROC
+DPALOADPROC
+DSAENUMPROC
+HDPA *
+IMAGEINFO *
+IMAGELISTDRAWPARAMS *
+INT *
+IStream *
+LPCOLDTBBUTTON
+LPCOLORMAP
+LPCPROPSHEETHEADERA
+LPCPROPSHEETHEADERW
+LPCPROPSHEETPAGEA
+LPCPROPSHEETPAGEW
+LPCREATEMRULISTA
+LPCREATEMRULISTW
+LPCTBBUTTON
+LPCVOID
+LPINITCOMMONCONTROLSEX
+LPINT
+LPNMHDR
+LPRECT
+LPSCROLLINFO
+LPSTR *
+LPSTREAM
+LPUINT
+LPVOID
+LPWSTR *
+PFNDPACOMPARE
+PFNDPAMERGE
+POINT *
+SMOOTHSCROLLSTRUCT *
+TRACKMOUSEEVENT *
+
+%str
+
+LPCSTR
+LPSTR
+
+%void
+
+VOID
+void
+
+%wstr
+
+LPCWSTR
+LPWSTR
+
+%%comdlg32.dll
+
+%long
+
+BOOL
+DWORD
+HRESULT
+HWND
+UINT
+short
+
+%ptr
+
+LPCHOOSECOLORA
+LPCHOOSECOLORW
+LPCHOOSEFONTA
+LPCHOOSEFONTW
+LPFINDREPLACEA
+LPFINDREPLACEW
+LPOPENFILENAMEA
+LPOPENFILENAMEW
+LPPAGESETUPDLGA
+LPPAGESETUPDLGW
+LPPRINTDLGA
+LPPRINTDLGW
+LPVOID
+
+%str
+
+LPCSTR
+LPSTR
+
+%wstr
+
+LPCWSTR
+LPWSTR
+
+%%crtdll.dll
+
+%long
+
+int
+
+%ptr
+
+char *
+char ***
+int *
+struct crtdll_stat *
+
+%void
+
+void
+
+%%crypt32.dll
+
+%long
+
+BOOL
+DWORD
+
+%ptr
+
+GUID *
+SIP_ADD_NEWPROVIDER *
+SIP_DISPATCH_INFO *
+
+%wstr
+
+LPCWSTR
+
+%%d3d8.dll
+
+%long
+
+HRESULT
+UINT
+
+%ptr
+
+LPVOID
+
+%%dciman32.dll
+
+%long
+
+HDC
+
+%void
+
+void
+
+%%ddraw.dll
+
+%long
+
+DWORD
+HRESULT
+
+%ptr
+
+LPDDENUMCALLBACKA
+LPDDENUMCALLBACKEXA
+LPDDENUMCALLBACKEXW
+LPDDENUMCALLBACKW
+LPDIRECTDRAW *
+LPDIRECTDRAWCLIPPER *
+LPGUID
+LPUNKNOWN
+LPVOID
+LPVOID *
+REFCLSID
+REFIID
+
+%%dinput.dll
+
+%long
+
+DWORD
+HINSTANCE
+HRESULT
+
+%ptr
+
+LPDIRECTINPUTA *
+LPUNKNOWN
+LPVOID *
+REFCLSID
+REFIID
+
+%%dinput8.dll
+
+%long
+
+DWORD
+HINSTANCE
+HRESULT
+
+%ptr
+
+LPUNKNOWN
+LPVOID *
+REFCLSID
+REFIID
+
+%%dplayx.dll
+
+%long
+
+DWORD
+HRESULT
+
+%ptr
+
+IUnknown *
+LPDIRECTPLAY2 *
+LPDIRECTPLAYLOBBY *
+LPDIRECTPLAYLOBBYA *
+LPDPENUMDPCALLBACKA
+LPDPENUMDPCALLBACKW
+LPGUID
+LPVOID
+LPVOID *
+REFCLSID
+REFIID
+
+%%dsound.dll
+
+%long
+
+DWORD
+HRESULT
+
+%ptr
+
+IUnknown *
+LPCGUID
+LPDIRECTSOUND8 *
+LPDIRECTSOUNDCAPTURE *
+LPDSENUMCALLBACKA
+LPDSENUMCALLBACKW
+LPUNKNOWN
+LPVOID
+LPVOID *
+REFCLSID
+REFGUID
+REFIID
+
+%%gdi32.dll
+
+%long
+
+BOOL
+COLORREF
+DWORD
+FLOAT
+HANDLE
+HBITMAP
+HBRUSH
+HCOLORSPACE
+HDC
+HENHMETAFILE
+HFONT
+HGDIOBJ
+HGLOBAL
+HMETAFILE
+HPALETTE
+HPEN
+HRGN
+HWND
+INT
+LONG
+LPARAM
+UINT
+WORD
+
+%long --extension
+
+HDC16
+HMETAFILE16
+HPJOB16
+INT16
+int
+
+%ptr
+
+ABORTPROC
+BITMAP *
+BITMAPINFO *
+BITMAPINFOHEADER *
+BYTE *
+COLORADJUSTMENT *
+DCHOOKPROC
+DEVMODEA *
+DEVMODEW *
+DOCINFOA *
+DOCINFOW *
+DWORD *
+ENHMETARECORD *
+ENHMFENUMPROC
+FONTENUMPROCA
+FONTENUMPROCEXA
+FONTENUMPROCEXW
+FONTENUMPROCW
+GCP_RESULTSA *
+GCP_RESULTSW *
+GOBJENUMPROC
+HANDLETABLE *
+INT *
+LINEDDAPROC
+LOGBRUSH *
+LOGFONTA *
+LOGFONTW *
+LOGPALETTE *
+LOGPEN *
+LPABC
+LPABCFLOAT
+LPBYTE
+LPCHARSETINFO
+LPCOLORADJUSTMENT
+LPCVOID
+LPDEVMODEA
+LPDWORD
+LPENHMETAHEADER
+LPFONTSIGNATURE
+LPGLYPHMETRICS
+LPHANDLETABLE
+LPINT
+LPKERNINGPAIR
+LPLOGCOLORSPACEA
+LPLOGCOLORSPACEW
+LPLOGFONTA
+LPLOGFONTW
+LPOUTLINETEXTMETRICA
+LPOUTLINETEXTMETRICW
+LPPALETTEENTRY
+LPPIXELFORMATDESCRIPTOR
+LPPOINT
+LPRASTERIZER_STATUS
+LPRECT
+LPRGNDATA
+LPSIZE
+LPVOID
+LPVOID *
+LPWORD
+LPXFORM
+MAT2 *
+METAFILEPICT *
+METARECORD *
+MFENUMPROC
+PALETTEENTRY *
+PFLOAT
+PIXELFORMATDESCRIPTOR *
+POINT *
+PPOLYTEXTA
+PPOLYTEXTW
+PVOID
+RECT *
+RGBQUAD *
+RGNDATA *
+TEXTMETRICA *
+TEXTMETRICW *
+WORD *
+XFORM *
+void *
+
+%ptr --extension
+
+FARPROC16
+
+%str
+
+LPCSTR
+LPSTR
+
+%void
+
+void
+
+%wstr
+
+LPCWSTR
+LPWSTR
+
+%%glu32.dll
+
+%double
+
+double
+
+%long
+
+int
+
+%ptr
+
+char *
+void *
+
+%%icmp.dll
+
+%long
+
+BOOL
+DWORD
+HANDLE
+IPAddr
+WORD
+
+%ptr
+
+LPVOID
+PIP_OPTION_INFORMATION
+
+%%imaadp32.acm
+
+%long
+
+DWORD
+HDRVR
+LPARAM
+LRESULT
+UINT
+
+%%imagehlp.dll
+
+%long
+
+BOOL
+BOOLEAN
+DWORD
+HANDLE
+HMODULE
+ULONG
+USHORT
+WORD
+
+%ptr
+
+DIGEST_FUNCTION
+DIGEST_HANDLE
+LPDWORD
+LPSYSTEMTIME
+LPVOID
+PAPI_VERSION
+PCHAR
+PCHAR *
+PDWORD
+PENUMLOADED_MODULES_CALLBACK
+PFUNCTION_TABLE_ACCESS_ROUTINE
+PGET_MODULE_BASE_ROUTINE
+PIMAGEHLP_MODULE
+PIMAGEHLP_STATUS_ROUTINE
+PIMAGEHLP_SYMBOL
+PIMAGE_DEBUG_INFORMATION
+PIMAGE_LOAD_CONFIG_DIRECTORY
+PIMAGE_NT_HEADERS
+PIMAGE_SECTION_HEADER
+PIMAGE_SECTION_HEADER *
+PLOADED_IMAGE
+PREAD_PROCESS_MEMORY_ROUTINE
+PSTACKFRAME
+PSYMBOL_REGISTERED_CALLBACK
+PSYM_ENUMMODULES_CALLBACK
+PSYM_ENUMSYMBOLS_CALLBACK
+PTRANSLATE_ADDRESS_ROUTINE
+PULONG
+PVOID
+PWIN_CERTIFICATE
+ULONG *
+
+%str
+
+LPCSTR
+LPSTR
+
+%void
+
+VOID
+
+%wstr
+
+LPWSTR
+
+%%imm32.dll
+
+%long
+
+BOOL
+DWORD
+HIMC
+HKL
+HWND
+LONG
+LPARAM
+LRESULT
+UINT
+WPARAM
+
+%ptr
+
+LPCANDIDATEFORM
+LPCANDIDATELIST
+LPCOMPOSITIONFORM
+LPCVOID
+LPDWORD
+LPLOGFONTA
+LPLOGFONTW
+LPPOINT
+LPSTYLEBUFA
+LPSTYLEBUFW
+LPVOID
+REGISTERWORDENUMPROCA
+REGISTERWORDENUMPROCW
+
+%str
+
+LPCSTR
+LPSTR
+
+%wstr
+
+LPCWSTR
+LPWSTR
+
+%%joystick.drv
+
+%long
+
+DWORD
+HDRVR
+LONG
+
+%%kernel32.dll
+
+%long
+
+ATOM
+BOOL
+BYTE
+CALID
+CALTYPE
+CHAR
+COORD
+DWORD
+EXECUTION_STATE
+HANDLE
+HFILE
+HGLOBAL
+HINSTANCE
+HLOCAL
+HMODULE
+HRSRC
+INT
+LANGID
+LCID
+LCTYPE
+LONG
+UINT
+WCHAR
+WORD
+WOW_HANDLE_TYPE
+int
+
+%long --extension
+
+BOOL16
+HGLOBAL16
+HINSTANCE16
+HMODULE16
+HRSRC16
+HTASK16
+INT16
+UINT16
+
+%long --pointer
+
+ULONG_PTR
+
+%longlong
+
+DWORDLONG
+
+%ptr
+
+BOOL *
+BY_HANDLE_FILE_INFORMATION *
+CALINFO_ENUMPROCA
+CHAR_INFO *
+CODEPAGE_ENUMPROCA
+CODEPAGE_ENUMPROCW
+COMPUTER_NAME_FORMAT
+CONTEXT *
+CONTEXT86 *
+CRITICAL_SECTION *
+CURRENCYFMTA *
+CURRENCYFMTW *
+DATEFMT_ENUMPROCA
+DATEFMT_ENUMPROCW
+DWORD *
+ENUMRESLANGPROCA
+ENUMRESLANGPROCW
+ENUMRESNAMEPROCA
+ENUMRESNAMEPROCW
+ENUMRESTYPEPROCA
+ENUMRESTYPEPROCW
+FARPROC
+FARPROC *
+FILETIME *
+FINDEX_INFO_LEVELS
+FINDEX_SEARCH_OPS
+GET_FILEEX_INFO_LEVELS
+HANDLE *
+INPUT_RECORD *
+LARGE_INTEGER *
+LOCALE_ENUMPROCA
+LOCALE_ENUMPROCW
+LONG *
+LPBOOL
+LPBYTE
+LPCHAR_INFO
+LPCOMMCONFIG
+LPCOMMPROP
+LPCOMMTIMEOUTS
+LPCOMSTAT
+LPCONSOLE_CURSOR_INFO
+LPCONSOLE_SCREEN_BUFFER_INFO
+LPCPINFO
+LPCVOID
+LPDCB
+LPDEBUG_EVENT
+LPDWORD
+LPFILETIME
+LPINPUT_RECORD
+LPLDT_ENTRY
+LPMEMORYSTATUS
+LPMEMORY_BASIC_INFORMATION
+LPMODULEENTRY32
+LPOSVERSIONINFOEXA
+LPOSVERSIONINFOEXW
+LPOVERLAPPED
+LPOVERLAPPED *
+LPOVERLAPPED_COMPLETION_ROUTINE
+LPPROCESSENTRY32
+LPPROCESS_HEAP_ENTRY
+LPPROCESS_INFORMATION
+LPPROGRESS_ROUTINE
+LPSECURITY_ATTRIBUTES
+LPSMALL_RECT
+LPSTARTUPINFOA
+LPSTARTUPINFOW
+LPSTR *
+LPSYSTEMTIME
+LPSYSTEM_INFO
+LPSYSTEM_POWER_STATUS
+LPTHREADENTRY32
+LPTHREAD_START_ROUTINE
+LPTIME_ZONE_INFORMATION
+LPTOP_LEVEL_EXCEPTION_FILTER
+LPVOID
+LPVOID *
+LPWORD
+LPWSTR *
+NUMBERFMTA *
+NUMBERFMTW *
+OFSTRUCT *
+OSVERSIONINFOA *
+OSVERSIONINFOW *
+PAPCFUNC
+PBOOL
+PDWORD
+PEXCEPTION_POINTERS
+PHANDLE
+PHANDLER_ROUTINE
+PLARGE_INTEGER
+PLONG
+PTIMERAPCROUTINE
+PULARGE_INTEGER
+SECURITY_ATTRIBUTES *
+SYSLEVEL *
+SYSLEVEL **
+SYSTEMTIME *
+TIMEFMT_ENUMPROCA
+TIMEFMT_ENUMPROCW
+WIN32_FIND_DATAA *
+WIN32_FIND_DATAW *
+WORD *
+struct ThunkDataCommon *
+va_list
+va_list *
+
+%ptr --extension
+
+BUILTIN16_DESCRIPTOR *
+FARPROC16
+SEGPTR
+
+%str
+
+LPCSTR
+LPSTR
+
+%void
+
+VOID
+void
+
+%wstr
+
+LPCWSTR
+LPWSTR
+
+%%lz32.dll
+
+%long
+
+HFILE
+INT
+LONG
+UINT
+
+%ptr
+
+LPOFSTRUCT
+LPVOID
+
+%str
+
+LPCSTR
+LPSTR
+
+%void
+
+void
+
+%wstr
+
+LPCWSTR
+LPWSTR
+
+%%mapi32.dll
+
+%long
+
+FLAGS
+HRESULT
+ULONG
+
+%ptr
+
+LPLHANDLE
+LPVOID
+LPVOID *
+VOID *
+
+%str
+
+LPSTR
+
+%void
+
+VOID
+
+%%mcianim.drv
+
+%long
+
+DWORD
+HDRVR
+LONG
+
+%%mciavi.drv
+
+%long
+
+DWORD
+HDRVR
+LONG
+
+%%mcicda.drv
+
+%long
+
+DWORD
+HDRVR
+LONG
+
+%%mciseq.drv
+
+%long
+
+DWORD
+HDRVR
+LONG
+
+%%mciwave.drv
+
+%long
+
+DWORD
+HDRVR
+LONG
+
+%%midimap.drv
+
+%long
+
+DWORD
+HDRVR
+LONG
+UINT
+
+%%mpr.dll
+
+%long
+
+BOOL
+BYTE
+DWORD
+HANDLE
+HPROVIDER
+HWND
+INT
+UINT
+WORD
+enum NOTIFYTYPE
+
+%ptr
+
+BOOL *
+ENUMPASSWORDPROC
+LPAUTHDLGSTRUCTA
+LPBYTE
+LPCONNECTDLGSTRUCTA
+LPCONNECTDLGSTRUCTW
+LPCSTR *
+LPDISCDLGSTRUCTA
+LPDISCDLGSTRUCTW
+LPDWORD
+LPHANDLE
+LPNETCONNECTINFOSTRUCT
+LPNETINFOSTRUCT
+LPNETRESOURCEA
+LPNETRESOURCEW
+LPSTR *
+LPVOID
+LPWORD
+LPWSTR *
+NOTIFYCALLBACK
+PHPROVIDER
+
+%str
+
+LPCSTR
+LPSTR
+
+%void
+
+VOID
+
+%wstr
+
+LPCWSTR
+LPWSTR
+
+%%msacm.drv
+
+%long
+
+DWORD
+HDRVR
+LONG
+UINT
+WORD
+
+%%msacm32.dll
+
+%long
+
+DWORD
+HACMDRIVER
+HACMDRIVERID
+HACMOBJ
+HACMSTREAM
+HDRVR
+HINSTANCE
+LPARAM
+LRESULT
+MMRESULT
+UINT
+
+%ptr
+
+ACMDRIVERENUMCB
+ACMFILTERENUMCBA
+ACMFILTERENUMCBW
+ACMFILTERTAGENUMCBA
+ACMFILTERTAGENUMCBW
+ACMFORMATENUMCBA
+ACMFORMATENUMCBW
+ACMFORMATTAGENUMCBA
+ACMFORMATTAGENUMCBW
+LPDWORD
+LPVOID
+PACMDRIVERDETAILSA
+PACMDRIVERDETAILSW
+PACMFILTERCHOOSEA
+PACMFILTERCHOOSEW
+PACMFILTERDETAILSA
+PACMFILTERDETAILSW
+PACMFILTERTAGDETAILSA
+PACMFILTERTAGDETAILSW
+PACMFORMATCHOOSEA
+PACMFORMATCHOOSEW
+PACMFORMATDETAILSA
+PACMFORMATDETAILSW
+PACMFORMATTAGDETAILSA
+PACMFORMATTAGDETAILSW
+PACMSTREAMHEADER
+PHACMDRIVER
+PHACMDRIVERID
+PHACMSTREAM
+PWAVEFILTER
+PWAVEFORMATEX
+
+%%msacmmap.dll
+
+%long
+
+DWORD
+HDRVR
+LONG
+UINT
+WORD
+
+%%msg711.acm
+
+%long
+
+DWORD
+HDRVR
+LPARAM
+LRESULT
+UINT
+
+%%msimg32.dll
+
+%long
+
+BOOL
+HDC
+UINT
+ULONG
+int
+
+%ptr
+
+BLENDFUNCTION
+TRIVERTEX *
+void *
+
+%void
+
+void
+
+%%msisys.ocx
+
+%long
+
+HRESULT
+
+%ptr
+
+CLSID *
+IID *
+void **
+
+%%msvcrt.dll
+
+%double
+
+double
+
+%long
+
+DWORD
+INT
+LONG
+MSVCRT_clock_t
+MSVCRT_complex
+MSVCRT_size_t
+MSVCRT_time_t
+WCHAR
+int
+long
+unsigned int
+unsigned long
+
+%longlong
+
+LONGLONG
+ULONGLONG
+
+%ptr
+
+MSVCRT_EXCEPTION_FRAME *
+MSVCRT_FILE *
+MSVCRT_compar_fn_t
+MSVCRT_exception *
+MSVCRT_fpos_t *
+MSVCRT_free_func
+MSVCRT_malloc_func
+MSVCRT_matherr_func
+MSVCRT_new_handler_func
+MSVCRT_sig_handler_func
+MSVCRT_time_t *
+MSVCRT_wint_t
+PCONTEXT
+PEXCEPTION_FRAME
+PEXCEPTION_FRAME *
+PEXCEPTION_POINTERS
+PEXCEPTION_RECORD
+WCHAR *
+WCHAR **
+WCHAR ***
+WORD **
+_HEAPINFO *
+_INITTERMFUN *
+_JUMP_BUFFER *
+__non_rtti_object *
+_onexit_t
+_onexit_t **
+bad_cast *
+bad_typeid *
+char *
+char **
+char ***
+exception *
+int *
+struct MSVCRT_tm *
+struct __EXCEPTION_FRAME *
+struct __EXCEPTION_FRAME **
+struct _diskfree_t *
+struct _finddata_t *
+struct _stat *
+struct _timeb *
+struct _utimbuf *
+struct _wfinddata_t *
+terminate_function
+type_info *
+unexpected_function
+unsigned char *
+unsigned int *
+unsigned long *
+va_list
+void *
+
+%ptr --extension
+
+_beginthread_start_routine_t
+_beginthreadex_start_routine_t
+
+%unknown
+
+MSVCRT_div_t
+MSVCRT_ldiv_t
+
+%void
+
+VOID
+void
+
+%%msvcrt20.dll
+
+%long
+
+int
+
+%ptr
+
+WCHAR **
+char **
+int *
+
+%void
+
+void
+
+%%msvfw32.dll
+
+%long
+
+BOOL
+DWORD
+HANDLE
+HDC
+HDRAWDIB
+HIC
+HINSTANCE
+HPALETTE
+HWND
+INT
+LONG
+LRESULT
+UINT
+WORD
+
+%ptr
+
+FARPROC
+ICINFO *
+LONG *
+LPBITMAPINFO
+LPBITMAPINFOHEADER
+LPDWORD
+LPVOID
+
+%str
+
+LPCSTR
+
+%wstr
+
+LPCWSTR
+
+%%netapi32.dll
+
+%long
+
+BOOL
+
+%ptr
+
+PNCB
+
+%%ntdll.dll
+
+%double
+
+double
+
+%long
+
+ACCESS_MASK
+BOOL
+BOOLEAN
+BYTE
+DWORD
+FILE_INFORMATION_CLASS
+FS_INFORMATION_CLASS
+HANDLE
+HMODULE
+INT
+KEY_INFORMATION_CLASS
+KEY_VALUE_INFORMATION_CLASS
+LONG
+NTSTATUS
+OBJECT_INFORMATION_CLASS
+PROCESSINFOCLASS
+SECTION_INHERIT
+SECURITY_IMPERSONATION_LEVEL
+SECURITY_INFORMATION
+SIZE_T
+SYSTEM_INFORMATION_CLASS
+THREADINFOCLASS
+TIMER_TYPE
+TOKEN_TYPE
+UINT
+ULONG
+WCHAR
+int
+long
+unsigned int
+unsigned long
+
+%long --extension
+
+obj_handle_t
+
+%longlong
+
+LONGLONG
+ULONGLONG
+
+%ptr
+
+CONTEXT *
+CONTEXT86 *
+DWORD *
+EXCEPTION_FRAME *
+EXCEPTION_RECORD *
+FILETIME *
+HANDLE *
+INT *
+LARGE_INTEGER *
+LPBYTE
+LPDWORD
+LPDWORD *
+LPRTL_RWLOCK
+LPVOID
+LPVOID *
+LPWSTR *
+OBJECT_ATTRIBUTES *
+PACE_HEADER
+PACE_HEADER *
+PACL
+PACL *
+PANSI_STRING
+PBOOLEAN
+PCVOID
+PDWORD
+PEXCEPTION_FRAME
+PEXCEPTION_RECORD
+PGENERIC_MAPPING
+PHANDLE
+PIMAGE_NT_HEADERS
+PIO_APC_ROUTINE
+PIO_STATUS_BLOCK
+PLARGE_INTEGER
+PLUID
+POBJDIR_INFORMATION
+POBJECT_ATTRIBUTES
+PPRIVILEGE_SET
+PRTL_HEAP_DEFINITION
+PSECURITY_DESCRIPTOR
+PSECURITY_DESCRIPTOR_CONTROL
+PSID
+PSID *
+PSID_IDENTIFIER_AUTHORITY
+PSTRING
+PTIMERAPCROUTINE
+PTIME_FIELDS
+PTOKEN_PRIVILEGES
+PULONG
+PUNICODE_STRING
+PVOID
+PVOID *
+RTL_CRITICAL_SECTION *
+STRING *
+UINT *
+ULONGLONG *
+UNICODE_STRING *
+VOID *
+struct _TEB *
+union cptable *
+void *
+
+%ptr --extension
+
+WCHAR *
+char *
+enum fd_type *
+int *
+obj_handle_t *
+
+%str
+
+LPCSTR
+LPSTR
+
+%void
+
+VOID
+void
+
+%wstr
+
+LPCWSTR
+LPWSTR
+
+%%odbc32.dll
+
+%long
+
+SQLHANDLE
+SQLHDBC
+SQLHDESC
+SQLHENV
+SQLHSTMT
+SQLHWND
+SQLINTEGER
+SQLRETURN
+SQLSMALLINT
+SQLUINTEGER
+SQLUSMALLINT
+
+%ptr
+
+SQLCHAR *
+SQLHANDLE *
+SQLHDBC *
+SQLHENV *
+SQLHSTMT *
+SQLINTEGER *
+SQLPOINTER
+SQLPOINTER *
+SQLSMALLINT *
+SQLUINTEGER *
+SQLUSMALLINT *
+
+%%ole32.dll
+
+%long
+
+BOOL
+CLIPFORMAT
+DWORD
+HACCEL
+HANDLE
+HGLOBAL
+HINSTANCE
+HMENU
+HOLEMENU
+HRESULT
+HWND
+INT
+UINT
+ULONG
+int
+
+%ptr
+
+CLIPFORMAT *
+CLSID *
+COSERVERINFO *
+DVTARGETDEVICE *
+DWORD *
+FILETIME *
+GUID *
+HGLOBAL *
+ICreateErrorInfo **
+IDataObject *
+IDataObject **
+IDropSource *
+IErrorInfo *
+IErrorInfo **
+ILockBytes *
+IMoniker *
+IMoniker **
+IPersistStream *
+IStorage *
+IStorage **
+IStream *
+IUnknown *
+LPBC
+LPBC *
+LPCLSID
+LPDATAADVISEHOLDER *
+LPDATAOBJECT
+LPDROPTARGET
+LPDWORD
+LPENUMFORMATETC *
+LPENUMOLEVERB *
+LPFORMATETC
+LPGUID
+LPLOCKBYTES *
+LPMALLOC *
+LPMARSHAL *
+LPMESSAGEFILTER
+LPMESSAGEFILTER *
+LPMONIKER
+LPMONIKER *
+LPMSG
+LPOLEADVISEHOLDER *
+LPOLECLIENTSITE
+LPOLEINPLACEACTIVEOBJECT
+LPOLEINPLACEFRAME
+LPOLEINPLACEFRAMEINFO
+LPOLEMENUGROUPWIDTHS
+LPOLEOBJECT
+LPOLESTR *
+LPOLESTREAM
+LPPERSISTSTORAGE
+LPRUNNINGOBJECTTABLE *
+LPSTORAGE
+LPSTREAM
+LPSTREAM *
+LPUNKNOWN
+LPUNKNOWN *
+LPVOID
+LPVOID *
+MULTI_QI *
+OLECHAR *
+REFCLSID
+REFGUID
+REFIID
+SNB
+STGMEDIUM *
+ULONG *
+WORD *
+void *
+void **
+
+%str
+
+LPCOLESTR
+LPOLESTR
+
+%void
+
+VOID
+void
+
+%%oleaut32.dll
+
+%double
+
+CY
+DATE
+double
+
+%long
+
+BOOL
+BYTE
+CHAR
+DISPID
+DWORD
+FLOAT
+HCURSOR
+HICON
+HINSTANCE
+HPALETTE
+HRESULT
+HWND
+INT
+LCID
+LONG
+OLE_COLOR
+REGKIND
+SYSKIND
+UINT
+ULONG
+USHORT
+VARIANT_BOOL
+VARTYPE
+WORD
+int
+short
+signed char
+unsigned int
+
+%ptr
+
+BSTR *
+BYTE *
+CHAR *
+COLORREF *
+CY *
+DATE *
+DISPID *
+DISPPARAMS *
+EXCEPINFO *
+FLOAT *
+ICreateTypeLib **
+INTERFACEDATA *
+ITypeInfo *
+ITypeInfo **
+ITypeLib *
+ITypeLib **
+IUnknown *
+IUnknown **
+LONG *
+LPBSTR
+LPBYTE
+LPCLSID
+LPDWORD
+LPFONTDESC
+LPOCPFIPARAMS
+LPPICTDESC
+LPSTREAM
+LPSYSTEMTIME
+LPUNKNOWN
+LPUNKNOWN *
+LPVARIANT
+LPVOID
+LPVOID *
+NUMPARSE *
+OLECHAR *
+OLECHAR **
+REFCLSID
+REFGUID
+REFIID
+SAFEARRAY *
+SAFEARRAY **
+SAFEARRAYBOUND *
+UDATE *
+UINT *
+ULONG *
+USHORT *
+VARIANT *
+VARIANTARG *
+VARIANT_BOOL *
+VARTYPE *
+VOID *
+double *
+int *
+short *
+void *
+void **
+
+%str
+
+LPCOLESTR
+LPCSTR
+LPOLESTR
+
+%void
+
+void
+
+%wstr
+
+BSTR
+
+%%olecli32.dll
+
+%long
+
+BOOL
+HDC
+LHCLIENTDOC
+LONG
+OLECLIPFORMAT
+OLEOPT_RENDER
+OLESTATUS
+
+%ptr
+
+LHCLIENTDOC *
+LONG *
+LPOLECLIENT
+LPOLEOBJECT
+LPOLEOBJECT *
+
+%str
+
+LPCSTR
+
+%%oledlg.dll
+
+%long
+
+BOOL
+HMENU
+HWND
+INT
+UINT
+WORD
+
+%ptr
+
+HMENU *
+LPOLEOBJECT
+LPOLEUIBUSYA
+LPOLEUIBUSYW
+LPOLEUICHANGEICONA
+LPOLEUICHANGEICONW
+LPOLEUICHANGESOURCEA
+LPOLEUICHANGESOURCEW
+LPOLEUICONVERTA
+LPOLEUICONVERTW
+LPOLEUIEDITLINKSA
+LPOLEUIEDITLINKSW
+LPOLEUIINSERTOBJECTA
+LPOLEUIINSERTOBJECTW
+LPOLEUILINKCONTAINERA
+LPOLEUILINKCONTAINERW
+LPOLEUIOBJECTPROPSA
+LPOLEUIOBJECTPROPSW
+LPOLEUIPASTESPECIALA
+LPOLEUIPASTESPECIALW
+REFCLSID
+
+%str
+
+LPCSTR
+LPSTR
+
+%wstr
+
+LPCWSTR
+LPWSTR
+
+%%olepro32.dll
+
+%long
+
+HRESULT
+
+%ptr
+
+LPVOID *
+REFCLSID
+REFIID
+
+%%olesvr32.dll
+
+%long
+
+HINSTANCE
+LHSERVER
+LHSERVERDOC
+OLESTATUS
+OLE_SERVER_USE
+
+%ptr
+
+BOOL *
+LHSERVER *
+LHSERVERDOC *
+LPOLESERVER
+LPOLESERVERDOC
+
+%str
+
+LPCSTR
+
+%%opengl32.dll
+
+%double
+
+GLclampd
+GLdouble
+
+%long
+
+BOOL
+DWORD
+FLOAT
+GLbitfield
+GLboolean
+GLbyte
+GLclampf
+GLenum
+GLfloat
+GLint
+GLshort
+GLsizei
+GLubyte
+GLuint
+GLushort
+HDC
+HGLRC
+UINT
+int
+
+%ptr
+
+COLORREF *
+GLboolean *
+GLbyte *
+GLclampf *
+GLdouble *
+GLfloat *
+GLint *
+GLshort *
+GLstring
+GLubyte *
+GLuint *
+GLushort *
+GLvoid *
+GLvoid **
+LPGLYPHMETRICSFLOAT
+LPLAYERPLANEDESCRIPTOR
+void *
+
+%str
+
+LPCSTR
+
+%void
+
+void
+
+%%psapi.dll
+
+%long
+
+BOOL
+DWORD
+HANDLE
+HMODULE
+
+%ptr
+
+DWORD *
+HMODULE *
+LPDWORD
+LPMODULEINFO
+LPVOID
+LPVOID *
+PPROCESS_MEMORY_COUNTERS
+PPSAPI_WS_WATCH_INFORMATION
+
+%str
+
+LPSTR
+
+%wstr
+
+LPWSTR
+
+%%rasapi32.dll
+
+%long
+
+BOOL
+DWORD
+HRASCONN
+
+%ptr
+
+LPBOOL
+LPCSTR *
+LPCWSTR *
+LPDWORD
+LPRASAUTODIALENTRYA
+LPRASAUTODIALENTRYW
+LPRASCONNA
+LPRASDEVINFOA
+LPRASDEVINFOW
+LPRASDIALPARAMSA
+LPRASENTRYNAMEA
+LPVOID
+
+%str
+
+LPCSTR
+
+%wstr
+
+LPCWSTR
+
+%%riched32.dll
+
+%long
+
+HRESULT
+
+%ptr
+
+DLLVERSIONINFO *
+
+%%rpcrt4.dll
+
+%long
+
+HMODULE
+HRESULT
+RPC_IF_HANDLE
+RPC_STATUS
+UINT
+ULONG
+
+%ptr
+
+CLSID *
+CStdPSFactoryBuffer *
+LPSTR *
+LPVOID
+LPVOID *
+LPWSTR *
+PRPC_POLICY
+ProxyFileInfo **
+REFCLSID
+REFIID
+RPC_AUTH_KEY_RETRIEVAL_FN
+RPC_BINDING_HANDLE *
+RPC_IF_CALLBACK_FN *
+RPC_MGR_EPV *
+RPC_STATUS *
+UUID *
+unsigned char *
+unsigned char **
+unsigned short
+unsigned short *
+
+%str
+
+LPSTR
+
+%wstr
+
+LPWSTR
+
+%%serialui.dll
+
+%long
+
+BOOL
+DWORD
+HWND
+LPARAM
+
+%ptr
+
+LPCOMMCONFIG
+LPDEVICE_INFO
+LPDWORD
+LPFNADDPROPSHEETPAGE
+
+%str
+
+LPCSTR
+
+%%setupapi.dll
+
+%long
+
+BOOL
+DWORD
+HDEVINFO
+HINF
+HKEY
+HSPFILEQ
+HWND
+LONG
+UINT
+
+%long --ptr
+
+UINT_PTR
+
+%ptr
+
+BYTE *
+DWORD *
+GUID *
+INFCONTEXT *
+INT *
+PBYTE
+PDWORD
+PSP_DEVICE_INTERFACE_DATA
+PSP_DEVICE_INTERFACE_DETAIL_DATAA
+PSP_DEVICE_INTERFACE_DETAIL_DATAW
+PSP_DEVINFO_DATA
+PSP_FILE_CALLBACK_A
+PSP_FILE_CALLBACK_W
+PSP_FILE_COPY_PARAMS_A
+PSP_FILE_COPY_PARAMS_W
+PSTR
+PUINT
+PVOID
+UINT *
+
+%str
+
+LPCSTR
+PCSTR
+PCWSTR
+PWSTR
+
+%void
+
+void
+
+%%shdocvw.dll
+
+%long
+
+BOOL
+HRESULT
+
+%ptr
+
+DLLVERSIONINFO *
+LPVOID *
+REFCLSID
+REFIID
+
+%wstr
+
+LPCWSTR
+
+%%shell32.dll
+
+%long
+
+BOOL
+COLORREF
+DWORD
+HANDLE
+HBITMAP
+HDROP
+HGLOBAL
+HICON
+HIMAGELIST
+HINSTANCE
+HKEY
+HMENU
+HMODULE
+HRESULT
+HWND
+INT
+LONG
+LRESULT
+UINT
+ULONG
+WORD
+WPARAM
+int
+
+%ptr
+
+CLSID *
+DLLVERSIONINFO *
+DWORD *
+FARPROC
+HICON *
+HIMAGELIST *
+HWND *
+IShellFolder **
+IStream *
+ITEMIDLIST *
+LPBROWSEINFOA
+LPBYTE
+LPCITEMIDLIST
+LPCITEMIDLIST *
+LPCNOTIFYREGISTER
+LPCRECT
+LPCSHELLFOLDERVIEWINFO
+LPCVOID
+LPCVOID *
+LPDATAOBJECT
+LPDATAOBJECT *
+LPDRAWITEMSTRUCT
+LPDROPSOURCE
+LPDROPTARGET
+LPDWORD
+LPFNCREATEINSTANCE
+LPFNFMCALLBACK
+LPHKEY
+LPITEMIDLIST
+LPITEMIDLIST *
+LPMALLOC *
+LPMEASUREITEMSTRUCT
+LPNOTIFYREGISTER
+LPPOINT
+LPSECURITY_ATTRIBUTES
+LPSHELLEXECUTEINFOA
+LPSHELLEXECUTEINFOW
+LPSHELLFLAGSTATE
+LPSHELLFOLDER
+LPSHELLVIEW *
+LPSHFILEOPSTRUCTA
+LPSHFILEOPSTRUCTW
+LPSTRRET
+LPTPMPARAMS
+LPUNKNOWN
+LPUNKNOWN *
+LPVOID
+LPVOID *
+LPWORD
+LPWSTR *
+PAPPBARDATA
+PNOTIFYICONDATAA
+PNOTIFYICONDATAW
+POINT *
+REFCLSID
+REFIID
+SHFILEINFOA *
+SHFILEINFOW *
+UINT *
+int *
+
+%str
+
+LPCSTR
+LPSTR
+
+%void
+
+VOID
+void
+
+%wstr
+
+LPCWSTR
+LPWSTR
+
+%%shlwapi.dll
+
+%long
+
+BOOL
+COLORREF
+DWORD
+HANDLE
+HDC
+HDROP
+HICON
+HINSTANCE
+HKEY
+HMENU
+HMODULE
+HPALETTE
+HRESULT
+HSHARED
+HUSKEY
+HWND
+INT
+LANGID
+LONG
+LPARAM
+LRESULT
+REGSAM
+SHREGENUM_FLAGS
+UCHAR
+UINT
+ULONG
+URLIS
+WCHAR
+WORD
+WPARAM
+int
+
+%ptr
+
+BOOL *
+CLSID *
+DLLVERSIONINFO *
+HICON *
+IFACE_INDEX_TBL *
+IID *
+IStream *
+IStream **
+ITEMIDLIST *
+IUnknown *
+IUnknown **
+LPBROWSEINFOW
+LPCITEMIDLIST
+LPCLSID
+LPCSHLWAPI_CLIST
+LPCSTR *
+LPCVOID
+LPCWSTR *
+LPDWORD
+LPDWORD *
+LPHWND
+LPINT
+LPITEMIDLIST
+LPOPENFILENAMEW
+LPPAGESETUPDLGW
+LPPRINTDLGW
+LPSHELLEXECUTEINFOW
+LPSHFILEOPSTRUCTW
+LPSHLWAPI_CLIST
+LPSHLWAPI_CLIST *
+LPSTRRET
+LPUNKNOWN *
+LPVOID
+LPVOID *
+LPWORD
+PACL
+PHUSKEY
+PLONG
+PSECURITY_DESCRIPTOR
+PVOID
+REFGUID
+REFIID
+SHFILEINFOW *
+UINT *
+ULARGE_INTEGER *
+WNDCLASSA *
+unsigned char *
+va_list
+
+%ptr --extension
+
+UNKNOWN_SHLWAPI_1 *
+UNKNOWN_SHLWAPI_2 *
+WNDCLASSW *
+
+%str
+
+LPCSTR
+LPSTR
+
+%void
+
+VOID
+void
+
+%wstr
+
+LPCWSTR
+LPWSTR
+
+%%sti.dll
+
+%long
+
+DWORD
+HINSTANCE
+HRESULT
+
+%ptr
+
+LPVOID
+
+%%tapi32.dll
+
+%long
+
+DWORD
+HCALL
+HINSTANCE
+HLINE
+HLINEAPP
+HPHONE
+HPHONEAPP
+HWND
+
+%ptr
+
+HICON *
+LINECALLBACK
+LPDWORD
+LPHCALL
+LPHLINE
+LPHLINEAPP
+LPHPHONE
+LPHPHONEAPP
+LPLINEADDRESSCAPS
+LPLINEADDRESSSTATUS
+LPLINECALLINFO
+LPLINECALLLIST
+LPLINECALLPARAMS
+LPLINECALLSTATUS
+LPLINECOUNTRYLIST
+LPLINEDEVCAPS
+LPLINEDEVSTATUS
+LPLINEDIALPARAMS
+LPLINEEXTENSIONID
+LPLINEFORWARDLIST
+LPLINEGENERATETONE
+LPLINEMEDIACONTROLCALLSTATE
+LPLINEMEDIACONTROLDIGIT
+LPLINEMEDIACONTROLMEDIA
+LPLINEMEDIACONTROLTONE
+LPLINEMONITORTONE
+LPLINEPROVIDERLIST
+LPLINETRANSLATECAPS
+LPLINETRANSLATEOUTPUT
+LPPHONEBUTTONINFO
+LPPHONECAPS
+LPPHONEEXTENSIONID
+LPPHONESTATUS
+LPVARSTRING
+LPVOID
+PHONECALLBACK
+
+%str
+
+LPCSTR
+LPSTR
+
+%%ttydrv.dll
+
+%long
+
+BOOL
+CHAR
+COLORREF
+DWORD
+HBITMAP
+HDC
+HFONT
+HRGN
+HWND
+INT
+INT16
+LONG
+UINT
+UINT16
+WORD
+int
+
+%ptr
+
+BITMAPINFO *
+CREATESTRUCTA *
+DC *
+DEVMODEA *
+DWORD *
+INT *
+LPBYTE
+LPCVOID
+LPINT
+LPPALETTEENTRY
+LPPOINT
+LPSIZE
+LPTEXTMETRICW
+POINT *
+RECT *
+TTYDRV_PDEVICE *
+TTYDRV_PDEVICE **
+WINDOWPOS *
+struct tagCURSORICONINFO *
+void *
+
+%str
+
+LPCSTR
+LPSTR
+
+%void
+
+void
+
+%wstr
+
+LPCWSTR
+LPWSTR
+
+%%twain_32.dll
+
+%long
+
+TW_UINT16
+TW_UINT32
+
+%ptr
+
+TW_MEMREF
+pTW_IDENTITY
+
+%%urlmon.dll
+
+%long
+
+BOOL
+DWORD
+HRESULT
+long
+
+%ptr
+
+DWORD *
+IBindCtx *
+IBindCtx **
+IBindStatusCallback *
+IBindStatusCallback **
+IEnumFORMATETC *
+IMoniker *
+IMoniker **
+LPVOID
+LPVOID *
+REFCLSID
+REFIID
+
+%str
+
+LPCSTR
+
+%wstr
+
+LPCWSTR
+
+%%user32.dll
+
+%long
+
+ATOM
+BOOL
+BYTE
+CHAR
+COLORREF
+DWORD
+HACCEL
+HANDLE
+HBITMAP
+HBRUSH
+HCONV
+HCONVLIST
+HCURSOR
+HDC
+HDDEDATA
+HDESK
+HDEVNOTIFY
+HDWP
+HFONT
+HHOOK
+HICON
+HINSTANCE
+HKL
+HMENU
+HMODULE
+HMONITOR
+HRESULT
+HRGN
+HSZ
+HTASK
+HWINEVENTHOOK
+HWINSTA
+HWND
+INT
+LONG
+LPARAM
+LRESULT
+SHORT
+UINT
+ULONG_PTR
+WCHAR
+WORD
+WPARAM
+int
+
+%long --extension
+
+BOOL16
+HANDLE16
+HDRVR16
+HGLOBAL16
+HINSTANCE16
+HMODULE16
+HTASK16
+HWND16
+INT16
+UINT16
+WPARAM16
+
+%longlong
+
+POINT
+
+%ptr
+
+BOOL *
+COLORREF *
+DLGPROC
+DRAWSTATEPROC
+DWORD *
+GRAYSTRINGPROC
+HANDLE *
+HBRUSH *
+HICON *
+HKL *
+HOOKPROC
+HWND *
+INT *
+LPACCEL
+LPBYTE
+LPCHARSETINFO
+LPCMENUINFO
+LPCONVCONTEXT
+LPCONVINFO
+LPCVOID
+LPDEVMODEA
+LPDEVMODEW
+LPDISPLAY_DEVICEA
+LPDISPLAY_DEVICEW
+LPDRAWTEXTPARAMS
+LPDWORD
+LPINPUT
+LPINT
+LPMENUINFO
+LPMENUITEMINFOA
+LPMENUITEMINFOW
+LPMONITORINFO
+LPMSG
+LPMSGBOXPARAMSA
+LPMSGBOXPARAMSW
+LPPOINT
+LPRECT
+LPSCROLLINFO
+LPSECURITY_ATTRIBUTES
+LPTPMPARAMS
+LPVOID
+LPWORD
+MENUITEMINFOA *
+MENUITEMINFOW *
+MONITORENUMPROC
+MSG *
+PAINTSTRUCT *
+PFNCALLBACK
+PICONINFO
+POINT *
+PROPENUMPROCA
+PROPENUMPROCEXA
+PROPENUMPROCEXW
+PROPENUMPROCW
+PSECURITY_DESCRIPTOR
+PSECURITY_INFORMATION
+PSECURITY_QUALITY_OF_SERVICE
+PUINT
+PVOID
+PWINDOWINFO
+RECT *
+SCROLLINFO *
+SECURITY_QUALITY_OF_SERVICE *
+SENDASYNCPROC
+TIMERPROC
+TRACKMOUSEEVENT *
+UINT *
+WINDOWPLACEMENT *
+WINEVENTPROC
+WNDCLASSA *
+WNDCLASSEXA *
+WNDCLASSEXW *
+WNDCLASSW *
+WNDENUMPROC
+WNDPROC
+va_list
+
+%ptr --extension
+
+DLGPROC16
+HOOKPROC16
+WNDPROC16
+
+%str
+
+LPCSTR
+LPSTR
+
+%void
+
+VOID
+void
+
+%wstr
+
+LPCWSTR
+LPWSTR
+
+%%version.dll
+
+%long
+
+BOOL
+DWORD
+UINT
+
+%ptr
+
+LPDWORD
+LPVOID
+LPVOID *
+UINT *
+
+%str
+
+LPCSTR
+LPSTR
+
+%wstr
+
+LPCWSTR
+LPWSTR
+
+%%w32skrnl.dll
+
+%long
+
+HTASK16
+
+%str
+
+LPSTR
+
+%%winealsa.drv
+
+%long
+
+DWORD
+HDRVR
+LONG
+UINT
+WORD
+
+%%winearts.drv
+
+%long
+
+DWORD
+HDRVR
+LONG
+UINT
+WORD
+
+%%winedos.dll
+
+%long
+
+BOOL
+DWORD
+HANDLE
+UINT
+int
+
+%ptr
+
+DWORD *
+
+%str
+
+LPCSTR
+
+%void
+
+void
+
+%%winemp3.acm
+
+%long
+
+DWORD
+HDRVR
+LPARAM
+LRESULT
+UINT
+
+%%wineoss.drv
+
+%long
+
+DWORD
+HDRVR
+LONG
+UINT
+WORD
+
+%%wineps.dll
+
+%long
+
+BOOL
+COLORREF
+DWORD
+HBITMAP
+HBRUSH
+HDC
+HFONT
+HPEN
+HRGN
+HWND
+INT
+LPARAM
+UINT
+WORD
+
+%ptr
+
+BITMAPINFO *
+DC *
+DEVICEFONTENUMPROC
+DEVMODEA *
+DOCINFOA *
+DWORD *
+INT *
+LPCVOID
+LPDEVMODEA
+LPINT
+LPLOGFONTW
+LPSIZE
+LPVOID
+POINT *
+PSDRV_PDEVICE *
+PSDRV_PDEVICE **
+RECT *
+TEXTMETRICW *
+void *
+
+%str
+
+LPCSTR
+LPSTR
+
+%void
+
+VOID
+
+%wstr
+
+LPCWSTR
+
+%%wininet.dll
+
+%long
+
+BOOL
+DWORD
+FILETIME
+HANDLE
+HINTERNET
+HRESULT
+INTERNET_PORT
+
+%ptr
+
+HANDLE *
+INTERNET_STATUS_CALLBACK
+LPBYTE
+LPCSTR *
+LPCVOID
+LPDWORD
+LPINTERNET_BUFFERSA
+LPINTERNET_CACHE_ENTRY_INFOA
+LPINTERNET_CACHE_ENTRY_INFOW
+LPURL_COMPONENTSA
+LPVOID
+LPWIN32_FIND_DATAA
+
+%str
+
+LPCSTR
+LPSTR
+
+%wstr
+
+LPCWSTR
+
+%%winmm.dll
+
+%long
+
+BOOL
+DWORD
+FOURCC
+HDRVR
+HINSTANCE
+HMIDIIN
+HMIDIOUT
+HMIDISTRM
+HMIXER
+HMIXEROBJ
+HMMIO
+HMODULE
+HTASK
+HWAVEIN
+HWAVEOUT
+HWND
+INT
+LONG
+LPARAM
+LRESULT
+MMRESULT
+UINT
+
+%long --forbidden
+
+HMMIO16
+UINT16
+
+%ptr
+
+DWORD *
+HMIDIIN *
+HMIDIOUT *
+HMIDISTRM *
+HPCSTR
+HPSTR
+HWAVEIN *
+HWAVEOUT *
+LPAUXCAPSA
+LPAUXCAPSW
+LPBYTE
+LPDWORD
+LPHMIXER
+LPJOYCAPSA
+LPJOYCAPSW
+LPJOYINFO
+LPJOYINFOEX
+LPMIDIHDR
+LPMIDIINCAPSA
+LPMIDIINCAPSW
+LPMIDIOUTCAPSA
+LPMIDIOUTCAPSW
+LPMIXERCAPSA
+LPMIXERCAPSW
+LPMIXERCONTROLDETAILS
+LPMIXERLINEA
+LPMIXERLINECONTROLSA
+LPMIXERLINECONTROLSW
+LPMIXERLINEW
+LPMMCKINFO
+LPMMIOPROC
+LPMMIOPROC16
+LPMMTIME
+LPTIMECALLBACK
+LPTIMECAPS
+LPUINT
+LPWAVEFORMATEX
+LPWAVEHDR
+LPWAVEINCAPSA
+LPWAVEINCAPSW
+LPWAVEOUTCAPSA
+LPWAVEOUTCAPSW
+MIDIHDR *
+MMCKINFO *
+MMIOINFO *
+UINT *
+WAVEHDR *
+WORD *
+YIELDPROC
+
+%str
+
+LPCSTR
+LPSTR
+
+%wstr
+
+LPCWSTR
+LPWSTR
+
+%%winspool.drv
+
+%long
+
+BOOL
+DWORD
+HANDLE
+HWND
+INT
+LONG
+WORD
+
+%ptr
+
+DEVMODEW *
+HANDLE *
+LPBYTE
+LPDEVMODEA
+LPDEVMODEW
+LPDWORD
+LPPRINTER_DEFAULTSA
+LPPRINTER_DEFAULTSW
+LPVOID
+
+%str
+
+LPCSTR
+LPSTR
+
+%wstr
+
+LPCWSTR
+LPWSTR
+
+%%wintrust.dll
+
+%long
+
+HWND
+LONG
+
+%ptr
+
+GUID *
+LPVOID
+
+%%wnaspi32.dll
+
+%long
+
+BOOL
+DWORD
+
+%ptr
+
+LPDWORD
+LPSRB
+PASPI32BUFF
+
+%%ws2_32.dll
+
+%long
+
+BOOL
+DWORD
+GROUP
+HANDLE
+HWND
+INT
+LONG
+SOCKET
+UINT
+WORD
+WSAEVENT
+int
+long
+u_long
+u_short
+
+%ptr
+
+FARPROC
+INT *
+LPCONDITIONPROC
+LPDWORD
+LPGUID
+LPINT
+LPQOS
+LPVOID
+LPWPUPOSTMESSAGE
+LPWSABUF
+LPWSADATA
+LPWSANETWORKEVENTS
+LPWSAOVERLAPPED
+LPWSAOVERLAPPED_COMPLETION_ROUTINE
+LPWSAPROTOCOL_INFOA
+LPWSAPROTOCOL_INFOW
+WS_fd_set *
+char *
+int *
+struct WS_hostent *
+struct WS_protoent *
+struct WS_servent *
+struct WS_sockaddr *
+struct WS_timeval *
+u_long *
+
+%str
+
+LPCSTR
+LPSTR
+
+%unknown
+
+struct WS_in_addr
+
+%void
+
+void
+
+%wstr
+
+LPCWSTR
+
+%%wsock32.dll
+
+%long
+
+DWORD
+INT
+SOCKET
+UINT
+
+%ptr
+
+INT *
+LPDWORD
+LPINT
+LPVOID
+char *
+struct netent *
+
+%str
+
+LPCSTR
+
+%void
+
+void
+
+%%x11drv.dll
+
+%long
+
+BOOL
+CHAR
+COLORREF
+DWORD
+HANDLE
+HBITMAP
+HBRUSH
+HDC
+HFONT
+HICON
+HPALETTE
+HPEN
+HRGN
+HWND
+INT
+LONG
+LPARAM
+UINT
+WORD
+WPARAM
+int
+
+%ptr
+
+BITMAPINFO *
+BYTE *
+CREATESTRUCTA *
+CURSORICONINFO *
+DC *
+DEVICEFONTENUMPROC
+DEVMODEA *
+DWORD *
+HANDLE *
+INT *
+LPBYTE
+LPCVOID
+LPINT
+LPLOGFONTW
+LPPALETTEENTRY
+LPPOINT
+LPRECT
+LPSIZE
+LPVOID
+LPVOID *
+PIXELFORMATDESCRIPTOR *
+POINT *
+RECT *
+RGBQUAD *
+TEXTMETRICW *
+WINDOWPOS *
+X11DRV_PDEVICE *
+X11DRV_PDEVICE **
+void *
+
+%str
+
+LPCSTR
+LPSTR
+
+%void
+
+void
+
+%wstr
+
+LPCWSTR
+LPWSTR
diff --git a/tools/winapi/winapi.pm b/tools/winapi/winapi.pm
new file mode 100644
index 0000000..4e93286
--- /dev/null
+++ b/tools/winapi/winapi.pm
@@ -0,0 +1,956 @@
+#
+# Copyright 1999, 2000, 2001 Patrik Stridvall
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+
+package winapi;
+
+use strict;
+
+use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
+require Exporter;
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw($win16api $win32api @winapis);
+
+use vars qw($win16api $win32api @winapis);
+
+use config qw($current_dir $wine_dir $winapi_dir);
+use modules qw($modules);
+use options qw($options);
+use output qw($output);
+
+my @spec_files16 = $modules->allowed_spec_files16;
+$win16api = 'winapi'->new("win16", \@spec_files16);
+
+my @spec_files32 = $modules->allowed_spec_files32;
+$win32api = 'winapi'->new("win32", \@spec_files32);
+
+@winapis = ($win16api, $win32api);
+
+for my $internal_name ($win32api->all_internal_functions) {
+ my $module16 = $win16api->function_internal_module($internal_name);
+ my $module32 = $win16api->function_internal_module($internal_name);
+ if(defined($module16) &&
+ !$win16api->is_function_stub_in_module($module16, $internal_name) &&
+ !$win32api->is_function_stub_in_module($module32, $internal_name))
+ {
+ $win16api->found_shared_internal_function($internal_name);
+ $win32api->found_shared_internal_function($internal_name);
+ }
+}
+
+sub new {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = {};
+ bless ($self, $class);
+
+ my $name = \${$self->{NAME}};
+ my $function_forward = \%{$self->{FUNCTION_FORWARD}};
+ my $function_internal_name = \%{$self->{FUNCTION_INTERNAL_NAME}};
+ my $function_module = \%{$self->{FUNCTION_MODULE}};
+
+ $$name = shift;
+ my $refspec_files = shift;
+
+ foreach my $file (@$refspec_files) {
+ $self->parse_spec_file("$wine_dir/$file");
+ }
+
+ $self->parse_api_file("$$name.api");
+
+ foreach my $forward_name (sort(keys(%$function_forward))) {
+ $$function_forward{$forward_name} =~ /^(\S*):(\S*)\.(\S*)$/;
+ (my $from_module, my $to_module, my $external_name) = ($1, $2, $3);
+ my $internal_name = $$function_internal_name{$external_name};
+ if(defined($internal_name)) {
+ $$function_module{$internal_name} .= " & $from_module";
+ }
+ }
+
+ return $self;
+}
+
+sub win16api {
+ return $win16api;
+}
+
+sub win32api {
+ return $win32api;
+}
+
+sub parse_api_file {
+ my $self = shift;
+
+ my $allowed_kind = \%{$self->{ALLOWED_KIND}};
+ my $allowed_modules = \%{$self->{ALLOWED_MODULES}};
+ my $allowed_modules_limited = \%{$self->{ALLOWED_MODULES_LIMITED}};
+ my $allowed_modules_unlimited = \%{$self->{ALLOWED_MODULES_UNLIMITED}};
+ my $translate_argument = \%{$self->{TRANSLATE_ARGUMENT}};
+ my $type_format = \%{$self->{TYPE_FORMAT}};
+
+ my $file = shift;
+
+ my $module;
+ my $kind;
+ my $format;
+ my $extension = 0;
+ my $forbidden = 0;
+
+ $output->lazy_progress("$file");
+
+ open(IN, "< $winapi_dir/$file") || die "$winapi_dir/$file: $!\n";
+ $/ = "\n";
+ while(<IN>) {
+ s/^\s*?(.*?)\s*$/$1/; # remove whitespace at begin and end of line
+ s/^(.*?)\s*#.*$/$1/; # remove comments
+ /^$/ && next; # skip empty lines
+
+ if(/^%%(\S+)$/) {
+ $module = $1;
+ $module =~ s/\.dll$//; # FIXME: Kludge
+ } elsif(!$modules->is_allowed_module($module)) {
+ # Nothing
+ } elsif(s/^%(\S+)\s*//) {
+ $kind = $1;
+ $format = undef;
+ $forbidden = 0;
+ $extension = 0;
+
+ $$allowed_kind{$kind} = 1;
+ if(/^--forbidden/) {
+ $forbidden = 1;
+ } elsif(/^--extension/) {
+ $extension = 1;
+ } elsif(/^--format=(\".*?\"|\S*)/) {
+ $format = $1;
+ $format =~ s/^\"(.*?)\"$/$1/;
+ }
+
+ if(!defined($format)) {
+ if($kind eq "long") {
+ $format = "%d|%u|%x|%X|";
+ $format .= "%hd|%hu|%hx|%hX|";
+ $format .= "%ld|%lu|%lx|%lX|";
+ $format .= "%04x|%04X|0x%04x|0x%04X|";
+ $format .= "%08x|%08X|0x%08x|0x%08X|";
+ $format .= "%08lx|%08lX|0x%08lx|0x%08lX";
+ } elsif($kind eq "longlong") {
+ $format = "%lld";
+ } elsif($kind eq "ptr") {
+ $format = "%p";
+ } elsif($kind eq "segptr") {
+ $format = "%p";
+ } elsif($kind eq "str") {
+ $format = "%p|%s";
+ } elsif($kind eq "wstr") {
+ $format = "%p|%s";
+ } elsif($kind eq "word") {
+ $format = "%d|%u|%x|%X|";
+ $format .= "%hd|%hu|%hx|%hX|";
+ $format .= "%04x|%04X|0x%04x|0x%04X";
+ } else {
+ $format = "<unknown>";
+ }
+ }
+ } elsif(defined($kind)) {
+ my $type = $_;
+ if(!$forbidden) {
+ if(defined($module)) {
+ if($$allowed_modules_unlimited{$type}) {
+ $output->write("$file: type ($type) already specificed as an unlimited type\n");
+ } elsif(!$$allowed_modules{$type}{$module}) {
+ $$allowed_modules{$type}{$module} = 1;
+ $$allowed_modules_limited{$type} = 1;
+ } else {
+ $output->write("$file: type ($type) already specificed\n");
+ }
+ } else {
+ $$allowed_modules_unlimited{$type} = 1;
+ }
+ } else {
+ $$allowed_modules_limited{$type} = 1;
+ }
+ if(defined($$translate_argument{$type}) && $$translate_argument{$type} ne $kind) {
+ $output->write("$file: type ($type) respecified as different kind ($kind != $$translate_argument{$type})\n");
+ } else {
+ $$translate_argument{$type} = $kind;
+ }
+
+ $$type_format{$module}{$type} = $format;
+ } else {
+ $output->write("$file: file must begin with %<type> statement\n");
+ exit 1;
+ }
+ }
+ close(IN);
+}
+
+sub parse_spec_file {
+ my $self = shift;
+
+ my $function_internal_arguments = \%{$self->{FUNCTION_INTERNAL_ARGUMENTS}};
+ my $function_external_arguments = \%{$self->{FUNCTION_EXTERNAL_ARGUMENTS}};
+ my $function_internal_ordinal = \%{$self->{FUNCTION_INTERNAL_ORDINAL}};
+ my $function_external_ordinal = \%{$self->{FUNCTION_EXTERNAL_ORDINAL}};
+ my $function_internal_calling_convention = \%{$self->{FUNCTION_INTERNAL_CALLING_CONVENTION}};
+ my $function_external_calling_convention = \%{$self->{FUNCTION_EXTERNAL_CALLING_CONVENTION}};
+ my $function_internal_name = \%{$self->{FUNCTION_INTERNAL_NAME}};
+ my $function_external_name = \%{$self->{FUNCTION_EXTERNAL_NAME}};
+ my $function_stub = \%{$self->{FUNCTION_STUB}};
+ my $function_forward = \%{$self->{FUNCTION_FORWARD}};
+ my $function_internal_module = \%{$self->{FUNCTION_INTERNAL_MODULE}};
+ my $function_external_module = \%{$self->{FUNCTION_EXTERNAL_MODULE}};
+ my $modules = \%{$self->{MODULES}};
+ my $module_files = \%{$self->{MODULE_FILES}};
+
+ my $file = shift;
+ $file =~ s%^\./%%;
+
+ my %ordinals;
+ my $module;
+ my $module_file;
+
+ $output->lazy_progress("$file");
+
+ $module = $file;
+ $module =~ s/^.*?([^\/]*)\.spec$/$1/;
+
+ open(IN, "< $file") || die "$file: $!\n";
+ $/ = "\n";
+ my $header = 1;
+ my $lookahead = 0;
+ while($lookahead || defined($_ = <IN>)) {
+ $lookahead = 0;
+ s/^\s*(.*?)\s*$/$1/;
+ s/^(.*?)\s*#.*$/$1/;
+ /^$/ && next;
+
+ if($header) {
+ if(/^name\s*(\S*)/) { $module = $1; }
+ if(/^file\s*(\S*)/) { $module_file = $1; }
+ if(/^\d+|@/) { $header = 0; $lookahead = 1; }
+ next;
+ }
+
+ my $ordinal;
+ if(/^(\d+|@)\s+
+ (pascal|pascal16|stdcall|cdecl|varargs)\s+
+ ((?:(?:-noimport|-norelay|-i386|-ret64|-register|-interrupt)\s+)*)(\S+)\s*\(\s*(.*?)\s*\)\s*(\S+)$/x)
+ {
+ my $calling_convention = $2;
+ my $flags = $3;
+ my $external_name = $4;
+ my $arguments = $5;
+ my $internal_name = $6;
+
+ $ordinal = $1;
+
+ $flags =~ s/\s+/ /g;
+
+ if($flags =~ /(?:-register|-interrupt)/) {
+ if($arguments) { $arguments .= " "; }
+ $arguments .= "ptr";
+ }
+
+ if(!$$function_internal_name{$external_name}) {
+ $$function_internal_name{$external_name} = $internal_name;
+ } else {
+ $$function_internal_name{$external_name} .= " & $internal_name";
+ }
+ if(!$$function_external_name{$internal_name}) {
+ $$function_external_name{$internal_name} = $external_name;
+ } else {
+ $$function_external_name{$internal_name} .= " & $external_name";
+ }
+ $$function_internal_arguments{$internal_name} = $arguments;
+ $$function_external_arguments{$external_name} = $arguments;
+ if(!$$function_internal_ordinal{$internal_name}) {
+ $$function_internal_ordinal{$internal_name} = $ordinal;
+ } else {
+ $$function_internal_ordinal{$internal_name} .= " & $ordinal";
+ }
+ if(!$$function_external_ordinal{$external_name}) {
+ $$function_external_ordinal{$external_name} = $ordinal;
+ } else {
+ $$function_external_ordinal{$external_name} .= " & $ordinal";
+ }
+ $$function_internal_calling_convention{$internal_name} = $calling_convention;
+ $$function_external_calling_convention{$external_name} = $calling_convention;
+ if(!$$function_internal_module{$internal_name}) {
+ $$function_internal_module{$internal_name} = "$module";
+ } else {
+ $$function_internal_module{$internal_name} .= " & $module";
+ }
+ if(!$$function_external_module{$external_name}) {
+ $$function_external_module{$external_name} = "$module";
+ } else {
+ $$function_external_module{$external_name} .= " & $module";
+ }
+
+ if(0 && $options->spec_mismatch) {
+ if($external_name eq "@") {
+ if($internal_name !~ /^\U$module\E_$ordinal$/) {
+ $output->write("$file: $external_name: the internal name ($internal_name) mismatch\n");
+ }
+ } else {
+ my $name = $external_name;
+
+ my $name1 = $name;
+ $name1 =~ s/^Zw/Nt/;
+
+ my $name2 = $name;
+ $name2 =~ s/^(?:_|Rtl|k32|K32)//;
+
+ my $name3 = $name;
+ $name3 =~ s/^INT_Int[0-9a-f]{2}Handler$/BUILTIN_DefaultIntHandler/;
+
+ my $name4 = $name;
+ $name4 =~ s/^(VxDCall)\d$/$1/;
+
+ # FIXME: This special case is becuase of a very ugly kludge that should be fixed IMHO
+ my $name5 = $name;
+ $name5 =~ s/^(.*?16)_(.*?)$/$1_fn$2/;
+
+ if(uc($internal_name) ne uc($external_name) &&
+ $internal_name !~ /(\Q$name\E|\Q$name1\E|\Q$name2\E|\Q$name3\E|\Q$name4\E|\Q$name5\E)/)
+ {
+ $output->write("$file: $external_name: internal name ($internal_name) mismatch\n");
+ }
+ }
+ }
+ } elsif(/^(\d+|@)\s+stub(?:\s+(?:-noimport|-norelay|-i386|-ret64))?\s+(\S+)$/) {
+ my $external_name = $2;
+
+ $ordinal = $1;
+
+ my $internal_name = $external_name;
+
+ $$function_stub{$module}{$external_name} = 1;
+ if(!$$function_internal_name{$external_name}) {
+ $$function_internal_name{$external_name} = $internal_name;
+ } else {
+ $$function_internal_name{$external_name} .= " & $internal_name";
+ }
+ if(!$$function_external_name{$internal_name}) {
+ $$function_external_name{$internal_name} = $external_name;
+ } else {
+ $$function_external_name{$internal_name} .= " & $external_name";
+ }
+ if(!$$function_internal_ordinal{$internal_name}) {
+ $$function_internal_ordinal{$internal_name} = $ordinal;
+ } else {
+ $$function_internal_ordinal{$internal_name} .= " & $ordinal";
+ }
+ if(!$$function_external_ordinal{$external_name}) {
+ $$function_external_ordinal{$external_name} = $ordinal;
+ } else {
+ $$function_external_ordinal{$external_name} .= " & $ordinal";
+ }
+ if(!$$function_internal_module{$internal_name}) {
+ $$function_internal_module{$internal_name} = "$module";
+ } else { # if($$function_internal_module{$internal_name} !~ /$module/) {
+ $$function_internal_module{$internal_name} .= " & $module";
+ }
+ if(!$$function_external_module{$external_name}) {
+ $$function_external_module{$external_name} = "$module";
+ } else { # if($$function_external_module{$external_name} !~ /$module/) {
+ $$function_external_module{$external_name} .= " & $module";
+ }
+ } elsif(/^(\d+|@)\s+forward(?:\s+(?:-noimport|-norelay|-i386|-ret64))?\s+(\S+)\s+(\S+)\.(\S+)$/) {
+ $ordinal = $1;
+
+ my $external_name = $2;
+ my $forward_module = lc($3);
+ my $forward_name = $4;
+
+ $$function_forward{$external_name} = "$module:$forward_module.$forward_name";
+ } elsif(/^(\d+|@)\s+(equate|extern|variable)/) {
+ # ignore
+ } else {
+ my $next_line = <IN>;
+ if(!defined($next_line) || $next_line =~ /^\s*\d|@/) {
+ die "$file: $.: syntax error: '$_'\n";
+ } else {
+ $_ .= $next_line;
+ $lookahead = 1;
+ }
+ }
+
+ if(defined($ordinal)) {
+ if($ordinal ne "@" && $ordinals{$ordinal}) {
+ $output->write("$file: ordinal redefined: $_\n");
+ }
+ $ordinals{$ordinal}++;
+ }
+ }
+ close(IN);
+
+ $$modules{$module}++;
+
+ $$module_files{$module} = $file;
+}
+
+sub name {
+ my $self = shift;
+ my $name = \${$self->{NAME}};
+
+ return $$name;
+}
+
+sub is_allowed_kind {
+ my $self = shift;
+ my $allowed_kind = \%{$self->{ALLOWED_KIND}};
+
+ my $kind = shift;
+ if(defined($kind)) {
+ return $$allowed_kind{$kind};
+ } else {
+ return 0;
+ }
+
+}
+
+sub allow_kind {
+ my $self = shift;
+ my $allowed_kind = \%{$self->{ALLOWED_KIND}};
+
+ my $kind = shift;
+
+ $$allowed_kind{$kind}++;
+}
+
+sub is_limited_type {
+ my $self = shift;
+ my $allowed_modules_limited = \%{$self->{ALLOWED_MODULES_LIMITED}};
+
+ my $type = shift;
+
+ return $$allowed_modules_limited{$type};
+}
+
+sub is_allowed_type_in_module {
+ my $self = shift;
+ my $allowed_modules = \%{$self->{ALLOWED_MODULES}};
+ my $allowed_modules_limited = \%{$self->{ALLOWED_MODULES_LIMITED}};
+
+ my $type = shift;
+ my @modules = split(/ \& /, shift);
+
+ if(!$$allowed_modules_limited{$type}) { return 1; }
+
+ foreach my $module (@modules) {
+ if($$allowed_modules{$type}{$module}) { return 1; }
+ }
+
+ return 0;
+}
+
+sub allow_type_in_module {
+ my $self = shift;
+ my $allowed_modules = \%{$self->{ALLOWED_MODULES}};
+
+ my $type = shift;
+ my @modules = split(/ \& /, shift);
+
+ foreach my $module (@modules) {
+ $$allowed_modules{$type}{$module}++;
+ }
+}
+
+sub type_used_in_module {
+ my $self = shift;
+ my $used_modules = \%{$self->{USED_MODULES}};
+
+ my $type = shift;
+ my @modules = split(/ \& /, shift);
+
+ foreach my $module (@modules) {
+ $$used_modules{$type}{$module} = 1;
+ }
+
+ return ();
+}
+
+sub types_not_used {
+ my $self = shift;
+ my $used_modules = \%{$self->{USED_MODULES}};
+ my $allowed_modules = \%{$self->{ALLOWED_MODULES}};
+
+ my $not_used;
+ foreach my $type (sort(keys(%$allowed_modules))) {
+ foreach my $module (sort(keys(%{$$allowed_modules{$type}}))) {
+ if(!$$used_modules{$type}{$module}) {
+ $$not_used{$module}{$type} = 1;
+ }
+ }
+ }
+ return $not_used;
+}
+
+sub types_unlimited_used_in_modules {
+ my $self = shift;
+
+ my $used_modules = \%{$self->{USED_MODULES}};
+ my $allowed_modules = \%{$self->{ALLOWED_MODULES}};
+ my $allowed_modules_unlimited = \%{$self->{ALLOWED_MODULES_UNLIMITED}};
+
+ my $used_types;
+ foreach my $type (sort(keys(%$allowed_modules_unlimited))) {
+ my $count = 0;
+ my @modules = ();
+ foreach my $module (sort(keys(%{$$used_modules{$type}}))) {
+ $count++;
+ push @modules, $module;
+ }
+ if($count) {
+ foreach my $module (@modules) {
+ $$used_types{$type}{$module} = 1;
+ }
+ }
+ }
+ return $used_types;
+}
+
+sub translate_argument {
+ my $self = shift;
+ my $translate_argument = \%{$self->{TRANSLATE_ARGUMENT}};
+
+ my $type = shift;
+
+ return $$translate_argument{$type};
+}
+
+sub declare_argument {
+ my $self = shift;
+ my $translate_argument = \%{$self->{TRANSLATE_ARGUMENT}};
+
+ my $type = shift;
+ my $kind = shift;
+
+ $$translate_argument{$type} = $kind;
+}
+
+sub all_declared_types {
+ my $self = shift;
+ my $translate_argument = \%{$self->{TRANSLATE_ARGUMENT}};
+
+ return sort(keys(%$translate_argument));
+}
+
+sub is_allowed_type_format {
+ my $self = shift;
+ my $type_format = \%{$self->{TYPE_FORMAT}};
+
+ my $module = shift;
+ my $type = shift;
+ my $format = shift;
+
+ my $formats;
+
+ if(defined($module) && defined($type)) {
+ local $_;
+ foreach (split(/ & /, $module)) {
+ if(defined($formats)) {
+ $formats .= "|";
+ } else {
+ $formats = "";
+ }
+ if(defined($$type_format{$_}{$type})) {
+ $formats .= $$type_format{$_}{$type};
+ }
+ }
+ }
+
+ if(defined($formats)) {
+ local $_;
+ foreach (split(/\|/, $formats)) {
+ if($_ eq $format) {
+ return 1;
+ }
+ }
+ }
+
+ return 0;
+}
+
+sub all_modules {
+ my $self = shift;
+ my $modules = \%{$self->{MODULES}};
+
+ return sort(keys(%$modules));
+}
+
+sub is_module {
+ my $self = shift;
+ my $modules = \%{$self->{MODULES}};
+
+ my $name = shift;
+
+ return $$modules{$name};
+}
+
+sub module_file {
+ my $self = shift;
+
+ my $module = shift;
+
+ my $module_files = \%{$self->{MODULE_FILES}};
+
+ return $$module_files{$module};
+}
+
+sub all_internal_functions {
+ my $self = shift;
+ my $function_internal_calling_convention = \%{$self->{FUNCTION_INTERNAL_CALLING_CONVENTION}};
+
+ return sort(keys(%$function_internal_calling_convention));
+}
+
+sub all_internal_functions_in_module {
+ my $self = shift;
+ my $function_internal_calling_convention = \%{$self->{FUNCTION_INTERNAL_CALLING_CONVENTION}};
+ my $function_internal_module = \%{$self->{FUNCTION_INTERNAL_MODULE}};
+
+ my $module = shift;
+
+ my @names;
+ foreach my $name (keys(%$function_internal_calling_convention)) {
+ if($$function_internal_module{$name} eq $module) {
+ push @names, $name;
+ }
+ }
+
+ return sort(@names);
+}
+
+sub all_external_functions {
+ my $self = shift;
+ my $function_internal_name = \%{$self->{FUNCTION_INTERNAL_NAME}};
+
+ return sort(keys(%$function_internal_name));
+}
+
+sub all_external_functions_in_module {
+ my $self = shift;
+ my $function_internal_name = \%{$self->{FUNCTION_INTERNAL_NAME}};
+ my $function_external_module = \%{$self->{FUNCTION_EXTERNAL_MODULE}};
+
+ my $module = shift;
+
+ my @names;
+ foreach my $name (keys(%$function_internal_name)) {
+ if($$function_external_module{$name} eq $module) {
+ push @names, $name;
+ }
+ }
+
+ return sort(@names);
+}
+
+sub all_functions_stub {
+ my $self = shift;
+ my $function_stub = \%{$self->{FUNCTION_STUB}};
+ my $modules = \%{$self->{MODULES}};
+
+ my @stubs = ();
+ foreach my $module (keys(%$modules)) {
+ push @stubs, keys(%{$$function_stub{$module}});
+ }
+ return sort(@stubs);
+}
+
+sub all_functions_stub_in_module {
+ my $self = shift;
+ my $function_stub = \%{$self->{FUNCTION_STUB}};
+
+ my $module = shift;
+
+ return sort(keys(%{$$function_stub{$module}}));
+}
+
+sub function_internal_ordinal {
+ my $self = shift;
+ my $function_internal_ordinal = \%{$self->{FUNCTION_INTERNAL_ORDINAL}};
+
+ my $name = shift;
+
+ return $$function_internal_ordinal{$name};
+}
+
+sub function_external_ordinal {
+ my $self = shift;
+ my $function_external_ordinal = \%{$self->{FUNCTION_EXTERNAL_ORDINAL}};
+
+ my $name = shift;
+
+ return $$function_external_ordinal{$name};
+}
+
+sub function_internal_calling_convention {
+ my $self = shift;
+ my $function_internal_calling_convention = \%{$self->{FUNCTION_INTERNAL_CALLING_CONVENTION}};
+
+ my $name = shift;
+
+ return $$function_internal_calling_convention{$name};
+}
+
+sub function_external_calling_convention {
+ my $self = shift;
+ my $function_external_calling_convention = \%{$self->{FUNCTION_EXTERNAL_CALLING_CONVENTION}};
+
+ my $name = shift;
+
+ return $$function_external_calling_convention{$name};
+}
+
+sub function_internal_name {
+ my $self = shift;
+ my $function_internal_name = \%{$self->{FUNCTION_INTERNAL_NAME}};
+
+ my $name = shift;
+
+ return $$function_internal_name{$name};
+}
+
+sub function_external_name {
+ my $self = shift;
+ my $function_external_name = \%{$self->{FUNCTION_EXTERNAL_NAME}};
+
+ my $name = shift;
+
+ return $$function_external_name{$name};
+}
+
+sub is_function {
+ my $self = shift;
+ my $function_internal_calling_convention = \%{$self->{FUNCTION_INTERNAL_CALLING_CONVENTION}};
+
+ my $name = shift;
+
+ return $$function_internal_calling_convention{$name};
+}
+
+sub all_shared_internal_functions {
+ my $self = shift;
+ my $function_shared = \%{$self->{FUNCTION_SHARED}};
+
+ return sort(keys(%$function_shared));
+}
+
+sub is_shared_internal_function {
+ my $self = shift;
+ my $function_shared = \%{$self->{FUNCTION_SHARED}};
+
+ my $name = shift;
+
+ return $$function_shared{$name};
+}
+
+sub found_shared_internal_function {
+ my $self = shift;
+ my $function_shared = \%{$self->{FUNCTION_SHARED}};
+
+ my $name = shift;
+
+ $$function_shared{$name} = 1;
+}
+
+sub function_internal_arguments {
+ my $self = shift;
+ my $function_internal_arguments = \%{$self->{FUNCTION_INTERNAL_ARGUMENTS}};
+
+ my $name = shift;
+
+ return $$function_internal_arguments{$name};
+}
+
+sub function_external_arguments {
+ my $self = shift;
+ my $function_external_arguments = \%{$self->{FUNCTION_EXTERNAL_ARGUMENTS}};
+
+ my $name = shift;
+
+ return $$function_external_arguments{$name};
+}
+
+sub function_internal_module {
+ my $self = shift;
+ my $function_internal_module = \%{$self->{FUNCTION_INTERNAL_MODULE}};
+
+ my $name = shift;
+
+ return $$function_internal_module{$name};
+}
+
+sub function_external_module {
+ my $self = shift;
+ my $function_external_module = \%{$self->{FUNCTION_EXTERNAL_MODULE}};
+
+ my $name = shift;
+
+ return $$function_external_module{$name};
+}
+
+sub is_function_stub {
+ my $self = shift;
+ my $function_stub = \%{$self->{FUNCTION_STUB}};
+ my $modules = \%{$self->{MODULES}};
+
+ my $module = shift;
+ my $name = shift;
+
+ foreach my $module (keys(%$modules)) {
+ if($$function_stub{$module}{$name}) {
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+sub is_function_stub_in_module {
+ my $self = shift;
+ my $function_stub = \%{$self->{FUNCTION_STUB}};
+
+ my $module = shift;
+ my $name = shift;
+
+ return $$function_stub{$module}{$name};
+}
+
+########################################################################
+# class methods
+#
+
+sub _get_all_module_internal_ordinal {
+ my $winapi = shift;
+ my $internal_name = shift;
+
+ my @entries = ();
+
+ my @name = (); {
+ my $name = $winapi->function_external_name($internal_name);
+ if(defined($name)) {
+ @name = split(/ & /, $name);
+ }
+ }
+
+ my @module = (); {
+ my $module = $winapi->function_internal_module($internal_name);
+ if(defined($module)) {
+ @module = split(/ & /, $module);
+ }
+ }
+
+ my @ordinal = (); {
+ my $ordinal = $winapi->function_internal_ordinal($internal_name);
+ if(defined($ordinal)) {
+ @ordinal = split(/ & /, $ordinal);
+ }
+ }
+
+ my $name;
+ my $module;
+ my $ordinal;
+ while(defined($name = shift @name) &&
+ defined($module = shift @module) &&
+ defined($ordinal = shift @ordinal))
+ {
+ push @entries, [$name, $module, $ordinal];
+ }
+
+ return @entries;
+}
+
+sub get_all_module_internal_ordinal16 {
+ return _get_all_module_internal_ordinal($win16api, @_);
+}
+
+sub get_all_module_internal_ordinal32 {
+ return _get_all_module_internal_ordinal($win32api, @_);
+}
+
+sub get_all_module_internal_ordinal {
+ my @entries = ();
+ foreach my $winapi (@winapis) {
+ push @entries, _get_all_module_internal_ordinal($winapi, @_);
+ }
+
+ return @entries;
+}
+
+sub _get_all_module_external_ordinal {
+ my $winapi = shift;
+ my $external_name = shift;
+
+ my @entries = ();
+
+ my @name = (); {
+ my $name = $winapi->function_internal_name($external_name);
+ if(defined($name)) {
+ @name = split(/ & /, $name);
+ }
+ }
+
+ my @module = (); {
+ my $module = $winapi->function_external_module($external_name);
+ if(defined($module)) {
+ @module = split(/ & /, $module);
+ }
+ }
+
+ my @ordinal = (); {
+ my $ordinal = $winapi->function_external_ordinal($external_name);
+ if(defined($ordinal)) {
+ @ordinal = split(/ & /, $ordinal);
+ }
+ }
+
+ my $name;
+ my $module;
+ my $ordinal;
+ while(defined($name = shift @name) &&
+ defined($module = shift @module) &&
+ defined($ordinal = shift @ordinal))
+ {
+ push @entries, [$name, $module, $ordinal];
+ }
+
+ return @entries;
+}
+
+sub get_all_module_external_ordinal16 {
+ return _get_all_module_external_ordinal($win16api, @_);
+}
+
+sub get_all_module_external_ordinal32 {
+ return _get_all_module_external_ordinal($win32api, @_);
+}
+
+sub get_all_module_external_ordinal {
+ my @entries = ();
+ foreach my $winapi (@winapis) {
+ push @entries, _get_all_module_external_ordinal($winapi, @_);
+ }
+
+ return @entries;
+}
+
+1;