Index: /trunk/Ohana/src/kapa2/Makefile
===================================================================
--- /trunk/Ohana/src/kapa2/Makefile	(revision 41343)
+++ /trunk/Ohana/src/kapa2/Makefile	(revision 41344)
@@ -68,5 +68,5 @@
 $(SRC)/DrawObjects.$(ARCH).o              $(SRC)/DrawFrame.$(ARCH).o          \
 $(SRC)/DrawTextlines.$(ARCH).o		  $(SRC)/DrawLabels.$(ARCH).o         \
-$(SRC)/MemoryDump.$(ARCH).o	      \
+$(SRC)/MemoryDump.$(ARCH).o	          $(SRC)/TickMarks.$(ARCH).o	      \
 $(SRC)/PNGit.$(ARCH).o                    $(SRC)/PPMit.$(ARCH).o	      \
 $(SRC)/CheckPipe.$(ARCH).o                $(SRC)/EventLoop.$(ARCH).o          \
Index: /trunk/Ohana/src/kapa2/include/prototypes.h
===================================================================
--- /trunk/Ohana/src/kapa2/include/prototypes.h	(revision 41343)
+++ /trunk/Ohana/src/kapa2/include/prototypes.h	(revision 41344)
@@ -49,7 +49,9 @@
 void          DrawYErrors         PROTO((Graphic *graphic, KapaGraphWidget *graph, Gobjects *objects));
 void	      DrawTick		  PROTO((Graphic *graphic, Axis *axis, int P, TickMarkData *tick, int naxis));
+
+/* TickMark functions */
 void	      AxisTickScale	  PROTO((Axis *axis, double *range, double *major, double *minor, int *nsignif));
 TickMarkData *CreateAxisTicks     PROTO((Axis *axis, int *nticks));
-int           PrintTick           PROTO((char *string, double value, double min, double max, int nsignif));
+int           PrintTick           PROTO((char *string, TickMarkData *tick, double min, double max));
 
 /* EventLoop */
Index: /trunk/Ohana/src/kapa2/include/structures.h
===================================================================
--- /trunk/Ohana/src/kapa2/include/structures.h	(revision 41343)
+++ /trunk/Ohana/src/kapa2/include/structures.h	(revision 41344)
@@ -157,4 +157,5 @@
 
 typedef struct {
+  char format[16];
   double min, max;
   char isaxis, areticks, islabel, islog;
@@ -169,4 +170,5 @@
 // structure to describe the ticks for an axis
 typedef struct {
+  char format[16];
   double value;
   int IsMajor;
Index: /trunk/Ohana/src/kapa2/src/DrawFrame.c
===================================================================
--- /trunk/Ohana/src/kapa2/src/DrawFrame.c	(revision 41343)
+++ /trunk/Ohana/src/kapa2/src/DrawFrame.c	(revision 41344)
@@ -58,38 +58,4 @@
 }
 
-int PrintTick (char *string, double value, double min, double max, int nsignif) {
-
-  int Nexp = 0;
-  int Nchar = 0;
-  
-  if (fabs(value/(max-min)) < 0.001) { 
-    value = 0.0; 
-    Nchar = sprintf (string, "%.1f", value);
-    return Nchar;
-  }
-
-//   double lvalue = log10(fabs(value));
-//   if (isfinite(lvalue)) {
-//     Nexp = fabs(lvalue);
-//   } else {
-//     Nexp = 0;
-//   }
-  
-  Nexp = abs(nsignif);
-
-  if (Nexp > 3) {
-    Nchar = sprintf (string, "%.1e", value);
-  } else {
-    if (nsignif < 0) {
-      char format[16];
-      snprintf (format, 16, "%%.%df", -1 * nsignif);
-      Nchar = sprintf (string, format, value);
-    } else {
-      Nchar = sprintf (string, "%.1f", value);
-    }
-  }
-  return Nchar;
-}
-
 void DrawTick (Graphic *graphic, Axis *axis, int P, TickMarkData *tick, int naxis) {
   
@@ -118,6 +84,6 @@
   dir = ((naxis == 0) || (naxis == 3)) ? -1 : +1;
 
-  x = fx + (value-min)*dfx/(max - min);
-  y = fy + (value-min)*dfy/(max - min);
+  x = fx + (value - min)*dfx/(max - min);
+  y = fy + (value - min)*dfy/(max - min);
 
   dy = 0;
@@ -153,8 +119,8 @@
     if (naxis == 3) { dy = 0; dx = +0.5*pad; pos = 5; } // right, center justified
 
-    xt = fx + (value-min)*dfx/(max - min) + dx;
-    yt = fy + (value-min)*dfy/(max - min) + dy;
-
-    PrintTick (string, value, min, max, tick->nsignif);
+    xt = fx + (value - min)*dfx/(max - min) + dx;
+    yt = fy + (value - min)*dfy/(max - min) + dy;
+
+    PrintTick (string, tick, min, max);
     DrawRotText (xt, yt, string, pos, 0.0);
   }
@@ -254,8 +220,8 @@
     if (naxis == 3) { dy = 0; dx = +0.5*pad; pos = 5; } // right, center justified
 
-    xt = fx + (value-min)*dfx/(max - min) + dx;
-    yt = fy + (value-min)*dfy/(max - min) + dy;
-
-    PrintTick (string, value, min, max, tick->nsignif);
+    xt = fx + (value - min)*dfx/(max - min) + dx;
+    yt = fy + (value - min)*dfy/(max - min) + dy;
+
+    PrintTick (string, tick, min, max);
     DrawRotText (xt, yt, string, pos, 0.0);
   }
