Index: trunk/Ohana/src/opihi/dvo/dvomisc.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/dvomisc.c	(revision 16038)
+++ trunk/Ohana/src/opihi/dvo/dvomisc.c	(revision 16040)
@@ -33,110 +33,2 @@
 
 }
-
-/* values are ave[i].R, ave[i].D, ave[i].M */
-void sortave (Average *ave, int N) {
-
-  int l,j,ir,i;
-  Average tmp;
-
-  if (N < 2) return;
-  l = N >> 1;
-  ir = N - 1;
-  for (;;) {
-    if (l > 0) {
-      l--;
-      tmp = ave[l];
-    }
-    else {
-      tmp = ave[ir];
-      ave[ir] = ave[0];
-      if (--ir == 0) {
-	ave[0] = tmp;
-	return;
-      }
-    }
-    i = l;
-    j = (l << 1) + 1;
-    while (j <= ir) {
-      if (j < ir && ave[j].R < ave[j+1].R) j++;
-      if (tmp.R < ave[j].R) {
-	ave[i] = ave[j];
-	j += (i=j) + 1;
-      }
-      else j = ir + 1;
-    }
-    ave[i] = tmp;
-  }
-}
-
-/** this does not seem to be used at the moment */
-/* values are ave[i].R, ave[i].D, ave[i].M */
-void sort_images (Image *image, int N) {
-
-  int l,j,ir,i;
-  Image tmp;
-
-  if (N < 2) return;
-  l = N >> 1;
-  ir = N - 1;
-  for (;;) {
-    if (l > 0) {
-      l--;
-      tmp = image[l];
-    }
-    else {
-      tmp = image[ir];
-      image[ir] = image[0];
-      if (--ir == 0) {
-	image[0] = tmp;
-	return;
-      }
-    }
-    i = l;
-    j = (l << 1) + 1;
-    while (j <= ir) {
-      if (j < ir && image[j].tzero < image[j+1].tzero) j++;
-      if (tmp.tzero < image[j].tzero) {
-	image[i] = image[j];
-	j += (i=j) + 1;
-      }
-      else j = ir + 1;
-    }
-    image[i] = tmp;
-  }
-}
-
-/* sort subset by image[subset[i]].tzero */
-void sort_image_subset (Image *image, int *subset, int N) {
-
-  int l, j, ir, i, tmp;
-
-  if (N < 2) return;
-  l = N >> 1;
-  ir = N - 1;
-  for (;;) {
-    if (l > 0) {
-      l--;
-      tmp = subset[l];
-    }
-    else {
-      tmp = subset[ir];
-      subset[ir] = subset[0];
-      if (--ir == 0) {
-	subset[0] = tmp;
-	return;
-      }
-    }
-    i = l;
-    j = (l << 1) + 1;
-    while (j <= ir) {
-      if (j < ir && image[subset[j]].tzero < image[subset[j+1]].tzero) j++;
-      if (image[tmp].tzero < image[subset[j]].tzero) {
-	subset[i] = subset[j];
-	j += (i=j) + 1;
-      }
-      else j = ir + 1;
-    }
-    subset[i] = tmp;
-  }
-}
Index: trunk/Ohana/src/opihi/dvo/fitsed.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/fitsed.c	(revision 16038)
+++ trunk/Ohana/src/opihi/dvo/fitsed.c	(revision 16040)
@@ -436,6 +436,6 @@
 SEDtableRow **sort_SEDtable (SEDtableRow *raw, int N) {
 
-  int l,j,ir,i;
-  SEDtableRow **value, *temp;
+  int i;
+  SEDtableRow **value;
   
   if (N <= 0) return (NULL);
@@ -445,33 +445,12 @@
     value[i] = &raw[i];
   }
-  if (N < 2) return (value);
-
-  l = N >> 1;
-  ir = N - 1;
-  for (;;) {
-    if (l > 0) {
-      l--;
-      temp = value[l];
-    }
-    else {
-      temp = value[ir];
-      value[ir] = value[0];
-      if (--ir == 0) {
-	value[0] = temp;
-	return (value);
-      }
-    }
-    i = l;
-    j = (l << 1) + 1;
-    while (j <= ir) {
-      if (j < ir && value[j][0].color < value[j+1][0].color) ++j;
-      if (temp[0].color < value[j][0].color) {
-	value[i] = value[j];
-	j += (i=j) + 1;
-      }
-      else j = ir + 1;
-    }
-    value[i] = temp;
-  }
+
+# define SWAPFUNC(A,B){ SEDtableRow *temp = value[A]; value[A] = value[B]; value[B] = temp; }
+# define COMPARE(A,B)(value[A][0].color < value[B][0].color)
+
+  OHANA_SORT (N, COMPARE, SWAPFUNC);
+
+# undef SWAPFUNC
+# undef COMPARE
 
   return (value);
