Index: /trunk/psLib/src/sys/psLogMsg.c
===================================================================
--- /trunk/psLib/src/sys/psLogMsg.c	(revision 559)
+++ /trunk/psLib/src/sys/psLogMsg.c	(revision 560)
@@ -261,4 +261,5 @@
         head_ptr += strlen(head_ptr);
     }
+
     if (head_ptr > head) {
         *head_ptr++ = '|';
@@ -269,6 +270,10 @@
     case PS_LOG_TO_STDOUT:
         puts(head);
-        vprintf(fmt, ap);
-        if (fmt[strlen(fmt) - 1] != '\n') {
+        if (log_msg) {
+            vprintf(fmt, ap);
+            if (fmt[strlen(fmt) - 1] != '\n') {
+                putc('\n', stdout);
+            }
+        } else {
             putc('\n', stdout);
         }
@@ -277,6 +282,10 @@
     case PS_LOG_TO_STDERR:
         fputs(head, stderr);
-        vfprintf(stderr, fmt, ap);
-        if (fmt[strlen(fmt) - 1] != '\n') {
+        if (log_msg) {
+            vfprintf(stderr, fmt, ap);
+            if (fmt[strlen(fmt) - 1] != '\n') {
+                putc('\n', stderr);
+            }
+        } else {
             putc('\n', stderr);
         }
Index: /trunk/psLib/src/sys/psTrace.c
===================================================================
--- /trunk/psLib/src/sys/psTrace.c	(revision 559)
+++ /trunk/psLib/src/sys/psTrace.c	(revision 560)
@@ -1,21 +1,20 @@
 /*****************************************************************************
-    A simple implementation of a tracing facility for Pan-STARRS
- 
-    Tracing is controlled on a per "component" basis, where a "component" is
-    a name of the form aaa.bbb.ccc where aaa is the most significant part.
-    For example, the utilities library might be called "utils", the
-    doubly-linked list "utils.dlist", and the code to destroy a list
-    "utils.dlist.del".
+    A simple implementation of a tracing facility for Pan-STARRS.  Tracing
+    is controlled on a per "component" basis, where a "component" is a name
+    of the form aaa.bbb.ccc where aaa is the most significant part.
  
     NOTES:
- In the SRD, higher trace levels correspond to a numerically lower
- trace value in the code.  This is a bit confusing.
+ In the SRD, higher trace levels correspond to a numerically lower trace
+ value in the code.  This is a bit confusing.  For example, a high-level
+ message might be something like "Begin Processing".  The module programmer
+ might give that a numerically low trace level, such as 1, so then any
+ non-zero trace level in that code component will display thatmessage.
  
  We build a tree of trace components.  Every node in the tree has a
  depth, which is it's distance from the root.  However, this is not
  not the same thing as a node's "level", which corresponds to the
- trace level of that node.  I should probably rename some variables.
- 
- This code is obduscated by the fact that component names are of the form
+ trace level of that node.
+ 
+ This code is obfuscated by the fact that component names are of the form
  ".a.b.c.d" where "." is always the root of the tree, and for tree that have
  a depth of 3 or higher (including the root ".") the "."  character is also
@@ -24,4 +23,8 @@
  while the last three dots merely act as separators between the node names
  "b", "c", and "d".
+ 
+ I added a function psTraceFree() which frees all nodes in the trace component
+ tree.  Previously, there had been no function in the API which accomplished
+ this purpose.
  *****************************************************************************/
 #include <stdlib.h>
@@ -29,39 +32,11 @@
 #include <string.h>
 #include <stdarg.h>
-/* #include "psLib.h" */
+/* #include "pslib.h" */
 #include "psMemory.h"
 #include "psTrace.h"
 #include "psString.h"
-
-#define CACHE_NAME_LEN 50
-#define NO_CACHE "\a"                     // no name is cached
-/*****************************************************************************
-    A component is a string of the form aaa.bbb.ccc, and may itself contain
-    further subcomponents.  The Component structure doesn't in fact contain
-    it's full name, but only the last part.
- *****************************************************************************/
-typedef struct Component
-{
-    const char *name;                     // last part of name of component
-    int level;                            // trace level for this component
-    int dimen;                            // dimension of subcomponents
-    int n;                                // number of subcomponents
-    struct Component **subcomp;           // next level of subcomponents
-}
-Component;
+#include "psError.h"
 
 static Component *croot = NULL;           // The root of the trace component
-// tree.
-
-// NOTE: the next tree globals exist for optimization purposes only.
-// Consider removing them.
-static int highest_level = 0;             // Highest level requested.  Defining
-// this variable allows us to reduce component-tree searches that tell
-// us if a message should be printed.
-static char cachedName[CACHE_NAME_LEN + 1] = NO_CACHE;
-// last name looked up
-static int cachedLevel;                   // level of last looked up name
-
-
 /*****************************************************************************
     componentAlloc(): allocate memory for a new node, and initialize members.
@@ -70,9 +45,8 @@
                           int level)
 {
-    //printf("Calling componentAlloc(%s, %d)\n", name, level);
     Component *comp = psAlloc(sizeof(Component));
     comp->name = psStringCopy(name);
     comp->level = level;
-    comp->dimen = comp->n = 0;
+    comp->n = 0;
     comp->subcomp = NULL;
     return comp;
@@ -108,16 +82,42 @@
 {
     if (croot == NULL) {
-        croot = componentAlloc(".", UNKNOWN_TRACE_LEVEL);
-    }
-}
-
-
-/*****************************************************************************
-    Free the trace tree information
- *****************************************************************************/
-void psTraceReset(void)
+        croot = componentAlloc(".", DEFAULT_TRACE_LEVEL);
+    }
+}
+
+
+/*****************************************************************************
+    Set all trace levels to zero.
+ *****************************************************************************/
+void p_psTraceReset(Component *currentNode)
+{
+    int i = 0;
+
+    if (NULL == currentNode) {
+        return;
+    }
+
+    currentNode->level = 0;
+    for (i=0;i<currentNode->n;i++) {
+        if (NULL == currentNode->subcomp[i]) {
+            psError(__func__,
+                    "Sub-component %d of node %s in the trace tree is NULL.\n",
+                    i, currentNode->name);
+        } else {
+            p_psTraceReset(currentNode->subcomp[i]);
+        }
+    }
+    return;
+}
+
+void psTraceReset()
+{
+    p_psTraceReset(croot);
+}
+
+
+void psTraceFree()
 {
     componentFree(croot);
-    croot = NULL;
 }
 
@@ -140,5 +140,4 @@
     int        nodeExists = 0;
 
-    // printf("Calling componentAdd(%s, %d)\n", addNodeName, level);
     // Is this the root node?  If so, simply set level and return.
     if (strcmp(".", addNodeName) == 0) {
@@ -185,37 +184,4 @@
 
 /*****************************************************************************
-    setHighestLevel(): traverse the component tree recursively.  For each
- node encountered, if it's trace level is higher than the global
- variable highest_level, then set highest_level to that nodes trace
- level.
-    Input:
- comp
-    Output:
- none
-    Returns:
- NULL
- *****************************************************************************/
-static void setHighestLevel(const Component *comp)
-{
-    int i = 0;
-
-    if (comp == NULL) {
-        printf("ERROR: setHighestLevel(NULL)\n");
-        exit(1);
-    }
-
-    // If this nodes trace level is the max so far, save it in highest_level
-    if (comp->level > highest_level) {
-        highest_level = comp->level;
-    }
-
-    // Do the same for all children nodes.
-    for (i = 0; i < comp->n; i++) {
-        setHighestLevel(comp->subcomp[i]);
-    }
-}
-
-
-/*****************************************************************************
     psSetTraceLevel(): add the component named "comp" to the component tree,
  if it is not already there, and set it's trace level to "level".
@@ -236,21 +202,8 @@
     }
 
-    //printf("Calling psSetTraceLevel(%s, %d)\n", comp, level);
-    // invalidate cache
-    strncpy(cachedName, NO_CACHE, CACHE_NAME_LEN);
-
     // Add the new component to the component tree.
     componentAdd(comp, level);
 
-    // Save this search info in our depth-one cache.
-    if (level > highest_level) {
-        highest_level = level;
-    } else {
-        highest_level = UNKNOWN_TRACE_LEVEL;
-        setHighestLevel(croot);
-    }
-
     // return 0 on success.
-    //printf("Called psSetTraceLevel(%s, %d)\n", comp, level);
     return 0;
 }
@@ -279,4 +232,8 @@
     int        i = 0;
 
+    if (NULL == currentNode) {
+        return(UNKNOWN_TRACE_LEVEL);
+    }
+
     if (strcmp(".", aname) == 0) {
         return(croot->level);
@@ -292,4 +249,10 @@
         firstComponent = strsep(&pname, ".");
         for (i = 0; i < currentNode->n; i++) {
+            if (NULL == currentNode->subcomp[i]) {
+                psError(__func__,
+                        "Sub-component %d of node %s in trace tree is NULL.\n",
+                        i, currentNode->name);
+            }
+
             if (strcmp(currentNode->subcomp[i]->name, firstComponent) == 0) {
                 currentNode = currentNode->subcomp[i];
@@ -318,27 +281,10 @@
 int psGetTraceLevel(const char *name)
 {
-    int level = -1;
-
-    //printf("Calling psGetTraceLevel(%s)\n", name);
-    // If the root component tree does not exist, then initialize it.
     if (croot == NULL) {
-        initTrace();
-    }
-
-    // Before we traverse the component tree, check if we just searched for
-    // this name, and if so, return that level.
-    if (strcmp(name, cachedName) == 0) {
-        return cachedLevel;
+        return(UNKNOWN_TRACE_LEVEL);
     }
 
     // Search the component root tree, determine the trace level.
-    level = doGetTraceLevel(name);
-
-    // Save this search info in our depth-one cache.
-    strncpy(cachedName, name, CACHE_NAME_LEN);
-    cachedLevel = level;
-
-    //printf("Called psGetTraceLevel(%s) (level was %d)\n", name, level);
-    return level;
+    return(doGetTraceLevel(name));
 }
 
@@ -392,7 +338,6 @@
 void psPrintTraceLevels(void)
 {
-    // If the root component tree does not exist, then initialize it.
     if (croot == NULL) {
-        initTrace();
+        return;
     }
 
@@ -423,11 +368,12 @@
     int i = 0;
 
-    // We first check if the level of this message is less than the highest
-    // level in the tree.  If so, we don't go any further.  If not, we need
-    // to determine the trace level of comp, and then display the message if
-    // the comp's trace level is high enough.
-
-    if ((level <= highest_level) &&
-            (level <= psGetTraceLevel(comp))) {
+    if (NULL == comp) {
+        psError(__func__,
+                "p_psTrace() called on a NULL trace level tree\n");
+    }
+
+    // Only display this message if it's trace level is less than the level
+    // of it's associatedcomponent.
+    if (level <= psGetTraceLevel(comp)) {
         va_start(ap, level);
 
@@ -444,4 +390,5 @@
         va_end(ap);
     }
+
     // NOTE: should we free *fmt as well?  Read the man page.
 }
Index: /trunk/psLib/src/sys/psTrace.h
===================================================================
--- /trunk/psLib/src/sys/psTrace.h	(revision 559)
+++ /trunk/psLib/src/sys/psTrace.h	(revision 560)
@@ -1,5 +1,6 @@
 #if !defined(PS_TRACE_H)
 #define PS_TRACE_H 1
-#define UNKNOWN_TRACE_LEVEL -9999               // we don't know this name's level
+#define UNKNOWN_TRACE_LEVEL -9999         // we don't know this name's level
+#define DEFAULT_TRACE_LEVEL 0
 
 /** \file psTrace.h
@@ -7,4 +8,18 @@
  *  \ingroup SystemGroup
  */
+
+/*****************************************************************************
+    A component is a string of the form aaa.bbb.ccc, and may itself contain
+    further subcomponents.  The Component structure doesn't in fact contain
+    it's full name, but only the last part.
+ *****************************************************************************/
+typedef struct Component
+{
+    const char *name;                     // last part of name of component
+    int level;                            // trace level for this component
+    int n;                                // number of subcomponents
+    struct Component **subcomp;           // next level of subcomponents
+}
+Component;
 
 /** Functions **************************************************************/
@@ -28,6 +43,10 @@
 ;
 
-/// turn off all tracing, and free trace's allocated memory
-void psTraceReset(void)
+/// Set all trace levels to zero (do not free nodes in the component tree).
+void psTraceReset()
+;
+
+/// Free all nodes in the component tree.
+void psTraceFree()
 ;
 
Index: /trunk/psLib/src/sysUtils/psHash.c
===================================================================
--- /trunk/psLib/src/sysUtils/psHash.c	(revision 559)
+++ /trunk/psLib/src/sysUtils/psHash.c	(revision 560)
@@ -13,28 +13,12 @@
 #include "psTrace.h"
 
-// A bucket that holds an item of data
-typedef struct HashBucket
-{
-    char *key;    // key for this item of data
-    void *data;    // the data itself
-    struct HashBucket *next;  // list of other possible keys
-}
-HashBucket;
-
-// An entire hash table
-struct HashTable
-{
-    int nbucket;   // number of buckets
-    HashBucket **buckets;  // the buckets themselves
-};
-
-/******************************************************************************
-    Con/Destruct buckets
- *****************************************************************************/
-static HashBucket *hashBucketAlloc(const char *key,
-                                   void *data,
-                                   HashBucket *next)
-{
-    HashBucket *bucket = psAlloc(sizeof(HashBucket));
+/******************************************************************************
+    Construct buckets
+ *****************************************************************************/
+static psHashBucket *hashBucketAlloc(const char *key,
+                                     void *data,
+                                     psHashBucket *next)
+{
+    psHashBucket *bucket = psAlloc(sizeof(psHashBucket));
 
     bucket->key = psStringCopy(key);
@@ -46,10 +30,8 @@
 
 /******************************************************************************
- 
- *****************************************************************************/
-static void hashBucketFree(
-    HashBucket *bucket,   // bucket to free
-    void (*itemFree)(void *item)) // how to free hashed data;
-// or NULL
+    Destruct buckets
+ *****************************************************************************/
+static void hashBucketFree(psHashBucket *bucket,   // bucket to free
+                           void (*itemFree)(void *item)) // how to free data;
 {
     if (bucket == NULL)
@@ -75,5 +57,5 @@
 {
     psHash *table = psAlloc(sizeof(psHash));
-    table->buckets = psAlloc(nbucket*sizeof(HashBucket *));
+    table->buckets = psAlloc(nbucket*sizeof(psHashBucket *));
     table->nbucket = nbucket;
 
@@ -104,7 +86,7 @@
     {
         if (table->buckets[i] != NULL) {
-            HashBucket *ptr = table->buckets[i];
+            psHashBucket *ptr = table->buckets[i];
             while (ptr != NULL) {
-                HashBucket *tmp = ptr->next;
+                psHashBucket *tmp = ptr->next;
                 hashBucketFree(ptr, itemFree);
                 ptr = tmp;
@@ -124,13 +106,12 @@
     N.b. this is NOT a good hash function! See Knuth for some better ones
  *****************************************************************************/
-static void *doHashWork(
-    psHash *table,   // table to insert in
-    const char *key,   // key to use
-    void *data,    // data to insert,
-    // or (if NULL) retrieve/remove
-    int remove
-        ,    // remove the item from the list?
-        void (*itemFree)(void *item)) // how to free hashed data
-    // or NULL
+static void *doHashWork(psHash     *table,   // table to insert in
+                        const char *key,     // key to use
+                        void       *data,    // data to insert,
+                        // or (if NULL) retrieve/remove
+                        int remove
+                            ,          // remove the item from the list?
+                            void (*itemFree)(void *item))
+    // how to free hashed data
 {
     long int hash = 1;
@@ -142,12 +123,11 @@
     hash &= (table->nbucket - 1);
 
-    HashBucket *ptr = table->buckets[hash];
-    /*
-     * We've found the correct hash bucket, now we need to know what to do
-     */
+    psHashBucket *ptr = table->buckets[hash];
+
+    // We've found the correct hash bucket, now we need to know what to do
     if (data == NULL) {   // retrieve/remove
         if (remove
            ) {
-            HashBucket *optr = ptr;
+            psHashBucket *optr = ptr;
             while (ptr != NULL) {
                 if (strcmp(key, ptr->key) == 0) { // found it!
@@ -196,7 +176,6 @@
             }
         }
-        /*
-         * Not found, so insert at the front of the list
-         */
+
+        // Not found, so insert at the front of the list
         table->buckets[hash] = hashBucketAlloc(key, data, table->buckets[hash]);
 
@@ -208,9 +187,8 @@
     Insert a value into a hash table
  *****************************************************************************/
-void *psHashInsert(psHash *table, // table to insert in
+void *psHashInsert(psHash *table,   // table to insert in
                    const char *key, // key to use
-                   void *data,  // data to insert
+                   void *data,      // data to insert
                    void (*itemFree)(void *item)) // how to free hashed data;
-// or NULL
 {
     return doHashWork(table, key, data, 0, itemFree);
@@ -220,5 +198,5 @@
     Lookup a value in a hash table
  *****************************************************************************/
-void *psHashLookup(psHash *table, // table to lookup key in
+void *psHashLookup(psHash *table,   // table to lookup key in
                    const char *key) // key to lookup
 {
@@ -229,5 +207,5 @@
     Remove and return a value from a hash table
  *****************************************************************************/
-void *psHashRemove(psHash *table, // table to lookup key in
+void *psHashRemove(psHash *table,   // table to lookup key in
                    const char *key) // key to lookup
 {
Index: /trunk/psLib/src/sysUtils/psHash.h
===================================================================
--- /trunk/psLib/src/sysUtils/psHash.h	(revision 559)
+++ /trunk/psLib/src/sysUtils/psHash.h	(revision 560)
@@ -8,5 +8,22 @@
 
 /** DO WE NEED TO DEFINE HashTable? */
-typedef struct HashTable psHash; ///< Opaque type for a hash table
+//typedef struct HashTable psHash; ///< Opaque type for a hash table
+// An entire hash table
+
+// A bucket that holds an item of data
+typedef struct psHashBucket
+{
+    char *key;                          // key for this item of data
+    void *data;                         // the data itself
+    struct psHashBucket *next;          // list of other possible keys
+}
+psHashBucket;
+
+typedef struct psHash
+{
+    int nbucket;
+    psHashBucket **buckets;
+}
+psHash;
 
 /** Functions **************************************************************/
@@ -19,12 +36,12 @@
 
 /// Free hash buckets from table.
-void psHashFree(psHash *table,  ///< hash table to be freed
+void psHashFree(psHash *table,               ///< hash table to be freed
                 void (*itemFree)(void *item) ///< how to free hashed data; or NULL
                );
 
 /// Insert entry into table.
-void *psHashInsert(psHash *table, ///< table to insert in
-                   const char *key, ///< key to use
-                   void *data,  ///< data to insert
+void *psHashInsert(psHash *table,               ///< table to insert in
+                   const char *key,             ///< key to use
+                   void *data,                  ///< data to insert
                    void (*itemFree)(void *item) ///< how to free hashed data; or NULL
                   );
Index: /trunk/psLib/src/sysUtils/psLogMsg.c
===================================================================
--- /trunk/psLib/src/sysUtils/psLogMsg.c	(revision 559)
+++ /trunk/psLib/src/sysUtils/psLogMsg.c	(revision 560)
@@ -261,4 +261,5 @@
         head_ptr += strlen(head_ptr);
     }
+
     if (head_ptr > head) {
         *head_ptr++ = '|';
@@ -269,6 +270,10 @@
     case PS_LOG_TO_STDOUT:
         puts(head);
-        vprintf(fmt, ap);
-        if (fmt[strlen(fmt) - 1] != '\n') {
+        if (log_msg) {
+            vprintf(fmt, ap);
+            if (fmt[strlen(fmt) - 1] != '\n') {
+                putc('\n', stdout);
+            }
+        } else {
             putc('\n', stdout);
         }
@@ -277,6 +282,10 @@
     case PS_LOG_TO_STDERR:
         fputs(head, stderr);
-        vfprintf(stderr, fmt, ap);
-        if (fmt[strlen(fmt) - 1] != '\n') {
+        if (log_msg) {
+            vfprintf(stderr, fmt, ap);
+            if (fmt[strlen(fmt) - 1] != '\n') {
+                putc('\n', stderr);
+            }
+        } else {
             putc('\n', stderr);
         }
Index: /trunk/psLib/src/sysUtils/psTrace.c
===================================================================
--- /trunk/psLib/src/sysUtils/psTrace.c	(revision 559)
+++ /trunk/psLib/src/sysUtils/psTrace.c	(revision 560)
@@ -1,21 +1,20 @@
 /*****************************************************************************
-    A simple implementation of a tracing facility for Pan-STARRS
- 
-    Tracing is controlled on a per "component" basis, where a "component" is
-    a name of the form aaa.bbb.ccc where aaa is the most significant part.
-    For example, the utilities library might be called "utils", the
-    doubly-linked list "utils.dlist", and the code to destroy a list
-    "utils.dlist.del".
+    A simple implementation of a tracing facility for Pan-STARRS.  Tracing
+    is controlled on a per "component" basis, where a "component" is a name
+    of the form aaa.bbb.ccc where aaa is the most significant part.
  
     NOTES:
- In the SRD, higher trace levels correspond to a numerically lower
- trace value in the code.  This is a bit confusing.
+ In the SRD, higher trace levels correspond to a numerically lower trace
+ value in the code.  This is a bit confusing.  For example, a high-level
+ message might be something like "Begin Processing".  The module programmer
+ might give that a numerically low trace level, such as 1, so then any
+ non-zero trace level in that code component will display thatmessage.
  
  We build a tree of trace components.  Every node in the tree has a
  depth, which is it's distance from the root.  However, this is not
  not the same thing as a node's "level", which corresponds to the
- trace level of that node.  I should probably rename some variables.
- 
- This code is obduscated by the fact that component names are of the form
+ trace level of that node.
+ 
+ This code is obfuscated by the fact that component names are of the form
  ".a.b.c.d" where "." is always the root of the tree, and for tree that have
  a depth of 3 or higher (including the root ".") the "."  character is also
@@ -24,4 +23,8 @@
  while the last three dots merely act as separators between the node names
  "b", "c", and "d".
+ 
+ I added a function psTraceFree() which frees all nodes in the trace component
+ tree.  Previously, there had been no function in the API which accomplished
+ this purpose.
  *****************************************************************************/
 #include <stdlib.h>
@@ -29,39 +32,11 @@
 #include <string.h>
 #include <stdarg.h>
-/* #include "psLib.h" */
+/* #include "pslib.h" */
 #include "psMemory.h"
 #include "psTrace.h"
 #include "psString.h"
-
-#define CACHE_NAME_LEN 50
-#define NO_CACHE "\a"                     // no name is cached
-/*****************************************************************************
-    A component is a string of the form aaa.bbb.ccc, and may itself contain
-    further subcomponents.  The Component structure doesn't in fact contain
-    it's full name, but only the last part.
- *****************************************************************************/
-typedef struct Component
-{
-    const char *name;                     // last part of name of component
-    int level;                            // trace level for this component
-    int dimen;                            // dimension of subcomponents
-    int n;                                // number of subcomponents
-    struct Component **subcomp;           // next level of subcomponents
-}
-Component;
+#include "psError.h"
 
 static Component *croot = NULL;           // The root of the trace component
-// tree.
-
-// NOTE: the next tree globals exist for optimization purposes only.
-// Consider removing them.
-static int highest_level = 0;             // Highest level requested.  Defining
-// this variable allows us to reduce component-tree searches that tell
-// us if a message should be printed.
-static char cachedName[CACHE_NAME_LEN + 1] = NO_CACHE;
-// last name looked up
-static int cachedLevel;                   // level of last looked up name
-
-
 /*****************************************************************************
     componentAlloc(): allocate memory for a new node, and initialize members.
@@ -70,9 +45,8 @@
                           int level)
 {
-    //printf("Calling componentAlloc(%s, %d)\n", name, level);
     Component *comp = psAlloc(sizeof(Component));
     comp->name = psStringCopy(name);
     comp->level = level;
-    comp->dimen = comp->n = 0;
+    comp->n = 0;
     comp->subcomp = NULL;
     return comp;
@@ -108,16 +82,42 @@
 {
     if (croot == NULL) {
-        croot = componentAlloc(".", UNKNOWN_TRACE_LEVEL);
-    }
-}
-
-
-/*****************************************************************************
-    Free the trace tree information
- *****************************************************************************/
-void psTraceReset(void)
+        croot = componentAlloc(".", DEFAULT_TRACE_LEVEL);
+    }
+}
+
+
+/*****************************************************************************
+    Set all trace levels to zero.
+ *****************************************************************************/
+void p_psTraceReset(Component *currentNode)
+{
+    int i = 0;
+
+    if (NULL == currentNode) {
+        return;
+    }
+
+    currentNode->level = 0;
+    for (i=0;i<currentNode->n;i++) {
+        if (NULL == currentNode->subcomp[i]) {
+            psError(__func__,
+                    "Sub-component %d of node %s in the trace tree is NULL.\n",
+                    i, currentNode->name);
+        } else {
+            p_psTraceReset(currentNode->subcomp[i]);
+        }
+    }
+    return;
+}
+
+void psTraceReset()
+{
+    p_psTraceReset(croot);
+}
+
+
+void psTraceFree()
 {
     componentFree(croot);
-    croot = NULL;
 }
 
@@ -140,5 +140,4 @@
     int        nodeExists = 0;
 
-    // printf("Calling componentAdd(%s, %d)\n", addNodeName, level);
     // Is this the root node?  If so, simply set level and return.
     if (strcmp(".", addNodeName) == 0) {
@@ -185,37 +184,4 @@
 
 /*****************************************************************************
-    setHighestLevel(): traverse the component tree recursively.  For each
- node encountered, if it's trace level is higher than the global
- variable highest_level, then set highest_level to that nodes trace
- level.
-    Input:
- comp
-    Output:
- none
-    Returns:
- NULL
- *****************************************************************************/
-static void setHighestLevel(const Component *comp)
-{
-    int i = 0;
-
-    if (comp == NULL) {
-        printf("ERROR: setHighestLevel(NULL)\n");
-        exit(1);
-    }
-
-    // If this nodes trace level is the max so far, save it in highest_level
-    if (comp->level > highest_level) {
-        highest_level = comp->level;
-    }
-
-    // Do the same for all children nodes.
-    for (i = 0; i < comp->n; i++) {
-        setHighestLevel(comp->subcomp[i]);
-    }
-}
-
-
-/*****************************************************************************
     psSetTraceLevel(): add the component named "comp" to the component tree,
  if it is not already there, and set it's trace level to "level".
@@ -236,21 +202,8 @@
     }
 
-    //printf("Calling psSetTraceLevel(%s, %d)\n", comp, level);
-    // invalidate cache
-    strncpy(cachedName, NO_CACHE, CACHE_NAME_LEN);
-
     // Add the new component to the component tree.
     componentAdd(comp, level);
 
-    // Save this search info in our depth-one cache.
-    if (level > highest_level) {
-        highest_level = level;
-    } else {
-        highest_level = UNKNOWN_TRACE_LEVEL;
-        setHighestLevel(croot);
-    }
-
     // return 0 on success.
-    //printf("Called psSetTraceLevel(%s, %d)\n", comp, level);
     return 0;
 }
@@ -279,4 +232,8 @@
     int        i = 0;
 
+    if (NULL == currentNode) {
+        return(UNKNOWN_TRACE_LEVEL);
+    }
+
     if (strcmp(".", aname) == 0) {
         return(croot->level);
@@ -292,4 +249,10 @@
         firstComponent = strsep(&pname, ".");
         for (i = 0; i < currentNode->n; i++) {
+            if (NULL == currentNode->subcomp[i]) {
+                psError(__func__,
+                        "Sub-component %d of node %s in trace tree is NULL.\n",
+                        i, currentNode->name);
+            }
+
             if (strcmp(currentNode->subcomp[i]->name, firstComponent) == 0) {
                 currentNode = currentNode->subcomp[i];
@@ -318,27 +281,10 @@
 int psGetTraceLevel(const char *name)
 {
-    int level = -1;
-
-    //printf("Calling psGetTraceLevel(%s)\n", name);
-    // If the root component tree does not exist, then initialize it.
     if (croot == NULL) {
-        initTrace();
-    }
-
-    // Before we traverse the component tree, check if we just searched for
-    // this name, and if so, return that level.
-    if (strcmp(name, cachedName) == 0) {
-        return cachedLevel;
+        return(UNKNOWN_TRACE_LEVEL);
     }
 
     // Search the component root tree, determine the trace level.
-    level = doGetTraceLevel(name);
-
-    // Save this search info in our depth-one cache.
-    strncpy(cachedName, name, CACHE_NAME_LEN);
-    cachedLevel = level;
-
-    //printf("Called psGetTraceLevel(%s) (level was %d)\n", name, level);
-    return level;
+    return(doGetTraceLevel(name));
 }
 
@@ -392,7 +338,6 @@
 void psPrintTraceLevels(void)
 {
-    // If the root component tree does not exist, then initialize it.
     if (croot == NULL) {
-        initTrace();
+        return;
     }
 
@@ -423,11 +368,12 @@
     int i = 0;
 
-    // We first check if the level of this message is less than the highest
-    // level in the tree.  If so, we don't go any further.  If not, we need
-    // to determine the trace level of comp, and then display the message if
-    // the comp's trace level is high enough.
-
-    if ((level <= highest_level) &&
-            (level <= psGetTraceLevel(comp))) {
+    if (NULL == comp) {
+        psError(__func__,
+                "p_psTrace() called on a NULL trace level tree\n");
+    }
+
+    // Only display this message if it's trace level is less than the level
+    // of it's associatedcomponent.
+    if (level <= psGetTraceLevel(comp)) {
         va_start(ap, level);
 
@@ -444,4 +390,5 @@
         va_end(ap);
     }
+
     // NOTE: should we free *fmt as well?  Read the man page.
 }
Index: /trunk/psLib/src/sysUtils/psTrace.h
===================================================================
--- /trunk/psLib/src/sysUtils/psTrace.h	(revision 559)
+++ /trunk/psLib/src/sysUtils/psTrace.h	(revision 560)
@@ -1,5 +1,6 @@
 #if !defined(PS_TRACE_H)
 #define PS_TRACE_H 1
-#define UNKNOWN_TRACE_LEVEL -9999               // we don't know this name's level
+#define UNKNOWN_TRACE_LEVEL -9999         // we don't know this name's level
+#define DEFAULT_TRACE_LEVEL 0
 
 /** \file psTrace.h
@@ -7,4 +8,18 @@
  *  \ingroup SystemGroup
  */
+
+/*****************************************************************************
+    A component is a string of the form aaa.bbb.ccc, and may itself contain
+    further subcomponents.  The Component structure doesn't in fact contain
+    it's full name, but only the last part.
+ *****************************************************************************/
+typedef struct Component
+{
+    const char *name;                     // last part of name of component
+    int level;                            // trace level for this component
+    int n;                                // number of subcomponents
+    struct Component **subcomp;           // next level of subcomponents
+}
+Component;
 
 /** Functions **************************************************************/
@@ -28,6 +43,10 @@
 ;
 
-/// turn off all tracing, and free trace's allocated memory
-void psTraceReset(void)
+/// Set all trace levels to zero (do not free nodes in the component tree).
+void psTraceReset()
+;
+
+/// Free all nodes in the component tree.
+void psTraceFree()
 ;
 
Index: /trunk/psLib/test/sysUtils/Makefile
===================================================================
--- /trunk/psLib/test/sysUtils/Makefile	(revision 559)
+++ /trunk/psLib/test/sysUtils/Makefile	(revision 560)
@@ -3,6 +3,6 @@
 ##  Makefile:   test/sysUtils
 ##
-##  $Revision: 1.5 $  $Name: not supported by cvs2svn $
-##  $Date: 2004-04-30 06:19:57 $
+##  $Revision: 1.6 $  $Name: not supported by cvs2svn $
+##  $Date: 2004-05-01 23:04:35 $
 ##
 ##  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -10,4 +10,13 @@
 ###############################################################################
 
+###############################################################################
+#    Note: I added specific entries for the psTrace files.  The reason I did
+#    this was because the generic rules were failing on the existing test
+#    code (and hence, on my tst_psTraceXX.c code as well).  I am tempted to
+#    fix the generic rules, but that might break existing codes.  When this
+#    problem is resolved, I'll remove the specific rules for psTrace.  -GLG
+#    Also, psLogMsg.
+#    Also, psHash.
+###############################################################################
 include ../../src/Makefile.Globals
 
@@ -20,11 +29,14 @@
          atst_psAbort_02    \
          atst_psAbort_03    \
-         tst_psTrace00      \
-         tst_psTrace01      \
-         tst_psTrace02      \
-         tst_psTrace03      \
          tst_psStringCopy
+TARGET_TRACE = tst_psTrace00 tst_psTrace01 tst_psTrace02 tst_psTrace03 \
+               tst_psTrace04
+TARGET_LOGMSG = tst_psLogMsg00 tst_psLogMsg01 tst_psLogMsg02 tst_psLogMsg03
+TARGET_HASH = tst_psHash00 tst_psHash01 tst_psHash02 tst_psHash03 tst_psHash04
 
-all: $(TARGET)
+all:		$(TARGET)
+psTrace:	$(TARGET_TRACE)
+psLogMsg:	$(TARGET_LOGMSG)
+psHash:	$(TARGET_HASH)
 
 tst_psError: tst_psError.o
@@ -37,4 +49,31 @@
 	@echo "    Deleting executable and binary files for 'test/sysUtils'"
 	$(RM) $(TARGET) *.o *.lint
+
+tst_psHash00:	tst_psHash00.c
+	$(CC) tst_psHash00.c $(LDFLAGS) -L$(PSLIB_LIB_DIR) -L.. -lpslib -lpstest -I$(PSLIB_INCL_DIR) -I.. -o tst_psHash00
+
+tst_psHash01:	tst_psHash01.c
+	$(CC) tst_psHash01.c $(LDFLAGS) -L$(PSLIB_LIB_DIR) -L.. -lpslib -lpstest -I$(PSLIB_INCL_DIR) -I.. -o tst_psHash01
+
+tst_psHash02:	tst_psHash02.c
+	$(CC) tst_psHash02.c $(LDFLAGS) -L$(PSLIB_LIB_DIR) -L.. -lpslib -lpstest -I$(PSLIB_INCL_DIR) -I.. -o tst_psHash02
+
+tst_psHash03:	tst_psHash03.c
+	$(CC) tst_psHash03.c $(LDFLAGS) -L$(PSLIB_LIB_DIR) -L.. -lpslib -lpstest -I$(PSLIB_INCL_DIR) -I.. -o tst_psHash03
+
+tst_psHash04:	tst_psHash04.c
+	$(CC) tst_psHash04.c $(LDFLAGS) -L$(PSLIB_LIB_DIR) -L.. -lpslib -lpstest -I$(PSLIB_INCL_DIR) -I.. -o tst_psHash04
+
+tst_psLogMsg00:	tst_psLogMsg00.c
+	$(CC) tst_psLogMsg00.c $(LDFLAGS) -L$(PSLIB_LIB_DIR) -L.. -lpslib -lpstest -I$(PSLIB_INCL_DIR) -I.. -o tst_psLogMsg00
+
+tst_psLogMsg01:	tst_psLogMsg01.c
+	$(CC) tst_psLogMsg01.c $(LDFLAGS) -L$(PSLIB_LIB_DIR) -L.. -lpslib -lpstest -I$(PSLIB_INCL_DIR) -I.. -o tst_psLogMsg01
+
+tst_psLogMsg02:	tst_psLogMsg02.c
+	$(CC) tst_psLogMsg02.c $(LDFLAGS) -L$(PSLIB_LIB_DIR) -L.. -lpslib -lpstest -I$(PSLIB_INCL_DIR) -I.. -o tst_psLogMsg02
+
+tst_psLogMsg03:	tst_psLogMsg03.c
+	$(CC) tst_psLogMsg03.c $(LDFLAGS) -L$(PSLIB_LIB_DIR) -L.. -lpslib -lpstest -I$(PSLIB_INCL_DIR) -I.. -o tst_psLogMsg03
 
 tst_psTrace00:	tst_psTrace00.c
@@ -50,4 +89,7 @@
 	$(CC) tst_psTrace03.c $(LDFLAGS) -L$(PSLIB_LIB_DIR) -L.. -lpslib -lpstest -I$(PSLIB_INCL_DIR) -I.. -o tst_psTrace03
 
+tst_psTrace04:	tst_psTrace04.c
+	$(CC) tst_psTrace04.c $(LDFLAGS) -L$(PSLIB_LIB_DIR) -L.. -lpslib -lpstest -I$(PSLIB_INCL_DIR) -I.. -o tst_psTrace04
+
 %.o : %.c
 	$(CC) $(CFLAGS) $(CPPFLAGS) -I.. -I$(PSLIB_INCL_DIR) -c -o $@ $<
@@ -60,3 +102,3 @@
 
 distclean:
-	rm DistCleanFiles
+	rm -rf $(TARGET_TRACE) $(TARGET_LOGMSG) $(TARGET_HASH)
Index: /trunk/psLib/test/sysUtils/tst_psHash00.c
===================================================================
--- /trunk/psLib/test/sysUtils/tst_psHash00.c	(revision 560)
+++ /trunk/psLib/test/sysUtils/tst_psHash00.c	(revision 560)
@@ -0,0 +1,54 @@
+/*****************************************************************************
+    This code tests whether a hash table be allocated successfully.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib.h"
+#include "psTest.h"
+#include "psHash.h"
+#define NUM_HASH_TABLE_BUCKETS 10
+main()
+{
+    psHash *myHashTable = NULL;
+    int testStatus      = true;
+    int i               = 0;
+
+    printPositiveTestHeader(stdout,
+                            "psHash functions",
+                            "psHashAlloc()");
+
+    myHashTable = psHashAlloc(NUM_HASH_TABLE_BUCKETS);
+
+    if (myHashTable == NULL) {
+        fprintf(stderr, "%s: could not allocate a hash table.", __func__);
+        testStatus = false;
+    }
+
+    if (myHashTable->nbucket != NUM_HASH_TABLE_BUCKETS) {
+        fprintf(stderr, "%s: myHashTable->nbucket not set properly.\n",
+                __func__, i);
+        testStatus = false;
+
+    }
+
+    if (myHashTable->buckets == NULL) {
+        fprintf(stderr, "%s: myHashTable->buckets is NULL.\n",
+                __func__, i);
+        testStatus = false;
+
+    }
+
+    for (i=0;i<NUM_HASH_TABLE_BUCKETS;i++) {
+        if (myHashTable->buckets[i] != NULL) {
+            fprintf(stderr, "%s: hash table bucket[%d] not equal to NULL.\n",
+                    __func__, i);
+            testStatus = false;
+        }
+    }
+
+    printFooter(stdout,
+                "psHash functions",
+                "psHashAlloc()",
+                testStatus);
+
+    exit(!testStatus);
+}
Index: /trunk/psLib/test/sysUtils/tst_psHash01.c
===================================================================
--- /trunk/psLib/test/sysUtils/tst_psHash01.c	(revision 560)
+++ /trunk/psLib/test/sysUtils/tst_psHash01.c	(revision 560)
@@ -0,0 +1,71 @@
+/*****************************************************************************
+    This code tests whether a hash table be de-allocated successfully.
+ 
+    GUS: figure out how the memory leak detection stuff works, then put it
+    in here.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib.h"
+#include "psTest.h"
+#include "psHash.h"
+#define NUM_HASH_TABLE_BUCKETS 100
+int imGlobal = 0;
+
+typedef struct
+{
+    char *name;
+}
+ID;
+static ID *IdAlloc(const char *name)
+{
+    ID *id = psAlloc(sizeof(ID));
+    id->name = psStringCopy(name);
+
+    return id;
+}
+
+static void IdFree(ID *id)
+{
+    imGlobal++;
+    psFree(id->name);
+    psFree(id);
+}
+
+main()
+{
+    psHash *myHashTable = NULL;
+    int testStatus      = true;
+    int i               = 0;
+
+    printPositiveTestHeader(stdout,
+                            "psHash functions",
+                            "psHashFree()");
+
+    myHashTable = psHashAlloc(NUM_HASH_TABLE_BUCKETS);
+    psHashInsert(myHashTable, "ENTRY00", IdAlloc("IDA"),
+                 (void (*)(void *))IdFree);
+    psHashInsert(myHashTable, "ENTRY01", IdAlloc("IDB"),
+                 (void (*)(void *))IdFree);
+    psHashInsert(myHashTable, "ENTRY02", IdAlloc("IDC"),
+                 (void (*)(void *))IdFree);
+    psHashInsert(myHashTable, "ENTRY03", IdAlloc("IDD"),
+                 (void (*)(void *))IdFree);
+    psHashFree(myHashTable, (void (*)(void *))IdFree);
+
+    //
+    // GUS: put some memory leak stuff here.
+    //
+
+    if (imGlobal != 4) {
+        fprintf(stderr, "%s: only (%d/4) entries were freed",
+                __func__, imGlobal);
+        testStatus = false;
+    }
+
+    printFooter(stdout,
+                "psHash functions",
+                "psHashFree()",
+                testStatus);
+
+    exit(!testStatus);
+}
Index: /trunk/psLib/test/sysUtils/tst_psHash02.c
===================================================================
--- /trunk/psLib/test/sysUtils/tst_psHash02.c	(revision 560)
+++ /trunk/psLib/test/sysUtils/tst_psHash02.c	(revision 560)
@@ -0,0 +1,71 @@
+/*****************************************************************************
+    This code tests whether hash tables entries can be inserted correctly.
+ 
+    GUS: Add code to test whether duplicates are handled correctly (use a
+    small hast table and lots of keys).
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib.h"
+#include "psTest.h"
+#include "psHash.h"
+#define NUM_HASH_TABLE_BUCKETS 100
+int imGlobal = 0;
+
+typedef struct
+{
+    char *name;
+}
+ID;
+static ID *IdAlloc(const char *name)
+{
+    ID *id = psAlloc(sizeof(ID));
+    id->name = psStringCopy(name);
+
+    return id;
+}
+
+static void IdFree(ID *id)
+{
+    imGlobal++;
+    psFree(id->name);
+    psFree(id);
+}
+
+main()
+{
+    psHash *myHashTable = NULL;
+    int testStatus      = true;
+    int i               = 0;
+    ID *id = NULL;
+    char *myKeys[] = {"ENTRY00", "ENTRY01", "ENTRY02", "ENTRY03", NULL};
+    char *myData[] = {"IDA", "IDB", "IDC", "IDD", NULL};
+
+    printPositiveTestHeader(stdout,
+                            "psHash functions",
+                            "psHashInsert()");
+
+    myHashTable = psHashAlloc(NUM_HASH_TABLE_BUCKETS);
+    i = 0;
+    while (myKeys[i] != NULL) {
+        psHashInsert(myHashTable, myKeys[i], IdAlloc(myData[i]),
+                     (void (*)(void *))IdFree);
+        i++;
+    }
+
+    i = 0;
+    while (myKeys[i] != NULL) {
+        id = psHashLookup(myHashTable, myKeys[i]);
+        if (0 != strcmp(myData[i], id->name)) {
+            fprintf(stderr, "%s: Hash table entry for key %s was %s (should be %s).\n",
+                    __func__, myKeys[i], id->name, myData[i]);
+        }
+        i++;
+    }
+
+    printFooter(stdout,
+                "psHash functions",
+                "psHashInsert()",
+                testStatus);
+
+    exit(!testStatus);
+}
Index: /trunk/psLib/test/sysUtils/tst_psHash03.c
===================================================================
--- /trunk/psLib/test/sysUtils/tst_psHash03.c	(revision 560)
+++ /trunk/psLib/test/sysUtils/tst_psHash03.c	(revision 560)
@@ -0,0 +1,84 @@
+/*****************************************************************************
+    This code tests whether hash tables entries can be removed correctly.
+ 
+    GUS: Add code to test whether duplicates are handled correctly.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib.h"
+#include "psTest.h"
+#include "psHash.h"
+#define NUM_HASH_TABLE_BUCKETS 100
+int imGlobal = 0;
+
+typedef struct
+{
+    char *name;
+}
+ID;
+static ID *IdAlloc(const char *name)
+{
+    ID *id = psAlloc(sizeof(ID));
+    id->name = psStringCopy(name);
+
+    return id;
+}
+
+static void IdFree(ID *id)
+{
+    imGlobal++;
+    psFree(id->name);
+    psFree(id);
+}
+
+main()
+{
+    psHash *myHashTable = NULL;
+    int testStatus      = true;
+    int i               = 0;
+    ID *id = NULL;
+    char *myKeys[] = {"ENTRY00", "ENTRY01", "ENTRY02", "ENTRY03", NULL};
+    char *myData[] = {"IDA", "IDB", "IDC", "IDD", NULL};
+
+    printPositiveTestHeader(stdout,
+                            "psHash functions",
+                            "psHashRemove()");
+
+    myHashTable = psHashAlloc(NUM_HASH_TABLE_BUCKETS);
+    i = 0;
+    while (myKeys[i] != NULL) {
+        psHashInsert(myHashTable, myKeys[i], IdAlloc(myData[i]),
+                     (void (*)(void *))IdFree);
+        i++;
+    }
+
+
+    i = 0;
+    while (myKeys[i] != NULL) {
+        id = psHashLookup(myHashTable, myKeys[i]);
+        if (0 != strcmp(myData[i], id->name)) {
+            fprintf(stderr, "%s: Hash table entry for key %s was %s (should be %s).\n",
+                    __func__, myKeys[i], id->name, myData[i]);
+        }
+        i++;
+    }
+
+
+    i = 0;
+    while (myKeys[i] != NULL) {
+        id = psHashRemove(myHashTable, myKeys[i]);
+        id = psHashLookup(myHashTable, myKeys[i]);
+        if (id != NULL) {
+            fprintf(stderr, "%s: Hash table entry for key %s not removed.\n",
+                    __func__, "IDA");
+        }
+        i++;
+    }
+
+
+    printFooter(stdout,
+                "psHash functions",
+                "psHashRemove()",
+                testStatus);
+
+    exit(!testStatus);
+}
Index: /trunk/psLib/test/sysUtils/tst_psHash04.c
===================================================================
--- /trunk/psLib/test/sysUtils/tst_psHash04.c	(revision 560)
+++ /trunk/psLib/test/sysUtils/tst_psHash04.c	(revision 560)
@@ -0,0 +1,62 @@
+/*****************************************************************************
+    This code tests whether the call psHashKeyList() function works.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib.h"
+#include "psTest.h"
+#include "psHash.h"
+#define NUM_HASH_TABLE_BUCKETS 100
+int imGlobal = 0;
+
+typedef struct
+{
+    char *name;
+}
+ID;
+static ID *IdAlloc(const char *name)
+{
+    ID *id = psAlloc(sizeof(ID));
+    id->name = psStringCopy(name);
+
+    return id;
+}
+
+static void IdFree(ID *id)
+{
+    imGlobal++;
+    psFree(id->name);
+    psFree(id);
+}
+
+main()
+{
+    psHash *myHashTable = NULL;
+    int testStatus      = true;
+    int i               = 0;
+    ID *id              = NULL;
+    char *myKeys[] = {"ENTRY00", "ENTRY01", "ENTRY02", "ENTRY03", NULL};
+    char *myData[] = {"IDA", "IDB", "IDC", "IDD", NULL};
+
+    printPositiveTestHeader(stdout,
+                            "psHash functions",
+                            "psHashKeyList()");
+
+    myHashTable = psHashAlloc(NUM_HASH_TABLE_BUCKETS);
+    i = 0;
+    while (myKeys[i] != NULL) {
+        psHashInsert(myHashTable, myKeys[i], IdAlloc(myData[i]),
+                     (void (*)(void *))IdFree);
+        i++;
+    }
+
+    //
+    // GUS: add call to psHashKeyList()
+    //
+
+    printFooter(stdout,
+                "psHash functions",
+                "psHashKeyList()",
+                testStatus);
+
+    exit(!testStatus);
+}
Index: /trunk/psLib/test/sysUtils/tst_psLogMsg00.c
===================================================================
--- /trunk/psLib/test/sysUtils/tst_psLogMsg00.c	(revision 560)
+++ /trunk/psLib/test/sysUtils/tst_psLogMsg00.c	(revision 560)
@@ -0,0 +1,29 @@
+/*****************************************************************************
+    This code tests whether trace levels can be set successfully.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib.h"
+#include "psTest.h"
+
+main()
+{
+    int i = 0;
+    int lev = 0;
+    int testStatus = true;
+
+    printPositiveTestHeader(stdout,
+                            "psLogMsg functions",
+                            "default log levels");
+
+    // Send a log messages for levels 0:9.  Only the first four messages
+    // should actually be displayed.
+    for (i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
+    }
+
+    printFooter(stdout,
+                "psLogMsg functions",
+                "default log levels",
+                testStatus);
+    exit(!testStatus);
+}
Index: /trunk/psLib/test/sysUtils/tst_psLogMsg01.c
===================================================================
--- /trunk/psLib/test/sysUtils/tst_psLogMsg01.c	(revision 560)
+++ /trunk/psLib/test/sysUtils/tst_psLogMsg01.c	(revision 560)
@@ -0,0 +1,37 @@
+/*****************************************************************************
+    This code tests whether trace levels can be set successfully.
+ 
+ NOTE: This code must be modified once printFooter() is modified to include
+ a parameter that indicates we don't know whether the test passed or failed.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib.h"
+#include "psTest.h"
+
+main()
+{
+    int i = 0;
+    int lev = 0;
+    int testStatus = true;
+
+    printPositiveTestHeader(stdout,
+                            "psLogMsg functions",
+                            "psSetLogLevel()");
+
+    psSetLogLevel(9);
+    // Send a log messages for levels 0:9.
+    for (i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
+    }
+
+    psSetLogLevel(5);
+    psLogMsg(__func__, 6, "This should not be displayed (level %d)\n", 6);
+    psSetLogLevel(4);
+    psLogMsg(__func__, 4, "This should  be displayed (level %d)\n", 4);
+
+    printFooter(stdout,
+                "psLogMsg functions",
+                "psSetLogLevel()",
+                testStatus);
+    exit(!testStatus);
+}
Index: /trunk/psLib/test/sysUtils/tst_psLogMsg02.c
===================================================================
--- /trunk/psLib/test/sysUtils/tst_psLogMsg02.c	(revision 560)
+++ /trunk/psLib/test/sysUtils/tst_psLogMsg02.c	(revision 560)
@@ -0,0 +1,69 @@
+/*****************************************************************************
+    This code tests whether the log message format can be set.
+ 
+ NOTE: This code must be modified once printFooter() is modified to include
+ a parameter that indicates we don't know whether the test passed or failed.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib.h"
+#include "psTest.h"
+
+main()
+{
+    int i = 0;
+    int lev = 0;
+    int testStatus = true;
+
+    printPositiveTestHeader(stdout,
+                            "psLogMsg functions",
+                            "psSetLogFormat()");
+
+
+    printf("------------- psSetLogFormat() -------------\n");
+    psSetLogFormat("");
+    for (i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
+    }
+
+    printf("------------- psSetLogFormat(T) -------------\n");
+    psSetLogFormat("T");
+    for (i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
+    }
+
+    printf("------------- psSetLogFormat(H) -------------\n");
+    psSetLogFormat("H");
+    for (i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
+    }
+
+    printf("------------- psSetLogFormat(L) -------------\n");
+    psSetLogFormat("L");
+    for (i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
+    }
+
+    printf("------------- psSetLogFormat(N) -------------\n");
+    psSetLogFormat("N");
+    for (i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
+    }
+
+    printf("------------- psSetLogFormat(M) -------------\n");
+    psSetLogFormat("M");
+    for (i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
+    }
+
+    printf("------------- psSetLogFormat(THLNM) -------------\n");
+    psSetLogFormat("THLNM");
+    for (i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
+    }
+
+    printFooter(stdout,
+                "psLogMsg functions",
+                "psSetLogFormat()",
+                testStatus);
+    exit(!testStatus);
+}
Index: /trunk/psLib/test/sysUtils/tst_psLogMsg03.c
===================================================================
--- /trunk/psLib/test/sysUtils/tst_psLogMsg03.c	(revision 560)
+++ /trunk/psLib/test/sysUtils/tst_psLogMsg03.c	(revision 560)
@@ -0,0 +1,45 @@
+/*****************************************************************************
+    This code tests whether the log message can be redirected to STDERR or
+    STDOUT.
+ 
+ NOTE: This code must be modified once printFooter() is modified to include
+ a parameter that indicates we don't know whether the test passed or failed.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib.h"
+#include "psTest.h"
+
+main()
+{
+    int i = 0;
+    int lev = 0;
+    int testStatus = true;
+
+    printPositiveTestHeader(stdout,
+                            "psLogMsg functions",
+                            "psSetLogDestination()");
+
+    printf("------------- psSetLogDestination(PS_LOG_NONE) -------------\n");
+    psSetLogDestination(PS_LOG_NONE);
+    for (i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
+    }
+
+    printf("------------- psSetLogDestination(PS_LOG_TO_STDERR) -------------\n");
+    psSetLogDestination(PS_LOG_TO_STDERR);
+    for (i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
+    }
+
+    printf("------------- psSetLogDestination(PS_LOG_TO_STDOUT) -------------\n");
+    psSetLogDestination(PS_LOG_TO_STDERR);
+    for (i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
+    }
+
+    printFooter(stdout,
+                "psLogMsg functions",
+                "psSetLogDestination()",
+                testStatus);
+    exit(!testStatus);
+}
Index: /trunk/psLib/test/sysUtils/tst_psTrace00.c
===================================================================
--- /trunk/psLib/test/sysUtils/tst_psTrace00.c	(revision 559)
+++ /trunk/psLib/test/sysUtils/tst_psTrace00.c	(revision 560)
@@ -10,9 +10,9 @@
     int i = 0;
     int lev = 0;
-    int errorFlag = true;
+    int testStatus = true;
 
-    printPositiveTestHeader(stderr,
+    printPositiveTestHeader(stdout,
                             "psTrace functions",
-                            "Testing psSetTraceLevel and psGetTraceLevel");
+                            "psSetTraceLevel() and psGetTraceLevel()");
     for (i=0;i<10;i++) {
         psSetTraceLevel(".", i);
@@ -21,5 +21,5 @@
             printf("ERROR: (.) expected trace level was %d, actual was %d\n",
                    i, lev);
-            errorFlag = false;
+            testStatus = false;
         }
     }
@@ -32,5 +32,5 @@
             printf("ERROR: (.NODE00) expected trace level was %d, actual was %d\n",
                    i, lev);
-            errorFlag = false;
+            testStatus = false;
         }
 
@@ -39,5 +39,5 @@
             printf("ERROR: (.) expected trace level was %d, actual was %d\n",
                    i, 3);
-            errorFlag = false;
+            testStatus = false;
         }
     }
@@ -51,12 +51,12 @@
             printf("ERROR: (.NODE00.NODE01) expected trace level was %d, actual was %d\n",
                    i, lev);
-            errorFlag = false;
+            testStatus = false;
         }
     }
 
-    printFooter(stderr,
+    printFooter(stdout,
                 "psTrace functions",
                 "Testing psSetTraceLevel and psGetTraceLevel",
-                errorFlag);
-    exit(0);
+                testStatus);
+    exit(!testStatus);
 }
Index: /trunk/psLib/test/sysUtils/tst_psTrace01.c
===================================================================
--- /trunk/psLib/test/sysUtils/tst_psTrace01.c	(revision 559)
+++ /trunk/psLib/test/sysUtils/tst_psTrace01.c	(revision 560)
@@ -12,7 +12,7 @@
     int successFlag = true;
 
-    printPositiveTestHeader(stderr,
+    printPositiveTestHeader(stdout,
                             "psTrace functions",
-                            "Testing psTraceReset()");
+                            "psTraceReset()");
 
     for (i=0;i<10;i++) {
@@ -21,5 +21,5 @@
 
         lev = psGetTraceLevel(".");
-        if (lev != UNKNOWN_TRACE_LEVEL) {
+        if (lev != DEFAULT_TRACE_LEVEL) {
             printf("ERROR: expected trace level was %d, actual was %d\n",
                    i, lev);
@@ -32,16 +32,17 @@
     psSetTraceLevel(".a.b.c", 2);
     psTraceReset();
-    if ((UNKNOWN_TRACE_LEVEL != psGetTraceLevel(".")) ||
-            (UNKNOWN_TRACE_LEVEL != psGetTraceLevel(".a")) ||
-            (UNKNOWN_TRACE_LEVEL != psGetTraceLevel(".a.b")) ||
-            (UNKNOWN_TRACE_LEVEL != psGetTraceLevel(".a.b.c"))) {
+    if ((DEFAULT_TRACE_LEVEL != psGetTraceLevel(".")) ||
+            (DEFAULT_TRACE_LEVEL != psGetTraceLevel(".a")) ||
+            (DEFAULT_TRACE_LEVEL != psGetTraceLevel(".a.b")) ||
+            (DEFAULT_TRACE_LEVEL != psGetTraceLevel(".a.b.c"))) {
         printf("ERROR: trace levels were not reset properly\n");
         successFlag = false;
     }
 
-    printFooter(stderr,
+    printFooter(stdout,
                 "psTrace functions",
-                "Testing psTraceReset()",
+                "psTraceReset()",
                 successFlag);
-    exit(0);
+
+    exit(!successFlag);
 }
Index: /trunk/psLib/test/sysUtils/tst_psTrace02.c
===================================================================
--- /trunk/psLib/test/sysUtils/tst_psTrace02.c	(revision 559)
+++ /trunk/psLib/test/sysUtils/tst_psTrace02.c	(revision 560)
@@ -12,4 +12,8 @@
     int lev = 0;
     int errorFlag = 0;
+
+    printPositiveTestHeader(stdout,
+                            "psTrace functions",
+                            "psTrace()");
 
     psSetTraceLevel(".", 4);
@@ -35,4 +39,9 @@
             0xbeefface);
 
+    printFooter(stdout,
+                "psTrace functions",
+                "psTrace()",
+                true);
+
     exit(0);
 }
Index: /trunk/psLib/test/sysUtils/tst_psTrace03.c
===================================================================
--- /trunk/psLib/test/sysUtils/tst_psTrace03.c	(revision 559)
+++ /trunk/psLib/test/sysUtils/tst_psTrace03.c	(revision 560)
@@ -9,4 +9,8 @@
 main()
 {
+    printPositiveTestHeader(stdout,
+                            "psTrace functions",
+                            "psTracePrintLevels()");
+
     psSetTraceLevel(".", 9);
 
@@ -26,4 +30,10 @@
 
     psPrintTraceLevels();
+
+    printFooter(stdout,
+                "psTrace functions",
+                "psTracePrintLevels()",
+                true);
+
     exit(0);
 }
Index: /trunk/psLib/test/sysUtils/tst_psTrace04.c
===================================================================
--- /trunk/psLib/test/sysUtils/tst_psTrace04.c	(revision 560)
+++ /trunk/psLib/test/sysUtils/tst_psTrace04.c	(revision 560)
@@ -0,0 +1,55 @@
+/*****************************************************************************
+    This code tests whether trace messages can be printed successfully
+    with psPrintTraceLevels().
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib.h"
+#include "psTest.h"
+
+main()
+{
+    printPositiveTestHeader(stdout,
+                            "psTrace functions",
+                            "Testing psTraceReset()");
+    psSetTraceLevel(".", 9);
+
+    psSetTraceLevel(".a", 8);
+    psSetTraceLevel(".b", 7);
+    psSetTraceLevel(".c", 5);
+
+    psSetTraceLevel(".a.a", 4);
+    psSetTraceLevel(".a.b", 3);
+
+    psSetTraceLevel(".b.a", 2);
+    psSetTraceLevel(".b.b", 1);
+
+    psSetTraceLevel(".c.a", 0);
+    psSetTraceLevel(".c.b", 3);
+    psSetTraceLevel(".c.c", 5);
+
+    psTraceReset();
+
+    if (psGetTraceLevel(".") ||
+            psGetTraceLevel(".a") ||
+            psGetTraceLevel(".b") ||
+            psGetTraceLevel(".c") ||
+            psGetTraceLevel(".a.a") ||
+            psGetTraceLevel(".a.b") ||
+            psGetTraceLevel(".b.a") ||
+            psGetTraceLevel(".b.b") ||
+            psGetTraceLevel(".c.a") ||
+            psGetTraceLevel(".c.b") ||
+            psGetTraceLevel(".c.c")) {
+        printFooter(stdout,
+                    "psTrace functions",
+                    "psTraceReset() did not reset all levels of the tree.",
+                    false);
+        exit(1);
+    } else {
+        printFooter(stdout,
+                    "psTrace functions",
+                    "psTraceReset()",
+                    true);
+        exit(0);
+    }
+}
Index: /trunk/psLib/test/sysUtils/verified/tst_psHash00.stdout
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psHash00.stdout	(revision 560)
+++ /trunk/psLib/test/sysUtils/verified/tst_psHash00.stdout	(revision 560)
@@ -0,0 +1,9 @@
+/----------------------------- TESTPOINT --------------------------------\
+|   TestFile: tst_psHash00.c                                             |
+|  TestPoint: psHash functions{psHashAlloc()}                            |
+|   TestType: Positive                                                   |
+\------------------------------------------------------------------------/
+
+
+---> TESTPOINT PASSED (psHash functions{psHashAlloc()} | tst_psHash00.c)
+
Index: /trunk/psLib/test/sysUtils/verified/tst_psHash01.stdout
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psHash01.stdout	(revision 560)
+++ /trunk/psLib/test/sysUtils/verified/tst_psHash01.stdout	(revision 560)
@@ -0,0 +1,9 @@
+/----------------------------- TESTPOINT --------------------------------\
+|   TestFile: tst_psHash01.c                                             |
+|  TestPoint: psHash functions{psHashFree()}                             |
+|   TestType: Positive                                                   |
+\------------------------------------------------------------------------/
+
+
+---> TESTPOINT PASSED (psHash functions{psHashFree()} | tst_psHash01.c)
+
Index: /trunk/psLib/test/sysUtils/verified/tst_psHash02.stdout
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psHash02.stdout	(revision 560)
+++ /trunk/psLib/test/sysUtils/verified/tst_psHash02.stdout	(revision 560)
@@ -0,0 +1,9 @@
+/----------------------------- TESTPOINT --------------------------------\
+|   TestFile: tst_psHash02.c                                             |
+|  TestPoint: psHash functions{psHashInsert()}                           |
+|   TestType: Positive                                                   |
+\------------------------------------------------------------------------/
+
+
+---> TESTPOINT PASSED (psHash functions{psHashInsert()} | tst_psHash02.c)
+
Index: /trunk/psLib/test/sysUtils/verified/tst_psHash03.stdout
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psHash03.stdout	(revision 560)
+++ /trunk/psLib/test/sysUtils/verified/tst_psHash03.stdout	(revision 560)
@@ -0,0 +1,9 @@
+/----------------------------- TESTPOINT --------------------------------\
+|   TestFile: tst_psHash03.c                                             |
+|  TestPoint: psHash functions{psHashRemove()}                           |
+|   TestType: Positive                                                   |
+\------------------------------------------------------------------------/
+
+
+---> TESTPOINT PASSED (psHash functions{psHashRemove()} | tst_psHash03.c)
+
Index: /trunk/psLib/test/sysUtils/verified/tst_psHash04.stdout
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psHash04.stdout	(revision 560)
+++ /trunk/psLib/test/sysUtils/verified/tst_psHash04.stdout	(revision 560)
@@ -0,0 +1,9 @@
+/----------------------------- TESTPOINT --------------------------------\
+|   TestFile: tst_psHash04.c                                             |
+|  TestPoint: psHash functions{psHashKeyList()}                          |
+|   TestType: Positive                                                   |
+\------------------------------------------------------------------------/
+
+
+---> TESTPOINT PASSED (psHash functions{psHashKeyList()} | tst_psHash04.c)
+
Index: /trunk/psLib/test/sysUtils/verified/tst_psLogMsg00.stderr
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psLogMsg00.stderr	(revision 560)
+++ /trunk/psLib/test/sysUtils/verified/tst_psLogMsg00.stderr	(revision 560)
@@ -0,0 +1,4 @@
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |A|main           |Hello World!  My level is 0
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |E|main           |Hello World!  My level is 1
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |W|main           |Hello World!  My level is 2
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |I|main           |Hello World!  My level is 3
Index: /trunk/psLib/test/sysUtils/verified/tst_psLogMsg00.stdout
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psLogMsg00.stdout	(revision 560)
+++ /trunk/psLib/test/sysUtils/verified/tst_psLogMsg00.stdout	(revision 560)
@@ -0,0 +1,9 @@
+/----------------------------- TESTPOINT --------------------------------\
+|   TestFile: tst_psLogMsg00.c                                           |
+|  TestPoint: psLogMsg functions{default log levels}                     |
+|   TestType: Positive                                                   |
+\------------------------------------------------------------------------/
+
+
+---> TESTPOINT PASSED (psLogMsg functions{default log levels} | tst_psLogMsg00.c)
+
Index: /trunk/psLib/test/sysUtils/verified/tst_psLogMsg01.stderr
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psLogMsg01.stderr	(revision 560)
+++ /trunk/psLib/test/sysUtils/verified/tst_psLogMsg01.stderr	(revision 560)
@@ -0,0 +1,11 @@
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |A|main           |Hello World!  My level is 0
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |E|main           |Hello World!  My level is 1
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |W|main           |Hello World!  My level is 2
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |I|main           |Hello World!  My level is 3
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |4|main           |Hello World!  My level is 4
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |5|main           |Hello World!  My level is 5
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |6|main           |Hello World!  My level is 6
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |7|main           |Hello World!  My level is 7
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |8|main           |Hello World!  My level is 8
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |9|main           |Hello World!  My level is 9
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |4|main           |This should  be displayed (level 4)
Index: /trunk/psLib/test/sysUtils/verified/tst_psLogMsg01.stdout
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psLogMsg01.stdout	(revision 560)
+++ /trunk/psLib/test/sysUtils/verified/tst_psLogMsg01.stdout	(revision 560)
@@ -0,0 +1,9 @@
+/----------------------------- TESTPOINT --------------------------------\
+|   TestFile: tst_psLogMsg01.c                                           |
+|  TestPoint: psLogMsg functions{psSetLogLevel()}                        |
+|   TestType: Positive                                                   |
+\------------------------------------------------------------------------/
+
+
+---> TESTPOINT PASSED (psLogMsg functions{psSetLogLevel()} | tst_psLogMsg01.c)
+
Index: /trunk/psLib/test/sysUtils/verified/tst_psLogMsg02.stderr
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psLogMsg02.stderr	(revision 560)
+++ /trunk/psLib/test/sysUtils/verified/tst_psLogMsg02.stderr	(revision 560)
@@ -0,0 +1,28 @@
+
+
+
+
+2004:05:01 23:10:09Z|
+2004:05:01 23:10:09Z|
+2004:05:01 23:10:09Z|
+2004:05:01 23:10:09Z|
+kitty.mhpcc.hpc.mil |
+kitty.mhpcc.hpc.mil |
+kitty.mhpcc.hpc.mil |
+kitty.mhpcc.hpc.mil |
+A|
+E|
+W|
+I|
+main           |
+main           |
+main           |
+main           |
+Hello World!  My level is 0
+Hello World!  My level is 1
+Hello World!  My level is 2
+Hello World!  My level is 3
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |A|main           |Hello World!  My level is 0
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |E|main           |Hello World!  My level is 1
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |W|main           |Hello World!  My level is 2
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |I|main           |Hello World!  My level is 3
Index: /trunk/psLib/test/sysUtils/verified/tst_psLogMsg02.stdout
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psLogMsg02.stdout	(revision 560)
+++ /trunk/psLib/test/sysUtils/verified/tst_psLogMsg02.stdout	(revision 560)
@@ -0,0 +1,16 @@
+/----------------------------- TESTPOINT --------------------------------\
+|   TestFile: tst_psLogMsg02.c                                           |
+|  TestPoint: psLogMsg functions{psSetLogFormat()}                       |
+|   TestType: Positive                                                   |
+\------------------------------------------------------------------------/
+
+------------- psSetLogFormat() -------------
+------------- psSetLogFormat(T) -------------
+------------- psSetLogFormat(H) -------------
+------------- psSetLogFormat(L) -------------
+------------- psSetLogFormat(N) -------------
+------------- psSetLogFormat(M) -------------
+------------- psSetLogFormat(THLNM) -------------
+
+---> TESTPOINT PASSED (psLogMsg functions{psSetLogFormat()} | tst_psLogMsg02.c)
+
Index: /trunk/psLib/test/sysUtils/verified/tst_psLogMsg03.stderr
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psLogMsg03.stderr	(revision 560)
+++ /trunk/psLib/test/sysUtils/verified/tst_psLogMsg03.stderr	(revision 560)
@@ -0,0 +1,8 @@
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |A|main           |Hello World!  My level is 0
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |E|main           |Hello World!  My level is 1
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |W|main           |Hello World!  My level is 2
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |I|main           |Hello World!  My level is 3
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |A|main           |Hello World!  My level is 0
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |E|main           |Hello World!  My level is 1
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |W|main           |Hello World!  My level is 2
+2004:05:01 23:10:09Z|kitty.mhpcc.hpc.mil |I|main           |Hello World!  My level is 3
Index: /trunk/psLib/test/sysUtils/verified/tst_psLogMsg03.stdout
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psLogMsg03.stdout	(revision 560)
+++ /trunk/psLib/test/sysUtils/verified/tst_psLogMsg03.stdout	(revision 560)
@@ -0,0 +1,12 @@
+/----------------------------- TESTPOINT --------------------------------\
+|   TestFile: tst_psLogMsg03.c                                           |
+|  TestPoint: psLogMsg functions{psSetLogDestination()}                  |
+|   TestType: Positive                                                   |
+\------------------------------------------------------------------------/
+
+------------- psSetLogDestination(PS_LOG_NONE) -------------
+------------- psSetLogDestination(PS_LOG_TO_STDERR) -------------
+------------- psSetLogDestination(PS_LOG_TO_STDOUT) -------------
+
+---> TESTPOINT PASSED (psLogMsg functions{psSetLogDestination()} | tst_psLogMsg03.c)
+
Index: /trunk/psLib/test/sysUtils/verified/tst_psTrace00.stderr
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psTrace00.stderr	(revision 559)
+++ /trunk/psLib/test/sysUtils/verified/tst_psTrace00.stderr	(revision 560)
@@ -1,9 +1,0 @@
-/----------------------------- TESTPOINT --------------------------------\
-|   TestFile: tst_psTrace00.c                                            |
-|  TestPoint: psTrace functions{Testing psSetTraceLevel and psGetTraceLevel} |
-|   TestType: Positive                                                   |
-\------------------------------------------------------------------------/
-
-
----> TESTPOINT PASSED (psTrace functions{Testing psSetTraceLevel and psGetTraceLevel} | tst_psTrace00.c)
-
Index: /trunk/psLib/test/sysUtils/verified/tst_psTrace00.stdout
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psTrace00.stdout	(revision 559)
+++ /trunk/psLib/test/sysUtils/verified/tst_psTrace00.stdout	(revision 560)
@@ -0,0 +1,9 @@
+/----------------------------- TESTPOINT --------------------------------\
+|   TestFile: tst_psTrace00.c                                            |
+|  TestPoint: psTrace functions{psSetTraceLevel() and psGetTraceLevel()} |
+|   TestType: Positive                                                   |
+\------------------------------------------------------------------------/
+
+
+---> TESTPOINT PASSED (psTrace functions{Testing psSetTraceLevel and psGetTraceLevel} | tst_psTrace00.c)
+
Index: /trunk/psLib/test/sysUtils/verified/tst_psTrace01.stderr
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psTrace01.stderr	(revision 559)
+++ /trunk/psLib/test/sysUtils/verified/tst_psTrace01.stderr	(revision 560)
@@ -1,9 +1,0 @@
-/----------------------------- TESTPOINT --------------------------------\
-|   TestFile: tst_psTrace01.c                                            |
-|  TestPoint: psTrace functions{Testing psTraceReset()}                  |
-|   TestType: Positive                                                   |
-\------------------------------------------------------------------------/
-
-
----> TESTPOINT PASSED (psTrace functions{Testing psTraceReset()} | tst_psTrace01.c)
-
Index: /trunk/psLib/test/sysUtils/verified/tst_psTrace01.stdout
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psTrace01.stdout	(revision 559)
+++ /trunk/psLib/test/sysUtils/verified/tst_psTrace01.stdout	(revision 560)
@@ -0,0 +1,9 @@
+/----------------------------- TESTPOINT --------------------------------\
+|   TestFile: tst_psTrace01.c                                            |
+|  TestPoint: psTrace functions{psTraceReset()}                          |
+|   TestType: Positive                                                   |
+\------------------------------------------------------------------------/
+
+
+---> TESTPOINT PASSED (psTrace functions{psTraceReset()} | tst_psTrace01.c)
+
Index: /trunk/psLib/test/sysUtils/verified/tst_psTrace02.stdout
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psTrace02.stdout	(revision 559)
+++ /trunk/psLib/test/sysUtils/verified/tst_psTrace02.stdout	(revision 560)
@@ -1,3 +1,12 @@
+/----------------------------- TESTPOINT --------------------------------\
+|   TestFile: tst_psTrace02.c                                            |
+|  TestPoint: psTrace functions{psTrace()}                               |
+|   TestType: Positive                                                   |
+\------------------------------------------------------------------------/
+
      (0) This message should be displayed (beefface)
      (1) This message should be displayed (beefface)
      (2) This message should be displayed (beefface)
+
+---> TESTPOINT PASSED (psTrace functions{psTrace()} | tst_psTrace02.c)
+
Index: /trunk/psLib/test/sysUtils/verified/tst_psTrace03.stdout
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psTrace03.stdout	(revision 559)
+++ /trunk/psLib/test/sysUtils/verified/tst_psTrace03.stdout	(revision 560)
@@ -1,2 +1,8 @@
+/----------------------------- TESTPOINT --------------------------------\
+|   TestFile: tst_psTrace03.c                                            |
+|  TestPoint: psTrace functions{psTracePrintLevels()}                    |
+|   TestType: Positive                                                   |
+\------------------------------------------------------------------------/
+
 .                    9
  a                   8
@@ -10,2 +16,5 @@
   b                  3
   c                  5
+
+---> TESTPOINT PASSED (psTrace functions{psTracePrintLevels()} | tst_psTrace03.c)
+
Index: /trunk/psLib/test/sysUtils/verified/tst_psTrace04.stdout
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psTrace04.stdout	(revision 560)
+++ /trunk/psLib/test/sysUtils/verified/tst_psTrace04.stdout	(revision 560)
@@ -0,0 +1,9 @@
+/----------------------------- TESTPOINT --------------------------------\
+|   TestFile: tst_psTrace04.c                                            |
+|  TestPoint: psTrace functions{Testing psTraceReset()}                  |
+|   TestType: Positive                                                   |
+\------------------------------------------------------------------------/
+
+
+---> TESTPOINT PASSED (psTrace functions{psTraceReset()} | tst_psTrace04.c)
+
