- Minor API files fixes.
- Minor bug fixes and additions.

diff --git a/tools/winapi_check/winapi.pm b/tools/winapi_check/winapi.pm
index ccf9bac..cb52992 100644
--- a/tools/winapi_check/winapi.pm
+++ b/tools/winapi_check/winapi.pm
@@ -183,6 +183,21 @@
 	    $win32api->parse_spec_file("$wine_dir/$file");
 	}
     }
+
+    foreach my $self ($win16api, $win32api) {
+	my $function_forward = \%{$self->{FUNCTION_FORWARD}};
+	my $function_internal_name = \%{$self->{FUNCTION_INTERNAL_NAME}};
+	my $function_module = \%{$self->{FUNCTION_MODULE}};
+	
+	foreach my $forward_name (sort(keys(%$function_forward))) {
+	    $$function_forward{$forward_name} =~ /^(\S*):(\S*)\.(\S*)$/;
+	    (my $from_module, my $to_module, my $external_name) = ($1, $2, $3);
+	    my $internal_name = $$function_internal_name{$external_name};
+	    if(defined($internal_name)) {
+		$$function_module{$internal_name} .= " & $from_module";
+	    }
+	}
+    }
 }
 
 sub read_all_spec_files {
@@ -215,8 +230,10 @@
     my $output = \${$self->{OUTPUT}};
     my $function_arguments = \%{$self->{FUNCTION_ARGUMENTS}};
     my $function_calling_convention = \%{$self->{FUNCTION_CALLING_CONVENTION}};
+    my $function_internal_name = \%{$self->{FUNCTION_INTERNAL_NAME}};
     my $function_external_name = \%{$self->{FUNCTION_EXTERNAL_NAME}};
     my $function_stub = \%{$self->{FUNCTION_STUB}};
+    my $function_forward = \%{$self->{FUNCTION_FORWARD}};
     my $function_module = \%{$self->{FUNCTION_MODULE}};
     my $modules = \%{$self->{MODULES}};
     my $module_files = \%{$self->{MODULE_FILES}};
@@ -260,13 +277,19 @@
 	    $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;
 	    $$function_arguments{$internal_name} = $arguments;
 	    $$function_calling_convention{$internal_name} = $calling_convention;
 	    if(!$$function_module{$internal_name}) {
 		$$function_module{$internal_name} = "$module";
 	    } elsif($$function_module{$internal_name} !~ /$module/) {
+		if(0) {
+		    $$output->write("$file: $external_name: the internal function ($internal_name) " . 
+				    "already belongs to a module ($$function_module{$internal_name})\n");
+		}
 		$$function_module{$internal_name} .= " & $module";
+
 	    }
 
 	    if(0 && $$options->spec_mismatch) {
@@ -319,6 +342,14 @@
 	    } elsif($$function_module{$internal_name} !~ /$module/) {
 		$$function_module{$internal_name} .= " & $module";
 	    }
+	} elsif(/^(\d+|@)\s+forward\s+(\S+)\s+(\S+)\.(\S+)$/) {
+	    $ordinal = $1;
+
+	    my $external_name = $2;
+	    my $forward_module = lc($3);
+	    my $forward_name = $4;
+
+	    $$function_forward{$external_name} = "$module:$forward_module.$forward_name";
 	} elsif(/^(\d+|@)\s+(equate|long|word|extern|forward)/) {
 	    # ignore
 	} else {