Moved mode setting out of .spec file into Makefile.
[wine/gsoc_dplay.git] / tools / winapi / util.pm
blobdfbf834fd09ab500ef34af5f88f6f6249bf7c45a
2 # Copyright 1999, 2000, 2001 Patrik Stridvall
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 package util;
21 use strict;
23 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
24 require Exporter;
26 @ISA = qw(Exporter);
27 @EXPORT = qw(
28 &append_file &edit_file &read_file &replace_file
29 &normalize_set &is_subset
31 @EXPORT_OK = qw();
32 %EXPORT_TAGS = ();
34 ########################################################################
35 # append_file
37 sub append_file {
38 my $filename = shift;
39 my $function = shift;
41 open(OUT, ">> $filename") || die "Can't open file '$filename'";
42 my $result = &$function(\*OUT, @_);
43 close(OUT);
45 return $result;
48 ########################################################################
49 # edit_file
51 sub edit_file {
52 my $filename = shift;
53 my $function = shift;
55 open(IN, "< $filename") || die "Can't open file '$filename'";
56 open(OUT, "> $filename.tmp") || die "Can't open file '$filename.tmp'";
58 my $result = &$function(\*IN, \*OUT, @_);
60 close(IN);
61 close(OUT);
63 if($result) {
64 unlink("$filename");
65 rename("$filename.tmp", "$filename");
66 } else {
67 unlink("$filename.tmp");
70 return $result;
73 ########################################################################
74 # read_file
76 sub read_file {
77 my $filename = shift;
78 my $function = shift;
80 open(IN, "< $filename") || die "Can't open file '$filename'";
81 my $result = &$function(\*IN, @_);
82 close(IN);
84 return $result;
87 ########################################################################
88 # replace_file
90 sub replace_file {
91 my $filename = shift;
92 my $function = shift;
94 open(OUT, "> $filename.tmp") || die "Can't open file '$filename.tmp'";
96 my $result = &$function(\*OUT, @_);
98 close(OUT);
100 if($result) {
101 unlink("$filename");
102 rename("$filename.tmp", "$filename");
103 } else {
104 unlink("$filename.tmp");
107 return $result;
110 ########################################################################
111 # normalize_set
113 sub normalize_set {
114 local $_ = shift;
116 if(!defined($_)) {
117 return undef;
120 my %hash = ();
121 foreach my $key (split(/\s*&\s*/)) {
122 $hash{$key}++;
125 return join(" & ", sort(keys(%hash)));
128 ########################################################################
129 # is_subset
131 sub is_subset {
132 my $subset = shift;
133 my $set = shift;
135 foreach my $subitem (split(/ & /, $subset)) {
136 my $match = 0;
137 foreach my $item (split(/ & /, $set)) {
138 if($subitem eq $item) {
139 $match = 1;
140 last;
143 if(!$match) {
144 return 0;
147 return 1;