if ($ shift;
$header = $cfile = shift;
$header .= '.h';
$cfile .= '.c';
}
die "usage: $0 input_file" unless $
$infile = $ARGV[0];
if (!defined($header)) {
$header = $infile;
$header =~ s/(\.in)?$/.h/;
}
if (!defined($cfile)) {
$cfile = $infile;
$cfile =~ s/(\.in)?$/.c/;
}
open(IN, "<$infile") || die "$0: can't open $infile: $!\n";
open(HEADER, ">$header") || die "$0: can't open $header: $!\n";
open(CFILE, ">$cfile") || die "$0: can't open $cfile: $!\n";
print CFILE "struct sudo_defs_types sudo_defs_table[] = {\n {\n";
$count = -1;
while(<IN>) {
chomp;
next if /^\s*$/;
next if /^\s*
if (/^\S/) {
&print_record() if defined($var);
$var = $_;
($type, $desc) = (undef, undef);
$count++;
} else {
s/^\s+//;
s/\s+$//;
die "$0: syntax error near line $.\n" if
defined($type) && defined($desc);
next if /^NULL$/;
if (defined($type)) {
s/^"//;
s/"$//;
s/"/\\"/g;
$desc = "\"$_\"";
} else {
$type = $_;
}
}
}
&print_record();
print CFILE "\tNULL, 0, NULL\n }\n};\n";
close(IN);
close(HEADER);
close(CFILE);
sub print_record {
$defname = "I_" . uc($var);
printf HEADER "#define %-24s%d", $defname, $count;
print HEADER "\n";
$desc = "NULL" unless defined($desc);
print CFILE "\t\"$var\", $type,\n\t$desc\n }, {\n";
}