@@ -263,156 +229,2 @@
 # endif
 
-// do I really want this?  allow an override?
-# define MIN_RANGE 1e-30
-
-void AxisTickScale (Axis *axis, double *range, double *major, double *minor, int *nsignif) {
-
-  double lrange, factor, mantis, fmantis, power;
-
-  *range = axis->fLabelRange*(axis[0].max - axis[0].min);
-  if (fabs(*range) < MIN_RANGE) {
-    *range = (*range < 0) ? -MIN_RANGE : +MIN_RANGE;
-  }
-
-  lrange = log10(MAX(fabs(*range), MIN_RANGE));
-  double truncRange = ((int) ((lrange + 0.005) * 1000)) / 1000.0;
-  lrange = truncRange;
-
-  mantis = modf (lrange, &factor);
-  if (mantis < 0.0) {
-    mantis += 1.0;
-    factor -= 1.0;
-  }
-  
-  // how many significant digits are needed?
-
-  power = MAX(pow(10.0, factor), MIN_RANGE);
-  fmantis = pow(10.0, mantis);
-  *major = MAX(0.5 * power, MIN_RANGE);
-  *minor = MAX(0.1 * power, MIN_RANGE);
-  
-  if ((fmantis >= 1.0) && (fmantis <  1.999)) {
-    *major = 0.5 * power;
-    *nsignif = factor - 1;
-    if (axis[0].areticks == 1) {
-      *major = 0.25 * power;
-      *nsignif = factor - 2;
-    }	  
-    if (axis[0].areticks == 3) {
-      *major = 1.0 * power;
-      *nsignif = factor - 1;
-    }	  
-  }
-  if ((fmantis >= 1.999) && (fmantis <  3.999)) {
-    *major = 1.0 * power;
-    *nsignif = factor;
-    if (axis[0].areticks == 1) {
-      *major = 0.5 * power;
-      *nsignif = factor - 1;
-    }	  
-    if (axis[0].areticks == 3) {
-      *major = 2.0 * power;
-      *nsignif = factor;
-    }	  
-  }
-  if ((fmantis >= 3.999) && (fmantis <  5.999)) {
-    *major = 1.0 * power;
-    *nsignif = factor;
-    if (axis[0].areticks == 1) {
-      *major = 1.0 * power;
-      *nsignif = factor;
-    }	  
-    if (axis[0].areticks == 3) {
-      *major = 2.0 * power;
-      *nsignif = factor;
-    }	  
-  }
-  if ((fmantis >= 5.999) && (fmantis <   7.999)) {
-    *major = 2.0 * power;
-    *nsignif = factor;
-    if (axis[0].areticks == 1) {
-      *major = 1.0 * power;
-      *nsignif = factor;
-    }	  
-    if (axis[0].areticks == 3) {
-      *major = 4.0 * power;
-      *nsignif = factor;
-    }	  
-  }
-  if ((fmantis >= 7.999) && (fmantis <  10.000)) {
-    *major = 2.5 * power;
-    *nsignif = factor - 1;
-    if (axis[0].areticks == 1) {
-      *major = 2.0 * power;
-      *nsignif = factor;
-    }	  
-    if (axis[0].areticks == 3) {
-      *major = 4.0 * power;
-      *nsignif = factor;
-    }	  
-  }
-  *minor = *major / axis->fMinor;
-}
-
-TickMarkData *CreateAxisTicks (Axis *axis, int *nticks) {
-
-  TickMarkData *ticks;
-  double range, major, minor, first, value;
-  int i, NTICKS, done, nsignif;
-
-  *nticks = 0;
-
-  if (isnan(axis->min) || isinf(axis->min)) return NULL;
-  if (isnan(axis->max) || isinf(axis->max)) return NULL;
-  
-  // length of the axis in pixels
-  // int nPixels = hypot(axis->dfx, axis->dfy);
-  // double dPixels = nPixels / range; // axis pixel-scale
-
-  AxisTickScale (axis, &range, &major, &minor, &nsignif);
-
-  // be a little generous 
-  NTICKS = (int)(fabs(range / minor)) + 2;
-  ALLOCATE (ticks, TickMarkData, NTICKS);
-
-  // value of the first tick mark (near axis->min)
-  double minValue = axis->min / minor;
-  int ifirst = (int) minValue;
-
-  if ((axis->min > 0.0) && (minValue - ifirst > +0.1)) {
-    ifirst ++;
-  } 
-  if ((axis->min < 0.0) && (minValue - ifirst < -0.1)) {
-    ifirst --;
-  }
-  first = minor*ifirst;
-  
-  // only write the labels for the inner fRange of the axies
-  double minLabelValue = 0.5*(1.0 - 1.001*axis->fLabelRange)*(axis->max - axis->min) + axis->min;
-  double maxLabelValue = 0.5*(1.0 + 1.001*axis->fLabelRange)*(axis->max - axis->min) + axis->min;
-
-  // loop to find the ticks
-  done = FALSE;
-  value = first; 
-  for (i = 0; !done && (i < NTICKS); i++) {
-    ticks[i].IsMajor = FALSE;
-    ticks[i].IsMajor |= (fabs((int)(value/major) - (value/major)) < 0.5*(minor/major));
-    ticks[i].IsMajor |= (fabs((int)((value + 0.5*minor)/major) - (value/major)) < 0.5*(minor/major));
-    ticks[i].IsMajor |= (fabs((int)((value - 0.5*minor)/major) - (value/major)) < 0.5*(minor/major));
-    int inLabelRange = (range > 0) ? (value >= minLabelValue) && (value <= maxLabelValue) : (value <= minLabelValue) && (value >= maxLabelValue);
-    ticks[i].IsLabel = inLabelRange && ticks[i].IsMajor && axis->islabel;
-    ticks[i].value = value;
-    ticks[i].nsignif = nsignif;
-    if (range > 0) 
-      value += minor;
-    else 
-      value -= minor;
-    
-    done |= (range > 0) && (value > axis->max + 0.1*minor);
-    done |= (range < 0) && (value < axis->max - 0.1*minor);
-    // fprintf (stderr, "%d : %f %f %f %f\n", done, range, value, axis->max, 0.1*minor);
-  }
-
-  *nticks = i;
-  return (ticks);
-}
Index: /trunk/Ohana/src/kapa2/src/Graphs.c
===================================================================
--- /trunk/Ohana/src/kapa2/src/Graphs.c	(revision 41343)
+++ /trunk/Ohana/src/kapa2/src/Graphs.c	(revision 41344)
@@ -25,4 +25,5 @@
     graph[0].axis[i].fLabelRange = 1.0;
     graph[0].axis[i].fMinor = 5.0;
