#!/usr/bin/perl
# Message base compiler.                                             -*-perl-*-

# The input has the following format:
# .:name:version:
# .1
# (lines of text for message 1)
# .2
# (lines of text for message 2)
# (etc.)

# A compiled message base file has the format:
# .:name:version:C
# (lines of text)
# .n.range .n.range (...)
# where each range gives the lines which message n occupies in this file.

# "Name" and "version" are used to identify the file.

$_=<>; chop;
/^\.:([^:]*):([^:]*):([^:]*)$/ || die "Unrecognized format";
($nam,$ver,$fl) = ($1,$2,$3);
$fl eq "" || die "Compiled or invalid format";
printf STDERR "Name: %s Version: %s\n", $nam, $ver;
printf ".:%s:%s:C\n", $nam, $ver;
$l=2;

while(<>) {
    /^\.(.*)/ && do {
       $no=$1;
       $no>0 || die "Invalid message no: $no";
       $ll{$on}=$l-1;
       $fl{$no}=$l;
       $on=$no;
       next;
    };
    print;
    ++$l;
}
$ll{$on}=$l-1;

foreach $i (sort keys %fl) {
    $i>0 || next;
    printf ".%d.%d,%d ", $i, $fl{$i}, $ll{$i};
}
print "\n";
exit 0;
