:pserver:anonymous@intra.tektonica.com:/opt/cvs - gsmperl - Fri Dec 21 07:37 CET...
[gsmperl.git] / GSM / SMS / Config.pm
1 package GSM::SMS::Config;\r
2 # Test for config\r
3 # ------------------------------------------------------------------------\r
4 \r
5 #  Config format:\r
6 #       ^#              := comment\r
7 #       ^[.+]$  := start block\r
8 #       ^.+=.+$ := var, value pair\r
9 #       $_preferences->{$blockname}->{$var}=$value\r
10 #       $blockname = ( 'default', <blocknames> }\r
11 \r
12 use Exporter;\r
13 @ISA = ('Exporter');\r
14 @EXPORT = qw( &read_config &get_config);\r
15 $VERSION = '0.1';\r
16 \r
17 sub read_config {\r
18         my ($filename) = @_;\r
19         my $config = {};\r
20         \r
21         # prepare default config\r
22         my $hook = {};\r
23         $config->{'default'} = [];\r
24         push(@{$config->{'default'}}, $hook);\r
25         \r
26         # open config file\r
27         local(*F);\r
28         open F, $filename or return undef;\r
29         while (<F>) {\r
30                 chomp;                                  # loose trailing newline\r
31                 s/#.*//;                                # loose comments\r
32                 s/^\s+//;                               # loose leading white\r
33                 s/\s+$//;                               # loose trailing white;\r
34                 next unless length;             # did we loose everything?\r
35                 \r
36                 # recon block or var/value pair ...\r
37                 if ( /\[(.+?)\]/ ) {\r
38                         $hook =  {} ;\r
39                         $config->{$1} = [];\r
40                         push( @{$config->{$1}}, $hook );\r
41                 } else {\r
42                         my ($var, $value) = split(/\s*=\s*/, $_, 2);\r
43                         $hook->{$var} = $value;\r
44                 }\r
45         }\r
46         close F;\r
47 \r
48         return $config;\r
49 }\r
50 \r
51 sub get_config {\r
52         my ($config, $name) = @_;\r
53         \r
54         return ${$config->{$name}}[0];\r
55 }\r
56 1; \r
57 \r
58 =head1 NAME\r
59 \r
60 GSM::SMS::Config - Implements a simple .ini style config.\r
61 \r
62 =head1 DESCRIPTION\r
63 \r
64 Implements a simple configuration format. Used mainly for the transports config file.\r
65 \r
66 =head1 AUTHOR\r
67 \r
68 Johan Van den Brande johan@vandenbrande.com>\r