Index: trunk/Ohana/src/opihi/cmd.data/Makefile
===================================================================
--- trunk/Ohana/src/opihi/cmd.data/Makefile	(revision 16111)
+++ trunk/Ohana/src/opihi/cmd.data/Makefile	(revision 16117)
@@ -42,7 +42,5 @@
 $(SRC)/erase.$(ARCH).o		\
 $(SRC)/extract.$(ARCH).o	\
-$(SRC)/fft1d.old.$(ARCH).o		\
 $(SRC)/fft1d.$(ARCH).o		\
-$(SRC)/fft2d.old.$(ARCH).o		\
 $(SRC)/fft2d.$(ARCH).o		\
 $(SRC)/fit2d.$(ARCH).o		\
Index: trunk/Ohana/src/opihi/cmd.data/gaussj.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.data/gaussj.c	(revision 16111)
+++ trunk/Ohana/src/opihi/cmd.data/gaussj.c	(revision 16117)
@@ -5,7 +5,13 @@
   float *m, *v;
   double **a, **b;
-  int i, j, N, status;
+  int i, j, N, status, QUIET;
   Vector *B;
   Buffer *A;
+
+  QUIET = FALSE;
+  if ((N = get_argument (argc, argv, "-q"))) {
+    QUIET = TRUE;
+    remove_argument (N, &argc, argv);
+  }
 
   if (argc != 3) goto usage;
@@ -50,5 +56,5 @@
   free (b);
 
