Index: trunk/archive/pslib/include/psHash.h
===================================================================
--- trunk/archive/pslib/include/psHash.h	(revision 359)
+++ trunk/archive/pslib/include/psHash.h	(revision 1581)
@@ -7,6 +7,16 @@
  */
 
-/** DO WE NEED TO DEFINE HashTable? */
-typedef struct HashTable psHash;	///< Opaque type for a hash table
+/** A hash table */
+typedef struct {
+    int nbucket;                        ///< number of buckets
+    psHashBucket **buckets;             ///< the buckets themselves
+} psHash;
+
+/** The hash buckets, which compose the hash */
+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;
 
 /** Functions **************************************************************/
@@ -15,28 +25,27 @@
  */
 
-/// Allocate hash buckets in table.
+/** Allocate hash buckets in table. */
 psHash *psHashAlloc(void);
 
-/// Free hash buckets from table.
-void psHashFree(psHash *table,		///< hash table to be freed
-		void (*itemFree)(void *item) ///< how to free hashed data; or NULL
+/** Add entry to table. */
+bool psHashAdd(psHash *table,		///< table to insert in
+	       const char *key,		///< key to use
+	       void *data		///< data to insert
     );
 
-/// Insert entry into table.
-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
-    );
-
-/// Lookup key in table.
+/** Lookup key in table. */
 void *psHashLookup(psHash *table,	///< table to lookup key in
 		   const char *key	///< key to lookup
     );
 
-/// Remove key from table.
-void *psHashRemove(psHash *table,	///< table to lookup key in
-		   const char *key	///< key to lookup
+/** Remove key from table. */
+bool psHashRemove(psHash *table,	///< table to lookup key in
+		  const char *key	///< key to lookup
     );
+
+/** Get list of keys */
+psList *psHashKeyList(psHash *table	///< table for which to get keys
+    );
+
 
 /* \} */ // End of DataGroup Functions
