- API files update
- Minor bug fixes

diff --git a/tools/winapi_check/win16/gdi.api b/tools/winapi_check/win16/gdi.api
index 52f7d56..8870e6c 100644
--- a/tools/winapi_check/win16/gdi.api
+++ b/tools/winapi_check/win16/gdi.api
@@ -12,6 +12,8 @@
 int
 
 %ptr
+
+ABORTPROC16
 BITMAP16 *
 BITMAPINFO *
 BITMAPINFOHEADER *
diff --git a/tools/winapi_check/win16/user.api b/tools/winapi_check/win16/user.api
index 91f200c..224b358 100644
--- a/tools/winapi_check/win16/user.api
+++ b/tools/winapi_check/win16/user.api
@@ -54,6 +54,7 @@
 WINDOWPLACEMENT16 *
 WNDCLASS16 *
 WNDCLASSEX16 *
+WNDPROC
 WORD *
 void *
 
diff --git a/tools/winapi_check/win32/gdi32.api b/tools/winapi_check/win32/gdi32.api
index 659f0d8..2997ff7 100644
--- a/tools/winapi_check/win32/gdi32.api
+++ b/tools/winapi_check/win32/gdi32.api
@@ -37,6 +37,7 @@
 BITMAPINFO *
 BITMAPINFOHEADER *
 COLORADJUSTMENT *
+DCHOOKPROC
 DEVMODEA *
 DEVMODEW *
 DOCINFOA *
diff --git a/tools/winapi_check/win32/kernel32.api b/tools/winapi_check/win32/kernel32.api
index 761a1a1..66b0b72 100644
--- a/tools/winapi_check/win32/kernel32.api
+++ b/tools/winapi_check/win32/kernel32.api
@@ -49,6 +49,7 @@
 
 BOOL *
 BY_HANDLE_FILE_INFORMATION *
+CHAR_INFO *
 DWORD *
 CALINFO_ENUMPROCA
 CONTEXT *
diff --git a/tools/winapi_check/win32/msvcrt.api b/tools/winapi_check/win32/msvcrt.api
index 32e6398..db4e2dc 100644
--- a/tools/winapi_check/win32/msvcrt.api
+++ b/tools/winapi_check/win32/msvcrt.api
@@ -27,14 +27,16 @@
 __non_rtti_object *
 _HEAPINFO *
 _INITTERMFUN *
+_JUMP_BUFFER *
 _onexit_t
 _onexit_t **
-LPDWORD *
 MSVCRT_EXCEPTION_FRAME *
 MSVCRT_FILE *
 MSVCRT_compar_fn_t
 MSVCRT_exception *
 MSVCRT_fpos_t *
+MSVCRT_free_func
+MSVCRT_malloc_func
 MSVCRT_matherr_func
 MSVCRT_new_handler_func
 MSVCRT_sig_handler_func
@@ -56,7 +58,8 @@
 char ***
 exception *
 int *
-jmp_buf
+struct __EXCEPTION_FRAME *
+struct __EXCEPTION_FRAME **
 struct _finddata_t *
 struct _diskfree_t *
 struct _stat *
diff --git a/tools/winapi_check/win32/ntdll.api b/tools/winapi_check/win32/ntdll.api
index f6ef31d..032a851 100644
--- a/tools/winapi_check/win32/ntdll.api
+++ b/tools/winapi_check/win32/ntdll.api
@@ -36,7 +36,6 @@
 
 int
 long
-size_t
 unsigned int
 unsigned long
 
@@ -69,6 +68,7 @@
 PACL
 PACL *
 PBOOLEAN
+PCVOID
 PDWORD
 PEXCEPTION_FRAME
 PEXCEPTION_RECORD
@@ -103,18 +103,17 @@
 UNICODE_STRING *
 VOID *
 struct _TEB *
+union cptable *
 void *
 
 %ptr --extension
 
-EXCEPTION_FRAME **
 GUID *
 WCHAR *
 WCHAR ***
 char *
 char ***
 enum __DEBUG_CLASS
-union generic_request *
 va_list
 
 %str
diff --git a/tools/winapi_check/win32/shell32.api b/tools/winapi_check/win32/shell32.api
index 424733e..ca8d175 100644
--- a/tools/winapi_check/win32/shell32.api
+++ b/tools/winapi_check/win32/shell32.api
@@ -8,6 +8,7 @@
 HDROP
 HGLOBAL
 HMENU
+HMODULE
 HICON
 HINSTANCE
 HIMAGELIST
@@ -22,7 +23,6 @@
 WORD
 WPARAM
 
-
 %long # --forbidden
 
 int
@@ -32,6 +32,7 @@
 CLSID *
 DLLVERSIONINFO *
 DWORD *
