diff --git a/Graphics/Draw.h b/Graphics/Draw.h
index ebee4d04101b328a1bb53dd209860a8791d2dc40..3bb830128d2978d5be0d985b20e570a0f25697d6 100644
--- a/Graphics/Draw.h
+++ b/Graphics/Draw.h
@@ -84,6 +84,7 @@ void Draw_Axes(int mode, int tics[3], char format[3][256], char label[3][256],
 // //////////////// FIXME remove everything below ////////////////////
 
 
+void Draw_Scales_Old();
 void Draw_Post_Old(void);
 
 void Draw_Graph2D_Old();
diff --git a/Graphics/Makefile b/Graphics/Makefile
index da419ca84f1ad2c1b145ddf943a2c34b0c0a1978..dd85cb51b5ee87c981d50e0e90e2b95f0c798452 100644
--- a/Graphics/Makefile
+++ b/Graphics/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.123 2007-08-29 18:41:06 geuzaine Exp $
+# $Id: Makefile,v 1.124 2007-08-31 17:28:42 geuzaine Exp $
 #
 # Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 #
@@ -36,7 +36,7 @@ SRC = Draw.cpp \
       Iso.cpp \
       Entity.cpp \
       ReadImg.cpp \
-      Scale.cpp \
+      Scale_Old.cpp Scale.cpp \
       Graph2D_Old.cpp Graph2D.cpp \
       gl2ps.cpp\
       gl2gif.cpp\
diff --git a/Graphics/Scale.cpp b/Graphics/Scale.cpp
index 202ab925aa57cb394096ec9541e96efba48d1ecf..05d1c2a909341c3218932b78a294f0b154c22b33 100644
--- a/Graphics/Scale.cpp
+++ b/Graphics/Scale.cpp
@@ -1,4 +1,4 @@
-// $Id: Scale.cpp,v 1.64 2006-11-27 22:22:16 geuzaine Exp $
+// $Id: Scale.cpp,v 1.65 2007-08-31 17:28:42 geuzaine Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //
@@ -19,385 +19,15 @@
 // 
 // Please report all bugs and problems to <gmsh@geuz.org>.
 
-#include "Gmsh.h"
 #include "GmshUI.h"
-#include "Numeric.h"
 #include "Draw.h"
 #include "Context.h"
-#include "Views.h"
 #include "gl2ps.h"
 
 extern Context_T CTX;
 
-// Even if all computations in these routines are made in window
-// coordinates, double precision is used to work at subpixel accuracy
-
-void draw_scale(Post_View * v,
-                double xmin, double ymin, double width, double height,
-                double tic, int horizontal)
-{
-  gl_font(CTX.gl_font_enum, CTX.gl_fontsize);
-  double font_h = gl_height(); // total font height
-  double font_a = gl_height() - gl_descent();  // height above ref pt
-
-  double box;
-  if(horizontal){
-    box = width / (v->NbIso ? v->NbIso : 1);   // colorscale box width
-  }
-  else{
-    box = height / (v->NbIso ? v->NbIso : 1);   // colorscale box height
-  }
-
-  glPointSize(v->PointSize);
-  gl2psPointSize(v->PointSize * CTX.print.eps_point_size_factor);
-
-  glLineWidth(v->LineWidth);
-  gl2psLineWidth(v->LineWidth * CTX.print.eps_line_width_factor);
-
-  double ValMin, ValMax;
-  if(v->ExternalViewIndex >= 0){
-    ValMin = v->ExternalMin;
-    ValMax = v->ExternalMax;
-  }
-  else{
-    switch(v->RangeType){
-    case DRAW_POST_RANGE_CUSTOM:
-      ValMin = v->CustomMin;
-      ValMax = v->CustomMax;
-      break;
-    case DRAW_POST_RANGE_PER_STEP:
-      if(v->TimeStepMin && v->TimeStepMax){
-	ValMin = v->TimeStepMin[v->TimeStep];
-	ValMax = v->TimeStepMax[v->TimeStep];
-      }
-      else{ // possible of the view is empty
-	ValMin = v->Min;
-	ValMax = v->Max;
-      }
-      break;
-    case DRAW_POST_RANGE_DEFAULT:
-    default:
-      ValMin = v->Min;
-      ValMax = v->Max;
-      break;
-    }
-  }
-
-  switch (v->ScaleType) {
-  case DRAW_POST_LINEAR:
-    v->GIFV = GiveIndexFromValue_Lin;
-    v->GVFI = GiveValueFromIndex_Lin;
-    break;
-  case DRAW_POST_LOGARITHMIC:
-    v->GIFV = GiveIndexFromValue_Log;
-    v->GVFI = GiveValueFromIndex_Log;
-    break;
-  case DRAW_POST_DOUBLELOGARITHMIC:
-    v->GIFV = GiveIndexFromValue_DoubleLog;
-    v->GVFI = GiveValueFromIndex_DoubleLog;
-    break;
-  }
-
-  // colorscale
-
-  for(int i = 0; i < v->NbIso; i++) {
-    if(v->IntervalsType == DRAW_POST_DISCRETE) {
-      PaletteDiscrete(v, v->NbIso, i);
-      glBegin(GL_QUADS);
-      if(horizontal){
-	glVertex2d(xmin + i * box, ymin);
-	glVertex2d(xmin + (i + 1) * box, ymin);
-	glVertex2d(xmin + (i + 1) * box, ymin + height);
-	glVertex2d(xmin + i * box, ymin + height);
-      }
-      else{
-	glVertex2d(xmin, ymin + i * box);
-	glVertex2d(xmin + width, ymin + i * box);
-	glVertex2d(xmin + width, ymin + (i + 1) * box);
-	glVertex2d(xmin, ymin + (i + 1) * box);
-      }
-      glEnd();
-    }
-    else if(v->IntervalsType == DRAW_POST_CONTINUOUS) {
-      glBegin(GL_QUADS);
-      PaletteContinuousLinear(v, ValMin, ValMax,
-			      ValMin + i * (ValMax - ValMin) / 
-			      (v->NbIso ? v->NbIso : 1));
-      if(horizontal){
-	glVertex2d(xmin + i * box, ymin + height);
-	glVertex2d(xmin + i * box, ymin);
-      }
-      else{
-	glVertex2d(xmin, ymin + i * box);
-	glVertex2d(xmin + width, ymin + i * box);
-      }
-      PaletteContinuousLinear(v, ValMin, ValMax,
-			      ValMin + (i + 1) * (ValMax - ValMin) / 
-			      (v->NbIso ? v->NbIso : 1));
-      if(horizontal){
-	glVertex2d(xmin + (i + 1) * box, ymin);
-	glVertex2d(xmin + (i + 1) * box, ymin + height);
-      }
-      else{
-	glVertex2d(xmin + width, ymin + (i + 1) * box);
-	glVertex2d(xmin, ymin + (i + 1) * box);
-      }
-      glEnd();
-    }
-    else {
-      PaletteDiscrete(v, v->NbIso, i);
-      glBegin(GL_LINES);
-      if(horizontal){
-	glVertex2d(xmin + i * box + 0.5 * box, ymin);
-	glVertex2d(xmin + i * box + 0.5 * box, ymin + height);
-      }
-      else{
-	glVertex2d(xmin, ymin + i * box + 0.5 * box);
-	glVertex2d(xmin + width, ymin + i * box + 0.5 * box);
-      }
-      glEnd();
-    }
-  }
-
-  // valuescale
-
-  char label[1024];
-  int nbv;
-  double cv_box;
-  if(horizontal){
-    sprintf(label, v->Format, -M_PI/1.e4);
-    double estim = gl_width(label);
-    nbv = (width/estim > v->NbIso) ? v->NbIso : ((width/estim > 2.) ? -2 : -1);
-    cv_box = width / nbv;
-  }
-  else{
-    nbv = (height/font_h > v->NbIso) ? v->NbIso : ((height/font_h > 3.) ? -2 : -1);
-    cv_box = height / nbv;
-  }
-
-  glColor4ubv((GLubyte *) & CTX.color.text);
-
-  if(nbv < 0) { // only min and max (+ possibly mid value) if not enough room
-    if(v->IntervalsType == DRAW_POST_DISCRETE ||
-       v->IntervalsType == DRAW_POST_CONTINUOUS) {
-      sprintf(label, v->Format, ValMin);
-      if(horizontal){
-	glRasterPos2d(xmin, ymin + height + tic);
-	Draw_String_Center(label);
-      }
-      else{
-	glRasterPos2d(xmin + width + tic, ymin - font_a / 3.);
-	Draw_String(label);
-      }
-      sprintf(label, v->Format, ValMax);
-      if(horizontal){
-	glRasterPos2d(xmin + width, ymin + height + tic);
-	Draw_String_Center(label);
-      }
-      else{
-	glRasterPos2d(xmin + width + tic, ymin + height - font_a / 3.);
-	Draw_String(label);
-      }
-    }
-    else {
-      sprintf(label, v->Format, ValMin);
-      if(horizontal){
-	glRasterPos2d(xmin + (box / 2), ymin + height + tic);
-	Draw_String_Center(label);
-      }
-      else{
-	glRasterPos2d(xmin + width + tic, ymin + (box / 2) - font_a / 3.);
-	Draw_String(label);
-      }
-      sprintf(label, v->Format, ValMax);
-      if(horizontal){
-	glRasterPos2d(xmin + width - (box / 2), ymin + height + tic);
-	Draw_String_Center(label);
-      }
-      else{
-	glRasterPos2d(xmin + width + tic, ymin + height - (box / 2) - font_a / 3.);
-	Draw_String(label);
-      }
-    }
-    if(nbv == -2){
-      double Val = v->GVFI(ValMin, ValMax, v->NbIso, v->NbIso/2);
-      sprintf(label, v->Format, Val);
-      if(horizontal){
-	glRasterPos2d(xmin + width/2., ymin + height + tic);
-	Draw_String_Center(label);
-      }
-      else{
-	glRasterPos2d(xmin + width + tic, ymin + height/2 - font_a / 3.);
-	Draw_String(label);
-      }
-    }
-  }
-  else {
-    if(v->IntervalsType == DRAW_POST_DISCRETE ||
-       v->IntervalsType == DRAW_POST_CONTINUOUS) {
-      for(int i = 0; i < nbv + 1; i++) {
-        double Val = v->GVFI(ValMin, ValMax, nbv + 1, i);
-        sprintf(label, v->Format, Val);
-	if(horizontal){
-	  glRasterPos2d(xmin + i * cv_box, ymin + height + tic);
-	  Draw_String_Center(label);
-	}
-	else{
-	  glRasterPos2d(xmin + width + tic, ymin + i * cv_box - font_a / 3.);
-	  Draw_String(label);
-	}
-      }
-    }
-    else {
-      for(int i = 0; i < nbv; i++) {
-        double Val = v->GVFI(ValMin, ValMax, nbv, i);
-        sprintf(label, v->Format, Val);
-	if(horizontal){
-	  glRasterPos2d(xmin + (2 * i + 1) * (cv_box / 2), ymin + height + tic);
-	  Draw_String_Center(label);
-	}
-	else{
-	  glRasterPos2d(xmin + width + tic, ymin + (2 * i + 1) * (cv_box / 2) - font_a / 3.);
-	  Draw_String(label);
-	}
-      }
-    }
-  }
-
-  // the label
-
-  if((v->ShowTime == 1 && List_Nbr(v->Time) > 1) ||
-     (v->ShowTime == 2 && List_Nbr(v->Time) > 0)){
-    char tmp[256];
-    sprintf(tmp, v->Format, *(double *)List_Pointer(v->Time, v->TimeStep));
-    sprintf(label, "%s (%s)", v->Name, tmp);
-  }
-  else if((v->ShowTime == 3 && List_Nbr(v->Time) > 1) ||
-	  (v->ShowTime == 4 && List_Nbr(v->Time) > 0)){
-    sprintf(label, "%s (%d)", v->Name, v->TimeStep);
-  }
-  else
-    sprintf(label, "%s", v->Name);
-
-  if(horizontal){
-    glRasterPos2d(xmin + width / 2., ymin + height + tic + 1.4*font_h);
-    Draw_String_Center(label);
-  }
-  else{
-    glRasterPos2d(xmin, ymin - 2 * font_h);
-    Draw_String(label);
-  }
-}
-
-void Draw_Scales(void)
+void Draw_Scales()
 {
-  static List_T *todraw = NULL;
-
-  if(!CTX.post.list)
-    return;
-
-  // scales to draw?
-
-  if(!todraw)
-    todraw = List_Create(5, 5, sizeof(Post_View *));
-  else
-    List_Reset(todraw);
-
-  for(int i = 0; i < List_Nbr(CTX.post.list); i++) {
-    Post_View *v = *(Post_View **) List_Pointer(CTX.post.list, i);
-    if(v->Visible && !v->Dirty && v->ShowScale &&
-       v->Type == DRAW_POST_3D && !v->TextOnly)
-      List_Add(todraw, &v);
-  }
-
-  if(!List_Nbr(todraw)) {
-    return;
-  }
-
-  const double tic = 10., bar_size = 16.;
-  double width = 0., width_prev = 0., width_total = 0.;
-
-  gl_font(CTX.gl_font_enum, CTX.gl_fontsize);
-  char label[1024];
-  double largest_number = 0.;
-  for(int i = 0; i < List_Nbr(todraw); i++) {
-    Post_View *v = *(Post_View **) List_Pointer(todraw, i);
-    sprintf(label, v->Format, -M_PI/1.e4);
-    if(largest_number < gl_width(label))
-      largest_number = gl_width(label);
-  }
-
-  for(int i = 0; i < List_Nbr(todraw); i++) {
-    Post_View *v = *(Post_View **) List_Pointer(todraw, i);
-    
-    if(!v->AutoPosition) {
-      double x = v->Position[0], y = v->Position[1];
-      int center = Fix2DCoordinates(&x, &y);
-      draw_scale(v, 
-		 x - ((center & 1) ? v->Size[0]/2. : 0.), 
-		 y - v->Size[1] + ((center & 2) ? v->Size[1]/2. : 0.),
-		 v->Size[0], v->Size[1], tic, CTX.post.horizontal_scales);
-    }
-    else{
-      if(CTX.post.horizontal_scales){
-	double ysep = 20.;
-	if(List_Nbr(todraw) == 1){
-	  double ww = (CTX.viewport[2] - CTX.viewport[0]) / 2.;
-	  draw_scale(v, 
-		     (CTX.viewport[2] - CTX.viewport[0]) / 2. - ww / 2,
-		     CTX.viewport[1] + ysep, 
-		     ww, bar_size, 
-		     tic, 1);
-	}
-	else{
-	  double xsep = largest_number/4. + (CTX.viewport[2] - CTX.viewport[0])/10.;
-	  double ww = (CTX.viewport[2] - CTX.viewport[0] - 4 * xsep) / 2.;
-	  if(ww < 20) ww = 20;
-	  draw_scale(v, 
-		     (CTX.viewport[2] - CTX.viewport[0])/2. - (i%2 ? -xsep/1.5 : ww+xsep/1.5),
-		     CTX.viewport[1] + ysep + (i/2) * (bar_size+tic+2*gl_height()+ysep), 
-		     ww, bar_size, 
-		     tic, 1);
-	}
-      }
-      else{
-	double xsep = 20.;
-	double dy = 2. * gl_height();
-	if(List_Nbr(todraw) == 1){
-	  double ysep = (CTX.viewport[3] - CTX.viewport[1]) / 6.;
-	  double hh = CTX.viewport[3] - CTX.viewport[1] - 2 * ysep - dy;
-	  draw_scale(v, 
-		     CTX.viewport[0] + xsep, 
-		     CTX.viewport[1] + ysep + dy, 
-		     bar_size, hh, 
-		     tic, 0);
-	}
-	else{
-	  double ysep = (CTX.viewport[3] - CTX.viewport[1]) / 15.;
-	  double hh = (CTX.viewport[3] - CTX.viewport[1] - 3 * ysep - 2.5 * dy) / 2.;
-	  draw_scale(v, 
-		     CTX.viewport[0] + xsep + width_total + (i / 2) * xsep,
-		     CTX.viewport[1] + ysep + dy + (1 - i % 2) * (hh + 1.5 * dy + ysep),
-		     bar_size, hh,
-		     tic, 0);
-	}
-	// compute width
-	width_prev = width;
-	sprintf(label, v->Format, -M_PI/1.e4);
-	width = bar_size + tic + gl_width(label);
-	if(List_Nbr(v->Time) > 1 && v->ShowTime){
-	  char tmp[256];
-	  sprintf(tmp, v->Format, *(double *)List_Pointer(v->Time, v->TimeStep));
-	  sprintf(label, "%s (%s)", v->Name, tmp);
-	}
-	else
-	  sprintf(label, "%s", v->Name);
-	if(gl_width(label) > width)
-	  width = gl_width(label);
-	if(i % 2)
-	  width_total += DMAX(bar_size + width, bar_size + width_prev);
-      }
-    }
-  }
+  printf("drawing scale!\n");
 }
 
diff --git a/Graphics/Scale_Old.cpp b/Graphics/Scale_Old.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..1cff04fbd68f6d73a8ef8556e65b74d67662cbe9
--- /dev/null
+++ b/Graphics/Scale_Old.cpp
@@ -0,0 +1,403 @@
+// $Id: Scale_Old.cpp,v 1.1 2007-08-31 17:28:42 geuzaine Exp $
+//
+// Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+// 
+// Please report all bugs and problems to <gmsh@geuz.org>.
+
+#include "Gmsh.h"
+#include "GmshUI.h"
+#include "Numeric.h"
+#include "Draw.h"
+#include "Context.h"
+#include "Views.h"
+#include "gl2ps.h"
+
+extern Context_T CTX;
+
+// Even if all computations in these routines are made in window
+// coordinates, double precision is used to work at subpixel accuracy
+
+void draw_scale(Post_View * v,
+                double xmin, double ymin, double width, double height,
+                double tic, int horizontal)
+{
+  gl_font(CTX.gl_font_enum, CTX.gl_fontsize);
+  double font_h = gl_height(); // total font height
+  double font_a = gl_height() - gl_descent();  // height above ref pt
+
+  double box;
+  if(horizontal){
+    box = width / (v->NbIso ? v->NbIso : 1);   // colorscale box width
+  }
+  else{
+    box = height / (v->NbIso ? v->NbIso : 1);   // colorscale box height
+  }
+
+  glPointSize(v->PointSize);
+  gl2psPointSize(v->PointSize * CTX.print.eps_point_size_factor);
+
+  glLineWidth(v->LineWidth);
+  gl2psLineWidth(v->LineWidth * CTX.print.eps_line_width_factor);
+
+  double ValMin, ValMax;
+  if(v->ExternalViewIndex >= 0){
+    ValMin = v->ExternalMin;
+    ValMax = v->ExternalMax;
+  }
+  else{
+    switch(v->RangeType){
+    case DRAW_POST_RANGE_CUSTOM:
+      ValMin = v->CustomMin;
+      ValMax = v->CustomMax;
+      break;
+    case DRAW_POST_RANGE_PER_STEP:
+      if(v->TimeStepMin && v->TimeStepMax){
+	ValMin = v->TimeStepMin[v->TimeStep];
+	ValMax = v->TimeStepMax[v->TimeStep];
+      }
+      else{ // possible of the view is empty
+	ValMin = v->Min;
+	ValMax = v->Max;
+      }
+      break;
+    case DRAW_POST_RANGE_DEFAULT:
+    default:
+      ValMin = v->Min;
+      ValMax = v->Max;
+      break;
+    }
+  }
+
+  switch (v->ScaleType) {
+  case DRAW_POST_LINEAR:
+    v->GIFV = GiveIndexFromValue_Lin;
+    v->GVFI = GiveValueFromIndex_Lin;
+    break;
+  case DRAW_POST_LOGARITHMIC:
+    v->GIFV = GiveIndexFromValue_Log;
+    v->GVFI = GiveValueFromIndex_Log;
+    break;
+  case DRAW_POST_DOUBLELOGARITHMIC:
+    v->GIFV = GiveIndexFromValue_DoubleLog;
+    v->GVFI = GiveValueFromIndex_DoubleLog;
+    break;
+  }
+
+  // colorscale
+
+  for(int i = 0; i < v->NbIso; i++) {
+    if(v->IntervalsType == DRAW_POST_DISCRETE) {
+      PaletteDiscrete(v, v->NbIso, i);
+      glBegin(GL_QUADS);
+      if(horizontal){
+	glVertex2d(xmin + i * box, ymin);
+	glVertex2d(xmin + (i + 1) * box, ymin);
+	glVertex2d(xmin + (i + 1) * box, ymin + height);
+	glVertex2d(xmin + i * box, ymin + height);
+      }
+      else{
+	glVertex2d(xmin, ymin + i * box);
+	glVertex2d(xmin + width, ymin + i * box);
+	glVertex2d(xmin + width, ymin + (i + 1) * box);
+	glVertex2d(xmin, ymin + (i + 1) * box);
+      }
+      glEnd();
+    }
+    else if(v->IntervalsType == DRAW_POST_CONTINUOUS) {
+      glBegin(GL_QUADS);
+      PaletteContinuousLinear(v, ValMin, ValMax,
+			      ValMin + i * (ValMax - ValMin) / 
+			      (v->NbIso ? v->NbIso : 1));
+      if(horizontal){
+	glVertex2d(xmin + i * box, ymin + height);
+	glVertex2d(xmin + i * box, ymin);
+      }
+      else{
+	glVertex2d(xmin, ymin + i * box);
+	glVertex2d(xmin + width, ymin + i * box);
+      }
+      PaletteContinuousLinear(v, ValMin, ValMax,
+			      ValMin + (i + 1) * (ValMax - ValMin) / 
+			      (v->NbIso ? v->NbIso : 1));
+      if(horizontal){
+	glVertex2d(xmin + (i + 1) * box, ymin);
+	glVertex2d(xmin + (i + 1) * box, ymin + height);
+      }
+      else{
+	glVertex2d(xmin + width, ymin + (i + 1) * box);
+	glVertex2d(xmin, ymin + (i + 1) * box);
+      }
+      glEnd();
+    }
+    else {
+      PaletteDiscrete(v, v->NbIso, i);
+      glBegin(GL_LINES);
+      if(horizontal){
+	glVertex2d(xmin + i * box + 0.5 * box, ymin);
+	glVertex2d(xmin + i * box + 0.5 * box, ymin + height);
+      }
+      else{
+	glVertex2d(xmin, ymin + i * box + 0.5 * box);
+	glVertex2d(xmin + width, ymin + i * box + 0.5 * box);
+      }
+      glEnd();
+    }
+  }
+
+  // valuescale
+
+  char label[1024];
+  int nbv;
+  double cv_box;
+  if(horizontal){
+    sprintf(label, v->Format, -M_PI/1.e4);
+    double estim = gl_width(label);
+    nbv = (width/estim > v->NbIso) ? v->NbIso : ((width/estim > 2.) ? -2 : -1);
+    cv_box = width / nbv;
+  }
+  else{
+    nbv = (height/font_h > v->NbIso) ? v->NbIso : ((height/font_h > 3.) ? -2 : -1);
+    cv_box = height / nbv;
+  }
+
+  glColor4ubv((GLubyte *) & CTX.color.text);
+
+  if(nbv < 0) { // only min and max (+ possibly mid value) if not enough room
+    if(v->IntervalsType == DRAW_POST_DISCRETE ||
+       v->IntervalsType == DRAW_POST_CONTINUOUS) {
+      sprintf(label, v->Format, ValMin);
+      if(horizontal){
+	glRasterPos2d(xmin, ymin + height + tic);
+	Draw_String_Center(label);
+      }
+      else{
+	glRasterPos2d(xmin + width + tic, ymin - font_a / 3.);
+	Draw_String(label);
+      }
+      sprintf(label, v->Format, ValMax);
+      if(horizontal){
+	glRasterPos2d(xmin + width, ymin + height + tic);
+	Draw_String_Center(label);
+      }
+      else{
+	glRasterPos2d(xmin + width + tic, ymin + height - font_a / 3.);
+	Draw_String(label);
+      }
+    }
+    else {
+      sprintf(label, v->Format, ValMin);
+      if(horizontal){
+	glRasterPos2d(xmin + (box / 2), ymin + height + tic);
+	Draw_String_Center(label);
+      }
+      else{
+	glRasterPos2d(xmin + width + tic, ymin + (box / 2) - font_a / 3.);
+	Draw_String(label);
+      }
+      sprintf(label, v->Format, ValMax);
+      if(horizontal){
+	glRasterPos2d(xmin + width - (box / 2), ymin + height + tic);
+	Draw_String_Center(label);
+      }
+      else{
+	glRasterPos2d(xmin + width + tic, ymin + height - (box / 2) - font_a / 3.);
+	Draw_String(label);
+      }
+    }
+    if(nbv == -2){
+      double Val = v->GVFI(ValMin, ValMax, v->NbIso, v->NbIso/2);
+      sprintf(label, v->Format, Val);
+      if(horizontal){
+	glRasterPos2d(xmin + width/2., ymin + height + tic);
+	Draw_String_Center(label);
+      }
+      else{
+	glRasterPos2d(xmin + width + tic, ymin + height/2 - font_a / 3.);
+	Draw_String(label);
+      }
+    }
+  }
+  else {
+    if(v->IntervalsType == DRAW_POST_DISCRETE ||
+       v->IntervalsType == DRAW_POST_CONTINUOUS) {
+      for(int i = 0; i < nbv + 1; i++) {
+        double Val = v->GVFI(ValMin, ValMax, nbv + 1, i);
+        sprintf(label, v->Format, Val);
+	if(horizontal){
+	  glRasterPos2d(xmin + i * cv_box, ymin + height + tic);
+	  Draw_String_Center(label);
+	}
+	else{
+	  glRasterPos2d(xmin + width + tic, ymin + i * cv_box - font_a / 3.);
+	  Draw_String(label);
+	}
+      }
+    }
+    else {
+      for(int i = 0; i < nbv; i++) {
+        double Val = v->GVFI(ValMin, ValMax, nbv, i);
+        sprintf(label, v->Format, Val);
+	if(horizontal){
+	  glRasterPos2d(xmin + (2 * i + 1) * (cv_box / 2), ymin + height + tic);
+	  Draw_String_Center(label);
+	}
+	else{
+	  glRasterPos2d(xmin + width + tic, ymin + (2 * i + 1) * (cv_box / 2) - font_a / 3.);
+	  Draw_String(label);
+	}
+      }
+    }
+  }
+
+  // the label
+
+  if((v->ShowTime == 1 && List_Nbr(v->Time) > 1) ||
+     (v->ShowTime == 2 && List_Nbr(v->Time) > 0)){
+    char tmp[256];
+    sprintf(tmp, v->Format, *(double *)List_Pointer(v->Time, v->TimeStep));
+    sprintf(label, "%s (%s)", v->Name, tmp);
+  }
+  else if((v->ShowTime == 3 && List_Nbr(v->Time) > 1) ||
+	  (v->ShowTime == 4 && List_Nbr(v->Time) > 0)){
+    sprintf(label, "%s (%d)", v->Name, v->TimeStep);
+  }
+  else
+    sprintf(label, "%s", v->Name);
+
+  if(horizontal){
+    glRasterPos2d(xmin + width / 2., ymin + height + tic + 1.4*font_h);
+    Draw_String_Center(label);
+  }
+  else{
+    glRasterPos2d(xmin, ymin - 2 * font_h);
+    Draw_String(label);
+  }
+}
+
+void Draw_Scales_Old(void)
+{
+  static List_T *todraw = NULL;
+
+  if(!CTX.post.list)
+    return;
+
+  // scales to draw?
+
+  if(!todraw)
+    todraw = List_Create(5, 5, sizeof(Post_View *));
+  else
+    List_Reset(todraw);
+
+  for(int i = 0; i < List_Nbr(CTX.post.list); i++) {
+    Post_View *v = *(Post_View **) List_Pointer(CTX.post.list, i);
+    if(v->Visible && !v->Dirty && v->ShowScale &&
+       v->Type == DRAW_POST_3D && !v->TextOnly)
+      List_Add(todraw, &v);
+  }
+
+  if(!List_Nbr(todraw)) {
+    return;
+  }
+
+  const double tic = 10., bar_size = 16.;
+  double width = 0., width_prev = 0., width_total = 0.;
+
+  gl_font(CTX.gl_font_enum, CTX.gl_fontsize);
+  char label[1024];
+  double largest_number = 0.;
+  for(int i = 0; i < List_Nbr(todraw); i++) {
+    Post_View *v = *(Post_View **) List_Pointer(todraw, i);
+    sprintf(label, v->Format, -M_PI/1.e4);
+    if(largest_number < gl_width(label))
+      largest_number = gl_width(label);
+  }
+
+  for(int i = 0; i < List_Nbr(todraw); i++) {
+    Post_View *v = *(Post_View **) List_Pointer(todraw, i);
+    
+    if(!v->AutoPosition) {
+      double x = v->Position[0], y = v->Position[1];
+      int center = Fix2DCoordinates(&x, &y);
+      draw_scale(v, 
+		 x - ((center & 1) ? v->Size[0]/2. : 0.), 
+		 y - v->Size[1] + ((center & 2) ? v->Size[1]/2. : 0.),
+		 v->Size[0], v->Size[1], tic, CTX.post.horizontal_scales);
+    }
+    else{
+      if(CTX.post.horizontal_scales){
+	double ysep = 20.;
+	if(List_Nbr(todraw) == 1){
+	  double ww = (CTX.viewport[2] - CTX.viewport[0]) / 2.;
+	  draw_scale(v, 
+		     (CTX.viewport[2] - CTX.viewport[0]) / 2. - ww / 2,
+		     CTX.viewport[1] + ysep, 
+		     ww, bar_size, 
+		     tic, 1);
+	}
+	else{
+	  double xsep = largest_number/4. + (CTX.viewport[2] - CTX.viewport[0])/10.;
+	  double ww = (CTX.viewport[2] - CTX.viewport[0] - 4 * xsep) / 2.;
+	  if(ww < 20) ww = 20;
+	  draw_scale(v, 
+		     (CTX.viewport[2] - CTX.viewport[0])/2. - (i%2 ? -xsep/1.5 : ww+xsep/1.5),
+		     CTX.viewport[1] + ysep + (i/2) * (bar_size+tic+2*gl_height()+ysep), 
+		     ww, bar_size, 
+		     tic, 1);
+	}
+      }
+      else{
+	double xsep = 20.;
+	double dy = 2. * gl_height();
+	if(List_Nbr(todraw) == 1){
+	  double ysep = (CTX.viewport[3] - CTX.viewport[1]) / 6.;
+	  double hh = CTX.viewport[3] - CTX.viewport[1] - 2 * ysep - dy;
+	  draw_scale(v, 
+		     CTX.viewport[0] + xsep, 
+		     CTX.viewport[1] + ysep + dy, 
+		     bar_size, hh, 
+		     tic, 0);
+	}
+	else{
+	  double ysep = (CTX.viewport[3] - CTX.viewport[1]) / 15.;
+	  double hh = (CTX.viewport[3] - CTX.viewport[1] - 3 * ysep - 2.5 * dy) / 2.;
+	  draw_scale(v, 
+		     CTX.viewport[0] + xsep + width_total + (i / 2) * xsep,
+		     CTX.viewport[1] + ysep + dy + (1 - i % 2) * (hh + 1.5 * dy + ysep),
+		     bar_size, hh,
+		     tic, 0);
+	}
+	// compute width
+	width_prev = width;
+	sprintf(label, v->Format, -M_PI/1.e4);
+	width = bar_size + tic + gl_width(label);
+	if(List_Nbr(v->Time) > 1 && v->ShowTime){
+	  char tmp[256];
+	  sprintf(tmp, v->Format, *(double *)List_Pointer(v->Time, v->TimeStep));
+	  sprintf(label, "%s (%s)", v->Name, tmp);
+	}
+	else
+	  sprintf(label, "%s", v->Name);
+	if(gl_width(label) > width)
+	  width = gl_width(label);
+	if(i % 2)
+	  width_total += DMAX(bar_size + width, bar_size + width_prev);
+      }
+    }
+  }
+}
+