Index: trunk/psLib/src/imageops/psImagePixelManip.c
===================================================================
--- trunk/psLib/src/imageops/psImagePixelManip.c	(revision 4934)
+++ trunk/psLib/src/imageops/psImagePixelManip.c	(revision 4938)
@@ -10,6 +10,6 @@
  *  @author Ross Harman, MHPCC
  *
- *  @version $Revision: 1.10 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-08-31 21:58:22 $
+ *  @version $Revision: 1.11 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-09-01 01:05:41 $
  *
  *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -400,5 +400,5 @@
 void psImageMaskRegion(psImage *image,
                        psRegion *region,
-                       bool logical_and,
+                       const char *op,
                        psMaskType maskValue)
 {
@@ -414,8 +414,12 @@
             if (iy + image->row0 >= region->y1)
                 continue;
-            if (logical_and) {
+            if ( !strncmp(op, "&", 2) || !strncmp(op, "AND", 5) ) {
                 image->data.U8[iy][ix] &= maskValue;
-            } else {
+            } else if ( !strncmp(op, "|", 2) || !strncmp(op, "OR", 5) ) {
                 image->data.U8[iy][ix] |= maskValue;
+            } else if ( !strncmp(op, "=", 2) || !strncmp(op, "EQUAL", 5) ) {
+                image->data.U8[iy][ix] = maskValue;
+            } else if ( !strncmp(op, "^", 2) || !strncmp(op, "XOR", 5) ) {
+                image->data.U8[iy][ix] ^= maskValue;
             }
         }
@@ -427,5 +431,5 @@
 void psImageKeepRegion(psImage *image,
                        psRegion *region,
-                       bool logical_and,
+                       const char *op,
                        psMaskType maskValue)
 {
@@ -443,8 +447,12 @@
             continue;
 maskit:
-            if (logical_and) {
+            if ( !strncmp(op, "&", 2) || !strncmp(op, "AND", 5) ) {
                 image->data.U8[iy][ix] &= maskValue;
-            } else {
+            } else if ( !strncmp(op, "|", 2) || !strncmp(op, "OR", 5) ) {
                 image->data.U8[iy][ix] |= maskValue;
+            } else if ( !strncmp(op, "=", 2) || !strncmp(op, "EQUAL", 5) ) {
+                image->data.U8[iy][ix] = maskValue;
+            } else if ( !strncmp(op, "^", 2) || !strncmp(op, "XOR", 5) ) {
+                image->data.U8[iy][ix] ^= maskValue;
             }
         }
@@ -458,5 +466,5 @@
                        double y,
                        double radius,
-                       bool logical_and,
+                       const char *op,
                        psMaskType maskValue)
 {
@@ -473,8 +481,12 @@
             if (r2 > R2)
                 continue;
-            if (logical_and) {
+            if ( !strncmp(op, "&", 2) || !strncmp(op, "AND", 5) ) {
                 image->data.U8[iy][ix] &= maskValue;
-            } else {
+            } else if ( !strncmp(op, "|", 2) || !strncmp(op, "OR", 5) ) {
                 image->data.U8[iy][ix] |= maskValue;
+            } else if ( !strncmp(op, "=", 2) || !strncmp(op, "EQUAL", 5) ) {
+                image->data.U8[iy][ix] = maskValue;
+            } else if ( !strncmp(op, "^", 2) || !strncmp(op, "XOR", 5) ) {
+                image->data.U8[iy][ix] ^= maskValue;
             }
         }
@@ -488,5 +500,5 @@
                        double y,
                        double radius,
-                       bool logical_and,
+                       const char *op,
                        psMaskType maskValue)
 {
@@ -503,8 +515,12 @@
             if (r2 < R2)
                 continue;
-            if (logical_and) {
+            if ( !strncmp(op, "&", 2) || !strncmp(op, "AND", 5) ) {
                 image->data.U8[iy][ix] &= maskValue;
-            } else {
+            } else if ( !strncmp(op, "|", 2) || !strncmp(op, "OR", 5) ) {
                 image->data.U8[iy][ix] |= maskValue;
+            } else if ( !strncmp(op, "=", 2) || !strncmp(op, "EQUAL", 5) ) {
+                image->data.U8[iy][ix] = maskValue;
+            } else if ( !strncmp(op, "^", 2) || !strncmp(op, "XOR", 5) ) {
+                image->data.U8[iy][ix] ^= maskValue;
             }
         }