+FARPROC
 HICON *
 HIMAGELIST *
 HWND *
diff --git a/tools/winapi_check/win32/shlwapi.api b/tools/winapi_check/win32/shlwapi.api
index 2dcd11b..fe395f8 100644
--- a/tools/winapi_check/win32/shlwapi.api
+++ b/tools/winapi_check/win32/shlwapi.api
@@ -15,8 +15,10 @@
 HMODULE
 HPALETTE
 HRESULT
+HSHARED
 HUSKEY
 HWND
+LANGID
 LPARAM
 LRESULT
 UCHAR
@@ -37,15 +39,19 @@
 BOOL *
 DLLVERSIONINFO *
 HICON *
+IFACE_INDEX_TBL *
 IStream *
 ITEMIDLIST *
 IUnknown *
+IUnknown **
 LPBROWSEINFOW
-LPBYTE
 LPCITEMIDLIST
 LPCLSID
+LPCSTR *
 LPCVOID
+LPCWSTR *
 LPDWORD
+LPHWND
 LPINT
 LPITEMIDLIST
 LPOPENFILENAMEW
@@ -57,7 +63,9 @@
 LPUNKNOWN *
 LPVOID
 LPVOID *
+LPWORD
 PHUSKEY
+PVOID
 REFIID
 REFGUID
 SHFILEINFOW *
diff --git a/tools/winapi_check/win32/ttydrv.api b/tools/winapi_check/win32/ttydrv.api
index 6193ca5..1a4114f 100644
--- a/tools/winapi_check/win32/ttydrv.api
+++ b/tools/winapi_check/win32/ttydrv.api
@@ -5,7 +5,6 @@
 COLORREF
 DWORD
 INT
-HANDLE
 HDC
 HBITMAP
 HGDIOBJ
diff --git a/tools/winapi_check/win32/urlmon.api b/tools/winapi_check/win32/urlmon.api
index e38c1cf..2a6831d 100644
--- a/tools/winapi_check/win32/urlmon.api
+++ b/tools/winapi_check/win32/urlmon.api
@@ -8,8 +8,10 @@
 %ptr
 
 IBindCtx *
+IBindCtx **
 IBindStatusCallback *
 IBindStatusCallback **
+IEnumFORMATETC *
 IMoniker *
 IMoniker **
 LPVOID *
diff --git a/tools/winapi_check/win32/user32.api b/tools/winapi_check/win32/user32.api
index 54d57b9..7459bc2 100644
--- a/tools/winapi_check/win32/user32.api
+++ b/tools/winapi_check/win32/user32.api
@@ -53,6 +53,7 @@
 INT16
 HANDLE16
 HDRVR16
+HGLOBAL16
 HMODULE16
 HINSTANCE16
 HTASK16
@@ -73,6 +74,7 @@
 DRAWSTATEPROC
 GRAYSTRINGPROC
 HANDLE *
+HBRUSH *
 HICON *
 HKL *
 HWND *
@@ -145,10 +147,6 @@
 HOOKPROC16
 WNDPROC16
 
-%ptr # --forbidden
-
-int *
-
 %str
 
 LPSTR
diff --git a/tools/winapi_check/win32/winedos.api b/tools/winapi_check/win32/winedos.api
index b036450..5af6fbc 100644
--- a/tools/winapi_check/win32/winedos.api
+++ b/tools/winapi_check/win32/winedos.api
@@ -1,22 +1,14 @@
 %long
 
 BOOL
-BYTE
+DWORD
 HANDLE
-INT
 UINT
-ULONG_PTR
-WORD
-
+int
 
 %ptr
 
-CONTEXT86 *
-BYTE *
-DOSRELAY
-PAPCFUNC
-LPDOSTASK
-LPVOID
+DWORD *
 
 %str
 
diff --git a/tools/winapi_check/win32/wininet.api b/tools/winapi_check/win32/wininet.api
index 1e16438..6069eb5 100644
--- a/tools/winapi_check/win32/wininet.api
+++ b/tools/winapi_check/win32/wininet.api
@@ -2,16 +2,19 @@
 
 BOOL
 DWORD
+FILETIME
 HINTERNET
 HRESULT
 INTERNET_PORT
 
 %ptr
 
+LPBYTE
 LPCSTR *
 LPCVOID
 LPDWORD
 LPINTERNET_BUFFERSA
+LPINTERNET_CACHE_ENTRY_INFOA
 LPURL_COMPONENTSA
 LPVOID
 LPWIN32_FIND_DATAA
