winapi_fixup: There is not much point for this tool so remove it.
Francois Gouget
fgouget at free.fr
Tue May 26 05:10:07 CDT 2009
---
Mostly what this tool does is try to fix some of the issues detected by
winapi_check. The problem is that:
* it's currently broken
* the issues it can fix are not so numerous so that they can easily be
fixed by hand
* it gets things wrong so it tends to break the code
So I think the better approach is to get rid of this tool and fix up
winapi_check so it works better.
tools/winapi/winapi_fixup | 232 ----------------
tools/winapi/winapi_fixup_documentation.pm | 402 ---------------------------
tools/winapi/winapi_fixup_editor.pm | 407 ----------------------------
tools/winapi/winapi_fixup_options.pm | 68 -----
tools/winapi/winapi_fixup_statements.pm | 337 -----------------------
5 files changed, 0 insertions(+), 1446 deletions(-)
delete mode 100755 tools/winapi/winapi_fixup
delete mode 100644 tools/winapi/winapi_fixup_documentation.pm
delete mode 100644 tools/winapi/winapi_fixup_editor.pm
delete mode 100644 tools/winapi/winapi_fixup_options.pm
delete mode 100644 tools/winapi/winapi_fixup_statements.pm
diff --git a/tools/winapi/winapi_fixup b/tools/winapi/winapi_fixup
deleted file mode 100755
index 334aa52..0000000
--- a/tools/winapi/winapi_fixup
+++ /dev/null
@@ -1,232 +0,0 @@
-#!/usr/bin/perl -w
-
-# Copyright 2001 Patrik Stridvall
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-#
-
-use strict;
-
-BEGIN {
- $0 =~ m%^(.*?/?tools)/winapi/winapi_fixup$%;
- require "$1/winapi/setup.pm";
-}
-
-use config qw(
- files_filter files_skip
- $current_dir $wine_dir $winapi_dir
-);
-use output qw($output);
-use winapi_fixup_options qw($options);
-
-if($options->progress) {
- $output->enable_progress;
-} else {
- $output->disable_progress;
-}
-
-use winapi_c_parser;
-use c_parser;
-use type;
-
-use winapi_fixup_documentation qw(fixup_documentation);
-use winapi_fixup_editor;
-use winapi_fixup_statements qw(fixup_statements);
-
-my @c_files = $options->c_files;
- at c_files = files_skip(@c_files);
- at c_files = files_filter("winelib", @c_files);
-
-my $progress_output;
-my $progress_current = 0;
-my $progress_max = scalar(@c_files);
-
-foreach my $file (@c_files) {
- my $editor = new winapi_fixup_editor($file);
-
- $progress_current++;
- $output->progress("$file (file $progress_current of $progress_max)");
- $output->prefix("$file:");
-
- {
- open(IN, "< $file") || die "Error: Can't open $file: $!\n";
- local $/ = undef;
- $_ = <IN>;
- close(IN);
- }
-
- my $max_line = 0;
- {
- local $_ = $_;
- while(s/^.*?\n//) { $max_line++; }
- if($_) { $max_line++; }
- }
-
- my $parser;
- if (1) {
- $parser = new c_parser($file);
- } else {
- $parser = new winapi_c_parser($file);
- }
-
- my $function;
- my $line;
-
- my $update_output = sub {
- my $progress = "";
- my $prefix = "";
-
- $progress .= "$file (file $progress_current of $progress_max)";
- $prefix .= "$file:";
-
- if(defined($function)) {
- my $name = $function->name;
- my $begin_line = $function->begin_line;
- my $begin_column = $function->begin_column;
-
- $progress .= ": function $name";
- $prefix .= "$begin_line.$begin_column: function $name: ";
- }
-
- if(defined($line)) {
- $progress .= ": line $line of $max_line";
- }
-
- $output->progress($progress);
- $output->prefix($prefix);
- };
-
- my $found_preprocessor = sub {
- my $begin_line = shift;
- my $begin_column = shift;
- my $preprocessor = shift;
-
- # $output->write("$begin_line.$begin_column: preprocessor: $preprocessor\n");
-
- return 1;
- };
-
- $parser->set_found_preprocessor_callback($found_preprocessor);
-
- my $found_comment = sub {
- my $begin_line = shift;
- my $begin_column = shift;
- my $comment = shift;
-
- # $output->write("$begin_line.$begin_column: comment: $comment\n");
-
- return 1;
- };
-
- $parser->set_found_comment_callback($found_comment);
-
- my $found_line = sub {
- $line = shift;
- # local $_ = shift;
-
- &$update_output;
-
- # $output->progress("$file: line $line of ?");
- };
-
- $parser->set_found_line_callback($found_line);
-
- my $found_declaration = sub {
- my $begin_line = shift;
- my $begin_column = shift;
- my $end_line = shift;
- my $end_column = shift;
- my $declaration = shift;
-
- # $output->write("$begin_line.$begin_column-$end_line.$end_column: declaration: \\\n$declaration\n");
-
- return 1;
- };
-
- $parser->set_found_declaration_callback($found_declaration);
-
- my $found_function = sub {
- $function = shift;
-
- &$update_output;
-
- my $name = $function->name;
- my $begin_line = $function->begin_line;
- my $begin_column = $function->begin_column;
- my $end_line = $function->end_line;
- my $end_column = $function->end_column;
-
- if($options->documentation) {
- # fixup_documentation($function, $editor);
- }
-
- if($options->statements) {
- fixup_statements($function, $editor);
- }
-
- my $statements = $function->statements;
- if(!defined($statements)) {
- $function = undef;
- $output->prefix("$file: ");
- } else {
- # $output->write("$begin_line.$begin_column-$end_line.$end_column: function $name\n");
- }
-
- return 0;
- };
-
- $parser->set_found_function_callback($found_function);
-
- my $found_variable = sub {
- my $begin_line = shift;
- my $begin_column = shift;
- my $linkage = shift;
- my $type = shift;
- my $name = shift;
-
- # $output->write("$begin_line.$begin_column: $linkage $type $name = /* ... */\n");
-
- return 1;
- };
-
- $parser->set_found_variable_callback($found_variable);
-
- my $found_function_call = sub {
- my $begin_line = shift;
- my $begin_column = shift;
- my $end_line = shift;
- my $end_column = shift;
- my $name = shift;
- my $arguments = shift;
-
- $output->write("$begin_line.$begin_column-$end_line.$end_column: $name(" . join(", ", @$arguments) . ")\n");
-
- return 1;
- };
-
- $parser->set_found_function_call_callback($found_function_call);
-
- {
- my $line = 1;
- my $column = 0;
- if(!$parser->parse_c_file(\$_, \$line, \$column)) {
- $output->write("can't parse file\n");
- }
- }
-
- $output->prefix("");
-
- $editor->flush;
-}
diff --git a/tools/winapi/winapi_fixup_documentation.pm b/tools/winapi/winapi_fixup_documentation.pm
deleted file mode 100644
index 21ef75f..0000000
--- a/tools/winapi/winapi_fixup_documentation.pm
+++ /dev/null
@@ -1,402 +0,0 @@
-#
-# Copyright 1999, 2000, 2001 Patrik Stridvall
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-#
-
-package winapi_fixup_documentation;
-
-use strict;
-
-use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
-require Exporter;
-
- at ISA = qw(Exporter);
- at EXPORT = qw();
- at EXPORT_OK = qw(fixup_documentation);
-
-use config qw($current_dir $wine_dir);
-use modules qw($modules);
-use options qw($options);
-use output qw($output);
-use winapi qw($win16api $win32api @winapis);
-
-my %documentation_line_used;
-
-sub fixup_documentation($$) {
- my $function = shift;
- my $editor = shift;
-
- my $file = $function->file;
- my $documentation_line = $function->documentation_line;
- my $documentation = $function->documentation;
- my $function_line = $function->function_line;
- my $linkage = $function->linkage;
- my $return_type = $function->return_type;
- my $calling_convention = $function->calling_convention;
- my $internal_name = $function->internal_name;
- my $statements = $function->statements;
-
- if($linkage eq "static" ||
- ($linkage eq "extern" && !defined($statements)) ||
- ($linkage eq "" && !defined($statements)))
- {
- return;
- }
-
- my @external_names = $function->external_names;
- if($#external_names < 0) {
- return;
- }
-
- if($documentation_line_used{$file}{documentation_line}) {
- $documentation = undef;
- }
- $documentation_line_used{$file}{$documentation_line}++;
-
- my @module_ordinal_entries = ();
- foreach my $entry2 ($function->get_all_module_ordinal) {
- (my $external_name2, my $module2, my $ordinal2) = @$entry2;
- if(($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"))
- {
- push @module_ordinal_entries, $entry2;
- }
- }
-
- my $spec_modified = 0;
-
- if($options->stub && defined($documentation)) {
- my $calling_convention16 = $function->calling_convention16;
- my $calling_convention32 = $function->calling_convention32;
-
- foreach my $winapi (@winapis) {
- my @entries = ();
- my $module = $winapi->function_internal_module($internal_name);
- my $ordinal = $winapi->function_internal_ordinal($internal_name);
-
- if($winapi->is_function_stub_in_module($module, $internal_name)) {
- my $external_name = $internal_name;
- if($winapi->name eq "win16") {
- $external_name =~ s/(?:_)?16([AW]?)$//;
- if(defined($1)) {
- $external_name .= $1;
- }
- }
- push @entries, [$external_name, $module, $ordinal];
- }
-
- foreach (split(/\n/, $documentation)) {
- if(/^\s*\*\s*(\S+)\s*[\(\[]\s*(\w+)\s*\.\s*([^\s\)\]]*)\s*[\)\]].*?$/) {
- my $external_name = $1;
- my $module = lc($2);
- my $ordinal = $3;
-
- if($external_name ne "@" &&
- $winapi->is_module($module) &&
- $winapi->is_function_stub_in_module($module, $external_name) &&
- $internal_name !~ /^\U$module\E_\Q$external_name\E$/)
- {
- push @entries, [$external_name, $module, $ordinal];
- }
- }
- }
-
- foreach my $entry (@entries) {
- (my $external_name, my $module, my $ordinal) = @$entry;
-
- my $refargument_types = $function->argument_types;
-
- if(!defined($refargument_types)) {
- next;
- }
-
- my $abort = 0;
- my $n;
- my @argument_kinds = map {
- my $type = $_;
- my $kind;
- if($type ne "..." && !defined($kind = $winapi->translate_argument($type))) {
- $output->write("no win*.api translation defined: " . $type . "\n");
- }
-
- # FIXME: Kludge
- if(defined($kind) && $kind eq "longlong") {
- $n += 2;
- ("long", "long");
- } elsif(defined($kind)) {
- $n++;
- $kind;
- } elsif($type eq "...") {
- if($winapi->name eq "win16") {
- $calling_convention16 = "pascal"; # FIXME: Is this correct?
- } else {
- $calling_convention32 = "varargs";
- }
- ();
- } else {
- $abort = 1;
- $n++;
- "undef";
- }
- } @$refargument_types;
-
- my $search = "^\\s*$ordinal\\s+stub\\s+$external_name\\s*(?:#.*?)?\$";
- my $replace;
- if($winapi->name eq "win16") {
- $replace = "$ordinal $calling_convention16 $external_name(@argument_kinds) $internal_name";
- } else {
- $replace = "$ordinal $calling_convention32 $external_name(@argument_kinds) $internal_name";
- }
-
- if(!$abort) {
- $spec_modified = 1;
- $editor->replace_spec_file($module, $search, $replace);
- }
- }
- }
- }
-
- my %found_external_names;
- foreach my $external_name (@external_names) {
- $found_external_names{$external_name} = {};
- }
-
- my $documentation_modified = 0;
-
- if(!$spec_modified &&
- (defined($documentation) && !$documentation_modified) &&
- ($options->documentation_name || $options->documentation_ordinal ||
- $options->documentation_missing))
- {
- local $_;
-
- my $line3;
- my $search;
- my $replace;
-
- my $count = 0;
- my $line2 = $documentation_line - 1;
- foreach (split(/\n/, $documentation)) {
- $line2++;
- if(/^(\s*\*\s*(\S+)\s*)((?:\s*[\(\[]\s*\w+(?:\s*\.\s*[^\s\)\]]*\s*)?[\)\]])+)(.*?)$/) {
- my $part1 = $1;
- my $external_name = $2;
- my $part3 = $3;
- my $part4 = $4;
-
- $part4 =~ s/\s*$//;
-
- my @entries = ();
- while($part3 =~ s/^\s*([\(\[]\s*(\w+)(?:\s*\.\s*([^\s\)\]]*)\s*)?[\)\]])//) {
- push @entries, [$1, $2, $3];
- }
-
- my $found = 0;
- foreach my $external_name2 (@external_names) {
- if($external_name eq $external_name2) {
- foreach my $entry (@entries) {
- (undef, my $module, undef) = @$entry;
- $found_external_names{$external_name2}{$module} = 1;
- }
- $found = 1;
- last;
- }
- }
-
- my $replaced = 0;
- my $replace2 = "";
- foreach my $entry (@entries) {
- my $part12 = $part1;
- (my $part32, my $module, my $ordinal) = @$entry;
-
- foreach my $entry2 (@module_ordinal_entries) {
- (my $external_name2, my $module2, my $ordinal2) = @$entry2;
-
- if($options->documentation_name && lc($module) eq $module2 &&
- $external_name ne $external_name2)
- {
- if(!$found && $part12 =~ s/\b\Q$external_name\E\b/$external_name2/) {
- $external_name = $external_name2;
- $replaced++;
- }
- }
-
- if($options->documentation_ordinal &&
- $external_name eq $external_name2 &&
- lc($module) eq $module2 &&
- ($#entries > 0 || !defined($ordinal) || ($ordinal ne $ordinal2)))
- {
- if(defined($ordinal)) {
- if($part32 =~ s/\Q$module\E\s*.\s*\Q$ordinal\E/\U$module2\E.$ordinal2/ || $#entries > 0) {
- $replaced++;
- }
- } else {
- if($part32 =~ s/\Q$module\E/\U$module2\E.$ordinal2/ || $#entries > 0) {
- $replaced++;
- }
- }
- }
- }
- if($replace2) { $replace2 .= "\n"; }
- $replace2 .= "$part12$part32$part4";
- }
-
- if($replaced > 0) {
- $line3 = $line2;
- $search = "^\Q$_\E\$";
- $replace = $replace2;
- }
- $count++;
- } elsif(/^(\s*\*\s*)([^\s\(]+)(?:\(\))?\s*$/) {
- my $part1 = $1;
- my $external_name = $2;
-
- if($internal_name =~ /^(?:\S+_)?\Q$external_name\E(?:16)?$/) {
- foreach my $entry (@module_ordinal_entries) {
- (my $external_name2, my $module, my $ordinal) = @$entry;
-
- $line3 = $line2;
- $search = "^\Q$_\E\$";
- $replace = "$part1$external_name2 (\U$module\E.$ordinal)";
- }
- $count++;
- }
- }
- }
-
- if(defined($line3) && defined($search) && defined($replace)) {
- if($count > 1 || $#external_names >= 1) {
- $output->write("multiple entries (fixup not supported)\n");
- # $output->write("s/$search/$replace/\n");
- # $output->write("@external_names\n");
- } else {
- $documentation_modified = 1;
- $editor->substitute_line($line3, $search, $replace);
- }
- }
- }
-
- if(!$spec_modified && !$documentation_modified &&
- $options->documentation_missing && defined($documentation))
- {
- my $part1;
- my $part2;
- my $part3;
- my $part4;
- my $line3 = 0;
-
- my $line2 = $documentation_line - 1;
- foreach (split(/\n/, $documentation)) {
- $line2++;
- if(/^(\s*\*\s*)(\S+\s*)([\(\[])\s*\w+\s*\.\s*[^\s\)\]]*\s*([\)\]]).*?$/) {
- $part1 = $1;
- $part2 = $2;
- $part3 = $3;
- $part4 = $4;
-
- $part2 =~ s/\S/ /g;
-
- $line3 = $line2 + 1;
- }
- }
-
- foreach my $entry2 (@module_ordinal_entries) {
- (my $external_name2, my $module2, my $ordinal2) = @$entry2;
-
- my $found = 0;
- foreach my $external_name (keys(%found_external_names)) {
- foreach my $module3 (keys(%{$found_external_names{$external_name}})) {
- if($external_name eq $external_name2 && uc($module2) eq $module3) {
- $found = 1;
- }
- }
- }
- # FIXME: Not 100% correct
- if(!$found &&
- !$win16api->is_function_stub_in_module($module2, $internal_name) &&
- !$win32api->is_function_stub_in_module($module2, $internal_name))
- {
- if($line3 > 0) {
- $documentation_modified = 1;
- $part2 = $external_name2 . " " x (length($part2) - length($external_name2));
- $editor->insert_line($line3, "$part1$part2$part3\U$module2\E.$ordinal2$part4\n");
- } else {
- $output->write("$external_name2 (\U$module2\E.$ordinal2) missing (fixup not supported)\n");
- }
- }
- }
- }
-
- if(!$documentation_modified &&
- defined($documentation) &&
- $options->documentation_wrong)
- {
- my $line2 = $documentation_line - 1;
- foreach (split(/\n/, $documentation)) {
- $line2++;
- if(/^\s*\*\s*(\S+)\s*[\(\[]\s*(\w+)\s*\.\s*([^\s\)\]]*)\s*[\)\]].*?$/) {
- my $external_name = $1;
- my $module = $2;
- my $ordinal = $3;
-
- my $found = 0;
- foreach my $entry2 (@module_ordinal_entries) {
- (my $external_name2, my $module2, my $ordinal2) = @$entry2;
-
- if($external_name eq $external_name2 &&
- lc($module) eq $module2 &&
- $ordinal eq $ordinal2)
- {
- $found = 1;
- }
- }
- if(!$found) {
- if(1) {
- $documentation_modified = 1;
-
- $editor->delete_line($line2, "^\Q$_\E\$");
- } else {
- $output->write("$external_name (\U$module\E.$ordinal) wrong (fixup not supported)\n");
- };
- }
- }
- }
- }
-
- if(!$spec_modified && !$documentation_modified && !defined($documentation))
- {
- my $insert = "";
- foreach my $winapi (@winapis) {
- my $external_name = $winapi->function_external_name($internal_name);
- my $module = $winapi->function_internal_module($internal_name);
- my $ordinal = $winapi->function_internal_ordinal($internal_name);
-
- if(defined($external_name) && defined($module) && defined($ordinal)) {
- $insert .= " *\t\t$external_name (\U$module\E.$ordinal)\n";
- }
- }
- if($insert) {
- $editor->insert_line($function_line,
- "/" . "*" x 71 . "\n" .
- "$insert" .
- " */\n");
- }
- }
-}
-
-1;
diff --git a/tools/winapi/winapi_fixup_editor.pm b/tools/winapi/winapi_fixup_editor.pm
deleted file mode 100644
index 1548e3c..0000000
--- a/tools/winapi/winapi_fixup_editor.pm
+++ /dev/null
@@ -1,407 +0,0 @@
-#
-# Copyright 1999, 2000, 2001 Patrik Stridvall
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-#
-
-package winapi_fixup_editor;
-
-use strict;
-
-use options qw($options);
-use output qw($output);
-use winapi qw($win16api $win32api @winapis);
-
-use util;
-
-sub new($$) {
- my $proto = shift;
- my $class = ref($proto) || $proto;
- my $self = {};
- bless ($self, $class);
-
- my $file = \${$self->{FILE}};
-
- $$file = shift;
-
- return $self;
-}
-
-sub add_trigger($$$) {
- my $self = shift;
-
- my $triggers = \%{$self->{TRIGGERS}};
-
- my $line = shift;
- my $action = shift;
-
- if(!defined($$triggers{$line})) {
- $$triggers{$line} = [];
- }
-
- push @{$$triggers{$line}}, $action;
-}
-
-sub replace($$$$$$) {
- my $self = shift;
-
- my $begin_line = shift;
- my $begin_column = shift;
- my $end_line = shift;
- my $end_column = shift;
- my $replace = shift;
-
- my $file = \${$self->{FILE}};
-
- my $line = $begin_line;
- my $action = {};
-
- $self->add_trigger($begin_line, {
- type => "replace",
- begin_line => $begin_line,
- begin_column => $begin_column,
- end_line => $end_line,
- end_column => $end_column,
- replace => $replace
- });
-}
-
-sub flush($) {
- my $self = shift;
-
- my $file = \${$self->{FILE}};
- my $triggers = \%{$self->{TRIGGERS}};
-
- my $editor = sub {
- local *IN = shift;
- local *OUT = shift;
-
- my $modified = 0;
-
- my $again = 0;
- my $lookahead = 0;
- my $lookahead_count = 0;
- LINE: while($again || defined(my $current = <IN>)) {
- if(!$again) {
- chomp $current;
-
- if($lookahead) {
- $lookahead = 0;
- $_ .= "\n" . $current;
- $lookahead_count++;
- } else {
- $_ = $current;
- $lookahead_count = 0;
- }
- } else {
- $lookahead_count = 0;
- $again = 0;
- }
-
- my $line = $. - $lookahead_count;
- foreach my $action (@{$$triggers{$line}}) {
- if($. < $action->{end_line}) {
- $lookahead = 1;
- next LINE;
- }
-
- my $type = $action->{type};
- my $begin_line = $action->{begin_line};
- my $begin_column = $action->{begin_column};
- my $end_line = $action->{end_line};
- my $end_column = $action->{end_column};
-
- if($type eq "replace") {
- my $replace = $action->{replace};
-
- my @lines = split(/\n/, $_);
- if($#lines < 0) {
- @lines = ($_);
- }
-
- my $begin = "";
- my $column = 0;
- $_ = $lines[0];
- while($column < $begin_column - 1 && s/^.//) {
- $begin .= $&;
- if($& eq "\t") {
- $column = $column + 8 - $column % 8;
- } else {
- $column++;
- }
- }
-
- my $column2 = 0;
- $_ = $lines[$#lines];
- while($column2 < $end_column && s/^.//) {
- if($& eq "\t") {
- $column2 = $column2 + 8 - $column2 % 8;
- } else {
- $column2++;
- }
- }
- my $end = $_;
-
- $_ = "$begin$replace$end";
- if($options->modify) {
- $modified = 1;
- } else {
- $output->write("$$file:$begin_line.$begin_column-$end_line.$end_column: $replace\n");
- }
- }
- }
-
- print OUT "$_\n";
- }
-
- return $modified;
- };
-
- my $modified = 0;
- if(1) {
- $modified = edit_file($$file, $editor);
- }
-
- if(!$modified) {
- $self->flush_old;
- }
-}
-
-########################################################################
-# Hack for backward compabillity
-#
-
-my %insert_line;
-my %substitute_line;
-my %delete_line;
-
-my %spec_file;
-
-sub flush_old($) {
- my $self = shift;
-
- my $file = ${$self->{FILE}};
-
- my $editor = sub {
- local *IN = shift;
- local *OUT = shift;
-
- my $modified = 0;
- while(<IN>) {
- chomp;
-
- my $line;
-
- $line = $insert_line{$.};
- if(defined($line)) {
- if($options->modify) {
- $_ = "$line$_";
- $modified = 1;
- } else {
- my $line2 = $line; chomp($line2);
- my @line2 = split(/\n/, $line2);
- if($#line2 > 0) {
- $output->write("$file: $.: insert: \\\n");
- foreach my $line2 (@line2) {
- $output->write("'$line2'\n");
- }
- } else {
- $output->write("$file: $.: insert: '$line2'\n");
- }
- }
- }
-
- my $search = $substitute_line{$.}{search};
- my $replace = $substitute_line{$.}{replace};
-
- if(defined($search) && defined($replace)) {
- my $modified2 = 0;
- if(s/$search/$replace/) {
- if($options->modify) {
- $modified = 1;
- }
- $modified2 = 1;
- }
-
- if(!$options->modify || !$modified2) {
- my $search2;
- my $replace2;
- if(!$modified2) {
- $search2 = "unmatched search";
- $replace2 = "unmatched replace";
- } else {
- $search2 = "search";
- $replace2 = "replace";
- }
- $output->write("$file: $.: $search2 : '$search'\n");
-
- my @replace2 = split(/\n/, $replace);
- if($#replace2 > 0) {
- $output->write("$file: $.: $replace2: \\\n");
- foreach my $replace2 (@replace2) {
- $output->write("'$replace2'\n");
- }
- } else {
- $output->write("$file: $.: $replace2: '$replace'\n");
- }
- }
- }
-
- $line = $delete_line{$.};
- if(defined($line)) {
- if(/$line/) {
- if($options->modify) {
- $modified = 1;
- next;
- } else {
- $output->write("$file: $.: delete: '$line'\n");
- }
- } else {
- $output->write("$file: $.: unmatched delete: '$line'\n");
- }
- }
-
- print OUT "$_\n";
- }
-
- return $modified;
- };
-
- my $n = 0;
- while(defined(each %insert_line)) { $n++; }
- while(defined(each %substitute_line)) { $n++; }
- while(defined(each %delete_line)) { $n++; }
- if($n > 0) {
- edit_file($file, $editor);
- }
-
- foreach my $module (sort(keys(%spec_file))) {
- my $file;
- foreach my $winapi (@winapis) {
- $file = ($winapi->module_file($module) || $file);
- }
-
- if(defined($file)) {
- $file = file_normalize($file);
- }
-
- my @substitutes = @{$spec_file{$module}};
-
- my $editor = sub {
- local *IN = shift;
- local *OUT = shift;
-
- my $modified = 0;
- while(<IN>) {
- chomp;
-
- my @substitutes2 = ();
- foreach my $substitute (@substitutes) {
- my $search = $substitute->{search};
- my $replace = $substitute->{replace};
-
- if(s/$search/$replace/) {
- if($options->modify) {
- $modified = 1;
- } else {
- $output->write("$file: search : '$search'\n");
- $output->write("$file: replace: '$replace'\n");
- }
- next;
- } else {
- push @substitutes2, $substitute;
- }
- }
- @substitutes = @substitutes2;
-
- print OUT "$_\n";
- }
-
- return $modified;
- };
-
- if(defined($file)) {
- edit_file($file, $editor);
- } else {
- $output->write("$module: doesn't have any spec file\n");
- }
-
- if($#substitutes >= 0) {
- foreach my $substitute (@substitutes) {
- my $search = $substitute->{search};
- my $replace = $substitute->{replace};
-
- $output->write("$file: unmatched search : '$search'\n");
- $output->write("$file: unmatched replace: '$replace'\n");
- }
- }
-
- }
-
- %insert_line = ();
- %substitute_line = ();
- %delete_line = ();
-
- %spec_file = ();
-}
-
-sub delete_line($$$) {
- my $self = shift;
-
- my $line = shift;
- my $pattern = shift;
-
- $delete_line{$line} = $pattern;
-}
-
-sub insert_line($$$) {
- my $self = shift;
-
- my $line = shift;
- my $insert = shift;
-
- $insert_line{$line} = $insert;
-}
-
-sub substitute_line($$$$) {
- my $self = shift;
-
- my $line = shift;
- my $search = shift;
- my $replace = shift;
-
- $substitute_line{$line}{search} = $search;
- $substitute_line{$line}{replace} = $replace;
-}
-
-sub replace_spec_file($$$$) {
- my $self = shift;
-
- my $module = shift;
- my $search = shift;
- my $replace = shift;
-
- my $substitute = {};
- $substitute->{search} = $search;
- $substitute->{replace} = $replace;
-
- if(!defined($spec_file{$module})) {
- $spec_file{$module} = [];
- }
-
- push @{$spec_file{$module}}, $substitute;
-}
-
-1;
diff --git a/tools/winapi/winapi_fixup_options.pm b/tools/winapi/winapi_fixup_options.pm
deleted file mode 100644
index ee0d9e6..0000000
--- a/tools/winapi/winapi_fixup_options.pm
+++ /dev/null
@@ -1,68 +0,0 @@
-#
-# Copyright 1999, 2000, 2001 Patrik Stridvall
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-#
-
-package winapi_fixup_options;
-use base qw(options);
-
-use strict;
-
-use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
-require Exporter;
-
- at ISA = qw(Exporter);
- at EXPORT = qw();
- at EXPORT_OK = qw($options);
-
-use options qw($options);
-
-my %options_long = (
- "debug" => { default => 0, description => "debug mode" },
- "help" => { default => 0, description => "help mode" },
- "verbose" => { default => 0, description => "verbose mode" },
-
- "progress" => { default => 1, description => "show progress" },
-
- "win16" => { default => 1, description => "Win16 fixup" },
- "win32" => { default => 1, description => "Win32 fixup" },
-
- "local" => { default => 1, description => "local fixup" },
- "documentation" => { default => 1, parent => "local", description => "documentation fixup" },
- "documentation-missing" => { default => 1, parent => "documentation", description => "documentation missing fixup" },
- "documentation-name" => { default => 1, parent => "documentation", description => "documentation name fixup" },
- "documentation-ordinal" => { default => 1, parent => "documentation", description => "documentation ordinal fixup" },
- "documentation-wrong" => { default => 1, parent => "documentation", description => "documentation wrong fixup" },
- "statements" => { default => 1, parent => "local", description => "statements fixup" },
- "statements-windowsx" => { default => 0, parent => "local", description => "statements windowsx fixup" },
- "stub" => { default => 0, parent => "local", description => "stub fixup" },
-
- "global" => { default => 1, description => "global fixup" },
-
- "modify" => { default => 0, description => "actually perform the fixups" },
-);
-
-my %options_short = (
- "d" => "debug",
- "?" => "help",
- "v" => "verbose"
-);
-
-my $options_usage = "usage: winapi_fixup [--help] [<files>]\n";
-
-$options = '_options'->new(\%options_long, \%options_short, $options_usage);
-
-1;
diff --git a/tools/winapi/winapi_fixup_statements.pm b/tools/winapi/winapi_fixup_statements.pm
deleted file mode 100644
index df1d811..0000000
--- a/tools/winapi/winapi_fixup_statements.pm
+++ /dev/null
@@ -1,337 +0,0 @@
-#
-# Copyright 1999, 2000, 2001 Patrik Stridvall
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-#
-
-package winapi_fixup_statements;
-
-use strict;
-
-use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
-require Exporter;
-
- at ISA = qw(Exporter);
- at EXPORT = qw();
- at EXPORT_OK = qw(fixup_statements);
-
-use config qw($wine_dir);
-use options qw($options);
-use output qw($output);
-
-use c_parser;
-use winapi_module_user qw(
- get_message_result_kind
- get_message_wparam_kind
- get_message_lparam_kind
-);
-
-########################################################################
-# fixup_function_call
-
-sub fixup_function_call($$) {
- my $name = shift;
- my @arguments = @{(shift)};;
-
- return "$name(" . join(", ", @arguments) . ")";
-}
-
-########################################################################
-# _parse_makelong
-
-sub _parse_makelong($) {
- local $_ = shift;
-
- my $low;
- my $high;
-
- my $name;
- my @arguments;
- my @argument_lines;
- my @argument_columns;
-
- my $parser = new c_parser;
-
- my $line = 1;
- my $column = 0;
- if($parser->parse_c_function_call(\$_, \$line, \$column, \$name, \@arguments, \@argument_lines, \@argument_columns) &&
- $name =~ /^MAKE(?:LONG|LPARAM|LRESULT|WPARAM)$/)
- {
- $low = $arguments[0];
- $high = $arguments[1];
- } elsif(/^(?:\(\w+\)\s*)?0L?$/) {
- $low = "0";
- $high = "0";
- } else {
- $low = "($_) & 0xffff";
- $high = "($_) << 16";
- }
-
- $low =~ s/^\s*(.*?)\s*$/$1/;
- $high =~ s/^\s*(.*?)\s*$/$1/;
-
- return ($low, $high);
-}
-
-########################################################################
-# fixup_function_call_2_windowsx
-
-sub fixup_user_message_2_windowsx($$) {
- my $name = shift;
- (my $hwnd, my $msg, my $wparam, my $lparam) = @{(shift)};
-
- if($msg !~ /^WM_/) {
- return undef;
- } elsif($msg =~ /^(?:WM_BEGINDRAG|WM_ENTERMENULOOP|WM_EXITMENULOOP|WM_HELP|
- WM_ISACTIVEICON|WM_LBTRACKPOINT|WM_NEXTMENU)$/x)
- {
- return undef;
- } elsif($msg =~ /^WM_(?:GET|SET)TEXT$/) {
- return undef;
- }
-
- my $suffix;
- $name =~ /([AW])?$/;
- if(defined($1)) {
- $suffix = $1;
- } else {
- $suffix = "";
- }
-
- $wparam =~ s/^\(WPARAM\)\s*//;
- $lparam =~ s/^\(LPARAM\)\s*//;
-
- my @arguments;
- if($msg =~ /^WM_COMMAND$/) {
- (my $id, my $code_notify) = _parse_makelong($wparam);
- my $hwndctl = $lparam;
- @arguments = ($id, $hwndctl, $code_notify);
- } elsif($msg =~ /^WM_(?:COPY|CUT|PASTE)$/) {
- @arguments = ();
- } elsif($msg =~ /^WM_(?:CHARTO|VKEYTO)ITEM$/) {
- (my $key, my $caret) = _parse_makelong($wparam);
- my $hwndctl = $lparam;
- @arguments = ($key, $hwndctl, $caret);
- } elsif($msg =~ /^WM_(?:COMPARE|DELETE|DRAW|MEASURE)ITEM$/) {
- @arguments = ($lparam);
- } elsif($msg =~ s/^WM_GETTEXT$/$&$suffix/) {
- @arguments = ($wparam, $lparam);
- } elsif($msg =~ /^WM_INITMENU$/) {
- my $hmenu = $wparam;
- @arguments = ($hmenu);
- } elsif($msg =~ /^WM_INITMENUPOPUP$/) {
- my $hmenu = $wparam;
- (my $item, my $system_menu) = _parse_makelong($lparam);
- @arguments = ($hmenu, $item, $system_menu);
- } elsif($msg =~ /^WM_MENUCHAR$/) {
- (my $ch, my $flags) = _parse_makelong($wparam);
- my $hmenu = $lparam;
- @arguments = ($ch, $flags, $hmenu);
- } elsif($msg =~ /^WM_MENUSELECT$/) {
- (my $item, my $flags) = _parse_makelong($wparam);
- my $hmenu = $lparam;
- my $hmenu_popup = "NULL"; # FIXME: Is this really correct?
- @arguments = ($hmenu, $item, $hmenu_popup, $flags);
- } elsif($msg =~ s/^WM_(NC)?LBUTTONDBLCLK$/WM_$1LBUTTONDOWN/) {
- my $double_click = "TRUE";
- my $key_flags = $wparam;
- (my $x, my $y) = _parse_makelong($lparam);
- @arguments = ($double_click, $x, $y, $key_flags);
- } elsif($msg =~ /^WM_(NC)?LBUTTONDOWN$/) {
- my $double_click = "FALSE";
- my $key_flags = $wparam;
- (my $x, my $y) = _parse_makelong($lparam);
- @arguments = ($double_click, $x, $y, $key_flags);
- } elsif($msg =~ /^WM_LBUTTONUP$/) {
- my $key_flags = $wparam;
- (my $x, my $y) = _parse_makelong($lparam);
- @arguments = ($x, $y, $key_flags);
- } elsif($msg =~ /^WM_SETCURSOR$/) {
- my $hwnd_cursor = $wparam;
- (my $code_hit_test, my $msg2) = _parse_makelong($lparam);
- @arguments = ($hwnd_cursor, $code_hit_test, $msg2);
- } elsif($msg =~ s/^WM_SETTEXT$/$&$suffix/) {
- my $text = $lparam;
- @arguments = ($text);
- } elsif($msg =~ /^WM_(?:SYS)?KEYDOWN$/) {
- my $vk = $wparam;
- (my $repeat, my $flags) = _parse_makelong($lparam);
- @arguments = ($vk, $repeat, $flags);
- } else {
- @arguments = ($wparam, $lparam);
- }
- unshift @arguments, $hwnd;
-
- return "FORWARD_" . $msg . "(" . join(", ", @arguments) . ", $name)";
-}
-
-########################################################################
-# _get_messages
-
-sub _get_messages($) {
- local $_ = shift;
-
- if(/^(?:BM|CB|EM|LB|STM|WM)_\w+(.*?)$/) {
- if(!$1) {
- return ($_);
- } else {
- return ();
- }
- } elsif(/^(.*?)\s*\?\s*((?:BM|CB|EM|LB|STM|WM)_\w+)\s*:\s*((?:BM|CB|EM|LB|STM|WM)_\w+)$/) {
- return ($2, $3);
- } elsif(/^\w+$/) {
- return ();
- } elsif(/^RegisterWindowMessage[AW]\s*\(.*?\)$/) {
- return ();
- } else {
- $output->write("warning: _get_messages: '$_'\n");
- return ();
- }
-}
-
-########################################################################
-# _fixup_user_message
-
-sub _fixup_user_message($$) {
- my $name = shift;
- (my $hwnd, my $msg, my $wparam, my $lparam) = @{(shift)};
-
- my $modified = 0;
-
- my $wkind;
- my $lkind;
- foreach my $msg (_get_messages($msg)) {
- my $new_wkind = get_message_wparam_kind($msg);
- if(defined($wkind) && $new_wkind ne $wkind) {
- $output->write("messsages used together do not have the same type\n");
- } else {
- $wkind = $new_wkind;
- }
-
- my $new_lkind = get_message_lparam_kind($msg);
- if(defined($lkind) && $new_lkind ne $lkind) {
- $output->write("messsages used together do not have the same type\n");
- } else {
- $lkind = $new_lkind;
- }
- }
-
- my @entries = (
- [ \$wparam, $wkind, "W", "w" ],
- [ \$lparam, $lkind, "L", "l" ]
- );
- foreach my $entry (@entries) {
- (my $refparam, my $kind, my $upper, my $lower) = @$entry;
-
- if(!defined($kind)) {
- if($msg =~ /^WM_/) {
- $output->write("messsage $msg not properly defined\n");
- $modified = 0;
- last;
- }
- } elsif($kind eq "ptr") {
- if($$refparam =~ /^(\(${upper}PARAM\))?\s*($lower[pP]aram)$/) {
- if(defined($1)) {
- $$refparam = $2;
- $modified = 1;
- }
- } elsif($$refparam =~ /^(\(${upper}PARAM\))?\s*0$/) {
- $$refparam = "(${upper}PARAM) NULL";
- $modified = 1;
- } elsif($$refparam !~ /^\(${upper}PARAM\)\s*/) {
- $$refparam = "(${upper}PARAM) $$refparam";
- $modified = 1;
- }
- } elsif($kind eq "long") {
- if($$refparam =~ s/^\(${upper}PARAM\)\s*//) {
- $modified = 1;
- }
- }
- }
-
- if($modified) {
- my @arguments = ($hwnd, $msg, $wparam, $lparam);
- return "$name(" . join(", ", @arguments) . ")";
- } else {
- return undef;
- }
-}
-
-########################################################################
-# fixup_statements
-
-sub fixup_statements($$) {
- my $function = shift;
- my $editor = shift;
-
- my $file = $function->file;
- my $linkage = $function->linkage;
- my $name = $function->name;
- my $statements_line = $function->statements_line;
- my $statements_column = $function->statements_column;
- my $statements = $function->statements;
-
- if(!defined($statements)) {
- return;
- }
-
- my $parser = new c_parser($file);
-
- my $found_function_call = sub {
- my $begin_line = shift;
- my $begin_column = shift;
- my $end_line = shift;
- my $end_column = shift;
- my $name = shift;
- my $arguments = shift;
-
- foreach my $argument (@$arguments) {
- $argument =~ s/^\s*(.*?)\s*$/$1/;
- }
-
- my $fixup_function_call;
- if($name =~ /^(?:DefWindowProc|SendMessage)[AW]$/)
- {
- if($options->statements_windowsx) {
- $fixup_function_call = \&fixup_user_message_2_windowsx;
- } else {
- $fixup_function_call = \&_fixup_user_message;
- }
- }
-
- if(defined($fixup_function_call)) {
- my $replace = &$fixup_function_call($name, $arguments);
-
- if(defined($replace)) {
- $editor->replace($begin_line, $begin_column, $end_line, $end_column, $replace);
- }
- } elsif($options->debug) {
- $output->write("$begin_line.$begin_column-$end_line.$end_column: " .
- "$name(" . join(", ", @$arguments) . ")\n");
- }
-
- return 0;
- };
-
- $parser->set_found_function_call_callback($found_function_call);
-
- my $line = $statements_line;
- my $column = 0;
- if(!$parser->parse_c_statements(\$statements, \$line, \$column)) {
- $output->write("error: can't parse statements\n");
- }
-}
-
-1;
--
1.6.2.4
More information about the wine-patches
mailing list