Index: trunk/Ohana/src/opihi/dvo/gstar.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/gstar.c	(revision 16038)
+++ trunk/Ohana/src/opihi/dvo/gstar.c	(revision 16040)
@@ -10,5 +10,5 @@
   double Ra, Dec, Radius, Radius2, r, dec0, dec1;
   double Mcat, Mrel;
-  float *RA, *DEC;
+  double *RA, *DEC;
   int i, j, k, m, N, *N1, Nsecfilt, NPTS, QUIET, FULL_OUTPUT;
   int Nstars, found, GetMeasures, Nlo, Nhi;
@@ -93,6 +93,6 @@
 
   Nstars = catalog.Naverage;
-  ALLOCATE (RA, float, Nstars);
-  ALLOCATE (DEC, float, Nstars);
+  ALLOCATE (RA, double, Nstars);
+  ALLOCATE (DEC, double, Nstars);
   ALLOCATE (N1, int, Nstars);
 
@@ -105,5 +105,5 @@
   }
   /* sort list by DEC */
-  if (Nstars > 1) sort_lists (DEC, RA, N1, Nstars);
+  if (Nstars > 1) sort_coords_index (DEC, RA, N1, Nstars);
   /* at this point, RA, DEC, and N1 are sorted by DEC.  
      catalog.average[N1[i]].R = RA[i] */
@@ -308,5 +308,5 @@
   }
 
-  isort_pair (codeNumber, sequence, Nsecfilt);
+  isortpair (codeNumber, sequence, Nsecfilt);
   free (codeNumber);
 }
Index: trunk/Ohana/src/opihi/dvo/lcurve.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/lcurve.c	(revision 16038)
+++ trunk/Ohana/src/opihi/dvo/lcurve.c	(revision 16040)
@@ -5,5 +5,5 @@
   char string[128], *p;
   double Ra, Dec, Radius, Radius2, r;
-  float *RA, *DEC;
+  double *RA, *DEC;
   int kapa, TimeFormat;
   int Nstars, found, AutoLimits, ErrorBars, GalMag, AbsPhot, SaveVectors;
@@ -86,6 +86,6 @@
 
   Nstars = catalog.Naverage;
-  ALLOCATE (RA, float, Nstars);
-  ALLOCATE (DEC, float, Nstars);
+  ALLOCATE (RA, double, Nstars);
+  ALLOCATE (DEC, double, Nstars);
   ALLOCATE (N1, int, Nstars);
 
@@ -98,5 +98,5 @@
   }
   /* sort list by DEC */
-  if (Nstars > 1) sort_lists (DEC, RA, N1, Nstars);
+  if (Nstars > 1) sort_coords_index (DEC, RA, N1, Nstars);
   /* at this point, RA, DEC, and N1 are sorted by DEC.  
      catalog.average[N1[i]].R = RA[i] */
@@ -142,5 +142,5 @@
   
   if (ErrorBars)
-    sortthree (Xvec.elements, Yvec.elements, dYvec.elements, N);
+    fsortthree (Xvec.elements, Yvec.elements, dYvec.elements, N);
   else
     fsortpair (Xvec.elements, Yvec.elements, N);
Index: trunk/Ohana/src/opihi/dvo/lightcurve.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/lightcurve.c	(revision 16038)
+++ trunk/Ohana/src/opihi/dvo/lightcurve.c	(revision 16040)
@@ -4,5 +4,5 @@
   
   double Ra, Dec, Radius, Radius2, r;
-  float *RA, *DEC;
+  double *RA, *DEC;
   int Nstars, found, PhotCodeSelect;
   int i, j, k, m, N, NPTS, Nsecfilt, RELPHOT, *N1, TimeFormat;
@@ -69,6 +69,6 @@
 
   Nstars = catalog.Naverage;
-  ALLOCATE (RA, float, Nstars);
-  ALLOCATE (DEC, float, Nstars);
+  ALLOCATE (RA, double, Nstars);
+  ALLOCATE (DEC, double, Nstars);
   ALLOCATE (N1, int, Nstars);
 
@@ -81,5 +81,5 @@
   }
   /* sort list by DEC */
