Added mappings for a few messages.
[wine] / tools / winapi / util.pm
1 package util;
2
3 use strict;
4
5 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
6 require Exporter;
7
8 @ISA = qw(Exporter);
9 @EXPORT = qw(
10     &append_file &edit_file &read_file &replace_file
11     &normalize_set &is_subset
12 );
13 @EXPORT_OK = qw();
14 %EXPORT_TAGS = ();
15
16 ########################################################################
17 # append_file
18
19 sub append_file {
20     my $filename = shift;
21     my $function = shift;
22
23     open(OUT, ">> $filename") || die "Can't open file '$filename'";
24     my $result = &$function(\*OUT, @_);
25     close(OUT);
26
27     return $result;
28 }
29
30 ########################################################################
31 # edit_file
32
33 sub edit_file {
34     my $filename = shift;
35     my $function = shift;
36
37     open(IN, "< $filename") || die "Can't open file '$filename'";
38     open(OUT, "> $filename.tmp") || die "Can't open file '$filename.tmp'";
39
40     my $result = &$function(\*IN, \*OUT, @_);
41
42     close(IN);
43     close(OUT);
44
45     if($result) {
46         unlink("$filename");
47         rename("$filename.tmp", "$filename");
48     } else {
49         unlink("$filename.tmp");
50     }
51
52     return $result;
53 }
54
55 ########################################################################
56 # read_file
57
58 sub read_file {
59     my $filename = shift;
60     my $function = shift;
61
62     open(IN, "< $filename") || die "Can't open file '$filename'";
63     my $result = &$function(\*IN, @_);
64     close(IN);
65
66     return $result;
67 }
68
69 ########################################################################
70 # replace_file
71
72 sub replace_file {
73     my $filename = shift;
74     my $function = shift;
75
76     open(OUT, "> $filename.tmp") || die "Can't open file '$filename.tmp'";
77
78     my $result = &$function(\*OUT, @_);
79
80     close(OUT);
81
82     if($result) {
83         unlink("$filename");
84         rename("$filename.tmp", "$filename");
85     } else {
86         unlink("$filename.tmp");
87     }
88
89     return $result;
90 }                  
91
92 ########################################################################
93 # normalize_set
94
95 sub normalize_set {
96     local $_ = shift;
97
98     if(!defined($_)) {
99         return undef;
100     }
101     
102     my %hash = ();
103     foreach my $key (split(/\s*&\s*/)) {
104         $hash{$key}++;
105     }
106
107     return join(" & ", sort(keys(%hash)));
108 }
109
110 ########################################################################
111 # is_subset
112
113 sub is_subset {
114     my $subset = shift;
115     my $set = shift;
116
117     foreach my $subitem (split(/ & /, $subset)) {
118         my $match = 0;
119         foreach my $item (split(/ & /, $set)) {
120             if($subitem eq $item) {
121                 $match = 1;
122                 last;
123             }
124         }
125         if(!$match) {
126             return 0;
127         }
128     }
129     return 1;
130 }
131
132 1;