Index: /trunk/psLib/src/dataManip/psConstants.h
===================================================================
--- /trunk/psLib/src/dataManip/psConstants.h	(revision 4107)
+++ /trunk/psLib/src/dataManip/psConstants.h	(revision 4108)
@@ -6,6 +6,6 @@
  *  @author GLG, MHPCC
  *
- *  @version $Revision: 1.71 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-05-31 21:48:13 $
+ *  @version $Revision: 1.72 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-06-04 00:49:48 $
  *
  *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -60,5 +60,5 @@
 
 #define PS_ASSERT_INT_UNEQUAL(NAME1, NAME2, RVAL) \
-if (NAME1 == NAME2) { \
+if ((NAME1) == (NAME2)) { \
     psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
             "Error: %s and %s are equal.", \
@@ -68,5 +68,5 @@
 
 #define PS_ASSERT_INT_EQUAL(NAME1, NAME2, RVAL) \
-if (NAME1 != NAME2) { \
+if ((NAME1) != (NAME2)) { \
     psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
             "Error: %s and %s are not equal.", \
@@ -76,5 +76,5 @@
 
 #define PS_ASSERT_INT_NONNEGATIVE(NAME, RVAL) \
-if (NAME < 0) { \
+if ((NAME) < 0) { \
     psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
             "Error: %s is less than 0.", #NAME); \
@@ -83,5 +83,5 @@
 
 #define PS_ASSERT_INT_POSITIVE(NAME, RVAL) \
-if (NAME < 1) { \
+if ((NAME) < 1) { \
     psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
             "Error: %s is 0 or less.", #NAME); \
@@ -90,5 +90,5 @@
 
 #define PS_ASSERT_INT_ZERO(NAME, RVAL) \
-if (NAME != 0) { \
+if ((NAME) != 0) { \
     psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
             "Error: %s is 0.", #NAME); \
@@ -97,5 +97,5 @@
 
 #define PS_ASSERT_INT_NONZERO(NAME, RVAL) \
-if (NAME == 0) { \
+if ((NAME) == 0) { \
     psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
             "Error: %s is 0.", #NAME); \
@@ -103,6 +103,7 @@
 }
 
+// XXX: Where did these int casts come from?
 #define PS_ASSERT_INT_WITHIN_RANGE(NAME, LOWER, UPPER, RVAL) \
-if ((int)NAME < LOWER || (int)NAME > UPPER) { \
+if ((int)(NAME) < LOWER || (int)(NAME) > UPPER) { \
     psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
             "Error: %s, %d, is out of range.  Must be between %d and %d.", \
@@ -111,8 +112,39 @@
 }
 
+#define PS_ASSERT_INT_LARGER_THAN(NAME1, NAME2, RVAL) \
+if (!((NAME1) > (NAME2))) { \
+    psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
+            "Error: !(%s > %s) (%d %d).", \
+            #NAME1, #NAME2, NAME1, NAME2); \
+    return(RVAL); \
+}
+
+#define PS_ASSERT_INT_LARGER_THAN_OR_EQUAL(NAME1, NAME2, RVAL) \
+if (!((NAME1) >= (NAME2))) { \
+    psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
+            "Error: !(%s >= %s) (%d %d).", \
+            #NAME1, #NAME2, NAME1, NAME2); \
+    return(RVAL); \
+}
+#define PS_ASSERT_FLOAT_LARGER_THAN(NAME1, NAME2, RVAL) \
+if (!((NAME1) > (NAME2))) { \
+    psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
+            "Error: !(%s > %s) (%f %f).", \
+            #NAME1, #NAME2, NAME1, NAME2); \
+    return(RVAL); \
+}
+
+#define PS_ASSERT_FLOAT_LARGER_THAN_OR_EQUAL(NAME1, NAME2, RVAL) \
+if (!((NAME1) >= (NAME2))) { \
+    psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
+            "Error: !(%s >= %s) (%f %f).", \
+            #NAME1, #NAME2, NAME1, NAME2); \
+    return(RVAL); \
+}
+
 // Produce an error if (NAME1 > NAME2)
-// XXX: rename: ASSERT
+// XXX: Get rid of this, use above macros.
 #define PS_INT_COMPARE(NAME1, NAME2, RVAL) \
-if (NAME1 > NAME2) { \
+if ((NAME1) > (NAME2)) { \
     psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
             "Error: (%s > %s) (%d %d).", \
@@ -122,7 +154,7 @@
 
 // Produce an error if ((NAME1 > NAME2)
-// XXX: rename: ASSERT
+// XXX: Get rid of this, use above macros.
 #define PS_FLOAT_COMPARE(NAME1, NAME2, RVAL) \
-if (NAME1 > NAME2) { \
+if ((NAME1) > (NAME2)) { \
     psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
             "Error: (%s > %s) (%f %f)", \
@@ -131,10 +163,16 @@
 }
 
-// Generate an error if the two floats are equal.
-// XXX: Inconsistent naming.
 #define PS_ASSERT_FLOAT_NON_EQUAL(NAME1, NAME2, RVAL) \
-if (fabs(NAME2 - NAME1) < FLT_EPSILON) { \
+if (fabs((NAME2) - (NAME1)) < FLT_EPSILON) { \
     psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
             "Error: %s and %s are equal.", \
+            #NAME1, #NAME2); \
+    return(RVAL); \
+}
+
+#define PS_ASSERT_FLOAT_EQUAL(NAME1, NAME2, RVAL) \
+if (fabs((NAME2) - (NAME1)) > FLT_EPSILON) { \
+    psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
+            "Error: %s and %s are not equal.", \
             #NAME1, #NAME2); \
     return(RVAL); \
@@ -165,5 +203,5 @@
 #define PS_ASSERT_PTR_NON_NULL(NAME, RVAL) PS_ASSERT_GENERAL_PTR_NON_NULL(NAME, return RVAL)
 #define PS_ASSERT_GENERAL_PTR_NON_NULL(NAME, CLEANUP) \
-if (NAME == NULL) { \
+if ((NAME) == NULL) { \
     psError(PS_ERR_BAD_PARAMETER_NULL, true, \
             "Unallowable operation: %s is NULL.", \
@@ -173,5 +211,5 @@
 
 #define PS_ASSERT_PTR_TYPE(NAME, TYPE, RVAL) \
-if (NAME->type.type != TYPE) { \
+if ((NAME)->type.type != TYPE) { \
     psError(PS_ERR_BAD_PARAMETER_TYPE, true, \
             "Unallowable operation: %s has incorrect type.", \
@@ -182,5 +220,5 @@
 #define PS_ASSERT_PTR_DIMEN(NAME, DIMEN, RVAL) PS_ASSERT_GENERAL_PTR_DIMEN(NAME, DIMEN, return RVAL)
 #define PS_ASSERT_GENERAL_PTR_DIMEN(NAME, DIMEN, CLEANUP) \
-if (NAME->type.dimen != DIMEN) { \
+if ((NAME)->type.dimen != DIMEN) { \
     psError(PS_ERR_BAD_PARAMETER_TYPE, true, \
             "Unallowable operation: %s has incorrect dimensionality.", \
@@ -190,5 +228,5 @@
 
 #define PS_ASSERT_PTR_DIMEN_GENERAL_NOT(NAME, DIMEN, CLEANUP) \
-if (NAME->type.dimen == DIMEN) { \
+if ((NAME)->type.dimen == DIMEN) { \
     psError(PS_ERR_BAD_PARAMETER_TYPE, true, \
             "Unallowable operation: %s has incorrect dimensionality.", \
@@ -221,5 +259,5 @@
 #define PS_ASSERT_VECTOR_NON_NULL(NAME, RVAL) PS_ASSERT_GENERAL_VECTOR_NON_NULL(NAME, return RVAL)
 #define PS_ASSERT_GENERAL_VECTOR_NON_NULL(NAME, CLEANUP) \
-if (NAME == NULL || NAME->data.U8 == NULL) { \
+if ((NAME) == NULL || (NAME)->data.U8 == NULL) { \
     psError(PS_ERR_BAD_PARAMETER_NULL, true, \
             "Unallowable operation: psVector %s or its data is NULL.", \
@@ -230,5 +268,5 @@
 #define PS_ASSERT_VECTOR_NON_EMPTY(NAME, RVAL) PS_ASSERT_GENERAL_VECTOR_NON_EMPTY(NAME, return RVAL)
 #define PS_ASSERT_GENERAL_VECTOR_NON_EMPTY(NAME, CLEANUP) \
-if (NAME->n < 1) { \
+if ((NAME)->n < 1) { \
     psError(PS_ERR_BAD_PARAMETER_SIZE, true, \
             "Unallowable operation: psVector %s has no elements.", \
@@ -238,5 +276,5 @@
 
 #define PS_ASSERT_VECTOR_TYPE_F32_OR_F64(NAME, RVAL) \
-if ((NAME->type.type != PS_TYPE_F32) && (NAME->type.type != PS_TYPE_F64)) { \
+if (((NAME)->type.type != PS_TYPE_F32) && ((NAME)->type.type != PS_TYPE_F64)) { \
     psError(PS_ERR_BAD_PARAMETER_TYPE, true, \
             "psVector %s: bad type(%d)", \
@@ -246,5 +284,5 @@
 
 #define PS_ASSERT_VECTOR_TYPE_S16_S32_F32(NAME, RVAL) \
-if ((NAME->type.type != PS_TYPE_S16) && (NAME->type.type != PS_TYPE_S32) && (NAME->type.type != PS_TYPE_F32)) { \
+if (((NAME)->type.type != PS_TYPE_S16) && ((NAME)->type.type != PS_TYPE_S32) && ((NAME)->type.type != PS_TYPE_F32)) { \
     psError(PS_ERR_BAD_PARAMETER_TYPE, true, \
             "psVector %s: bad type(%d)", \
@@ -254,5 +292,5 @@
 
 #define PS_ASSERT_VECTOR_TYPE(NAME, TYPE, RVAL) \
-if (NAME->type.type != TYPE) { \
+if ((NAME)->type.type != TYPE) { \
     psError(PS_ERR_BAD_PARAMETER_TYPE, true, \
             "Unallowable operation: psVector %s has incorrect type.", \
@@ -298,6 +336,6 @@
 
 #define PS_VECTOR_PRINT_F32(NAME) \
-for (int my_i=0;my_i<NAME->n;my_i++) { \
-    printf("%s->data.F32[%d] is %f\n", #NAME, my_i, NAME->data.F32[my_i]); \
+for (int my_i=0;my_i<(NAME)->n;my_i++) { \
+    printf("%s->data.F32[%d] is %f\n", #NAME, my_i, (NAME)->data.F32[my_i]); \
 } \
 printf("\n"); \
@@ -364,13 +402,13 @@
 #define PS_VECTOR_GEN_STATIC_RECYCLED(NAME, SIZE, TYPE) \
 static psVector *NAME = NULL; \
-NAME = psVectorRecycle(NAME, SIZE, TYPE); \
-p_psMemSetPersistent(NAME, true); \
-p_psMemSetPersistent(NAME->data.U8, true); \
+(NAME) = psVectorRecycle((NAME), SIZE, TYPE); \
+p_psMemSetPersistent((NAME), true); \
+p_psMemSetPersistent((NAME)->data.U8, true); \
 
 #define PS_VECTOR_DECLARE_ALLOC_STATIC(NAME, SIZE, TYPE) \
-static psVector *NAME = NULL; \
-if (NAME == NULL) { \
-    NAME = psVectorAlloc(SIZE, TYPE); \
-    p_psMemSetPersistent(NAME, true); \
+static psVector *(NAME) = NULL; \
+if ((NAME) == NULL) { \
+    (NAME) = psVectorAlloc(SIZE, TYPE); \
+    p_psMemSetPersistent((NAME), true); \
 } \
 
@@ -430,5 +468,5 @@
 *****************************************************************************/
 #define PS_ASSERT_POLY_NON_NULL(NAME, RVAL) \
-if (NAME == NULL || NAME->coeff == NULL) { \
+if ((NAME) == NULL || (NAME)->coeff == NULL) { \
     psError(PS_ERR_BAD_PARAMETER_NULL, true, \
             "Unallowable operation: polynomial %s or its coeffs is NULL.", \
@@ -438,5 +476,5 @@
 
 #define PS_ASSERT_POLY_TYPE(NAME, TYPE, RVAL) \
-if (NAME->type != TYPE) { \
+if ((NAME)->type != TYPE) { \
     psError(PS_ERR_BAD_PARAMETER_TYPE, true, \
             "Unallowable operation: polynomial %s has wrong type.", #NAME); \
@@ -448,60 +486,60 @@
 
 #define PS_POLY_1D_DECLARE_ALLOC_STATIC(NAME, ORDER, TYPE) \
-static psPolynomial1D *NAME = NULL; \
-if (NAME == NULL) { \
-    NAME = psPolynomial1DAlloc(ORDER, TYPE); \
-    p_psMemSetPersistent(NAME, true); \
-    p_psMemSetPersistent(NAME->coeff, true); \
-    p_psMemSetPersistent(NAME->coeffErr, true); \
-    p_psMemSetPersistent(NAME->mask, true); \
+static psPolynomial1D *(NAME) = NULL; \
+if ((NAME) == NULL) { \
+    (NAME) = psPolynomial1DAlloc(ORDER, TYPE); \
+    p_psMemSetPersistent((NAME), true); \
+    p_psMemSetPersistent((NAME)->coeff, true); \
+    p_psMemSetPersistent((NAME)->coeffErr, true); \
+    p_psMemSetPersistent((NAME)->mask, true); \
 } \
 
 #define PS_POLY_2D_DECLARE_ALLOC_STATIC(NAME, ORDER, TYPE) \
-static psPolynomial2D *NAME = NULL; \
-if (NAME == NULL) { \
-    NAME = psPolynomial2DAlloc(ORDER, TYPE); \
-    p_psMemSetPersistent(NAME, true); \
+static psPolynomial2D *(NAME) = NULL; \
+if ((NAME) == NULL) { \
+    (NAME) = psPolynomial2DAlloc(ORDER, TYPE); \
+    p_psMemSetPersistent((NAME), true); \
 } \
 
 #define PS_POLY_3D_DECLARE_ALLOC_STATIC(NAME, ORDER, TYPE) \
-static psPolynomial3D *NAME = NULL; \
-if (NAME == NULL) { \
-    NAME = psPolynomial3DAlloc(ORDER, TYPE); \
-    p_psMemSetPersistent(NAME, true); \
+static psPolynomial3D *(NAME) = NULL; \
+if ((NAME) == NULL) { \
+    (NAME) = psPolynomial3DAlloc(ORDER, TYPE); \
+    p_psMemSetPersistent((NAME), true); \
 } \
 
 #define PS_POLY_4D_DECLARE_ALLOC_STATIC(NAME, ORDER, TYPE) \
-static psPolynomial4D *NAME = NULL; \
-if (NAME == NULL) { \
-    NAME = psPolynomial4DAlloc(ORDER, TYPE); \
-    p_psMemSetPersistent(NAME, true); \
+static psPolynomial4D *(NAME) = NULL; \
+if ((NAME) == NULL) { \
+    (NAME) = psPolynomial4DAlloc(ORDER, TYPE); \
+    p_psMemSetPersistent((NAME), true); \
 } \
 
 #define PS_POLY_1D_D_DECLARE_ALLOC_STATIC(NAME, ORDER, TYPE) \
-static psPolynomial1D *NAME = NULL; \
-if (NAME == NULL) { \
-    NAME = psPolynomial1DAlloc(ORDER, TYPE); \
-    p_psMemSetPersistent(NAME, true); \
+static psPolynomial1D *(NAME) = NULL; \
+if ((NAME) == NULL) { \
+    (NAME) = psPolynomial1DAlloc(ORDER, TYPE); \
+    p_psMemSetPersistent((NAME), true); \
 } \
 
 #define PS_POLY_2D_D_DECLARE_ALLOC_STATIC(NAME, ORDER, TYPE) \
-static psPolynomial2D *NAME = NULL; \
-if (NAME == NULL) { \
-    NAME = psPolynomial2DAlloc(ORDER, TYPE); \
-    p_psMemSetPersistent(NAME, true); \
+static psPolynomial2D *(NAME) = NULL; \
+if ((NAME) == NULL) { \
+    (NAME) = psPolynomial2DAlloc(ORDER, TYPE); \
+    p_psMemSetPersistent((NAME), true); \
 } \
 
 #define PS_POLY_3D_D_DECLARE_ALLOC_STATIC(NAME, ORDER, TYPE) \
-static psPolynomial3D *NAME = NULL; \
-if (NAME == NULL) { \
-    NAME = psPolynomial3DAlloc(ORDER, TYPE); \
-    p_psMemSetPersistent(NAME, true); \
+static psPolynomial3D *(NAME) = NULL; \
+if ((NAME) == NULL) { \
+    (NAME) = psPolynomial3DAlloc(ORDER, TYPE); \
+    p_psMemSetPersistent((NAME), true); \
 } \
 
 #define PS_POLY_4D_D_DECLARE_ALLOC_STATIC(NAME, ORDER, TYPE) \
-static psPolynomial4D *NAME = NULL; \
-if (NAME == NULL) { \
-    NAME = psPolynomial4DAlloc(ORDER, TYPE); \
-    p_psMemSetPersistent(NAME, true); \
+static psPolynomial4D *(NAME) = NULL; \
+if ((NAME) == NULL) { \
+    (NAME) = psPolynomial4DAlloc(ORDER, TYPE); \
+    p_psMemSetPersistent((NAME), true); \
 } \
 
@@ -511,5 +549,5 @@
 #define PS_ASSERT_IMAGE_NON_NULL(NAME, RVAL) PS_ASSERT_GENERAL_IMAGE_NON_NULL(NAME, return RVAL)
 #define PS_ASSERT_GENERAL_IMAGE_NON_NULL(NAME, CLEANUP) \
-if (NAME == NULL || NAME->data.V == NULL) { \
+if ((NAME) == NULL || (NAME)->data.V == NULL) { \
     psError(PS_ERR_BAD_PARAMETER_NULL, true, \
             "Unallowable operation: psImage %s or its data is NULL.", \
@@ -520,13 +558,13 @@
 #define PS_ASSERT_IMAGE_NON_EMPTY(NAME, RVAL) PS_ASSERT_GENERAL_IMAGE_NON_EMPTY(NAME, return RVAL)
 #define PS_ASSERT_GENERAL_IMAGE_NON_EMPTY(NAME, CLEANUP) \
-if (NAME->numCols < 1 || NAME->numRows < 1) { \
+if ((NAME)->numCols < 1 || (NAME)->numRows < 1) { \
     psError(PS_ERR_BAD_PARAMETER_SIZE, true, \
             "Unallowable operation: psImage %s has zero rows or columns (%dx%d).", \
-            #NAME, NAME->numCols, NAME->numRows); \
+            #NAME, (NAME)->numCols, (NAME)->numRows); \
     CLEANUP; \
 }
 
 #define PS_ASSERT_IMAGE_TYPE(NAME, TYPE, RVAL) \
-if (NAME->type.type != TYPE) { \
+if ((NAME)->type.type != TYPE) { \
     psError(PS_ERR_BAD_PARAMETER_TYPE, true, \
             "Unallowable operation: psImage %s has incorrect type.", \
@@ -536,6 +574,6 @@
 
 #define PS_ASSERT_IMAGES_SIZE_EQUAL(NAME1, NAME2, RVAL) \
-if ((NAME1->numCols != NAME2->numCols) || \
-        (NAME1->numRows != NAME2->numRows)) { \
+if (((NAME1)->numCols != (NAME2)->numCols) || \
+        ((NAME1)->numRows != (NAME2)->numRows)) { \
     psError(PS_ERR_BAD_PARAMETER_SIZE, true, \
             "Unallowable operation: psImages %s and %s are not the same size.", \
@@ -545,6 +583,6 @@
 
 #define PS_ASSERT_IMAGE_SIZE(NAME1, NUM_COLS, NUM_ROWS, RVAL) \
-if ((NAME1->numCols != NUM_COLS) || \
-        (NAME1->numRows != NUM_ROWS)) { \
+if (((NAME1)->numCols != NUM_COLS) || \
+        ((NAME1)->numRows != NUM_ROWS)) { \
     psError(PS_ERR_BAD_PARAMETER_SIZE, true, \
             "Unallowable operation: psImages %s is not the correct size.", \
@@ -555,7 +593,7 @@
 #define PS_IMAGE_PRINT_F32(NAME) \
 printf("======== printing %s ========\n", #NAME); \
-for (int i = 0 ; i < NAME->numRows ; i++) { \
-    for (int j = 0 ; j < NAME->numCols ; j++) { \
-        printf("%.2f ", NAME->data.F32[i][j]); \
+for (int i = 0 ; i < (NAME)->numRows ; i++) { \
+    for (int j = 0 ; j < (NAME)->numCols ; j++) { \
+        printf("%.2f ", (NAME)->data.F32[i][j]); \
     } \
     printf("\n"); \
@@ -636,5 +674,5 @@
 *****************************************************************************/
 #define PS_ASSERT_READOUT_NON_NULL(NAME, RVAL) \
-if (NAME == NULL || NAME->image == NULL) { \
+if ((NAME) == NULL || (NAME)->image == NULL) { \
     psError(PS_ERR_BAD_PARAMETER_NULL, true, \
             "Unallowable operation: psReadout %s or its data is NULL.", \
@@ -644,5 +682,5 @@
 
 #define PS_ASSERT_READOUT_NON_EMPTY(NAME, RVAL) \
-if (NAME->image->numCols < 1 || NAME->image->numRows < 1) { \
+if ((NAME)->image->numCols < 1 || (NAME)->image->numRows < 1) { \
     psError(PS_ERR_BAD_PARAMETER_SIZE, true, \
             "Unallowable operation: psReadout %s or its data is NULL.", #NAME); \
@@ -651,5 +689,5 @@
 
 #define PS_ASSERT_READOUT_TYPE(NAME, TYPE, RVAL) \
-if (NAME->image->type.type != TYPE) { \
+if ((NAME)->image->type.type != TYPE) { \
     psError(PS_ERR_BAD_PARAMETER_TYPE, true, \
             "Unallowable operation: psImage %s has incorrect type.", #NAME); \
Index: /trunk/psLib/src/math/psConstants.h
===================================================================
--- /trunk/psLib/src/math/psConstants.h	(revision 4107)
+++ /trunk/psLib/src/math/psConstants.h	(revision 4108)
@@ -6,6 +6,6 @@
  *  @author GLG, MHPCC
  *
- *  @version $Revision: 1.71 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-05-31 21:48:13 $
+ *  @version $Revision: 1.72 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-06-04 00:49:48 $
  *
  *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -60,5 +60,5 @@
 
 #define PS_ASSERT_INT_UNEQUAL(NAME1, NAME2, RVAL) \
-if (NAME1 == NAME2) { \
+if ((NAME1) == (NAME2)) { \
     psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
             "Error: %s and %s are equal.", \
@@ -68,5 +68,5 @@
 
 #define PS_ASSERT_INT_EQUAL(NAME1, NAME2, RVAL) \
-if (NAME1 != NAME2) { \
+if ((NAME1) != (NAME2)) { \
     psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
             "Error: %s and %s are not equal.", \
@@ -76,5 +76,5 @@
 
 #define PS_ASSERT_INT_NONNEGATIVE(NAME, RVAL) \
-if (NAME < 0) { \
+if ((NAME) < 0) { \
     psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
             "Error: %s is less than 0.", #NAME); \
@@ -83,5 +83,5 @@
 
 #define PS_ASSERT_INT_POSITIVE(NAME, RVAL) \
-if (NAME < 1) { \
+if ((NAME) < 1) { \
     psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
             "Error: %s is 0 or less.", #NAME); \
@@ -90,5 +90,5 @@
 
 #define PS_ASSERT_INT_ZERO(NAME, RVAL) \
-if (NAME != 0) { \
+if ((NAME) != 0) { \
     psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
             "Error: %s is 0.", #NAME); \
@@ -97,5 +97,5 @@
 
 #define PS_ASSERT_INT_NONZERO(NAME, RVAL) \
-if (NAME == 0) { \
+if ((NAME) == 0) { \
     psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
             "Error: %s is 0.", #NAME); \
@@ -103,6 +103,7 @@
 }
 
+// XXX: Where did these int casts come from?
 #define PS_ASSERT_INT_WITHIN_RANGE(NAME, LOWER, UPPER, RVAL) \
-if ((int)NAME < LOWER || (int)NAME > UPPER) { \
+if ((int)(NAME) < LOWER || (int)(NAME) > UPPER) { \
     psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
             "Error: %s, %d, is out of range.  Must be between %d and %d.", \
@@ -111,8 +112,39 @@
 }
 
+#define PS_ASSERT_INT_LARGER_THAN(NAME1, NAME2, RVAL) \
+if (!((NAME1) > (NAME2))) { \
+    psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
+            "Error: !(%s > %s) (%d %d).", \
+            #NAME1, #NAME2, NAME1, NAME2); \
+    return(RVAL); \
+}
+
+#define PS_ASSERT_INT_LARGER_THAN_OR_EQUAL(NAME1, NAME2, RVAL) \
+if (!((NAME1) >= (NAME2))) { \
+    psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
+            "Error: !(%s >= %s) (%d %d).", \
+            #NAME1, #NAME2, NAME1, NAME2); \
+    return(RVAL); \
+}
+#define PS_ASSERT_FLOAT_LARGER_THAN(NAME1, NAME2, RVAL) \
+if (!((NAME1) > (NAME2))) { \
+    psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
+            "Error: !(%s > %s) (%f %f).", \
+            #NAME1, #NAME2, NAME1, NAME2); \
+    return(RVAL); \
+}
+
+#define PS_ASSERT_FLOAT_LARGER_THAN_OR_EQUAL(NAME1, NAME2, RVAL) \
+if (!((NAME1) >= (NAME2))) { \
+    psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
+            "Error: !(%s >= %s) (%f %f).", \
+            #NAME1, #NAME2, NAME1, NAME2); \
+    return(RVAL); \
+}
+
 // Produce an error if (NAME1 > NAME2)
-// XXX: rename: ASSERT
+// XXX: Get rid of this, use above macros.
 #define PS_INT_COMPARE(NAME1, NAME2, RVAL) \
-if (NAME1 > NAME2) { \
+if ((NAME1) > (NAME2)) { \
     psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
             "Error: (%s > %s) (%d %d).", \
@@ -122,7 +154,7 @@
 
 // Produce an error if ((NAME1 > NAME2)
-// XXX: rename: ASSERT
+// XXX: Get rid of this, use above macros.
 #define PS_FLOAT_COMPARE(NAME1, NAME2, RVAL) \
-if (NAME1 > NAME2) { \
+if ((NAME1) > (NAME2)) { \
     psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
             "Error: (%s > %s) (%f %f)", \
@@ -131,10 +163,16 @@
 }
 
-// Generate an error if the two floats are equal.
-// XXX: Inconsistent naming.
 #define PS_ASSERT_FLOAT_NON_EQUAL(NAME1, NAME2, RVAL) \
-if (fabs(NAME2 - NAME1) < FLT_EPSILON) { \
+if (fabs((NAME2) - (NAME1)) < FLT_EPSILON) { \
     psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
             "Error: %s and %s are equal.", \
+            #NAME1, #NAME2); \
+    return(RVAL); \
+}
+
+#define PS_ASSERT_FLOAT_EQUAL(NAME1, NAME2, RVAL) \
+if (fabs((NAME2) - (NAME1)) > FLT_EPSILON) { \
+    psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
+            "Error: %s and %s are not equal.", \
             #NAME1, #NAME2); \
     return(RVAL); \
@@ -165,5 +203,5 @@
 #define PS_ASSERT_PTR_NON_NULL(NAME, RVAL) PS_ASSERT_GENERAL_PTR_NON_NULL(NAME, return RVAL)
 #define PS_ASSERT_GENERAL_PTR_NON_NULL(NAME, CLEANUP) \
-if (NAME == NULL) { \
+if ((NAME) == NULL) { \
     psError(PS_ERR_BAD_PARAMETER_NULL, true, \
             "Unallowable operation: %s is NULL.", \
@@ -173,5 +211,5 @@
 
 #define PS_ASSERT_PTR_TYPE(NAME, TYPE, RVAL) \
-if (NAME->type.type != TYPE) { \
+if ((NAME)->type.type != TYPE) { \
     psError(PS_ERR_BAD_PARAMETER_TYPE, true, \
             "Unallowable operation: %s has incorrect type.", \
@@ -182,5 +220,5 @@
 #define PS_ASSERT_PTR_DIMEN(NAME, DIMEN, RVAL) PS_ASSERT_GENERAL_PTR_DIMEN(NAME, DIMEN, return RVAL)
 #define PS_ASSERT_GENERAL_PTR_DIMEN(NAME, DIMEN, CLEANUP) \
-if (NAME->type.dimen != DIMEN) { \
+if ((NAME)->type.dimen != DIMEN) { \
     psError(PS_ERR_BAD_PARAMETER_TYPE, true, \
             "Unallowable operation: %s has incorrect dimensionality.", \
@@ -190,5 +228,5 @@
 
 #define PS_ASSERT_PTR_DIMEN_GENERAL_NOT(NAME, DIMEN, CLEANUP) \
-if (NAME->type.dimen == DIMEN) { \
+if ((NAME)->type.dimen == DIMEN) { \
     psError(PS_ERR_BAD_PARAMETER_TYPE, true, \
             "Unallowable operation: %s has incorrect dimensionality.", \
@@ -221,5 +259,5 @@
 #define PS_ASSERT_VECTOR_NON_NULL(NAME, RVAL) PS_ASSERT_GENERAL_VECTOR_NON_NULL(NAME, return RVAL)
 #define PS_ASSERT_GENERAL_VECTOR_NON_NULL(NAME, CLEANUP) \
-if (NAME == NULL || NAME->data.U8 == NULL) { \
+if ((NAME) == NULL || (NAME)->data.U8 == NULL) { \
     psError(PS_ERR_BAD_PARAMETER_NULL, true, \
             "Unallowable operation: psVector %s or its data is NULL.", \
@@ -230,5 +268,5 @@
 #define PS_ASSERT_VECTOR_NON_EMPTY(NAME, RVAL) PS_ASSERT_GENERAL_VECTOR_NON_EMPTY(NAME, return RVAL)
 #define PS_ASSERT_GENERAL_VECTOR_NON_EMPTY(NAME, CLEANUP) \
-if (NAME->n < 1) { \
+if ((NAME)->n < 1) { \
     psError(PS_ERR_BAD_PARAMETER_SIZE, true, \
             "Unallowable operation: psVector %s has no elements.", \
@@ -238,5 +276,5 @@
 
 #define PS_ASSERT_VECTOR_TYPE_F32_OR_F64(NAME, RVAL) \
-if ((NAME->type.type != PS_TYPE_F32) && (NAME->type.type != PS_TYPE_F64)) { \
+if (((NAME)->type.type != PS_TYPE_F32) && ((NAME)->type.type != PS_TYPE_F64)) { \
     psError(PS_ERR_BAD_PARAMETER_TYPE, true, \
             "psVector %s: bad type(%d)", \
@@ -246,5 +284,5 @@
 
 #define PS_ASSERT_VECTOR_TYPE_S16_S32_F32(NAME, RVAL) \
-if ((NAME->type.type != PS_TYPE_S16) && (NAME->type.type != PS_TYPE_S32) && (NAME->type.type != PS_TYPE_F32)) { \
+if (((NAME)->type.type != PS_TYPE_S16) && ((NAME)->type.type != PS_TYPE_S32) && ((NAME)->type.type != PS_TYPE_F32)) { \
     psError(PS_ERR_BAD_PARAMETER_TYPE, true, \
             "psVector %s: bad type(%d)", \
@@ -254,5 +292,5 @@
 
 #define PS_ASSERT_VECTOR_TYPE(NAME, TYPE, RVAL) \
-if (NAME->type.type != TYPE) { \
+if ((NAME)->type.type != TYPE) { \
     psError(PS_ERR_BAD_PARAMETER_TYPE, true, \
             "Unallowable operation: psVector %s has incorrect type.", \
@@ -298,6 +336,6 @@
 
 #define PS_VECTOR_PRINT_F32(NAME) \
-for (int my_i=0;my_i<NAME->n;my_i++) { \
-    printf("%s->data.F32[%d] is %f\n", #NAME, my_i, NAME->data.F32[my_i]); \
+for (int my_i=0;my_i<(NAME)->n;my_i++) { \
+    printf("%s->data.F32[%d] is %f\n", #NAME, my_i, (NAME)->data.F32[my_i]); \
 } \
 printf("\n"); \
@@ -364,13 +402,13 @@
 #define PS_VECTOR_GEN_STATIC_RECYCLED(NAME, SIZE, TYPE) \
 static psVector *NAME = NULL; \
-NAME = psVectorRecycle(NAME, SIZE, TYPE); \
-p_psMemSetPersistent(NAME, true); \
-p_psMemSetPersistent(NAME->data.U8, true); \
+(NAME) = psVectorRecycle((NAME), SIZE, TYPE); \
+p_psMemSetPersistent((NAME), true); \
+p_psMemSetPersistent((NAME)->data.U8, true); \
 
 #define PS_VECTOR_DECLARE_ALLOC_STATIC(NAME, SIZE, TYPE) \
-static psVector *NAME = NULL; \
-if (NAME == NULL) { \
-    NAME = psVectorAlloc(SIZE, TYPE); \
-    p_psMemSetPersistent(NAME, true); \
+static psVector *(NAME) = NULL; \
+if ((NAME) == NULL) { \
+    (NAME) = psVectorAlloc(SIZE, TYPE); \
+    p_psMemSetPersistent((NAME), true); \
 } \
 
@@ -430,5 +468,5 @@
 *****************************************************************************/
 #define PS_ASSERT_POLY_NON_NULL(NAME, RVAL) \
-if (NAME == NULL || NAME->coeff == NULL) { \
+if ((NAME) == NULL || (NAME)->coeff == NULL) { \
     psError(PS_ERR_BAD_PARAMETER_NULL, true, \
             "Unallowable operation: polynomial %s or its coeffs is NULL.", \
@@ -438,5 +476,5 @@
 
 #define PS_ASSERT_POLY_TYPE(NAME, TYPE, RVAL) \
-if (NAME->type != TYPE) { \
+if ((NAME)->type != TYPE) { \
     psError(PS_ERR_BAD_PARAMETER_TYPE, true, \
             "Unallowable operation: polynomial %s has wrong type.", #NAME); \
@@ -448,60 +486,60 @@
 
 #define PS_POLY_1D_DECLARE_ALLOC_STATIC(NAME, ORDER, TYPE) \
-static psPolynomial1D *NAME = NULL; \
-if (NAME == NULL) { \
-    NAME = psPolynomial1DAlloc(ORDER, TYPE); \
-    p_psMemSetPersistent(NAME, true); \
-    p_psMemSetPersistent(NAME->coeff, true); \
-    p_psMemSetPersistent(NAME->coeffErr, true); \
-    p_psMemSetPersistent(NAME->mask, true); \
+static psPolynomial1D *(NAME) = NULL; \
+if ((NAME) == NULL) { \
+    (NAME) = psPolynomial1DAlloc(ORDER, TYPE); \
+    p_psMemSetPersistent((NAME), true); \
+    p_psMemSetPersistent((NAME)->coeff, true); \
+    p_psMemSetPersistent((NAME)->coeffErr, true); \
+    p_psMemSetPersistent((NAME)->mask, true); \
 } \
 
 #define PS_POLY_2D_DECLARE_ALLOC_STATIC(NAME, ORDER, TYPE) \
-static psPolynomial2D *NAME = NULL; \
-if (NAME == NULL) { \
-    NAME = psPolynomial2DAlloc(ORDER, TYPE); \
-    p_psMemSetPersistent(NAME, true); \
+static psPolynomial2D *(NAME) = NULL; \
+if ((NAME) == NULL) { \
+    (NAME) = psPolynomial2DAlloc(ORDER, TYPE); \
+    p_psMemSetPersistent((NAME), true); \
 } \
 
 #define PS_POLY_3D_DECLARE_ALLOC_STATIC(NAME, ORDER, TYPE) \
-static psPolynomial3D *NAME = NULL; \
-if (NAME == NULL) { \
-    NAME = psPolynomial3DAlloc(ORDER, TYPE); \
-    p_psMemSetPersistent(NAME, true); \
+static psPolynomial3D *(NAME) = NULL; \
+if ((NAME) == NULL) { \
+    (NAME) = psPolynomial3DAlloc(ORDER, TYPE); \
+    p_psMemSetPersistent((NAME), true); \
 } \
 
 #define PS_POLY_4D_DECLARE_ALLOC_STATIC(NAME, ORDER, TYPE) \
-static psPolynomial4D *NAME = NULL; \
-if (NAME == NULL) { \
-    NAME = psPolynomial4DAlloc(ORDER, TYPE); \
-    p_psMemSetPersistent(NAME, true); \
+static psPolynomial4D *(NAME) = NULL; \
+if ((NAME) == NULL) { \
+    (NAME) = psPolynomial4DAlloc(ORDER, TYPE); \
+    p_psMemSetPersistent((NAME), true); \
 } \
 
 #define PS_POLY_1D_D_DECLARE_ALLOC_STATIC(NAME, ORDER, TYPE) \
-static psPolynomial1D *NAME = NULL; \
-if (NAME == NULL) { \
-    NAME = psPolynomial1DAlloc(ORDER, TYPE); \
-    p_psMemSetPersistent(NAME, true); \
+static psPolynomial1D *(NAME) = NULL; \
+if ((NAME) == NULL) { \
+    (NAME) = psPolynomial1DAlloc(ORDER, TYPE); \
+    p_psMemSetPersistent((NAME), true); \
 } \
 
 #define PS_POLY_2D_D_DECLARE_ALLOC_STATIC(NAME, ORDER, TYPE) \
-static psPolynomial2D *NAME = NULL; \
-if (NAME == NULL) { \
-    NAME = psPolynomial2DAlloc(ORDER, TYPE); \
-    p_psMemSetPersistent(NAME, true); \
+static psPolynomial2D *(NAME) = NULL; \
+if ((NAME) == NULL) { \
+    (NAME) = psPolynomial2DAlloc(ORDER, TYPE); \
+    p_psMemSetPersistent((NAME), true); \
 } \
 
 #define PS_POLY_3D_D_DECLARE_ALLOC_STATIC(NAME, ORDER, TYPE) \
-static psPolynomial3D *NAME = NULL; \
-if (NAME == NULL) { \
-    NAME = psPolynomial3DAlloc(ORDER, TYPE); \
-    p_psMemSetPersistent(NAME, true); \
+static psPolynomial3D *(NAME) = NULL; \
+if ((NAME) == NULL) { \
+    (NAME) = psPolynomial3DAlloc(ORDER, TYPE); \
+    p_psMemSetPersistent((NAME), true); \
 } \
 
 #define PS_POLY_4D_D_DECLARE_ALLOC_STATIC(NAME, ORDER, TYPE) \
-static psPolynomial4D *NAME = NULL; \
-if (NAME == NULL) { \
-    NAME = psPolynomial4DAlloc(ORDER, TYPE); \
-    p_psMemSetPersistent(NAME, true); \
+static psPolynomial4D *(NAME) = NULL; \
+if ((NAME) == NULL) { \
+    (NAME) = psPolynomial4DAlloc(ORDER, TYPE); \
+    p_psMemSetPersistent((NAME), true); \
 } \
 
@@ -511,5 +549,5 @@
 #define PS_ASSERT_IMAGE_NON_NULL(NAME, RVAL) PS_ASSERT_GENERAL_IMAGE_NON_NULL(NAME, return RVAL)
 #define PS_ASSERT_GENERAL_IMAGE_NON_NULL(NAME, CLEANUP) \
-if (NAME == NULL || NAME->data.V == NULL) { \
+if ((NAME) == NULL || (NAME)->data.V == NULL) { \
     psError(PS_ERR_BAD_PARAMETER_NULL, true, \
             "Unallowable operation: psImage %s or its data is NULL.", \
@@ -520,13 +558,13 @@
 #define PS_ASSERT_IMAGE_NON_EMPTY(NAME, RVAL) PS_ASSERT_GENERAL_IMAGE_NON_EMPTY(NAME, return RVAL)
 #define PS_ASSERT_GENERAL_IMAGE_NON_EMPTY(NAME, CLEANUP) \
-if (NAME->numCols < 1 || NAME->numRows < 1) { \
+if ((NAME)->numCols < 1 || (NAME)->numRows < 1) { \
     psError(PS_ERR_BAD_PARAMETER_SIZE, true, \
             "Unallowable operation: psImage %s has zero rows or columns (%dx%d).", \
-            #NAME, NAME->numCols, NAME->numRows); \
+            #NAME, (NAME)->numCols, (NAME)->numRows); \
     CLEANUP; \
 }
 
 #define PS_ASSERT_IMAGE_TYPE(NAME, TYPE, RVAL) \
-if (NAME->type.type != TYPE) { \
+if ((NAME)->type.type != TYPE) { \
     psError(PS_ERR_BAD_PARAMETER_TYPE, true, \
             "Unallowable operation: psImage %s has incorrect type.", \
@@ -536,6 +574,6 @@
 
 #define PS_ASSERT_IMAGES_SIZE_EQUAL(NAME1, NAME2, RVAL) \
-if ((NAME1->numCols != NAME2->numCols) || \
-        (NAME1->numRows != NAME2->numRows)) { \
+if (((NAME1)->numCols != (NAME2)->numCols) || \
+        ((NAME1)->numRows != (NAME2)->numRows)) { \
     psError(PS_ERR_BAD_PARAMETER_SIZE, true, \
             "Unallowable operation: psImages %s and %s are not the same size.", \
@@ -545,6 +583,6 @@
 
 #define PS_ASSERT_IMAGE_SIZE(NAME1, NUM_COLS, NUM_ROWS, RVAL) \
-if ((NAME1->numCols != NUM_COLS) || \
-        (NAME1->numRows != NUM_ROWS)) { \
+if (((NAME1)->numCols != NUM_COLS) || \
+        ((NAME1)->numRows != NUM_ROWS)) { \
     psError(PS_ERR_BAD_PARAMETER_SIZE, true, \
             "Unallowable operation: psImages %s is not the correct size.", \
@@ -555,7 +593,7 @@
 #define PS_IMAGE_PRINT_F32(NAME) \
 printf("======== printing %s ========\n", #NAME); \
-for (int i = 0 ; i < NAME->numRows ; i++) { \
-    for (int j = 0 ; j < NAME->numCols ; j++) { \
-        printf("%.2f ", NAME->data.F32[i][j]); \
+for (int i = 0 ; i < (NAME)->numRows ; i++) { \
+    for (int j = 0 ; j < (NAME)->numCols ; j++) { \
+        printf("%.2f ", (NAME)->data.F32[i][j]); \
     } \
     printf("\n"); \
@@ -636,5 +674,5 @@
 *****************************************************************************/
 #define PS_ASSERT_READOUT_NON_NULL(NAME, RVAL) \
-if (NAME == NULL || NAME->image == NULL) { \
+if ((NAME) == NULL || (NAME)->image == NULL) { \
     psError(PS_ERR_BAD_PARAMETER_NULL, true, \
             "Unallowable operation: psReadout %s or its data is NULL.", \
@@ -644,5 +682,5 @@
 
 #define PS_ASSERT_READOUT_NON_EMPTY(NAME, RVAL) \
-if (NAME->image->numCols < 1 || NAME->image->numRows < 1) { \
+if ((NAME)->image->numCols < 1 || (NAME)->image->numRows < 1) { \
     psError(PS_ERR_BAD_PARAMETER_SIZE, true, \
             "Unallowable operation: psReadout %s or its data is NULL.", #NAME); \
@@ -651,5 +689,5 @@
 
 #define PS_ASSERT_READOUT_TYPE(NAME, TYPE, RVAL) \
-if (NAME->image->type.type != TYPE) { \
+if ((NAME)->image->type.type != TYPE) { \
     psError(PS_ERR_BAD_PARAMETER_TYPE, true, \
             "Unallowable operation: psImage %s has incorrect type.", #NAME); \