-  if (Nstars > 1) sort_lists (DEC, RA, N1, Nstars);
+  if (Nstars > 1) sort_coords_index (DEC, RA, N1, Nstars);
   /* at this point, RA, DEC, and N1 are sorted by DEC.  
      catalog.average[N1[i]].R = RA[i] */
@@ -134,5 +134,5 @@
     }
   }
-  sortthree (tvec[0].elements, mvec[0].elements, dmvec[0].elements, N);
+  fsortthree (tvec[0].elements, mvec[0].elements, dmvec[0].elements, N);
   tvec[0].Nelements = mvec[0].Nelements = dmvec[0].Nelements = N;
 
Index: trunk/Ohana/src/opihi/dvo/subpix.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/subpix.c	(revision 16038)
+++ trunk/Ohana/src/opihi/dvo/subpix.c	(revision 16040)
@@ -60,5 +60,5 @@
     index[i] = i;
   }
-  if (Nstars > 1) dsort_lists (DEC, RA, index, Nstars);
+  if (Nstars > 1) sort_coords_index (DEC, RA, index, Nstars);
 
   /* bracket the DEC range of interest */
Index: trunk/Ohana/src/opihi/lib.data/Makefile
===================================================================
--- trunk/Ohana/src/opihi/lib.data/Makefile	(revision 16038)
+++ trunk/Ohana/src/opihi/lib.data/Makefile	(revision 16040)
@@ -18,5 +18,4 @@
 $(SDIR)/book.$(ARCH).o                  \
 $(SDIR)/page.$(ARCH).o                  \
-$(SDIR)/sort.$(ARCH).o                  \
 $(SDIR)/fft.$(ARCH).o			\
 $(SDIR)/svdcmp.$(ARCH).o		\
