Index: trunk/archive/pslib/src/Utils/Makefile
===================================================================
--- trunk/archive/pslib/src/Utils/Makefile	(revision 390)
+++ trunk/archive/pslib/src/Utils/Makefile	(revision 446)
@@ -1,4 +1,4 @@
 CC = cc -std=c99
-CFLAGS = -Wall -g -I$(PSLIB_DIR)/include
+CFLAGS = -Wall -g -I$(PSLIB_DIR)/include -I$(FFTW_DIR)/include
 
 PSLIB_DIR = ../..
@@ -6,7 +6,7 @@
 OBJS = array.o dlist.o error.o hash.o logmsg.o memory.o misc.o trace.o
 
-libUtils.a : $(OBJS)
-	ar r libUtils.a $?
-	ranlib libUtils.a
+$(PSLIB_DIR)/lib/libUtils.a : $(OBJS)
+	ar r $(PSLIB_DIR)/lib/libUtils.a $?
+	ranlib $(PSLIB_DIR)/lib/libUtils.a
 #
 # Error codes
@@ -25,18 +25,18 @@
 		$$p; \
 	done
-tst_array : libUtils.a tst_array.o
-	$(CC) -o tst_array tst_array.o libUtils.a
-tst_dlist : libUtils.a tst_dlist.o
-	$(CC) -o tst_dlist tst_dlist.o libUtils.a
-tst_error : libUtils.a tst_error.o
-	$(CC) -o tst_error tst_error.o libUtils.a
-tst_hash : libUtils.a tst_hash.o
-	$(CC) -o tst_hash tst_hash.o libUtils.a
-tst_logmsg : libUtils.a tst_logmsg.o
-	$(CC) -o tst_logmsg tst_logmsg.o libUtils.a
-tst_memory : libUtils.a tst_memory.o
-	$(CC) -o tst_memory tst_memory.o libUtils.a
-tst_trace : libUtils.a tst_trace.o
-	$(CC) -o tst_trace tst_trace.o libUtils.a
+tst_array : $(PSLIB_DIR)/lib/libUtils.a tst_array.o
+	$(CC) $(CFLAGS) -o tst_array tst_array.o $(PSLIB_DIR)/lib/libUtils.a
+tst_dlist : $(PSLIB_DIR)/lib/libUtils.a tst_dlist.o
+	$(CC) $(CFLAGS) -o tst_dlist tst_dlist.o $(PSLIB_DIR)/lib/libUtils.a
+tst_error : $(PSLIB_DIR)/lib/libUtils.a tst_error.o
+	$(CC) $(CFLAGS) -o tst_error tst_error.o $(PSLIB_DIR)/lib/libUtils.a
+tst_hash : $(PSLIB_DIR)/lib/libUtils.a tst_hash.o
+	$(CC) $(CFLAGS) -o tst_hash tst_hash.o $(PSLIB_DIR)/lib/libUtils.a
+tst_logmsg : $(PSLIB_DIR)/lib/libUtils.a tst_logmsg.o
+	$(CC) $(CFLAGS) -o tst_logmsg tst_logmsg.o $(PSLIB_DIR)/lib/libUtils.a
+tst_memory : $(PSLIB_DIR)/lib/libUtils.a tst_memory.o
+	$(CC) $(CFLAGS) -o tst_memory tst_memory.o $(PSLIB_DIR)/lib/libUtils.a
+tst_trace : $(PSLIB_DIR)/lib/libUtils.a tst_trace.o
+	$(CC) $(CFLAGS) -o tst_trace tst_trace.o $(PSLIB_DIR)/lib/libUtils.a
 #
 #
Index: trunk/archive/pslib/src/Utils/array.c
===================================================================
--- trunk/archive/pslib/src/Utils/array.c	(revision 390)
+++ trunk/archive/pslib/src/Utils/array.c	(revision 446)
@@ -11,7 +11,7 @@
 P_PS_CREATE_ARRAY_TYPE(static, my_, psVoidPtr);
 
