Index: trunk/psLib/src/image/psImageConvolve.c
===================================================================
--- trunk/psLib/src/image/psImageConvolve.c	(revision 2879)
+++ trunk/psLib/src/image/psImageConvolve.c	(revision 2911)
@@ -5,8 +5,8 @@
  *  @author Robert DeSonia, MHPCC
  *
- *  @version $Revision: 1.10 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2004-11-24 00:05:54 $
+ *  @version $Revision: 1.11 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-01-05 21:16:14 $
  *
- *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
  */
 
@@ -130,15 +130,18 @@
     }
 
-    // determine the usable length of the shift vector
+    // sizes match?
     length = xShifts->n;
     if (length != yShifts->n ||
             length != tShifts->n) {
-        psLogMsg(__func__,PS_LOG_WARN,"Shift vectors found to be different sizes.");
-        if (yShifts->n < length) {
-            length = yShifts->n;
-        }
-        if (tShifts->n < length) {
-            length = tShifts->n;
-        }
+        psError(PS_ERR_BAD_PARAMETER_SIZE, true,
+                "Shift vectors can not be of different sizes.");
+        return NULL;
+    }
+
+    // if no shifts, the kernel is just a 1 at 0,0
+    if (length < 1) {
+        result = psKernelAlloc(0,0,0,0);
+        result->kernel[0][0] = 1;
+        return result;
     }
 
@@ -148,6 +151,7 @@
         ps##TYPE *xShiftData = xShifts->data.TYPE; \
         ps##TYPE *yShiftData = yShifts->data.TYPE; \
-        lastX =  xShiftData[length-1]; \
-        lastY =  yShiftData[length-1]; \
+        lastX = xShiftData[length-1]; \
+        lastY = yShiftData[length-1]; \
+        lastT = tShiftData[length-1]; \
         \
         for (int lcv = 0; lcv < length; lcv++) { \
@@ -167,16 +171,16 @@
         } \
         \
-        normalizeTime = 1.0 / (psKernelType)(lastT - tShiftData[0]); \
+        normalizeTime = 1.0 / (psKernelType)(tShiftData[length-1]); \
         result = psKernelAlloc(xMin,xMax,yMin,yMax); \
         kernel = result->kernel; \
         \
-        lastT = 0; \
+        psS32 prevT = 0; \
         for (int i = 0; i < length; i++) { \
-            t = tShiftData[i] - lastT; \
+            t = tShiftData[i] - prevT; \
             x = lastX - xShiftData[i]; \
             y = lastY - yShiftData[i]; \
             \
-            kernel[y][x] += (psKernelType)t * normalizeTime; \
-            lastT = t; \
+            kernel[y][x] += (psKernelType)t / (psKernelType)lastT; \
+            prevT = tShiftData[i]; \
         } \
         break; \
@@ -206,6 +210,6 @@
                 yMax = y; \
             } \
-            x += xShiftData[lcv]; \
-            y += yShiftData[lcv]; \
+            x -= xShiftData[lcv]; \
+            y -= yShiftData[lcv]; \
             \
         } \
@@ -218,6 +222,6 @@
         for (psS32 i = length-1; i >= 0; i--) { \
             kernel[y][x] += (psKernelType)(tShiftData[i]) * normalizeTime; \
-            x += xShiftData[i]; \
-            y += yShiftData[i]; \
+            x -= xShiftData[i]; \
+            y -= yShiftData[i]; \
             \
         } \
Index: trunk/psLib/src/image/psImageIO.c
===================================================================
--- trunk/psLib/src/image/psImageIO.c	(revision 2879)
+++ trunk/psLib/src/image/psImageIO.c	(revision 2911)
@@ -7,6 +7,6 @@
  *  @author Robert DeSonia, MHPCC
  *
- *  @version $Revision: 1.15 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2004-11-04 01:05:00 $
+ *  @version $Revision: 1.16 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-01-05 21:16:14 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -33,8 +33,8 @@
 {
     fitsfile *fptr = NULL;      /* Pointer to the FITS file */
-    psS32 status = 0;             /* CFITSIO file vars */
+    psS32 status = 0;           /* CFITSIO file vars */
     psS32 nAxis = 0;
     psS32 anynull = 0;
-    psS32 bitPix = 0;             /* Pixel type */
+    psS32 bitPix = 0;           /* Pixel type */
     long nAxes[3];
     long firstPixel[3];         /* lower-left corner of image subset */
@@ -160,28 +160,28 @@
         fitsDatatype = TBYTE;
         break;
-        /*    case SBYTE_IMG:                  Not a requirement
-                datatype = PS_TYPE_S8;
-                fitsDatatype = TSBYTE;
-                break;     */
-        /*    case USHORT_IMG:                 Not a requirement
-                datatype = PS_TYPE_U16;
-                fitsDatatype = TUSHORT;
-                break;     */
+    case SBYTE_IMG:
+        datatype = PS_TYPE_S8;
+        fitsDatatype = TSBYTE;
+        break;
+    case USHORT_IMG:
+        datatype = PS_TYPE_U16;
+        fitsDatatype = TUSHORT;
+        break;
     case SHORT_IMG:
         datatype = PS_TYPE_S16;
         fitsDatatype = TSHORT;
         break;
-        /*    case ULONG_IMG:                  Not a requirement
-                datatype = PS_TYPE_U32;
-                fitsDatatype = TUINT;
-                break;    */
+    case ULONG_IMG:
+        datatype = PS_TYPE_U32;
+        fitsDatatype = TUINT;
+        break;
     case LONG_IMG:
         datatype = PS_TYPE_S32;
         fitsDatatype = TINT;
         break;
-        /*    case LONGLONG_IMG:               Not a requirement
-                datatype = PS_TYPE_S64;
-                fitsDatatype = TLONGLONG;
-                break;    */
+    case LONGLONG_IMG:
+        datatype = PS_TYPE_S64;
+        fitsDatatype = TLONGLONG;
+        break;
     case FLOAT_IMG:
         datatype = PS_TYPE_F32;
@@ -256,23 +256,23 @@
         datatype = TBYTE;
         break;
-        /*    case PS_TYPE_S8:            Not a requirement
-                bitPix = BYTE_IMG;
-                bzero = INT8_MIN;
-                datatype = TSBYTE;
-                break;      */
-        /*    case PS_TYPE_U16:           Not a requirement
-                bitPix = SHORT_IMG;
-                bzero = -1.0f * INT16_MIN;
-                datatype = TUSHORT;
-                break;      */
+    case PS_TYPE_S8:
+        bitPix = BYTE_IMG;
+        bzero = INT8_MIN;
+        datatype = TSBYTE;
+        break;
+    case PS_TYPE_U16:
+        bitPix = SHORT_IMG;
+        bzero = -1.0f * INT16_MIN;
+        datatype = TUSHORT;
+        break;
     case PS_TYPE_S16:
         bitPix = SHORT_IMG;
         datatype = TSHORT;
         break;
-        /*    case PS_TYPE_U32:           Not a requirement
-                bitPix = LONG_IMG;
-                bzero = -1.0f * INT32_MIN;
-                datatype = TUINT;
-                break;      */
+    case PS_TYPE_U32:
+        bitPix = LONG_IMG;
+        bzero = -1.0f * INT32_MIN;
+        datatype = TUINT;
+        break;
     case PS_TYPE_S32:
         bitPix = LONG_IMG;
@@ -344,8 +344,6 @@
         }
 
-    } else {                               // file
-        // does
-        // not
-        // exist
+    } else {
+        // file does not exist
 
         (void)fits_create_file(&fptr, filename, &status);
