- API files update.
- Minor bug fixes.

diff --git a/tools/winapi_check/winapi_check b/tools/winapi_check/winapi_check
index 528dab7..4be3150 100755
--- a/tools/winapi_check/winapi_check
+++ b/tools/winapi_check/winapi_check
@@ -538,9 +538,10 @@
 			} else {
 			    $include = "$header";
 			}
-		    } elsif($header =~ /^(?:\.\.\/kernel\/(kernel_private\.h))$/) { # FIXME: Kludge
-			my $header2 = $1;
-			$include = "dlls/kernel/$header2";
+		    } elsif($header =~ /^(?:kernel_private\.h)$/) { # FIXME: Kludge
+			$include = "dlls/kernel/$header";
+		    } elsif($header =~ /^(?:gdi_private\.h)$/) { # FIXME: Kludge
+			$include = "dlls/gdi/$header";
 		    } elsif($header =~ /^(?:ntdll_misc\.h)$/) { # FIXME: Kludge
 			$include = "dlls/ntdll/$header";
 		    } elsif($header =~ /^(?:controls\.h|message\.h)$/) { # FIXME: Kludge
@@ -618,10 +619,14 @@
 				$include2info{$name}{used}++;
 			    }
 			}
-		    } elsif($header =~ /^(?:\.\.\/kernel\/(kernel_private\.h))$/) { # FIXME: Kludge
-			my $header2 = $1;
-			$include2info{"dlls/kernel/$header2"}{used}++;
-			foreach my $name (keys(%{$include2info{"dlls/kernel/$header2"}{includes}})) {
+		    } elsif($header =~ /^(?:kernel_private\.h)$/) { # FIXME: Kludge
+			$include2info{"dlls/kernel/$header"}{used}++;
+			foreach my $name (keys(%{$include2info{"dlls/kernel/$header"}{includes}})) {
+			    $include2info{$name}{used}++;
+			}
+		    } elsif($header =~ /^(?:gdi_private\.h)$/) { # FIXME: Kludge
+			$include2info{"dlls/gdi/$header"}{used}++;
+			foreach my $name (keys(%{$include2info{"dlls/gdi/$header"}{includes}})) {
 			    $include2info{$name}{used}++;
 			}
 		    } elsif($header =~ /^(?:ntdll_misc\.h)$/) { # FIXME: Kludge
@@ -629,7 +634,6 @@
 			foreach my $name (keys(%{$include2info{"dlls/ntdll/$header"}{includes}})) {
 			    $include2info{$name}{used}++;
 			}
-
 		    } elsif($header =~ /^(?:controls\.h|message\.h)$/) { # FIXME: Kludge
 			$include2info{"dlls/user/$header"}{used}++;
 			foreach my $name (keys(%{$include2info{"dlls/user/$header"}{includes}})) {
diff --git a/tools/winapi_check/winapi_documentation.pm b/tools/winapi_check/winapi_documentation.pm
index edaf567..0e30135 100644
--- a/tools/winapi_check/winapi_documentation.pm
+++ b/tools/winapi_check/winapi_documentation.pm
@@ -125,13 +125,20 @@
 
     if(!$documentation_error && $options->documentation_wrong) {
 	foreach (split(/\n/, $documentation)) {
-	    if(/^\s*\*\s*(\S+)\s*[\(\[]\s*(\w+)\s*\.\s*([^\s\)\]]*)\s*[\)\]].*?$/) {
+	    if (/^\s*\*\s*(\S+)\s*[\(\[]\s*(\w+(?:\.(?:DRV|VXD))?)\s*\.\s*([^\s\)\]]*)\s*[\)\]].*?$/) {
 		my $external_name = $1;
 		my $module = $2;
 		my $ordinal = $3;
 
-		if(!$options->documentation_pedantic && $ordinal ne "@") {
+		if ($ordinal eq "@") {
+		    # Nothing
+		} elsif ($ordinal =~ /^\d+$/) {
 		    $ordinal = int($ordinal);
+		} elsif ($ordinal eq "init") {
+		    $ordinal = 0;
+		} else {
+		    $output->write("documentation: $external_name (\U$module\E.$ordinal) wrong\n");
+		    next;
 		}
 
 		my $found = 0;
@@ -156,7 +163,8 @@
 
 
 		}
-		if(!$found) {
+
+		if (!$found && $external_name ne "DllMain" && $ordinal !~ /^0$/) {
 		    $output->write("documentation: $external_name (\U$module\E.$ordinal) wrong\n");
 		}
 	    }
diff --git a/tools/winapi_check/winapi_local.pm b/tools/winapi_check/winapi_local.pm
index 6dd186a..336f573 100644
--- a/tools/winapi_check/winapi_local.pm
+++ b/tools/winapi_check/winapi_local.pm
@@ -147,7 +147,7 @@
 	}
     }
 
-    my $declared_calling_convention = $winapi->function_internal_calling_convention($internal_name);
+    my $declared_calling_convention = $winapi->function_internal_calling_convention($internal_name) || "";
     my @declared_argument_kinds = split(/\s+/, $winapi->function_internal_arguments($internal_name));
 
     my $declared_register = 0;
@@ -171,16 +171,22 @@
     }
 
     if($declared_calling_convention eq "varargs") {
-	if($#argument_types != -1 && $argument_types[$#argument_types] eq "...") {
+	if ($#argument_types != -1 &&
+            (($winapi->name eq "win32" && $argument_types[$#argument_types] eq "...") ||
+            ($winapi->name eq "win16" && $argument_types[$#argument_types] eq "VA_LIST16")))
+	{
 	    pop @argument_types;
 	} else {
-	    $output->write("function not implemented as vararg\n");
+	    $output->write("function not implemented as varargs\n");
 	}
-    } elsif($#argument_types != -1 && $argument_types[$#argument_types] eq "...") {
-	if($#argument_types == 0 || $winapi->name eq "win16") {
+    } elsif ($#argument_types != -1 &&
+        (($winapi->name eq "win32" && $argument_types[$#argument_types] eq "...") ||
+        ($winapi->name eq "win16" && $argument_types[$#argument_types] eq "VA_LIST16")))
+    {
+	if($#argument_types == 0) {
 	    pop @argument_types;
 	} else {
-	    $output->write("function not declared as vararg\n");
+	    $output->write("function not declared as varargs\n");
 	}
     }
 
diff --git a/tools/winapi_check/winapi_parser.pm b/tools/winapi_check/winapi_parser.pm
index 202d816..d280a00 100644
--- a/tools/winapi_check/winapi_parser.pm
+++ b/tools/winapi_check/winapi_parser.pm
@@ -499,20 +499,29 @@
 		my @arguments32 = ("HWAVEOUT", $4);
 		&$function_begin($documentation_line, $documentation,
 				 $function_line, "", "UINT16", "WINAPI", "waveOut" . $2 . "16", \@arguments16);
-		&$function_end($., "");
+		&$function_end($function_line, "");
 		&$function_begin($documentation_line, $documentation,
 				 $function_line, "", "UINT", "WINAPI", "waveOut" . $2, \@arguments32);
-		&$function_end($., "");
+		&$function_end($function_line, "");
 	    } elsif($1 eq 2) {
 		my @arguments16 = ("UINT16", $4);
 		my @arguments32 = ("UINT", $4);
 		&$function_begin($documentation_line, $documentation,
 				 $function_line, "", "UINT16", "WINAPI", "waveOut". $2 . "16", \@arguments16);
-		&$function_end($., "");
+		&$function_end($function_line, "");
 		&$function_begin($documentation_line, $documentation,
 				 $function_line, "", "UINT", "WINAPI", "waveOut" . $2, \@arguments32);
-		&$function_end($., "");
+		&$function_end($function_line, "");
 	    }
+	} elsif(/DEFINE_THISCALL_WRAPPER\((\S*)\)/s) {
+	    my @lines = split(/\n/, $&);
+	    my $function_line = $. - scalar(@lines) + 1;
+
+	    $_ = $'; $again = 1;
+
+	    &$function_begin($documentation_line, $documentation,
+			     $function_line, "", "void", "", "__thiscall_" . $1, \());
+	    &$function_end($function_line, "");
         } elsif(/DEFINE_REGS_ENTRYPOINT_\d+\(\s*(\S*)\s*,\s*([^\s,\)]*).*?\)/s) {
 	    $_ = $'; $again = 1;
 	    $regs_entrypoints{$2} = $1;