Several bug fixes and additions.

diff --git a/tools/winapi_check/modules.dat b/tools/winapi_check/modules.dat
index f2391aa..7c273ee 100644
--- a/tools/winapi_check/modules.dat
+++ b/tools/winapi_check/modules.dat
@@ -322,7 +322,7 @@
 
 % dlls/user/ddeml.spec
 
-dlls/user
+dlls/user/dde
 
 % dlls/user/display.spec
 
@@ -350,6 +350,7 @@
 
 controls
 dlls/user
+dlls/user/dde
 loader
 windows
 
diff --git a/tools/winapi_check/win32/user32.api b/tools/winapi_check/win32/user32.api
index a7b4f1a..56fe178 100644
--- a/tools/winapi_check/win32/user32.api
+++ b/tools/winapi_check/win32/user32.api
@@ -92,6 +92,7 @@
 LPDRAWTEXTPARAMS
 LPDWORD
 LPINT
+LPINPUT
 LPMENUINFO
 LPMENUITEMINFOA
 LPMENUITEMINFOW
diff --git a/tools/winapi_check/win32/x11drv.api b/tools/winapi_check/win32/x11drv.api
index 3b90022..67a6c9c 100644
--- a/tools/winapi_check/win32/x11drv.api
+++ b/tools/winapi_check/win32/x11drv.api
@@ -30,6 +30,7 @@
 LPDIDEVICEOBJECTDATA
 LPDWORD
 LPMOUSE_EVENT_PROC
+LPPOINT
 LPRECT
 LPVOID
 RECT *
diff --git a/tools/winapi_check/winapi.pm b/tools/winapi_check/winapi.pm
index f462941..968a721 100644
--- a/tools/winapi_check/winapi.pm
+++ b/tools/winapi_check/winapi.pm
@@ -286,8 +286,16 @@
 	    $ordinal = $1;
 
 	    # FIXME: Internal name existing more than once not handled properly
-	    $$function_internal_name{$external_name} = $internal_name;
-	    $$function_external_name{$internal_name} = $external_name;
+	    if(!$$function_internal_name{$external_name}) {
+		$$function_internal_name{$external_name} = $internal_name;
+	    } else {
+		$$function_internal_name{$external_name} .= " & $internal_name";
+	    }
+	    if(!$$function_external_name{$internal_name}) {
+		$$function_external_name{$internal_name} = $external_name;
+	    } else {
+		$$function_external_name{$internal_name} .= " & $external_name";
+	    }
 	    $$function_internal_arguments{$internal_name} = $arguments;
 	    $$function_external_arguments{$external_name} = $arguments;
 	    if(!$$function_internal_ordinal{$internal_name}) {
@@ -304,12 +312,12 @@
 	    $$function_external_calling_convention{$external_name} = $calling_convention;
 	    if(!$$function_internal_module{$internal_name}) {
 		$$function_internal_module{$internal_name} = "$module";
-	    } else { # if($$function_internal_module{$internal_name} !~ /$module/) {
+	    } else {
 		$$function_internal_module{$internal_name} .= " & $module";
 	    }
 	    if(!$$function_external_module{$external_name}) {
 		$$function_external_module{$external_name} = "$module";
-	    } else { # if($$function_external_module{$external_name} !~ /$module/) {
+	    } else {
 		$$function_external_module{$external_name} .= " & $module";
 	    }
 
diff --git a/tools/winapi_check/winapi_check b/tools/winapi_check/winapi_check
index 0a93654..1222819 100755
--- a/tools/winapi_check/winapi_check
+++ b/tools/winapi_check/winapi_check
@@ -265,7 +265,13 @@
 		my $module = $winapi->function_internal_module($internal_name);
 		if(!defined($module)) { next }
 
+		# FIXME: Not correct
 		my $external_name = $winapi->function_external_name($internal_name);
+
+		if(defined($external_name)) {
+		    $external_name = (split(/\s*&\s*/, $external_name))[0];
+		}
+
 		# FIXME: Kludge because of the THUNK variants
 		if(!defined($external_name)) {
 		    next;
@@ -411,6 +417,16 @@
 	    $prefix .= "$internal_name(" . join(",", @argument_types) . "): ";
 	    $output->prefix($prefix);
 
+	    # FIXME: Not correct
+	    if(defined($external_name16)) {
+		$external_name16 = (split(/\s*&\s*/, $external_name16))[0];
+	    }
+	    
+	    # FIXME: Not correct
+	    if(defined($external_name32)) {
+		$external_name32 = (split(/\s*&\s*/, $external_name32))[0];
+	    }
+
 	    if($options->local && $options->misplaced &&
 	       $linkage ne "extern" && $statements) 
 	    {
diff --git a/tools/winapi_check/winapi_documentation.pm b/tools/winapi_check/winapi_documentation.pm
index a413a00..eadcaa9 100644
--- a/tools/winapi_check/winapi_documentation.pm
+++ b/tools/winapi_check/winapi_documentation.pm
@@ -21,6 +21,16 @@
     my $documentation = $function->documentation;
     my @argument_documentations = @{$function->argument_documentations};
 
+    # FIXME: Not correct
+    if(defined($external_name16)) {
+	$external_name16 = (split(/\s*&\s*/, $external_name16))[0];
+    }
+    
+    # FIXME: Not correct
+    if(defined($external_name32)) {
+	$external_name32 = (split(/\s*&\s*/, $external_name32))[0];
+    }
+
     my $external_name;
     my $name1;
     my $name2;
diff --git a/tools/winapi_check/winapi_local.pm b/tools/winapi_check/winapi_local.pm
index 86f7042..ff58b23 100644
--- a/tools/winapi_check/winapi_local.pm
+++ b/tools/winapi_check/winapi_local.pm
@@ -257,16 +257,20 @@
 			    $format =~ s/^\'(.*?)\'$/$1/;
 			    $format =~ s/^\\\"(.*?)\\\"$/$1/;
 
-			    if($argument !~ /$name/) {
-				$output->write("$called_name: argument $n is wrong ($name != '$argument')\n");
-			    } elsif(!$winapi->is_allowed_type_format($module, $type, $format)) {
-				$output->write("$called_name: argument $n ($type $name) has illegal format ($format)\n");
+			    if($options->debug_messages) {
+				if($argument !~ /$name/) {
+				    $output->write("$called_name: argument $n is wrong ($name != '$argument')\n");
+				} elsif(!$winapi->is_allowed_type_format($module, $type, $format)) {
+				    $output->write("$called_name: argument $n ($type $name) has illegal format ($format)\n");
+				}
 			    }
 			}
 
-			my $count = $#{$function->argument_types} + 1; 
-			if($n != $count) {
-			    $output->write("$called_name: argument count mismatch ($n != $count)\n");
+			if($options->debug_messages) {
+			    my $count = $#{$function->argument_types} + 1; 
+			    if($n != $count) {
+				$output->write("$called_name: argument count mismatch ($n != $count)\n");
+			    }
 			}
 		    }
 		}