+    memset (graph[0].axis[i].format, 0, 16);
   }    
 
Index: /trunk/Ohana/src/kapa2/src/LoadFrame.c
===================================================================
--- /trunk/Ohana/src/kapa2/src/LoadFrame.c	(revision 41343)
+++ /trunk/Ohana/src/kapa2/src/LoadFrame.c	(revision 41344)
@@ -46,4 +46,9 @@
   graph[0].axis[2].fMinor = graph[0].data.fMinorXp;
   graph[0].axis[3].fMinor = graph[0].data.fMinorYp;
+
+  strcpy (graph[0].axis[0].format, graph[0].data.formatXm);
+  strcpy (graph[0].axis[1].format, graph[0].data.formatYm);
+  strcpy (graph[0].axis[2].format, graph[0].data.formatXp);
+  strcpy (graph[0].axis[3].format, graph[0].data.formatYp);
 
   for (i = 0; i < 4; i++) {
Index: /trunk/Ohana/src/kapa2/src/PDF_Frame.c
===================================================================
--- /trunk/Ohana/src/kapa2/src/PDF_Frame.c	(revision 41343)
+++ /trunk/Ohana/src/kapa2/src/PDF_Frame.c	(revision 41344)
@@ -130,6 +130,6 @@
     yt = fy + (value-min)*dfy/(max - min) + dy;
 
-    // PrintTick write the characters into the string 
-    PrintTick (string, value, min, max, tick->nsignif);
+    // PrintTick writes the characters into the string 
+    PrintTick (string, tick, min, max);
     PDFRotText (buffer, xt, yt, string, pos, 0.0);
   }
