Index: /trunk/psModules/src/pmSubtractBias.c
===================================================================
--- /trunk/psModules/src/pmSubtractBias.c	(revision 2132)
+++ /trunk/psModules/src/pmSubtractBias.c	(revision 2133)
@@ -6,6 +6,6 @@
  *  @author George Gusciora, MHPCC
  *
- *  @version $Revision: 1.12 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2004-10-14 22:33:28 $
+ *  @version $Revision: 1.13 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2004-10-14 22:54:14 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -252,7 +252,13 @@
 
     if (overScanAxis == PM_OVERSCAN_ALL) {
-        psImageStats(stat, in->image, in->mask, 0xffffffff);
-        p_psGetStatValue(stat, &statValue);
-        p_psImageSubtractScalar(in->image, statValue);
+        tmpOverscan = (psListElem *) overscans->head;
+        while (NULL != tmpOverscan) {
+            myOverscanImage = (psImage *) tmpOverscan->data;
+            psImageStats(stat, myOverscanImage, NULL, 0xffffffff);
+            p_psGetStatValue(stat, &statValue);
+            p_psImageSubtractScalar(in->image, statValue);
+
+            tmpOverscan = tmpOverscan->next;
+        }
         return(in);
     }
Index: /trunk/psModules/test/tst_pmSubtractBias.c
===================================================================
--- /trunk/psModules/test/tst_pmSubtractBias.c	(revision 2132)
+++ /trunk/psModules/test/tst_pmSubtractBias.c	(revision 2133)
@@ -7,6 +7,6 @@
  *  @author GLG, MHPCC
  *
- *  @version $Revision: 1.2 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2004-10-14 22:33:28 $
+ *  @version $Revision: 1.3 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2004-10-14 22:54:14 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -17,6 +17,8 @@
 #include "pmSubtractBias.h"
 static int test00(void);
+static int test01(void);
 testDescription tests[] = {
                               {test00, 000, "pmSubtractBias", 0, false},
+                              {test01, 000, "pmSubtractBias", 0, false},
                               {NULL}
                           };
@@ -28,6 +30,6 @@
 }
 
-#define NUM_ROWS 8
-#define NUM_COLS 8
+#define NUM_ROWS 4
+#define NUM_COLS 4
 int doSubtractBiasFullFrame(int numCols, int numRows)
 {
@@ -37,8 +39,8 @@
     float expect;
     int testStatus = 0;
-    psImage *myImage1 = psImageAlloc(numCols, numRows, PS_TYPE_F32);
-    psImage *myImage2 = psImageAlloc(numCols, numRows, PS_TYPE_F32);
-    psReadout *myReadout = psReadoutAlloc(numCols, numRows, myImage1);
-    psReadout *myBias = psReadoutAlloc(numCols, numRows, myImage2);
+    psImage *tmpImage1 = psImageAlloc(numCols, numRows, PS_TYPE_F32);
+    psImage *tmpImage2 = psImageAlloc(numCols, numRows, PS_TYPE_F32);
+    psReadout *myReadout = psReadoutAlloc(numCols, numRows, tmpImage1);
+    psReadout *myBias = psReadoutAlloc(numCols, numRows, tmpImage2);
 
     for (i=0;i<numRows;i++) {
@@ -72,10 +74,81 @@
 }
 
+
 int test00( void )
 {
     int testStatus = 0;
 
+    testStatus |= doSubtractBiasFullFrame(1, 1);
+    testStatus |= doSubtractBiasFullFrame(NUM_COLS, 1);
+    testStatus |= doSubtractBiasFullFrame(1, NUM_ROWS);
     testStatus |= doSubtractBiasFullFrame(NUM_COLS, NUM_ROWS);
 
     return(testStatus);
 }
+
+int doSubtractFullOverscans(int numCols, int numRows)
+{
+    int i;
+    int j;
+    float actual;
+    float expect;
+    int testStatus = 0;
+    psImage *tmpImage1 = psImageAlloc(numCols, numRows, PS_TYPE_F32);
+    psImage *tmpImage2 = psImageAlloc(numCols, numRows, PS_TYPE_F32);
+    psImage *tmpImage3 = psImageAlloc(numCols, numRows, PS_TYPE_F32);
+    psImage *tmpImage4 = psImageAlloc(numCols, numRows, PS_TYPE_F32);
+    psReadout *myReadout = psReadoutAlloc(numCols, numRows, tmpImage1);
+    psList *list;
+    psStats *stat = psStatsAlloc(PS_STAT_SAMPLE_MEAN);
+
+    for (i=0;i<numRows;i++) {
+        for (j=0;j<numCols;j++) {
+            myReadout->image->data.F32[i][j] = (float) (i + j);
+            tmpImage2->data.F32[i][j] = 3.0;
+            tmpImage3->data.F32[i][j] = 4.0;
+            tmpImage4->data.F32[i][j] = 5.0;
+        }
+    }
+    list = psListAlloc(tmpImage2);
+    psListAdd(list, PS_LIST_HEAD, tmpImage3);
+    psListAdd(list, PS_LIST_HEAD, tmpImage4);
+
+    printPositiveTestHeader(stdout, "pmSubtractBias", "Multiple Overscan Frames");
+
+    myReadout = pmSubtractBias(myReadout, NULL, list, PM_OVERSCAN_ALL, stat,
+                               0, PM_FIT_NONE, NULL);
+
+    for (i=0;i<numRows;i++) {
+        for (j=0;j<numCols;j++) {
+            expect = ((float) (i + j)) - 12.0;
+            actual = myReadout->image->data.F32[i][j];
+            if (FLT_EPSILON < fabs(expect - actual)) {
+                printf("ERROR: image[%d][%d] is %f, should be %f\n", i, j, actual, expect);
+                testStatus = 1;
+            }
+        }
+    }
+
+
+    psFree(myReadout);
+    psFree(tmpImage2);
+    psFree(tmpImage3);
+    psFree(tmpImage4);
+    psFree(stat);
+    psFree(list);
+
+    printFooter(stdout, "pmSubtractBias", "Multiple Overscan Frames", true);
+    return(testStatus);
+}
+
+int test01( void )
+{
+    int testStatus = 0;
+
+    testStatus |= doSubtractFullOverscans(1, 1);
+    testStatus |= doSubtractFullOverscans(1, NUM_ROWS);
+    testStatus |= doSubtractFullOverscans(NUM_COLS, 1);
+    testStatus |= doSubtractFullOverscans(NUM_COLS, NUM_ROWS);
+
+    return(testStatus);
+}