-psVoidPtrArray *psVoidPtrArrayAlloc(int n, int s)
+psVoidPtrArray *psVoidPtrArrayAlloc(int n)
 {
-    return my_psVoidPtrArrayAlloc(n, s);
+    return my_psVoidPtrArrayAlloc(n);
 }
 
Index: trunk/archive/pslib/src/Utils/dlist.c
===================================================================
--- trunk/archive/pslib/src/Utils/dlist.c	(revision 390)
+++ trunk/archive/pslib/src/Utils/dlist.c	(revision 446)
@@ -313,5 +313,5 @@
     }
     
-    psVoidPtrArray *restrict arr = psVoidPtrArrayAlloc(dlist->n, dlist->n);
+    psVoidPtrArray *restrict arr = psVoidPtrArrayAlloc(dlist->n);
 
     psDlistElem *ptr = dlist->head;
Index: trunk/archive/pslib/src/Utils/hash.c
===================================================================
--- trunk/archive/pslib/src/Utils/hash.c	(revision 390)
+++ trunk/archive/pslib/src/Utils/hash.c	(revision 446)
@@ -67,6 +67,7 @@
  * Con/Destruct psHash tables
  */
-psHash *psHashAlloc(int nbucket)	// initial number of buckets
-{
+psHash *psHashAlloc(void)
+{
+    int nbucket = 128;			// XXX initial number of buckets
     psHash *table = psAlloc(sizeof(psHash));
     table->buckets = psAlloc(nbucket*sizeof(HashBucket *));
Index: trunk/archive/pslib/src/Utils/memory.c
===================================================================
--- trunk/archive/pslib/src/Utils/memory.c	(revision 390)
+++ trunk/archive/pslib/src/Utils/memory.c	(revision 446)
@@ -52,9 +52,9 @@
     return NULL;
 }
-static psMemExhaustedCallback memExhaustedCB = memExhaustedCB0;
-
-psMemExhaustedCallback psMemExhaustedSetCB(psMemExhaustedCallback func)
-{
-    psMemExhaustedCallback old = memExhaustedCB;
+static psMemExhaustedCB memExhaustedCB = memExhaustedCB0;
+
+psMemExhaustedCB psMemExhaustedSetCB(psMemExhaustedCB func)
+{
+    psMemExhaustedCB old = memExhaustedCB;
 
     memExhaustedCB = (func != NULL) ? func : memExhaustedCB0;
@@ -89,9 +89,9 @@
     }
 }
-static psMemProblemCallback memProblemCB = memProblemCB0;
-
-psMemProblemCallback psMemProblemSetCB(psMemProblemCallback func)
-{
-    psMemProblemCallback old = memProblemCB;
+static psMemProblemCB memProblemCB = memProblemCB0;
+
+psMemProblemCB psMemProblemSetCB(psMemProblemCB func)
+{
+    psMemProblemCB old = memProblemCB;
 
     memProblemCB = (func != NULL) ? func : memProblemCB0;
@@ -129,5 +129,5 @@
  * isn't resignalled)
  */
-static int memAllocateCB0(const psMemBlock *ptr)
+static long memAllocateCB0(const psMemBlock *ptr)
 {
     static int incr = 0;		// "p_psMemAllocateID += incr"
@@ -138,5 +138,5 @@
 }
 
-static int memFreeCB0(const psMemBlock *ptr)
+static long memFreeCB0(const psMemBlock *ptr)
 {
     static int incr = 0;		// "p_psMemFreeID += incr"
@@ -150,10 +150,10 @@
  * The default callbacks, and the routines to change them
  */
-static psMemCallback memAllocateCB = memAllocateCB0;
-static psMemCallback memFreeCB = memFreeCB0;
-
-psMemCallback psMemAllocateSetCB(psMemCallback func)
-{
-    psMemCallback old = memAllocateCB;
+static psMemAllocateCB memAllocateCB = memAllocateCB0;
+static psMemFreeCB memFreeCB = memFreeCB0;
+
+psMemAllocateCB psMemAllocateSetCB(psMemAllocateCB func)
+{
+    psMemAllocateCB old = memAllocateCB;
 
     memAllocateCB = (func != NULL) ? func : memAllocateCB0;
@@ -162,7 +162,7 @@
 }
 
-psMemCallback psMemFreeSetCB(psMemCallback func)
-{
-    psMemCallback old = memFreeCB;
+psMemFreeCB psMemFreeSetCB(psMemFreeCB func)
+{
+    psMemFreeCB old = memFreeCB;
 
     memFreeCB = (func != NULL) ? func : memFreeCB0;
@@ -208,5 +208,5 @@
     }
     
-    if (m->magic0 != P_PS_MEMMAGIC || m->magic != P_PS_MEMMAGIC) {
+    if (m->startblock != P_PS_MEMMAGIC || m->endblock != P_PS_MEMMAGIC) {
 	if (!quiet) {
 	    psError(__func__, PS_ERR_MEMORY_CORRUPTION, PS_NEW_ERROR,
@@ -261,5 +261,6 @@
     ptr->file = file;
     *(int *)&ptr->lineno = lineno;
-    *(void **)&ptr->magic0 = *(void **)&ptr->magic = P_PS_MEMMAGIC;
+    *(void **)&ptr->startblock = *(void **)&ptr->endblock = P_PS_MEMMAGIC;
+    ptr->endpost = &ptr->endblock;	// should point just beyond allocated memory XXX
 
     ptr->refCounter = 1;		// one user so far
Index: trunk/archive/pslib/src/Utils/psArray.h
===================================================================
--- trunk/archive/pslib/src/Utils/psArray.h	(revision 390)
+++ trunk/archive/pslib/src/Utils/psArray.h	(revision 446)
@@ -2,5 +2,4 @@
 #define PS_ARRAY_H
 
-//#include <stdlib.h>
 /**
  * Declare TYPEArray
@@ -8,11 +7,11 @@
 #define PS_DECLARE_ARRAY_TYPE(TYPE) \
     typedef struct { \
-	int size;			/* number of allocated elements */ \
-	int n;				/* number of elements in use */ \
-	\
+	psType type;			/* Type of data.  THIS STRUCT ELEMENT MUST BE FIRST IN THE STRUCT */\
+	int nalloc;			/* Total number of elements available */\
+	int n;				/* Number of elements in use */\
 	TYPE *arr;			/* the actual data */ \
     } PS_CONCAT(TYPE, Array); \
     \
-PS_CONCAT(TYPE, Array) *PS_CONCAT3(TYPE,Array,Alloc)(int n, int s); \
+PS_CONCAT(TYPE, Array) *PS_CONCAT3(TYPE,Array,Alloc)(int n); \
 PS_CONCAT(TYPE, Array) *PS_CONCAT3(TYPE,Array,Realloc)(PS_CONCAT(TYPE, Array) *arr, int n); \
 void PS_CONCAT3(TYPE,Array,Free)(PS_CONCAT(TYPE, Array) *arr)
@@ -27,21 +26,14 @@
 #define P_PS_CREATE_ARRAY_TYPE(QUAL,PREFIX,TYPE) \
 \
-QUAL PS_CONCAT(TYPE, Array) *PS_CONCAT4(PREFIX,TYPE,Array,Alloc)(int n, /* initial dimension */\
-                                                   int s) /* initial number of elements */ \
+QUAL PS_CONCAT(TYPE, Array) *PS_CONCAT4(PREFIX,TYPE,Array,Alloc)(int n) /* initial dimension */ \
 { \
     PS_CONCAT(TYPE, Array) *arr = psAlloc(sizeof(PS_CONCAT(TYPE, Array))); \
     \
-    if (n > s) { \
-	psLogMsg(PS_STRING(TYPE) "ArrayAlloc", PS_LOG_ERROR, "Too few elements requested in array (%d < %d)\n", s, n); \
-	s = n; \
-    } \
+    arr->nalloc = arr->n = n; \
     \
-    arr->size = s; \
-    arr->n = n; \
-    \
-    if (s == 0) { \
+    if (n == 0) { \
 	arr->arr = NULL; \
     } else { \
-	arr->arr = psAlloc(s*sizeof(TYPE)); \
+	arr->arr = psAlloc(n*sizeof(TYPE)); \
     } \
     \
@@ -52,8 +44,8 @@
 { \
     if (arr == NULL) { \
-	return PS_CONCAT4(PREFIX,TYPE,Array,Alloc)(n, n); \
+	return PS_CONCAT4(PREFIX,TYPE,Array,Alloc)(n); \
     } \
     \
-    if (n <= arr->size) { \
+    if (n <= arr->nalloc) { \
 	if (arr->n < n) { \
 	    arr->n = n; \
@@ -61,5 +53,5 @@
     } else { \
         arr->arr = psRealloc(arr->arr, n*sizeof(TYPE)); \
-	arr->size = n; \
+	arr->nalloc = n; \
     } \
     \
@@ -91,7 +83,7 @@
     P_PS_CREATE_ARRAY_TYPE(static, my_, P_PS_CONCAT(TYPE, Ptr)) \
     \
-    PS_CONCAT(TYPE, PtrArray) *PS_CONCAT3(TYPE,PtrArray,Alloc)(int n, int s) \
+    PS_CONCAT(TYPE, PtrArray) *PS_CONCAT3(TYPE,PtrArray,Alloc)(int n) \
     { \
-	PS_CONCAT(TYPE, PtrArray) *arr = PS_CONCAT4(my_,TYPE,PtrArray,Alloc)(n, s); \
+	PS_CONCAT(TYPE, PtrArray) *arr = PS_CONCAT4(my_,TYPE,PtrArray,Alloc)(n); \
 	for (int i = 0; i < arr->n; i++) { \
 	    arr->arr[i] = psMemIncrRefCounter(PS_CONCAT(TYPE, Alloc)());\
@@ -113,5 +105,5 @@
     { \
 	if (arr == NULL) { return; } \
-	for (int i = 0; i < arr->size; i++) { \
+	for (int i = 0; i < arr->nalloc; i++) { \
 	    PS_CONCAT(TYPE, Free)(psMemDecrRefCounter(arr->arr[i])); \
 	} \
Index: trunk/archive/pslib/src/Utils/tst_array.c
===================================================================
--- trunk/archive/pslib/src/Utils/tst_array.c	(revision 390)
+++ trunk/archive/pslib/src/Utils/tst_array.c	(revision 446)
@@ -1,3 +1,4 @@
 #include "psLib.h"
+#include "psArray.h"
 
 typedef struct {
@@ -23,6 +24,6 @@
 int main(void)
 {
-    psXYArray *t = psXYArrayAlloc(10, 15);
-    psXYPtrArray *pt = psXYPtrArrayAlloc(10, 10);
+    psXYArray *t = psXYArrayAlloc(10);
+    psXYPtrArray *pt = psXYPtrArrayAlloc(10);
 
     for (int i = 0; i < t->n; i++) {
Index: trunk/archive/pslib/src/Utils/tst_hash.c
===================================================================
--- trunk/archive/pslib/src/Utils/tst_hash.c	(revision 390)
+++ trunk/archive/pslib/src/Utils/tst_hash.c	(revision 446)
@@ -32,5 +32,5 @@
     long memId0 = psMemGetId();
 
-    psHash *hash = psHashAlloc(16);
+    psHash *hash = psHashAlloc();
 
     psHashInsert(hash, "Lynda", IdAlloc("Lee"), (void (*)(void *))IdFree);
Index: trunk/archive/pslib/src/Utils/tst_memory.c
===================================================================
--- trunk/archive/pslib/src/Utils/tst_memory.c	(revision 390)
+++ trunk/archive/pslib/src/Utils/tst_memory.c	(revision 446)
@@ -30,5 +30,5 @@
 }
 
-static psMemProblemCallback default_MemProblemCB = NULL;
+static psMemProblemCB default_MemProblemCB = NULL;
 
 static void my_MemProblemCB(const psMemBlock *ptr,
