128 lines
3.2 KiB
Perl
128 lines
3.2 KiB
Perl
#!/usr/local/bin/perl
|
|
#*************************************************************************
|
|
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne
|
|
# National Laboratory.
|
|
# Copyright (c) 2002 The Regents of the University of California, as
|
|
# Operator of Los Alamos National Laboratory.
|
|
# EPICS BASE Versions 3.13.7
|
|
# and higher are distributed subject to a Software License Agreement found
|
|
# in file LICENSE that is included with this distribution.
|
|
#*************************************************************************
|
|
#
|
|
# makeStatTbl.pl - Create Error Symbol Table
|
|
#
|
|
# Kay-Uwe Kasemir, 1-31-97,
|
|
# based on makeStatTbl shell script.
|
|
#
|
|
# SYNOPSIS
|
|
# perl makeStatTbl.pl hdir [...]
|
|
#
|
|
# DESCRIPTION
|
|
# This tool creates a symbol table (ERRSYMTAB) structure which contains the
|
|
# names and values of all the status codes defined in the .h files in the
|
|
# specified directory(s). The status codes must be prefixed with "S_"
|
|
# in order to be included in this table.
|
|
# A "err.h" file must exist in each hdir which defines the module
|
|
# numbers, eg. "M_". The table is created on standard output.
|
|
#
|
|
# This tool's primary use is for creating an error status table used
|
|
# by errPrint, and errSymFind.
|
|
#
|
|
# FILES
|
|
# errMdef.h module number file for each h directory
|
|
#
|
|
# SEE ALSO: errnoLib(1), symLib(1)
|
|
#*/
|
|
|
|
use Cwd;
|
|
|
|
die "No args (files to parse) given" if ($#ARGV < 0);
|
|
|
|
# parse all lines of all files given:
|
|
while (<>)
|
|
{
|
|
if (m'^#define[ /t]*S_')
|
|
{
|
|
chomp;
|
|
push @err_sym_line, $_;
|
|
}
|
|
if (m'^#[ \t]*define[ /t]+M_')
|
|
{
|
|
chomp;
|
|
push @err_facility_line, $_;
|
|
}
|
|
}
|
|
|
|
$out_name = "errSymTbl.c";
|
|
$dir = cwd();
|
|
|
|
open OUT, ">$out_name" or die "Cannot open $out_name";
|
|
|
|
print OUT "/*\n";
|
|
print OUT " * status code symbol table\n";
|
|
print OUT " *\n";
|
|
print OUT " * CREATED BY makeStatTbl.pl\n";
|
|
print OUT " * FROM $dir\n";
|
|
print OUT " * ON " . localtime() . "\n";
|
|
print OUT " */\n";
|
|
print OUT "\n";
|
|
print OUT "#include \"errMdef.h\"\n";
|
|
print OUT "#include \"errSymTbl.h\"\n";
|
|
print OUT "\n";
|
|
|
|
|
|
foreach $line ( @err_facility_line )
|
|
{
|
|
if ($line =~ m'^#[ \t]*define[ \t]+(M_[A-Za-z0-9_]+)[ \t]+(.*)')
|
|
{
|
|
printf OUT "#ifndef %s\n", $1;
|
|
printf OUT "#define %s %s\n", $1, $2;
|
|
printf OUT "#endif /* ifdef %s */\n", $1;
|
|
}
|
|
}
|
|
|
|
$count = 0;
|
|
foreach $line ( @err_sym_line )
|
|
{
|
|
print OUT "$line\n";
|
|
# define S_symbol /* comment */
|
|
if ($line =~ m'[ \t#]define[ \t]*(S_[A-Za-z0-9_]+).*\/\*(.+)\*\/')
|
|
{
|
|
$symbol[$count] = $1;
|
|
$comment[$count]= $2;
|
|
++$count;
|
|
}
|
|
else
|
|
{
|
|
# Some status values for '0' (=OK) have no comment:
|
|
unless ($line =~ m'[ \t#]define[ \t]*(S_[A-Za-z0-9_]+)')
|
|
{
|
|
die "cannot decode this line:\n$line\n";
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
print OUT "\n";
|
|
print OUT "LOCAL ERRSYMBOL symbols[] =\n";
|
|
print OUT "{\n";
|
|
|
|
for ($i=0; $i<$count; ++$i)
|
|
{
|
|
printf OUT "\t{ \"%s\", (long) %s },\n",
|
|
$comment[$i], $symbol[$i];
|
|
}
|
|
|
|
print OUT "};\n";
|
|
print OUT "\n";
|
|
print OUT "LOCAL ERRSYMTAB symTbl =\n";
|
|
print OUT "{\n";
|
|
print OUT "\tNELEMENTS(symbols), /* current number of symbols in table */\n";
|
|
print OUT "\tsymbols, /* ptr to symbol array */\n";
|
|
print OUT "};\n";
|
|
print OUT "\n";
|
|
print OUT "ERRSYMTAB_ID errSymTbl = &symTbl;\n";
|
|
print OUT "\n";
|
|
print OUT "/*\tEOF $out_name */\n";
|
|
|