Index: /trunk/Ohana/src/kapa2/src/PSFrame.c
===================================================================
--- /trunk/Ohana/src/kapa2/src/PSFrame.c	(revision 41343)
+++ /trunk/Ohana/src/kapa2/src/PSFrame.c	(revision 41344)
@@ -122,5 +122,5 @@
     yt = fy + (value-min)*dfy/(max - min) + dy;
 
-    PrintTick (string, value, min, max, tick->nsignif);
+    PrintTick (string, tick, min, max);
     PSRotText (f, xt, yt, string, pos, 0.0);
   }
@@ -198,5 +198,5 @@
     yt = fy + (value-min)*dfy/(max - min) + dy;
 
-    PrintTick (string, value, min, max, tick->nsignif);
+    PrintTick (string, tick, min, max);
     PSRotText (f, xt, yt, string, pos, 0.0);
   }
Index: /trunk/Ohana/src/kapa2/src/PSit.c
===================================================================
--- /trunk/Ohana/src/kapa2/src/PSit.c	(revision 41343)
+++ /trunk/Ohana/src/kapa2/src/PSit.c	(revision 41344)
@@ -1,5 +1,5 @@
 # include "Ximage.h"
-# define XOFFSET 60
-# define YOFFSET 60
+# define XOFFSET 0
+# define YOFFSET 0
 
 static char *name = "$Name: not supported by cvs2svn $";
Index: /trunk/Ohana/src/kapa2/src/SetGraphData.c
===================================================================
--- /trunk/Ohana/src/kapa2/src/SetGraphData.c	(revision 41343)
+++ /trunk/Ohana/src/kapa2/src/SetGraphData.c	(revision 41344)
@@ -37,4 +37,9 @@
   graph[0].axis[2].fMinor = graph[0].data.fMinorXp;
   graph[0].axis[3].fMinor = graph[0].data.fMinorYp;
