Generate Perl modules defining prototypes for exported functions.

diff --git a/programs/winetest/include/advapi32.pm b/programs/winetest/include/advapi32.pm
new file mode 100644
index 0000000..b663bc5
--- /dev/null
+++ b/programs/winetest/include/advapi32.pm
@@ -0,0 +1,197 @@
+package advapi32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "AccessCheck" => ["long",  ["ptr", "long", "long", "ptr", "ptr", "ptr", "ptr", "ptr"]],
+    "AddAccessAllowedAce" => ["long",  ["ptr", "long", "long", "ptr"]],
+    "AdjustTokenPrivileges" => ["long",  ["long", "long", "ptr", "long", "ptr", "ptr"]],
+    "AllocateAndInitializeSid" => ["long",  ["ptr", "long", "long", "long", "long", "long", "long", "long", "long", "long", "ptr"]],
+    "AllocateLocallyUniqueId" => ["long",  ["ptr"]],
+    "BackupEventLogA" => ["long",  ["long", "str"]],
+    "BackupEventLogW" => ["long",  ["long", "wstr"]],
+    "ClearEventLogA" => ["long",  ["long", "str"]],
+    "ClearEventLogW" => ["long",  ["long", "wstr"]],
+    "CloseEventLog" => ["long",  ["long"]],
+    "CloseServiceHandle" => ["long",  ["long"]],
+    "ControlService" => ["long",  ["long", "long", "ptr"]],
+    "CopySid" => ["long",  ["long", "ptr", "ptr"]],
+    "CreateServiceA" => ["long",  ["long", "str", "str", "long", "long", "long", "long", "str", "str", "ptr", "str", "str", "str"]],
+    "CreateServiceW" => ["long",  ["long", "wstr", "wstr", "long", "long", "long", "long", "wstr", "wstr", "ptr", "wstr", "wstr", "wstr"]],
+    "CryptAcquireContextA" => ["long",  ["ptr", "str", "str", "long", "long"]],
+    "CryptAcquireContextW" => ["long",  ["ptr", "wstr", "wstr", "long", "long"]],
+    "CryptContextAddRef" => ["long",  ["long", "ptr", "long"]],
+    "CryptCreateHash" => ["long",  ["long", "long", "long", "long", "ptr"]],
+    "CryptDecrypt" => ["long",  ["long", "long", "long", "long", "ptr", "ptr"]],
+    "CryptDeriveKey" => ["long",  ["long", "long", "long", "long", "ptr"]],
+    "CryptDestroyHash" => ["long",  ["long"]],
+    "CryptDestroyKey" => ["long",  ["long"]],
+    "CryptDuplicateHash" => ["long",  ["long", "ptr", "long", "ptr"]],
+    "CryptDuplicateKey" => ["long",  ["long", "ptr", "long", "ptr"]],
+    "CryptEncrypt" => ["long",  ["long", "long", "long", "long", "ptr", "ptr", "long"]],
+    "CryptEnumProviderTypesA" => ["long",  ["long", "ptr", "long", "ptr", "str", "ptr"]],
+    "CryptEnumProviderTypesW" => ["long",  ["long", "ptr", "long", "ptr", "wstr", "ptr"]],
+    "CryptEnumProvidersA" => ["long",  ["long", "ptr", "long", "ptr", "str", "ptr"]],
+    "CryptEnumProvidersW" => ["long",  ["long", "ptr", "long", "ptr", "wstr", "ptr"]],
+    "CryptExportKey" => ["long",  ["long", "long", "long", "long", "ptr", "ptr"]],
+    "CryptGenKey" => ["long",  ["long", "long", "long", "ptr"]],
+    "CryptGenRandom" => ["long",  ["long", "long", "ptr"]],
+    "CryptGetDefaultProviderA" => ["long",  ["long", "ptr", "long", "str", "ptr"]],
+    "CryptGetDefaultProviderW" => ["long",  ["long", "ptr", "long", "wstr", "ptr"]],
+    "CryptGetHashParam" => ["long",  ["long", "long", "ptr", "ptr", "long"]],
+    "CryptGetKeyParam" => ["long",  ["long", "long", "ptr", "ptr", "long"]],
+    "CryptGetProvParam" => ["long",  ["long", "long", "ptr", "ptr", "long"]],
+    "CryptGetUserKey" => ["long",  ["long", "long", "ptr"]],
+    "CryptHashData" => ["long",  ["long", "ptr", "long", "long"]],
+    "CryptHashSessionKey" => ["long",  ["long", "long", "long"]],
+    "CryptImportKey" => ["long",  ["long", "ptr", "long", "long", "long", "ptr"]],
+    "CryptReleaseContext" => ["long",  ["long", "long"]],
+    "CryptSetHashParam" => ["long",  ["long", "long", "ptr", "long"]],
+    "CryptSetKeyParam" => ["long",  ["long", "long", "ptr", "long"]],
+    "CryptSetProvParam" => ["long",  ["long", "long", "ptr", "long"]],
+    "CryptSetProviderA" => ["long",  ["str", "long"]],
+    "CryptSetProviderExA" => ["long",  ["str", "long", "ptr", "long"]],
+    "CryptSetProviderExW" => ["long",  ["wstr", "long", "ptr", "long"]],
+    "CryptSetProviderW" => ["long",  ["wstr", "long"]],
+    "CryptSignHashA" => ["long",  ["long", "long", "str", "long", "ptr", "ptr"]],
+    "CryptSignHashW" => ["long",  ["long", "long", "str", "long", "ptr", "ptr"]],
+    "CryptVerifySignatureA" => ["long",  ["long", "ptr", "long", "long", "str", "long"]],
+    "CryptVerifySignatureW" => ["long",  ["long", "ptr", "long", "long", "str", "long"]],
+    "DeleteService" => ["long",  ["long"]],
+    "DeregisterEventSource" => ["long",  ["long"]],
+    "EnumServicesStatusA" => ["long",  ["long", "long", "long", "ptr", "long", "ptr", "ptr", "ptr"]],
+    "EnumServicesStatusW" => ["long",  ["long", "long", "long", "ptr", "long", "ptr", "ptr", "ptr"]],
+    "EqualPrefixSid" => ["long",  ["ptr", "ptr"]],
+    "EqualSid" => ["long",  ["ptr", "ptr"]],
+    "FreeSid" => ["ptr",  ["ptr"]],
+    "GetFileSecurityA" => ["long",  ["str", "long", "ptr", "long", "ptr"]],
+    "GetFileSecurityW" => ["long",  ["wstr", "long", "ptr", "long", "ptr"]],
+    "GetLengthSid" => ["long",  ["ptr"]],
+    "GetNumberOfEventLogRecords" => ["long",  ["long", "ptr"]],
+    "GetOldestEventLogRecord" => ["long",  ["long", "ptr"]],
+    "GetSecurityDescriptorControl" => ["long",  ["ptr", "ptr", "ptr"]],
+    "GetSecurityDescriptorDacl" => ["long",  ["ptr", "ptr", "ptr", "ptr"]],
+    "GetSecurityDescriptorGroup" => ["long",  ["ptr", "ptr", "ptr"]],
+    "GetSecurityDescriptorLength" => ["long",  ["ptr"]],
+    "GetSecurityDescriptorOwner" => ["long",  ["ptr", "ptr", "ptr"]],
+    "GetSecurityDescriptorSacl" => ["long",  ["ptr", "ptr", "ptr", "ptr"]],
+    "GetSidIdentifierAuthority" => ["ptr",  ["ptr"]],
+    "GetSidLengthRequired" => ["long",  ["long"]],
+    "GetSidSubAuthority" => ["ptr",  ["ptr", "long"]],
+    "GetSidSubAuthorityCount" => ["ptr",  ["ptr"]],
+    "GetTokenInformation" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "GetUserNameA" => ["long",  ["str", "ptr"]],
+    "GetUserNameW" => ["long",  ["wstr", "ptr"]],
+    "ImpersonateSelf" => ["long",  ["long"]],
+    "InitializeAcl" => ["long",  ["ptr", "long", "long"]],
+    "InitializeSecurityDescriptor" => ["long",  ["ptr", "long"]],
+    "InitializeSid" => ["long",  ["ptr", "ptr", "long"]],
+    "IsValidSecurityDescriptor" => ["long",  ["ptr"]],
+    "IsValidSid" => ["long",  ["ptr"]],
+    "LookupAccountNameA" => ["long",  ["str", "str", "ptr", "ptr", "str", "ptr", "ptr"]],
+    "LookupAccountSidA" => ["long",  ["str", "ptr", "str", "ptr", "str", "ptr", "ptr"]],
+    "LookupAccountSidW" => ["long",  ["wstr", "ptr", "wstr", "ptr", "wstr", "ptr", "ptr"]],
+    "LookupPrivilegeValueA" => ["long",  ["str", "str", "ptr"]],
+    "LookupPrivilegeValueW" => ["long",  ["wstr", "wstr", "ptr"]],
+    "LsaClose" => ["long",  ["long"]],
+    "LsaFreeMemory" => ["long",  ["ptr"]],
+    "LsaLookupSids" => ["long",  ["long", "long", "ptr", "ptr", "ptr"]],
+    "LsaOpenPolicy" => ["long",  ["ptr", "ptr", "long", "ptr"]],
+    "LsaQueryInformationPolicy" => ["long",  ["long", "long", "ptr"]],
+    "MakeSelfRelativeSD" => ["long",  ["ptr", "ptr", "ptr"]],
+    "NotifyBootConfigStatus" => ["long",  ["long"]],
+    "NotifyChangeEventLog" => ["long",  ["long", "long"]],
+    "OpenBackupEventLogA" => ["long",  ["str", "str"]],
+    "OpenBackupEventLogW" => ["long",  ["wstr", "wstr"]],
+    "OpenEventLogA" => ["long",  ["str", "str"]],
+    "OpenEventLogW" => ["long",  ["wstr", "wstr"]],
+    "OpenProcessToken" => ["long",  ["long", "long", "ptr"]],
+    "OpenSCManagerA" => ["long",  ["str", "str", "long"]],
+    "OpenSCManagerW" => ["long",  ["wstr", "wstr", "long"]],
+    "OpenServiceA" => ["long",  ["long", "str", "long"]],
+    "OpenServiceW" => ["long",  ["long", "wstr", "long"]],
+    "OpenThreadToken" => ["long",  ["long", "long", "long", "ptr"]],
+    "QueryServiceStatus" => ["long",  ["long", "ptr"]],
+    "QueryWindows31FilesMigration" => ["long",  ["long"]],
+    "ReadEventLogA" => ["long",  ["long", "long", "long", "ptr", "long", "ptr", "ptr"]],
+    "ReadEventLogW" => ["long",  ["long", "long", "long", "ptr", "long", "ptr", "ptr"]],
+    "RegCloseKey" => ["long",  ["long"]],
+    "RegConnectRegistryA" => ["long",  ["str", "long", "ptr"]],
+    "RegConnectRegistryW" => ["long",  ["wstr", "long", "ptr"]],
+    "RegCreateKeyA" => ["long",  ["long", "str", "ptr"]],
+    "RegCreateKeyExA" => ["long",  ["long", "str", "long", "str", "long", "long", "ptr", "ptr", "ptr"]],
+    "RegCreateKeyExW" => ["long",  ["long", "wstr", "long", "wstr", "long", "long", "ptr", "ptr", "ptr"]],
+    "RegCreateKeyW" => ["long",  ["long", "wstr", "ptr"]],
+    "RegDeleteKeyA" => ["long",  ["long", "str"]],
+    "RegDeleteKeyW" => ["long",  ["long", "wstr"]],
+    "RegDeleteValueA" => ["long",  ["long", "str"]],
+    "RegDeleteValueW" => ["long",  ["long", "wstr"]],
+    "RegEnumKeyA" => ["long",  ["long", "long", "str", "long"]],
+    "RegEnumKeyExA" => ["long",  ["long", "long", "str", "ptr", "ptr", "str", "ptr", "ptr"]],
+    "RegEnumKeyExW" => ["long",  ["long", "long", "wstr", "ptr", "ptr", "wstr", "ptr", "ptr"]],
+    "RegEnumKeyW" => ["long",  ["long", "long", "wstr", "long"]],
+    "RegEnumValueA" => ["long",  ["long", "long", "str", "ptr", "ptr", "ptr", "ptr", "ptr"]],
+    "RegEnumValueW" => ["long",  ["long", "long", "wstr", "ptr", "ptr", "ptr", "ptr", "ptr"]],
+    "RegFlushKey" => ["long",  ["long"]],
+    "RegGetKeySecurity" => ["long",  ["long", "long", "ptr", "ptr"]],
+    "RegLoadKeyA" => ["long",  ["long", "str", "str"]],
+    "RegLoadKeyW" => ["long",  ["long", "wstr", "wstr"]],
+    "RegNotifyChangeKeyValue" => ["long",  ["long", "long", "long", "long", "long"]],
+    "RegOpenCurrentUser" => ["long",  ["long", "ptr"]],
+    "RegOpenKeyA" => ["long",  ["long", "str", "ptr"]],
+    "RegOpenKeyExA" => ["long",  ["long", "str", "long", "long", "ptr"]],
+    "RegOpenKeyExW" => ["long",  ["long", "wstr", "long", "long", "ptr"]],
+    "RegOpenKeyW" => ["long",  ["long", "wstr", "ptr"]],
+    "RegQueryInfoKeyA" => ["long",  ["long", "str", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr"]],
+    "RegQueryInfoKeyW" => ["long",  ["long", "wstr", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr"]],
+    "RegQueryValueA" => ["long",  ["long", "str", "str", "ptr"]],
+    "RegQueryValueExA" => ["long",  ["long", "str", "ptr", "ptr", "ptr", "ptr"]],
+    "RegQueryValueExW" => ["long",  ["long", "wstr", "ptr", "ptr", "ptr", "ptr"]],
+    "RegQueryValueW" => ["long",  ["long", "wstr", "wstr", "ptr"]],
+    "RegReplaceKeyW" => ["long",  ["long", "wstr", "wstr", "wstr"]],
+    "RegRestoreKeyA" => ["long",  ["long", "str", "long"]],
+    "RegRestoreKeyW" => ["long",  ["long", "wstr", "long"]],
+    "RegSaveKeyA" => ["long",  ["long", "str", "ptr"]],
+    "RegSaveKeyW" => ["long",  ["long", "wstr", "ptr"]],
+    "RegSetKeySecurity" => ["long",  ["long", "long", "ptr"]],
+    "RegSetValueA" => ["long",  ["long", "str", "long", "str", "long"]],
+    "RegSetValueExA" => ["long",  ["long", "str", "long", "long", "ptr", "long"]],
+    "RegSetValueExW" => ["long",  ["long", "wstr", "long", "long", "ptr", "long"]],
+    "RegSetValueW" => ["long",  ["long", "wstr", "long", "wstr", "long"]],
+    "RegUnLoadKeyA" => ["long",  ["long", "str"]],
+    "RegUnLoadKeyW" => ["long",  ["long", "wstr"]],
+    "RegisterEventSourceA" => ["long",  ["str", "str"]],
+    "RegisterEventSourceW" => ["long",  ["wstr", "wstr"]],
+    "RegisterServiceCtrlHandlerA" => ["long",  ["str", "ptr"]],
+    "RegisterServiceCtrlHandlerW" => ["long",  ["wstr", "ptr"]],
+    "ReportEventA" => ["long",  ["long", "long", "long", "long", "ptr", "long", "long", "ptr", "ptr"]],
+    "ReportEventW" => ["long",  ["long", "long", "long", "long", "ptr", "long", "long", "ptr", "ptr"]],
+    "RevertToSelf" => ["long",  []],
+    "SetFileSecurityA" => ["long",  ["str", "long", "ptr"]],
+    "SetFileSecurityW" => ["long",  ["wstr", "long", "ptr"]],
+    "SetKernelObjectSecurity" => ["long",  ["long", "long", "ptr"]],
+    "SetSecurityDescriptorDacl" => ["long",  ["ptr", "long", "ptr", "long"]],
+    "SetSecurityDescriptorGroup" => ["long",  ["ptr", "ptr", "long"]],
+    "SetSecurityDescriptorOwner" => ["long",  ["ptr", "ptr", "long"]],
+    "SetSecurityDescriptorSacl" => ["long",  ["ptr", "long", "ptr", "long"]],
+    "SetServiceStatus" => ["long",  ["long", "ptr"]],
+    "SetThreadToken" => ["long",  ["ptr", "long"]],
+    "StartServiceA" => ["long",  ["long", "long", "ptr"]],
+    "StartServiceCtrlDispatcherA" => ["long",  ["ptr"]],
+    "StartServiceCtrlDispatcherW" => ["long",  ["ptr"]],
+    "StartServiceW" => ["long",  ["long", "long", "ptr"]],
+    "SynchronizeWindows31FilesAndWindowsNTRegistry" => ["long",  ["long", "long", "long", "long"]]
+};
+
+&wine::declare("advapi32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/avifil32.pm b/programs/winetest/include/avifil32.pm
new file mode 100644
index 0000000..60c35e5
--- /dev/null
+++ b/programs/winetest/include/avifil32.pm
@@ -0,0 +1,61 @@
+package avifil32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "AVIFileAddRef" => ["long",  ["ptr"]],
+    "AVIFileCreateStreamA" => ["long",  ["ptr", "ptr", "ptr"]],
+    "AVIFileCreateStreamW" => ["long",  ["ptr", "ptr", "ptr"]],
+    "AVIFileEndRecord" => ["long",  ["ptr"]],
+    "AVIFileExit" => ["void",  []],
+    "AVIFileGetStream" => ["long",  ["ptr", "ptr", "long", "long"]],
+    "AVIFileInfo" => ["long",  ["ptr", "ptr", "long"]],
+    "AVIFileInfoA" => ["long",  ["ptr", "ptr", "long"]],
+    "AVIFileInfoW" => ["long",  ["ptr", "ptr", "long"]],
+    "AVIFileInit" => ["void",  []],
+    "AVIFileOpenA" => ["long",  ["ptr", "str", "long", "ptr"]],
+    "AVIFileOpenW" => ["long",  ["ptr", "wstr", "long", "ptr"]],
+    "AVIFileReadData" => ["long",  ["ptr", "long", "ptr", "ptr"]],
+    "AVIFileRelease" => ["long",  ["ptr"]],
+    "AVIFileWriteData" => ["long",  ["ptr", "long", "ptr", "long"]],
+    "AVIMakeCompressedStream" => ["long",  ["ptr", "ptr", "ptr", "ptr"]],
+    "AVIStreamAddRef" => ["long",  ["ptr"]],
+    "AVIStreamBeginStreaming" => ["long",  ["ptr", "long", "long", "long"]],
+    "AVIStreamCreate" => ["long",  ["ptr", "long", "long", "ptr"]],
+    "AVIStreamEndStreaming" => ["long",  ["ptr"]],
+    "AVIStreamFindSample" => ["long",  ["ptr", "long", "long"]],
+    "AVIStreamGetFrame" => ["ptr",  ["ptr", "long"]],
+    "AVIStreamGetFrameClose" => ["long",  ["ptr"]],
+    "AVIStreamGetFrameOpen" => ["ptr",  ["ptr", "ptr"]],
+    "AVIStreamInfo" => ["long",  ["ptr", "ptr", "long"]],
+    "AVIStreamInfoA" => ["long",  ["ptr", "ptr", "long"]],
+    "AVIStreamInfoW" => ["long",  ["ptr", "ptr", "long"]],
+    "AVIStreamLength" => ["long",  ["ptr"]],
+    "AVIStreamOpenFromFileA" => ["long",  ["ptr", "str", "long", "long", "long", "ptr"]],
+    "AVIStreamOpenFromFileW" => ["long",  ["ptr", "wstr", "long", "long", "long", "ptr"]],
+    "AVIStreamRead" => ["long",  ["ptr", "long", "long", "ptr", "long", "ptr", "ptr"]],
+    "AVIStreamReadData" => ["long",  ["ptr", "long", "ptr", "ptr"]],
+    "AVIStreamReadFormat" => ["long",  ["ptr", "long", "ptr", "ptr"]],
+    "AVIStreamRelease" => ["long",  ["ptr"]],
+    "AVIStreamSampleToTime" => ["long",  ["ptr", "long"]],
+    "AVIStreamSetFormat" => ["long",  ["ptr", "long", "ptr", "long"]],
+    "AVIStreamStart" => ["long",  ["ptr"]],
+    "AVIStreamTimeToSample" => ["long",  ["ptr", "long"]],
+    "AVIStreamWrite" => ["long",  ["ptr", "long", "long", "ptr", "long", "long", "ptr", "ptr"]],
+    "AVIStreamWriteData" => ["long",  ["ptr", "long", "ptr", "long"]],
+    "DllCanUnloadNow" => ["long",  []],
+    "DllGetClassObject" => ["long",  ["ptr", "ptr", "ptr"]]
+};
+
+&wine::declare("avifil32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/comctl32.pm b/programs/winetest/include/comctl32.pm
new file mode 100644
index 0000000..3038a88
--- /dev/null
+++ b/programs/winetest/include/comctl32.pm
@@ -0,0 +1,168 @@
+package comctl32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "MenuHelp" => ["void",  ["long", "long", "long", "long", "long", "long", "ptr"]],
+    "ShowHideMenuCtl" => ["long",  ["long", "long", "ptr"]],
+    "GetEffectiveClientRect" => ["void",  ["long", "ptr", "ptr"]],
+    "DrawStatusTextA" => ["void",  ["long", "ptr", "str", "long"]],
+    "CreateStatusWindowA" => ["long",  ["long", "str", "long", "long"]],
+    "CreateToolbar" => ["long",  ["long", "long", "long", "long", "long", "long", "ptr", "long"]],
+    "CreateMappedBitmap" => ["long",  ["long", "long", "long", "ptr", "long"]],
+    "DPA_LoadStream" => ["long",  ["ptr", "ptr", "ptr", "long"]],
+    "DPA_SaveStream" => ["long",  ["long", "ptr", "ptr", "long"]],
+    "DPA_Merge" => ["long",  ["long", "long", "long", "ptr", "ptr", "long"]],
+    "MakeDragList" => ["long",  ["long"]],
+    "LBItemFromPt" => ["long",  ["long", "long", "long", "long"]],
+    "DrawInsert" => ["void",  ["long", "long", "long"]],
+    "CreateUpDownControl" => ["long",  ["long", "long", "long", "long", "long", "long", "long", "long", "long", "long", "long", "long"]],
+    "InitCommonControls" => ["void",  []],
+    "CreatePropertySheetPage" => ["long",  ["ptr"]],
+    "CreatePropertySheetPageA" => ["long",  ["ptr"]],
+    "CreatePropertySheetPageW" => ["long",  ["ptr"]],
+    "CreateStatusWindow" => ["long",  ["long", "str", "long", "long"]],
+    "CreateStatusWindowW" => ["long",  ["long", "wstr", "long", "long"]],
+    "CreateToolbarEx" => ["long",  ["long", "long", "long", "long", "long", "long", "ptr", "long", "long", "long", "long", "long", "long"]],
+    "DestroyPropertySheetPage" => ["long",  ["long"]],
+    "DllGetVersion" => ["long",  ["ptr"]],
+    "DllInstall" => ["long",  ["long", "wstr"]],
+    "DrawStatusText" => ["void",  ["long", "ptr", "str", "long"]],
+    "DrawStatusTextW" => ["void",  ["long", "ptr", "wstr", "long"]],
+    "FlatSB_EnableScrollBar" => ["long",  ["long", "long", "long"]],
+    "FlatSB_GetScrollInfo" => ["long",  ["long", "long", "ptr"]],
+    "FlatSB_GetScrollPos" => ["long",  ["long", "long"]],
+    "FlatSB_GetScrollProp" => ["long",  ["long", "long", "ptr"]],
+    "FlatSB_GetScrollRange" => ["long",  ["long", "long", "ptr", "ptr"]],
+    "FlatSB_SetScrollInfo" => ["long",  ["long", "long", "ptr", "long"]],
+    "FlatSB_SetScrollPos" => ["long",  ["long", "long", "long", "long"]],
+    "FlatSB_SetScrollProp" => ["long",  ["long", "long", "long", "long"]],
+    "FlatSB_ShowScrollBar" => ["long",  ["long", "long", "long"]],
+    "GetMUILanguage" => ["long",  []],
+    "ImageList_Add" => ["long",  ["long", "long", "long"]],
+    "ImageList_AddIcon" => ["long",  ["long", "long"]],
+    "ImageList_AddMasked" => ["long",  ["long", "long", "long"]],
+    "ImageList_BeginDrag" => ["long",  ["long", "long", "long", "long"]],
+    "ImageList_Copy" => ["long",  ["long", "long", "long", "long", "long"]],
+    "ImageList_Create" => ["long",  ["long", "long", "long", "long", "long"]],
+    "ImageList_Destroy" => ["long",  ["long"]],
+    "ImageList_DragEnter" => ["long",  ["long", "long", "long"]],
+    "ImageList_DragLeave" => ["long",  ["long"]],
+    "ImageList_DragMove" => ["long",  ["long", "long"]],
+    "ImageList_DragShowNolock" => ["long",  ["long"]],
+    "ImageList_Draw" => ["long",  ["long", "long", "long", "long", "long", "long"]],
+    "ImageList_DrawEx" => ["long",  ["long", "long", "long", "long", "long", "long", "long", "long", "long", "long"]],
+    "ImageList_DrawIndirect" => ["long",  ["ptr"]],
+    "ImageList_Duplicate" => ["long",  ["long"]],
+    "ImageList_EndDrag" => ["long",  []],
+    "ImageList_GetBkColor" => ["long",  ["long"]],
+    "ImageList_GetDragImage" => ["long",  ["ptr", "ptr"]],
+    "ImageList_GetFlags" => ["long",  ["long"]],
+    "ImageList_GetIcon" => ["long",  ["long", "long", "long"]],
+    "ImageList_GetIconSize" => ["long",  ["long", "ptr", "ptr"]],
+    "ImageList_GetImageCount" => ["long",  ["long"]],
+    "ImageList_GetImageInfo" => ["long",  ["long", "long", "ptr"]],
+    "ImageList_GetImageRect" => ["long",  ["long", "long", "ptr"]],
+    "ImageList_LoadImage" => ["long",  ["long", "str", "long", "long", "long", "long", "long"]],
+    "ImageList_LoadImageA" => ["long",  ["long", "str", "long", "long", "long", "long", "long"]],
+    "ImageList_LoadImageW" => ["long",  ["long", "wstr", "long", "long", "long", "long", "long"]],
+    "ImageList_Merge" => ["long",  ["long", "long", "long", "long", "long", "long"]],
+    "ImageList_Read" => ["long",  ["ptr"]],
+    "ImageList_Remove" => ["long",  ["long", "long"]],
+    "ImageList_Replace" => ["long",  ["long", "long", "long", "long"]],
+    "Alloc" => ["ptr",  ["long"]],
+    "ReAlloc" => ["ptr",  ["ptr", "long"]],
+    "Free" => ["long",  ["ptr"]],
+    "GetSize" => ["long",  ["ptr"]],
+    "ImageList_ReplaceIcon" => ["long",  ["long", "long", "long"]],
+    "ImageList_SetBkColor" => ["long",  ["long", "long"]],
+    "ImageList_SetDragCursorImage" => ["long",  ["long", "long", "long", "long"]],
+    "ImageList_SetFilter" => ["long",  ["long", "long", "long"]],
+    "ImageList_SetFlags" => ["long",  ["long", "long"]],
+    "ImageList_SetIconSize" => ["long",  ["long", "long", "long"]],
+    "ImageList_SetImageCount" => ["long",  ["long", "long"]],
+    "ImageList_SetOverlayImage" => ["long",  ["long", "long", "long"]],
+    "ImageList_Write" => ["long",  ["long", "ptr"]],
+    "InitCommonControlsEx" => ["long",  ["ptr"]],
+    "InitMUILanguage" => ["void",  ["long"]],
+    "InitializeFlatSB" => ["long",  ["long"]],
+    "PropertySheet" => ["long",  ["ptr"]],
+    "PropertySheetA" => ["long",  ["ptr"]],
+    "PropertySheetW" => ["long",  ["ptr"]],
+    "UninitializeFlatSB" => ["long",  ["long"]],
+    "_TrackMouseEvent" => ["long",  ["ptr"]],
+    "CreateMRUListA" => ["long",  ["ptr"]],
+    "FreeMRUList" => ["long",  ["long"]],
+    "AddMRUStringA" => ["long",  ["long", "str"]],
+    "EnumMRUListA" => ["long",  ["long", "long", "ptr", "long"]],
+    "FindMRUStringA" => ["long",  ["long", "str", "ptr"]],
+    "DelMRUString" => ["long",  ["long", "long"]],
+    "CreateMRUListLazyA" => ["long",  ["ptr", "long", "long", "long"]],
+    "AddMRUData" => ["long",  ["long", "ptr", "long"]],
+    "FindMRUData" => ["long",  ["long", "ptr", "long", "ptr"]],
+    "Str_GetPtrA" => ["long",  ["str", "str", "long"]],
+    "Str_SetPtrA" => ["long",  ["ptr", "str"]],
+    "Str_GetPtrW" => ["long",  ["wstr", "wstr", "long"]],
+    "Str_SetPtrW" => ["long",  ["ptr", "wstr"]],
+    "DSA_Create" => ["long",  ["long", "long"]],
+    "DSA_Destroy" => ["long",  ["long"]],
+    "DSA_GetItem" => ["long",  ["long", "long", "ptr"]],
+    "DSA_GetItemPtr" => ["ptr",  ["long", "long"]],
+    "DSA_InsertItem" => ["long",  ["long", "long", "ptr"]],
+    "DSA_SetItem" => ["long",  ["long", "long", "ptr"]],
+    "DSA_DeleteItem" => ["long",  ["long", "long"]],
+    "DSA_DeleteAllItems" => ["long",  ["long"]],
+    "DPA_Create" => ["long",  ["long"]],
+    "DPA_Destroy" => ["long",  ["long"]],
+    "DPA_Grow" => ["long",  ["long", "long"]],
+    "DPA_Clone" => ["long",  ["long", "long"]],
+    "DPA_GetPtr" => ["ptr",  ["long", "long"]],
+    "DPA_GetPtrIndex" => ["long",  ["long", "ptr"]],
+    "DPA_InsertPtr" => ["long",  ["long", "long", "ptr"]],
+    "DPA_SetPtr" => ["long",  ["long", "long", "ptr"]],
+    "DPA_DeletePtr" => ["ptr",  ["long", "long"]],
+    "DPA_DeleteAllPtrs" => ["long",  ["long"]],
+    "DPA_Sort" => ["long",  ["long", "ptr", "long"]],
+    "DPA_Search" => ["long",  ["long", "ptr", "long", "ptr", "long", "long"]],
+    "DPA_CreateEx" => ["long",  ["long", "long"]],
+    "SendNotify" => ["long",  ["long", "long", "long", "ptr"]],
+    "SendNotifyEx" => ["long",  ["long", "long", "long", "ptr", "long"]],
+    "StrChrA" => ["str",  ["str", "long"]],
+    "StrRChrA" => ["str",  ["str", "str", "long"]],
+    "StrCmpNA" => ["long",  ["str", "str", "long"]],
+    "StrCmpNIA" => ["long",  ["str", "str", "long"]],
+    "StrStrA" => ["str",  ["str", "str"]],
+    "StrStrIA" => ["str",  ["str", "str"]],
+    "StrCSpnA" => ["long",  ["str", "str"]],
+    "StrToIntA" => ["long",  ["str"]],
+    "StrChrW" => ["wstr",  ["wstr", "long"]],
+    "StrRChrW" => ["wstr",  ["wstr", "wstr", "long"]],
+    "StrCmpNW" => ["long",  ["wstr", "wstr", "long"]],
+    "StrCmpNIW" => ["long",  ["wstr", "wstr", "long"]],
+    "StrStrW" => ["wstr",  ["wstr", "wstr"]],
+    "StrSpnW" => ["long",  ["wstr", "wstr"]],
+    "StrToIntW" => ["long",  ["wstr"]],
+    "SmoothScrollWindow" => ["long",  ["ptr"]],
+    "DPA_EnumCallback" => ["void",  ["long", "ptr", "long"]],
+    "DPA_DestroyCallback" => ["long",  ["long", "ptr", "long"]],
+    "DSA_EnumCallback" => ["void",  ["long", "ptr", "long"]],
+    "DSA_DestroyCallback" => ["long",  ["long", "ptr", "long"]],
+    "CreateMRUListW" => ["long",  ["ptr"]],
+    "AddMRUStringW" => ["long",  ["long", "wstr"]],
+    "FindMRUStringW" => ["long",  ["long", "wstr", "ptr"]],
+    "EnumMRUListW" => ["long",  ["long", "long", "ptr", "long"]],
+    "CreateMRUListLazyW" => ["long",  ["ptr", "long", "long", "long"]]
+};
+
+&wine::declare("comctl32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/comdlg32.pm b/programs/winetest/include/comdlg32.pm
new file mode 100644
index 0000000..33da2d0
--- /dev/null
+++ b/programs/winetest/include/comdlg32.pm
@@ -0,0 +1,40 @@
+package comdlg32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "ChooseColorA" => ["long",  ["ptr"]],
+    "ChooseColorW" => ["long",  ["ptr"]],
+    "ChooseFontA" => ["long",  ["ptr"]],
+    "ChooseFontW" => ["long",  ["ptr"]],
+    "CommDlgExtendedError" => ["long",  []],
+    "FindTextA" => ["long",  ["ptr"]],
+    "FindTextW" => ["long",  ["ptr"]],
+    "GetFileTitleA" => ["long",  ["str", "str", "long"]],
+    "GetFileTitleW" => ["long",  ["wstr", "wstr", "long"]],
+    "GetOpenFileNameA" => ["long",  ["ptr"]],
+    "GetOpenFileNameW" => ["long",  ["ptr"]],
+    "GetSaveFileNameA" => ["long",  ["ptr"]],
+    "GetSaveFileNameW" => ["long",  ["ptr"]],
+    "PageSetupDlgA" => ["long",  ["ptr"]],
+    "PageSetupDlgW" => ["long",  ["ptr"]],
+    "PrintDlgA" => ["long",  ["ptr"]],
+    "PrintDlgExA" => ["long",  ["ptr"]],
+    "PrintDlgExW" => ["long",  ["ptr"]],
+    "PrintDlgW" => ["long",  ["ptr"]],
+    "ReplaceTextA" => ["long",  ["ptr"]],
+    "ReplaceTextW" => ["long",  ["ptr"]]
+};
+
+&wine::declare("comdlg32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/dciman32.pm b/programs/winetest/include/dciman32.pm
new file mode 100644
index 0000000..980f9a5
--- /dev/null
+++ b/programs/winetest/include/dciman32.pm
@@ -0,0 +1,21 @@
+package dciman32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "DCICloseProvider" => ["void",  ["long"]],
+    "DCIOpenProvider" => ["long",  []]
+};
+
+&wine::declare("dciman32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/ddraw.pm b/programs/winetest/include/ddraw.pm
new file mode 100644
index 0000000..5661cd1
--- /dev/null
+++ b/programs/winetest/include/ddraw.pm
@@ -0,0 +1,26 @@
+package ddraw;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "DirectDrawCreate" => ["long",  ["ptr", "ptr", "ptr"]],
+    "DirectDrawEnumerateA" => ["long",  ["ptr", "ptr"]],
+    "DirectDrawEnumerateExA" => ["long",  ["ptr", "ptr", "long"]],
+    "DirectDrawEnumerateExW" => ["long",  ["ptr", "ptr", "long"]],
+    "DirectDrawEnumerateW" => ["long",  ["ptr", "ptr"]],
+    "DllCanUnloadNow" => ["long",  []],
+    "DllGetClassObject" => ["long",  ["ptr", "ptr", "ptr"]]
+};
+
+&wine::declare("ddraw",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/dinput.pm b/programs/winetest/include/dinput.pm
new file mode 100644
index 0000000..604a659
--- /dev/null
+++ b/programs/winetest/include/dinput.pm
@@ -0,0 +1,25 @@
+package dinput;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "DirectInputCreateA" => ["long",  ["long", "long", "ptr", "ptr"]],
+    "DirectInputCreateEx" => ["long",  ["long", "long", "ptr", "ptr", "ptr"]],
+    "DllCanUnloadNow" => ["long",  []],
+    "DllGetClassObject" => ["long",  ["ptr", "ptr", "ptr"]],
+    "DllRegisterServer" => ["long",  []],
+    "DllUnregisterServer" => ["long",  []]
+};
+
+&wine::declare("dinput",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/dplayx.pm b/programs/winetest/include/dplayx.pm
new file mode 100644
index 0000000..6d17021
--- /dev/null
+++ b/programs/winetest/include/dplayx.pm
@@ -0,0 +1,27 @@
+package dplayx;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "DirectPlayCreate" => ["long",  ["ptr", "ptr", "ptr"]],
+    "DirectPlayEnumerateA" => ["long",  ["ptr", "ptr"]],
+    "DirectPlayEnumerateW" => ["long",  ["ptr", "ptr"]],
+    "DirectPlayLobbyCreateA" => ["long",  ["ptr", "ptr", "ptr", "ptr", "long"]],
+    "DirectPlayLobbyCreateW" => ["long",  ["ptr", "ptr", "ptr", "ptr", "long"]],
+    "DirectPlayEnumerate" => ["long",  ["ptr", "ptr"]],
+    "DllCanUnloadNow" => ["long",  []],
+    "DllGetClassObject" => ["long",  ["ptr", "ptr", "ptr"]]
+};
+
+&wine::declare("dplayx",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/dsound.pm b/programs/winetest/include/dsound.pm
new file mode 100644
index 0000000..89612f9
--- /dev/null
+++ b/programs/winetest/include/dsound.pm
@@ -0,0 +1,27 @@
+package dsound;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "DirectSoundCreate" => ["long",  ["ptr", "ptr", "ptr"]],
+    "DirectSoundEnumerateA" => ["long",  ["ptr", "ptr"]],
+    "DirectSoundEnumerateW" => ["long",  ["ptr", "ptr"]],
+    "DllCanUnloadNow" => ["long",  []],
+    "DllGetClassObject" => ["long",  ["ptr", "ptr", "ptr"]],
+    "DirectSoundCaptureCreate" => ["long",  ["ptr", "ptr", "ptr"]],
+    "DirectSoundCaptureEnumerateA" => ["long",  ["ptr", "ptr"]],
+    "DirectSoundCaptureEnumerateW" => ["long",  ["ptr", "ptr"]]
+};
+
+&wine::declare("dsound",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/gdi32.pm b/programs/winetest/include/gdi32.pm
new file mode 100644
index 0000000..ce5a3c2
--- /dev/null
+++ b/programs/winetest/include/gdi32.pm
@@ -0,0 +1,328 @@
+package gdi32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "AbortDoc" => ["long",  ["long"]],
+    "AbortPath" => ["long",  ["long"]],
+    "AddFontResourceA" => ["long",  ["str"]],
+    "AddFontResourceW" => ["long",  ["wstr"]],
+    "AngleArc" => ["long",  ["long", "long", "long", "long", "long", "long"]],
+    "AnimatePalette" => ["long",  ["long", "long", "long", "ptr"]],
+    "Arc" => ["long",  ["long", "long", "long", "long", "long", "long", "long", "long", "long"]],
+    "ArcTo" => ["long",  ["long", "long", "long", "long", "long", "long", "long", "long", "long"]],
+    "BeginPath" => ["long",  ["long"]],
+    "BitBlt" => ["long",  ["long", "long", "long", "long", "long", "long", "long", "long", "long"]],
+    "ChoosePixelFormat" => ["long",  ["long", "ptr"]],
+    "Chord" => ["long",  ["long", "long", "long", "long", "long", "long", "long", "long", "long"]],
+    "CloseEnhMetaFile" => ["long",  ["long"]],
+    "CloseFigure" => ["long",  ["long"]],
+    "CloseMetaFile" => ["long",  ["long"]],
+    "CloseMetaFile16" => ["long",  ["long"]],
+    "CombineRgn" => ["long",  ["long", "long", "long", "long"]],
+    "CombineTransform" => ["long",  ["ptr", "ptr", "ptr"]],
+    "CopyEnhMetaFileA" => ["long",  ["long", "str"]],
+    "CopyMetaFileA" => ["long",  ["long", "str"]],
+    "CopyMetaFileW" => ["long",  ["long", "wstr"]],
+    "CreateBitmap" => ["long",  ["long", "long", "long", "long", "ptr"]],
+    "CreateBitmapIndirect" => ["long",  ["ptr"]],
+    "CreateBrushIndirect" => ["long",  ["ptr"]],
+    "CreateColorSpaceA" => ["long",  ["ptr"]],
+    "CreateColorSpaceW" => ["long",  ["ptr"]],
+    "CreateCompatibleBitmap" => ["long",  ["long", "long", "long"]],
+    "CreateCompatibleDC" => ["long",  ["long"]],
+    "CreateDCA" => ["long",  ["str", "str", "str", "ptr"]],
+    "CreateDCW" => ["long",  ["wstr", "wstr", "wstr", "ptr"]],
+    "CreateDIBPatternBrush" => ["long",  ["long", "long"]],
+    "CreateDIBPatternBrushPt" => ["long",  ["ptr", "long"]],
+    "CreateDIBSection" => ["long",  ["long", "ptr", "long", "ptr", "long", "long"]],
+    "CreateDIBitmap" => ["long",  ["long", "ptr", "long", "ptr", "ptr", "long"]],
+    "CreateDiscardableBitmap" => ["long",  ["long", "long", "long"]],
+    "CreateEllipticRgn" => ["long",  ["long", "long", "long", "long"]],
+    "CreateEllipticRgnIndirect" => ["long",  ["ptr"]],
+    "CreateEnhMetaFileA" => ["long",  ["long", "str", "ptr", "str"]],
+    "CreateEnhMetaFileW" => ["long",  ["long", "wstr", "ptr", "wstr"]],
+    "CreateFontA" => ["long",  ["long", "long", "long", "long", "long", "long", "long", "long", "long", "long", "long", "long", "long", "str"]],
+    "CreateFontIndirectA" => ["long",  ["ptr"]],
+    "CreateFontIndirectW" => ["long",  ["ptr"]],
+    "CreateFontW" => ["long",  ["long", "long", "long", "long", "long", "long", "long", "long", "long", "long", "long", "long", "long", "wstr"]],
+    "CreateHalftonePalette" => ["long",  ["long"]],
+    "CreateHatchBrush" => ["long",  ["long", "long"]],
+    "CreateICA" => ["long",  ["str", "str", "str", "ptr"]],
+    "CreateICW" => ["long",  ["wstr", "wstr", "wstr", "ptr"]],
+    "CreateMetaFile16" => ["long",  ["str"]],
+    "CreateMetaFileA" => ["long",  ["str"]],
+    "CreateMetaFileW" => ["long",  ["wstr"]],
+    "CreatePalette" => ["long",  ["ptr"]],
+    "CreatePatternBrush" => ["long",  ["long"]],
+    "CreatePen" => ["long",  ["long", "long", "long"]],
+    "CreatePenIndirect" => ["long",  ["ptr"]],
+    "CreatePolyPolygonRgn" => ["long",  ["ptr", "ptr", "long", "long"]],
+    "CreatePolygonRgn" => ["long",  ["ptr", "long", "long"]],
+    "CreateRectRgn" => ["long",  ["long", "long", "long", "long"]],
+    "CreateRectRgnIndirect" => ["long",  ["ptr"]],
+    "CreateRoundRectRgn" => ["long",  ["long", "long", "long", "long", "long", "long"]],
+    "CreateScalableFontResourceA" => ["long",  ["long", "str", "str", "str"]],
+    "CreateScalableFontResourceW" => ["long",  ["long", "wstr", "wstr", "wstr"]],
+    "CreateSolidBrush" => ["long",  ["long"]],
+    "DPtoLP" => ["long",  ["long", "ptr", "long"]],
+    "DeleteColorSpace" => ["long",  ["long"]],
+    "DeleteDC" => ["long",  ["long"]],
+    "DeleteEnhMetaFile" => ["long",  ["long"]],
+    "DeleteMetaFile" => ["long",  ["long"]],
+    "DeleteObject" => ["long",  ["long"]],
+    "DescribePixelFormat" => ["long",  ["long", "long", "long", "ptr"]],
+    "DrawEscape" => ["long",  ["long", "long", "long", "str"]],
+    "Ellipse" => ["long",  ["long", "long", "long", "long", "long"]],
+    "EndDoc" => ["long",  ["long"]],
+    "EndPage" => ["long",  ["long"]],
+    "EndPath" => ["long",  ["long"]],
+    "EnumEnhMetaFile" => ["long",  ["long", "long", "ptr", "ptr", "ptr"]],
+    "EnumFontFamiliesA" => ["long",  ["long", "str", "ptr", "long"]],
+    "EnumFontFamiliesExA" => ["long",  ["long", "ptr", "ptr", "long", "long"]],
+    "EnumFontFamiliesExW" => ["long",  ["long", "ptr", "ptr", "long", "long"]],
+    "EnumFontFamiliesW" => ["long",  ["long", "wstr", "ptr", "long"]],
+    "EnumFontsA" => ["long",  ["long", "str", "ptr", "long"]],
+    "EnumFontsW" => ["long",  ["long", "wstr", "ptr", "long"]],
+    "EnumMetaFile" => ["long",  ["long", "long", "ptr", "long"]],
+    "EnumObjects" => ["long",  ["long", "long", "ptr", "long"]],
+    "EqualRgn" => ["long",  ["long", "long"]],
+    "Escape" => ["long",  ["long", "long", "long", "str", "ptr"]],
+    "ExcludeClipRect" => ["long",  ["long", "long", "long", "long", "long"]],
+    "ExtCreatePen" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "ExtCreateRegion" => ["long",  ["ptr", "long", "ptr"]],
+    "ExtEscape" => ["long",  ["long", "long", "long", "str", "long", "str"]],
+    "ExtFloodFill" => ["long",  ["long", "long", "long", "long", "long"]],
+    "ExtSelectClipRgn" => ["long",  ["long", "long", "long"]],
+    "ExtTextOutA" => ["long",  ["long", "long", "long", "long", "ptr", "str", "long", "ptr"]],
+    "ExtTextOutW" => ["long",  ["long", "long", "long", "long", "ptr", "wstr", "long", "ptr"]],
+    "FillPath" => ["long",  ["long"]],
+    "FillRgn" => ["long",  ["long", "long", "long"]],
+    "FixBrushOrgEx" => ["long",  ["long", "long", "long", "ptr"]],
+    "FlattenPath" => ["long",  ["long"]],
+    "FloodFill" => ["long",  ["long", "long", "long", "long"]],
+    "FrameRgn" => ["long",  ["long", "long", "long", "long", "long"]],
+    "GdiComment" => ["long",  ["long", "long", "ptr"]],
+    "GdiFlush" => ["long",  []],
+    "GdiGetBatchLimit" => ["long",  []],
+    "GdiSetBatchLimit" => ["long",  ["long"]],
+    "GetArcDirection" => ["long",  ["long"]],
+    "GetAspectRatioFilterEx" => ["long",  ["long", "ptr"]],
+    "GetBitmapBits" => ["long",  ["long", "long", "ptr"]],
+    "GetBitmapDimensionEx" => ["long",  ["long", "ptr"]],
+    "GetBkColor" => ["long",  ["long"]],
+    "GetBkMode" => ["long",  ["long"]],
+    "GetBoundsRect" => ["long",  ["long", "ptr", "long"]],
+    "GetBrushOrgEx" => ["long",  ["long", "ptr"]],
+    "GetCharABCWidthsA" => ["long",  ["long", "long", "long", "ptr"]],
+    "GetCharABCWidthsFloatA" => ["long",  ["long", "long", "long", "ptr"]],
+    "GetCharABCWidthsFloatW" => ["long",  ["long", "long", "long", "ptr"]],
+    "GetCharABCWidthsW" => ["long",  ["long", "long", "long", "ptr"]],
+    "GetCharWidth32A" => ["long",  ["long", "long", "long", "ptr"]],
+    "GetCharWidth32W" => ["long",  ["long", "long", "long", "ptr"]],
+    "GetCharWidthA" => ["long",  ["long", "long", "long", "ptr"]],
+    "GetCharWidthFloatA" => ["long",  ["long", "long", "long", "ptr"]],
+    "GetCharWidthFloatW" => ["long",  ["long", "long", "long", "ptr"]],
+    "GetCharWidthW" => ["long",  ["long", "long", "long", "ptr"]],
+    "GetCharacterPlacementA" => ["long",  ["long", "str", "long", "long", "ptr", "long"]],
+    "GetCharacterPlacementW" => ["long",  ["long", "wstr", "long", "long", "ptr", "long"]],
+    "GetClipBox" => ["long",  ["long", "ptr"]],
+    "GetClipRgn" => ["long",  ["long", "long"]],
+    "GetColorAdjustment" => ["long",  ["long", "ptr"]],
+    "GetColorSpace" => ["long",  ["long"]],
+    "GetCurrentObject" => ["long",  ["long", "long"]],
+    "GetCurrentPositionEx" => ["long",  ["long", "ptr"]],
+    "GetDCOrgEx" => ["long",  ["long", "ptr"]],
+    "GetDIBColorTable" => ["long",  ["long", "long", "long", "ptr"]],
+    "GetDIBits" => ["long",  ["long", "long", "long", "long", "ptr", "ptr", "long"]],
+    "GetDeviceCaps" => ["long",  ["long", "long"]],
+    "GetDeviceGammaRamp" => ["long",  ["long", "ptr"]],
+    "GetEnhMetaFileA" => ["long",  ["str"]],
+    "GetEnhMetaFileBits" => ["long",  ["long", "long", "ptr"]],
+    "GetEnhMetaFileDescriptionA" => ["long",  ["long", "long", "str"]],
+    "GetEnhMetaFileDescriptionW" => ["long",  ["long", "long", "wstr"]],
+    "GetEnhMetaFileHeader" => ["long",  ["long", "long", "ptr"]],
+    "GetEnhMetaFilePaletteEntries" => ["long",  ["long", "long", "ptr"]],
+    "GetEnhMetaFileW" => ["long",  ["wstr"]],
+    "GetFontData" => ["long",  ["long", "long", "long", "ptr", "long"]],
+    "GetFontLanguageInfo" => ["long",  ["long"]],
+    "GetGlyphOutlineA" => ["long",  ["long", "long", "long", "ptr", "long", "ptr", "ptr"]],
+    "GetGlyphOutlineW" => ["long",  ["long", "long", "long", "ptr", "long", "ptr", "ptr"]],
+    "GetGraphicsMode" => ["long",  ["long"]],
+    "GetICMProfileA" => ["long",  ["long", "ptr", "str"]],
+    "GetKerningPairsA" => ["long",  ["long", "long", "ptr"]],
+    "GetKerningPairsW" => ["long",  ["long", "long", "ptr"]],
+    "GetLayout" => ["long",  ["long"]],
+    "GetMapMode" => ["long",  ["long"]],
+    "GetMetaFileA" => ["long",  ["str"]],
+    "GetMetaFileBitsEx" => ["long",  ["long", "long", "ptr"]],
+    "GetMetaFileW" => ["long",  ["wstr"]],
+    "GetMetaRgn" => ["long",  ["long", "long"]],
+    "GetMiterLimit" => ["long",  ["long", "ptr"]],
+    "GetNearestColor" => ["long",  ["long", "long"]],
+    "GetNearestPaletteIndex" => ["long",  ["long", "long"]],
+    "GetObjectA" => ["long",  ["long", "long", "ptr"]],
+    "GetObjectType" => ["long",  ["long"]],
+    "GetObjectW" => ["long",  ["long", "long", "ptr"]],
+    "GetOutlineTextMetricsA" => ["long",  ["long", "long", "ptr"]],
+    "GetOutlineTextMetricsW" => ["long",  ["long", "long", "ptr"]],
+    "GetPaletteEntries" => ["long",  ["long", "long", "long", "ptr"]],
+    "GetPath" => ["long",  ["long", "ptr", "ptr", "long"]],
+    "GetPixel" => ["long",  ["long", "long", "long"]],
+    "GetPixelFormat" => ["long",  ["long"]],
+    "GetPolyFillMode" => ["long",  ["long"]],
+    "GetROP2" => ["long",  ["long"]],
+    "GetRandomRgn" => ["long",  ["long", "long", "long"]],
+    "GetRasterizerCaps" => ["long",  ["ptr", "long"]],
+    "GetRegionData" => ["long",  ["long", "long", "ptr"]],
+    "GetRelAbs" => ["long",  ["long", "long"]],
+    "GetRgnBox" => ["long",  ["long", "ptr"]],
+    "GetStockObject" => ["long",  ["long"]],
+    "GetStretchBltMode" => ["long",  ["long"]],
+    "GetSystemPaletteEntries" => ["long",  ["long", "long", "long", "ptr"]],
+    "GetSystemPaletteUse" => ["long",  ["long"]],
+    "GetTextAlign" => ["long",  ["long"]],
+    "GetTextCharacterExtra" => ["long",  ["long"]],
+    "GetTextCharset" => ["long",  ["long"]],
+    "GetTextCharsetInfo" => ["long",  ["long", "ptr", "long"]],
+    "GetTextColor" => ["long",  ["long"]],
+    "GetTextExtentExPointA" => ["long",  ["long", "str", "long", "long", "ptr", "ptr", "ptr"]],
+    "GetTextExtentExPointW" => ["long",  ["long", "wstr", "long", "long", "ptr", "ptr", "ptr"]],
+    "GetTextExtentPoint32A" => ["long",  ["long", "str", "long", "ptr"]],
+    "GetTextExtentPoint32W" => ["long",  ["long", "wstr", "long", "ptr"]],
+    "GetTextExtentPointA" => ["long",  ["long", "str", "long", "ptr"]],
+    "GetTextExtentPointW" => ["long",  ["long", "wstr", "long", "ptr"]],
+    "GetTextFaceA" => ["long",  ["long", "long", "str"]],
+    "GetTextFaceW" => ["long",  ["long", "long", "wstr"]],
+    "GetTextMetricsA" => ["long",  ["long", "ptr"]],
+    "GetTextMetricsW" => ["long",  ["long", "ptr"]],
+    "GetViewportExtEx" => ["long",  ["long", "ptr"]],
+    "GetViewportOrgEx" => ["long",  ["long", "ptr"]],
+    "GetWinMetaFileBits" => ["long",  ["long", "long", "ptr", "long", "long"]],
+    "GetWindowExtEx" => ["long",  ["long", "ptr"]],
+    "GetWindowOrgEx" => ["long",  ["long", "ptr"]],
+    "GetWorldTransform" => ["long",  ["long", "ptr"]],
+    "IntersectClipRect" => ["long",  ["long", "long", "long", "long", "long"]],
+    "InvertRgn" => ["long",  ["long", "long"]],
+    "LPtoDP" => ["long",  ["long", "ptr", "long"]],
+    "LineDDA" => ["long",  ["long", "long", "long", "long", "ptr", "long"]],
+    "LineTo" => ["long",  ["long", "long", "long"]],
+    "MaskBlt" => ["long",  ["long", "long", "long", "long", "long", "long", "long", "long", "long", "long", "long", "long"]],
+    "ModifyWorldTransform" => ["long",  ["long", "ptr", "long"]],
+    "MoveToEx" => ["long",  ["long", "long", "long", "ptr"]],
+    "OffsetClipRgn" => ["long",  ["long", "long", "long"]],
+    "OffsetRgn" => ["long",  ["long", "long", "long"]],
+    "OffsetViewportOrgEx" => ["long",  ["long", "long", "long", "ptr"]],
+    "OffsetWindowOrgEx" => ["long",  ["long", "long", "long", "ptr"]],
+    "PaintRgn" => ["long",  ["long", "long"]],
+    "PatBlt" => ["long",  ["long", "long", "long", "long", "long", "long"]],
+    "PathToRegion" => ["long",  ["long"]],
+    "Pie" => ["long",  ["long", "long", "long", "long", "long", "long", "long", "long", "long"]],
+    "PlayEnhMetaFile" => ["long",  ["long", "long", "ptr"]],
+    "PlayEnhMetaFileRecord" => ["long",  ["long", "ptr", "ptr", "long"]],
+    "PlayMetaFile" => ["long",  ["long", "long"]],
+    "PlayMetaFileRecord" => ["long",  ["long", "ptr", "ptr", "long"]],
+    "PlgBlt" => ["long",  ["long", "ptr", "long", "long", "long", "long", "long", "long", "long", "long"]],
+    "PolyBezier" => ["long",  ["long", "ptr", "long"]],
+    "PolyBezierTo" => ["long",  ["long", "ptr", "long"]],
+    "PolyDraw" => ["long",  ["long", "ptr", "ptr", "long"]],
+    "PolyPolygon" => ["long",  ["long", "ptr", "ptr", "long"]],
+    "PolyPolyline" => ["long",  ["long", "ptr", "ptr", "long"]],
+    "PolyTextOutA" => ["long",  ["long", "ptr", "long"]],
+    "PolyTextOutW" => ["long",  ["long", "ptr", "long"]],
+    "Polygon" => ["long",  ["long", "ptr", "long"]],
+    "Polyline" => ["long",  ["long", "ptr", "long"]],
+    "PolylineTo" => ["long",  ["long", "ptr", "long"]],
+    "PtInRegion" => ["long",  ["long", "long", "long"]],
+    "PtVisible" => ["long",  ["long", "long", "long"]],
+    "RealizePalette" => ["long",  ["long"]],
+    "RectInRegion" => ["long",  ["long", "ptr"]],
+    "RectVisible" => ["long",  ["long", "ptr"]],
+    "Rectangle" => ["long",  ["long", "long", "long", "long", "long"]],
+    "RemoveFontResourceA" => ["long",  ["str"]],
+    "RemoveFontResourceW" => ["long",  ["wstr"]],
+    "ResetDCA" => ["long",  ["long", "ptr"]],
+    "ResetDCW" => ["long",  ["long", "ptr"]],
+    "ResizePalette" => ["long",  ["long", "long"]],
+    "RestoreDC" => ["long",  ["long", "long"]],
+    "RoundRect" => ["long",  ["long", "long", "long", "long", "long", "long", "long"]],
+    "SaveDC" => ["long",  ["long"]],
+    "ScaleViewportExtEx" => ["long",  ["long", "long", "long", "long", "long", "ptr"]],
+    "ScaleWindowExtEx" => ["long",  ["long", "long", "long", "long", "long", "ptr"]],
+    "SelectClipPath" => ["long",  ["long", "long"]],
+    "SelectClipRgn" => ["long",  ["long", "long"]],
+    "SelectObject" => ["long",  ["long", "long"]],
+    "SelectPalette" => ["long",  ["long", "long", "long"]],
+    "SetAbortProc" => ["long",  ["long", "ptr"]],
+    "SetArcDirection" => ["long",  ["long", "long"]],
+    "SetBitmapBits" => ["long",  ["long", "long", "ptr"]],
+    "SetBitmapDimensionEx" => ["long",  ["long", "long", "long", "ptr"]],
+    "SetBkColor" => ["long",  ["long", "long"]],
+    "SetBkMode" => ["long",  ["long", "long"]],
+    "SetBoundsRect" => ["long",  ["long", "ptr", "long"]],
+    "SetBrushOrgEx" => ["long",  ["long", "long", "long", "ptr"]],
+    "SetColorAdjustment" => ["long",  ["long", "ptr"]],
+    "SetColorSpace" => ["long",  ["long", "long"]],
+    "SetDCHook" => ["long",  ["long", "ptr", "long"]],
+    "SetDIBColorTable" => ["long",  ["long", "long", "long", "ptr"]],
+    "SetDIBits" => ["long",  ["long", "long", "long", "long", "ptr", "ptr", "long"]],
+    "SetDIBitsToDevice" => ["long",  ["long", "long", "long", "long", "long", "long", "long", "long", "long", "ptr", "ptr", "long"]],
+    "SetDeviceGammaRamp" => ["long",  ["long", "ptr"]],
+    "SetEnhMetaFileBits" => ["long",  ["long", "ptr"]],
+    "SetGraphicsMode" => ["long",  ["long", "long"]],
+    "SetICMMode" => ["long",  ["long", "long"]],
+    "SetLayout" => ["long",  ["long", "long"]],
+    "SetMapMode" => ["long",  ["long", "long"]],
+    "SetMapperFlags" => ["long",  ["long", "long"]],
+    "SetMetaFileBitsEx" => ["long",  ["long", "ptr"]],
+    "SetMetaRgn" => ["long",  ["long"]],
+    "SetMiterLimit" => ["long",  ["long", "long", "ptr"]],
+    "SetObjectOwner" => ["void",  ["long", "long"]],
+    "SetPaletteEntries" => ["long",  ["long", "long", "long", "ptr"]],
+    "SetPixel" => ["long",  ["long", "long", "long", "long"]],
+    "SetPixelFormat" => ["long",  ["long", "long", "ptr"]],
+    "SetPixelV" => ["long",  ["long", "long", "long", "long"]],
+    "SetPolyFillMode" => ["long",  ["long", "long"]],
+    "SetROP2" => ["long",  ["long", "long"]],
+    "SetRectRgn" => ["long",  ["long", "long", "long", "long", "long"]],
+    "SetRelAbs" => ["long",  ["long", "long"]],
+    "SetStretchBltMode" => ["long",  ["long", "long"]],
+    "SetSystemPaletteUse" => ["long",  ["long", "long"]],
+    "SetTextAlign" => ["long",  ["long", "long"]],
+    "SetTextCharacterExtra" => ["long",  ["long", "long"]],
+    "SetTextColor" => ["long",  ["long", "long"]],
+    "SetTextJustification" => ["long",  ["long", "long", "long"]],
+    "SetViewportExtEx" => ["long",  ["long", "long", "long", "ptr"]],
+    "SetViewportOrgEx" => ["long",  ["long", "long", "long", "ptr"]],
+    "SetWinMetaFileBits" => ["long",  ["long", "ptr", "long", "ptr"]],
+    "SetWindowExtEx" => ["long",  ["long", "long", "long", "ptr"]],
+    "SetWindowOrgEx" => ["long",  ["long", "long", "long", "ptr"]],
+    "SetWorldTransform" => ["long",  ["long", "ptr"]],
+    "StartDocA" => ["long",  ["long", "ptr"]],
+    "StartDocW" => ["long",  ["long", "ptr"]],
+    "StartPage" => ["long",  ["long"]],
+    "StretchBlt" => ["long",  ["long", "long", "long", "long", "long", "long", "long", "long", "long", "long", "long"]],
+    "StretchDIBits" => ["long",  ["long", "long", "long", "long", "long", "long", "long", "long", "long", "ptr", "ptr", "long", "long"]],
+    "StrokeAndFillPath" => ["long",  ["long"]],
+    "StrokePath" => ["long",  ["long"]],
+    "SwapBuffers" => ["long",  ["long"]],
+    "TextOutA" => ["long",  ["long", "long", "long", "str", "long"]],
+    "TextOutW" => ["long",  ["long", "long", "long", "wstr", "long"]],
+    "TranslateCharsetInfo" => ["long",  ["ptr", "ptr", "long"]],
+    "UnrealizeObject" => ["long",  ["long"]],
+    "UpdateColors" => ["long",  ["long"]],
+    "WidenPath" => ["long",  ["long"]]
+};
+
+&wine::declare("gdi32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/glu32.pm b/programs/winetest/include/glu32.pm
new file mode 100644
index 0000000..de66fe6
--- /dev/null
+++ b/programs/winetest/include/glu32.pm
@@ -0,0 +1,64 @@
+package glu32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "gluBeginCurve" => ["long",  ["ptr"]],
+    "gluBeginPolygon" => ["long",  ["ptr"]],
+    "gluBeginSurface" => ["long",  ["ptr"]],
+    "gluBeginTrim" => ["long",  ["ptr"]],
+    "gluBuild1DMipmaps" => ["long",  ["long", "long", "long", "long", "long", "ptr"]],
+    "gluBuild2DMipmaps" => ["long",  ["long", "long", "long", "long", "long", "long", "ptr"]],
+    "gluCheckExtension" => ["long",  ["ptr", "ptr"]],
+    "gluCylinder" => ["long",  ["ptr", "double", "double", "double", "long", "long"]],
+    "gluDeleteNurbsRenderer" => ["long",  ["ptr"]],
+    "gluDeleteQuadric" => ["long",  ["ptr"]],
+    "gluDeleteTess" => ["long",  ["ptr"]],
+    "gluDisk" => ["long",  ["ptr", "double", "double", "long", "long"]],
+    "gluEndCurve" => ["long",  ["ptr"]],
+    "gluEndPolygon" => ["long",  ["ptr"]],
+    "gluEndSurface" => ["long",  ["ptr"]],
+    "gluEndTrim" => ["long",  ["ptr"]],
+    "gluErrorString" => ["long",  ["long"]],
+    "gluGetNurbsProperty" => ["long",  ["ptr", "long", "ptr"]],
+    "gluGetString" => ["long",  ["long"]],
+    "gluLoadSamplingMatrices" => ["long",  ["ptr", "ptr", "ptr", "ptr"]],
+    "gluLookAt" => ["long",  ["double", "double", "double", "double", "double", "double", "double", "double", "double"]],
+    "gluNewNurbsRenderer" => ["long",  ["undef"]],
+    "gluNewQuadric" => ["long",  ["undef"]],
+    "gluNewTess" => ["long",  ["undef"]],
+    "gluNextContour" => ["long",  ["ptr", "long"]],
+    "gluNurbsCallback" => ["long",  ["ptr", "long", "ptr"]],
+    "gluNurbsCurve" => ["long",  ["ptr", "long", "ptr", "long", "ptr", "long", "long"]],
+    "gluNurbsProperty" => ["long",  ["ptr", "long", "long"]],
+    "gluNurbsSurface" => ["long",  ["ptr", "long", "ptr", "long", "ptr", "long", "long", "ptr", "long", "long", "long"]],
+    "gluOrtho2D" => ["long",  ["double", "double", "double", "double"]],
+    "gluPartialDisk" => ["long",  ["ptr", "double", "double", "long", "long", "double", "double"]],
+    "gluPerspective" => ["long",  ["double", "double", "double", "double"]],
+    "gluPickMatrix" => ["long",  ["double", "double", "double", "double", "ptr"]],
+    "gluProject" => ["long",  ["double", "double", "double", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr"]],
+    "gluPwlCurve" => ["long",  ["ptr", "long", "ptr", "long", "long"]],
+    "gluQuadricCallback" => ["long",  ["ptr", "long", "ptr"]],
+    "gluQuadricDrawStyle" => ["long",  ["ptr", "long"]],
+    "gluQuadricNormals" => ["long",  ["ptr", "long"]],
+    "gluQuadricOrientation" => ["long",  ["ptr", "long"]],
+    "gluQuadricTexture" => ["long",  ["ptr", "long"]],
+    "gluScaleImage" => ["long",  ["long", "long", "long", "long", "ptr", "long", "long", "long", "ptr"]],
+    "gluSphere" => ["long",  ["ptr", "double", "long", "long"]],
+    "gluTessCallback" => ["long",  ["ptr", "long", "ptr"]],
+    "gluTessVertex" => ["long",  ["ptr", "ptr", "ptr"]],
+    "gluUnProject" => ["long",  ["double", "double", "double", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr"]]
+};
+
+&wine::declare("glu32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/icmp.pm b/programs/winetest/include/icmp.pm
new file mode 100644
index 0000000..3b10c0c
--- /dev/null
+++ b/programs/winetest/include/icmp.pm
@@ -0,0 +1,22 @@
+package icmp;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "IcmpCloseHandle" => ["long",  ["long"]],
+    "IcmpCreateFile" => ["long",  []],
+    "IcmpSendEcho" => ["long",  ["long", "long", "ptr", "long", "ptr", "ptr", "long", "long"]]
+};
+
+&wine::declare("icmp",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/imagehlp.pm b/programs/winetest/include/imagehlp.pm
new file mode 100644
index 0000000..ee9a218
--- /dev/null
+++ b/programs/winetest/include/imagehlp.pm
@@ -0,0 +1,79 @@
+package imagehlp;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "BindImage" => ["long",  ["str", "str", "str"]],
+    "BindImageEx" => ["long",  ["long", "str", "str", "str", "ptr"]],
+    "CheckSumMappedFile" => ["ptr",  ["ptr", "long", "ptr", "ptr"]],
+    "EnumerateLoadedModules" => ["long",  ["long", "ptr", "ptr"]],
+    "FindDebugInfoFile" => ["long",  ["str", "str", "str"]],
+    "FindExecutableImage" => ["long",  ["str", "str", "str"]],
+    "GetImageConfigInformation" => ["long",  ["ptr", "ptr"]],
+    "GetImageUnusedHeaderBytes" => ["long",  ["ptr", "ptr"]],
+    "GetTimestampForLoadedLibrary" => ["long",  ["long"]],
+    "ImageAddCertificate" => ["long",  ["long", "ptr", "ptr"]],
+    "ImageDirectoryEntryToData" => ["ptr",  ["ptr", "long", "long", "ptr"]],
+    "ImageEnumerateCertificates" => ["long",  ["long", "long", "ptr", "ptr", "long"]],
+    "ImageGetCertificateData" => ["long",  ["long", "long", "ptr", "ptr"]],
+    "ImageGetCertificateHeader" => ["long",  ["long", "long", "ptr"]],
+    "ImageGetDigestStream" => ["long",  ["long", "long", "ptr", "ptr"]],
+    "ImageLoad" => ["ptr",  ["str", "str"]],
+    "ImageNtHeader" => ["ptr",  ["ptr"]],
+    "ImageRemoveCertificate" => ["long",  ["long", "long"]],
+    "ImageRvaToSection" => ["ptr",  ["ptr", "ptr", "long"]],
+    "ImageRvaToVa" => ["ptr",  ["ptr", "ptr", "long", "ptr"]],
+    "ImageUnload" => ["long",  ["ptr"]],
+    "ImagehlpApiVersion" => ["ptr",  ["undef"]],
+    "ImagehlpApiVersionEx" => ["ptr",  ["ptr"]],
+    "MakeSureDirectoryPathExists" => ["long",  ["str"]],
+    "MapAndLoad" => ["long",  ["str", "str", "ptr", "long", "long"]],
+    "MapDebugInformation" => ["ptr",  ["long", "str", "str", "long"]],
+    "MapFileAndCheckSumA" => ["long",  ["str", "ptr", "ptr"]],
+    "MapFileAndCheckSumW" => ["long",  ["wstr", "ptr", "ptr"]],
+    "ReBaseImage" => ["long",  ["str", "str", "long", "long", "long", "long", "ptr", "ptr", "ptr", "ptr", "long"]],
+    "RemovePrivateCvSymbolic" => ["long",  ["ptr", "ptr", "ptr"]],
+    "RemoveRelocations" => ["void",  ["ptr"]],
+    "SearchTreeForFile" => ["long",  ["str", "str", "str"]],
+    "SetImageConfigInformation" => ["long",  ["ptr", "ptr"]],
+    "SplitSymbols" => ["long",  ["str", "str", "str", "long"]],
+    "StackWalk" => ["long",  ["long", "long", "long", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr"]],
+    "SymCleanup" => ["long",  ["long"]],
+    "SymEnumerateModules" => ["long",  ["long", "ptr", "ptr"]],
+    "SymEnumerateSymbols" => ["long",  ["long", "long", "ptr", "ptr"]],
+    "SymFunctionTableAccess" => ["ptr",  ["long", "long"]],
+    "SymGetModuleBase" => ["long",  ["long", "long"]],
+    "SymGetModuleInfo" => ["long",  ["long", "long", "ptr"]],
+    "SymGetOptions" => ["long",  ["undef"]],
+    "SymGetSearchPath" => ["long",  ["long", "str", "long"]],
+    "SymGetSymFromAddr" => ["long",  ["long", "long", "ptr", "ptr"]],
+    "SymGetSymFromName" => ["long",  ["long", "str", "ptr"]],
+    "SymGetSymNext" => ["long",  ["long", "ptr"]],
+    "SymGetSymPrev" => ["long",  ["long", "ptr"]],
+    "SymInitialize" => ["long",  ["long", "str", "long"]],
+    "SymLoadModule" => ["long",  ["long", "long", "str", "str", "long", "long"]],
+    "SymRegisterCallback" => ["long",  ["long", "ptr", "ptr"]],
+    "SymSetOptions" => ["long",  ["long"]],
+    "SymSetSearchPath" => ["long",  ["long", "str"]],
+    "SymUnDName" => ["long",  ["ptr", "str", "long"]],
+    "SymUnloadModule" => ["long",  ["long", "long"]],
+    "TouchFileTimes" => ["long",  ["long", "ptr"]],
+    "UnDecorateSymbolName" => ["long",  ["str", "str", "long", "long"]],
+    "UnMapAndLoad" => ["long",  ["ptr"]],
+    "UnmapDebugInformation" => ["long",  ["ptr"]],
+    "UpdateDebugInfoFile" => ["long",  ["str", "str", "str", "ptr"]],
+    "UpdateDebugInfoFileEx" => ["long",  ["str", "str", "str", "ptr", "long"]]
+};
+
+&wine::declare("imagehlp",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/imm32.pm b/programs/winetest/include/imm32.pm
new file mode 100644
index 0000000..d1dbb0b
--- /dev/null
+++ b/programs/winetest/include/imm32.pm
@@ -0,0 +1,92 @@
+package imm32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "ImmAssociateContext" => ["long",  ["long", "long"]],
+    "ImmConfigureIMEA" => ["long",  ["long", "long", "long", "ptr"]],
+    "ImmConfigureIMEW" => ["long",  ["long", "long", "long", "ptr"]],
+    "ImmCreateContext" => ["long",  []],
+    "ImmCreateIMCC" => ["long",  ["long"]],
+    "ImmCreateSoftKeyboard" => ["long",  ["long", "long", "long", "long"]],
+    "ImmDestroyContext" => ["long",  ["long"]],
+    "ImmDestroyIMCC" => ["long",  ["long"]],
+    "ImmDestroySoftKeyboard" => ["long",  ["long"]],
+    "ImmEnumRegisterWordA" => ["long",  ["long", "ptr", "str", "long", "str", "ptr"]],
+    "ImmEnumRegisterWordW" => ["long",  ["long", "ptr", "wstr", "long", "wstr", "ptr"]],
+    "ImmEscapeA" => ["long",  ["long", "long", "long", "ptr"]],
+    "ImmEscapeW" => ["long",  ["long", "long", "long", "ptr"]],
+    "ImmGenerateMessage" => ["long",  ["long"]],
+    "ImmGetCandidateListA" => ["long",  ["long", "long", "ptr", "long"]],
+    "ImmGetCandidateListCountA" => ["long",  ["long", "ptr"]],
+    "ImmGetCandidateListCountW" => ["long",  ["long", "ptr"]],
+    "ImmGetCandidateListW" => ["long",  ["long", "long", "ptr", "long"]],
+    "ImmGetCandidateWindow" => ["long",  ["long", "long", "ptr"]],
+    "ImmGetCompositionFontA" => ["long",  ["long", "ptr"]],
+    "ImmGetCompositionFontW" => ["long",  ["long", "ptr"]],
+    "ImmGetCompositionStringA" => ["long",  ["long", "long", "ptr", "long"]],
+    "ImmGetCompositionStringW" => ["long",  ["long", "long", "ptr", "long"]],
+    "ImmGetCompositionWindow" => ["long",  ["long", "ptr"]],
+    "ImmGetContext" => ["long",  ["long"]],
+    "ImmGetConversionListA" => ["long",  ["long", "long", "str", "ptr", "long", "long"]],
+    "ImmGetConversionListW" => ["long",  ["long", "long", "wstr", "ptr", "long", "long"]],
+    "ImmGetConversionStatus" => ["long",  ["long", "ptr", "ptr"]],
+    "ImmGetDefaultIMEWnd" => ["long",  ["long"]],
+    "ImmGetDescriptionA" => ["long",  ["long", "str", "long"]],
+    "ImmGetDescriptionW" => ["long",  ["long", "wstr", "long"]],
+    "ImmGetGuideLineA" => ["long",  ["long", "long", "str", "long"]],
+    "ImmGetGuideLineW" => ["long",  ["long", "long", "wstr", "long"]],
+    "ImmGetHotKey" => ["long",  ["long", "ptr", "ptr", "ptr"]],
+    "ImmGetIMCCLockCount" => ["long",  ["long"]],
+    "ImmGetIMCCSize" => ["long",  ["long"]],
+    "ImmGetIMCLockCount" => ["long",  ["long"]],
+    "ImmGetIMEFileNameA" => ["long",  ["long", "str", "long"]],
+    "ImmGetIMEFileNameW" => ["long",  ["long", "wstr", "long"]],
+    "ImmGetOpenStatus" => ["long",  ["long"]],
+    "ImmGetProperty" => ["long",  ["long", "long"]],
+    "ImmGetRegisterWordStyleA" => ["long",  ["long", "long", "ptr"]],
+    "ImmGetRegisterWordStyleW" => ["long",  ["long", "long", "ptr"]],
+    "ImmGetStatusWindowPos" => ["long",  ["long", "ptr"]],
+    "ImmGetVirtualKey" => ["long",  ["long"]],
+    "ImmInstallIMEA" => ["long",  ["str", "str"]],
+    "ImmInstallIMEW" => ["long",  ["wstr", "wstr"]],
+    "ImmIsIME" => ["long",  ["long"]],
+    "ImmIsUIMessageA" => ["long",  ["long", "long", "long", "long"]],
+    "ImmIsUIMessageW" => ["long",  ["long", "long", "long", "long"]],
+    "ImmLockIMC" => ["ptr",  ["long"]],
+    "ImmLockIMCC" => ["ptr",  ["long"]],
+    "ImmNotifyIME" => ["long",  ["long", "long", "long", "long"]],
+    "ImmReSizeIMCC" => ["long",  ["long", "long"]],
+    "ImmRegisterWordA" => ["long",  ["long", "str", "long", "str"]],
+    "ImmRegisterWordW" => ["long",  ["long", "wstr", "long", "wstr"]],
+    "ImmReleaseContext" => ["long",  ["long", "long"]],
+    "ImmSetCandidateWindow" => ["long",  ["long", "ptr"]],
+    "ImmSetCompositionFontA" => ["long",  ["long", "ptr"]],
+    "ImmSetCompositionFontW" => ["long",  ["long", "ptr"]],
+    "ImmSetCompositionStringA" => ["long",  ["long", "long", "ptr", "long", "ptr", "long"]],
+    "ImmSetCompositionStringW" => ["long",  ["long", "long", "ptr", "long", "ptr", "long"]],
+    "ImmSetCompositionWindow" => ["long",  ["long", "ptr"]],
+    "ImmSetConversionStatus" => ["long",  ["long", "long", "long"]],
+    "ImmSetHotKey" => ["long",  ["long", "long", "long", "long"]],
+    "ImmSetOpenStatus" => ["long",  ["long", "long"]],
+    "ImmSetStatusWindowPos" => ["long",  ["long", "ptr"]],
+    "ImmShowSoftKeyboard" => ["long",  ["long", "long"]],
+    "ImmSimulateHotKey" => ["long",  ["long", "long"]],
+    "ImmUnlockIMC" => ["long",  ["long"]],
+    "ImmUnlockIMCC" => ["long",  ["long"]],
+    "ImmUnregisterWordA" => ["long",  ["long", "str", "long", "str"]],
+    "ImmUnregisterWordW" => ["long",  ["long", "wstr", "long", "wstr"]]
+};
+
+&wine::declare("imm32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/joystick_drv.pm b/programs/winetest/include/joystick_drv.pm
new file mode 100644
index 0000000..e821a6c
--- /dev/null
+++ b/programs/winetest/include/joystick_drv.pm
@@ -0,0 +1,20 @@
+package joystick_drv;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "DriverProc" => ["long",  ["long", "long", "long", "long", "long"]]
+};
+
+&wine::declare("joystick.drv",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/kernel32.pm b/programs/winetest/include/kernel32.pm
new file mode 100644
index 0000000..0434acf
--- /dev/null
+++ b/programs/winetest/include/kernel32.pm
@@ -0,0 +1,754 @@
+package kernel32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "k32CharToOemA" => ["long",  ["str", "str"]],
+    "k32CharToOemBuffA" => ["long",  ["str", "str", "long"]],
+    "k32OemToCharA" => ["long",  ["str", "str"]],
+    "k32OemToCharBuffA" => ["long",  ["str", "str", "long"]],
+    "k32LoadStringA" => ["long",  ["long", "long", "str", "long"]],
+    "k32wvsprintfA" => ["long",  ["str", "str", "ptr"]],
+    "CommonUnimpStub" => ["void",  ["ptr"]],
+    "GetProcessDword" => ["long",  ["long", "long"]],
+    "DosFileHandleToWin32Handle" => ["long",  ["long"]],
+    "Win32HandleToDosFileHandle" => ["long",  ["long"]],
+    "DisposeLZ32Handle" => ["void",  ["long"]],
+    "GlobalAlloc16" => ["long",  ["long", "long"]],
+    "GlobalLock16" => ["ptr",  ["long"]],
+    "GlobalUnlock16" => ["long",  ["long"]],
+    "GlobalFix16" => ["long",  ["long"]],
+    "GlobalUnfix16" => ["void",  ["long"]],
+    "GlobalWire16" => ["ptr",  ["long"]],
+    "GlobalUnWire16" => ["long",  ["long"]],
+    "GlobalFree16" => ["long",  ["long"]],
+    "GlobalSize16" => ["long",  ["long"]],
+    "HouseCleanLogicallyDeadHandles" => ["void",  []],
+    "GetWin16DOSEnv" => ["long",  ["undef"]],
+    "LoadLibrary16" => ["long",  ["str"]],
+    "FreeLibrary16" => ["void",  ["long"]],
+    "GetProcAddress16" => ["ptr",  ["long", "str"]],
+    "AllocMappedBuffer" => ["void",  ["ptr"]],
+    "OT_32ThkLSF" => ["void",  ["ptr"]],
+    "ThunkInitLSF" => ["ptr",  ["ptr", "str", "long", "str", "str"]],
+    "LogApiThkLSF" => ["void",  ["str", "ptr"]],
+    "ThunkInitLS" => ["long",  ["ptr", "str", "long", "str", "str"]],
+    "LogApiThkSL" => ["void",  ["str", "ptr"]],
+    "Common32ThkLS" => ["void",  ["ptr"]],
+    "ThunkInitSL" => ["void",  ["ptr", "str", "long", "str", "str"]],
+    "LogCBThkSL" => ["void",  ["str", "ptr"]],
+    "ReleaseThunkLock" => ["void",  ["ptr"]],
+    "RestoreThunkLock" => ["void",  ["long"]],
+    "W32S_BackTo32" => ["void",  ["ptr"]],
+    "GetThunkBuff" => ["ptr",  []],
+    "GetThunkStuff" => ["ptr",  ["str", "str"]],
+    "K32WOWCallback16" => ["long",  ["long", "long"]],
+    "K32WOWCallback16Ex" => ["long",  ["long", "long", "long", "ptr", "ptr"]],
+    "K32WOWGetVDMPointer" => ["ptr",  ["long", "long", "long"]],
+    "K32WOWHandle32" => ["long",  ["long", "long"]],
+    "K32WOWHandle16" => ["long",  ["long", "long"]],
+    "K32WOWGlobalAlloc16" => ["long",  ["long", "long"]],
+    "K32WOWGlobalLock16" => ["ptr",  ["long"]],
+    "K32WOWGlobalUnlock16" => ["long",  ["long"]],
+    "K32WOWGlobalFree16" => ["long",  ["long"]],
+    "K32WOWGlobalAllocLock16" => ["long",  ["long", "long", "ptr"]],
+    "K32WOWGlobalUnlockFree16" => ["long",  ["long"]],
+    "K32WOWGlobalLockSize16" => ["long",  ["long", "ptr"]],
+    "K32WOWYield16" => ["void",  []],
+    "K32WOWDirectedYield16" => ["void",  ["long"]],
+    "K32WOWGetVDMPointerFix" => ["ptr",  ["long", "long", "long"]],
+    "K32WOWGetVDMPointerUnfix" => ["void",  ["long"]],
+    "K32WOWGetDescriptor" => ["long",  ["ptr", "ptr"]],
+    "SSOnBigStack" => ["long",  ["undef"]],
+    "FT_PrologPrime" => ["void",  ["ptr"]],
+    "QT_ThunkPrime" => ["void",  ["ptr"]],
+    "PK16FNF" => ["void",  ["str"]],
+    "GetPK16SysVar" => ["ptr",  []],
+    "GetpWin16Lock" => ["void",  ["ptr"]],
+    "_CheckNotSysLevel" => ["void",  ["ptr"]],
+    "_ConfirmSysLevel" => ["long",  ["ptr"]],
+    "_ConfirmWin16Lock" => ["long",  []],
+    "_EnterSysLevel" => ["void",  ["ptr"]],
+    "_LeaveSysLevel" => ["void",  ["ptr"]],
+    "AddAtomA" => ["long",  ["str"]],
+    "AddAtomW" => ["long",  ["wstr"]],
+    "AllocConsole" => ["long",  []],
+    "AllocSLCallback" => ["long",  ["long", "long"]],
+    "AreFileApisANSI" => ["long",  []],
+    "BackupRead" => ["long",  ["long", "ptr", "long", "ptr", "long", "long", "ptr"]],
+    "BackupSeek" => ["long",  ["long", "long", "long", "ptr", "ptr", "ptr"]],
+    "BackupWrite" => ["long",  ["long", "ptr", "long", "ptr", "long", "long", "ptr"]],
+    "Beep" => ["long",  ["long", "long"]],
+    "BuildCommDCBA" => ["long",  ["str", "ptr"]],
+    "BuildCommDCBAndTimeoutsA" => ["long",  ["str", "ptr", "ptr"]],
+    "BuildCommDCBAndTimeoutsW" => ["long",  ["wstr", "ptr", "ptr"]],
+    "BuildCommDCBW" => ["long",  ["wstr", "ptr"]],
+    "CallNamedPipeA" => ["long",  ["str", "ptr", "long", "ptr", "long", "ptr", "long"]],
+    "CallNamedPipeW" => ["long",  ["wstr", "ptr", "long", "ptr", "long", "ptr", "long"]],
+    "CancelIo" => ["long",  ["long"]],
+    "CancelWaitableTimer" => ["long",  ["long"]],
+    "ClearCommBreak" => ["long",  ["long"]],
+    "ClearCommError" => ["long",  ["long", "ptr", "ptr"]],
+    "CloseHandle" => ["long",  ["long"]],
+    "CloseProfileUserMapping" => ["long",  []],
+    "CommConfigDialogA" => ["long",  ["str", "long", "ptr"]],
+    "CommConfigDialogW" => ["long",  ["wstr", "long", "ptr"]],
+    "CompareFileTime" => ["long",  ["ptr", "ptr"]],
+    "CompareStringA" => ["long",  ["long", "long", "str", "long", "str", "long"]],
+    "CompareStringW" => ["long",  ["long", "long", "wstr", "long", "wstr", "long"]],
+    "ConnectNamedPipe" => ["long",  ["long", "ptr"]],
+    "ContinueDebugEvent" => ["long",  ["long", "long", "long"]],
+    "ConvertDefaultLocale" => ["long",  ["long"]],
+    "ConvertDialog32To16" => ["void",  ["ptr", "long", "ptr"]],
+    "ConvertToGlobalHandle" => ["long",  ["long"]],
+    "CopyFileA" => ["long",  ["str", "str", "long"]],
+    "CopyFileExA" => ["long",  ["str", "str", "ptr", "ptr", "ptr", "long"]],
+    "CopyFileExW" => ["long",  ["wstr", "wstr", "ptr", "ptr", "ptr", "long"]],
+    "CopyFileW" => ["long",  ["wstr", "wstr", "long"]],
+    "CreateConsoleScreenBuffer" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "CreateDirectoryA" => ["long",  ["str", "ptr"]],
+    "CreateDirectoryExA" => ["long",  ["str", "str", "ptr"]],
+    "CreateDirectoryExW" => ["long",  ["wstr", "wstr", "ptr"]],
+    "CreateDirectoryW" => ["long",  ["wstr", "ptr"]],
+    "CreateEventA" => ["long",  ["ptr", "long", "long", "str"]],
+    "CreateEventW" => ["long",  ["ptr", "long", "long", "wstr"]],
+    "CreateFileA" => ["long",  ["str", "long", "long", "ptr", "long", "long", "long"]],
+    "CreateFileMappingA" => ["long",  ["long", "ptr", "long", "long", "long", "str"]],
+    "CreateFileMappingW" => ["long",  ["long", "ptr", "long", "long", "long", "wstr"]],
+    "CreateFileW" => ["long",  ["wstr", "long", "long", "ptr", "long", "long", "long"]],
+    "CreateIoCompletionPort" => ["long",  ["long", "long", "long", "long"]],
+    "CreateMailslotA" => ["long",  ["str", "long", "long", "ptr"]],
+    "CreateMailslotW" => ["long",  ["wstr", "long", "long", "ptr"]],
+    "CreateMutexA" => ["long",  ["ptr", "long", "str"]],
+    "CreateMutexW" => ["long",  ["ptr", "long", "wstr"]],
+    "CreateNamedPipeA" => ["long",  ["str", "long", "long", "long", "long", "long", "long", "ptr"]],
+    "CreateNamedPipeW" => ["long",  ["wstr", "long", "long", "long", "long", "long", "long", "ptr"]],
+    "CreatePipe" => ["long",  ["ptr", "ptr", "ptr", "long"]],
+    "CreateProcessA" => ["long",  ["str", "str", "ptr", "ptr", "long", "long", "ptr", "str", "ptr", "ptr"]],
+    "CreateProcessW" => ["long",  ["wstr", "wstr", "ptr", "ptr", "long", "long", "ptr", "wstr", "ptr", "ptr"]],
+    "CreateSemaphoreA" => ["long",  ["ptr", "long", "long", "str"]],
+    "CreateSemaphoreW" => ["long",  ["ptr", "long", "long", "wstr"]],
+    "CreateSocketHandle" => ["long",  []],
+    "CreateTapePartition" => ["long",  ["long", "long", "long", "long"]],
+    "CreateThread" => ["long",  ["ptr", "long", "ptr", "ptr", "long", "ptr"]],
+    "CreateToolhelp32Snapshot" => ["long",  ["long", "long"]],
+    "CreateWaitableTimerA" => ["long",  ["ptr", "long", "str"]],
+    "CreateWaitableTimerW" => ["long",  ["ptr", "long", "wstr"]],
+    "DebugActiveProcess" => ["long",  ["long"]],
+    "DebugBreak" => ["void",  []],
+    "DefineDosDeviceA" => ["long",  ["long", "str", "str"]],
+    "DeleteAtom" => ["long",  ["long"]],
+    "DeleteFileA" => ["long",  ["str"]],
+    "DeleteFileW" => ["long",  ["wstr"]],
+    "DeviceIoControl" => ["long",  ["long", "long", "ptr", "long", "ptr", "long", "ptr", "ptr"]],
+    "DisableThreadLibraryCalls" => ["long",  ["long"]],
+    "DisconnectNamedPipe" => ["long",  ["long"]],
+    "DosDateTimeToFileTime" => ["long",  ["long", "long", "ptr"]],
+    "DuplicateHandle" => ["long",  ["long", "long", "long", "ptr", "long", "long", "long"]],
+    "EnumCalendarInfoA" => ["long",  ["ptr", "long", "long", "long"]],
+    "EnumDateFormatsA" => ["long",  ["ptr", "long", "long"]],
+    "EnumDateFormatsW" => ["long",  ["ptr", "long", "long"]],
+    "EnumResourceLanguagesA" => ["long",  ["long", "str", "str", "ptr", "long"]],
+    "EnumResourceLanguagesW" => ["long",  ["long", "wstr", "wstr", "ptr", "long"]],
+    "EnumResourceNamesA" => ["long",  ["long", "str", "ptr", "long"]],
+    "EnumResourceNamesW" => ["long",  ["long", "wstr", "ptr", "long"]],
+    "EnumResourceTypesA" => ["long",  ["long", "ptr", "long"]],
+    "EnumResourceTypesW" => ["long",  ["long", "ptr", "long"]],
+    "EnumSystemCodePagesA" => ["long",  ["ptr", "long"]],
+    "EnumSystemCodePagesW" => ["long",  ["ptr", "long"]],
+    "EnumSystemLocalesA" => ["long",  ["ptr", "long"]],
+    "EnumSystemLocalesW" => ["long",  ["ptr", "long"]],
+    "EnumTimeFormatsA" => ["long",  ["ptr", "long", "long"]],
+    "EnumTimeFormatsW" => ["long",  ["ptr", "long", "long"]],
+    "EraseTape" => ["long",  ["long", "long", "long"]],
+    "EscapeCommFunction" => ["long",  ["long", "long"]],
+    "ExitProcess" => ["void",  ["long"]],
+    "ExitThread" => ["void",  ["long"]],
+    "ExpandEnvironmentStringsA" => ["long",  ["str", "str", "long"]],
+    "ExpandEnvironmentStringsW" => ["long",  ["wstr", "wstr", "long"]],
+    "FT_Exit0" => ["void",  ["ptr"]],
+    "FT_Exit12" => ["void",  ["ptr"]],
+    "FT_Exit16" => ["void",  ["ptr"]],
+    "FT_Exit20" => ["void",  ["ptr"]],
+    "FT_Exit24" => ["void",  ["ptr"]],
+    "FT_Exit28" => ["void",  ["ptr"]],
+    "FT_Exit32" => ["void",  ["ptr"]],
+    "FT_Exit36" => ["void",  ["ptr"]],
+    "FT_Exit4" => ["void",  ["ptr"]],
+    "FT_Exit40" => ["void",  ["ptr"]],
+    "FT_Exit44" => ["void",  ["ptr"]],
+    "FT_Exit48" => ["void",  ["ptr"]],
+    "FT_Exit52" => ["void",  ["ptr"]],
+    "FT_Exit56" => ["void",  ["ptr"]],
+    "FT_Exit8" => ["void",  ["ptr"]],
+    "FT_Prolog" => ["void",  ["ptr"]],
+    "FT_Thunk" => ["void",  ["ptr"]],
+    "FatalAppExitA" => ["void",  ["long", "str"]],
+    "FatalAppExitW" => ["void",  ["long", "wstr"]],
+    "FileTimeToDosDateTime" => ["long",  ["ptr", "ptr", "ptr"]],
+    "FileTimeToLocalFileTime" => ["long",  ["ptr", "ptr"]],
+    "FileTimeToSystemTime" => ["long",  ["ptr", "ptr"]],
+    "FillConsoleOutputAttribute" => ["long",  ["long", "long", "long", "long", "ptr"]],
+    "FillConsoleOutputCharacterA" => ["long",  ["long", "long", "long", "long", "ptr"]],
+    "FillConsoleOutputCharacterW" => ["long",  ["long", "long", "long", "long", "ptr"]],
+    "FindAtomA" => ["long",  ["str"]],
+    "FindAtomW" => ["long",  ["wstr"]],
+    "FindClose" => ["long",  ["long"]],
+    "FindCloseChangeNotification" => ["long",  ["long"]],
+    "FindFirstChangeNotificationA" => ["long",  ["str", "long", "long"]],
+    "FindFirstChangeNotificationW" => ["long",  ["wstr", "long", "long"]],
+    "FindFirstFileA" => ["long",  ["str", "ptr"]],
+    "FindFirstFileExA" => ["long",  ["str", "ptr", "ptr", "ptr", "ptr", "long"]],
+    "FindFirstFileExW" => ["long",  ["wstr", "ptr", "ptr", "ptr", "ptr", "long"]],
+    "FindFirstFileW" => ["long",  ["wstr", "ptr"]],
+    "FindNextChangeNotification" => ["long",  ["long"]],
+    "FindNextFileA" => ["long",  ["long", "ptr"]],
+    "FindNextFileW" => ["long",  ["long", "ptr"]],
+    "FindResource16" => ["long",  ["long", "str", "str"]],
+    "FindResourceA" => ["long",  ["long", "str", "str"]],
+    "FindResourceExA" => ["long",  ["long", "str", "str", "long"]],
+    "FindResourceExW" => ["long",  ["long", "wstr", "wstr", "long"]],
+    "FindResourceW" => ["long",  ["long", "wstr", "wstr"]],
+    "FlushConsoleInputBuffer" => ["long",  ["long"]],
+    "FlushFileBuffers" => ["long",  ["long"]],
+    "FlushInstructionCache" => ["long",  ["long", "long", "long"]],
+    "FlushViewOfFile" => ["long",  ["ptr", "long"]],
+    "FormatMessageA" => ["long",  ["long", "ptr", "long", "long", "str", "long", "ptr"]],
+    "FormatMessageW" => ["long",  ["long", "ptr", "long", "long", "wstr", "long", "ptr"]],
+    "FreeConsole" => ["long",  []],
+    "FreeEnvironmentStringsA" => ["long",  ["str"]],
+    "FreeEnvironmentStringsW" => ["long",  ["wstr"]],
+    "FreeLibrary" => ["long",  ["long"]],
+    "FreeLibraryAndExitThread" => ["void",  ["long", "long"]],
+    "FreeResource" => ["long",  ["long"]],
+    "FreeResource16" => ["long",  ["long"]],
+    "FreeSLCallback" => ["void",  ["long"]],
+    "GenerateConsoleCtrlEvent" => ["long",  ["long", "long"]],
+    "Get16DLLAddress" => ["ptr",  ["long", "str"]],
+    "GetACP" => ["long",  []],
+    "GetAtomNameA" => ["long",  ["long", "str", "long"]],
+    "GetAtomNameW" => ["long",  ["long", "wstr", "long"]],
+    "GetBinaryType" => ["long",  ["str", "ptr"]],
+    "GetBinaryTypeA" => ["long",  ["str", "ptr"]],
+    "GetBinaryTypeW" => ["long",  ["wstr", "ptr"]],
+    "GetCPInfo" => ["long",  ["long", "ptr"]],
+    "GetCalendarInfoA" => ["long",  ["long", "long", "long", "str", "long", "ptr"]],
+    "GetCalendarInfoW" => ["long",  ["long", "long", "long", "wstr", "long", "ptr"]],
+    "GetCommConfig" => ["long",  ["long", "ptr", "ptr"]],
+    "GetCommMask" => ["long",  ["long", "ptr"]],
+    "GetCommModemStatus" => ["long",  ["long", "ptr"]],
+    "GetCommProperties" => ["long",  ["long", "ptr"]],
+    "GetCommState" => ["long",  ["long", "ptr"]],
+    "GetCommTimeouts" => ["long",  ["long", "ptr"]],
+    "GetCommandLineA" => ["str",  []],
+    "GetCommandLineW" => ["wstr",  []],
+    "GetCompressedFileSizeA" => ["long",  ["str", "ptr"]],
+    "GetCompressedFileSizeW" => ["long",  ["wstr", "ptr"]],
+    "GetComputerNameA" => ["long",  ["str", "ptr"]],
+    "GetComputerNameW" => ["long",  ["wstr", "ptr"]],
+    "GetConsoleCP" => ["long",  []],
+    "GetConsoleCursorInfo" => ["long",  ["long", "ptr"]],
+    "GetConsoleMode" => ["long",  ["long", "ptr"]],
+    "GetConsoleOutputCP" => ["long",  []],
+    "GetConsoleScreenBufferInfo" => ["long",  ["long", "ptr"]],
+    "GetConsoleTitleA" => ["long",  ["str", "long"]],
+    "GetConsoleTitleW" => ["long",  ["wstr", "long"]],
+    "GetCurrencyFormatA" => ["long",  ["long", "long", "str", "ptr", "str", "long"]],
+    "GetCurrencyFormatW" => ["long",  ["long", "long", "wstr", "ptr", "wstr", "long"]],
+    "GetCurrentDirectoryA" => ["long",  ["long", "str"]],
+    "GetCurrentDirectoryW" => ["long",  ["long", "wstr"]],
+    "GetCurrentProcess" => ["long",  []],
+    "GetCurrentProcessId" => ["long",  []],
+    "GetCurrentTask" => ["long",  []],
+    "GetCurrentThread" => ["long",  []],
+    "GetCurrentThreadId" => ["long",  []],
+    "GetDOSEnvironment16" => ["ptr",  []],
+    "GetDateFormatA" => ["long",  ["long", "long", "ptr", "str", "str", "long"]],
+    "GetDateFormatW" => ["long",  ["long", "long", "ptr", "wstr", "wstr", "long"]],
+    "GetDefaultCommConfigA" => ["long",  ["str", "ptr", "ptr"]],
+    "GetDefaultCommConfigW" => ["long",  ["wstr", "ptr", "ptr"]],
+    "GetDiskFreeSpaceA" => ["long",  ["str", "ptr", "ptr", "ptr", "ptr"]],
+    "GetDiskFreeSpaceExA" => ["long",  ["str", "ptr", "ptr", "ptr"]],
+    "GetDiskFreeSpaceExW" => ["long",  ["wstr", "ptr", "ptr", "ptr"]],
+    "GetDiskFreeSpaceW" => ["long",  ["wstr", "ptr", "ptr", "ptr", "ptr"]],
+    "GetDriveTypeA" => ["long",  ["str"]],
+    "GetDriveTypeW" => ["long",  ["wstr"]],
+    "GetEnvironmentStrings" => ["str",  []],
+    "GetEnvironmentStringsA" => ["str",  []],
+    "GetEnvironmentStringsW" => ["wstr",  []],
+    "GetEnvironmentVariableA" => ["long",  ["str", "str", "long"]],
+    "GetEnvironmentVariableW" => ["long",  ["wstr", "wstr", "long"]],
+    "GetExitCodeProcess" => ["long",  ["long", "ptr"]],
+    "GetExitCodeThread" => ["long",  ["long", "ptr"]],
+    "GetFileAttributesA" => ["long",  ["str"]],
+    "GetFileAttributesExA" => ["long",  ["str", "ptr", "ptr"]],
+    "GetFileAttributesExW" => ["long",  ["wstr", "ptr", "ptr"]],
+    "GetFileAttributesW" => ["long",  ["wstr"]],
+    "GetFileInformationByHandle" => ["long",  ["long", "ptr"]],
+    "GetFileSize" => ["long",  ["long", "ptr"]],
+    "GetFileTime" => ["long",  ["long", "ptr", "ptr", "ptr"]],
+    "GetFileType" => ["long",  ["long"]],
+    "GetFullPathNameA" => ["long",  ["str", "long", "str", "ptr"]],
+    "GetFullPathNameW" => ["long",  ["wstr", "long", "wstr", "ptr"]],
+    "GetHandleContext" => ["long",  ["long"]],
+    "GetHandleInformation" => ["long",  ["long", "ptr"]],
+    "GetLargestConsoleWindowSize" => ["long",  ["long"]],
+    "GetLastError" => ["long",  []],
+    "GetLocalTime" => ["void",  ["ptr"]],
+    "GetLocaleInfoA" => ["long",  ["long", "long", "str", "long"]],
+    "GetLocaleInfoW" => ["long",  ["long", "long", "wstr", "long"]],
+    "GetLogicalDriveStringsA" => ["long",  ["long", "str"]],
+    "GetLogicalDriveStringsW" => ["long",  ["long", "wstr"]],
+    "GetLogicalDrives" => ["long",  []],
+    "GetLongPathNameA" => ["long",  ["str", "str", "long"]],
+    "GetLongPathNameW" => ["long",  ["wstr", "wstr", "long"]],
+    "GetMailslotInfo" => ["long",  ["long", "ptr", "ptr", "ptr", "ptr"]],
+    "GetModuleFileName16" => ["long",  ["long", "str", "long"]],
+    "GetModuleFileNameA" => ["long",  ["long", "str", "long"]],
+    "GetModuleFileNameW" => ["long",  ["long", "wstr", "long"]],
+    "GetModuleHandle16" => ["long",  ["str"]],
+    "GetModuleHandleA" => ["long",  ["str"]],
+    "GetModuleHandleW" => ["long",  ["wstr"]],
+    "GetNamedPipeHandleStateA" => ["long",  ["long", "ptr", "ptr", "ptr", "ptr", "str", "long"]],
+    "GetNamedPipeHandleStateW" => ["long",  ["long", "ptr", "ptr", "ptr", "ptr", "wstr", "long"]],
+    "GetNamedPipeInfo" => ["long",  ["long", "ptr", "ptr", "ptr", "ptr"]],
+    "GetNumberFormatA" => ["long",  ["long", "long", "str", "ptr", "str", "long"]],
+    "GetNumberFormatW" => ["long",  ["long", "long", "wstr", "ptr", "wstr", "long"]],
+    "GetNumberOfConsoleInputEvents" => ["long",  ["long", "ptr"]],
+    "GetNumberOfConsoleMouseButtons" => ["long",  ["ptr"]],
+    "GetOEMCP" => ["long",  []],
+    "GetOverlappedResult" => ["long",  ["long", "ptr", "ptr", "long"]],
+    "GetPriorityClass" => ["long",  ["long"]],
+    "GetPrivateProfileIntA" => ["long",  ["str", "str", "long", "str"]],
+    "GetPrivateProfileIntW" => ["long",  ["wstr", "wstr", "long", "wstr"]],
+    "GetPrivateProfileSectionA" => ["long",  ["str", "str", "long", "str"]],
+    "GetPrivateProfileSectionNamesA" => ["long",  ["str", "long", "str"]],
+    "GetPrivateProfileSectionNamesW" => ["long",  ["wstr", "long", "wstr"]],
+    "GetPrivateProfileSectionW" => ["long",  ["wstr", "wstr", "long", "wstr"]],
+    "GetPrivateProfileStringA" => ["long",  ["str", "str", "str", "str", "long", "str"]],
+    "GetPrivateProfileStringW" => ["long",  ["wstr", "wstr", "wstr", "wstr", "long", "wstr"]],
+    "GetPrivateProfileStructA" => ["long",  ["str", "str", "ptr", "long", "str"]],
+    "GetPrivateProfileStructW" => ["long",  ["wstr", "wstr", "ptr", "long", "wstr"]],
+    "GetProcAddress" => ["ptr",  ["long", "str"]],
+    "GetProcessAffinityMask" => ["long",  ["long", "ptr", "ptr"]],
+    "GetProcessFlags" => ["long",  ["long"]],
+    "GetProcessHeap" => ["long",  []],
+    "GetProcessHeaps" => ["long",  ["long", "ptr"]],
+    "GetProcessShutdownParameters" => ["long",  ["ptr", "ptr"]],
+    "GetProcessTimes" => ["long",  ["long", "ptr", "ptr", "ptr", "ptr"]],
+    "GetProcessVersion" => ["long",  ["long"]],
+    "GetProcessWorkingSetSize" => ["long",  ["long", "ptr", "ptr"]],
+    "GetProfileIntA" => ["long",  ["str", "str", "long"]],
+    "GetProfileIntW" => ["long",  ["wstr", "wstr", "long"]],
+    "GetProfileSectionA" => ["long",  ["str", "str", "long"]],
+    "GetProfileSectionW" => ["long",  ["wstr", "wstr", "long"]],
+    "GetProfileStringA" => ["long",  ["str", "str", "str", "str", "long"]],
+    "GetProfileStringW" => ["long",  ["wstr", "wstr", "wstr", "wstr", "long"]],
+    "GetQueuedCompletionStatus" => ["long",  ["long", "ptr", "ptr", "ptr", "long"]],
+    "GetShortPathNameA" => ["long",  ["str", "str", "long"]],
+    "GetShortPathNameW" => ["long",  ["wstr", "wstr", "long"]],
+    "GetStartupInfoA" => ["void",  ["ptr"]],
+    "GetStartupInfoW" => ["void",  ["ptr"]],
+    "GetStdHandle" => ["long",  ["long"]],
+    "GetStringTypeA" => ["long",  ["long", "long", "str", "long", "ptr"]],
+    "GetStringTypeExA" => ["long",  ["long", "long", "str", "long", "ptr"]],
+    "GetStringTypeExW" => ["long",  ["long", "long", "wstr", "long", "ptr"]],
+    "GetStringTypeW" => ["long",  ["long", "wstr", "long", "ptr"]],
+    "GetSystemDefaultLCID" => ["long",  []],
+    "GetSystemDefaultLangID" => ["long",  []],
+    "GetSystemDirectoryA" => ["long",  ["str", "long"]],
+    "GetSystemDirectoryW" => ["long",  ["wstr", "long"]],
+    "GetSystemInfo" => ["void",  ["ptr"]],
+    "GetSystemPowerStatus" => ["long",  ["ptr"]],
+    "GetSystemTime" => ["void",  ["ptr"]],
+    "GetSystemTimeAdjustment" => ["long",  ["ptr", "ptr", "ptr"]],
+    "GetSystemTimeAsFileTime" => ["void",  ["ptr"]],
+    "GetSystemWindowsDirectoryA" => ["long",  ["str", "long"]],
+    "GetSystemWindowsDirectoryW" => ["long",  ["wstr", "long"]],
+    "GetTapeParameters" => ["long",  ["long", "long", "ptr", "ptr"]],
+    "GetTapePosition" => ["long",  ["long", "long", "ptr", "ptr", "ptr"]],
+    "GetTapeStatus" => ["long",  ["long"]],
+    "GetTempFileNameA" => ["long",  ["str", "str", "long", "str"]],
+    "GetTempFileNameW" => ["long",  ["wstr", "wstr", "long", "wstr"]],
+    "GetTempPathA" => ["long",  ["long", "str"]],
+    "GetTempPathW" => ["long",  ["long", "wstr"]],
+    "GetThreadContext" => ["long",  ["long", "ptr"]],
+    "GetThreadLocale" => ["long",  []],
+    "GetThreadPriority" => ["long",  ["long"]],
+    "GetThreadPriorityBoost" => ["long",  ["long", "ptr"]],
+    "GetThreadSelectorEntry" => ["long",  ["long", "long", "ptr"]],
+    "GetThreadTimes" => ["long",  ["long", "ptr", "ptr", "ptr", "ptr"]],
+    "GetTickCount" => ["long",  []],
+    "GetTimeFormatA" => ["long",  ["long", "long", "ptr", "str", "str", "long"]],
+    "GetTimeFormatW" => ["long",  ["long", "long", "ptr", "wstr", "wstr", "long"]],
+    "GetTimeZoneInformation" => ["long",  ["ptr"]],
+    "GetUserDefaultLCID" => ["long",  []],
+    "GetUserDefaultLangID" => ["long",  []],
+    "GetVersion" => ["long",  []],
+    "GetVersionExA" => ["long",  ["ptr"]],
+    "GetVersionExW" => ["long",  ["ptr"]],
+    "GetVolumeInformationA" => ["long",  ["str", "str", "long", "ptr", "ptr", "ptr", "str", "long"]],
+    "GetVolumeInformationW" => ["long",  ["wstr", "wstr", "long", "ptr", "ptr", "ptr", "wstr", "long"]],
+    "GetWindowsDirectoryA" => ["long",  ["str", "long"]],
+    "GetWindowsDirectoryW" => ["long",  ["wstr", "long"]],
+    "GlobalAddAtomA" => ["long",  ["str"]],
+    "GlobalAddAtomW" => ["long",  ["wstr"]],
+    "GlobalAlloc" => ["long",  ["long", "long"]],
+    "GlobalCompact" => ["long",  ["long"]],
+    "GlobalDeleteAtom" => ["long",  ["long"]],
+    "GlobalFindAtomA" => ["long",  ["str"]],
+    "GlobalFindAtomW" => ["long",  ["wstr"]],
+    "GlobalFix" => ["void",  ["long"]],
+    "GlobalFlags" => ["long",  ["long"]],
+    "GlobalFlags16" => ["long",  ["long"]],
+    "GlobalFree" => ["long",  ["long"]],
+    "GlobalGetAtomNameA" => ["long",  ["long", "str", "long"]],
+    "GlobalGetAtomNameW" => ["long",  ["long", "wstr", "long"]],
+    "GlobalHandle" => ["long",  ["ptr"]],
+    "GlobalLock" => ["ptr",  ["long"]],
+    "GlobalMemoryStatus" => ["void",  ["ptr"]],
+    "GlobalReAlloc" => ["long",  ["long", "long", "long"]],
+    "GlobalReAlloc16" => ["long",  ["long", "long", "long"]],
+    "GlobalSize" => ["long",  ["long"]],
+    "GlobalUnWire" => ["long",  ["long"]],
+    "GlobalUnfix" => ["void",  ["long"]],
+    "GlobalUnlock" => ["long",  ["long"]],
+    "GlobalWire" => ["ptr",  ["long"]],
+    "HeapCompact" => ["long",  ["long", "long"]],
+    "HeapCreate" => ["long",  ["long", "long", "long"]],
+    "HeapDestroy" => ["long",  ["long"]],
+    "HeapLock" => ["long",  ["long"]],
+    "HeapUnlock" => ["long",  ["long"]],
+    "HeapValidate" => ["long",  ["long", "long", "ptr"]],
+    "HeapWalk" => ["long",  ["long", "ptr"]],
+    "InitAtomTable" => ["long",  ["long"]],
+    "InitializeCriticalSection" => ["void",  ["ptr"]],
+    "InitializeCriticalSectionAndSpinCount" => ["long",  ["ptr", "long"]],
+    "InterlockedCompareExchange" => ["long",  ["ptr", "long", "long"]],
+    "InterlockedDecrement" => ["long",  ["ptr"]],
+    "InterlockedExchange" => ["long",  ["ptr", "long"]],
+    "InterlockedExchangeAdd" => ["long",  ["ptr", "long"]],
+    "InterlockedIncrement" => ["long",  ["ptr"]],
+    "IsBadCodePtr" => ["long",  ["ptr"]],
+    "IsBadHugeReadPtr" => ["long",  ["ptr", "long"]],
+    "IsBadHugeWritePtr" => ["long",  ["ptr", "long"]],
+    "IsBadReadPtr" => ["long",  ["ptr", "long"]],
+    "IsBadStringPtrA" => ["long",  ["str", "long"]],
+    "IsBadStringPtrW" => ["long",  ["wstr", "long"]],
+    "IsBadWritePtr" => ["long",  ["ptr", "long"]],
+    "IsDBCSLeadByte" => ["long",  ["long"]],
+    "IsDBCSLeadByteEx" => ["long",  ["long", "long"]],
+    "IsDebuggerPresent" => ["long",  []],
+    "IsProcessorFeaturePresent" => ["long",  ["long"]],
+    "IsTask16" => ["long",  ["long"]],
+    "IsValidCodePage" => ["long",  ["long"]],
+    "IsValidLocale" => ["long",  ["long", "long"]],
+    "K32Thk1632Epilog" => ["void",  ["ptr"]],
+    "K32Thk1632Prolog" => ["void",  ["ptr"]],
+    "LCMapStringA" => ["long",  ["long", "long", "str", "long", "str", "long"]],
+    "LCMapStringW" => ["long",  ["long", "long", "wstr", "long", "wstr", "long"]],
+    "LoadLibraryA" => ["long",  ["str"]],
+    "LoadLibraryExA" => ["long",  ["str", "long", "long"]],
+    "LoadLibraryExW" => ["long",  ["wstr", "long", "long"]],
+    "LoadLibraryW" => ["long",  ["wstr"]],
+    "LoadModule" => ["long",  ["str", "ptr"]],
+    "LoadModule16" => ["long",  ["str", "ptr"]],
+    "LoadResource" => ["long",  ["long", "long"]],
+    "LoadResource16" => ["long",  ["long", "long"]],
+    "LocalAlloc" => ["long",  ["long", "long"]],
+    "LocalCompact" => ["long",  ["long"]],
+    "LocalFileTimeToFileTime" => ["long",  ["ptr", "ptr"]],
+    "LocalFlags" => ["long",  ["long"]],
+    "LocalFree" => ["long",  ["long"]],
+    "LocalHandle" => ["long",  ["ptr"]],
+    "LocalLock" => ["ptr",  ["long"]],
+    "LocalReAlloc" => ["long",  ["long", "long", "long"]],
+    "LocalShrink" => ["long",  ["long", "long"]],
+    "LocalSize" => ["long",  ["long"]],
+    "LocalUnlock" => ["long",  ["long"]],
+    "LockFile" => ["long",  ["long", "long", "long", "long", "long"]],
+    "LockFileEx" => ["long",  ["long", "long", "long", "long", "long", "ptr"]],
+    "LockResource" => ["ptr",  ["long"]],
+    "LockResource16" => ["ptr",  ["long"]],
+    "MakeCriticalSectionGlobal" => ["void",  ["ptr"]],
+    "MapHInstLS" => ["void",  ["ptr"]],
+    "MapHInstLS_PN" => ["void",  ["ptr"]],
+    "MapHInstSL" => ["void",  ["ptr"]],
+    "MapHInstSL_PN" => ["void",  ["ptr"]],
+    "MapHModuleLS" => ["long",  ["long"]],
+    "MapHModuleSL" => ["long",  ["long"]],
+    "MapLS" => ["ptr",  ["ptr"]],
+    "MapSL" => ["ptr",  ["ptr"]],
+    "MapSLFix" => ["ptr",  ["ptr"]],
+    "MapViewOfFile" => ["ptr",  ["long", "long", "long", "long", "long"]],
+    "MapViewOfFileEx" => ["ptr",  ["long", "long", "long", "long", "long", "ptr"]],
+    "Module32First" => ["long",  ["long", "ptr"]],
+    "Module32Next" => ["long",  ["long", "ptr"]],
+    "MoveFileA" => ["long",  ["str", "str"]],
+    "MoveFileExA" => ["long",  ["str", "str", "long"]],
+    "MoveFileExW" => ["long",  ["wstr", "wstr", "long"]],
+    "MoveFileW" => ["long",  ["wstr", "wstr"]],
+    "MulDiv" => ["long",  ["long", "long", "long"]],
+    "MultiByteToWideChar" => ["long",  ["long", "long", "str", "long", "wstr", "long"]],
+    "OpenEventA" => ["long",  ["long", "long", "str"]],
+    "OpenEventW" => ["long",  ["long", "long", "wstr"]],
+    "OpenFile" => ["long",  ["str", "ptr", "long"]],
+    "OpenFileMappingA" => ["long",  ["long", "long", "str"]],
+    "OpenFileMappingW" => ["long",  ["long", "long", "wstr"]],
+    "OpenMutexA" => ["long",  ["long", "long", "str"]],
+    "OpenMutexW" => ["long",  ["long", "long", "wstr"]],
+    "OpenProcess" => ["long",  ["long", "long", "long"]],
+    "OpenSemaphoreA" => ["long",  ["long", "long", "str"]],
+    "OpenSemaphoreW" => ["long",  ["long", "long", "wstr"]],
+    "OpenVxDHandle" => ["long",  ["long"]],
+    "OpenWaitableTimerA" => ["long",  ["long", "long", "str"]],
+    "OpenWaitableTimerW" => ["long",  ["long", "long", "wstr"]],
+    "OutputDebugStringA" => ["void",  ["str"]],
+    "OutputDebugStringW" => ["void",  ["wstr"]],
+    "PeekConsoleInputA" => ["long",  ["long", "ptr", "long", "ptr"]],
+    "PeekConsoleInputW" => ["long",  ["long", "ptr", "long", "ptr"]],
+    "PeekNamedPipe" => ["long",  ["long", "ptr", "long", "ptr", "ptr", "ptr"]],
+    "PrepareTape" => ["long",  ["long", "long", "long"]],
+    "PrivateFreeLibrary" => ["void",  ["long"]],
+    "PrivateLoadLibrary" => ["long",  ["str"]],
+    "Process32First" => ["long",  ["long", "ptr"]],
+    "Process32Next" => ["long",  ["long", "ptr"]],
+    "ProcessIdToSessionId" => ["long",  ["long", "ptr"]],
+    "PulseEvent" => ["long",  ["long"]],
+    "PurgeComm" => ["long",  ["long", "long"]],
+    "QT_Thunk" => ["void",  ["ptr"]],
+    "QueryDosDeviceA" => ["long",  ["str", "str", "long"]],
+    "QueryDosDeviceW" => ["long",  ["wstr", "wstr", "long"]],
+    "QueryPerformanceCounter" => ["long",  ["ptr"]],
+    "QueryPerformanceFrequency" => ["long",  ["ptr"]],
+    "QueueUserAPC" => ["long",  ["ptr", "long", "long"]],
+    "RaiseException" => ["void",  ["long", "long", "long", "ptr"]],
+    "ReadConsoleA" => ["long",  ["long", "ptr", "long", "ptr", "ptr"]],
+    "ReadConsoleInputA" => ["long",  ["long", "ptr", "long", "ptr"]],
+    "ReadConsoleInputW" => ["long",  ["long", "ptr", "long", "ptr"]],
+    "ReadConsoleOutputA" => ["long",  ["long", "ptr", "long", "long", "ptr"]],
+    "ReadConsoleOutputAttribute" => ["long",  ["long", "ptr", "long", "long", "ptr"]],
+    "ReadConsoleOutputCharacterA" => ["long",  ["long", "str", "long", "long", "ptr"]],
+    "ReadConsoleOutputCharacterW" => ["long",  ["long", "wstr", "long", "long", "ptr"]],
+    "ReadConsoleOutputW" => ["long",  ["long", "ptr", "long", "long", "ptr"]],
+    "ReadConsoleW" => ["long",  ["long", "ptr", "long", "ptr", "ptr"]],
+    "ReadFile" => ["long",  ["long", "ptr", "long", "ptr", "ptr"]],
+    "ReadFileEx" => ["long",  ["long", "ptr", "long", "ptr", "ptr"]],
+    "ReadProcessMemory" => ["long",  ["long", "ptr", "ptr", "long", "ptr"]],
+    "RegisterServiceProcess" => ["long",  ["long", "long"]],
+    "ReinitializeCriticalSection" => ["void",  ["ptr"]],
+    "ReleaseMutex" => ["long",  ["long"]],
+    "ReleaseSemaphore" => ["long",  ["long", "long", "ptr"]],
+    "RemoveDirectoryA" => ["long",  ["str"]],
+    "RemoveDirectoryW" => ["long",  ["wstr"]],
+    "ResetEvent" => ["long",  ["long"]],
+    "ResumeThread" => ["long",  ["long"]],
+    "SMapLS" => ["void",  ["ptr"]],
+    "SMapLS_IP_EBP_12" => ["void",  ["ptr"]],
+    "SMapLS_IP_EBP_16" => ["void",  ["ptr"]],
+    "SMapLS_IP_EBP_20" => ["void",  ["ptr"]],
+    "SMapLS_IP_EBP_24" => ["void",  ["ptr"]],
+    "SMapLS_IP_EBP_28" => ["void",  ["ptr"]],
+    "SMapLS_IP_EBP_32" => ["void",  ["ptr"]],
+    "SMapLS_IP_EBP_36" => ["void",  ["ptr"]],
+    "SMapLS_IP_EBP_40" => ["void",  ["ptr"]],
+    "SMapLS_IP_EBP_8" => ["void",  ["ptr"]],
+    "SUnMapLS" => ["void",  ["ptr"]],
+    "SUnMapLS_IP_EBP_12" => ["void",  ["ptr"]],
+    "SUnMapLS_IP_EBP_16" => ["void",  ["ptr"]],
+    "SUnMapLS_IP_EBP_20" => ["void",  ["ptr"]],
+    "SUnMapLS_IP_EBP_24" => ["void",  ["ptr"]],
+    "SUnMapLS_IP_EBP_28" => ["void",  ["ptr"]],
+    "SUnMapLS_IP_EBP_32" => ["void",  ["ptr"]],
+    "SUnMapLS_IP_EBP_36" => ["void",  ["ptr"]],
+    "SUnMapLS_IP_EBP_40" => ["void",  ["ptr"]],
+    "SUnMapLS_IP_EBP_8" => ["void",  ["ptr"]],
+    "ScrollConsoleScreenBufferA" => ["long",  ["long", "ptr", "ptr", "long", "ptr"]],
+    "SearchPathA" => ["long",  ["str", "str", "str", "long", "str", "ptr"]],
+    "SearchPathW" => ["long",  ["wstr", "wstr", "wstr", "long", "wstr", "ptr"]],
+    "SetCalendarInfoA" => ["long",  ["long", "long", "long", "str"]],
+    "SetCalendarInfoW" => ["long",  ["long", "long", "long", "wstr"]],
+    "SetCommBreak" => ["long",  ["long"]],
+    "SetCommConfig" => ["long",  ["long", "ptr", "long"]],
+    "SetCommMask" => ["long",  ["long", "long"]],
+    "SetCommState" => ["long",  ["long", "ptr"]],
+    "SetCommTimeouts" => ["long",  ["long", "ptr"]],
+    "SetComputerNameA" => ["long",  ["str"]],
+    "SetComputerNameW" => ["long",  ["wstr"]],
+    "SetConsoleActiveScreenBuffer" => ["long",  ["long"]],
+    "SetConsoleCP" => ["long",  ["long"]],
+    "SetConsoleCursorInfo" => ["long",  ["long", "ptr"]],
+    "SetConsoleCursorPosition" => ["long",  ["long", "long"]],
+    "SetConsoleInputExeNameA" => ["long",  ["str"]],
+    "SetConsoleInputExeNameW" => ["long",  ["wstr"]],
+    "SetConsoleMode" => ["long",  ["long", "long"]],
+    "SetConsoleOutputCP" => ["long",  ["long"]],
+    "SetConsoleScreenBufferSize" => ["long",  ["long", "long"]],
+    "SetConsoleTextAttribute" => ["long",  ["long", "long"]],
+    "SetConsoleTitleA" => ["long",  ["str"]],
+    "SetConsoleTitleW" => ["long",  ["wstr"]],
+    "SetConsoleWindowInfo" => ["long",  ["long", "long", "ptr"]],
+    "SetCriticalSectionSpinCount" => ["long",  ["ptr", "long"]],
+    "SetCurrentDirectoryA" => ["long",  ["str"]],
+    "SetCurrentDirectoryW" => ["long",  ["wstr"]],
+    "SetDefaultCommConfigA" => ["long",  ["str", "ptr", "long"]],
+    "SetDefaultCommConfigW" => ["long",  ["wstr", "ptr", "long"]],
+    "SetEndOfFile" => ["long",  ["long"]],
+    "SetEnvironmentVariableA" => ["long",  ["str", "str"]],
+    "SetEnvironmentVariableW" => ["long",  ["wstr", "wstr"]],
+    "SetErrorMode" => ["long",  ["long"]],
+    "SetEvent" => ["long",  ["long"]],
+    "SetFileApisToANSI" => ["void",  []],
+    "SetFileApisToOEM" => ["void",  []],
+    "SetFileAttributesA" => ["long",  ["str", "long"]],
+    "SetFileAttributesW" => ["long",  ["wstr", "long"]],
+    "SetFilePointer" => ["long",  ["long", "long", "ptr", "long"]],
+    "SetFileTime" => ["long",  ["long", "ptr", "ptr", "ptr"]],
+    "SetHandleContext" => ["long",  ["long", "long"]],
+    "SetHandleCount" => ["long",  ["long"]],
+    "SetHandleInformation" => ["long",  ["long", "long", "long"]],
+    "SetLastError" => ["void",  ["long"]],
+    "SetLocalTime" => ["long",  ["ptr"]],
+    "SetLocaleInfoA" => ["long",  ["long", "long", "str"]],
+    "SetNamedPipeHandleState" => ["long",  ["long", "ptr", "ptr", "ptr"]],
+    "SetPriorityClass" => ["long",  ["long", "long"]],
+    "SetProcessAffinityMask" => ["long",  ["long", "long"]],
+    "SetProcessPriorityBoost" => ["long",  ["long", "long"]],
+    "SetProcessShutdownParameters" => ["long",  ["long", "long"]],
+    "SetProcessWorkingSetSize" => ["long",  ["long", "long", "long"]],
+    "SetStdHandle" => ["long",  ["long", "long"]],
+    "SetSystemPowerState" => ["long",  ["long", "long"]],
+    "SetSystemTime" => ["long",  ["ptr"]],
+    "SetTapeParameters" => ["long",  ["long", "long", "ptr"]],
+    "SetTapePosition" => ["long",  ["long", "long", "long", "long", "long", "long"]],
+    "SetThreadAffinityMask" => ["long",  ["long", "long"]],
+    "SetThreadContext" => ["long",  ["long", "ptr"]],
+    "SetThreadExecutionState" => ["long",  ["long"]],
+    "SetThreadLocale" => ["long",  ["long"]],
+    "SetThreadPriority" => ["long",  ["long", "long"]],
+    "SetThreadPriorityBoost" => ["long",  ["long", "long"]],
+    "SetTimeZoneInformation" => ["long",  ["ptr"]],
+    "SetUnhandledExceptionFilter" => ["ptr",  ["ptr"]],
+    "SetVolumeLabelA" => ["long",  ["str", "str"]],
+    "SetVolumeLabelW" => ["long",  ["wstr", "wstr"]],
+    "SetWaitableTimer" => ["long",  ["long", "ptr", "long", "ptr", "ptr", "long"]],
+    "SetupComm" => ["long",  ["long", "long", "long"]],
+    "SizeofResource" => ["long",  ["long", "long"]],
+    "SizeofResource16" => ["long",  ["long", "long"]],
+    "Sleep" => ["void",  ["long"]],
+    "SleepEx" => ["long",  ["long", "long"]],
+    "SuspendThread" => ["long",  ["long"]],
+    "SystemTimeToFileTime" => ["long",  ["ptr", "ptr"]],
+    "SystemTimeToTzSpecificLocalTime" => ["long",  ["ptr", "ptr", "ptr"]],
+    "TerminateProcess" => ["long",  ["long", "long"]],
+    "TerminateThread" => ["long",  ["long", "long"]],
+    "Thread32First" => ["long",  ["long", "ptr"]],
+    "Thread32Next" => ["long",  ["long", "ptr"]],
+    "ThunkConnect32" => ["long",  ["ptr", "str", "str", "str", "long", "long"]],
+    "TlsAlloc" => ["long",  []],
+    "TlsFree" => ["long",  ["long"]],
+    "TlsGetValue" => ["ptr",  ["long"]],
+    "TlsSetValue" => ["long",  ["long", "ptr"]],
+    "TransactNamedPipe" => ["long",  ["long", "ptr", "long", "ptr", "long", "ptr", "ptr"]],
+    "TransmitCommChar" => ["long",  ["long", "long"]],
+    "UTRegister" => ["long",  ["long", "str", "str", "str", "ptr", "ptr", "ptr"]],
+    "UTUnRegister" => ["void",  ["long"]],
+    "UnMapLS" => ["void",  ["ptr"]],
+    "UnMapSLFixArray" => ["void",  ["ptr", "long", "ptr"]],
+    "UnhandledExceptionFilter" => ["long",  ["ptr"]],
+    "UninitializeCriticalSection" => ["void",  ["ptr"]],
+    "UnlockFile" => ["long",  ["long", "long", "long", "long", "long"]],
+    "UnlockFileEx" => ["long",  ["long", "long", "long", "long", "ptr"]],
+    "UnmapViewOfFile" => ["long",  ["ptr"]],
+    "UpdateResourceA" => ["long",  ["long", "str", "str", "long", "ptr", "long"]],
+    "UpdateResourceW" => ["long",  ["long", "wstr", "wstr", "long", "ptr", "long"]],
+    "VerLanguageNameA" => ["long",  ["long", "str", "long"]],
+    "VerLanguageNameW" => ["long",  ["long", "wstr", "long"]],
+    "VirtualAlloc" => ["ptr",  ["ptr", "long", "long", "long"]],
+    "VirtualAllocEx" => ["ptr",  ["long", "ptr", "long", "long", "long"]],
+    "VirtualFree" => ["long",  ["ptr", "long", "long"]],
+    "VirtualLock" => ["long",  ["ptr", "long"]],
+    "VirtualProtect" => ["long",  ["ptr", "long", "long", "ptr"]],
+    "VirtualProtectEx" => ["long",  ["long", "ptr", "long", "long", "ptr"]],
+    "VirtualQuery" => ["long",  ["ptr", "ptr", "long"]],
+    "VirtualQueryEx" => ["long",  ["long", "ptr", "ptr", "long"]],
+    "VirtualUnlock" => ["long",  ["ptr", "long"]],
+    "WaitCommEvent" => ["long",  ["long", "ptr", "ptr"]],
+    "WaitForDebugEvent" => ["long",  ["ptr", "long"]],
+    "WaitForMultipleObjects" => ["long",  ["long", "ptr", "long", "long"]],
+    "WaitForMultipleObjectsEx" => ["long",  ["long", "ptr", "long", "long", "long"]],
+    "WaitForSingleObject" => ["long",  ["long", "long"]],
+    "WaitForSingleObjectEx" => ["long",  ["long", "long", "long"]],
+    "WaitNamedPipeA" => ["long",  ["str", "long"]],
+    "WaitNamedPipeW" => ["long",  ["wstr", "long"]],
+    "WideCharToMultiByte" => ["long",  ["long", "long", "wstr", "long", "str", "long", "str", "ptr"]],
+    "WinExec" => ["long",  ["str", "long"]],
+    "WinExec16" => ["long",  ["str", "long"]],
+    "WriteConsoleA" => ["long",  ["long", "ptr", "long", "ptr", "ptr"]],
+    "WriteConsoleInputA" => ["long",  ["long", "ptr", "long", "ptr"]],
+    "WriteConsoleInputW" => ["long",  ["long", "ptr", "long", "ptr"]],
+    "WriteConsoleOutputA" => ["long",  ["long", "ptr", "long", "long", "ptr"]],
+    "WriteConsoleOutputAttribute" => ["long",  ["long", "ptr", "long", "long", "ptr"]],
+    "WriteConsoleOutputCharacterA" => ["long",  ["long", "str", "long", "long", "ptr"]],
+    "WriteConsoleOutputCharacterW" => ["long",  ["long", "wstr", "long", "long", "ptr"]],
+    "WriteConsoleOutputW" => ["long",  ["long", "ptr", "long", "long", "ptr"]],
+    "WriteConsoleW" => ["long",  ["long", "ptr", "long", "ptr", "ptr"]],
+    "WriteFile" => ["long",  ["long", "ptr", "long", "ptr", "ptr"]],
+    "WriteFileEx" => ["long",  ["long", "ptr", "long", "ptr", "ptr"]],
+    "WritePrivateProfileSectionA" => ["long",  ["str", "str", "str"]],
+    "WritePrivateProfileSectionW" => ["long",  ["wstr", "wstr", "wstr"]],
+    "WritePrivateProfileStringA" => ["long",  ["str", "str", "str", "str"]],
+    "WritePrivateProfileStringW" => ["long",  ["wstr", "wstr", "wstr", "wstr"]],
+    "WritePrivateProfileStructA" => ["long",  ["str", "str", "ptr", "long", "str"]],
+    "WritePrivateProfileStructW" => ["long",  ["wstr", "wstr", "ptr", "long", "wstr"]],
+    "WriteProcessMemory" => ["long",  ["long", "ptr", "ptr", "long", "ptr"]],
+    "WriteProfileSectionA" => ["long",  ["str", "str"]],
+    "WriteProfileSectionW" => ["long",  ["wstr", "wstr"]],
+    "WriteProfileStringA" => ["long",  ["str", "str", "str"]],
+    "WriteProfileStringW" => ["long",  ["wstr", "wstr", "wstr"]],
+    "WriteTapemark" => ["long",  ["long", "long", "long", "long"]],
+    "_hread" => ["long",  ["long", "ptr", "long"]],
+    "_hwrite" => ["long",  ["long", "str", "long"]],
+    "_lclose" => ["long",  ["long"]],
+    "_lcreat" => ["long",  ["str", "long"]],
+    "_llseek" => ["long",  ["long", "long", "long"]],
+    "_lopen" => ["long",  ["str", "long"]],
+    "_lread" => ["long",  ["long", "ptr", "long"]],
+    "_lwrite" => ["long",  ["long", "str", "long"]],
+    "lstrcat" => ["str",  ["str", "str"]],
+    "lstrcatA" => ["str",  ["str", "str"]],
+    "lstrcatW" => ["wstr",  ["wstr", "wstr"]],
+    "lstrcmp" => ["long",  ["str", "str"]],
+    "lstrcmpA" => ["long",  ["str", "str"]],
+    "lstrcmpW" => ["long",  ["wstr", "wstr"]],
+    "lstrcmpi" => ["long",  ["str", "str"]],
+    "lstrcmpiA" => ["long",  ["str", "str"]],
+    "lstrcmpiW" => ["long",  ["wstr", "wstr"]],
+    "lstrcpy" => ["str",  ["str", "str"]],
+    "lstrcpyA" => ["str",  ["str", "str"]],
+    "lstrcpyW" => ["wstr",  ["wstr", "wstr"]],
+    "lstrcpyn" => ["str",  ["str", "str", "long"]],
+    "lstrcpynA" => ["str",  ["str", "str", "long"]],
+    "lstrcpynW" => ["wstr",  ["wstr", "wstr", "long"]],
+    "lstrlen" => ["long",  ["str"]],
+    "lstrlenA" => ["long",  ["str"]],
+    "lstrlenW" => ["long",  ["wstr"]],
+    "wine_call_to_16_long" => ["long",  ["ptr", "long"]],
+    "wine_call_to_16_regs_long" => ["void",  ["ptr", "long"]],
+    "wine_call_to_16_regs_short" => ["void",  ["ptr", "long"]],
+    "wine_call_to_16_word" => ["long",  ["ptr", "long"]],
+    "wine_get_unix_file_name" => ["long",  ["str", "str", "long"]]
+};
+
+&wine::declare("kernel32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/lz32.pm b/programs/winetest/include/lz32.pm
new file mode 100644
index 0000000..0a983b2
--- /dev/null
+++ b/programs/winetest/include/lz32.pm
@@ -0,0 +1,31 @@
+package lz32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "CopyLZFile" => ["long",  ["long", "long"]],
+    "GetExpandedNameA" => ["long",  ["str", "str"]],
+    "GetExpandedNameW" => ["long",  ["wstr", "wstr"]],
+    "LZClose" => ["void",  ["long"]],
+    "LZCopy" => ["long",  ["long", "long"]],
+    "LZDone" => ["void",  []],
+    "LZInit" => ["long",  ["long"]],
+    "LZOpenFileA" => ["long",  ["str", "ptr", "long"]],
+    "LZOpenFileW" => ["long",  ["wstr", "ptr", "long"]],
+    "LZRead" => ["long",  ["long", "ptr", "long"]],
+    "LZSeek" => ["long",  ["long", "long", "long"]],
+    "LZStart" => ["long",  []]
+};
+
+&wine::declare("lz32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/mcianim_drv.pm b/programs/winetest/include/mcianim_drv.pm
new file mode 100644
index 0000000..f2f42b4
--- /dev/null
+++ b/programs/winetest/include/mcianim_drv.pm
@@ -0,0 +1,20 @@
+package mcianim_drv;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "DriverProc" => ["long",  ["long", "long", "long", "long", "long"]]
+};
+
+&wine::declare("mcianim.drv",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/mciavi_drv.pm b/programs/winetest/include/mciavi_drv.pm
new file mode 100644
index 0000000..0c44b7e
--- /dev/null
+++ b/programs/winetest/include/mciavi_drv.pm
@@ -0,0 +1,20 @@
+package mciavi_drv;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "DriverProc" => ["long",  ["long", "long", "long", "long", "long"]]
+};
+
+&wine::declare("mciavi.drv",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/mcicda_drv.pm b/programs/winetest/include/mcicda_drv.pm
new file mode 100644
index 0000000..ff020f5
--- /dev/null
+++ b/programs/winetest/include/mcicda_drv.pm
@@ -0,0 +1,20 @@
+package mcicda_drv;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "DriverProc" => ["long",  ["long", "long", "long", "long", "long"]]
+};
+
+&wine::declare("mcicda.drv",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/mciseq_drv.pm b/programs/winetest/include/mciseq_drv.pm
new file mode 100644
index 0000000..25e0e12
--- /dev/null
+++ b/programs/winetest/include/mciseq_drv.pm
@@ -0,0 +1,20 @@
+package mciseq_drv;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "DriverProc" => ["long",  ["long", "long", "long", "long", "long"]]
+};
+
+&wine::declare("mciseq.drv",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/mciwave_drv.pm b/programs/winetest/include/mciwave_drv.pm
new file mode 100644
index 0000000..fe71d70
--- /dev/null
+++ b/programs/winetest/include/mciwave_drv.pm
@@ -0,0 +1,20 @@
+package mciwave_drv;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "DriverProc" => ["long",  ["long", "long", "long", "long", "long"]]
+};
+
+&wine::declare("mciwave.drv",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/midimap_drv.pm b/programs/winetest/include/midimap_drv.pm
new file mode 100644
index 0000000..2127ea4
--- /dev/null
+++ b/programs/winetest/include/midimap_drv.pm
@@ -0,0 +1,21 @@
+package midimap_drv;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "DriverProc" => ["long",  ["long", "long", "long", "long", "long"]],
+    "modMessage" => ["long",  ["long", "long", "long", "long", "long"]]
+};
+
+&wine::declare("midimap.drv",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/mpr.pm b/programs/winetest/include/mpr.pm
new file mode 100644
index 0000000..4faa1b8
--- /dev/null
+++ b/programs/winetest/include/mpr.pm
@@ -0,0 +1,87 @@
+package mpr;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "MultinetGetConnectionPerformanceA" => ["long",  ["ptr", "ptr"]],
+    "MultinetGetConnectionPerformanceW" => ["long",  ["ptr", "ptr"]],
+    "MultinetGetErrorTextA" => ["long",  ["long", "long", "long"]],
+    "MultinetGetErrorTextW" => ["long",  ["long", "long", "long"]],
+    "NPSAuthenticationDialogA" => ["long",  ["ptr"]],
+    "NPSCopyStringA" => ["long",  ["str", "ptr", "ptr"]],
+    "NPSDeviceGetNumberA" => ["long",  ["str", "ptr", "ptr"]],
+    "NPSDeviceGetStringA" => ["long",  ["long", "long", "str", "ptr"]],
+    "NPSGetProviderHandleA" => ["long",  ["ptr"]],
+    "NPSGetProviderNameA" => ["long",  ["long", "ptr"]],
+    "NPSGetSectionNameA" => ["long",  ["long", "ptr"]],
+    "NPSNotifyGetContextA" => ["ptr",  ["ptr"]],
+    "NPSNotifyRegisterA" => ["long",  ["long", "ptr"]],
+    "NPSSetCustomTextA" => ["void",  ["str"]],
+    "NPSSetExtendedErrorA" => ["long",  ["long", "str"]],
+    "WNetAddConnection2A" => ["long",  ["ptr", "str", "str", "long"]],
+    "WNetAddConnection2W" => ["long",  ["ptr", "wstr", "wstr", "long"]],
+    "WNetAddConnection3A" => ["long",  ["long", "ptr", "str", "str", "long"]],
+    "WNetAddConnection3W" => ["long",  ["long", "ptr", "wstr", "wstr", "long"]],
+    "WNetAddConnectionA" => ["long",  ["str", "str", "str"]],
+    "WNetAddConnectionW" => ["long",  ["wstr", "wstr", "wstr"]],
+    "WNetCachePassword" => ["long",  ["str", "long", "str", "long", "long", "long"]],
+    "WNetCancelConnection2A" => ["long",  ["str", "long", "long"]],
+    "WNetCancelConnection2W" => ["long",  ["wstr", "long", "long"]],
+    "WNetCancelConnectionA" => ["long",  ["str", "long"]],
+    "WNetCancelConnectionW" => ["long",  ["wstr", "long"]],
+    "WNetCloseEnum" => ["long",  ["long"]],
+    "WNetConnectionDialog" => ["long",  ["long", "long"]],
+    "WNetConnectionDialog1A" => ["long",  ["ptr"]],
+    "WNetConnectionDialog1W" => ["long",  ["ptr"]],
+    "WNetDisconnectDialog" => ["long",  ["long", "long"]],
+    "WNetDisconnectDialog1A" => ["long",  ["ptr"]],
+    "WNetDisconnectDialog1W" => ["long",  ["ptr"]],
+    "WNetEnumCachedPasswords" => ["long",  ["str", "long", "long", "ptr", "long"]],
+    "WNetEnumResourceA" => ["long",  ["long", "ptr", "ptr", "ptr"]],
+    "WNetEnumResourceW" => ["long",  ["long", "ptr", "ptr", "ptr"]],
+    "WNetGetCachedPassword" => ["long",  ["str", "long", "str", "ptr", "long"]],
+    "WNetGetConnectionA" => ["long",  ["str", "str", "ptr"]],
+    "WNetGetConnectionW" => ["long",  ["wstr", "wstr", "ptr"]],
+    "WNetGetLastErrorA" => ["long",  ["ptr", "str", "long", "str", "long"]],
+    "WNetGetLastErrorW" => ["long",  ["ptr", "wstr", "long", "wstr", "long"]],
+    "WNetGetNetworkInformationA" => ["long",  ["str", "ptr"]],
+    "WNetGetNetworkInformationW" => ["long",  ["wstr", "ptr"]],
+    "WNetGetProviderNameA" => ["long",  ["long", "str", "ptr"]],
+    "WNetGetProviderNameW" => ["long",  ["long", "wstr", "ptr"]],
+    "WNetGetResourceInformationA" => ["long",  ["ptr", "ptr", "ptr", "ptr"]],
+    "WNetGetResourceInformationW" => ["long",  ["ptr", "ptr", "ptr", "ptr"]],
+    "WNetGetResourceParentA" => ["long",  ["ptr", "ptr", "ptr"]],
+    "WNetGetResourceParentW" => ["long",  ["ptr", "ptr", "ptr"]],
+    "WNetGetUniversalNameA" => ["long",  ["str", "long", "ptr", "ptr"]],
+    "WNetGetUniversalNameW" => ["long",  ["wstr", "long", "ptr", "ptr"]],
+    "WNetGetUserA" => ["long",  ["str", "str", "ptr"]],
+    "WNetGetUserW" => ["long",  ["wstr", "wstr", "ptr"]],
+    "WNetLogoffA" => ["long",  ["str", "long"]],
+    "WNetLogoffW" => ["long",  ["wstr", "long"]],
+    "WNetLogonA" => ["long",  ["str", "long"]],
+    "WNetLogonW" => ["long",  ["wstr", "long"]],
+    "WNetOpenEnumA" => ["long",  ["long", "long", "long", "ptr", "ptr"]],
+    "WNetOpenEnumW" => ["long",  ["long", "long", "long", "ptr", "ptr"]],
+    "WNetRemoveCachedPassword" => ["long",  ["str", "long", "long"]],
+    "WNetRestoreConnectionA" => ["long",  ["long", "str"]],
+    "WNetRestoreConnectionW" => ["long",  ["long", "wstr"]],
+    "WNetSetConnectionA" => ["long",  ["str", "long", "ptr"]],
+    "WNetSetConnectionW" => ["long",  ["wstr", "long", "ptr"]],
+    "WNetUseConnectionA" => ["long",  ["long", "ptr", "str", "str", "long", "str", "ptr", "ptr"]],
+    "WNetUseConnectionW" => ["long",  ["long", "ptr", "wstr", "wstr", "long", "wstr", "ptr", "ptr"]],
+    "WNetVerifyPasswordA" => ["long",  ["str", "ptr"]],
+    "WNetVerifyPasswordW" => ["long",  ["wstr", "ptr"]]
+};
+
+&wine::declare("mpr",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/msacm32.pm b/programs/winetest/include/msacm32.pm
new file mode 100644
index 0000000..454712e
--- /dev/null
+++ b/programs/winetest/include/msacm32.pm
@@ -0,0 +1,62 @@
+package msacm32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "DriverProc" => ["long",  ["long", "long", "long", "long", "long"]],
+    "acmDriverAddA" => ["long",  ["ptr", "long", "long", "long", "long"]],
+    "acmDriverAddW" => ["long",  ["ptr", "long", "long", "long", "long"]],
+    "acmDriverClose" => ["long",  ["long", "long"]],
+    "acmDriverDetailsA" => ["long",  ["long", "ptr", "long"]],
+    "acmDriverDetailsW" => ["long",  ["long", "ptr", "long"]],
+    "acmDriverEnum" => ["long",  ["ptr", "long", "long"]],
+    "acmDriverID" => ["long",  ["long", "ptr", "long"]],
+    "acmDriverMessage" => ["long",  ["long", "long", "long", "long"]],
+    "acmDriverOpen" => ["long",  ["ptr", "long", "long"]],
+    "acmDriverPriority" => ["long",  ["long", "long", "long"]],
+    "acmDriverRemove" => ["long",  ["long", "long"]],
+    "acmFilterChooseA" => ["long",  ["ptr"]],
+    "acmFilterChooseW" => ["long",  ["ptr"]],
+    "acmFilterDetailsA" => ["long",  ["long", "ptr", "long"]],
+    "acmFilterDetailsW" => ["long",  ["long", "ptr", "long"]],
+    "acmFilterEnumA" => ["long",  ["long", "ptr", "ptr", "long", "long"]],
+    "acmFilterEnumW" => ["long",  ["long", "ptr", "ptr", "long", "long"]],
+    "acmFilterTagDetailsA" => ["long",  ["long", "ptr", "long"]],
+    "acmFilterTagDetailsW" => ["long",  ["long", "ptr", "long"]],
+    "acmFilterTagEnumA" => ["long",  ["long", "ptr", "ptr", "long", "long"]],
+    "acmFilterTagEnumW" => ["long",  ["long", "ptr", "ptr", "long", "long"]],
+    "acmFormatChooseA" => ["long",  ["ptr"]],
+    "acmFormatChooseW" => ["long",  ["ptr"]],
+    "acmFormatDetailsA" => ["long",  ["long", "ptr", "long"]],
+    "acmFormatDetailsW" => ["long",  ["long", "ptr", "long"]],
+    "acmFormatEnumA" => ["long",  ["long", "ptr", "ptr", "long", "long"]],
+    "acmFormatEnumW" => ["long",  ["long", "ptr", "ptr", "long", "long"]],
+    "acmFormatSuggest" => ["long",  ["long", "ptr", "ptr", "long", "long"]],
+    "acmFormatTagDetailsA" => ["long",  ["long", "ptr", "long"]],
+    "acmFormatTagDetailsW" => ["long",  ["long", "ptr", "long"]],
+    "acmFormatTagEnumA" => ["long",  ["long", "ptr", "ptr", "long", "long"]],
+    "acmFormatTagEnumW" => ["long",  ["long", "ptr", "ptr", "long", "long"]],
+    "acmGetVersion" => ["long",  []],
+    "acmMetrics" => ["long",  ["long", "long", "ptr"]],
+    "acmStreamClose" => ["long",  ["long", "long"]],
+    "acmStreamConvert" => ["long",  ["long", "ptr", "long"]],
+    "acmStreamMessage" => ["long",  ["long", "long", "long", "long"]],
+    "acmStreamOpen" => ["long",  ["ptr", "long", "ptr", "ptr", "ptr", "long", "long", "long"]],
+    "acmStreamPrepareHeader" => ["long",  ["long", "ptr", "long"]],
+    "acmStreamReset" => ["long",  ["long", "long"]],
+    "acmStreamSize" => ["long",  ["long", "long", "ptr", "long"]],
+    "acmStreamUnprepareHeader" => ["long",  ["long", "ptr", "long"]]
+};
+
+&wine::declare("msacm32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/msacm_drv.pm b/programs/winetest/include/msacm_drv.pm
new file mode 100644
index 0000000..80143be
--- /dev/null
+++ b/programs/winetest/include/msacm_drv.pm
@@ -0,0 +1,22 @@
+package msacm_drv;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "DriverProc" => ["long",  ["long", "long", "long", "long", "long"]],
+    "widMessage" => ["long",  ["long", "long", "long", "long", "long"]],
+    "wodMessage" => ["long",  ["long", "long", "long", "long", "long"]]
+};
+
+&wine::declare("msacm.drv",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/msvcrt.pm b/programs/winetest/include/msvcrt.pm
new file mode 100644
index 0000000..d232f35
--- /dev/null
+++ b/programs/winetest/include/msvcrt.pm
@@ -0,0 +1,23 @@
+package msvcrt;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "\?\?8type_info\@\@QBEHABV0\@\@Z" => ["long",  ["ptr", "ptr"]],
+    "\?\?9type_info\@\@QBEHABV0\@\@Z" => ["long",  ["ptr", "ptr"]],
+    "\?name\@type_info\@\@QBEPBDXZ" => ["ptr",  ["ptr"]],
+    "\?raw_name\@type_info\@\@QBEPBDXZ" => ["ptr",  ["ptr"]]
+};
+
+&wine::declare("msvcrt",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/msvfw32.pm b/programs/winetest/include/msvfw32.pm
new file mode 100644
index 0000000..5c767b6
--- /dev/null
+++ b/programs/winetest/include/msvfw32.pm
@@ -0,0 +1,40 @@
+package msvfw32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "VideoForWindowsVersion" => ["long",  []],
+    "DrawDibBegin" => ["long",  ["long", "long", "long", "long", "ptr", "long", "long", "long"]],
+    "DrawDibClose" => ["long",  ["long"]],
+    "DrawDibDraw" => ["long",  ["long", "long", "long", "long", "long", "long", "ptr", "ptr", "long", "long", "long", "long", "long"]],
+    "DrawDibEnd" => ["long",  ["long"]],
+    "DrawDibGetPalette" => ["long",  ["long"]],
+    "DrawDibOpen" => ["long",  []],
+    "DrawDibRealize" => ["long",  ["long", "long", "long"]],
+    "DrawDibSetPalette" => ["long",  ["long", "long"]],
+    "DrawDibStart" => ["long",  ["long", "long"]],
+    "DrawDibStop" => ["long",  ["long"]],
+    "ICClose" => ["long",  ["long"]],
+    "ICGetDisplayFormat" => ["long",  ["long", "ptr", "ptr", "long", "long", "long"]],
+    "ICGetInfo" => ["long",  ["long", "ptr", "long"]],
+    "ICImageCompress" => ["long",  ["long", "long", "ptr", "ptr", "ptr", "long", "ptr"]],
+    "ICImageDecompress" => ["long",  ["long", "long", "ptr", "ptr", "ptr"]],
+    "ICInfo" => ["long",  ["long", "long", "ptr"]],
+    "ICLocate" => ["long",  ["long", "long", "ptr", "ptr", "long"]],
+    "ICOpenFunction" => ["long",  ["long", "long", "long", "ptr"]],
+    "ICSendMessage" => ["long",  ["long", "long", "long", "long"]],
+    "MCIWndRegisterClass" => ["long",  ["long"]]
+};
+
+&wine::declare("msvfw32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/ntdll.pm b/programs/winetest/include/ntdll.pm
new file mode 100644
index 0000000..be978d9
--- /dev/null
+++ b/programs/winetest/include/ntdll.pm
@@ -0,0 +1,339 @@
+package ntdll;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "DbgBreakPoint" => ["void",  []],
+    "DbgUserBreakPoint" => ["void",  []],
+    "NtAcceptConnectPort" => ["long",  ["long", "long", "long", "long", "long", "long"]],
+    "NtAccessCheck" => ["long",  ["ptr", "long", "long", "ptr", "ptr", "ptr", "ptr", "ptr"]],
+    "NtAdjustPrivilegesToken" => ["long",  ["long", "long", "ptr", "long", "ptr", "ptr"]],
+    "NtAllocateLocallyUniqueId" => ["long",  ["ptr"]],
+    "NtAllocateUuids" => ["long",  ["ptr", "ptr", "ptr"]],
+    "NtClearEvent" => ["long",  ["long"]],
+    "NtClose" => ["long",  ["long"]],
+    "NtCompleteConnectPort" => ["long",  ["long"]],
+    "NtConnectPort" => ["long",  ["long", "ptr", "long", "long", "long", "long", "long", "long"]],
+    "NtCreateDirectoryObject" => ["long",  ["ptr", "long", "ptr"]],
+    "NtCreateEvent" => ["long",  ["ptr", "long", "ptr", "long", "long"]],
+    "NtCreateFile" => ["long",  ["ptr", "long", "ptr", "ptr", "ptr", "long", "long", "long", "long", "ptr", "long"]],
+    "NtCreateKey" => ["long",  ["ptr", "long", "ptr", "long", "ptr", "long", "ptr"]],
+    "NtCreateMailslotFile" => ["long",  ["long", "long", "long", "long", "long", "long", "long", "long"]],
+    "NtCreatePagingFile" => ["long",  ["ptr", "long", "long", "ptr"]],
+    "NtCreatePort" => ["long",  ["long", "long", "long", "long", "long"]],
+    "NtCreateSection" => ["long",  ["ptr", "long", "ptr", "ptr", "long", "long", "long"]],
+    "NtCreateSemaphore" => ["long",  ["ptr", "long", "ptr", "long", "long"]],
+    "NtCreateSymbolicLinkObject" => ["long",  ["ptr", "long", "ptr", "ptr"]],
+    "NtCreateTimer" => ["long",  ["ptr", "long", "ptr", "long"]],
+    "NtCurrentTeb" => ["ptr",  []],
+    "NtDeleteKey" => ["long",  ["long"]],
+    "NtDeleteValueKey" => ["long",  ["long", "ptr"]],
+    "NtDeviceIoControlFile" => ["long",  ["long", "long", "ptr", "ptr", "ptr", "long", "ptr", "long", "ptr", "long"]],
+    "NtDisplayString" => ["long",  ["ptr"]],
+    "NtDuplicateObject" => ["long",  ["long", "ptr", "long", "ptr", "long", "long", "long"]],
+    "NtDuplicateToken" => ["long",  ["long", "long", "ptr", "long", "long", "ptr"]],
+    "NtEnumerateKey" => ["long",  ["long", "long", "long", "ptr", "long", "ptr"]],
+    "NtEnumerateValueKey" => ["long",  ["long", "long", "long", "ptr", "long", "ptr"]],
+    "NtFlushKey" => ["long",  ["long"]],
+    "NtFsControlFile" => ["long",  ["long", "long", "ptr", "ptr", "ptr", "long", "ptr", "long", "ptr", "long"]],
+    "NtListenPort" => ["long",  ["long", "long"]],
+    "NtLoadKey" => ["long",  ["ptr", "ptr"]],
+    "NtMapViewOfSection" => ["long",  ["long", "long", "ptr", "long", "long", "ptr", "ptr", "long", "long", "long"]],
+    "NtNotifyChangeKey" => ["long",  ["long", "long", "ptr", "ptr", "ptr", "long", "long", "ptr", "long", "long"]],
+    "NtOpenDirectoryObject" => ["long",  ["ptr", "long", "ptr"]],
+    "NtOpenEvent" => ["long",  ["ptr", "long", "ptr"]],
+    "NtOpenFile" => ["long",  ["ptr", "long", "ptr", "ptr", "long", "long"]],
+    "NtOpenKey" => ["long",  ["ptr", "long", "ptr"]],
+    "NtOpenProcessToken" => ["long",  ["long", "long", "ptr"]],
+    "NtOpenSection" => ["long",  ["ptr", "long", "ptr"]],
+    "NtOpenSemaphore" => ["long",  ["ptr", "long", "ptr"]],
+    "NtOpenSymbolicLinkObject" => ["long",  ["ptr", "long", "ptr"]],
+    "NtOpenThreadToken" => ["long",  ["long", "long", "long", "ptr"]],
+    "NtPowerInformation" => ["long",  ["long", "long", "long", "long", "long"]],
+    "NtPulseEvent" => ["long",  ["long", "ptr"]],
+    "NtQueryDirectoryFile" => ["long",  ["long", "long", "ptr", "ptr", "ptr", "ptr", "long", "long", "long", "ptr", "long"]],
+    "NtQueryDirectoryObject" => ["long",  ["long", "ptr", "long", "long", "long", "ptr", "ptr"]],
+    "NtQueryEvent" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "NtQueryInformationFile" => ["long",  ["long", "ptr", "ptr", "long", "long"]],
+    "NtQueryInformationProcess" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "NtQueryInformationThread" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "NtQueryInformationToken" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "NtQueryKey" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "NtQueryObject" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "NtQueryPerformanceCounter" => ["long",  ["ptr", "ptr"]],
+    "NtQuerySection" => ["long",  ["long", "ptr", "ptr", "long", "ptr"]],
+    "NtQuerySecurityObject" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "NtQuerySemaphore" => ["long",  ["long", "ptr", "ptr", "long", "ptr"]],
+    "NtQuerySymbolicLinkObject" => ["long",  ["long", "ptr", "ptr"]],
+    "NtQuerySystemInformation" => ["long",  ["long", "ptr", "long", "ptr"]],
+    "NtQuerySystemTime" => ["void",  ["ptr"]],
+    "NtQueryTimerResolution" => ["long",  ["long", "long", "long"]],
+    "NtQueryValueKey" => ["long",  ["long", "ptr", "long", "ptr", "long", "ptr"]],
+    "NtQueryVolumeInformationFile" => ["long",  ["long", "ptr", "ptr", "long", "long"]],
+    "NtRaiseException" => ["void",  ["ptr", "ptr", "long", "ptr"]],
+    "NtReadFile" => ["long",  ["long", "long", "ptr", "ptr", "ptr", "ptr", "long", "ptr", "ptr"]],
+    "NtRegisterThreadTerminatePort" => ["long",  ["long"]],
+    "NtReleaseSemaphore" => ["long",  ["long", "long", "ptr"]],
+    "NtReplaceKey" => ["long",  ["ptr", "long", "ptr"]],
+    "NtReplyWaitReceivePort" => ["long",  ["long", "long", "long", "long"]],
+    "NtRequestWaitReplyPort" => ["long",  ["long", "long", "long"]],
+    "NtResetEvent" => ["long",  ["long", "ptr"]],
+    "NtRestoreKey" => ["long",  ["long", "long", "long"]],
+    "NtResumeThread" => ["long",  ["long", "ptr"]],
+    "NtSaveKey" => ["long",  ["long", "long"]],
+    "NtSetEvent" => ["long",  ["long", "ptr"]],
+    "NtSetInformationFile" => ["long",  ["long", "ptr", "ptr", "long", "long"]],
+    "NtSetInformationKey" => ["long",  ["long", "long", "ptr", "long"]],
+    "NtSetInformationProcess" => ["long",  ["long", "long", "ptr", "long"]],
+    "NtSetInformationThread" => ["long",  ["long", "long", "ptr", "long"]],
+    "NtSetIntervalProfile" => ["long",  ["long", "long"]],
+    "NtSetSecurityObject" => ["long",  ["long", "long", "ptr"]],
+    "NtSetTimer" => ["long",  ["long", "ptr", "ptr", "ptr", "long", "long", "ptr"]],
+    "NtSetValueKey" => ["long",  ["long", "ptr", "long", "long", "ptr", "long"]],
+    "NtSetVolumeInformationFile" => ["long",  ["long", "ptr", "ptr", "long", "long"]],
+    "NtTerminateProcess" => ["long",  ["long", "long"]],
+    "NtTerminateThread" => ["long",  ["long", "long"]],
+    "NtUnloadKey" => ["long",  ["long"]],
+    "NtWaitForSingleObject" => ["long",  ["ptr", "long", "ptr"]],
+    "RtlAcquirePebLock" => ["void",  []],
+    "RtlAcquireResourceExclusive" => ["long",  ["ptr", "long"]],
+    "RtlAcquireResourceShared" => ["long",  ["ptr", "long"]],
+    "RtlAddAccessAllowedAce" => ["long",  ["ptr", "long", "long", "ptr"]],
+    "RtlAddAce" => ["long",  ["ptr", "long", "long", "ptr", "long"]],
+    "RtlAdjustPrivilege" => ["long",  ["long", "long", "long", "long"]],
+    "RtlAllocateAndInitializeSid" => ["long",  ["ptr", "long", "long", "long", "long", "long", "long", "long", "long", "long", "ptr"]],
+    "RtlAllocateHeap" => ["ptr",  ["long", "long", "long"]],
+    "RtlAnsiStringToUnicodeSize" => ["long",  ["ptr"]],
+    "RtlAnsiStringToUnicodeString" => ["long",  ["ptr", "ptr", "long"]],
+    "RtlAppendAsciizToString" => ["long",  ["ptr", "str"]],
+    "RtlAppendStringToString" => ["long",  ["ptr", "ptr"]],
+    "RtlAppendUnicodeStringToString" => ["long",  ["ptr", "ptr"]],
+    "RtlAppendUnicodeToString" => ["long",  ["ptr", "wstr"]],
+    "RtlAssert" => ["void",  ["ptr", "ptr", "long", "long"]],
+    "RtlClearBits" => ["long",  ["long", "long", "long"]],
+    "RtlCompactHeap" => ["long",  ["long", "long"]],
+    "RtlCompareMemory" => ["long",  ["ptr", "ptr", "long"]],
+    "RtlCompareString" => ["long",  ["ptr", "ptr", "long"]],
+    "RtlCompareUnicodeString" => ["long",  ["ptr", "ptr", "long"]],
+    "RtlConvertLongToLargeInteger" => ["longlong",  ["long"]],
+    "RtlConvertSidToUnicodeString" => ["long",  ["ptr", "ptr"]],
+    "RtlConvertUlongToLargeInteger" => ["longlong",  ["long"]],
+    "RtlCopySid" => ["long",  ["long", "ptr", "ptr"]],
+    "RtlCopyString" => ["void",  ["ptr", "ptr"]],
+    "RtlCopyUnicodeString" => ["void",  ["ptr", "ptr"]],
+    "RtlCreateAcl" => ["long",  ["ptr", "long", "long"]],
+    "RtlCreateEnvironment" => ["long",  ["long", "long"]],
+    "RtlCreateHeap" => ["long",  ["long", "ptr", "long", "long", "ptr", "ptr"]],
+    "RtlCreateSecurityDescriptor" => ["long",  ["ptr", "long"]],
+    "RtlCreateUnicodeString" => ["long",  ["ptr", "wstr"]],
+    "RtlCreateUnicodeStringFromAsciiz" => ["long",  ["ptr", "str"]],
+    "RtlDeleteCriticalSection" => ["long",  ["ptr"]],
+    "RtlDeleteResource" => ["void",  ["ptr"]],
+    "RtlDeleteSecurityObject" => ["long",  ["long"]],
+    "RtlDestroyEnvironment" => ["long",  ["long"]],
+    "RtlDestroyHeap" => ["long",  ["long"]],
+    "RtlDosPathNameToNtPathName_U" => ["long",  ["wstr", "ptr", "long", "long"]],
+    "RtlDumpResource" => ["void",  ["ptr"]],
+    "RtlEnlargedIntegerMultiply" => ["longlong",  ["long", "long"]],
+    "RtlEnlargedUnsignedDivide" => ["long",  ["long", "long", "long", "ptr"]],
+    "RtlEnlargedUnsignedMultiply" => ["longlong",  ["long", "long"]],
+    "RtlEnterCriticalSection" => ["long",  ["ptr"]],
+    "RtlEqualPrefixSid" => ["long",  ["ptr", "ptr"]],
+    "RtlEqualSid" => ["long",  ["ptr", "ptr"]],
+    "RtlEqualString" => ["long",  ["ptr", "ptr", "long"]],
+    "RtlEqualUnicodeString" => ["long",  ["ptr", "ptr", "long"]],
+    "RtlEraseUnicodeString" => ["void",  ["ptr"]],
+    "RtlExtendedIntegerMultiply" => ["longlong",  ["long", "long", "long"]],
+    "RtlExtendedLargeIntegerDivide" => ["longlong",  ["long", "long", "long", "ptr"]],
+    "RtlFillMemory" => ["void",  ["ptr", "long", "long"]],
+    "RtlFindClearBits" => ["long",  ["long", "long", "long"]],
+    "RtlFirstFreeAce" => ["long",  ["ptr", "ptr"]],
+    "RtlFormatCurrentUserKeyPath" => ["long",  ["ptr"]],
+    "RtlFreeAnsiString" => ["void",  ["ptr"]],
+    "RtlFreeHeap" => ["long",  ["long", "long", "ptr"]],
+    "RtlFreeOemString" => ["void",  ["ptr"]],
+    "RtlFreeSid" => ["long",  ["ptr"]],
+    "RtlFreeUnicodeString" => ["void",  ["ptr"]],
+    "RtlGetAce" => ["long",  ["ptr", "long", "ptr"]],
+    "RtlGetControlSecurityDescriptor" => ["long",  ["ptr", "ptr", "ptr"]],
+    "RtlGetDaclSecurityDescriptor" => ["long",  ["ptr", "ptr", "ptr", "ptr"]],
+    "RtlGetGroupSecurityDescriptor" => ["long",  ["ptr", "ptr", "ptr"]],
+    "RtlGetNtProductType" => ["long",  ["ptr"]],
+    "RtlGetOwnerSecurityDescriptor" => ["long",  ["ptr", "ptr", "ptr"]],
+    "RtlGetProcessHeaps" => ["long",  ["long", "ptr"]],
+    "RtlGetSaclSecurityDescriptor" => ["long",  ["ptr", "ptr", "ptr", "ptr"]],
+    "RtlIdentifierAuthoritySid" => ["ptr",  ["ptr"]],
+    "RtlImageNtHeader" => ["ptr",  ["long"]],
+    "RtlImpersonateSelf" => ["long",  ["long"]],
+    "RtlInitAnsiString" => ["void",  ["ptr", "str"]],
+    "RtlInitString" => ["void",  ["ptr", "str"]],
+    "RtlInitUnicodeString" => ["void",  ["ptr", "wstr"]],
+    "RtlInitializeBitMap" => ["long",  ["long", "long", "long"]],
+    "RtlInitializeCriticalSection" => ["long",  ["ptr"]],
+    "RtlInitializeCriticalSectionAndSpinCount" => ["long",  ["ptr", "long"]],
+    "RtlInitializeGenericTable" => ["long",  []],
+    "RtlInitializeResource" => ["void",  ["ptr"]],
+    "RtlInitializeSid" => ["long",  ["ptr", "ptr", "long"]],
+    "RtlIntegerToChar" => ["long",  ["long", "long", "long", "long"]],
+    "RtlIsTextUnicode" => ["long",  ["ptr", "long", "ptr"]],
+    "RtlLargeIntegerAdd" => ["longlong",  ["long", "long", "long", "long"]],
+    "RtlLargeIntegerArithmeticShift" => ["longlong",  ["long", "long", "long"]],
+    "RtlLargeIntegerDivide" => ["longlong",  ["long", "long", "long", "long", "ptr"]],
+    "RtlLargeIntegerNegate" => ["longlong",  ["long", "long"]],
+    "RtlLargeIntegerShiftLeft" => ["longlong",  ["long", "long", "long"]],
+    "RtlLargeIntegerShiftRight" => ["longlong",  ["long", "long", "long"]],
+    "RtlLargeIntegerSubtract" => ["longlong",  ["long", "long", "long", "long"]],
+    "RtlLeaveCriticalSection" => ["long",  ["ptr"]],
+    "RtlLengthRequiredSid" => ["long",  ["long"]],
+    "RtlLengthSecurityDescriptor" => ["long",  ["ptr"]],
+    "RtlLengthSid" => ["long",  ["ptr"]],
+    "RtlLockHeap" => ["long",  ["long"]],
+    "RtlMakeSelfRelativeSD" => ["long",  ["ptr", "ptr", "ptr"]],
+    "RtlMoveMemory" => ["void",  ["ptr", "ptr", "long"]],
+    "RtlMultiByteToUnicodeN" => ["long",  ["wstr", "long", "ptr", "str", "long"]],
+    "RtlMultiByteToUnicodeSize" => ["long",  ["ptr", "str", "long"]],
+    "RtlNewSecurityObject" => ["long",  ["long", "long", "long", "long", "long", "long"]],
+    "RtlNormalizeProcessParams" => ["ptr",  ["ptr"]],
+    "RtlNtStatusToDosError" => ["long",  ["long"]],
+    "RtlOemStringToUnicodeSize" => ["long",  ["ptr"]],
+    "RtlOemStringToUnicodeString" => ["long",  ["ptr", "ptr", "long"]],
+    "RtlOemToUnicodeN" => ["long",  ["wstr", "long", "ptr", "str", "long"]],
+    "RtlOpenCurrentUser" => ["long",  ["long", "ptr"]],
+    "RtlPrefixString" => ["long",  ["ptr", "ptr", "long"]],
+    "RtlPrefixUnicodeString" => ["long",  ["ptr", "ptr", "long"]],
+    "RtlQueryEnvironmentVariable_U" => ["long",  ["long", "ptr", "ptr"]],
+    "RtlRaiseException" => ["void",  ["ptr", "ptr"]],
+    "RtlRaiseStatus" => ["void",  ["long"]],
+    "RtlReAllocateHeap" => ["ptr",  ["long", "long", "ptr", "long"]],
+    "RtlReleasePebLock" => ["void",  []],
+    "RtlReleaseResource" => ["void",  ["ptr"]],
+    "RtlSecondsSince1970ToTime" => ["void",  ["long", "ptr"]],
+    "RtlSecondsSince1980ToTime" => ["void",  ["long", "ptr"]],
+    "RtlSetBits" => ["long",  ["long", "long", "long"]],
+    "RtlSetDaclSecurityDescriptor" => ["long",  ["ptr", "long", "ptr", "long"]],
+    "RtlSetEnvironmentVariable" => ["long",  ["long", "ptr", "ptr"]],
+    "RtlSetGroupSecurityDescriptor" => ["long",  ["ptr", "ptr", "long"]],
+    "RtlSetOwnerSecurityDescriptor" => ["long",  ["ptr", "ptr", "long"]],
+    "RtlSetSaclSecurityDescriptor" => ["long",  ["ptr", "long", "ptr", "long"]],
+    "RtlSizeHeap" => ["long",  ["long", "long", "ptr"]],
+    "RtlSubAuthorityCountSid" => ["ptr",  ["ptr"]],
+    "RtlSubAuthoritySid" => ["ptr",  ["ptr", "long"]],
+    "RtlSystemTimeToLocalTime" => ["void",  ["ptr", "ptr"]],
+    "RtlTimeFieldsToTime" => ["long",  ["ptr", "ptr"]],
+    "RtlTimeToElapsedTimeFields" => ["void",  ["ptr", "ptr"]],
+    "RtlTimeToSecondsSince1970" => ["long",  ["ptr", "ptr"]],
+    "RtlTimeToSecondsSince1980" => ["long",  ["ptr", "ptr"]],
+    "RtlTimeToTimeFields" => ["void",  ["ptr", "ptr"]],
+    "RtlTryEnterCriticalSection" => ["long",  ["ptr"]],
+    "RtlUnicodeStringToAnsiSize" => ["long",  ["ptr"]],
+    "RtlUnicodeStringToAnsiString" => ["long",  ["ptr", "ptr", "long"]],
+    "RtlUnicodeStringToOemSize" => ["long",  ["ptr"]],
+    "RtlUnicodeStringToOemString" => ["long",  ["ptr", "ptr", "long"]],
+    "RtlUnicodeToMultiByteN" => ["long",  ["str", "long", "ptr", "wstr", "long"]],
+    "RtlUnicodeToMultiByteSize" => ["long",  ["ptr", "wstr", "long"]],
+    "RtlUnicodeToOemN" => ["long",  ["str", "long", "ptr", "wstr", "long"]],
+    "RtlUnlockHeap" => ["long",  ["long"]],
+    "RtlUnwind" => ["void",  ["ptr", "ptr", "ptr", "long", "ptr"]],
+    "RtlUpcaseUnicodeString" => ["long",  ["ptr", "ptr", "long"]],
+    "RtlUpcaseUnicodeStringToAnsiString" => ["long",  ["ptr", "ptr", "long"]],
+    "RtlUpcaseUnicodeStringToOemString" => ["long",  ["ptr", "ptr", "long"]],
+    "RtlUpcaseUnicodeToMultiByteN" => ["long",  ["str", "long", "ptr", "wstr", "long"]],
+    "RtlUpcaseUnicodeToOemN" => ["long",  ["str", "long", "ptr", "wstr", "long"]],
+    "RtlUpperString" => ["void",  ["ptr", "ptr"]],
+    "RtlValidSecurityDescriptor" => ["long",  ["ptr"]],
+    "RtlValidSid" => ["long",  ["ptr"]],
+    "RtlValidateHeap" => ["long",  ["long", "long", "ptr"]],
+    "RtlWalkHeap" => ["long",  ["long", "ptr"]],
+    "RtlZeroMemory" => ["void",  ["ptr", "long"]],
+    "RtlpUnWaitCriticalSection" => ["long",  ["ptr"]],
+    "RtlpWaitForCriticalSection" => ["long",  ["ptr"]],
+    "RtlxAnsiStringToUnicodeSize" => ["long",  ["ptr"]],
+    "RtlxOemStringToUnicodeSize" => ["long",  ["ptr"]],
+    "RtlxUnicodeStringToAnsiSize" => ["long",  ["ptr"]],
+    "RtlxUnicodeStringToOemSize" => ["long",  ["ptr"]],
+    "ZwAcceptConnectPort" => ["long",  ["long", "long", "long", "long", "long", "long"]],
+    "ZwAdjustGroupsToken" => ["long",  ["long", "long", "ptr", "long", "ptr", "ptr"]],
+    "ZwCompleteConnectPort" => ["long",  ["long"]],
+    "ZwConnectPort" => ["long",  ["long", "ptr", "long", "long", "long", "long", "long", "long"]],
+    "ZwCreateDirectoryObject" => ["long",  ["ptr", "long", "ptr"]],
+    "ZwCreateEvent" => ["long",  ["ptr", "long", "ptr", "long", "long"]],
+    "ZwCreateFile" => ["long",  ["ptr", "long", "ptr", "ptr", "ptr", "long", "long", "long", "long", "ptr", "long"]],
+    "ZwCreateKey" => ["long",  ["ptr", "long", "ptr", "long", "ptr", "long", "ptr"]],
+    "ZwCreateMailslotFile" => ["long",  ["long", "long", "long", "long", "long", "long", "long", "long"]],
+    "ZwCreatePagingFile" => ["long",  ["ptr", "long", "long", "ptr"]],
+    "ZwCreatePort" => ["long",  ["long", "long", "long", "long", "long"]],
+    "ZwCreateSection" => ["long",  ["ptr", "long", "ptr", "ptr", "long", "long", "long"]],
+    "ZwCreateTimer" => ["long",  ["ptr", "long", "ptr", "long"]],
+    "ZwDeleteKey" => ["long",  ["long"]],
+    "ZwDeleteValueKey" => ["long",  ["long", "ptr"]],
+    "ZwDeviceIoControlFile" => ["long",  ["long", "long", "ptr", "ptr", "ptr", "long", "ptr", "long", "ptr", "long"]],
+    "ZwDuplicateObject" => ["long",  ["long", "ptr", "long", "ptr", "long", "long", "long"]],
+    "ZwDuplicateToken" => ["long",  ["long", "long", "ptr", "long", "long", "ptr"]],
+    "ZwEnumerateKey" => ["long",  ["long", "long", "long", "ptr", "long", "ptr"]],
+    "ZwEnumerateValueKey" => ["long",  ["long", "long", "long", "ptr", "long", "ptr"]],
+    "ZwFlushKey" => ["long",  ["long"]],
+    "ZwFsControlFile" => ["long",  ["long", "long", "ptr", "ptr", "ptr", "long", "ptr", "long", "ptr", "long"]],
+    "ZwListenPort" => ["long",  ["long", "long"]],
+    "ZwLoadKey" => ["long",  ["ptr", "ptr"]],
+    "ZwMapViewOfSection" => ["long",  ["long", "long", "ptr", "long", "long", "ptr", "ptr", "long", "long", "long"]],
+    "ZwNotifyChangeKey" => ["long",  ["long", "long", "ptr", "ptr", "ptr", "long", "long", "ptr", "long", "long"]],
+    "ZwOpenDirectoryObject" => ["long",  ["ptr", "long", "ptr"]],
+    "ZwOpenEvent" => ["long",  ["ptr", "long", "ptr"]],
+    "ZwOpenFile" => ["long",  ["ptr", "long", "ptr", "ptr", "long", "long"]],
+    "ZwOpenKey" => ["long",  ["ptr", "long", "ptr"]],
+    "ZwOpenProcessToken" => ["long",  ["long", "long", "ptr"]],
+    "ZwOpenSection" => ["long",  ["ptr", "long", "ptr"]],
+    "ZwOpenThreadToken" => ["long",  ["long", "long", "long", "ptr"]],
+    "ZwQueryDirectoryFile" => ["long",  ["long", "long", "ptr", "ptr", "ptr", "ptr", "long", "long", "long", "ptr", "long"]],
+    "ZwQueryDirectoryObject" => ["long",  ["long", "ptr", "long", "long", "long", "ptr", "ptr"]],
+    "ZwQueryInformationFile" => ["long",  ["long", "ptr", "ptr", "long", "long"]],
+    "ZwQueryInformationProcess" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "ZwQueryInformationThread" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "ZwQueryInformationToken" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "ZwQueryKey" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "ZwQueryObject" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "ZwQuerySystemInformation" => ["long",  ["long", "ptr", "long", "ptr"]],
+    "ZwQuerySystemTime" => ["void",  ["ptr"]],
+    "ZwQueryValueKey" => ["long",  ["long", "ptr", "long", "ptr", "long", "ptr"]],
+    "ZwQueryVolumeInformationFile" => ["long",  ["long", "ptr", "ptr", "long", "long"]],
+    "ZwReadFile" => ["long",  ["long", "long", "ptr", "ptr", "ptr", "ptr", "long", "ptr", "ptr"]],
+    "ZwRegisterThreadTerminatePort" => ["long",  ["long"]],
+    "ZwReplaceKey" => ["long",  ["ptr", "long", "ptr"]],
+    "ZwReplyWaitReceivePort" => ["long",  ["long", "long", "long", "long"]],
+    "ZwRequestWaitReplyPort" => ["long",  ["long", "long", "long"]],
+    "ZwRestoreKey" => ["long",  ["long", "long", "long"]],
+    "ZwResumeThread" => ["long",  ["long", "ptr"]],
+    "ZwSaveKey" => ["long",  ["long", "long"]],
+    "ZwSetEvent" => ["long",  ["long", "ptr"]],
+    "ZwSetInformationFile" => ["long",  ["long", "ptr", "ptr", "long", "long"]],
+    "ZwSetInformationKey" => ["long",  ["long", "long", "ptr", "long"]],
+    "ZwSetInformationProcess" => ["long",  ["long", "long", "ptr", "long"]],
+    "ZwSetInformationThread" => ["long",  ["long", "long", "ptr", "long"]],
+    "ZwSetIntervalProfile" => ["long",  ["long", "long"]],
+    "ZwSetTimer" => ["long",  ["long", "ptr", "ptr", "ptr", "long", "long", "ptr"]],
+    "ZwSetValueKey" => ["long",  ["long", "ptr", "long", "long", "ptr", "long"]],
+    "ZwSetVolumeInformationFile" => ["long",  ["long", "ptr", "ptr", "long", "long"]],
+    "ZwTerminateThread" => ["long",  ["long", "long"]],
+    "ZwUnloadKey" => ["long",  ["long"]],
+    "ZwWaitForSingleObject" => ["long",  ["ptr", "long", "ptr"]],
+    "_alldiv" => ["longlong",  ["long", "long", "long", "long"]],
+    "_allmul" => ["longlong",  ["long", "long", "long", "long"]],
+    "_alloca_probe" => ["void",  ["ptr"]],
+    "_allrem" => ["longlong",  ["long", "long", "long", "long"]],
+    "_aulldiv" => ["longlong",  ["long", "long", "long", "long"]],
+    "_aullrem" => ["longlong",  ["long", "long", "long", "long"]],
+    "_chkstk" => ["void",  ["ptr"]]
+};
+
+&wine::declare("ntdll",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/odbc32.pm b/programs/winetest/include/odbc32.pm
new file mode 100644
index 0000000..5995b21
--- /dev/null
+++ b/programs/winetest/include/odbc32.pm
@@ -0,0 +1,97 @@
+package odbc32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "SQLAllocConnect" => ["long",  ["long", "ptr"]],
+    "SQLAllocEnv" => ["long",  ["ptr"]],
+    "SQLAllocStmt" => ["long",  ["long", "ptr"]],
+    "SQLBindCol" => ["long",  ["long", "long", "long", "ptr", "long", "ptr"]],
+    "SQLCancel" => ["long",  ["long"]],
+    "SQLColAttributes" => ["long",  ["long", "long", "long", "ptr", "long", "ptr", "ptr"]],
+    "SQLConnect" => ["long",  ["long", "ptr", "long", "ptr", "long", "ptr", "long"]],
+    "SQLDescribeCol" => ["long",  ["long", "long", "ptr", "long", "ptr", "ptr", "ptr", "ptr", "ptr"]],
+    "SQLDisconnect" => ["long",  ["long"]],
+    "SQLError" => ["long",  ["long", "long", "long", "ptr", "ptr", "ptr", "long", "ptr"]],
+    "SQLExecDirect" => ["long",  ["long", "ptr", "long"]],
+    "SQLExecute" => ["long",  ["long"]],
+    "SQLFetch" => ["long",  ["long"]],
+    "SQLFreeConnect" => ["long",  ["long"]],
+    "SQLFreeEnv" => ["long",  ["long"]],
+    "SQLFreeStmt" => ["long",  ["long", "long"]],
+    "SQLGetCursorName" => ["long",  ["long", "ptr", "long", "ptr"]],
+    "SQLNumResultCols" => ["long",  ["long", "ptr"]],
+    "SQLPrepare" => ["long",  ["long", "ptr", "long"]],
+    "SQLRowCount" => ["long",  ["long", "ptr"]],
+    "SQLSetCursorName" => ["long",  ["long", "ptr", "long"]],
+    "SQLSetParam" => ["long",  ["long", "long", "long", "long", "long", "long", "ptr", "ptr"]],
+    "SQLTransact" => ["long",  ["long", "long", "long"]],
+    "SQLAllocHandle" => ["long",  ["long", "long", "ptr"]],
+    "SQLBindParam" => ["long",  ["long", "long", "long", "long", "long", "long", "ptr", "ptr"]],
+    "SQLCloseCursor" => ["long",  ["long"]],
+    "SQLColAttribute" => ["long",  ["long", "long", "long", "ptr", "long", "ptr", "ptr"]],
+    "SQLCopyDesc" => ["long",  ["long", "long"]],
+    "SQLEndTran" => ["long",  ["long", "long", "long"]],
+    "SQLFetchScroll" => ["long",  ["long", "long", "long"]],
+    "SQLFreeHandle" => ["long",  ["long", "long"]],
+    "SQLGetConnectAttr" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "SQLGetDescField" => ["long",  ["long", "long", "long", "ptr", "long", "ptr"]],
+    "SQLGetDescRec" => ["long",  ["long", "long", "ptr", "long", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr"]],
+    "SQLGetDiagField" => ["long",  ["long", "long", "long", "long", "ptr", "long", "ptr"]],
+    "SQLGetDiagRec" => ["long",  ["long", "long", "long", "ptr", "ptr", "ptr", "long", "ptr"]],
+    "SQLGetEnvAttr" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "SQLGetStmtAttr" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "SQLSetConnectAttr" => ["long",  ["long", "long", "ptr", "long"]],
+    "SQLColumns" => ["long",  ["long", "ptr", "long", "ptr", "long", "ptr", "long", "ptr", "long"]],
+    "SQLDriverConnect" => ["long",  ["long", "long", "ptr", "long", "ptr", "long", "ptr", "long"]],
+    "SQLGetConnectOption" => ["long",  ["long", "long", "ptr"]],
+    "SQLGetData" => ["long",  ["long", "long", "long", "ptr", "long", "ptr"]],
+    "SQLGetFunctions" => ["long",  ["long", "long", "ptr"]],
+    "SQLGetInfo" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "SQLGetStmtOption" => ["long",  ["long", "long", "ptr"]],
+    "SQLGetTypeInfo" => ["long",  ["long", "long"]],
+    "SQLParamData" => ["long",  ["long", "ptr"]],
+    "SQLPutData" => ["long",  ["long", "ptr", "long"]],
+    "SQLSetConnectOption" => ["long",  ["long", "long", "long"]],
+    "SQLSetStmtOption" => ["long",  ["long", "long", "long"]],
+    "SQLSpecialColumns" => ["long",  ["long", "long", "ptr", "long", "ptr", "long", "ptr", "long", "long", "long"]],
+    "SQLStatistics" => ["long",  ["long", "ptr", "long", "ptr", "long", "ptr", "long", "long", "long"]],
+    "SQLTables" => ["long",  ["long", "ptr", "long", "ptr", "long", "ptr", "long", "ptr", "long"]],
+    "SQLBrowseConnect" => ["long",  ["long", "ptr", "long", "ptr", "long", "ptr"]],
+    "SQLColumnPrivileges" => ["long",  ["long", "ptr", "long", "ptr", "long", "ptr", "long", "ptr", "long"]],
+    "SQLDataSources" => ["long",  ["long", "long", "ptr", "long", "ptr", "ptr", "long", "ptr"]],
+    "SQLDescribeParam" => ["long",  ["long", "long", "ptr", "ptr", "ptr", "ptr"]],
+    "SQLExtendedFetch" => ["long",  ["long", "long", "long", "ptr", "ptr"]],
+    "SQLForeignKeys" => ["long",  ["long", "ptr", "long", "ptr", "long", "ptr", "long", "ptr", "long", "ptr", "long", "ptr", "long"]],
+    "SQLMoreResults" => ["long",  ["long"]],
+    "SQLNativeSql" => ["long",  ["long", "ptr", "long", "ptr", "long", "ptr"]],
+    "SQLNumParams" => ["long",  ["long", "ptr"]],
+    "SQLParamOptions" => ["long",  ["long", "long", "ptr"]],
+    "SQLPrimaryKeys" => ["long",  ["long", "ptr", "long", "ptr", "long", "ptr", "long"]],
+    "SQLProcedureColumns" => ["long",  ["long", "ptr", "long", "ptr", "long", "ptr", "long", "ptr", "long"]],
+    "SQLProcedures" => ["long",  ["long", "ptr", "long", "ptr", "long", "ptr", "long"]],
+    "SQLSetPos" => ["long",  ["long", "long", "long", "long"]],
+    "SQLSetScrollOptions" => ["long",  ["long", "long", "long", "long"]],
+    "SQLTablePrivileges" => ["long",  ["long", "ptr", "long", "ptr", "long", "ptr", "long"]],
+    "SQLDrivers" => ["long",  ["long", "long", "ptr", "long", "ptr", "ptr", "long", "ptr"]],
+    "SQLBindParameter" => ["long",  ["long", "long", "long", "long", "long", "long", "long", "ptr", "long", "ptr"]],
+    "SQLSetDescField" => ["long",  ["long", "long", "long", "ptr", "long"]],
+    "SQLSetDescRec" => ["long",  ["long", "long", "long", "long", "long", "long", "long", "ptr", "ptr", "ptr"]],
+    "SQLSetEnvAttr" => ["long",  ["long", "long", "ptr", "long"]],
+    "SQLSetStmtAttr" => ["long",  ["long", "long", "ptr", "long"]],
+    "SQLAllocHandleStd" => ["long",  ["long", "long", "ptr"]],
+    "SQLBulkOperations" => ["long",  ["long", "long"]]
+};
+
+&wine::declare("odbc32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/ole32.pm b/programs/winetest/include/ole32.pm
new file mode 100644
index 0000000..7e2ad77
--- /dev/null
+++ b/programs/winetest/include/ole32.pm
@@ -0,0 +1,144 @@
+package ole32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "CLSIDFromProgID" => ["long",  ["str", "ptr"]],
+    "CLSIDFromString" => ["long",  ["str", "ptr"]],
+    "CoBuildVersion" => ["long",  []],
+    "CoCreateFreeThreadedMarshaler" => ["long",  ["ptr", "ptr"]],
+    "CoCreateGuid" => ["long",  ["ptr"]],
+    "CoCreateInstance" => ["long",  ["ptr", "ptr", "long", "ptr", "ptr"]],
+    "CoDisconnectObject" => ["long",  ["ptr", "long"]],
+    "CoFileTimeNow" => ["long",  ["ptr"]],
+    "CoFreeAllLibraries" => ["void",  []],
+    "CoFreeLibrary" => ["void",  ["long"]],
+    "CoFreeUnusedLibraries" => ["void",  []],
+    "CoGetClassObject" => ["long",  ["ptr", "long", "ptr", "ptr", "ptr"]],
+    "CoGetCurrentProcess" => ["long",  []],
+    "CoGetMalloc" => ["long",  ["long", "ptr"]],
+    "CoGetPSClsid" => ["long",  ["ptr", "ptr"]],
+    "CoInitialize" => ["long",  ["ptr"]],
+    "CoInitializeWOW" => ["long",  ["long", "long"]],
+    "CoIsOle1Class" => ["long",  ["ptr"]],
+    "CoLoadLibrary" => ["long",  ["str", "long"]],
+    "CoLockObjectExternal" => ["long",  ["ptr", "long", "long"]],
+    "CoRegisterClassObject" => ["long",  ["ptr", "ptr", "long", "long", "ptr"]],
+    "CoRegisterMessageFilter" => ["long",  ["ptr", "ptr"]],
+    "CoRevokeClassObject" => ["long",  ["long"]],
+    "CoSetState" => ["long",  ["ptr"]],
+    "CoTaskMemAlloc" => ["ptr",  ["long"]],
+    "CoTaskMemFree" => ["void",  ["ptr"]],
+    "CoTaskMemRealloc" => ["ptr",  ["ptr", "long"]],
+    "CoTreatAsClass" => ["long",  ["ptr", "ptr"]],
+    "CoUninitialize" => ["void",  []],
+    "CreateAntiMoniker" => ["long",  ["ptr"]],
+    "CreateBindCtx" => ["long",  ["long", "ptr"]],
+    "CreateDataAdviseHolder" => ["long",  ["ptr"]],
+    "CreateDataCache" => ["long",  ["ptr", "ptr", "ptr", "ptr"]],
+    "CreateFileMoniker" => ["long",  ["str", "ptr"]],
+    "CreateGenericComposite" => ["long",  ["ptr", "ptr", "ptr"]],
+    "CreateILockBytesOnHGlobal" => ["long",  ["long", "long", "ptr"]],
+    "CreateItemMoniker" => ["long",  ["str", "str", "ptr"]],
+    "CreateOleAdviseHolder" => ["long",  ["ptr"]],
+    "CreateStreamOnHGlobal" => ["long",  ["long", "long", "ptr"]],
+    "DllDebugObjectRPCHook" => ["long",  ["long", "ptr"]],
+    "DllGetClassObject" => ["long",  ["ptr", "ptr", "ptr"]],
+    "DoDragDrop" => ["long",  ["ptr", "ptr", "long", "ptr"]],
+    "GetClassFile" => ["long",  ["str", "ptr"]],
+    "GetConvertStg" => ["long",  ["ptr"]],
+    "GetHGlobalFromILockBytes" => ["long",  ["ptr", "ptr"]],
+    "GetHGlobalFromStream" => ["long",  ["ptr", "ptr"]],
+    "GetRunningObjectTable" => ["long",  ["long", "ptr"]],
+    "IIDFromString" => ["long",  ["str", "ptr"]],
+    "IsAccelerator" => ["long",  ["long", "long", "ptr", "ptr"]],
+    "IsEqualGUID" => ["long",  ["ptr", "ptr"]],
+    "IsValidInterface" => ["long",  ["ptr"]],
+    "MkParseDisplayName" => ["long",  ["ptr", "str", "ptr", "ptr"]],
+    "MonikerCommonPrefixWith" => ["long",  ["ptr", "ptr", "ptr"]],
+    "OleBuildVersion" => ["long",  []],
+    "OleConvertIStorageToOLESTREAM" => ["long",  ["ptr", "ptr"]],
+    "OleConvertOLESTREAMToIStorage" => ["long",  ["ptr", "ptr", "ptr"]],
+    "OleCreate" => ["long",  ["ptr", "ptr", "long", "ptr", "ptr", "ptr", "ptr"]],
+    "OleCreateDefaultHandler" => ["long",  ["ptr", "ptr", "ptr", "ptr"]],
+    "OleCreateFromData" => ["long",  ["ptr", "ptr", "long", "ptr", "ptr", "ptr", "ptr"]],
+    "OleCreateFromFile" => ["long",  ["ptr", "str", "ptr", "long", "ptr", "ptr", "ptr", "ptr"]],
+    "OleCreateLink" => ["long",  ["ptr", "ptr", "long", "ptr", "ptr", "ptr", "ptr"]],
+    "OleCreateLinkFromData" => ["long",  ["ptr", "ptr", "long", "ptr", "ptr", "ptr", "ptr"]],
+    "OleCreateLinkToFile" => ["long",  ["str", "ptr", "long", "ptr", "ptr", "ptr", "ptr"]],
+    "OleCreateMenuDescriptor" => ["long",  ["long", "ptr"]],
+    "OleCreateStaticFromData" => ["long",  ["ptr", "ptr", "long", "ptr", "ptr", "ptr", "ptr"]],
+    "OleDestroyMenuDescriptor" => ["long",  ["long"]],
+    "OleDuplicateData" => ["long",  ["long", "long", "long"]],
+    "OleFlushClipboard" => ["long",  ["undef"]],
+    "OleGetAutoConvert" => ["long",  ["ptr", "ptr"]],
+    "OleGetClipboard" => ["long",  ["ptr"]],
+    "OleGetIconOfClass" => ["long",  ["ptr", "str", "long"]],
+    "OleInitialize" => ["long",  ["ptr"]],
+    "OleInitializeWOW" => ["long",  ["long"]],
+    "OleIsCurrentClipboard" => ["long",  ["ptr"]],
+    "OleIsRunning" => ["long",  ["ptr"]],
+    "OleLoad" => ["long",  ["ptr", "ptr", "ptr", "ptr"]],
+    "OleLoadFromStream" => ["long",  ["ptr", "ptr", "ptr"]],
+    "OleLockRunning" => ["long",  ["ptr", "long", "long"]],
+    "OleQueryCreateFromData" => ["long",  ["ptr"]],
+    "OleQueryLinkFromData" => ["long",  ["ptr"]],
+    "OleRegEnumFormatEtc" => ["long",  ["ptr", "long", "ptr"]],
+    "OleRegEnumVerbs" => ["long",  ["ptr", "ptr"]],
+    "OleRegGetMiscStatus" => ["long",  ["ptr", "long", "ptr"]],
+    "OleRegGetUserType" => ["long",  ["ptr", "long", "ptr"]],
+    "OleRun" => ["long",  ["ptr"]],
+    "OleSave" => ["long",  ["ptr", "ptr", "long"]],
+    "OleSaveToStream" => ["long",  ["ptr", "ptr"]],
+    "OleSetAutoConvert" => ["long",  ["ptr", "ptr"]],
+    "OleSetClipboard" => ["long",  ["ptr"]],
+    "OleSetContainedObject" => ["long",  ["ptr", "long"]],
+    "OleSetMenuDescriptor" => ["long",  ["long", "long", "long", "ptr", "ptr"]],
+    "OleTranslateAccelerator" => ["long",  ["ptr", "ptr", "ptr"]],
+    "OleUninitialize" => ["void",  []],
+    "ProgIDFromCLSID" => ["long",  ["ptr", "ptr"]],
+    "ReadClassStg" => ["long",  ["ptr", "ptr"]],
+    "ReadClassStm" => ["long",  ["ptr", "ptr"]],
+    "ReadFmtUserTypeStg" => ["long",  ["ptr", "ptr", "ptr"]],
+    "RegisterDragDrop" => ["long",  ["long", "ptr"]],
+    "ReleaseStgMedium" => ["void",  ["ptr"]],
+    "RevokeDragDrop" => ["long",  ["long"]],
+    "SetConvertStg" => ["long",  ["ptr", "long"]],
+    "StgCreateDocfile" => ["long",  ["str", "long", "long", "ptr"]],
+    "StgCreateDocfileOnILockBytes" => ["long",  ["ptr", "long", "long", "ptr"]],
+    "StgIsStorageFile" => ["long",  ["str"]],
+    "StgIsStorageILockBytes" => ["long",  ["ptr"]],
+    "StgOpenStorage" => ["long",  ["ptr", "ptr", "long", "ptr", "long", "ptr"]],
+    "StgOpenStorageOnILockBytes" => ["long",  ["ptr", "ptr", "long", "ptr", "long", "ptr"]],
+    "StgSetTimes" => ["long",  ["ptr", "ptr", "ptr", "ptr"]],
+    "StringFromCLSID" => ["long",  ["ptr", "ptr"]],
+    "StringFromGUID2" => ["long",  ["ptr", "str", "long"]],
+    "StringFromIID" => ["long",  ["ptr", "ptr"]],
+    "WriteClassStg" => ["long",  ["ptr", "ptr"]],
+    "WriteClassStm" => ["long",  ["ptr", "ptr"]],
+    "WriteFmtUserTypeStg" => ["long",  ["ptr", "long", "str"]],
+    "CoInitializeEx" => ["long",  ["ptr", "long"]],
+    "CoCreateInstanceEx" => ["long",  ["ptr", "ptr", "long", "ptr", "long", "ptr"]],
+    "PropVariantClear" => ["long",  ["ptr"]],
+    "CoResumeClassObjects" => ["long",  []],
+    "CreateErrorInfo" => ["long",  ["ptr"]],
+    "DllRegisterServer" => ["long",  ["undef"]],
+    "FreePropVariantArray" => ["long",  ["long", "ptr"]],
+    "GetErrorInfo" => ["long",  ["long", "ptr"]],
+    "PropVariantCopy" => ["long",  ["ptr", "ptr"]],
+    "SetErrorInfo" => ["long",  ["long", "ptr"]],
+    "DllEntryPoint" => ["long",  ["long", "long", "ptr"]]
+};
+
+&wine::declare("ole32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/oleaut32.pm b/programs/winetest/include/oleaut32.pm
new file mode 100644
index 0000000..0ff4129
--- /dev/null
+++ b/programs/winetest/include/oleaut32.pm
@@ -0,0 +1,226 @@
+package oleaut32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "OleCreatePropertyFrame" => ["long",  ["long", "long", "long", "str", "long", "ptr", "long", "ptr", "long", "long", "ptr"]],
+    "OleCreatePropertyFrameIndirect" => ["long",  ["ptr"]],
+    "DllGetClassObject" => ["long",  ["ptr", "ptr", "ptr"]],
+    "SysAllocString" => ["wstr",  ["str"]],
+    "SysReAllocString" => ["long",  ["ptr", "str"]],
+    "SysAllocStringLen" => ["wstr",  ["ptr", "long"]],
+    "SysReAllocStringLen" => ["long",  ["ptr", "ptr", "long"]],
+    "SysFreeString" => ["void",  ["wstr"]],
+    "SysStringLen" => ["long",  ["wstr"]],
+    "VariantInit" => ["void",  ["ptr"]],
+    "VariantClear" => ["long",  ["ptr"]],
+    "VariantCopy" => ["long",  ["ptr", "ptr"]],
+    "VariantCopyInd" => ["long",  ["ptr", "ptr"]],
+    "VariantChangeType" => ["long",  ["ptr", "ptr", "long", "long"]],
+    "VariantTimeToDosDateTime" => ["long",  ["double", "ptr", "ptr"]],
+    "DosDateTimeToVariantTime" => ["long",  ["long", "long", "ptr"]],
+    "SafeArrayCreate" => ["ptr",  ["long", "long", "ptr"]],
+    "SafeArrayDestroy" => ["long",  ["ptr"]],
+    "SafeArrayGetDim" => ["long",  ["ptr"]],
+    "SafeArrayGetElemsize" => ["long",  ["ptr"]],
+    "SafeArrayGetUBound" => ["long",  ["ptr", "long", "ptr"]],
+    "SafeArrayGetLBound" => ["long",  ["ptr", "long", "ptr"]],
+    "SafeArrayLock" => ["long",  ["ptr"]],
+    "SafeArrayUnlock" => ["long",  ["ptr"]],
+    "SafeArrayAccessData" => ["long",  ["ptr", "ptr"]],
+    "SafeArrayUnaccessData" => ["long",  ["ptr"]],
+    "SafeArrayGetElement" => ["long",  ["ptr", "ptr", "ptr"]],
+    "SafeArrayPutElement" => ["long",  ["ptr", "ptr", "ptr"]],
+    "SafeArrayCopy" => ["long",  ["ptr", "ptr"]],
+    "DispGetParam" => ["long",  ["ptr", "long", "long", "ptr", "ptr"]],
+    "DispGetIDsOfNames" => ["long",  ["ptr", "ptr", "long", "ptr"]],
+    "DispInvoke" => ["long",  ["ptr", "ptr", "long", "long", "ptr", "ptr", "ptr", "ptr"]],
+    "CreateDispTypeInfo" => ["long",  ["ptr", "long", "ptr"]],
+    "CreateStdDispatch" => ["long",  ["ptr", "ptr", "ptr", "ptr"]],
+    "RegisterActiveObject" => ["long",  ["ptr", "ptr", "long", "ptr"]],
+    "RevokeActiveObject" => ["long",  ["long", "ptr"]],
+    "GetActiveObject" => ["long",  ["ptr", "ptr", "ptr"]],
+    "SafeArrayAllocDescriptor" => ["long",  ["long", "ptr"]],
+    "SafeArrayAllocData" => ["long",  ["ptr"]],
+    "SafeArrayDestroyDescriptor" => ["long",  ["ptr"]],
+    "SafeArrayDestroyData" => ["long",  ["ptr"]],
+    "SafeArrayRedim" => ["long",  ["ptr", "ptr"]],
+    "VarParseNumFromStr" => ["long",  ["ptr", "long", "long", "ptr", "ptr"]],
+    "VarNumFromParseNum" => ["long",  ["ptr", "ptr", "long", "ptr"]],
+    "VarI2FromUI1" => ["long",  ["long", "ptr"]],
+    "VarI2FromI4" => ["long",  ["long", "ptr"]],
+    "VarI2FromR4" => ["long",  ["long", "ptr"]],
+    "VarI2FromR8" => ["long",  ["double", "ptr"]],
+    "VarI2FromCy" => ["long",  ["double", "ptr"]],
+    "VarI2FromDate" => ["long",  ["double", "ptr"]],
+    "VarI2FromStr" => ["long",  ["ptr", "long", "long", "ptr"]],
+    "VarI2FromBool" => ["long",  ["long", "ptr"]],
+    "VarI4FromUI1" => ["long",  ["long", "ptr"]],
+    "VarI4FromI2" => ["long",  ["long", "ptr"]],
+    "VarI4FromR4" => ["long",  ["long", "ptr"]],
+    "VarI4FromR8" => ["long",  ["double", "ptr"]],
+    "VarI4FromCy" => ["long",  ["double", "ptr"]],
+    "VarI4FromDate" => ["long",  ["double", "ptr"]],
+    "VarI4FromStr" => ["long",  ["ptr", "long", "long", "ptr"]],
+    "VarI4FromBool" => ["long",  ["long", "ptr"]],
+    "VarR4FromUI1" => ["long",  ["long", "ptr"]],
+    "VarR4FromI2" => ["long",  ["long", "ptr"]],
+    "VarR4FromI4" => ["long",  ["long", "ptr"]],
+    "VarR4FromR8" => ["long",  ["double", "ptr"]],
+    "VarR4FromCy" => ["long",  ["double", "ptr"]],
+    "VarR4FromDate" => ["long",  ["double", "ptr"]],
+    "VarR4FromStr" => ["long",  ["ptr", "long", "long", "ptr"]],
+    "VarR4FromBool" => ["long",  ["long", "ptr"]],
+    "SafeArrayGetVarType" => ["long",  ["ptr", "ptr"]],
+    "VarR8FromUI1" => ["long",  ["long", "ptr"]],
+    "VarR8FromI2" => ["long",  ["long", "ptr"]],
+    "VarR8FromI4" => ["long",  ["long", "ptr"]],
+    "VarR8FromR4" => ["long",  ["long", "ptr"]],
+    "VarR8FromCy" => ["long",  ["double", "ptr"]],
+    "VarR8FromDate" => ["long",  ["double", "ptr"]],
+    "VarR8FromStr" => ["long",  ["ptr", "long", "long", "ptr"]],
+    "VarR8FromBool" => ["long",  ["long", "ptr"]],
+    "VarDateFromUI1" => ["long",  ["long", "ptr"]],
+    "VarDateFromI2" => ["long",  ["long", "ptr"]],
+    "VarDateFromI4" => ["long",  ["long", "ptr"]],
+    "VarDateFromR4" => ["long",  ["long", "ptr"]],
+    "VarDateFromR8" => ["long",  ["double", "ptr"]],
+    "VarDateFromCy" => ["long",  ["double", "ptr"]],
+    "VarDateFromStr" => ["long",  ["ptr", "long", "long", "ptr"]],
+    "VarDateFromBool" => ["long",  ["long", "ptr"]],
+    "VarCyFromUI1" => ["long",  ["long", "ptr"]],
+    "VarCyFromI2" => ["long",  ["long", "ptr"]],
+    "VarCyFromI4" => ["long",  ["long", "ptr"]],
+    "VarCyFromR4" => ["long",  ["long", "ptr"]],
+    "VarCyFromR8" => ["long",  ["double", "ptr"]],
+    "VarCyFromDate" => ["long",  ["double", "ptr"]],
+    "VarCyFromStr" => ["long",  ["ptr", "long", "long", "ptr"]],
+    "VarCyFromBool" => ["long",  ["long", "ptr"]],
+    "VarBstrFromUI1" => ["long",  ["long", "long", "long", "ptr"]],
+    "VarBstrFromI2" => ["long",  ["long", "long", "long", "ptr"]],
+    "VarBstrFromI4" => ["long",  ["long", "long", "long", "ptr"]],
+    "VarBstrFromR4" => ["long",  ["long", "long", "long", "ptr"]],
+    "VarBstrFromR8" => ["long",  ["double", "long", "long", "ptr"]],
+    "VarBstrFromCy" => ["long",  ["double", "long", "long", "ptr"]],
+    "VarBstrFromDate" => ["long",  ["double", "long", "long", "ptr"]],
+    "VarBstrFromBool" => ["long",  ["long", "long", "long", "ptr"]],
+    "VarBoolFromUI1" => ["long",  ["long", "ptr"]],
+    "VarBoolFromI2" => ["long",  ["long", "ptr"]],
+    "VarBoolFromI4" => ["long",  ["long", "ptr"]],
+    "VarBoolFromR4" => ["long",  ["long", "ptr"]],
+    "VarBoolFromR8" => ["long",  ["double", "ptr"]],
+    "VarBoolFromDate" => ["long",  ["double", "ptr"]],
+    "VarBoolFromCy" => ["long",  ["double", "ptr"]],
+    "VarBoolFromStr" => ["long",  ["ptr", "long", "long", "ptr"]],
+    "VarUI1FromI2" => ["long",  ["long", "ptr"]],
+    "VarUI1FromI4" => ["long",  ["long", "ptr"]],
+    "VarUI1FromR4" => ["long",  ["long", "ptr"]],
+    "VarUI1FromR8" => ["long",  ["double", "ptr"]],
+    "VarUI1FromCy" => ["long",  ["double", "ptr"]],
+    "VarUI1FromDate" => ["long",  ["double", "ptr"]],
+    "VarUI1FromStr" => ["long",  ["ptr", "long", "long", "ptr"]],
+    "VarUI1FromBool" => ["long",  ["long", "ptr"]],
+    "VariantChangeTypeEx" => ["long",  ["ptr", "ptr", "long", "long", "long"]],
+    "SafeArrayPtrOfIndex" => ["long",  ["ptr", "ptr", "ptr"]],
+    "SysStringByteLen" => ["long",  ["wstr"]],
+    "SysAllocStringByteLen" => ["wstr",  ["str", "long"]],
+    "CreateTypeLib" => ["long",  ["long", "str", "ptr"]],
+    "LoadTypeLib" => ["long",  ["ptr", "ptr"]],
+    "LoadRegTypeLib" => ["long",  ["ptr", "long", "long", "long", "ptr"]],
+    "RegisterTypeLib" => ["long",  ["ptr", "ptr", "ptr"]],
+    "QueryPathOfRegTypeLib" => ["long",  ["ptr", "long", "long", "long", "ptr"]],
+    "LHashValOfNameSys" => ["long",  ["long", "long", "str"]],
+    "LHashValOfNameSysA" => ["long",  ["long", "long", "str"]],
+    "OaBuildVersion" => ["long",  ["undef"]],
+    "LoadTypeLibEx" => ["long",  ["str", "long", "ptr"]],
+    "SystemTimeToVariantTime" => ["long",  ["ptr", "ptr"]],
+    "VariantTimeToSystemTime" => ["long",  ["double", "ptr"]],
+    "UnRegisterTypeLib" => ["long",  ["ptr", "long", "long", "long", "long"]],
+    "VarI2FromI1" => ["long",  ["long", "ptr"]],
+    "VarI2FromUI2" => ["long",  ["long", "ptr"]],
+    "VarI2FromUI4" => ["long",  ["long", "ptr"]],
+    "VarI4FromI1" => ["long",  ["long", "ptr"]],
+    "VarI4FromUI2" => ["long",  ["long", "ptr"]],
+    "VarI4FromUI4" => ["long",  ["long", "ptr"]],
+    "VarR4FromI1" => ["long",  ["long", "ptr"]],
+    "VarR4FromUI2" => ["long",  ["long", "ptr"]],
+    "VarR4FromUI4" => ["long",  ["long", "ptr"]],
+    "VarR8FromI1" => ["long",  ["long", "ptr"]],
+    "VarR8FromUI2" => ["long",  ["long", "ptr"]],
+    "VarR8FromUI4" => ["long",  ["long", "ptr"]],
+    "VarDateFromI1" => ["long",  ["long", "ptr"]],
+    "VarDateFromUI2" => ["long",  ["long", "ptr"]],
+    "VarDateFromUI4" => ["long",  ["long", "ptr"]],
+    "VarCyFromI1" => ["long",  ["long", "ptr"]],
+    "VarCyFromUI2" => ["long",  ["long", "ptr"]],
+    "VarCyFromUI4" => ["long",  ["long", "ptr"]],
+    "VarBstrFromI1" => ["long",  ["long", "long", "long", "ptr"]],
+    "VarBstrFromUI2" => ["long",  ["long", "long", "long", "ptr"]],
+    "VarBstrFromUI4" => ["long",  ["long", "long", "long", "ptr"]],
+    "VarBoolFromI1" => ["long",  ["long", "ptr"]],
+    "VarBoolFromUI2" => ["long",  ["long", "ptr"]],
+    "VarBoolFromUI4" => ["long",  ["long", "ptr"]],
+    "VarUI1FromI1" => ["long",  ["long", "ptr"]],
+    "VarUI1FromUI2" => ["long",  ["long", "ptr"]],
+    "VarUI1FromUI4" => ["long",  ["long", "ptr"]],
+    "VarI1FromUI1" => ["long",  ["long", "ptr"]],
+    "VarI1FromI2" => ["long",  ["long", "ptr"]],
+    "VarI1FromI4" => ["long",  ["long", "ptr"]],
+    "VarI1FromR4" => ["long",  ["long", "ptr"]],
+    "VarI1FromR8" => ["long",  ["double", "ptr"]],
+    "VarI1FromDate" => ["long",  ["double", "ptr"]],
+    "VarI1FromCy" => ["long",  ["double", "ptr"]],
+    "VarI1FromStr" => ["long",  ["ptr", "long", "long", "ptr"]],
+    "VarI1FromBool" => ["long",  ["long", "ptr"]],
+    "VarI1FromUI2" => ["long",  ["long", "ptr"]],
+    "VarI1FromUI4" => ["long",  ["long", "ptr"]],
+    "VarUI2FromUI1" => ["long",  ["long", "ptr"]],
+    "VarUI2FromI2" => ["long",  ["long", "ptr"]],
+    "VarUI2FromI4" => ["long",  ["long", "ptr"]],
+    "VarUI2FromR4" => ["long",  ["long", "ptr"]],
+    "VarUI2FromR8" => ["long",  ["double", "ptr"]],
+    "VarUI2FromDate" => ["long",  ["double", "ptr"]],
+    "VarUI2FromCy" => ["long",  ["double", "ptr"]],
+    "VarUI2FromStr" => ["long",  ["ptr", "long", "long", "ptr"]],
+    "VarUI2FromBool" => ["long",  ["long", "ptr"]],
+    "VarUI2FromI1" => ["long",  ["long", "ptr"]],
+    "VarUI2FromUI4" => ["long",  ["long", "ptr"]],
+    "VarUI4FromUI1" => ["long",  ["long", "ptr"]],
+    "VarUI4FromI2" => ["long",  ["long", "ptr"]],
+    "VarUI4FromI4" => ["long",  ["long", "ptr"]],
+    "VarUI4FromR4" => ["long",  ["long", "ptr"]],
+    "VarUI4FromR8" => ["long",  ["double", "ptr"]],
+    "VarUI4FromDate" => ["long",  ["double", "ptr"]],
+    "VarUI4FromCy" => ["long",  ["double", "ptr"]],
+    "VarUI4FromStr" => ["long",  ["ptr", "long", "long", "ptr"]],
+    "VarUI4FromBool" => ["long",  ["long", "ptr"]],
+    "VarUI4FromI1" => ["long",  ["long", "ptr"]],
+    "VarUI4FromUI2" => ["long",  ["long", "ptr"]],
+    "DllRegisterServer" => ["long",  ["undef"]],
+    "VarDateFromUdate" => ["long",  ["ptr", "long", "ptr"]],
+    "VarUdateFromDate" => ["long",  ["double", "long", "ptr"]],
+    "DllCanUnloadNow" => ["long",  ["undef"]],
+    "SafeArrayCreateVector" => ["ptr",  ["long", "long", "long"]],
+    "SafeArrayCopyData" => ["long",  ["ptr", "ptr"]],
+    "OleIconToCursor" => ["long",  ["long", "long"]],
+    "OleLoadPicture" => ["long",  ["ptr", "long", "long", "ptr", "ptr"]],
+    "OleCreatePictureIndirect" => ["long",  ["ptr", "ptr", "long", "ptr"]],
+    "OleCreateFontIndirect" => ["long",  ["ptr", "ptr", "ptr"]],
+    "OleTranslateColor" => ["long",  ["long", "long", "ptr"]],
+    "OleLoadPictureEx" => ["long",  ["ptr", "long", "long", "ptr", "long", "long", "long", "ptr"]],
+    "VarBstrCat" => ["long",  ["wstr", "wstr", "ptr"]],
+    "VarBstrCmp" => ["long",  ["wstr", "wstr", "long", "long"]]
+};
+
+&wine::declare("oleaut32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/olecli32.pm b/programs/winetest/include/olecli32.pm
new file mode 100644
index 0000000..8ec0db7
--- /dev/null
+++ b/programs/winetest/include/olecli32.pm
@@ -0,0 +1,30 @@
+package olecli32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "OleQueryLinkFromClip" => ["long",  ["str", "long", "long"]],
+    "OleQueryCreateFromClip" => ["long",  ["str", "long", "long"]],
+    "OleCreateLinkFromClip" => ["long",  ["str", "ptr", "long", "str", "ptr", "long", "long"]],
+    "OleCreateFromClip" => ["long",  ["str", "ptr", "long", "str", "ptr", "long", "long"]],
+    "OleQueryType" => ["long",  ["ptr", "ptr"]],
+    "OleSetHostNames" => ["long",  ["ptr", "str", "str"]],
+    "OleRegisterClientDoc" => ["long",  ["str", "str", "long", "ptr"]],
+    "OleRevokeClientDoc" => ["long",  ["long"]],
+    "OleRenameClientDoc" => ["long",  ["long", "str"]],
+    "OleSavedClientDoc" => ["long",  ["long"]],
+    "OleIsDcMeta" => ["long",  ["long"]]
+};
+
+&wine::declare("olecli32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/oledlg.pm b/programs/winetest/include/oledlg.pm
new file mode 100644
index 0000000..0f81ea5
--- /dev/null
+++ b/programs/winetest/include/oledlg.pm
@@ -0,0 +1,40 @@
+package oledlg;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "OleUIAddVerbMenuA" => ["long",  ["ptr", "str", "long", "long", "long", "long", "long", "long", "ptr"]],
+    "OleUICanConvertOrActivateAs" => ["long",  ["ptr", "long", "long"]],
+    "OleUIInsertObjectA" => ["long",  ["ptr"]],
+    "OleUIPasteSpecialA" => ["long",  ["ptr"]],
+    "OleUIEditLinksA" => ["long",  ["ptr"]],
+    "OleUIChangeIconA" => ["long",  ["ptr"]],
+    "OleUIConvertA" => ["long",  ["ptr"]],
+    "OleUIBusyA" => ["long",  ["ptr"]],
+    "OleUIUpdateLinksA" => ["long",  ["ptr", "long", "str", "long"]],
+    "OleUIObjectPropertiesA" => ["long",  ["ptr"]],
+    "OleUIChangeSourceA" => ["long",  ["ptr"]],
+    "OleUIAddVerbMenuW" => ["long",  ["ptr", "wstr", "long", "long", "long", "long", "long", "long", "ptr"]],
+    "OleUIBusyW" => ["long",  ["ptr"]],
+    "OleUIChangeIconW" => ["long",  ["ptr"]],
+    "OleUIChangeSourceW" => ["long",  ["ptr"]],
+    "OleUIConvertW" => ["long",  ["ptr"]],
+    "OleUIEditLinksW" => ["long",  ["ptr"]],
+    "OleUIInsertObjectW" => ["long",  ["ptr"]],
+    "OleUIObjectPropertiesW" => ["long",  ["ptr"]],
+    "OleUIPasteSpecialW" => ["long",  ["ptr"]],
+    "OleUIUpdateLinksW" => ["long",  ["ptr", "long", "wstr", "long"]]
+};
+
+&wine::declare("oledlg",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/olepro32.pm b/programs/winetest/include/olepro32.pm
new file mode 100644
index 0000000..4efc7e3
--- /dev/null
+++ b/programs/winetest/include/olepro32.pm
@@ -0,0 +1,23 @@
+package olepro32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "DllCanUnloadNow" => ["long",  ["undef"]],
+    "DllGetClassObject" => ["long",  ["ptr", "ptr", "ptr"]],
+    "DllRegisterServer" => ["long",  ["undef"]],
+    "DllUnregisterServer" => ["long",  ["undef"]]
+};
+
+&wine::declare("olepro32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/olesvr32.pm b/programs/winetest/include/olesvr32.pm
new file mode 100644
index 0000000..b7b9898
--- /dev/null
+++ b/programs/winetest/include/olesvr32.pm
@@ -0,0 +1,25 @@
+package olesvr32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "OleRegisterServer" => ["long",  ["str", "ptr", "ptr", "long", "long"]],
+    "OleBlockServer" => ["long",  ["long"]],
+    "OleUnblockServer" => ["long",  ["long", "ptr"]],
+    "OleRegisterServerDoc" => ["long",  ["long", "str", "ptr", "ptr"]],
+    "OleRevokeServerDoc" => ["long",  ["long"]],
+    "OleRenameServerDoc" => ["long",  ["long", "str"]]
+};
+
+&wine::declare("olesvr32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/opengl32.pm b/programs/winetest/include/opengl32.pm
new file mode 100644
index 0000000..df1316d
--- /dev/null
+++ b/programs/winetest/include/opengl32.pm
@@ -0,0 +1,443 @@
+package opengl32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "glAccum" => ["void",  ["long", "long"]],
+    "glActiveTextureARB" => ["void",  ["long"]],
+    "glAlphaFunc" => ["void",  ["long", "long"]],
+    "glAreTexturesResident" => ["long",  ["long", "ptr", "ptr"]],
+    "glArrayElement" => ["void",  ["long"]],
+    "glBegin" => ["void",  ["long"]],
+    "glBindTexture" => ["void",  ["long", "long"]],
+    "glBitmap" => ["void",  ["long", "long", "long", "long", "long", "long", "ptr"]],
+    "glBlendColor" => ["void",  ["long", "long", "long", "long"]],
+    "glBlendEquation" => ["void",  ["long"]],
+    "glBlendFunc" => ["void",  ["long", "long"]],
+    "glCallList" => ["void",  ["long"]],
+    "glCallLists" => ["void",  ["long", "long", "ptr"]],
+    "glClear" => ["void",  ["long"]],
+    "glClearAccum" => ["void",  ["long", "long", "long", "long"]],
+    "glClearColor" => ["void",  ["long", "long", "long", "long"]],
+    "glClearDepth" => ["void",  ["double"]],
+    "glClearIndex" => ["void",  ["long"]],
+    "glClearStencil" => ["void",  ["long"]],
+    "glClientActiveTextureARB" => ["void",  ["long"]],
+    "glClipPlane" => ["void",  ["long", "ptr"]],
+    "glColor3b" => ["void",  ["long", "long", "long"]],
+    "glColor3bv" => ["void",  ["ptr"]],
+    "glColor3d" => ["void",  ["double", "double", "double"]],
+    "glColor3dv" => ["void",  ["ptr"]],
+    "glColor3f" => ["void",  ["long", "long", "long"]],
+    "glColor3fv" => ["void",  ["ptr"]],
+    "glColor3i" => ["void",  ["long", "long", "long"]],
+    "glColor3iv" => ["void",  ["ptr"]],
+    "glColor3s" => ["void",  ["long", "long", "long"]],
+    "glColor3sv" => ["void",  ["ptr"]],
+    "glColor3ub" => ["void",  ["long", "long", "long"]],
+    "glColor3ubv" => ["void",  ["ptr"]],
+    "glColor3ui" => ["void",  ["long", "long", "long"]],
+    "glColor3uiv" => ["void",  ["ptr"]],
+    "glColor3us" => ["void",  ["long", "long", "long"]],
+    "glColor3usv" => ["void",  ["ptr"]],
+    "glColor4b" => ["void",  ["long", "long", "long", "long"]],
+    "glColor4bv" => ["void",  ["ptr"]],
+    "glColor4d" => ["void",  ["double", "double", "double", "double"]],
+    "glColor4dv" => ["void",  ["ptr"]],
+    "glColor4f" => ["void",  ["long", "long", "long", "long"]],
+    "glColor4fv" => ["void",  ["ptr"]],
+    "glColor4i" => ["void",  ["long", "long", "long", "long"]],
+    "glColor4iv" => ["void",  ["ptr"]],
+    "glColor4s" => ["void",  ["long", "long", "long", "long"]],
+    "glColor4sv" => ["void",  ["ptr"]],
+    "glColor4ub" => ["void",  ["long", "long", "long", "long"]],
+    "glColor4ubv" => ["void",  ["ptr"]],
+    "glColor4ui" => ["void",  ["long", "long", "long", "long"]],
+    "glColor4uiv" => ["void",  ["ptr"]],
+    "glColor4us" => ["void",  ["long", "long", "long", "long"]],
+    "glColor4usv" => ["void",  ["ptr"]],
+    "glColorMask" => ["void",  ["long", "long", "long", "long"]],
+    "glColorMaterial" => ["void",  ["long", "long"]],
+    "glColorPointer" => ["void",  ["long", "long", "long", "ptr"]],
+    "glColorSubTable" => ["void",  ["long", "long", "long", "long", "long", "ptr"]],
+    "glColorTable" => ["void",  ["long", "long", "long", "long", "long", "ptr"]],
+    "glColorTableParameterfv" => ["void",  ["long", "long", "ptr"]],
+    "glColorTableParameteriv" => ["void",  ["long", "long", "ptr"]],
+    "glConvolutionFilter1D" => ["void",  ["long", "long", "long", "long", "long", "ptr"]],
+    "glConvolutionFilter2D" => ["void",  ["long", "long", "long", "long", "long", "long", "ptr"]],
+    "glConvolutionParameterf" => ["void",  ["long", "long", "long"]],
+    "glConvolutionParameterfv" => ["void",  ["long", "long", "ptr"]],
+    "glConvolutionParameteri" => ["void",  ["long", "long", "long"]],
+    "glConvolutionParameteriv" => ["void",  ["long", "long", "ptr"]],
+    "glCopyColorSubTable" => ["void",  ["long", "long", "long", "long", "long"]],
+    "glCopyColorTable" => ["void",  ["long", "long", "long", "long", "long"]],
+    "glCopyConvolutionFilter1D" => ["void",  ["long", "long", "long", "long", "long"]],
+    "glCopyConvolutionFilter2D" => ["void",  ["long", "long", "long", "long", "long", "long"]],
+    "glCopyPixels" => ["void",  ["long", "long", "long", "long", "long"]],
+    "glCopyTexImage1D" => ["void",  ["long", "long", "long", "long", "long", "long", "long"]],
+    "glCopyTexImage2D" => ["void",  ["long", "long", "long", "long", "long", "long", "long", "long"]],
+    "glCopyTexSubImage1D" => ["void",  ["long", "long", "long", "long", "long", "long"]],
+    "glCopyTexSubImage2D" => ["void",  ["long", "long", "long", "long", "long", "long", "long", "long"]],
+    "glCopyTexSubImage3D" => ["void",  ["long", "long", "long", "long", "long", "long", "long", "long", "long"]],
+    "glCullFace" => ["void",  ["long"]],
+    "glDeleteLists" => ["void",  ["long", "long"]],
+    "glDeleteTextures" => ["void",  ["long", "ptr"]],
+    "glDepthFunc" => ["void",  ["long"]],
+    "glDepthMask" => ["void",  ["long"]],
+    "glDepthRange" => ["void",  ["double", "double"]],
+    "glDisable" => ["void",  ["long"]],
+    "glDisableClientState" => ["void",  ["long"]],
+    "glDrawArrays" => ["void",  ["long", "long", "long"]],
+    "glDrawBuffer" => ["void",  ["long"]],
+    "glDrawElements" => ["void",  ["long", "long", "long", "ptr"]],
+    "glDrawPixels" => ["void",  ["long", "long", "long", "long", "ptr"]],
+    "glDrawRangeElements" => ["void",  ["long", "long", "long", "long", "long", "ptr"]],
+    "glEdgeFlag" => ["void",  ["long"]],
+    "glEdgeFlagPointer" => ["void",  ["long", "ptr"]],
+    "glEdgeFlagv" => ["void",  ["ptr"]],
+    "glEnable" => ["void",  ["long"]],
+    "glEnableClientState" => ["void",  ["long"]],
+    "glEnd" => ["void",  ["undef"]],
+    "glEndList" => ["void",  ["undef"]],
+    "glEvalCoord1d" => ["void",  ["double"]],
+    "glEvalCoord1dv" => ["void",  ["ptr"]],
+    "glEvalCoord1f" => ["void",  ["long"]],
+    "glEvalCoord1fv" => ["void",  ["ptr"]],
+    "glEvalCoord2d" => ["void",  ["double", "double"]],
+    "glEvalCoord2dv" => ["void",  ["ptr"]],
+    "glEvalCoord2f" => ["void",  ["long", "long"]],
+    "glEvalCoord2fv" => ["void",  ["ptr"]],
+    "glEvalMesh1" => ["void",  ["long", "long", "long"]],
+    "glEvalMesh2" => ["void",  ["long", "long", "long", "long", "long"]],
+    "glEvalPoint1" => ["void",  ["long"]],
+    "glEvalPoint2" => ["void",  ["long", "long"]],
+    "glFeedbackBuffer" => ["void",  ["long", "long", "ptr"]],
+    "glFinish" => ["void",  ["undef"]],
+    "glFlush" => ["void",  ["undef"]],
+    "glFogf" => ["void",  ["long", "long"]],
+    "glFogfv" => ["void",  ["long", "ptr"]],
+    "glFogi" => ["void",  ["long", "long"]],
+    "glFogiv" => ["void",  ["long", "ptr"]],
+    "glFrontFace" => ["void",  ["long"]],
+    "glFrustum" => ["void",  ["double", "double", "double", "double", "double", "double"]],
+    "glGenLists" => ["long",  ["long"]],
+    "glGenTextures" => ["void",  ["long", "ptr"]],
+    "glGetBooleanv" => ["void",  ["long", "ptr"]],
+    "glGetClipPlane" => ["void",  ["long", "ptr"]],
+    "glGetColorTable" => ["void",  ["long", "long", "long", "ptr"]],
+    "glGetColorTableParameterfv" => ["void",  ["long", "long", "ptr"]],
+    "glGetColorTableParameteriv" => ["void",  ["long", "long", "ptr"]],
+    "glGetConvolutionFilter" => ["void",  ["long", "long", "long", "ptr"]],
+    "glGetConvolutionParameterfv" => ["void",  ["long", "long", "ptr"]],
+    "glGetConvolutionParameteriv" => ["void",  ["long", "long", "ptr"]],
+    "glGetDoublev" => ["void",  ["long", "ptr"]],
+    "glGetError" => ["long",  ["undef"]],
+    "glGetFloatv" => ["void",  ["long", "ptr"]],
+    "glGetHistogram" => ["void",  ["long", "long", "long", "long", "ptr"]],
+    "glGetHistogramParameterfv" => ["void",  ["long", "long", "ptr"]],
+    "glGetHistogramParameteriv" => ["void",  ["long", "long", "ptr"]],
+    "glGetIntegerv" => ["void",  ["long", "ptr"]],
+    "glGetLightfv" => ["void",  ["long", "long", "ptr"]],
+    "glGetLightiv" => ["void",  ["long", "long", "ptr"]],
+    "glGetMapdv" => ["void",  ["long", "long", "ptr"]],
+    "glGetMapfv" => ["void",  ["long", "long", "ptr"]],
+    "glGetMapiv" => ["void",  ["long", "long", "ptr"]],
+    "glGetMaterialfv" => ["void",  ["long", "long", "ptr"]],
+    "glGetMaterialiv" => ["void",  ["long", "long", "ptr"]],
+    "glGetMinmax" => ["void",  ["long", "long", "long", "long", "ptr"]],
+    "glGetMinmaxParameterfv" => ["void",  ["long", "long", "ptr"]],
+    "glGetMinmaxParameteriv" => ["void",  ["long", "long", "ptr"]],
+    "glGetPixelMapfv" => ["void",  ["long", "ptr"]],
+    "glGetPixelMapuiv" => ["void",  ["long", "ptr"]],
+    "glGetPixelMapusv" => ["void",  ["long", "ptr"]],
+    "glGetPointerv" => ["void",  ["long", "ptr"]],
+    "glGetPolygonStipple" => ["void",  ["ptr"]],
+    "glGetSeparableFilter" => ["void",  ["long", "long", "long", "ptr", "ptr", "ptr"]],
+    "glGetString" => ["ptr",  ["long"]],
+    "glGetTexEnvfv" => ["void",  ["long", "long", "ptr"]],
+    "glGetTexEnviv" => ["void",  ["long", "long", "ptr"]],
+    "glGetTexGendv" => ["void",  ["long", "long", "ptr"]],
+    "glGetTexGenfv" => ["void",  ["long", "long", "ptr"]],
+    "glGetTexGeniv" => ["void",  ["long", "long", "ptr"]],
+    "glGetTexImage" => ["void",  ["long", "long", "long", "long", "ptr"]],
+    "glGetTexLevelParameterfv" => ["void",  ["long", "long", "long", "ptr"]],
+    "glGetTexLevelParameteriv" => ["void",  ["long", "long", "long", "ptr"]],
+    "glGetTexParameterfv" => ["void",  ["long", "long", "ptr"]],
+    "glGetTexParameteriv" => ["void",  ["long", "long", "ptr"]],
+    "glHint" => ["void",  ["long", "long"]],
+    "glHistogram" => ["void",  ["long", "long", "long", "long"]],
+    "glIndexMask" => ["void",  ["long"]],
+    "glIndexPointer" => ["void",  ["long", "long", "ptr"]],
+    "glIndexd" => ["void",  ["double"]],
+    "glIndexdv" => ["void",  ["ptr"]],
+    "glIndexf" => ["void",  ["long"]],
+    "glIndexfv" => ["void",  ["ptr"]],
+    "glIndexi" => ["void",  ["long"]],
+    "glIndexiv" => ["void",  ["ptr"]],
+    "glIndexs" => ["void",  ["long"]],
+    "glIndexsv" => ["void",  ["ptr"]],
+    "glIndexub" => ["void",  ["long"]],
+    "glIndexubv" => ["void",  ["ptr"]],
+    "glInitNames" => ["void",  ["undef"]],
+    "glInterleavedArrays" => ["void",  ["long", "long", "ptr"]],
+    "glIsEnabled" => ["long",  ["long"]],
+    "glIsList" => ["long",  ["long"]],
+    "glIsTexture" => ["long",  ["long"]],
+    "glLightModelf" => ["void",  ["long", "long"]],
+    "glLightModelfv" => ["void",  ["long", "ptr"]],
+    "glLightModeli" => ["void",  ["long", "long"]],
+    "glLightModeliv" => ["void",  ["long", "ptr"]],
+    "glLightf" => ["void",  ["long", "long", "long"]],
+    "glLightfv" => ["void",  ["long", "long", "ptr"]],
+    "glLighti" => ["void",  ["long", "long", "long"]],
+    "glLightiv" => ["void",  ["long", "long", "ptr"]],
+    "glLineStipple" => ["void",  ["long", "long"]],
+    "glLineWidth" => ["void",  ["long"]],
+    "glListBase" => ["void",  ["long"]],
+    "glLoadIdentity" => ["void",  ["undef"]],
+    "glLoadMatrixd" => ["void",  ["ptr"]],
+    "glLoadMatrixf" => ["void",  ["ptr"]],
+    "glLoadName" => ["void",  ["long"]],
+    "glLogicOp" => ["void",  ["long"]],
+    "glMap1d" => ["void",  ["long", "double", "double", "long", "long", "ptr"]],
+    "glMap1f" => ["void",  ["long", "long", "long", "long", "long", "ptr"]],
+    "glMap2d" => ["void",  ["long", "double", "double", "long", "long", "double", "double", "long", "long", "ptr"]],
+    "glMap2f" => ["void",  ["long", "long", "long", "long", "long", "long", "long", "long", "long", "ptr"]],
+    "glMapGrid1d" => ["void",  ["long", "double", "double"]],
+    "glMapGrid1f" => ["void",  ["long", "long", "long"]],
+    "glMapGrid2d" => ["void",  ["long", "double", "double", "long", "double", "double"]],
+    "glMapGrid2f" => ["void",  ["long", "long", "long", "long", "long", "long"]],
+    "glMaterialf" => ["void",  ["long", "long", "long"]],
+    "glMaterialfv" => ["void",  ["long", "long", "ptr"]],
+    "glMateriali" => ["void",  ["long", "long", "long"]],
+    "glMaterialiv" => ["void",  ["long", "long", "ptr"]],
+    "glMatrixMode" => ["void",  ["long"]],
+    "glMinmax" => ["void",  ["long", "long", "long"]],
+    "glMultMatrixd" => ["void",  ["ptr"]],
+    "glMultMatrixf" => ["void",  ["ptr"]],
+    "glMultiTexCoord1dARB" => ["void",  ["long", "double"]],
+    "glMultiTexCoord1dvARB" => ["void",  ["long", "ptr"]],
+    "glMultiTexCoord1fARB" => ["void",  ["long", "long"]],
+    "glMultiTexCoord1fvARB" => ["void",  ["long", "ptr"]],
+    "glMultiTexCoord1iARB" => ["void",  ["long", "long"]],
+    "glMultiTexCoord1ivARB" => ["void",  ["long", "ptr"]],
+    "glMultiTexCoord1sARB" => ["void",  ["long", "long"]],
+    "glMultiTexCoord1svARB" => ["void",  ["long", "ptr"]],
+    "glMultiTexCoord2dARB" => ["void",  ["long", "double", "double"]],
+    "glMultiTexCoord2dvARB" => ["void",  ["long", "ptr"]],
+    "glMultiTexCoord2fARB" => ["void",  ["long", "long", "long"]],
+    "glMultiTexCoord2fvARB" => ["void",  ["long", "ptr"]],
+    "glMultiTexCoord2iARB" => ["void",  ["long", "long", "long"]],
+    "glMultiTexCoord2ivARB" => ["void",  ["long", "ptr"]],
+    "glMultiTexCoord2sARB" => ["void",  ["long", "long", "long"]],
+    "glMultiTexCoord2svARB" => ["void",  ["long", "ptr"]],
+    "glMultiTexCoord3dARB" => ["void",  ["long", "double", "double", "double"]],
+    "glMultiTexCoord3dvARB" => ["void",  ["long", "ptr"]],
+    "glMultiTexCoord3fARB" => ["void",  ["long", "long", "long", "long"]],
+    "glMultiTexCoord3fvARB" => ["void",  ["long", "ptr"]],
+    "glMultiTexCoord3iARB" => ["void",  ["long", "long", "long", "long"]],
+    "glMultiTexCoord3ivARB" => ["void",  ["long", "ptr"]],
+    "glMultiTexCoord3sARB" => ["void",  ["long", "long", "long", "long"]],
+    "glMultiTexCoord3svARB" => ["void",  ["long", "ptr"]],
+    "glMultiTexCoord4dARB" => ["void",  ["long", "double", "double", "double", "double"]],
+    "glMultiTexCoord4dvARB" => ["void",  ["long", "ptr"]],
+    "glMultiTexCoord4fARB" => ["void",  ["long", "long", "long", "long", "long"]],
+    "glMultiTexCoord4fvARB" => ["void",  ["long", "ptr"]],
+    "glMultiTexCoord4iARB" => ["void",  ["long", "long", "long", "long", "long"]],
+    "glMultiTexCoord4ivARB" => ["void",  ["long", "ptr"]],
+    "glMultiTexCoord4sARB" => ["void",  ["long", "long", "long", "long", "long"]],
+    "glMultiTexCoord4svARB" => ["void",  ["long", "ptr"]],
+    "glNewList" => ["void",  ["long", "long"]],
+    "glNormal3b" => ["void",  ["long", "long", "long"]],
+    "glNormal3bv" => ["void",  ["ptr"]],
+    "glNormal3d" => ["void",  ["double", "double", "double"]],
+    "glNormal3dv" => ["void",  ["ptr"]],
+    "glNormal3f" => ["void",  ["long", "long", "long"]],
+    "glNormal3fv" => ["void",  ["ptr"]],
+    "glNormal3i" => ["void",  ["long", "long", "long"]],
+    "glNormal3iv" => ["void",  ["ptr"]],
+    "glNormal3s" => ["void",  ["long", "long", "long"]],
+    "glNormal3sv" => ["void",  ["ptr"]],
+    "glNormalPointer" => ["void",  ["long", "long", "ptr"]],
+    "glOrtho" => ["void",  ["double", "double", "double", "double", "double", "double"]],
+    "glPassThrough" => ["void",  ["long"]],
+    "glPixelMapfv" => ["void",  ["long", "long", "ptr"]],
+    "glPixelMapuiv" => ["void",  ["long", "long", "ptr"]],
+    "glPixelMapusv" => ["void",  ["long", "long", "ptr"]],
+    "glPixelStoref" => ["void",  ["long", "long"]],
+    "glPixelStorei" => ["void",  ["long", "long"]],
+    "glPixelTransferf" => ["void",  ["long", "long"]],
+    "glPixelTransferi" => ["void",  ["long", "long"]],
+    "glPixelZoom" => ["void",  ["long", "long"]],
+    "glPointSize" => ["void",  ["long"]],
+    "glPolygonMode" => ["void",  ["long", "long"]],
+    "glPolygonOffset" => ["void",  ["long", "long"]],
+    "glPolygonStipple" => ["void",  ["ptr"]],
+    "glPopAttrib" => ["void",  ["undef"]],
+    "glPopClientAttrib" => ["void",  ["undef"]],
+    "glPopMatrix" => ["void",  ["undef"]],
+    "glPopName" => ["void",  ["undef"]],
+    "glPrioritizeTextures" => ["void",  ["long", "ptr", "ptr"]],
+    "glPushAttrib" => ["void",  ["long"]],
+    "glPushClientAttrib" => ["void",  ["long"]],
+    "glPushMatrix" => ["void",  ["undef"]],
+    "glPushName" => ["void",  ["long"]],
+    "glRasterPos2d" => ["void",  ["double", "double"]],
+    "glRasterPos2dv" => ["void",  ["ptr"]],
+    "glRasterPos2f" => ["void",  ["long", "long"]],
+    "glRasterPos2fv" => ["void",  ["ptr"]],
+    "glRasterPos2i" => ["void",  ["long", "long"]],
+    "glRasterPos2iv" => ["void",  ["ptr"]],
+    "glRasterPos2s" => ["void",  ["long", "long"]],
+    "glRasterPos2sv" => ["void",  ["ptr"]],
+    "glRasterPos3d" => ["void",  ["double", "double", "double"]],
+    "glRasterPos3dv" => ["void",  ["ptr"]],
+    "glRasterPos3f" => ["void",  ["long", "long", "long"]],
+    "glRasterPos3fv" => ["void",  ["ptr"]],
+    "glRasterPos3i" => ["void",  ["long", "long", "long"]],
+    "glRasterPos3iv" => ["void",  ["ptr"]],
+    "glRasterPos3s" => ["void",  ["long", "long", "long"]],
+    "glRasterPos3sv" => ["void",  ["ptr"]],
+    "glRasterPos4d" => ["void",  ["double", "double", "double", "double"]],
+    "glRasterPos4dv" => ["void",  ["ptr"]],
+    "glRasterPos4f" => ["void",  ["long", "long", "long", "long"]],
+    "glRasterPos4fv" => ["void",  ["ptr"]],
+    "glRasterPos4i" => ["void",  ["long", "long", "long", "long"]],
+    "glRasterPos4iv" => ["void",  ["ptr"]],
+    "glRasterPos4s" => ["void",  ["long", "long", "long", "long"]],
+    "glRasterPos4sv" => ["void",  ["ptr"]],
+    "glReadBuffer" => ["void",  ["long"]],
+    "glReadPixels" => ["void",  ["long", "long", "long", "long", "long", "long", "ptr"]],
+    "glRectd" => ["void",  ["double", "double", "double", "double"]],
+    "glRectdv" => ["void",  ["ptr", "ptr"]],
+    "glRectf" => ["void",  ["long", "long", "long", "long"]],
+    "glRectfv" => ["void",  ["ptr", "ptr"]],
+    "glRecti" => ["void",  ["long", "long", "long", "long"]],
+    "glRectiv" => ["void",  ["ptr", "ptr"]],
+    "glRects" => ["void",  ["long", "long", "long", "long"]],
+    "glRectsv" => ["void",  ["ptr", "ptr"]],
+    "glRenderMode" => ["long",  ["long"]],
+    "glResetHistogram" => ["void",  ["long"]],
+    "glResetMinmax" => ["void",  ["long"]],
+    "glRotated" => ["void",  ["double", "double", "double", "double"]],
+    "glRotatef" => ["void",  ["long", "long", "long", "long"]],
+    "glScaled" => ["void",  ["double", "double", "double"]],
+    "glScalef" => ["void",  ["long", "long", "long"]],
+    "glScissor" => ["void",  ["long", "long", "long", "long"]],
+    "glSelectBuffer" => ["void",  ["long", "ptr"]],
+    "glSeparableFilter2D" => ["void",  ["long", "long", "long", "long", "long", "long", "ptr", "ptr"]],
+    "glShadeModel" => ["void",  ["long"]],
+    "glStencilFunc" => ["void",  ["long", "long", "long"]],
+    "glStencilMask" => ["void",  ["long"]],
+    "glStencilOp" => ["void",  ["long", "long", "long"]],
+    "glTexCoord1d" => ["void",  ["double"]],
+    "glTexCoord1dv" => ["void",  ["ptr"]],
+    "glTexCoord1f" => ["void",  ["long"]],
+    "glTexCoord1fv" => ["void",  ["ptr"]],
+    "glTexCoord1i" => ["void",  ["long"]],
+    "glTexCoord1iv" => ["void",  ["ptr"]],
+    "glTexCoord1s" => ["void",  ["long"]],
+    "glTexCoord1sv" => ["void",  ["ptr"]],
+    "glTexCoord2d" => ["void",  ["double", "double"]],
+    "glTexCoord2dv" => ["void",  ["ptr"]],
+    "glTexCoord2f" => ["void",  ["long", "long"]],
+    "glTexCoord2fv" => ["void",  ["ptr"]],
+    "glTexCoord2i" => ["void",  ["long", "long"]],
+    "glTexCoord2iv" => ["void",  ["ptr"]],
+    "glTexCoord2s" => ["void",  ["long", "long"]],
+    "glTexCoord2sv" => ["void",  ["ptr"]],
+    "glTexCoord3d" => ["void",  ["double", "double", "double"]],
+    "glTexCoord3dv" => ["void",  ["ptr"]],
+    "glTexCoord3f" => ["void",  ["long", "long", "long"]],
+    "glTexCoord3fv" => ["void",  ["ptr"]],
+    "glTexCoord3i" => ["void",  ["long", "long", "long"]],
+    "glTexCoord3iv" => ["void",  ["ptr"]],
+    "glTexCoord3s" => ["void",  ["long", "long", "long"]],
+    "glTexCoord3sv" => ["void",  ["ptr"]],
+    "glTexCoord4d" => ["void",  ["double", "double", "double", "double"]],
+    "glTexCoord4dv" => ["void",  ["ptr"]],
+    "glTexCoord4f" => ["void",  ["long", "long", "long", "long"]],
+    "glTexCoord4fv" => ["void",  ["ptr"]],
+    "glTexCoord4i" => ["void",  ["long", "long", "long", "long"]],
+    "glTexCoord4iv" => ["void",  ["ptr"]],
+    "glTexCoord4s" => ["void",  ["long", "long", "long", "long"]],
+    "glTexCoord4sv" => ["void",  ["ptr"]],
+    "glTexCoordPointer" => ["void",  ["long", "long", "long", "ptr"]],
+    "glTexEnvf" => ["void",  ["long", "long", "long"]],
+    "glTexEnvfv" => ["void",  ["long", "long", "ptr"]],
+    "glTexEnvi" => ["void",  ["long", "long", "long"]],
+    "glTexEnviv" => ["void",  ["long", "long", "ptr"]],
+    "glTexGend" => ["void",  ["long", "long", "double"]],
+    "glTexGendv" => ["void",  ["long", "long", "ptr"]],
+    "glTexGenf" => ["void",  ["long", "long", "long"]],
+    "glTexGenfv" => ["void",  ["long", "long", "ptr"]],
+    "glTexGeni" => ["void",  ["long", "long", "long"]],
+    "glTexGeniv" => ["void",  ["long", "long", "ptr"]],
+    "glTexImage1D" => ["void",  ["long", "long", "long", "long", "long", "long", "long", "ptr"]],
+    "glTexImage2D" => ["void",  ["long", "long", "long", "long", "long", "long", "long", "long", "ptr"]],
+    "glTexImage3D" => ["void",  ["long", "long", "long", "long", "long", "long", "long", "long", "long", "ptr"]],
+    "glTexParameterf" => ["void",  ["long", "long", "long"]],
+    "glTexParameterfv" => ["void",  ["long", "long", "ptr"]],
+    "glTexParameteri" => ["void",  ["long", "long", "long"]],
+    "glTexParameteriv" => ["void",  ["long", "long", "ptr"]],
+    "glTexSubImage1D" => ["void",  ["long", "long", "long", "long", "long", "long", "ptr"]],
+    "glTexSubImage2D" => ["void",  ["long", "long", "long", "long", "long", "long", "long", "long", "ptr"]],
+    "glTexSubImage3D" => ["void",  ["long", "long", "long", "long", "long", "long", "long", "long", "long", "long", "ptr"]],
+    "glTranslated" => ["void",  ["double", "double", "double"]],
+    "glTranslatef" => ["void",  ["long", "long", "long"]],
+    "glVertex2d" => ["void",  ["double", "double"]],
+    "glVertex2dv" => ["void",  ["ptr"]],
+    "glVertex2f" => ["void",  ["long", "long"]],
+    "glVertex2fv" => ["void",  ["ptr"]],
+    "glVertex2i" => ["void",  ["long", "long"]],
+    "glVertex2iv" => ["void",  ["ptr"]],
+    "glVertex2s" => ["void",  ["long", "long"]],
+    "glVertex2sv" => ["void",  ["ptr"]],
+    "glVertex3d" => ["void",  ["double", "double", "double"]],
+    "glVertex3dv" => ["void",  ["ptr"]],
+    "glVertex3f" => ["void",  ["long", "long", "long"]],
+    "glVertex3fv" => ["void",  ["ptr"]],
+    "glVertex3i" => ["void",  ["long", "long", "long"]],
+    "glVertex3iv" => ["void",  ["ptr"]],
+    "glVertex3s" => ["void",  ["long", "long", "long"]],
+    "glVertex3sv" => ["void",  ["ptr"]],
+    "glVertex4d" => ["void",  ["double", "double", "double", "double"]],
+    "glVertex4dv" => ["void",  ["ptr"]],
+    "glVertex4f" => ["void",  ["long", "long", "long", "long"]],
+    "glVertex4fv" => ["void",  ["ptr"]],
+    "glVertex4i" => ["void",  ["long", "long", "long", "long"]],
+    "glVertex4iv" => ["void",  ["ptr"]],
+    "glVertex4s" => ["void",  ["long", "long", "long", "long"]],
+    "glVertex4sv" => ["void",  ["ptr"]],
+    "glVertexPointer" => ["void",  ["long", "long", "long", "ptr"]],
+    "glViewport" => ["void",  ["long", "long", "long", "long"]],
+    "wglCopyContext" => ["long",  ["long", "long", "long"]],
+    "wglCreateContext" => ["long",  ["long"]],
+    "wglCreateLayerContext" => ["long",  ["long", "long"]],
+    "wglDeleteContext" => ["long",  ["long"]],
+    "wglDescribeLayerPlane" => ["long",  ["long", "long", "long", "long", "ptr"]],
+    "wglGetCurrentContext" => ["long",  []],
+    "wglGetCurrentDC" => ["long",  []],
+    "wglGetLayerPaletteEntries" => ["long",  ["long", "long", "long", "long", "ptr"]],
+    "wglGetProcAddress" => ["ptr",  ["str"]],
+    "wglMakeCurrent" => ["long",  ["long", "long"]],
+    "wglRealizeLayerPalette" => ["long",  ["long", "long", "long"]],
+    "wglSetLayerPaletteEntries" => ["long",  ["long", "long", "long", "long", "ptr"]],
+    "wglShareLists" => ["long",  ["long", "long"]],
+    "wglSwapLayerBuffers" => ["long",  ["long", "long"]],
+    "wglUseFontBitmapsA" => ["long",  ["long", "long", "long", "long"]],
+    "wglUseFontOutlinesA" => ["long",  ["long", "long", "long", "long", "long", "long", "long", "ptr"]]
+};
+
+&wine::declare("opengl32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/psapi.pm b/programs/winetest/include/psapi.pm
new file mode 100644
index 0000000..b595f31
--- /dev/null
+++ b/programs/winetest/include/psapi.pm
@@ -0,0 +1,38 @@
+package psapi;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "QueryWorkingSet" => ["long",  ["long", "ptr", "long"]],
+    "EmptyWorkingSet" => ["long",  ["long"]],
+    "EnumDeviceDrivers" => ["long",  ["ptr", "long", "ptr"]],
+    "EnumProcessModules" => ["long",  ["long", "ptr", "long", "ptr"]],
+    "EnumProcesses" => ["long",  ["ptr", "long", "ptr"]],
+    "GetDeviceDriverBaseNameA" => ["long",  ["ptr", "str", "long"]],
+    "GetDeviceDriverBaseNameW" => ["long",  ["ptr", "wstr", "long"]],
+    "GetDeviceDriverFileNameA" => ["long",  ["ptr", "str", "long"]],
+    "GetDeviceDriverFileNameW" => ["long",  ["ptr", "wstr", "long"]],
+    "GetMappedFileNameA" => ["long",  ["long", "ptr", "str", "long"]],
+    "GetMappedFileNameW" => ["long",  ["long", "ptr", "wstr", "long"]],
+    "GetModuleBaseNameA" => ["long",  ["long", "long", "str", "long"]],
+    "GetModuleBaseNameW" => ["long",  ["long", "long", "wstr", "long"]],
+    "GetModuleFileNameExA" => ["long",  ["long", "long", "str", "long"]],
+    "GetModuleFileNameExW" => ["long",  ["long", "long", "wstr", "long"]],
+    "GetModuleInformation" => ["long",  ["long", "long", "ptr", "long"]],
+    "GetProcessMemoryInfo" => ["long",  ["long", "ptr", "long"]],
+    "GetWsChanges" => ["long",  ["long", "ptr", "long"]],
+    "InitializeProcessForWsWatch" => ["long",  ["long"]]
+};
+
+&wine::declare("psapi",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/quartz.pm b/programs/winetest/include/quartz.pm
new file mode 100644
index 0000000..919e1e4
--- /dev/null
+++ b/programs/winetest/include/quartz.pm
@@ -0,0 +1,27 @@
+package quartz;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "AMGetErrorTextA" => ["long",  ["long", "str", "long"]],
+    "AMGetErrorTextW" => ["long",  ["long", "wstr", "long"]],
+    "AmpFactorToDB" => ["long",  ["long"]],
+    "DBToAmpFactor" => ["long",  ["long"]],
+    "DllCanUnloadNow" => ["long",  []],
+    "DllGetClassObject" => ["long",  ["ptr", "ptr", "ptr"]],
+    "DllRegisterServer" => ["long",  []],
+    "DllUnregisterServer" => ["long",  []]
+};
+
+&wine::declare("quartz",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/rasapi32.pm b/programs/winetest/include/rasapi32.pm
new file mode 100644
index 0000000..6baa6d4
--- /dev/null
+++ b/programs/winetest/include/rasapi32.pm
@@ -0,0 +1,41 @@
+package rasapi32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "RasDeleteEntryA" => ["long",  ["str", "str"]],
+    "RasDeleteEntryW" => ["long",  ["wstr", "wstr"]],
+    "RasEnumAutodialAddressesA" => ["long",  ["ptr", "ptr", "ptr"]],
+    "RasEnumAutodialAddressesW" => ["long",  ["ptr", "ptr", "ptr"]],
+    "RasEnumDevicesA" => ["long",  ["ptr", "ptr", "ptr"]],
+    "RasEnumDevicesW" => ["long",  ["ptr", "ptr", "ptr"]],
+    "RasGetAutodialAddressA" => ["long",  ["str", "ptr", "ptr", "ptr", "ptr"]],
+    "RasGetAutodialAddressW" => ["long",  ["wstr", "ptr", "ptr", "ptr", "ptr"]],
+    "RasGetAutodialEnableA" => ["long",  ["long", "ptr"]],
+    "RasGetAutodialEnableW" => ["long",  ["long", "ptr"]],
+    "RasGetAutodialParamA" => ["long",  ["long", "ptr", "ptr"]],
+    "RasGetAutodialParamW" => ["long",  ["long", "ptr", "ptr"]],
+    "RasSetAutodialAddressA" => ["long",  ["str", "long", "ptr", "long", "long"]],
+    "RasSetAutodialAddressW" => ["long",  ["wstr", "long", "ptr", "long", "long"]],
+    "RasSetAutodialEnableA" => ["long",  ["long", "long"]],
+    "RasSetAutodialEnableW" => ["long",  ["long", "long"]],
+    "RasSetAutodialParamA" => ["long",  ["long", "ptr", "long"]],
+    "RasSetAutodialParamW" => ["long",  ["long", "ptr", "long"]],
+    "RasEnumConnectionsA" => ["long",  ["ptr", "ptr", "ptr"]],
+    "RasEnumEntriesA" => ["long",  ["str", "str", "ptr", "ptr", "ptr"]],
+    "RasGetEntryDialParamsA" => ["long",  ["str", "ptr", "ptr"]],
+    "RasHangUpA" => ["long",  ["long"]]
+};
+
+&wine::declare("rasapi32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/riched32.pm b/programs/winetest/include/riched32.pm
new file mode 100644
index 0000000..0e6f7af
--- /dev/null
+++ b/programs/winetest/include/riched32.pm
@@ -0,0 +1,20 @@
+package riched32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "DllGetVersion" => ["long",  ["ptr"]]
+};
+
+&wine::declare("riched32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/rpcrt4.pm b/programs/winetest/include/rpcrt4.pm
new file mode 100644
index 0000000..3d5da6d
--- /dev/null
+++ b/programs/winetest/include/rpcrt4.pm
@@ -0,0 +1,39 @@
+package rpcrt4;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "NdrDllRegisterProxy" => ["long",  ["long", "ptr", "ptr"]],
+    "RpcBindingFromStringBindingA" => ["long",  ["str", "ptr"]],
+    "RpcBindingFromStringBindingW" => ["long",  ["wstr", "ptr"]],
+    "RpcServerListen" => ["long",  ["long", "long", "long"]],
+    "RpcServerRegisterAuthInfoA" => ["long",  ["str", "long", "ptr", "ptr"]],
+    "RpcServerRegisterAuthInfoW" => ["long",  ["wstr", "long", "ptr", "ptr"]],
+    "RpcServerRegisterIf" => ["long",  ["long", "ptr", "ptr"]],
+    "RpcServerRegisterIf2" => ["long",  ["long", "ptr", "ptr", "long", "long", "long", "ptr"]],
+    "RpcServerRegisterIfEx" => ["long",  ["long", "ptr", "ptr", "long", "long", "ptr"]],
+    "RpcServerUseProtseqEpA" => ["long",  ["str", "long", "str", "ptr"]],
+    "RpcServerUseProtseqEpExA" => ["long",  ["str", "long", "str", "ptr", "ptr"]],
+    "RpcServerUseProtseqEpExW" => ["long",  ["wstr", "long", "wstr", "ptr", "ptr"]],
+    "RpcServerUseProtseqEpW" => ["long",  ["wstr", "long", "wstr", "ptr"]],
+    "RpcStringBindingComposeA" => ["long",  ["str", "str", "str", "str", "str", "ptr"]],
+    "RpcStringBindingComposeW" => ["long",  ["wstr", "wstr", "wstr", "wstr", "wstr", "ptr"]],
+    "RpcStringFreeA" => ["long",  ["ptr"]],
+    "UuidCreate" => ["long",  ["ptr"]],
+    "UuidCreateSequential" => ["long",  ["ptr"]],
+    "UuidHash" => ["ptr",  ["ptr", "ptr"]],
+    "UuidToStringA" => ["long",  ["ptr", "ptr"]]
+};
+
+&wine::declare("rpcrt4",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/serialui.pm b/programs/winetest/include/serialui.pm
new file mode 100644
index 0000000..a72153d
--- /dev/null
+++ b/programs/winetest/include/serialui.pm
@@ -0,0 +1,23 @@
+package serialui;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "EnumPropPages" => ["long",  ["ptr", "ptr", "long"]],
+    "drvCommConfigDialog" => ["long",  ["str", "long", "ptr"]],
+    "drvSetDefaultCommConfig" => ["long",  ["str", "ptr", "long"]],
+    "drvGetDefaultCommConfig" => ["long",  ["str", "ptr", "ptr"]]
+};
+
+&wine::declare("serialui",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/setupapi.pm b/programs/winetest/include/setupapi.pm
new file mode 100644
index 0000000..604edab
--- /dev/null
+++ b/programs/winetest/include/setupapi.pm
@@ -0,0 +1,39 @@
+package setupapi;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "SetupCloseFileQueue" => ["void",  ["long"]],
+    "SetupCloseInfFile" => ["void",  ["long"]],
+    "SetupCommitFileQueueA" => ["long",  ["long", "long", "ptr", "ptr"]],
+    "SetupDefaultQueueCallbackA" => ["long",  ["ptr", "long", "long", "long"]],
+    "SetupFindFirstLineA" => ["long",  ["long", "str", "str", "ptr"]],
+    "SetupFindNextLine" => ["long",  ["ptr", "ptr"]],
+    "SetupGetLineByIndexA" => ["long",  ["long", "str", "long", "ptr"]],
+    "SetupGetLineTextA" => ["long",  ["ptr", "long", "str", "str", "str", "long", "ptr"]],
+    "SetupGetStringFieldA" => ["long",  ["ptr", "long", "str", "long", "ptr"]],
+    "SetupInitDefaultQueueCallback" => ["ptr",  ["long"]],
+    "SetupInitDefaultQueueCallbackEx" => ["ptr",  ["long", "long", "long", "long", "ptr"]],
+    "SetupInstallFromInfSectionA" => ["long",  ["long", "long", "str", "long", "long", "str", "long", "ptr", "ptr", "long", "ptr"]],
+    "SetupIterateCabinetA" => ["long",  ["str", "long", "ptr", "ptr"]],
+    "SetupIterateCabinetW" => ["long",  ["str", "long", "ptr", "ptr"]],
+    "SetupOpenAppendInfFileA" => ["long",  ["str", "long", "ptr"]],
+    "SetupOpenFileQueue" => ["long",  []],
+    "SetupOpenInfFileA" => ["long",  ["str", "str", "long", "ptr"]],
+    "SetupQueueCopyA" => ["long",  ["long", "str", "str", "str", "str", "str", "str", "str", "long"]],
+    "SetupSetDirectoryIdA" => ["long",  ["long", "long", "str"]],
+    "SetupTermDefaultQueueCallback" => ["void",  ["ptr"]]
+};
+
+&wine::declare("setupapi",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/shdocvw.pm b/programs/winetest/include/shdocvw.pm
new file mode 100644
index 0000000..26f6d04
--- /dev/null
+++ b/programs/winetest/include/shdocvw.pm
@@ -0,0 +1,25 @@
+package shdocvw;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "DllCanUnloadNow" => ["long",  []],
+    "DllGetVersion" => ["long",  ["ptr"]],
+    "DllInstall" => ["long",  ["long", "wstr"]],
+    "DllRegisterServer" => ["long",  ["undef"]],
+    "DllUnregisterServer" => ["long",  ["undef"]],
+    "DllGetClassObject" => ["long",  ["ptr", "ptr", "ptr"]]
+};
+
+&wine::declare("shdocvw",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/shell32.pm b/programs/winetest/include/shell32.pm
new file mode 100644
index 0000000..b00e398
--- /dev/null
+++ b/programs/winetest/include/shell32.pm
@@ -0,0 +1,244 @@
+package shell32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "SHRegDeleteKeyA" => ["long",  ["long", "str"]],
+    "SHChangeNotifyRegister" => ["long",  ["long", "long", "long", "long", "long", "ptr"]],
+    "SHChangeNotifyDeregister" => ["long",  ["long"]],
+    "SHChangeNotifyUpdateEntryList" => ["long",  ["long", "long", "long", "long"]],
+    "ILGetDisplayName" => ["long",  ["ptr", "str"]],
+    "ILFindLastID" => ["ptr",  ["ptr"]],
+    "ILRemoveLastID" => ["long",  ["ptr"]],
+    "ILClone" => ["ptr",  ["ptr"]],
+    "ILCloneFirst" => ["ptr",  ["ptr"]],
+    "ILGlobalClone" => ["ptr",  ["ptr"]],
+    "ILIsEqual" => ["long",  ["ptr", "ptr"]],
+    "ILIsParent" => ["long",  ["ptr", "ptr", "long"]],
+    "ILFindChild" => ["ptr",  ["ptr", "ptr"]],
+    "ILCombine" => ["ptr",  ["ptr", "ptr"]],
+    "ILLoadFromStream" => ["long",  ["ptr", "ptr"]],
+    "ILSaveToStream" => ["long",  ["ptr", "ptr"]],
+    "SHILCreateFromPath" => ["long",  ["ptr", "ptr", "ptr"]],
+    "PathIsRoot" => ["long",  ["ptr"]],
+    "PathBuildRoot" => ["ptr",  ["ptr", "long"]],
+    "PathFindExtension" => ["ptr",  ["ptr"]],
+    "PathAddBackslash" => ["ptr",  ["ptr"]],
+    "PathRemoveBlanks" => ["void",  ["ptr"]],
+    "PathFindFileName" => ["ptr",  ["ptr"]],
+    "PathRemoveFileSpec" => ["long",  ["ptr"]],
+    "PathAppend" => ["long",  ["ptr", "ptr"]],
+    "PathCombine" => ["ptr",  ["ptr", "ptr", "ptr"]],
+    "PathStripPath" => ["void",  ["ptr"]],
+    "PathIsUNC" => ["long",  ["ptr"]],
+    "PathIsRelative" => ["long",  ["ptr"]],
+    "PathIsExe" => ["long",  ["ptr"]],
+    "PathFileExists" => ["long",  ["ptr"]],
+    "PathMatchSpec" => ["long",  ["ptr", "ptr"]],
+    "PathMakeUniqueName" => ["long",  ["ptr", "long", "ptr", "ptr", "ptr"]],
+    "PathSetDlgItemPath" => ["long",  ["long", "long", "ptr"]],
+    "PathQualify" => ["long",  ["ptr"]],
+    "PathStripToRoot" => ["long",  ["ptr"]],
+    "PathResolve" => ["long",  ["ptr", "ptr", "long"]],
+    "PathGetArgs" => ["ptr",  ["ptr"]],
+    "DoEnvironmentSubst" => ["long",  ["ptr", "ptr"]],
+    "DragAcceptFiles" => ["void",  ["long", "long"]],
+    "PathQuoteSpaces" => ["ptr",  ["ptr"]],
+    "PathUnquoteSpaces" => ["void",  ["ptr"]],
+    "PathGetDriveNumber" => ["long",  ["ptr"]],
+    "ParseField" => ["long",  ["ptr", "long", "ptr", "long"]],
+    "ExitWindowsDialog" => ["void",  ["long"]],
+    "RunFileDlg" => ["void",  ["long", "long", "str", "str", "str", "long"]],
+    "PickIconDlg" => ["long",  ["long", "str", "long", "ptr"]],
+    "GetFileNameFromBrowse" => ["long",  ["long", "str", "long", "str", "str", "str", "str"]],
+    "DriveType" => ["long",  ["long"]],
+    "IsNetDrive" => ["long",  ["long"]],
+    "Shell_MergeMenus" => ["long",  ["long", "long", "long", "long", "long", "long"]],
+    "SHGetSetSettings" => ["void",  ["long", "long", "long"]],
+    "SHCreateDefClassObject" => ["long",  ["ptr", "ptr", "ptr", "ptr", "ptr"]],
+    "Shell_GetImageList" => ["long",  ["ptr", "ptr"]],
+    "Shell_GetCachedImageIndex" => ["long",  ["ptr", "long", "long"]],
+    "SHShellFolderView_Message" => ["long",  ["long", "long", "long"]],
+    "PathYetAnotherMakeUniqueName" => ["long",  ["str", "str", "str", "str"]],
+    "SHMapPIDLToSystemImageListIndex" => ["long",  ["ptr", "ptr", "ptr"]],
+    "OleStrToStrN" => ["long",  ["ptr", "long", "ptr", "long"]],
+    "StrToOleStrN" => ["long",  ["wstr", "long", "ptr", "long"]],
+    "DragFinish" => ["void",  ["long"]],
+    "DragQueryFile" => ["long",  ["long", "long", "str", "long"]],
+    "DragQueryFileA" => ["long",  ["long", "long", "str", "long"]],
+    "CIDLData_CreateFromIDArray" => ["long",  ["ptr", "long", "ptr", "ptr"]],
+    "SHRegisterDragDrop" => ["long",  ["long", "ptr"]],
+    "SHRevokeDragDrop" => ["long",  ["long"]],
+    "SHDoDragDrop" => ["long",  ["long", "ptr", "ptr", "long", "ptr"]],
+    "SHCloneSpecialIDList" => ["ptr",  ["long", "long", "long"]],
+    "PathGetShortPath" => ["ptr",  ["ptr"]],
+    "SHLogILFromFSIL" => ["ptr",  ["ptr"]],
+    "StrRetToStrN" => ["long",  ["ptr", "long", "ptr", "ptr"]],
+    "SHWaitForFileToOpen" => ["long",  ["ptr", "long", "long"]],
+    "SHGetRealIDL" => ["ptr",  ["ptr", "ptr", "long"]],
+    "SetAppStartingCursor" => ["long",  ["long", "long"]],
+    "SHRestricted" => ["long",  ["long"]],
+    "SHCoCreateInstance" => ["long",  ["str", "ptr", "ptr", "ptr", "ptr"]],
+    "SignalFileOpen" => ["long",  ["long"]],
+    "FileMenu_DeleteAllItems" => ["long",  ["long"]],
+    "FileMenu_DrawItem" => ["long",  ["long", "ptr"]],
+    "FileMenu_FindSubMenuByPidl" => ["long",  ["long", "ptr"]],
+    "FileMenu_GetLastSelectedItemPidls" => ["long",  ["long", "ptr", "ptr"]],
+    "FileMenu_HandleMenuChar" => ["long",  ["long", "long"]],
+    "FileMenu_InitMenuPopup" => ["long",  ["long"]],
+    "FileMenu_InsertUsingPidl" => ["long",  ["long", "long", "ptr", "long", "long", "ptr"]],
+    "FileMenu_Invalidate" => ["void",  ["long"]],
+    "FileMenu_MeasureItem" => ["long",  ["long", "ptr"]],
+    "FileMenu_ReplaceUsingPidl" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "FileMenu_Create" => ["long",  ["long", "long", "long", "long", "long"]],
+    "FileMenu_AppendItem" => ["long",  ["long", "ptr", "long", "long", "long", "long"]],
+    "FileMenu_TrackPopupMenuEx" => ["long",  ["long", "long", "long", "long", "long", "ptr"]],
+    "FileMenu_DeleteItemByCmd" => ["long",  ["long", "long"]],
+    "FileMenu_Destroy" => ["void",  ["long"]],
+    "IsLFNDrive" => ["long",  ["str"]],
+    "FileMenu_AbortInitMenu" => ["void",  []],
+    "SHFlushClipboard" => ["long",  []],
+    "RunDLL_CallEntry16" => ["long",  ["long", "long", "long", "long", "long"]],
+    "SHFreeUnusedLibraries" => ["void",  []],
+    "FileMenu_AppendFilesForPidl" => ["long",  ["long", "ptr", "long"]],
+    "FileMenu_AddFilesForPidl" => ["long",  ["long", "long", "long", "ptr", "long", "long", "ptr"]],
+    "SHOutOfMemoryMessageBox" => ["long",  ["long", "str", "long"]],
+    "SHWinHelp" => ["long",  ["long", "long", "long", "long"]],
+    "DllGetClassObject" => ["long",  ["ptr", "ptr", "ptr"]],
+    "DragQueryFileW" => ["long",  ["long", "long", "wstr", "long"]],
+    "DragQueryPoint" => ["long",  ["long", "ptr"]],
+    "DAD_SetDragImage" => ["long",  ["long", "ptr"]],
+    "DAD_ShowDragImage" => ["long",  ["long"]],
+    "FileMenu_DeleteItemByIndex" => ["long",  ["long", "long"]],
+    "FileMenu_DeleteItemByFirstID" => ["long",  ["long", "long"]],
+    "FileMenu_DeleteSeparator" => ["long",  ["long"]],
+    "FileMenu_EnableItemByCmd" => ["long",  ["long", "long", "long"]],
+    "FileMenu_GetItemExtent" => ["long",  ["long", "long"]],
+    "PathFindOnPath" => ["long",  ["ptr", "ptr"]],
+    "RLBuildListOfPaths" => ["long",  []],
+    "SHCLSIDFromString" => ["long",  ["ptr", "ptr"]],
+    "SHFind_InitMenuPopup" => ["ptr",  ["long", "long", "long", "long"]],
+    "SHLoadOLE" => ["long",  ["long"]],
+    "ILGetSize" => ["long",  ["ptr"]],
+    "ILGetNext" => ["ptr",  ["ptr"]],
+    "ILAppend" => ["ptr",  ["ptr", "ptr", "long"]],
+    "ILFree" => ["long",  ["ptr"]],
+    "ILGlobalFree" => ["void",  ["ptr"]],
+    "ILCreateFromPath" => ["ptr",  ["ptr"]],
+    "PathGetExtension" => ["ptr",  ["ptr", "long", "long"]],
+    "PathIsDirectory" => ["long",  ["ptr"]],
+    "SHRunControlPanel" => ["long",  ["long", "long"]],
+    "SHSimpleIDListFromPath" => ["ptr",  ["ptr"]],
+    "StrToOleStr" => ["long",  ["wstr", "ptr"]],
+    "Win32DeleteFile" => ["long",  ["str"]],
+    "SHCreateDirectory" => ["long",  ["ptr", "str"]],
+    "CallCPLEntry16" => ["long",  ["long", "ptr", "long", "long", "long", "long"]],
+    "SHAddFromPropSheetExtArray" => ["long",  ["long", "long", "long"]],
+    "SHCreatePropSheetExtArray" => ["long",  ["long", "str", "long"]],
+    "SHDestroyPropSheetExtArray" => ["long",  ["long"]],
+    "SHReplaceFromPropSheetExtArray" => ["long",  ["long", "long", "long", "long"]],
+    "PathCleanupSpec" => ["long",  ["ptr", "ptr"]],
+    "SHValidateUNC" => ["long",  ["long", "long", "long"]],
+    "SHCreateShellFolderViewEx" => ["long",  ["ptr", "ptr"]],
+    "SHGetSpecialFolderPath" => ["long",  ["long", "ptr", "long", "long"]],
+    "SHSetInstanceExplorer" => ["long",  ["ptr"]],
+    "RegisterShellHook" => ["long",  ["long", "long"]],
+    "ArrangeWindows" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "SHFree" => ["void",  ["ptr"]],
+    "SHAlloc" => ["ptr",  ["long"]],
+    "SHAbortInvokeCommand" => ["long",  []],
+    "SHInitRestricted" => ["long",  ["str", "str"]],
+    "SHGetDataFromIDListA" => ["long",  ["ptr", "ptr", "long", "ptr", "long"]],
+    "SHGetDataFromIDListW" => ["long",  ["ptr", "ptr", "long", "ptr", "long"]],
+    "PathParseIconLocation" => ["long",  ["ptr"]],
+    "PathRemoveExtension" => ["void",  ["ptr"]],
+    "PathRemoveArgs" => ["void",  ["ptr"]],
+    "SheChangeDirW" => ["long",  ["wstr"]],
+    "SheGetDirW" => ["long",  ["wstr", "wstr"]],
+    "ShellAboutA" => ["long",  ["long", "str", "str", "long"]],
+    "ShellAboutW" => ["long",  ["long", "wstr", "wstr", "long"]],
+    "ShellExecuteA" => ["long",  ["long", "str", "str", "str", "str", "long"]],
+    "ShellExecuteEx" => ["long",  ["ptr"]],
+    "ShellExecuteExA" => ["long",  ["ptr"]],
+    "ShellExecuteExW" => ["long",  ["ptr"]],
+    "ShellExecuteW" => ["long",  ["long", "wstr", "wstr", "wstr", "wstr", "long"]],
+    "Shell_NotifyIcon" => ["long",  ["long", "ptr"]],
+    "Shell_NotifyIconA" => ["long",  ["long", "ptr"]],
+    "Shell_NotifyIconW" => ["long",  ["long", "ptr"]],
+    "SHRegOpenKeyA" => ["long",  ["long", "str", "ptr"]],
+    "SHRegOpenKeyW" => ["long",  ["long", "wstr", "ptr"]],
+    "SHRegQueryValueExA" => ["long",  ["long", "str", "ptr", "ptr", "ptr", "ptr"]],
+    "SHRegQueryValueW" => ["long",  ["long", "wstr", "wstr", "ptr"]],
+    "SHRegQueryValueExW" => ["long",  ["long", "wstr", "ptr", "ptr", "ptr", "ptr"]],
+    "SHRegDeleteKeyW" => ["long",  ["long", "wstr"]],
+    "SHAllocShared" => ["long",  ["ptr", "long", "long"]],
+    "SHLockShared" => ["ptr",  ["long", "long"]],
+    "SHUnlockShared" => ["long",  ["ptr"]],
+    "SHFreeShared" => ["long",  ["long", "long"]],
+    "NTSHChangeNotifyRegister" => ["long",  ["long", "long", "long", "long", "long", "ptr"]],
+    "NTSHChangeNotifyDeregister" => ["long",  ["long"]],
+    "SHChangeNotification_Lock" => ["long",  ["long", "long", "undef", "ptr"]],
+    "SHChangeNotification_Unlock" => ["long",  ["long"]],
+    "PathIsSameRoot" => ["long",  ["ptr", "ptr"]],
+    "ReadCabinetState" => ["long",  ["long", "long"]],
+    "WriteCabinetState" => ["long",  ["long"]],
+    "PathProcessCommand" => ["long",  ["ptr", "ptr", "long", "long"]],
+    "FileIconInit" => ["long",  ["long"]],
+    "IsUserAdmin" => ["long",  []],
+    "CommandLineToArgvW" => ["ptr",  ["wstr", "ptr"]],
+    "Control_FillCache_RunDLL" => ["long",  ["long", "long", "long", "long"]],
+    "Control_RunDLL" => ["void",  ["long", "long", "str", "long"]],
+    "DllCanUnloadNow" => ["long",  []],
+    "DllGetVersion" => ["long",  ["ptr"]],
+    "DllInstall" => ["long",  ["long", "wstr"]],
+    "DoEnvironmentSubstA" => ["long",  ["str", "str"]],
+    "DoEnvironmentSubstW" => ["long",  ["wstr", "wstr"]],
+    "DuplicateIcon" => ["long",  ["long", "long"]],
+    "ExtractAssociatedIconA" => ["long",  ["long", "str", "ptr"]],
+    "ExtractIconA" => ["long",  ["long", "str", "long"]],
+    "ExtractIconEx" => ["long",  ["ptr", "long", "ptr", "ptr", "long"]],
+    "ExtractIconExA" => ["long",  ["str", "long", "ptr", "ptr", "long"]],
+    "ExtractIconExW" => ["long",  ["wstr", "long", "ptr", "ptr", "long"]],
+    "ExtractIconW" => ["long",  ["long", "wstr", "long"]],
+    "FindExecutableA" => ["long",  ["str", "str", "str"]],
+    "FindExecutableW" => ["long",  ["wstr", "wstr", "wstr"]],
+    "FreeIconList" => ["void",  ["long"]],
+    "SHAddToRecentDocs" => ["long",  ["long", "ptr"]],
+    "SHAppBarMessage" => ["long",  ["long", "ptr"]],
+    "SHBrowseForFolder" => ["ptr",  ["ptr"]],
+    "SHBrowseForFolderA" => ["ptr",  ["ptr"]],
+    "SHChangeNotify" => ["void",  ["long", "long", "ptr", "ptr"]],
+    "SHFileOperation" => ["long",  ["ptr"]],
+    "SHFileOperationA" => ["long",  ["ptr"]],
+    "SHFileOperationW" => ["long",  ["ptr"]],
+    "SHGetDesktopFolder" => ["long",  ["ptr"]],
+    "SHGetFileInfo" => ["long",  ["ptr", "long", "ptr", "long", "long"]],
+    "SHGetFileInfoA" => ["long",  ["str", "long", "ptr", "long", "long"]],
+    "SHGetFileInfoW" => ["long",  ["wstr", "long", "ptr", "long", "long"]],
+    "SHGetFolderLocation" => ["long",  ["long", "long", "long", "long", "ptr"]],
+    "SHGetFolderPathA" => ["long",  ["long", "long", "long", "long", "str"]],
+    "SHGetFolderPathW" => ["long",  ["long", "long", "long", "long", "wstr"]],
+    "SHGetInstanceExplorer" => ["long",  ["ptr"]],
+    "SHGetMalloc" => ["long",  ["ptr"]],
+    "SHGetPathFromIDList" => ["long",  ["ptr", "ptr"]],
+    "SHGetPathFromIDListA" => ["long",  ["ptr", "str"]],
+    "SHGetPathFromIDListW" => ["long",  ["ptr", "wstr"]],
+    "SHGetSettings" => ["void",  ["ptr", "long"]],
+    "SHGetSpecialFolderLocation" => ["long",  ["long", "long", "ptr"]],
+    "SHGetSpecialFolderPathA" => ["long",  ["long", "str", "long", "long"]],
+    "SHHelpShortcuts_RunDLL" => ["long",  ["long", "long", "long", "long"]],
+    "SHLoadInProc" => ["long",  ["ptr"]]
+};
+
+&wine::declare("shell32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/shlwapi.pm b/programs/winetest/include/shlwapi.pm
new file mode 100644
index 0000000..277fd35
--- /dev/null
+++ b/programs/winetest/include/shlwapi.pm
@@ -0,0 +1,230 @@
+package shlwapi;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "ChrCmpIA" => ["long",  ["long", "long"]],
+    "ChrCmpIW" => ["long",  ["long", "long"]],
+    "ColorHLSToRGB" => ["long",  ["long", "long", "long"]],
+    "ColorRGBToHLS" => ["void",  ["long", "ptr", "ptr", "ptr"]],
+    "DllGetVersion" => ["long",  ["ptr"]],
+    "GetMenuPosFromID" => ["long",  ["long", "long"]],
+    "HashData" => ["long",  ["ptr", "long", "ptr", "long"]],
+    "PathAddBackslashA" => ["str",  ["str"]],
+    "PathAddBackslashW" => ["wstr",  ["wstr"]],
+    "PathAddExtensionA" => ["long",  ["str", "str"]],
+    "PathAddExtensionW" => ["long",  ["wstr", "wstr"]],
+    "PathAppendA" => ["long",  ["str", "str"]],
+    "PathAppendW" => ["long",  ["wstr", "wstr"]],
+    "PathBuildRootA" => ["str",  ["str", "long"]],
+    "PathBuildRootW" => ["wstr",  ["wstr", "long"]],
+    "PathCanonicalizeA" => ["long",  ["str", "str"]],
+    "PathCanonicalizeW" => ["long",  ["wstr", "wstr"]],
+    "PathCombineA" => ["str",  ["str", "str", "str"]],
+    "PathCombineW" => ["wstr",  ["wstr", "wstr", "wstr"]],
+    "PathCommonPrefixA" => ["long",  ["str", "str", "str"]],
+    "PathCommonPrefixW" => ["long",  ["wstr", "wstr", "wstr"]],
+    "PathCompactPathA" => ["long",  ["long", "str", "long"]],
+    "PathCompactPathExA" => ["long",  ["str", "str", "long", "long"]],
+    "PathCompactPathExW" => ["long",  ["wstr", "wstr", "long", "long"]],
+    "PathCompactPathW" => ["long",  ["long", "wstr", "long"]],
+    "PathCreateFromUrlA" => ["long",  ["str", "str", "ptr", "long"]],
+    "PathCreateFromUrlW" => ["long",  ["wstr", "wstr", "ptr", "long"]],
+    "PathFileExistsA" => ["long",  ["str"]],
+    "PathFileExistsW" => ["long",  ["wstr"]],
+    "PathFindExtensionA" => ["str",  ["str"]],
+    "PathFindExtensionW" => ["wstr",  ["wstr"]],
+    "PathFindFileNameA" => ["str",  ["str"]],
+    "PathFindFileNameW" => ["wstr",  ["wstr"]],
+    "PathFindNextComponentA" => ["str",  ["str"]],
+    "PathFindNextComponentW" => ["wstr",  ["wstr"]],
+    "PathFindOnPathA" => ["long",  ["str", "ptr"]],
+    "PathFindOnPathW" => ["long",  ["wstr", "ptr"]],
+    "PathGetArgsA" => ["str",  ["str"]],
+    "PathGetArgsW" => ["wstr",  ["wstr"]],
+    "PathGetCharTypeA" => ["long",  ["long"]],
+    "PathGetCharTypeW" => ["long",  ["long"]],
+    "PathGetDriveNumberA" => ["long",  ["str"]],
+    "PathGetDriveNumberW" => ["long",  ["wstr"]],
+    "PathIsContentTypeA" => ["long",  ["str", "str"]],
+    "PathIsContentTypeW" => ["long",  ["wstr", "wstr"]],
+    "PathIsDirectoryA" => ["long",  ["str"]],
+    "PathIsDirectoryW" => ["long",  ["wstr"]],
+    "PathIsFileSpecA" => ["long",  ["str"]],
+    "PathIsFileSpecW" => ["long",  ["wstr"]],
+    "PathIsPrefixA" => ["long",  ["str", "str"]],
+    "PathIsPrefixW" => ["long",  ["wstr", "wstr"]],
+    "PathIsRelativeA" => ["long",  ["str"]],
+    "PathIsRelativeW" => ["long",  ["wstr"]],
+    "PathIsRootA" => ["long",  ["str"]],
+    "PathIsRootW" => ["long",  ["wstr"]],
+    "PathIsSameRootA" => ["long",  ["str", "str"]],
+    "PathIsSameRootW" => ["long",  ["wstr", "wstr"]],
+    "PathIsSystemFolderA" => ["long",  ["str", "long"]],
+    "PathIsSystemFolderW" => ["long",  ["wstr", "long"]],
+    "PathIsUNCA" => ["long",  ["str"]],
+    "PathIsUNCServerA" => ["long",  ["str"]],
+    "PathIsUNCServerShareA" => ["long",  ["str"]],
+    "PathIsUNCServerShareW" => ["long",  ["wstr"]],
+    "PathIsUNCServerW" => ["long",  ["wstr"]],
+    "PathIsUNCW" => ["long",  ["wstr"]],
+    "PathIsURLA" => ["long",  ["str"]],
+    "PathIsURLW" => ["long",  ["wstr"]],
+    "PathMakePrettyA" => ["long",  ["str"]],
+    "PathMakePrettyW" => ["long",  ["wstr"]],
+    "PathMakeSystemFolderA" => ["long",  ["str"]],
+    "PathMakeSystemFolderW" => ["long",  ["wstr"]],
+    "PathMatchSpecA" => ["long",  ["str", "str"]],
+    "PathMatchSpecW" => ["long",  ["wstr", "wstr"]],
+    "PathParseIconLocationA" => ["long",  ["str"]],
+    "PathParseIconLocationW" => ["long",  ["wstr"]],
+    "PathQuoteSpacesA" => ["str",  ["str"]],
+    "PathQuoteSpacesW" => ["wstr",  ["wstr"]],
+    "PathRelativePathToA" => ["long",  ["str", "str", "long", "str", "long"]],
+    "PathRelativePathToW" => ["long",  ["wstr", "wstr", "long", "wstr", "long"]],
+    "PathRemoveArgsA" => ["void",  ["str"]],
+    "PathRemoveArgsW" => ["void",  ["wstr"]],
+    "PathRemoveBackslashA" => ["str",  ["str"]],
+    "PathRemoveBackslashW" => ["wstr",  ["wstr"]],
+    "PathRemoveBlanksA" => ["void",  ["str"]],
+    "PathRemoveBlanksW" => ["void",  ["wstr"]],
+    "PathRemoveExtensionA" => ["void",  ["str"]],
+    "PathRemoveExtensionW" => ["void",  ["wstr"]],
+    "PathRemoveFileSpecA" => ["long",  ["str"]],
+    "PathRemoveFileSpecW" => ["long",  ["wstr"]],
+    "PathRenameExtensionA" => ["long",  ["str", "str"]],
+    "PathRenameExtensionW" => ["long",  ["wstr", "wstr"]],
+    "PathSearchAndQualifyA" => ["long",  ["str", "str", "long"]],
+    "PathSearchAndQualifyW" => ["long",  ["wstr", "wstr", "long"]],
+    "PathSetDlgItemPathA" => ["long",  ["long", "long", "str"]],
+    "PathSetDlgItemPathW" => ["long",  ["long", "long", "wstr"]],
+    "PathSkipRootA" => ["str",  ["str"]],
+    "PathSkipRootW" => ["wstr",  ["wstr"]],
+    "PathStripPathA" => ["void",  ["str"]],
+    "PathStripPathW" => ["void",  ["wstr"]],
+    "PathStripToRootA" => ["long",  ["str"]],
+    "PathStripToRootW" => ["long",  ["wstr"]],
+    "PathUnmakeSystemFolderA" => ["long",  ["str"]],
+    "PathUnmakeSystemFolderW" => ["long",  ["wstr"]],
+    "PathUnquoteSpacesA" => ["void",  ["str"]],
+    "PathUnquoteSpacesW" => ["void",  ["wstr"]],
+    "SHCreateShellPalette" => ["long",  ["long"]],
+    "SHDeleteEmptyKeyA" => ["long",  ["long", "str"]],
+    "SHDeleteEmptyKeyW" => ["long",  ["long", "wstr"]],
+    "SHDeleteKeyA" => ["long",  ["long", "str"]],
+    "SHDeleteKeyW" => ["long",  ["long", "wstr"]],
+    "SHDeleteOrphanKeyA" => ["long",  ["long", "str"]],
+    "SHDeleteOrphanKeyW" => ["long",  ["long", "wstr"]],
+    "SHDeleteValueA" => ["long",  ["long", "str", "str"]],
+    "SHDeleteValueW" => ["long",  ["long", "wstr", "wstr"]],
+    "SHEnumKeyExA" => ["long",  ["long", "long", "str", "ptr"]],
+    "SHEnumKeyExW" => ["long",  ["long", "long", "wstr", "ptr"]],
+    "SHEnumValueA" => ["long",  ["long", "long", "str", "ptr", "ptr", "ptr", "ptr"]],
+    "SHEnumValueW" => ["long",  ["long", "long", "wstr", "ptr", "ptr", "ptr", "ptr"]],
+    "SHGetInverseCMAP" => ["long",  ["ptr", "long"]],
+    "SHGetValueA" => ["long",  ["long", "str", "str", "ptr", "ptr", "ptr"]],
+    "SHGetValueW" => ["long",  ["long", "wstr", "wstr", "ptr", "ptr", "ptr"]],
+    "SHIsLowMemoryMachine" => ["long",  ["long"]],
+    "SHOpenRegStream2A" => ["ptr",  ["long", "str", "str", "long"]],
+    "SHOpenRegStream2W" => ["ptr",  ["long", "wstr", "wstr", "long"]],
+    "SHOpenRegStreamA" => ["ptr",  ["long", "str", "str", "long"]],
+    "SHOpenRegStreamW" => ["ptr",  ["long", "wstr", "wstr", "long"]],
+    "SHQueryInfoKeyA" => ["long",  ["long", "ptr", "ptr", "ptr", "ptr"]],
+    "SHQueryInfoKeyW" => ["long",  ["long", "ptr", "ptr", "ptr", "ptr"]],
+    "SHQueryValueExA" => ["long",  ["long", "str", "ptr", "ptr", "ptr", "ptr"]],
+    "SHQueryValueExW" => ["long",  ["long", "wstr", "ptr", "ptr", "ptr", "ptr"]],
+    "SHRegCloseUSKey" => ["long",  ["long"]],
+    "SHRegDuplicateHKey" => ["long",  ["long"]],
+    "SHRegEnumUSKeyA" => ["long",  ["long", "long", "str", "ptr", "long"]],
+    "SHRegEnumUSKeyW" => ["long",  ["long", "long", "wstr", "ptr", "long"]],
+    "SHRegGetBoolUSValueA" => ["long",  ["str", "str", "long", "long"]],
+    "SHRegGetBoolUSValueW" => ["long",  ["wstr", "wstr", "long", "long"]],
+    "SHRegGetPathA" => ["long",  ["long", "str", "str", "str", "long"]],
+    "SHRegGetPathW" => ["long",  ["long", "wstr", "wstr", "wstr", "long"]],
+    "SHRegGetUSValueA" => ["long",  ["str", "str", "ptr", "ptr", "ptr", "long", "ptr", "long"]],
+    "SHRegGetUSValueW" => ["long",  ["wstr", "wstr", "ptr", "ptr", "ptr", "long", "ptr", "long"]],
+    "SHRegOpenUSKeyA" => ["long",  ["str", "long", "long", "ptr", "long"]],
+    "SHRegOpenUSKeyW" => ["long",  ["wstr", "long", "long", "ptr", "long"]],
+    "SHRegQueryInfoUSKeyA" => ["long",  ["long", "ptr", "ptr", "ptr", "ptr", "long"]],
+    "SHRegQueryInfoUSKeyW" => ["long",  ["long", "ptr", "ptr", "ptr", "ptr", "long"]],
+    "SHRegQueryUSValueA" => ["long",  ["long", "str", "ptr", "ptr", "ptr", "long", "ptr", "long"]],
+    "SHRegQueryUSValueW" => ["long",  ["long", "wstr", "ptr", "ptr", "ptr", "long", "ptr", "long"]],
+    "SHRegSetPathA" => ["long",  ["long", "str", "str", "str", "long"]],
+    "SHRegSetPathW" => ["long",  ["long", "wstr", "wstr", "wstr", "long"]],
+    "SHRegWriteUSValueA" => ["long",  ["long", "str", "long", "ptr", "long", "long"]],
+    "SHRegWriteUSValueW" => ["long",  ["long", "wstr", "long", "ptr", "long", "long"]],
+    "SHSetValueA" => ["long",  ["long", "str", "str", "long", "ptr", "long"]],
+    "SHSetValueW" => ["long",  ["long", "wstr", "wstr", "long", "ptr", "long"]],
+    "StrCSpnA" => ["long",  ["str", "str"]],
+    "StrCSpnW" => ["long",  ["wstr", "wstr"]],
+    "StrCatBuffA" => ["str",  ["str", "str", "long"]],
+    "StrCatBuffW" => ["wstr",  ["wstr", "wstr", "long"]],
+    "StrCatW" => ["wstr",  ["wstr", "wstr"]],
+    "StrChrA" => ["str",  ["str", "long"]],
+    "StrChrW" => ["wstr",  ["wstr", "long"]],
+    "StrCmpIW" => ["long",  ["wstr", "wstr"]],
+    "StrCmpNA" => ["long",  ["str", "str", "long"]],
+    "StrCmpNIA" => ["long",  ["str", "str", "long"]],
+    "StrCmpNIW" => ["long",  ["wstr", "wstr", "long"]],
+    "StrCmpNW" => ["long",  ["wstr", "wstr", "long"]],
+    "StrCmpW" => ["long",  ["wstr", "wstr"]],
+    "StrCpyNW" => ["wstr",  ["wstr", "wstr", "long"]],
+    "StrCpyW" => ["wstr",  ["wstr", "wstr"]],
+    "StrDupA" => ["str",  ["str"]],
+    "StrDupW" => ["wstr",  ["wstr"]],
+    "StrFormatByteSizeA" => ["str",  ["long", "str", "long"]],
+    "StrFormatByteSizeW" => ["wstr",  ["long", "wstr", "long"]],
+    "StrNCatA" => ["str",  ["str", "str", "long"]],
+    "StrNCatW" => ["wstr",  ["wstr", "wstr", "long"]],
+    "StrRChrA" => ["str",  ["str", "str", "long"]],
+    "StrRChrIA" => ["str",  ["str", "str", "long"]],
+    "StrRChrIW" => ["wstr",  ["wstr", "wstr", "long"]],
+    "StrRChrW" => ["wstr",  ["wstr", "wstr", "long"]],
+    "StrRetToBufA" => ["long",  ["ptr", "ptr", "str", "long"]],
+    "StrRetToBufW" => ["long",  ["ptr", "ptr", "wstr", "long"]],
+    "StrStrA" => ["str",  ["str", "str"]],
+    "StrStrIA" => ["str",  ["str", "str"]],
+    "StrStrIW" => ["wstr",  ["wstr", "wstr"]],
+    "StrStrW" => ["wstr",  ["wstr", "wstr"]],
+    "StrToIntA" => ["long",  ["str"]],
+    "StrToIntExA" => ["long",  ["str", "long", "ptr"]],
+    "StrToIntExW" => ["long",  ["wstr", "long", "ptr"]],
+    "StrToIntW" => ["long",  ["wstr"]],
+    "StrTrimA" => ["long",  ["str", "str"]],
+    "UrlApplySchemeW" => ["long",  ["wstr", "wstr", "ptr", "long"]],
+    "UrlCanonicalizeA" => ["long",  ["str", "str", "ptr", "long"]],
+    "UrlCanonicalizeW" => ["long",  ["wstr", "wstr", "ptr", "long"]],
+    "UrlCombineA" => ["long",  ["str", "str", "str", "ptr", "long"]],
+    "UrlCombineW" => ["long",  ["wstr", "wstr", "wstr", "ptr", "long"]],
+    "UrlCompareA" => ["long",  ["str", "str", "long"]],
+    "UrlCompareW" => ["long",  ["wstr", "wstr", "long"]],
+    "UrlEscapeA" => ["long",  ["str", "str", "ptr", "long"]],
+    "UrlEscapeW" => ["long",  ["wstr", "wstr", "ptr", "long"]],
+    "UrlGetLocationA" => ["str",  ["str"]],
+    "UrlGetLocationW" => ["wstr",  ["wstr"]],
+    "UrlGetPartA" => ["long",  ["str", "str", "ptr", "long", "long"]],
+    "UrlGetPartW" => ["long",  ["wstr", "wstr", "ptr", "long", "long"]],
+    "UrlHashA" => ["long",  ["str", "ptr", "long"]],
+    "UrlIsA" => ["long",  ["str", "long"]],
+    "UrlIsNoHistoryA" => ["long",  ["str"]],
+    "UrlIsNoHistoryW" => ["long",  ["wstr"]],
+    "UrlIsOpaqueA" => ["long",  ["str"]],
+    "UrlIsOpaqueW" => ["long",  ["wstr"]],
+    "UrlIsW" => ["long",  ["wstr", "long"]],
+    "UrlUnescapeA" => ["long",  ["str", "str", "ptr", "long"]],
+    "UrlUnescapeW" => ["long",  ["wstr", "wstr", "ptr", "long"]],
+    "_SHGetInstanceExplorer\@4" => ["long",  ["ptr"]]
+};
+
+&wine::declare("shlwapi",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/tapi32.pm b/programs/winetest/include/tapi32.pm
new file mode 100644
index 0000000..5da02f0
--- /dev/null
+++ b/programs/winetest/include/tapi32.pm
@@ -0,0 +1,131 @@
+package tapi32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "lineAccept" => ["long",  ["long", "str", "long"]],
+    "lineAddProvider" => ["long",  ["str", "long", "ptr"]],
+    "lineAddToConference" => ["long",  ["long", "long"]],
+    "lineAnswer" => ["long",  ["long", "str", "long"]],
+    "lineBlindTransfer" => ["long",  ["long", "str", "long"]],
+    "lineClose" => ["long",  ["long"]],
+    "lineCompleteCall" => ["long",  ["long", "ptr", "long", "long"]],
+    "lineCompleteTransfer" => ["long",  ["long", "long", "ptr", "long"]],
+    "lineConfigDialog" => ["long",  ["long", "long", "str"]],
+    "lineConfigDialogEdit" => ["long",  ["long", "long", "str", "ptr", "long", "ptr"]],
+    "lineConfigProvider" => ["long",  ["long", "long"]],
+    "lineDeallocateCall" => ["long",  ["long"]],
+    "lineDevSpecific" => ["long",  ["long", "long", "long", "ptr", "long"]],
+    "lineDevSpecificFeature" => ["long",  ["long", "long", "ptr", "long"]],
+    "lineDial" => ["long",  ["long", "str", "long"]],
+    "lineDrop" => ["long",  ["long", "str", "long"]],
+    "lineForward" => ["long",  ["long", "long", "long", "ptr", "long", "ptr", "ptr"]],
+    "lineGatherDigits" => ["long",  ["long", "long", "str", "long", "str", "long", "long"]],
+    "lineGenerateDigits" => ["long",  ["long", "long", "str", "long"]],
+    "lineGenerateTone" => ["long",  ["long", "long", "long", "long", "ptr"]],
+    "lineGetAddressCaps" => ["long",  ["long", "long", "long", "long", "long", "ptr"]],
+    "lineGetAddressID" => ["long",  ["long", "ptr", "long", "str", "long"]],
+    "lineGetAddressStatus" => ["long",  ["long", "long", "ptr"]],
+    "lineGetAppPriority" => ["long",  ["str", "long", "ptr", "long", "ptr", "ptr"]],
+    "lineGetCallInfo" => ["long",  ["long", "ptr"]],
+    "lineGetCallStatus" => ["long",  ["long", "ptr"]],
+    "lineGetConfRelatedCalls" => ["long",  ["long", "ptr"]],
+    "lineGetCountry" => ["long",  ["long", "long", "ptr"]],
+    "lineGetDevCaps" => ["long",  ["long", "long", "long", "long", "ptr"]],
+    "lineGetDevConfig" => ["long",  ["long", "ptr", "str"]],
+    "lineGetID" => ["long",  ["long", "long", "long", "long", "ptr", "str"]],
+    "lineGetIcon" => ["long",  ["long", "str", "ptr"]],
+    "lineGetLineDevStatus" => ["long",  ["long", "ptr"]],
+    "lineGetNewCalls" => ["long",  ["long", "long", "long", "ptr"]],
+    "lineGetNumRings" => ["long",  ["long", "long", "ptr"]],
+    "lineGetProviderList" => ["long",  ["long", "ptr"]],
+    "lineGetRequest" => ["long",  ["long", "long", "ptr"]],
+    "lineGetStatusMessages" => ["long",  ["long", "ptr", "ptr"]],
+    "lineGetTranslateCaps" => ["long",  ["long", "long", "ptr"]],
+    "lineHandoff" => ["long",  ["long", "str", "long"]],
+    "lineHold" => ["long",  ["long"]],
+    "lineInitialize" => ["long",  ["ptr", "long", "ptr", "str", "ptr"]],
+    "lineMakeCall" => ["long",  ["long", "ptr", "str", "long", "ptr"]],
+    "lineMonitorDigits" => ["long",  ["long", "long"]],
+    "lineMonitorMedia" => ["long",  ["long", "long"]],
+    "lineMonitorTones" => ["long",  ["long", "ptr", "long"]],
+    "lineNegotiateAPIVersion" => ["long",  ["long", "long", "long", "long", "ptr", "ptr"]],
+    "lineNegotiateExtVersion" => ["long",  ["long", "long", "long", "long", "long", "ptr"]],
+    "lineOpen" => ["long",  ["long", "long", "ptr", "long", "long", "long", "long", "long", "ptr"]],
+    "linePark" => ["long",  ["long", "long", "str", "ptr"]],
+    "linePickup" => ["long",  ["long", "long", "ptr", "str", "str"]],
+    "linePrepareAddToConference" => ["long",  ["long", "ptr", "ptr"]],
+    "lineRedirect" => ["long",  ["long", "str", "long"]],
+    "lineRegisterRequestRecipient" => ["long",  ["long", "long", "long", "long"]],
+    "lineReleaseUserUserInfo" => ["long",  ["long"]],
+    "lineRemoveFromConference" => ["long",  ["long"]],
+    "lineRemoveProvider" => ["long",  ["long", "long"]],
+    "lineSecureCall" => ["long",  ["long"]],
+    "lineSendUserUserInfo" => ["long",  ["long", "str", "long"]],
+    "lineSetAppPriority" => ["long",  ["str", "long", "ptr", "long", "str", "long"]],
+    "lineSetAppSpecific" => ["long",  ["long", "long"]],
+    "lineSetCallParams" => ["long",  ["long", "long", "long", "long", "ptr"]],
+    "lineSetCallPrivilege" => ["long",  ["long", "long"]],
+    "lineSetCurrentLocation" => ["long",  ["long", "long"]],
+    "lineSetDevConfig" => ["long",  ["long", "ptr", "long", "str"]],
+    "lineSetMediaControl" => ["long",  ["long", "long", "long", "long", "ptr", "long", "ptr", "long", "ptr", "long", "ptr", "long"]],
+    "lineSetMediaMode" => ["long",  ["long", "long"]],
+    "lineSetNumRings" => ["long",  ["long", "long", "long"]],
+    "lineSetStatusMessages" => ["long",  ["long", "long", "long"]],
+    "lineSetTerminal" => ["long",  ["long", "long", "long", "long", "long", "long", "long"]],
+    "lineSetTollList" => ["long",  ["long", "long", "str", "long"]],
+    "lineSetupConference" => ["long",  ["long", "long", "ptr", "ptr", "long", "ptr"]],
+    "lineSetupTransfer" => ["long",  ["long", "ptr", "ptr"]],
+    "lineShutdown" => ["long",  ["long"]],
+    "lineSwapHold" => ["long",  ["long", "long"]],
+    "lineTranslateAddress" => ["long",  ["long", "long", "long", "str", "long", "long", "ptr"]],
+    "lineTranslateDialog" => ["long",  ["long", "long", "long", "long", "str"]],
+    "lineUncompleteCall" => ["long",  ["long", "long"]],
+    "lineUnhold" => ["long",  ["long"]],
+    "lineUnpark" => ["long",  ["long", "long", "ptr", "str"]],
+    "phoneClose" => ["long",  ["long"]],
+    "phoneConfigDialog" => ["long",  ["long", "long", "str"]],
+    "phoneDevSpecific" => ["long",  ["long", "ptr", "long"]],
+    "phoneGetButtonInfo" => ["long",  ["long", "long", "ptr"]],
+    "phoneGetData" => ["long",  ["long", "long", "ptr", "long"]],
+    "phoneGetDevCaps" => ["long",  ["long", "long", "long", "long", "ptr"]],
+    "phoneGetDisplay" => ["long",  ["long", "ptr"]],
+    "phoneGetGain" => ["long",  ["long", "long", "ptr"]],
+    "phoneGetHookSwitch" => ["long",  ["long", "ptr"]],
+    "phoneGetID" => ["long",  ["long", "ptr", "str"]],
+    "phoneGetIcon" => ["long",  ["long", "str", "ptr"]],
+    "phoneGetLamp" => ["long",  ["long", "long", "ptr"]],
+    "phoneGetRing" => ["long",  ["long", "ptr", "ptr"]],
+    "phoneGetStatus" => ["long",  ["long", "ptr"]],
+    "phoneGetStatusMessages" => ["long",  ["long", "ptr", "ptr", "ptr"]],
+    "phoneGetVolume" => ["long",  ["long", "long", "ptr"]],
+    "phoneInitialize" => ["long",  ["ptr", "long", "ptr", "str", "ptr"]],
+    "phoneNegotiateAPIVersion" => ["long",  ["long", "long", "long", "long", "ptr", "ptr"]],
+    "phoneNegotiateExtVersion" => ["long",  ["long", "long", "long", "long", "long", "ptr"]],
+    "phoneOpen" => ["long",  ["long", "long", "ptr", "long", "long", "long", "long"]],
+    "phoneSetButtonInfo" => ["long",  ["long", "long", "ptr"]],
+    "phoneSetData" => ["long",  ["long", "long", "ptr", "long"]],
+    "phoneSetDisplay" => ["long",  ["long", "long", "long", "str", "long"]],
+    "phoneSetGain" => ["long",  ["long", "long", "long"]],
+    "phoneSetHookSwitch" => ["long",  ["long", "long", "long"]],
+    "phoneSetLamp" => ["long",  ["long", "long", "long"]],
+    "phoneSetRing" => ["long",  ["long", "long", "long"]],
+    "phoneSetStatusMessages" => ["long",  ["long", "long", "long", "long"]],
+    "phoneSetVolume" => ["long",  ["long", "long", "long"]],
+    "phoneShutdown" => ["long",  ["long"]],
+    "tapiGetLocationInfo" => ["long",  ["str", "str"]],
+    "tapiRequestMakeCall" => ["long",  ["str", "str", "str", "str"]]
+};
+
+&wine::declare("tapi32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/urlmon.pm b/programs/winetest/include/urlmon.pm
new file mode 100644
index 0000000..ab3fab6
--- /dev/null
+++ b/programs/winetest/include/urlmon.pm
@@ -0,0 +1,30 @@
+package urlmon;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "CreateAsyncBindCtxEx" => ["long",  ["ptr", "long", "ptr", "ptr", "ptr", "long"]],
+    "CreateURLMoniker" => ["long",  ["ptr", "wstr", "ptr"]],
+    "DllCanUnloadNow" => ["long",  []],
+    "DllGetClassObject" => ["long",  ["ptr", "ptr", "ptr"]],
+    "DllInstall" => ["long",  ["long", "wstr"]],
+    "DllRegisterServer" => ["long",  []],
+    "DllRegisterServerEx" => ["long",  []],
+    "DllUnregisterServer" => ["long",  []],
+    "RegisterBindStatusCallback" => ["long",  ["ptr", "ptr", "ptr", "long"]],
+    "RevokeBindStatusCallback" => ["long",  ["ptr", "ptr"]],
+    "UrlMkSetSessionOption" => ["long",  ["long", "ptr", "long", "long"]]
+};
+
+&wine::declare("urlmon",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/user32.pm b/programs/winetest/include/user32.pm
new file mode 100644
index 0000000..97acb99
--- /dev/null
+++ b/programs/winetest/include/user32.pm
@@ -0,0 +1,628 @@
+package user32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "ActivateKeyboardLayout" => ["long",  ["long", "long"]],
+    "AdjustWindowRect" => ["long",  ["ptr", "long", "long"]],
+    "AdjustWindowRectEx" => ["long",  ["ptr", "long", "long", "long"]],
+    "AllowSetForegroundWindow" => ["long",  ["long"]],
+    "AnimateWindow" => ["long",  ["long", "long", "long"]],
+    "AnyPopup" => ["long",  []],
+    "AppendMenuA" => ["long",  ["long", "long", "long", "str"]],
+    "AppendMenuW" => ["long",  ["long", "long", "long", "wstr"]],
+    "ArrangeIconicWindows" => ["long",  ["long"]],
+    "AttachThreadInput" => ["long",  ["long", "long", "long"]],
+    "BeginDeferWindowPos" => ["long",  ["long"]],
+    "BeginPaint" => ["long",  ["long", "ptr"]],
+    "BringWindowToTop" => ["long",  ["long"]],
+    "BroadcastSystemMessage" => ["long",  ["long", "ptr", "long", "long", "long"]],
+    "CalcChildScroll" => ["void",  ["long", "long"]],
+    "CallMsgFilterA" => ["long",  ["ptr", "long"]],
+    "CallMsgFilterW" => ["long",  ["ptr", "long"]],
+    "CallNextHookEx" => ["long",  ["long", "long", "long", "long"]],
+    "CallNextHookEx16" => ["long",  ["long", "long", "long", "long"]],
+    "CallWindowProc16" => ["long",  ["ptr", "long", "long", "long", "long"]],
+    "CallWindowProcA" => ["long",  ["ptr", "long", "long", "long", "long"]],
+    "CallWindowProcW" => ["long",  ["ptr", "long", "long", "long", "long"]],
+    "CascadeWindows" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "ChangeClipboardChain" => ["long",  ["long", "long"]],
+    "ChangeDisplaySettingsA" => ["long",  ["ptr", "long"]],
+    "ChangeDisplaySettingsExA" => ["long",  ["str", "ptr", "long", "long", "long"]],
+    "ChangeMenuA" => ["long",  ["long", "long", "str", "long", "long"]],
+    "ChangeMenuW" => ["long",  ["long", "long", "wstr", "long", "long"]],
+    "CharLowerA" => ["str",  ["str"]],
+    "CharLowerBuffA" => ["long",  ["str", "long"]],
+    "CharLowerBuffW" => ["long",  ["wstr", "long"]],
+    "CharLowerW" => ["wstr",  ["wstr"]],
+    "CharNextA" => ["str",  ["str"]],
+    "CharNextExA" => ["str",  ["long", "str", "long"]],
+    "CharNextExW" => ["wstr",  ["long", "wstr", "long"]],
+    "CharNextW" => ["wstr",  ["wstr"]],
+    "CharPrevA" => ["str",  ["str", "str"]],
+    "CharPrevExA" => ["str",  ["long", "str", "str", "long"]],
+    "CharPrevExW" => ["str",  ["long", "wstr", "wstr", "long"]],
+    "CharPrevW" => ["wstr",  ["wstr", "wstr"]],
+    "CharToOemA" => ["long",  ["str", "str"]],
+    "CharToOemBuffA" => ["long",  ["str", "str", "long"]],
+    "CharToOemBuffW" => ["long",  ["wstr", "str", "long"]],
+    "CharToOemW" => ["long",  ["wstr", "str"]],
+    "CharUpperA" => ["str",  ["str"]],
+    "CharUpperBuffA" => ["long",  ["str", "long"]],
+    "CharUpperBuffW" => ["long",  ["wstr", "long"]],
+    "CharUpperW" => ["wstr",  ["wstr"]],
+    "CheckDlgButton" => ["long",  ["long", "long", "long"]],
+    "CheckMenuItem" => ["long",  ["long", "long", "long"]],
+    "CheckMenuRadioItem" => ["long",  ["long", "long", "long", "long", "long"]],
+    "CheckRadioButton" => ["long",  ["long", "long", "long", "long"]],
+    "ChildWindowFromPoint" => ["long",  ["long", "long", "long"]],
+    "ChildWindowFromPointEx" => ["long",  ["long", "long", "long", "long"]],
+    "ClientToScreen" => ["long",  ["long", "ptr"]],
+    "ClipCursor" => ["long",  ["ptr"]],
+    "CloseClipboard" => ["long",  []],
+    "CloseDesktop" => ["long",  ["long"]],
+    "CloseDriver16" => ["long",  ["long", "long", "long"]],
+    "CloseWindow" => ["long",  ["long"]],
+    "CloseWindowStation" => ["long",  ["long"]],
+    "CopyAcceleratorTableA" => ["long",  ["long", "ptr", "long"]],
+    "CopyAcceleratorTableW" => ["long",  ["long", "ptr", "long"]],
+    "CopyIcon" => ["long",  ["long"]],
+    "CopyImage" => ["long",  ["long", "long", "long", "long", "long"]],
+    "CopyRect" => ["long",  ["ptr", "ptr"]],
+    "CountClipboardFormats" => ["long",  []],
+    "CreateAcceleratorTableA" => ["long",  ["ptr", "long"]],
+    "CreateAcceleratorTableW" => ["long",  ["ptr", "long"]],
+    "CreateCaret" => ["long",  ["long", "long", "long", "long"]],
+    "CreateCursor" => ["long",  ["long", "long", "long", "long", "long", "ptr", "ptr"]],
+    "CreateDesktopA" => ["long",  ["str", "str", "ptr", "long", "long", "ptr"]],
+    "CreateDesktopW" => ["long",  ["wstr", "wstr", "ptr", "long", "long", "ptr"]],
+    "CreateDialogIndirectParam16" => ["long",  ["long", "ptr", "long", "ptr", "long"]],
+    "CreateDialogIndirectParamA" => ["long",  ["long", "ptr", "long", "ptr", "long"]],
+    "CreateDialogIndirectParamAorW" => ["long",  ["long", "ptr", "long", "ptr", "long"]],
+    "CreateDialogIndirectParamW" => ["long",  ["long", "ptr", "long", "ptr", "long"]],
+    "CreateDialogParamA" => ["long",  ["long", "str", "long", "ptr", "long"]],
+    "CreateDialogParamW" => ["long",  ["long", "wstr", "long", "ptr", "long"]],
+    "CreateIcon" => ["long",  ["long", "long", "long", "long", "long", "ptr", "ptr"]],
+    "CreateIconFromResource" => ["long",  ["ptr", "long", "long", "long"]],
+    "CreateIconFromResourceEx" => ["long",  ["ptr", "long", "long", "long", "long", "long", "long"]],
+    "CreateIconIndirect" => ["long",  ["ptr"]],
+    "CreateMDIWindowA" => ["long",  ["str", "str", "long", "long", "long", "long", "long", "long", "long", "long"]],
+    "CreateMDIWindowW" => ["long",  ["wstr", "wstr", "long", "long", "long", "long", "long", "long", "long", "long"]],
+    "CreateMenu" => ["long",  []],
+    "CreatePopupMenu" => ["long",  []],
+    "CreateWindowExA" => ["long",  ["long", "str", "str", "long", "long", "long", "long", "long", "long", "long", "long", "ptr"]],
+    "CreateWindowExW" => ["long",  ["long", "wstr", "wstr", "long", "long", "long", "long", "long", "long", "long", "long", "ptr"]],
+    "CreateWindowStationW" => ["long",  ["wstr", "long", "long", "ptr"]],
+    "DdeAbandonTransaction" => ["long",  ["long", "long", "long"]],
+    "DdeAccessData" => ["ptr",  ["long", "ptr"]],
+    "DdeAddData" => ["long",  ["long", "ptr", "long", "long"]],
+    "DdeClientTransaction" => ["long",  ["ptr", "long", "long", "long", "long", "long", "long", "ptr"]],
+    "DdeCmpStringHandles" => ["long",  ["long", "long"]],
+    "DdeConnect" => ["long",  ["long", "long", "long", "ptr"]],
+    "DdeConnectList" => ["long",  ["long", "long", "long", "long", "ptr"]],
+    "DdeCreateDataHandle" => ["long",  ["long", "ptr", "long", "long", "long", "long", "long"]],
+    "DdeCreateStringHandleA" => ["long",  ["long", "str", "long"]],
+    "DdeCreateStringHandleW" => ["long",  ["long", "wstr", "long"]],
+    "DdeDisconnect" => ["long",  ["long"]],
+    "DdeDisconnectList" => ["long",  ["long"]],
+    "DdeEnableCallback" => ["long",  ["long", "long", "long"]],
+    "DdeFreeDataHandle" => ["long",  ["long"]],
+    "DdeFreeStringHandle" => ["long",  ["long", "long"]],
+    "DdeGetData" => ["long",  ["long", "ptr", "long", "long"]],
+    "DdeGetLastError" => ["long",  ["long"]],
+    "DdeImpersonateClient" => ["long",  ["long"]],
+    "DdeInitializeA" => ["long",  ["ptr", "ptr", "long", "long"]],
+    "DdeInitializeW" => ["long",  ["ptr", "ptr", "long", "long"]],
+    "DdeKeepStringHandle" => ["long",  ["long", "long"]],
+    "DdeNameService" => ["long",  ["long", "long", "long", "long"]],
+    "DdePostAdvise" => ["long",  ["long", "long", "long"]],
+    "DdeQueryConvInfo" => ["long",  ["long", "long", "ptr"]],
+    "DdeQueryNextServer" => ["long",  ["long", "long"]],
+    "DdeQueryStringA" => ["long",  ["long", "long", "str", "long", "long"]],
+    "DdeQueryStringW" => ["long",  ["long", "long", "wstr", "long", "long"]],
+    "DdeReconnect" => ["long",  ["long"]],
+    "DdeSetQualityOfService" => ["long",  ["long", "ptr", "ptr"]],
+    "DdeSetUserHandle" => ["long",  ["long", "long", "long"]],
+    "DdeUnaccessData" => ["long",  ["long"]],
+    "DdeUninitialize" => ["long",  ["long"]],
+    "DefDlgProcA" => ["long",  ["long", "long", "long", "long"]],
+    "DefDlgProcW" => ["long",  ["long", "long", "long", "long"]],
+    "DefDriverProc16" => ["long",  ["long", "long", "long", "long", "long"]],
+    "DefFrameProcA" => ["long",  ["long", "long", "long", "long", "long"]],
+    "DefFrameProcW" => ["long",  ["long", "long", "long", "long", "long"]],
+    "DefMDIChildProcA" => ["long",  ["long", "long", "long", "long"]],
+    "DefMDIChildProcW" => ["long",  ["long", "long", "long", "long"]],
+    "DefWindowProcA" => ["long",  ["long", "long", "long", "long"]],
+    "DefWindowProcW" => ["long",  ["long", "long", "long", "long"]],
+    "DeferWindowPos" => ["long",  ["long", "long", "long", "long", "long", "long", "long", "long"]],
+    "DeleteMenu" => ["long",  ["long", "long", "long"]],
+    "DeregisterShellHookWindow" => ["long",  ["long"]],
+    "DestroyAcceleratorTable" => ["long",  ["long"]],
+    "DestroyCaret" => ["long",  []],
+    "DestroyCursor" => ["long",  ["long"]],
+    "DestroyIcon" => ["long",  ["long"]],
+    "DestroyIcon32" => ["long",  ["long", "long"]],
+    "DestroyMenu" => ["long",  ["long"]],
+    "DestroyWindow" => ["long",  ["long"]],
+    "DialogBoxIndirectParam16" => ["long",  ["long", "long", "long", "ptr", "long"]],
+    "DialogBoxIndirectParamA" => ["long",  ["long", "ptr", "long", "ptr", "long"]],
+    "DialogBoxIndirectParamAorW" => ["long",  ["long", "ptr", "long", "ptr", "long", "long"]],
+    "DialogBoxIndirectParamW" => ["long",  ["long", "ptr", "long", "ptr", "long"]],
+    "DialogBoxParamA" => ["long",  ["long", "str", "long", "ptr", "long"]],
+    "DialogBoxParamW" => ["long",  ["long", "wstr", "long", "ptr", "long"]],
+    "DispatchMessageA" => ["long",  ["ptr"]],
+    "DispatchMessageW" => ["long",  ["ptr"]],
+    "DlgDirListA" => ["long",  ["long", "str", "long", "long", "long"]],
+    "DlgDirListComboBoxA" => ["long",  ["long", "str", "long", "long", "long"]],
+    "DlgDirListComboBoxW" => ["long",  ["long", "wstr", "long", "long", "long"]],
+    "DlgDirListW" => ["long",  ["long", "wstr", "long", "long", "long"]],
+    "DlgDirSelectComboBoxExA" => ["long",  ["long", "str", "long", "long"]],
+    "DlgDirSelectComboBoxExW" => ["long",  ["long", "wstr", "long", "long"]],
+    "DlgDirSelectExA" => ["long",  ["long", "str", "long", "long"]],
+    "DlgDirSelectExW" => ["long",  ["long", "wstr", "long", "long"]],
+    "DragDetect" => ["long",  ["long", "long", "long"]],
+    "DrawAnimatedRects" => ["long",  ["long", "long", "ptr", "ptr"]],
+    "DrawCaption" => ["long",  ["long", "long", "ptr", "long"]],
+    "DrawCaptionTempA" => ["long",  ["long", "long", "ptr", "long", "long", "str", "long"]],
+    "DrawCaptionTempW" => ["long",  ["long", "long", "ptr", "long", "long", "wstr", "long"]],
+    "DrawEdge" => ["long",  ["long", "ptr", "long", "long"]],
+    "DrawFocusRect" => ["long",  ["long", "ptr"]],
+    "DrawFrameControl" => ["long",  ["long", "ptr", "long", "long"]],
+    "DrawIcon" => ["long",  ["long", "long", "long", "long"]],
+    "DrawIconEx" => ["long",  ["long", "long", "long", "long", "long", "long", "long", "long", "long"]],
+    "DrawMenuBar" => ["long",  ["long"]],
+    "DrawMenuBarTemp" => ["long",  ["long", "long", "ptr", "long", "long"]],
+    "DrawStateA" => ["long",  ["long", "long", "ptr", "long", "long", "long", "long", "long", "long", "long"]],
+    "DrawStateW" => ["long",  ["long", "long", "ptr", "long", "long", "long", "long", "long", "long", "long"]],
+    "DrawTextA" => ["long",  ["long", "str", "long", "ptr", "long"]],
+    "DrawTextExA" => ["long",  ["long", "str", "long", "ptr", "long", "ptr"]],
+    "DrawTextExW" => ["long",  ["long", "wstr", "long", "ptr", "long", "ptr"]],
+    "DrawTextW" => ["long",  ["long", "wstr", "long", "ptr", "long"]],
+    "EditWndProc" => ["long",  ["long", "long", "long", "long"]],
+    "EditWndProcW" => ["long",  ["long", "long", "long", "long"]],
+    "EmptyClipboard" => ["long",  []],
+    "EnableMenuItem" => ["long",  ["long", "long", "long"]],
+    "EnableScrollBar" => ["long",  ["long", "long", "long"]],
+    "EnableWindow" => ["long",  ["long", "long"]],
+    "EndDeferWindowPos" => ["long",  ["long"]],
+    "EndDialog" => ["long",  ["long", "long"]],
+    "EndMenu" => ["void",  []],
+    "EndPaint" => ["long",  ["long", "ptr"]],
+    "EnumChildWindows" => ["long",  ["long", "ptr", "long"]],
+    "EnumClipboardFormats" => ["long",  ["long"]],
+    "EnumDesktopWindows" => ["long",  ["long", "ptr", "long"]],
+    "EnumDisplayDevicesA" => ["long",  ["ptr", "long", "ptr", "long"]],
+    "EnumDisplayDevicesW" => ["long",  ["ptr", "long", "ptr", "long"]],
+    "EnumDisplayMonitors" => ["long",  ["long", "ptr", "ptr", "long"]],
+    "EnumDisplaySettingsA" => ["long",  ["str", "long", "ptr"]],
+    "EnumDisplaySettingsExA" => ["long",  ["str", "long", "ptr", "long"]],
+    "EnumDisplaySettingsExW" => ["long",  ["wstr", "long", "ptr", "long"]],
+    "EnumDisplaySettingsW" => ["long",  ["wstr", "long", "ptr"]],
+    "EnumPropsA" => ["long",  ["long", "ptr"]],
+    "EnumPropsExA" => ["long",  ["long", "ptr", "long"]],
+    "EnumPropsExW" => ["long",  ["long", "ptr", "long"]],
+    "EnumPropsW" => ["long",  ["long", "ptr"]],
+    "EnumThreadWindows" => ["long",  ["long", "ptr", "long"]],
+    "EnumWindows" => ["long",  ["ptr", "long"]],
+    "EqualRect" => ["long",  ["ptr", "ptr"]],
+    "ExcludeUpdateRgn" => ["long",  ["long", "long"]],
+    "ExitWindowsEx" => ["long",  ["long", "long"]],
+    "FillRect" => ["long",  ["long", "ptr", "long"]],
+    "FindWindowA" => ["long",  ["str", "str"]],
+    "FindWindowExA" => ["long",  ["long", "long", "str", "str"]],
+    "FindWindowExW" => ["long",  ["long", "long", "wstr", "wstr"]],
+    "FindWindowW" => ["long",  ["wstr", "wstr"]],
+    "FlashWindow" => ["long",  ["long", "long"]],
+    "FrameRect" => ["long",  ["long", "ptr", "long"]],
+    "FreeDDElParam" => ["long",  ["long", "long"]],
+    "GetActiveWindow" => ["long",  []],
+    "GetAncestor" => ["long",  ["long", "long"]],
+    "GetAppCompatFlags" => ["long",  ["long"]],
+    "GetAsyncKeyState" => ["long",  ["long"]],
+    "GetCapture" => ["long",  []],
+    "GetCaretBlinkTime" => ["long",  []],
+    "GetCaretPos" => ["long",  ["ptr"]],
+    "GetClassInfoA" => ["long",  ["long", "str", "ptr"]],
+    "GetClassInfoExA" => ["long",  ["long", "str", "ptr"]],
+    "GetClassInfoExW" => ["long",  ["long", "wstr", "ptr"]],
+    "GetClassInfoW" => ["long",  ["long", "wstr", "ptr"]],
+    "GetClassLongA" => ["long",  ["long", "long"]],
+    "GetClassLongW" => ["long",  ["long", "long"]],
+    "GetClassNameA" => ["long",  ["long", "str", "long"]],
+    "GetClassNameW" => ["long",  ["long", "wstr", "long"]],
+    "GetClassWord" => ["long",  ["long", "long"]],
+    "GetClientRect" => ["long",  ["long", "ptr"]],
+    "GetClipCursor" => ["long",  ["ptr"]],
+    "GetClipboardData" => ["long",  ["long"]],
+    "GetClipboardFormatNameA" => ["long",  ["long", "str", "long"]],
+    "GetClipboardFormatNameW" => ["long",  ["long", "wstr", "long"]],
+    "GetClipboardOwner" => ["long",  []],
+    "GetClipboardSequenceNumber" => ["long",  []],
+    "GetClipboardViewer" => ["long",  []],
+    "GetCursor" => ["long",  []],
+    "GetCursorPos" => ["long",  ["ptr"]],
+    "GetDC" => ["long",  ["long"]],
+    "GetDCEx" => ["long",  ["long", "long", "long"]],
+    "GetDesktopWindow" => ["long",  []],
+    "GetDialogBaseUnits" => ["long",  []],
+    "GetDlgCtrlID" => ["long",  ["long"]],
+    "GetDlgItem" => ["long",  ["long", "long"]],
+    "GetDlgItemInt" => ["long",  ["long", "long", "ptr", "long"]],
+    "GetDlgItemTextA" => ["long",  ["long", "long", "str", "long"]],
+    "GetDlgItemTextW" => ["long",  ["long", "long", "wstr", "long"]],
+    "GetDoubleClickTime" => ["long",  []],
+    "GetDriverModuleHandle16" => ["long",  ["long"]],
+    "GetFocus" => ["long",  []],
+    "GetForegroundWindow" => ["long",  []],
+    "GetIconInfo" => ["long",  ["long", "ptr"]],
+    "GetInputState" => ["long",  []],
+    "GetInternalWindowPos" => ["long",  ["long", "ptr", "ptr"]],
+    "GetKBCodePage" => ["long",  []],
+    "GetKeyNameTextA" => ["long",  ["long", "str", "long"]],
+    "GetKeyNameTextW" => ["long",  ["long", "wstr", "long"]],
+    "GetKeyState" => ["long",  ["long"]],
+    "GetKeyboardLayout" => ["long",  ["long"]],
+    "GetKeyboardLayoutList" => ["long",  ["long", "ptr"]],
+    "GetKeyboardLayoutNameA" => ["long",  ["str"]],
+    "GetKeyboardLayoutNameW" => ["long",  ["wstr"]],
+    "GetKeyboardState" => ["long",  ["ptr"]],
+    "GetKeyboardType" => ["long",  ["long"]],
+    "GetLastActivePopup" => ["long",  ["long"]],
+    "GetMenu" => ["long",  ["long"]],
+    "GetMenuCheckMarkDimensions" => ["long",  []],
+    "GetMenuContextHelpId" => ["long",  ["long"]],
+    "GetMenuDefaultItem" => ["long",  ["long", "long", "long"]],
+    "GetMenuInfo" => ["long",  ["long", "ptr"]],
+    "GetMenuItemCount" => ["long",  ["long"]],
+    "GetMenuItemID" => ["long",  ["long", "long"]],
+    "GetMenuItemInfoA" => ["long",  ["long", "long", "long", "ptr"]],
+    "GetMenuItemInfoW" => ["long",  ["long", "long", "long", "ptr"]],
+    "GetMenuItemRect" => ["long",  ["long", "long", "long", "ptr"]],
+    "GetMenuState" => ["long",  ["long", "long", "long"]],
+    "GetMenuStringA" => ["long",  ["long", "long", "str", "long", "long"]],
+    "GetMenuStringW" => ["long",  ["long", "long", "wstr", "long", "long"]],
+    "GetMessageA" => ["long",  ["ptr", "long", "long", "long"]],
+    "GetMessageExtraInfo" => ["long",  []],
+    "GetMessagePos" => ["long",  []],
+    "GetMessageTime" => ["long",  []],
+    "GetMessageW" => ["long",  ["ptr", "long", "long", "long"]],
+    "GetMonitorInfoA" => ["long",  ["long", "ptr"]],
+    "GetMonitorInfoW" => ["long",  ["long", "ptr"]],
+    "GetNextDlgGroupItem" => ["long",  ["long", "long", "long"]],
+    "GetNextDlgTabItem" => ["long",  ["long", "long", "long"]],
+    "GetOpenClipboardWindow" => ["long",  []],
+    "GetParent" => ["long",  ["long"]],
+    "GetPriorityClipboardFormat" => ["long",  ["ptr", "long"]],
+    "GetProcessDefaultLayout" => ["long",  ["ptr"]],
+    "GetProcessWindowStation" => ["long",  []],
+    "GetProgmanWindow" => ["long",  []],
+    "GetPropA" => ["long",  ["long", "str"]],
+    "GetPropW" => ["long",  ["long", "wstr"]],
+    "GetQueueStatus" => ["long",  ["long"]],
+    "GetScrollInfo" => ["long",  ["long", "long", "ptr"]],
+    "GetScrollPos" => ["long",  ["long", "long"]],
+    "GetScrollRange" => ["long",  ["long", "long", "ptr", "ptr"]],
+    "GetShellWindow" => ["long",  []],
+    "GetSubMenu" => ["long",  ["long", "long"]],
+    "GetSysColor" => ["long",  ["long"]],
+    "GetSysColorBrush" => ["long",  ["long"]],
+    "GetSysColorPen" => ["long",  ["long"]],
+    "GetSystemMenu" => ["long",  ["long", "long"]],
+    "GetSystemMetrics" => ["long",  ["long"]],
+    "GetTabbedTextExtentA" => ["long",  ["long", "str", "long", "long", "ptr"]],
+    "GetTabbedTextExtentW" => ["long",  ["long", "wstr", "long", "long", "ptr"]],
+    "GetTaskmanWindow" => ["long",  []],
+    "GetThreadDesktop" => ["long",  ["long"]],
+    "GetTopWindow" => ["long",  ["long"]],
+    "GetUpdateRect" => ["long",  ["long", "ptr", "long"]],
+    "GetUpdateRgn" => ["long",  ["long", "long", "long"]],
+    "GetUserObjectInformationA" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "GetUserObjectInformationW" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "GetUserObjectSecurity" => ["long",  ["long", "ptr", "ptr", "long", "ptr"]],
+    "GetWindow" => ["long",  ["long", "long"]],
+    "GetWindowContextHelpId" => ["long",  ["long"]],
+    "GetWindowDC" => ["long",  ["long"]],
+    "GetWindowLongA" => ["long",  ["long", "long"]],
+    "GetWindowLongW" => ["long",  ["long", "long"]],
+    "GetWindowModuleFileNameA" => ["long",  ["long", "str", "long"]],
+    "GetWindowModuleFileNameW" => ["long",  ["long", "str", "long"]],
+    "GetWindowPlacement" => ["long",  ["long", "ptr"]],
+    "GetWindowRect" => ["long",  ["long", "ptr"]],
+    "GetWindowRgn" => ["long",  ["long", "long"]],
+    "GetWindowTextA" => ["long",  ["long", "str", "long"]],
+    "GetWindowTextLengthA" => ["long",  ["long"]],
+    "GetWindowTextLengthW" => ["long",  ["long"]],
+    "GetWindowTextW" => ["long",  ["long", "wstr", "long"]],
+    "GetWindowThreadProcessId" => ["long",  ["long", "ptr"]],
+    "GetWindowWord" => ["long",  ["long", "long"]],
+    "GrayStringA" => ["long",  ["long", "long", "ptr", "long", "long", "long", "long", "long", "long"]],
+    "GrayStringW" => ["long",  ["long", "long", "ptr", "long", "long", "long", "long", "long", "long"]],
+    "HideCaret" => ["long",  ["long"]],
+    "HiliteMenuItem" => ["long",  ["long", "long", "long", "long"]],
+    "ImpersonateDdeClientWindow" => ["long",  ["long", "long"]],
+    "InSendMessage" => ["long",  []],
+    "InSendMessageEx" => ["long",  ["ptr"]],
+    "InflateRect" => ["long",  ["ptr", "long", "long"]],
+    "InsertMenuA" => ["long",  ["long", "long", "long", "long", "str"]],
+    "InsertMenuItemA" => ["long",  ["long", "long", "long", "ptr"]],
+    "InsertMenuItemW" => ["long",  ["long", "long", "long", "ptr"]],
+    "InsertMenuW" => ["long",  ["long", "long", "long", "long", "wstr"]],
+    "InternalGetWindowText" => ["long",  ["long", "wstr", "long"]],
+    "IntersectRect" => ["long",  ["ptr", "ptr", "ptr"]],
+    "InvalidateRect" => ["long",  ["long", "ptr", "long"]],
+    "InvalidateRgn" => ["long",  ["long", "long", "long"]],
+    "InvertRect" => ["long",  ["long", "ptr"]],
+    "IsCharAlphaA" => ["long",  ["long"]],
+    "IsCharAlphaNumericA" => ["long",  ["long"]],
+    "IsCharAlphaNumericW" => ["long",  ["long"]],
+    "IsCharAlphaW" => ["long",  ["long"]],
+    "IsCharLowerA" => ["long",  ["long"]],
+    "IsCharLowerW" => ["long",  ["long"]],
+    "IsCharUpperA" => ["long",  ["long"]],
+    "IsCharUpperW" => ["long",  ["long"]],
+    "IsChild" => ["long",  ["long", "long"]],
+    "IsClipboardFormatAvailable" => ["long",  ["long"]],
+    "IsDialogMessage" => ["long",  ["long", "ptr"]],
+    "IsDialogMessageA" => ["long",  ["long", "ptr"]],
+    "IsDialogMessageW" => ["long",  ["long", "ptr"]],
+    "IsDlgButtonChecked" => ["long",  ["long", "long"]],
+    "IsIconic" => ["long",  ["long"]],
+    "IsMenu" => ["long",  ["long"]],
+    "IsRectEmpty" => ["long",  ["ptr"]],
+    "IsWindow" => ["long",  ["long"]],
+    "IsWindowEnabled" => ["long",  ["long"]],
+    "IsWindowUnicode" => ["long",  ["long"]],
+    "IsWindowVisible" => ["long",  ["long"]],
+    "IsZoomed" => ["long",  ["long"]],
+    "KillSystemTimer" => ["long",  ["long", "long"]],
+    "KillTimer" => ["long",  ["long", "long"]],
+    "LoadAcceleratorsA" => ["long",  ["long", "str"]],
+    "LoadAcceleratorsW" => ["long",  ["long", "wstr"]],
+    "LoadBitmapA" => ["long",  ["long", "str"]],
+    "LoadBitmapW" => ["long",  ["long", "wstr"]],
+    "LoadCursorA" => ["long",  ["long", "str"]],
+    "LoadCursorFromFileA" => ["long",  ["str"]],
+    "LoadCursorFromFileW" => ["long",  ["wstr"]],
+    "LoadCursorW" => ["long",  ["long", "wstr"]],
+    "LoadIconA" => ["long",  ["long", "str"]],
+    "LoadIconW" => ["long",  ["long", "wstr"]],
+    "LoadImageA" => ["long",  ["long", "str", "long", "long", "long", "long"]],
+    "LoadImageW" => ["long",  ["long", "wstr", "long", "long", "long", "long"]],
+    "LoadKeyboardLayoutA" => ["long",  ["str", "long"]],
+    "LoadKeyboardLayoutW" => ["long",  ["wstr", "long"]],
+    "LoadLocalFonts" => ["void",  []],
+    "LoadMenuA" => ["long",  ["long", "str"]],
+    "LoadMenuIndirectA" => ["long",  ["ptr"]],
+    "LoadMenuIndirectW" => ["long",  ["ptr"]],
+    "LoadMenuW" => ["long",  ["long", "wstr"]],
+    "LoadStringA" => ["long",  ["long", "long", "str", "long"]],
+    "LoadStringW" => ["long",  ["long", "long", "wstr", "long"]],
+    "LockSetForegroundWindow" => ["long",  ["long"]],
+    "LockWindowUpdate" => ["long",  ["long"]],
+    "LookupIconIdFromDirectory" => ["long",  ["ptr", "long"]],
+    "LookupIconIdFromDirectoryEx" => ["long",  ["ptr", "long", "long", "long", "long"]],
+    "MapDialogRect" => ["long",  ["long", "ptr"]],
+    "MapVirtualKeyA" => ["long",  ["long", "long"]],
+    "MapVirtualKeyExA" => ["long",  ["long", "long", "long"]],
+    "MapVirtualKeyExW" => ["long",  ["long", "long", "long"]],
+    "MapVirtualKeyW" => ["long",  ["long", "long"]],
+    "MapWindowPoints" => ["long",  ["long", "long", "ptr", "long"]],
+    "MenuItemFromPoint" => ["long",  ["long", "long", "long", "long"]],
+    "MessageBeep" => ["long",  ["long"]],
+    "MessageBoxA" => ["long",  ["long", "str", "str", "long"]],
+    "MessageBoxExA" => ["long",  ["long", "str", "str", "long", "long"]],
+    "MessageBoxExW" => ["long",  ["long", "wstr", "wstr", "long", "long"]],
+    "MessageBoxIndirectA" => ["long",  ["ptr"]],
+    "MessageBoxIndirectW" => ["long",  ["ptr"]],
+    "MessageBoxW" => ["long",  ["long", "wstr", "wstr", "long"]],
+    "ModifyMenuA" => ["long",  ["long", "long", "long", "long", "str"]],
+    "ModifyMenuW" => ["long",  ["long", "long", "long", "long", "wstr"]],
+    "MonitorFromPoint" => ["long",  ["long", "long", "long"]],
+    "MonitorFromRect" => ["long",  ["ptr", "long"]],
+    "MonitorFromWindow" => ["long",  ["long", "long"]],
+    "MoveWindow" => ["long",  ["long", "long", "long", "long", "long", "long"]],
+    "MsgWaitForMultipleObjects" => ["long",  ["long", "ptr", "long", "long", "long"]],
+    "MsgWaitForMultipleObjectsEx" => ["long",  ["long", "ptr", "long", "long", "long"]],
+    "OemKeyScan" => ["long",  ["long"]],
+    "OemToCharA" => ["long",  ["str", "str"]],
+    "OemToCharBuffA" => ["long",  ["str", "str", "long"]],
+    "OemToCharBuffW" => ["long",  ["str", "wstr", "long"]],
+    "OemToCharW" => ["long",  ["str", "wstr"]],
+    "OffsetRect" => ["long",  ["ptr", "long", "long"]],
+    "OpenClipboard" => ["long",  ["long"]],
+    "OpenDesktopA" => ["long",  ["str", "long", "long", "long"]],
+    "OpenDriver16" => ["long",  ["str", "str", "long"]],
+    "OpenIcon" => ["long",  ["long"]],
+    "PackDDElParam" => ["long",  ["long", "long", "long"]],
+    "PaintDesktop" => ["long",  ["long"]],
+    "PeekMessageA" => ["long",  ["ptr", "long", "long", "long", "long"]],
+    "PeekMessageW" => ["long",  ["ptr", "long", "long", "long", "long"]],
+    "PostAppMessage16" => ["long",  ["long", "long", "long", "long"]],
+    "PostMessageA" => ["long",  ["long", "long", "long", "long"]],
+    "PostMessageW" => ["long",  ["long", "long", "long", "long"]],
+    "PostQuitMessage" => ["void",  ["long"]],
+    "PostThreadMessageA" => ["long",  ["long", "long", "long", "long"]],
+    "PostThreadMessageW" => ["long",  ["long", "long", "long", "long"]],
+    "PrivateExtractIconExA" => ["long",  ["str", "long", "ptr", "ptr", "long"]],
+    "PrivateExtractIconExW" => ["long",  ["wstr", "long", "ptr", "ptr", "long"]],
+    "PrivateExtractIconsA" => ["long",  ["str", "long", "long", "long", "ptr", "long", "long", "long"]],
+    "PrivateExtractIconsW" => ["long",  ["wstr", "long", "long", "long", "ptr", "long", "long", "long"]],
+    "PtInRect" => ["long",  ["ptr", "long", "long"]],
+    "RedrawWindow" => ["long",  ["long", "ptr", "long", "long"]],
+    "RegisterClassA" => ["long",  ["ptr"]],
+    "RegisterClassExA" => ["long",  ["ptr"]],
+    "RegisterClassExW" => ["long",  ["ptr"]],
+    "RegisterClassW" => ["long",  ["ptr"]],
+    "RegisterClipboardFormatA" => ["long",  ["str"]],
+    "RegisterClipboardFormatW" => ["long",  ["wstr"]],
+    "RegisterDeviceNotificationA" => ["long",  ["long", "ptr", "long"]],
+    "RegisterHotKey" => ["long",  ["long", "long", "long", "long"]],
+    "RegisterLogonProcess" => ["long",  ["long", "long"]],
+    "RegisterShellHookWindow" => ["long",  ["long"]],
+    "RegisterSystemThread" => ["void",  ["long", "long"]],
+    "RegisterTasklist" => ["long",  ["long"]],
+    "RegisterWindowMessageA" => ["long",  ["str"]],
+    "RegisterWindowMessageW" => ["long",  ["wstr"]],
+    "ReleaseCapture" => ["long",  []],
+    "ReleaseDC" => ["long",  ["long", "long"]],
+    "RemoveMenu" => ["long",  ["long", "long", "long"]],
+    "RemovePropA" => ["long",  ["long", "str"]],
+    "RemovePropW" => ["long",  ["long", "wstr"]],
+    "ReplyMessage" => ["long",  ["long"]],
+    "ReuseDDElParam" => ["long",  ["long", "long", "long", "long", "long"]],
+    "ScreenToClient" => ["long",  ["long", "ptr"]],
+    "ScrollChildren" => ["void",  ["long", "long", "long", "long"]],
+    "ScrollDC" => ["long",  ["long", "long", "long", "ptr", "ptr", "long", "ptr"]],
+    "ScrollWindow" => ["long",  ["long", "long", "long", "ptr", "ptr"]],
+    "ScrollWindowEx" => ["long",  ["long", "long", "long", "ptr", "ptr", "long", "ptr", "long"]],
+    "SendDlgItemMessageA" => ["long",  ["long", "long", "long", "long", "long"]],
+    "SendDlgItemMessageW" => ["long",  ["long", "long", "long", "long", "long"]],
+    "SendDriverMessage16" => ["long",  ["long", "long", "long", "long"]],
+    "SendInput" => ["long",  ["long", "ptr", "long"]],
+    "SendMessageA" => ["long",  ["long", "long", "long", "long"]],
+    "SendMessageCallbackA" => ["long",  ["long", "long", "long", "long", "ptr", "long"]],
+    "SendMessageCallbackW" => ["long",  ["long", "long", "long", "long", "ptr", "long"]],
+    "SendMessageTimeoutA" => ["long",  ["long", "long", "long", "long", "long", "long", "ptr"]],
+    "SendMessageTimeoutW" => ["long",  ["long", "long", "long", "long", "long", "long", "ptr"]],
+    "SendMessageW" => ["long",  ["long", "long", "long", "long"]],
+    "SendNotifyMessageA" => ["long",  ["long", "long", "long", "long"]],
+    "SendNotifyMessageW" => ["long",  ["long", "long", "long", "long"]],
+    "SetActiveWindow" => ["long",  ["long"]],
+    "SetCapture" => ["long",  ["long"]],
+    "SetCaretBlinkTime" => ["long",  ["long"]],
+    "SetCaretPos" => ["long",  ["long", "long"]],
+    "SetClassLongA" => ["long",  ["long", "long", "long"]],
+    "SetClassLongW" => ["long",  ["long", "long", "long"]],
+    "SetClassWord" => ["long",  ["long", "long", "long"]],
+    "SetClipboardData" => ["long",  ["long", "long"]],
+    "SetClipboardViewer" => ["long",  ["long"]],
+    "SetCursor" => ["long",  ["long"]],
+    "SetCursorPos" => ["long",  ["long", "long"]],
+    "SetDebugErrorLevel" => ["void",  ["long"]],
+    "SetDeskWallPaper" => ["long",  ["str"]],
+    "SetDlgItemInt" => ["long",  ["long", "long", "long", "long"]],
+    "SetDlgItemTextA" => ["long",  ["long", "long", "str"]],
+    "SetDlgItemTextW" => ["long",  ["long", "long", "wstr"]],
+    "SetDoubleClickTime" => ["long",  ["long"]],
+    "SetFocus" => ["long",  ["long"]],
+    "SetForegroundWindow" => ["long",  ["long"]],
+    "SetInternalWindowPos" => ["void",  ["long", "long", "ptr", "ptr"]],
+    "SetKeyboardState" => ["long",  ["ptr"]],
+    "SetLastErrorEx" => ["void",  ["long", "long"]],
+    "SetLogonNotifyWindow" => ["long",  ["long", "long"]],
+    "SetMenu" => ["long",  ["long", "long"]],
+    "SetMenuContextHelpId" => ["long",  ["long", "long"]],
+    "SetMenuDefaultItem" => ["long",  ["long", "long", "long"]],
+    "SetMenuInfo" => ["long",  ["long", "ptr"]],
+    "SetMenuItemBitmaps" => ["long",  ["long", "long", "long", "long", "long"]],
+    "SetMenuItemInfoA" => ["long",  ["long", "long", "long", "ptr"]],
+    "SetMenuItemInfoW" => ["long",  ["long", "long", "long", "ptr"]],
+    "SetMessageQueue" => ["long",  ["long"]],
+    "SetParent" => ["long",  ["long", "long"]],
+    "SetProcessDefaultLayout" => ["long",  ["long"]],
+    "SetProcessWindowStation" => ["long",  ["long"]],
+    "SetProgmanWindow" => ["long",  ["long"]],
+    "SetPropA" => ["long",  ["long", "str", "long"]],
+    "SetPropW" => ["long",  ["long", "wstr", "long"]],
+    "SetRect" => ["long",  ["ptr", "long", "long", "long", "long"]],
+    "SetRectEmpty" => ["long",  ["ptr"]],
+    "SetScrollPos" => ["long",  ["long", "long", "long", "long"]],
+    "SetScrollRange" => ["long",  ["long", "long", "long", "long", "long"]],
+    "SetShellWindow" => ["long",  ["long"]],
+    "SetShellWindowEx" => ["long",  ["long", "long"]],
+    "SetSysColors" => ["long",  ["long", "ptr", "ptr"]],
+    "SetSysColorsTemp" => ["long",  ["ptr", "ptr", "long"]],
+    "SetSystemCursor" => ["long",  ["long", "long"]],
+    "SetSystemMenu" => ["long",  ["long", "long"]],
+    "SetSystemTimer" => ["long",  ["long", "long", "long", "ptr"]],
+    "SetTaskmanWindow" => ["long",  ["long"]],
+    "SetThreadDesktop" => ["long",  ["long"]],
+    "SetTimer" => ["long",  ["long", "long", "long", "ptr"]],
+    "SetUserObjectInformationA" => ["long",  ["long", "long", "ptr", "long"]],
+    "SetUserObjectSecurity" => ["long",  ["long", "ptr", "ptr"]],
+    "SetWindowContextHelpId" => ["long",  ["long", "long"]],
+    "SetWindowLongA" => ["long",  ["long", "long", "long"]],
+    "SetWindowLongW" => ["long",  ["long", "long", "long"]],
+    "SetWindowPlacement" => ["long",  ["long", "ptr"]],
+    "SetWindowPos" => ["long",  ["long", "long", "long", "long", "long", "long", "long"]],
+    "SetWindowRgn" => ["long",  ["long", "long", "long"]],
+    "SetWindowStationUser" => ["long",  ["long", "long"]],
+    "SetWindowText" => ["long",  ["long", "str"]],
+    "SetWindowTextA" => ["long",  ["long", "str"]],
+    "SetWindowTextW" => ["long",  ["long", "wstr"]],
+    "SetWindowWord" => ["long",  ["long", "long", "long"]],
+    "SetWindowsHookA" => ["long",  ["long", "ptr"]],
+    "SetWindowsHookEx16" => ["long",  ["long", "ptr", "long", "long"]],
+    "SetWindowsHookExA" => ["long",  ["long", "ptr", "long", "long"]],
+    "SetWindowsHookExW" => ["long",  ["long", "ptr", "long", "long"]],
+    "SetWindowsHookW" => ["long",  ["long", "ptr"]],
+    "ShowCaret" => ["long",  ["long"]],
+    "ShowCursor" => ["long",  ["long"]],
+    "ShowOwnedPopups" => ["long",  ["long", "long"]],
+    "ShowScrollBar" => ["long",  ["long", "long", "long"]],
+    "ShowWindow" => ["long",  ["long", "long"]],
+    "ShowWindowAsync" => ["long",  ["long", "long"]],
+    "SubtractRect" => ["long",  ["ptr", "ptr", "ptr"]],
+    "SwapMouseButton" => ["long",  ["long"]],
+    "SwitchToThisWindow" => ["void",  ["long", "long"]],
+    "SystemParametersInfoA" => ["long",  ["long", "long", "ptr", "long"]],
+    "SystemParametersInfoW" => ["long",  ["long", "long", "ptr", "long"]],
+    "TabbedTextOutA" => ["long",  ["long", "long", "long", "str", "long", "long", "ptr", "long"]],
+    "TabbedTextOutW" => ["long",  ["long", "long", "long", "wstr", "long", "long", "ptr", "long"]],
+    "TileWindows" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "ToAscii" => ["long",  ["long", "long", "ptr", "ptr", "long"]],
+    "ToAsciiEx" => ["long",  ["long", "long", "ptr", "ptr", "long", "long"]],
+    "ToUnicode" => ["long",  ["long", "long", "ptr", "wstr", "long", "long"]],
+    "ToUnicodeEx" => ["long",  ["long", "long", "ptr", "wstr", "long", "long", "long"]],
+    "TrackPopupMenu" => ["long",  ["long", "long", "long", "long", "long", "long", "ptr"]],
+    "TrackPopupMenuEx" => ["long",  ["long", "long", "long", "long", "long", "ptr"]],
+    "TranslateAccelerator" => ["long",  ["long", "long", "ptr"]],
+    "TranslateAcceleratorA" => ["long",  ["long", "long", "ptr"]],
+    "TranslateAcceleratorW" => ["long",  ["long", "long", "ptr"]],
+    "TranslateCharsetInfo" => ["long",  ["ptr", "ptr", "long"]],
+    "TranslateMDISysAccel" => ["long",  ["long", "ptr"]],
+    "TranslateMessage" => ["long",  ["ptr"]],
+    "UnhookWindowsHook" => ["long",  ["long", "ptr"]],
+    "UnhookWindowsHookEx" => ["long",  ["long"]],
+    "UnionRect" => ["long",  ["ptr", "ptr", "ptr"]],
+    "UnpackDDElParam" => ["long",  ["long", "long", "ptr", "ptr"]],
+    "UnregisterClassA" => ["long",  ["str", "long"]],
+    "UnregisterClassW" => ["long",  ["wstr", "long"]],
+    "UnregisterHotKey" => ["long",  ["long", "long"]],
+    "UpdateWindow" => ["void",  ["long"]],
+    "UserClientDllInitialize" => ["long",  ["long", "long", "ptr"]],
+    "UserRealizePalette" => ["long",  ["long"]],
+    "UserSignalProc" => ["long",  ["long", "long", "long", "long"]],
+    "UserYield16" => ["void",  []],
+    "ValidateRect" => ["void",  ["long", "ptr"]],
+    "ValidateRgn" => ["void",  ["long", "long"]],
+    "VkKeyScanA" => ["long",  ["long"]],
+    "VkKeyScanExA" => ["long",  ["long", "long"]],
+    "VkKeyScanExW" => ["long",  ["long", "long"]],
+    "VkKeyScanW" => ["long",  ["long"]],
+    "WaitForInputIdle" => ["long",  ["long", "long"]],
+    "WaitMessage" => ["long",  []],
+    "WinHelpA" => ["long",  ["long", "str", "long", "long"]],
+    "WinHelpW" => ["long",  ["long", "wstr", "long", "long"]],
+    "WindowFromDC" => ["long",  ["long"]],
+    "WindowFromPoint" => ["long",  ["long", "long"]],
+    "keybd_event" => ["void",  ["long", "long", "long", "long"]],
+    "mouse_event" => ["void",  ["long", "long", "long", "long", "long"]],
+    "wvsnprintfA" => ["long",  ["str", "long", "str", "ptr"]],
+    "wvsnprintfW" => ["long",  ["wstr", "long", "wstr", "ptr"]],
+    "wvsprintfA" => ["long",  ["str", "str", "ptr"]],
+    "wvsprintfW" => ["long",  ["wstr", "wstr", "ptr"]]
+};
+
+&wine::declare("user32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/version.pm b/programs/winetest/include/version.pm
new file mode 100644
index 0000000..b2e0335
--- /dev/null
+++ b/programs/winetest/include/version.pm
@@ -0,0 +1,29 @@
+package version;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "GetFileVersionInfoA" => ["long",  ["str", "long", "long", "ptr"]],
+    "GetFileVersionInfoSizeA" => ["long",  ["str", "ptr"]],
+    "GetFileVersionInfoSizeW" => ["long",  ["wstr", "ptr"]],
+    "GetFileVersionInfoW" => ["long",  ["wstr", "long", "long", "ptr"]],
+    "VerFindFileA" => ["long",  ["long", "str", "str", "str", "str", "ptr", "str", "ptr"]],
+    "VerFindFileW" => ["long",  ["long", "wstr", "wstr", "wstr", "wstr", "ptr", "wstr", "ptr"]],
+    "VerInstallFileA" => ["long",  ["long", "str", "str", "str", "str", "str", "str", "ptr"]],
+    "VerInstallFileW" => ["long",  ["long", "wstr", "wstr", "wstr", "wstr", "wstr", "wstr", "ptr"]],
+    "VerQueryValueA" => ["long",  ["ptr", "str", "ptr", "ptr"]],
+    "VerQueryValueW" => ["long",  ["ptr", "wstr", "ptr", "ptr"]]
+};
+
+&wine::declare("version",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/w32skrnl.pm b/programs/winetest/include/w32skrnl.pm
new file mode 100644
index 0000000..973244b
--- /dev/null
+++ b/programs/winetest/include/w32skrnl.pm
@@ -0,0 +1,21 @@
+package w32skrnl;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "GetCurrentTask32" => ["long",  []],
+    "_kGetWin32sDirectory\@0" => ["str",  []]
+};
+
+&wine::declare("w32skrnl",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/winedos.pm b/programs/winetest/include/winedos.pm
new file mode 100644
index 0000000..5ede4dc
--- /dev/null
+++ b/programs/winetest/include/winedos.pm
@@ -0,0 +1,32 @@
+package winedos;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "ASPIHandler" => ["void",  ["ptr"]],
+    "AllocRMCB" => ["void",  ["ptr"]],
+    "CallRMInt" => ["void",  ["ptr"]],
+    "CallRMProc" => ["void",  ["undef"]],
+    "Enter" => ["long",  ["ptr"]],
+    "FreeRMCB" => ["void",  ["ptr"]],
+    "GetTimer" => ["long",  []],
+    "KbdReadScan" => ["long",  ["ptr"]],
+    "LoadDosExe" => ["void",  ["str", "long"]],
+    "OutPIC" => ["void",  ["long", "long"]],
+    "QueueEvent" => ["void",  ["long", "long", "undef", "ptr"]],
+    "SetTimer" => ["void",  ["long"]],
+    "Wait" => ["void",  ["long", "long"]]
+};
+
+&wine::declare("winedos",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/wineoss_drv.pm b/programs/winetest/include/wineoss_drv.pm
new file mode 100644
index 0000000..e43a2a0
--- /dev/null
+++ b/programs/winetest/include/wineoss_drv.pm
@@ -0,0 +1,26 @@
+package wineoss_drv;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "DriverProc" => ["long",  ["long", "long", "long", "long", "long"]],
+    "auxMessage" => ["long",  ["long", "long", "long", "long", "long"]],
+    "mixMessage" => ["long",  ["long", "long", "long", "long", "long"]],
+    "midMessage" => ["long",  ["long", "long", "long", "long", "long"]],
+    "modMessage" => ["long",  ["long", "long", "long", "long", "long"]],
+    "widMessage" => ["long",  ["long", "long", "long", "long", "long"]],
+    "wodMessage" => ["long",  ["long", "long", "long", "long", "long"]]
+};
+
+&wine::declare("wineoss.drv",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/wininet.pm b/programs/winetest/include/wininet.pm
new file mode 100644
index 0000000..a0714f4
--- /dev/null
+++ b/programs/winetest/include/wininet.pm
@@ -0,0 +1,53 @@
+package wininet;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "CommitUrlCacheEntryA" => ["long",  ["str", "str", "long", "long", "long", "ptr", "long", "str", "long"]],
+    "DllInstall" => ["long",  ["long", "wstr"]],
+    "FtpCreateDirectoryA" => ["long",  ["long", "str"]],
+    "FtpDeleteFileA" => ["long",  ["long", "str"]],
+    "FtpFindFirstFileA" => ["long",  ["long", "str", "ptr", "long", "long"]],
+    "FtpGetCurrentDirectoryA" => ["long",  ["long", "str", "ptr"]],
+    "FtpGetFileA" => ["long",  ["long", "str", "str", "long", "long", "long", "long"]],
+    "FtpOpenFileA" => ["long",  ["long", "str", "long", "long", "long"]],
+    "FtpPutFileA" => ["long",  ["long", "str", "str", "long", "long"]],
+    "FtpRemoveDirectoryA" => ["long",  ["long", "str"]],
+    "FtpRenameFileA" => ["long",  ["long", "str", "str"]],
+    "FtpSetCurrentDirectoryA" => ["long",  ["long", "str"]],
+    "GetUrlCacheEntryInfoA" => ["long",  ["str", "ptr", "ptr"]],
+    "HttpAddRequestHeadersA" => ["long",  ["long", "str", "long", "long"]],
+    "HttpOpenRequestA" => ["long",  ["long", "str", "str", "str", "str", "ptr", "long", "long"]],
+    "HttpQueryInfoA" => ["long",  ["long", "long", "ptr", "ptr", "ptr"]],
+    "HttpSendRequestA" => ["long",  ["long", "str", "long", "ptr", "long"]],
+    "HttpSendRequestExA" => ["long",  ["long", "ptr", "ptr", "long", "long"]],
+    "InternetAttemptConnect" => ["long",  ["long"]],
+    "InternetCanonicalizeUrlA" => ["long",  ["str", "str", "ptr", "long"]],
+    "InternetCheckConnectionA" => ["long",  ["str", "long", "long"]],
+    "InternetCloseHandle" => ["long",  ["long"]],
+    "InternetConnectA" => ["long",  ["long", "str", "long", "str", "str", "long", "long", "long"]],
+    "InternetCrackUrlA" => ["long",  ["str", "long", "long", "ptr"]],
+    "InternetFindNextFileA" => ["long",  ["long", "ptr"]],
+    "InternetGetConnectedState" => ["long",  ["ptr", "long"]],
+    "InternetGetCookieA" => ["long",  ["str", "str", "str", "ptr"]],
+    "InternetGetLastResponseInfoA" => ["long",  ["ptr", "str", "ptr"]],
+    "InternetOpenA" => ["long",  ["str", "long", "str", "str", "long"]],
+    "InternetQueryOptionA" => ["long",  ["long", "long", "ptr", "ptr"]],
+    "InternetReadFile" => ["long",  ["long", "ptr", "long", "ptr"]],
+    "InternetSetCookieA" => ["long",  ["str", "str", "str"]],
+    "InternetSetStatusCallback" => ["ptr",  ["long", "ptr"]],
+    "InternetWriteFile" => ["long",  ["long", "ptr", "long", "ptr"]]
+};
+
+&wine::declare("wininet",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/winmm.pm b/programs/winetest/include/winmm.pm
new file mode 100644
index 0000000..45117b0
--- /dev/null
+++ b/programs/winetest/include/winmm.pm
@@ -0,0 +1,195 @@
+package winmm;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "CloseDriver" => ["long",  ["long", "long", "long"]],
+    "DefDriverProc" => ["long",  ["long", "long", "long", "long", "long"]],
+    "DriverCallback" => ["long",  ["long", "long", "long", "long", "long", "long", "long"]],
+    "DrvClose" => ["long",  ["long", "long", "long"]],
+    "DrvDefDriverProc" => ["long",  ["long", "long", "long", "long", "long"]],
+    "DrvGetModuleHandle" => ["long",  ["long"]],
+    "DrvOpen" => ["long",  ["wstr", "wstr", "long"]],
+    "DrvOpenA" => ["long",  ["str", "str", "long"]],
+    "DrvSendMessage" => ["long",  ["long", "long", "long", "long"]],
+    "GetDriverFlags" => ["long",  ["long"]],
+    "GetDriverModuleHandle" => ["long",  ["long"]],
+    "OpenDriver" => ["long",  ["wstr", "wstr", "long"]],
+    "OpenDriverA" => ["long",  ["str", "str", "long"]],
+    "PlaySound" => ["long",  ["str", "long", "long"]],
+    "PlaySoundA" => ["long",  ["str", "long", "long"]],
+    "PlaySoundW" => ["long",  ["wstr", "long", "long"]],
+    "SendDriverMessage" => ["long",  ["long", "long", "long", "long"]],
+    "auxGetDevCapsA" => ["long",  ["long", "ptr", "long"]],
+    "auxGetDevCapsW" => ["long",  ["long", "ptr", "long"]],
+    "auxGetNumDevs" => ["long",  []],
+    "auxGetVolume" => ["long",  ["long", "ptr"]],
+    "auxOutMessage" => ["long",  ["long", "long", "long", "long"]],
+    "auxSetVolume" => ["long",  ["long", "long"]],
+    "joyGetDevCapsA" => ["long",  ["long", "ptr", "long"]],
+    "joyGetDevCapsW" => ["long",  ["long", "ptr", "long"]],
+    "joyGetNumDevs" => ["long",  []],
+    "joyGetPos" => ["long",  ["long", "ptr"]],
+    "joyGetPosEx" => ["long",  ["long", "ptr"]],
+    "joyGetThreshold" => ["long",  ["long", "ptr"]],
+    "joyReleaseCapture" => ["long",  ["long"]],
+    "joySetCapture" => ["long",  ["long", "long", "long", "long"]],
+    "joySetThreshold" => ["long",  ["long", "long"]],
+    "mciDriverNotify" => ["long",  ["long", "long", "long"]],
+    "mciDriverYield" => ["long",  ["long"]],
+    "mciExecute" => ["long",  ["str"]],
+    "mciFreeCommandResource" => ["long",  ["long"]],
+    "mciGetCreatorTask" => ["long",  ["long"]],
+    "mciGetDeviceIDA" => ["long",  ["str"]],
+    "mciGetDeviceIDFromElementIDW" => ["long",  ["long", "wstr"]],
+    "mciGetDeviceIDW" => ["long",  ["wstr"]],
+    "mciGetDriverData" => ["long",  ["long"]],
+    "mciGetErrorStringA" => ["long",  ["long", "str", "long"]],
+    "mciGetErrorStringW" => ["long",  ["long", "wstr", "long"]],
+    "mciGetYieldProc" => ["ptr",  ["long", "ptr"]],
+    "mciLoadCommandResource" => ["long",  ["long", "wstr", "long"]],
+    "mciSendCommandA" => ["long",  ["long", "long", "long", "long"]],
+    "mciSendCommandW" => ["long",  ["long", "long", "long", "long"]],
+    "mciSendStringA" => ["long",  ["str", "str", "long", "long"]],
+    "mciSendStringW" => ["long",  ["wstr", "str", "long", "long"]],
+    "mciSetDriverData" => ["long",  ["long", "long"]],
+    "mciSetYieldProc" => ["long",  ["long", "ptr", "long"]],
+    "midiInAddBuffer" => ["long",  ["long", "ptr", "long"]],
+    "midiInClose" => ["long",  ["long"]],
+    "midiInGetDevCapsA" => ["long",  ["long", "ptr", "long"]],
+    "midiInGetDevCapsW" => ["long",  ["long", "ptr", "long"]],
+    "midiInGetErrorTextA" => ["long",  ["long", "str", "long"]],
+    "midiInGetErrorTextW" => ["long",  ["long", "wstr", "long"]],
+    "midiInGetID" => ["long",  ["long", "ptr"]],
+    "midiInGetNumDevs" => ["long",  []],
+    "midiInMessage" => ["long",  ["long", "long", "long", "long"]],
+    "midiInOpen" => ["long",  ["ptr", "long", "long", "long", "long"]],
+    "midiInPrepareHeader" => ["long",  ["long", "ptr", "long"]],
+    "midiInReset" => ["long",  ["long"]],
+    "midiInStart" => ["long",  ["long"]],
+    "midiInStop" => ["long",  ["long"]],
+    "midiInUnprepareHeader" => ["long",  ["long", "ptr", "long"]],
+    "midiOutCacheDrumPatches" => ["long",  ["long", "long", "ptr", "long"]],
+    "midiOutCachePatches" => ["long",  ["long", "long", "ptr", "long"]],
+    "midiOutClose" => ["long",  ["long"]],
+    "midiOutGetDevCapsA" => ["long",  ["long", "ptr", "long"]],
+    "midiOutGetDevCapsW" => ["long",  ["long", "ptr", "long"]],
+    "midiOutGetErrorTextA" => ["long",  ["long", "str", "long"]],
+    "midiOutGetErrorTextW" => ["long",  ["long", "wstr", "long"]],
+    "midiOutGetID" => ["long",  ["long", "ptr"]],
+    "midiOutGetNumDevs" => ["long",  []],
+    "midiOutGetVolume" => ["long",  ["long", "ptr"]],
+    "midiOutLongMsg" => ["long",  ["long", "ptr", "long"]],
+    "midiOutMessage" => ["long",  ["long", "long", "long", "long"]],
+    "midiOutOpen" => ["long",  ["ptr", "long", "long", "long", "long"]],
+    "midiOutPrepareHeader" => ["long",  ["long", "ptr", "long"]],
+    "midiOutReset" => ["long",  ["long"]],
+    "midiOutSetVolume" => ["long",  ["long", "long"]],
+    "midiOutShortMsg" => ["long",  ["long", "long"]],
+    "midiOutUnprepareHeader" => ["long",  ["long", "ptr", "long"]],
+    "midiStreamClose" => ["long",  ["long"]],
+    "midiStreamOpen" => ["long",  ["ptr", "ptr", "long", "long", "long", "long"]],
+    "midiStreamOut" => ["long",  ["long", "ptr", "long"]],
+    "midiStreamPause" => ["long",  ["long"]],
+    "midiStreamPosition" => ["long",  ["long", "ptr", "long"]],
+    "midiStreamProperty" => ["long",  ["long", "ptr", "long"]],
+    "midiStreamRestart" => ["long",  ["long"]],
+    "midiStreamStop" => ["long",  ["long"]],
+    "mixerClose" => ["long",  ["long"]],
+    "mixerGetControlDetailsA" => ["long",  ["long", "ptr", "long"]],
+    "mixerGetControlDetailsW" => ["long",  ["long", "ptr", "long"]],
+    "mixerGetDevCapsA" => ["long",  ["long", "ptr", "long"]],
+    "mixerGetDevCapsW" => ["long",  ["long", "ptr", "long"]],
+    "mixerGetID" => ["long",  ["long", "ptr", "long"]],
+    "mixerGetLineControlsA" => ["long",  ["long", "ptr", "long"]],
+    "mixerGetLineControlsW" => ["long",  ["long", "ptr", "long"]],
+    "mixerGetLineInfoA" => ["long",  ["long", "ptr", "long"]],
+    "mixerGetLineInfoW" => ["long",  ["long", "ptr", "long"]],
+    "mixerGetNumDevs" => ["long",  []],
+    "mixerMessage" => ["long",  ["long", "long", "long", "long"]],
+    "mixerOpen" => ["long",  ["ptr", "long", "long", "long", "long"]],
+    "mixerSetControlDetails" => ["long",  ["long", "ptr", "long"]],
+    "mmioAdvance" => ["long",  ["long", "ptr", "long"]],
+    "mmioAscend" => ["long",  ["long", "ptr", "long"]],
+    "mmioClose" => ["long",  ["long", "long"]],
+    "mmioCreateChunk" => ["long",  ["long", "ptr", "long"]],
+    "mmioDescend" => ["long",  ["long", "ptr", "ptr", "long"]],
+    "mmioFlush" => ["long",  ["long", "long"]],
+    "mmioGetInfo" => ["long",  ["long", "ptr", "long"]],
+    "mmioInstallIOProcA" => ["ptr",  ["long", "ptr", "long"]],
+    "mmioInstallIOProcW" => ["ptr",  ["long", "ptr", "long"]],
+    "mmioOpenA" => ["long",  ["str", "ptr", "long"]],
+    "mmioOpenW" => ["long",  ["wstr", "ptr", "long"]],
+    "mmioRead" => ["long",  ["long", "ptr", "long"]],
+    "mmioRenameA" => ["long",  ["str", "str", "ptr", "long"]],
+    "mmioRenameW" => ["long",  ["wstr", "wstr", "ptr", "long"]],
+    "mmioSeek" => ["long",  ["long", "long", "long"]],
+    "mmioSendMessage" => ["long",  ["long", "long", "long", "long"]],
+    "mmioSetBuffer" => ["long",  ["long", "str", "long", "long"]],
+    "mmioSetInfo" => ["long",  ["long", "ptr", "long"]],
+    "mmioStringToFOURCCA" => ["long",  ["str", "long"]],
+    "mmioStringToFOURCCW" => ["long",  ["wstr", "long"]],
+    "mmioWrite" => ["long",  ["long", "ptr", "long"]],
+    "mmsystemGetVersion" => ["long",  []],
+    "sndPlaySoundA" => ["long",  ["str", "long"]],
+    "sndPlaySoundW" => ["long",  ["wstr", "long"]],
+    "timeBeginPeriod" => ["long",  ["long"]],
+    "timeEndPeriod" => ["long",  ["long"]],
+    "timeGetDevCaps" => ["long",  ["ptr", "long"]],
+    "timeGetSystemTime" => ["long",  ["ptr", "long"]],
+    "timeGetTime" => ["long",  []],
+    "timeKillEvent" => ["long",  ["long"]],
+    "timeSetEvent" => ["long",  ["long", "long", "ptr", "long", "long"]],
+    "waveInAddBuffer" => ["long",  ["long", "ptr", "long"]],
+    "waveInClose" => ["long",  ["long"]],
+    "waveInGetDevCapsA" => ["long",  ["long", "ptr", "long"]],
+    "waveInGetDevCapsW" => ["long",  ["long", "ptr", "long"]],
+    "waveInGetErrorTextA" => ["long",  ["long", "str", "long"]],
+    "waveInGetErrorTextW" => ["long",  ["long", "wstr", "long"]],
+    "waveInGetID" => ["long",  ["long", "ptr"]],
+    "waveInGetNumDevs" => ["long",  []],
+    "waveInGetPosition" => ["long",  ["long", "ptr", "long"]],
+    "waveInMessage" => ["long",  ["long", "long", "long", "long"]],
+    "waveInOpen" => ["long",  ["ptr", "long", "ptr", "long", "long", "long"]],
+    "waveInPrepareHeader" => ["long",  ["long", "ptr", "long"]],
+    "waveInReset" => ["long",  ["long"]],
+    "waveInStart" => ["long",  ["long"]],
+    "waveInStop" => ["long",  ["long"]],
+    "waveInUnprepareHeader" => ["long",  ["long", "ptr", "long"]],
+    "waveOutBreakLoop" => ["long",  ["long"]],
+    "waveOutClose" => ["long",  ["long"]],
+    "waveOutGetDevCapsA" => ["long",  ["long", "ptr", "long"]],
+    "waveOutGetDevCapsW" => ["long",  ["long", "ptr", "long"]],
+    "waveOutGetErrorTextA" => ["long",  ["long", "str", "long"]],
+    "waveOutGetErrorTextW" => ["long",  ["long", "wstr", "long"]],
+    "waveOutGetID" => ["long",  ["long", "ptr"]],
+    "waveOutGetNumDevs" => ["long",  []],
+    "waveOutGetPitch" => ["long",  ["long", "ptr"]],
+    "waveOutGetPlaybackRate" => ["long",  ["long", "ptr"]],
+    "waveOutGetPosition" => ["long",  ["long", "ptr", "long"]],
+    "waveOutGetVolume" => ["long",  ["long", "ptr"]],
+    "waveOutMessage" => ["long",  ["long", "long", "long", "long"]],
+    "waveOutOpen" => ["long",  ["ptr", "long", "ptr", "long", "long", "long"]],
+    "waveOutPause" => ["long",  ["long"]],
+    "waveOutPrepareHeader" => ["long",  ["long", "ptr", "long"]],
+    "waveOutReset" => ["long",  ["long"]],
+    "waveOutRestart" => ["long",  ["long"]],
+    "waveOutSetPitch" => ["long",  ["long", "long"]],
+    "waveOutSetPlaybackRate" => ["long",  ["long", "long"]],
+    "waveOutSetVolume" => ["long",  ["long", "long"]],
+    "waveOutUnprepareHeader" => ["long",  ["long", "ptr", "long"]],
+    "waveOutWrite" => ["long",  ["long", "ptr", "long"]]
+};
+
+&wine::declare("winmm",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/winspool_drv.pm b/programs/winetest/include/winspool_drv.pm
new file mode 100644
index 0000000..07ad70e
--- /dev/null
+++ b/programs/winetest/include/winspool_drv.pm
@@ -0,0 +1,78 @@
+package winspool_drv;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "AddFormA" => ["long",  ["long", "long", "ptr"]],
+    "AddFormW" => ["long",  ["long", "long", "ptr"]],
+    "AddJobA" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "AddJobW" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "AddMonitorA" => ["long",  ["str", "long", "ptr"]],
+    "AddPrinterA" => ["long",  ["str", "long", "ptr"]],
+    "AddPrinterDriverA" => ["long",  ["str", "long", "ptr"]],
+    "AddPrinterDriverW" => ["long",  ["wstr", "long", "ptr"]],
+    "AddPrinterW" => ["long",  ["wstr", "long", "ptr"]],
+    "ClosePrinter" => ["long",  ["long"]],
+    "DeleteFormA" => ["long",  ["long", "str"]],
+    "DeleteFormW" => ["long",  ["long", "wstr"]],
+    "DeleteMonitorA" => ["long",  ["str", "str", "str"]],
+    "DeletePortA" => ["long",  ["str", "long", "str"]],
+    "DeletePrinter" => ["long",  ["long"]],
+    "DeletePrinterDriverA" => ["long",  ["str", "str", "str"]],
+    "DeviceCapabilities" => ["long",  ["str", "str", "long", "str", "ptr"]],
+    "DeviceCapabilitiesA" => ["long",  ["str", "str", "long", "str", "ptr"]],
+    "DeviceCapabilitiesW" => ["long",  ["wstr", "wstr", "long", "wstr", "ptr"]],
+    "DocumentPropertiesA" => ["long",  ["long", "long", "str", "ptr", "ptr", "long"]],
+    "DocumentPropertiesW" => ["long",  ["long", "long", "wstr", "ptr", "ptr", "long"]],
+    "EnumJobsA" => ["long",  ["long", "long", "long", "long", "ptr", "long", "ptr", "ptr"]],
+    "EnumJobsW" => ["long",  ["long", "long", "long", "long", "ptr", "long", "ptr", "ptr"]],
+    "EnumPortsA" => ["long",  ["str", "long", "ptr", "long", "ptr", "ptr"]],
+    "EnumPrinterDataExA" => ["long",  ["long", "str", "ptr", "long", "ptr", "ptr"]],
+    "EnumPrinterDataExW" => ["long",  ["long", "wstr", "ptr", "long", "ptr", "ptr"]],
+    "EnumPrinterDriversA" => ["long",  ["str", "str", "long", "ptr", "long", "ptr", "ptr"]],
+    "EnumPrinterDriversW" => ["long",  ["wstr", "wstr", "long", "ptr", "long", "ptr", "ptr"]],
+    "EnumPrintersA" => ["long",  ["long", "str", "long", "ptr", "long", "ptr", "ptr"]],
+    "EnumPrintersW" => ["long",  ["long", "wstr", "long", "ptr", "long", "ptr", "ptr"]],
+    "GetFormA" => ["long",  ["long", "str", "long", "ptr", "long", "ptr"]],
+    "GetFormW" => ["long",  ["long", "wstr", "long", "ptr", "long", "ptr"]],
+    "GetPrinterA" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "GetPrinterDataA" => ["long",  ["long", "str", "ptr", "ptr", "long", "ptr"]],
+    "GetPrinterDataExA" => ["long",  ["long", "str", "str", "ptr", "ptr", "long", "ptr"]],
+    "GetPrinterDataExW" => ["long",  ["long", "wstr", "wstr", "ptr", "ptr", "long", "ptr"]],
+    "GetPrinterDataW" => ["long",  ["long", "wstr", "ptr", "ptr", "long", "ptr"]],
+    "GetPrinterDriverA" => ["long",  ["long", "str", "long", "ptr", "long", "ptr"]],
+    "GetPrinterDriverDirectoryA" => ["long",  ["str", "str", "long", "ptr", "long", "ptr"]],
+    "GetPrinterDriverDirectoryW" => ["long",  ["wstr", "wstr", "long", "ptr", "long", "ptr"]],
+    "GetPrinterDriverW" => ["long",  ["long", "wstr", "long", "ptr", "long", "ptr"]],
+    "GetPrinterW" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
+    "OpenPrinterA" => ["long",  ["str", "ptr", "ptr"]],
+    "OpenPrinterW" => ["long",  ["wstr", "ptr", "ptr"]],
+    "PrinterProperties" => ["long",  ["long", "long"]],
+    "ReadPrinter" => ["long",  ["long", "ptr", "long", "ptr"]],
+    "ResetPrinterA" => ["long",  ["long", "ptr"]],
+    "ResetPrinterW" => ["long",  ["long", "ptr"]],
+    "SetFormA" => ["long",  ["long", "str", "long", "ptr"]],
+    "SetFormW" => ["long",  ["long", "wstr", "long", "ptr"]],
+    "SetJobA" => ["long",  ["long", "long", "long", "ptr", "long"]],
+    "SetJobW" => ["long",  ["long", "long", "long", "ptr", "long"]],
+    "SetPrinterA" => ["long",  ["long", "long", "ptr", "long"]],
+    "SetPrinterDataA" => ["long",  ["long", "str", "long", "ptr", "long"]],
+    "SetPrinterDataExA" => ["long",  ["long", "str", "str", "long", "ptr", "long"]],
+    "SetPrinterDataExW" => ["long",  ["long", "wstr", "wstr", "long", "ptr", "long"]],
+    "SetPrinterDataW" => ["long",  ["long", "wstr", "long", "ptr", "long"]],
+    "SetPrinterW" => ["long",  ["long", "long", "ptr", "long"]],
+    "WritePrinter" => ["long",  ["long", "ptr", "long", "ptr"]]
+};
+
+&wine::declare("winspool.drv",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/wintrust.pm b/programs/winetest/include/wintrust.pm
new file mode 100644
index 0000000..5e30add
--- /dev/null
+++ b/programs/winetest/include/wintrust.pm
@@ -0,0 +1,20 @@
+package wintrust;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "WinVerifyTrust" => ["long",  ["long", "ptr", "ptr"]]
+};
+
+&wine::declare("wintrust",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/ws2_32.pm b/programs/winetest/include/ws2_32.pm
new file mode 100644
index 0000000..60f10b2
--- /dev/null
+++ b/programs/winetest/include/ws2_32.pm
@@ -0,0 +1,76 @@
+package ws2_32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "accept" => ["long",  ["long", "ptr", "ptr"]],
+    "bind" => ["long",  ["long", "ptr", "long"]],
+    "closesocket" => ["long",  ["long"]],
+    "connect" => ["long",  ["long", "ptr", "long"]],
+    "getpeername" => ["long",  ["long", "ptr", "ptr"]],
+    "getsockname" => ["long",  ["long", "ptr", "ptr"]],
+    "getsockopt" => ["long",  ["long", "long", "long", "ptr", "ptr"]],
+    "htonl" => ["long",  ["long"]],
+    "htons" => ["long",  ["long"]],
+    "ioctlsocket" => ["long",  ["long", "long", "ptr"]],
+    "inet_addr" => ["long",  ["ptr"]],
+    "inet_ntoa" => ["ptr",  ["unknown"]],
+    "listen" => ["long",  ["long", "long"]],
+    "ntohl" => ["long",  ["long"]],
+    "ntohs" => ["long",  ["long"]],
+    "recv" => ["long",  ["long", "ptr", "long", "long"]],
+    "recvfrom" => ["long",  ["long", "ptr", "long", "long", "ptr", "ptr"]],
+    "select" => ["long",  ["long", "ptr", "ptr", "ptr", "ptr"]],
+    "send" => ["long",  ["long", "ptr", "long", "long"]],
+    "sendto" => ["long",  ["long", "ptr", "long", "long", "ptr", "long"]],
+    "setsockopt" => ["long",  ["long", "long", "long", "ptr", "long"]],
+    "shutdown" => ["long",  ["long", "long"]],
+    "socket" => ["long",  ["long", "long", "long"]],
+    "WSApSetPostRoutine" => ["long",  ["ptr"]],
+    "WSAAccept" => ["long",  ["long", "ptr", "ptr", "ptr", "long"]],
+    "WSACloseEvent" => ["long",  ["long"]],
+    "WSACreateEvent" => ["long",  []],
+    "WSAEnumNetworkEvents" => ["long",  ["long", "long", "ptr"]],
+    "WSAEventSelect" => ["long",  ["long", "long", "long"]],
+    "gethostbyaddr" => ["ptr",  ["ptr", "long", "long"]],
+    "gethostbyname" => ["ptr",  ["ptr"]],
+    "getprotobyname" => ["ptr",  ["ptr"]],
+    "getprotobynumber" => ["ptr",  ["long"]],
+    "getservbyname" => ["ptr",  ["ptr", "ptr"]],
+    "getservbyport" => ["ptr",  ["long", "ptr"]],
+    "gethostname" => ["long",  ["ptr", "long"]],
+    "WSARecvFrom" => ["long",  ["long", "ptr", "long", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr"]],
+    "WSASend" => ["long",  ["long", "ptr", "long", "ptr", "long", "ptr", "ptr"]],
+    "WSASocketA" => ["long",  ["long", "long", "long", "ptr", "long", "long"]],
+    "WSCDeinstallProvider" => ["long",  ["ptr", "ptr"]],
+    "WSCInstallProvider" => ["long",  ["ptr", "wstr", "ptr", "long", "ptr"]],
+    "WSAAsyncSelect" => ["long",  ["long", "long", "long", "long"]],
+    "WSAAsyncGetHostByAddr" => ["long",  ["long", "long", "str", "long", "long", "str", "long"]],
+    "WSAAsyncGetHostByName" => ["long",  ["long", "long", "str", "str", "long"]],
+    "WSAAsyncGetProtoByNumber" => ["long",  ["long", "long", "long", "str", "long"]],
+    "WSAAsyncGetProtoByName" => ["long",  ["long", "long", "str", "str", "long"]],
+    "WSAAsyncGetServByPort" => ["long",  ["long", "long", "long", "str", "str", "long"]],
+    "WSAAsyncGetServByName" => ["long",  ["long", "long", "str", "str", "str", "long"]],
+    "WSACancelAsyncRequest" => ["long",  ["long"]],
+    "WSASetBlockingHook" => ["ptr",  ["ptr"]],
+    "WSAGetLastError" => ["long",  []],
+    "WSASetLastError" => ["void",  ["long"]],
+    "WSACancelBlockingCall" => ["long",  []],
+    "WSAIsBlocking" => ["long",  []],
+    "WSAStartup" => ["long",  ["long", "ptr"]],
+    "WSACleanup" => ["long",  []],
+    "__WSAFDIsSet" => ["long",  ["long", "ptr"]]
+};
+
+&wine::declare("ws2_32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/programs/winetest/include/wsock32.pm b/programs/winetest/include/wsock32.pm
new file mode 100644
index 0000000..ff2b0f0
--- /dev/null
+++ b/programs/winetest/include/wsock32.pm
@@ -0,0 +1,25 @@
+package wsock32;
+
+use strict;
+
+require Exporter;
+
+use wine;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+my $module_declarations = {
+    "inet_network" => ["long",  ["ptr"]],
+    "getnetbyname" => ["ptr",  ["ptr"]],
+    "WSARecvEx" => ["long",  ["long", "ptr", "long", "ptr"]],
+    "s_perror" => ["void",  ["str"]],
+    "EnumProtocolsA" => ["long",  ["ptr", "ptr", "ptr"]],
+    "EnumProtocolsW" => ["long",  ["ptr", "ptr", "ptr"]]
+};
+
+&wine::declare("wsock32",%$module_declarations);
+push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
+1;
diff --git a/tools/winapi/winapi_extract b/tools/winapi/winapi_extract
index efae0ed..88cebeb 100755
--- a/tools/winapi/winapi_extract
+++ b/tools/winapi/winapi_extract
@@ -28,30 +28,58 @@
 use winapi_parser;
 use winapi qw(@winapis);
 
+my %module2entries;
 my %module2spec_file;
 my %module2type;
-if($options->spec_files) {
+my %module2filename;
+if($options->spec_files || $options->winetest) {
     local $_;
 
     foreach my $spec_file (get_spec_files("winelib")) {
+	my $entries = [];
+
 	my $module;
 	my $type;
 
 	open(IN, "< $wine_dir/$spec_file");
-	while(<IN>) {
+
+	my $header = 1;
+	my $lookahead = 0;
+	while($lookahead || defined($_ = <IN>)) {
+	    $lookahead = 0;
+
 	    s/^\s*?(.*?)\s*$/$1/; # remove whitespace at begining and end of line
 	    s/^(.*?)\s*#.*$/$1/;  # remove comments
 	    /^$/ && next;         # skip empty lines
 
-	    if(/^name\s+(.*?)$/) {
-		$module = $1;
-		$module2spec_file{$module} = $spec_file;
-	    } elsif(/^type\s+(.*?)$/) {
-		$type = $1;
-		$module2type{$module} = $type;
+	    if($header)  {
+		if(/^name\s+(.*?)$/) {
+		    $module = $1;
+		    $module2spec_file{$module} = $spec_file;
+		} elsif(/^file\s+(.*?)$/) {
+		    my $filename = $1;
+		    $module2filename{$module} = $filename;
+		} elsif(/^type\s+(.*?)$/) {
+		    $type = $1;
+		    $module2type{$module} = $type;
+		} elsif(/^\d+|@/) {
+		    $header = 0;
+		    $lookahead = 1; 
+		}
+		next;
+	    }
+
+	    if(/^(@|\d+)\s+stdcall\s+(\w+)\s*\(\s*([^\)]*)\s*\)/) {
+		my $ordinal = $1;
+		my $name = $2;
+		my @args = split(/\s+/, $3);
+
+		push @$entries, [$name, "undef", \@args];
 	    }
 	}
 	close(IN);
+
+	$module2entries{$module} = $entries;
     }
 }
 
@@ -177,7 +205,7 @@
 	my $calling_convention = $function->calling_convention;
 	my $statements = $function->statements;
 
-	if($options->spec_files) {
+	if($options->spec_files || $options->winetest) {
 	    documentation_specifications($function);
 	}
 
@@ -377,3 +405,106 @@
     } 
 }
 
+if($options->winetest) {
+    foreach my $module (sort(keys(%specifications))) {
+	my $type = $module2type{$module};
+        my $filename = $module2filename{$module} || $module;
+        my $modulename = $filename;
+        $modulename =~ s/\./_/g;
+
+	next unless $type eq "win32";
+
+	my @entries;
+
+	foreach my $external_name (sort(keys(%{$specifications{$module}{unknown}}))) {
+	    my $entry = $specifications{$module}{unknown}{$external_name};
+	    push @entries, $entry;
+	}
+
+	foreach my $ordinal (sort {$a <=> $b} keys(%{$specifications{$module}{fixed}})) {
+	    my $entry = $specifications{$module}{fixed}{$ordinal};
+	    push @entries, $entry;
+	}
+
+	foreach my $external_name (sort(keys(%{$specifications{$module}{unfixed}}))) {
+	    my $entry = $specifications{$module}{unfixed}{$external_name};
+	    push @entries, $entry;
+	}
+
+	my $n = 0;
+	foreach my $entry (@entries) {
+	    my $external_name = $entry->{external_name}; 
+	    my $ordinal = $entry->{ordinal}; 
+	    my $function = $entry->{function}; 
+
+	    my $return_kind;
+	    my $calling_convention;
+	    my $refargument_kinds;
+	    if($type eq "win16") {
+		$return_kind = $function->return_kind16 || "undef";
+		$calling_convention = $function->calling_convention16 || "undef";
+		$refargument_kinds = $function->argument_kinds16;
+	    } elsif($type eq "win32") {
+		$return_kind = $function->return_kind32 || "undef";
+		$calling_convention = $function->calling_convention32 || "undef";
+		$refargument_kinds = $function->argument_kinds32;
+	    }
+
+	    my @argument_kinds;
+	    if(defined($refargument_kinds)) {
+		@argument_kinds = map { $_ || "undef"; } @$refargument_kinds;
+	    }
+
+	    next if $calling_convention ne "stdcall";
+	    next if $external_name eq "\@";
+
+	    if($n == 0) {
+                open(OUT, "> $wine_dir/programs/winetest/include/${modulename}.pm");
+
+                print OUT "package ${modulename};\n";
+                print OUT "\n";
+
+                print OUT "use strict;\n";
+                print OUT "\n";
+
+                print OUT "require Exporter;\n";
+                print OUT "\n";
+
+                print OUT "use wine;\n";
+                print OUT "use vars qw(\@ISA \@EXPORT \@EXPORT_OK);\n";
+                print OUT "\n";
+
+                print OUT "\@ISA = qw(Exporter);\n";
+                print OUT "\@EXPORT = qw();\n";
+                print OUT "\@EXPORT_OK = qw();\n";
+                print OUT "\n";
+
+                print OUT "my \$module_declarations = {\n";
+	    } elsif($n > 0) {
+		print OUT ",\n";
+	    }
+
+	    print OUT "    \"\Q$external_name\E\" => [\"$return_kind\",  [";
+	    my $m = 0;
+	    foreach my $argument_kind (@argument_kinds) {
+		if($m > 0) {
+		    print OUT ", ";
+		}
+		print OUT "\"$argument_kind\"";
+		$m++;
+	    }
+	    print OUT "]]";
+	    $n++;
+	}
+
+	if($n > 0) {
+	    print OUT "\n";
+	    print OUT "};\n";
+	    print OUT "\n";
+            print OUT "&wine::declare(\"$filename\",\%\$module_declarations);\n";
+            print OUT "push \@EXPORT, map { \"&\" . \$_; } sort(keys(\%\$module_declarations));\n";
+	    print OUT "1;\n";
+            close(OUT);
+	}
+    }
+}
diff --git a/tools/winapi/winapi_extract_options.pm b/tools/winapi/winapi_extract_options.pm
index 3d29621..6a5d4eb 100644
--- a/tools/winapi/winapi_extract_options.pm
+++ b/tools/winapi/winapi_extract_options.pm
@@ -25,8 +25,9 @@
     "local" =>  { default => 1, description => "local extraction" },
     "global" => { default => 1, description => "global extraction" },
 
-    "spec-files" => { default => 1, parent => "global", description => "spec files extraction" },
+    "spec-files" => { default => 0, parent => "global", description => "spec files extraction" },
     "stub-statistics" => { default => 1, parent => "global", description => "stub statistics" },
+    "winetest" => { default => 1, parent => "global", description => "winetest extraction" },
 );
 
 my %options_short = (