- Minor fixes and reorganizations.
- Added checks for documentation inconsistencies.
diff --git a/tools/winapi_check/winapi_function.pm b/tools/winapi_check/winapi_function.pm
new file mode 100644
index 0000000..a43c50f
--- /dev/null
+++ b/tools/winapi_check/winapi_function.pm
@@ -0,0 +1,161 @@
+package winapi_function;
+
+use strict;
+
+sub new {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = {};
+ bless ($self, $class);
+
+ return $self;
+}
+
+sub file {
+ my $self = shift;
+ my $file = \${$self->{FILE}};
+
+ local $_ = shift;
+
+ if(defined($_)) { $$file = $_; }
+
+ return $$file;
+}
+
+sub documentation {
+ my $self = shift;
+ my $documentation = \${$self->{DOCUMENTATION}};
+
+ local $_ = shift;
+
+ if(defined($_)) { $$documentation = $_; }
+
+ return $$documentation;
+}
+
+sub return_type {
+ my $self = shift;
+ my $return_type = \${$self->{RETURN_TYPE}};
+
+ local $_ = shift;
+
+ if(defined($_)) { $$return_type = $_; }
+
+ return $$return_type;
+}
+
+sub calling_convention {
+ my $self = shift;
+ my $calling_convention = \${$self->{CALLING_CONVENTION}};
+
+ local $_ = shift;
+
+ if(defined($_)) { $$calling_convention = $_; }
+
+ return $$calling_convention;
+}
+
+sub name {
+ my $self = shift;
+ my $name = \${$self->{NAME}};
+
+ local $_ = shift;
+
+ if(defined($_)) { $$name = $_; }
+
+ return $$name;
+}
+
+sub arguments {
+ my $self = shift;
+ my $arguments = \${$self->{ARGUMENTS}};
+
+ local $_ = shift;
+
+ if(defined($_)) { $$arguments = $_; }
+
+ return $$arguments;
+}
+
+sub module16 {
+ my $self = shift;
+ my $module16 = \${$self->{MODULE16}};
+
+ local $_ = shift;
+
+ if(defined($_)) { $$module16 = $_; }
+ return $$module16;
+}
+
+sub module32 {
+ my $self = shift;
+ my $module32 = \${$self->{MODULE32}};
+
+ local $_ = shift;
+
+ if(defined($_)) { $$module32 = $_; }
+ return $$module32;
+}
+
+sub statements {
+ my $self = shift;
+ my $statements = \${$self->{STATEMENTS}};
+
+ local $_ = shift;
+
+ if(defined($_)) { $$statements = $_; }
+
+ return $$statements;
+}
+
+sub module {
+ my $self = shift;
+ my $module16 = \${$self->{MODULE16}};
+ my $module32 = \${$self->{MODULE32}};
+
+ my $module;
+ if(defined($$module16) && defined($$module32)) {
+ $module = "$$module16 & $$module32";
+ } elsif(defined($$module16)) {
+ $module = $$module16;
+ } elsif(defined($$module32)) {
+ $module = $$module32;
+ } else {
+ $module = "";
+ }
+}
+
+sub function_called {
+ my $self = shift;
+ my $called_function_names = \%{$self->{CALLED_FUNCTION_NAMES}};
+
+ my $name = shift;
+
+ $$called_function_names{$name}++;
+}
+
+sub function_called_by {
+ my $self = shift;
+ my $called_by_function_names = \%{$self->{CALLED_BY_FUNCTION_NAMES}};
+
+ my $name = shift;
+
+ $$called_by_function_names{$name}++;
+}
+
+sub called_function_names {
+ my $self = shift;
+ my $called_function_names = \%{$self->{CALLED_FUNCTION_NAMES}};
+
+ return sort(keys(%$called_function_names));
+}
+
+sub called_by_function_names {
+ my $self = shift;
+ my $called_by_function_names = \%{$self->{CALLED_BY_FUNCTION_NAMES}};
+
+ return sort(keys(%$called_by_function_names));
+}
+
+
+1;