+
+  strcpy (graph[0].axis[0].format, graph[0].data.formatXm);
+  strcpy (graph[0].axis[1].format, graph[0].data.formatYm);
+  strcpy (graph[0].axis[2].format, graph[0].data.formatXp);
+  strcpy (graph[0].axis[3].format, graph[0].data.formatYp);
 
   graph[0].axis[0].pad = graph[0].data.padXm;
Index: /trunk/Ohana/src/kapa2/src/SetGraphSize.c
===================================================================
--- /trunk/Ohana/src/kapa2/src/SetGraphSize.c	(revision 41343)
+++ /trunk/Ohana/src/kapa2/src/SetGraphSize.c	(revision 41344)
@@ -100,4 +100,6 @@
   GetRotFont (&fontsize);
 
+  // labelPad (min -> no labels, max -> yes labels)
+  // XXX change these defaults
   minPAD = 1.0*fontsize + 0;
   maxPAD = 2.0*fontsize + 4;
@@ -140,4 +142,5 @@
   // these depend on (a) existence of tick labels and (b) auto-offset or not.
   // in the auto-offset case, offset depends on the width of the tick label strings
+  // because the y-axis labels are horizontal, the length matters
   if (graph[0].axis[1].islabel && (isnan(graph[0].axis[1].labelPad) || isnan(graph[0].axis[1].pad))) {
     /* check for the max size of the axis label */
@@ -146,7 +149,5 @@
     for (i = 0; i < Nticks; i++) {
       if (!ticks[i].IsMajor) continue;
-
-      int Nchar = PrintTick (string, ticks[i].value, graph[0].axis[1].min, graph[0].axis[1].max, ticks[i].nsignif);
-
+      int Nchar = PrintTick (string, &ticks[i], graph[0].axis[1].min, graph[0].axis[1].max);
       Nc = MAX (Nc, Nchar);
     }
@@ -172,5 +173,5 @@
     for (i = 0; i < Nticks; i++) {
       if (!ticks[i].IsMajor) continue;
-      int Nchar = PrintTick (string, ticks[i].value, graph[0].axis[3].min, graph[0].axis[3].max, ticks[i].nsignif);
+      int Nchar = PrintTick (string, &ticks[i], graph[0].axis[3].min, graph[0].axis[3].max);
       Nc = MAX (Nc, Nchar);
     }
Index: /trunk/Ohana/src/kapa2/src/TickMarks.c
===================================================================
--- /trunk/Ohana/src/kapa2/src/TickMarks.c	(revision 41344)
+++ /trunk/Ohana/src/kapa2/src/TickMarks.c	(revision 41344)
@@ -0,0 +1,187 @@
+# include "Ximage.h"
+
+TickMarkData *CreateAxisTicks (Axis *axis, int *nticks) {
+
+  TickMarkData *ticks;
+  double range, major, minor, first, value;
+  int i, NTICKS, done, nsignif;
+
+  *nticks = 0;
+
+  if (isnan(axis->min) || isinf(axis->min)) return NULL;
+  if (isnan(axis->max) || isinf(axis->max)) return NULL;
+  
+  // length of the axis in pixels
+  // int nPixels = hypot(axis->dfx, axis->dfy);
+  // double dPixels = nPixels / range; // axis pixel-scale
+
+  AxisTickScale (axis, &range, &major, &minor, &nsignif);
+
+  // be a little generous 
+  NTICKS = (int)(fabs(range / minor)) + 2;
+  ALLOCATE (ticks, TickMarkData, NTICKS);
+
+  // value of the first tick mark (near axis->min)
+  double minValue = axis->min / minor;
+  int ifirst = (int) minValue;
+
+  if ((axis->min > 0.0) && (minValue - ifirst > +0.1)) {
+    ifirst ++;
+  } 
+  if ((axis->min < 0.0) && (minValue - ifirst < -0.1)) {
+    ifirst --;
+  }
+  first = minor*ifirst;
+  
+  // only write the labels for the inner fRange of the axies
+  double minLabelValue = 0.5*(1.0 - 1.001*axis->fLabelRange)*(axis->max - axis->min) + axis->min;
+  double maxLabelValue = 0.5*(1.0 + 1.001*axis->fLabelRange)*(axis->max - axis->min) + axis->min;
+
+  // loop to find the ticks
+  done = FALSE;
+  value = first; 
+  for (i = 0; !done && (i < NTICKS); i++) {
+    ticks[i].IsMajor = FALSE;
+    ticks[i].IsMajor |= (fabs((int)(value/major) - (value/major)) < 0.5*(minor/major));
+    ticks[i].IsMajor |= (fabs((int)((value + 0.5*minor)/major) - (value/major)) < 0.5*(minor/major));
+    ticks[i].IsMajor |= (fabs((int)((value - 0.5*minor)/major) - (value/major)) < 0.5*(minor/major));
+    int inLabelRange = (range > 0) ? (value >= minLabelValue) && (value <= maxLabelValue) : (value <= minLabelValue) && (value >= maxLabelValue);
+    ticks[i].IsLabel = inLabelRange && ticks[i].IsMajor && axis->islabel;
+    ticks[i].value = value;
+    ticks[i].nsignif = nsignif;
+    if (range > 0) 
+      value += minor;
+    else 
+      value -= minor;
+    
+    done |= (range > 0) && (value > axis->max + 0.1*minor);
+    done |= (range < 0) && (value < axis->max - 0.1*minor);
+    // fprintf (stderr, "%d : %f %f %f %f\n", done, range, value, axis->max, 0.1*minor);
+
+    // set the format
+    if (strcasecmp(axis->format, "auto")) {
+      strcpy (ticks[i].format, axis->format);
+    } else {
+      int Nexp = abs(nsignif);
+      if (Nexp > 3) {
+	strcpy (ticks[i].format, "%.1e");
+      } else {
+	if (nsignif < 0) {
+	  snprintf (ticks[i].format, 16, "%%.%df", -1 * nsignif);
+	} else {
+	  strcpy (ticks[i].format, "%.1f");
+	}
+      }
+    }
+  }
+
+  *nticks = i;
+  return (ticks);
+}
+
+int PrintTick (char *string, TickMarkData *tick, double min, double max) {
+
+  double value = tick->value;
+
+  // handle "0" a the axis
+  if (fabs(value/(max - min)) < 0.001) { 
+    value = 0.0; 
+  }
+
+  int Nchar = sprintf (string, tick->format, value);
+  return Nchar;
+}
+
+// do I really want this?  allow an override?
+# define MIN_RANGE 1e-30
+
+// range : range o
+void AxisTickScale (Axis *axis, double *range, double *major, double *minor, int *nsignif) {
+
+  double lrange, factor, mantis, fmantis, power;
+
+  *range = axis->fLabelRange*(axis[0].max - axis[0].min);
+  if (fabs(*range) < MIN_RANGE) {
+    *range = (*range < 0) ? -MIN_RANGE : +MIN_RANGE;
+  }
+
+  lrange = log10(MAX(fabs(*range), MIN_RANGE));
+  double truncRange = ((int) ((lrange + 0.005) * 1000)) / 1000.0;
+  lrange = truncRange;
+
+  mantis = modf (lrange, &factor);
+  if (mantis < 0.0) {
+    mantis += 1.0;
+    factor -= 1.0;
+  }
+  
+  // how many significant digits are needed?
+
+  power = MAX(pow(10.0, factor), MIN_RANGE);
+  fmantis = pow(10.0, mantis);
+  *major = MAX(0.5 * power, MIN_RANGE);
+  *minor = MAX(0.1 * power, MIN_RANGE);
+  
+  if ((fmantis >= 1.0) && (fmantis <  1.999)) {
+    *major = 0.5 * power;
+    *nsignif = factor - 1;
+    if (axis[0].areticks == 1) {
+      *major = 0.25 * power;
+      *nsignif = factor - 2;
+    }	  
+    if (axis[0].areticks == 3) {
+      *major = 1.0 * power;
+      *nsignif = factor - 1;
+    }	  
+  }
+  if ((fmantis >= 1.999) && (fmantis <  3.999)) {
+    *major = 1.0 * power;
+    *nsignif = factor;
+    if (axis[0].areticks == 1) {
+      *major = 0.5 * power;
+      *nsignif = factor - 1;
+    }	  
+    if (axis[0].areticks == 3) {
+      *major = 2.0 * power;
+      *nsignif = factor;
+    }	  
+  }
+  if ((fmantis >= 3.999) && (fmantis <  5.999)) {
+    *major = 1.0 * power;
+    *nsignif = factor;
+    if (axis[0].areticks == 1) {
+      *major = 1.0 * power;
+      *nsignif = factor;
+    }	  
+    if (axis[0].areticks == 3) {
+      *major = 2.0 * power;
+      *nsignif = factor;
+    }	  
+  }
+  if ((fmantis >= 5.999) && (fmantis <   7.999)) {
+    *major = 2.0 * power;
+    *nsignif = factor;
+    if (axis[0].areticks == 1) {
+      *major = 1.0 * power;
+      *nsignif = factor;
+    }	  
+    if (axis[0].areticks == 3) {
+      *major = 4.0 * power;
+      *nsignif = factor;
+    }	  
+  }
+  if ((fmantis >= 7.999) && (fmantis <  10.000)) {
+    *major = 2.5 * power;
+    *nsignif = factor - 1;
+    if (axis[0].areticks == 1) {
+      *major = 2.0 * power;
+      *nsignif = factor;
+    }	  
+    if (axis[0].areticks == 3) {
+      *major = 4.0 * power;
+      *nsignif = factor;
+    }	  
+  }
+  *minor = *major / axis->fMinor;
+}
+
Index: /trunk/Ohana/src/kapa2/src/bDrawFrame.c
===================================================================
--- /trunk/Ohana/src/kapa2/src/bDrawFrame.c	(revision 41343)
+++ /trunk/Ohana/src/kapa2/src/bDrawFrame.c	(revision 41344)
@@ -87,6 +87,6 @@
   dir = ((naxis == 0) || (naxis == 3)) ? -1 : +1;
   
-  x = fx + (value-min)*dfx/(max - min);
-  y = fy + (value-min)*dfy/(max - min);
+  x = fx + (value - min)*dfx/(max - min);
+  y = fy + (value - min)*dfy/(max - min);
 
   dx = 0;
@@ -121,8 +121,8 @@
     if (naxis == 3) { dy = 0; dx = +pad; pos = 5; }
 
-    xt = fx + (value-min)*dfx/(max - min) + dx;
-    yt = fy + (value-min)*dfy/(max - min) + dy;
+    xt = fx + (value - min)*dfx/(max - min) + dx;
+    yt = fy + (value - min)*dfy/(max - min) + dy;
 
-    PrintTick (string, value, min, max, tick->nsignif);
+    PrintTick (string, tick, min, max);
     bDrawRotText (buffer, xt, yt, string, pos, 0.0);
   }