diff --git a/tools/winapi_check/winapi.pm b/tools/winapi_check/winapi.pm
index b7d32fe..6ccea49 100644
--- a/tools/winapi_check/winapi.pm
+++ b/tools/winapi_check/winapi.pm
@@ -237,16 +237,24 @@
 
 	my $ordinal;
 	if(/^(\d+|@)\s+
-	   (pascal|pascal16|stdcall|cdecl|register|interrupt|varargs)
-	   (?:\s+(?:-noimport|-norelay|-i386|-ret64))*\s+(\S+)\s*\(\s*(.*?)\s*\)\s*(\S+)$/x)
+	   (pascal|pascal16|stdcall|cdecl|varargs)\s+
+	   ((?:(?:-noimport|-norelay|-i386|-ret64|-register|-interrupt)\s+)*)(\S+)\s*\(\s*(.*?)\s*\)\s*(\S+)$/x)
 	{
 	    my $calling_convention = $2;
-	    my $external_name = $3;
-	    my $arguments = $4;
-	    my $internal_name = $5;
-	   
+	    my $flags = $3;
+	    my $external_name = $4;
+	    my $arguments = $5;
+	    my $internal_name = $6;
+
 	    $ordinal = $1;
 
+	    $flags =~ s/\s+/ /g;
+
+	    if($flags =~ /(?:-register|-interrupt)/) {
+		if($arguments) { $arguments .= " "; }
+		$arguments .= "ptr";
+	    }
+
 	    if(!$$function_internal_name{$external_name}) {
 		$$function_internal_name{$external_name} = $internal_name;
 	    } else {
diff --git a/tools/winapi_check/winapi_local.pm b/tools/winapi_check/winapi_local.pm
index 7203693..2eda324 100644
--- a/tools/winapi_check/winapi_local.pm
+++ b/tools/winapi_check/winapi_local.pm
@@ -127,16 +127,7 @@
     my $declared_calling_convention = $winapi->function_internal_calling_convention($internal_name);
     my @declared_argument_kinds = split(/\s+/, $winapi->function_internal_arguments($internal_name));
 
-    if($declared_calling_convention =~ /^register|interrupt$/) {
-	push @declared_argument_kinds, "ptr";
-    }
-   
-    if($declared_calling_convention =~ /^register|interupt$/ && 
-         (($winapi->name eq "win32" && $implemented_calling_convention eq "stdcall") ||
-         (($winapi->name eq "win16" && $implemented_calling_convention =~ /^pascal/))))
-    {
-	# correct
-    } elsif($implemented_calling_convention ne $declared_calling_convention &&
+    if($implemented_calling_convention ne $declared_calling_convention &&
        $implemented_calling_convention ne "asm" &&
        !($declared_calling_convention =~ /^pascal/ && $forbidden_return_type) &&
        !($implemented_calling_convention =~ /^cdecl|varargs$/ && $declared_calling_convention =~ /^cdecl|varargs$/))
@@ -178,7 +169,9 @@
 	    my $type = $_;
 	    my $kind = "unknown";
 	    $winapi->type_used_in_module($type,$module);
-	    if(!defined($kind = $winapi->translate_argument($type))) {
+	    if($type eq "CONTEXT86 *") {
+		$kind = "context86";
+	    } elsif(!defined($kind = $winapi->translate_argument($type))) {
 		$output->write("no translation defined: " . $type . "\n");
 	    } elsif(!$winapi->is_allowed_kind($kind) ||
 		    !$winapi->allowed_type_in_module($type, $module)) {
@@ -211,7 +204,9 @@
 		$argument_types[$n] = "";
 	    }
 
-	    if(!$winapi->is_allowed_kind($argument_kinds[$n]) ||
+	    if($argument_kinds[$n] eq "context86") {
+		# Nothing
+	    } elsif(!$winapi->is_allowed_kind($argument_kinds[$n]) ||
 	       !$winapi->allowed_type_in_module($argument_types[$n], $module)) 
 	    {
 		if($options->report_argument_forbidden($argument_types[$n])) {
diff --git a/tools/winapi_check/winapi_parser.pm b/tools/winapi_check/winapi_parser.pm
index 3ade82d..6c9195d 100644
--- a/tools/winapi_check/winapi_parser.pm
+++ b/tools/winapi_check/winapi_parser.pm
@@ -528,7 +528,7 @@
 	    &$type_end([@names]);
 	} elsif(/typedef\s+
 		(?:(?:const\s+|enum\s+|long\s+|signed\s+|short\s+|struct\s+|union\s+|unsigned\s+)*?)
-		(\w+)\s+
+		(\w+(?:\s*\*+\s*)?)\s+
 		(?:(\w+)\s*)?
 		\((?:(\w+)\s+)?\s*\*\s*(\w+)\s*\)\s*
 		(?:\(([^\)]*)\)|\[([^\]]*)\])\s*;/sx)