+++ /dev/null
-#!/usr/local/bin/perl -w
-
-# Modified by Steve Henson. It should now read in the .err
-# file and only add new error codes, retaining the old
-# numbers.
-
-# Before it re-sorted new codes and re-ordered the whole thing.
-# This is the motivation for the change: the re numbering caused large
-# patch files even if only one error or reason code was added.
-# To force regeneration of all error codes (the old behaviour) use the
-# -regen flag.
-
-$regen = 0;
-
-while (@ARGV)
- {
- $in=shift(@ARGV);
- if ($in =~ /^-conf$/)
- {
- $in=shift(@ARGV);
- open(IN,"<$in") || die "unable to open '$in'\n";
- while (<IN>)
- {
- s/#.*$//;
- s/\s+$//;
- next if (/^$/);
- if (/^L\s+(\S+)\s+(\S+)$/)
- { $errfile{$1}=$2; }
- elsif (/^F\s+(\S+)$/)
- { $function{$1}=1; }
- elsif (/^R\s+(\S+)\s+(\S+)$/)
- { $r_value{$1}=$2; }
- else { die "bad input line: $in:$.\n"; }
- }
- close(IN);
- next;
- }
- elsif ($in =~ /^-regen/)
- {
- $regen = 1;
- next;
- }
-
- open(IN,"<$in") || die "unable to open '$in'\n";
- $last="";
- while (<IN>)
- {
- if (/err\(([A-Z0-9]+_F_[0-9A-Z_]+)\s*,\s*([0-9A-Z]+_R_[0-9A-Z_]+)\s*\)/)
- {
-# Not sure what this was supposed to be for: it's broken anyway [steve]
-# if ($1 != $last)
-# {
-# if ($function{$1} == 0)
-# {
-# printf STDERR "$. $1 is bad\n";
-# }
-# }
- $function{$1}++;
- $last=$1;
- $reason{$2}++;
- }
- }
- close(IN);
- }
-
-foreach (keys %function,keys %reason)
- {
- /^([A-Z0-9]+)_/;
- $prefix{$1}++;
- }
-
-@F=sort keys %function;
-@R=sort keys %reason;
-foreach $j (sort keys %prefix)
- {
- next if !defined $errfile{$j};
- next if $errfile{$j} eq "NONE";
- printf STDERR "doing %-6s - ",$j;
- @f=grep(/^${j}_/,@F);
- @r=grep(/^${j}_/,@R);
- if (defined($errfile{$j}))
- {
- read_errcodes($errfile{$j});
- # Check to see if any new codes: if not ignore.
- $new_codes = 0;
- foreach (@f) {
- if(!exists $func_codes{$_}) {
- $new_codes = 1;
- last;
- }
- }
- if(!$new_codes) {
- foreach (@r) {
- if(!exists $reason_codes{$_}) {
- $new_codes = 1;
- last;
- }
- }
- }
- if(!$new_codes) {
- print STDERR "No New Codes\n";
- next;
- }
- open(OUT,">$errfile{$j}") ||
- die "unable to open '$errfile{$j}':$!\n";
- $close_file=1;
- }
- else
- {
- $min_func = 100;
- $min_reason = 100;
- *OUT=*STDOUT;
- $close_file=0;
- }
- $num=$min_func;
- print OUT "/* Error codes for the $j functions. */\n\n";
- print OUT "/* Function codes. */\n";
- $f_count=0;
- foreach $i (@f)
- {
- $z=6-int(length($i)/8);
- if(exists $func_codes{$i}) {
- printf OUT "#define $i%s $func_codes{$i}\n","\t" x $z;
- } else {
- printf OUT "#define $i%s $num\n","\t" x $z;
- $num++;
- }
- $f_count++;
- }
- $num=$min_reason;
- print OUT "\n/* Reason codes. */\n";
- $r_count=0;
- foreach $i (@r)
- {
- $z=6-int(length($i)/8);
- if (exists $reason_codes{$i}) {
- printf OUT "#define $i%s $reason_codes{$i}\n","\t" x $z;
- } elsif (exists $r_value{$i}) {
- printf OUT "#define $i%s $r_value{$i}\n","\t" x $z;
- } else {
- printf OUT "#define $i%s $num\n","\t" x $z;
- $num++;
- }
- $r_count++;
- }
- close(OUT) if $close_file;
-
- printf STDERR "%3d functions, %3d reasons\n",$f_count,$r_count;
- }
-
-# Read in the error codes and populate %function and %reason with the
-# old codes. Also define $min_func and $min_reason with the smallest
-# unused function and reason codes. Care is needed because the
-# config file can define larger reason codes and these should be
-# ignored.
-
-sub read_errcodes {
-$file = $_[0];
-$min_func = 100;
-$min_reason = 100;
-undef %func_codes;
-undef %reason_codes;
-return if ($regen);
-if (open IN, $file) {
- while(<IN>) {
- if(/^#define\s*(\S*)\s*(\S*)/) {
- if (exists $function{$1} ) {
- if($2 >= $min_func) {$min_func = $2 + 1;}
- $func_codes{$1} = $2;
- } elsif ((defined %reason) && exists $reason{$1}) {
- $reason_codes{$1} = $2;
- if( !(exists $r_value{$1}) &&
- ($2 >= $min_reason))
- {$min_reason = $2 + 1;}
- }
- }
- }
- close IN;
-}
-}