Add function prototypes.
Change the way functions are called and either alter their declaration
order or predeclare them so perl can check the prototypes.

diff --git a/tools/winapi/winapi.pm b/tools/winapi/winapi.pm
index 256e88f..1aeef1b 100644
--- a/tools/winapi/winapi.pm
+++ b/tools/winapi/winapi.pm
@@ -35,9 +35,17 @@
 
 use vars qw($modules);
 
-sub import {
+sub found_shared_internal_function($$);
+sub function_external_calling_convention_in_module($$$);
+sub function_internal_module($$);
+sub is_function_stub_in_module($$$);
+sub new($$$);
+sub parse_api_file($$);
+sub parse_spec_file($$);
+
+sub import(@) {
     $Exporter::ExportLevel++;
-    &Exporter::import(@_);
+    Exporter::import(@_);
     $Exporter::ExportLevel--;
 
     if (defined($modules) && defined($win16api) && defined($win32api)) {
@@ -69,7 +77,7 @@
 }
 
 
-sub new {
+sub new($$$) {
     my $proto = shift;
     my $class = ref($proto) || $proto;
     my $self  = {};
@@ -102,15 +110,15 @@
     return $self;
 }
 
-sub win16api {
+sub win16api() {
     return $win16api;
 }
 
-sub win32api {
+sub win32api() {
     return $win32api;
 }
 
-sub parse_api_file {
+sub parse_api_file($$) {
     my $self = shift;
 
     my $allowed_kind = \%{$self->{ALLOWED_KIND}};
@@ -217,7 +225,7 @@
     close(IN);
 }
 
-sub parse_spec_file {
+sub parse_spec_file($$) {
     my $self = shift;
 
     my $function_internal_arguments = \%{$self->{FUNCTION_INTERNAL_ARGUMENTS}};
@@ -468,14 +476,14 @@
     $$module_files{$module} = $file;
 }
 
-sub name {
+sub name($) {
     my $self = shift;
     my $name = \${$self->{NAME}};
 
     return $$name;
 }
 
-sub is_allowed_kind {
+sub is_allowed_kind($$) {
     my $self = shift;
     my $allowed_kind = \%{$self->{ALLOWED_KIND}};
 
@@ -488,7 +496,7 @@
 
 }
 
-sub allow_kind {
+sub allow_kind($$) {
     my $self = shift;
     my $allowed_kind = \%{$self->{ALLOWED_KIND}};
 
@@ -497,7 +505,7 @@
     $$allowed_kind{$kind}++;
 }
 
-sub is_limited_type {
+sub is_limited_type($$) {
     my $self = shift;
     my $allowed_modules_limited = \%{$self->{ALLOWED_MODULES_LIMITED}};
 
@@ -506,7 +514,7 @@
     return $$allowed_modules_limited{$type};
 }
 
-sub is_allowed_type_in_module {
+sub is_allowed_type_in_module($$) {
     my $self = shift;
     my $allowed_modules = \%{$self->{ALLOWED_MODULES}};
     my $allowed_modules_limited = \%{$self->{ALLOWED_MODULES_LIMITED}};
@@ -523,7 +531,7 @@
     return 0;
 }
 
-sub allow_type_in_module {
+sub allow_type_in_module($$) {
     my $self = shift;
     my $allowed_modules = \%{$self->{ALLOWED_MODULES}};
 
@@ -535,7 +543,7 @@
     }
 }
 
-sub type_used_in_module {
+sub type_used_in_module($$) {
     my $self = shift;
     my $used_modules = \%{$self->{USED_MODULES}};
 
@@ -549,7 +557,7 @@
     return ();
 }
 
-sub types_not_used {
+sub types_not_used($) {
     my $self = shift;
     my $used_modules = \%{$self->{USED_MODULES}};
     my $allowed_modules = \%{$self->{ALLOWED_MODULES}};
@@ -565,7 +573,7 @@
     return $not_used;
 }
 
-sub types_unlimited_used_in_modules {
+sub types_unlimited_used_in_modules($) {
     my $self = shift;
 
     my $used_modules = \%{$self->{USED_MODULES}};
@@ -589,7 +597,7 @@
     return $used_types;
 }
 
-sub translate_argument {
+sub translate_argument($$) {
     my $self = shift;
     my $translate_argument = \%{$self->{TRANSLATE_ARGUMENT}};
 
@@ -598,7 +606,7 @@
     return $$translate_argument{$type};
 }
 
-sub declare_argument {
+sub declare_argument($$$) {
     my $self = shift;
     my $translate_argument = \%{$self->{TRANSLATE_ARGUMENT}};
 
@@ -608,14 +616,14 @@
     $$translate_argument{$type} = $kind;
 }
 
-sub all_declared_types {
+sub all_declared_types($) {
     my $self = shift;
     my $translate_argument = \%{$self->{TRANSLATE_ARGUMENT}};
 
     return sort(keys(%$translate_argument));
 }
 
-sub is_allowed_type_format {
+sub is_allowed_type_format($$$$) {
     my $self = shift;
     my $type_format = \%{$self->{TYPE_FORMAT}};
 
@@ -651,14 +659,14 @@
     return 0;
 }
 
-sub all_modules {
+sub all_modules($) {
     my $self = shift;
     my $modules = \%{$self->{MODULES}};
 
     return sort(keys(%$modules));
 }
 
-sub is_module {
+sub is_module($$) {
     my $self = shift;
     my $modules = \%{$self->{MODULES}};
 
@@ -667,7 +675,7 @@
     return $$modules{$name};
 }
 
-sub module_file {
+sub module_file($$) {
     my $self = shift;
 
     my $module = shift;
@@ -677,14 +685,14 @@
     return $$module_files{$module};
 }
 
-sub all_internal_functions {
+sub all_internal_functions($) {
     my $self = shift;
     my $function_internal_calling_convention = \%{$self->{FUNCTION_INTERNAL_CALLING_CONVENTION}};
 
     return sort(keys(%$function_internal_calling_convention));
 }
 
-sub all_internal_functions_in_module {
+sub all_internal_functions_in_module($$) {
     my $self = shift;
     my $function_internal_calling_convention = \%{$self->{FUNCTION_INTERNAL_CALLING_CONVENTION}};
     my $function_internal_module = \%{$self->{FUNCTION_INTERNAL_MODULE}};
@@ -701,14 +709,14 @@
     return sort(@names);
 }
 
-sub all_external_functions {
+sub all_external_functions($) {
     my $self = shift;
     my $function_external_name = \%{$self->{FUNCTION_EXTERNAL_NAME}};
 
     return sort(keys(%$function_external_name));
 }
 
-sub all_external_functions_in_module {
+sub all_external_functions_in_module($$) {
     my $self = shift;
     my $function_external_name = \%{$self->{FUNCTION_EXTERNAL_NAME}};
     my $function_external_module = \%{$self->{FUNCTION_EXTERNAL_MODULE}};
@@ -725,7 +733,7 @@
     return sort(@names);
 }
 
-sub all_functions_in_module {
+sub all_functions_in_module($$) {
     my $self = shift;
     my $module_external_calling_convention = \%{$self->{MODULE_EXTERNAL_CALLING_CONVENTION}};
 
@@ -734,7 +742,7 @@
     return sort(keys(%{$$module_external_calling_convention{$module}}));
 }
 
-sub all_broken_forwards {
+sub all_broken_forwards($) {
     my $self = shift;
     my $function_forward = \%{$self->{FUNCTION_FORWARD}};
 
@@ -755,7 +763,7 @@
 }
 
 
-sub function_internal_ordinal {
+sub function_internal_ordinal($$) {
     my $self = shift;
     my $function_internal_ordinal = \%{$self->{FUNCTION_INTERNAL_ORDINAL}};
 
@@ -764,7 +772,7 @@
     return $$function_internal_ordinal{$name};
 }
 
-sub function_external_ordinal {
+sub function_external_ordinal($$) {
     my $self = shift;
     my $function_external_ordinal = \%{$self->{FUNCTION_EXTERNAL_ORDINAL}};
 
@@ -773,7 +781,7 @@
     return $$function_external_ordinal{$name};
 }
 
-sub function_internal_calling_convention {
+sub function_internal_calling_convention($$) {
     my $self = shift;
     my $function_internal_calling_convention = \%{$self->{FUNCTION_INTERNAL_CALLING_CONVENTION}};
 
@@ -782,7 +790,7 @@
     return $$function_internal_calling_convention{$name};
 }
 
-sub function_external_calling_convention {
+sub function_external_calling_convention($$) {
     my $self = shift;
     my $function_external_calling_convention = \%{$self->{FUNCTION_EXTERNAL_CALLING_CONVENTION}};
 
@@ -791,7 +799,7 @@
     return $$function_external_calling_convention{$name};
 }
 
-sub function_external_calling_convention_in_module {
+sub function_external_calling_convention_in_module($$$) {
     my $self = shift;
     my $module_external_calling_convention = \%{$self->{MODULE_EXTERNAL_CALLING_CONVENTION}};
 
@@ -801,7 +809,7 @@
     return $$module_external_calling_convention{$module}{$name};
 }
 
-sub function_internal_name {
+sub function_internal_name($$) {
     my $self = shift;
     my $function_internal_name = \%{$self->{FUNCTION_INTERNAL_NAME}};
 
@@ -810,7 +818,7 @@
     return $$function_internal_name{$name};
 }
 
-sub function_external_name {
+sub function_external_name($$) {
     my $self = shift;
     my $function_external_name = \%{$self->{FUNCTION_EXTERNAL_NAME}};
 
@@ -819,7 +827,7 @@
     return $$function_external_name{$name};
 }
 
-sub function_forward_final_destination {
+sub function_forward_final_destination($$$) {
     my $self = shift;
 
     my $function_forward = \%{$self->{FUNCTION_FORWARD}};
@@ -836,7 +844,7 @@
     return ($forward_module, $forward_name);
 }
 
-sub is_function {
+sub is_function($$) {
     my $self = shift;
     my $function_internal_calling_convention = \%{$self->{FUNCTION_INTERNAL_CALLING_CONVENTION}};
 
@@ -845,14 +853,14 @@
     return $$function_internal_calling_convention{$name};
 }
 
-sub all_shared_internal_functions {
+sub all_shared_internal_functions($$) {
     my $self = shift;
     my $function_shared = \%{$self->{FUNCTION_SHARED}};
 
     return sort(keys(%$function_shared));
 }
 
-sub is_shared_internal_function {
+sub is_shared_internal_function($$) {
     my $self = shift;
     my $function_shared = \%{$self->{FUNCTION_SHARED}};
 
@@ -861,7 +869,7 @@
     return $$function_shared{$name};
 }
 
-sub found_shared_internal_function {
+sub found_shared_internal_function($$) {
     my $self = shift;
     my $function_shared = \%{$self->{FUNCTION_SHARED}};
 
@@ -870,7 +878,7 @@
     $$function_shared{$name} = 1;
 }
 
-sub function_internal_arguments {
+sub function_internal_arguments($$) {
     my $self = shift;
     my $function_internal_arguments = \%{$self->{FUNCTION_INTERNAL_ARGUMENTS}};
 
@@ -879,7 +887,7 @@
     return $$function_internal_arguments{$name};
 }
 
-sub function_external_arguments {
+sub function_external_arguments($$) {
     my $self = shift;
     my $function_external_arguments = \%{$self->{FUNCTION_EXTERNAL_ARGUMENTS}};
 
@@ -888,7 +896,7 @@
     return $$function_external_arguments{$name};
 }
 
-sub function_internal_module {
+sub function_internal_module($$) {
     my $self = shift;
     my $function_internal_module = \%{$self->{FUNCTION_INTERNAL_MODULE}};
 
@@ -897,7 +905,7 @@
     return $$function_internal_module{$name};
 }
 
-sub function_external_module {
+sub function_external_module($$) {
     my $self = shift;
     my $function_external_module = \%{$self->{FUNCTION_EXTERNAL_MODULE}};
 
@@ -906,7 +914,7 @@
     return $$function_external_module{$name};
 }
 
-sub function_wine_extension {
+sub function_wine_extension($$$) {
     my $self = shift;
     my $function_wine_extension = \%{$self->{FUNCTION_WINE_EXTENSION}};
 
@@ -916,7 +924,7 @@
     return $$function_wine_extension{$module}{$name};
 }
 
-sub is_function_stub {
+sub is_function_stub($$$) {
     my $self = shift;
     my $module_external_calling_convention = \%{$self->{MODULE_EXTERNAL_CALLING_CONVENTION}};
 
@@ -929,7 +937,7 @@
     return 0;
 }
 
-sub is_function_stub_in_module {
+sub is_function_stub_in_module($$$) {
     my $self = shift;
     my $module_external_calling_convention = \%{$self->{MODULE_EXTERNAL_CALLING_CONVENTION}};
 
@@ -946,7 +954,7 @@
 # class methods
 #
 
-sub _get_all_module_internal_ordinal {
+sub _get_all_module_internal_ordinal($$) {
     my $winapi = shift;
     my $internal_name = shift;
 
@@ -986,24 +994,24 @@
     return @entries;
 }
 
-sub get_all_module_internal_ordinal16 {
-    return _get_all_module_internal_ordinal($win16api, @_);
+sub get_all_module_internal_ordinal16($) {
+    return _get_all_module_internal_ordinal($win16api, $_[0]);
 }
 
-sub get_all_module_internal_ordinal32 {
-    return _get_all_module_internal_ordinal($win32api, @_);
+sub get_all_module_internal_ordinal32($) {
+    return _get_all_module_internal_ordinal($win32api, $_[0]);
 }
 
-sub get_all_module_internal_ordinal {
+sub get_all_module_internal_ordinal($) {
     my @entries = ();
     foreach my $winapi (@winapis) {
-	push @entries, _get_all_module_internal_ordinal($winapi, @_);
+	push @entries, _get_all_module_internal_ordinal($winapi, $_[0]);
     }
 
     return @entries;
 }
 
-sub _get_all_module_external_ordinal {
+sub _get_all_module_external_ordinal($$) {
     my $winapi = shift;
     my $external_name = shift;
 
@@ -1043,18 +1051,18 @@
     return @entries;
 }
 
-sub get_all_module_external_ordinal16 {
-    return _get_all_module_external_ordinal($win16api, @_);
+sub get_all_module_external_ordinal16($) {
+    return _get_all_module_external_ordinal($win16api, $_[0]);
 }
 
-sub get_all_module_external_ordinal32 {
-    return _get_all_module_external_ordinal($win32api, @_);
+sub get_all_module_external_ordinal32($) {
+    return _get_all_module_external_ordinal($win32api, $_[0]);
 }
 
-sub get_all_module_external_ordinal {
+sub get_all_module_external_ordinal($) {
     my @entries = ();
     foreach my $winapi (@winapis) {
-	push @entries, _get_all_module_external_ordinal($winapi, @_);
+	push @entries, _get_all_module_external_ordinal($winapi, $_[0]);
     }
 
     return @entries;