Several additions and bug fixes.

diff --git a/tools/winapi_check/winapi_documentation.pm b/tools/winapi_check/winapi_documentation.pm
index c28560c..78abc2b 100644
--- a/tools/winapi_check/winapi_documentation.pm
+++ b/tools/winapi_check/winapi_documentation.pm
@@ -2,6 +2,8 @@
 
 use strict;
 
+use config qw($current_dir $wine_dir);
+
 my %comment_width;
 my %comment_indent;
 my %comment_spacing;
@@ -13,13 +15,17 @@
     my $output = shift;
     my $win16api = shift;
     my $win32api = shift;
+    my $modules = shift;
     my $function = shift;
 
-    my $module16 = $function->module16;
-    my $module32 = $function->module32;
+    my $file = $function->file;
     my $external_name16 = $function->external_name16;
     my $external_name32 = $function->external_name32;
     my $internal_name = $function->internal_name;
+    my $module16 = $function->module16;
+    my $module32 = $function->module32;
+    my $ordinal16 = $function->ordinal16;
+    my $ordinal32 = $function->ordinal32;
     my $documentation = $function->documentation;
     my $documentation_line = $function->documentation_line;
     my @argument_documentations = @{$function->argument_documentations};
@@ -33,16 +39,18 @@
 	my @winapis = ($win16api, $win32api);
 	my @modules = ($module16, $module32);
 	my @external_names = ($external_name16, $external_name32);
+	my @ordinals = ($ordinal16, $ordinal32);
 	while(
 	      defined(my $winapi = shift @winapis) &&
 	      defined(my $external_name = shift @external_names) &&
-	      defined(my $module = shift @modules))
+	      defined(my $module = shift @modules) &&
+	      defined(my $ordinal = shift @ordinals))
 	{
-	    if($winapi->function_stub($internal_name)) { next; }
+	    if($winapi->is_function_stub_in_module($module, $internal_name)) { next; }
 
 	    my @external_name = split(/\s*\&\s*/, $external_name);
 	    my @modules = split(/\s*\&\s*/, $module);
-	    my @ordinals = split(/\s*\&\s*/, $winapi->function_internal_ordinal($internal_name));
+	    my @ordinals = split(/\s*\&\s*/, $ordinal);
 
 	    my $pedantic_failed = 0;
 	    while(defined(my $external_name = shift @external_name) && 
@@ -98,10 +106,14 @@
 		my $found = 0;
 		foreach my $entry2 (winapi::get_all_module_internal_ordinal($internal_name)) {
 		    (my $external_name2, my $module2, my $ordinal2) = @$entry2;
-		    
+
 		    if($external_name eq $external_name2 &&
 		       lc($module) eq $module2 &&
-		       $ordinal eq $ordinal2) 
+		       $ordinal eq $ordinal2 &&
+		       ($external_name2 eq "@" ||
+			($win16api->is_module($module2) && !$win16api->is_function_stub_in_module($module2, $external_name2)) ||
+			($win32api->is_module($module2) && !$win32api->is_function_stub_in_module($module2, $external_name2))) &&
+			$modules->is_allowed_module_in_file($module2, "$current_dir/$file"))
 		    {
 			$found = 1;
 		    }