Index: /branches/eam_branches/ipp-20120405/Ohana/src/opihi/cmd.basic/run_for.c
===================================================================
--- /branches/eam_branches/ipp-20120405/Ohana/src/opihi/cmd.basic/run_for.c	(revision 33881)
+++ /branches/eam_branches/ipp-20120405/Ohana/src/opihi/cmd.basic/run_for.c	(revision 33882)
@@ -5,9 +5,15 @@
 int run_for (int argc, char **argv) {
 
-  int ThisList, depth, i, done, status, found, NLINES, j;
+  int N, ThisList, depth, i, done, status, found, NLINES, j;
   double start, end, delta;
   char *input, *endptr;
   double value, sign;
   Macro loop;
+
+  int Inclusive = FALSE;
+  if ((N = get_argument (argc, argv, "-incl"))) {
+    remove_argument (N, &argc, argv);
+    Inclusive = TRUE;
+  }
 
   if ((argc != 4) && (argc != 5)) {
@@ -95,4 +101,6 @@
   REALLOCATE (loop.line, char *, MAX (loop.Nlines, 1));
 
+  if (Inclusive) end += 0.01*delta;
+
   status = TRUE;
   interrupt = FALSE;
Index: /branches/eam_branches/ipp-20120405/Ohana/src/opihi/cmd.data/dot.c
===================================================================
--- /branches/eam_branches/ipp-20120405/Ohana/src/opihi/cmd.data/dot.c	(revision 33881)
+++ /branches/eam_branches/ipp-20120405/Ohana/src/opihi/cmd.data/dot.c	(revision 33882)
@@ -3,9 +3,16 @@
 int dot (int argc, char **argv) {
   
-  int kapa;
+  int kapa, N;
   Graphdata graphmode;
   float x, y;
 
   if (!style_args (&graphmode, &argc, argv, &kapa)) return FALSE;
+
+  /* FracPositions uses coordinates of 0-1 relative to axis range */
+  int FracPositions = FALSE;
+  if ((N = get_argument (argc, argv, "-frac"))) {
+    remove_argument (N, &argc, argv);
+    FracPositions = TRUE;
+  } 
 
   if (argc != 3) {
@@ -15,4 +22,9 @@
   x = atof(argv[1]);
   y = atof(argv[2]);
+
+  if (FracPositions) {
+    x =  x * (graphmode.xmax - graphmode.xmin) + graphmode.xmin;
+    y =  y * (graphmode.ymax - graphmode.ymin) + graphmode.ymin;
+  }    
 
   /* set point style and errorbar mode (these are NOT sticky) */
Index: /branches/eam_branches/ipp-20120405/Ohana/src/opihi/cmd.data/write_vectors.c
===================================================================
--- /branches/eam_branches/ipp-20120405/Ohana/src/opihi/cmd.data/write_vectors.c	(revision 33881)
+++ /branches/eam_branches/ipp-20120405/Ohana/src/opihi/cmd.data/write_vectors.c	(revision 33882)
@@ -21,7 +21,29 @@
   FITS = NULL;
   if ((N = get_argument (argc, argv, "-fits"))) {
+    if (format) {
+      gprint (GP_ERR, "ERROR: do not mix -fits and -format\n");
+      free (format);
+      return (FALSE);
+    }
     remove_argument (N, &argc, argv);
     FITS = strcreate (argv[N]);
     remove_argument (N, &argc, argv);
+  }
+
+  /* option generate a FITS output table */
+  int CSV = FALSE;
+  if ((N = get_argument (argc, argv, "-csv"))) {
+    if (format) {
+      gprint (GP_ERR, "ERROR: do not mix -csv and -format\n");
+      free (format);
+      return (FALSE);
+    }
+    if (FITS) {
+      gprint (GP_ERR, "ERROR: do not mix -csv and -fits\n");
+      free (FITS);
+      return (FALSE);
+    }
+    remove_argument (N, &argc, argv);
+    CSV = TRUE;
   }
 
@@ -30,4 +52,10 @@
     remove_argument (N, &argc, argv);
     append = TRUE;
+  }
+
+  int ADD_HEADER = FALSE;
+  if ((N = get_argument (argc, argv, "-header"))) {
+    remove_argument (N, &argc, argv);
+    ADD_HEADER = TRUE;
   }
 
@@ -83,11 +111,32 @@
 
   /* default output format */
+  if (ADD_HEADER) {
+    for (j = 0; j < Nvec; j++) {
+      if (CSV) {
+	fprintf (f, "%s,", vec[j][0].name);
+      } else {
+	if (j == 0) fprintf (f, "# ");
+	fprintf (f, "%s ", vec[j][0].name);
+      }
+    }
+    fprintf (f, "\n");
+  }
+
+  /* default output format */
   if (format == (char *) NULL) {
     for (i = 0; i < vec[0][0].Nelements; i++) {
       for (j = 0; j < Nvec; j++) {
 	if (vec[j][0].type == OPIHI_FLT) {
-	  fprintf (f, "%.12g ", vec[j][0].elements.Flt[i]);
+	  if (CSV) {
+	    fprintf (f, "%.12g,", vec[j][0].elements.Flt[i]);
+	  } else {
+	    fprintf (f, "%.12g ", vec[j][0].elements.Flt[i]);
+	  }
 	} else {
-	  fprintf (f, "%d ", vec[j][0].elements.Int[i]);
+	  if (CSV) {
+	    fprintf (f, "%d,", vec[j][0].elements.Int[i]);
+	  } else {
+	    fprintf (f, "%d ", vec[j][0].elements.Int[i]);
+	  }
 	}
       }
