close
[darcs-mirror-metainit.git] / Parse.pm
1 package Parse;
2
3 sub parse {
4     my $filename = shift;
5     open(FILE, "<$filename") || die "$!";
6
7     my %parsed;
8     my $lastkey;
9     while (<FILE>) {
10         # Ignore empty lines and comments
11         next if /^$/ or /^#/;
12         #last if /^$/;
13         if (my ($key, $value) = m/^([^ ].*): (.*)/) {
14             $parsed{$key} = $value;
15             $lastkey = $key;
16         }
17         elsif ($lastkey) {
18             s/^ //;
19             s/^\.$//;
20             $parsed{$lastkey} .= $_;
21         } else {
22             die "Cannot parse $!";
23         }
24     }
25     close FILE;
26
27     if (not exists $parsed{Description}) {
28         $parsed{Description} = $parsed{Name}
29     }
30
31     ($parsed{Path}, $parsed{Args}) = split(/\s/,$parsed{Exec});
32
33     $parsed{"Required-Start"} = [split(/\s/,$parsed{"Required-Start"})];
34     $parsed{"Should-Start"} =   [split(/\s/,$parsed{"Should-Start"})];
35     $parsed{"Required-Stop"} =  [split(/\s/,$parsed{"Required-Stop"})];
36     $parsed{"Should-Stop"} =    [split(/\s/,$parsed{"Should-Stop"})];
37
38     return %parsed;
39 }
40
41
42 # Return a true value
43 1;