From 0d7910e1bd0ac9bdb16cd5921e568ee43851bafc Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Sat, 25 Nov 2000 15:27:20 +0000
Subject: [PATCH] *** empty log message ***

---
 Adapt/Makefile            |    1 +
 Box/Box.cpp               |   29 +-
 Box/Makefile              |    1 +
 Common/Context.cpp        |    4 +-
 Common/Context.h          |   54 +-
 Common/Makefile           |    1 +
 Common/Static.h           |   17 +-
 Common/Views.cpp          |  633 +++----
 Common/Views.h            |  104 +-
 DataStr/Makefile          |    1 +
 Geo/Makefile              |    1 +
 Geo/Print_Geo.cpp         |   28 +-
 Graphics/Draw.cpp         |   44 +-
 Graphics/Draw.h           |   21 +-
 Graphics/Geom.cpp         |   16 +-
 Graphics/Makefile         |    4 +-
 Graphics/Post.cpp         |   51 +-
 Graphics/PostLine.cpp     |  132 --
 Graphics/PostPoint.cpp    |   86 -
 Graphics/PostSimplex.cpp  |  421 ++++-
 Graphics/PostTriangle.cpp |  220 ---
 Makefile                  |    3 +-
 Mesh/1D_Mesh.cpp          |   90 +-
 Mesh/2D_DivAndConq.cpp    |    4 +-
 Mesh/2D_Mesh.cpp          |   10 +-
 Mesh/2D_Mesh_Aniso.cpp    |   11 +-
 Mesh/3D_BGMesh.cpp        |   43 +-
 Mesh/3D_Mesh.cpp          |    7 +-
 Mesh/Generator.cpp        |   32 +-
 Mesh/Makefile             |    1 +
 Mesh/Mesh.h               |    5 +-
 Mesh/Print_Mesh.cpp       |   28 +-
 Mesh/Simplex.cpp          |    7 +-
 Mesh/Simplex.h            |    7 +-
 Mesh/Vertex.cpp           |   13 +-
 Mesh/Vertex.h             |    6 +-
 Parser/Gmsh.l             |    8 +-
 Parser/Gmsh.tab.cpp       | 3411 ++++++++++++++++++++-----------------
 Parser/Gmsh.tab.cpp.h     |  278 +--
 Parser/Gmsh.y             |  423 +++--
 Parser/Gmsh.yy.cpp        |   10 +-
 Parser/Makefile           |    1 +
 Unix/CbContext.cpp        |   45 +-
 Unix/CbGeneral.cpp        |    4 +-
 Unix/CbGeom.cpp           |    6 +-
 Unix/CbInput.cpp          |   28 +-
 Unix/CbPost.cpp           |   82 +-
 Unix/Help.h               |    4 +-
 Unix/Main.cpp             |   56 +-
 Unix/Makefile             |    1 +
 Unix/Register.cpp         |    3 +-
 Unix/Register.h           |    3 +-
 Unix/Widgets.cpp          |   11 +-
 Unix/Widgets.h            |    3 +-
 Unix/XRessources.h        |    4 +-
 archives/Makefile         |    1 +
 demos/view01.pos          |   10 -
 doc/Makefile              |    1 +
 lib/Makefile              |    1 +
 utils/Makefile            |    3 +-
 utils/addId               |   20 +
 61 files changed, 3462 insertions(+), 3091 deletions(-)
 delete mode 100644 Graphics/PostLine.cpp
 delete mode 100644 Graphics/PostPoint.cpp
 delete mode 100644 Graphics/PostTriangle.cpp
 create mode 100644 utils/addId

diff --git a/Adapt/Makefile b/Adapt/Makefile
index 9841b0972c..4cc763a74d 100644
--- a/Adapt/Makefile
+++ b/Adapt/Makefile
@@ -1,3 +1,4 @@
+# $Id: Makefile,v 1.4 2000-11-25 15:26:10 geuzaine Exp $
 #
 # Makefile for "libAdapt.a"
 #
diff --git a/Box/Box.cpp b/Box/Box.cpp
index 7b979fedd2..c48e133151 100644
--- a/Box/Box.cpp
+++ b/Box/Box.cpp
@@ -1,4 +1,4 @@
-/* $Id: Box.cpp,v 1.7 2000-11-24 08:11:03 geuzaine Exp $ */
+/* $Id: Box.cpp,v 1.8 2000-11-25 15:26:10 geuzaine Exp $ */
 
 #include <signal.h>
 
@@ -31,14 +31,16 @@ char gmsh_email[]     = "E-Mail           : " GMSH_EMAIL ;
 char gmsh_url[]       = "URL              : " GMSH_URL ;
 char gmsh_help[]      = 
   "Usage: %s [options] [files]\n"
+  "Geometry options:\n"
+  "  -0                    output flattened parsed geometry and exit\n"
   "Mesh options:\n"
-  "  -0                    parse input and exit\n"
-  "  -1, -2, -3            batch 1-, 2- or 3-dimensional mesh\n"
-  "  -smooth int           mesh smoothing (default: 3)\n"
-  "  -degree int           mesh degree (default: 1)\n"
-  "  -format msh|unv|gref  mesh format (default: msh)\n"
-  "  -algo iso|aniso       mesh algorithm (default: iso)\n"
-  "  -scale float          scaling factor (default: 1.0)\n"
+  "  -1, -2, -3            perform batch 1D, 2D and 3D mesh generation\n"
+  "  -smooth int           set mesh smoothing (default: 3)\n"
+  "  -degree int           set mesh degree (default: 1)\n"
+  "  -format msh|unv|gref  set output mesh format (default: msh)\n"
+  "  -algo iso|aniso       select mesh algorithm (default: iso)\n"
+  "  -scale float          set global scaling factor (default: 1.0)\n"
+  "  -clscale float        set characteristic length scaling factor (default: 1.0)\n"
   "  -bgm file             load backround mesh from file\n"
   "Other options:\n"	  
   "  -v                    print debug information\n"
@@ -186,7 +188,16 @@ void Get_Options (int argc, char *argv[], int *nbfiles) {
       }
       else if(!strcmp(argv[i]+1, "scale")){
 	i++;
-	GLOBALSCALINGFACTOR = atof(argv[i]); i++;
+	CTX.mesh.scaling_factor = atof(argv[i]); i++;
+      }
+      else if(!strcmp(argv[i]+1, "clscale")){
+	i++;
+	CTX.mesh.lc_factor = atof(argv[i]); i++;
+	if(CTX.mesh.lc_factor <= 0.0){
+	  fprintf(stderr, ERROR_STR 
+		  "Characteristic Length Factor Must be > 0\n");
+	  exit(1);
+	}
       }
       else if(!strcmp(argv[i]+1, "degree")){  
 	i++;
diff --git a/Box/Makefile b/Box/Makefile
index 4d7d25b51d..1bdf9b01c6 100644
--- a/Box/Makefile
+++ b/Box/Makefile
@@ -1,3 +1,4 @@
+# $Id: Makefile,v 1.2 2000-11-25 15:26:10 geuzaine Exp $
 #
 # Makefile for ".a"
 #
diff --git a/Common/Context.cpp b/Common/Context.cpp
index f10f7231bf..0d9d276dc7 100644
--- a/Common/Context.cpp
+++ b/Common/Context.cpp
@@ -1,4 +1,4 @@
-/* $Id: Context.cpp,v 1.4 2000-11-23 16:51:28 geuzaine Exp $ */
+/* $Id: Context.cpp,v 1.5 2000-11-25 15:26:10 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "Const.h"
@@ -221,6 +221,8 @@ void InitContext(Context_T *ctx){
   ctx->mesh.point_insertion   = CENTER_CIRCCIRC;
   ctx->mesh.speed_max         = 0 ;
   ctx->mesh.degree            = 1 ;
+  ctx->mesh.scaling_factor    = 1.0 ;
+  ctx->mesh.lc_factor         = 1.0 ;
   ctx->mesh.limit_gamma       = 0.0 ;
   ctx->mesh.limit_eta         = 0.0 ;
   ctx->mesh.limit_rho         = 0.0 ;
diff --git a/Common/Context.h b/Common/Context.h
index ec7647f741..f26fe531f5 100644
--- a/Common/Context.h
+++ b/Common/Context.h
@@ -1,4 +1,4 @@
-/* $Id: Context.h,v 1.4 2000-11-23 16:51:28 geuzaine Exp $ */
+/* $Id: Context.h,v 1.5 2000-11-25 15:26:10 geuzaine Exp $ */
 #ifndef _CONTEXT_H_
 #define _CONTEXT_H_
 
@@ -50,30 +50,31 @@ typedef struct{
 
 typedef struct {
 
-  int interactive;		/* 0=full gfx; -1=just parse; 1,2,3=batch mesh */
-  int verbosity;                /* 0=silent -> 3=debug */
-  int expose;                   /* 1 if everything is ready to expose and draw */
+  int interactive;	      /* 0=full gfx; -1=just parse; 1,2,3=batch mesh */
+  int verbosity;              /* 0=silent -> 3=debug */
+  int expose;                 /* 1 if everything is ready to expose and draw */
 
-  double r[3], t[3], s[3];	/* current rotation, translation and scale */
-  int rlock[3], tlock[3], slock[3];	/* locks for r, t and s */
+  double r[3], t[3], s[3];    /* current rotation, translation and scale */
+  int rlock[3], tlock[3], slock[3];
+                              /* locks for r, t and s */
   
-  double min[3];		/* x, y and z min for the current geometry */
-  double max[3];		/* x, y and z max for the current geometry */
-  double range[3];		/* maximum range in the three directions */
+  double min[3];	      /* x, y and z min for the current geometry */
+  double max[3];              /* x, y and z max for the current geometry */
+  double range[3];	      /* maximum range in the three directions */
   
-  int db;			/* double buffer? */
-  int overlay;	   	        /* overlay graphic window? */
-  int stream;			/* output stream: TO_SCREEN or TO_FILE */
-  int ortho;			/* orthogonal projection? */
-  int fast;			/* inhibit mesh and postpro drawing when changing r,s,t */
-  int command_win;		/* command window? */
-  int display_lists;		/* use display lists? */
-  int font_base;		/* display list indice for the font */
-  int axes, little_axes;	/* draw axes? */
-  int threads, threads_lock;	/* threads?, lock (should be a mutex...) */
-  int alpha;                    /* enable alpha blending */
-  int flash;                    /* authorize colormap flashing (beek) */
-  int same_visual;              /* force same visual for GUI and Graphics */
+  int db;		      /* double buffer? */
+  int overlay;	   	      /* overlay graphic window? */
+  int stream;		      /* output stream: TO_SCREEN or TO_FILE */
+  int ortho;		      /* orthogonal projection? */
+  int fast;		      /* inhibit mesh and postpro drawing when changing r,s,t */
+  int command_win;	      /* command window? */
+  int display_lists;	      /* use display lists? */
+  int font_base;	      /* display list indice for the font */
+  int axes, little_axes;      /* draw axes? */
+  int threads, threads_lock;  /* threads?, lock (should be a mutex...) */
+  int alpha;                  /* enable alpha blending */
+  int flash;                  /* authorize colormap flashing (beek) */
+  int same_visual;            /* force same visual for GUI and Graphics */
   
   char *font_string;          /* main font */
   char *colorbar_font_string; /* font for colorbar */
@@ -82,12 +83,12 @@ typedef struct {
   int viewport[4];
   float light0[4];            /* light source position */
   float shine;                /* specular value */
-  int render_mode;		/* RENDER, SELECT, FEEDBACK */
+  int render_mode;	      /* RENDER, SELECT, FEEDBACK */
 
-  double pixel_equiv_x, pixel_equiv_y ; /* approximative equivalent model lenght of a pixel */
+  double pixel_equiv_x, pixel_equiv_y ; 
+                              /* approximative equivalent model lenght of a pixel */
   
-  /* all colors except postpro colormaps */
-  rgbacolors color;
+  rgbacolors color;           /* all colors except postpro colormaps */
   
   /* geometry options */
   struct{
@@ -107,6 +108,7 @@ typedef struct {
     int points, lines, surfaces, volumes;
     int points_num, lines_num, surfaces_num, volumes_num;
     double limit_gamma, limit_eta, limit_rho;
+    double scaling_factor, lc_factor;
     int dual, interactive;
     int hidden, shade;
     int format, nb_smoothing, algo, degree;
diff --git a/Common/Makefile b/Common/Makefile
index ce838c6fed..9c6376e51d 100644
--- a/Common/Makefile
+++ b/Common/Makefile
@@ -1,3 +1,4 @@
+# $Id: Makefile,v 1.4 2000-11-25 15:26:10 geuzaine Exp $
 #
 # Makefile for "libCommon.a"
 #
diff --git a/Common/Static.h b/Common/Static.h
index bf0bac479d..bfa6cc702b 100644
--- a/Common/Static.h
+++ b/Common/Static.h
@@ -1,28 +1,23 @@
-/* $Id: Static.h,v 1.4 2000-11-23 16:51:28 geuzaine Exp $ */
+/* $Id: Static.h,v 1.5 2000-11-25 15:26:10 geuzaine Exp $ */
 #ifndef _STATIC_H_
 #define _STATIC_H_
 
 /* This file defines the static structures for Gmsh. It should be
    included only once, in your 'main' file */
 
-char TheFileName[NAME_STR_L], TheBaseFileName[NAME_STR_L];
-char yyname[NAME_STR_L];
-int  yyerrorstate;
+char  TheFileName[NAME_STR_L], TheBaseFileName[NAME_STR_L];
+char  yyname[NAME_STR_L];
+int   yyerrorstate;
 
 Context_T   CTX ;
 Mesh        M, *THEM, *LOCAL;
-int         CurrentNodeNumber, CurrentSimplexNumber;
+int         TYPBGMESH=WITHPOINTS,CurrentNodeNumber, CurrentSimplexNumber;
 Tree_T     *EntitesVisibles = NULL;
-List_T     *Post_ViewList = NULL;
 
 double      LC, MiddleLC ;
 int         LC_ORDER;
-double      FACTEUR_MULTIPLICATIF=1.0, GLOBALSCALINGFACTOR=1.0;
 
-/* Some garbage */
-
-int  TYPBGMESH=WITHPOINTS;
-int  FLAG_OLD_CIRCLE = 0 ; /* Pour David : cercles > Pi */
+int         FLAG_OLD_CIRCLE = 0 ; /* Pour David : cercles > Pi */
 
 
 #endif
diff --git a/Common/Views.cpp b/Common/Views.cpp
index 425b0679ad..12cdb4a6f7 100644
--- a/Common/Views.cpp
+++ b/Common/Views.cpp
@@ -1,38 +1,63 @@
-/* $Id: Views.cpp,v 1.2 2000-11-23 14:11:28 geuzaine Exp $ */
+/* $Id: Views.cpp,v 1.3 2000-11-25 15:26:10 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "Views.h"
 #include "Context.h"
 #include "ColorTable.h"
 
-extern Context_T   CTX ;
+List_T  *Post_ViewList = NULL;
+Post_View  *ActualView;
 
-extern List_T     *Post_ViewList;
+extern Context_T   CTX ;
 extern double      LC;
 
-static Post_View  *ActualView;
 static int         ActualViewNum=0;
 
 /* ------------------------------------------------------------------------ */
 /*  V i e w s                                                               */
 /* ------------------------------------------------------------------------ */
 
-void AddView(int , char *, int);
+int fcmpPostViewNum(const void *v1, const void *v2){
+  return (((Post_View *)v1)->Num - ((Post_View *)v2)->Num);
+}
+
+int fcmpPostViewDuplicateOf(const void *v1, const void *v2){
+  return (((Post_View *)v1)->DuplicateOf - ((Post_View *)v2)->DuplicateOf);
+}
 
 void BeginView(int allocate){
   ActualView = (Post_View*)Malloc(sizeof(Post_View));
-  ActualView->Num = ++ActualViewNum;
-  ActualView->Changed = 1;
+
+  ActualView->NbSP = ActualView->NbVP = ActualView->NbTP = 0;
+  ActualView->NbSL = ActualView->NbVL = ActualView->NbTL = 0;
+  ActualView->NbST = ActualView->NbVT = ActualView->NbTT = 0;
+  ActualView->NbSS = ActualView->NbVS = ActualView->NbTS = 0;
+
   if(allocate){
-    ActualView->Allocated = 1;
-    ActualView->Simplices = List_Create(100,100,sizeof(Post_Simplex));
-    ActualView->Triangles = List_Create(100,100,sizeof(Post_Triangle));
-    ActualView->Lines = List_Create(100,100,sizeof(Post_Line));
-    ActualView->Points = List_Create(100,100,sizeof(Post_Point));
-  }
-  else{
-    ActualView->Allocated = 0;
+    ActualView->SP = List_Create(100,1000,sizeof(double));
+    ActualView->VP = List_Create(100,1000,sizeof(double));
+    ActualView->TP = List_Create(100,1000,sizeof(double));
+    ActualView->Points = List_Create(100,1000,sizeof(Post_Simplex));
+    
+    ActualView->SL = List_Create(100,1000,sizeof(double));
+    ActualView->VL = List_Create(100,1000,sizeof(double));
+    ActualView->TL = List_Create(100,1000,sizeof(double));
+    ActualView->Lines = List_Create(100,1000,sizeof(Post_Simplex));
+    
+    ActualView->ST = List_Create(100,1000,sizeof(double));
+    ActualView->VT = List_Create(100,1000,sizeof(double));
+    ActualView->TT = List_Create(100,1000,sizeof(double));
+    ActualView->Triangles = List_Create(100,1000,sizeof(Post_Simplex));
+    
+    ActualView->SS = List_Create(100,1000,sizeof(double));
+    ActualView->VS = List_Create(100,1000,sizeof(double));
+    ActualView->TS = List_Create(100,1000,sizeof(double));
+    ActualView->Tetrahedra = List_Create(100,1000,sizeof(Post_Simplex));
   }
+
+  ActualView->Changed = 1;
+  ActualView->Links = 0;
+  ActualView->DuplicateOf = 0;
   ActualView->NbIso = CTX.post.initial_nbiso;
   ActualView->IntervalsType = CTX.post.initial_intervals;
   ActualView->Light = 0;
@@ -60,430 +85,268 @@ void BeginView(int allocate){
   color_table_recompute(&ActualView->CT, 1, 1);
 }
 
-void EndView(char *Name, double XOffset, double YOffset, double ZOffset){
+void EndView(int AddInUI, int Number, char *FileName, char *Name, 
+	     double XOffset, double YOffset, double ZOffset){
+  int i, nb;
+  extern void AddViewInUI(int , char *, int);
+
+  // Points
+
+  if(ActualView->NbSP){
+    nb = List_Nbr(ActualView->SP) / ActualView->NbSP ;
+    for(i = 0 ; i < List_Nbr(ActualView->SP) ; i+=nb)
+      AddView_ScalarSimplex(0, (double*)List_Pointer(ActualView->SP,i),
+			    nb-3, (double*)List_Pointer(ActualView->SP,i+3));
+  }
+  if(ActualView->NbVP){
+    nb = List_Nbr(ActualView->VP) / ActualView->NbVP ;
+    for(i = 0 ; i < List_Nbr(ActualView->VP) ; i+=nb)
+      AddView_VectorSimplex(0, (double*)List_Pointer(ActualView->VP,i),
+			    nb-3, (double*)List_Pointer(ActualView->VP,i+3));
+  }
+  if(ActualView->NbTP){
+    nb = List_Nbr(ActualView->TP) / ActualView->NbTP ;
+    for(i = 0 ; i < List_Nbr(ActualView->TP) ; i+=nb)
+      AddView_TensorSimplex(0, (double*)List_Pointer(ActualView->TP,i),
+			    nb-3, (double*)List_Pointer(ActualView->TP,i+3));
+  }
+
+  // Lines
+
+  if(ActualView->NbSL){
+    nb = List_Nbr(ActualView->SL) / ActualView->NbSL ;
+    for(i = 0 ; i < List_Nbr(ActualView->SL) ; i+=nb)
+      AddView_ScalarSimplex(1, (double*)List_Pointer(ActualView->SL,i),
+			    nb-6, (double*)List_Pointer(ActualView->SL,i+6));
+  }
+  if(ActualView->NbVL){
+    nb = List_Nbr(ActualView->VL) / ActualView->NbVL ;
+    for(i = 0 ; i < List_Nbr(ActualView->VL) ; i+=nb)
+      AddView_VectorSimplex(1, (double*)List_Pointer(ActualView->VL,i),
+			    nb-6, (double*)List_Pointer(ActualView->VL,i+6));
+  }
+  if(ActualView->NbTL){
+    nb = List_Nbr(ActualView->TL) / ActualView->NbTL ;
+    for(i = 0 ; i < List_Nbr(ActualView->TL) ; i+=nb)
+      AddView_TensorSimplex(1, (double*)List_Pointer(ActualView->TL,i),
+			    nb-6, (double*)List_Pointer(ActualView->TL,i+6));
+  }
+
+  // Triangles
+
+  if(ActualView->NbST){
+    nb = List_Nbr(ActualView->ST) / ActualView->NbST ;
+    for(i = 0 ; i < List_Nbr(ActualView->ST) ; i+=nb)
+      AddView_ScalarSimplex(2, (double*)List_Pointer(ActualView->ST,i),
+			    nb-9, (double*)List_Pointer(ActualView->ST,i+9));
+  }
+  if(ActualView->NbVT){
+    nb = List_Nbr(ActualView->VT) / ActualView->NbVT ;
+    for(i = 0 ; i < List_Nbr(ActualView->VT) ; i+=nb)
+      AddView_VectorSimplex(2, (double*)List_Pointer(ActualView->VT,i),
+			    nb-9, (double*)List_Pointer(ActualView->VT,i+9));
+  }
+  if(ActualView->NbTT){
+    nb = List_Nbr(ActualView->TT) / ActualView->NbTT ;
+    for(i = 0 ; i < List_Nbr(ActualView->TT) ; i+=nb)
+      AddView_TensorSimplex(2, (double*)List_Pointer(ActualView->TT,i),
+			    nb-9, (double*)List_Pointer(ActualView->TT,i+9));
+  }
+
+  // Tetrahedra
+
+  if(ActualView->NbSS){
+    nb = List_Nbr(ActualView->SS) / ActualView->NbSS ;
+    for(i = 0 ; i < List_Nbr(ActualView->SS) ; i+=nb)
+      AddView_ScalarSimplex(3, (double*)List_Pointer(ActualView->SS,i),
+			    nb-12, (double*)List_Pointer(ActualView->SS,i+12));
+  }
+  if(ActualView->NbVS){
+    nb = List_Nbr(ActualView->VS) / ActualView->NbVS ;
+    for(i = 0 ; i < List_Nbr(ActualView->VS) ; i+=nb)
+      AddView_VectorSimplex(3, (double*)List_Pointer(ActualView->VS,i),
+			    nb-12, (double*)List_Pointer(ActualView->VS,i+12));
+  }
+  if(ActualView->NbTS){
+    nb = List_Nbr(ActualView->TS) / ActualView->NbTS ;
+    for(i = 0 ; i < List_Nbr(ActualView->TS) ; i+=nb)
+      AddView_TensorSimplex(3, (double*)List_Pointer(ActualView->TS,i),
+			    nb-12, (double*)List_Pointer(ActualView->TS,i+12));
+  }
+
+  strcpy(ActualView->FileName,FileName);
   strcpy(ActualView->Name,Name);
   strcpy(ActualView->Format, "%.3e");
+  if(ActualView->Min > ActualView->Max)
+    ActualView->Min = ActualView->Max = 0.0 ;
   ActualView->CustomMin = ActualView->Min;
   ActualView->CustomMax = ActualView->Max;
-
   ActualView->Offset[0] = XOffset*(CTX.range[0]?CTX.range[0]:LC)*1.e-3;
   ActualView->Offset[1] = YOffset*(CTX.range[1]?CTX.range[1]:LC)*1.e-3;
   ActualView->Offset[2] = ZOffset*(CTX.range[2]?CTX.range[2]:LC)*1.e-3;
 
-  /* j'en alloue directement le max pour eviter les problemes avec 
-   * CurrentView: cf. rem dans cb_post.c 
-   */
+  /* j'en alloue directement le max pour eviter les problemes de
+     reallocation (avec CurrentView) */
   if(!Post_ViewList) 
-    Post_ViewList = List_Create(20,1,sizeof(Post_View));
+    Post_ViewList = List_Create(100,1,sizeof(Post_View));
+
+  if(!Number){
+    ActualView->Num = ++ActualViewNum;    
+    List_Add(Post_ViewList,ActualView);
+    if(AddInUI)
+      AddViewInUI(List_Nbr(Post_ViewList), ActualView->Name, ActualView->Num);
+  }
+  else{
+    ActualView->Num = Number;    
+    List_Replace(Post_ViewList,ActualView,fcmpPostViewNum);
+  }
 
-  List_Add(Post_ViewList,ActualView);
-  
-  AddView(List_Nbr(Post_ViewList), ActualView->Name, 1);
   ActualView = NULL;
 }
 
-/* ------------------------------------------------------------------------ */
-/*  S i m p l e x                                                           */
-/* ------------------------------------------------------------------------ */
-
-void AddView_ScalarSimplex(double x0,double y0,double z0,
-			   double x1,double y1,double z1,
-			   double x2,double y2,double z2,
-			   double x3,double y3,double z3,
-			   List_T *v){
-  Post_Simplex S;
-  int i,N ;
-  
-  S.Type = DRAW_POST_SCALAR;
-  S.X[0] = x0; S.X[1] = x1; S.X[2] = x2; S.X[3] = x3;
-  S.Y[0] = y0; S.Y[1] = y1; S.Y[2] = y2; S.Y[3] = y3; 
-  S.Z[0] = z0; S.Z[1] = z1; S.Z[2] = z2; S.Z[3] = z3; 
-
-  N = List_Nbr(v);
-  S.V = (double*)Malloc(N*sizeof(double));
-  
-  for(i=0 ; i<N ; i+=4){
-    List_Read(v,i,  &S.V[i]) ;
-    List_Read(v,i+1,&S.V[i+1]) ;
-    List_Read(v,i+2,&S.V[i+2]) ;
-    List_Read(v,i+3,&S.V[i+3]) ;
-
-    if(!List_Nbr(ActualView->Points) && 
-       !List_Nbr(ActualView->Lines) && 
-       !List_Nbr(ActualView->Triangles) &&
-       !List_Nbr(ActualView->Simplices)){
-      ActualView->Min = DMIN(DMIN(DMIN(S.V[i],S.V[i+1]),S.V[i+2]),S.V[i+3]);
-      ActualView->Max = DMAX(DMAX(DMAX(S.V[i],S.V[i+1]),S.V[i+2]),S.V[i+3]);
-      ActualView->NbTimeStep = N/4;
+void FreeView(Post_View *v){
+  Post_View vv,*v2;
+  int free = 1;
+
+  if(v->DuplicateOf){
+    vv.Num = v->DuplicateOf ;
+    Msg(DEBUG, "This View is a Duplicata");
+    if(!(v2 = (Post_View*)List_PQuery(Post_ViewList, &vv, fcmpPostViewNum))){
+      Msg(DEBUG, " ->The Original View is Gone");
+      if(!(v2 = (Post_View*)List_PQuery(Post_ViewList, v, fcmpPostViewDuplicateOf))){
+	Msg(DEBUG, " ->There are no other duplicata");
+	free = 1 ;
+      }
+      else{
+	free = 0 ;
+      }
     }
     else{
-      ActualView->Min = DMIN(DMIN(DMIN(DMIN(S.V[i],S.V[i+1]),S.V[i+2]),
-				  S.V[i+3]),ActualView->Min);
-      ActualView->Max = DMAX(DMAX(DMAX(DMAX(S.V[i],S.V[i+1]),S.V[i+2]),
-				  S.V[i+3]),ActualView->Max);
-      ActualView->NbTimeStep = IMIN(N/4,ActualView->NbTimeStep);
+      v2->Links--;
+      free = 0 ;
+      Msg(DEBUG, " ->The original still exists, so I dont't free anything now");
     }
   }
-  
-  List_Add(ActualView->Simplices,&S);
-}
 
-void AddView_VectorSimplex(double x0,double y0,double z0,
-			   double x1,double y1,double z1,
-			   double x2,double y2,double z2,
-			   double x3,double y3,double z3,
-			   List_T *v){
-  Post_Simplex S;
-  double l0,l1,l2,l3;
-  int i,N ;
-    
-  S.Type = DRAW_POST_VECTOR;
-  S.X[0] = x0; S.X[1] = x1; S.X[2] = x2; S.X[3] = x3;
-  S.Y[0] = y0; S.Y[1] = y1; S.Y[2] = y2; S.Y[3] = y3;
-  S.Z[0] = z0; S.Z[1] = z1; S.Z[2] = z2; S.Z[3] = z3;
+  if(v->Links)
+    Msg(DEBUG, " ->This view is linked: Cannot free");
 
-  N = List_Nbr(v);
-  S.V = (double*)Malloc(N*sizeof(double));
-  
-  for(i=0 ; i<N ; i+=12){
-    List_Read(v,i,  &S.V[i]);   List_Read(v,i+1,&S.V[i+1]);   List_Read(v,i+2,&S.V[i+2]);
-    List_Read(v,i+3,&S.V[i+3]); List_Read(v,i+4,&S.V[i+4]);   List_Read(v,i+5,&S.V[i+5]);
-    List_Read(v,i+6,&S.V[i+6]); List_Read(v,i+7,&S.V[i+7]);   List_Read(v,i+8,&S.V[i+8]);
-    List_Read(v,i+9,&S.V[i+9]); List_Read(v,i+10,&S.V[i+10]); List_Read(v,i+11,&S.V[i+11]);
-    
-    l0 = sqrt(S.V[i]  *S.V[i]  +S.V[i+1]*S.V[i+1]  +S.V[i+2]*S.V[i+2]);
-    l1 = sqrt(S.V[i+3]*S.V[i+3]+S.V[i+4]*S.V[i+4]  +S.V[i+5]*S.V[i+5]);
-    l2 = sqrt(S.V[i+6]*S.V[i+6]+S.V[i+7]*S.V[i+7]  +S.V[i+8]*S.V[i+8]);
-    l3 = sqrt(S.V[i+9]*S.V[i+9]+S.V[i+10]*S.V[i+10]+S.V[i+11]*S.V[i+11]);
-    if(!List_Nbr(ActualView->Points) && 
-       !List_Nbr(ActualView->Lines) && 
-       !List_Nbr(ActualView->Triangles) &&
-       !List_Nbr(ActualView->Simplices)){
-      ActualView->Min = DMIN(DMIN(DMIN(l0,l1),l2),l3);
-      ActualView->Max = DMAX(DMAX(DMAX(l0,l1),l2),l3);
-      ActualView->NbTimeStep = N/12;
-    }
-    else{
-      ActualView->Min = DMIN(DMIN(DMIN(DMIN(l0,l1),l2),l3),ActualView->Min);
-      ActualView->Max = DMAX(DMAX(DMAX(DMAX(l0,l1),l2),l3),ActualView->Max);
-      ActualView->NbTimeStep = IMIN(N/12,ActualView->NbTimeStep);
-    }
-  }
+  if(free && !v->Links){
+    Msg(DEBUG, " ->Freeing View");
 
-  ActualView->ScalarOnly = 0;
-  List_Add(ActualView->Simplices,&S);
-}
+    List_Delete(v->SP); List_Delete(v->VP); List_Delete(v->TP);
+    List_Delete(v->Points);
+
+    List_Delete(v->SL); List_Delete(v->VL); List_Delete(v->TL);
+    List_Delete(v->Lines);
+
+    List_Delete(v->ST); List_Delete(v->VT); List_Delete(v->TT);
+    List_Delete(v->Triangles);
+
+    List_Delete(v->SS); List_Delete(v->VS); List_Delete(v->TS);
+    List_Delete(v->Tetrahedra);   
+  }
 
-void AddView_TensorSimplex(double x0,double y0,double z0,
-			   double x1,double y1,double z1,
-			   double x2,double y2,double z2,
-			   double x3,double y3,double z3,
-			   List_T *v){
 }
 
 
 /* ------------------------------------------------------------------------ */
-/*  T r i a n g l e                                                         */
+/*  S c a l a r S i m p l e x                                               */
 /* ------------------------------------------------------------------------ */
 
-void AddView_ScalarTriangle(double x0,double y0,double z0,
-			    double x1,double y1,double z1,
-			    double x2,double y2,double z2,
-			    List_T *v){
-  Post_Triangle T;
-  int i,N ;
-  
-  T.Type = DRAW_POST_SCALAR;
-  T.X[0] = x0; T.X[1] = x1; T.X[2] = x2;
-  T.Y[0] = y0; T.Y[1] = y1; T.Y[2] = y2;
-  T.Z[0] = z0; T.Z[1] = z1; T.Z[2] = z2;
+void AddView_ScalarSimplex(int dim, double *coord, int N, double *v){
+  Post_Simplex S;
+  int i,nbnod;
 
-  N = List_Nbr(v);
-  T.V = (double*)Malloc(N*sizeof(double));
-  
-  for(i=0 ; i<N ; i+=3){
-    List_Read(v,i,  &T.V[i]) ;
-    List_Read(v,i+1,&T.V[i+1]) ;
-    List_Read(v,i+2,&T.V[i+2]) ;
-
-    if(!List_Nbr(ActualView->Points) && 
-       !List_Nbr(ActualView->Lines) && 
-       !List_Nbr(ActualView->Triangles) &&
-       !List_Nbr(ActualView->Simplices)){
-      ActualView->Min = DMIN(DMIN(T.V[i],T.V[i+1]),T.V[i+2]);
-      ActualView->Max = DMAX(DMAX(T.V[i],T.V[i+1]),T.V[i+2]);
-      ActualView->NbTimeStep = N/3;
-    }
-    else{
-      ActualView->Min = DMIN(DMIN(DMIN(T.V[i],T.V[i+1]),T.V[i+2]),ActualView->Min);
-      ActualView->Max = DMAX(DMAX(DMAX(T.V[i],T.V[i+1]),T.V[i+2]),ActualView->Max);
-      ActualView->NbTimeStep = IMIN(N/3,ActualView->NbTimeStep);
-    }
+  S.Type = DRAW_POST_SCALAR;
+  S.Dimension = dim;
+
+  switch(dim){
+  case 0 : nbnod = 1 ; break; // point
+  case 1 : nbnod = 2 ; break; // line
+  case 2 : nbnod = 3 ; break; // triangle
+  case 3 : nbnod = 4 ; break; // tetrahedron
   }
-  
-  List_Add(ActualView->Triangles,&T);
-}
 
-void AddView_VectorTriangle(double x0,double y0,double z0,
-			    double x1,double y1,double z1,
-			    double x2,double y2,double z2,
-			    List_T *v){
-  Post_Triangle T;
-  double l0,l1,l2;
-  int i,N ;
-    
-  T.Type = DRAW_POST_VECTOR;
-  T.X[0] = x0; T.X[1] = x1; T.X[2] = x2;
-  T.Y[0] = y0; T.Y[1] = y1; T.Y[2] = y2;
-  T.Z[0] = z0; T.Z[1] = z1; T.Z[2] = z2;
+  S.X = &coord[0] ; S.Y = &coord[nbnod] ; S.Z = &coord[2*nbnod] ; S.V = v ;
 
-  N = List_Nbr(v);
-  T.V = (double*)Malloc(N*sizeof(double));
-  
-  for(i=0 ; i<N ; i+=9){
-    List_Read(v,i,  &T.V[i]);   List_Read(v,i+1,&T.V[i+1]); List_Read(v,i+2,&T.V[i+2]);
-    List_Read(v,i+3,&T.V[i+3]); List_Read(v,i+4,&T.V[i+4]); List_Read(v,i+5,&T.V[i+5]);
-    List_Read(v,i+6,&T.V[i+6]); List_Read(v,i+7,&T.V[i+7]); List_Read(v,i+8,&T.V[i+8]);
-    
-    l0 = sqrt(T.V[i]  *T.V[i]  +T.V[i+1]*T.V[i+1]+T.V[i+2]*T.V[i+2]);
-    l1 = sqrt(T.V[i+3]*T.V[i+3]+T.V[i+4]*T.V[i+4]+T.V[i+5]*T.V[i+5]);
-    l2 = sqrt(T.V[i+6]*T.V[i+6]+T.V[i+7]*T.V[i+7]+T.V[i+8]*T.V[i+8]);
-    if(!List_Nbr(ActualView->Points) && 
-       !List_Nbr(ActualView->Lines) && 
-       !List_Nbr(ActualView->Triangles) &&
-       !List_Nbr(ActualView->Simplices)){
-      ActualView->Min = DMIN(DMIN(l0,l1),l2);
-      ActualView->Max = DMAX(DMAX(l0,l1),l2);
-      ActualView->NbTimeStep = N/9;
-    }
-    else{
-      ActualView->Min = DMIN(DMIN(DMIN(l0,l1),l2),ActualView->Min);
-      ActualView->Max = DMAX(DMAX(DMAX(l0,l1),l2),ActualView->Max);
-      ActualView->NbTimeStep = IMIN(N/9,ActualView->NbTimeStep);
-    }
+  if(!List_Nbr(ActualView->Points) &&    !List_Nbr(ActualView->Lines) && 
+     !List_Nbr(ActualView->Triangles) && !List_Nbr(ActualView->Tetrahedra)){
+    ActualView->Min = S.V[0];
+    ActualView->Max = S.V[0];
+    ActualView->NbTimeStep = N/nbnod;
   }
+  else if(N/nbnod < ActualView->NbTimeStep)
+    ActualView->NbTimeStep = N/nbnod ;
 
-  ActualView->ScalarOnly = 0;
-  List_Add(ActualView->Triangles,&T);
+  for(i=0 ; i<N ; i++){
+    if(S.V[i] < ActualView->Min) ActualView->Min = S.V[i] ;
+    if(S.V[i] > ActualView->Max) ActualView->Max = S.V[i] ;
+  }
+
+  switch(dim){
+  case 0 : List_Add(ActualView->Points,&S); break;
+  case 1 : List_Add(ActualView->Lines,&S); break;
+  case 2 : List_Add(ActualView->Triangles,&S); break;
+  case 3 : List_Add(ActualView->Tetrahedra,&S); break;
+  }
+  
 }
 
-void AddView_TensorTriangle(double x0,double y0,double z0,
-			    double x1,double y1,double z1,
-			    double x2,double y2,double z2,
-			    List_T *v){
-  Post_Triangle T;
-  double l0,l1,l2;
-  int i,N ;
+void AddView_VectorSimplex(int dim, double *coord, int N, double *v){
+  Post_Simplex S;
+  double l0;
+  int nbnod, i;
     
-  T.Type = DRAW_POST_TENSOR;
-  T.X[0] = x0; T.X[1] = x1; T.X[2] = x2;
-  T.Y[0] = y0; T.Y[1] = y1; T.Y[2] = y2;
-  T.Z[0] = z0; T.Z[1] = z1; T.Z[2] = z2;
+  S.Type = DRAW_POST_VECTOR;
+  S.Dimension = dim;
 
-  N = List_Nbr(v);
-  T.V = (double*)Malloc(N*sizeof(double));
-  
-  for(i=0 ; i<N ; i+=27){
-    List_Read(v,i,  &T.V[i]);     List_Read(v,i+1,&T.V[i+1]);   List_Read(v,i+2,&T.V[i+2]);
-    List_Read(v,i+3,&T.V[i+3]);   List_Read(v,i+4,&T.V[i+4]);   List_Read(v,i+5,&T.V[i+5]);
-    List_Read(v,i+6,&T.V[i+6]);   List_Read(v,i+7,&T.V[i+7]);   List_Read(v,i+8,&T.V[i+8]);
-    List_Read(v,i+9,&T.V[i+9]);   List_Read(v,i+10,&T.V[i+10]); List_Read(v,i+11,&T.V[i+11]);
-    List_Read(v,i+12,&T.V[i+12]); List_Read(v,i+13,&T.V[i+13]); List_Read(v,i+14,&T.V[i+14]);
-    List_Read(v,i+15,&T.V[i+15]); List_Read(v,i+16,&T.V[i+16]); List_Read(v,i+17,&T.V[i+17]);
-    List_Read(v,i+18,&T.V[i+18]); List_Read(v,i+19,&T.V[i+19]); List_Read(v,i+20,&T.V[i+20]);
-    List_Read(v,i+21,&T.V[i+21]); List_Read(v,i+22,&T.V[i+22]); List_Read(v,i+23,&T.V[i+23]);
-    List_Read(v,i+24,&T.V[i+24]); List_Read(v,i+25,&T.V[i+25]); List_Read(v,i+26,&T.V[i+26]);
-    
-    l0 = sqrt(T.V[i]  *T.V[i]  +T.V[i+1]*T.V[i+1]+T.V[i+2]*T.V[i+2]);
-    l1 = sqrt(T.V[i+3]*T.V[i+3]+T.V[i+4]*T.V[i+4]+T.V[i+5]*T.V[i+5]);
-    l2 = sqrt(T.V[i+6]*T.V[i+6]+T.V[i+7]*T.V[i+7]+T.V[i+8]*T.V[i+8]);
-    if(!List_Nbr(ActualView->Points) && 
-       !List_Nbr(ActualView->Lines) && 
-       !List_Nbr(ActualView->Triangles) &&
-       !List_Nbr(ActualView->Simplices)){
-      ActualView->Min = DMIN(DMIN(l0,l1),l2);
-      ActualView->Max = DMAX(DMAX(l0,l1),l2);
-      ActualView->NbTimeStep = N/9;
-    }
-    else{
-      ActualView->Min = DMIN(DMIN(DMIN(l0,l1),l2),ActualView->Min);
-      ActualView->Max = DMAX(DMAX(DMAX(l0,l1),l2),ActualView->Max);
-      ActualView->NbTimeStep = IMIN(N/9,ActualView->NbTimeStep);
-    }
+  switch(dim){
+  case 0 : nbnod = 1 ; break; // point
+  case 1 : nbnod = 2 ; break; // line
+  case 2 : nbnod = 3 ; break; // triangle
+  case 3 : nbnod = 4 ; break; // tetrahedron
   }
 
-  ActualView->ScalarOnly = 0;
-  List_Add(ActualView->Triangles,&T);
-}
-
-/* ------------------------------------------------------------------------ */
-/*  L i n e                                                                 */
-/* ------------------------------------------------------------------------ */
-
-void AddView_ScalarLine(double x0,double y0,double z0,
-			double x1,double y1,double z1,
-			List_T *v){
-  Post_Line L;
-  int i,N ;
-  
-  L.Type = DRAW_POST_SCALAR;
-  L.X[0] = x0; L.X[1] = x1;  
-  L.Y[0] = y0; L.Y[1] = y1;  
-  L.Z[0] = z0; L.Z[1] = z1;  
+  S.X = &coord[0] ; S.Y = &coord[nbnod] ; S.Z = &coord[2*nbnod] ; S.V = v ;
 
-  N = List_Nbr(v);
-  L.V = (double*)Malloc(N*sizeof(double));
-  
-  for(i=0 ; i<N ; i+=2){
-    List_Read(v,i,&L.V[i]) ;
-    List_Read(v,i+1,&L.V[i+1]) ;
-    if(!List_Nbr(ActualView->Points) && 
-       !List_Nbr(ActualView->Lines) && 
-       !List_Nbr(ActualView->Triangles) &&
-       !List_Nbr(ActualView->Simplices)){
-      ActualView->Min = DMIN(L.V[i],L.V[i+1]);
-      ActualView->Max = DMAX(L.V[i],L.V[i+1]);
-      ActualView->NbTimeStep = N/2;
-    }
-    else{
-      ActualView->Min = DMIN(DMIN(L.V[i],L.V[i+1]),ActualView->Min);
-      ActualView->Max = DMAX(DMAX(L.V[i],L.V[i+1]),ActualView->Max);
-      ActualView->NbTimeStep = IMIN(N/2,ActualView->NbTimeStep);
-    }
+  if(!List_Nbr(ActualView->Points) &&    !List_Nbr(ActualView->Lines) && 
+     !List_Nbr(ActualView->Triangles) && !List_Nbr(ActualView->Tetrahedra)){
+    l0 = sqrt(DSQR(S.V[0])+DSQR(S.V[1])+DSQR(S.V[2]));
+    ActualView->Min = l0;
+    ActualView->Max = l0;
+    ActualView->NbTimeStep = N/(3*nbnod) ;
   }
+  else if(N/(3*nbnod) < ActualView->NbTimeStep)
+    ActualView->NbTimeStep = N/(3*nbnod) ;
 
-  List_Add(ActualView->Lines,&L);
-}
+  for(i=0 ; i<N ; i+=3){
+    l0 = sqrt(DSQR(S.V[i])+DSQR(S.V[i+1])+DSQR(S.V[i+2]));
+    if(l0 < ActualView->Min) ActualView->Min = l0 ;
+    if(l0 > ActualView->Max) ActualView->Max = l0 ;
+  }
 
+  ActualView->ScalarOnly = 0;
 
-void AddView_VectorLine(double x0,double y0,double z0,
-			double x1,double y1,double z1,
-			List_T *v){
-  Post_Line L;
-  double l0,l1;
-  int i,N ;
-  
-  L.Type = DRAW_POST_VECTOR;
-  L.X[0] = x0; L.X[1] = x1; 
-  L.Y[0] = y0; L.Y[1] = y1; 
-  L.Z[0] = z0; L.Z[1] = z1; 
-
-  N = List_Nbr(v);
-  L.V = (double*)Malloc(N*sizeof(double));
-
-  for(i=0 ; i<N ; i+=6){
-    List_Read(v,i,  &L.V[i]);   List_Read(v,i+1,&L.V[i+1]); 
-    List_Read(v,i+2,&L.V[i+2]); List_Read(v,i+3,&L.V[i+3]); 
-    List_Read(v,i+4,&L.V[i+4]); List_Read(v,i+5,&L.V[i+5]); 
-
-    l0 = sqrt(L.V[i]  *L.V[i]  +L.V[i+1]*L.V[i+1]+L.V[i+2]*L.V[i+2]);
-    l1 = sqrt(L.V[i+3]*L.V[i+3]+L.V[i+4]*L.V[i+4]+L.V[i+5]*L.V[i+5]);
-    if(!List_Nbr(ActualView->Points) && 
-       !List_Nbr(ActualView->Lines) && 
-       !List_Nbr(ActualView->Triangles) &&
-       !List_Nbr(ActualView->Simplices)){
-      ActualView->Min = DMIN(l0,l1);
-      ActualView->Max = DMAX(l0,l1);
-      ActualView->NbTimeStep = N/6;
-    }
-    else{
-      ActualView->Min = DMIN(DMIN(l0,l1),ActualView->Min);
-      ActualView->Max = DMAX(DMAX(l0,l1),ActualView->Max);
-      ActualView->NbTimeStep = IMIN(N/6,ActualView->NbTimeStep);
-    }
+  switch(dim){
+  case 0 : List_Add(ActualView->Points,&S); break;
+  case 1 : List_Add(ActualView->Lines,&S); break;
+  case 2 : List_Add(ActualView->Triangles,&S); break;
+  case 3 : List_Add(ActualView->Tetrahedra,&S); break;
   }
- 
-  ActualView->ScalarOnly = 0;
-  List_Add(ActualView->Lines,&L);
 }
 
-void AddView_TensorLine(double x0,double y0,double z0,
-			double x1,double y1,double z1,
-			List_T *v){
+void AddView_TensorSimplex(int dim, double *coord, int N, double *v){
+  Msg(ERROR, "Tensor Field Views not Implemented Yet");
 }
 
 
 /* ------------------------------------------------------------------------ */
-/*  P o i n t                                                               */
+/*  R e a d _ V i e w                                                       */
 /* ------------------------------------------------------------------------ */
 
-void AddView_ScalarPoint(double x0,double y0,double z0,
-			 List_T *v){
-  Post_Point P;
-  double l;
-  int i,N ;
-  
-  P.Type = DRAW_POST_SCALAR; 
-  P.X = x0; 
-  P.Y = y0; 
-  P.Z = z0; 
-
-  N = List_Nbr(v); 
-  P.V = (double*)Malloc(N*sizeof(double));
+void Read_View(char *FileName){
 
-  for(i=0 ; i<N ; i++){
-    List_Read(v,i,  &P.V[i]); 
-    l = P.V[i];
-    if(!List_Nbr(ActualView->Points) && 
-       !List_Nbr(ActualView->Lines) && 
-       !List_Nbr(ActualView->Triangles) &&
-       !List_Nbr(ActualView->Simplices)){
-      ActualView->Min = l;
-      ActualView->Max = l;
-      ActualView->NbTimeStep = N/3;
-    }
-    else{
-      ActualView->Min = DMIN(l,ActualView->Min);
-      ActualView->Max = DMAX(l,ActualView->Max);
-      ActualView->NbTimeStep = IMIN(N,ActualView->NbTimeStep);
-    }
-  }
-
-  ActualView->ScalarOnly = 1;
-  List_Add(ActualView->Points,&P);
-}
-
-
-void AddView_VectorPoint(double x0,double y0,double z0,
-			 List_T *v){
-  Post_Point P;
-  double l;
-  int i,N ;
   
-  P.Type = DRAW_POST_VECTOR; 
-  P.X = x0; 
-  P.Y = y0; 
-  P.Z = z0; 
-
-  N = List_Nbr(v); 
-  P.V = (double*)Malloc(N*sizeof(double));
 
-  for(i=0 ; i<N ; i+=3){
-    List_Read(v,i,  &P.V[i]); 
-    List_Read(v,i+1,&P.V[i+1]); 
-    List_Read(v,i+2,&P.V[i+2]); 
-
-    l = sqrt(P.V[i]*P.V[i] + P.V[i+1]*P.V[i+1] + P.V[i+2]*P.V[i+2]);
-    if(!List_Nbr(ActualView->Points) && 
-       !List_Nbr(ActualView->Lines) && 
-       !List_Nbr(ActualView->Triangles) &&
-       !List_Nbr(ActualView->Simplices)){
-      ActualView->Min = l;
-      ActualView->Max = l;
-      ActualView->NbTimeStep = N/3;
-    }
-    else{
-      ActualView->Min = DMIN(l,ActualView->Min);
-      ActualView->Max = DMAX(l,ActualView->Max);
-      ActualView->NbTimeStep = IMIN(N/3,ActualView->NbTimeStep);
-    }
-  }
-
-  ActualView->ScalarOnly = 0;
-  List_Add(ActualView->Points,&P);
-}
-
-void AddView_TensorPoint(double x0,double y0,double z0,
-			 List_T *v){
 }
-
diff --git a/Common/Views.h b/Common/Views.h
index 9e2f66c9f5..e99becd37a 100644
--- a/Common/Views.h
+++ b/Common/Views.h
@@ -1,38 +1,19 @@
-/* $Id: Views.h,v 1.3 2000-11-24 08:04:14 geuzaine Exp $ */
+/* $Id: Views.h,v 1.4 2000-11-25 15:26:10 geuzaine Exp $ */
 #ifndef _VIEWS_H_
 #define _VIEWS_H_
 
 #include "Const.h"
 
 typedef struct{
-  int Type;
-  double X[4], Y[4], Z[4];
-  double *V;
+  int    Dimension, Type;
+  double *X, *Y, *Z, *V;
 }Post_Simplex;
 
-typedef struct{
-  int Type;
-  double X[3], Y[3], Z[3];
-  double *V;
-}Post_Triangle;
-
-typedef struct{
-  int Type;
-  double X[2], Y[2], Z[2];
-  double *V;
-}Post_Line;
-
-typedef struct{
-  int Type;
-  double X, Y, Z;
-  double *V;
-}Post_Point;
-
 #include "ColorTable.h"
 
 typedef struct{
-  int Num, Changed, Allocated;
-  char Name[NAME_STR_L], Format[NAME_STR_L];
+  int Num, Changed, DuplicateOf, Links;
+  char FileName[NAME_STR_L], Name[NAME_STR_L], Format[NAME_STR_L];
   double Min, Max, CustomMin, CustomMax;
   double Offset[3], Raise[3], ArrowScale;
   int Visible, ScalarOnly;
@@ -41,7 +22,15 @@ typedef struct{
   int ArrowType, ArrowLocation;
   int TimeStep, NbTimeStep;
   ColorTable CT;
-  List_T *Simplices, *Triangles, *Lines, *Points;
+
+  int NbSP, NbVP, NbTP;
+  List_T *SP, *VP, *TP, *Points; // points
+  int NbSL, NbVL, NbTL;
+  List_T *SL, *VL, *TL, *Lines; // lines
+  int NbST, NbVT, NbTT;
+  List_T *ST, *VT, *TT, *Triangles; // triangles
+  int NbSS, NbVS, NbTS;
+  List_T *SS, *VS, *TS, *Tetrahedra; // tetrahedra
   
   double (*GVFI) (double min, double max, int nb, int index);
   int (*GIFV) (double min, double max, int nb, double value);
@@ -80,62 +69,17 @@ typedef struct{
 
 /* Public functions */
 
+int fcmpPostViewNum(const void *v1, const void *v2);
+int fcmpPostViewDuplicateOf(const void *v1, const void *v2);
+
 void BeginView (int alloc);
-void EndView (char *Name, double XOffset, double YOffset, double ZOffset);
-
-void AddView_ScalarSimplex (double x0, double y0, double z0,
-			    double x1, double y1, double z1,
-			    double x2, double y2, double z2,
-			    double x3, double y3, double z3,
-			    List_T * v);
-
-void AddView_VectorSimplex (double x0, double y0, double z0,
-			    double x1, double y1, double z1,
-			    double x2, double y2, double z2,
-			    double x3, double y3, double z3,
-			    List_T * v);
-
-void AddView_TensorSimplex (double x0, double y0, double z0,
-			    double x1, double y1, double z1,
-			    double x2, double y2, double z2,
-			    double x3, double y3, double z3,
-			    List_T * v);
-
-void AddView_ScalarTriangle (double x0, double y0, double z0,
-			     double x1, double y1, double z1,
-			     double x2, double y2, double z2,
-			     List_T * v);
-
-void AddView_VectorTriangle (double x0, double y0, double z0,
-			     double x1, double y1, double z1,
-			     double x2, double y2, double z2,
-			     List_T * v);
-
-void AddView_TensorTriangle (double x0, double y0, double z0,
-			     double x1, double y1, double z1,
-			     double x2, double y2, double z2,
-			     List_T * v);
-
-void AddView_ScalarLine (double x0, double y0, double z0,
-			 double x1, double y1, double z1,
-			 List_T * v);
-
-void AddView_VectorLine (double x0, double y0, double z0,
-			 double x1, double y1, double z1,
-			 List_T * v);
-
-void AddView_TensorLine (double x0, double y0, double z0,
-			 double x1, double y1, double z1,
-			 List_T * v);
-
-void AddView_ScalarPoint(double x0,double y0,double z0,
-			List_T *v);
-
-void AddView_VectorPoint(double x0,double y0,double z0,
-			 List_T *v);
-
-void AddView_TensorPoint(double x0,double y0,double z0,
-			 List_T *v);
+void EndView (int AddInUI, int Number, char *FileName, char *Name, 
+	      double XOffset, double YOffset, double ZOffset);
+void FreeView(Post_View *v);
+
+void AddView_ScalarSimplex(int dim, double *coord, int N, double *v);
+void AddView_VectorSimplex(int dim, double *coord, int N, double *v);
+void AddView_TensorSimplex(int dim, double *coord, int N, double *v);
 
 int BGMWithView (Post_View *ErrView);
 int CreateBGM(Post_View *ErrView, int OptiMethod, double Degree,
diff --git a/DataStr/Makefile b/DataStr/Makefile
index f8cb139a15..6484378781 100644
--- a/DataStr/Makefile
+++ b/DataStr/Makefile
@@ -1,3 +1,4 @@
+# $Id: Makefile,v 1.3 2000-11-25 15:26:10 geuzaine Exp $
 #
 # Makefile for "libSataStr.a"
 #
diff --git a/Geo/Makefile b/Geo/Makefile
index 2737ad687a..875e8be3c6 100644
--- a/Geo/Makefile
+++ b/Geo/Makefile
@@ -1,3 +1,4 @@
+# $Id: Makefile,v 1.4 2000-11-25 15:26:10 geuzaine Exp $
 #
 # Makefile for "libGeo.a"
 #
diff --git a/Geo/Print_Geo.cpp b/Geo/Print_Geo.cpp
index 3ac7c173a1..0378ef2d55 100644
--- a/Geo/Print_Geo.cpp
+++ b/Geo/Print_Geo.cpp
@@ -1,4 +1,4 @@
-/* $Id: Print_Geo.cpp,v 1.4 2000-11-24 13:21:52 geuzaine Exp $ */
+/* $Id: Print_Geo.cpp,v 1.5 2000-11-25 15:26:10 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "Geo.h"
@@ -23,20 +23,20 @@ void Print_Nurbs (Curve *c, FILE *f){
   for(i=0;i<List_Nbr(c->Control_Points);i++){
     List_Read(c->Control_Points,i,&v);
     if(!i)
-      fprintf(FOUT,"%3d",v->Num);
+      fprintf(FOUT,"%d",v->Num);
     else
-      fprintf(FOUT,",%3d",v->Num);
+      fprintf(FOUT,", %d",v->Num);
     if(i%8 == 7 && i!=List_Nbr(c->Control_Points)-1)fprintf(FOUT,"\n");
   }
   fprintf(f,"}\n");
   fprintf(f,"Knots {");
   for(j=0;j<List_Nbr(c->Control_Points)+c->degre+1;j++){
     if(!j)fprintf(f,"%g",c->k[j]);
-    else fprintf(f,",%g",c->k[j]);
+    else fprintf(f,", %g",c->k[j]);
     if(j%5 == 4 && j!=List_Nbr(c->Control_Points)+c->degre)fprintf(FOUT,"\n");
   }
   fprintf(f,"}");
-  fprintf(f,"Order %3d;\n\n",c->degre);
+  fprintf(f,"Order %d;\n\n",c->degre);
 }
 
 void Print_Curve(void *a, void *b){
@@ -73,7 +73,7 @@ void Print_Curve(void *a, void *b){
   for(i=0;i<List_Nbr(c->Control_Points);i++){
     List_Read(c->Control_Points,i,&v);
     if(i)
-      fprintf(FOUT,",%d",v->Num);
+      fprintf(FOUT,", %d",v->Num);
     else
       fprintf(FOUT,"{%d",v->Num);
     if(i%6 == 7)fprintf(FOUT,"\n");
@@ -84,7 +84,7 @@ void Print_Curve(void *a, void *b){
   case MSH_SEGM_CIRC_INV:
   case MSH_SEGM_ELLI:
   case MSH_SEGM_ELLI_INV:
-    fprintf(FOUT,"} Plane{%g,%g,%g};\n",
+    fprintf(FOUT,"} Plane{%g, %g, %g};\n",
             c->Circle.n[0],c->Circle.n[1],c->Circle.n[2]);
     break;
   default :
@@ -109,9 +109,9 @@ void Print_Surface(void *a, void *b){
     for(i=0;i<List_Nbr(s->s.Generatrices);i++){
       List_Read(s->s.Generatrices,i,&c);
       if(i)
-        fprintf(FOUT,",%3d",c->Num);
+        fprintf(FOUT,", %d",c->Num);
       else
-        fprintf(FOUT,"{%3d",c->Num);
+        fprintf(FOUT,"{%d",c->Num);
     }
     fprintf(FOUT,"};\n");
   }
@@ -133,9 +133,9 @@ void Print_Surface(void *a, void *b){
       for(j=0;j<s->Nu;j++){
         List_Read(s->Control_Points,j+s->Nu *i,&v);
         if(!j)
-          fprintf(FOUT,"%3d",v->Num);
+          fprintf(FOUT,"%d",v->Num);
         else
-          fprintf(FOUT,",%3d",v->Num);
+          fprintf(FOUT,", %d",v->Num);
       }
       if(i!=s->Nv-1)
         fprintf(FOUT,"},\n");
@@ -145,16 +145,16 @@ void Print_Surface(void *a, void *b){
     fprintf(FOUT,"\t\tKnots\n\t\t{");
     for(j=0;j<s->Nu+s->OrderU+1;j++){
       if(!j)fprintf(FOUT,"%g",s->ku[j]);
-      else fprintf(FOUT,",%g",s->ku[j]);
+      else fprintf(FOUT,", %g",s->ku[j]);
       if(j%5 == 4 && j!=s->Nu + s->OrderU)fprintf(FOUT,"\n\t\t");
     }
     fprintf(FOUT,"}\n\t\t{");
     for(j=0;j<s->Nv+s->OrderV+1;j++){
       if(!j)fprintf(FOUT,"%g",s->kv[j]);
-      else fprintf(FOUT,",%g",s->kv[j]);
+      else fprintf(FOUT,", %g",s->kv[j]);
       if(j%5 == 4 && j!=s->Nv + s->OrderV)fprintf(FOUT,"\n\t\t");
     }
-    fprintf(FOUT,"}\n\t\tOrder %3d %3d;\n\n",s->OrderU,s->OrderV);
+    fprintf(FOUT,"}\n\t\tOrder %d %d;\n\n",s->OrderU,s->OrderV);
     break;
   }
 }
diff --git a/Graphics/Draw.cpp b/Graphics/Draw.cpp
index 39bb022f8f..61ddfaf8d5 100644
--- a/Graphics/Draw.cpp
+++ b/Graphics/Draw.cpp
@@ -1,4 +1,4 @@
-/* $Id: Draw.cpp,v 1.3 2000-11-23 14:11:32 geuzaine Exp $ */
+/* $Id: Draw.cpp,v 1.4 2000-11-25 15:26:10 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -235,7 +235,7 @@ void Replot(void){
 /*  e n t i t y   s e l e c t i o n                                         */
 /* ------------------------------------------------------------------------ */
 
-void process_selection(int x, int y, int *n, GLuint *ii, GLuint *jj){
+void Process_SelectionBuffer(int x, int y, int *n, GLuint *ii, GLuint *jj){
   GLuint selectBuf[SELECTION_BUFFER_SIZE];
   GLint  i,j,hits,names,*ptr;
 
@@ -271,8 +271,8 @@ void process_selection(int x, int y, int *n, GLuint *ii, GLuint *jj){
   *n = hits;
 }
 
-void filtre_selection(int n, GLuint *typ, GLuint *ient, Vertex **thev,
-		      Curve **thec, Surface **thes, Mesh *m){
+void Filter_SelectionBuffer(int n, GLuint *typ, GLuint *ient, Vertex **thev,
+			    Curve **thec, Surface **thes, Mesh *m){
 
   Vertex   *v=NULL, V;
   Curve    *c=NULL, C;
@@ -289,26 +289,20 @@ void filtre_selection(int n, GLuint *typ, GLuint *ient, Vertex **thev,
   for(i=0;i<n;i++){
     if(typ[i] == typmin){
       switch(typ[i]){
-      case 0:
-	v = &V;
+      case 0: 
+	v = &V; 
 	v->Num = ient[i];
-	if(Tree_Query(m->Points,&v)){
-	  *thev = v;
-	}
+	if(Tree_Query(m->Points,&v)) *thev = v;
 	break;
       case 1:
 	c = &C;
 	c->Num = ient[i];
-	if(Tree_Query(m->Curves,&c)){
-	  *thec = c;
-	}
+	if(Tree_Query(m->Curves,&c)) *thec = c;
 	break;
       case 2:
 	s = &S;
 	s->Num = ient[i];
-	if(Tree_Query(m->Surfaces,&s)){
-	  *thes = s;
-	}
+	if(Tree_Query(m->Surfaces,&s)) *thes = s;
 	break;
       }
     }
@@ -346,12 +340,12 @@ int SelectEntity(int type, Vertex **v, Curve **c, Surface **s){
       if(keysym == XK_e) return(-1);
       break;
     case ButtonPress :
-      process_selection(event.xbutton.x, event.xbutton.y, &hits, ii, jj);
-      filtre_selection(hits,ii,jj,v,c,s,&M);
+      Process_SelectionBuffer(event.xbutton.x, event.xbutton.y, &hits, ii, jj);
+      Filter_SelectionBuffer(hits,ii,jj,v,c,s,&M);
       if(check_type(type,*v,*c,*s)){
-	begin_highlight();
-	highlight_entity(*v,*c,*s,1);
-	end_highlight(1);
+	BeginHighlight();
+	HighlightEntity(*v,*c,*s,1);
+	EndHighlight(1);
 	return(event.xbutton.button);
       }
     }
@@ -364,14 +358,14 @@ int SelectEntity(int x, int y, Vertex **v, Curve **c, Surface **s){
   int             hits,i,j;
   GLuint          ii[SELECTION_BUFFER_SIZE],jj[SELECTION_BUFFER_SIZE];
 
-  process_selection(x, y, &hits, ii, jj);
+  Process_SelectionBuffer(x, y, &hits, ii, jj);
   *v = NULL;
   *s = NULL;
   *c = NULL;
-  filtre_selection(hits,ii,jj,v,c,s,&M);
-  begin_highlight();
-  highlight_entity(*v,*c,*s,1);
-  end_highlight(1);
+  Filter_SelectionBuffer(hits,ii,jj,v,c,s,&M);
+  BeginHighlight();
+  HighlightEntity(*v,*c,*s,1);
+  EndHighlight(1);
   return(1);
 }
 
diff --git a/Graphics/Draw.h b/Graphics/Draw.h
index fdbf7e0b04..ffd7a212ec 100644
--- a/Graphics/Draw.h
+++ b/Graphics/Draw.h
@@ -1,4 +1,4 @@
-/* $Id: Draw.h,v 1.4 2000-11-24 12:50:01 geuzaine Exp $ */
+/* $Id: Draw.h,v 1.5 2000-11-25 15:26:10 geuzaine Exp $ */
 #ifndef _DRAW_H_
 #define _DRAW_H_
 
@@ -32,10 +32,10 @@ void ColorSwitch(int i);
 
 int  SelectEntity(int type, Vertex **v, Curve **c, Surface **s);
 void ZeroHighlight(Mesh *m);
-void begin_highlight(void);
-void end_highlight(int permanent);
-void highlight_entity(Vertex *v,Curve *c, Surface *s, int permanent);
-void highlight_entity_num(int v, int c, int s, int permanant);
+void BeginHighlight(void);
+void EndHighlight(int permanent);
+void HighlightEntity(Vertex *v,Curve *c, Surface *s, int permanent);
+void HighlightEntityNum(int v, int c, int s, int permanant);
 
 void Draw3d(void);
 void Draw2d(void);
@@ -72,13 +72,14 @@ void Draw_Extruded_Surfaces(void *a, void *b);
 void Draw_Simplex_Volume (void *a, void *b);
 void Draw_Hexahedron_Volume (void *a, void *b);
 void Draw_Prism_Volume (void *a, void *b);
-void Draw_Post_Simplex (Post_View * View, Post_Simplex * s,
-			double ValMin, double ValMax, double Raise[3][5]);
-void Draw_Post_Triangle (Post_View * View, Post_Triangle * t,
+
+void Draw_Post_Tetrahedron (Post_View * View, Post_Simplex * s,
+			    double ValMin, double ValMax, double Raise[3][5]);
+void Draw_Post_Triangle (Post_View * View, Post_Simplex * t,
 			 double ValMin, double ValMax, double Raise[3][5]);
-void Draw_Post_Line (Post_View * View, Post_Line * l,
+void Draw_Post_Line (Post_View * View, Post_Simplex * l,
 		     double ValMin, double ValMax, double Raise[3][5]);
-void Draw_Post_Point (Post_View * View, Post_Point * p,
+void Draw_Post_Point (Post_View * View, Post_Simplex * p,
 		      double ValMin, double ValMax, double Raise[3][5]);
 
 #endif
diff --git a/Graphics/Geom.cpp b/Graphics/Geom.cpp
index 2d52ac2221..76c968bc60 100644
--- a/Graphics/Geom.cpp
+++ b/Graphics/Geom.cpp
@@ -1,4 +1,4 @@
-/* $Id: Geom.cpp,v 1.3 2000-11-23 23:20:34 geuzaine Exp $ */
+/* $Id: Geom.cpp,v 1.4 2000-11-25 15:26:10 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -840,7 +840,7 @@ void Draw_Axes (double s) {
 /*  H i g h l i g h t                                                       */
 /* ------------------------------------------------------------------------ */
 
-void begin_highlight(void){
+void BeginHighlight(void){
   if(CTX.geom.highlight){
     Highlighted = 1;
     if(CTX.overlay){ 
@@ -856,7 +856,7 @@ void begin_highlight(void){
 }
 
 
-void end_highlight(int permanent){
+void EndHighlight(int permanent){
   Highlighted = 0;
   if(permanent){
     Init();
@@ -870,7 +870,7 @@ void end_highlight(int permanent){
   }
 }
 
-void highlight_entity(Vertex *v,Curve *c, Surface *s, int permanent){
+void HighlightEntity(Vertex *v,Curve *c, Surface *s, int permanent){
 
   Curve *cc;
   Vertex *v1,*v2;
@@ -922,7 +922,7 @@ void highlight_entity(Vertex *v,Curve *c, Surface *s, int permanent){
 }
 
 
-void highlight_entity_num(int v, int c, int s, int permanant){
+void HighlightEntityNum(int v, int c, int s, int permanant){
   Vertex *pv,V;
   Curve *pc,C;
   Surface *ps,S;
@@ -930,21 +930,21 @@ void highlight_entity_num(int v, int c, int s, int permanant){
     pv = &V;
     pv->Num = v;
     if(Tree_Query(THEM->Vertices,&pv)){
-      highlight_entity(pv,NULL,NULL,permanant);
+      HighlightEntity(pv,NULL,NULL,permanant);
     }
   }
   if(c){
     pc = &C;
     pc->Num = c;
     if(Tree_Query(THEM->Curves,&pc)){
-      highlight_entity(NULL,pc,NULL,permanant);
+      HighlightEntity(NULL,pc,NULL,permanant);
     }
   }
   if(s){
     ps = &S;
     ps->Num = s;
     if(Tree_Query(THEM->Surfaces,&ps)){
-      highlight_entity(NULL,NULL,ps,permanant);
+      HighlightEntity(NULL,NULL,ps,permanant);
     }
   }
   glFlush();
diff --git a/Graphics/Makefile b/Graphics/Makefile
index 14119fcfcb..d3ecbcff90 100644
--- a/Graphics/Makefile
+++ b/Graphics/Makefile
@@ -1,3 +1,4 @@
+# $Id: Makefile,v 1.3 2000-11-25 15:26:10 geuzaine Exp $
 #
 # Makefile for "libGraphics.a"
 #
@@ -29,9 +30,6 @@ SRC = Draw.cpp \
       Geom.cpp \
       Post.cpp \
       PostSimplex.cpp \
-      PostTriangle.cpp \
-      PostLine.cpp \
-      PostPoint.cpp \
       Iso.cpp \
       Entity.cpp \
       Scale.cpp \
diff --git a/Graphics/Post.cpp b/Graphics/Post.cpp
index 8fed01a402..69d028b1d9 100644
--- a/Graphics/Post.cpp
+++ b/Graphics/Post.cpp
@@ -1,4 +1,4 @@
-/* $Id: Post.cpp,v 1.3 2000-11-23 23:20:34 geuzaine Exp $ */
+/* $Id: Post.cpp,v 1.4 2000-11-25 15:26:10 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -74,35 +74,6 @@ void RaiseFill(int i, double Val, double ValMin, double Raise[3][5]){
 }
 
 
-int fcmp_Post_Triangle(const void *a, const void *b){
-  return 0;
-
-#if 0
-  Post_Triangle *PT;
-  double bary1[3], bary2[3]; 
-
-  /* sorting % eye with barycenters */
-
-  z1 = (PT->X[1]+View->Offset[0]+Raise[0][1]) + (PT->X[0]+View->Offset[0]+Raise[0][0]); 
-  y1y0 = (PT->Y[1]+View->Offset[1]+Raise[1][1]) - (PT->Y[0]+View->Offset[1]+Raise[1][0]);
-  z1z0 = (PT->Z[1]+View->Offset[2]+Raise[2][1]) - (PT->Z[0]+View->Offset[2]+Raise[2][0]); 
-
-  x2x0 = (PT->X[2]+View->Offset[0]+Raise[0][2]) - (PT->X[0]+View->Offset[0]+Raise[0][0]);
-  y2y0 = (PT->Y[2]+View->Offset[1]+Raise[1][2]) - (PT->Y[0]+View->Offset[1]+Raise[1][0]); 
-  z2z0 = (PT->Z[2]+View->Offset[2]+Raise[2][2]) - (PT->Z[0]+View->Offset[2]+Raise[2][0]);
-
-  q = *(GL2PSprimitive**)a;
-  w = *(GL2PSprimitive**)b;
-  diff = q->depth - w->depth;
-  if(diff > 0.) 
-    return 1;
-  else if(diff < 0.)
-    return -1;
-  else
-    return 0;
-#endif
-}
-
 /* ------------------------------------------------------------------------ 
     D r a w _ P o s t                                                       
    ------------------------------------------------------------------------ */
@@ -168,26 +139,26 @@ void Draw_Post (void) {
 	  for(k=0;k<5;k++) Raise[j][k] = 0. ;
 	}
 	
-	if((n = List_Nbr(v->Simplices)))
+	if((n = List_Nbr(v->Tetrahedra)))
 	  for(j=0 ; j<n ; j++)
-	    Draw_Post_Simplex(v, (Post_Simplex*)List_Pointer(v->Simplices,j), 
-			      ValMin, ValMax, Raise);
+	    Draw_Post_Tetrahedron(v, (Post_Simplex*)List_Pointer(v->Tetrahedra,j), 
+				  ValMin, ValMax, Raise);
 	
-	if((n = List_Nbr(v->Triangles))){
-	  //if(there is alpha)List_Sort(v->Triangles, fcmp_Post_Triangle);
+	//if(there is alpha)List_Sort(v->Triangles, fcmpTriangle);
+
+	if((n = List_Nbr(v->Triangles)))
 	  for(j=0 ; j<n ; j++)
-	    Draw_Post_Triangle(v, (Post_Triangle*)List_Pointer(v->Triangles,j), 
+	    Draw_Post_Triangle(v, (Post_Simplex*)List_Pointer(v->Triangles,j), 
 			       ValMin, ValMax, Raise);
-	}
-	
+
 	if((n = List_Nbr(v->Lines)))
 	  for(j=0 ; j<n ; j++)
-	    Draw_Post_Line(v, (Post_Line*)List_Pointer(v->Lines,j), 
+	    Draw_Post_Line(v, (Post_Simplex*)List_Pointer(v->Lines,j), 
 			   ValMin, ValMax, Raise);
 	
 	if((n = List_Nbr(v->Points)))
 	  for(j=0 ; j<n ; j++)
-	    Draw_Post_Point(v, (Post_Point*)List_Pointer(v->Points,j), 
+	    Draw_Post_Point(v, (Post_Simplex*)List_Pointer(v->Points,j), 
 			    ValMin, ValMax, Raise);
 	
 	if(CTX.display_lists){
diff --git a/Graphics/PostLine.cpp b/Graphics/PostLine.cpp
deleted file mode 100644
index b6ef048569..0000000000
--- a/Graphics/PostLine.cpp
+++ /dev/null
@@ -1,132 +0,0 @@
-/* $Id: PostLine.cpp,v 1.2 2000-11-23 14:11:32 geuzaine Exp $ */
-
-#include "Gmsh.h"
-#include "GmshUI.h"
-#include "Geo.h"
-#include "Mesh.h"
-#include "Draw.h"
-#include "Iso.h"
-#include "Context.h"
-
-extern Context_T   CTX;
-extern double      LC;
-
-void Draw_Post_Line(Post_View *View, Post_Line *PL, 
-		    double ValMin, double ValMax, double Raise[3][5]){
-
-  int     i,k,nb=0;
-  double  d,dx,dy,dz,fact;
-  double  Xp[5],Yp[5],Zp[5],value[5],thev;
-  char    Num[100] ;
-
-  switch(PL->Type){	    
-  case DRAW_POST_SCALAR:	    
-
-    if(View->IntervalsType==DRAW_POST_NUMERIC){
-      d = (PL->V[2*View->TimeStep]+PL->V[2*View->TimeStep+1]) / 2.;
-      if(d >= ValMin && d <= ValMax){
-	sprintf(Num, "%g", d);
-	glColor4ubv((GLubyte*)&CTX.color.fg);
-	glRasterPos3d((PL->X[0] + PL->X[1])/2.,
-		      (PL->Y[0] + PL->Y[1])/2.,
-		      (PL->Z[0] + PL->Z[1])/2.);
-	Draw_String(Num);
-      }
-      break ;
-    }
-
-    glDisable(GL_LINE_STIPPLE);
-    for(k=0 ; k<2 ; k++) RaiseFill(k, PL->V[2*View->TimeStep+k], ValMin, Raise);
-
-    if(View->IntervalsType==DRAW_POST_CONTINUOUS){
-      glBegin(GL_LINES);
-      Palette2(View,ValMin,ValMax,PL->V[2*View->TimeStep]);
-      glVertex3d(PL->X[0]+View->Offset[0]+Raise[0][0],
-		 PL->Y[0]+View->Offset[1]+Raise[1][0],
-		 PL->Z[0]+View->Offset[2]+Raise[2][0]);
-      Palette2(View,ValMin,ValMax,PL->V[2*View->TimeStep+1]);
-      glVertex3d(PL->X[1]+View->Offset[0]+Raise[0][1],
-		 PL->Y[1]+View->Offset[1]+Raise[1][1],
-		 PL->Z[1]+View->Offset[2]+Raise[2][1]);
-      glEnd();
-    }
-    else{
-      for(k=0 ; k<View->NbIso ; k++){
-	Palette(View,View->NbIso,k);
-	if(View->IntervalsType==DRAW_POST_DISCRETE){
-	  CutLine1D(PL->X,PL->Y,PL->Z,&PL->V[2*View->TimeStep],
-		    View->GVFI(ValMin,ValMax,View->NbIso+1,k),
-		    View->GVFI(ValMin,ValMax,View->NbIso+1,k+1),
-		    ValMin,ValMax,Xp,Yp,Zp,&nb,value);	  
-	  if(nb == 2){
-	    for(i=0;i<2;i++) RaiseFill(i,value[i],ValMin,Raise);    
-	    Draw_Line(Xp,Yp,Zp,View->Offset,Raise);  
-	  }
-	}
-	else{
-	  thev = View->GVFI(ValMin,ValMax,View->NbIso,k);
-	  CutLine0D(PL->X,PL->Y,PL->Z,&PL->V[2*View->TimeStep],
-		    thev, ValMin,ValMax,Xp,Yp,Zp,&nb);	  
-	  if(nb){
-	    RaiseFill(0,thev,ValMin,Raise);
-	    Draw_Point(Xp,Yp,Zp,View->Offset,Raise);    
-	  }
-	}
-      }
-
-    }
-    break;
-    
-  case DRAW_POST_VECTOR:	    
-    if(View->ArrowLocation == DRAW_POST_LOCATE_COG){
-      dx = 0.5 * (PL->V[6*View->TimeStep]  +PL->V[6*View->TimeStep+3]);
-      dy = 0.5 * (PL->V[6*View->TimeStep+1]+PL->V[6*View->TimeStep+4]);
-      dz = 0.5 * (PL->V[6*View->TimeStep+2]+PL->V[6*View->TimeStep+5]);
-      d = sqrt(dx*dx+dy*dy+dz*dz);	    
-      if(d!=0.0 && d>=ValMin && d<=ValMax){	      
-	Palette(View,View->NbIso,View->GIFV(ValMin,ValMax,View->NbIso,d));	      
-	fact = 2.e-4 * LC * View->ArrowScale/View->Max ;		
-	if(View->ScaleType == DRAW_POST_LOGARITHMIC && ValMin>0){
-	  dx /= d ; dy /= d ; dz /= d ;
-	  d = log10(d/ValMin) ; 
-	  dx *= d ; dy *= d ; dz *= d ;
-	}
-	RaiseFill(0, d, ValMin, Raise);		
-	Draw_Vector(View->ArrowType, View->IntervalsType!=DRAW_POST_ISO,
-		    0.5 * (PL->X[0] + PL->X[1]),
-		    0.5 * (PL->Y[0] + PL->Y[1]),
-		    0.5 * (PL->Z[0] + PL->Z[1]),
-		    fact*d, fact*dx, fact*dy, fact*dz,
-		    View->Offset, Raise);
-      }
-    }
-    else{
-      for(k=0 ; k<2 ; k++){
-	dx = PL->V[6*View->TimeStep  +3*k] ;
-	dy = PL->V[6*View->TimeStep+1+3*k] ;
-	dz = PL->V[6*View->TimeStep+2+3*k] ;		  
-	d = sqrt(dx*dx+dy*dy+dz*dz);		
-	if(d!=0.0 && d>=ValMin && d<=ValMax){		
-	  Palette(View,View->NbIso,View->GIFV(ValMin,ValMax,View->NbIso,d));
-	  fact = 2.e-4 * LC * View->ArrowScale/View->Max ;		
-	  if(View->ScaleType == DRAW_POST_LOGARITHMIC && ValMin>0){
-	    dx /= d ; dy /= d ; dz /= d ;
-	    d = log10(d/ValMin) ; 
-	    dx *= d ; dy *= d ; dz *= d ;
-	  }
-	  RaiseFill(0, d, ValMin, Raise);		
-	  Draw_Vector(View->ArrowType, View->IntervalsType!=DRAW_POST_ISO,
-		      PL->X[k], PL->Y[k], PL->Z[k],
-		      fact*d, fact*dx, fact*dy, fact*dz,
-		      View->Offset, Raise);
-	}		
-      }	      
-    }
-    break;
-    
-  case DRAW_POST_TENSOR :
-    break;
-    
-  }
-}
-
diff --git a/Graphics/PostPoint.cpp b/Graphics/PostPoint.cpp
deleted file mode 100644
index df55556918..0000000000
--- a/Graphics/PostPoint.cpp
+++ /dev/null
@@ -1,86 +0,0 @@
-/* $Id: PostPoint.cpp,v 1.2 2000-11-23 14:11:32 geuzaine Exp $ */
-
-#include "Gmsh.h"
-#include "GmshUI.h"
-#include "Geo.h"
-#include "Mesh.h"
-#include "Draw.h"
-#include "Iso.h"
-#include "Context.h"
-
-extern Context_T   CTX;
-extern double      LC;
-
-int GiveIndexFromValue_Lin(double ValMin, double ValMax, int NbIso, double Val) ;
-
-void Draw_Post_Point(Post_View *View, Post_Point *PP, 
-		     double ValMin, double ValMax, double Raise[3][5]){      
-
-  int      i;
-  double   d,dx,dy,dz,fact;
-	  
-  switch(PP->Type){	    
-
-  case DRAW_POST_SCALAR:	    	    
-    d = PP->V[View->TimeStep];  
-    if(d>=ValMin && d<=ValMax){      
-      Palette(View,View->NbIso,View->GIFV(ValMin,ValMax,View->NbIso,d));
-      glBegin(GL_POINTS);
-      glVertex3d(PP->X, PP->Y, PP->Z);
-      glEnd();
-    }
-    break;
-    
-  case DRAW_POST_VECTOR:	    
-
-    if(View->ArrowType == DRAW_POST_DISPLACEMENT){
-      fact = View->ArrowScale/100. ;
-      glColor4ubv((GLubyte*)&CTX.color.fg);
-      glBegin(GL_POINTS);
-      glVertex3d(fact*PP->V[3*View->TimeStep],
-		 fact*PP->V[3*View->TimeStep+1],
-		 fact*PP->V[3*View->TimeStep+2]);
-      glEnd();
-      if(View->TimeStep){
-	glBegin(GL_LINE_STRIP);
-	for(i=0 ; i<View->TimeStep+1 ; i++)
-	  glVertex3d(fact*PP->V[3*(View->TimeStep-i)],
-		     fact*PP->V[3*(View->TimeStep-i)+1],
-		     fact*PP->V[3*(View->TimeStep-i)+2]);
-	glEnd();
-      }
-      break;
-    }
-
-    dx = PP->V[3*View->TimeStep];  
-    dy = PP->V[3*View->TimeStep+1];
-    dz = PP->V[3*View->TimeStep+2];
-    d = sqrt(dx*dx+dy*dy+dz*dz);
-    
-    if(d!=0.0 && d>=ValMin && d<=ValMax){
-      
-      Palette(View,View->NbIso,View->GIFV(ValMin,ValMax,View->NbIso,d));
-
-      fact = 2.e-4 * LC * View->ArrowScale/View->Max ;
-      
-      if(View->ScaleType == DRAW_POST_LOGARITHMIC && ValMin>0){
-	dx /= d ; dy /= d ; dz /= d ;
-	d = log10(d/ValMin) ; 
-	dx *= d ; dy *= d ; dz *= d ;
-      }
-
-      RaiseFill(0, d, ValMin, Raise);
-
-      Draw_Vector(View->ArrowType, View->IntervalsType!=DRAW_POST_ISO, 
-		  PP->X, PP->Y, PP->Z,
-		  fact*d, fact*dx, fact*dy, fact*dz,
-		  View->Offset, Raise);
-    }
-    break;
-    
-  case DRAW_POST_TENSOR :
-    break;
-    
-  }
-}
-
diff --git a/Graphics/PostSimplex.cpp b/Graphics/PostSimplex.cpp
index fce1808cdc..8d62f22410 100644
--- a/Graphics/PostSimplex.cpp
+++ b/Graphics/PostSimplex.cpp
@@ -1,4 +1,4 @@
-/* $Id: PostSimplex.cpp,v 1.2 2000-11-23 14:11:32 geuzaine Exp $ */
+/* $Id: PostSimplex.cpp,v 1.3 2000-11-25 15:26:10 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -11,8 +11,423 @@
 extern Context_T   CTX;
 extern double      LC;
 
-void Draw_Post_Simplex(Post_View *View, Post_Simplex *PS, 
-		       double ValMin, double ValMax, double Raise[3][5]){
+/* ------------------------------------------------------------------------ */
+/*  P o i n t s                                                             */
+/* ------------------------------------------------------------------------ */
+
+void Draw_Post_Point(Post_View *View, Post_Simplex *PP, 
+		     double ValMin, double ValMax, double Raise[3][5]){      
+  int      i;
+  double   d,dx,dy,dz,fact;
+	  
+  switch(PP->Type){	    
+
+  case DRAW_POST_SCALAR:	    	    
+    d = PP->V[View->TimeStep];  
+    if(d>=ValMin && d<=ValMax){      
+      Palette(View,View->NbIso,View->GIFV(ValMin,ValMax,View->NbIso,d));
+      glBegin(GL_POINTS);
+      glVertex3d(PP->X[0], PP->Y[0], PP->Z[0]);
+      glEnd();
+    }
+    break;
+    
+  case DRAW_POST_VECTOR:	    
+
+    if(View->ArrowType == DRAW_POST_DISPLACEMENT){
+      fact = View->ArrowScale/100. ;
+      glColor4ubv((GLubyte*)&CTX.color.fg);
+      glBegin(GL_POINTS);
+      glVertex3d(fact*PP->V[3*View->TimeStep],
+		 fact*PP->V[3*View->TimeStep+1],
+		 fact*PP->V[3*View->TimeStep+2]);
+      glEnd();
+      if(View->TimeStep){
+	glBegin(GL_LINE_STRIP);
+	for(i=0 ; i<View->TimeStep+1 ; i++)
+	  glVertex3d(fact*PP->V[3*(View->TimeStep-i)],
+		     fact*PP->V[3*(View->TimeStep-i)+1],
+		     fact*PP->V[3*(View->TimeStep-i)+2]);
+	glEnd();
+      }
+      break;
+    }
+
+    dx = PP->V[3*View->TimeStep];  
+    dy = PP->V[3*View->TimeStep+1];
+    dz = PP->V[3*View->TimeStep+2];
+    d = sqrt(dx*dx+dy*dy+dz*dz);
+    
+    if(d!=0.0 && d>=ValMin && d<=ValMax){
+      
+      Palette(View,View->NbIso,View->GIFV(ValMin,ValMax,View->NbIso,d));
+
+      fact = 2.e-4 * LC * View->ArrowScale/View->Max ;
+      
+      if(View->ScaleType == DRAW_POST_LOGARITHMIC && ValMin>0){
+	dx /= d ; dy /= d ; dz /= d ;
+	d = log10(d/ValMin) ; 
+	dx *= d ; dy *= d ; dz *= d ;
+      }
+
+      RaiseFill(0, d, ValMin, Raise);
+
+      Draw_Vector(View->ArrowType, View->IntervalsType!=DRAW_POST_ISO, 
+		  PP->X[0], PP->Y[0], PP->Z[0],
+		  fact*d, fact*dx, fact*dy, fact*dz,
+		  View->Offset, Raise);
+    }
+    break;
+    
+  case DRAW_POST_TENSOR :
+    break;
+    
+  }
+}
+
+/* ------------------------------------------------------------------------ */
+/*  L i n e s                                                               */
+/* ------------------------------------------------------------------------ */
+
+void Draw_Post_Line(Post_View *View, Post_Simplex *PL, 
+		    double ValMin, double ValMax, double Raise[3][5]){
+
+  int     i,k,nb=0;
+  double  d,dx,dy,dz,fact;
+  double  Xp[5],Yp[5],Zp[5],value[5],thev;
+  char    Num[100] ;
+
+  switch(PL->Type){	    
+  case DRAW_POST_SCALAR:	    
+
+    if(View->IntervalsType==DRAW_POST_NUMERIC){
+      d = (PL->V[2*View->TimeStep]+PL->V[2*View->TimeStep+1]) / 2.;
+      if(d >= ValMin && d <= ValMax){
+	sprintf(Num, "%g", d);
+	glColor4ubv((GLubyte*)&CTX.color.fg);
+	glRasterPos3d((PL->X[0] + PL->X[1])/2.,
+		      (PL->Y[0] + PL->Y[1])/2.,
+		      (PL->Z[0] + PL->Z[1])/2.);
+	Draw_String(Num);
+      }
+      break ;
+    }
+
+    glDisable(GL_LINE_STIPPLE);
+    for(k=0 ; k<2 ; k++) RaiseFill(k, PL->V[2*View->TimeStep+k], ValMin, Raise);
+
+    if(View->IntervalsType==DRAW_POST_CONTINUOUS){
+      glBegin(GL_LINES);
+      Palette2(View,ValMin,ValMax,PL->V[2*View->TimeStep]);
+      glVertex3d(PL->X[0]+View->Offset[0]+Raise[0][0],
+		 PL->Y[0]+View->Offset[1]+Raise[1][0],
+		 PL->Z[0]+View->Offset[2]+Raise[2][0]);
+      Palette2(View,ValMin,ValMax,PL->V[2*View->TimeStep+1]);
+      glVertex3d(PL->X[1]+View->Offset[0]+Raise[0][1],
+		 PL->Y[1]+View->Offset[1]+Raise[1][1],
+		 PL->Z[1]+View->Offset[2]+Raise[2][1]);
+      glEnd();
+    }
+    else{
+      for(k=0 ; k<View->NbIso ; k++){
+	Palette(View,View->NbIso,k);
+	if(View->IntervalsType==DRAW_POST_DISCRETE){
+	  CutLine1D(PL->X,PL->Y,PL->Z,&PL->V[2*View->TimeStep],
+		    View->GVFI(ValMin,ValMax,View->NbIso+1,k),
+		    View->GVFI(ValMin,ValMax,View->NbIso+1,k+1),
+		    ValMin,ValMax,Xp,Yp,Zp,&nb,value);	  
+	  if(nb == 2){
+	    for(i=0;i<2;i++) RaiseFill(i,value[i],ValMin,Raise);    
+	    Draw_Line(Xp,Yp,Zp,View->Offset,Raise);  
+	  }
+	}
+	else{
+	  thev = View->GVFI(ValMin,ValMax,View->NbIso,k);
+	  CutLine0D(PL->X,PL->Y,PL->Z,&PL->V[2*View->TimeStep],
+		    thev, ValMin,ValMax,Xp,Yp,Zp,&nb);	  
+	  if(nb){
+	    RaiseFill(0,thev,ValMin,Raise);
+	    Draw_Point(Xp,Yp,Zp,View->Offset,Raise);    
+	  }
+	}
+      }
+
+    }
+    break;
+    
+  case DRAW_POST_VECTOR:	    
+    if(View->ArrowLocation == DRAW_POST_LOCATE_COG){
+      dx = 0.5 * (PL->V[6*View->TimeStep]  +PL->V[6*View->TimeStep+3]);
+      dy = 0.5 * (PL->V[6*View->TimeStep+1]+PL->V[6*View->TimeStep+4]);
+      dz = 0.5 * (PL->V[6*View->TimeStep+2]+PL->V[6*View->TimeStep+5]);
+      d = sqrt(dx*dx+dy*dy+dz*dz);	    
+      if(d!=0.0 && d>=ValMin && d<=ValMax){	      
+	Palette(View,View->NbIso,View->GIFV(ValMin,ValMax,View->NbIso,d));	      
+	fact = 2.e-4 * LC * View->ArrowScale/View->Max ;		
+	if(View->ScaleType == DRAW_POST_LOGARITHMIC && ValMin>0){
+	  dx /= d ; dy /= d ; dz /= d ;
+	  d = log10(d/ValMin) ; 
+	  dx *= d ; dy *= d ; dz *= d ;
+	}
+	RaiseFill(0, d, ValMin, Raise);		
+	Draw_Vector(View->ArrowType, View->IntervalsType!=DRAW_POST_ISO,
+		    0.5 * (PL->X[0] + PL->X[1]),
+		    0.5 * (PL->Y[0] + PL->Y[1]),
+		    0.5 * (PL->Z[0] + PL->Z[1]),
+		    fact*d, fact*dx, fact*dy, fact*dz,
+		    View->Offset, Raise);
+      }
+    }
+    else{
+      for(k=0 ; k<2 ; k++){
+	dx = PL->V[6*View->TimeStep  +3*k] ;
+	dy = PL->V[6*View->TimeStep+1+3*k] ;
+	dz = PL->V[6*View->TimeStep+2+3*k] ;		  
+	d = sqrt(dx*dx+dy*dy+dz*dz);		
+	if(d!=0.0 && d>=ValMin && d<=ValMax){		
+	  Palette(View,View->NbIso,View->GIFV(ValMin,ValMax,View->NbIso,d));
+	  fact = 2.e-4 * LC * View->ArrowScale/View->Max ;		
+	  if(View->ScaleType == DRAW_POST_LOGARITHMIC && ValMin>0){
+	    dx /= d ; dy /= d ; dz /= d ;
+	    d = log10(d/ValMin) ; 
+	    dx *= d ; dy *= d ; dz *= d ;
+	  }
+	  RaiseFill(0, d, ValMin, Raise);		
+	  Draw_Vector(View->ArrowType, View->IntervalsType!=DRAW_POST_ISO,
+		      PL->X[k], PL->Y[k], PL->Z[k],
+		      fact*d, fact*dx, fact*dy, fact*dz,
+		      View->Offset, Raise);
+	}		
+      }	      
+    }
+    break;
+    
+  case DRAW_POST_TENSOR :
+    break;
+    
+  }
+}
+
+
+/* ------------------------------------------------------------------------ */
+/*  T r i a n g l e s                                                       */
+/* ------------------------------------------------------------------------ */
+
+void Draw_Post_Triangle(Post_View *View, Post_Simplex *PT, 
+			double ValMin, double ValMax, double Raise[3][5]){
+
+  int     i, k, m, nb=0;
+  double  d,dx,dy,dz,fact;
+  double  x1x0, y1y0, z1z0, x2x0, y2y0, z2z0, nn[3];
+  double  xx[3],yy[3],zz[3];
+  double  Xp[5],Yp[5],Zp[5],value[5],thev;
+  char    Num[100] ;
+
+  if(View->ShowElement)
+    glEnable(GL_POLYGON_OFFSET_FILL);
+
+  switch(PT->Type){	    
+    
+  case DRAW_POST_SCALAR:
+
+    if(View->IntervalsType==DRAW_POST_NUMERIC){
+      d = (PT->V[3*View->TimeStep]+PT->V[3*View->TimeStep+1]+PT->V[3*View->TimeStep+2]) / 3.;
+      if(d >= ValMin && d <= ValMax){
+	sprintf(Num, "%g", d);
+	glColor4ubv((GLubyte*)&CTX.color.fg);
+	glRasterPos3d((PT->X[0] + PT->X[1] + PT->X[2])/3.,
+		      (PT->Y[0] + PT->Y[1] + PT->Y[2])/3.,
+		      (PT->Z[0] + PT->Z[1] + PT->Z[2])/3.);
+	Draw_String(Num);
+      }
+      break ;
+    }
+
+    if(View->IntervalsType!=DRAW_POST_ISO)
+      for(i=0;i<3;i++)RaiseFill(i, PT->V[3*View->TimeStep+i], ValMin, Raise);
+    
+    if(View->Light){
+      x1x0 = (PT->X[1]+Raise[0][1]) - (PT->X[0]+Raise[0][0]); 
+      y1y0 = (PT->Y[1]+Raise[1][1]) - (PT->Y[0]+Raise[1][0]);
+      z1z0 = (PT->Z[1]+Raise[2][1]) - (PT->Z[0]+Raise[2][0]); 
+      x2x0 = (PT->X[2]+Raise[0][2]) - (PT->X[0]+Raise[0][0]);
+      y2y0 = (PT->Y[2]+Raise[1][2]) - (PT->Y[0]+Raise[1][0]); 
+      z2z0 = (PT->Z[2]+Raise[2][2]) - (PT->Z[0]+Raise[2][0]);
+      nn[0]  = y1y0 * z2z0 - z1z0 * y2y0 ;
+      nn[1]  = z1z0 * x2x0 - x1x0 * z2z0 ;
+      nn[2]  = x1x0 * y2y0 - y1y0 * x2x0 ;
+      //norme(nn); unnecessary with   glEnable(GL_NORMALIZE);
+      /* BOF BOF BOF 
+      if(nn[2] < -0.1){
+	nn[0] = -nn[0];
+	nn[1] = -nn[1];
+	nn[2] = -nn[2];
+      }
+      */
+      glNormal3dv(nn);
+    }
+
+    if(View->IntervalsType==DRAW_POST_CONTINUOUS){
+      if(PT->V[3*View->TimeStep]  >=ValMin && PT->V[3*View->TimeStep]  <=ValMax &&
+	 PT->V[3*View->TimeStep+1]>=ValMin && PT->V[3*View->TimeStep+1]<=ValMax &&
+	 PT->V[3*View->TimeStep+2]>=ValMin && PT->V[3*View->TimeStep+2]<=ValMax){
+	glBegin(GL_TRIANGLES);
+	Palette2(View,ValMin,ValMax,PT->V[3*View->TimeStep]);
+	glVertex3d(PT->X[0]+View->Offset[0]+Raise[0][0],
+		   PT->Y[0]+View->Offset[1]+Raise[1][0],
+		   PT->Z[0]+View->Offset[2]+Raise[2][0]);
+	Palette2(View,ValMin,ValMax,PT->V[3*View->TimeStep+1]);
+	glVertex3d(PT->X[1]+View->Offset[0]+Raise[0][1],
+		   PT->Y[1]+View->Offset[1]+Raise[1][1],
+		   PT->Z[1]+View->Offset[2]+Raise[2][1]);
+	Palette2(View,ValMin,ValMax,PT->V[3*View->TimeStep+2]);
+	glVertex3d(PT->X[2]+View->Offset[0]+Raise[0][2],
+		   PT->Y[2]+View->Offset[1]+Raise[1][2],
+		   PT->Z[2]+View->Offset[2]+Raise[2][2]);
+	glEnd();
+      }
+      else{
+	CutTriangle2D(PT->X,PT->Y,PT->Z,&PT->V[3*View->TimeStep],
+		      ValMin,ValMax,ValMin,ValMax,
+		      Xp,Yp,Zp,&nb,value);
+	if(nb >= 3){	  
+	  glBegin(GL_POLYGON);
+	  for(i=0;i<nb;i++){
+	    Palette2(View,ValMin,ValMax,value[i]);
+	    RaiseFill(i,value[i],ValMin,Raise);
+	    glVertex3d(Xp[i]+View->Offset[0]+Raise[0][i],
+		       Yp[i]+View->Offset[1]+Raise[1][i],
+		       Zp[i]+View->Offset[2]+Raise[2][i]);
+	  }
+	  glEnd();
+	}
+      }
+    }
+    else{
+      for(k=0 ; k<View->NbIso ; k++){
+	if(View->IntervalsType==DRAW_POST_DISCRETE){
+	  Palette(View,View->NbIso,k);
+	  CutTriangle2D(PT->X,PT->Y,PT->Z,&PT->V[3*View->TimeStep],
+			View->GVFI(ValMin,ValMax,View->NbIso+1,k),
+			View->GVFI(ValMin,ValMax,View->NbIso+1,k+1),
+			ValMin,ValMax,
+			Xp,Yp,Zp,&nb,value);	  
+	  if(nb >= 3){
+	    for(i=0;i<nb;i++) RaiseFill(i,value[i],ValMin,Raise);    
+	    Draw_Polygon(nb,Xp,Yp,Zp,View->Offset,Raise);  
+	  }
+	}
+	else{
+	  Palette(View,View->NbIso,k);
+
+	  thev = View->GVFI(ValMin,ValMax,View->NbIso,k);
+	  CutTriangle1D(PT->X,PT->Y,PT->Z,&PT->V[3*View->TimeStep],
+			thev, ValMin,ValMax,Xp,Yp,Zp,&nb);	  
+	  if(nb == 2){
+	    for(i=0;i<2;i++) RaiseFill(i,thev,ValMin,Raise);
+	    Draw_Line(Xp,Yp,Zp,View->Offset,Raise);    
+	  }
+	}
+      }
+    }
+    break;
+    
+  case DRAW_POST_VECTOR:
+    
+    if(View->ArrowType == DRAW_POST_DISPLACEMENT){
+      fact = View->ArrowScale/100. ;
+      for(m=0;m<3;m++){
+	xx[m] = PT->X[m] + fact * PT->V[9*View->TimeStep + 3 * m ];
+	yy[m] = PT->Y[m] + fact * PT->V[9*View->TimeStep + 3 * m + 1];
+	zz[m] = PT->Z[m] + fact * PT->V[9*View->TimeStep + 3 * m + 2];
+      }
+      glEnable(GL_POLYGON_OFFSET_FILL);
+      glColor4ubv((GLubyte*)&CTX.color.bg);
+      if(View->IntervalsType!=DRAW_POST_ISO)
+	Draw_Polygon (3, xx, yy, zz, View->Offset, Raise);
+      glColor4ubv((GLubyte*)&CTX.color.fg);
+      glBegin(GL_LINE_LOOP);
+      for(m=0 ; m<3 ; m++) glVertex3d(xx[m], yy[m], zz[m]);
+      glEnd();
+      glDisable(GL_POLYGON_OFFSET_FILL);      
+      break;
+    }
+    
+    if(View->ArrowLocation == DRAW_POST_LOCATE_COG){
+      dx = (PT->V[9*View->TimeStep]  +PT->V[9*View->TimeStep+3]+PT->V[9*View->TimeStep+6])/3.;
+      dy = (PT->V[9*View->TimeStep+1]+PT->V[9*View->TimeStep+4]+PT->V[9*View->TimeStep+7])/3.;
+      dz = (PT->V[9*View->TimeStep+2]+PT->V[9*View->TimeStep+5]+PT->V[9*View->TimeStep+8])/3.;
+      d = sqrt(dx*dx+dy*dy+dz*dz);
+      if(d!=0.0 && d>=ValMin && d<=ValMax){		
+	Palette(View,View->NbIso,View->GIFV(ValMin,ValMax,View->NbIso,d));	      
+	fact = 2.e-4 * LC * View->ArrowScale/View->Max ;		
+	if(View->ScaleType == DRAW_POST_LOGARITHMIC && ValMin>0){
+	  dx /= d ; dy /= d ; dz /= d ;
+	  d = log10(d/ValMin) ; 
+	  dx *= d ; dy *= d ; dz *= d ;
+	}
+	RaiseFill(0, d, ValMin, Raise);		
+	Draw_Vector(View->ArrowType, View->IntervalsType!=DRAW_POST_ISO,
+		    (PT->X[0] + PT->X[1] + PT->X[2])/3.,
+		    (PT->Y[0] + PT->Y[1] + PT->Y[2])/3.,
+		    (PT->Z[0] + PT->Z[1] + PT->Z[2])/3.,
+		    fact*d, fact*dx, fact*dy, fact*dz,
+		    View->Offset, Raise);
+      }
+    }
+    else{
+      for(k=0 ; k<3 ; k++){
+	dx = PT->V[9*View->TimeStep  +3*k] ;
+	dy = PT->V[9*View->TimeStep+1+3*k] ;
+	dz = PT->V[9*View->TimeStep+2+3*k] ;		  
+	d = sqrt(dx*dx+dy*dy+dz*dz);
+	
+	if(d!=0.0 && d>=ValMin && d<=ValMax){		
+	  Palette(View,View->NbIso,View->GIFV(ValMin,ValMax,View->NbIso,d));
+	  fact = 2.e-4 * LC * View->ArrowScale/View->Max ;		
+	  if(View->ScaleType == DRAW_POST_LOGARITHMIC && ValMin>0){
+	    dx /= d ; dy /= d ; dz /= d ;
+	    d = log10(d/ValMin) ; 
+	    dx *= d ; dy *= d ; dz *= d ;
+	  }
+	  RaiseFill(0, d, ValMin, Raise);				  
+	  Draw_Vector(View->ArrowType, View->IntervalsType!=DRAW_POST_ISO,
+		      PT->X[k], PT->Y[k], PT->Z[k],
+		      fact*d, fact*dx, fact*dy, fact*dz,
+		      View->Offset, Raise);
+	  
+	}		
+      }	      
+    }
+    break;
+    
+  case DRAW_POST_TENSOR :
+    break;
+    
+  }
+
+  if(View->ShowElement){
+    glDisable(GL_POLYGON_OFFSET_FILL) ;
+    glColor4ubv((GLubyte*)&CTX.color.fg);
+    glBegin(GL_LINE_LOOP);
+    for(i=0 ; i<3 ; i++) 
+      glVertex3d(PT->X[i]+View->Offset[0]+Raise[0][i],
+		 PT->Y[i]+View->Offset[1]+Raise[1][i],
+		 PT->Z[i]+View->Offset[2]+Raise[2][i]);
+    glEnd();
+  }
+
+}
+
+
+
+
+/* ------------------------------------------------------------------------ */
+/*  T e t r a h e d r a                                                     */
+/* ------------------------------------------------------------------------ */
+
+void Draw_Post_Tetrahedron(Post_View *View, Post_Simplex *PS, 
+			   double ValMin, double ValMax, double Raise[3][5]){
 
   int     k;
   double  d,dx,dy,dz,fact;
diff --git a/Graphics/PostTriangle.cpp b/Graphics/PostTriangle.cpp
deleted file mode 100644
index f27cca89d4..0000000000
--- a/Graphics/PostTriangle.cpp
+++ /dev/null
@@ -1,220 +0,0 @@
-/* $Id: PostTriangle.cpp,v 1.2 2000-11-23 14:11:32 geuzaine Exp $ */
-
-#include "Gmsh.h"
-#include "GmshUI.h"
-#include "Geo.h"
-#include "Mesh.h"
-#include "Draw.h"
-#include "Iso.h"
-#include "Context.h"
-
-extern Context_T   CTX;
-extern double      LC;
-
-void Draw_Post_Triangle(Post_View *View, Post_Triangle *PT, 
-			double ValMin, double ValMax, double Raise[3][5]){
-
-  int     i, k, m, nb=0;
-  double  d,dx,dy,dz,fact;
-  double  x1x0, y1y0, z1z0, x2x0, y2y0, z2z0, nn[3];
-  double  xx[3],yy[3],zz[3];
-  double  Xp[5],Yp[5],Zp[5],value[5],thev;
-  char    Num[100] ;
-
-  if(View->ShowElement)
-    glEnable(GL_POLYGON_OFFSET_FILL);
-
-  switch(PT->Type){	    
-    
-  case DRAW_POST_SCALAR:
-
-    if(View->IntervalsType==DRAW_POST_NUMERIC){
-      d = (PT->V[3*View->TimeStep]+PT->V[3*View->TimeStep+1]+PT->V[3*View->TimeStep+2]) / 3.;
-      if(d >= ValMin && d <= ValMax){
-	sprintf(Num, "%g", d);
-	glColor4ubv((GLubyte*)&CTX.color.fg);
-	glRasterPos3d((PT->X[0] + PT->X[1] + PT->X[2])/3.,
-		      (PT->Y[0] + PT->Y[1] + PT->Y[2])/3.,
-		      (PT->Z[0] + PT->Z[1] + PT->Z[2])/3.);
-	Draw_String(Num);
-      }
-      break ;
-    }
-
-    if(View->IntervalsType!=DRAW_POST_ISO)
-      for(i=0;i<3;i++)RaiseFill(i, PT->V[3*View->TimeStep+i], ValMin, Raise);
-    
-    if(View->Light){
-      x1x0 = (PT->X[1]+Raise[0][1]) - (PT->X[0]+Raise[0][0]); 
-      y1y0 = (PT->Y[1]+Raise[1][1]) - (PT->Y[0]+Raise[1][0]);
-      z1z0 = (PT->Z[1]+Raise[2][1]) - (PT->Z[0]+Raise[2][0]); 
-      x2x0 = (PT->X[2]+Raise[0][2]) - (PT->X[0]+Raise[0][0]);
-      y2y0 = (PT->Y[2]+Raise[1][2]) - (PT->Y[0]+Raise[1][0]); 
-      z2z0 = (PT->Z[2]+Raise[2][2]) - (PT->Z[0]+Raise[2][0]);
-      nn[0]  = y1y0 * z2z0 - z1z0 * y2y0 ;
-      nn[1]  = z1z0 * x2x0 - x1x0 * z2z0 ;
-      nn[2]  = x1x0 * y2y0 - y1y0 * x2x0 ;
-      //norme(nn); unnecessary with   glEnable(GL_NORMALIZE);
-      /* BOF BOF BOF 
-      if(nn[2] < -0.1){
-	nn[0] = -nn[0];
-	nn[1] = -nn[1];
-	nn[2] = -nn[2];
-      }
-      */
-      glNormal3dv(nn);
-    }
-
-    if(View->IntervalsType==DRAW_POST_CONTINUOUS){
-      if(PT->V[3*View->TimeStep]  >=ValMin && PT->V[3*View->TimeStep]  <=ValMax &&
-	 PT->V[3*View->TimeStep+1]>=ValMin && PT->V[3*View->TimeStep+1]<=ValMax &&
-	 PT->V[3*View->TimeStep+2]>=ValMin && PT->V[3*View->TimeStep+2]<=ValMax){
-	glBegin(GL_TRIANGLES);
-	Palette2(View,ValMin,ValMax,PT->V[3*View->TimeStep]);
-	glVertex3d(PT->X[0]+View->Offset[0]+Raise[0][0],
-		   PT->Y[0]+View->Offset[1]+Raise[1][0],
-		   PT->Z[0]+View->Offset[2]+Raise[2][0]);
-	Palette2(View,ValMin,ValMax,PT->V[3*View->TimeStep+1]);
-	glVertex3d(PT->X[1]+View->Offset[0]+Raise[0][1],
-		   PT->Y[1]+View->Offset[1]+Raise[1][1],
-		   PT->Z[1]+View->Offset[2]+Raise[2][1]);
-	Palette2(View,ValMin,ValMax,PT->V[3*View->TimeStep+2]);
-	glVertex3d(PT->X[2]+View->Offset[0]+Raise[0][2],
-		   PT->Y[2]+View->Offset[1]+Raise[1][2],
-		   PT->Z[2]+View->Offset[2]+Raise[2][2]);
-	glEnd();
-      }
-      else{
-	CutTriangle2D(PT->X,PT->Y,PT->Z,&PT->V[3*View->TimeStep],
-		      ValMin,ValMax,ValMin,ValMax,
-		      Xp,Yp,Zp,&nb,value);
-	if(nb >= 3){	  
-	  glBegin(GL_POLYGON);
-	  for(i=0;i<nb;i++){
-	    Palette2(View,ValMin,ValMax,value[i]);
-	    RaiseFill(i,value[i],ValMin,Raise);
-	    glVertex3d(Xp[i]+View->Offset[0]+Raise[0][i],
-		       Yp[i]+View->Offset[1]+Raise[1][i],
-		       Zp[i]+View->Offset[2]+Raise[2][i]);
-	  }
-	  glEnd();
-	}
-      }
-    }
-    else{
-      for(k=0 ; k<View->NbIso ; k++){
-	if(View->IntervalsType==DRAW_POST_DISCRETE){
-	  Palette(View,View->NbIso,k);
-	  CutTriangle2D(PT->X,PT->Y,PT->Z,&PT->V[3*View->TimeStep],
-			View->GVFI(ValMin,ValMax,View->NbIso+1,k),
-			View->GVFI(ValMin,ValMax,View->NbIso+1,k+1),
-			ValMin,ValMax,
-			Xp,Yp,Zp,&nb,value);	  
-	  if(nb >= 3){
-	    for(i=0;i<nb;i++) RaiseFill(i,value[i],ValMin,Raise);    
-	    Draw_Polygon(nb,Xp,Yp,Zp,View->Offset,Raise);  
-	  }
-	}
-	else{
-	  Palette(View,View->NbIso,k);
-
-	  thev = View->GVFI(ValMin,ValMax,View->NbIso,k);
-	  CutTriangle1D(PT->X,PT->Y,PT->Z,&PT->V[3*View->TimeStep],
-			thev, ValMin,ValMax,Xp,Yp,Zp,&nb);	  
-	  if(nb == 2){
-	    for(i=0;i<2;i++) RaiseFill(i,thev,ValMin,Raise);
-	    Draw_Line(Xp,Yp,Zp,View->Offset,Raise);    
-	  }
-	}
-      }
-    }
-    break;
-    
-  case DRAW_POST_VECTOR:
-    
-    if(View->ArrowType == DRAW_POST_DISPLACEMENT){
-      fact = View->ArrowScale/100. ;
-      for(m=0;m<3;m++){
-	xx[m] = PT->X[m] + fact * PT->V[9*View->TimeStep + 3 * m ];
-	yy[m] = PT->Y[m] + fact * PT->V[9*View->TimeStep + 3 * m + 1];
-	zz[m] = PT->Z[m] + fact * PT->V[9*View->TimeStep + 3 * m + 2];
-      }
-      glEnable(GL_POLYGON_OFFSET_FILL);
-      glColor4ubv((GLubyte*)&CTX.color.bg);
-      if(View->IntervalsType!=DRAW_POST_ISO)
-	Draw_Polygon (3, xx, yy, zz, View->Offset, Raise);
-      glColor4ubv((GLubyte*)&CTX.color.fg);
-      glBegin(GL_LINE_LOOP);
-      for(m=0 ; m<3 ; m++) glVertex3d(xx[m], yy[m], zz[m]);
-      glEnd();
-      glDisable(GL_POLYGON_OFFSET_FILL);      
-      break;
-    }
-    
-    if(View->ArrowLocation == DRAW_POST_LOCATE_COG){
-      dx = (PT->V[9*View->TimeStep]  +PT->V[9*View->TimeStep+3]+PT->V[9*View->TimeStep+6])/3.;
-      dy = (PT->V[9*View->TimeStep+1]+PT->V[9*View->TimeStep+4]+PT->V[9*View->TimeStep+7])/3.;
-      dz = (PT->V[9*View->TimeStep+2]+PT->V[9*View->TimeStep+5]+PT->V[9*View->TimeStep+8])/3.;
-      d = sqrt(dx*dx+dy*dy+dz*dz);
-      if(d!=0.0 && d>=ValMin && d<=ValMax){		
-	Palette(View,View->NbIso,View->GIFV(ValMin,ValMax,View->NbIso,d));	      
-	fact = 2.e-4 * LC * View->ArrowScale/View->Max ;		
-	if(View->ScaleType == DRAW_POST_LOGARITHMIC && ValMin>0){
-	  dx /= d ; dy /= d ; dz /= d ;
-	  d = log10(d/ValMin) ; 
-	  dx *= d ; dy *= d ; dz *= d ;
-	}
-	RaiseFill(0, d, ValMin, Raise);		
-	Draw_Vector(View->ArrowType, View->IntervalsType!=DRAW_POST_ISO,
-		    (PT->X[0] + PT->X[1] + PT->X[2])/3.,
-		    (PT->Y[0] + PT->Y[1] + PT->Y[2])/3.,
-		    (PT->Z[0] + PT->Z[1] + PT->Z[2])/3.,
-		    fact*d, fact*dx, fact*dy, fact*dz,
-		    View->Offset, Raise);
-      }
-    }
-    else{
-      for(k=0 ; k<3 ; k++){
-	dx = PT->V[9*View->TimeStep  +3*k] ;
-	dy = PT->V[9*View->TimeStep+1+3*k] ;
-	dz = PT->V[9*View->TimeStep+2+3*k] ;		  
-	d = sqrt(dx*dx+dy*dy+dz*dz);
-	
-	if(d!=0.0 && d>=ValMin && d<=ValMax){		
-	  Palette(View,View->NbIso,View->GIFV(ValMin,ValMax,View->NbIso,d));
-	  fact = 2.e-4 * LC * View->ArrowScale/View->Max ;		
-	  if(View->ScaleType == DRAW_POST_LOGARITHMIC && ValMin>0){
-	    dx /= d ; dy /= d ; dz /= d ;
-	    d = log10(d/ValMin) ; 
-	    dx *= d ; dy *= d ; dz *= d ;
-	  }
-	  RaiseFill(0, d, ValMin, Raise);				  
-	  Draw_Vector(View->ArrowType, View->IntervalsType!=DRAW_POST_ISO,
-		      PT->X[k], PT->Y[k], PT->Z[k],
-		      fact*d, fact*dx, fact*dy, fact*dz,
-		      View->Offset, Raise);
-	  
-	}		
-      }	      
-    }
-    break;
-    
-  case DRAW_POST_TENSOR :
-    break;
-    
-  }
-
-  if(View->ShowElement){
-    glDisable(GL_POLYGON_OFFSET_FILL) ;
-    glColor4ubv((GLubyte*)&CTX.color.fg);
-    glBegin(GL_LINE_LOOP);
-    for(i=0 ; i<3 ; i++) 
-      glVertex3d(PT->X[i]+View->Offset[0]+Raise[0][i],
-		 PT->Y[i]+View->Offset[1]+Raise[1][i],
-		 PT->Z[i]+View->Offset[2]+Raise[2][i]);
-    glEnd();
-  }
-
-}
-
-
diff --git a/Makefile b/Makefile
index e8e58e21b9..0f36a04414 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,6 @@
+# $Id: Makefile,v 1.5 2000-11-25 15:26:10 geuzaine Exp $
 # ----------------------------------------------------------------------
-#  Makefile for gmsh  
+#  Makefile for Gmsh  
 # ----------------------------------------------------------------------
 
     GMSH_RELEASE = 0.995
diff --git a/Mesh/1D_Mesh.cpp b/Mesh/1D_Mesh.cpp
index e3abe561e2..3426d58972 100644
--- a/Mesh/1D_Mesh.cpp
+++ b/Mesh/1D_Mesh.cpp
@@ -1,4 +1,4 @@
-/* $Id: 1D_Mesh.cpp,v 1.4 2000-11-23 23:20:35 geuzaine Exp $ */
+/* $Id: 1D_Mesh.cpp,v 1.5 2000-11-25 15:26:11 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "Const.h"
@@ -14,7 +14,7 @@ extern int        CurrentNodeNumber;
 
 Curve *THEC;
 
-double Fun (double t){
+double F_One (double t){
   Vertex der;
   double d;
   der = InterpolateCurve (THEC, t, 1);
@@ -24,51 +24,56 @@ double Fun (double t){
 
 double F_Transfini (double t){
   Vertex der;
-  double d, a, b, ZePauwer;
+  double d, a, b, val, ZePauwer;
 
   der = InterpolateCurve (THEC, t, 1);
   d = sqrt (der.Pos.X * der.Pos.X + der.Pos.Y * der.Pos.Y +
 	    der.Pos.Z * der.Pos.Z);
 
-  if (THEC->dpar[0] == 0.0 || THEC->dpar[0] == 1.0)
-    return (d * (double) THEC->ipar[0] / (THEC->l));
-
-  switch (abs (THEC->ipar[1])){
-
-  case 2:
-    if (sign (THEC->ipar[1]) == -1)
-      ZePauwer = 1. / THEC->dpar[0];
-    else
-      ZePauwer = THEC->dpar[0];
-    b = log (1. / ZePauwer) / THEC->l;
-    a = (1. - exp (-b * THEC->l)) / (b * (double) THEC->ipar[0]);
-    return (d / (a * exp (b * (t * THEC->l))));
-
-  case 1:
-    if (THEC->dpar[0] > 1.0){
-      a = -4. * sqrt (THEC->dpar[0] - 1.) * 
-	atan2 (1., sqrt (THEC->dpar[0] - 1.)) / 
-	((double) THEC->ipar[0] * THEC->l);
-    }
-    else{
-      a = 2. * sqrt (1. - THEC->dpar[0]) * 
-	log (fabs ((1. + 1. / sqrt (1. - THEC->dpar[0])) 
-		   / (1. - 1. / sqrt (1. - THEC->dpar[0]))))
-	/ ((double) THEC->ipar[0] * THEC->l);
-    }
-    b = -a * THEC->l * THEC->l / (4. * (THEC->dpar[0] - 1.));
-    return (d / (-a * DSQR (t * THEC->l - (THEC->l) * 0.5) + b));
+  if (THEC->dpar[0] == 0.0 || THEC->dpar[0] == 1.0){
+    val = d * (double) THEC->ipar[0] / THEC->l ;
+  }
+  else{
+    switch (abs (THEC->ipar[1])){
+
+    case 2:
+      if (sign (THEC->ipar[1]) == -1)
+	ZePauwer = 1. / THEC->dpar[0];
+      else
+	ZePauwer = THEC->dpar[0];
+      b = log (1. / ZePauwer) / THEC->l;
+      a = (1. - exp (-b * THEC->l)) / (b * (double) THEC->ipar[0]);
+      val =d / (a * exp (b * (t * THEC->l))) ;
+      break ;
+
+    case 1:
+      if (THEC->dpar[0] > 1.0){
+	a = -4. * sqrt (THEC->dpar[0] - 1.) * 
+	  atan2 (1., sqrt (THEC->dpar[0] - 1.)) / 
+	  ((double) THEC->ipar[0] * THEC->l);
+      }
+      else{
+	a = 2. * sqrt (1. - THEC->dpar[0]) * 
+	  log (fabs ((1. + 1. / sqrt (1. - THEC->dpar[0])) 
+		     / (1. - 1. / sqrt (1. - THEC->dpar[0]))))
+	  / ((double) THEC->ipar[0] * THEC->l);
+      }
+      b = -a * THEC->l * THEC->l / (4. * (THEC->dpar[0] - 1.)) ;
+      val = d / (-a * DSQR (t * THEC->l - (THEC->l) * 0.5) + b) ;
+      break ;
 
-  default:
-    Msg(WARNING, "Unknown Case in Transfinite Mesh Line");
-    return 1. ;
+    default:
+      Msg(WARNING, "Unknown Case in Transfinite Mesh Line");
+      val = 1. ;
+    }
+    
   }
-  
+
+  return val ;
 }
 
-double Flc (double t){
-  double k = THEM->Metric->getLc (t, THEC);
-  return (k);
+double F_Lc (double t){
+  return THEM->Metric->getLc(t, THEC);
 }
 
 double CIRC_GRAN = 10.;
@@ -93,12 +98,12 @@ void Maillage_Curve (void *data, void *dummy){
 
   if (c->Method != TRANSFINI && Extrude_Mesh (c)){
     Points = List_Create (10, 10, sizeof (IntPoint));
-    c->l = Integration (c->ubeg, c->uend, Fun, Points, 1.e-5);
+    c->l = Integration (c->ubeg, c->uend, F_One, Points, 1.e-5);
     List_Delete (Points);
   }
   else{
     Points = List_Create (10, 10, sizeof (IntPoint));
-    c->l = Integration (c->ubeg, c->uend, Fun, Points, 1.e-5);
+    c->l = Integration (c->ubeg, c->uend, F_One, Points, 1.e-5);
     List_Delete (Points);
     
     if (c->Method == TRANSFINI){
@@ -108,7 +113,7 @@ void Maillage_Curve (void *data, void *dummy){
     }
     else{
       Points = List_Create (10, 10, sizeof (IntPoint));
-      a = Integration (c->ubeg, c->uend, Flc, Points, 1.e-5);
+      a = Integration (c->ubeg, c->uend, F_Lc, Points, 1.e-5);
       N = IMAX (2, (int) (a + 1.));
       if (c->Typ == MSH_SEGM_CIRC ||
 	  c->Typ == MSH_SEGM_CIRC_INV ||
@@ -174,7 +179,8 @@ void Maillage_Curve (void *data, void *dummy){
       List_Add (c->Vertices, vexist);
     }
     else{
-      pV = Create_Vertex ((*v)->Num, (*v)->Pos.X, (*v)->Pos.Y, (*v)->Pos.Z, (*v)->lc, 0.0);
+      pV = Create_Vertex ((*v)->Num, (*v)->Pos.X, (*v)->Pos.Y, 
+			  (*v)->Pos.Z, (*v)->lc, 0.0);
       pV->ListCurves = List_Create (1, 1, sizeof (Curve *));
       List_Add (pV->ListCurves, &c);
       Tree_Insert (THEM->Vertices, &pV);
diff --git a/Mesh/2D_DivAndConq.cpp b/Mesh/2D_DivAndConq.cpp
index 2540f7c7ef..bd9b0c0114 100644
--- a/Mesh/2D_DivAndConq.cpp
+++ b/Mesh/2D_DivAndConq.cpp
@@ -1,4 +1,4 @@
-/* $Id: 2D_DivAndConq.cpp,v 1.3 2000-11-23 23:20:35 geuzaine Exp $ */
+/* $Id: 2D_DivAndConq.cpp,v 1.4 2000-11-25 15:26:11 geuzaine Exp $ */
 /*
 
    A L G O R I T H M E    D I V I D E    A N D     C O N Q U E R   
@@ -163,7 +163,7 @@ int Qtest(PointNumero h,PointNumero i,PointNumero j,PointNumero k){
   double xc,yc,rcarre,distca;
   
   if ((h == i) && (h == j) && (h == k)){
-    Msg(WARNING, "3 Points Identical in Qtest"); 
+    Msg(ERROR, "3 Points Identical in Qtest"); 
     return(0);  /* returning 1 will cause looping for ever */
   }
   if (CircumCircle( (double) pPointArray[h].where.h,
diff --git a/Mesh/2D_Mesh.cpp b/Mesh/2D_Mesh.cpp
index 8a9ee33322..bbcc66611c 100644
--- a/Mesh/2D_Mesh.cpp
+++ b/Mesh/2D_Mesh.cpp
@@ -1,4 +1,4 @@
-/* $Id: 2D_Mesh.cpp,v 1.5 2000-11-24 08:04:14 geuzaine Exp $ */
+/* $Id: 2D_Mesh.cpp,v 1.6 2000-11-25 15:26:11 geuzaine Exp $ */
 /*
    Maillage Delaunay d'une surface (Point insertion Technique)
 
@@ -27,7 +27,7 @@
 extern Mesh       *THEM;
 extern Context_T   CTX;
 extern int         CurrentNodeNumber;
-extern double      LC, FACTEUR_MULTIPLICATIF;
+extern double      LC;
 
 int LocalNewPoint;
 
@@ -849,8 +849,8 @@ void Maillage_Automatique_VieuxCode (Surface * pS, Mesh * m, int ori){
       cp->oriented_points[j].where.h = v->Pos.X;
       cp->oriented_points[j].where.v = v->Pos.Y;
 
-      cp->perturbations[j].h = RAND_LONG;
-      cp->perturbations[j].v = RAND_LONG;
+      cp->perturbations[j].h = 10*RAND_LONG;
+      cp->perturbations[j].v = 10*RAND_LONG;
       cp->oriented_points[j].numcontour = i;
       cp->oriented_points[j].quality = v->lc;
       cp->oriented_points[j].permu = k++;
@@ -944,7 +944,7 @@ void filldel (Delaunay * deladd, int aa, int bb, int cc,
   pt2.v = deladd->t.yc;
   if (!is_3D){
     if (mesh){
-      newqual = FACTEUR_MULTIPLICATIF * find_quality (pt2, mesh);
+      newqual = find_quality (pt2, mesh);
     }
     else{
       newqual = (points[aa].quality + points[bb].quality + points[cc].quality) / 3.;
diff --git a/Mesh/2D_Mesh_Aniso.cpp b/Mesh/2D_Mesh_Aniso.cpp
index e73c4b0d7b..5bcc6ea6b7 100644
--- a/Mesh/2D_Mesh_Aniso.cpp
+++ b/Mesh/2D_Mesh_Aniso.cpp
@@ -1,4 +1,4 @@
-/* $Id: 2D_Mesh_Aniso.cpp,v 1.6 2000-11-23 23:20:35 geuzaine Exp $ */
+/* $Id: 2D_Mesh_Aniso.cpp,v 1.7 2000-11-25 15:26:11 geuzaine Exp $ */
 /*
    Jean-Francois Remacle
 
@@ -18,7 +18,8 @@
 
 extern Context_T CTX ;
 
-void draw_polygon_2d (double r, double g, double b, int n, double *x, double *y, double *z);
+void draw_polygon_2d (double r, double g, double b, int n, 
+		      double *x, double *y, double *z);
 
 MeshParameters:: MeshParameters ():
   NbSmoothing (3),
@@ -33,12 +34,12 @@ MeshParameters:: MeshParameters ():
 extern Simplex MyNewBoundary;
 extern Mesh *THEM;
 extern int CurrentNodeNumber;
-extern double MAXIMUM_LC_FOR_SURFACE, LC, FACTEUR_MULTIPLICATIF;
+extern double MAXIMUM_LC_FOR_SURFACE, LC;
 extern int Alerte_Point_Scabreux;
 extern PointRecord *gPointArray;
 extern Surface *PARAMETRIC;
 
-static Tree_T *Tsd, *Sim_Sur_Le_Bord /*,*POINTS_TREE */ ;
+static Tree_T *Tsd, *Sim_Sur_Le_Bord ;
 static List_T *Simplexes_Destroyed, *Simplexes_New, *Suppress;
 static Simplex *THES;
 static Vertex *THEV;
@@ -49,8 +50,6 @@ static double volume;
 static List_T *coquille;
 static Edge *THEEDGE;
 
-extern void Make_Mesh_With_Points (DocRecord * ptr, PointRecord * Liste, int Numpoints);
-
 double Interpole_lcTriangle (Simplex * s, Vertex * vv){
   double Xp, Yp, X[3], Y[3], det, u, v, q1, q2, q3;
 
diff --git a/Mesh/3D_BGMesh.cpp b/Mesh/3D_BGMesh.cpp
index 6e0f1ad22a..0364922a55 100644
--- a/Mesh/3D_BGMesh.cpp
+++ b/Mesh/3D_BGMesh.cpp
@@ -1,4 +1,4 @@
-/* $Id: 3D_BGMesh.cpp,v 1.7 2000-11-24 09:43:53 geuzaine Exp $ */
+/* $Id: 3D_BGMesh.cpp,v 1.8 2000-11-25 15:26:11 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "Mesh.h"
@@ -8,10 +8,7 @@
 #include "Views.h"
 #include "Numeric.h"
 
-extern double FACTEUR_MULTIPLICATIF;
-
 static Mesh m;
-static Vertex vvv;
 static double XX, YY, ZZ, D, LL;
 
 void ExportLcFieldOnVolume (Mesh * M){
@@ -109,7 +106,7 @@ double Lc_XYZ (double X, double Y, double Z, Mesh * m){
     }
     break;
   }
-  return (FACTEUR_MULTIPLICATIF * l);
+  return l;
 }
 
 /* ------------------------------------------------------------------------ */
@@ -129,8 +126,7 @@ int BGMWithView (Post_View * ErrView){
   extern int TYPBGMESH;
   extern Mesh *THEM;
   int i, j, k;
-  Post_Simplex s;
-  Post_Triangle t;
+  Post_Simplex s, t;
   Simplex *si;
 
   VertexUp = Create_Vertex (-1, 0., 0., 1., 1., -1.0);
@@ -155,8 +151,7 @@ int BGMWithView (Post_View * ErrView){
 	//ver[j] = v;
       }
       else{
-	v = Create_Vertex (k++, t.X[j], t.Y[j], t.Z[j]
-			   ,t.V[j], -1.0);
+	v = Create_Vertex (k++, t.X[j], t.Y[j], t.Z[j], t.V[j], -1.0);
 	ver[j] = v;
 	Tree_Add (m.Vertices, &v);
 	Tree_Add (Pts, &v);
@@ -166,8 +161,8 @@ int BGMWithView (Post_View * ErrView){
     Tree_Add (m.Simplexes, &si);
   }
   
-  for (i = 0; i < List_Nbr (ErrView->Simplices); i++){
-    List_Read (ErrView->Simplices, i, &s);
+  for (i = 0; i < List_Nbr (ErrView->Tetrahedra); i++){
+    List_Read (ErrView->Tetrahedra, i, &s);
     for (j = 0; j < 4; j++){
       v = &V;
       v->Pos.X = s.X[j];
@@ -214,8 +209,7 @@ int BGMWithView (Post_View * ErrView){
 
 double ErrorInView (Post_View * ErrView, int *n){
 
-  Post_Triangle t;
-  Post_Simplex s;
+  Post_Simplex s, t;
   double e, tot=0.0;
   int i, j=0;
 
@@ -231,8 +225,8 @@ double ErrorInView (Post_View * ErrView, int *n){
     j++;
   }
 
-  for (i = 0; i < List_Nbr (ErrView->Simplices); i++){
-    List_Read (ErrView->Simplices, i, &s);
+  for (i = 0; i < List_Nbr (ErrView->Tetrahedra); i++){
+    List_Read (ErrView->Tetrahedra, i, &s);
     e = (t.V[0] + t.V[1] + t.V[2] + t.V[3]) * 0.25;
     tot += e * e;
     j++;
@@ -250,19 +244,18 @@ double ErrorInView (Post_View * ErrView, int *n){
 int CreateBGM (Post_View * ErrView, int OptiMethod, double Degree,
 	       double OptiValue, double *ObjFunct, char *OutFile){
 
-  Post_Triangle t;
-  Post_Simplex s;
+  Post_Simplex s, t;
   double *h, *p, *e, xc, yc, zc, c[3];
   int N, i, j, dim;
   Simplex smp;
   FILE *f;
 
-  if (List_Nbr (ErrView->Simplices))
+  if (List_Nbr (ErrView->Tetrahedra))
     dim = 3;
   else
     dim = 2;
 
-  N = List_Nbr (ErrView->Simplices) +
+  N = List_Nbr (ErrView->Tetrahedra) +
     List_Nbr (ErrView->Triangles) + 2;
 
   h = (double *) malloc (N * sizeof (double));
@@ -290,8 +283,8 @@ int CreateBGM (Post_View * ErrView, int OptiMethod, double Degree,
     j++;
   }
 
-  for (i = 0; i < List_Nbr (ErrView->Simplices); i++){
-    List_Read (ErrView->Simplices, i, &s);
+  for (i = 0; i < List_Nbr (ErrView->Tetrahedra); i++){
+    List_Read (ErrView->Tetrahedra, i, &s);
     
     smp.center_tet (t.X, t.Y, t.Z, c);
     
@@ -315,16 +308,16 @@ int CreateBGM (Post_View * ErrView, int OptiMethod, double Degree,
   j = 0;
   for (i = 0; i < List_Nbr (ErrView->Triangles); i++){
     List_Read (ErrView->Triangles, i, &t);
-    fprintf (f, "ST(%f,%f,%f,%f,%f,%f,%f,%f,%f){%12.5E,%12.5E,%12.5E};\n",
+    fprintf (f, "ST(%g,%g,%g,%g,%g,%g,%g,%g,%g){%g,%g,%g};\n",
 	     t.X[0], t.Y[0], t.Z[0],
 	     t.X[1], t.Y[1], t.Z[1],
 	     t.X[2], t.Y[2], t.Z[2],
 	     h[j], h[j], h[j]);
     j++;
   }
-  for (i = 0; i < List_Nbr (ErrView->Simplices); i++){
-    List_Read (ErrView->Simplices, i, &s);
-    fprintf (f, "SS(%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f){%12.5E,%12.5E,%12.5E,%12.5E};\n",
+  for (i = 0; i < List_Nbr (ErrView->Tetrahedra); i++){
+    List_Read (ErrView->Tetrahedra, i, &s);
+    fprintf (f, "SS(%g,%g,%g,%g,%g,%g,%g,%g,%g,%g,%g,%g){%g,%g,%g,%g};\n",
 	     s.X[0], s.Y[0], s.Z[0],
 	     s.X[1], s.Y[1], s.Z[1],
 	     s.X[2], s.Y[2], s.Z[2],
diff --git a/Mesh/3D_Mesh.cpp b/Mesh/3D_Mesh.cpp
index a07eb5c866..461917ad7f 100644
--- a/Mesh/3D_Mesh.cpp
+++ b/Mesh/3D_Mesh.cpp
@@ -1,4 +1,4 @@
-/* $Id: 3D_Mesh.cpp,v 1.5 2000-11-23 23:20:35 geuzaine Exp $ */
+/* $Id: 3D_Mesh.cpp,v 1.6 2000-11-25 15:26:11 geuzaine Exp $ */
 /*
  
   J-F Remacle 1995
@@ -791,8 +791,9 @@ void Maillage_Volume (void *data, void *dum){
     Progress (102);
     while (simp->Quality > CONV_VALUE){
       newv = NewVertex (simp);
-
-      // while(!Pt_In_Volume(newv->Pos.X,newv->Pos.Y,newv->Pos.Z,LOCAL,&l,0.0)){
+      //double l;
+      //while(!Pt_In_Volume(newv->Pos.X,newv->Pos.Y,newv->Pos.Z,LOCAL,&l,0.0)){
+      
       while (!simp->Pt_In_Simplexe (newv, uvw, 1.e-5) &&		 
 	     (simp->S[0] == &MyNewBoundary ||
 	      !simp->S[0]->Pt_In_Simplexe (newv, uvw, 1.e-5)) &&
diff --git a/Mesh/Generator.cpp b/Mesh/Generator.cpp
index 28a5095325..3240b7b71d 100644
--- a/Mesh/Generator.cpp
+++ b/Mesh/Generator.cpp
@@ -1,4 +1,4 @@
-/* $Id: Generator.cpp,v 1.5 2000-11-23 23:20:35 geuzaine Exp $ */
+/* $Id: Generator.cpp,v 1.6 2000-11-25 15:26:11 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "Const.h"
@@ -20,13 +20,28 @@ void GetStatistics (double s[50]){
   THEM->Statistics[1] = Tree_Nbr (THEM->Curves);
   THEM->Statistics[2] = Tree_Nbr (THEM->Surfaces);
   THEM->Statistics[3] = Tree_Nbr (THEM->Volumes);
-  for (i = 0; i < 50; i++)
-    s[i] = THEM->Statistics[i];
+  for (i = 0; i < 50; i++) s[i] = THEM->Statistics[i];
+}
+
+void ApplyLcFactor_Point(void *a, void *b){
+  Vertex *v = *(Vertex**)a;
+  if(v->lc <= 0.0)
+    Msg(FATAL, "Wrong characteristic Length (%g <= 0) for Point %d",
+	v->lc, v->Num);
+  v->lc *= CTX.mesh.lc_factor;
+}
+void ApplyLcFactor_Attractor(void *a, void *b){
+  Attractor *v = *(Attractor**)a;
+  v->lc1 *= CTX.mesh.lc_factor;
+  v->lc2 *= CTX.mesh.lc_factor;
+}
+void ApplyLcFactor(Mesh *M){
+  Tree_Action(M->Points, ApplyLcFactor_Point);
+  List_Action(M->Metric->Attractors, ApplyLcFactor_Attractor);
 }
 
 void Maillage_Dimension_0 (Mesh * M){
-  for (int i = 0; i < 20; i++)
-    M->Statistics[i] = 0.0;
+  for (int i = 0; i < 20; i++) M->Statistics[i] = 0.0;
   Create_BgMesh (TYPBGMESH, .2, M);
 }
 
@@ -99,15 +114,15 @@ void Init_Mesh (Mesh * M, int all){
   THEM = M;
 
   if (M->Vertices){
-    //Tree_Action (M->Vertices, Free_Vertex);
+    Tree_Action (M->Vertices, Free_Vertex);
     Tree_Delete (M->Vertices);
   }
   if (M->VertexEdges){
-    //Tree_Action (M->VertexEdges, Free_Vertex);
+    Tree_Action (M->VertexEdges, Free_Vertex);
     Tree_Delete (M->VertexEdges);
   }
   if (M->Simplexes){
-    //Tree_Action (M->Simplexes, Free_Simplex);
+    Tree_Action (M->Simplexes, Free_Simplex);
     Tree_Delete (M->Simplexes);
   }
   if (M->Points){
@@ -174,6 +189,7 @@ void mai3d (Mesh * M, int Asked){
 
   if ((Asked > oldstatus && Asked >= 0 && oldstatus < 0) ||
       (Asked < oldstatus)){
+    printf("ON PASSE ICI\n");
     OpenProblem (TheFileName);
     M->status = 0;
   }
diff --git a/Mesh/Makefile b/Mesh/Makefile
index 5c6ed6db53..1b603343ff 100644
--- a/Mesh/Makefile
+++ b/Mesh/Makefile
@@ -1,3 +1,4 @@
+# $Id: Makefile,v 1.4 2000-11-25 15:26:11 geuzaine Exp $
 #
 # Makefile for "libMesh.a"
 #
diff --git a/Mesh/Mesh.h b/Mesh/Mesh.h
index a5d42b2608..54d5b87e6d 100644
--- a/Mesh/Mesh.h
+++ b/Mesh/Mesh.h
@@ -1,4 +1,4 @@
-/* $Id: Mesh.h,v 1.5 2000-11-24 12:50:03 geuzaine Exp $ */
+/* $Id: Mesh.h,v 1.6 2000-11-25 15:26:11 geuzaine Exp $ */
 #ifndef _MESH_H_
 #define _MESH_H_
 
@@ -455,13 +455,12 @@ void Freeze_Vertex (void *a, void *b);
 void deFreeze_Vertex (void *a, void *b);
 void crEdges (Tree_T * TreeElem, Tree_T * treeedges);
 
-double Correction_LC_Attractors (double X, double Y, double Z,
-                                 double *u, Mesh * m, double metr[3][3]);
 double Lc_XYZ (double X, double Y, double Z, Mesh * m);
 void Degre2 (Tree_T * AllNodes, Tree_T * TreeNodes, Tree_T * TreeElm,
              Curve * c, Surface * s);
 void ActionLiss (void *data, void *dummy);
 void ActionLissSurf (void *data, void *dummy);
 void Recombine (Tree_T *TreeAllVert, Tree_T *TreeAllElg, double a);
+void ApplyLcFactor(Mesh *M);
 
 #endif
diff --git a/Mesh/Print_Mesh.cpp b/Mesh/Print_Mesh.cpp
index 4a9592b822..609f162b02 100644
--- a/Mesh/Print_Mesh.cpp
+++ b/Mesh/Print_Mesh.cpp
@@ -1,4 +1,4 @@
-/* $Id: Print_Mesh.cpp,v 1.6 2000-11-24 16:18:16 geuzaine Exp $ */
+/* $Id: Print_Mesh.cpp,v 1.7 2000-11-25 15:26:11 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "Const.h"
@@ -6,7 +6,9 @@
 #include "CAD.h"
 #include "Mesh.h"
 #include "Create.h"
-#include "Tools.h"
+#include "Context.h"
+
+extern Context_T CTX ;
 
 /* ------------------------------------------------------------------------ */
 /*  M S H    F O R M A T                                                    */
@@ -37,8 +39,12 @@ void print_msh_node (void *a, void *b){
   Vertex **V;
 
   V = (Vertex **) a;
+
   fprintf (mshfile, "%d %.16g %.16g %.16g\n",
-	   (*V)->Num, (*V)->Pos.X, (*V)->Pos.Y, (*V)->Pos.Z);
+	   (*V)->Num, 
+	   (*V)->Pos.X * CTX.mesh.scaling_factor, 
+	   (*V)->Pos.Y * CTX.mesh.scaling_factor, 
+	   (*V)->Pos.Z * CTX.mesh.scaling_factor);
 }
 
 void process_msh_nodes (Mesh * M){
@@ -324,9 +330,9 @@ void process_nodes (FILE * funv, Mesh * M){
   for (i = 0; i < nbnod; i++){
     List_Read (Nodes, i, &v);
     idnod = v->Num;
-    x = v->Pos.X;
-    y = v->Pos.Y;
-    z = v->Pos.Z;
+    x = v->Pos.X * CTX.mesh.scaling_factor;
+    y = v->Pos.Y * CTX.mesh.scaling_factor;
+    z = v->Pos.Z * CTX.mesh.scaling_factor;
     fprintf (funv, "%10d%10d%10d%10d\n", idnod, 1, 1, 11);
     fprintf (funv, "%21.16fD+00 %21.16fD+00 %21.16fD+00\n", x, y, z);
   }
@@ -338,9 +344,9 @@ void process_nodes (FILE * funv, Mesh * M){
   for (i = 0; i < nbnod; i++){
     List_Read (Nodes, i, &v);
     idnod = v->Num;
-    x = v->Pos.X;
-    y = v->Pos.Y;
-    z = v->Pos.Z;
+    x = v->Pos.X * CTX.mesh.scaling_factor;
+    y = v->Pos.Y * CTX.mesh.scaling_factor;
+    z = v->Pos.Z * CTX.mesh.scaling_factor;
     fprintf (funv, "%10d%10d%10d%10d\n", idnod, 1, 1, 11);
     fprintf (funv, "%21.16fD+00 %21.16fD+00 %21.16fD+00\n", x, y, z);
   }
@@ -753,7 +759,7 @@ int process_Gref_nodes (FILE * fGref, Mesh * M,
   Nodes = Tree2List (ConsecutiveNTree);
   for (i = 0; i < List_Nbr (Nodes); i++){
     List_Read (Nodes, i, &v);
-    fprintf (fGref, "%21.16e ", v->Pos.X);
+    fprintf (fGref, "%21.16e ", v->Pos.X * CTX.mesh.scaling_factor);
     if (i % 3 == 2)
       fprintf (fGref, "\n");
   }
@@ -761,7 +767,7 @@ int process_Gref_nodes (FILE * fGref, Mesh * M,
     fprintf (fGref, "\n");
   for (i = 0; i < List_Nbr (Nodes); i++){
     List_Read (Nodes, i, &v);
-    fprintf (fGref, "%21.16e ", v->Pos.Y);
+    fprintf (fGref, "%21.16e ", v->Pos.Y * CTX.mesh.scaling_factor);
     if (i % 3 == 2)
       fprintf (fGref, "\n");
   }
diff --git a/Mesh/Simplex.cpp b/Mesh/Simplex.cpp
index 3e3ecd8577..88da186837 100644
--- a/Mesh/Simplex.cpp
+++ b/Mesh/Simplex.cpp
@@ -1,4 +1,4 @@
-/* $Id: Simplex.cpp,v 1.5 2000-11-23 23:20:35 geuzaine Exp $ */
+/* $Id: Simplex.cpp,v 1.6 2000-11-25 15:26:11 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "Const.h"
@@ -345,6 +345,11 @@ Simplex *Create_Simplex (Vertex * v1, Vertex * v2, Vertex * v3, Vertex * v4){
   return s;
 }
 
+void Free_Simplex (void *a, void *b){
+  //  Simplex *s = *(Simplex**)a;
+  //if(s) Free(s);
+}
+
 Simplex *Create_Quadrangle (Vertex * v1, Vertex * v2, Vertex * v3, Vertex * v4){
   Simplex *s;
   /* pour eviter le reordonnement des noeuds */
diff --git a/Mesh/Simplex.h b/Mesh/Simplex.h
index 850af5a5f4..e19f2899fc 100644
--- a/Mesh/Simplex.h
+++ b/Mesh/Simplex.h
@@ -1,4 +1,4 @@
-/* $Id: Simplex.h,v 1.3 2000-11-23 15:05:59 geuzaine Exp $ */
+/* $Id: Simplex.h,v 1.4 2000-11-25 15:26:11 geuzaine Exp $ */
 #ifndef _SIMPLEX_H_
 #define _SIMPLEX_H_
 
@@ -54,8 +54,11 @@ public:
 };
 
 int compareSimplex(const void *a, const void *b);
+int compareFace (const void *a, const void *b);
+
 Simplex *Create_Simplex (Vertex *v1, Vertex *v2, Vertex *v3, Vertex *v4);
+void Free_Simplex (void *a, void *b);
 Simplex *Create_Quadrangle (Vertex *v1, Vertex *v2, Vertex *v3, Vertex *v4);
-int compareFace (const void *a, const void *b);
+
 
 #endif
diff --git a/Mesh/Vertex.cpp b/Mesh/Vertex.cpp
index 7cb8f3ea86..fec5e0473a 100644
--- a/Mesh/Vertex.cpp
+++ b/Mesh/Vertex.cpp
@@ -1,8 +1,7 @@
-/* $Id: Vertex.cpp,v 1.2 2000-11-23 14:11:36 geuzaine Exp $ */
+/* $Id: Vertex.cpp,v 1.3 2000-11-25 15:26:11 geuzaine Exp $ */
+
+#include "Gmsh.h"
 #include "Vertex.h"
-#include <stddef.h>
-#include <stdlib.h>
-#include <math.h>
 
 Vertex::Vertex (){
   Frozen = 0;
@@ -72,6 +71,12 @@ Vertex *Create_Vertex (int Num, double X, double Y, double Z, double lc, double
   return pV;
 }
 
+void Free_Vertex (void *a, void *b){
+  Vertex *pV = *(Vertex**)a;
+
+  if(pV)Free(pV);
+}
+
 int compareVertex (const void *a, const void *b){
   int i, j;
   Vertex **q, **w;
diff --git a/Mesh/Vertex.h b/Mesh/Vertex.h
index 70871bd000..23d4d83e36 100644
--- a/Mesh/Vertex.h
+++ b/Mesh/Vertex.h
@@ -1,4 +1,4 @@
-/* $Id: Vertex.h,v 1.3 2000-11-23 15:05:59 geuzaine Exp $ */
+/* $Id: Vertex.h,v 1.4 2000-11-25 15:26:11 geuzaine Exp $ */
 #ifndef _VERTEX_H_
 #define _VERTEX_H_
 
@@ -31,7 +31,9 @@ class Vertex {
 };
 
 int compareVertex (const void *a, const void *b);
-Vertex *Create_Vertex (int Num, double X, double Y, double Z, double lc, double u);
 int comparePosition (const void *a, const void *b);
 
+Vertex *Create_Vertex (int Num, double X, double Y, double Z, double lc, double u);
+void Free_Vertex (void *a, void *b);
+
 #endif
diff --git a/Parser/Gmsh.l b/Parser/Gmsh.l
index 92eb2e4c6c..fc94308cc8 100644
--- a/Parser/Gmsh.l
+++ b/Parser/Gmsh.l
@@ -1,4 +1,4 @@
-%{ /* $Id: Gmsh.l,v 1.3 2000-11-24 10:58:06 geuzaine Exp $ */
+%{ /* $Id: Gmsh.l,v 1.4 2000-11-25 15:26:11 geuzaine Exp $ */
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -169,9 +169,9 @@ Volume                  return tVolume;
 With			return tWith;
 
 
-SS                      return tScalarSimplex;
-VS                      return tVectorSimplex;
-TS                      return tTensorSimplex;
+SS                      return tScalarTetrahedron;
+VS                      return tVectorTetrahedron;
+TS                      return tTensorTetrahedron;
 ST                      return tScalarTriangle;
 VT                      return tVectorTriangle;
 TT                      return tTensorTriangle;
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index a307869b43..673f11c6f2 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -1,152 +1,151 @@
 
 /*  A Bison parser, made from Gmsh.y
- by  GNU Bison version 1.25
-  */
+    by GNU Bison version 1.28  */
 
 #define YYBISON 1  /* Identify Bison output.  */
 
-#define	tDOUBLE	258
-#define	tSTRING	259
-#define	tBIGSTR	260
-#define	tEND	261
-#define	tAFFECT	262
-#define	tDOTS	263
-#define	tPi	264
-#define	tExp	265
-#define	tLog	266
-#define	tLog10	267
-#define	tSqrt	268
-#define	tSin	269
-#define	tAsin	270
-#define	tCos	271
-#define	tAcos	272
-#define	tTan	273
-#define	tAtan	274
-#define	tAtan2	275
-#define	tSinh	276
-#define	tCosh	277
-#define	tTanh	278
-#define	tFabs	279
-#define	tFloor	280
-#define	tCeil	281
-#define	tFmod	282
-#define	tModulo	283
-#define	tHypot	284
-#define	tPoint	285
-#define	tCircle	286
-#define	tEllipsis	287
-#define	tLine	288
-#define	tSurface	289
-#define	tSpline	290
-#define	tVolume	291
-#define	tCharacteristic	292
-#define	tLength	293
-#define	tParametric	294
-#define	tElliptic	295
-#define	tPlane	296
-#define	tRuled	297
-#define	tTransfinite	298
-#define	tComplex	299
-#define	tPhysical	300
-#define	tUsing	301
-#define	tPower	302
-#define	tBump	303
-#define	tProgression	304
-#define	tAssociation	305
-#define	tRotate	306
-#define	tTranslate	307
-#define	tSymmetry	308
-#define	tDilate	309
-#define	tExtrude	310
-#define	tDuplicata	311
-#define	tLoop	312
-#define	tInclude	313
-#define	tRecombine	314
-#define	tDelete	315
-#define	tCoherence	316
-#define	tView	317
-#define	tOffset	318
-#define	tAttractor	319
-#define	tLayers	320
-#define	tScalarSimplex	321
-#define	tVectorSimplex	322
-#define	tTensorSimplex	323
-#define	tScalarTriangle	324
-#define	tVectorTriangle	325
-#define	tTensorTriangle	326
-#define	tScalarLine	327
-#define	tVectorLine	328
-#define	tTensorLine	329
-#define	tScalarPoint	330
-#define	tVectorPoint	331
-#define	tTensorPoint	332
-#define	tBSpline	333
-#define	tNurbs	334
-#define	tOrder	335
-#define	tWith	336
-#define	tBounds	337
-#define	tKnots	338
-#define	tColor	339
-#define	tGeneral	340
-#define	tGeometry	341
-#define	tMesh	342
-#define	tB_SPLINE_SURFACE_WITH_KNOTS	343
-#define	tB_SPLINE_CURVE_WITH_KNOTS	344
-#define	tCARTESIAN_POINT	345
-#define	tTRUE	346
-#define	tFALSE	347
-#define	tUNSPECIFIED	348
-#define	tU	349
-#define	tV	350
-#define	tEDGE_CURVE	351
-#define	tVERTEX_POINT	352
-#define	tORIENTED_EDGE	353
-#define	tPLANE	354
-#define	tFACE_OUTER_BOUND	355
-#define	tEDGE_LOOP	356
-#define	tADVANCED_FACE	357
-#define	tVECTOR	358
-#define	tDIRECTION	359
-#define	tAXIS2_PLACEMENT_3D	360
-#define	tISO	361
-#define	tENDISO	362
-#define	tENDSEC	363
-#define	tDATA	364
-#define	tHEADER	365
-#define	tFILE_DESCRIPTION	366
-#define	tFILE_SCHEMA	367
-#define	tFILE_NAME	368
-#define	tMANIFOLD_SOLID_BREP	369
-#define	tCLOSED_SHELL	370
-#define	tADVANCED_BREP_SHAPE_REPRESENTATION	371
-#define	tFACE_BOUND	372
-#define	tCYLINDRICAL_SURFACE	373
-#define	tCONICAL_SURFACE	374
-#define	tCIRCLE	375
-#define	tTRIMMED_CURVE	376
-#define	tGEOMETRIC_SET	377
-#define	tCOMPOSITE_CURVE_SEGMENT	378
-#define	tCONTINUOUS	379
-#define	tCOMPOSITE_CURVE	380
-#define	tTOROIDAL_SURFACE	381
-#define	tPRODUCT_DEFINITION	382
-#define	tPRODUCT_DEFINITION_SHAPE	383
-#define	tSHAPE_DEFINITION_REPRESENTATION	384
-#define	tELLIPSE	385
-#define	tTrimmed	386
-#define	tSolid	387
-#define	tEndSolid	388
-#define	tVertex	389
-#define	tFacet	390
-#define	tNormal	391
-#define	tOuter	392
-#define	tLoopSTL	393
-#define	tEndLoop	394
-#define	tEndFacet	395
-#define	UMINUS	396
+#define	tDOUBLE	257
+#define	tSTRING	258
+#define	tBIGSTR	259
+#define	tEND	260
+#define	tAFFECT	261
+#define	tDOTS	262
+#define	tPi	263
+#define	tExp	264
+#define	tLog	265
+#define	tLog10	266
+#define	tSqrt	267
+#define	tSin	268
+#define	tAsin	269
+#define	tCos	270
+#define	tAcos	271
+#define	tTan	272
+#define	tAtan	273
+#define	tAtan2	274
+#define	tSinh	275
+#define	tCosh	276
+#define	tTanh	277
+#define	tFabs	278
+#define	tFloor	279
+#define	tCeil	280
+#define	tFmod	281
+#define	tModulo	282
+#define	tHypot	283
+#define	tPoint	284
+#define	tCircle	285
+#define	tEllipsis	286
+#define	tLine	287
+#define	tSurface	288
+#define	tSpline	289
+#define	tVolume	290
+#define	tCharacteristic	291
+#define	tLength	292
+#define	tParametric	293
+#define	tElliptic	294
+#define	tPlane	295
+#define	tRuled	296
+#define	tTransfinite	297
+#define	tComplex	298
+#define	tPhysical	299
+#define	tUsing	300
+#define	tPower	301
+#define	tBump	302
+#define	tProgression	303
+#define	tAssociation	304
+#define	tRotate	305
+#define	tTranslate	306
+#define	tSymmetry	307
+#define	tDilate	308
+#define	tExtrude	309
+#define	tDuplicata	310
+#define	tLoop	311
+#define	tInclude	312
+#define	tRecombine	313
+#define	tDelete	314
+#define	tCoherence	315
+#define	tView	316
+#define	tOffset	317
+#define	tAttractor	318
+#define	tLayers	319
+#define	tScalarTetrahedron	320
+#define	tVectorTetrahedron	321
+#define	tTensorTetrahedron	322
+#define	tScalarTriangle	323
+#define	tVectorTriangle	324
+#define	tTensorTriangle	325
+#define	tScalarLine	326
+#define	tVectorLine	327
+#define	tTensorLine	328
+#define	tScalarPoint	329
+#define	tVectorPoint	330
+#define	tTensorPoint	331
+#define	tBSpline	332
+#define	tNurbs	333
+#define	tOrder	334
+#define	tWith	335
+#define	tBounds	336
+#define	tKnots	337
+#define	tColor	338
+#define	tGeneral	339
+#define	tGeometry	340
+#define	tMesh	341
+#define	tB_SPLINE_SURFACE_WITH_KNOTS	342
+#define	tB_SPLINE_CURVE_WITH_KNOTS	343
+#define	tCARTESIAN_POINT	344
+#define	tTRUE	345
+#define	tFALSE	346
+#define	tUNSPECIFIED	347
+#define	tU	348
+#define	tV	349
+#define	tEDGE_CURVE	350
+#define	tVERTEX_POINT	351
+#define	tORIENTED_EDGE	352
+#define	tPLANE	353
+#define	tFACE_OUTER_BOUND	354
+#define	tEDGE_LOOP	355
+#define	tADVANCED_FACE	356
+#define	tVECTOR	357
+#define	tDIRECTION	358
+#define	tAXIS2_PLACEMENT_3D	359
+#define	tISO	360
+#define	tENDISO	361
+#define	tENDSEC	362
+#define	tDATA	363
+#define	tHEADER	364
+#define	tFILE_DESCRIPTION	365
+#define	tFILE_SCHEMA	366
+#define	tFILE_NAME	367
+#define	tMANIFOLD_SOLID_BREP	368
+#define	tCLOSED_SHELL	369
+#define	tADVANCED_BREP_SHAPE_REPRESENTATION	370
+#define	tFACE_BOUND	371
+#define	tCYLINDRICAL_SURFACE	372
+#define	tCONICAL_SURFACE	373
+#define	tCIRCLE	374
+#define	tTRIMMED_CURVE	375
+#define	tGEOMETRIC_SET	376
+#define	tCOMPOSITE_CURVE_SEGMENT	377
+#define	tCONTINUOUS	378
+#define	tCOMPOSITE_CURVE	379
+#define	tTOROIDAL_SURFACE	380
+#define	tPRODUCT_DEFINITION	381
+#define	tPRODUCT_DEFINITION_SHAPE	382
+#define	tSHAPE_DEFINITION_REPRESENTATION	383
+#define	tELLIPSE	384
+#define	tTrimmed	385
+#define	tSolid	386
+#define	tEndSolid	387
+#define	tVertex	388
+#define	tFacet	389
+#define	tNormal	390
+#define	tOuter	391
+#define	tLoopSTL	392
+#define	tEndLoop	393
+#define	tEndFacet	394
+#define	UMINUS	395
 
 #line 1 "Gmsh.y"
- /* $Id: Gmsh.tab.cpp,v 1.7 2000-11-24 10:58:06 geuzaine Exp $ */
+ /* $Id: Gmsh.tab.cpp,v 1.8 2000-11-25 15:26:11 geuzaine Exp $ */
 
 #include <stdarg.h>
 
@@ -163,28 +162,31 @@
 #include "Colors.h"
 #include "Parser.h"
 
-#ifdef __DECCXX
+#ifdef __DECCXX // bug in bison
 #include <alloca.h>
 #endif
 
-extern Mesh    *THEM;
-extern char    ThePathForIncludes[NAME_STR_L];
-
-FILE           *yyinTab[MAX_OPEN_FILES];
-int             yylinenoTab[MAX_OPEN_FILES];
-char            yynameTab[MAX_OPEN_FILES][NAME_STR_L];
-char            tmpstring[NAME_STR_L];
-Symbol          TheSymbol;
-Surface        *STL_Surf;
-Shape           TheShape;
-unsigned int    *ptr ;
-int             i,j,k,flag,RecursionLevel=0,Loop[4];
-double          d;
-ExtrudeParams   extr;
+int            Force_ViewNumber = 0 ;
 List_T         *Symbol_L;
-List_T         *ListOfDouble_L,*ListOfDouble2_L;
-List_T         *ListOfListOfDouble_L;
-StringXPointer *ColorField ;
+
+extern Mesh     *THEM;
+extern Post_View *ActualView;
+extern char      ThePathForIncludes[NAME_STR_L];
+
+static FILE          *yyinTab[MAX_OPEN_FILES];
+static int            yylinenoTab[MAX_OPEN_FILES];
+static char           yynameTab[MAX_OPEN_FILES][NAME_STR_L];
+static char           tmpstring[NAME_STR_L];
+static Symbol         TheSymbol;
+static Surface       *STL_Surf;
+static Shape          TheShape;
+static unsigned int  *ptr ;
+static int            i,j,k,flag,RecursionLevel=0;
+static double         d;
+static ExtrudeParams  extr;
+static StringXPointer *ColorField ;
+static List_T         *ListOfDouble_L,*ListOfDouble2_L;
+static List_T         *ListOfListOfDouble_L;
 
 void  yyerror (char *s);
 void  vyyerror (char *fmt, ...);
@@ -194,7 +196,7 @@ void  Get_ColorPointerForString(StringXPointer SXP[], char * string,
 				int * FlagError, unsigned int **Pointer);
 
 
-#line 50 "Gmsh.y"
+#line 53 "Gmsh.y"
 typedef union {
   char    *c;
   int      i;
@@ -213,11 +215,11 @@ typedef union {
 
 
 
-#define	YYFINAL		1275
+#define	YYFINAL		1339
 #define	YYFLAG		-32768
 #define	YYNTBASE	157
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 396 ? yytranslate[x] : 213)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 395 ? yytranslate[x] : 237)
 
 static const short yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -245,21 +247,21 @@ static const short yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     1,     2,     3,     4,     5,
-     6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-    16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-    26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-    46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-    56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-    76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-    86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-    96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-   106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-   116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-   126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-   136,   137,   138,   139,   140,   148
+     2,     2,     2,     2,     2,     1,     3,     4,     5,     6,
+     7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+    27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+    37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+    47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+    57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+    77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+    87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+    97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+   107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+   117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+   127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+   137,   138,   139,   140,   148
 };
 
 #if YYDEBUG != 0
@@ -272,226 +274,243 @@ static const short yyprhs[] = {     0,
    492,   493,   496,   498,   500,   502,   504,   506,   508,   510,
    512,   514,   516,   518,   521,   528,   537,   538,   541,   544,
    547,   550,   553,   556,   559,   562,   565,   568,   571,   574,
-   603,   632,   661,   684,   707,   730,   747,   764,   781,   792,
-   803,   814,   819,   827,   836,   849,   856,   862,   870,   878,
-   891,   899,   909,   927,   935,   944,   953,   959,   967,   979,
-   988,   998,  1007,  1030,  1051,  1060,  1069,  1075,  1084,  1092,
-  1101,  1109,  1121,  1129,  1139,  1141,  1143,  1145,  1146,  1149,
-  1154,  1159,  1163,  1171,  1180,  1192,  1205,  1218,  1227,  1240,
-  1249,  1261,  1277,  1279,  1282,  1292,  1295,  1302,  1312,  1322,
-  1332,  1341,  1350,  1359,  1366,  1371,  1380,  1383,  1388,  1389,
-  1392,  1393,  1399,  1400,  1406,  1407,  1413,  1414,  1417,  1422,
-  1431,  1436,  1446,  1454,  1456,  1458,  1460,  1462,  1464,  1466,
-  1470,  1474,  1478,  1482,  1486,  1490,  1493,  1496,  1501,  1506,
-  1511,  1516,  1521,  1526,  1531,  1536,  1541,  1546,  1553,  1558,
-  1563,  1568,  1573,  1578,  1583,  1590,  1597,  1604,  1606,  1608,
-  1610,  1614,  1621,  1633,  1643,  1651,  1659,  1660,  1664,  1666,
-  1670,  1671,  1675,  1679,  1681,  1685,  1686,  1688,  1692,  1694,
-  1696,  1700
+   576,   580,   581,   595,   597,   601,   602,   616,   618,   622,
+   623,   637,   639,   643,   644,   664,   666,   670,   671,   691,
+   693,   697,   698,   718,   720,   724,   725,   751,   753,   757,
+   758,   784,   786,   790,   791,   817,   819,   823,   824,   856,
+   858,   862,   863,   895,   897,   901,   902,   934,   939,   947,
+   956,   969,   976,   982,   990,   998,  1011,  1019,  1029,  1047,
+  1055,  1064,  1073,  1079,  1087,  1099,  1108,  1118,  1127,  1150,
+  1171,  1180,  1189,  1195,  1204,  1212,  1221,  1229,  1241,  1249,
+  1259,  1261,  1263,  1265,  1266,  1269,  1274,  1279,  1283,  1291,
+  1300,  1312,  1325,  1338,  1347,  1360,  1369,  1381,  1397,  1399,
+  1402,  1412,  1415,  1422,  1432,  1442,  1452,  1461,  1470,  1479,
+  1486,  1491,  1494,  1499,  1500,  1503,  1504,  1510,  1511,  1517,
+  1518,  1524,  1525,  1528,  1533,  1542,  1547,  1557,  1565,  1567,
+  1569,  1571,  1573,  1575,  1577,  1581,  1585,  1589,  1593,  1597,
+  1601,  1604,  1607,  1612,  1617,  1622,  1627,  1632,  1637,  1642,
+  1647,  1652,  1657,  1664,  1669,  1674,  1679,  1684,  1689,  1694,
+  1701,  1708,  1715,  1717,  1719,  1721,  1725,  1732,  1744,  1754,
+  1762,  1770,  1771,  1775,  1777,  1781,  1782,  1786,  1790,  1792,
+  1796,  1797,  1799,  1803,  1805,  1807,  1811
 };
 
-static const short yyrhs[] = {   164,
-     0,   159,     0,   158,     0,   132,     0,   135,   136,     3,
-     3,     3,   137,   138,   134,     3,     3,     3,   134,     3,
-     3,     3,   134,     3,     3,     3,   139,   140,     0,   133,
+static const short yyrhs[] = {   159,
+     0,   158,     0,   164,     0,   132,     0,   135,   136,   227,
+   227,   227,   137,   138,   134,   227,   227,   227,   134,   227,
+   227,   227,   134,   227,   227,   227,   139,   140,     0,   133,
      0,     0,   159,   160,     0,   161,     0,   163,     0,   162,
      0,     1,     6,     0,   106,     6,     0,   107,     6,     0,
    109,     6,     0,   108,     6,     0,   110,     6,     0,   111,
-   150,   207,   151,     5,   152,     6,     0,   112,   150,   207,
-   152,     6,     0,   113,   150,     5,   151,     5,   151,   207,
-   151,   207,   151,     5,   151,     5,   151,     5,   152,     6,
-     0,     3,     7,    90,   150,     5,   151,   206,   152,     6,
-     0,     3,     7,    89,   150,     5,   151,   203,   151,   211,
-   151,   202,   151,   202,   151,   202,   151,   211,   151,   211,
-   151,   202,   152,     6,     0,     3,     7,    88,   150,     5,
-   151,   203,   151,   203,   151,   209,   151,   202,   151,   202,
-   151,   202,   151,   202,   151,   211,   151,   211,   151,   211,
-   151,   211,   151,   202,   152,     6,     0,     3,     7,    96,
-   150,     5,   151,     3,   151,     3,   151,     3,   151,   202,
+   150,   231,   151,     5,   152,     6,     0,   112,   150,   231,
+   152,     6,     0,   113,   150,     5,   151,     5,   151,   231,
+   151,   231,   151,     5,   151,     5,   151,     5,   152,     6,
+     0,     3,     7,    90,   150,     5,   151,   230,   152,     6,
+     0,     3,     7,    89,   150,     5,   151,   227,   151,   235,
+   151,   226,   151,   226,   151,   226,   151,   235,   151,   235,
+   151,   226,   152,     6,     0,     3,     7,    88,   150,     5,
+   151,   227,   151,   227,   151,   233,   151,   226,   151,   226,
+   151,   226,   151,   226,   151,   235,   151,   235,   151,   235,
+   151,   235,   151,   226,   152,     6,     0,     3,     7,    96,
+   150,     5,   151,     3,   151,     3,   151,     3,   151,   226,
    152,     6,     0,     3,     7,   100,   150,     5,   151,     3,
-   151,   202,   152,     6,     0,     3,     7,   117,   150,     5,
-   151,     3,   151,   202,   152,     6,     0,     3,     7,    98,
-   150,     5,   151,   145,   151,   145,   151,   203,   151,   202,
-   152,     6,     0,     3,     7,   101,   150,     5,   151,   211,
-   152,     6,     0,     3,     7,   102,   150,     5,   151,   211,
-   151,     3,   151,   202,   152,     6,     0,     3,     7,    97,
+   151,   226,   152,     6,     0,     3,     7,   117,   150,     5,
+   151,     3,   151,   226,   152,     6,     0,     3,     7,    98,
+   150,     5,   151,   145,   151,   145,   151,   227,   151,   226,
+   152,     6,     0,     3,     7,   101,   150,     5,   151,   235,
+   152,     6,     0,     3,     7,   102,   150,     5,   151,   235,
+   151,     3,   151,   226,   152,     6,     0,     3,     7,    97,
    150,     5,   151,     3,   152,     6,     0,     3,     7,   103,
-   150,     5,   151,     3,   151,   203,   152,     6,     0,     3,
+   150,     5,   151,     3,   151,   227,   152,     6,     0,     3,
      7,   105,   150,     5,   151,     3,   151,     3,   151,     3,
-   152,     6,     0,     3,     7,   104,   150,     5,   151,   206,
+   152,     6,     0,     3,     7,   104,   150,     5,   151,   230,
    152,     6,     0,     3,     7,    99,   150,     5,   151,     3,
    152,     6,     0,     3,     7,    33,   150,     5,   151,     3,
    151,     3,   152,     6,     0,     3,     7,   115,   150,     5,
-   151,   211,   152,     6,     0,     3,     7,   116,   150,     5,
-   151,   211,   151,     3,   152,     6,     0,     3,     7,   114,
+   151,   235,   152,     6,     0,     3,     7,   116,   150,     5,
+   151,   235,   151,     3,   152,     6,     0,     3,     7,   114,
    150,     5,   151,     3,   152,     6,     0,     3,     7,   118,
-   150,     5,   151,     3,   151,   203,   152,     6,     0,     3,
-     7,   119,   150,     5,   151,     3,   151,   203,   151,   203,
+   150,     5,   151,     3,   151,   227,   152,     6,     0,     3,
+     7,   119,   150,     5,   151,     3,   151,   227,   151,   227,
    152,     6,     0,     3,     7,   126,   150,     5,   151,     3,
-   151,   203,   151,   203,   152,     6,     0,     3,     7,   120,
-   150,     5,   151,     3,   151,   203,   152,     6,     0,     3,
-     7,   130,   150,     5,   151,     3,   151,   203,   151,   203,
+   151,   227,   151,   227,   152,     6,     0,     3,     7,   120,
+   150,     5,   151,     3,   151,   227,   152,     6,     0,     3,
+     7,   130,   150,     5,   151,     3,   151,   227,   151,   227,
    152,     6,     0,     3,     7,   121,   150,     5,   151,     3,
-   151,   211,   151,   211,   151,   202,   151,   202,   152,     6,
-     0,     3,     7,   122,   150,     5,   151,   211,   152,     6,
-     0,     3,     7,   123,   150,   124,   151,   202,   151,     3,
-   152,     6,     0,     3,     7,   125,   150,     5,   151,   211,
-   151,   202,   152,     6,     0,     3,     7,   127,   150,     5,
+   151,   235,   151,   235,   151,   226,   151,   226,   152,     6,
+     0,     3,     7,   122,   150,     5,   151,   235,   152,     6,
+     0,     3,     7,   123,   150,   124,   151,   226,   151,     3,
+   152,     6,     0,     3,     7,   125,   150,     5,   151,   235,
+   151,   226,   152,     6,     0,     3,     7,   127,   150,     5,
    151,     5,   151,     3,   151,     3,   152,     6,     0,     3,
      7,   128,   150,     5,   151,     5,   151,     3,   152,     6,
      0,     3,     7,   129,   150,     3,   151,     3,   152,     6,
-     0,     0,   164,   165,     0,   166,     0,   180,     0,   181,
-     0,   182,     0,   185,     0,   186,     0,   188,     0,   191,
-     0,   192,     0,   187,     0,   193,     0,     1,     6,     0,
+     0,     0,   164,   165,     0,   166,     0,   204,     0,   205,
+     0,   206,     0,   209,     0,   210,     0,   212,     0,   215,
+     0,   216,     0,   211,     0,   217,     0,     1,     6,     0,
     62,     5,   153,   167,   154,     6,     0,    62,     5,    63,
-   206,   153,   167,   154,     6,     0,     0,   167,   168,     0,
-   167,   169,     0,   167,   170,     0,   167,   171,     0,   167,
-   172,     0,   167,   173,     0,   167,   174,     0,   167,   175,
-     0,   167,   176,     0,   167,   177,     0,   167,   178,     0,
-   167,   179,     0,    66,   150,   203,   151,   203,   151,   203,
-   151,   203,   151,   203,   151,   203,   151,   203,   151,   203,
-   151,   203,   151,   203,   151,   203,   151,   203,   152,   211,
-     6,     0,    67,   150,   203,   151,   203,   151,   203,   151,
-   203,   151,   203,   151,   203,   151,   203,   151,   203,   151,
-   203,   151,   203,   151,   203,   151,   203,   152,   211,     6,
-     0,    68,   150,   203,   151,   203,   151,   203,   151,   203,
-   151,   203,   151,   203,   151,   203,   151,   203,   151,   203,
-   151,   203,   151,   203,   151,   203,   152,   211,     6,     0,
-    69,   150,   203,   151,   203,   151,   203,   151,   203,   151,
-   203,   151,   203,   151,   203,   151,   203,   151,   203,   152,
-   211,     6,     0,    70,   150,   203,   151,   203,   151,   203,
-   151,   203,   151,   203,   151,   203,   151,   203,   151,   203,
-   151,   203,   152,   211,     6,     0,    71,   150,   203,   151,
-   203,   151,   203,   151,   203,   151,   203,   151,   203,   151,
-   203,   151,   203,   151,   203,   152,   211,     6,     0,    72,
-   150,   203,   151,   203,   151,   203,   151,   203,   151,   203,
-   151,   203,   152,   211,     6,     0,    73,   150,   203,   151,
-   203,   151,   203,   151,   203,   151,   203,   151,   203,   152,
-   211,     6,     0,    74,   150,   203,   151,   203,   151,   203,
-   151,   203,   151,   203,   151,   203,   152,   211,     6,     0,
-    75,   150,   203,   151,   203,   151,   203,   152,   211,     6,
-     0,    76,   150,   203,   151,   203,   151,   203,   152,   211,
-     6,     0,    77,   150,   203,   151,   203,   151,   203,   152,
-   211,     6,     0,     4,     7,   203,     6,     0,    30,   150,
-   203,   152,     7,   206,     6,     0,    45,    30,   150,   203,
-   152,     7,   211,     6,     0,    64,    30,   150,   203,   151,
-   203,   151,   203,   152,     7,   211,     6,     0,    37,    38,
-   211,     7,   203,     6,     0,    30,   150,   203,   152,     6,
-     0,    33,   150,   203,   152,     7,   211,     6,     0,    35,
-   150,   203,   152,     7,   211,     6,     0,    64,    33,   150,
-   203,   151,   203,   151,   203,   152,     7,   211,     6,     0,
-    31,   150,   203,   152,     7,   211,     6,     0,    31,   150,
-   203,   152,     7,   211,    41,   206,     6,     0,    39,   150,
-   203,   152,     7,   150,   203,   151,   203,   151,     5,   151,
-     5,   151,     5,   152,     6,     0,    32,   150,   203,   152,
-     7,   211,     6,     0,    45,    33,   150,   203,   152,     7,
-   211,     6,     0,    33,    57,   150,   203,   152,     7,   211,
-     6,     0,    33,   150,   203,   152,     6,     0,    78,   150,
-   203,   152,     7,   211,     6,     0,    79,   150,   203,   152,
-     7,   211,    83,   211,    80,   203,     6,     0,    41,    34,
-   150,   203,   152,     7,   211,     6,     0,   131,    34,   150,
-   203,   152,     7,   203,   211,     6,     0,    42,    34,   150,
-   203,   152,     7,   211,     6,     0,    79,    34,    81,    82,
-   150,   203,   152,     7,   209,    83,   153,   211,   151,   211,
-   154,    80,   153,   203,   151,   203,   154,     6,     0,    79,
-    34,   150,   203,   152,     7,   209,    83,   153,   211,   151,
-   211,   154,    80,   153,   203,   151,   203,   154,     6,     0,
-    45,    34,   150,   203,   152,     7,   211,     6,     0,    34,
-    57,   150,   203,   152,     7,   211,     6,     0,    34,   150,
-   203,   152,     6,     0,    44,    36,   150,   203,   152,     7,
-   211,     6,     0,    36,   150,   203,   152,     7,   211,     6,
-     0,    45,    36,   150,   203,   152,     7,   211,     6,     0,
-    52,   150,   206,   152,   153,   183,   154,     0,    51,   150,
-   206,   151,   206,   151,   203,   152,   153,   183,   154,     0,
-    53,   150,   206,   152,   153,   183,   154,     0,    54,   150,
-   206,   151,   203,   152,   153,   183,   154,     0,   185,     0,
-   184,     0,   182,     0,     0,   184,   181,     0,    56,   153,
-   184,   154,     0,    60,   153,   184,   154,     0,    58,     5,
-     6,     0,    55,   150,   203,   151,   206,   152,     6,     0,
-    55,    34,   150,   203,   151,   206,   152,     6,     0,    55,
-   150,   203,   151,   206,   151,   206,   151,   203,   152,     6,
-     0,    55,    34,   150,   203,   151,   206,   151,   206,   151,
-   203,   152,     6,     0,    55,    30,   150,   203,   151,   206,
-   151,   206,   151,   203,   152,     6,     0,    55,    30,   150,
-   203,   151,   206,   152,     6,     0,    55,    33,   150,   203,
-   151,   206,   151,   206,   151,   203,   152,     6,     0,    55,
-    33,   150,   203,   151,   206,   152,     6,     0,    55,    34,
-   150,   203,   151,   206,   152,   153,   189,   154,     6,     0,
-    55,    34,   150,   203,   151,   206,   151,   206,   151,   203,
-   152,   153,   189,   154,     6,     0,   190,     0,   189,   190,
-     0,    65,   153,   211,   151,   211,   151,   211,   154,     6,
-     0,    59,     6,     0,    43,    33,   211,     7,   203,     6,
-     0,    43,    33,   211,     7,   203,    46,    47,   203,     6,
-     0,    43,    33,   211,     7,   203,    46,    48,   203,     6,
-     0,    43,    33,   211,     7,   203,    46,    49,   203,     6,
-     0,    43,    34,   153,   203,   154,     7,   211,     6,     0,
-    40,    34,   153,   203,   154,     7,   211,     6,     0,    43,
-    36,   153,   203,   154,     7,   211,     6,     0,    59,    34,
-   211,     7,   203,     6,     0,    59,    34,   211,     6,     0,
-    45,    50,   150,   203,   152,     7,   211,     6,     0,    61,
-     6,     0,    84,   153,   194,   154,     0,     0,   194,   195,
-     0,     0,    85,   196,   153,   199,   154,     0,     0,    86,
-   197,   153,   199,   154,     0,     0,    87,   198,   153,   199,
-   154,     0,     0,   200,   199,     0,     4,     7,     4,     6,
-     0,     4,     7,   153,     4,   151,   203,   154,     6,     0,
-     4,     7,   201,     6,     0,   153,   203,   151,   203,   151,
-   203,   151,   203,   154,     0,   153,   203,   151,   203,   151,
-   203,   154,     0,    91,     0,    92,     0,    93,     0,    94,
-     0,    95,     0,   204,     0,   150,   203,   152,     0,   203,
-   144,   203,     0,   203,   143,   203,     0,   203,   145,   203,
-     0,   203,   146,   203,     0,   203,   149,   203,     0,   144,
-   203,     0,   143,   203,     0,    10,   150,   203,   152,     0,
-    11,   150,   203,   152,     0,    12,   150,   203,   152,     0,
-    13,   150,   203,   152,     0,    14,   150,   203,   152,     0,
-    15,   150,   203,   152,     0,    16,   150,   203,   152,     0,
-    17,   150,   203,   152,     0,    18,   150,   203,   152,     0,
-    19,   150,   203,   152,     0,    20,   150,   203,   151,   203,
-   152,     0,    21,   150,   203,   152,     0,    22,   150,   203,
-   152,     0,    23,   150,   203,   152,     0,    24,   150,   203,
-   152,     0,    25,   150,   203,   152,     0,    26,   150,   203,
-   152,     0,    27,   150,   203,   151,   203,   152,     0,    28,
-   150,   203,   151,   203,   152,     0,    29,   150,   203,   151,
-   203,   152,     0,     3,     0,     9,     0,     4,     0,   203,
-     8,   203,     0,   203,     8,   155,   203,   156,   203,     0,
-   153,   203,   151,   203,   151,   203,   151,   203,   151,   203,
-   154,     0,   153,   203,   151,   203,   151,   203,   151,   203,
-   154,     0,   153,   203,   151,   203,   151,   203,   154,     0,
-   150,   203,   151,   203,   151,   203,   152,     0,     0,   150,
-   208,   152,     0,     5,     0,   208,   151,     5,     0,     0,
-   153,   210,   154,     0,   150,   210,   152,     0,   211,     0,
-   210,   151,   211,     0,     0,   203,     0,   153,   212,   154,
-     0,   203,     0,   205,     0,   212,   151,   203,     0,   212,
-   151,   205,     0
+   230,   153,   167,   154,     6,     0,     0,   167,   169,     0,
+   167,   172,     0,   167,   175,     0,   167,   178,     0,   167,
+   181,     0,   167,   184,     0,   167,   187,     0,   167,   190,
+     0,   167,   193,     0,   167,   196,     0,   167,   199,     0,
+   167,   202,     0,   227,     0,   168,   151,   227,     0,     0,
+    75,   150,   227,   151,   227,   151,   227,   152,   170,   153,
+   168,   154,     6,     0,   227,     0,   171,   151,   227,     0,
+     0,    76,   150,   227,   151,   227,   151,   227,   152,   173,
+   153,   171,   154,     6,     0,   227,     0,   174,   151,   227,
+     0,     0,    77,   150,   227,   151,   227,   151,   227,   152,
+   176,   153,   174,   154,     6,     0,   227,     0,   177,   151,
+   227,     0,     0,    72,   150,   227,   151,   227,   151,   227,
+   151,   227,   151,   227,   151,   227,   152,   179,   153,   177,
+   154,     6,     0,   227,     0,   180,   151,   227,     0,     0,
+    73,   150,   227,   151,   227,   151,   227,   151,   227,   151,
+   227,   151,   227,   152,   182,   153,   180,   154,     6,     0,
+   227,     0,   183,   151,   227,     0,     0,    74,   150,   227,
+   151,   227,   151,   227,   151,   227,   151,   227,   151,   227,
+   152,   185,   153,   183,   154,     6,     0,   227,     0,   186,
+   151,   227,     0,     0,    69,   150,   227,   151,   227,   151,
+   227,   151,   227,   151,   227,   151,   227,   151,   227,   151,
+   227,   151,   227,   152,   188,   153,   186,   154,     6,     0,
+   227,     0,   189,   151,   227,     0,     0,    70,   150,   227,
+   151,   227,   151,   227,   151,   227,   151,   227,   151,   227,
+   151,   227,   151,   227,   151,   227,   152,   191,   153,   189,
+   154,     6,     0,   227,     0,   192,   151,   227,     0,     0,
+    71,   150,   227,   151,   227,   151,   227,   151,   227,   151,
+   227,   151,   227,   151,   227,   151,   227,   151,   227,   152,
+   194,   153,   192,   154,     6,     0,   227,     0,   195,   151,
+   227,     0,     0,    66,   150,   227,   151,   227,   151,   227,
+   151,   227,   151,   227,   151,   227,   151,   227,   151,   227,
+   151,   227,   151,   227,   151,   227,   151,   227,   152,   197,
+   153,   195,   154,     6,     0,   227,     0,   198,   151,   227,
+     0,     0,    67,   150,   227,   151,   227,   151,   227,   151,
+   227,   151,   227,   151,   227,   151,   227,   151,   227,   151,
+   227,   151,   227,   151,   227,   151,   227,   152,   200,   153,
+   198,   154,     6,     0,   227,     0,   201,   151,   227,     0,
+     0,    68,   150,   227,   151,   227,   151,   227,   151,   227,
+   151,   227,   151,   227,   151,   227,   151,   227,   151,   227,
+   151,   227,   151,   227,   151,   227,   152,   203,   153,   201,
+   154,     6,     0,     4,     7,   227,     6,     0,    30,   150,
+   227,   152,     7,   230,     6,     0,    45,    30,   150,   227,
+   152,     7,   235,     6,     0,    64,    30,   150,   227,   151,
+   227,   151,   227,   152,     7,   235,     6,     0,    37,    38,
+   235,     7,   227,     6,     0,    30,   150,   227,   152,     6,
+     0,    33,   150,   227,   152,     7,   235,     6,     0,    35,
+   150,   227,   152,     7,   235,     6,     0,    64,    33,   150,
+   227,   151,   227,   151,   227,   152,     7,   235,     6,     0,
+    31,   150,   227,   152,     7,   235,     6,     0,    31,   150,
+   227,   152,     7,   235,    41,   230,     6,     0,    39,   150,
+   227,   152,     7,   150,   227,   151,   227,   151,     5,   151,
+     5,   151,     5,   152,     6,     0,    32,   150,   227,   152,
+     7,   235,     6,     0,    45,    33,   150,   227,   152,     7,
+   235,     6,     0,    33,    57,   150,   227,   152,     7,   235,
+     6,     0,    33,   150,   227,   152,     6,     0,    78,   150,
+   227,   152,     7,   235,     6,     0,    79,   150,   227,   152,
+     7,   235,    83,   235,    80,   227,     6,     0,    41,    34,
+   150,   227,   152,     7,   235,     6,     0,   131,    34,   150,
+   227,   152,     7,   227,   235,     6,     0,    42,    34,   150,
+   227,   152,     7,   235,     6,     0,    79,    34,    81,    82,
+   150,   227,   152,     7,   233,    83,   153,   235,   151,   235,
+   154,    80,   153,   227,   151,   227,   154,     6,     0,    79,
+    34,   150,   227,   152,     7,   233,    83,   153,   235,   151,
+   235,   154,    80,   153,   227,   151,   227,   154,     6,     0,
+    45,    34,   150,   227,   152,     7,   235,     6,     0,    34,
+    57,   150,   227,   152,     7,   235,     6,     0,    34,   150,
+   227,   152,     6,     0,    44,    36,   150,   227,   152,     7,
+   235,     6,     0,    36,   150,   227,   152,     7,   235,     6,
+     0,    45,    36,   150,   227,   152,     7,   235,     6,     0,
+    52,   150,   230,   152,   153,   207,   154,     0,    51,   150,
+   230,   151,   230,   151,   227,   152,   153,   207,   154,     0,
+    53,   150,   230,   152,   153,   207,   154,     0,    54,   150,
+   230,   151,   227,   152,   153,   207,   154,     0,   209,     0,
+   208,     0,   206,     0,     0,   208,   205,     0,    56,   153,
+   208,   154,     0,    60,   153,   208,   154,     0,    58,     5,
+     6,     0,    55,   150,   227,   151,   230,   152,     6,     0,
+    55,    34,   150,   227,   151,   230,   152,     6,     0,    55,
+   150,   227,   151,   230,   151,   230,   151,   227,   152,     6,
+     0,    55,    34,   150,   227,   151,   230,   151,   230,   151,
+   227,   152,     6,     0,    55,    30,   150,   227,   151,   230,
+   151,   230,   151,   227,   152,     6,     0,    55,    30,   150,
+   227,   151,   230,   152,     6,     0,    55,    33,   150,   227,
+   151,   230,   151,   230,   151,   227,   152,     6,     0,    55,
+    33,   150,   227,   151,   230,   152,     6,     0,    55,    34,
+   150,   227,   151,   230,   152,   153,   213,   154,     6,     0,
+    55,    34,   150,   227,   151,   230,   151,   230,   151,   227,
+   152,   153,   213,   154,     6,     0,   214,     0,   213,   214,
+     0,    65,   153,   235,   151,   235,   151,   235,   154,     6,
+     0,    59,     6,     0,    43,    33,   235,     7,   227,     6,
+     0,    43,    33,   235,     7,   227,    46,    47,   227,     6,
+     0,    43,    33,   235,     7,   227,    46,    48,   227,     6,
+     0,    43,    33,   235,     7,   227,    46,    49,   227,     6,
+     0,    43,    34,   153,   227,   154,     7,   235,     6,     0,
+    40,    34,   153,   227,   154,     7,   235,     6,     0,    43,
+    36,   153,   227,   154,     7,   235,     6,     0,    59,    34,
+   235,     7,   227,     6,     0,    59,    34,   235,     6,     0,
+    61,     6,     0,    84,   153,   218,   154,     0,     0,   218,
+   219,     0,     0,    85,   220,   153,   223,   154,     0,     0,
+    86,   221,   153,   223,   154,     0,     0,    87,   222,   153,
+   223,   154,     0,     0,   224,   223,     0,     4,     7,     4,
+     6,     0,     4,     7,   153,     4,   151,   227,   154,     6,
+     0,     4,     7,   225,     6,     0,   153,   227,   151,   227,
+   151,   227,   151,   227,   154,     0,   153,   227,   151,   227,
+   151,   227,   154,     0,    91,     0,    92,     0,    93,     0,
+    94,     0,    95,     0,   228,     0,   150,   227,   152,     0,
+   227,   144,   227,     0,   227,   143,   227,     0,   227,   145,
+   227,     0,   227,   146,   227,     0,   227,   149,   227,     0,
+   144,   227,     0,   143,   227,     0,    10,   150,   227,   152,
+     0,    11,   150,   227,   152,     0,    12,   150,   227,   152,
+     0,    13,   150,   227,   152,     0,    14,   150,   227,   152,
+     0,    15,   150,   227,   152,     0,    16,   150,   227,   152,
+     0,    17,   150,   227,   152,     0,    18,   150,   227,   152,
+     0,    19,   150,   227,   152,     0,    20,   150,   227,   151,
+   227,   152,     0,    21,   150,   227,   152,     0,    22,   150,
+   227,   152,     0,    23,   150,   227,   152,     0,    24,   150,
+   227,   152,     0,    25,   150,   227,   152,     0,    26,   150,
+   227,   152,     0,    27,   150,   227,   151,   227,   152,     0,
+    28,   150,   227,   151,   227,   152,     0,    29,   150,   227,
+   151,   227,   152,     0,     3,     0,     9,     0,     4,     0,
+   227,     8,   227,     0,   227,     8,   155,   227,   156,   227,
+     0,   153,   227,   151,   227,   151,   227,   151,   227,   151,
+   227,   154,     0,   153,   227,   151,   227,   151,   227,   151,
+   227,   154,     0,   153,   227,   151,   227,   151,   227,   154,
+     0,   150,   227,   151,   227,   151,   227,   152,     0,     0,
+   150,   232,   152,     0,     5,     0,   232,   151,     5,     0,
+     0,   153,   234,   154,     0,   150,   234,   152,     0,   235,
+     0,   234,   151,   235,     0,     0,   227,     0,   153,   236,
+   154,     0,   227,     0,   229,     0,   236,   151,   227,     0,
+   236,   151,   229,     0
 };
 
 #endif
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   109,   111,   112,   119,   127,   141,   153,   155,   158,   160,
-   161,   162,   165,   171,   176,   177,   178,   181,   185,   188,
-   194,   199,   205,   213,   218,   222,   228,   233,   237,   242,
-   246,   249,   254,   258,   262,   266,   271,   275,   278,   282,
-   286,   290,   294,   298,   302,   305,   309,   312,   316,   319,
-   328,   330,   336,   338,   339,   340,   341,   342,   343,   344,
-   345,   346,   347,   348,   355,   360,   366,   371,   372,   373,
-   374,   375,   376,   377,   378,   379,   380,   381,   382,   385,
-   395,   405,   415,   424,   433,   442,   450,   458,   466,   473,
-   480,   491,   505,   516,   522,   541,   552,   560,   566,   572,
-   591,   597,   613,   620,   626,   632,   638,   647,   653,   673,
-   679,   698,   717,   725,   731,   737,   743,   755,   761,   767,
-   779,   785,   790,   795,   802,   804,   805,   808,   813,   824,
-   842,   857,   888,   893,   897,   901,   905,   911,   916,   920,
-   924,   929,   937,   941,   946,   964,   974,   992,  1009,  1026,
-  1043,  1063,  1082,  1101,  1116,  1131,  1142,  1153,  1157,  1159,
-  1162,  1165,  1166,  1168,  1169,  1171,  1174,  1176,  1179,  1190,
-  1200,  1210,  1218,  1294,  1296,  1297,  1298,  1299,  1302,  1304,
-  1305,  1306,  1307,  1308,  1309,  1310,  1311,  1312,  1313,  1314,
-  1315,  1316,  1317,  1318,  1319,  1320,  1321,  1322,  1323,  1324,
-  1325,  1326,  1327,  1328,  1329,  1330,  1331,  1334,  1336,  1337,
-  1348,  1355,  1368,  1377,  1385,  1393,  1403,  1407,  1412,  1416,
-  1421,  1425,  1429,  1435,  1441,  1447,  1451,  1457,  1470,  1476,
-  1485,  1489
+   114,   116,   117,   124,   132,   146,   158,   160,   163,   165,
+   166,   167,   170,   176,   181,   182,   183,   186,   190,   193,
+   199,   204,   210,   218,   223,   227,   233,   238,   242,   247,
+   251,   254,   259,   263,   267,   271,   276,   280,   283,   287,
+   291,   295,   299,   303,   307,   310,   314,   317,   321,   324,
+   333,   335,   341,   343,   344,   345,   346,   347,   348,   349,
+   350,   351,   352,   353,   360,   365,   371,   376,   377,   378,
+   379,   380,   381,   382,   383,   384,   385,   386,   387,   390,
+   393,   397,   403,   409,   412,   416,   422,   428,   431,   435,
+   441,   447,   450,   454,   462,   468,   471,   475,   483,   489,
+   492,   496,   504,   510,   513,   517,   529,   535,   538,   542,
+   554,   560,   563,   567,   579,   585,   588,   592,   605,   611,
+   614,   618,   631,   637,   640,   644,   657,   669,   683,   694,
+   700,   719,   730,   738,   744,   750,   769,   775,   791,   798,
+   804,   810,   816,   825,   831,   853,   859,   878,   899,   907,
+   913,   919,   925,   937,   943,   949,   961,   967,   972,   977,
+   984,   986,   987,   990,   995,  1006,  1024,  1039,  1070,  1075,
+  1079,  1083,  1087,  1093,  1098,  1102,  1106,  1111,  1119,  1123,
+  1128,  1146,  1156,  1174,  1191,  1208,  1225,  1246,  1266,  1286,
+  1301,  1323,  1334,  1338,  1340,  1343,  1346,  1347,  1349,  1350,
+  1352,  1355,  1357,  1360,  1371,  1381,  1391,  1399,  1475,  1477,
+  1478,  1479,  1480,  1483,  1485,  1486,  1487,  1488,  1489,  1490,
+  1491,  1492,  1493,  1494,  1495,  1496,  1497,  1498,  1499,  1500,
+  1501,  1502,  1503,  1504,  1505,  1506,  1507,  1508,  1509,  1510,
+  1511,  1512,  1515,  1517,  1518,  1529,  1536,  1549,  1558,  1566,
+  1574,  1584,  1588,  1593,  1597,  1602,  1606,  1610,  1616,  1622,
+  1628,  1632,  1638,  1651,  1657,  1666,  1670
 };
 #endif
 
@@ -506,8 +525,8 @@ static const char * const yytname[] = {   "$","error","$undefined.","tDOUBLE",
 "tElliptic","tPlane","tRuled","tTransfinite","tComplex","tPhysical","tUsing",
 "tPower","tBump","tProgression","tAssociation","tRotate","tTranslate","tSymmetry",
 "tDilate","tExtrude","tDuplicata","tLoop","tInclude","tRecombine","tDelete",
-"tCoherence","tView","tOffset","tAttractor","tLayers","tScalarSimplex","tVectorSimplex",
-"tTensorSimplex","tScalarTriangle","tVectorTriangle","tTensorTriangle","tScalarLine",
+"tCoherence","tView","tOffset","tAttractor","tLayers","tScalarTetrahedron","tVectorTetrahedron",
+"tTensorTetrahedron","tScalarTriangle","tVectorTriangle","tTensorTriangle","tScalarLine",
 "tVectorLine","tTensorLine","tScalarPoint","tVectorPoint","tTensorPoint","tBSpline",
 "tNurbs","tOrder","tWith","tBounds","tKnots","tColor","tGeneral","tGeometry",
 "tMesh","tB_SPLINE_SURFACE_WITH_KNOTS","tB_SPLINE_CURVE_WITH_KNOTS","tCARTESIAN_POINT",
@@ -522,14 +541,19 @@ static const char * const yytname[] = {   "$","error","$undefined.","tDOUBLE",
 "tLoopSTL","tEndLoop","tEndFacet","'<'","'>'","'+'","'-'","'*'","'/'","'%'",
 "UMINUS","'^'","'('","','","')'","'{'","'}'","'['","']'","All","STLFormatItem",
 "StepFormatItems","StepFormatItem","StepSpecial","StepHeaderItem","StepDataItem",
-"GeomFormatList","GeomFormat","View","Views","ScalarSimplex","VectorSimplex",
-"TensorSimplex","ScalarTriangle","VectorTriangle","TensorTriangle","ScalarLine",
-"VectorLine","TensorLine","ScalarPoint","VectorPoint","TensorPoint","Affectation",
-"Shape","Transform","MultipleShape","ListOfShapes","Duplicata","Delete","Macro",
-"Extrude","ExtrudeParameters","ExtrudeParameter","Transfini","Coherence","Colors",
-"ColorSections","ColorSection","@1","@2","@3","ColorAffects","ColorAffect","RGBAExpr",
-"BoolExpr","FExpr","FExpr_Single","FExpr_Range","VExpr","ListOfStrings","RecursiveListOfStrings",
-"ListOfListOfDouble","RecursiveListOfListOfDouble","ListOfDouble","RecursiveListOfDouble", NULL
+"GeomFormatList","GeomFormat","View","Views","ScalarPointValues","ScalarPoint",
+"@1","VectorPointValues","VectorPoint","@2","TensorPointValues","TensorPoint",
+"@3","ScalarLineValues","ScalarLine","@4","VectorLineValues","VectorLine","@5",
+"TensorLineValues","TensorLine","@6","ScalarTriangleValues","ScalarTriangle",
+"@7","VectorTriangleValues","VectorTriangle","@8","TensorTriangleValues","TensorTriangle",
+"@9","ScalarTetrahedronValues","ScalarTetrahedron","@10","VectorTetrahedronValues",
+"VectorTetrahedron","@11","TensorTetrahedronValues","TensorTetrahedron","@12",
+"Affectation","Shape","Transform","MultipleShape","ListOfShapes","Duplicata",
+"Delete","Macro","Extrude","ExtrudeParameters","ExtrudeParameter","Transfini",
+"Coherence","Colors","ColorSections","ColorSection","@13","@14","@15","ColorAffects",
+"ColorAffect","RGBAExpr","BoolExpr","FExpr","FExpr_Single","FExpr_Range","VExpr",
+"ListOfStrings","RecursiveListOfStrings","ListOfListOfDouble","RecursiveListOfListOfDouble",
+"ListOfDouble","RecursiveListOfDouble", NULL
 };
 #endif
 
@@ -542,22 +566,25 @@ static const short yyr1[] = {     0,
    164,   164,   165,   165,   165,   165,   165,   165,   165,   165,
    165,   165,   165,   165,   166,   166,   167,   167,   167,   167,
    167,   167,   167,   167,   167,   167,   167,   167,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-   179,   180,   181,   181,   181,   181,   181,   181,   181,   181,
-   181,   181,   181,   181,   181,   181,   181,   181,   181,   181,
-   181,   181,   181,   181,   181,   181,   181,   181,   181,   181,
-   182,   182,   182,   182,   183,   183,   183,   184,   184,   185,
-   186,   187,   188,   188,   188,   188,   188,   188,   188,   188,
-   188,   188,   189,   189,   190,   190,   191,   191,   191,   191,
-   191,   191,   191,   191,   191,   191,   192,   193,   194,   194,
-   196,   195,   197,   195,   198,   195,   199,   199,   200,   200,
-   200,   201,   201,   202,   202,   202,   202,   202,   203,   203,
-   203,   203,   203,   203,   203,   203,   203,   203,   203,   203,
-   203,   203,   203,   203,   203,   203,   203,   203,   203,   203,
-   203,   203,   203,   203,   203,   203,   203,   204,   204,   204,
-   205,   205,   206,   206,   206,   206,   207,   207,   208,   208,
-   209,   209,   209,   210,   210,   211,   211,   211,   212,   212,
-   212,   212
+   168,   170,   169,   171,   171,   173,   172,   174,   174,   176,
+   175,   177,   177,   179,   178,   180,   180,   182,   181,   183,
+   183,   185,   184,   186,   186,   188,   187,   189,   189,   191,
+   190,   192,   192,   194,   193,   195,   195,   197,   196,   198,
+   198,   200,   199,   201,   201,   203,   202,   204,   205,   205,
+   205,   205,   205,   205,   205,   205,   205,   205,   205,   205,
+   205,   205,   205,   205,   205,   205,   205,   205,   205,   205,
+   205,   205,   205,   205,   205,   205,   206,   206,   206,   206,
+   207,   207,   207,   208,   208,   209,   210,   211,   212,   212,
+   212,   212,   212,   212,   212,   212,   212,   212,   213,   213,
+   214,   214,   215,   215,   215,   215,   215,   215,   215,   215,
+   215,   216,   217,   218,   218,   220,   219,   221,   219,   222,
+   219,   223,   223,   224,   224,   224,   225,   225,   226,   226,
+   226,   226,   226,   227,   227,   227,   227,   227,   227,   227,
+   227,   227,   227,   227,   227,   227,   227,   227,   227,   227,
+   227,   227,   227,   227,   227,   227,   227,   227,   227,   227,
+   227,   227,   228,   228,   228,   229,   229,   230,   230,   230,
+   230,   231,   231,   232,   232,   233,   233,   233,   234,   234,
+   235,   235,   235,   236,   236,   236,   236
 };
 
 static const short yyr2[] = {     0,
@@ -568,776 +595,807 @@ static const short yyr2[] = {     0,
     13,    11,    13,    17,     9,    11,    11,    13,    11,     9,
      0,     2,     1,     1,     1,     1,     1,     1,     1,     1,
      1,     1,     1,     2,     6,     8,     0,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,    28,
-    28,    28,    22,    22,    22,    16,    16,    16,    10,    10,
-    10,     4,     7,     8,    12,     6,     5,     7,     7,    12,
-     7,     9,    17,     7,     8,     8,     5,     7,    11,     8,
-     9,     8,    22,    20,     8,     8,     5,     8,     7,     8,
-     7,    11,     7,     9,     1,     1,     1,     0,     2,     4,
-     4,     3,     7,     8,    11,    12,    12,     8,    12,     8,
-    11,    15,     1,     2,     9,     2,     6,     9,     9,     9,
-     8,     8,     8,     6,     4,     8,     2,     4,     0,     2,
-     0,     5,     0,     5,     0,     5,     0,     2,     4,     8,
-     4,     9,     7,     1,     1,     1,     1,     1,     1,     3,
-     3,     3,     3,     3,     3,     2,     2,     4,     4,     4,
-     4,     4,     4,     4,     4,     4,     4,     6,     4,     4,
-     4,     4,     4,     4,     6,     6,     6,     1,     1,     1,
-     3,     6,    11,     9,     7,     7,     0,     3,     1,     3,
-     0,     3,     3,     1,     3,     0,     1,     3,     1,     1,
-     3,     3
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     1,
+     3,     0,    13,     1,     3,     0,    13,     1,     3,     0,
+    13,     1,     3,     0,    19,     1,     3,     0,    19,     1,
+     3,     0,    19,     1,     3,     0,    25,     1,     3,     0,
+    25,     1,     3,     0,    25,     1,     3,     0,    31,     1,
+     3,     0,    31,     1,     3,     0,    31,     4,     7,     8,
+    12,     6,     5,     7,     7,    12,     7,     9,    17,     7,
+     8,     8,     5,     7,    11,     8,     9,     8,    22,    20,
+     8,     8,     5,     8,     7,     8,     7,    11,     7,     9,
+     1,     1,     1,     0,     2,     4,     4,     3,     7,     8,
+    11,    12,    12,     8,    12,     8,    11,    15,     1,     2,
+     9,     2,     6,     9,     9,     9,     8,     8,     8,     6,
+     4,     2,     4,     0,     2,     0,     5,     0,     5,     0,
+     5,     0,     2,     4,     8,     4,     9,     7,     1,     1,
+     1,     1,     1,     1,     3,     3,     3,     3,     3,     3,
+     2,     2,     4,     4,     4,     4,     4,     4,     4,     4,
+     4,     4,     6,     4,     4,     4,     4,     4,     4,     6,
+     6,     6,     1,     1,     1,     3,     6,    11,     9,     7,
+     7,     0,     3,     1,     3,     0,     3,     3,     1,     3,
+     0,     1,     3,     1,     1,     3,     3
 };
 
 static const short yydefact[] = {    51,
-     4,     6,     0,     3,     0,     0,     0,     0,     0,     0,
+     4,     6,     0,     2,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     8,     9,    11,
     10,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,    52,    53,    54,    55,    56,    57,
-    58,    62,    59,    60,    61,    63,     0,    12,     0,    13,
-    14,    16,    15,    17,   217,   217,     0,    64,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   226,     0,
-     0,     0,     0,   226,     0,     0,     0,     0,     0,     0,
+    58,    62,    59,    60,    61,    63,   243,   245,   244,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   128,     0,   226,   128,   157,     0,     0,     0,     0,     0,
-     0,   159,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   214,    12,     0,    13,    14,    16,    15,
+    17,   252,   252,     0,    64,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   261,     0,     0,     0,     0,
+   261,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   164,     0,   261,   164,
+   192,     0,     0,     0,     0,     0,     0,   194,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   208,   210,
-   209,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   222,
+   221,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   179,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   227,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   132,     0,     0,     0,    67,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   262,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   168,     0,
+     0,     0,    67,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   219,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   215,   217,   216,   218,   219,   220,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   187,   186,     0,    92,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   229,
-   230,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   130,   129,   155,
-     0,   131,     0,     0,     0,     0,     0,     0,     0,     0,
-   161,   163,   165,   158,   160,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   254,     0,     0,     0,     0,   128,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   264,   265,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   218,     0,
-    19,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   180,   182,   181,   183,   184,   185,    97,     0,
-   226,   226,     0,   107,   226,     0,   117,   226,   226,     0,
-     0,   228,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   128,
-   128,     0,     0,     0,     0,     0,     0,    67,     0,     0,
+     0,   166,   165,   191,     0,   167,     0,     0,     0,     0,
+     0,     0,     0,     0,   196,   198,   200,   193,   195,     0,
+   223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     0,   234,   235,   236,   237,   238,   239,     0,     0,     0,
+   217,   216,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-    77,    78,    79,     0,     0,   226,     0,     0,   226,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   226,   226,     0,     0,     0,     0,   226,
-   226,     0,     0,     0,     0,     0,   226,     0,   226,     0,
-     0,     0,     0,     0,   220,     0,   217,   188,   189,   190,
-   191,   192,   193,   194,   195,   196,   197,     0,   199,   200,
-   201,   202,   203,   204,     0,     0,     0,     0,     0,     0,
-   226,     0,   226,     0,     0,     0,   211,   231,   232,    96,
-     0,   226,   226,   226,   147,     0,   226,   226,   226,   226,
-   226,   226,   226,   226,     0,     0,     0,   127,     0,   126,
-   125,     0,     0,     0,     0,     0,     0,     0,   154,     0,
+     0,     0,     0,     0,   253,     0,    19,     0,   133,     0,
+   261,   261,     0,   143,   261,     0,   153,   261,   261,     0,
+     0,   263,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   164,   164,
+     0,     0,     0,     0,     0,     0,    67,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    65,     0,     0,     0,     0,   221,     0,   167,
-   167,   167,     0,     0,     0,     0,     0,     0,     0,     0,
+    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+    78,    79,     0,     0,   261,     0,     0,   261,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   261,   261,     0,     0,
+     0,     0,   261,   261,     0,     0,     0,     0,     0,   261,
+     0,   261,     0,     0,     0,     0,     0,   255,     0,   252,
+     0,     0,     0,   261,     0,   261,     0,     0,     0,   246,
+   266,   267,   132,     0,   261,   261,   261,   183,     0,   261,
+   261,   261,   261,   261,   261,   261,     0,     0,     0,   163,
+     0,   162,   161,     0,     0,     0,     0,     0,     0,     0,
+   190,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,    65,     0,     0,     0,     0,   256,
+     0,   202,   202,   202,     0,   233,   240,   241,   242,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   174,   175,   176,
-   177,   178,     0,     0,     0,     0,     0,     0,     0,    18,
-     0,     0,     0,     0,     0,    93,   101,     0,   104,     0,
-    98,     0,    99,   119,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   121,   123,   128,     0,     0,     0,     0,
-     0,     0,     0,   133,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   108,
-     0,   226,   226,     0,   226,     0,     0,   167,     0,     0,
-   226,     0,     0,     0,   226,     0,     0,     0,     0,     0,
+     0,     0,     0,   209,   210,   211,   212,   213,     0,     0,
+     0,     0,     0,     0,     0,    18,     0,   129,   137,     0,
+   140,     0,   134,     0,   135,   155,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   226,     0,     0,     0,     0,     0,     0,
-     0,     0,   217,   198,   205,   206,   207,     0,   106,   116,
-     0,     0,   152,   110,   112,     0,     0,     0,   151,   153,
-   118,    94,   105,   115,   120,   156,     0,     0,     0,     0,
-     0,   138,     0,   140,     0,   134,     0,     0,    66,     0,
+     0,     0,     0,     0,   157,   159,   164,     0,     0,     0,
+     0,     0,     0,     0,   169,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   221,     0,   224,     0,     0,     0,     0,
-   162,   168,   164,   166,     0,     0,     0,     0,     0,     0,
-     0,    21,     0,    30,     0,    34,     0,    28,     0,     0,
-    33,     0,    38,    36,     0,     0,     0,     0,     0,     0,
-    45,     0,     0,     0,     0,     0,    50,     0,     0,   102,
-   212,     0,   148,   149,   150,   216,     0,   215,   128,   124,
-     0,     0,     0,     0,     0,     0,   143,     0,     0,     0,
+   144,     0,   261,   261,     0,   261,     0,     0,   202,     0,
+     0,   261,     0,     0,     0,   261,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   226,   223,   222,   226,     0,     0,     0,
-     0,   182,   181,   111,     0,     0,   221,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   226,
+     0,     0,     0,     0,   261,     0,     0,     0,     0,     0,
+     0,     0,     0,   252,     0,   142,   152,     0,     0,   188,
+   146,   148,     0,     0,     0,   187,   189,   154,   130,   141,
+   151,   156,     0,     0,     0,     0,     0,   174,     0,   176,
+     0,   170,     0,     0,    66,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   256,
+     0,   259,     0,     0,     0,     0,   197,   203,   199,   201,
+     0,     0,     0,     0,     0,    21,     0,    30,     0,    34,
+     0,    28,     0,     0,    33,     0,    38,    36,     0,     0,
+     0,     0,     0,     0,    45,     0,     0,     0,     0,     0,
+    50,     0,     0,   138,   247,     0,   184,   185,   186,   251,
+     0,   250,   164,   160,     0,     0,     0,     0,     0,     0,
+   179,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   261,   258,   257,
+   261,     0,     0,     0,     0,   147,     0,     0,   256,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   146,   226,     0,   144,     0,     0,     0,
+     0,   261,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   182,   261,     0,   180,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   226,   226,     0,   225,     0,     0,   169,   210,     0,   171,
-     0,    35,     0,     0,     0,     0,    25,     0,    31,     0,
-    37,    26,    39,     0,    42,     0,    46,    47,     0,     0,
-    49,     0,     0,     0,     0,   214,   122,     0,     0,     0,
-     0,   141,   135,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   226,   226,   109,
+     0,     0,   261,   261,     0,   260,     0,     0,   204,   245,
+     0,   206,     0,    35,     0,     0,     0,     0,    25,     0,
+    31,     0,    37,    26,    39,     0,    42,     0,    46,    47,
+     0,     0,    49,     0,     0,     0,     0,   249,   158,     0,
+     0,     0,     0,   177,   171,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   261,
+   261,   145,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   173,
+   175,   172,     0,   261,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    82,    86,    90,   131,   136,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,    29,    32,    40,
+     0,    41,    48,    43,     0,     0,   248,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   137,   139,   136,
-     0,   226,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   226,   226,   226,    95,   100,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,    29,    32,    40,     0,    41,
-    48,    43,     0,     0,   213,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   226,
+     0,   261,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   261,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   205,
+     0,     0,     0,     0,    24,    27,     0,     0,     0,   178,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   226,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    89,    90,    91,     0,     0,   170,     0,     0,
-     0,     0,    24,    27,     0,     0,     0,   142,     0,     0,
+     0,    80,     0,    84,     0,    88,     0,     0,     0,   208,
+     0,     0,   261,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   173,     0,     0,   226,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    44,    20,
+   139,   181,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,    81,    83,    85,    87,    89,    91,     0,     0,   207,
+     0,     0,   261,     0,     0,     0,     0,     0,     0,    94,
+    98,   102,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     5,   261,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,    44,    20,   103,   145,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   172,
-     0,     0,   226,     0,     0,     0,     0,     0,     0,   226,
-   226,   226,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     5,   226,
-     0,     0,     0,     0,     0,     0,     0,    86,    87,    88,
-     0,   114,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   226,     0,     0,     0,     0,     0,     0,     0,   113,
-     0,    22,     0,     0,     0,     0,     0,     0,   226,     0,
-     0,     0,   226,   226,   226,     0,     0,     0,     0,     0,
-     0,     0,   226,     0,     0,     0,    83,    84,    85,     0,
+     0,   150,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,    92,     0,    96,     0,   100,     0,   261,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   226,   226,   226,    23,     0,     0,     0,    80,
-    81,    82,     0,     0,     0
+     0,   149,     0,    22,     0,     0,     0,     0,     0,     0,
+    93,    95,    97,    99,   101,   103,   261,     0,     0,     0,
+   106,   110,   114,     0,     0,     0,     0,     0,     0,     0,
+   261,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   104,     0,   108,     0,   112,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   105,   107,   109,   111,   113,   115,     0,   118,   122,
+   126,    23,     0,     0,     0,     0,     0,     0,     0,   116,
+     0,   120,     0,   124,     0,     0,     0,     0,     0,     0,
+   117,   119,   121,   123,   125,   127,     0,     0,     0
 };
 
-static const short yydefgoto[] = {  1273,
-     4,     5,    18,    19,    20,    21,     6,    55,    56,   344,
-   472,   473,   474,   475,   476,   477,   478,   479,   480,   481,
-   482,   483,    57,   339,   578,   579,   580,   581,    61,    62,
-    63,   866,   867,    64,    65,    66,   234,   355,   490,   491,
-   492,   717,   718,   891,   643,   197,   186,   311,   214,   156,
-   268,   714,   805,   806,   312
+static const short yydefgoto[] = {  1337,
+     4,     5,    18,    19,    20,    21,     6,    55,    56,   368,
+  1111,   491,  1059,  1113,   492,  1060,  1115,   493,  1061,  1221,
+   494,  1194,  1223,   495,  1195,  1225,   496,  1196,  1282,   497,
+  1268,  1284,   498,  1269,  1286,   499,  1270,  1319,   500,  1313,
+  1321,   501,  1314,  1323,   502,  1315,    57,   363,   580,   581,
+   582,   583,    61,    62,    63,   860,   861,    64,    65,    66,
+   260,   379,   509,   510,   511,   718,   719,   885,   649,   224,
+    94,   337,   240,   210,   322,   715,   801,   802,   338
 };
 
-static const short yypact[] = {   451,
--32768,-32768,  -111,-32768,   157,  1182,    31,    23,    34,    59,
-    66,   108,   110,   114,   -26,   -13,    -6,-32768,-32768,-32768,
--32768,   168,   184,    64,    74,    78,     9,    12,    80,    92,
-   206,   141,   226,   246,   248,    37,   280,   193,   178,   217,
-   236,   241,   -12,   239,   393,   365,   249,   395,   399,    82,
-   263,    -7,   267,   385,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,   418,-32768,  1174,-32768,
--32768,-32768,-32768,-32768,   273,   273,   419,-32768,   321,   321,
-   321,   321,   275,   321,   276,   321,   321,   321,    72,   321,
-   278,   282,   285,    72,   283,   286,   288,   290,   296,   297,
-   306,   307,   101,   101,   101,   101,   310,   311,   312,   321,
--32768,   443,    72,-32768,-32768,   -43,   313,   319,   321,   -48,
-   321,-32768,   326,   455,   330,   345,   347,   361,   374,   375,
-   416,   422,   423,   428,   429,   438,   440,   444,   445,   447,
-   449,   462,   464,   467,   474,   475,   482,   487,   498,   499,
-   500,   504,   510,   515,   563,   328,   495,   430,-32768,-32768,
--32768,   516,   517,   518,   522,   524,   525,   526,   528,   529,
-   530,   539,   540,   541,   550,   552,   558,   560,   573,   575,
-   577,   321,   321,   321,   103,-32768,     2,   329,   383,   321,
-   586,   321,   622,   719,   729,   321,    43,   562,   739,   321,
-   321,   321,   594,   321,   321,   321,   321,   321,   321,   321,
-   321,   321,   321,   582,   572,   587,   583,   321,   321,   321,
-   853,   574,-32768,   265,   662,   101,-32768,   321,   321,   763,
-   545,   321,   775,    21,   321,   613,   747,   750,   757,   758,
-   765,   767,   768,   770,   772,   774,   776,   780,   789,   790,
-   791,   793,   798,   799,   801,   802,   803,   812,   814,   696,
-   817,   826,   827,   828,   777,   831,-32768,   -73,   837,   822,
-   840,   321,   321,   321,   321,   321,   321,   321,   321,   321,
-   321,   321,   321,   321,   321,   321,   321,   321,   321,   321,
-   321,   697,   697,   785,-32768,   321,   321,   321,   321,   321,
-   308,   841,   859,   811,   315,   823,   861,   862,   863,   251,
--32768,     1,   321,   869,   490,   833,   871,   321,   497,   615,
-   917,   929,   948,   958,   976,   998,  1557,  1669,   101,   694,
-   724,   321,  1678,  1687,  1696,   101,   323,-32768,-32768,-32768,
-   321,-32768,   726,   417,  1705,  1714,   873,   736,  1011,   880,
--32768,-32768,-32768,-32768,-32768,  1044,   751,   741,   742,   743,
-   744,   748,   749,   752,   759,   760,   762,   766,   781,   782,
-   784,   787,   788,   792,   807,   808,   810,   813,   819,   820,
-   832,   838,   839,   849,   850,   852,   867,   885,-32768,   764,
--32768,   868,  1059,  1104,  1162,  1172,  1183,  1193,  1203,  1213,
-  1223,  1233,  1723,  1244,  1254,  1264,  1276,  1286,  1296,  1732,
-  1741,  1750,-32768,    27,    27,   697,   697,   697,-32768,   101,
-    72,    72,   895,-32768,    72,   907,-32768,    72,    72,    35,
-   321,-32768,   112,   786,   918,   919,   933,    22,   934,   935,
-   946,   966,   967,   977,   981,   984,   321,   321,   870,   605,
-   605,  1306,   101,   101,   101,    85,   130,-32768,   842,   872,
-   874,   875,   876,   878,   881,   882,   883,   884,   886,   887,
-  1024,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,   321,   321,    72,   321,  1028,    72,   911,
-   912,   914,  1061,   936,  1068,   321,   321,   101,  1073,  1074,
-   937,  1080,  1081,    72,    72,  1092,   101,  1093,  1095,    72,
-    72,  1096,  1102,  1103,  1106,  1108,    72,   593,    72,  1109,
-  1118,  1119,  1123,  1124,-32768,  1125,   273,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,   321,-32768,-32768,
--32768,-32768,-32768,-32768,   321,   321,   321,  1126,    26,  1127,
-    72,  1128,    72,  1139,  1140,   321,    43,   251,-32768,-32768,
-   321,    72,    72,    72,-32768,   135,    72,    72,    72,    72,
-    72,    72,    72,    72,  1759,  1768,   321,-32768,   975,   712,
--32768,   994,   996,   175,   209,   214,   101,  1152,-32768,   433,
-   321,   321,   321,   321,   321,   321,   321,   321,   321,   321,
-   321,   321,-32768,  1777,  1786,  1153,  1316,   139,  1047,  1157,
-  1157,  1157,   321,  1159,  1013,  1795,  1804,  1016,  1018,  1019,
-  1021,  1022,  1029,  1023,  1030,  1033,  1027,  1034,  1040,  1042,
-  1048,  1049,  1055,  1058,  1077,  1078,  1043,-32768,-32768,-32768,
--32768,-32768,  1079,  1088,  1094,  1100,  1101,  1046,  1107,-32768,
-  1114,  1327,  1337,  1347,  1368,-32768,-32768,   101,-32768,  1164,
--32768,  1167,-32768,-32768,   266,  1813,  1204,  1225,  1226,   321,
-   321,   321,  1248,  1249,  1251,  1253,  1261,  1262,  1263,  1274,
-   321,   321,  1378,-32768,-32768,   605,   101,  1275,   101,  1277,
-   101,    10,  1131,-32768,  1278,  1822,  1831,  1840,  1849,  1858,
-  1867,  1876,  1885,  1894,  1903,  1912,  1921,   321,   321,-32768,
-  1279,    72,    72,  1202,    72,  1280,  1144,  1157,  1155,  1156,
-   284,  1309,  1317,   321,    72,  1313,  1319,  1324,  1178,  1325,
-   593,  1328,  1322,   321,  1334,  1330,  1335,  1338,  1340,   593,
-   321,   321,   321,    72,  1344,  1348,   593,   321,  1350,  1351,
-  1355,   321,   273,-32768,-32768,-32768,-32768,  1358,-32768,-32768,
-   321,   321,-32768,-32768,-32768,   174,   227,   234,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,  1388,   299,  1217,  1219,
-  1220,-32768,  1229,-32768,  1230,-32768,   -22,   321,-32768,   321,
-   321,   321,   321,   321,   321,   321,   321,   321,   321,   321,
-   321,  1398,  1408,   139,   223,-32768,   230,  1221,  1303,     8,
--32768,-32768,-32768,-32768,   321,   321,  1385,  1381,  1240,  1930,
-  1243,-32768,  1260,-32768,  1272,-32768,  1250,-32768,  1273,  1418,
--32768,  1282,-32768,-32768,  1252,  1284,  1428,  1939,  1438,  1283,
--32768,  1285,  1291,  1948,  1293,  1294,-32768,  1957,  1302,-32768,
-    43,  1966,-32768,-32768,-32768,-32768,   321,-32768,   605,-32768,
-   321,   321,   321,  1389,  1259,   -35,-32768,  1448,  1975,  1984,
-  1993,  2002,  2011,  2020,  2029,  2038,  2047,  2056,  2065,  2074,
-  1407,  1419,  1332,    72,-32768,-32768,    72,   321,  1399,   527,
-  1421,    86,   132,-32768,  1320,  1441,   139,   593,  1453,   321,
-  1451,   593,  1457,  1461,  1460,  1463,  1471,   321,  1472,    72,
-  1478,  1481,   321,  1464,  1482,   321,  1480,  1490,   431,  1343,
-  1459,  1469,  1479,-32768,    72,  1488,-32768,  1494,   321,   321,
-   321,   321,   321,   321,   321,   321,   321,   321,   321,   321,
-    72,    72,  1349,-32768,  1352,   244,-32768,  1353,  2083,-32768,
-  1498,-32768,  1354,  1356,  1364,  2092,-32768,  1366,-32768,  1367,
--32768,-32768,-32768,  1489,-32768,  1365,-32768,-32768,  1506,  1373,
--32768,  1516,  1375,  1377,   321,-32768,-32768,  1500,  1523,    11,
-  1384,-32768,-32768,  2101,  2110,  2119,  2128,  2137,  2146,  2155,
-  2164,  2173,  1526,  1537,  1547,  1530,  1532,    72,    72,-32768,
-   321,   321,  1536,   593,   593,   593,   593,  1539,  1542,  1543,
-   593,  1549,  1550,  1552,  1560,  1561,   643,-32768,-32768,-32768,
-   -22,    72,   321,   321,   321,   321,   321,   321,   321,   321,
-   321,    72,    72,    72,-32768,-32768,  1417,  1415,   656,  2182,
-  1572,  1425,  1427,  1433,  1434,-32768,-32768,-32768,  1437,-32768,
--32768,-32768,  1444,  1445,-32768,    15,  1447,  2191,  2200,  2209,
-  2218,  2227,  2236,  2245,  2254,  2263,  1573,  1583,  1593,    72,
-  1527,  1600,   321,  1475,   593,   593,  1604,  1610,   593,  1612,
-  1614,  1620,    72,   321,   321,   321,   321,   321,   321,   321,
-   321,   321,-32768,-32768,-32768,  1466,  1474,-32768,   477,  1626,
-  1485,  1486,-32768,-32768,  1491,  1492,  1493,-32768,  1476,  2272,
-  2281,  2290,  2299,  2308,  2317,  2326,  2335,  2344,  1562,   321,
-   321,-32768,  1637,   593,    72,  1647,  1648,  1650,  1651,   321,
-   321,   321,   321,   321,   321,   321,   321,   321,  1510,  2353,
-   669,  1661,  1522,  1525,-32768,-32768,-32768,-32768,  2362,  2371,
-  2380,  2389,  2398,  2407,  1569,  1579,  1599,   321,   321,-32768,
-  1528,   593,    72,   321,   321,   321,   321,   321,   321,    72,
-    72,    72,  2416,   681,  1534,  1533,  1544,  2425,  2434,  2443,
-  2452,  2461,  2470,  1671,  1673,  1679,   321,  1681,-32768,    72,
-   593,   321,   321,   321,   321,   321,   321,-32768,-32768,-32768,
-   695,-32768,  1546,  1555,  2479,  2488,  2497,  2506,  2515,  2524,
-  1688,    72,  1692,   321,   321,   321,   321,   321,   321,-32768,
-  1553,-32768,  2533,  2542,  2551,  1609,  1619,  1629,    72,   321,
-   321,   321,    72,    72,    72,  1565,  2560,  2569,  2578,  1711,
-  1720,  1721,    72,   321,   321,   321,-32768,-32768,-32768,  1578,
-  2587,  2596,  2605,   593,   321,   321,   321,  1568,  1639,  1649,
-  1659,  1724,    72,    72,    72,-32768,  1726,  1727,  1728,-32768,
--32768,-32768,  1735,  1736,-32768
+static const short yypact[] = {   266,
+-32768,-32768,  -100,-32768,   343,  1294,   611,     9,    68,    74,
+    91,   106,   121,   203,   -80,   -13,    22,-32768,-32768,-32768,
+-32768,   207,   183,    73,   102,   120,   -45,   -41,   143,   168,
+   164,   197,   315,   321,   327,    33,   280,    86,   238,   287,
+   288,   290,   -26,   289,   436,   411,   293,   441,   452,     2,
+   308,   -29,   309,   431,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   316,
+   317,   341,   356,   361,   386,   387,   391,   408,   412,   413,
+   415,   416,   418,   420,   430,   432,   433,   435,   448,   611,
+   611,   611,   460,-32768,-32768,  1286,-32768,-32768,-32768,-32768,
+-32768,   449,   449,   544,-32768,   611,   611,   611,   611,   450,
+   611,   451,   611,   611,   611,   505,   611,   407,   457,   461,
+   505,   428,   459,   466,   467,   468,   469,   495,   -27,   -27,
+   -27,   -27,   496,   501,   503,   611,-32768,   648,   505,-32768,
+-32768,   -57,   506,   507,   611,   -68,   611,-32768,   509,   611,
+   611,   611,   611,   611,   611,   611,   611,   611,   611,   611,
+   611,   611,   611,   611,   611,   611,   611,   611,   611,   511,
+   511,   196,   611,   611,   611,   611,   611,   460,   512,   513,
+   514,   518,   519,   520,   523,   524,   548,   549,   550,   551,
+   567,   573,   574,   579,   581,   582,   583,   584,   593,   597,
+   598,   600,   603,   610,   615,   616,   618,   623,   656,   575,
+   622,   594,    54,   237,   358,   399,   611,   498,   611,   626,
+   657,   751,   611,   878,   756,   796,   611,   611,   611,   769,
+   611,   611,   611,   611,   611,   611,   611,   611,   611,   640,
+   645,   646,   659,   611,   611,   611,   259,   795,-32768,    83,
+  1020,   -27,-32768,   611,   611,   807,   725,   611,   818,   -24,
+   611,   829,   849,   897,   943,   957,  1061,  1091,  1111,  1128,
+  1147,  1037,  1217,  1274,  1284,  1295,  1306,  1316,  1071,  1157,
+  1763,   611,   611,-32768,   -58,   401,   511,   511,   511,   -72,
+   803,   812,   815,   816,   817,   828,   830,   833,   836,   837,
+   838,   840,   841,   842,   850,   851,   853,   855,   856,   858,
+   859,   864,   865,   699,   867,   877,   881,   882,   880,   883,
+-32768,    84,   885,   886,   894,-32768,   235,   884,   895,  1326,
+   253,  1336,   900,   902,   903,   185,-32768,   -19,   611,   906,
+   -51,  1346,  1356,   611,   595,   650,  1366,  1377,  1387,  1397,
+  1407,  1772,  1781,   -27,   754,   778,   611,  1790,  1799,  1808,
+   -27,-32768,-32768,-32768,   611,-32768,   779,   346,  1817,  1826,
+   927,   785,  1417,   930,-32768,-32768,-32768,-32768,-32768,  1427,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+   611,-32768,-32768,-32768,-32768,-32768,-32768,   611,   611,   611,
+  -118,  -118,   805,   793,   804,   806,   814,   825,   826,   831,
+   832,   834,   848,   869,   874,   893,   896,   909,   912,   915,
+   916,   917,   931,   932,   939,   940,   942,   945,   946,   953,
+   954,   956,   959,   941,-32768,   802,-32768,   962,-32768,   -27,
+   505,   505,   951,-32768,   505,   972,-32768,   505,   505,    30,
+   611,-32768,    62,   797,   973,   977,   982,    32,   993,   995,
+   997,   999,  1000,  1011,  1024,   611,   611,   964,   522,   522,
+  1438,   -27,   -27,   -27,   131,   112,-32768,   819,   898,   944,
+   958,   966,   967,   968,   969,   970,   981,   983,   985,   960,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,   611,   611,   505,   611,  1025,   505,   892,   928,
+   984,  1129,  1448,  1458,  1468,  1478,  1004,  1137,   611,   611,
+   -27,  1138,  1139,  1008,  1153,  1156,   505,   505,  1160,   -27,
+  1161,  1162,   505,   505,  1163,  1170,  1172,  1173,  1175,   505,
+   333,   505,  1181,  1155,  1182,  1190,  1191,-32768,  1203,   449,
+  1205,    23,  1206,   505,  1212,   505,  1213,  1215,   611,   878,
+   185,-32768,-32768,   611,   505,   505,   505,-32768,   147,   505,
+   505,   505,   505,   505,   505,   505,  1835,  1844,   611,-32768,
+  1076,  1113,-32768,  1078,  1085,   174,   244,   255,   -27,  1233,
+-32768,   638,   611,   611,   611,   611,   611,   611,   611,   611,
+   611,   611,   611,   611,-32768,  1853,  1862,  1235,  1488,   -17,
+  1159,  1241,  1241,  1241,   611,-32768,-32768,-32768,-32768,   611,
+  1095,  1871,  1880,  1096,  1098,  1106,  1099,  1107,  1110,  1112,
+  1124,  1125,  1126,  1130,  1127,  1134,  1146,  1154,  1164,  1165,
+  1166,  1189,  1136,-32768,-32768,-32768,-32768,-32768,  1192,  1200,
+  1208,  1216,  1219,  1152,  1220,-32768,  1226,-32768,-32768,   -27,
+-32768,  1256,-32768,  1301,-32768,-32768,   349,  1889,  1307,  1308,
+  1315,   611,   611,   611,  1317,  1351,  1358,  1362,  1373,  1375,
+  1386,   611,   611,  1498,-32768,-32768,   522,   -27,  1388,   -27,
+  1389,   -27,    11,  1242,-32768,  1392,  1898,  1907,  1916,  1925,
+  1934,  1943,  1952,  1961,  1970,  1979,  1988,  1997,   611,   611,
+-32768,  1240,   505,   505,  1229,   505,  1325,  1188,  1241,  1245,
+  1267,   286,   460,  1419,   611,   505,  1404,  1421,  1425,  1287,
+  1428,   333,  1429,  1434,   611,  1436,  1440,  1439,  1442,  1443,
+   333,   611,   611,   611,   505,  1450,  1454,   333,   611,  1460,
+  1461,  1467,   611,   449,  1470,-32768,-32768,   611,   611,-32768,
+-32768,-32768,   119,   128,   135,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,  1508,   410,  1313,  1320,  1332,-32768,  1333,-32768,
+  1335,-32768,    52,   611,-32768,   611,   611,   611,   611,   611,
+   611,   611,   611,   611,   611,   611,   611,  1521,  1531,   -17,
+   282,-32768,   -12,  1314,  1413,    10,-32768,-32768,-32768,-32768,
+  1481,   460,  1342,  2006,  1345,-32768,  1352,-32768,  1353,-32768,
+  1354,-32768,  1363,  1541,-32768,  1365,-32768,-32768,  1355,  1361,
+  1551,  2015,  1561,  1368,-32768,  1372,  1376,  2024,  1383,  1385,
+-32768,  2033,  1384,-32768,   878,  2042,-32768,-32768,-32768,-32768,
+   611,-32768,   522,-32768,   611,   611,   611,  1491,  1364,   -40,
+-32768,  1572,  2051,  2060,  2069,  2078,  2087,  2096,  2105,  2114,
+  2123,  2132,  2141,  2150,  1520,  1537,  1462,   505,-32768,-32768,
+   505,   611,  1542,   668,  1548,-32768,   100,  1549,   -17,   333,
+  1544,   611,  1552,   333,  1558,  1554,  1559,  1562,  1568,   611,
+  1569,   505,  1571,  1574,   611,  1564,  1579,   611,  1573,  1584,
+   576,  1441,  1583,  1593,  1603,-32768,   505,  1582,-32768,  1590,
+   611,   611,   611,   611,   611,   611,   611,   611,   611,   611,
+   611,   611,   505,   505,  1445,-32768,  1455,   178,-32768,  1457,
+  2159,-32768,   611,-32768,  1464,  1465,  1474,  2168,-32768,  1447,
+-32768,  1453,-32768,-32768,-32768,  1613,-32768,  1475,-32768,-32768,
+  1623,  1466,-32768,  1633,  1477,  1484,   611,-32768,-32768,  1632,
+  1639,    12,  1495,-32768,-32768,  2177,  2186,  2195,  2204,  2213,
+  2222,  2231,  2240,  2249,  1643,  1653,  1663,  1642,  1649,   505,
+   505,-32768,   611,   611,   460,   333,   333,   333,   333,  1650,
+  1652,  1655,   333,  1656,  1662,  1665,  1604,  1614,   670,-32768,
+-32768,-32768,    52,   505,   611,   611,   611,   611,   611,   611,
+   611,   611,   611,-32768,-32768,-32768,-32768,-32768,  1518,  1485,
+   708,  2258,   460,  1527,  1528,  1497,  1507,-32768,-32768,-32768,
+  1530,-32768,-32768,-32768,  1538,  1547,-32768,   -39,  1550,  2267,
+  2276,  2285,  2294,  2303,  2312,  2321,  2330,  2339,  1476,  1519,
+  1529,   505,  1608,  1686,   611,   220,   333,   333,  1696,  1702,
+   333,  1694,  1704,  1705,   505,   611,   611,   611,   611,   611,
+   611,   611,   611,   611,   611,   611,   611,  1560,  1566,-32768,
+   613,   611,  1580,  1589,-32768,-32768,  1570,  1578,  1581,-32768,
+  1587,  2348,  2357,  2366,  2375,  2384,  2393,  2402,  2411,  2420,
+    50,   878,    63,   878,    64,   878,  1645,   611,   611,-32768,
+   460,   333,   505,  1706,  1717,  1737,  1738,   611,   611,   611,
+   611,   611,   611,   611,   611,   611,   611,  1744,   611,  1745,
+   611,  1747,  1601,  2429,   722,   460,  1609,  1610,-32768,-32768,
+-32768,-32768,  2438,  2447,  2456,  2465,  2474,  2483,  1673,  1683,
+  1693,   878,-32768,   878,-32768,   878,-32768,   611,   611,-32768,
+    43,   333,   505,   611,   611,   611,   611,   611,   611,-32768,
+-32768,-32768,  2492,   735,  1624,  1612,  1619,  2501,  2510,  2519,
+  2528,  2537,  2546,  1618,  1620,  1621,   611,  1774,-32768,   505,
+   333,   611,   611,   611,   611,   611,   611,   611,   611,   611,
+   784,-32768,  1630,  1631,  2555,  2564,  2573,  2582,  2591,  2600,
+    99,   878,   140,   878,   166,   878,  1778,   505,  1784,   611,
+   611,   611,   611,   611,   611,   611,  1785,   611,  1787,   611,
+  1788,-32768,  1659,-32768,  2609,  2618,  2627,  1703,  1713,  1723,
+   878,-32768,   878,-32768,   878,-32768,   505,   611,   611,   611,
+-32768,-32768,-32768,  1660,  2636,  2645,  2654,  1647,  1648,  1651,
+   505,   611,   611,   611,   611,   611,   611,  1669,  2663,  2672,
+  2681,   182,   878,   184,   878,   208,   878,   333,   611,   611,
+   611,   611,  1797,   611,  1807,   611,  1815,  1671,  1733,  1743,
+  1753,   878,-32768,   878,-32768,   878,-32768,  1818,-32768,-32768,
+-32768,-32768,  1661,  1677,  1678,   611,   611,   611,   216,   878,
+   217,   878,   236,   878,   611,  1827,   611,  1828,   611,  1834,
+   878,-32768,   878,-32768,   878,-32768,  1841,  1843,-32768
 };
 
 static const short yypgoto[] = {-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1288,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1367,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,  1731,  1743,  -445,   271,  1744,-32768,-32768,
--32768,   717,  -843,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,  -576,-32768,-32768,  -721,   -79,-32768,  1326,   -91,   -72,
--32768,  -727,  1053,   476,-32768
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1845,  1847,  -468,
+   257,  1848,-32768,-32768,-32768,   847,  -857,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,  -591,-32768,-32768,  -711,    -7,
+-32768,  1399,  -121,  -102,-32768,  -776,  1149,   463,-32768
 };
 
 
-#define	YYLAST		2756
-
-
-static const short yytable[] = {   185,
-   187,   188,   189,   157,   191,   582,   193,   194,   195,   827,
-   199,   889,   215,   216,   217,   786,  1020,   107,   836,   226,
-   108,   109,   927,   864,     7,   843,   120,   565,    68,   865,
-   221,   657,   231,    67,   719,   720,   864,   159,   160,   230,
-    69,   233,   865,   161,   162,   163,   164,   165,   166,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-   178,   179,   180,   181,    70,    83,   658,   566,    85,    94,
-    95,    71,    96,   864,   159,   160,   883,   388,   389,   865,
-   161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-   171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-   181,   232,   292,   293,   294,   351,   352,   353,   295,   227,
-   304,   117,   306,    72,   118,    73,   310,   560,   926,    74,
-   315,   316,   317,    75,   319,   320,   321,   322,   323,   324,
-   325,   326,   327,   328,   343,   589,    76,   110,   333,   334,
-   335,   812,   121,    77,   296,   297,   298,   299,   345,   346,
-   300,   431,   349,   301,   432,   356,    -2,     8,    84,     9,
-   890,    86,   787,  1021,   296,   297,   298,   299,  1082,   953,
-   300,   298,   299,    78,   354,   300,   954,   182,   183,   853,
-   958,   670,   671,   672,   184,   296,   297,   298,   299,   556,
-    79,   300,   393,   394,   395,   396,   397,   398,   399,   400,
-   401,   402,   403,   404,   405,   406,   407,   408,   409,   410,
-   411,   412,   927,    80,   182,   183,   414,   415,   416,   417,
-   418,   184,    98,    81,   196,    99,   100,    82,   101,    87,
-  -187,  -187,   854,   433,   300,   587,   588,   449,   438,   855,
-   780,    88,   102,    89,   456,   296,   297,   298,   299,  1000,
-   212,   300,   452,   213,   296,   297,   298,   299,   430,    91,
-   300,   457,    10,    11,    12,    13,    14,    15,    16,    17,
-   340,   341,   296,   297,   298,   299,  -186,  -186,   300,    92,
-   300,    93,  1042,  1043,  1044,  1045,   159,   160,   712,  1049,
-    90,   713,   161,   162,   163,   164,   165,   166,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-   179,   180,   181,   419,   420,    97,   296,   297,   298,   299,
-   424,   425,   300,   159,   160,   687,   688,   103,   548,   161,
-   162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-   172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-   557,   558,    98,  1101,  1102,    99,   100,  1105,   101,   689,
-   690,   584,   585,   586,   691,   692,   104,   575,   576,   296,
-   297,   298,   299,   884,   885,   300,   296,   297,   298,   299,
-   884,   222,   300,   886,   225,   105,   296,   297,   298,   299,
-   106,   111,   300,   296,   297,   298,   299,   112,   113,   300,
-   115,   114,  1143,   116,   604,   605,   618,   607,   296,   297,
-   298,   299,   119,   920,   300,   627,   616,   617,   123,   122,
-   124,   761,   155,   158,   190,   192,   815,   816,   298,   299,
-   200,   201,   300,   184,   202,   204,   196,   206,   205,   207,
-  1176,   296,   297,   298,   299,   208,   209,   300,   223,   857,
-    -7,    -7,   858,    -7,   651,   210,   211,   236,   652,   218,
-   219,   220,   228,   182,   183,   653,   654,   655,   229,  1204,
-   184,   296,   297,   298,   299,   235,   665,   300,   269,   237,
-   302,   666,   459,   460,   461,   462,   463,   464,   465,   466,
-   467,   468,   469,   470,   238,   693,   239,   683,   459,   460,
-   461,   462,   463,   464,   465,   466,   467,   468,   469,   470,
-   240,   696,   697,   698,   699,   700,   701,   702,   703,   704,
-   705,   706,   707,   241,   242,   296,   297,   298,   299,   159,
-   948,   300,  1258,   721,   303,   161,   162,   163,   164,   165,
-   166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-   176,   177,   178,   179,   180,   181,    -7,    -7,    -7,    -7,
-    -7,    -7,    -7,    -7,   198,   243,   758,   267,   313,   203,
-   471,   244,   245,   296,   297,   298,   299,   246,   247,   300,
-   271,   975,     1,     2,   976,     3,   695,   248,   224,   249,
-   766,   767,   768,   250,   251,   781,   252,   783,   253,   785,
-   318,   777,   778,    24,    25,    26,    27,    28,    29,    30,
-    31,   254,    32,   255,    34,    35,   256,    37,   337,   296,
-   297,   298,   299,   257,   258,   300,   348,  1121,   802,   803,
-  1122,   259,   296,   297,   298,   299,   260,    50,   300,   296,
-   297,   298,   299,   435,   820,   300,   270,   261,   262,   263,
-   439,    51,    52,   264,   830,    39,    40,    41,    42,   265,
-    44,   837,   838,   839,   266,   272,   273,   274,   844,   182,
-   183,   275,   848,   276,   277,   278,   184,   279,   280,   281,
-   849,   851,   852,   638,   639,   640,   641,   642,   282,   283,
-   284,    24,    25,    26,    27,    28,    29,    30,    31,   285,
-    32,   286,    34,    35,    54,    37,   337,   287,   868,   288,
-   869,   870,   871,   872,   873,   874,   875,   876,   877,   878,
-   879,   880,   289,   330,   290,    50,   291,   338,   296,   297,
-   298,   299,   329,   332,   300,   892,   893,   305,   331,    51,
-    52,    24,    25,    26,    27,    28,    29,    30,    31,   357,
-    32,   358,    34,    35,   359,    37,   337,   296,   297,   298,
-   299,   360,   361,   300,   296,   297,   298,   299,   440,   362,
-   300,   363,   364,   307,   365,    50,   366,   919,   367,   386,
-   368,   921,   922,   923,   369,   296,   297,   298,   299,    51,
-    52,   300,    54,   370,   371,   372,  1055,   373,   296,   297,
-   298,   299,   374,   375,   300,   376,   377,   378,   946,  1072,
-   949,   296,   297,   298,   299,   342,   379,   300,   380,   381,
-   956,   382,  1160,   296,   297,   298,   299,   391,   964,   300,
-   383,   384,   385,   969,  1188,   387,   972,   296,   297,   298,
-   299,   390,    54,   300,   392,   300,   450,   421,  1211,   984,
-   985,   986,   987,   988,   989,   990,   991,   992,   993,   994,
-   995,   296,   297,   298,   299,   422,   427,   300,   428,   429,
-   308,   296,   297,   298,   299,   434,   451,   300,   458,   486,
-   309,   296,   297,   298,   299,   487,   489,   300,   494,   525,
-   314,   495,   496,   497,   498,  1017,   549,   550,   499,   500,
-   552,   551,   501,   554,   555,   296,   297,   298,   299,   502,
-   503,   300,   504,   553,   347,   526,   505,   296,   297,   298,
-   299,  1039,  1040,   300,   562,   563,   350,   296,   297,   298,
-   299,   506,   507,   300,   508,   561,   413,   509,   510,   564,
-   567,   568,   511,  1058,  1059,  1060,  1061,  1062,  1063,  1064,
-  1065,  1066,   569,   296,   297,   298,   299,   512,   513,   300,
-   514,   606,   423,   515,   609,   296,   297,   298,   299,   516,
-   517,   300,   570,   571,   426,   296,   297,   298,   299,   624,
-   625,   300,   518,   572,   436,   630,   631,   573,   519,   520,
-   574,   591,   637,  1099,   644,   296,   297,   298,   299,   521,
-   522,   300,   523,   336,  1110,  1111,  1112,  1113,  1114,  1115,
-  1116,  1117,  1118,   296,   297,   298,   299,   524,   527,   300,
-   577,   592,   437,   593,   594,   595,   660,   596,   662,   603,
-   597,   598,   599,   600,   608,   601,   602,   667,   668,   669,
-  1140,  1141,   673,   674,   675,   676,   677,   678,   679,   680,
-  1149,  1150,  1151,  1152,  1153,  1154,  1155,  1156,  1157,   296,
-   297,   298,   299,   610,   611,   300,   612,   613,   441,   614,
-   615,   296,   297,   298,   299,   619,   620,   300,  1173,  1174,
-   442,   621,   622,   623,  1178,  1179,  1180,  1181,  1182,  1183,
-   296,   297,   298,   299,   626,   628,   300,   629,   632,   443,
-   296,   297,   298,   299,   633,   634,   300,  1201,   635,   444,
-   636,   645,  1205,  1206,  1207,  1208,  1209,  1210,   296,   297,
-   298,   299,   646,   647,   300,   648,   649,   445,   684,   715,
-   650,   656,   659,   661,  1223,  1224,  1225,  1226,  1227,  1228,
-   296,   297,   298,   299,   663,   664,   300,   685,   686,   446,
-  1237,  1238,  1239,   296,   297,   298,   299,   694,   710,   300,
-   716,   722,   488,   723,  1251,  1252,  1253,   726,   727,   759,
-   728,   729,   760,   730,   732,  1259,  1260,  1261,   735,   731,
-   733,    -1,    22,   734,   736,    23,   296,   297,   298,   299,
-   809,   737,   300,   738,   745,   493,   817,   751,   739,   740,
-   821,   296,   297,   298,   299,   741,   125,   300,   742,   763,
-   528,    24,    25,    26,    27,    28,    29,    30,    31,   840,
-    32,    33,    34,    35,    36,    37,    38,   743,   744,   746,
-   764,   765,    39,    40,    41,    42,    43,    44,   747,    45,
-    46,    47,    48,    49,   748,    50,   296,   297,   298,   299,
-   749,   750,   300,   769,   770,   529,   771,   752,   772,    51,
-    52,   126,   127,   128,   753,    53,   773,   774,   775,   129,
-   130,   131,   132,   133,   134,   135,   136,   137,   138,   776,
-   782,   788,   784,   789,   808,   804,   810,   139,   140,   141,
-   142,   143,   144,   145,   146,   147,   148,   811,   149,   150,
-   151,   152,   153,   154,   296,   297,   298,   299,   813,   814,
-   300,   818,    54,   530,   296,   297,   298,   299,   822,   819,
-   300,   823,   825,   531,   829,   296,   297,   298,   299,   824,
-   826,   300,   832,   828,   532,   296,   297,   298,   299,   831,
-   833,   300,   835,   834,   533,   296,   297,   298,   299,   841,
-   842,   300,   845,   846,   534,   296,   297,   298,   299,   944,
-   847,   300,   945,   850,   535,   296,   297,   298,   299,   859,
-   861,   300,   860,   887,   536,   296,   297,   298,   299,   862,
-   863,   300,   888,   895,   537,   966,   296,   297,   298,   299,
-   894,   896,   300,   898,   924,   539,   296,   297,   298,   299,
-   981,   901,   300,   905,   947,   540,   296,   297,   298,   299,
-   899,   925,   300,   941,   943,   541,   996,   997,   296,   297,
-   298,   299,   900,   902,   300,   942,   950,   542,   296,   297,
-   298,   299,   904,   910,   300,   906,   911,   543,   296,   297,
-   298,   299,   912,   914,   300,   915,   952,   544,   296,   297,
-   298,   299,   917,   951,   300,   955,   957,   583,   296,   297,
-   298,   299,   959,   960,   300,   961,   970,   711,   962,   296,
-   297,   298,   299,  1037,  1038,   300,   963,   965,   754,   296,
-   297,   298,   299,   967,   973,   300,   968,   971,   755,   296,
-   297,   298,   299,   982,   974,   300,   977,  1057,   756,   983,
-  1003,   998,   999,  1001,  1004,  1018,  1005,  1067,  1068,  1069,
-   296,   297,   298,   299,  1006,  1011,   300,  1008,  1009,   757,
-   296,   297,   298,   299,  1013,  1015,   300,  1016,  1019,   779,
-   296,   297,   298,   299,  1022,  1035,   300,  1036,  1041,   856,
-   296,   297,   298,   299,  1046,  1096,   300,  1047,  1048,   881,
-   296,   297,   298,   299,  1050,  1051,   300,  1052,  1109,   882,
-   296,   297,   298,   299,  1053,  1054,   300,  1070,  1071,   903,
-   296,   297,   298,   299,  1074,  1075,   300,  1076,  1093,   907,
-   296,   297,   298,   299,  1077,  1078,   300,  1079,  1094,   909,
-   296,   297,   298,   299,  1080,  1081,   300,  1083,  1095,   928,
-  1144,   296,   297,   298,   299,  1098,  1097,   300,  1100,  1103,
-   978,   296,   297,   298,   299,  1104,  1106,   300,  1107,  1119,
-   979,   296,   297,   298,   299,  1108,  1120,   300,  1123,  1129,
-   980,   296,   297,   298,   299,  1124,  1125,   300,  1177,  1142,
-  1010,  1139,  1126,  1127,  1128,  1184,  1185,  1186,   296,   297,
-   298,   299,  1145,  1146,   300,  1147,  1148,  1012,   296,   297,
-   298,   299,  1158,  1161,   300,  1203,  1175,  1014,   296,   297,
-   298,   299,  1162,  1189,   300,  1163,  1198,  1032,  1199,   296,
-   297,   298,   299,  1190,  1200,   300,  1202,  1221,  1033,   296,
-   297,   298,   299,  1220,  1191,   300,  1212,  1222,  1034,   296,
-   297,   298,   299,  1229,  1236,   300,  1213,   447,  1240,  1241,
-  1242,   296,   297,   298,   299,  1243,  1247,   300,  1250,  1262,
-  1170,   296,   297,   298,   299,  1248,  1249,   300,  1254,  1266,
-  1171,  1270,  1271,  1272,  1274,  1275,    58,  1056,  1267,  1268,
-  1269,   296,   297,   298,   299,   590,     0,   300,    59,    60,
-  1172,   296,   297,   298,   299,     0,   559,   300,     0,     0,
-  1233,   296,   297,   298,   299,   807,     0,   300,     0,     0,
-  1234,   296,   297,   298,   299,     0,     0,   300,     0,     0,
-  1235,   296,   297,   298,   299,     0,     0,   300,     0,     0,
-  1263,   296,   297,   298,   299,     0,     0,   300,     0,     0,
-  1264,   296,   297,   298,   299,     0,     0,   300,     0,     0,
-  1265,   296,   297,   298,   299,     0,     0,   300,     0,   448,
-   296,   297,   298,   299,     0,     0,   300,     0,   453,   296,
-   297,   298,   299,     0,     0,   300,     0,   454,   296,   297,
-   298,   299,     0,     0,   300,     0,   455,   296,   297,   298,
-   299,     0,     0,   300,     0,   484,   296,   297,   298,   299,
-     0,     0,   300,     0,   485,   296,   297,   298,   299,     0,
-     0,   300,     0,   538,   296,   297,   298,   299,     0,     0,
-   300,     0,   545,   296,   297,   298,   299,     0,     0,   300,
-     0,   546,   296,   297,   298,   299,     0,     0,   300,     0,
-   547,   296,   297,   298,   299,     0,     0,   300,     0,   681,
-   296,   297,   298,   299,     0,     0,   300,     0,   682,   296,
-   297,   298,   299,     0,     0,   300,     0,   708,   296,   297,
-   298,   299,     0,     0,   300,     0,   709,   296,   297,   298,
-   299,     0,     0,   300,     0,   724,   296,   297,   298,   299,
-     0,     0,   300,     0,   725,   296,   297,   298,   299,     0,
-     0,   300,     0,   762,   296,   297,   298,   299,     0,     0,
-   300,     0,   790,   296,   297,   298,   299,     0,     0,   300,
-     0,   791,   296,   297,   298,   299,     0,     0,   300,     0,
-   792,   296,   297,   298,   299,     0,     0,   300,     0,   793,
-   296,   297,   298,   299,     0,     0,   300,     0,   794,   296,
-   297,   298,   299,     0,     0,   300,     0,   795,   296,   297,
-   298,   299,     0,     0,   300,     0,   796,   296,   297,   298,
-   299,     0,     0,   300,     0,   797,   296,   297,   298,   299,
-     0,     0,   300,     0,   798,   296,   297,   298,   299,     0,
-     0,   300,     0,   799,   296,   297,   298,   299,     0,     0,
-   300,     0,   800,   296,   297,   298,   299,     0,     0,   300,
-     0,   801,   296,   297,   298,   299,     0,     0,   300,     0,
-   897,   296,   297,   298,   299,     0,     0,   300,     0,   908,
-   296,   297,   298,   299,     0,     0,   300,     0,   913,   296,
-   297,   298,   299,     0,     0,   300,     0,   916,   296,   297,
-   298,   299,     0,     0,   300,     0,   918,   296,   297,   298,
-   299,     0,     0,   300,     0,   929,   296,   297,   298,   299,
-     0,     0,   300,     0,   930,   296,   297,   298,   299,     0,
-     0,   300,     0,   931,   296,   297,   298,   299,     0,     0,
-   300,     0,   932,   296,   297,   298,   299,     0,     0,   300,
-     0,   933,   296,   297,   298,   299,     0,     0,   300,     0,
-   934,   296,   297,   298,   299,     0,     0,   300,     0,   935,
-   296,   297,   298,   299,     0,     0,   300,     0,   936,   296,
-   297,   298,   299,     0,     0,   300,     0,   937,   296,   297,
-   298,   299,     0,     0,   300,     0,   938,   296,   297,   298,
-   299,     0,     0,   300,     0,   939,   296,   297,   298,   299,
-     0,     0,   300,     0,   940,   296,   297,   298,   299,     0,
-     0,   300,     0,  1002,   296,   297,   298,   299,     0,     0,
-   300,     0,  1007,   296,   297,   298,   299,     0,     0,   300,
-     0,  1023,   296,   297,   298,   299,     0,     0,   300,     0,
-  1024,   296,   297,   298,   299,     0,     0,   300,     0,  1025,
-   296,   297,   298,   299,     0,     0,   300,     0,  1026,   296,
-   297,   298,   299,     0,     0,   300,     0,  1027,   296,   297,
-   298,   299,     0,     0,   300,     0,  1028,   296,   297,   298,
-   299,     0,     0,   300,     0,  1029,   296,   297,   298,   299,
-     0,     0,   300,     0,  1030,   296,   297,   298,   299,     0,
-     0,   300,     0,  1031,   296,   297,   298,   299,     0,     0,
-   300,     0,  1073,   296,   297,   298,   299,     0,     0,   300,
-     0,  1084,   296,   297,   298,   299,     0,     0,   300,     0,
-  1085,   296,   297,   298,   299,     0,     0,   300,     0,  1086,
-   296,   297,   298,   299,     0,     0,   300,     0,  1087,   296,
-   297,   298,   299,     0,     0,   300,     0,  1088,   296,   297,
-   298,   299,     0,     0,   300,     0,  1089,   296,   297,   298,
-   299,     0,     0,   300,     0,  1090,   296,   297,   298,   299,
-     0,     0,   300,     0,  1091,   296,   297,   298,   299,     0,
-     0,   300,     0,  1092,   296,   297,   298,   299,     0,     0,
-   300,     0,  1130,   296,   297,   298,   299,     0,     0,   300,
-     0,  1131,   296,   297,   298,   299,     0,     0,   300,     0,
-  1132,   296,   297,   298,   299,     0,     0,   300,     0,  1133,
-   296,   297,   298,   299,     0,     0,   300,     0,  1134,   296,
-   297,   298,   299,     0,     0,   300,     0,  1135,   296,   297,
-   298,   299,     0,     0,   300,     0,  1136,   296,   297,   298,
-   299,     0,     0,   300,     0,  1137,   296,   297,   298,   299,
-     0,     0,   300,     0,  1138,   296,   297,   298,   299,     0,
-     0,   300,     0,  1159,   296,   297,   298,   299,     0,     0,
-   300,     0,  1164,   296,   297,   298,   299,     0,     0,   300,
-     0,  1165,   296,   297,   298,   299,     0,     0,   300,     0,
-  1166,   296,   297,   298,   299,     0,     0,   300,     0,  1167,
-   296,   297,   298,   299,     0,     0,   300,     0,  1168,   296,
-   297,   298,   299,     0,     0,   300,     0,  1169,   296,   297,
-   298,   299,     0,     0,   300,     0,  1187,   296,   297,   298,
-   299,     0,     0,   300,     0,  1192,   296,   297,   298,   299,
-     0,     0,   300,     0,  1193,   296,   297,   298,   299,     0,
-     0,   300,     0,  1194,   296,   297,   298,   299,     0,     0,
-   300,     0,  1195,   296,   297,   298,   299,     0,     0,   300,
-     0,  1196,   296,   297,   298,   299,     0,     0,   300,     0,
-  1197,   296,   297,   298,   299,     0,     0,   300,     0,  1214,
-   296,   297,   298,   299,     0,     0,   300,     0,  1215,   296,
-   297,   298,   299,     0,     0,   300,     0,  1216,   296,   297,
-   298,   299,     0,     0,   300,     0,  1217,   296,   297,   298,
-   299,     0,     0,   300,     0,  1218,   296,   297,   298,   299,
-     0,     0,   300,     0,  1219,   296,   297,   298,   299,     0,
-     0,   300,     0,  1230,   296,   297,   298,   299,     0,     0,
-   300,     0,  1231,   296,   297,   298,   299,     0,     0,   300,
-     0,  1232,   296,   297,   298,   299,     0,     0,   300,     0,
-  1244,   296,   297,   298,   299,     0,     0,   300,     0,  1245,
-   296,   297,   298,   299,     0,     0,   300,     0,  1246,   296,
-   297,   298,   299,     0,     0,   300,     0,  1255,   296,   297,
-   298,   299,     0,     0,   300,     0,  1256,   296,   297,   298,
-   299,     0,     0,   300,     0,  1257
+#define	YYLAST		2832
+
+
+static const short yytable[] = {    93,
+   211,   584,   919,   133,   146,   252,   134,   135,   241,   242,
+   243,   110,   257,   883,    95,   112,   782,  1012,   858,   858,
+   821,   720,   721,   877,   859,   859,   175,   176,   659,   830,
+   177,   143,    67,    68,   144,     7,   837,   568,    69,    70,
+    71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+    81,    82,    83,    84,    85,    86,    87,    88,    89,   326,
+   375,   376,   377,   660,   403,   121,   122,   563,   123,   102,
+   282,   283,   175,   176,    96,  -222,   177,   569,  -222,    97,
+  -222,   258,   170,   171,   172,   178,  -222,  -222,   364,   365,
+   177,   282,   283,   175,   176,   253,    98,   177,   213,   214,
+   215,   216,   455,   218,   111,   220,   221,   222,   113,   226,
+   858,    99,   945,   918,  1074,   125,   859,   591,   126,   127,
+   147,   128,   238,   136,   847,   239,   100,   808,   247,   378,
+   367,   451,   713,   848,   452,   714,   103,   256,   878,   259,
+   849,   880,   262,   263,   264,   265,   266,   267,   268,   269,
+   270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+   280,   281,   884,   783,  1013,   285,   286,   287,   288,   289,
+   290,   104,    90,    91,   282,   283,   175,   176,   946,    92,
+   177,  1185,   950,   992,   559,   282,   283,   175,   176,   106,
+   919,   177,   450,   672,   673,   674,   282,   283,   175,   176,
+  1137,   116,   177,  1138,   282,   283,   175,   176,   101,   330,
+   177,   332,   105,  1139,  1141,   336,  1140,  1142,   776,   341,
+   342,   343,   107,   345,   346,   347,   348,   349,   350,   351,
+   352,   353,   468,   943,   434,   435,   358,   359,   360,   475,
+   439,   440,   282,   283,   175,   176,   369,   370,   177,  1236,
+   373,   108,  1237,   380,   282,   283,   175,   176,   444,   445,
+   177,   282,   283,   175,   176,    -7,    -7,   177,    -7,   109,
+   282,   283,   175,   176,   401,   402,   177,   282,   283,   175,
+   176,   589,   590,   177,  1034,  1035,  1036,  1037,    67,    68,
+  1238,  1041,   114,  1239,    69,    70,    71,    72,    73,    74,
+    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+    85,    86,    87,    88,    89,   124,  1240,   115,   551,  1241,
+   282,   283,   175,   176,   688,   689,   177,   282,   283,   175,
+   176,   453,  1292,   177,  1294,  1293,   458,  1295,   282,   283,
+   175,   176,    -1,     8,   177,     9,   117,   284,   118,   471,
+   586,   587,   588,  1092,   119,  1093,  1094,   476,  1296,  1097,
+   120,  1297,   282,   283,   175,   176,  1325,  1327,   177,  1326,
+  1328,    -7,    -7,    -7,    -7,    -7,    -7,    -7,    -7,   282,
+   283,   175,   176,   513,   912,   177,  1329,   129,   327,  1330,
+   514,   515,   516,   248,   690,   691,   251,     1,     2,   624,
+     3,   282,   283,   175,   176,   692,   693,   177,   633,   361,
+  1147,   478,   479,   480,   481,   482,   483,   484,   485,   486,
+   487,   488,   489,   644,   645,   646,   647,   648,   173,   174,
+   175,   176,   878,   879,   177,    92,   130,   131,   223,   132,
+   138,   137,   560,   561,   139,   140,   141,   657,    10,    11,
+    12,    13,    14,    15,    16,    17,   142,   145,   577,   578,
+  1186,   148,    67,    68,   149,   150,   151,   694,    69,    70,
+    71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+    81,    82,    83,    84,    85,    86,    87,    88,    89,  1214,
+   152,   282,   283,   175,   176,   606,   607,   177,   609,   490,
+   282,   283,   175,   176,   758,   153,   177,    67,    68,   328,
+   154,   622,   623,    69,    70,    71,    72,    73,    74,    75,
+    76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+    86,    87,    88,    89,  -221,   155,   156,  -221,   755,  -221,
+   157,   282,   283,   175,   176,  -221,  -221,   177,   212,   177,
+   329,   667,   282,   283,   175,   176,   668,   158,   177,   227,
+   851,   159,   160,   852,   161,   162,   777,   163,   779,   164,
+   781,   684,    39,    40,    41,    42,  1298,    44,   225,   165,
+   231,   166,   167,   230,   168,   697,   698,   699,   700,   701,
+   702,   703,   704,   705,   706,   707,   708,   169,   209,   217,
+   219,   250,   173,   174,   175,   176,   228,   722,   177,    92,
+   229,   232,   723,    67,    68,   233,   234,   235,   236,    69,
+    70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+    80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+   282,   283,   175,   176,   237,   244,   177,    90,    91,   331,
+   245,   843,   246,   249,    92,   254,   255,   223,   261,   177,
+   321,   291,   292,   293,   763,   764,   765,   294,   295,   296,
+    67,   940,   297,   298,   773,   774,    69,    70,    71,    72,
+    73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+    83,    84,    85,    86,    87,    88,    89,   299,   300,   301,
+   302,   798,   799,   478,   479,   480,   481,   482,   483,   484,
+   485,   486,   487,   488,   489,   812,   303,   814,   282,   283,
+   175,   176,   304,   305,   177,   323,   967,   824,   306,   968,
+   307,   308,   309,   310,   831,   832,   833,   282,   283,   175,
+   176,   838,   311,   177,   325,   842,   312,   313,   459,   314,
+   845,   846,   315,    90,    91,   282,   283,   175,   176,   316,
+    92,   177,   339,  1119,   317,   318,  1120,   319,   282,   283,
+   175,   176,   320,   324,   177,   344,   862,   333,   863,   864,
+   865,   866,   867,   868,   869,   870,   871,   872,   873,   874,
+   354,   696,   282,   283,   175,   176,   355,   356,   177,   282,
+   283,   175,   176,   460,   887,   177,   372,   404,   334,   357,
+    90,    91,   282,   283,   175,   176,   405,    92,   177,   406,
+   407,   408,   427,  1047,    24,    25,    26,    27,    28,    29,
+    30,    31,   409,    32,   410,    34,    35,   411,    37,    38,
+   412,   413,   414,   911,   415,   416,   417,   913,   914,   915,
+   282,   283,   175,   176,   418,   419,   177,   420,    50,   421,
+   422,  1064,   423,   424,   282,   283,   175,   176,   425,   426,
+   177,   428,    51,    52,   938,  1170,   941,   282,   283,   175,
+   176,   429,   432,   177,   948,   430,   431,   433,  1198,   436,
+   441,   437,   956,   282,   283,   175,   176,   961,   438,   177,
+   964,   442,   335,   552,   553,   447,   469,   555,   448,   449,
+   557,   558,   454,   976,   977,   978,   979,   980,   981,   982,
+   983,   984,   985,   986,   987,    54,   282,   283,   175,   176,
+   470,   477,   177,   505,   506,   995,   508,  1227,   282,   283,
+   175,   176,   517,   518,   177,   548,   564,   340,   362,   282,
+   283,   175,   176,   549,   519,   177,   520,   554,   371,  1009,
+   282,   283,   175,   176,   521,   605,   177,   608,   593,   374,
+   611,   282,   283,   175,   176,   522,   523,   177,   556,   565,
+   381,   524,   525,   566,   526,  1031,  1032,  1033,   567,   630,
+   631,   282,   283,   175,   176,   636,   637,   177,   527,   570,
+   382,   571,   643,   572,   650,   573,   574,  1050,  1051,  1052,
+  1053,  1054,  1055,  1056,  1057,  1058,   662,   575,   664,   528,
+   282,   283,   175,   176,   529,  1066,   177,   669,   670,   671,
+   576,   610,   675,   676,   677,   678,   679,   680,   681,   282,
+   283,   175,   176,   530,   612,   177,   531,   594,   383,    24,
+    25,    26,    27,    28,    29,    30,    31,  1091,    32,   532,
+    34,    35,   533,    37,    38,   534,   535,   536,  1102,  1103,
+  1104,  1105,  1106,  1107,  1108,  1109,  1110,  1112,  1114,  1116,
+   613,   537,   538,    50,  1121,   282,   283,   175,   176,   539,
+   540,   177,   541,   595,   384,   542,   543,    51,    52,   282,
+   283,   175,   176,   544,   545,   177,   546,   596,   385,   547,
+  1144,  1145,   550,  1146,   579,   597,   598,   599,   600,   601,
+  1153,  1154,  1155,  1156,  1157,  1158,  1159,  1160,  1161,  1162,
+   602,  1164,   603,  1166,   604,   615,   614,   620,  1171,   621,
+   625,   626,    24,    25,    26,    27,    28,    29,    30,    31,
+    54,    32,   627,    34,    35,   628,    37,    38,   629,   652,
+  1183,  1184,   632,   634,   635,   638,  1188,  1189,  1190,  1191,
+  1192,  1193,   639,   366,   640,   641,    50,   642,   805,   282,
+   283,   175,   176,   651,   811,   177,   653,   391,   815,  1211,
+    51,    52,   654,   655,  1215,  1216,  1217,  1218,  1219,  1220,
+  1222,  1224,  1226,   282,   283,   175,   176,   834,   656,   177,
+   658,   661,   386,   282,   283,   175,   176,   663,   665,   177,
+   666,   398,  1245,  1246,  1247,  1248,  1249,  1250,  1251,   685,
+  1253,   686,  1255,   282,   283,   175,   176,   687,   695,   177,
+   711,   716,   387,    54,   717,   724,   800,   727,   728,   730,
+  1265,  1266,  1267,   282,   283,   175,   176,   729,   731,   177,
+   732,   756,   388,   733,  1279,  1280,  1281,  1283,  1285,  1287,
+   282,   283,   175,   176,   734,   735,   177,   736,   738,   389,
+   737,  1299,  1300,  1301,  1302,   739,  1304,   746,  1306,   282,
+   283,   175,   176,    -3,    22,   177,   740,    23,   390,   282,
+   283,   175,   176,   752,   741,   177,   757,   399,  1320,  1322,
+  1324,   804,   760,   761,   742,   743,   744,  1331,   179,  1333,
+   762,  1335,   766,    24,    25,    26,    27,    28,    29,    30,
+    31,   806,    32,    33,    34,    35,    36,    37,    38,   745,
+   936,   807,   747,   937,    39,    40,    41,    42,    43,    44,
+   748,    45,    46,    47,    48,    49,   767,    50,   749,   282,
+   283,   175,   176,   768,   958,   177,   750,   769,   392,   751,
+   753,    51,    52,   180,   181,   182,   754,    53,   770,   973,
+   771,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+   192,   772,   784,   778,   780,   988,   989,   785,   809,   193,
+   194,   195,   196,   197,   198,   199,   200,   201,   202,   816,
+   203,   204,   205,   206,   207,   208,   282,   283,   175,   176,
+   810,   813,   177,   817,    54,   393,   282,   283,   175,   176,
+   818,   819,   177,   820,   822,   394,   823,   282,   283,   175,
+   176,   825,   826,   177,   827,   829,   395,   828,   282,   283,
+   175,   176,  1029,  1030,   177,   835,   836,   396,   282,   283,
+   175,   176,   839,   840,   177,   853,   881,   397,   282,   283,
+   175,   176,   841,   854,   177,   844,  1049,   443,   282,   283,
+   175,   176,   855,   856,   177,   857,   886,   446,   282,   283,
+   175,   176,   882,   888,   177,   890,   916,   456,   282,   283,
+   175,   176,   891,   892,   177,   893,   897,   457,   282,   283,
+   175,   176,   898,   894,   177,   896,   917,   461,   902,   282,
+   283,   175,   176,   903,  1088,   177,   933,   904,   462,   282,
+   283,   175,   176,   906,   909,   177,   907,  1101,   463,   282,
+   283,   175,   176,   934,   935,   177,   947,   939,   464,   282,
+   283,   175,   176,   942,   944,   177,   952,   949,   465,   282,
+   283,   175,   176,   951,   953,   177,   962,   954,   507,   282,
+   283,   175,   176,   955,   957,   177,   959,   965,   512,   960,
+   282,   283,   175,   176,   963,  1148,   177,   974,   966,   585,
+   282,   283,   175,   176,   969,   975,   177,   990,  1000,   616,
+   282,   283,   175,   176,  1001,   991,   177,   993,  1045,   617,
+   282,   283,   175,   176,   996,   997,   177,  1005,  1046,   618,
+   282,   283,   175,   176,   998,  1003,   177,  1007,  1085,   619,
+   282,   283,   175,   176,  1008,  1187,   177,  1010,  1063,   712,
+   282,   283,   175,   176,  1011,  1014,   177,  1027,  1069,   775,
+   282,   283,   175,   176,  1028,  1038,   177,  1039,  1070,   850,
+  1040,  1042,  1213,   282,   283,   175,   176,  1043,  1062,   177,
+  1044,  1086,   875,   282,   283,   175,   176,  1067,  1068,   177,
+  1071,  1087,   876,   282,   283,   175,   176,  1089,  1072,   177,
+  1243,  1090,   895,   282,   283,   175,   176,  1073,  1098,   177,
+  1075,  1095,   899,   282,   283,   175,   176,  1096,  1099,   177,
+  1100,  1149,   901,  1117,   282,   283,   175,   176,  1118,  1264,
+   177,  1124,  1150,   920,  1143,   282,   283,   175,   176,  1125,
+  1122,   177,  1126,  1278,   970,   282,   283,   175,   176,  1123,
+  1127,   177,  1151,  1152,   971,   282,   283,   175,   176,  1163,
+  1165,   177,  1167,  1168,   972,   282,   283,   175,   176,  1172,
+  1173,   177,  1200,  1199,  1002,   282,   283,   175,   176,  1201,
+  1208,   177,  1209,  1210,  1004,   282,   283,   175,   176,  1212,
+  1228,   177,  1229,  1242,  1006,   282,   283,   175,   176,  1244,
+  1252,   177,  1254,  1256,  1024,   282,   283,   175,   176,  1275,
+  1276,   177,  1303,  1277,  1025,   282,   283,   175,   176,  1257,
+  1271,   177,  1305,  1316,  1026,   282,   283,   175,   176,  1288,
+  1307,   177,  1308,  1312,  1180,   282,   283,   175,   176,  1317,
+  1318,   177,  1332,  1334,  1181,   282,   283,   175,   176,  1336,
+  1338,   177,  1339,   592,  1182,   282,   283,   175,   176,   562,
+    58,   177,    59,    60,  1261,   282,   283,   175,   176,  1048,
+     0,   177,   803,     0,  1262,   282,   283,   175,   176,     0,
+     0,   177,     0,     0,  1263,   282,   283,   175,   176,     0,
+     0,   177,     0,     0,  1309,   282,   283,   175,   176,     0,
+     0,   177,     0,     0,  1310,   282,   283,   175,   176,     0,
+     0,   177,     0,     0,  1311,   282,   283,   175,   176,     0,
+     0,   177,     0,   400,   282,   283,   175,   176,     0,     0,
+   177,     0,   466,   282,   283,   175,   176,     0,     0,   177,
+     0,   467,   282,   283,   175,   176,     0,     0,   177,     0,
+   472,   282,   283,   175,   176,     0,     0,   177,     0,   473,
+   282,   283,   175,   176,     0,     0,   177,     0,   474,   282,
+   283,   175,   176,     0,     0,   177,     0,   503,   282,   283,
+   175,   176,     0,     0,   177,     0,   504,   282,   283,   175,
+   176,     0,     0,   177,     0,   682,   282,   283,   175,   176,
+     0,     0,   177,     0,   683,   282,   283,   175,   176,     0,
+     0,   177,     0,   709,   282,   283,   175,   176,     0,     0,
+   177,     0,   710,   282,   283,   175,   176,     0,     0,   177,
+     0,   725,   282,   283,   175,   176,     0,     0,   177,     0,
+   726,   282,   283,   175,   176,     0,     0,   177,     0,   759,
+   282,   283,   175,   176,     0,     0,   177,     0,   786,   282,
+   283,   175,   176,     0,     0,   177,     0,   787,   282,   283,
+   175,   176,     0,     0,   177,     0,   788,   282,   283,   175,
+   176,     0,     0,   177,     0,   789,   282,   283,   175,   176,
+     0,     0,   177,     0,   790,   282,   283,   175,   176,     0,
+     0,   177,     0,   791,   282,   283,   175,   176,     0,     0,
+   177,     0,   792,   282,   283,   175,   176,     0,     0,   177,
+     0,   793,   282,   283,   175,   176,     0,     0,   177,     0,
+   794,   282,   283,   175,   176,     0,     0,   177,     0,   795,
+   282,   283,   175,   176,     0,     0,   177,     0,   796,   282,
+   283,   175,   176,     0,     0,   177,     0,   797,   282,   283,
+   175,   176,     0,     0,   177,     0,   889,   282,   283,   175,
+   176,     0,     0,   177,     0,   900,   282,   283,   175,   176,
+     0,     0,   177,     0,   905,   282,   283,   175,   176,     0,
+     0,   177,     0,   908,   282,   283,   175,   176,     0,     0,
+   177,     0,   910,   282,   283,   175,   176,     0,     0,   177,
+     0,   921,   282,   283,   175,   176,     0,     0,   177,     0,
+   922,   282,   283,   175,   176,     0,     0,   177,     0,   923,
+   282,   283,   175,   176,     0,     0,   177,     0,   924,   282,
+   283,   175,   176,     0,     0,   177,     0,   925,   282,   283,
+   175,   176,     0,     0,   177,     0,   926,   282,   283,   175,
+   176,     0,     0,   177,     0,   927,   282,   283,   175,   176,
+     0,     0,   177,     0,   928,   282,   283,   175,   176,     0,
+     0,   177,     0,   929,   282,   283,   175,   176,     0,     0,
+   177,     0,   930,   282,   283,   175,   176,     0,     0,   177,
+     0,   931,   282,   283,   175,   176,     0,     0,   177,     0,
+   932,   282,   283,   175,   176,     0,     0,   177,     0,   994,
+   282,   283,   175,   176,     0,     0,   177,     0,   999,   282,
+   283,   175,   176,     0,     0,   177,     0,  1015,   282,   283,
+   175,   176,     0,     0,   177,     0,  1016,   282,   283,   175,
+   176,     0,     0,   177,     0,  1017,   282,   283,   175,   176,
+     0,     0,   177,     0,  1018,   282,   283,   175,   176,     0,
+     0,   177,     0,  1019,   282,   283,   175,   176,     0,     0,
+   177,     0,  1020,   282,   283,   175,   176,     0,     0,   177,
+     0,  1021,   282,   283,   175,   176,     0,     0,   177,     0,
+  1022,   282,   283,   175,   176,     0,     0,   177,     0,  1023,
+   282,   283,   175,   176,     0,     0,   177,     0,  1065,   282,
+   283,   175,   176,     0,     0,   177,     0,  1076,   282,   283,
+   175,   176,     0,     0,   177,     0,  1077,   282,   283,   175,
+   176,     0,     0,   177,     0,  1078,   282,   283,   175,   176,
+     0,     0,   177,     0,  1079,   282,   283,   175,   176,     0,
+     0,   177,     0,  1080,   282,   283,   175,   176,     0,     0,
+   177,     0,  1081,   282,   283,   175,   176,     0,     0,   177,
+     0,  1082,   282,   283,   175,   176,     0,     0,   177,     0,
+  1083,   282,   283,   175,   176,     0,     0,   177,     0,  1084,
+   282,   283,   175,   176,     0,     0,   177,     0,  1128,   282,
+   283,   175,   176,     0,     0,   177,     0,  1129,   282,   283,
+   175,   176,     0,     0,   177,     0,  1130,   282,   283,   175,
+   176,     0,     0,   177,     0,  1131,   282,   283,   175,   176,
+     0,     0,   177,     0,  1132,   282,   283,   175,   176,     0,
+     0,   177,     0,  1133,   282,   283,   175,   176,     0,     0,
+   177,     0,  1134,   282,   283,   175,   176,     0,     0,   177,
+     0,  1135,   282,   283,   175,   176,     0,     0,   177,     0,
+  1136,   282,   283,   175,   176,     0,     0,   177,     0,  1169,
+   282,   283,   175,   176,     0,     0,   177,     0,  1174,   282,
+   283,   175,   176,     0,     0,   177,     0,  1175,   282,   283,
+   175,   176,     0,     0,   177,     0,  1176,   282,   283,   175,
+   176,     0,     0,   177,     0,  1177,   282,   283,   175,   176,
+     0,     0,   177,     0,  1178,   282,   283,   175,   176,     0,
+     0,   177,     0,  1179,   282,   283,   175,   176,     0,     0,
+   177,     0,  1197,   282,   283,   175,   176,     0,     0,   177,
+     0,  1202,   282,   283,   175,   176,     0,     0,   177,     0,
+  1203,   282,   283,   175,   176,     0,     0,   177,     0,  1204,
+   282,   283,   175,   176,     0,     0,   177,     0,  1205,   282,
+   283,   175,   176,     0,     0,   177,     0,  1206,   282,   283,
+   175,   176,     0,     0,   177,     0,  1207,   282,   283,   175,
+   176,     0,     0,   177,     0,  1230,   282,   283,   175,   176,
+     0,     0,   177,     0,  1231,   282,   283,   175,   176,     0,
+     0,   177,     0,  1232,   282,   283,   175,   176,     0,     0,
+   177,     0,  1233,   282,   283,   175,   176,     0,     0,   177,
+     0,  1234,   282,   283,   175,   176,     0,     0,   177,     0,
+  1235,   282,   283,   175,   176,     0,     0,   177,     0,  1258,
+   282,   283,   175,   176,     0,     0,   177,     0,  1259,   282,
+   283,   175,   176,     0,     0,   177,     0,  1260,   282,   283,
+   175,   176,     0,     0,   177,     0,  1272,   282,   283,   175,
+   176,     0,     0,   177,     0,  1273,   282,   283,   175,   176,
+     0,     0,   177,     0,  1274,   282,   283,   175,   176,     0,
+     0,   177,     0,  1289,   282,   283,   175,   176,     0,     0,
+   177,     0,  1290,   282,   283,   175,   176,     0,     0,   177,
+     0,  1291
 };
 
-static const short yycheck[] = {    79,
-    80,    81,    82,    76,    84,   451,    86,    87,    88,   731,
-    90,     4,   104,   105,   106,     6,     6,    30,   740,    63,
-    33,    34,   866,    59,   136,   747,    34,     6,     6,    65,
-   110,     6,    81,     3,   611,   612,    59,     3,     4,   119,
-     7,   121,    65,     9,    10,    11,    12,    13,    14,    15,
+static const short yycheck[] = {     7,
+   103,   470,   860,    30,    34,    63,    33,    34,   130,   131,
+   132,    57,    81,     4,     6,    57,     6,     6,    59,    59,
+   732,   613,   614,   800,    65,    65,   145,   146,     6,   741,
+   149,    30,     3,     4,    33,   136,   748,     6,     9,    10,
+    11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+    21,    22,    23,    24,    25,    26,    27,    28,    29,     6,
+    85,    86,    87,    41,   137,    33,    34,     6,    36,   150,
+   143,   144,   145,   146,     7,   134,   149,    46,   137,     6,
+   139,   150,    90,    91,    92,    93,   145,   146,     6,     7,
+   149,   143,   144,   145,   146,   153,     6,   149,   106,   107,
+   108,   109,   154,   111,   150,   113,   114,   115,   150,   117,
+    59,     6,   889,   154,   154,    30,    65,     6,    33,    34,
+   150,    36,   150,   150,     6,   153,     6,   719,   136,   154,
+   252,   151,   150,     6,   154,   153,   150,   145,   151,   147,
+     6,   154,   150,   151,   152,   153,   154,   155,   156,   157,
+   158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+   168,   169,   153,   153,   153,   173,   174,   175,   176,   177,
+   178,   150,   143,   144,   143,   144,   145,   146,   890,   150,
+   149,   139,   894,     6,   155,   143,   144,   145,   146,     7,
+  1048,   149,     8,    47,    48,    49,   143,   144,   145,   146,
+   151,    38,   149,   154,   143,   144,   145,   146,     6,   217,
+   149,   219,     6,   151,   151,   223,   154,   154,   687,   227,
+   228,   229,   150,   231,   232,   233,   234,   235,   236,   237,
+   238,   239,   354,   134,   151,   152,   244,   245,   246,   361,
+     6,     7,   143,   144,   145,   146,   254,   255,   149,   151,
+   258,   150,   154,   261,   143,   144,   145,   146,     6,     7,
+   149,   143,   144,   145,   146,     0,     1,   149,     3,   150,
+   143,   144,   145,   146,   282,   283,   149,   143,   144,   145,
+   146,   151,   152,   149,   996,   997,   998,   999,     3,     4,
+   151,  1003,   150,   154,     9,    10,    11,    12,    13,    14,
+    15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+    25,    26,    27,    28,    29,    36,   151,   150,   440,   154,
+   143,   144,   145,   146,   151,   152,   149,   143,   144,   145,
+   146,   339,   151,   149,   151,   154,   344,   154,   143,   144,
+   145,   146,     0,     1,   149,     3,   150,   152,    34,   357,
+   472,   473,   474,   134,    34,  1067,  1068,   365,   151,  1071,
+    34,   154,   143,   144,   145,   146,   151,   151,   149,   154,
+   154,   106,   107,   108,   109,   110,   111,   112,   113,   143,
+   144,   145,   146,   391,   853,   149,   151,   150,   152,   154,
+   398,   399,   400,   137,   151,   152,   140,   132,   133,   521,
+   135,   143,   144,   145,   146,   151,   152,   149,   530,   151,
+  1122,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+    75,    76,    77,    91,    92,    93,    94,    95,   143,   144,
+   145,   146,   151,   152,   149,   150,   150,   150,   153,   150,
+     5,   153,   450,   451,    34,   153,     6,   550,   106,   107,
+   108,   109,   110,   111,   112,   113,     5,   150,   466,   467,
+  1172,   153,     3,     4,    34,   150,   150,   589,     9,    10,
+    11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+    21,    22,    23,    24,    25,    26,    27,    28,    29,  1201,
+   150,   143,   144,   145,   146,   503,   504,   149,   506,   154,
+   143,   144,   145,   146,   156,   150,   149,     3,     4,   152,
+   150,   519,   520,     9,    10,    11,    12,    13,    14,    15,
     16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-    26,    27,    28,    29,     6,    57,    41,    46,    57,    33,
-    34,     6,    36,    59,     3,     4,   804,   151,   152,    65,
-     9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-    19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-    29,   150,   182,   183,   184,    85,    86,    87,     6,   153,
-   190,    30,   192,     6,    33,     6,   196,     6,   154,     6,
-   200,   201,   202,   150,   204,   205,   206,   207,   208,   209,
-   210,   211,   212,   213,   226,     6,   150,   150,   218,   219,
-   220,   718,   150,   150,   143,   144,   145,   146,   228,   229,
-   149,   151,   232,   152,   154,   235,     0,     1,   150,     3,
-   153,   150,   153,   153,   143,   144,   145,   146,   154,   897,
-   149,   145,   146,     6,   154,   149,   898,   143,   144,     6,
-   902,    47,    48,    49,   150,   143,   144,   145,   146,   155,
-     7,   149,   272,   273,   274,   275,   276,   277,   278,   279,
-   280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
-   290,   291,  1056,   150,   143,   144,   296,   297,   298,   299,
-   300,   150,    30,   150,   153,    33,    34,   150,    36,   150,
-   145,   146,     6,   313,   149,   151,   152,   329,   318,     6,
-   686,   150,    50,    38,   336,   143,   144,   145,   146,     6,
-   150,   149,   332,   153,   143,   144,   145,   146,     8,    34,
-   149,   341,   106,   107,   108,   109,   110,   111,   112,   113,
-     6,     7,   143,   144,   145,   146,   145,   146,   149,    34,
-   149,    34,  1004,  1005,  1006,  1007,     3,     4,   150,  1011,
-   150,   153,     9,    10,    11,    12,    13,    14,    15,    16,
-    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-    27,    28,    29,     6,     7,    36,   143,   144,   145,   146,
-     6,     7,   149,     3,     4,   151,   152,   150,   420,     9,
+    26,    27,    28,    29,   134,   150,   150,   137,   660,   139,
+   150,   143,   144,   145,   146,   145,   146,   149,     5,   149,
+   152,   559,   143,   144,   145,   146,   564,   150,   149,   153,
+   151,   150,   150,   154,   150,   150,   688,   150,   690,   150,
+   692,   579,    51,    52,    53,    54,  1288,    56,   116,   150,
+   153,   150,   150,   121,   150,   593,   594,   595,   596,   597,
+   598,   599,   600,   601,   602,   603,   604,   150,   150,   150,
+   150,   139,   143,   144,   145,   146,   150,   615,   149,   150,
+   150,   153,   620,     3,     4,   150,   150,   150,   150,     9,
     10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-   430,   431,    30,  1075,  1076,    33,    34,  1079,    36,   151,
-   152,   453,   454,   455,   151,   152,   150,   447,   448,   143,
-   144,   145,   146,   151,   152,   149,   143,   144,   145,   146,
-   151,   111,   149,   154,   114,   150,   143,   144,   145,   146,
-   150,   153,   149,   143,   144,   145,   146,     5,    34,   149,
-     6,   153,  1124,     5,   484,   485,   498,   487,   143,   144,
-   145,   146,   150,   859,   149,   507,   496,   497,    34,   153,
-     3,   156,   150,     5,   150,   150,   143,   144,   145,   146,
-   153,   150,   149,   150,   150,   153,   153,   150,   153,   150,
-  1162,   143,   144,   145,   146,   150,   150,   149,     6,   151,
-     0,     1,   154,     3,   527,   150,   150,     3,   538,   150,
-   150,   150,   150,   143,   144,   545,   546,   547,   150,  1191,
-   150,   143,   144,   145,   146,   150,   556,   149,   151,   150,
-   152,   561,    66,    67,    68,    69,    70,    71,    72,    73,
-    74,    75,    76,    77,   150,   587,   150,   577,    66,    67,
-    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-   150,   591,   592,   593,   594,   595,   596,   597,   598,   599,
-   600,   601,   602,   150,   150,   143,   144,   145,   146,     3,
-     4,   149,  1254,   613,   152,     9,    10,    11,    12,    13,
-    14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-    24,    25,    26,    27,    28,    29,   106,   107,   108,   109,
-   110,   111,   112,   113,    89,   150,   658,     5,     7,    94,
-   154,   150,   150,   143,   144,   145,   146,   150,   150,   149,
-   151,   151,   132,   133,   154,   135,   154,   150,   113,   150,
-   670,   671,   672,   150,   150,   687,   150,   689,   150,   691,
-     7,   681,   682,    30,    31,    32,    33,    34,    35,    36,
-    37,   150,    39,   150,    41,    42,   150,    44,    45,   143,
-   144,   145,   146,   150,   150,   149,    82,   151,   708,   709,
-   154,   150,   143,   144,   145,   146,   150,    64,   149,   143,
-   144,   145,   146,   154,   724,   149,   152,   150,   150,   150,
-   154,    78,    79,   150,   734,    51,    52,    53,    54,   150,
-    56,   741,   742,   743,   150,   150,   150,   150,   748,   143,
-   144,   150,   752,   150,   150,   150,   150,   150,   150,   150,
-   753,   761,   762,    91,    92,    93,    94,    95,   150,   150,
-   150,    30,    31,    32,    33,    34,    35,    36,    37,   150,
-    39,   150,    41,    42,   131,    44,    45,   150,   788,   150,
-   790,   791,   792,   793,   794,   795,   796,   797,   798,   799,
-   800,   801,   150,   152,   150,    64,   150,   154,   143,   144,
-   145,   146,   151,   151,   149,   815,   816,   152,   152,    78,
-    79,    30,    31,    32,    33,    34,    35,    36,    37,   137,
-    39,     5,    41,    42,     5,    44,    45,   143,   144,   145,
-   146,     5,     5,   149,   143,   144,   145,   146,   154,     5,
-   149,     5,     5,   152,     5,    64,     5,   857,     5,     3,
-     5,   861,   862,   863,     5,   143,   144,   145,   146,    78,
-    79,   149,   131,     5,     5,     5,   154,     5,   143,   144,
-   145,   146,     5,     5,   149,     5,     5,     5,   888,   154,
-   890,   143,   144,   145,   146,   154,     5,   149,     5,   124,
-   900,     5,   154,   143,   144,   145,   146,     6,   908,   149,
-     5,     5,     5,   913,   154,     5,   916,   143,   144,   145,
-   146,     5,   131,   149,     5,   149,   153,     7,   154,   929,
-   930,   931,   932,   933,   934,   935,   936,   937,   938,   939,
-   940,   143,   144,   145,   146,     7,     6,   149,     7,     7,
-   152,   143,   144,   145,   146,     7,   153,   149,   153,     7,
-   152,   143,   144,   145,   146,   150,     7,   149,   138,     5,
-   152,   151,   151,   151,   151,   975,   421,   422,   151,   151,
-   425,     7,   151,   428,   429,   143,   144,   145,   146,   151,
-   151,   149,   151,     7,   152,   152,   151,   143,   144,   145,
-   146,  1001,  1002,   149,     7,     7,   152,   143,   144,   145,
-   146,   151,   151,   149,   151,   150,   152,   151,   151,     7,
-     7,     7,   151,  1023,  1024,  1025,  1026,  1027,  1028,  1029,
-  1030,  1031,     7,   143,   144,   145,   146,   151,   151,   149,
-   151,   486,   152,   151,   489,   143,   144,   145,   146,   151,
-   151,   149,     7,     7,   152,   143,   144,   145,   146,   504,
-   505,   149,   151,     7,   152,   510,   511,     7,   151,   151,
-     7,   150,   517,  1073,   519,   143,   144,   145,   146,   151,
-   151,   149,   151,   151,  1084,  1085,  1086,  1087,  1088,  1089,
-  1090,  1091,  1092,   143,   144,   145,   146,   151,   151,   149,
-   151,   150,   152,   150,   150,   150,   551,   150,   553,     6,
-   150,   150,   150,   150,     7,   150,   150,   562,   563,   564,
-  1120,  1121,   567,   568,   569,   570,   571,   572,   573,   574,
-  1130,  1131,  1132,  1133,  1134,  1135,  1136,  1137,  1138,   143,
-   144,   145,   146,   153,   153,   149,   153,     7,   152,   134,
-     3,   143,   144,   145,   146,     3,     3,   149,  1158,  1159,
-   152,   145,     3,     3,  1164,  1165,  1166,  1167,  1168,  1169,
-   143,   144,   145,   146,     3,     3,   149,     3,     3,   152,
-   143,   144,   145,   146,     3,     3,   149,  1187,     3,   152,
-     3,     3,  1192,  1193,  1194,  1195,  1196,  1197,   143,   144,
-   145,   146,     5,     5,   149,     3,     3,   152,   154,    83,
-     6,     6,     6,     6,  1214,  1215,  1216,  1217,  1218,  1219,
-   143,   144,   145,   146,     6,     6,   149,   154,   153,   152,
-  1230,  1231,  1232,   143,   144,   145,   146,     6,     6,   149,
-     4,     3,   152,   151,  1244,  1245,  1246,   152,   151,     6,
-   152,   151,     6,   152,   152,  1255,  1256,  1257,   152,   151,
-   151,     0,     1,   151,   151,     4,   143,   144,   145,   146,
-   715,   152,   149,   152,   152,   152,   721,   152,   151,   151,
-   725,   143,   144,   145,   146,   151,    33,   149,   151,     6,
-   152,    30,    31,    32,    33,    34,    35,    36,    37,   744,
-    39,    40,    41,    42,    43,    44,    45,   151,   151,   151,
-     6,     6,    51,    52,    53,    54,    55,    56,   151,    58,
-    59,    60,    61,    62,   151,    64,   143,   144,   145,   146,
-   151,   151,   149,     6,     6,   152,     6,   151,     6,    78,
-    79,    88,    89,    90,   151,    84,     6,     6,     6,    96,
-    97,    98,    99,   100,   101,   102,   103,   104,   105,     6,
-     6,   151,     6,     6,    83,     7,     7,   114,   115,   116,
-   117,   118,   119,   120,   121,   122,   123,   154,   125,   126,
-   127,   128,   129,   130,   143,   144,   145,   146,   154,   154,
-   149,     3,   131,   152,   143,   144,   145,   146,     6,     3,
-   149,     3,   145,   152,     3,   143,   144,   145,   146,     6,
-     6,   149,     3,     6,   152,   143,   144,   145,   146,     6,
-     6,   149,     3,     6,   152,   143,   144,   145,   146,     6,
-     3,   149,     3,     3,   152,   143,   144,   145,   146,   884,
-     6,   149,   887,     6,   152,   143,   144,   145,   146,   153,
-   151,   149,   154,   153,   152,   143,   144,   145,   146,   151,
-   151,   149,    80,     3,   152,   910,   143,   144,   145,   146,
-     6,   152,   149,   151,     6,   152,   143,   144,   145,   146,
-   925,   152,   149,   152,     6,   152,   143,   144,   145,   146,
-   151,   153,   149,     7,    83,   152,   941,   942,   143,   144,
-   145,   146,   151,   151,   149,     7,     6,   152,   143,   144,
-   145,   146,   151,   151,   149,   152,   152,   152,   143,   144,
-   145,   146,   152,   151,   149,   152,     6,   152,   143,   144,
-   145,   146,   151,   134,   149,     3,     6,   152,   143,   144,
-   145,   146,     6,     3,   149,     6,     3,   152,     6,   143,
-   144,   145,   146,   998,   999,   149,     6,     6,   152,   143,
-   144,   145,   146,     6,     5,   149,     6,     6,   152,   143,
-   144,   145,   146,     6,     5,   149,   154,  1022,   152,     6,
-     3,   153,   151,   151,   151,     6,   151,  1032,  1033,  1034,
+   143,   144,   145,   146,   150,   150,   149,   143,   144,   152,
+   150,   754,   150,     6,   150,   150,   150,   153,   150,   149,
+     5,   150,   150,   150,   672,   673,   674,   150,   150,   150,
+     3,     4,   150,   150,   682,   683,     9,    10,    11,    12,
+    13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+    23,    24,    25,    26,    27,    28,    29,   150,   150,   150,
+   150,   709,   710,    66,    67,    68,    69,    70,    71,    72,
+    73,    74,    75,    76,    77,   723,   150,   725,   143,   144,
+   145,   146,   150,   150,   149,   151,   151,   735,   150,   154,
+   150,   150,   150,   150,   742,   743,   744,   143,   144,   145,
+   146,   749,   150,   149,   151,   753,   150,   150,   154,   150,
+   758,   759,   150,   143,   144,   143,   144,   145,   146,   150,
+   150,   149,     7,   151,   150,   150,   154,   150,   143,   144,
+   145,   146,   150,   152,   149,     7,   784,   152,   786,   787,
+   788,   789,   790,   791,   792,   793,   794,   795,   796,   797,
+   151,   154,   143,   144,   145,   146,   152,   152,   149,   143,
+   144,   145,   146,   154,   812,   149,    82,     5,   152,   151,
+   143,   144,   143,   144,   145,   146,     5,   150,   149,     5,
+     5,     5,   124,   154,    30,    31,    32,    33,    34,    35,
+    36,    37,     5,    39,     5,    41,    42,     5,    44,    45,
+     5,     5,     5,   851,     5,     5,     5,   855,   856,   857,
+   143,   144,   145,   146,     5,     5,   149,     5,    64,     5,
+     5,   154,     5,     5,   143,   144,   145,   146,     5,     5,
+   149,     5,    78,    79,   882,   154,   884,   143,   144,   145,
+   146,     5,     3,   149,   892,     5,     5,     5,   154,     5,
+     7,     6,   900,   143,   144,   145,   146,   905,     5,   149,
+   908,     7,   152,   441,   442,     6,   153,   445,     7,     7,
+   448,   449,     7,   921,   922,   923,   924,   925,   926,   927,
+   928,   929,   930,   931,   932,   131,   143,   144,   145,   146,
+   153,   153,   149,     7,   150,   943,     7,   154,   143,   144,
+   145,   146,   138,   151,   149,     5,   150,   152,   154,   143,
+   144,   145,   146,   152,   151,   149,   151,     7,   152,   967,
+   143,   144,   145,   146,   151,     6,   149,   505,   150,   152,
+   508,   143,   144,   145,   146,   151,   151,   149,     7,     7,
+   152,   151,   151,     7,   151,   993,   994,   995,     7,   527,
+   528,   143,   144,   145,   146,   533,   534,   149,   151,     7,
+   152,     7,   540,     7,   542,     7,     7,  1015,  1016,  1017,
+  1018,  1019,  1020,  1021,  1022,  1023,   554,     7,   556,   151,
+   143,   144,   145,   146,   151,  1033,   149,   565,   566,   567,
+     7,     7,   570,   571,   572,   573,   574,   575,   576,   143,
+   144,   145,   146,   151,   153,   149,   151,   150,   152,    30,
+    31,    32,    33,    34,    35,    36,    37,  1065,    39,   151,
+    41,    42,   151,    44,    45,   151,   151,   151,  1076,  1077,
+  1078,  1079,  1080,  1081,  1082,  1083,  1084,  1085,  1086,  1087,
+   153,   151,   151,    64,  1092,   143,   144,   145,   146,   151,
+   151,   149,   151,   150,   152,   151,   151,    78,    79,   143,
+   144,   145,   146,   151,   151,   149,   151,   150,   152,   151,
+  1118,  1119,   151,  1121,   151,   150,   150,   150,   150,   150,
+  1128,  1129,  1130,  1131,  1132,  1133,  1134,  1135,  1136,  1137,
+   150,  1139,   150,  1141,   150,     7,   153,   134,  1146,     3,
+     3,     3,    30,    31,    32,    33,    34,    35,    36,    37,
+   131,    39,   145,    41,    42,     3,    44,    45,     3,     5,
+  1168,  1169,     3,     3,     3,     3,  1174,  1175,  1176,  1177,
+  1178,  1179,     3,   154,     3,     3,    64,     3,   716,   143,
+   144,   145,   146,     3,   722,   149,     5,   151,   726,  1197,
+    78,    79,     3,     3,  1202,  1203,  1204,  1205,  1206,  1207,
+  1208,  1209,  1210,   143,   144,   145,   146,   745,     6,   149,
+     6,     6,   152,   143,   144,   145,   146,     6,     6,   149,
+     6,   151,  1230,  1231,  1232,  1233,  1234,  1235,  1236,   154,
+  1238,   154,  1240,   143,   144,   145,   146,   153,     6,   149,
+     6,    83,   152,   131,     4,   151,     7,   152,   151,   151,
+  1258,  1259,  1260,   143,   144,   145,   146,   152,   152,   149,
+   151,     6,   152,   152,  1272,  1273,  1274,  1275,  1276,  1277,
    143,   144,   145,   146,   151,   151,   149,   152,   152,   152,
-   143,   144,   145,   146,   152,   151,   149,   151,     6,   152,
-   143,   144,   145,   146,   151,     6,   149,     6,     3,   152,
-   143,   144,   145,   146,     6,  1070,   149,     6,     6,   152,
-   143,   144,   145,   146,     6,     6,   149,     6,  1083,   152,
-   143,   144,   145,   146,     5,     5,   149,   151,   154,   152,
-   143,   144,   145,   146,     3,   151,   149,   151,     6,   152,
-   143,   144,   145,   146,   152,   152,   149,   151,     6,   152,
-   143,   144,   145,   146,   151,   151,   149,   151,     6,   152,
-  1125,   143,   144,   145,   146,     6,    80,   149,   134,     6,
-   152,   143,   144,   145,   146,     6,     5,   149,     5,   154,
-   152,   143,   144,   145,   146,     6,   153,   149,     3,   154,
-   152,   143,   144,   145,   146,   151,   151,   149,  1163,     3,
-   152,    80,   152,   152,   152,  1170,  1171,  1172,   143,   144,
-   145,   146,     6,     6,   149,     6,     6,   152,   143,   144,
-   145,   146,   153,     3,   149,  1190,   139,   152,   143,   144,
-   145,   146,   151,   140,   149,   151,     6,   152,     6,   143,
-   144,   145,   146,   151,     6,   149,     6,  1212,   152,   143,
-   144,   145,   146,     6,   151,   149,   151,     6,   152,   143,
-   144,   145,   146,   151,  1229,   149,   152,   151,  1233,  1234,
-  1235,   143,   144,   145,   146,   151,     6,   149,  1243,   152,
-   152,   143,   144,   145,   146,     6,     6,   149,   151,     6,
-   152,     6,     6,     6,     0,     0,     6,  1021,  1263,  1264,
-  1265,   143,   144,   145,   146,   458,    -1,   149,     6,     6,
-   152,   143,   144,   145,   146,    -1,   431,   149,    -1,    -1,
-   152,   143,   144,   145,   146,   713,    -1,   149,    -1,    -1,
-   152,   143,   144,   145,   146,    -1,    -1,   149,    -1,    -1,
-   152,   143,   144,   145,   146,    -1,    -1,   149,    -1,    -1,
-   152,   143,   144,   145,   146,    -1,    -1,   149,    -1,    -1,
-   152,   143,   144,   145,   146,    -1,    -1,   149,    -1,    -1,
-   152,   143,   144,   145,   146,    -1,    -1,   149,    -1,   151,
-   143,   144,   145,   146,    -1,    -1,   149,    -1,   151,   143,
-   144,   145,   146,    -1,    -1,   149,    -1,   151,   143,   144,
-   145,   146,    -1,    -1,   149,    -1,   151,   143,   144,   145,
-   146,    -1,    -1,   149,    -1,   151,   143,   144,   145,   146,
-    -1,    -1,   149,    -1,   151,   143,   144,   145,   146,    -1,
+   151,  1289,  1290,  1291,  1292,   152,  1294,   152,  1296,   143,
+   144,   145,   146,     0,     1,   149,   151,     4,   152,   143,
+   144,   145,   146,   152,   151,   149,     6,   151,  1316,  1317,
+  1318,    83,     6,     6,   151,   151,   151,  1325,    33,  1327,
+     6,  1329,     6,    30,    31,    32,    33,    34,    35,    36,
+    37,     7,    39,    40,    41,    42,    43,    44,    45,   151,
+   878,   154,   151,   881,    51,    52,    53,    54,    55,    56,
+   151,    58,    59,    60,    61,    62,     6,    64,   151,   143,
+   144,   145,   146,     6,   902,   149,   151,     6,   152,   151,
+   151,    78,    79,    88,    89,    90,   151,    84,     6,   917,
+     6,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+   105,     6,   151,     6,     6,   933,   934,     6,   154,   114,
+   115,   116,   117,   118,   119,   120,   121,   122,   123,     6,
+   125,   126,   127,   128,   129,   130,   143,   144,   145,   146,
+   154,     3,   149,     3,   131,   152,   143,   144,   145,   146,
+     6,   145,   149,     6,     6,   152,     3,   143,   144,   145,
+   146,     6,     3,   149,     6,     3,   152,     6,   143,   144,
+   145,   146,   990,   991,   149,     6,     3,   152,   143,   144,
+   145,   146,     3,     3,   149,   153,   153,   152,   143,   144,
+   145,   146,     6,   154,   149,     6,  1014,   152,   143,   144,
+   145,   146,   151,   151,   149,   151,     6,   152,   143,   144,
+   145,   146,    80,   152,   149,   151,     6,   152,   143,   144,
+   145,   146,   151,   151,   149,   152,   152,   152,   143,   144,
+   145,   146,   152,   151,   149,   151,   153,   152,   151,   143,
+   144,   145,   146,   152,  1062,   149,     7,   152,   152,   143,
+   144,   145,   146,   151,   151,   149,   152,  1075,   152,   143,
+   144,   145,   146,     7,    83,   149,     3,     6,   152,   143,
+   144,   145,   146,     6,     6,   149,     3,     6,   152,   143,
+   144,   145,   146,     6,     6,   149,     3,     6,   152,   143,
+   144,   145,   146,     6,     6,   149,     6,     5,   152,     6,
+   143,   144,   145,   146,     6,  1123,   149,     6,     5,   152,
+   143,   144,   145,   146,   154,     6,   149,   153,   152,   152,
+   143,   144,   145,   146,   152,   151,   149,   151,     5,   152,
+   143,   144,   145,   146,   151,   151,   149,   152,     5,   152,
+   143,   144,   145,   146,   151,   151,   149,   151,   153,   152,
+   143,   144,   145,   146,   151,  1173,   149,     6,   154,   152,
+   143,   144,   145,   146,     6,   151,   149,     6,   152,   152,
+   143,   144,   145,   146,     6,     6,   149,     6,   152,   152,
+     6,     6,  1200,   143,   144,   145,   146,     6,   151,   149,
+     6,   153,   152,   143,   144,   145,   146,   151,   151,   149,
+   151,   153,   152,   143,   144,   145,   146,    80,   151,   149,
+  1228,     6,   152,   143,   144,   145,   146,   151,     5,   149,
+   151,     6,   152,   143,   144,   145,   146,     6,     5,   149,
+     6,     6,   152,   154,   143,   144,   145,   146,   153,  1257,
+   149,   152,     6,   152,    80,   143,   144,   145,   146,   152,
+   151,   149,   152,  1271,   152,   143,   144,   145,   146,   151,
+   154,   149,     6,     6,   152,   143,   144,   145,   146,     6,
+     6,   149,     6,   153,   152,   143,   144,   145,   146,   151,
+   151,   149,   151,   140,   152,   143,   144,   145,   146,   151,
+   153,   149,   153,   153,   152,   143,   144,   145,   146,     6,
+   151,   149,   152,     6,   152,   143,   144,   145,   146,     6,
+     6,   149,     6,     6,   152,   143,   144,   145,   146,   153,
+   153,   149,     6,   153,   152,   143,   144,   145,   146,   151,
+   151,   149,     6,   153,   152,   143,   144,   145,   146,   151,
+     6,   149,   152,     6,   152,   143,   144,   145,   146,   153,
+   153,   149,     6,     6,   152,   143,   144,   145,   146,     6,
+     0,   149,     0,   477,   152,   143,   144,   145,   146,   451,
+     6,   149,     6,     6,   152,   143,   144,   145,   146,  1013,
+    -1,   149,   714,    -1,   152,   143,   144,   145,   146,    -1,
+    -1,   149,    -1,    -1,   152,   143,   144,   145,   146,    -1,
+    -1,   149,    -1,    -1,   152,   143,   144,   145,   146,    -1,
+    -1,   149,    -1,    -1,   152,   143,   144,   145,   146,    -1,
+    -1,   149,    -1,    -1,   152,   143,   144,   145,   146,    -1,
     -1,   149,    -1,   151,   143,   144,   145,   146,    -1,    -1,
    149,    -1,   151,   143,   144,   145,   146,    -1,    -1,   149,
     -1,   151,   143,   144,   145,   146,    -1,    -1,   149,    -1,
@@ -1426,10 +1484,15 @@ static const short yycheck[] = {    79,
    143,   144,   145,   146,    -1,    -1,   149,    -1,   151,   143,
    144,   145,   146,    -1,    -1,   149,    -1,   151,   143,   144,
    145,   146,    -1,    -1,   149,    -1,   151,   143,   144,   145,
-   146,    -1,    -1,   149,    -1,   151
+   146,    -1,    -1,   149,    -1,   151,   143,   144,   145,   146,
+    -1,    -1,   149,    -1,   151,   143,   144,   145,   146,    -1,
+    -1,   149,    -1,   151,   143,   144,   145,   146,    -1,    -1,
+   149,    -1,   151,   143,   144,   145,   146,    -1,    -1,   149,
+    -1,   151
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/local/share/bison.simple"
+#line 3 "/usr/lib/bison.simple"
+/* This file comes from bison-1.28.  */
 
 /* Skeleton output parser for bison,
    Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
@@ -1446,46 +1509,66 @@ static const short yycheck[] = {    79,
 
    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., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+   Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
 
 /* As a special exception, when this file is copied by Bison into a
    Bison output file, you may use that output file without restriction.
    This special exception was added by the Free Software Foundation
    in version 1.24 of Bison.  */
 
-#ifndef alloca
+/* This is the parser code that is written into each bison parser
+  when the %semantic_parser declaration is not specified in the grammar.
+  It was written by Richard Stallman by simplifying the hairy parser
+  used when %semantic_parser is specified.  */
+
+#ifndef YYSTACK_USE_ALLOCA
+#ifdef alloca
+#define YYSTACK_USE_ALLOCA
+#else /* alloca not defined */
 #ifdef __GNUC__
+#define YYSTACK_USE_ALLOCA
 #define alloca __builtin_alloca
 #else /* not GNU C.  */
-#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
+#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
+#define YYSTACK_USE_ALLOCA
 #include <alloca.h>
 #else /* not sparc */
-#if defined (MSDOS) && !defined (__TURBOC__)
+/* We think this test detects Watcom and Microsoft C.  */
+/* This used to test MSDOS, but that is a bad idea
+   since that symbol is in the user namespace.  */
+#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
+#if 0 /* No need for malloc.h, which pollutes the namespace;
+	 instead, just don't use alloca.  */
 #include <malloc.h>
+#endif
 #else /* not MSDOS, or __TURBOC__ */
 #if defined(_AIX)
-#include <malloc.h>
+/* I don't know what this was needed for, but it pollutes the namespace.
+   So I turned it off.   rms, 2 May 1997.  */
+/* #include <malloc.h>  */
  #pragma alloca
-#else /* not MSDOS, __TURBOC__, or _AIX */
-#ifdef __hpux
-#ifdef __cplusplus
-extern "C" {
-void *alloca (unsigned int);
-};
-#else /* not __cplusplus */
-void *alloca ();
-#endif /* not __cplusplus */
+#define YYSTACK_USE_ALLOCA
+#else /* not MSDOS, or __TURBOC__, or _AIX */
+#if 0
+#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
+		 and on HPUX 10.  Eventually we can turn this on.  */
+#define YYSTACK_USE_ALLOCA
+#define alloca __builtin_alloca
 #endif /* __hpux */
+#endif
 #endif /* not _AIX */
 #endif /* not MSDOS, or __TURBOC__ */
-#endif /* not sparc.  */
-#endif /* not GNU C.  */
-#endif /* alloca not defined.  */
+#endif /* not sparc */
+#endif /* not GNU C */
+#endif /* alloca not defined */
+#endif /* YYSTACK_USE_ALLOCA not defined */
 
-/* This is the parser code that is written into each bison parser
-  when the %semantic_parser declaration is not specified in the grammar.
-  It was written by Richard Stallman by simplifying the hairy parser
-  used when %semantic_parser is specified.  */
+#ifdef YYSTACK_USE_ALLOCA
+#define YYSTACK_ALLOC alloca
+#else
+#define YYSTACK_ALLOC malloc
+#endif
 
 /* Note: there must be only one dollar sign in this file.
    It is replaced by the list of actions, each action
@@ -1495,8 +1578,8 @@ void *alloca ();
 #define yyclearin	(yychar = YYEMPTY)
 #define YYEMPTY		-2
 #define YYEOF		0
-#define YYACCEPT	return(0)
-#define YYABORT 	return(1)
+#define YYACCEPT	goto yyacceptlab
+#define YYABORT 	goto yyabortlab
 #define YYERROR		goto yyerrlab1
 /* Like YYERROR except do call yyerror.
    This remains here temporarily to ease the
@@ -1577,12 +1660,12 @@ int yydebug;			/*  nonzero means print parse trace	*/
 #ifndef YYMAXDEPTH
 #define YYMAXDEPTH 10000
 #endif
-
-/* Prevent warning if -Wstrict-prototypes.  */
-#ifdef __GNUC__
-int yyparse (void);
-#endif
 
+/* Define __yy_memcpy.  Note that the size argument
+   should be passed with type unsigned int, because that is what the non-GCC
+   definitions require.  With GCC, __builtin_memcpy takes an arg
+   of type size_t, but it can handle unsigned int.  */
+
 #if __GNUC__ > 1		/* GNU C and GNU C++ define this.  */
 #define __yy_memcpy(TO,FROM,COUNT)	__builtin_memcpy(TO,FROM,COUNT)
 #else				/* not GNU C or C++ */
@@ -1594,7 +1677,7 @@ static void
 __yy_memcpy (to, from, count)
      char *to;
      char *from;
-     int count;
+     unsigned int count;
 {
   register char *f = from;
   register char *t = to;
@@ -1609,10 +1692,10 @@ __yy_memcpy (to, from, count)
 /* This is the most reliable way to avoid incompatibilities
    in available built-in functions on various systems.  */
 static void
-__yy_memcpy (char *to, char *from, int count)
+__yy_memcpy (char *to, char *from, unsigned int count)
 {
-  register char *f = from;
   register char *t = to;
+  register char *f = from;
   register int i = count;
 
   while (i-- > 0)
@@ -1622,7 +1705,7 @@ __yy_memcpy (char *to, char *from, int count)
 #endif
 #endif
 
-#line 196 "/usr/local/share/bison.simple"
+#line 217 "/usr/lib/bison.simple"
 
 /* The user can define YYPARSE_PARAM as the name of an argument to be passed
    into yyparse.  The argument should have type void *.
@@ -1643,6 +1726,15 @@ __yy_memcpy (char *to, char *from, int count)
 #define YYPARSE_PARAM_DECL
 #endif /* not YYPARSE_PARAM */
 
+/* Prevent warning if -Wstrict-prototypes.  */
+#ifdef __GNUC__
+#ifdef YYPARSE_PARAM
+int yyparse (void *);
+#else
+int yyparse (void);
+#endif
+#endif
+
 int
 yyparse(YYPARSE_PARAM_ARG)
      YYPARSE_PARAM_DECL
@@ -1671,6 +1763,7 @@ yyparse(YYPARSE_PARAM_ARG)
 #endif
 
   int yystacksize = YYINITDEPTH;
+  int yyfree_stacks = 0;
 
 #ifdef YYPURE
   int yychar;
@@ -1755,18 +1848,32 @@ yynewstate:
       if (yystacksize >= YYMAXDEPTH)
 	{
 	  yyerror("parser stack overflow");
+	  if (yyfree_stacks)
+	    {
+	      free (yyss);
+	      free (yyvs);
+#ifdef YYLSP_NEEDED
+	      free (yyls);
+#endif
+	    }
 	  return 2;
 	}
       yystacksize *= 2;
       if (yystacksize > YYMAXDEPTH)
 	yystacksize = YYMAXDEPTH;
-      yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
-      __yy_memcpy ((char *)yyss, (char *)yyss1, size * sizeof (*yyssp));
-      yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
-      __yy_memcpy ((char *)yyvs, (char *)yyvs1, size * sizeof (*yyvsp));
+#ifndef YYSTACK_USE_ALLOCA
+      yyfree_stacks = 1;
+#endif
+      yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
+      __yy_memcpy ((char *)yyss, (char *)yyss1,
+		   size * (unsigned int) sizeof (*yyssp));
+      yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
+      __yy_memcpy ((char *)yyvs, (char *)yyvs1,
+		   size * (unsigned int) sizeof (*yyvsp));
 #ifdef YYLSP_NEEDED
-      yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
-      __yy_memcpy ((char *)yyls, (char *)yyls1, size * sizeof (*yylsp));
+      yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
+      __yy_memcpy ((char *)yyls, (char *)yyls1,
+		   size * (unsigned int) sizeof (*yylsp));
 #endif
 #endif /* no yyoverflow */
 
@@ -1927,7 +2034,7 @@ yyreduce:
   switch (yyn) {
 
 case 4:
-#line 121 "Gmsh.y"
+#line 126 "Gmsh.y"
 {
       Msg(PARSER_INFO,"STL File Format");
       STL_Surf = Create_Surface(1,MSH_SURF_STL,1);
@@ -1936,7 +2043,7 @@ case 4:
     ;
     break;}
 case 5:
-#line 135 "Gmsh.y"
+#line 140 "Gmsh.y"
 {
       STL_Surf->STL->Add_Facet( yyvsp[-12].d, yyvsp[-11].d, yyvsp[-10].d,
 				yyvsp[-8].d, yyvsp[-7].d, yyvsp[-6].d,
@@ -1945,7 +2052,7 @@ case 5:
     ;
     break;}
 case 6:
-#line 142 "Gmsh.y"
+#line 147 "Gmsh.y"
 {
       Msg(PARSER_INFO,"STL File Format Read");
       Tree_Add(THEM->Surfaces, &STL_Surf);
@@ -1953,83 +2060,83 @@ case 6:
     ;
     break;}
 case 9:
-#line 159 "Gmsh.y"
+#line 164 "Gmsh.y"
 { return 1; ;
     break;}
 case 10:
-#line 160 "Gmsh.y"
+#line 165 "Gmsh.y"
 { return 1; ;
     break;}
 case 11:
-#line 161 "Gmsh.y"
+#line 166 "Gmsh.y"
 { return 1; ;
     break;}
 case 12:
-#line 162 "Gmsh.y"
+#line 167 "Gmsh.y"
 { yyerrok ; return 1; ;
     break;}
 case 13:
-#line 167 "Gmsh.y"
+#line 172 "Gmsh.y"
 {
       Msg(PARSER_INFO,"Step Iso-10303-21 File Format");
       Create_Step_Solid_BRep();
     ;
     break;}
 case 14:
-#line 172 "Gmsh.y"
+#line 177 "Gmsh.y"
 {
       Msg(PARSER_INFO,"Step Iso-10303-21 File Format Read");
       Resolve_BREP ();
     ;
     break;}
 case 18:
-#line 183 "Gmsh.y"
+#line 188 "Gmsh.y"
 {
     ;
     break;}
 case 19:
-#line 186 "Gmsh.y"
+#line 191 "Gmsh.y"
 {
     ;
     break;}
 case 20:
-#line 190 "Gmsh.y"
+#line 195 "Gmsh.y"
 {
    ;
     break;}
 case 21:
-#line 196 "Gmsh.y"
+#line 201 "Gmsh.y"
 {
         Add_Cartesian_Point((int)yyvsp[-8].d,yyvsp[-4].c,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2]);
     ;
     break;}
 case 22:
-#line 202 "Gmsh.y"
+#line 207 "Gmsh.y"
 {
        Add_BSpline_Curve_With_Knots ((int)yyvsp[-22].d, yyvsp[-18].c, (int) yyvsp[-16].d, yyvsp[-14].l,	yyvsp[-6].l, yyvsp[-4].l, 0., 1.);
     ;
     break;}
 case 23:
-#line 209 "Gmsh.y"
+#line 214 "Gmsh.y"
 {
       Add_BSpline_Surface_With_Knots ((int)yyvsp[-30].d, yyvsp[-26].c, (int) yyvsp[-24].d, (int) yyvsp[-22].d, yyvsp[-20].l, yyvsp[-10].l,
 				      yyvsp[-8].l, yyvsp[-6].l, yyvsp[-4].l, 0., 1., 0., 1. );
     ;
     break;}
 case 24:
-#line 215 "Gmsh.y"
+#line 220 "Gmsh.y"
 {
       Add_Edge_Curve ((int)yyvsp[-14].d, yyvsp[-10].c , (int)yyvsp[-8].d , (int)yyvsp[-6].d, (int)yyvsp[-4].d);
     ;
     break;}
 case 25:
-#line 219 "Gmsh.y"
+#line 224 "Gmsh.y"
 {
       Add_Face_Outer_Bound((int)yyvsp[-10].d,yyvsp[-6].c,(int)yyvsp[-4].d,yyvsp[-2].i,1);
     ;
     break;}
 case 26:
-#line 223 "Gmsh.y"
+#line 228 "Gmsh.y"
 {
       /* La je dois voir la norme ! Face_Bound : trou externe a la surface ! */
       Msg(PARSER_INFO,"Found a Face Bound");
@@ -2037,310 +2144,517 @@ case 26:
     ;
     break;}
 case 27:
-#line 230 "Gmsh.y"
+#line 235 "Gmsh.y"
 {
       Add_Oriented_Edge((int)yyvsp[-14].d,yyvsp[-10].c,(int)yyvsp[-4].d,yyvsp[-2].i);
     ;
     break;}
 case 28:
-#line 234 "Gmsh.y"
+#line 239 "Gmsh.y"
 {
       Add_Edge_Loop((int)yyvsp[-8].d,yyvsp[-4].c,yyvsp[-2].l);
     ;
     break;}
 case 29:
-#line 239 "Gmsh.y"
+#line 244 "Gmsh.y"
 {
       Add_Advanced_Face((int)yyvsp[-12].d,yyvsp[-8].c,yyvsp[-6].l,(int)yyvsp[-4].d,yyvsp[-2].i);
     ;
     break;}
 case 30:
-#line 243 "Gmsh.y"
+#line 248 "Gmsh.y"
 {
       Add_Vertex_Point((int)yyvsp[-8].d,yyvsp[-4].c,(int)yyvsp[-2].d);
     ;
     break;}
 case 31:
-#line 247 "Gmsh.y"
+#line 252 "Gmsh.y"
 {
     ;
     break;}
 case 32:
-#line 251 "Gmsh.y"
+#line 256 "Gmsh.y"
 {
       Add_Axis2_Placement3D  ( (int)yyvsp[-12].d, (int)yyvsp[-4].d, (int)yyvsp[-2].d, (int)yyvsp[-6].d);
     ;
     break;}
 case 33:
-#line 255 "Gmsh.y"
+#line 260 "Gmsh.y"
 {
       Add_Direction((int)yyvsp[-8].d , yyvsp[-4].c, yyvsp[-2].v[0], yyvsp[-2].v[1], yyvsp[-2].v[2]);
     ;
     break;}
 case 34:
-#line 259 "Gmsh.y"
+#line 264 "Gmsh.y"
 {
       Add_Plane((int)yyvsp[-8].d,yyvsp[-4].c,(int)yyvsp[-2].d);
     ;
     break;}
 case 35:
-#line 263 "Gmsh.y"
+#line 268 "Gmsh.y"
 {
       Add_Line ((int)yyvsp[-10].d, yyvsp[-6].c , (int) yyvsp[-4].d, (int)yyvsp[-2].d);
     ;
     break;}
 case 36:
-#line 267 "Gmsh.y"
+#line 272 "Gmsh.y"
 {
       Msg(PARSER_INFO,"Found a Closed shell");
       Add_Closed_Shell((int)yyvsp[-8].d, yyvsp[-4].c , yyvsp[-2].l);
     ;
     break;}
 case 37:
-#line 273 "Gmsh.y"
+#line 278 "Gmsh.y"
 {
     ;
     break;}
 case 38:
-#line 276 "Gmsh.y"
+#line 281 "Gmsh.y"
 {
     ;
     break;}
 case 39:
-#line 279 "Gmsh.y"
+#line 284 "Gmsh.y"
 {
       Add_Cylinder ((int)yyvsp[-10].d, yyvsp[-6].c , (int)yyvsp[-4].d, yyvsp[-2].d);
     ;
     break;}
 case 40:
-#line 283 "Gmsh.y"
+#line 288 "Gmsh.y"
 {
       Add_Cone ((int)yyvsp[-12].d, yyvsp[-8].c , (int)yyvsp[-6].d, yyvsp[-4].d,yyvsp[-2].d);
     ;
     break;}
 case 41:
-#line 287 "Gmsh.y"
+#line 292 "Gmsh.y"
 {
       Add_Torus ((int)yyvsp[-12].d, yyvsp[-8].c , (int)yyvsp[-6].d, yyvsp[-4].d,yyvsp[-2].d);
     ;
     break;}
 case 42:
-#line 291 "Gmsh.y"
+#line 296 "Gmsh.y"
 {
       Add_Circle((int) yyvsp[-10].d, yyvsp[-6].c, (int) yyvsp[-4].d, yyvsp[-2].d);
     ;
     break;}
 case 43:
-#line 295 "Gmsh.y"
+#line 300 "Gmsh.y"
 {
       Add_Ellipsis((int) yyvsp[-12].d, yyvsp[-8].c, (int) yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d);
     ;
     break;}
 case 44:
-#line 300 "Gmsh.y"
+#line 305 "Gmsh.y"
 {
     ;
     break;}
 case 45:
-#line 303 "Gmsh.y"
+#line 308 "Gmsh.y"
 {
     ;
     break;}
 case 46:
-#line 307 "Gmsh.y"
+#line 312 "Gmsh.y"
 {
     ;
     break;}
 case 47:
-#line 310 "Gmsh.y"
+#line 315 "Gmsh.y"
 {
     ;
     break;}
 case 48:
-#line 314 "Gmsh.y"
+#line 319 "Gmsh.y"
 {
     ;
     break;}
 case 49:
-#line 317 "Gmsh.y"
+#line 322 "Gmsh.y"
 {
     ;
     break;}
 case 50:
-#line 320 "Gmsh.y"
+#line 325 "Gmsh.y"
 {
     ;
     break;}
 case 52:
-#line 331 "Gmsh.y"
+#line 336 "Gmsh.y"
 {
       Msg(PARSER_INFO,"Gmsh File Format Read");
     ;
     break;}
 case 53:
-#line 337 "Gmsh.y"
+#line 342 "Gmsh.y"
 { return 1; ;
     break;}
 case 54:
-#line 338 "Gmsh.y"
+#line 343 "Gmsh.y"
 { return 1; ;
     break;}
 case 55:
-#line 339 "Gmsh.y"
+#line 344 "Gmsh.y"
 { return 1; ;
     break;}
 case 56:
-#line 340 "Gmsh.y"
+#line 345 "Gmsh.y"
 { return 1; ;
     break;}
 case 57:
-#line 341 "Gmsh.y"
+#line 346 "Gmsh.y"
 { return 1; ;
     break;}
 case 58:
-#line 342 "Gmsh.y"
+#line 347 "Gmsh.y"
 { return 1; ;
     break;}
 case 59:
-#line 343 "Gmsh.y"
+#line 348 "Gmsh.y"
 { return 1; ;
     break;}
 case 60:
-#line 344 "Gmsh.y"
+#line 349 "Gmsh.y"
 { return 1; ;
     break;}
 case 61:
-#line 345 "Gmsh.y"
+#line 350 "Gmsh.y"
 { return 1; ;
     break;}
 case 62:
-#line 346 "Gmsh.y"
+#line 351 "Gmsh.y"
 { return 1; ;
     break;}
 case 63:
-#line 347 "Gmsh.y"
+#line 352 "Gmsh.y"
 { return 1; ;
     break;}
 case 64:
-#line 348 "Gmsh.y"
+#line 353 "Gmsh.y"
 { yyerrok; return 1;;
     break;}
 case 65:
-#line 357 "Gmsh.y"
+#line 362 "Gmsh.y"
 { 
-      EndView(yyvsp[-4].c,0.,0.,0.); 
+      EndView(1, Force_ViewNumber,yyname,yyvsp[-4].c,0.,0.,0.); 
     ;
     break;}
 case 66:
-#line 361 "Gmsh.y"
+#line 366 "Gmsh.y"
 {
-      EndView(yyvsp[-6].c,yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2]);
+      EndView(1, Force_ViewNumber,yyname,yyvsp[-6].c,yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2]);
     ;
     break;}
 case 67:
-#line 368 "Gmsh.y"
+#line 373 "Gmsh.y"
 {
       BeginView(1); 
     ;
     break;}
 case 80:
-#line 390 "Gmsh.y"
-{
-      AddView_ScalarSimplex(yyvsp[-25].d,yyvsp[-23].d,yyvsp[-21].d,yyvsp[-19].d,yyvsp[-17].d,yyvsp[-15].d,yyvsp[-13].d,yyvsp[-11].d,yyvsp[-9].d,yyvsp[-7].d,yyvsp[-5].d,yyvsp[-3].d,yyvsp[-1].l);
-    ;
+#line 392 "Gmsh.y"
+{ List_Add(ActualView->SP, &yyvsp[0].d) ; ;
     break;}
 case 81:
-#line 400 "Gmsh.y"
-{
-      AddView_VectorSimplex(yyvsp[-25].d,yyvsp[-23].d,yyvsp[-21].d,yyvsp[-19].d,yyvsp[-17].d,yyvsp[-15].d,yyvsp[-13].d,yyvsp[-11].d,yyvsp[-9].d,yyvsp[-7].d,yyvsp[-5].d,yyvsp[-3].d,yyvsp[-1].l);
-    ;
+#line 394 "Gmsh.y"
+{ List_Add(ActualView->SP, &yyvsp[0].d) ; ;
     break;}
 case 82:
-#line 410 "Gmsh.y"
-{
-      AddView_TensorSimplex(yyvsp[-25].d,yyvsp[-23].d,yyvsp[-21].d,yyvsp[-19].d,yyvsp[-17].d,yyvsp[-15].d,yyvsp[-13].d,yyvsp[-11].d,yyvsp[-9].d,yyvsp[-7].d,yyvsp[-5].d,yyvsp[-3].d,yyvsp[-1].l);
+#line 399 "Gmsh.y"
+{ 
+      List_Add(ActualView->SP, &yyvsp[-5].d); List_Add(ActualView->SP, &yyvsp[-3].d);
+      List_Add(ActualView->SP, &yyvsp[-1].d);
     ;
     break;}
 case 83:
-#line 419 "Gmsh.y"
+#line 404 "Gmsh.y"
 {
-      AddView_ScalarTriangle(yyvsp[-19].d,yyvsp[-17].d,yyvsp[-15].d,yyvsp[-13].d,yyvsp[-11].d,yyvsp[-9].d,yyvsp[-7].d,yyvsp[-5].d,yyvsp[-3].d,yyvsp[-1].l);
+      ActualView->NbSP++ ;
     ;
     break;}
 case 84:
-#line 428 "Gmsh.y"
+#line 411 "Gmsh.y"
+{ List_Add(ActualView->VP, &yyvsp[0].d) ; ;
+    break;}
+case 85:
+#line 413 "Gmsh.y"
+{ List_Add(ActualView->VP, &yyvsp[0].d) ; ;
+    break;}
+case 86:
+#line 418 "Gmsh.y"
+{ 
+      List_Add(ActualView->VP, &yyvsp[-5].d); List_Add(ActualView->VP, &yyvsp[-3].d);
+      List_Add(ActualView->VP, &yyvsp[-1].d); 
+    ;
+    break;}
+case 87:
+#line 423 "Gmsh.y"
 {
-      AddView_VectorTriangle(yyvsp[-19].d,yyvsp[-17].d,yyvsp[-15].d,yyvsp[-13].d,yyvsp[-11].d,yyvsp[-9].d,yyvsp[-7].d,yyvsp[-5].d,yyvsp[-3].d,yyvsp[-1].l);
+      ActualView->NbVP++ ;
     ;
     break;}
-case 85:
+case 88:
+#line 430 "Gmsh.y"
+{ List_Add(ActualView->TP, &yyvsp[0].d) ; ;
+    break;}
+case 89:
+#line 432 "Gmsh.y"
+{ List_Add(ActualView->TP, &yyvsp[0].d) ; ;
+    break;}
+case 90:
 #line 437 "Gmsh.y"
+{ 
+      List_Add(ActualView->TP, &yyvsp[-5].d); List_Add(ActualView->TP, &yyvsp[-3].d);
+      List_Add(ActualView->TP, &yyvsp[-1].d);
+    ;
+    break;}
+case 91:
+#line 442 "Gmsh.y"
 {
-      AddView_TensorTriangle(yyvsp[-19].d,yyvsp[-17].d,yyvsp[-15].d,yyvsp[-13].d,yyvsp[-11].d,yyvsp[-9].d,yyvsp[-7].d,yyvsp[-5].d,yyvsp[-3].d,yyvsp[-1].l);
+      ActualView->NbTP++ ;
     ;
     break;}
-case 86:
-#line 445 "Gmsh.y"
+case 92:
+#line 449 "Gmsh.y"
+{ List_Add(ActualView->SL, &yyvsp[0].d) ; ;
+    break;}
+case 93:
+#line 451 "Gmsh.y"
+{ List_Add(ActualView->SL, &yyvsp[0].d) ; ;
+    break;}
+case 94:
+#line 457 "Gmsh.y"
+{ 
+      List_Add(ActualView->SL, &yyvsp[-11].d); List_Add(ActualView->SL, &yyvsp[-5].d);
+      List_Add(ActualView->SL, &yyvsp[-9].d); List_Add(ActualView->SL, &yyvsp[-3].d);
+      List_Add(ActualView->SL, &yyvsp[-7].d); List_Add(ActualView->SL, &yyvsp[-1].d);
+    ;
+    break;}
+case 95:
+#line 463 "Gmsh.y"
 {
-      AddView_ScalarLine(yyvsp[-13].d,yyvsp[-11].d,yyvsp[-9].d,yyvsp[-7].d,yyvsp[-5].d,yyvsp[-3].d,yyvsp[-1].l);
+      ActualView->NbSL++ ;
     ;
     break;}
-case 87:
-#line 453 "Gmsh.y"
+case 96:
+#line 470 "Gmsh.y"
+{ List_Add(ActualView->VL, &yyvsp[0].d) ; ;
+    break;}
+case 97:
+#line 472 "Gmsh.y"
+{ List_Add(ActualView->VL, &yyvsp[0].d) ; ;
+    break;}
+case 98:
+#line 478 "Gmsh.y"
+{ 
+      List_Add(ActualView->SL, &yyvsp[-11].d); List_Add(ActualView->SL, &yyvsp[-5].d);
+      List_Add(ActualView->SL, &yyvsp[-9].d); List_Add(ActualView->SL, &yyvsp[-3].d);
+      List_Add(ActualView->SL, &yyvsp[-7].d); List_Add(ActualView->SL, &yyvsp[-1].d);
+    ;
+    break;}
+case 99:
+#line 484 "Gmsh.y"
 {
-      AddView_VectorLine(yyvsp[-13].d,yyvsp[-11].d,yyvsp[-9].d,yyvsp[-7].d,yyvsp[-5].d,yyvsp[-3].d,yyvsp[-1].l);
+      ActualView->NbVL++ ;
     ;
     break;}
-case 88:
-#line 461 "Gmsh.y"
+case 100:
+#line 491 "Gmsh.y"
+{ List_Add(ActualView->TL, &yyvsp[0].d) ; ;
+    break;}
+case 101:
+#line 493 "Gmsh.y"
+{ List_Add(ActualView->TL, &yyvsp[0].d) ; ;
+    break;}
+case 102:
+#line 499 "Gmsh.y"
+{ 
+      List_Add(ActualView->SL, &yyvsp[-11].d); List_Add(ActualView->SL, &yyvsp[-5].d);
+      List_Add(ActualView->SL, &yyvsp[-9].d); List_Add(ActualView->SL, &yyvsp[-3].d);
+      List_Add(ActualView->SL, &yyvsp[-7].d); List_Add(ActualView->SL, &yyvsp[-1].d);
+    ;
+    break;}
+case 103:
+#line 505 "Gmsh.y"
 {
-      AddView_TensorLine(yyvsp[-13].d,yyvsp[-11].d,yyvsp[-9].d,yyvsp[-7].d,yyvsp[-5].d,yyvsp[-3].d,yyvsp[-1].l);
+      ActualView->NbTL++ ;
     ;
     break;}
-case 89:
-#line 468 "Gmsh.y"
+case 104:
+#line 512 "Gmsh.y"
+{ List_Add(ActualView->ST, &yyvsp[0].d) ; ;
+    break;}
+case 105:
+#line 514 "Gmsh.y"
+{ List_Add(ActualView->ST, &yyvsp[0].d) ; ;
+    break;}
+case 106:
+#line 521 "Gmsh.y"
+{ 
+      List_Add(ActualView->ST, &yyvsp[-17].d); List_Add(ActualView->ST, &yyvsp[-11].d);
+      List_Add(ActualView->ST, &yyvsp[-5].d);
+      List_Add(ActualView->ST, &yyvsp[-15].d); List_Add(ActualView->ST, &yyvsp[-9].d);
+      List_Add(ActualView->ST, &yyvsp[-3].d);
+      List_Add(ActualView->ST, &yyvsp[-13].d); List_Add(ActualView->ST, &yyvsp[-7].d);
+      List_Add(ActualView->ST, &yyvsp[-1].d);
+    ;
+    break;}
+case 107:
+#line 530 "Gmsh.y"
 {
-      AddView_ScalarPoint(yyvsp[-7].d,yyvsp[-5].d,yyvsp[-3].d,yyvsp[-1].l);
+      ActualView->NbST++ ;
     ;
     break;}
-case 90:
-#line 475 "Gmsh.y"
+case 108:
+#line 537 "Gmsh.y"
+{ List_Add(ActualView->VT, &yyvsp[0].d) ; ;
+    break;}
+case 109:
+#line 539 "Gmsh.y"
+{ List_Add(ActualView->VT, &yyvsp[0].d) ; ;
+    break;}
+case 110:
+#line 546 "Gmsh.y"
+{ 
+      List_Add(ActualView->VT, &yyvsp[-17].d); List_Add(ActualView->VT, &yyvsp[-11].d);
+      List_Add(ActualView->VT, &yyvsp[-5].d);
+      List_Add(ActualView->VT, &yyvsp[-15].d); List_Add(ActualView->VT, &yyvsp[-9].d);
+      List_Add(ActualView->VT, &yyvsp[-3].d);
+      List_Add(ActualView->VT, &yyvsp[-13].d); List_Add(ActualView->VT, &yyvsp[-7].d);
+      List_Add(ActualView->VT, &yyvsp[-1].d);
+    ;
+    break;}
+case 111:
+#line 555 "Gmsh.y"
 {
-      AddView_VectorPoint(yyvsp[-7].d,yyvsp[-5].d,yyvsp[-3].d,yyvsp[-1].l);
+      ActualView->NbVT++ ;
     ;
     break;}
-case 91:
-#line 482 "Gmsh.y"
+case 112:
+#line 562 "Gmsh.y"
+{ List_Add(ActualView->TT, &yyvsp[0].d) ; ;
+    break;}
+case 113:
+#line 564 "Gmsh.y"
+{ List_Add(ActualView->TT, &yyvsp[0].d) ; ;
+    break;}
+case 114:
+#line 571 "Gmsh.y"
+{ 
+      List_Add(ActualView->TT, &yyvsp[-17].d); List_Add(ActualView->TT, &yyvsp[-11].d);
+      List_Add(ActualView->TT, &yyvsp[-5].d);
+      List_Add(ActualView->TT, &yyvsp[-15].d); List_Add(ActualView->TT, &yyvsp[-9].d);
+      List_Add(ActualView->TT, &yyvsp[-3].d);
+      List_Add(ActualView->TT, &yyvsp[-13].d); List_Add(ActualView->TT, &yyvsp[-7].d);
+      List_Add(ActualView->TT, &yyvsp[-1].d);
+    ;
+    break;}
+case 115:
+#line 580 "Gmsh.y"
 {
-      AddView_TensorPoint(yyvsp[-7].d,yyvsp[-5].d,yyvsp[-3].d,yyvsp[-1].l);
+      ActualView->NbTT++ ;
     ;
     break;}
-case 92:
-#line 493 "Gmsh.y"
+case 116:
+#line 587 "Gmsh.y"
+{ List_Add(ActualView->SS, &yyvsp[0].d) ; ;
+    break;}
+case 117:
+#line 589 "Gmsh.y"
+{ List_Add(ActualView->SS, &yyvsp[0].d) ; ;
+    break;}
+case 118:
+#line 597 "Gmsh.y"
+{ 
+      List_Add(ActualView->SS, &yyvsp[-23].d);  List_Add(ActualView->SS, &yyvsp[-17].d);
+      List_Add(ActualView->SS, &yyvsp[-11].d); List_Add(ActualView->SS, &yyvsp[-5].d);
+      List_Add(ActualView->SS, &yyvsp[-21].d);  List_Add(ActualView->SS, &yyvsp[-15].d);
+      List_Add(ActualView->SS, &yyvsp[-9].d); List_Add(ActualView->SS, &yyvsp[-3].d);
+      List_Add(ActualView->SS, &yyvsp[-19].d);  List_Add(ActualView->SS, &yyvsp[-13].d);
+      List_Add(ActualView->SS, &yyvsp[-7].d); List_Add(ActualView->SS, &yyvsp[-1].d);
+    ;
+    break;}
+case 119:
+#line 606 "Gmsh.y"
+{
+      ActualView->NbSS++ ;
+    ;
+    break;}
+case 120:
+#line 613 "Gmsh.y"
+{ List_Add(ActualView->VS, &yyvsp[0].d) ; ;
+    break;}
+case 121:
+#line 615 "Gmsh.y"
+{ List_Add(ActualView->VS, &yyvsp[0].d) ; ;
+    break;}
+case 122:
+#line 623 "Gmsh.y"
+{ 
+      List_Add(ActualView->VS, &yyvsp[-23].d);  List_Add(ActualView->VS, &yyvsp[-17].d);
+      List_Add(ActualView->VS, &yyvsp[-11].d); List_Add(ActualView->VS, &yyvsp[-5].d);
+      List_Add(ActualView->VS, &yyvsp[-21].d);  List_Add(ActualView->VS, &yyvsp[-15].d);
+      List_Add(ActualView->VS, &yyvsp[-9].d); List_Add(ActualView->VS, &yyvsp[-3].d);
+      List_Add(ActualView->VS, &yyvsp[-19].d);  List_Add(ActualView->VS, &yyvsp[-13].d);
+      List_Add(ActualView->VS, &yyvsp[-7].d); List_Add(ActualView->VS, &yyvsp[-1].d);
+    ;
+    break;}
+case 123:
+#line 632 "Gmsh.y"
+{
+      ActualView->NbVS++ ;
+    ;
+    break;}
+case 124:
+#line 639 "Gmsh.y"
+{ List_Add(ActualView->TS, &yyvsp[0].d) ; ;
+    break;}
+case 125:
+#line 641 "Gmsh.y"
+{ List_Add(ActualView->TS, &yyvsp[0].d) ; ;
+    break;}
+case 126:
+#line 649 "Gmsh.y"
+{ 
+      List_Add(ActualView->TS, &yyvsp[-23].d);  List_Add(ActualView->TS, &yyvsp[-17].d);
+      List_Add(ActualView->TS, &yyvsp[-11].d); List_Add(ActualView->TS, &yyvsp[-5].d);
+      List_Add(ActualView->TS, &yyvsp[-21].d);  List_Add(ActualView->TS, &yyvsp[-15].d);
+      List_Add(ActualView->TS, &yyvsp[-9].d); List_Add(ActualView->TS, &yyvsp[-3].d);
+      List_Add(ActualView->TS, &yyvsp[-19].d);  List_Add(ActualView->TS, &yyvsp[-13].d);
+      List_Add(ActualView->TS, &yyvsp[-7].d); List_Add(ActualView->TS, &yyvsp[-1].d);
+    ;
+    break;}
+case 127:
+#line 658 "Gmsh.y"
+{
+      ActualView->NbTS++ ;
+    ;
+    break;}
+case 128:
+#line 671 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-3].c;
       TheSymbol.val  = yyvsp[-1].d;
       List_Replace(Symbol_L,&TheSymbol,CompareSymbols);
     ;
     break;}
-case 93:
-#line 510 "Gmsh.y"
+case 129:
+#line 688 "Gmsh.y"
 {
       Cdbpts101((int)yyvsp[-4].d,yyvsp[-1].v[0],yyvsp[-1].v[1],yyvsp[-1].v[2],yyvsp[-1].v[3],yyvsp[-1].v[4]);
       yyval.s.Type = MSH_POINT;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 94:
-#line 517 "Gmsh.y"
+case 130:
+#line 695 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_POINT,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_PHYSICAL_POINT;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 95:
-#line 523 "Gmsh.y"
+case 131:
+#line 701 "Gmsh.y"
 {
       Vertex *v;
       Attractor *a;
@@ -2360,8 +2674,8 @@ case 95:
       }
     ;
     break;}
-case 96:
-#line 542 "Gmsh.y"
+case 132:
+#line 720 "Gmsh.y"
 {
       for(i=0;i<List_Nbr(yyvsp[-3].l);i++){
 	List_Read(yyvsp[-3].l,i,&d);
@@ -2373,31 +2687,31 @@ case 96:
       }
     ;
     break;}
-case 97:
-#line 553 "Gmsh.y"
+case 133:
+#line 731 "Gmsh.y"
 {
       yyval.s.Type = MSH_POINT;
       yyval.s.Num  = (int)yyvsp[-2].d;
     ;
     break;}
-case 98:
-#line 561 "Gmsh.y"
+case 134:
+#line 739 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_LINE,1,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
       yyval.s.Type = MSH_SEGM_LINE;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 99:
-#line 567 "Gmsh.y"
+case 135:
+#line 745 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_SPLN,3,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
       yyval.s.Type = MSH_SEGM_SPLN;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 100:
-#line 573 "Gmsh.y"
+case 136:
+#line 751 "Gmsh.y"
 {
       Curve *c;
       Attractor *a;
@@ -2417,16 +2731,16 @@ case 100:
       }
     ;
     break;}
-case 101:
-#line 592 "Gmsh.y"
+case 137:
+#line 770 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_CIRC,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
       yyval.s.Type = MSH_SEGM_CIRC ;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 102:
-#line 598 "Gmsh.y"
+case 138:
+#line 776 "Gmsh.y"
 {
       List_T *temp;
       int i,j;
@@ -2443,40 +2757,40 @@ case 102:
       yyval.s.Num  = (int)yyvsp[-6].d;
     ;
     break;}
-case 103:
-#line 615 "Gmsh.y"
+case 139:
+#line 793 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-14].d,MSH_SEGM_PARAMETRIC,2,NULL,NULL,-1,-1,yyvsp[-10].d,yyvsp[-8].d,yyvsp[-6].c,yyvsp[-4].c,yyvsp[-2].c);
       yyval.s.Type = MSH_SEGM_PARAMETRIC ;
       yyval.s.Num  = (int)yyvsp[-14].d;
     ;
     break;}
-case 104:
-#line 621 "Gmsh.y"
+case 140:
+#line 799 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_ELLI,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
       yyval.s.Type = MSH_SEGM_ELLI ;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 105:
-#line 627 "Gmsh.y"
+case 141:
+#line 805 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_LINE,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_PHYSICAL_LINE;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 106:
-#line 633 "Gmsh.y"
+case 142:
+#line 811 "Gmsh.y"
 {
       yyval.s.Type = MSH_SEGM_LOOP;
       Cdbz101((int)yyvsp[-4].d,yyval.s.Type,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Num = (int)yyvsp[-4].d;
     ;
     break;}
-case 107:
-#line 639 "Gmsh.y"
+case 143:
+#line 817 "Gmsh.y"
 {
       yyval.s.Num = (int)yyvsp[-2].d;
       Curve *c = FindCurve(yyval.s.Num,THEM);
@@ -2486,22 +2800,24 @@ case 107:
 	yyval.s.Type = c->Typ;
     ;
     break;}
-case 108:
-#line 648 "Gmsh.y"
+case 144:
+#line 826 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_BSPLN,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
       yyval.s.Type = MSH_SEGM_BSPLN;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 109:
-#line 654 "Gmsh.y"
+case 145:
+#line 832 "Gmsh.y"
 {
       List_T *Temp;
       int i;
       double d;
-      if(List_Nbr(yyvsp[-5].l) + (int)yyvsp[-1].d + 1 != List_Nbr(yyvsp[-3].l)){
-	yyerror("wrong nurbs curve definition (deg + 1 + nbpts != nbknots)");
+      if((int)yyvsp[-1].d + 1 + List_Nbr(yyvsp[-5].l) != List_Nbr(yyvsp[-3].l)){
+	vyyerror("Wrong Definition of Nurbs Curve %d: "
+		"[Degree]%d + 1 + [NbPts]%d != [NbKnots]%d",
+		(int)yyvsp[-8].d, (int)yyvsp[-1].d, List_Nbr(yyvsp[-5].l), List_Nbr(yyvsp[-3].l));
       }
       Temp = List_Create(List_Nbr(yyvsp[-5].l),1,sizeof(int));
       for(i=0;i<List_Nbr(yyvsp[-5].l);i++) {
@@ -2513,16 +2829,16 @@ case 109:
       List_Delete(Temp);
     ;
     break;}
-case 110:
-#line 674 "Gmsh.y"
+case 146:
+#line 854 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_SURF_PLAN,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_SURF_PLAN;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 111:
-#line 680 "Gmsh.y"
+case 147:
+#line 860 "Gmsh.y"
 {
       Surface *s,*support;
       support = FindSurface((int)yyvsp[-2].d,THEM);
@@ -2542,8 +2858,8 @@ case 111:
       }
     ;
     break;}
-case 112:
-#line 699 "Gmsh.y"
+case 148:
+#line 879 "Gmsh.y"
 {
       List_Read(yyvsp[-1].l,0,&d);
       i = (int)d;
@@ -2557,132 +2873,134 @@ case 112:
 	else if(j==3)
 	  yyval.s.Type  = MSH_SURF_TRIC;
 	else
-	  vyyerror("Ruled surface %d has not 3 or 4 borders", yyvsp[-4].d);
+	  vyyerror("Wrong Definition of Ruled Surface %d: "
+		   "%d Borders Instead of 3 or 4", 
+		   (int)yyvsp[-4].d, j);
 	Cdbz101((int)yyvsp[-4].d,yyval.s.Type,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
 	yyval.s.Num = (int)yyvsp[-4].d;
       }
     ;
     break;}
-case 113:
-#line 720 "Gmsh.y"
+case 149:
+#line 902 "Gmsh.y"
 {
       CreateNurbsSurface ( (int) yyvsp[-16].d , (int)yyvsp[-4].d , (int)yyvsp[-2].d  , yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l);
       yyval.s.Type  = MSH_SURF_NURBS;
       yyval.s.Num = (int)yyvsp[-16].d;
     ;
     break;}
-case 114:
-#line 728 "Gmsh.y"
+case 150:
+#line 910 "Gmsh.y"
 {
       CreateNurbsSurfaceSupport ((int)yyvsp[-16].d, (int) yyvsp[-4].d , (int) yyvsp[-2].d , yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l);
     ;
     break;}
-case 115:
-#line 732 "Gmsh.y"
+case 151:
+#line 914 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_SURFACE,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_PHYSICAL_SURFACE;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 116:
-#line 738 "Gmsh.y"
+case 152:
+#line 920 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_SURF_LOOP,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_SURF_LOOP;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 117:
-#line 744 "Gmsh.y"
+case 153:
+#line 926 "Gmsh.y"
 {
       yyval.s.Num = (int)yyvsp[-2].d;
       Surface *s = FindSurface(yyval.s.Num,THEM);
       if(!s)
-	vyyerror("Unkown Surface %d", yyval.s.Num);
+	vyyerror("Unknown Surface %d", yyval.s.Num);
       else
 	yyval.s.Type = s->Typ;
      ;
     break;}
-case 118:
-#line 756 "Gmsh.y"
+case 154:
+#line 938 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_VOLUME,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_VOLUME;
       yyval.s.Num  = (int)yyvsp[-4].d;      
     ;
     break;}
-case 119:
-#line 762 "Gmsh.y"
+case 155:
+#line 944 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_VOLUME,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_VOLUME;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 120:
-#line 768 "Gmsh.y"
+case 156:
+#line 950 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_VOLUME,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_PHYSICAL_VOLUME;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 121:
-#line 781 "Gmsh.y"
+case 157:
+#line 963 "Gmsh.y"
 {
       TranslateShapes (yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-1].l,1);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 122:
-#line 786 "Gmsh.y"
+case 158:
+#line 968 "Gmsh.y"
 {
       RotateShapes(yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].d,yyvsp[-1].l);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 123:
-#line 791 "Gmsh.y"
+case 159:
+#line 973 "Gmsh.y"
 {
       SymmetryShapes(yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-4].v[3],yyvsp[-1].l,1);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 124:
-#line 796 "Gmsh.y"
+case 160:
+#line 978 "Gmsh.y"
 {
       DilatShapes(yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].d,yyvsp[-1].l,1);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 125:
-#line 803 "Gmsh.y"
+case 161:
+#line 985 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
-case 126:
-#line 804 "Gmsh.y"
+case 162:
+#line 986 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
-case 127:
-#line 805 "Gmsh.y"
+case 163:
+#line 987 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
-case 128:
-#line 810 "Gmsh.y"
+case 164:
+#line 992 "Gmsh.y"
 {
       yyval.l = List_Create(3,3,sizeof(Shape));
     ;
     break;}
-case 129:
-#line 814 "Gmsh.y"
+case 165:
+#line 996 "Gmsh.y"
 {
       List_Add(yyval.l,&yyvsp[0].s);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 130:
-#line 826 "Gmsh.y"
+case 166:
+#line 1008 "Gmsh.y"
 {
       yyval.l = List_Create(3,3,sizeof(Shape));
       for(i=0;i<List_Nbr(yyvsp[-1].l);i++){
@@ -2693,8 +3011,8 @@ case 130:
       }
     ;
     break;}
-case 131:
-#line 844 "Gmsh.y"
+case 167:
+#line 1026 "Gmsh.y"
 {
       for(i=0;i<List_Nbr(yyvsp[-1].l);i++){
 	List_Read (yyvsp[-1].l,i,&TheShape);
@@ -2702,8 +3020,8 @@ case 131:
       }
     ;
     break;}
-case 132:
-#line 859 "Gmsh.y"
+case 168:
+#line 1041 "Gmsh.y"
 {
       yyinTab[RecursionLevel++] = yyin;
       strcpy(tmpstring, ThePathForIncludes);
@@ -2721,88 +3039,88 @@ case 132:
 	yylineno = yylinenoTab[RecursionLevel];
       }
       else{
-	vyyerror("Unknown file: %s", yyvsp[-1].c) ;  
+	vyyerror("Unknown File '%s'", yyvsp[-1].c) ;  
 	yyin = yyinTab[--RecursionLevel];
       }
     ;
     break;}
-case 133:
-#line 890 "Gmsh.y"
+case 169:
+#line 1072 "Gmsh.y"
 {
       Extrude_ProtudeSurface(1,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],0.,0.,0.,0.,0,NULL);
     ;
     break;}
-case 134:
-#line 894 "Gmsh.y"
+case 170:
+#line 1076 "Gmsh.y"
 {
       Extrude_ProtudeSurface(1,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],0.,0.,0.,0.,0,NULL);
     ;
     break;}
-case 135:
-#line 898 "Gmsh.y"
+case 171:
+#line 1080 "Gmsh.y"
 {
       Extrude_ProtudeSurface(0,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,0,NULL);
     ;
     break;}
-case 136:
-#line 902 "Gmsh.y"
+case 172:
+#line 1084 "Gmsh.y"
 {
       Extrude_ProtudeSurface(0,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,0,NULL);
     ;
     break;}
-case 137:
-#line 906 "Gmsh.y"
+case 173:
+#line 1088 "Gmsh.y"
 {
       Curve *pc, *prc;
       Extrude_ProtudePoint(0,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,
 			   &pc,&prc,NULL);
     ;
     break;}
-case 138:
-#line 912 "Gmsh.y"
+case 174:
+#line 1094 "Gmsh.y"
 {
       Curve *pc, *prc;
       Extrude_ProtudePoint(1,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],0.,0.,0.,0.,&pc,&prc,NULL);
     ;
     break;}
-case 139:
-#line 917 "Gmsh.y"
+case 175:
+#line 1099 "Gmsh.y"
 {
       Extrude_ProtudeCurve(0,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,NULL);
     ;
     break;}
-case 140:
-#line 921 "Gmsh.y"
+case 176:
+#line 1103 "Gmsh.y"
 {
       Extrude_ProtudeCurve(1,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],0.,0.,0.,0.,NULL);
     ;
     break;}
-case 141:
-#line 925 "Gmsh.y"
+case 177:
+#line 1107 "Gmsh.y"
 {
     int vol = NEWREG();
     Extrude_ProtudeSurface(1,(int)yyvsp[-7].d,yyvsp[-5].v[0],yyvsp[-5].v[1],yyvsp[-5].v[2],0.,0.,0.,0.,vol,&extr);
   ;
     break;}
-case 142:
-#line 931 "Gmsh.y"
+case 178:
+#line 1113 "Gmsh.y"
 {
     int vol = NEWREG();
     Extrude_ProtudeSurface(0,(int)yyvsp[-11].d,yyvsp[-9].v[0],yyvsp[-9].v[1],yyvsp[-9].v[2],yyvsp[-7].v[0],yyvsp[-7].v[1],yyvsp[-7].v[2],yyvsp[-5].d,vol,&extr);
   ;
     break;}
-case 143:
-#line 939 "Gmsh.y"
+case 179:
+#line 1121 "Gmsh.y"
 {
     ;
     break;}
-case 144:
-#line 942 "Gmsh.y"
+case 180:
+#line 1124 "Gmsh.y"
 {
     ;
     break;}
-case 145:
-#line 948 "Gmsh.y"
+case 181:
+#line 1130 "Gmsh.y"
 {
       double d;
       int j;
@@ -2820,14 +3138,14 @@ case 145:
       }
     ;
     break;}
-case 146:
-#line 965 "Gmsh.y"
+case 182:
+#line 1147 "Gmsh.y"
 {
       extr.mesh.Recombine = true;
     ;
     break;}
-case 147:
-#line 976 "Gmsh.y"
+case 183:
+#line 1158 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-3].l);i++){
@@ -2845,8 +3163,8 @@ case 147:
       }
     ;
     break;}
-case 148:
-#line 993 "Gmsh.y"
+case 184:
+#line 1175 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-6].l);i++){
@@ -2864,8 +3182,8 @@ case 148:
       }
     ;
     break;}
-case 149:
-#line 1010 "Gmsh.y"
+case 185:
+#line 1192 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-6].l);i++){
@@ -2883,8 +3201,8 @@ case 149:
       }
     ;
     break;}
-case 150:
-#line 1027 "Gmsh.y"
+case 186:
+#line 1209 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-6].l);i++){
@@ -2902,8 +3220,8 @@ case 150:
       }
     ;
     break;}
-case 151:
-#line 1044 "Gmsh.y"
+case 187:
+#line 1226 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d,THEM);
       if(!s)
@@ -2912,7 +3230,8 @@ case 151:
 	s->Method = TRANSFINI;
 	k = List_Nbr(yyvsp[-1].l);
 	if(k!=3 && k!=4){
-	  vyyerror("Bad Number of Points for Transfinite Surface %d", yyvsp[-4].d) ;
+	  vyyerror("Wrong Definition of Transfinite Surface %d: "
+		   "%d Points Instead of 3 or 4" , yyvsp[-4].d, k) ;
 	}
 	else{
 	  for(i=0;i<k;i++){
@@ -2924,8 +3243,8 @@ case 151:
       }
     ;
     break;}
-case 152:
-#line 1064 "Gmsh.y"
+case 188:
+#line 1247 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d,THEM);
       if(!s)
@@ -2934,7 +3253,8 @@ case 152:
         s->Method = ELLIPTIC;
         k = List_Nbr(yyvsp[-1].l);
         if(k != 4)
-          vyyerror("Bad Number of Points for Elliptic Surface %d", yyvsp[-4].d) ;
+	  vyyerror("Wrong Definition of Elliptic Surface %d: "
+		   "%d Points Instead of 4" , yyvsp[-4].d, k) ;
         else{
 	  for(i=0;i<k;i++){
 	    List_Read(yyvsp[-1].l,i,&d);
@@ -2945,8 +3265,8 @@ case 152:
       }
     ;
     break;}
-case 153:
-#line 1083 "Gmsh.y"
+case 189:
+#line 1267 "Gmsh.y"
 {
       Volume *v = FindVolume((int)yyvsp[-4].d,THEM);
       if(!v)
@@ -2955,7 +3275,8 @@ case 153:
 	v->Method = TRANSFINI;
 	k = List_Nbr(yyvsp[-1].l);
 	if(k!=6 && k!=8)
-	  vyyerror("Bad Number of Points for Transfinite Volume %d", yyvsp[-4].d) ;
+	  vyyerror("Wrong Definition of Transfinite Volume %d: "
+		   "%d Points Instead of 6 or 8" , yyvsp[-4].d, k) ;
 	else{
 	  for(i=0;i<k;i++){
 	    List_Read(yyvsp[-1].l,i,&d);
@@ -2966,8 +3287,8 @@ case 153:
       }
     ;
     break;}
-case 154:
-#line 1102 "Gmsh.y"
+case 190:
+#line 1287 "Gmsh.y"
 {
       Surface *s;
       for(i=0;i<List_Nbr(yyvsp[-3].l);i++){
@@ -2983,8 +3304,8 @@ case 154:
       }
     ;
     break;}
-case 155:
-#line 1117 "Gmsh.y"
+case 191:
+#line 1302 "Gmsh.y"
 {
       Surface *s;
       for(i=0;i<List_Nbr(yyvsp[-1].l);i++){
@@ -3000,66 +3321,60 @@ case 155:
       }
     ;
     break;}
-case 156:
-#line 1132 "Gmsh.y"
-{
-      Msg(PARSER_ERROR, "Physical Associations do not exist anymore!");
-    ;
-    break;}
-case 157:
-#line 1144 "Gmsh.y"
+case 192:
+#line 1325 "Gmsh.y"
 { 
       Coherence_PS();
     ;
     break;}
-case 161:
-#line 1164 "Gmsh.y"
+case 196:
+#line 1345 "Gmsh.y"
 { ColorField = ColorGeneral; ;
     break;}
-case 163:
-#line 1167 "Gmsh.y"
+case 198:
+#line 1348 "Gmsh.y"
 { ColorField = ColorGeometry; ;
     break;}
-case 165:
-#line 1170 "Gmsh.y"
+case 200:
+#line 1351 "Gmsh.y"
 { ColorField = ColorMesh; ;
     break;}
-case 169:
-#line 1181 "Gmsh.y"
+case 204:
+#line 1362 "Gmsh.y"
 {
       i = Get_ColorForString(ColorString, -1, yyvsp[-1].c, &flag);
-      if(flag) vyyerror("Unknown Color: %s", yyvsp[-1].c);
+      if(flag) vyyerror("Unknown Color '%s'", yyvsp[-1].c);
       Get_ColorPointerForString(ColorField, yyvsp[-3].c, &flag, &ptr);
       if(flag)
-	vyyerror("Unknown Color Field: %s", yyvsp[-3].c);
+	vyyerror("Unknown Color Field '%s'", yyvsp[-3].c);
       else
 	*ptr = i ;
     ;
     break;}
-case 170:
-#line 1191 "Gmsh.y"
+case 205:
+#line 1372 "Gmsh.y"
 {
       i = Get_ColorForString(ColorString, (int)yyvsp[-2].d, yyvsp[-4].c, &flag);
-      if(flag) vyyerror("Unknown Color: %s", yyvsp[-4].c);
+      if(flag) vyyerror("Unknown Color '%s'", yyvsp[-4].c);
       Get_ColorPointerForString(ColorField, yyvsp[-7].c, &flag, &ptr);
       if(flag)
-	vyyerror("Unknown Color Field: %s", yyvsp[-7].c);
+	vyyerror("Unknown Color Field '%s'", yyvsp[-7].c);
       else
 	*ptr = i ;
     ;
     break;}
-case 171:
-#line 1201 "Gmsh.y"
+case 206:
+#line 1382 "Gmsh.y"
 {
       Get_ColorPointerForString(ColorField, yyvsp[-3].c, &flag, &ptr);
       if(flag)
-	vyyerror("Unknown Color Field: %s", yyvsp[-1].v);
+	vyyerror("Unknown Color Field '%s'", yyvsp[-1].v);
       else
 	*ptr = PACK_COLOR((int)yyvsp[-1].v[0], (int)yyvsp[-1].v[1], (int)yyvsp[-1].v[2], (int)yyvsp[-1].v[3]);
     ;
     break;}
-case 172:
-#line 1212 "Gmsh.y"
+case 207:
+#line 1393 "Gmsh.y"
 {
       yyval.v[0]=yyvsp[-7].d;
       yyval.v[1]=yyvsp[-5].d;
@@ -3067,8 +3382,8 @@ case 172:
       yyval.v[3]=yyvsp[-1].d;
     ;
     break;}
-case 173:
-#line 1219 "Gmsh.y"
+case 208:
+#line 1400 "Gmsh.y"
 {
       yyval.v[0]=yyvsp[-5].d;
       yyval.v[1]=yyvsp[-3].d;
@@ -3076,171 +3391,171 @@ case 173:
       yyval.v[3]=255.;
     ;
     break;}
-case 174:
-#line 1295 "Gmsh.y"
+case 209:
+#line 1476 "Gmsh.y"
 {yyval.i = 1;;
     break;}
-case 175:
-#line 1296 "Gmsh.y"
+case 210:
+#line 1477 "Gmsh.y"
 {yyval.i = 0;;
     break;}
-case 176:
-#line 1297 "Gmsh.y"
+case 211:
+#line 1478 "Gmsh.y"
 {yyval.i = -1;;
     break;}
-case 177:
-#line 1298 "Gmsh.y"
+case 212:
+#line 1479 "Gmsh.y"
 {yyval.i = -1;;
     break;}
-case 178:
-#line 1299 "Gmsh.y"
+case 213:
+#line 1480 "Gmsh.y"
 {yyval.i = -1;;
     break;}
-case 179:
-#line 1303 "Gmsh.y"
+case 214:
+#line 1484 "Gmsh.y"
 { yyval.d = yyvsp[0].d; ;
     break;}
-case 180:
-#line 1304 "Gmsh.y"
+case 215:
+#line 1485 "Gmsh.y"
 { yyval.d = yyvsp[-1].d; ;
     break;}
-case 181:
-#line 1305 "Gmsh.y"
+case 216:
+#line 1486 "Gmsh.y"
 { yyval.d = yyvsp[-2].d - yyvsp[0].d; ;
     break;}
-case 182:
-#line 1306 "Gmsh.y"
+case 217:
+#line 1487 "Gmsh.y"
 { yyval.d = yyvsp[-2].d + yyvsp[0].d; ;
     break;}
-case 183:
-#line 1307 "Gmsh.y"
+case 218:
+#line 1488 "Gmsh.y"
 { yyval.d = yyvsp[-2].d * yyvsp[0].d; ;
     break;}
-case 184:
-#line 1308 "Gmsh.y"
+case 219:
+#line 1489 "Gmsh.y"
 { yyval.d = yyvsp[-2].d / yyvsp[0].d; ;
     break;}
-case 185:
-#line 1309 "Gmsh.y"
+case 220:
+#line 1490 "Gmsh.y"
 { yyval.d = pow(yyvsp[-2].d, yyvsp[0].d); ;
     break;}
-case 186:
-#line 1310 "Gmsh.y"
+case 221:
+#line 1491 "Gmsh.y"
 { yyval.d = - yyvsp[0].d; ;
     break;}
-case 187:
-#line 1311 "Gmsh.y"
+case 222:
+#line 1492 "Gmsh.y"
 { yyval.d = yyvsp[0].d; ;
     break;}
-case 188:
-#line 1312 "Gmsh.y"
+case 223:
+#line 1493 "Gmsh.y"
 { yyval.d = exp(yyvsp[-1].d);      ;
     break;}
-case 189:
-#line 1313 "Gmsh.y"
+case 224:
+#line 1494 "Gmsh.y"
 { yyval.d = log(yyvsp[-1].d);      ;
     break;}
-case 190:
-#line 1314 "Gmsh.y"
+case 225:
+#line 1495 "Gmsh.y"
 { yyval.d = log10(yyvsp[-1].d);    ;
     break;}
-case 191:
-#line 1315 "Gmsh.y"
+case 226:
+#line 1496 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-1].d);     ;
     break;}
-case 192:
-#line 1316 "Gmsh.y"
+case 227:
+#line 1497 "Gmsh.y"
 { yyval.d = sin(yyvsp[-1].d);      ;
     break;}
-case 193:
-#line 1317 "Gmsh.y"
+case 228:
+#line 1498 "Gmsh.y"
 { yyval.d = asin(yyvsp[-1].d);     ;
     break;}
-case 194:
-#line 1318 "Gmsh.y"
+case 229:
+#line 1499 "Gmsh.y"
 { yyval.d = cos(yyvsp[-1].d);      ;
     break;}
-case 195:
-#line 1319 "Gmsh.y"
+case 230:
+#line 1500 "Gmsh.y"
 { yyval.d = acos(yyvsp[-1].d);     ;
     break;}
-case 196:
-#line 1320 "Gmsh.y"
+case 231:
+#line 1501 "Gmsh.y"
 { yyval.d = tan(yyvsp[-1].d);      ;
     break;}
-case 197:
-#line 1321 "Gmsh.y"
+case 232:
+#line 1502 "Gmsh.y"
 { yyval.d = atan(yyvsp[-1].d);     ;
     break;}
-case 198:
-#line 1322 "Gmsh.y"
+case 233:
+#line 1503 "Gmsh.y"
 { yyval.d = atan2(yyvsp[-3].d,yyvsp[-1].d); ;
     break;}
-case 199:
-#line 1323 "Gmsh.y"
+case 234:
+#line 1504 "Gmsh.y"
 { yyval.d = sinh(yyvsp[-1].d);     ;
     break;}
-case 200:
-#line 1324 "Gmsh.y"
+case 235:
+#line 1505 "Gmsh.y"
 { yyval.d = cosh(yyvsp[-1].d);     ;
     break;}
-case 201:
-#line 1325 "Gmsh.y"
+case 236:
+#line 1506 "Gmsh.y"
 { yyval.d = tanh(yyvsp[-1].d);     ;
     break;}
-case 202:
-#line 1326 "Gmsh.y"
+case 237:
+#line 1507 "Gmsh.y"
 { yyval.d = fabs(yyvsp[-1].d);     ;
     break;}
-case 203:
-#line 1327 "Gmsh.y"
+case 238:
+#line 1508 "Gmsh.y"
 { yyval.d = floor(yyvsp[-1].d);    ;
     break;}
-case 204:
-#line 1328 "Gmsh.y"
+case 239:
+#line 1509 "Gmsh.y"
 { yyval.d = ceil(yyvsp[-1].d);     ;
     break;}
-case 205:
-#line 1329 "Gmsh.y"
+case 240:
+#line 1510 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
-case 206:
-#line 1330 "Gmsh.y"
+case 241:
+#line 1511 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
-case 207:
-#line 1331 "Gmsh.y"
+case 242:
+#line 1512 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d);  ;
     break;}
-case 208:
-#line 1335 "Gmsh.y"
+case 243:
+#line 1516 "Gmsh.y"
 { yyval.d = yyvsp[0].d; ;
     break;}
-case 209:
-#line 1336 "Gmsh.y"
+case 244:
+#line 1517 "Gmsh.y"
 { yyval.d = 3.141592653589793; ;
     break;}
-case 210:
-#line 1338 "Gmsh.y"
+case 245:
+#line 1519 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[0].c ;
       if (!List_Query(Symbol_L, &TheSymbol, CompareSymbols)) {
-	vyyerror("Unknown variable: %s", yyvsp[0].c) ;  yyval.d = 0. ;
+	vyyerror("Unknown variable '%s'", yyvsp[0].c) ;  yyval.d = 0. ;
       }
       else  yyval.d = TheSymbol.val ;
       Free(yyvsp[0].c);
     ;
     break;}
-case 211:
-#line 1350 "Gmsh.y"
+case 246:
+#line 1531 "Gmsh.y"
 { 
       ListOfDouble2_L = List_Create(2,1,sizeof(double)) ; 
       for(d=yyvsp[-2].d ; (yyvsp[-2].d<yyvsp[0].d)?(d<=yyvsp[0].d):(d>=yyvsp[0].d) ; (yyvsp[-2].d<yyvsp[0].d)?(d+=1.):(d-=1.)) 
 	List_Add(ListOfDouble2_L, &d) ;
     ;
     break;}
-case 212:
-#line 1356 "Gmsh.y"
+case 247:
+#line 1537 "Gmsh.y"
 {
       ListOfDouble2_L = List_Create(2,1,sizeof(double)) ; 
       if(!yyvsp[-2].d || (yyvsp[-5].d<yyvsp[0].d && yyvsp[-2].d<0) || (yyvsp[-5].d>yyvsp[0].d && yyvsp[-2].d>0)){
@@ -3252,8 +3567,8 @@ case 212:
 	  List_Add(ListOfDouble2_L, &d) ;
    ;
     break;}
-case 213:
-#line 1370 "Gmsh.y"
+case 248:
+#line 1551 "Gmsh.y"
 {
       yyval.v[0]=yyvsp[-9].d;
       yyval.v[1]=yyvsp[-7].d;
@@ -3262,8 +3577,8 @@ case 213:
       yyval.v[4]=yyvsp[-1].d;
     ;
     break;}
-case 214:
-#line 1378 "Gmsh.y"
+case 249:
+#line 1559 "Gmsh.y"
 {
       yyval.v[0]=yyvsp[-7].d;
       yyval.v[1]=yyvsp[-5].d;
@@ -3272,8 +3587,8 @@ case 214:
       yyval.v[4]=1.0;
     ;
     break;}
-case 215:
-#line 1386 "Gmsh.y"
+case 250:
+#line 1567 "Gmsh.y"
 {
       yyval.v[0]=yyvsp[-5].d;
       yyval.v[1]=yyvsp[-3].d;
@@ -3282,8 +3597,8 @@ case 215:
       yyval.v[4]=1.0;
     ;
     break;}
-case 216:
-#line 1394 "Gmsh.y"
+case 251:
+#line 1575 "Gmsh.y"
 {
       yyval.v[0]=yyvsp[-5].d;
       yyval.v[1]=yyvsp[-3].d;
@@ -3292,84 +3607,84 @@ case 216:
       yyval.v[4]=1.0;
     ;
     break;}
-case 217:
-#line 1405 "Gmsh.y"
+case 252:
+#line 1586 "Gmsh.y"
 {
     ;
     break;}
-case 218:
-#line 1408 "Gmsh.y"
+case 253:
+#line 1589 "Gmsh.y"
 {
     ;
     break;}
-case 219:
-#line 1414 "Gmsh.y"
+case 254:
+#line 1595 "Gmsh.y"
 {
     ;
     break;}
-case 220:
-#line 1417 "Gmsh.y"
+case 255:
+#line 1598 "Gmsh.y"
 {
     ;
     break;}
-case 221:
-#line 1423 "Gmsh.y"
+case 256:
+#line 1604 "Gmsh.y"
 {
     ;
     break;}
-case 222:
-#line 1426 "Gmsh.y"
+case 257:
+#line 1607 "Gmsh.y"
 {
        yyval.l=ListOfListOfDouble_L;
     ;
     break;}
-case 223:
-#line 1430 "Gmsh.y"
+case 258:
+#line 1611 "Gmsh.y"
 {
        yyval.l=ListOfListOfDouble_L;
     ;
     break;}
-case 224:
-#line 1437 "Gmsh.y"
+case 259:
+#line 1618 "Gmsh.y"
 {
       ListOfListOfDouble_L = List_Create(2,1,sizeof(List_T*)) ;
       List_Add(ListOfListOfDouble_L, &(yyvsp[0].l)) ;
     ;
     break;}
-case 225:
-#line 1442 "Gmsh.y"
+case 260:
+#line 1623 "Gmsh.y"
 {
       List_Add(ListOfListOfDouble_L, &(yyvsp[0].l)) ;
     ;
     break;}
-case 226:
-#line 1449 "Gmsh.y"
+case 261:
+#line 1630 "Gmsh.y"
 {
     ;
     break;}
-case 227:
-#line 1452 "Gmsh.y"
+case 262:
+#line 1633 "Gmsh.y"
 {
       ListOfDouble_L = List_Create(2,1,sizeof(double)) ;
       List_Add(ListOfDouble_L, &(yyvsp[0].d)) ;
       yyval.l=ListOfDouble_L;
     ;
     break;}
-case 228:
-#line 1458 "Gmsh.y"
+case 263:
+#line 1639 "Gmsh.y"
 {
       yyval.l=ListOfDouble_L;
     ;
     break;}
-case 229:
-#line 1472 "Gmsh.y"
+case 264:
+#line 1653 "Gmsh.y"
 {
       ListOfDouble_L = List_Create(2,1,sizeof(double)) ;
       List_Add(ListOfDouble_L, &(yyvsp[0].d)) ;
     ;
     break;}
-case 230:
-#line 1477 "Gmsh.y"
+case 265:
+#line 1658 "Gmsh.y"
 { 
       ListOfDouble_L = List_Create(2,1,sizeof(double)) ;
       for(i=0 ; i<List_Nbr(ListOfDouble2_L) ; i++){
@@ -3379,14 +3694,14 @@ case 230:
       List_Delete(ListOfDouble2_L);
     ;
     break;}
-case 231:
-#line 1486 "Gmsh.y"
+case 266:
+#line 1667 "Gmsh.y"
 {
       List_Add(ListOfDouble_L, &(yyvsp[0].d)) ;
     ;
     break;}
-case 232:
-#line 1490 "Gmsh.y"
+case 267:
+#line 1671 "Gmsh.y"
 {
       for(i=0 ; i<List_Nbr(ListOfDouble2_L) ; i++){
 	List_Read(ListOfDouble2_L, i, &d) ;
@@ -3397,7 +3712,7 @@ case 232:
     break;}
 }
    /* the action file gets copied in in place of this dollarsign */
-#line 498 "/usr/local/share/bison.simple"
+#line 543 "/usr/lib/bison.simple"
 
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -3592,8 +3907,32 @@ yyerrhandle:
 
   yystate = yyn;
   goto yynewstate;
+
+ yyacceptlab:
+  /* YYACCEPT comes here.  */
+  if (yyfree_stacks)
+    {
+      free (yyss);
+      free (yyvs);
+#ifdef YYLSP_NEEDED
+      free (yyls);
+#endif
+    }
+  return 0;
+
+ yyabortlab:
+  /* YYABORT comes here.  */
+  if (yyfree_stacks)
+    {
+      free (yyss);
+      free (yyvs);
+#ifdef YYLSP_NEEDED
+      free (yyls);
+#endif
+    }
+  return 1;
 }
-#line 1500 "Gmsh.y"
+#line 1681 "Gmsh.y"
 
 
 void InitSymbols(void){
diff --git a/Parser/Gmsh.tab.cpp.h b/Parser/Gmsh.tab.cpp.h
index 180d686def..6856532645 100644
--- a/Parser/Gmsh.tab.cpp.h
+++ b/Parser/Gmsh.tab.cpp.h
@@ -6,145 +6,145 @@ typedef union {
   Shape    s;
   List_T  *l;
 } YYSTYPE;
-#define	tDOUBLE	258
-#define	tSTRING	259
-#define	tBIGSTR	260
-#define	tEND	261
-#define	tAFFECT	262
-#define	tDOTS	263
-#define	tPi	264
-#define	tExp	265
-#define	tLog	266
-#define	tLog10	267
-#define	tSqrt	268
-#define	tSin	269
-#define	tAsin	270
-#define	tCos	271
-#define	tAcos	272
-#define	tTan	273
-#define	tAtan	274
-#define	tAtan2	275
-#define	tSinh	276
-#define	tCosh	277
-#define	tTanh	278
-#define	tFabs	279
-#define	tFloor	280
-#define	tCeil	281
-#define	tFmod	282
-#define	tModulo	283
-#define	tHypot	284
-#define	tPoint	285
-#define	tCircle	286
-#define	tEllipsis	287
-#define	tLine	288
-#define	tSurface	289
-#define	tSpline	290
-#define	tVolume	291
-#define	tCharacteristic	292
-#define	tLength	293
-#define	tParametric	294
-#define	tElliptic	295
-#define	tPlane	296
-#define	tRuled	297
-#define	tTransfinite	298
-#define	tComplex	299
-#define	tPhysical	300
-#define	tUsing	301
-#define	tPower	302
-#define	tBump	303
-#define	tProgression	304
-#define	tAssociation	305
-#define	tRotate	306
-#define	tTranslate	307
-#define	tSymmetry	308
-#define	tDilate	309
-#define	tExtrude	310
-#define	tDuplicata	311
-#define	tLoop	312
-#define	tInclude	313
-#define	tRecombine	314
-#define	tDelete	315
-#define	tCoherence	316
-#define	tView	317
-#define	tOffset	318
-#define	tAttractor	319
-#define	tLayers	320
-#define	tScalarSimplex	321
-#define	tVectorSimplex	322
-#define	tTensorSimplex	323
-#define	tScalarTriangle	324
-#define	tVectorTriangle	325
-#define	tTensorTriangle	326
-#define	tScalarLine	327
-#define	tVectorLine	328
-#define	tTensorLine	329
-#define	tScalarPoint	330
-#define	tVectorPoint	331
-#define	tTensorPoint	332
-#define	tBSpline	333
-#define	tNurbs	334
-#define	tOrder	335
-#define	tWith	336
-#define	tBounds	337
-#define	tKnots	338
-#define	tColor	339
-#define	tGeneral	340
-#define	tGeometry	341
-#define	tMesh	342
-#define	tB_SPLINE_SURFACE_WITH_KNOTS	343
-#define	tB_SPLINE_CURVE_WITH_KNOTS	344
-#define	tCARTESIAN_POINT	345
-#define	tTRUE	346
-#define	tFALSE	347
-#define	tUNSPECIFIED	348
-#define	tU	349
-#define	tV	350
-#define	tEDGE_CURVE	351
-#define	tVERTEX_POINT	352
-#define	tORIENTED_EDGE	353
-#define	tPLANE	354
-#define	tFACE_OUTER_BOUND	355
-#define	tEDGE_LOOP	356
-#define	tADVANCED_FACE	357
-#define	tVECTOR	358
-#define	tDIRECTION	359
-#define	tAXIS2_PLACEMENT_3D	360
-#define	tISO	361
-#define	tENDISO	362
-#define	tENDSEC	363
-#define	tDATA	364
-#define	tHEADER	365
-#define	tFILE_DESCRIPTION	366
-#define	tFILE_SCHEMA	367
-#define	tFILE_NAME	368
-#define	tMANIFOLD_SOLID_BREP	369
-#define	tCLOSED_SHELL	370
-#define	tADVANCED_BREP_SHAPE_REPRESENTATION	371
-#define	tFACE_BOUND	372
-#define	tCYLINDRICAL_SURFACE	373
-#define	tCONICAL_SURFACE	374
-#define	tCIRCLE	375
-#define	tTRIMMED_CURVE	376
-#define	tGEOMETRIC_SET	377
-#define	tCOMPOSITE_CURVE_SEGMENT	378
-#define	tCONTINUOUS	379
-#define	tCOMPOSITE_CURVE	380
-#define	tTOROIDAL_SURFACE	381
-#define	tPRODUCT_DEFINITION	382
-#define	tPRODUCT_DEFINITION_SHAPE	383
-#define	tSHAPE_DEFINITION_REPRESENTATION	384
-#define	tELLIPSE	385
-#define	tTrimmed	386
-#define	tSolid	387
-#define	tEndSolid	388
-#define	tVertex	389
-#define	tFacet	390
-#define	tNormal	391
-#define	tOuter	392
-#define	tLoopSTL	393
-#define	tEndLoop	394
-#define	tEndFacet	395
-#define	UMINUS	396
+#define	tDOUBLE	257
+#define	tSTRING	258
+#define	tBIGSTR	259
+#define	tEND	260
+#define	tAFFECT	261
+#define	tDOTS	262
+#define	tPi	263
+#define	tExp	264
+#define	tLog	265
+#define	tLog10	266
+#define	tSqrt	267
+#define	tSin	268
+#define	tAsin	269
+#define	tCos	270
+#define	tAcos	271
+#define	tTan	272
+#define	tAtan	273
+#define	tAtan2	274
+#define	tSinh	275
+#define	tCosh	276
+#define	tTanh	277
+#define	tFabs	278
+#define	tFloor	279
+#define	tCeil	280
+#define	tFmod	281
+#define	tModulo	282
+#define	tHypot	283
+#define	tPoint	284
+#define	tCircle	285
+#define	tEllipsis	286
+#define	tLine	287
+#define	tSurface	288
+#define	tSpline	289
+#define	tVolume	290
+#define	tCharacteristic	291
+#define	tLength	292
+#define	tParametric	293
+#define	tElliptic	294
+#define	tPlane	295
+#define	tRuled	296
+#define	tTransfinite	297
+#define	tComplex	298
+#define	tPhysical	299
+#define	tUsing	300
+#define	tPower	301
+#define	tBump	302
+#define	tProgression	303
+#define	tAssociation	304
+#define	tRotate	305
+#define	tTranslate	306
+#define	tSymmetry	307
+#define	tDilate	308
+#define	tExtrude	309
+#define	tDuplicata	310
+#define	tLoop	311
+#define	tInclude	312
+#define	tRecombine	313
+#define	tDelete	314
+#define	tCoherence	315
+#define	tView	316
+#define	tOffset	317
+#define	tAttractor	318
+#define	tLayers	319
+#define	tScalarTetrahedron	320
+#define	tVectorTetrahedron	321
+#define	tTensorTetrahedron	322
+#define	tScalarTriangle	323
+#define	tVectorTriangle	324
+#define	tTensorTriangle	325
+#define	tScalarLine	326
+#define	tVectorLine	327
+#define	tTensorLine	328
+#define	tScalarPoint	329
+#define	tVectorPoint	330
+#define	tTensorPoint	331
+#define	tBSpline	332
+#define	tNurbs	333
+#define	tOrder	334
+#define	tWith	335
+#define	tBounds	336
+#define	tKnots	337
+#define	tColor	338
+#define	tGeneral	339
+#define	tGeometry	340
+#define	tMesh	341
+#define	tB_SPLINE_SURFACE_WITH_KNOTS	342
+#define	tB_SPLINE_CURVE_WITH_KNOTS	343
+#define	tCARTESIAN_POINT	344
+#define	tTRUE	345
+#define	tFALSE	346
+#define	tUNSPECIFIED	347
+#define	tU	348
+#define	tV	349
+#define	tEDGE_CURVE	350
+#define	tVERTEX_POINT	351
+#define	tORIENTED_EDGE	352
+#define	tPLANE	353
+#define	tFACE_OUTER_BOUND	354
+#define	tEDGE_LOOP	355
+#define	tADVANCED_FACE	356
+#define	tVECTOR	357
+#define	tDIRECTION	358
+#define	tAXIS2_PLACEMENT_3D	359
+#define	tISO	360
+#define	tENDISO	361
+#define	tENDSEC	362
+#define	tDATA	363
+#define	tHEADER	364
+#define	tFILE_DESCRIPTION	365
+#define	tFILE_SCHEMA	366
+#define	tFILE_NAME	367
+#define	tMANIFOLD_SOLID_BREP	368
+#define	tCLOSED_SHELL	369
+#define	tADVANCED_BREP_SHAPE_REPRESENTATION	370
+#define	tFACE_BOUND	371
+#define	tCYLINDRICAL_SURFACE	372
+#define	tCONICAL_SURFACE	373
+#define	tCIRCLE	374
+#define	tTRIMMED_CURVE	375
+#define	tGEOMETRIC_SET	376
+#define	tCOMPOSITE_CURVE_SEGMENT	377
+#define	tCONTINUOUS	378
+#define	tCOMPOSITE_CURVE	379
+#define	tTOROIDAL_SURFACE	380
+#define	tPRODUCT_DEFINITION	381
+#define	tPRODUCT_DEFINITION_SHAPE	382
+#define	tSHAPE_DEFINITION_REPRESENTATION	383
+#define	tELLIPSE	384
+#define	tTrimmed	385
+#define	tSolid	386
+#define	tEndSolid	387
+#define	tVertex	388
+#define	tFacet	389
+#define	tNormal	390
+#define	tOuter	391
+#define	tLoopSTL	392
+#define	tEndLoop	393
+#define	tEndFacet	394
+#define	UMINUS	395
 
 
 extern YYSTYPE yylval;
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index 47b0e6b6b1..b0e980d7fa 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1,4 +1,4 @@
-%{ /* $Id: Gmsh.y,v 1.6 2000-11-24 10:21:24 geuzaine Exp $ */
+%{ /* $Id: Gmsh.y,v 1.7 2000-11-25 15:26:11 geuzaine Exp $ */
 
 #include <stdarg.h>
 
@@ -15,28 +15,31 @@
 #include "Colors.h"
 #include "Parser.h"
 
-#ifdef __DECCXX
+#ifdef __DECCXX // bug in bison
 #include <alloca.h>
 #endif
 
-extern Mesh    *THEM;
-extern char    ThePathForIncludes[NAME_STR_L];
-
-FILE           *yyinTab[MAX_OPEN_FILES];
-int             yylinenoTab[MAX_OPEN_FILES];
-char            yynameTab[MAX_OPEN_FILES][NAME_STR_L];
-char            tmpstring[NAME_STR_L];
-Symbol          TheSymbol;
-Surface        *STL_Surf;
-Shape           TheShape;
-unsigned int    *ptr ;
-int             i,j,k,flag,RecursionLevel=0,Loop[4];
-double          d;
-ExtrudeParams   extr;
+int            Force_ViewNumber = 0 ;
 List_T         *Symbol_L;
-List_T         *ListOfDouble_L,*ListOfDouble2_L;
-List_T         *ListOfListOfDouble_L;
-StringXPointer *ColorField ;
+
+extern Mesh     *THEM;
+extern Post_View *ActualView;
+extern char      ThePathForIncludes[NAME_STR_L];
+
+static FILE          *yyinTab[MAX_OPEN_FILES];
+static int            yylinenoTab[MAX_OPEN_FILES];
+static char           yynameTab[MAX_OPEN_FILES][NAME_STR_L];
+static char           tmpstring[NAME_STR_L];
+static Symbol         TheSymbol;
+static Surface       *STL_Surf;
+static Shape          TheShape;
+static unsigned int  *ptr ;
+static int            i,j,k,flag,RecursionLevel=0;
+static double         d;
+static ExtrudeParams  extr;
+static StringXPointer *ColorField ;
+static List_T         *ListOfDouble_L,*ListOfDouble2_L;
+static List_T         *ListOfListOfDouble_L;
 
 void  yyerror (char *s);
 void  vyyerror (char *fmt, ...);
@@ -61,8 +64,8 @@ void  Get_ColorPointerForString(StringXPointer SXP[], char * string,
 
 %token tEND tAFFECT tDOTS tPi
 %token tExp tLog tLog10 tSqrt tSin tAsin tCos tAcos tTan
-%token    tAtan tAtan2 tSinh tCosh tTanh tFabs tFloor tCeil
-%token    tFmod tModulo tHypot
+%token tAtan tAtan2 tSinh tCosh tTanh tFabs tFloor tCeil
+%token tFmod tModulo tHypot
 %token tPoint tCircle tEllipsis tLine tSurface tSpline tVolume
 %token tCharacteristic tLength tParametric tElliptic
 %token tPlane tRuled tTransfinite tComplex tPhysical
@@ -70,7 +73,7 @@ void  Get_ColorPointerForString(StringXPointer SXP[], char * string,
 %token tRotate tTranslate tSymmetry tDilate tExtrude tDuplicata
 %token tLoop tInclude tRecombine tDelete tCoherence
 %token tView tOffset tAttractor tLayers
-%token tScalarSimplex tVectorSimplex tTensorSimplex
+%token tScalarTetrahedron tVectorTetrahedron tTensorTetrahedron
 %token tScalarTriangle tVectorTriangle tTensorTriangle
 %token tScalarLine tVectorLine tTensorLine
 %token tScalarPoint tVectorPoint tTensorPoint
@@ -91,10 +94,10 @@ void  Get_ColorPointerForString(StringXPointer SXP[], char * string,
 
 %token tSolid tEndSolid tVertex tFacet tNormal tOuter tLoopSTL tEndLoop tEndFacet
 
-%type <d> FExpr  FExpr_Single 
+%type <d> FExpr  FExpr_Single
 %type <v> VExpr RGBAExpr
-%type <l> ListOfDouble ListOfShapes Duplicata Transform MultipleShape ListOfListOfDouble
-%type <l> ListOfStrings
+%type <l> ListOfShapes Duplicata Transform MultipleShape
+%type <l> ListOfStrings ListOfDouble ListOfListOfDouble
 %type <s> Shape
 %type <i> BoolExpr
 
@@ -104,12 +107,14 @@ void  Get_ColorPointerForString(StringXPointer SXP[], char * string,
 %left UMINUS
 %right '^'
 
+%start All
+
 %%
 
 All : 
-    GeomFormatList
-  | StepFormatItems
+    StepFormatItems
   | STLFormatItem
+  | GeomFormatList
 ;
 
 /*  ----------------------------------------------------------------------
@@ -125,11 +130,11 @@ STLFormatItem :
       return 1;
     }
   | tFacet
-    tNormal tDOUBLE tDOUBLE tDOUBLE
+    tNormal FExpr FExpr FExpr
     tOuter tLoopSTL
-      tVertex tDOUBLE tDOUBLE tDOUBLE
-      tVertex tDOUBLE tDOUBLE tDOUBLE
-      tVertex tDOUBLE tDOUBLE tDOUBLE
+      tVertex FExpr FExpr FExpr
+      tVertex FExpr FExpr FExpr
+      tVertex FExpr FExpr FExpr
     tEndLoop
     tEndFacet
     {
@@ -355,11 +360,11 @@ GeomFormat :
 View :
     tView tBIGSTR '{' Views '}' tEND
     { 
-      EndView($2,0.,0.,0.); 
+      EndView(1, Force_ViewNumber,yyname,$2,0.,0.,0.); 
     }
   | tView tBIGSTR tOffset VExpr '{' Views '}' tEND
     {
-      EndView($2,$4[0],$4[1],$4[2]);
+      EndView(1, Force_ViewNumber,yyname,$2,$4[0],$4[1],$4[2]);
     }  
 ;
 
@@ -368,122 +373,295 @@ Views :
     {
       BeginView(1); 
     }
-  | Views ScalarSimplex
-  | Views VectorSimplex
-  | Views TensorSimplex
-  | Views ScalarTriangle
-  | Views VectorTriangle
-  | Views TensorTriangle
-  | Views ScalarLine
-  | Views VectorLine
-  | Views TensorLine
   | Views ScalarPoint
   | Views VectorPoint
   | Views TensorPoint
+  | Views ScalarLine
+  | Views VectorLine
+  | Views TensorLine
+  | Views ScalarTriangle
+  | Views VectorTriangle
+  | Views TensorTriangle
+  | Views ScalarTetrahedron
+  | Views VectorTetrahedron
+  | Views TensorTetrahedron
 ;
-		
-ScalarSimplex : 
-    tScalarSimplex '(' FExpr ',' FExpr ',' FExpr ',' 
-		       FExpr ',' FExpr ',' FExpr ','
-		       FExpr ',' FExpr ',' FExpr ',' 
-		       FExpr ',' FExpr ',' FExpr ')' ListOfDouble tEND
+
+ScalarPointValues :
+    FExpr
+    { List_Add(ActualView->SP, &$1) ; }
+  | ScalarPointValues ',' FExpr
+    { List_Add(ActualView->SP, &$3) ; }
+  ;
+
+ScalarPoint : 
+    tScalarPoint '(' FExpr ',' FExpr ',' FExpr ')'
+    { 
+      List_Add(ActualView->SP, &$3); List_Add(ActualView->SP, &$5);
+      List_Add(ActualView->SP, &$7);
+    }
+    '{' ScalarPointValues '}' tEND
     {
-      AddView_ScalarSimplex($3,$5,$7,$9,$11,$13,$15,$17,$19,$21,$23,$25,$27);
+      ActualView->NbSP++ ;
     }
 ;
 
-VectorSimplex : 
-    tVectorSimplex '(' FExpr ',' FExpr ',' FExpr ','
-		       FExpr ',' FExpr ',' FExpr ','
-		       FExpr ',' FExpr ',' FExpr ','
-		       FExpr ',' FExpr ',' FExpr ')' ListOfDouble tEND
+VectorPointValues :
+    FExpr
+    { List_Add(ActualView->VP, &$1) ; }
+  | VectorPointValues ',' FExpr
+    { List_Add(ActualView->VP, &$3) ; }
+  ;
+
+VectorPoint : 
+    tVectorPoint '(' FExpr ',' FExpr ',' FExpr ')' 
+    { 
+      List_Add(ActualView->VP, &$3); List_Add(ActualView->VP, &$5);
+      List_Add(ActualView->VP, &$7); 
+    }
+    '{' VectorPointValues '}' tEND
     {
-      AddView_VectorSimplex($3,$5,$7,$9,$11,$13,$15,$17,$19,$21,$23,$25,$27);
+      ActualView->NbVP++ ;
     }
 ;
 
-TensorSimplex :
-    tTensorSimplex '(' FExpr ',' FExpr ',' FExpr ',' 
-		       FExpr ',' FExpr ',' FExpr ','
-		       FExpr ',' FExpr ',' FExpr ','
-		       FExpr ',' FExpr ',' FExpr ')' ListOfDouble tEND
+TensorPointValues :
+    FExpr
+    { List_Add(ActualView->TP, &$1) ; }
+  | TensorPointValues ',' FExpr
+    { List_Add(ActualView->TP, &$3) ; }
+  ;
+
+TensorPoint :
+    tTensorPoint '(' FExpr ',' FExpr ',' FExpr ')' 
+    { 
+      List_Add(ActualView->TP, &$3); List_Add(ActualView->TP, &$5);
+      List_Add(ActualView->TP, &$7);
+    }
+    '{' TensorPointValues '}' tEND
     {
-      AddView_TensorSimplex($3,$5,$7,$9,$11,$13,$15,$17,$19,$21,$23,$25,$27);
-    }  
+      ActualView->NbTP++ ;
+    }
 ;
 
-ScalarTriangle :
-    tScalarTriangle '(' FExpr ',' FExpr ',' FExpr ','
-			FExpr ',' FExpr ',' FExpr ',' 
-			FExpr ',' FExpr ',' FExpr ')' ListOfDouble tEND
+ScalarLineValues :
+    FExpr
+    { List_Add(ActualView->SL, &$1) ; }
+  | ScalarLineValues ',' FExpr
+    { List_Add(ActualView->SL, &$3) ; }
+  ;
+
+ScalarLine : 
+    tScalarLine '(' FExpr ',' FExpr ',' FExpr ',' 
+                    FExpr ',' FExpr ',' FExpr ')' 
+    { 
+      List_Add(ActualView->SL, &$3); List_Add(ActualView->SL, &$9);
+      List_Add(ActualView->SL, &$5); List_Add(ActualView->SL, &$11);
+      List_Add(ActualView->SL, &$7); List_Add(ActualView->SL, &$13);
+    }
+    '{' ScalarLineValues '}' tEND
     {
-      AddView_ScalarTriangle($3,$5,$7,$9,$11,$13,$15,$17,$19,$21);
+      ActualView->NbSL++ ;
     }
 ;
 
-VectorTriangle :
-    tVectorTriangle '(' FExpr ',' FExpr ',' FExpr ','
-			FExpr ',' FExpr ',' FExpr ',' 
-			FExpr ',' FExpr ',' FExpr ')' ListOfDouble tEND
+VectorLineValues :
+    FExpr
+    { List_Add(ActualView->VL, &$1) ; }
+  | VectorLineValues ',' FExpr
+    { List_Add(ActualView->VL, &$3) ; }
+  ;
+
+VectorLine : 
+    tVectorLine '(' FExpr ',' FExpr ',' FExpr ',' 
+                    FExpr ',' FExpr ',' FExpr ')' 
+    { 
+      List_Add(ActualView->SL, &$3); List_Add(ActualView->SL, &$9);
+      List_Add(ActualView->SL, &$5); List_Add(ActualView->SL, &$11);
+      List_Add(ActualView->SL, &$7); List_Add(ActualView->SL, &$13);
+    }
+    '{' VectorLineValues '}' tEND
     {
-      AddView_VectorTriangle($3,$5,$7,$9,$11,$13,$15,$17,$19,$21);
-    }  
+      ActualView->NbVL++ ;
+    }
 ;
 
-TensorTriangle :
-    tTensorTriangle '(' FExpr ',' FExpr ',' FExpr ','
-			FExpr ',' FExpr ',' FExpr ','
-			FExpr ',' FExpr ',' FExpr ')' ListOfDouble tEND
+TensorLineValues :
+    FExpr
+    { List_Add(ActualView->TL, &$1) ; }
+  | TensorLineValues ',' FExpr
+    { List_Add(ActualView->TL, &$3) ; }
+  ;
+
+TensorLine :
+    tTensorLine '(' FExpr ',' FExpr ',' FExpr ',' 
+                    FExpr ',' FExpr ',' FExpr ')' 
+    { 
+      List_Add(ActualView->SL, &$3); List_Add(ActualView->SL, &$9);
+      List_Add(ActualView->SL, &$5); List_Add(ActualView->SL, &$11);
+      List_Add(ActualView->SL, &$7); List_Add(ActualView->SL, &$13);
+    }
+    '{' TensorLineValues '}' tEND
     {
-      AddView_TensorTriangle($3,$5,$7,$9,$11,$13,$15,$17,$19,$21);
+      ActualView->NbTL++ ;
     }
 ;
 
-ScalarLine :
-    tScalarLine '(' FExpr ',' FExpr ',' FExpr ','
-		    FExpr ',' FExpr ',' FExpr ')' ListOfDouble tEND
+ScalarTriangleValues :
+    FExpr
+    { List_Add(ActualView->ST, &$1) ; }
+  | ScalarTriangleValues ',' FExpr
+    { List_Add(ActualView->ST, &$3) ; }
+  ;
+
+ScalarTriangle : 
+    tScalarTriangle '(' FExpr ',' FExpr ',' FExpr ',' 
+                        FExpr ',' FExpr ',' FExpr ','
+                        FExpr ',' FExpr ',' FExpr ')' 
+    { 
+      List_Add(ActualView->ST, &$3); List_Add(ActualView->ST, &$9);
+      List_Add(ActualView->ST, &$15);
+      List_Add(ActualView->ST, &$5); List_Add(ActualView->ST, &$11);
+      List_Add(ActualView->ST, &$17);
+      List_Add(ActualView->ST, &$7); List_Add(ActualView->ST, &$13);
+      List_Add(ActualView->ST, &$19);
+    }
+    '{' ScalarTriangleValues '}' tEND
     {
-      AddView_ScalarLine($3,$5,$7,$9,$11,$13,$15);
-    }  
+      ActualView->NbST++ ;
+    }
 ;
 
-VectorLine :
-    tVectorLine '(' FExpr ',' FExpr ',' FExpr ','
-		    FExpr ',' FExpr ',' FExpr ')' ListOfDouble tEND
+VectorTriangleValues :
+    FExpr
+    { List_Add(ActualView->VT, &$1) ; }
+  | VectorTriangleValues ',' FExpr
+    { List_Add(ActualView->VT, &$3) ; }
+  ;
+
+VectorTriangle : 
+    tVectorTriangle '(' FExpr ',' FExpr ',' FExpr ',' 
+                        FExpr ',' FExpr ',' FExpr ','
+                        FExpr ',' FExpr ',' FExpr ')' 
+    { 
+      List_Add(ActualView->VT, &$3); List_Add(ActualView->VT, &$9);
+      List_Add(ActualView->VT, &$15);
+      List_Add(ActualView->VT, &$5); List_Add(ActualView->VT, &$11);
+      List_Add(ActualView->VT, &$17);
+      List_Add(ActualView->VT, &$7); List_Add(ActualView->VT, &$13);
+      List_Add(ActualView->VT, &$19);
+    }
+    '{' VectorTriangleValues '}' tEND
     {
-      AddView_VectorLine($3,$5,$7,$9,$11,$13,$15);
+      ActualView->NbVT++ ;
     }
 ;
 
-TensorLine : 
-    tTensorLine '(' FExpr ',' FExpr ',' FExpr ','
-		    FExpr ',' FExpr ',' FExpr ')' ListOfDouble tEND
+TensorTriangleValues :
+    FExpr
+    { List_Add(ActualView->TT, &$1) ; }
+  | TensorTriangleValues ',' FExpr
+    { List_Add(ActualView->TT, &$3) ; }
+  ;
+
+TensorTriangle :
+    tTensorTriangle '(' FExpr ',' FExpr ',' FExpr ',' 
+                        FExpr ',' FExpr ',' FExpr ','
+                        FExpr ',' FExpr ',' FExpr ')' 
+    { 
+      List_Add(ActualView->TT, &$3); List_Add(ActualView->TT, &$9);
+      List_Add(ActualView->TT, &$15);
+      List_Add(ActualView->TT, &$5); List_Add(ActualView->TT, &$11);
+      List_Add(ActualView->TT, &$17);
+      List_Add(ActualView->TT, &$7); List_Add(ActualView->TT, &$13);
+      List_Add(ActualView->TT, &$19);
+    }
+    '{' TensorTriangleValues '}' tEND
     {
-      AddView_TensorLine($3,$5,$7,$9,$11,$13,$15);
+      ActualView->NbTT++ ;
     }
 ;
 
-ScalarPoint : 
-    tScalarPoint '(' FExpr ',' FExpr ',' FExpr ')' ListOfDouble tEND
+ScalarTetrahedronValues :
+    FExpr
+    { List_Add(ActualView->SS, &$1) ; }
+  | ScalarTetrahedronValues ',' FExpr
+    { List_Add(ActualView->SS, &$3) ; }
+  ;
+
+ScalarTetrahedron : 
+    tScalarTetrahedron '(' FExpr ',' FExpr ',' FExpr ',' 
+                           FExpr ',' FExpr ',' FExpr ','
+                           FExpr ',' FExpr ',' FExpr ',' 
+                           FExpr ',' FExpr ',' FExpr ')' 
+    { 
+      List_Add(ActualView->SS, &$3);  List_Add(ActualView->SS, &$9);
+      List_Add(ActualView->SS, &$15); List_Add(ActualView->SS, &$21);
+      List_Add(ActualView->SS, &$5);  List_Add(ActualView->SS, &$11);
+      List_Add(ActualView->SS, &$17); List_Add(ActualView->SS, &$23);
+      List_Add(ActualView->SS, &$7);  List_Add(ActualView->SS, &$13);
+      List_Add(ActualView->SS, &$19); List_Add(ActualView->SS, &$25);
+    }
+    '{' ScalarTetrahedronValues '}' tEND
     {
-      AddView_ScalarPoint($3,$5,$7,$9);
-    }  
+      ActualView->NbSS++ ;
+    }
 ;
 
-VectorPoint : 
-    tVectorPoint '(' FExpr ',' FExpr ',' FExpr ')' ListOfDouble tEND
+VectorTetrahedronValues :
+    FExpr
+    { List_Add(ActualView->VS, &$1) ; }
+  | VectorTetrahedronValues ',' FExpr
+    { List_Add(ActualView->VS, &$3) ; }
+  ;
+
+VectorTetrahedron : 
+    tVectorTetrahedron '(' FExpr ',' FExpr ',' FExpr ',' 
+                           FExpr ',' FExpr ',' FExpr ','
+                           FExpr ',' FExpr ',' FExpr ',' 
+                           FExpr ',' FExpr ',' FExpr ')' 
+    { 
+      List_Add(ActualView->VS, &$3);  List_Add(ActualView->VS, &$9);
+      List_Add(ActualView->VS, &$15); List_Add(ActualView->VS, &$21);
+      List_Add(ActualView->VS, &$5);  List_Add(ActualView->VS, &$11);
+      List_Add(ActualView->VS, &$17); List_Add(ActualView->VS, &$23);
+      List_Add(ActualView->VS, &$7);  List_Add(ActualView->VS, &$13);
+      List_Add(ActualView->VS, &$19); List_Add(ActualView->VS, &$25);
+    }
+    '{' VectorTetrahedronValues '}' tEND
     {
-      AddView_VectorPoint($3,$5,$7,$9);
-    }  
+      ActualView->NbVS++ ;
+    }
 ;
 
-TensorPoint : 
-    tTensorPoint '(' FExpr ',' FExpr ',' FExpr ')' ListOfDouble tEND
+TensorTetrahedronValues :
+    FExpr
+    { List_Add(ActualView->TS, &$1) ; }
+  | TensorTetrahedronValues ',' FExpr
+    { List_Add(ActualView->TS, &$3) ; }
+  ;
+
+TensorTetrahedron :
+    tTensorTetrahedron '(' FExpr ',' FExpr ',' FExpr ',' 
+                           FExpr ',' FExpr ',' FExpr ','
+                           FExpr ',' FExpr ',' FExpr ',' 
+                           FExpr ',' FExpr ',' FExpr ')' 
+    { 
+      List_Add(ActualView->TS, &$3);  List_Add(ActualView->TS, &$9);
+      List_Add(ActualView->TS, &$15); List_Add(ActualView->TS, &$21);
+      List_Add(ActualView->TS, &$5);  List_Add(ActualView->TS, &$11);
+      List_Add(ActualView->TS, &$17); List_Add(ActualView->TS, &$23);
+      List_Add(ActualView->TS, &$7);  List_Add(ActualView->TS, &$13);
+      List_Add(ActualView->TS, &$19); List_Add(ActualView->TS, &$25);
+    }
+    '{' TensorTetrahedronValues '}' tEND
     {
-      AddView_TensorPoint($3,$5,$7,$9);
-    }  
+      ActualView->NbTS++ ;
+    }
 ;
 
+
+
 /* -----------------------
     A F F E C T A T I O N
    ----------------------- */
@@ -655,8 +833,10 @@ Shape :
       List_T *Temp;
       int i;
       double d;
-      if(List_Nbr($6) + (int)$10 + 1 != List_Nbr($8)){
-	yyerror("wrong nurbs curve definition (deg + 1 + nbpts != nbknots)");
+      if((int)$10 + 1 + List_Nbr($6) != List_Nbr($8)){
+	vyyerror("Wrong Definition of Nurbs Curve %d: "
+		"[Degree]%d + 1 + [NbPts]%d != [NbKnots]%d",
+		(int)$3, (int)$10, List_Nbr($6), List_Nbr($8));
       }
       Temp = List_Create(List_Nbr($6),1,sizeof(int));
       for(i=0;i<List_Nbr($6);i++) {
@@ -709,7 +889,9 @@ Shape :
 	else if(j==3)
 	  $$.Type  = MSH_SURF_TRIC;
 	else
-	  vyyerror("Ruled surface %d has not 3 or 4 borders", $4);
+	  vyyerror("Wrong Definition of Ruled Surface %d: "
+		   "%d Borders Instead of 3 or 4", 
+		   (int)$4, j);
 	Cdbz101((int)$4,$$.Type,0,0,0,0,0,NULL,$7,NULL);
 	$$.Num = (int)$4;
       }
@@ -745,7 +927,7 @@ Shape :
       $$.Num = (int)$3;
       Surface *s = FindSurface($$.Num,THEM);
       if(!s)
-	vyyerror("Unkown Surface %d", $$.Num);
+	vyyerror("Unknown Surface %d", $$.Num);
       else
 	$$.Type = s->Typ;
      }
@@ -873,7 +1055,7 @@ Macro :
 	yylineno = yylinenoTab[RecursionLevel];
       }
       else{
-	vyyerror("Unknown file: %s", $2) ;  
+	vyyerror("Unknown File '%s'", $2) ;  
 	yyin = yyinTab[--RecursionLevel];
       }
     }
@@ -1049,7 +1231,8 @@ Transfini :
 	s->Method = TRANSFINI;
 	k = List_Nbr($7);
 	if(k!=3 && k!=4){
-	  vyyerror("Bad Number of Points for Transfinite Surface %d", $4) ;
+	  vyyerror("Wrong Definition of Transfinite Surface %d: "
+		   "%d Points Instead of 3 or 4" , $4, k) ;
 	}
 	else{
 	  for(i=0;i<k;i++){
@@ -1069,7 +1252,8 @@ Transfini :
         s->Method = ELLIPTIC;
         k = List_Nbr($7);
         if(k != 4)
-          vyyerror("Bad Number of Points for Elliptic Surface %d", $4) ;
+	  vyyerror("Wrong Definition of Elliptic Surface %d: "
+		   "%d Points Instead of 4" , $4, k) ;
         else{
 	  for(i=0;i<k;i++){
 	    List_Read($7,i,&d);
@@ -1088,7 +1272,8 @@ Transfini :
 	v->Method = TRANSFINI;
 	k = List_Nbr($7);
 	if(k!=6 && k!=8)
-	  vyyerror("Bad Number of Points for Transfinite Volume %d", $4) ;
+	  vyyerror("Wrong Definition of Transfinite Volume %d: "
+		   "%d Points Instead of 6 or 8" , $4, k) ;
 	else{
 	  for(i=0;i<k;i++){
 	    List_Read($7,i,&d);
@@ -1128,10 +1313,6 @@ Transfini :
         }
       }
     }  
-  | tPhysical tAssociation '(' FExpr ')' tAFFECT ListOfDouble tEND
-    {
-      Msg(PARSER_ERROR, "Physical Associations do not exist anymore!");
-    }  
 ;
 
 
@@ -1180,20 +1361,20 @@ ColorAffect :
     tSTRING tAFFECT tSTRING tEND
     {
       i = Get_ColorForString(ColorString, -1, $3, &flag);
-      if(flag) vyyerror("Unknown Color: %s", $3);
+      if(flag) vyyerror("Unknown Color '%s'", $3);
       Get_ColorPointerForString(ColorField, $1, &flag, &ptr);
       if(flag)
-	vyyerror("Unknown Color Field: %s", $1);
+	vyyerror("Unknown Color Field '%s'", $1);
       else
 	*ptr = i ;
     }
   | tSTRING tAFFECT '{' tSTRING ',' FExpr '}' tEND
     {
       i = Get_ColorForString(ColorString, (int)$6, $4, &flag);
-      if(flag) vyyerror("Unknown Color: %s", $4);
+      if(flag) vyyerror("Unknown Color '%s'", $4);
       Get_ColorPointerForString(ColorField, $1, &flag, &ptr);
       if(flag)
-	vyyerror("Unknown Color Field: %s", $1);
+	vyyerror("Unknown Color Field '%s'", $1);
       else
 	*ptr = i ;
     }
@@ -1201,7 +1382,7 @@ ColorAffect :
     {
       Get_ColorPointerForString(ColorField, $1, &flag, &ptr);
       if(flag)
-	vyyerror("Unknown Color Field: %s", $3);
+	vyyerror("Unknown Color Field '%s'", $3);
       else
 	*ptr = PACK_COLOR((int)$3[0], (int)$3[1], (int)$3[2], (int)$3[3]);
     }
@@ -1338,7 +1519,7 @@ FExpr_Single :
     {
       TheSymbol.Name = $1 ;
       if (!List_Query(Symbol_L, &TheSymbol, CompareSymbols)) {
-	vyyerror("Unknown variable: %s", $1) ;  $$ = 0. ;
+	vyyerror("Unknown variable '%s'", $1) ;  $$ = 0. ;
       }
       else  $$ = TheSymbol.val ;
       Free($1);
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index 27d096a8a3..19c88baae5 100644
--- a/Parser/Gmsh.yy.cpp
+++ b/Parser/Gmsh.yy.cpp
@@ -2,7 +2,7 @@
 /* A lexical scanner generated by flex */
 
 /* Scanner skeleton version:
- * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.7 2000-11-24 10:58:06 geuzaine Exp $
+ * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.8 2000-11-25 15:26:11 geuzaine Exp $
  */
 
 #define FLEX_SCANNER
@@ -1135,7 +1135,7 @@ YY_MALLOC_DECL
 YY_DECL
 	{
 	register yy_state_type yy_current_state;
-	register char *yy_cp, *yy_bp;
+	register char *yy_cp = NULL, *yy_bp = NULL;
 	register int yy_act;
 
 #line 60 "Gmsh.l"
@@ -1652,17 +1652,17 @@ return tWith;
 case 86:
 YY_RULE_SETUP
 #line 172 "Gmsh.l"
-return tScalarSimplex;
+return tScalarTetrahedron;
 	YY_BREAK
 case 87:
 YY_RULE_SETUP
 #line 173 "Gmsh.l"
-return tVectorSimplex;
+return tVectorTetrahedron;
 	YY_BREAK
 case 88:
 YY_RULE_SETUP
 #line 174 "Gmsh.l"
-return tTensorSimplex;
+return tTensorTetrahedron;
 	YY_BREAK
 case 89:
 YY_RULE_SETUP
diff --git a/Parser/Makefile b/Parser/Makefile
index 10ad99f588..5e179e218b 100644
--- a/Parser/Makefile
+++ b/Parser/Makefile
@@ -1,3 +1,4 @@
+# $Id: Makefile,v 1.4 2000-11-25 15:26:11 geuzaine Exp $
 #
 # Makefile for "libParser.a"
 #
diff --git a/Unix/CbContext.cpp b/Unix/CbContext.cpp
index e65c53d16d..851c27c9e7 100644
--- a/Unix/CbContext.cpp
+++ b/Unix/CbContext.cpp
@@ -1,4 +1,4 @@
-/* $Id: CbContext.cpp,v 1.3 2000-11-23 23:20:35 geuzaine Exp $ */
+/* $Id: CbContext.cpp,v 1.4 2000-11-25 15:26:12 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -587,20 +587,17 @@ void NextContextCb (Widget w, XtPointer client_data, XtPointer call_data){
 }
 
 
-/* ------------------------------------------------------------------------ */
-/*  PostProcessing specific context changes                                 */
-/* ------------------------------------------------------------------------ */
+int AddViewInUI(int i, char *Name, int Num){
+  //char tmp[20];
 
-static int fcmpPostView(const void *v1, const void *v2){
-  return (((Post_View *)v1)->Num - ((Post_View *)v2)->Num);
-}
-
-int AddView(int i, char *Name, int dummy){
   if(i > NB_BUTT_MAX -1) return 1;
 
   txt_post[i-1] = (char*)Malloc(NAME_STR_L*sizeof(char));
   strncpy(txt_post[i-1],Name,NAME_STR_L);
 
+  //sprintf(tmp, " (%d)", Num);
+  //strncat(txt_post[i-1],tmp,NAME_STR_L);
+
   if(actual_global_context == CONTEXT_POST)
     ActualizeContextCb(NULL,(XtPointer)actual_global_context,NULL);
 
@@ -610,38 +607,22 @@ int AddView(int i, char *Name, int dummy){
 void RemoveViewCb(Widget w, XtPointer client_data, XtPointer call_data){
   Post_View      *v;
   int            i;
-
+  
   i = (long int)client_data ;
 
+  v = (Post_View*)List_Pointer(Post_ViewList,(long int)client_data-1);
+
   while(txt_post[i]){
     strncpy(txt_post[i-1], txt_post[i], NAME_STR_L);
     i++;
   }
+  Free(txt_post[i-1]);
   txt_post[i-1] = NULL;
 
-  v = (Post_View*)List_Pointer(Post_ViewList,(long int)client_data-1);
-
-  if(v->Allocated){
-
-    for(i=0 ; i<List_Nbr(v->Simplices) ; i++)    
-      Free(((Post_Simplex*)List_Pointer(v->Simplices, i))->V);
-    List_Delete(v->Simplices);
-    
-    for(i=0 ; i<List_Nbr(v->Triangles) ; i++)    
-      Free(((Post_Triangle*)List_Pointer(v->Triangles, i))->V);
-    List_Delete(v->Triangles);
-    
-    for(i=0 ; i<List_Nbr(v->Lines) ; i++)    
-      Free(((Post_Line*)List_Pointer(v->Lines, i))->V);
-    List_Delete(v->Lines);
-    
-    for(i=0 ; i<List_Nbr(v->Points) ; i++)
-      Free(((Post_Point*)List_Pointer(v->Points, i))->V);
-    List_Delete(v->Points);
-    
-  }
+  FreeView(v);
 
-  List_Suppress(Post_ViewList, v, fcmpPostView);
+  if(!List_Suppress(Post_ViewList, v, fcmpPostViewNum))
+    Msg(ERROR, "Could Not Suppress View from List");
 
   if(actual_global_context == CONTEXT_POST)
     ActualizeContextCb(NULL,(XtPointer)actual_global_context,NULL);  
diff --git a/Unix/CbGeneral.cpp b/Unix/CbGeneral.cpp
index 439e44fd06..ffd61fc653 100644
--- a/Unix/CbGeneral.cpp
+++ b/Unix/CbGeneral.cpp
@@ -1,4 +1,4 @@
-/* $Id: CbGeneral.cpp,v 1.2 2000-11-23 14:11:40 geuzaine Exp $ */
+/* $Id: CbGeneral.cpp,v 1.3 2000-11-25 15:26:12 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -109,7 +109,7 @@ void CurrentInfoCb (Widget w, XtPointer client_data, XtPointer call_data){
 	  s[16] += List_Nbr(v->Points);
 	  s[17] += List_Nbr(v->Lines);
 	  s[18] += List_Nbr(v->Triangles);
-	  s[19] += List_Nbr(v->Simplices);
+	  s[19] += List_Nbr(v->Tetrahedra);
 	}
       }
     }
diff --git a/Unix/CbGeom.cpp b/Unix/CbGeom.cpp
index 802444e19d..a44f331783 100644
--- a/Unix/CbGeom.cpp
+++ b/Unix/CbGeom.cpp
@@ -1,4 +1,4 @@
-/* $Id: CbGeom.cpp,v 1.3 2000-11-23 23:20:35 geuzaine Exp $ */
+/* $Id: CbGeom.cpp,v 1.4 2000-11-25 15:26:12 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -52,8 +52,8 @@ int SelectContour (int type, int num, List_T *Liste1){
   for(i=0;i<List_Nbr(Liste1);i++){
     List_Read(Liste1,i,&ip);
     switch(type){
-    case ENT_LINE    : highlight_entity_num(0,abs(ip),0,1); break ;
-    case ENT_SURFACE : highlight_entity_num(0,0,abs(ip),1); break ;
+    case ENT_LINE    : HighlightEntityNum(0,abs(ip),0,1); break ;
+    case ENT_SURFACE : HighlightEntityNum(0,0,abs(ip),1); break ;
     }
   }
 
diff --git a/Unix/CbInput.cpp b/Unix/CbInput.cpp
index fc8a1fa145..1282c5b20b 100644
--- a/Unix/CbInput.cpp
+++ b/Unix/CbInput.cpp
@@ -1,4 +1,4 @@
-/* $Id: CbInput.cpp,v 1.3 2000-11-23 23:20:35 geuzaine Exp $ */
+/* $Id: CbInput.cpp,v 1.4 2000-11-25 15:26:12 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -341,11 +341,11 @@ void KeyboardAccel(XEvent *event){
 /*  I n p u t                                                               */
 /* ------------------------------------------------------------------------ */
 
-void myZoom(GLdouble x1, GLdouble x2, GLdouble y1, GLdouble y2,
-	    GLdouble xc1, GLdouble xc2, GLdouble yc1, GLdouble yc2);
-void process_selection(int x, int y, int *n, GLuint *ii, GLuint *jj);
-void filtre_selection(int n, GLuint *typ, GLuint *ient, Vertex **thev,
-		      Curve **thec, Surface **thes, Mesh *m);
+void Process_SelectionBuffer(int x, int y, int *n, GLuint *ii, GLuint *jj);
+void Filter_SelectionBuffer(int n, GLuint *typ, GLuint *ient, Vertex **thev,
+			    Curve **thec, Surface **thes, Mesh *m);
+void myZoom(GLdouble X1, GLdouble X2, GLdouble Y1, GLdouble Y2,
+	    GLdouble Xc1, GLdouble Xc2, GLdouble Yc1, GLdouble Yc2);
 
 void InputCb (Widget w, XtPointer client_data, GLwDrawingAreaCallbackStruct *cb){
   XEvent         *event;
@@ -661,10 +661,10 @@ void InputCb (Widget w, XtPointer client_data, GLwDrawingAreaCallbackStruct *cb)
 	CTX.post.draw = previous_post_draw ;
       }
       else{
-	process_selection(event->xbutton.x, event->xbutton.y, &hits, ii, jj);
+	Process_SelectionBuffer(event->xbutton.x, event->xbutton.y, &hits, ii, jj);
 	ov = v; oc = c; os = s;	
 	v = NULL; c = NULL; s = NULL;
-	filtre_selection(hits,ii,jj,&v,&c,&s,&M);
+	Filter_SelectionBuffer(hits,ii,jj,&v,&c,&s,&M);
 
 	if(CTX.overlay){
 	  glXMakeCurrent(XtDisplay(WID.G.glo), XtWindow(WID.G.glo), XCTX.glo.context);
@@ -672,9 +672,9 @@ void InputCb (Widget w, XtPointer client_data, GLwDrawingAreaCallbackStruct *cb)
 	    glClearIndex(0);
 	    glClear(GL_COLOR_BUFFER_BIT);  
 	    glIndexi((CTX.color.bg<CTX.color.fg)?XCTX.xcolor.ovwhite:XCTX.xcolor.ovblack);
-	    begin_highlight();
-	    highlight_entity(v,c,s,0);
-	    end_highlight(0);
+	    BeginHighlight();
+	    HighlightEntity(v,c,s,0);
+	    EndHighlight(0);
 	  }
 	  glXMakeCurrent(XtDisplay(WID.G.glw), XtWindow(WID.G.glw), XCTX.glw.context);
 	}
@@ -684,9 +684,9 @@ void InputCb (Widget w, XtPointer client_data, GLwDrawingAreaCallbackStruct *cb)
 	      Init();
 	      Draw();
 	    }
-	    begin_highlight();
-	    highlight_entity(v,c,s,0);
-	    end_highlight(0);
+	    BeginHighlight();
+	    HighlightEntity(v,c,s,0);
+	    EndHighlight(0);
 	  }
 	}
       }
diff --git a/Unix/CbPost.cpp b/Unix/CbPost.cpp
index e890de3b84..be96fe558d 100644
--- a/Unix/CbPost.cpp
+++ b/Unix/CbPost.cpp
@@ -1,4 +1,4 @@
-/* $Id: CbPost.cpp,v 1.3 2000-11-23 23:20:35 geuzaine Exp $ */
+/* $Id: CbPost.cpp,v 1.4 2000-11-25 15:26:12 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -17,7 +17,6 @@
 #include "CbMesh.h"
 #include "CbColorbar.h"
 
-
 extern Widgets_T  WID ;
 extern Context_T  CTX ;
 extern XContext_T XCTX ;
@@ -25,7 +24,7 @@ extern Mesh       *THEM;
 extern int         TYPBGMESH;
 extern int         LC_ORDER;
 extern List_T     *Post_ViewList;
-
+extern int         Force_ViewNumber;
 
 static double      ADAPTATION_ERROR=10. ;
 static int         ADAPTATION_METHOD=3 ;
@@ -34,10 +33,6 @@ static Post_View  *CurrentView = NULL;
 static long int    CurrentViewNumber = -1;
 static Post_View  *ViewForDialog[10];
 
-/* ------------------------------------------------------------------------ 
-   set view visible or not
-   ------------------------------------------------------------------------ */
-
 void MarkAllViewsChanged (int action){
   int i;
   char label[256];
@@ -90,44 +85,83 @@ void SwapViewCb (Widget w, XtPointer client_data, XtPointer call_data){
   if(!Post_ViewList) return;
 
   v = (Post_View*)List_Pointer(Post_ViewList,(long int)client_data-1);
+
+  Msg(DEBUG,    "View %d\n"
+      DEBUG_NIL "  -> Name '%s'\n"
+      DEBUG_NIL "  -> FileName '%s'\n"
+      DEBUG_NIL "  -> DuplicateOf %d\n"
+      DEBUG_NIL "  -> Links %d",
+      v->Num, v->Name, v->FileName, v->DuplicateOf, v->Links);
+
   v->Visible = !v->Visible;
 
   Init();
   Draw();
 }
 
+
+
 void DuplicateViewCb (Widget w, XtPointer client_data, XtPointer call_data){
-  Post_View  *v1, *v2 ;
+  Post_View  v, *v1, *v2, *v3 ;
+  extern void AddViewInUI(int , char *, int);
 
   if(!Post_ViewList) return;
 
   v1 = (Post_View*)List_Pointer(Post_ViewList,(long int)client_data-1);
 
   BeginView(0);
-  EndView(v1->Name, 0., 0., 0.);
-
-  /* Trash: interdit de desallouer cette view-ci car il existe un duplicata qque part.
-     A changer : garder le num du duplicata et desallouer si ce duplicata n'existe plus, 
-     etc, etc...  */
-  v1->Allocated = 0 ;
+  EndView(0, 0, v1->FileName, v1->Name, 0., 0., 0.);
 
   v2 = (Post_View*)List_Pointer(Post_ViewList,List_Nbr(Post_ViewList)-1);
 
-  v2->Simplices  = v1->Simplices;
-  v2->Triangles  = v1->Triangles;
-  v2->Lines      = v1->Lines;
-  v2->Points     = v1->Points;
-  v2->ScalarOnly = v1->ScalarOnly;
-  v2->Min        = v1->Min;       
-  v2->Max        = v1->Max;      
-  v2->NbTimeStep = v1->NbTimeStep;
-  v2->CustomMin  = v1->CustomMin; 
-  v2->CustomMax  = v1->CustomMax; 
+  if(!v1->DuplicateOf){
+    v2->DuplicateOf = v1->Num ;
+    v1->Links++ ;
+  }
+  else{
+    v.Num = v1->DuplicateOf ;
+    if(!(v3 = (Post_View*)List_PQuery(Post_ViewList, &v, fcmpPostViewNum))){
+      v2->DuplicateOf = v1->Num ;
+      v1->Links++ ;
+    }
+    else{
+      v2->DuplicateOf = v3->Num;
+      v3->Links++ ;
+    }
+  }
+
+  v2->Points      = v1->Points;
+  v2->Lines       = v1->Lines;
+  v2->Triangles   = v1->Triangles;
+  v2->Tetrahedra  = v1->Tetrahedra;
+  v2->ScalarOnly  = v1->ScalarOnly;
+  v2->Min         = v1->Min;       
+  v2->Max         = v1->Max;      
+  v2->NbTimeStep  = v1->NbTimeStep;
 
+  AddViewInUI(List_Nbr(Post_ViewList), v2->Name, v2->Num);
   Init();
   Draw();
 }
 
+void ReloadViewCb (Widget w, XtPointer client_data, XtPointer call_data){
+  Post_View  *v ;
+  char filename[NAME_STR_L];
+
+  if(!Post_ViewList) return;
+
+  v = (Post_View*)List_Pointer(Post_ViewList,(long int)client_data-1);
+  strcpy(filename, v->FileName);
+  Force_ViewNumber = v->Num ;
+  FreeView(v);
+  MergeProblem(filename);
+  Force_ViewNumber = 0 ;
+  
+  Init();
+  Draw();
+}
+
+
 void SaveColorTable(FILE *fp){
   if(!CurrentView){
     Msg(WARNING, "No View to get Color Information From"); 
diff --git a/Unix/Help.h b/Unix/Help.h
index c9a04753f6..9749968944 100644
--- a/Unix/Help.h
+++ b/Unix/Help.h
@@ -1,4 +1,4 @@
-/* $Id: Help.h,v 1.2 2000-11-23 14:11:41 geuzaine Exp $ */
+/* $Id: Help.h,v 1.3 2000-11-25 15:26:12 geuzaine Exp $ */
 #ifndef _HELP_H_
 #define _HELP_H_
 
@@ -55,7 +55,7 @@ static char txt_help[]=
 "Shift modifier: popup option menus\n"
 "\n"
 "  (S-g)       hide/show geometry options\n"
-"  (S-i)       hide/show info window\n" 
+"  (S-i)       hide/show statistics window\n" 
 "  (S-m)       hide/show mesh options\n"
 "  (S-o)       hide/show miscellaneous options\n" 
 "  (S-p)       hide/show post processor general options\n"
diff --git a/Unix/Main.cpp b/Unix/Main.cpp
index 3f4e4e50bc..c0483a0f0f 100644
--- a/Unix/Main.cpp
+++ b/Unix/Main.cpp
@@ -1,4 +1,4 @@
-/* $Id: Main.cpp,v 1.11 2000-11-24 12:57:25 geuzaine Exp $ */
+/* $Id: Main.cpp,v 1.12 2000-11-25 15:26:12 geuzaine Exp $ */
 
 #include <signal.h>
 
@@ -42,33 +42,35 @@ char gmsh_url[]       = "URL              : " GMSH_URL ;
 char gmsh_help[]      = 
   "Usage: %s [options] [files]\n"
   "Geometry options:\n"
-  "  -0                    output flattened parsed geometry\n"
+  "  -0                    output flattened parsed geometry and exit\n"
   "Mesh options:\n"
-  "  -1, -2, -3            batch 1-, 2- or 3-dimensional mesh\n"
-  "  -format msh|unv|gref  output format (default: msh)\n"
-  "  -algo iso|aniso       mesh algorithm (default: iso)\n"
-  "  -smooth int           mesh smoothing (default: 0)\n"
-  "  -degree int           mesh degree (default: 1)\n"
-  "  -scale float          scaling factor (default: 1.0)\n"
+  "  -1, -2, -3            perform batch 1D, 2D and 3D mesh generation\n"
+  "  -format msh|unv|gref  set output mesh format (default: msh)\n"
+  "  -algo iso|aniso       select mesh algorithm (default: iso)\n"
+  "  -smooth int           set mesh smoothing (default: 0)\n"
+  "  -degree int           set mesh degree (default: 1)\n"
+  "  -scale float          set global scaling factor (default: 1.0)\n"
+  "  -clscale float        set characteristic length scaling factor (default: 1.0)\n"
   "  -bgm file             load backround mesh from file\n"
-  "  -interactive          display the mesh construction\n"
+  "  -interactive          display 2D mesh construction interactively\n"
   "Post Processing options:\n"
   "  -dl                   enable display lists\n"
   "  -noview               hide all views at startup\n"
+  "  -link                 link all views at startup\n"
   "Display options:\n"	  
-  "  -nodb                 no double buffer\n"
-  "  -noov                 no overlay visual\n"
+  "  -nodb                 disable double buffering\n"
+  "  -noov                 disable overlay visual\n"
   "  -alpha                enable alpha blending\n"
   "  -geometry geom        specify main window geometry\n"
   "  -viewport 9*float     specify rotation, translation and scale\n"
   "  -display disp         specify display\n"
-  "  -perspective          perspective instead of orthographic projection\n"
+  "  -perspective          set projection mode to perspective\n"
   "  -flash                allow colormap flashing\n"
-  "  -samevisual           force same visual for OpenGL and GUI\n"
+  "  -samevisual           force same visual for graphics and UI\n"
   "Other options:\n"	  
   "  -v int                set verbosity level (default: 2)\n"
   "  -threads              enable threads\n"
-  "  -path string          path for included files\n"
+  "  -path string          set path for included files\n"
   "  -version              show version number\n"
   "  -info                 show detailed version information\n"
   "  -help                 show this message\n"
@@ -77,6 +79,8 @@ char gmsh_help[]      =
 char *TheFileNameTab[MAX_OPEN_FILES], *TheBgmFileName=NULL;
 char  ThePathForIncludes[NAME_STR_L];
 
+extern List_T *Post_ViewList;
+
 /* ------------------------------------------------------------------------ */
 /*  P a r s e                                                               */
 /* ------------------------------------------------------------------------ */
@@ -164,9 +168,10 @@ void OpenProblem(char *name){
 
   ParseFile(TheFileName);  
 
+  ApplyLcFactor(THEM);
   mai3d(THEM,0);  
-  
   Maillage_Dimension_0(&M);
+
   ZeroHighlight(&M); 
   CalculateMinMax(THEM->Points);  
   if (!EntitesVisibles) {
@@ -228,17 +233,21 @@ void Get_Options (int argc, char *argv[], int *nbfiles) {
       else if(!strcmp(argv[i]+1, "samevisual")){ 
 	CTX.same_visual = 1; i++;
       }
-      else if(!strcmp(argv[i]+1, "factor")){
-	i++;
-	FACTEUR_MULTIPLICATIF = atof(argv[i]); i++;
-      }
       else if(!strcmp(argv[i]+1, "interactive")){ 
 	CTX.mesh.interactive = 1; i++;
       }
-      else if(!strcmp(argv[i]+1, "scale") ||
-	      !strcmp(argv[i]+1, "scaling")){
+      else if(!strcmp(argv[i]+1, "scale")){
 	i++;
-	GLOBALSCALINGFACTOR = atof(argv[i]); i++;
+	CTX.mesh.scaling_factor = atof(argv[i]); i++;
+      }
+      else if(!strcmp(argv[i]+1, "clscale")){
+	i++;
+	CTX.mesh.lc_factor = atof(argv[i]); i++;
+	if(CTX.mesh.lc_factor <= 0.0){
+	  fprintf(stderr, ERROR_STR 
+		  "Characteristic Length Factor Must be > 0\n");
+	  exit(1);
+	}
       }
       else if(!strcmp(argv[i]+1, "raw")){ 
 	CTX.mesh.nb_smoothing = 0; i++;
@@ -312,6 +321,9 @@ void Get_Options (int argc, char *argv[], int *nbfiles) {
       else if(!strcmp(argv[i]+1, "noview")){ 
 	CTX.post.initial_visibility = 0 ; i++;
       }
+      else if(!strcmp(argv[i]+1, "link")){ 
+	CTX.post.link = 2 ; i++;
+      }
       else if(!strcmp(argv[i]+1, "fill")){ 
 	CTX.post.initial_intervals = DRAW_POST_DISCRETE ; i++;
       }
diff --git a/Unix/Makefile b/Unix/Makefile
index 8ba6e298f6..cf620387b4 100644
--- a/Unix/Makefile
+++ b/Unix/Makefile
@@ -1,3 +1,4 @@
+# $Id: Makefile,v 1.3 2000-11-25 15:26:12 geuzaine Exp $
 #
 # Makefile for "libUnix.a"
 #
diff --git a/Unix/Register.cpp b/Unix/Register.cpp
index dbc739f910..d11281efc0 100644
--- a/Unix/Register.cpp
+++ b/Unix/Register.cpp
@@ -1,4 +1,4 @@
-/* $Id: Register.cpp,v 1.6 2000-11-24 12:50:06 geuzaine Exp $ */
+/* $Id: Register.cpp,v 1.7 2000-11-25 15:26:12 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -56,6 +56,7 @@ void RegisterCallbacks_M(Widgets_T *w){
     register_activate_cb (w->M.pushButt[n],   NextContextCb, n+1);
     register_valchg_cb   (w->M.toggleButt[n], SwapViewCb, n+1);
     register_popup_ev    (w->M.toggleButt[n], w->M.popMenu[n]);
+    register_activate_cb (w->M.reloadButt[n], ReloadViewCb, n+1);
     register_activate_cb (w->M.removeButt[n], RemoveViewCb, n+1);
     register_activate_cb (w->M.duplicateButt[n], DuplicateViewCb, n+1);
 
diff --git a/Unix/Register.h b/Unix/Register.h
index 0e06801c96..7e81704c4c 100644
--- a/Unix/Register.h
+++ b/Unix/Register.h
@@ -1,4 +1,4 @@
-/* $Id: Register.h,v 1.2 2000-11-23 14:11:41 geuzaine Exp $ */
+/* $Id: Register.h,v 1.3 2000-11-25 15:26:12 geuzaine Exp $ */
 #ifndef _REGISTER_H_
 #define _REGISTER_H_
 
@@ -31,6 +31,7 @@ void CurrentViewCb      (Widget w, XtPointer client_data, XtPointer call_data);
 void SwapViewCb         (Widget w, XtPointer client_data, XtPointer call_data);
 void RemoveViewCb       (Widget w, XtPointer client_data, XtPointer call_data);
 void DuplicateViewCb    (Widget w, XtPointer client_data, XtPointer call_data);
+void ReloadViewCb       (Widget w, XtPointer client_data, XtPointer call_data);
 
 void OptionsCb          (Widget w, XtPointer client_data, XtPointer call_data);
 void FileCb             (Widget w, XtPointer client_data, XtPointer call_data);
diff --git a/Unix/Widgets.cpp b/Unix/Widgets.cpp
index 07f148e324..656a96eaed 100644
--- a/Unix/Widgets.cpp
+++ b/Unix/Widgets.cpp
@@ -1,4 +1,4 @@
-/* $Id: Widgets.cpp,v 1.8 2000-11-24 17:14:27 geuzaine Exp $ */
+/* $Id: Widgets.cpp,v 1.9 2000-11-25 15:26:12 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -196,7 +196,7 @@ void CreateWidgets_M(Widgets_T *w){
   XtManageChild(w->M.optionButt[4]);
 
   i=0;
-  XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Current Info")); i++;
+  XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Statistics")); i++;
   XtSetArg(arg[i], XmNacceleratorText, XmStringCreateSimple("(S-i)")); i++;
   XtSetArg(arg[i], XmNaccelerator, "Shift<Key>i:"); i++;
   w->M.optionButt[5] = XmCreatePushButton(w->M.optionPane, "MoptionButt5", arg, i);
@@ -307,6 +307,11 @@ void CreateWidgets_M(Widgets_T *w){
     w->M.popMenu[n] = XmCreatePopupMenu(w->M.toggleButt[n], "MpopMenun", arg, i);
     XtUnmanageChild(w->M.popMenu[n]);
 
+    i=0;
+    XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Reload")); i++;
+    w->M.reloadButt[n] = XmCreatePushButton(w->M.popMenu[n], "MreloadButtn", arg, i);
+    XtManageChild(w->M.reloadButt[n]);
+
     i=0;
     XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Remove")); i++;
     w->M.removeButt[n] = XmCreatePushButton(w->M.popMenu[n], "MremoveButtn", arg, i);
@@ -1610,7 +1615,7 @@ void CreateWidgets_OD(Widgets_T *w){
   /* Info */
 
   i=0;
-  XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Info")); i++;
+  XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Statistics")); i++;
   XtSetArg(arg[i], XmNokLabelString, XmStringCreateSimple("Update")); i++;
   XtSetArg(arg[i], XmNcancelLabelString, XmStringCreateSimple("Cancel")); i++;
   XtSetArg(arg[i], XmNautoUnmanage, False); i++;
diff --git a/Unix/Widgets.h b/Unix/Widgets.h
index d50b7f0a5d..cfc2bdf882 100644
--- a/Unix/Widgets.h
+++ b/Unix/Widgets.h
@@ -1,4 +1,4 @@
-/* $Id: Widgets.h,v 1.3 2000-11-23 23:20:35 geuzaine Exp $ */
+/* $Id: Widgets.h,v 1.4 2000-11-25 15:26:12 geuzaine Exp $ */
 #ifndef _WIDGETS_H_
 #define _WIDGETS_H_
 
@@ -40,6 +40,7 @@ typedef struct {
     Widget     vectorButt   [NB_BUTT_MAX] ;
     Widget     exportBGMButt[NB_BUTT_MAX] ;
     Widget     applyBGMButt [NB_BUTT_MAX] ;
+    Widget     reloadButt   [NB_BUTT_MAX] ;
     Widget     removeButt   [NB_BUTT_MAX] ;
     Widget     duplicateButt[NB_BUTT_MAX] ;
   } M;
diff --git a/Unix/XRessources.h b/Unix/XRessources.h
index d39744d663..a1c957237e 100644
--- a/Unix/XRessources.h
+++ b/Unix/XRessources.h
@@ -1,4 +1,4 @@
-/* $Id: XRessources.h,v 1.2 2000-11-23 14:11:41 geuzaine Exp $ */
+/* $Id: XRessources.h,v 1.3 2000-11-25 15:26:12 geuzaine Exp $ */
 
 /* 
    Les resources ci-dessous sont prises en compte par defaut. Toutre 
@@ -56,7 +56,7 @@ String FallbackResources[] = {
 
   /* geometrie */
   "gmshGW*geometry: 700x525+20+30",
-  "gmshMW*geometry: x405+800+90",
+  "gmshMW*geometry: x420+800+80",
   "gmshCW*geometry: 440x130+30+570",
 
   /* sizes -> compact layout */
diff --git a/archives/Makefile b/archives/Makefile
index 418e1ce085..67980b35b0 100644
--- a/archives/Makefile
+++ b/archives/Makefile
@@ -1,3 +1,4 @@
+# $Id: Makefile,v 1.2 2000-11-25 15:26:12 geuzaine Exp $
 
 purge:
 	$(RM) $(RMFLAGS) *~
diff --git a/demos/view01.pos b/demos/view01.pos
index 8181fcc14e..69114aaf19 100644
--- a/demos/view01.pos
+++ b/demos/view01.pos
@@ -31,16 +31,6 @@
    vector tetrahedron  VS                12                     12 * nb time steps
    tensor tetrahedron  TS                12                     36 * nb time steps
 
-
-   The coordinates are given "by node", that is (x,y,z) for a point, (x1,y1,z1,x2,y2,z2)
-   for a line, (x1,y1,z1,x2,y2,z2,x3,y3,z3) for a triangle, ...
- 
-   The values are given by timestep, by node and by component. That is, for a vector line,
-   {valxnode1time1,valynode1time1,valznode1time1, valxnode2time1,valynode2time1,valznode2time1,
-    valxnode1time2,valynode1time2,valznode1time2, valxnode2time2,valynode2time2,valznode2time2, ...}
-
-   A post-processing view is loaded in Gmsh with File->Merge. Up to 20 views can be loaded
-   simultaneously. All post-processing options are accessed by clicking on the right mouse
    button on the view button (in post-processing mode: Mod->Post-Processing).
 
 */
diff --git a/doc/Makefile b/doc/Makefile
index fb1391cf84..28f91ec995 100644
--- a/doc/Makefile
+++ b/doc/Makefile
@@ -1,3 +1,4 @@
+# $Id: Makefile,v 1.2 2000-11-25 15:26:12 geuzaine Exp $
 
 RM      = rm
 RMFLAGS = -f
diff --git a/lib/Makefile b/lib/Makefile
index af57c45104..63144f4277 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -1,3 +1,4 @@
+# $Id: Makefile,v 1.3 2000-11-25 15:26:12 geuzaine Exp $
 
 RM        = rm
 RMFLAGS   = -f
diff --git a/utils/Makefile b/utils/Makefile
index ef5b3ac5ec..d48b619708 100644
--- a/utils/Makefile
+++ b/utils/Makefile
@@ -1,4 +1,5 @@
-# $Id: Makefile,v 1.1.1.1 2000-11-23 09:22:48 geuzaine Exp $
+# $Id: Makefile,v 1.2 2000-11-25 15:26:12 geuzaine Exp $
+# $Id: Makefile,v 1.2 2000-11-25 15:26:12 geuzaine Exp $
 
 CC       = c++
 C_FLAGS  = -g
diff --git a/utils/addId b/utils/addId
new file mode 100644
index 0000000000..c23389c525
--- /dev/null
+++ b/utils/addId
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+if [ $# -lt 1 ] ; then
+  echo "Usage: addId files" 1>&2
+  exit 1
+else 
+#  echo "/* \$Id\$ */" > _tmp_string_
+  echo "# \$Id\$" > _tmp_string_
+#  echo "c \$Id\$" > _tmp_string_
+
+  for file in $@; do
+    echo Modifying $file
+    mv $file $file~
+    cat _tmp_string_ $file~ > $file
+  done
+
+  rm -f _tmp_string_
+fi
+
+
-- 
GitLab