@@ -190,5 +190,5 @@
     yt = fy + (value-min)*dfy/(max - min) + dy;
 
-    PrintTick (string, value, min, max, tick->nsignif);
+    PrintTick (string, tick, min, max);
     bDrawRotText (buffer, xt, yt, string, pos, 0.0);
   }
Index: /trunk/Ohana/src/libdvo/include/get_graphdata.h
===================================================================
--- /trunk/Ohana/src/libdvo/include/get_graphdata.h	(revision 41343)
+++ /trunk/Ohana/src/libdvo/include/get_graphdata.h	(revision 41344)
@@ -16,4 +16,5 @@
   int flipeast, flipnorth;
   char axis[8], labels[8], ticks[8];
+  char formatXm[16], formatXp[16], formatYm[16], formatYp[16];
 } Graphdata;
 
Index: /trunk/Ohana/src/libkapa/src/KapaWindow.c
===================================================================
--- /trunk/Ohana/src/libkapa/src/KapaWindow.c	(revision 41343)
+++ /trunk/Ohana/src/libkapa/src/KapaWindow.c	(revision 41344)
@@ -88,5 +88,5 @@
 }
 
-// XXX drop this function? : kapa is responsible for the graph initialization
+// called in kapa2/src/Graphs.c to init the graph
 int KapaInitGraph (Graphdata *graphdata) {
 
@@ -109,4 +109,9 @@
   strcpy (graphdata[0].labels, "2222");
 
+  strcpy (graphdata[0].formatXm, "auto"); 
+  strcpy (graphdata[0].formatXp, "auto"); 
+  strcpy (graphdata[0].formatYm, "auto"); 
+  strcpy (graphdata[0].formatYp, "auto"); 
+
   graphdata[0].ticktextPad = NAN;
 
@@ -182,4 +187,8 @@
 		  data[0].fMinorYm, data[0].fMinorYp);
 
