Index: trunk/psLib/src/math/psPolynomial.c
===================================================================
--- trunk/psLib/src/math/psPolynomial.c	(revision 1947)
+++ trunk/psLib/src/math/psPolynomial.c	(revision 1953)
@@ -7,6 +7,6 @@
  *  polynomials.  It also contains a Gaussian functions.
  *
- *  @version $Revision: 1.45 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2004-10-04 00:40:23 $
+ *  @version $Revision: 1.46 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2004-10-05 01:43:58 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -1988,4 +1988,8 @@
  
 XXX: nobody asked for us to generate this routine.
+ 
+XXX: add another psScalar argument for the result.
+ 
+XXX: The VectorCopy routines seg fault when I declare range32 as static.
  *****************************************************************************/
 psScalar *p_psVectorInterpolate(psVector *domain,
@@ -1994,4 +1998,6 @@
                                 psScalar *x)
 {
+    psVector *range32 = NULL;
+    psVector *domain32 = NULL;
     psTrace(".psLib.dataManip.psFunctions.p_psVectorInterpolate", 4,
             "---- p_psVectorInterpolate() begin ----\n");
@@ -2000,14 +2006,17 @@
             (domain->type.type != x->type.type)) {
         // XXX psError
-        printf("domain->type.type != range->type.type != x->type.type\n");
+        printf("p_psVectorInterpolate(): domain->type.type != range->type.type != x->type.type\n");
         printf("%d %d %d\n", domain->type.type, range->type.type, x->type.type);
+        exit(1);
     }
     if (domain->n != range->n) {
         // XXX psError
         printf("domain->n != range->n\n");
+        exit(1);
     }
     if (order > (domain->n - 1)) {
         // XXX psError: not enough data points for order-order interpolation.
         printf("not enough data points for order-order interpolation.\n");
+        exit(1);
     }
 
@@ -2020,4 +2029,23 @@
                              order,
                              x->data.F32), PS_TYPE_F32));
+    } else if (x->type.type == PS_TYPE_F64) {
+        // XXX: use recycled vectors here.
+        range32 = psVectorCopy(range32, range, PS_TYPE_F32);
+        domain32 = psVectorCopy(domain32, domain, PS_TYPE_F32);
+
+        psScalar *tmpScalar = psScalarAlloc((double)
+                                            p_ps1DInterpolateF32(domain32->data.F32,
+                                                                 range32->data.F32,
+                                                                 domain32->n,
+                                                                 order,
+                                                                 (float) x->data.F64), PS_TYPE_F64);
+        psFree(range32);
+        psFree(domain32);
+
+        psTrace(".psLib.dataManip.psFunctions.p_psVectorInterpolate", 4,
+                "---- p_psVectorInterpolate() end ----\n");
+        // XXX: Convert data type to F64?
+        return(tmpScalar);
+
     } else {
         // XXX psError: type not supported