Index: trunk/Ohana/src/opihi/lib.data/sort.c
===================================================================
--- trunk/Ohana/src/opihi/lib.data/sort.c	(revision 16038)
+++ 	(revision )
@@ -1,334 +1,0 @@
-# include "data.h"
-
-void sort (double *value, int N) {
-
-  int l,j,ir,i;
-  double temp;
-  
-  if (N < 2) return;
-  l = N >> 1;
-  ir = N - 1;
-  for (;;) {
-    if (l > 0) {
-      temp = value[--l];
-    }
-    else {
-      temp = value[ir];
-      value[ir] = value[0];
-      if (--ir == 0) {
-	value[0] = temp;
-	return;
-      }
-    }
-    i = l;
-    j = (l << 1) + 1;
-    while (j <= ir) {
-      if (j < ir && value[j] < value[j+1]) ++j;
-      if (temp < value[j]) {
-	value[i]=value[j];
-	j += (i=j) + 1;
-      }
-      else j = ir + 1;
-    }
-    value[i] = temp;
-  }
-}
-
-void fsort (float *value, int N) {
-
-  int l,j,ir,i;
-  float temp;
-  
-  if (N < 2) return;
-  l = N >> 1;
-  ir = N - 1;
-  for (;;) {
-    if (l > 0) {
-      temp = value[--l];
-    }
-    else {
-      temp = value[ir];
-      value[ir] = value[0];
-      if (--ir == 0) {
-	value[0] = temp;
-	return;
-      }
-    }
-    i = l;
-    j = (l << 1) + 1;
-    while (j <= ir) {
-      if (j < ir && value[j] < value[j+1]) ++j;
-      if (temp < value[j]) {
-	value[i]=value[j];
-	j += (i=j) + 1;
-      }
-      else j = ir + 1;
-    }
-    value[i] = temp;
-  }
-}
-
-void sortpair (double *value1, double *value2, int N) {
-
-  int l,j,ir,i;
-  double temp1, temp2;
-  
-  if (N < 2) return;
-  l = N >> 1;
-  ir = N - 1;
-  for (;;) {
-    if (l > 0) {
-      l--;
-      temp1 = value1[l];
-      temp2 = value2[l];
-    }
-    else {
-      temp1 = value1[ir];
-      temp2 = value2[ir];
-      value1[ir] = value1[0];
-      value2[ir] = value2[0];
-      if (--ir == 0) {
-	value1[0] = temp1;
-	value2[0] = temp2;
-	return;
-      }
-    }
-    i = l;
-    j = (l << 1) + 1;
-    while (j <= ir) {
-      if (j < ir && value1[j] < value1[j+1]) ++j;
-      if (temp1 < value1[j]) {
-	value1[i]=value1[j];
-	value2[i]=value2[j];
-	j += (i=j) + 1;
-      }
-      else j = ir + 1;
-    }
-    value1[i] = temp1;
-    value2[i] = temp2;
-  }
-}
-
-void fsortpair (float *X, float *Y, int N) {
-
-  int l,j,ir,i;
-  float tX, tY;
-  
-  if (N < 2) return;
-  l = N >> 1;
-  ir = N - 1;
-  for (;;) {
-    if (l > 0) {
-      l--;
-      tX = X[l];
-      tY = Y[l];
-    }
-    else {
-      tX = X[ir];
-      X[ir] = X[0];
-      tY = Y[ir];
-      Y[ir] = Y[0];
-      if (--ir == 0) {
-	X[0] = tX;
-	Y[0] = tY;
-	return;
-      }
-    }
-    i = l;
-    j = (l << 1) + 1;
-    while (j <= ir) {
-      if (j < ir && X[j] < X[j+1]) j++;
-      if (tX < X[j]) {
-	X[i] = X[j];
-	Y[i] = Y[j];
-	j += (i=j) + 1;
-      }
-      else j = ir + 1;
-    }
-    X[i] = tX;
-    Y[i] = tY;
-  }
-}
-
-void sortthree (float *X, float *Y, float *Z, int N) {
-
-  int l,j,ir,i;
-  float tX, tY, tZ;
-  
-  if (N < 2) return;
-  l = N >> 1;
-  ir = N - 1;
-  for (;;) {
-    if (l > 0) {
-      l--;
-      tX = X[l];
-      tY = Y[l];
-      tZ = Z[l];
-    }
-    else {
-      tX = X[ir];
-      X[ir] = X[0];
-      tY = Y[ir];
-      Y[ir] = Y[0];
-      tZ = Z[ir];
-      Z[ir] = Z[0];
-      if (--ir == 0) {
-	X[0] = tX;
-	Y[0] = tY;
-	Z[0] = tZ;
-	return;
-      }
-    }
-    i = l;
-    j = (l << 1) + 1;
-    while (j <= ir) {
-      if (j < ir && X[j] < X[j+1]) j++;
-      if (tX < X[j]) {
-	X[i] = X[j];
-	Y[i] = Y[j];
-	Z[i] = Z[j];
-	j += (i=j) + 1;
-      }
-      else j = ir + 1;
-    }
-    X[i] = tX;
-    Y[i] = tY;
-    Z[i] = tZ;
-  }
-}
-
-void sort_lists (float *X, float *Y, int *S, int N) {
-
-  int l,j,ir,i;
-  double tX, tY, tS;
-  
-  if (N < 2) return;
-  l = N >> 1;
-  ir = N - 1;
-  for (;;) {
-    if (l > 0) {
-      l--;
-      tX = X[l];
-      tY = Y[l];
-      tS = S[l];
-    }
-    else {
-      tX = X[ir];
-      X[ir] = X[0];
-      tY = Y[ir];
-      Y[ir] = Y[0];
-      tS = S[ir];
-      S[ir] = S[0];
-      if (--ir == 0) {
-	X[0] = tX;
-	Y[0] = tY;
-	S[0] = tS;
-	return;
-      }
-    }
-    i = l;
-    j = (l << 1) + 1;
-    while (j <= ir) {
-      if (j < ir && X[j] < X[j+1]) j++;
-      if (tX < X[j]) {
-	X[i] = X[j];
-	Y[i] = Y[j];
-	S[i] = S[j];
-	j += (i=j) + 1;
-      }
-      else j = ir + 1;
-    }
-    X[i] = tX;
-    Y[i] = tY;
-    S[i] = tS;
-  }
-}
-
-void dsort_lists (double *X, double *Y, int *S, int N) {
-
-  int l,j,ir,i;
-  double tX, tY, tS;
-  
-  if (N < 2) return;
-  l = N >> 1;
-  ir = N - 1;
-  for (;;) {
-    if (l > 0) {
-      l--;
-      tX = X[l];
-      tY = Y[l];
-      tS = S[l];
-    }
-    else {
-      tX = X[ir];
-      X[ir] = X[0];
-      tY = Y[ir];
-      Y[ir] = Y[0];
-      tS = S[ir];
-      S[ir] = S[0];
-      if (--ir == 0) {
-	X[0] = tX;
-	Y[0] = tY;
-	S[0] = tS;
-	return;
-      }
-    }
-    i = l;
-    j = (l << 1) + 1;
-    while (j <= ir) {
-      if (j < ir && X[j] < X[j+1]) j++;
-      if (tX < X[j]) {
-	X[i] = X[j];
-	Y[i] = Y[j];
-	S[i] = S[j];
-	j += (i=j) + 1;
-      }
-      else j = ir + 1;
-    }
-    X[i] = tX;
-    Y[i] = tY;
-    S[i] = tS;
-  }
-}
-
-// sort two int vectors by first vector
-void isort_pair (int *X, int *Y, int N) {
-
-  int l,j,ir,i;
-  int tX, tY;
-  
-  if (N < 2) return;
-  l = N >> 1;
-  ir = N - 1;
-  for (;;) {
-    if (l > 0) {
-      l--;
-      tX = X[l];
-      tY = Y[l];
-    }
-    else {
-      tX = X[ir];
-      X[ir] = X[0];
-      tY = Y[ir];
-      Y[ir] = Y[0];
-      if (--ir == 0) {
-	X[0] = tX;
-	Y[0] = tY;
-	return;
-      }
-    }
-    i = l;
-    j = (l << 1) + 1;
-    while (j <= ir) {
-      if (j < ir && X[j] < X[j+1]) j++;
-      if (tX < X[j]) {
-	X[i] = X[j];
-	Y[i] = Y[j];
-	j += (i=j) + 1;
-      }
-      else j = ir + 1;
-    }
-    X[i] = tX;
-    Y[i] = tY;
-  }
-}
Index: trunk/Ohana/src/opihi/lib.data/starfuncs.c
===================================================================
--- trunk/Ohana/src/opihi/lib.data/starfuncs.c	(revision 16038)
+++ trunk/Ohana/src/opihi/lib.data/starfuncs.c	(revision 16040)
@@ -36,5 +36,5 @@
     }
   }