+  KiiSendMessage (fd, "%s %s %s %s", 
+		  data[0].formatXm, data[0].formatXp, 
+		  data[0].formatYm, data[0].formatYp);
+
   KiiSendMessage (fd, "%g %g %g %g ", 
 		  data[0].coords.pc1_1, data[0].coords.pc2_2,
@@ -232,4 +241,8 @@
 		  &data[0].fMinorXm, &data[0].fMinorXp, 
 		  &data[0].fMinorYm, &data[0].fMinorYp);
+
+  KiiScanMessage (fd, "%s %s %s %s", 
+		  data[0].formatXm, data[0].formatXp, 
+		  data[0].formatYm, data[0].formatYp);
 
   KiiScanMessage (fd, "%f %f %f %f", 
Index: /trunk/Ohana/src/opihi/cmd.data/box.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/box.c	(revision 41343)
+++ /trunk/Ohana/src/opihi/cmd.data/box.c	(revision 41344)
@@ -200,4 +200,42 @@
   }
 
+  if ((N = get_argument (argc, argv, "-format"))) {
+    remove_argument (N, &argc, argv);
+    if (strlen (argv[N]) > 15) { goto usage; }
+    strcpy (graphmode.formatXm, argv[N]);
+    strcpy (graphmode.formatXp, argv[N]);
+    strcpy (graphmode.formatYm, argv[N]);
+    strcpy (graphmode.formatYp, argv[N]);
+    remove_argument (N, &argc, argv);
+  }
+
+  if ((N = get_argument (argc, argv, "-xformat"))) {
+    remove_argument (N, &argc, argv);
+    if (strlen (argv[N]) > 15) { goto usage; }
+    strcpy (graphmode.formatXm, argv[N]);
+    remove_argument (N, &argc, argv);
+  }
+
+  if ((N = get_argument (argc, argv, "-yformat"))) {
+    remove_argument (N, &argc, argv);
+    if (strlen (argv[N]) > 15) { goto usage; }
+    strcpy (graphmode.formatYm, argv[N]);
+    remove_argument (N, &argc, argv);
+  }
+
+  if ((N = get_argument (argc, argv, "+xformat"))) {
+    remove_argument (N, &argc, argv);
+    if (strlen (argv[N]) > 15) { goto usage; }
+    strcpy (graphmode.formatXp, argv[N]);
+    remove_argument (N, &argc, argv);
+  }
+
+  if ((N = get_argument (argc, argv, "+yformat"))) {
+    remove_argument (N, &argc, argv);
+    if (strlen (argv[N]) > 15) { goto usage; }
+    strcpy (graphmode.formatYm, argv[N]);
+    remove_argument (N, &argc, argv);
+  }
+
   if (argc != 1) goto usage;
 