-  if (!status) {
+  if (!status && !QUIET) {
       gprint (GP_ERR, "failure in matrix solution\n");
   }
Index: trunk/Ohana/src/opihi/cmd.data/init.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.data/init.c	(revision 16111)
+++ trunk/Ohana/src/opihi/cmd.data/init.c	(revision 16117)
@@ -26,8 +26,6 @@
 int erase            PROTO((int, char **));
 int extract          PROTO((int, char **));
-int fft1dold         PROTO((int, char **));
 int fft1d            PROTO((int, char **));
 int fft2d            PROTO((int, char **));
-int fft2dold         PROTO((int, char **));
 int fit2d            PROTO((int, char **));
 int fit              PROTO((int, char **));
@@ -147,8 +145,6 @@
   {"erase",        erase,	     "erase objects on an overlay"},
   {"extract",      extract,	     "extract a portion of a buffer into another buffer"},
-  {"fft1dold",     fft1dold,	     "fft on the pixel-stream in an image"},
   {"fft1d",        fft1d,	     "fft on the pixel-stream in an image"},
   {"fft2d",        fft2d,	     "fft on an image"},
-  {"fft2dold",     fft2dold,	     "fft on an image"},
   {"fit",     	   fit,		     "fit polynomial to vector pair"},
   {"fit2d",        fit2d,	     "fit 2-d polynomial to vector triplet"},
Index: trunk/Ohana/src/opihi/cmd.data/test/fft1d.sh
===================================================================
--- trunk/Ohana/src/opihi/cmd.data/test/fft1d.sh	(revision 16111)
+++ trunk/Ohana/src/opihi/cmd.data/test/fft1d.sh	(revision 16117)
@@ -15,11 +15,6 @@
  fft1d f 0 to Frn Fin
 
- fft1dold f 0 to Fro Fio
-
  clear
  section a 0.0 0.0 1.0 0.5
  lim t Fro; box; plot -pt 7 -c blue t Fro; plot -pt 2 -c red t Frn
-
- section b 0.0 0.5 1.0 0.5
- lim t Fio; box; plot -pt 7 -c blue t Fio; plot -pt 2 -c red t Fin
 end
Index: trunk/Ohana/src/opihi/cmd.data/test/gaussj.sh
===================================================================
--- trunk/Ohana/src/opihi/cmd.data/test/gaussj.sh	(revision 16111)
+++ trunk/Ohana/src/opihi/cmd.data/test/gaussj.sh	(revision 16117)
@@ -3,6 +3,10 @@
  test1
  test2
-end
-
+ test3
+ test4
+ test5
+end
+
+# a very simple diagonal matrix equation
 macro test1
  $PASS = 1
@@ -22,4 +26,7 @@
 
  gaussj A B
+ if (not($STATUS))
+   $PASS = 0
+ end
 
  if (abs(A[0][0] - 0.75) > 0.01)
@@ -64,4 +71,5 @@
 end
 
+# a very simple off-diagonal matrix equation
 macro test2
  $PASS = 1
@@ -81,4 +89,7 @@
 
  gaussj A B
+ if (not($STATUS))
+   $PASS = 0
+ end
 
  # echo A[0][0] A[0][1] A[0][2]
@@ -127,2 +138,107 @@
 end
 
+# a singular matrix equation
+macro test3
+ $PASS = 1
+ break -auto off
+
+ mcreate A 3 3
+ create B 0 3
+
+ A[0][0] = 2
+ A[1][0] = 2
+ A[2][2] = 2
+
+ A[0][1] = -1
+ A[1][1] = -1
+ A[2][1] = -1
+
+ gaussj -q A B
+ if ($STATUS)
+   $PASS = 0
+ end
+end
+
+# a very large matrix equation
+macro test4
+ $PASS = 1
+ break -auto off
+
+ $Ndim = 50
+ mcreate A $Ndim $Ndim
+ create B 0 $Ndim
+
+ # generate the diagonal + off-diagonal elements
+ for i 0 $Ndim
+   A[$i][$i] = 2.0
+   if ($i > 0)
+     A[$i][$i-1] = -1.0
+   end
+   if ($i < $Ndim - 1)
+     A[$i][$i+1] = -1.0
+   end
+ end
+
+ set inB = B
+ set inA = A
+
+ gaussj A B
+ if (not($STATUS))
+   $PASS = 0
+ end
+
+ set meas = zero(inB)
+ for i 0 B[]
+  for j 0 B[]
+   meas[$i] = meas[$i] + inA[$i][$j] * B[$j]
+  end
+ end
+
+ for i 0 inB[]
+  if (abs(inB[$i]-meas[$i]) > 1e-3)
+    $PASS = 0
+    echo inB[$i] meas[$i] {inB[$i]-meas[$i]}
+  end
+ end
+end
+
+# a nearly singular matrix equation
+macro test5
+ $PASS = 1
+ break -auto off
+
+ delete A B inA inB meas
+
+ mcreate A 3 3
+ create B 0 3
+
+ A[0][0] = 2
+ A[1][0] = 2.00001
+ A[2][2] = 2
+
+ A[0][1] = -1
+ A[1][1] = -1
+ A[2][1] = -1
+
+ set inB = B
+ set inA = A
+
+ gaussj A B
+ if (not($STATUS))
+   $PASS = 0
+ end
+
+ set meas = zero(inB)
+ for i 0 B[]
+  for j 0 B[]
+   meas[$i] = meas[$i] + inA[$i][$j] * B[$j]
+  end
+ end
+
+ for i 0 inB[]
+  if (abs(inB[$i]-meas[$i]) > 1e-5)
+    $PASS = 0
+  end
+ end
+end
+
Index: trunk/Ohana/src/opihi/include/data.h
===================================================================
--- trunk/Ohana/src/opihi/include/data.h	(revision 16111)
+++ trunk/Ohana/src/opihi/include/data.h	(revision 16117)
@@ -88,9 +88,4 @@
 int IsBinary (int N, int *Nbit);
 
-// fftold.c
-void fftold (float *Data, int N, int isign);
-void fftNold (float *data, int *nn, int ndim, int isign);
-int IsBinaryOld (int N);
-
 /* in gaussj.c */
 int gaussj (double **a, int n, double **b, int m);
Index: trunk/Ohana/src/opihi/lib.data/Makefile
===================================================================
--- trunk/Ohana/src/opihi/lib.data/Makefile	(revision 16111)
+++ trunk/Ohana/src/opihi/lib.data/Makefile	(revision 16117)
@@ -19,5 +19,4 @@
 $(SDIR)/page.$(ARCH).o                  \
 $(SDIR)/fft.$(ARCH).o			\
-$(SDIR)/fftold.$(ARCH).o			\
 $(SDIR)/svdcmp.$(ARCH).o		\
 $(SDIR)/convert.$(ARCH).o		\
Index: trunk/Ohana/src/opihi/lib.data/fftold.c
===================================================================
--- trunk/Ohana/src/opihi/lib.data/fftold.c	(revision 16111)
+++ 	(revision )
@@ -1,152 +1,0 @@
-# include "data.h"
-
-#define FSWAP(a,b) tempr=(a);(a)=(b);(b)=tempr
-
-void fftold (float *Data, int N, int isign) {
-
-  int n,mmax,m,j,istep,i;
-  double wtemp,wr,wpr,wpi,wi,theta;
-  float tempr,tempi, *data;
-
-  data = Data;
-  n = N << 1;
-  j = 0;
-
-  for (i = 0; i < n; i+=2) {
-    if (j > i) {
-      FSWAP (data[j], data[i]);
-      FSWAP (data[j+1], data[i+1]);
-    }
-    m = n >> 1;
-    while (m >= 2 && j >= m) {
-      j -= m;
-      m >>= 1;
-    }
-    j += m;
-  }
-  mmax = 2;
-  while (n > mmax) {
-    istep = 2*mmax;
-    theta = 6.28318530717959 / (isign*mmax);
-    wtemp = sin(0.5*theta);
-    wpr = -2.0*wtemp*wtemp;
-    wpi = sin(theta);
-    wr = 1.0;
-    wi = 0.0;
-    for (m = 0; m < mmax; m+=2) {
-      for (i = m; i < n; i+=istep) {
-	j = i + mmax;
-	tempr = wr*data[j] - wi*data[j+1];
-	tempi = wr*data[j+1] + wi*data[j];
-	data[j] = data[i] - tempr;
-	data[j+1] = data[i+1] - tempi;
-	data[i] += tempr;
-	data[i+1] += tempi;
-      }
-      wr = (wtemp = wr)*wpr - wi*wpi+wr;
-      wi = wi*wpr + wtemp*wpi + wi;
-    }
-    mmax = istep;
-  }
-}
-
-/* convert indices to zero reference */
-void fftNold (float *data, int *nn, int ndim, int isign) {
-
-  int i1,i2,i3,i2rev,i3rev,ip1,ip2,ip3,ifp1,ifp2;
-  int ibit,idim,k1,k2,n,nprev,nrem,ntot;
-  float tempi,tempr;
-  double theta,wi,wpi,wpr,wr,wtemp;
-
-  ntot = 1;
-  for (idim = 0; idim < ndim; idim++) ntot *= nn[idim];
-
-  nprev = 1;
-  for (idim = ndim - 1; idim >= 0; idim--) {
-    n  =  nn[idim];
-    nrem = ntot / (n*nprev);
-    ip1 = nprev << 1;
-    ip2 = ip1*n;
-    ip3 = ip2*nrem;
-    i2rev = 0;
-    for (i2 = 0; i2 < ip2; i2+=ip1) {
-      if (i2 < i2rev) {
-	for (i1 = i2; i1 <= i2+ip1-2; i1+=2) {
-	  for (i3 = i1; i3 < ip3; i3+=ip2) {	
-	    i3rev = i2rev+i3-i2;
-	    FSWAP(data[i3],data[i3rev]);
-	    FSWAP(data[i3+1],data[i3rev+1]);
-	  }
-	}
-      }
-      ibit = ip2 >> 1;
-      while (ibit >= ip1 && i2rev >= ibit) {
-	i2rev -= ibit;
-	ibit >>= 1;
-      }
-      i2rev += ibit;
-    }
-    ifp1 = ip1;
-    while (ifp1 < ip2) {
-      ifp2 = ifp1 << 1;
-      theta = isign*6.28318530717959/(2*ifp1/ip1);
-      wtemp = sin(0.5*theta);
-      wpr = -2.0*wtemp*wtemp;
-      wpi = sin(theta);
-      wr = 1.0;
-      wi = 0.0;
-      for (i3 = 0; i3 < ifp1; i3+=ip1) {
-	for (i1 = i3; i1 <= i3+ip1-2; i1+=2) {
-	  for (i2 = i1; i2 < ip3; i2+=ifp2) {
-	    k1 = i2;
-	    k2 = k1+ifp1;
-	    tempr = wr*data[k2]-wi*data[k2+1];
-	    tempi = wr*data[k2+1]+wi*data[k2];
-	    data[k2] = data[k1]-tempr;
-	    data[k2+1] = data[k1+1]-tempi;
-	    data[k1] += tempr;
-	    data[k1+1] += tempi;
-	  }
-	}
-	wr = (wtemp = wr)*wpr-wi*wpi+wr;
-	wi = wi*wpr+wtemp*wpi+wi;
-      }
-      ifp1 = ifp2;
-    }
-    nprev *= n;
-  }
-}
-
-#undef FSWAP
-
-/* based on the PRESS routine, this fft takes an array from data[0] to data[2N-1] */
-/* this function takes Data = h(t) and replaces it in situ with H(F) or vice versa.
-   There are assumed to be 2*N input values with 
-   Data[0,2,4,...] the real and Data[1,3,5,...] the imaginary ones.
-   the output is ordered the same.  
-
-   for h(t), values are in time sequence order.
-   for H(F), values are in order F = 0, 1/N, ... 1/2 - 1/N, +/- 1/2, -1/2 + 1/N, ... -1/N 
-
-   no normalization is performed, so a signal of amplitude A sin (w_k * t) will be 
-      give an H(F) value of 0.5 * A * N, and the DC term will have H(0) = A * N.
-
-*/ 
-
-int IsBinaryOld (int N) {
-
-  int i, nbit;
-
-  /* check if number is a binary number */
-  nbit = 0;
-  for (i = 0; i < 8*sizeof(N); i++) {
-    nbit += (N & 0x01);
-    N = (N >> 1);
-  }
-  if (nbit == 1) { 
-    return (1); 
-  } else { 
-    return (0); 
-  }
-
-}  
