Files
epics-base/src/dbHost/dbToMenuH
Andrew Johnson daa0630361 2004-07-30: Work continues.
Make dbToRecordtypeH generate the same output as my 2002 C++ code.
Other changes in testing and macros.
2010-04-08 16:18:03 -05:00

59 lines
1.5 KiB
Perl
Executable File

#!/usr/bin/perl
use DBD;
use DBD::Parser;
use Getopts;
use macLib;
use Readfile;
my $tool = 'dbToMenuH';
getopts('DI@o:') or
die "Usage: $tool: [-D] [-I dir] [-o menu.h] menu.dbd [menu.h]\n";
my @path = map { split /[:;]/ } @opt_I;
my $dbd = DBD->new();
my $infile = shift @ARGV;
$infile =~ m/\.dbd$/ or
die "$tool: Input file '$infile' must have '.dbd' extension\n";
my $outfile;
if ($opt_o) {
$outfile = $opt_o;
} elsif (@ARGV) {
$outfile = shift @ARGV;
} else {
($outfile = $infile) =~ s/\.dbd$/.h/;
$outfile =~ s/^.*\///;
}
# Derive a name for the include guard
my $guard_name = "INC_$outfile";
$guard_name =~ tr/a-zA-Z0-9_/_/cs;
$guard_name =~ s/(_[hH])?$/_H/;
&ParseDBD($dbd, &Readfile($infile, 0, \@opt_I));
if ($opt_D) {
my %filecount;
my @uniqfiles = grep { not $filecount{$_}++ } @inputfiles;
print "$outfile: ", join(" \\\n ", @uniqfiles), "\n\n";
print map { "$_:\n" } @uniqfiles;
} else {
open OUTFILE, ">$outfile" or die "$tool: Can't open $outfile: $!\n";
print OUTFILE "/* $outfile generated from $infile */\n\n",
"#ifndef $guard_name\n",
"#define $guard_name\n\n";
my $menus = $dbd->menus;
while (($name, $menu) = each %{$menus}) {
print OUTFILE $menu->toDeclaration;
}
print OUTFILE "\n#ifdef GEN_MENU_CHOICES\n\n";
while (($name, $menu) = each %{$menus}) {
print OUTFILE $menu->toDefinition;
}
print OUTFILE "\n#endif /* GEN_MENU_CHOICES */\n",
"#endif /* $guard_name */\n";
close OUTFILE;
}