-@ARGV == 1 or die "usage: $0 GROUPFILE\n";
-$g = shift;
-open GROUPS, $g or die "$0: open($g): $!\n";
-$c = CDB_File->new("$g.cdb", "$g.new") or die "$0: cdbmake($g.cdb): $!\n";
-while (<GROUPS>) {
- next if m'^\s*(\#|$)';
- my @f = split;
- @f == 3 or die "$0: bad info line $.\n";
- my $l = join(" ", @f);
- my ($tag, $group, $addr) = @f;
- $group =~ tr/./-/;
- $c->insert("t:$tag" => $l);
- $c->insert("g:$group" => $l);
-}
-$c->finish() or die "$0: cdbfinish($g.cdb): $!\n";
-exit 0;
+ego = r_sub(r'^.*[/\\]', '', argv[0])
+def die(msg, tag = True):
+ if tag: msg = '%s: %s' % (ego, msg)
+ print >>stderr, msg
+ exit(1)
+if len(argv) != 2:
+ die('usage: %s GROUPFILE' % ego)
+
+rx_comment = r_compile(r'^\s*(\#|$)')
+group = argv[1]
+cdb = cdbmake(group + '.cdb', group + '.cdb.new')
+i = 0
+for line in open(group, 'r'):
+ i += 1
+ if rx_comment.match(line): continue
+ f = line.split()
+ if len(f) != 3: die('bad info line %d.' % i)
+ l = ' '.join(f)
+ tag, group, addr = f
+ group = group.replace('.', '-')
+ cdb.add('t:%s' % tag, l)
+ cdb.add('g:%s' % group, l)
+cdb.finish()