-  sort (ring, Nring);
+  dsort (ring, Nring);
   for (Npts = sky = dsky2 = 0, i = 0.25*Nring; i < 0.75*Nring; i++, Npts += 1.0) {
     sky += ring[i];
@@ -150,5 +150,5 @@
     }
   }
-  sort (sky, Nsky);
+  dsort (sky, Nsky);
   for (Npts = fsky = 0, i = 0.25*Nsky; i < 0.75*Nsky; i++, Npts += 1.0) {
     fsky += sky[i];
@@ -199,5 +199,5 @@
     }
   }
-  sort (sky, Nsky);
+  dsort (sky, Nsky);
   for (Npts = fsky = 0, i = 0.25*Nsky; i < 0.75*Nsky; i++, Npts += 1.0) {
     fsky += sky[i];
Index: trunk/Ohana/src/opihi/lib.shell/CommandOps.c
===================================================================
--- trunk/Ohana/src/opihi/lib.shell/CommandOps.c	(revision 16038)
+++ trunk/Ohana/src/opihi/lib.shell/CommandOps.c	(revision 16040)
@@ -130,4 +130,20 @@
 }
 
+void sort_commands (int *seq) {
+
+  int i;
+
+  for (i = 0; i < Ncommands; i++) seq[i] = i;
+
+# define SWAPFUNC(A,B){ int tmp = seq[A]; seq[A] = seq[B]; seq[B] = tmp; }
+# define COMPARE(A,B)(strcmp (commands[seq[A]].name, commands[seq[B]].name) < 0)
+
+  OHANA_SORT (Ncommands, COMPARE, SWAPFUNC);
+
+# undef SWAPFUNC
+# undef COMPARE
+  
+}
+
 void print_commands (FILE *f) {
 
@@ -143,39 +159,2 @@
   return;
 }
-
-void sort_commands (int *seq) {
-
-  int l,j,ir,i, N;
-  int temp;
-  
-  N = Ncommands;
-  for (i = 0; i < N; i++) 
-    seq[i] = i;
-  
-  l = N >> 1;
-  ir = N - 1;
-  for (;;) {
-    if (l > 0) {
-      temp = seq[--l];
-    }
-    else {
-      temp = seq[ir];
-      seq[ir] = seq[0];
-      if (--ir == 0) {
-        seq[0] = temp;
-        return;
-      }
-    }
-    i = l;
-    j = (l << 1) + 1;
-    while (j <= ir) {
-      if (j < ir && (strcmp (commands[seq[j]].name, commands[seq[j+1]].name) < 0)) ++j;
-      if (strcmp (commands[temp].name, commands[seq[j]].name) < 0) {
-        seq[i]=seq[j];
-        j += (i=j) + 1;
-      }
-      else j = ir + 1;
-    }
-    seq[i] = temp;
-  }
-}
