Yet another major reorganization and a few new features.

diff --git a/tools/winapi_check/winapi_function.pm b/tools/winapi_check/winapi_function.pm
index a43ff57..6a3d0ec 100644
--- a/tools/winapi_check/winapi_function.pm
+++ b/tools/winapi_check/winapi_function.pm
@@ -74,13 +74,27 @@
     }
 }
 
+sub external_name { 
+    my $self = shift;
+
+    foreach my $winapi (@winapis) {
+	my $external_name = $self->_external_name($winapi, @_);
+
+	if(defined($external_name)) {
+	    return $external_name;
+	}
+    }
+
+    return undef;
+}
+
 sub external_name16 { my $self = shift; return $self->_external_name($win16api, @_); }
 sub external_name32 { my $self = shift; return $self->_external_name($win32api, @_); }
 
 sub external_names16 { my $self = shift; return $self->_external_names($win16api, @_); }
 sub external_names32 { my $self = shift; return $self->_external_names($win32api, @_); }
 
-sub external_names { my $self = shift; return ($self->external_names16,$self->external_names32); }
+sub external_names { my $self = shift; return ($self->external_names16, $self->external_names32); }
 
 ########################################################################
 # module
@@ -201,10 +215,14 @@
     my $return_type = $self->return_type;
     my $internal_name = $self->internal_name;
     my $calling_convention = $self->calling_convention;
-    my @argument_types = @{$self->argument_types};
 
-    if($#argument_types < 0) {
-	@argument_types = ("void");
+    my $refargument_types = $self->argument_types;
+    my @argument_types = ();
+    if(defined($refargument_types)) {
+	@argument_types = @$refargument_types;
+	if($#argument_types < 0) {
+	    @argument_types = ("void");
+	}
     }
 
     my $prefix = "";
@@ -326,10 +344,14 @@
 sub _argument_kinds {   
     my $self = shift;
     my $winapi = shift;
-    my @argument_types = @{$self->argument_types};
+    my $refargument_types = $self->argument_types;
+
+    if(!defined($refargument_types)) {
+	return undef;
+    }
 
     my @argument_kinds;
-    foreach my $argument_type (@argument_types) {
+    foreach my $argument_type (@$refargument_types) {
 	my $argument_kind = $winapi->translate_argument($argument_type);
 
 	if(defined($argument_kind) && $argument_kind eq "longlong") {