Index: trunk/psLib/src/dataManip/psMatrixVectorArithmetic.c
===================================================================
--- trunk/psLib/src/dataManip/psMatrixVectorArithmetic.c	(revision 1064)
+++ trunk/psLib/src/dataManip/psMatrixVectorArithmetic.c	(revision 1065)
@@ -29,6 +29,6 @@
  *  @author Ross Harman, MHPCC
  *
- *  @version $Revision: 1.3 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2004-06-19 02:00:45 $
+ *  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2004-06-21 21:04:24 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -46,4 +46,5 @@
 #include "psImage.h"
 #include "psVector.h"
+#include "psScalar.h"
 
 /******************************************************************************/
@@ -79,4 +80,6 @@
 #define MAX(A,B) (((A) > (B)) ? (A) : (B))
 
+
+// VECTOR_XXXX operations
 #define VECTOR_SCALAR(OUT,IN1,OP,IN2,TYPE)                                                                   \
 {                                                                                                            \
@@ -94,4 +97,5 @@
     }                                                                                                        \
 }
+
 #define VECTOR_VECTOR(OUT,IN1,OP,IN2,TYPE)                                                                   \
 {                                                                                                            \
@@ -107,4 +111,27 @@
     for (i=0; i < npt; i++, o++, i1++, i2++) {                                                               \
         *o = OP;                                                                                             \
+    }                                                                                                        \
+}
+
+
+// IMAGE_XXXX operations
+#define IMAGE_SCALAR(OUT,IN1,OP,IN2,TYPE)                                                                    \
+{                                                                                                            \
+    int i = 0;                                                                                               \
+    int j = 0;                                                                                               \
+    int numRows = 0;                                                                                         \
+    int numCols = 0;                                                                                         \
+    ps##TYPE *o = NULL;                                                                                      \
+    ps##TYPE *i1 = NULL;                                                                                     \
+    ps##TYPE *i2 = NULL;                                                                                     \
+    numRows = ((psImage*)IN1)->numRows;                                                                      \
+    numCols = ((psImage*)IN1)->numCols;                                                                      \
+    for(j = 0; j < numCols; j++) {                                                                           \
+        o  = ((psImage*)OUT)->data.TYPE[j];                                                                  \
+        i1 = ((psImage*)IN1)->data.TYPE[j];                                                                  \
+        i2 = &((psScalar*)IN2)->data.TYPE;                                                                   \
+        for(i = 0; i < numRows; i++, o++, i1++) {                                                            \
+            *o = OP;                                                                                         \
+        }                                                                                                    \
     }                                                                                                        \
 }
