Index: trunk/stac/src/stac.c
===================================================================
--- trunk/stac/src/stac.c	(revision 6771)
+++ trunk/stac/src/stac.c	(revision 6887)
@@ -45,4 +45,5 @@
     // Generate masks
     psArray *masks = psArrayAlloc(inputs->n);
+    masks->n = inputs->n;
     for (int i = 0; i < inputs->n; i++) {
         psImage *image = inputs->data[i]; // Image for which to get mask
@@ -67,5 +68,16 @@
     // Get size, if not input
     if (config->outnx == 0 || config->outny == 0) {
-        stacSize(&config->outnx, &config->outny, &config->xMapDiff, &config->yMapDiff, inputs, maps);
+        psVector *xSize = psVectorAlloc(inputs->n, PS_TYPE_S32); // Sizes of images in x
+        psVector *ySize = psVectorAlloc(inputs->n, PS_TYPE_S32); // Sizes of images in y
+        xSize->n = inputs->n;
+        ySize->n = inputs->n;
+        for (int i = 0; i < inputs->n; i++) {
+            psImage *image = inputs->data[i]; // The i-th image
+            xSize->data.S32[i] = image->numCols;
+            ySize->data.S32[i] = image->numRows;
+        }
+        stacSize(&config->outnx, &config->outny, &config->xMapDiff, &config->yMapDiff, xSize, ySize, maps);
+        psFree(xSize);
+        psFree(ySize);
     }
 
@@ -96,7 +108,7 @@
     for (int i = 0; i < inputs->n; i++) {
         char errName[MAXCHAR];          // Filename of error image
-        sprintf(errName,"%s.err",config->inputs->data[i]);
+        sprintf(errName,"%s.err", (char*)config->inputs->data[i]);
         psFits *errorFile = psFitsOpen(errName, "w");
-        if (!psFitsWriteImage(errorFile, NULL, errors->data[i], 0)) {
+        if (!psFitsWriteImage(errorFile, NULL, errors->data[i], 0, NULL)) {
             psErrorStackPrint(stderr, "Unable to write image: %s\n", errName);
         }
@@ -118,15 +130,15 @@
         char shiftName[MAXCHAR];        // Filename of shift image
         char errName[MAXCHAR];          // Filename of error image
-        sprintf(shiftName,"%s.shift1",config->inputs->data[i]);
-        sprintf(errName,"%s.shifterr1",config->inputs->data[i]);
+        sprintf(shiftName,"%s.shift1", (char*)config->inputs->data[i]);
+        sprintf(errName,"%s.shifterr1",(char*)config->inputs->data[i]);
         psFits *shiftFile = psFitsOpen(shiftName, "w");
         psFits *errFile = psFitsOpen(errName, "w");
         psImage *trans = transformed->data[i]; // Transformed image
         psImage *transErr = transformedErrors->data[i]; // Transformed error image
-        if (!psFitsWriteImage(shiftFile, NULL, trans, 0)) {
+        if (!psFitsWriteImage(shiftFile, NULL, trans, 0, NULL)) {
             psErrorStackPrint(stderr, "Unable to write image: %s\n", shiftName);
         }
         psTrace("stac", 1, "Shifted image written to %s\n", shiftName);
-        if (!psFitsWriteImage(errFile, NULL, transErr, 0)) {
+        if (!psFitsWriteImage(errFile, NULL, transErr, 0, NULL)) {
             psErrorStackPrint(stderr, "Unable to write image: %s\n", errName);
         }
@@ -146,4 +158,6 @@
     psVector *saturated = psVectorAlloc(transformed->n, PS_TYPE_F32); // Saturation limits
     psVector *bad = psVectorAlloc(transformed->n, PS_TYPE_F32); // Bad limits
+    saturated->n = transformed->n;
+    bad->n = transformed->n;
     for (int i = 0; i < transformed->n; i++) {
         saturated->data.F32[i] = (config->saturated - offsets->data.F32[i]) / scales->data.F32[i];
@@ -182,8 +196,8 @@
     for (int i = 0; i < rejected->n; i++) {
         char rejName[MAXCHAR];  // Filename of rejection image
-        sprintf(rejName, "%s.shiftrej", config->inputs->data[i]);
+        sprintf(rejName, "%s.shiftrej", (char*)config->inputs->data[i]);
 
         psFits *rejFile = psFitsOpen(rejName, "w");
-        if (!psFitsWriteImage(rejFile, NULL, rejected->data[i], 0)) {
+        if (!psFitsWriteImage(rejFile, NULL, rejected->data[i], 0, NULL)) {
             psErrorStackPrint(stderr, "Unable to write image: %s\n", rejName);
         }
@@ -196,5 +210,5 @@
     sprintf(preName, "%s.pre", config->output);
     psFits *preFile = psFitsOpen(preName, "w");
-    if (!psFitsWriteImage(preFile, NULL, combined, 0)) {
+    if (!psFitsWriteImage(preFile, NULL, combined, 0, NULL)) {
         psErrorStackPrint(stderr, "Unable to write image: %s\n", preName);
     }
@@ -205,4 +219,5 @@
     // Get regions of interest in the source frame
     psArray *regions = psArrayAlloc(inputs->n); // Array of images denoting regions of interest
+    regions->n = inputs->n;
     for (int i = 0; i < inputs->n; i++) {
         regions->data[i] = stacAreaOfInterest(rejected->data[i], inverseMaps->data[i],
@@ -211,7 +226,7 @@
 #ifdef TESTING
         char regionName[MAXCHAR];       // Filename of region image
-        sprintf(regionName,"%s.region",config->inputs->data[i]);
+        sprintf(regionName,"%s.region",(char*)config->inputs->data[i]);
         psFits *regionFile = psFitsOpen(regionName, "w");
-        if (!psFitsWriteImage(regionFile, NULL, regions->data[i], 0)) {
+        if (!psFitsWriteImage(regionFile, NULL, regions->data[i], 0, NULL)) {
             psErrorStackPrint(stderr, "Unable to write image: %s\n", regionName);
         }
