Index: /trunk/archive/pslib/bin/makeErrorCodes
===================================================================
--- /trunk/archive/pslib/bin/makeErrorCodes	(revision 563)
+++ /trunk/archive/pslib/bin/makeErrorCodes	(revision 564)
@@ -4,6 +4,5 @@
 #
 $cfile = $hfile = undef;	# Output filenames (.{c,h})
-$indent = 4;			# number of spaces to indent
-$prefix = "PS_ERR";		# Prefix for enums
+$prefix = "ps";			# Prefix for enums
 $verbose = 0;			# be chatty?
 #
@@ -36,4 +35,8 @@
    shift(@ARGV);
 }
+
+$prefix = lc("$prefix");	# e.g. ps
+$PREFIX = uc("$prefix");	#      PS
+
 
 if (!defined($cfile) && !defined($hfile)) {
@@ -70,5 +73,5 @@
       #print "$_\n";
 
-      ($name, undef, $val, $descrip) = /^\s*([^ \t]+)\s*(=\s*(\d+))?\s*,\s*(.*)/;
+      ($name, undef, $val, $descrip) = /^\s*([^ \t]+)\s*(=\s*(\d+))?\s*,?\s*(.*)/;
 
       push(@names,$name);
@@ -78,13 +81,5 @@
 }
 
-close(FD);
-#
-# And an entry for the total number of error codes
-#
-$name = "N_ERR_CLASSES";
-$values{$name} = undef;
-$descrips{$name} = undef;
-
-push(@names, $name);
+close(FD)
 #
 # Generate .c file
@@ -98,23 +93,31 @@
  * please do not modify it
  */
+#include "psError.h"
+#include "${prefix}ErrorCodes.h"
 
-static struct {
-    psErrorCode code;
-    char *descrip;
-} errorStrings[] = {
+void ${prefix}ErrorRegister(void)
+{
+    static psErrorDescription errors[] = {
 EOT
 
-   foreach $name (@names) {
-      printf FD "%*s{ ${prefix}_%s, ", $indent, "", $name;
-      if (defined($descrips{$name})) {
-	 printf FD "\"%s\"", $descrips{$name};
-      } else {
-	 printf FD "NULL";
-      }
-      printf FD "},\n";
+    foreach $name (@names) {
+       printf FD "        { ${PREFIX}_ERR_%s, ", $name;
+       if (defined($descrips{$name})) {
+	  printf FD "\"%s\"", $descrips{$name};
+       } else {
+	  printf FD "NULL";
+       }
+       printf FD " },\n";
    }
 
+
+$names = @names;
 print FD <<"EOT";
-};
+    };
+    static int nerror = $names;		// number of values in enum
+
+    p_psErrorRegister(errors, nerror);
+    nerror = 0;			                // don't register more than once
+}
 EOT
 }
@@ -126,6 +129,6 @@
    
    print FD <<"EOT";
-#if !defined(PS_ERROR_CODES_H)
-#define PS_ERROR_CODES_H
+#if !defined(${PREFIX}_ERROR_CODES_H)
+#define ${PREFIX}_ERROR_CODES_H
 /*
  * This file was machine generated from $input_files;
@@ -136,5 +139,5 @@
 
    foreach $name (@names) {
-      printf FD "%*s${prefix}_%s", $indent, "", $name;
+      printf FD "    ${PREFIX}_ERR_%s", $name;
       if (defined($values{$name})) {
 	 printf FD " = %d", $values{$name};
@@ -144,5 +147,7 @@
 	 
    print FD <<"EOT";
-} psErrorCode;
+} ${prefix}ErrorCode;
+
+void ${prefix}ErrorRegister(void);
 
 #endif
@@ -167,5 +172,5 @@
         -c file.c       Generate file.c
         -h file.h       Generate file.h
-	-p prefix	Change enum prefix from PS_ERR to \"prefix\"
+	-p prefix	Change enum prefix from ps/PS to \"prefix/PREFIX\"
 	-v		Be chatty (repeat for even more output)
 ";