@@ -126,4 +153,55 @@
         i2 = ((psImage*)IN2)->data.TYPE[j];                                                                  \
         for(i = 0; i < numRows; i++, o++, i1++, i2++) {                                                      \
+            *o = OP;                                                                                         \
+        }                                                                                                    \
+    }                                                                                                        \
+}
+
+// SCALAR_XXXX operations
+#define SCALAR_SCALAR(OUT,IN1,OP,IN2,TYPE)                                                                   \
+{                                                                                                            \
+    int i = 0;                                                                                               \
+    ps##TYPE *o = NULL;                                                                                      \
+    ps##TYPE *i1 = NULL;                                                                                     \
+    ps##TYPE *i2 = NULL;                                                                                     \
+    o  = &((psScalar*)OUT)->data.TYPE;                                                                       \
+    i1 = &((psScalar*)IN1)->data.TYPE;                                                                       \
+    i2 = &((psScalar*)IN2)->data.TYPE;                                                                       \
+    *o = OP;                                                                                                 \
+}
+
+#define SCALAR_VECTOR(OUT,IN1,OP,IN2,TYPE)                                                                   \
+{                                                                                                            \
+    int i = 0;                                                                                               \
+    int npt = 0;                                                                                             \
+    ps##TYPE *o = NULL;                                                                                      \
+    ps##TYPE *i1 = NULL;                                                                                     \
+    ps##TYPE *i2 = NULL;                                                                                     \
+    npt  = ((psVector*)IN1)->n;                                                                              \
+    o  = ((psVector*)OUT)->data.TYPE;                                                                        \
+    i1 = &((psScalar*)IN1)->data.TYPE;                                                                       \
+    i2 = ((psVector*)IN2)->data.TYPE;                                                                        \
+    for (i=0; i < npt; i++, o++, i2++) {                                                                     \
+        *o = OP;                                                                                             \
+    }                                                                                                        \
+}
+
+// SCALAR_XXXX operations
+#define SCALAR_IMAGE(OUT,IN1,OP,IN2,TYPE)                                                                    \
+{                                                                                                            \
+    int i = 0;                                                                                               \
+    int j = 0;                                                                                               \
+    int numRows = 0;                                                                                         \
+    int numCols = 0;                                                                                         \
+    ps##TYPE *o = NULL;                                                                                      \
+    ps##TYPE *i1 = NULL;                                                                                     \
+    ps##TYPE *i2 = NULL;                                                                                     \
+    numRows = ((psImage*)IN1)->numRows;                                                                      \
+    numCols = ((psImage*)IN1)->numCols;                                                                      \
+    for(j = 0; j < numCols; j++) {                                                                           \
+        o  = ((psImage*)OUT)->data.TYPE[j];                                                                  \
+        i1 = &((psScalar*)IN1)->data.TYPE;                                                                   \
+        i2 = ((psImage*)IN2)->data.TYPE[j];                                                                  \
+        for(i = 0; i < numRows; i++, o++, i2++) {                                                            \
             *o = OP;                                                                                         \
         }                                                                                                    \
@@ -232,7 +310,9 @@
     if(dim1 == PS_DIMEN_VECTOR) {
         if(dim2 == PS_DIMEN_VECTOR) {
-            LEVEL2(VECTOR,VECTOR,out,psType1,op,psType2);      // Vector op vector
+            LEVEL2(VECTOR,VECTOR,out,psType1,op,psType2);       // vector op vector
         } else if(dim2 == PS_DIMEN_IMAGE) {
-            //LEVEL2(VECTOR,IMAGE,out,in1,op,in2);       // Vector op image
+            //LEVEL2();              // vector op image
+        } else if(dim2 == PS_DIMEN_SCALAR) {
+            LEVEL2(VECTOR,VECTOR,out,psType1,op,psType2);               // vector op scalar
         } else {
             psError(__func__, ": Line %d - Invalid dimensionality for in2 arg: %d", __LINE__, dim2);
@@ -240,7 +320,17 @@
     } else if(dim1 == PS_DIMEN_IMAGE) {
         if(dim2 == PS_DIMEN_VECTOR) {
-            //LEVEL2(IMAGE,VECTOR,out,in1,op,in2);        // Image op vector
+            //LEVEL2();              // image op vector
         } else if(dim2 == PS_DIMEN_IMAGE) {
-            LEVEL2(IMAGE,IMAGE,out,psType1,op,in2);        // Image op image
+            LEVEL2(IMAGE,IMAGE,out,psType1,op,psType2);             // image op image
+        } else if(dim2 == PS_DIMEN_SCALAR) {
+            LEVEL2(IMAGE,SCALAR,out,psType1,op,psType2);            // image op scalar
+        } else {
+            psError(__func__, ": Line %d - Invalid dimensionality for in2 arg: %d", __LINE__, dim2);
+        }
+    } else if(dim1 == PS_DIMEN_SCALAR) {
+        if(dim2 == PS_DIMEN_VECTOR) {
+            LEVEL2(SCALAR,VECTOR,out,psType1,op,psType2);           // scalar op vector
+        } else if(dim2 == PS_DIMEN_IMAGE) {
+            LEVEL2(SCALAR,IMAGE,out,psType1,op,psType2);            // scalar op image
         } else {
             psError(__func__, ": Line %d - Invalid dimensionality for in2 arg: %d", __LINE__, dim2);
