diff --git a/Geo/GEdge.h b/Geo/GEdge.h
index 9bfddfd5783b83206c6dadb5df24115df27d83d2..2bab3d6e35b1c884a9d2a572d3cc3759d8ab8cf2 100644
--- a/Geo/GEdge.h
+++ b/Geo/GEdge.h
@@ -121,7 +121,9 @@ class GEdge : public GEntity {
   // true if start == end and no more than 2 segments
   void setTooSmall(bool b) { _tooSmall = b; }
   bool isMeshDegenerated() const 
-  { return _tooSmall || (v0 == v1 && mesh_vertices.size() < 2); }
+  { if (_tooSmall) printf("too small \n");
+    if (v0 == v1 && mesh_vertices.size() < 2) printf("mesh_vertices.size() =%d \n", mesh_vertices.size());
+    return _tooSmall || (v0 == v1 && mesh_vertices.size() < 2); }
 
   // number of types of elements
   int getNumElementTypes() const { return 1; }
diff --git a/Geo/GFaceCompound.cpp b/Geo/GFaceCompound.cpp
index d4cdaeb0be59be90b1968a6732fbfc8ce89dbc3b..3e61adc6e427722d1f4b69c0100e76b8d3139a68 100644
--- a/Geo/GFaceCompound.cpp
+++ b/Geo/GFaceCompound.cpp
@@ -385,8 +385,6 @@ bool GFaceCompound::checkFolding(std::vector<MVertex*> &ordered) const
 bool GFaceCompound::checkOrientation(int iter) const
 {
  
-  return true;
-
   //Only check orientation for stl files (1 patch)
   //  if(_compound.size() > 1.0) return true;
 
@@ -404,8 +402,11 @@ bool GFaceCompound::checkOrientation(int iter) const
       double p1[2] = {v2[0],v2[1]};
       double p2[2] = {v3[0],v3[1]};
       a_new = robustPredicates::orient2d(p0, p1, p2);
-      if(count == 0) a_old=a_new;   
-      if(a_new*a_old < 0.){
+      if(count == 0) a_old=a_new;
+      double nnew = 1.0, nold = 1.0;
+      if (a_new != 0.0) nnew = std::abs(a_new);
+      if (a_old != 0.0) nold = std::abs(a_old);
+      if(a_new/nnew*a_old/nold < 0.0){
         oriented = false;
         break;
       }
@@ -416,14 +417,14 @@ bool GFaceCompound::checkOrientation(int iter) const
     }    
   }  
 
-  int iterMax = 5;
+  int iterMax = 10;
   if(!oriented && iter < iterMax){
     if (iter == 0) Msg::Warning("--- Parametrization is NOT 1 to 1 : applying cavity checks.");
     Msg::Debug("--- Cavity Check - iter %d -",iter);
     one2OneMap();
     return checkOrientation(iter+1);
   }
-  else if (iter < iterMax){
+  else if (oriented && iter < iterMax){
     Msg::Debug("Parametrization is 1 to 1 :-)");
   }
 
@@ -510,8 +511,8 @@ bool GFaceCompound::parametrize() const
   else if (_mapping == CONFORMAL){
     Msg::Debug("Parametrizing surface %d with 'conformal map'", tag());
     fillNeumannBCS();
-    bool withoutFolding = parametrize_conformal_spectral() ;
-    //bool withoutFolding = parametrize_conformal();
+    //bool withoutFolding = parametrize_conformal_spectral() ;
+    bool withoutFolding = parametrize_conformal();
     if ( withoutFolding == false ){
       //printStuff(); exit(1);
       Msg::Warning("$$$ Parametrization switched to harmonic map");
@@ -519,13 +520,10 @@ bool GFaceCompound::parametrize() const
       parametrize(ITERV,HARMONIC);
     }
   }
-  //Distance function
-  //-----------------
-  //compute_distance();
-
-  buildOct();  
 
   printStuff();
+ 
+  buildOct();  
 
   if (!checkOrientation(0)){
     Msg::Info("--- Parametrization switched to convex combination map");
@@ -598,8 +596,8 @@ void GFaceCompound::getBoundingEdges()
          _U0 = *it;
          maxSize = size;
        }
-     }
-      
+   }
+
   }
 
   return;
@@ -962,7 +960,7 @@ SPoint2 GFaceCompound::getCoordinates(MVertex *v) const
           Msg::Error("vertex vr %p not MedgeVertex \n", vR);
           Msg::Exit(1);
         }
-        if(tLoc >= tL && tLoc <= tR){
+        if(tLoc > tL && tLoc < tR){
           found = true;
           itR = coordinates.find(vR);
           if(itR == coordinates.end()){
@@ -1342,60 +1340,6 @@ bool GFaceCompound::parametrize_conformal() const
 
 }
 
-void GFaceCompound::compute_distance() const
-{
-  SBoundingBox3d bbox = bounds();
-  double L = norm(SVector3(bbox.max(), bbox.min())); 
-  double mu = L/28;
-  simpleFunction<double> DIFF(mu * mu), MONE(1.0);
-  dofManager<double> myAssembler(_lsys);
-  distanceTerm distance(model(), 1, &DIFF, &MONE);
-
-  std::vector<MVertex*> ordered;
-  boundVertices(_U0, ordered);
-  for(unsigned int i = 0; i < ordered.size(); i++)
-     myAssembler.fixVertex(ordered[i], 0, 1, 0.0);
-
-  std::list<GFace*>::const_iterator it = _compound.begin();
-  for( ; it != _compound.end(); ++it){
-    for(unsigned int i = 0; i < (*it)->triangles.size(); ++i){
-      MTriangle *t = (*it)->triangles[i];
-      myAssembler.numberVertex(t->getVertex(0), 0, 1);
-      myAssembler.numberVertex(t->getVertex(1), 0, 1);
-      myAssembler.numberVertex(t->getVertex(2), 0, 1); 
-    }    
-  }  
-
-  it = _compound.begin();
-  for( ; it != _compound.end() ; ++it){
-    for(unsigned int i = 0; i < (*it)->triangles.size(); ++i){
-      SElement se((*it)->triangles[i]);
-      distance.addToMatrix(myAssembler, &se);
-    }
-    groupOfElements g(*it);
-    distance.addToRightHandSide(myAssembler, g);
-  }
-
-  Msg::Info("Distance Computation: Assembly done");
-  _lsys->systemSolve();
-  Msg::Info("Distance Computation: System solved");
- 
-  for(std::set<MVertex *>::iterator itv = allNodes.begin(); itv !=allNodes.end() ; ++itv){
-    MVertex *v = *itv;
-    double value =  std::min(0.9999, myAssembler.getDofValue(v, 0, 1));
-    double dist = -mu * log(1. - value);
-    coordinates[v] = SPoint3(dist, 0.0, 0.0);
-  }
-
-  _lsys->clear();
-
-  printStuff();
-  printf("End parametrize distance \n");
-  printf("--> Write distance function in file: XYZU-*.pos\n");
-  printf("--> Exit\n");
-  exit(1);
-}
-
 void GFaceCompound::computeNormals(std::map<MVertex*,SVector3> &normals) const
 {
   computeNormals ();
@@ -1737,6 +1681,59 @@ void GFaceCompound::getTriangle(double u, double v,
   _v = X[1];
 }
 
+void GFaceCompound::partitionFaceCM() 
+{
+
+  if(!oct) parametrize();
+	
+  double CMu = 0.0;
+  double sumArea = 0.0;
+	  
+  std::list<GFace*>::const_iterator it = _compound.begin();
+  for( ; it != _compound.end() ; ++it){
+    for(unsigned int i = 0; i < (*it)->triangles.size(); ++i){
+      MTriangle *t = (*it)->triangles[i];
+      std::map<MVertex*,SPoint3>::const_iterator it0 = coordinates.find(t->getVertex(0));
+      std::map<MVertex*,SPoint3>::const_iterator it1 = coordinates.find(t->getVertex(1));
+      std::map<MVertex*,SPoint3>::const_iterator it2 = coordinates.find(t->getVertex(2));
+      double q0[3] = {it0->second.x(), it0->second.y(), 0.0}; 
+      double q1[3] = {it1->second.x(), it1->second.y(), 0.0};
+      double q2[3] = {it2->second.x(), it2->second.y(), 0.0};
+      double area = 1/fabs(triangle_area(q0, q1, q2));
+      double cg_u = (q0[0]+q1[0]+q2[0])/3.;
+      CMu += cg_u*area;
+      sumArea += area;
+    }
+    CMu /= sumArea;
+  }
+	
+  //printf("min size partition =%d \n", (int)allNodes.size()/2);
+  model()->setMinPartitionSize((int)allNodes.size()/2);
+  model()->setMaxPartitionSize((int)allNodes.size()/2+1);
+	
+  it = _compound.begin();
+  for( ; it != _compound.end() ; ++it){
+    for(unsigned int i = 0; i < (*it)->triangles.size(); ++i){
+      MTriangle *t = (*it)->triangles[i];
+      std::map<MVertex*,SPoint3>::const_iterator it0 = coordinates.find(t->getVertex(0));
+      std::map<MVertex*,SPoint3>::const_iterator it1 = coordinates.find(t->getVertex(1));
+      std::map<MVertex*,SPoint3>::const_iterator it2 = coordinates.find(t->getVertex(2));
+      double cg_u = (it0->second.x()+it1->second.x()+it2->second.x())/3.;
+       if (cg_u <= CMu)
+	t->setPartition(1);
+      else 
+	t->setPartition(2);
+    }
+  }
+	
+  model()->recomputeMeshPartitions();
+	
+  CreateOutputFile("toto.msh", CTX::instance()->mesh.format);
+  Msg::Exit(1);
+	 
+  return;
+}
+
 void GFaceCompound::buildOct() const
 {
  
@@ -2068,7 +2065,7 @@ void GFaceCompound::printStuff() const
       double q1[3] = {it1->second.x(), it1->second.y(), 0.0};
       double q2[3] = {it2->second.x(), it2->second.y(), 0.0};
       double a_2D = fabs(triangle_area(q0, q1, q2));
-      double area = a_3D/a_2D;
+      double area = a_2D/a_3D;
       fprintf(uva,"ST(%g,%g,%g,%g,%g,%g,%g,%g,%g){%g,%g,%g};\n",
               it0->second.x(), it0->second.y(), 0.0,
               it1->second.x(), it1->second.y(), 0.0,
diff --git a/Geo/GFaceCompound.h b/Geo/GFaceCompound.h
index 187d982ed4207453da88206299b9754b31c7072f..e1263ac04cc97b202eb6917889253d92d7771ec8 100644
--- a/Geo/GFaceCompound.h
+++ b/Geo/GFaceCompound.h
@@ -118,6 +118,7 @@ class GFaceCompound : public GFace {
   virtual bool checkTopology() const;
   bool parametrize() const ;
   void coherenceNormals();
+  void partitionFaceCM();
   virtual std::list<GFace*> getCompounds() const {return _compound;};
   mutable int nbSplit;
   int allowPartition() const{return _allowPartition;};
diff --git a/Mesh/meshGFace.cpp b/Mesh/meshGFace.cpp
index 537117d1f59d2bf304a3b99a5715cc184730ca45..7c2c4959075336a198ee124e9dd2f2df6fe568fe 100644
--- a/Mesh/meshGFace.cpp
+++ b/Mesh/meshGFace.cpp
@@ -276,6 +276,8 @@ static bool meshGenerator(GFace *gf, int RECUR_ITER,
         all_vertices.insert((*it)->lines[i]->getVertex(1));
       }
     }
+    else
+      printf("edge %d degenerated mesh \n", (*it)->tag());
     ++it;
   }
 
@@ -1359,9 +1361,11 @@ void partitionAndRemesh(GFaceCompound *gf)
   typeOfPartition method;
   if(gf->nbSplit > 0) method = MULTILEVEL;
   else method = LAPLACIAN;
-  
+ 
   multiscalePartition *msp = new multiscalePartition(elements, abs(gf->nbSplit), method);
 
+  //gf->partitionFaceCM(); 
+
   int NF = msp->getNumberOfParts();
   int numv = gf->model()->maxVertexNum() + 1;
   int nume = gf->model()->maxEdgeNum() + 1;
@@ -1501,7 +1505,7 @@ void partitionAndRemesh(GFaceCompound *gf)
   Msg::Info("*** Mesh of surface %d done by assembly remeshed faces", gf->tag());
   Msg::Info("-----------------------------------------------------------");
  
-  //gf->coherenceNormals();
+  gf->coherenceNormals();
   gf->meshStatistics.status = GFace::DONE; 
 
   //CreateOutputFile("toto.msh", CTX::instance()->mesh.format);
diff --git a/Mesh/multiscalePartition.cpp b/Mesh/multiscalePartition.cpp
index 445f2a8218af908e83db2e619fa963560b81b494..2da3da6241994eb5be653c5ca1e6c87e74bd5c52 100644
--- a/Mesh/multiscalePartition.cpp
+++ b/Mesh/multiscalePartition.cpp
@@ -361,7 +361,7 @@ void multiscalePartition::partition(partitionLevel & level, int nbParts,
                 nextLevel->recur,nextLevel->region, genus, AR, nbParts);  
       partition(*nextLevel, nbParts, MULTILEVEL);
     }
-    else if (genus == 0  &&  AR > 5 ){// || genus == 0  &&  NB > 1){
+    else if (genus == 0  &&  AR > 5  || genus == 0  &&  NB > 1){
       int nbParts = 2;
       Msg::Info("Mesh partition: level (%d-%d)  is ZERO-GENUS (AR=%d NB=%d) ---> LAPLACIAN partition %d parts",
                 nextLevel->recur,nextLevel->region, AR, NB, nbParts);  
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 292ea7b38fa5a2adb0126c95b2862bbf8037c0c2..7b12c48ebe88fd092b92a7a443c86cb62f9e7047 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -455,7 +455,7 @@ typedef union YYSTYPE
 }
 /* Line 193 of yacc.c.  */
 #line 458 "Gmsh.tab.cpp"
-        YYSTYPE;
+	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
@@ -599,7 +599,7 @@ YYID (i)
 #  endif
 #  if (defined __cplusplus && ! defined _STDLIB_H \
        && ! ((defined YYMALLOC || defined malloc) \
-             && (defined YYFREE || defined free)))
+	     && (defined YYFREE || defined free)))
 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
 #   ifndef _STDLIB_H
 #    define _STDLIB_H 1
@@ -625,7 +625,7 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */
 
 #if (! defined yyoverflow \
      && (! defined __cplusplus \
-         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
 
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
@@ -650,13 +650,13 @@ union yyalloc
 #   define YYCOPY(To, From, Count) \
       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
 #  else
-#   define YYCOPY(To, From, Count)              \
-      do                                        \
-        {                                       \
-          YYSIZE_T yyi;                         \
-          for (yyi = 0; yyi < (Count); yyi++)   \
-            (To)[yyi] = (From)[yyi];            \
-        }                                       \
+#   define YYCOPY(To, From, Count)		\
+      do					\
+	{					\
+	  YYSIZE_T yyi;				\
+	  for (yyi = 0; yyi < (Count); yyi++)	\
+	    (To)[yyi] = (From)[yyi];		\
+	}					\
       while (YYID (0))
 #  endif
 # endif
@@ -666,15 +666,15 @@ union yyalloc
    elements in the stack, and YYPTR gives the new location of the
    stack.  Advance YYPTR to a properly aligned location for the next
    stack.  */
-# define YYSTACK_RELOCATE(Stack)                                        \
-    do                                                                  \
-      {                                                                 \
-        YYSIZE_T yynewbytes;                                            \
-        YYCOPY (&yyptr->Stack, Stack, yysize);                          \
-        Stack = &yyptr->Stack;                                          \
-        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-        yyptr += yynewbytes / sizeof (*yyptr);                          \
-      }                                                                 \
+# define YYSTACK_RELOCATE(Stack)					\
+    do									\
+      {									\
+	YYSIZE_T yynewbytes;						\
+	YYCOPY (&yyptr->Stack, Stack, yysize);				\
+	Stack = &yyptr->Stack;						\
+	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+	yyptr += yynewbytes / sizeof (*yyptr);				\
+      }									\
     while (YYID (0))
 
 #endif
@@ -697,7 +697,7 @@ union yyalloc
 #define YYUNDEFTOK  2
 #define YYMAXUTOK   385
 
-#define YYTRANSLATE(YYX)                                                \
+#define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
@@ -1032,35 +1032,35 @@ static const yytype_uint16 yyrline[] =
      713,   722,   728,   737,   755,   773,   782,   794,   799,   807,
      827,   850,   859,   867,   889,   912,   940,   952,   969,   973,
      984,   987,  1000,  1003,  1013,  1037,  1036,  1056,  1078,  1096,
-    1118,  1136,  1166,  1196,  1214,  1232,  1258,  1275,  1292,  1291,
-    1314,  1332,  1371,  1377,  1383,  1390,  1415,  1440,  1456,  1474,
-    1507,  1506,  1530,  1548,  1566,  1579,  1596,  1595,  1621,  1626,
-    1631,  1636,  1641,  1661,  1667,  1678,  1679,  1684,  1687,  1691,
-    1714,  1737,  1760,  1788,  1809,  1830,  1852,  1872,  1984,  2003,
-    2023,  2132,  2141,  2147,  2162,  2190,  2207,  2221,  2227,  2233,
-    2242,  2256,  2298,  2315,  2330,  2349,  2361,  2385,  2389,  2396,
-    2402,  2407,  2413,  2423,  2440,  2457,  2476,  2495,  2525,  2533,
-    2539,  2546,  2550,  2559,  2567,  2575,  2584,  2583,  2596,  2595,
-    2608,  2607,  2620,  2619,  2632,  2639,  2646,  2653,  2660,  2667,
-    2674,  2681,  2688,  2696,  2695,  2707,  2706,  2718,  2717,  2729,
-    2728,  2740,  2739,  2751,  2750,  2762,  2761,  2773,  2772,  2784,
-    2783,  2798,  2801,  2807,  2816,  2836,  2859,  2863,  2887,  2890,
-    2906,  2909,  2925,  2928,  2941,  2944,  2950,  2953,  2960,  3016,
-    3086,  3091,  3158,  3201,  3227,  3250,  3273,  3276,  3285,  3289,
-    3306,  3343,  3379,  3414,  3454,  3455,  3456,  3457,  3458,  3459,
-    3460,  3461,  3462,  3469,  3470,  3471,  3472,  3473,  3474,  3475,
-    3476,  3477,  3478,  3479,  3480,  3481,  3482,  3483,  3484,  3485,
-    3486,  3487,  3488,  3489,  3490,  3491,  3492,  3493,  3494,  3495,
-    3496,  3497,  3498,  3499,  3500,  3502,  3503,  3504,  3505,  3506,
-    3507,  3508,  3509,  3510,  3511,  3512,  3513,  3514,  3515,  3516,
-    3517,  3518,  3519,  3520,  3521,  3522,  3531,  3532,  3533,  3534,
-    3535,  3536,  3537,  3541,  3554,  3566,  3581,  3591,  3601,  3619,
-    3624,  3629,  3639,  3649,  3657,  3661,  3665,  3669,  3673,  3680,
-    3684,  3688,  3692,  3699,  3704,  3711,  3716,  3720,  3725,  3729,
-    3737,  3748,  3752,  3764,  3772,  3780,  3787,  3798,  3818,  3828,
-    3838,  3848,  3868,  3873,  3877,  3881,  3893,  3897,  3909,  3916,
-    3926,  3930,  3945,  3950,  3957,  3961,  3974,  3982,  3993,  3997,
-    4005,  4013,  4027,  4041,  4045
+    1118,  1136,  1166,  1196,  1214,  1232,  1258,  1275,  1294,  1293,
+    1316,  1334,  1373,  1379,  1385,  1392,  1417,  1442,  1458,  1476,
+    1509,  1508,  1532,  1550,  1568,  1581,  1598,  1597,  1623,  1628,
+    1633,  1638,  1643,  1663,  1669,  1680,  1681,  1686,  1689,  1693,
+    1716,  1739,  1762,  1790,  1811,  1832,  1854,  1874,  1986,  2005,
+    2025,  2134,  2143,  2149,  2164,  2192,  2209,  2223,  2229,  2235,
+    2244,  2258,  2300,  2317,  2332,  2351,  2363,  2387,  2391,  2398,
+    2404,  2409,  2415,  2425,  2442,  2459,  2478,  2497,  2527,  2535,
+    2541,  2548,  2552,  2561,  2569,  2577,  2586,  2585,  2598,  2597,
+    2610,  2609,  2622,  2621,  2634,  2641,  2648,  2655,  2662,  2669,
+    2676,  2683,  2690,  2698,  2697,  2709,  2708,  2720,  2719,  2731,
+    2730,  2742,  2741,  2753,  2752,  2764,  2763,  2775,  2774,  2786,
+    2785,  2800,  2803,  2809,  2818,  2838,  2861,  2865,  2889,  2892,
+    2908,  2911,  2927,  2930,  2943,  2946,  2952,  2955,  2962,  3018,
+    3088,  3093,  3160,  3203,  3229,  3252,  3275,  3278,  3287,  3291,
+    3308,  3345,  3381,  3416,  3456,  3457,  3458,  3459,  3460,  3461,
+    3462,  3463,  3464,  3471,  3472,  3473,  3474,  3475,  3476,  3477,
+    3478,  3479,  3480,  3481,  3482,  3483,  3484,  3485,  3486,  3487,
+    3488,  3489,  3490,  3491,  3492,  3493,  3494,  3495,  3496,  3497,
+    3498,  3499,  3500,  3501,  3502,  3504,  3505,  3506,  3507,  3508,
+    3509,  3510,  3511,  3512,  3513,  3514,  3515,  3516,  3517,  3518,
+    3519,  3520,  3521,  3522,  3523,  3524,  3533,  3534,  3535,  3536,
+    3537,  3538,  3539,  3543,  3556,  3568,  3583,  3593,  3603,  3621,
+    3626,  3631,  3641,  3651,  3659,  3663,  3667,  3671,  3675,  3682,
+    3686,  3690,  3694,  3701,  3706,  3713,  3718,  3722,  3727,  3731,
+    3739,  3750,  3754,  3766,  3774,  3782,  3789,  3800,  3820,  3830,
+    3840,  3850,  3870,  3875,  3879,  3883,  3895,  3899,  3911,  3918,
+    3928,  3932,  3947,  3952,  3959,  3963,  3976,  3984,  3995,  3999,
+    4007,  4015,  4029,  4043,  4047
 };
 #endif
 
@@ -3052,44 +3052,44 @@ static const yytype_uint8 yystos[] =
        6,   230,     6
 };
 
-#define yyerrok         (yyerrstatus = 0)
-#define yyclearin       (yychar = YYEMPTY)
-#define YYEMPTY         (-2)
-#define YYEOF           0
+#define yyerrok		(yyerrstatus = 0)
+#define yyclearin	(yychar = YYEMPTY)
+#define YYEMPTY		(-2)
+#define YYEOF		0
 
-#define YYACCEPT        goto yyacceptlab
-#define YYABORT         goto yyabortlab
-#define YYERROR         goto yyerrorlab
+#define YYACCEPT	goto yyacceptlab
+#define YYABORT		goto yyabortlab
+#define YYERROR		goto yyerrorlab
 
 
 /* Like YYERROR except do call yyerror.  This remains here temporarily
    to ease the transition to the new meaning of YYERROR, for GCC.
    Once GCC version 2 has supplanted version 1, this can go.  */
 
-#define YYFAIL          goto yyerrlab
+#define YYFAIL		goto yyerrlab
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
-#define YYBACKUP(Token, Value)                                  \
-do                                                              \
-  if (yychar == YYEMPTY && yylen == 1)                          \
-    {                                                           \
-      yychar = (Token);                                         \
-      yylval = (Value);                                         \
-      yytoken = YYTRANSLATE (yychar);                           \
-      YYPOPSTACK (1);                                           \
-      goto yybackup;                                            \
-    }                                                           \
-  else                                                          \
-    {                                                           \
+#define YYBACKUP(Token, Value)					\
+do								\
+  if (yychar == YYEMPTY && yylen == 1)				\
+    {								\
+      yychar = (Token);						\
+      yylval = (Value);						\
+      yytoken = YYTRANSLATE (yychar);				\
+      YYPOPSTACK (1);						\
+      goto yybackup;						\
+    }								\
+  else								\
+    {								\
       yyerror (YY_("syntax error: cannot back up")); \
-      YYERROR;                                                  \
-    }                                                           \
+      YYERROR;							\
+    }								\
 while (YYID (0))
 
 
-#define YYTERROR        1
-#define YYERRCODE       256
+#define YYTERROR	1
+#define YYERRCODE	256
 
 
 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
@@ -3098,22 +3098,22 @@ while (YYID (0))
 
 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
 #ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)                                \
-    do                                                                  \
+# define YYLLOC_DEFAULT(Current, Rhs, N)				\
+    do									\
       if (YYID (N))                                                    \
-        {                                                               \
-          (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
-          (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
-          (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
-          (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
-        }                                                               \
-      else                                                              \
-        {                                                               \
-          (Current).first_line   = (Current).last_line   =              \
-            YYRHSLOC (Rhs, 0).last_line;                                \
-          (Current).first_column = (Current).last_column =              \
-            YYRHSLOC (Rhs, 0).last_column;                              \
-        }                                                               \
+	{								\
+	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
+	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
+	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
+	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
+	}								\
+      else								\
+	{								\
+	  (Current).first_line   = (Current).last_line   =		\
+	    YYRHSLOC (Rhs, 0).last_line;				\
+	  (Current).first_column = (Current).last_column =		\
+	    YYRHSLOC (Rhs, 0).last_column;				\
+	}								\
     while (YYID (0))
 #endif
 
@@ -3124,10 +3124,10 @@ while (YYID (0))
 
 #ifndef YY_LOCATION_PRINT
 # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
-#  define YY_LOCATION_PRINT(File, Loc)                  \
-     fprintf (File, "%d.%d-%d.%d",                      \
-              (Loc).first_line, (Loc).first_column,     \
-              (Loc).last_line,  (Loc).last_column)
+#  define YY_LOCATION_PRINT(File, Loc)			\
+     fprintf (File, "%d.%d-%d.%d",			\
+	      (Loc).first_line, (Loc).first_column,	\
+	      (Loc).last_line,  (Loc).last_column)
 # else
 #  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
 # endif
@@ -3150,21 +3150,21 @@ while (YYID (0))
 #  define YYFPRINTF fprintf
 # endif
 
-# define YYDPRINTF(Args)                        \
-do {                                            \
-  if (yydebug)                                  \
-    YYFPRINTF Args;                             \
+# define YYDPRINTF(Args)			\
+do {						\
+  if (yydebug)					\
+    YYFPRINTF Args;				\
 } while (YYID (0))
 
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
-do {                                                                      \
-  if (yydebug)                                                            \
-    {                                                                     \
-      YYFPRINTF (stderr, "%s ", Title);                                   \
-      yy_symbol_print (stderr,                                            \
-                  Type, Value); \
-      YYFPRINTF (stderr, "\n");                                           \
-    }                                                                     \
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
+do {									  \
+  if (yydebug)								  \
+    {									  \
+      YYFPRINTF (stderr, "%s ", Title);					  \
+      yy_symbol_print (stderr,						  \
+		  Type, Value); \
+      YYFPRINTF (stderr, "\n");						  \
+    }									  \
 } while (YYID (0))
 
 
@@ -3196,7 +3196,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep)
   switch (yytype)
     {
       default:
-        break;
+	break;
     }
 }
 
@@ -3248,10 +3248,10 @@ yy_stack_print (bottom, top)
   YYFPRINTF (stderr, "\n");
 }
 
-# define YY_STACK_PRINT(Bottom, Top)                            \
-do {                                                            \
-  if (yydebug)                                                  \
-    yy_stack_print ((Bottom), (Top));                           \
+# define YY_STACK_PRINT(Bottom, Top)				\
+do {								\
+  if (yydebug)							\
+    yy_stack_print ((Bottom), (Top));				\
 } while (YYID (0))
 
 
@@ -3274,21 +3274,21 @@ yy_reduce_print (yyvsp, yyrule)
   int yyi;
   unsigned long int yylno = yyrline[yyrule];
   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
-             yyrule - 1, yylno);
+	     yyrule - 1, yylno);
   /* The symbols being reduced.  */
   for (yyi = 0; yyi < yynrhs; yyi++)
     {
       fprintf (stderr, "   $%d = ", yyi + 1);
       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
-                       &(yyvsp[(yyi + 1) - (yynrhs)])
-                                       );
+		       &(yyvsp[(yyi + 1) - (yynrhs)])
+		       		       );
       fprintf (stderr, "\n");
     }
 }
 
-# define YY_REDUCE_PRINT(Rule)          \
-do {                                    \
-  if (yydebug)                          \
+# define YY_REDUCE_PRINT(Rule)		\
+do {					\
+  if (yydebug)				\
     yy_reduce_print (yyvsp, Rule); \
 } while (YYID (0))
 
@@ -3304,7 +3304,7 @@ int yydebug;
 
 
 /* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef YYINITDEPTH
+#ifndef	YYINITDEPTH
 # define YYINITDEPTH 200
 #endif
 
@@ -3391,27 +3391,27 @@ yytnamerr (char *yyres, const char *yystr)
       char const *yyp = yystr;
 
       for (;;)
-        switch (*++yyp)
-          {
-          case '\'':
-          case ',':
-            goto do_not_strip_quotes;
-
-          case '\\':
-            if (*++yyp != '\\')
-              goto do_not_strip_quotes;
-            /* Fall through.  */
-          default:
-            if (yyres)
-              yyres[yyn] = *yyp;
-            yyn++;
-            break;
-
-          case '"':
-            if (yyres)
-              yyres[yyn] = '\0';
-            return yyn;
-          }
+	switch (*++yyp)
+	  {
+	  case '\'':
+	  case ',':
+	    goto do_not_strip_quotes;
+
+	  case '\\':
+	    if (*++yyp != '\\')
+	      goto do_not_strip_quotes;
+	    /* Fall through.  */
+	  default:
+	    if (yyres)
+	      yyres[yyn] = *yyp;
+	    yyn++;
+	    break;
+
+	  case '"':
+	    if (yyres)
+	      yyres[yyn] = '\0';
+	    return yyn;
+	  }
     do_not_strip_quotes: ;
     }
 
@@ -3449,7 +3449,7 @@ yysyntax_error (char *yyresult, int yystate, int yychar)
 
 # if 0
       /* This is so xgettext sees the translatable formats that are
-         constructed on the fly.  */
+	 constructed on the fly.  */
       YY_("syntax error, unexpected %s");
       YY_("syntax error, unexpected %s, expecting %s");
       YY_("syntax error, unexpected %s, expecting %s or %s");
@@ -3462,13 +3462,13 @@ yysyntax_error (char *yyresult, int yystate, int yychar)
       static char const yyexpecting[] = ", expecting %s";
       static char const yyor[] = " or %s";
       char yyformat[sizeof yyunexpected
-                    + sizeof yyexpecting - 1
-                    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
-                       * (sizeof yyor - 1))];
+		    + sizeof yyexpecting - 1
+		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+		       * (sizeof yyor - 1))];
       char const *yyprefix = yyexpecting;
 
       /* Start YYX at -YYN if negative to avoid negative indexes in
-         YYCHECK.  */
+	 YYCHECK.  */
       int yyxbegin = yyn < 0 ? -yyn : 0;
 
       /* Stay within bounds of both yycheck and yytname.  */
@@ -3480,22 +3480,22 @@ yysyntax_error (char *yyresult, int yystate, int yychar)
       yyfmt = yystpcpy (yyformat, yyunexpected);
 
       for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-        if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-          {
-            if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-              {
-                yycount = 1;
-                yysize = yysize0;
-                yyformat[sizeof yyunexpected - 1] = '\0';
-                break;
-              }
-            yyarg[yycount++] = yytname[yyx];
-            yysize1 = yysize + yytnamerr (0, yytname[yyx]);
-            yysize_overflow |= (yysize1 < yysize);
-            yysize = yysize1;
-            yyfmt = yystpcpy (yyfmt, yyprefix);
-            yyprefix = yyor;
-          }
+	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+	  {
+	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+	      {
+		yycount = 1;
+		yysize = yysize0;
+		yyformat[sizeof yyunexpected - 1] = '\0';
+		break;
+	      }
+	    yyarg[yycount++] = yytname[yyx];
+	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+	    yysize_overflow |= (yysize1 < yysize);
+	    yysize = yysize1;
+	    yyfmt = yystpcpy (yyfmt, yyprefix);
+	    yyprefix = yyor;
+	  }
 
       yyf = YY_(yyformat);
       yysize1 = yysize + yystrlen (yyf);
@@ -3503,29 +3503,29 @@ yysyntax_error (char *yyresult, int yystate, int yychar)
       yysize = yysize1;
 
       if (yysize_overflow)
-        return YYSIZE_MAXIMUM;
+	return YYSIZE_MAXIMUM;
 
       if (yyresult)
-        {
-          /* Avoid sprintf, as that infringes on the user's name space.
-             Don't have undefined behavior even if the translation
-             produced a string with the wrong number of "%s"s.  */
-          char *yyp = yyresult;
-          int yyi = 0;
-          while ((*yyp = *yyf) != '\0')
-            {
-              if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
-                {
-                  yyp += yytnamerr (yyp, yyarg[yyi++]);
-                  yyf += 2;
-                }
-              else
-                {
-                  yyp++;
-                  yyf++;
-                }
-            }
-        }
+	{
+	  /* Avoid sprintf, as that infringes on the user's name space.
+	     Don't have undefined behavior even if the translation
+	     produced a string with the wrong number of "%s"s.  */
+	  char *yyp = yyresult;
+	  int yyi = 0;
+	  while ((*yyp = *yyf) != '\0')
+	    {
+	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+		{
+		  yyp += yytnamerr (yyp, yyarg[yyi++]);
+		  yyf += 2;
+		}
+	      else
+		{
+		  yyp++;
+		  yyf++;
+		}
+	    }
+	}
       return yysize;
     }
 }
@@ -3559,7 +3559,7 @@ yydestruct (yymsg, yytype, yyvaluep)
     {
 
       default:
-        break;
+	break;
     }
 }
 
@@ -3672,7 +3672,7 @@ yyparse ()
   yystate = 0;
   yyerrstatus = 0;
   yynerrs = 0;
-  yychar = YYEMPTY;             /* Cause a token to be read.  */
+  yychar = YYEMPTY;		/* Cause a token to be read.  */
 
   /* Initialize stack pointers.
      Waste one element of value and location stack
@@ -3702,25 +3702,25 @@ yyparse ()
 
 #ifdef yyoverflow
       {
-        /* Give user a chance to reallocate the stack.  Use copies of
-           these so that the &'s don't force the real ones into
-           memory.  */
-        YYSTYPE *yyvs1 = yyvs;
-        yytype_int16 *yyss1 = yyss;
+	/* Give user a chance to reallocate the stack.  Use copies of
+	   these so that the &'s don't force the real ones into
+	   memory.  */
+	YYSTYPE *yyvs1 = yyvs;
+	yytype_int16 *yyss1 = yyss;
 
 
-        /* Each stack pointer address is followed by the size of the
-           data in use in that stack, in bytes.  This used to be a
-           conditional around just the two extra args, but that might
-           be undefined if yyoverflow is a macro.  */
-        yyoverflow (YY_("memory exhausted"),
-                    &yyss1, yysize * sizeof (*yyssp),
-                    &yyvs1, yysize * sizeof (*yyvsp),
+	/* Each stack pointer address is followed by the size of the
+	   data in use in that stack, in bytes.  This used to be a
+	   conditional around just the two extra args, but that might
+	   be undefined if yyoverflow is a macro.  */
+	yyoverflow (YY_("memory exhausted"),
+		    &yyss1, yysize * sizeof (*yyssp),
+		    &yyvs1, yysize * sizeof (*yyvsp),
 
-                    &yystacksize);
+		    &yystacksize);
 
-        yyss = yyss1;
-        yyvs = yyvs1;
+	yyss = yyss1;
+	yyvs = yyvs1;
       }
 #else /* no yyoverflow */
 # ifndef YYSTACK_RELOCATE
@@ -3728,23 +3728,23 @@ yyparse ()
 # else
       /* Extend the stack our own way.  */
       if (YYMAXDEPTH <= yystacksize)
-        goto yyexhaustedlab;
+	goto yyexhaustedlab;
       yystacksize *= 2;
       if (YYMAXDEPTH < yystacksize)
-        yystacksize = YYMAXDEPTH;
+	yystacksize = YYMAXDEPTH;
 
       {
-        yytype_int16 *yyss1 = yyss;
-        union yyalloc *yyptr =
-          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-        if (! yyptr)
-          goto yyexhaustedlab;
-        YYSTACK_RELOCATE (yyss);
-        YYSTACK_RELOCATE (yyvs);
+	yytype_int16 *yyss1 = yyss;
+	union yyalloc *yyptr =
+	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+	if (! yyptr)
+	  goto yyexhaustedlab;
+	YYSTACK_RELOCATE (yyss);
+	YYSTACK_RELOCATE (yyvs);
 
 #  undef YYSTACK_RELOCATE
-        if (yyss1 != yyssa)
-          YYSTACK_FREE (yyss1);
+	if (yyss1 != yyssa)
+	  YYSTACK_FREE (yyss1);
       }
 # endif
 #endif /* no yyoverflow */
@@ -3754,10 +3754,10 @@ yyparse ()
 
 
       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-                  (unsigned long int) yystacksize));
+		  (unsigned long int) yystacksize));
 
       if (yyss + yystacksize - 1 <= yyssp)
-        YYABORT;
+	YYABORT;
     }
 
   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
@@ -3806,7 +3806,7 @@ yybackup:
   if (yyn <= 0)
     {
       if (yyn == 0 || yyn == YYTABLE_NINF)
-        goto yyerrlab;
+	goto yyerrlab;
       yyn = -yyn;
       goto yyreduce;
     }
@@ -3976,11 +3976,11 @@ yyreduce:
       std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(6) - (7)].c));
       FILE *fp = fopen(tmp.c_str(), (yyvsp[(5) - (7)].c));
       if(!fp){
-        yymsg(0, "Unable to open file '%s'", tmp.c_str());
+	yymsg(0, "Unable to open file '%s'", tmp.c_str());
       }
       else{
-        fprintf(fp, "%s\n", (yyvsp[(3) - (7)].c));
-        fclose(fp);
+	fprintf(fp, "%s\n", (yyvsp[(3) - (7)].c));
+	fclose(fp);
       }
       Free((yyvsp[(3) - (7)].c));
       Free((yyvsp[(6) - (7)].c));
@@ -3993,11 +3993,11 @@ yyreduce:
       char tmpstring[1024];
       int i = PrintListOfDouble((yyvsp[(3) - (7)].c), (yyvsp[(5) - (7)].l), tmpstring);
       if(i < 0) 
-        yymsg(0, "Too few arguments in Printf");
+	yymsg(0, "Too few arguments in Printf");
       else if(i > 0)
-        yymsg(0, "%d extra argument%s in Printf", i, (i > 1) ? "s" : "");
+	yymsg(0, "%d extra argument%s in Printf", i, (i > 1) ? "s" : "");
       else
-        Msg::Direct(tmpstring);
+	Msg::Direct(tmpstring);
       Free((yyvsp[(3) - (7)].c));
       List_Delete((yyvsp[(5) - (7)].l));
     ;}
@@ -4009,19 +4009,19 @@ yyreduce:
       char tmpstring[1024];
       int i = PrintListOfDouble((yyvsp[(3) - (9)].c), (yyvsp[(5) - (9)].l), tmpstring);
       if(i < 0) 
-        yymsg(0, "Too few arguments in Printf");
+	yymsg(0, "Too few arguments in Printf");
       else if(i > 0)
-        yymsg(0, "%d extra argument%s in Printf", i, (i > 1) ? "s" : "");
+	yymsg(0, "%d extra argument%s in Printf", i, (i > 1) ? "s" : "");
       else{
         std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(8) - (9)].c));
-        FILE *fp = fopen(tmp.c_str(), (yyvsp[(7) - (9)].c));
-        if(!fp){
-          yymsg(0, "Unable to open file '%s'", tmp.c_str());
-        }
-        else{
-          fprintf(fp, "%s\n", tmpstring);
-          fclose(fp);
-        }
+	FILE *fp = fopen(tmp.c_str(), (yyvsp[(7) - (9)].c));
+	if(!fp){
+	  yymsg(0, "Unable to open file '%s'", tmp.c_str());
+	}
+	else{
+	  fprintf(fp, "%s\n", tmpstring);
+	  fclose(fp);
+	}
       }
       Free((yyvsp[(3) - (9)].c));
       Free((yyvsp[(8) - (9)].c));
@@ -4034,13 +4034,13 @@ yyreduce:
     { 
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(1) - (6)].c), "View") && ViewData->finalize()){
-        ViewData->setName((yyvsp[(2) - (6)].c));
-        ViewData->setFileName(gmsh_yyname);
-        ViewData->setFileIndex(gmsh_yyviewindex++);
-        new PView(ViewData);
+	ViewData->setName((yyvsp[(2) - (6)].c));
+	ViewData->setFileName(gmsh_yyname);
+	ViewData->setFileIndex(gmsh_yyviewindex++);
+	new PView(ViewData);
       }
       else
-        delete ViewData;
+	delete ViewData;
 #endif
       Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(2) - (6)].c));
     ;}
@@ -4051,9 +4051,9 @@ yyreduce:
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (6)].c), "View")){
-        int index = (int)(yyvsp[(4) - (6)].d);
-        if(index >= 0 && index < (int)PView::list.size())
-          new PView(PView::list[index], false);
+	int index = (int)(yyvsp[(4) - (6)].d);
+	if(index >= 0 && index < (int)PView::list.size())
+	  new PView(PView::list[index], false);
       }
 #endif
       Free((yyvsp[(2) - (6)].c));
@@ -4065,9 +4065,9 @@ yyreduce:
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (6)].c), "View")){
-        int index = (int)(yyvsp[(4) - (6)].d);
-        if(index >= 0 && index < (int)PView::list.size())
-          new PView(PView::list[index], true);
+	int index = (int)(yyvsp[(4) - (6)].d);
+	if(index >= 0 && index < (int)PView::list.size())
+	  new PView(PView::list[index], true);
       }
 #endif
       Free((yyvsp[(2) - (6)].c));
@@ -4108,101 +4108,101 @@ yyreduce:
     {
 #if defined(HAVE_POST)
       if(!strncmp((yyvsp[(1) - (1)].c), "SP", 2)){
-        ViewValueList = &ViewData->SP; ViewNumList = &ViewData->NbSP;
+	ViewValueList = &ViewData->SP; ViewNumList = &ViewData->NbSP;
       }
       else if(!strncmp((yyvsp[(1) - (1)].c), "VP", 2)){
-        ViewValueList = &ViewData->VP; ViewNumList = &ViewData->NbVP;
+	ViewValueList = &ViewData->VP; ViewNumList = &ViewData->NbVP;
       }
       else if(!strncmp((yyvsp[(1) - (1)].c), "TP", 2)){
-        ViewValueList = &ViewData->TP; ViewNumList = &ViewData->NbTP;
+	ViewValueList = &ViewData->TP; ViewNumList = &ViewData->NbTP;
       }
       else if(!strncmp((yyvsp[(1) - (1)].c), "SL", 2)){
-        ViewValueList = &ViewData->SL; ViewNumList = &ViewData->NbSL;
+	ViewValueList = &ViewData->SL; ViewNumList = &ViewData->NbSL;
         if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_LIN);
       }
       else if(!strncmp((yyvsp[(1) - (1)].c), "VL", 2)){
-        ViewValueList = &ViewData->VL; ViewNumList = &ViewData->NbVL;
+	ViewValueList = &ViewData->VL; ViewNumList = &ViewData->NbVL;
         if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_LIN);
       }
       else if(!strncmp((yyvsp[(1) - (1)].c), "TL", 2)){
-        ViewValueList = &ViewData->TL; ViewNumList = &ViewData->NbTL;
+	ViewValueList = &ViewData->TL; ViewNumList = &ViewData->NbTL;
         if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_LIN);
       }
       else if(!strncmp((yyvsp[(1) - (1)].c), "ST", 2)){
-        ViewValueList = &ViewData->ST; ViewNumList = &ViewData->NbST;
+	ViewValueList = &ViewData->ST; ViewNumList = &ViewData->NbST;
         if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TRI);
       }
       else if(!strncmp((yyvsp[(1) - (1)].c), "VT", 2)){
-        ViewValueList = &ViewData->VT; ViewNumList = &ViewData->NbVT;
+	ViewValueList = &ViewData->VT; ViewNumList = &ViewData->NbVT;
         if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TRI);
       }
       else if(!strncmp((yyvsp[(1) - (1)].c), "TT", 2)){
-        ViewValueList = &ViewData->TT; ViewNumList = &ViewData->NbTT;
+	ViewValueList = &ViewData->TT; ViewNumList = &ViewData->NbTT;
         if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TRI);
       }
       else if(!strncmp((yyvsp[(1) - (1)].c), "SQ", 2)){
-        ViewValueList = &ViewData->SQ; ViewNumList = &ViewData->NbSQ;
+	ViewValueList = &ViewData->SQ; ViewNumList = &ViewData->NbSQ;
         if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_QUA);
       }
       else if(!strncmp((yyvsp[(1) - (1)].c), "VQ", 2)){
-        ViewValueList = &ViewData->VQ; ViewNumList = &ViewData->NbVQ;
+	ViewValueList = &ViewData->VQ; ViewNumList = &ViewData->NbVQ;
         if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_QUA);
       }
       else if(!strncmp((yyvsp[(1) - (1)].c), "TQ", 2)){
-        ViewValueList = &ViewData->TQ; ViewNumList = &ViewData->NbTQ;
+	ViewValueList = &ViewData->TQ; ViewNumList = &ViewData->NbTQ;
         if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_QUA);
       }
       else if(!strncmp((yyvsp[(1) - (1)].c), "SS", 2)){
-        ViewValueList = &ViewData->SS; ViewNumList = &ViewData->NbSS;
+	ViewValueList = &ViewData->SS; ViewNumList = &ViewData->NbSS;
         if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TET);
       }
       else if(!strncmp((yyvsp[(1) - (1)].c), "VS", 2)){
-        ViewValueList = &ViewData->VS; ViewNumList = &ViewData->NbVS;
+	ViewValueList = &ViewData->VS; ViewNumList = &ViewData->NbVS;
         if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TET);
       }
       else if(!strncmp((yyvsp[(1) - (1)].c), "TS", 2)){
-        ViewValueList = &ViewData->TS; ViewNumList = &ViewData->NbTS;
+	ViewValueList = &ViewData->TS; ViewNumList = &ViewData->NbTS;
         if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TET);
       }
       else if(!strncmp((yyvsp[(1) - (1)].c), "SH", 2)){
-        ViewValueList = &ViewData->SH; ViewNumList = &ViewData->NbSH;
+	ViewValueList = &ViewData->SH; ViewNumList = &ViewData->NbSH;
         if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_HEX);
       }
       else if(!strncmp((yyvsp[(1) - (1)].c), "VH", 2)){
-        ViewValueList = &ViewData->VH; ViewNumList = &ViewData->NbVH;
+	ViewValueList = &ViewData->VH; ViewNumList = &ViewData->NbVH;
         if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_HEX);
       }
       else if(!strncmp((yyvsp[(1) - (1)].c), "TH", 2)){
-        ViewValueList = &ViewData->TH; ViewNumList = &ViewData->NbTH;
+	ViewValueList = &ViewData->TH; ViewNumList = &ViewData->NbTH;
         if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_HEX);
       }
       else if(!strncmp((yyvsp[(1) - (1)].c), "SI", 2)){
-        ViewValueList = &ViewData->SI; ViewNumList = &ViewData->NbSI;
+	ViewValueList = &ViewData->SI; ViewNumList = &ViewData->NbSI;
         if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PRI);
       }
       else if(!strncmp((yyvsp[(1) - (1)].c), "VI", 2)){
-        ViewValueList = &ViewData->VI; ViewNumList = &ViewData->NbVI;
+	ViewValueList = &ViewData->VI; ViewNumList = &ViewData->NbVI;
         if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PRI);
       }
       else if(!strncmp((yyvsp[(1) - (1)].c), "TI", 2)){
-        ViewValueList = &ViewData->TI; ViewNumList = &ViewData->NbTI;
+	ViewValueList = &ViewData->TI; ViewNumList = &ViewData->NbTI;
         if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PRI);
       }
       else if(!strncmp((yyvsp[(1) - (1)].c), "SY", 2)){
-        ViewValueList = &ViewData->SY; ViewNumList = &ViewData->NbSY;
+	ViewValueList = &ViewData->SY; ViewNumList = &ViewData->NbSY;
         if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PYR);
       }
       else if(!strncmp((yyvsp[(1) - (1)].c), "VY", 2)){
-        ViewValueList = &ViewData->VY; ViewNumList = &ViewData->NbVY;
+	ViewValueList = &ViewData->VY; ViewNumList = &ViewData->NbVY;
         if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PYR);
       }
       else if(!strncmp((yyvsp[(1) - (1)].c), "TY", 2)){
-        ViewValueList = &ViewData->TY; ViewNumList = &ViewData->NbTY;
+	ViewValueList = &ViewData->TY; ViewNumList = &ViewData->NbTY;
         if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PYR);
       }
       else{
-        yymsg(0, "Unknown element type '%s'", (yyvsp[(1) - (1)].c));    
-        ViewValueList = 0; ViewNumList = 0;
+	yymsg(0, "Unknown element type '%s'", (yyvsp[(1) - (1)].c));	
+	ViewValueList = 0; ViewNumList = 0;
       }
 #endif
       ViewCoord.clear();
@@ -4215,9 +4215,9 @@ yyreduce:
     {
 #if defined(HAVE_POST)
       if(ViewValueList){
-        for(int i = 0; i < 3; i++)
-          for(unsigned int j = 0; j < ViewCoord.size() / 3; j++) 
-            ViewValueList->push_back(ViewCoord[3 * j + i]);
+	for(int i = 0; i < 3; i++)
+	  for(unsigned int j = 0; j < ViewCoord.size() / 3; j++) 
+	    ViewValueList->push_back(ViewCoord[3 * j + i]);
       }
 #endif
     ;}
@@ -4318,14 +4318,14 @@ yyreduce:
     {
 #if defined(HAVE_POST)
       int type = 
-        (ViewData->NbSL || ViewData->NbVL) ? TYPE_LIN : 
-        (ViewData->NbST || ViewData->NbVT) ? TYPE_TRI : 
-        (ViewData->NbSQ || ViewData->NbVQ) ? TYPE_QUA : 
-        (ViewData->NbSS || ViewData->NbVS) ? TYPE_TET : 
-        (ViewData->NbSY || ViewData->NbVY) ? TYPE_PYR : 
-        (ViewData->NbSI || ViewData->NbVI) ? TYPE_PRI : 
-        (ViewData->NbSH || ViewData->NbVH) ? TYPE_HEX : 
-        0;
+	(ViewData->NbSL || ViewData->NbVL) ? TYPE_LIN : 
+	(ViewData->NbST || ViewData->NbVT) ? TYPE_TRI : 
+	(ViewData->NbSQ || ViewData->NbVQ) ? TYPE_QUA : 
+	(ViewData->NbSS || ViewData->NbVS) ? TYPE_TET : 
+	(ViewData->NbSY || ViewData->NbVY) ? TYPE_PYR : 
+	(ViewData->NbSI || ViewData->NbVI) ? TYPE_PRI : 
+      	(ViewData->NbSH || ViewData->NbVH) ? TYPE_HEX : 
+	0;
       ViewData->setInterpolationMatrices(type, ListOfListOfDouble2Matrix((yyvsp[(3) - (8)].l)), 
                                          ListOfListOfDouble2Matrix((yyvsp[(6) - (8)].l)));
 #endif
@@ -4337,12 +4337,12 @@ yyreduce:
     {
 #if defined(HAVE_POST)
       int type = 
-        (ViewData->NbSL || ViewData->NbVL) ? TYPE_LIN : 
-        (ViewData->NbST || ViewData->NbVT) ? TYPE_TRI : 
-        (ViewData->NbSQ || ViewData->NbVQ) ? TYPE_QUA : 
-        (ViewData->NbSS || ViewData->NbVS) ? TYPE_TET : 
-        (ViewData->NbSH || ViewData->NbVH) ? TYPE_HEX : 
-        0;
+	(ViewData->NbSL || ViewData->NbVL) ? TYPE_LIN : 
+	(ViewData->NbST || ViewData->NbVT) ? TYPE_TRI : 
+	(ViewData->NbSQ || ViewData->NbVQ) ? TYPE_QUA : 
+	(ViewData->NbSS || ViewData->NbVS) ? TYPE_TET : 
+      	(ViewData->NbSH || ViewData->NbVH) ? TYPE_HEX : 
+	0;
       ViewData->setInterpolationMatrices(type, ListOfListOfDouble2Matrix((yyvsp[(3) - (14)].l)), 
                                          ListOfListOfDouble2Matrix((yyvsp[(6) - (14)].l)),
                                          ListOfListOfDouble2Matrix((yyvsp[(9) - (14)].l)), 
@@ -4405,22 +4405,22 @@ yyreduce:
 #line 587 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
-        if(!(yyvsp[(2) - (4)].i))
-          gmsh_yysymbols[(yyvsp[(1) - (4)].c)].push_back((yyvsp[(3) - (4)].d));
-        else
-          yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (4)].c));
+	if(!(yyvsp[(2) - (4)].i))
+	  gmsh_yysymbols[(yyvsp[(1) - (4)].c)].push_back((yyvsp[(3) - (4)].d));
+	else
+	  yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (4)].c));
       }
       else{
-        switch((yyvsp[(2) - (4)].i)){
-        case 0 : gmsh_yysymbols[(yyvsp[(1) - (4)].c)][0] = (yyvsp[(3) - (4)].d); break;
-        case 1 : gmsh_yysymbols[(yyvsp[(1) - (4)].c)][0] += (yyvsp[(3) - (4)].d); break;
-        case 2 : gmsh_yysymbols[(yyvsp[(1) - (4)].c)][0] -= (yyvsp[(3) - (4)].d); break;
-        case 3 : gmsh_yysymbols[(yyvsp[(1) - (4)].c)][0] *= (yyvsp[(3) - (4)].d); break;
-        case 4 : 
-          if((yyvsp[(3) - (4)].d)) gmsh_yysymbols[(yyvsp[(1) - (4)].c)][0] /= (yyvsp[(3) - (4)].d); 
-          else yymsg(0, "Division by zero in '%s /= %g'", (yyvsp[(1) - (4)].c), (yyvsp[(3) - (4)].d));
-          break;
-        }
+	switch((yyvsp[(2) - (4)].i)){
+	case 0 : gmsh_yysymbols[(yyvsp[(1) - (4)].c)][0] = (yyvsp[(3) - (4)].d); break;
+	case 1 : gmsh_yysymbols[(yyvsp[(1) - (4)].c)][0] += (yyvsp[(3) - (4)].d); break;
+	case 2 : gmsh_yysymbols[(yyvsp[(1) - (4)].c)][0] -= (yyvsp[(3) - (4)].d); break;
+	case 3 : gmsh_yysymbols[(yyvsp[(1) - (4)].c)][0] *= (yyvsp[(3) - (4)].d); break;
+	case 4 : 
+	  if((yyvsp[(3) - (4)].d)) gmsh_yysymbols[(yyvsp[(1) - (4)].c)][0] /= (yyvsp[(3) - (4)].d); 
+	  else yymsg(0, "Division by zero in '%s /= %g'", (yyvsp[(1) - (4)].c), (yyvsp[(3) - (4)].d));
+	  break;
+	}
       }
       Free((yyvsp[(1) - (4)].c));
     ;}
@@ -4431,26 +4431,26 @@ yyreduce:
     {
       int index = (int)(yyvsp[(3) - (7)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (7)].c))){
-        if(!(yyvsp[(5) - (7)].i)){
-          gmsh_yysymbols[(yyvsp[(1) - (7)].c)].resize(index + 1, 0.);
-          gmsh_yysymbols[(yyvsp[(1) - (7)].c)][index] = (yyvsp[(6) - (7)].d);
-        }
-        else
-          yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (7)].c));
+	if(!(yyvsp[(5) - (7)].i)){
+	  gmsh_yysymbols[(yyvsp[(1) - (7)].c)].resize(index + 1, 0.);
+	  gmsh_yysymbols[(yyvsp[(1) - (7)].c)][index] = (yyvsp[(6) - (7)].d);
+	}
+	else
+	  yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (7)].c));
       }
       else{
-        if((int)gmsh_yysymbols[(yyvsp[(1) - (7)].c)].size() < index + 1)
-          gmsh_yysymbols[(yyvsp[(1) - (7)].c)].resize(index + 1, 0.);
-        switch((yyvsp[(5) - (7)].i)){
-        case 0 : gmsh_yysymbols[(yyvsp[(1) - (7)].c)][index] = (yyvsp[(6) - (7)].d); break;
-        case 1 : gmsh_yysymbols[(yyvsp[(1) - (7)].c)][index] += (yyvsp[(6) - (7)].d); break;
-        case 2 : gmsh_yysymbols[(yyvsp[(1) - (7)].c)][index] -= (yyvsp[(6) - (7)].d); break;
-        case 3 : gmsh_yysymbols[(yyvsp[(1) - (7)].c)][index] *= (yyvsp[(6) - (7)].d); break;
-        case 4 : 
-          if((yyvsp[(6) - (7)].d)) gmsh_yysymbols[(yyvsp[(1) - (7)].c)][index] /= (yyvsp[(6) - (7)].d); 
-          else yymsg(0, "Division by zero in '%s[%d] /= %g'", (yyvsp[(1) - (7)].c), index, (yyvsp[(6) - (7)].d));
-          break;
-        }
+	if((int)gmsh_yysymbols[(yyvsp[(1) - (7)].c)].size() < index + 1)
+	  gmsh_yysymbols[(yyvsp[(1) - (7)].c)].resize(index + 1, 0.);
+	switch((yyvsp[(5) - (7)].i)){
+	case 0 : gmsh_yysymbols[(yyvsp[(1) - (7)].c)][index] = (yyvsp[(6) - (7)].d); break;
+	case 1 : gmsh_yysymbols[(yyvsp[(1) - (7)].c)][index] += (yyvsp[(6) - (7)].d); break;
+	case 2 : gmsh_yysymbols[(yyvsp[(1) - (7)].c)][index] -= (yyvsp[(6) - (7)].d); break;
+	case 3 : gmsh_yysymbols[(yyvsp[(1) - (7)].c)][index] *= (yyvsp[(6) - (7)].d); break;
+	case 4 : 
+	  if((yyvsp[(6) - (7)].d)) gmsh_yysymbols[(yyvsp[(1) - (7)].c)][index] /= (yyvsp[(6) - (7)].d); 
+	  else yymsg(0, "Division by zero in '%s[%d] /= %g'", (yyvsp[(1) - (7)].c), index, (yyvsp[(6) - (7)].d));
+	  break;
+	}
       }
       Free((yyvsp[(1) - (7)].c));
     ;}
@@ -4460,38 +4460,38 @@ yyreduce:
 #line 636 "Gmsh.y"
     {
       if(List_Nbr((yyvsp[(4) - (9)].l)) != List_Nbr((yyvsp[(8) - (9)].l))){
-        yymsg(0, "Incompatible array dimensions in affectation");
+	yymsg(0, "Incompatible array dimensions in affectation");
       }
       else{
-        if(!gmsh_yysymbols.count((yyvsp[(1) - (9)].c))){
-          if(!(yyvsp[(7) - (9)].i)){
-            for(int i = 0; i < List_Nbr((yyvsp[(4) - (9)].l)); i++){
-              int index = (int)(*(double*)List_Pointer((yyvsp[(4) - (9)].l), i));
-              gmsh_yysymbols[(yyvsp[(1) - (9)].c)].resize(index + 1, 0.);
-              gmsh_yysymbols[(yyvsp[(1) - (9)].c)][index] = *(double*)List_Pointer((yyvsp[(8) - (9)].l), i);
-            }
-          }
-          else
-            yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (9)].c));
-        }
-        else{
-          for(int i = 0; i < List_Nbr((yyvsp[(4) - (9)].l)); i++){
-            int index = (int)(*(double*)List_Pointer((yyvsp[(4) - (9)].l), i));
-            double d = *(double*)List_Pointer((yyvsp[(8) - (9)].l), i);
-            if((int)gmsh_yysymbols[(yyvsp[(1) - (9)].c)].size() < index + 1)
-              gmsh_yysymbols[(yyvsp[(1) - (9)].c)].resize(index + 1, 0.);
-            switch((yyvsp[(7) - (9)].i)){
-            case 0 : gmsh_yysymbols[(yyvsp[(1) - (9)].c)][index] = d; break;
-            case 1 : gmsh_yysymbols[(yyvsp[(1) - (9)].c)][index] += d; break;
-            case 2 : gmsh_yysymbols[(yyvsp[(1) - (9)].c)][index] -= d; break;
-            case 3 : gmsh_yysymbols[(yyvsp[(1) - (9)].c)][index] *= d; break;
-            case 4 : 
-              if((yyvsp[(8) - (9)].l)) gmsh_yysymbols[(yyvsp[(1) - (9)].c)][index] /= d; 
-              else yymsg(0, "Division by zero in '%s[%d] /= %g'", (yyvsp[(1) - (9)].c), index, d);
-              break;
-            }
-          }
-        }
+	if(!gmsh_yysymbols.count((yyvsp[(1) - (9)].c))){
+	  if(!(yyvsp[(7) - (9)].i)){
+	    for(int i = 0; i < List_Nbr((yyvsp[(4) - (9)].l)); i++){
+	      int index = (int)(*(double*)List_Pointer((yyvsp[(4) - (9)].l), i));
+	      gmsh_yysymbols[(yyvsp[(1) - (9)].c)].resize(index + 1, 0.);
+	      gmsh_yysymbols[(yyvsp[(1) - (9)].c)][index] = *(double*)List_Pointer((yyvsp[(8) - (9)].l), i);
+	    }
+	  }
+	  else
+	    yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (9)].c));
+	}
+	else{
+	  for(int i = 0; i < List_Nbr((yyvsp[(4) - (9)].l)); i++){
+	    int index = (int)(*(double*)List_Pointer((yyvsp[(4) - (9)].l), i));
+	    double d = *(double*)List_Pointer((yyvsp[(8) - (9)].l), i);
+	    if((int)gmsh_yysymbols[(yyvsp[(1) - (9)].c)].size() < index + 1)
+	      gmsh_yysymbols[(yyvsp[(1) - (9)].c)].resize(index + 1, 0.);
+	    switch((yyvsp[(7) - (9)].i)){
+	    case 0 : gmsh_yysymbols[(yyvsp[(1) - (9)].c)][index] = d; break;
+	    case 1 : gmsh_yysymbols[(yyvsp[(1) - (9)].c)][index] += d; break;
+	    case 2 : gmsh_yysymbols[(yyvsp[(1) - (9)].c)][index] -= d; break;
+	    case 3 : gmsh_yysymbols[(yyvsp[(1) - (9)].c)][index] *= d; break;
+	    case 4 : 
+	      if((yyvsp[(8) - (9)].l)) gmsh_yysymbols[(yyvsp[(1) - (9)].c)][index] /= d; 
+	      else yymsg(0, "Division by zero in '%s[%d] /= %g'", (yyvsp[(1) - (9)].c), index, d);
+	      break;
+	    }
+	  }
+	}
       }
       Free((yyvsp[(1) - (9)].c));
       List_Delete((yyvsp[(4) - (9)].l));
@@ -4503,7 +4503,7 @@ yyreduce:
 #line 676 "Gmsh.y"
     {
       if(gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
-        gmsh_yysymbols[(yyvsp[(1) - (6)].c)].clear();
+	gmsh_yysymbols[(yyvsp[(1) - (6)].c)].clear();
       gmsh_yysymbols[(yyvsp[(1) - (6)].c)] = std::vector<double>();
       for(int i = 0; i < List_Nbr((yyvsp[(5) - (6)].l)); i++)
         gmsh_yysymbols[(yyvsp[(1) - (6)].c)].push_back(*(double*)List_Pointer((yyvsp[(5) - (6)].l), i));
@@ -4517,7 +4517,7 @@ yyreduce:
     {
       // appends to the list
       for(int i = 0; i < List_Nbr((yyvsp[(5) - (6)].l)); i++)
-        gmsh_yysymbols[(yyvsp[(1) - (6)].c)].push_back(*(double*)List_Pointer((yyvsp[(5) - (6)].l), i));
+	gmsh_yysymbols[(yyvsp[(1) - (6)].c)].push_back(*(double*)List_Pointer((yyvsp[(5) - (6)].l), i));
       Free((yyvsp[(1) - (6)].c));
       List_Delete((yyvsp[(5) - (6)].l));
     ;}
@@ -4527,9 +4527,9 @@ yyreduce:
 #line 694 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
-        yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (3)].c)); 
+	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (3)].c)); 
       else
-        gmsh_yysymbols[(yyvsp[(1) - (3)].c)][0] += (yyvsp[(2) - (3)].i);
+	gmsh_yysymbols[(yyvsp[(1) - (3)].c)][0] += (yyvsp[(2) - (3)].i);
       Free((yyvsp[(1) - (3)].c));
     ;}
     break;
@@ -4538,12 +4538,12 @@ yyreduce:
 #line 702 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
-        yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (6)].c)); 
+	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (6)].c)); 
       else{
-        int index = (int)(yyvsp[(3) - (6)].d);
-        if((int)gmsh_yysymbols[(yyvsp[(1) - (6)].c)].size() < index + 1)
-          gmsh_yysymbols[(yyvsp[(1) - (6)].c)].resize(index + 1, 0.);
-        gmsh_yysymbols[(yyvsp[(1) - (6)].c)][index] += (yyvsp[(5) - (6)].i);
+	int index = (int)(yyvsp[(3) - (6)].d);
+	if((int)gmsh_yysymbols[(yyvsp[(1) - (6)].c)].size() < index + 1)
+	  gmsh_yysymbols[(yyvsp[(1) - (6)].c)].resize(index + 1, 0.);
+	gmsh_yysymbols[(yyvsp[(1) - (6)].c)][index] += (yyvsp[(5) - (6)].i);
       }
       Free((yyvsp[(1) - (6)].c));
     ;}
@@ -4581,17 +4581,17 @@ yyreduce:
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (6)].c), 0, (yyvsp[(3) - (6)].c), d)){
-        switch((yyvsp[(4) - (6)].i)){
-        case 0 : d = (yyvsp[(5) - (6)].d); break;
-        case 1 : d += (yyvsp[(5) - (6)].d); break;
-        case 2 : d -= (yyvsp[(5) - (6)].d); break;
-        case 3 : d *= (yyvsp[(5) - (6)].d); break;
-        case 4 : 
-          if((yyvsp[(5) - (6)].d)) d /= (yyvsp[(5) - (6)].d); 
-          else yymsg(0, "Division by zero in '%s.%s /= %g'", (yyvsp[(1) - (6)].c), (yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
-          break;
-        }
-        NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (6)].c), 0, (yyvsp[(3) - (6)].c), d);
+	switch((yyvsp[(4) - (6)].i)){
+	case 0 : d = (yyvsp[(5) - (6)].d); break;
+	case 1 : d += (yyvsp[(5) - (6)].d); break;
+	case 2 : d -= (yyvsp[(5) - (6)].d); break;
+	case 3 : d *= (yyvsp[(5) - (6)].d); break;
+	case 4 : 
+	  if((yyvsp[(5) - (6)].d)) d /= (yyvsp[(5) - (6)].d); 
+	  else yymsg(0, "Division by zero in '%s.%s /= %g'", (yyvsp[(1) - (6)].c), (yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
+	  break;
+	}
+	NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (6)].c), 0, (yyvsp[(3) - (6)].c), d);
       }
       Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(3) - (6)].c));
     ;}
@@ -4602,17 +4602,17 @@ yyreduce:
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), d)){
-        switch((yyvsp[(7) - (9)].i)){
-        case 0 : d = (yyvsp[(8) - (9)].d); break;
-        case 1 : d += (yyvsp[(8) - (9)].d); break;
-        case 2 : d -= (yyvsp[(8) - (9)].d); break;
-        case 3 : d *= (yyvsp[(8) - (9)].d); break;
-        case 4 : 
-          if((yyvsp[(8) - (9)].d)) d /= (yyvsp[(8) - (9)].d); 
-          else yymsg(0, "Division by zero in '%s[%d].%s /= %g'", (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), (yyvsp[(8) - (9)].d));
-          break;
-        }
-        NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), d);
+	switch((yyvsp[(7) - (9)].i)){
+	case 0 : d = (yyvsp[(8) - (9)].d); break;
+	case 1 : d += (yyvsp[(8) - (9)].d); break;
+	case 2 : d -= (yyvsp[(8) - (9)].d); break;
+	case 3 : d *= (yyvsp[(8) - (9)].d); break;
+	case 4 : 
+	  if((yyvsp[(8) - (9)].d)) d /= (yyvsp[(8) - (9)].d); 
+	  else yymsg(0, "Division by zero in '%s[%d].%s /= %g'", (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), (yyvsp[(8) - (9)].d));
+	  break;
+	}
+	NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), d);
       }
       Free((yyvsp[(1) - (9)].c)); Free((yyvsp[(6) - (9)].c));
     ;}
@@ -4623,8 +4623,8 @@ yyreduce:
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(3) - (5)].c), d)){
-        d += (yyvsp[(4) - (5)].i);
-        NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (5)].c), 0, (yyvsp[(3) - (5)].c), d);
+	d += (yyvsp[(4) - (5)].i);
+	NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (5)].c), 0, (yyvsp[(3) - (5)].c), d);
       }
       Free((yyvsp[(1) - (5)].c)); Free((yyvsp[(3) - (5)].c));
     ;}
@@ -4635,8 +4635,8 @@ yyreduce:
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (8)].c), (int)(yyvsp[(3) - (8)].d), (yyvsp[(6) - (8)].c), d)){
-        d += (yyvsp[(7) - (8)].i);
-        NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (8)].c), (int)(yyvsp[(3) - (8)].d), (yyvsp[(6) - (8)].c), d);
+	d += (yyvsp[(7) - (8)].i);
+	NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (8)].c), (int)(yyvsp[(3) - (8)].d), (yyvsp[(6) - (8)].c), d);
       }
       Free((yyvsp[(1) - (8)].c)); Free((yyvsp[(6) - (8)].c));
     ;}
@@ -4663,18 +4663,18 @@ yyreduce:
     {
       GmshColorTable *ct = GetColorTable(0);
       if(!ct)
-        yymsg(0, "View[%d] does not exist", 0);
+	yymsg(0, "View[%d] does not exist", 0);
       else{
-        ct->size = List_Nbr((yyvsp[(5) - (6)].l));
-        if(ct->size > COLORTABLE_NBMAX_COLOR)
-          yymsg(0, "Too many (%d>%d) colors in View[%d].ColorTable", 
-                ct->size, COLORTABLE_NBMAX_COLOR, 0);
-        else
-          for(int i = 0; i < ct->size; i++) List_Read((yyvsp[(5) - (6)].l), i, &ct->table[i]);
-        if(ct->size == 1){
-          ct->size = 2;
-          ct->table[1] = ct->table[0];
-        }
+	ct->size = List_Nbr((yyvsp[(5) - (6)].l));
+	if(ct->size > COLORTABLE_NBMAX_COLOR)
+	  yymsg(0, "Too many (%d>%d) colors in View[%d].ColorTable", 
+		ct->size, COLORTABLE_NBMAX_COLOR, 0);
+	else
+	  for(int i = 0; i < ct->size; i++) List_Read((yyvsp[(5) - (6)].l), i, &ct->table[i]);
+	if(ct->size == 1){
+	  ct->size = 2;
+	  ct->table[1] = ct->table[0];
+	}
       }
       Free((yyvsp[(1) - (6)].c));
       List_Delete((yyvsp[(5) - (6)].l));
@@ -4686,18 +4686,18 @@ yyreduce:
     {
       GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (9)].d));
       if(!ct)
-        yymsg(0, "View[%d] does not exist", (int)(yyvsp[(3) - (9)].d));
+	yymsg(0, "View[%d] does not exist", (int)(yyvsp[(3) - (9)].d));
       else{
-        ct->size = List_Nbr((yyvsp[(8) - (9)].l));
-        if(ct->size > COLORTABLE_NBMAX_COLOR)
-          yymsg(0, "Too many (%d>%d) colors in View[%d].ColorTable", 
-                   ct->size, COLORTABLE_NBMAX_COLOR, (int)(yyvsp[(3) - (9)].d));
-        else
-          for(int i = 0; i < ct->size; i++) List_Read((yyvsp[(8) - (9)].l), i, &ct->table[i]);
-        if(ct->size == 1){
-          ct->size = 2;
-          ct->table[1] = ct->table[0];
-        }
+	ct->size = List_Nbr((yyvsp[(8) - (9)].l));
+	if(ct->size > COLORTABLE_NBMAX_COLOR)
+	  yymsg(0, "Too many (%d>%d) colors in View[%d].ColorTable", 
+		   ct->size, COLORTABLE_NBMAX_COLOR, (int)(yyvsp[(3) - (9)].d));
+	else
+	  for(int i = 0; i < ct->size; i++) List_Read((yyvsp[(8) - (9)].l), i, &ct->table[i]);
+	if(ct->size == 1){
+	  ct->size = 2;
+	  ct->table[1] = ct->table[0];
+	}
       }
       Free((yyvsp[(1) - (9)].c));
       List_Delete((yyvsp[(8) - (9)].l));
@@ -4709,9 +4709,9 @@ yyreduce:
     {
 #if defined(HAVE_MESH)
       if(!strcmp((yyvsp[(1) - (5)].c),"Background"))
-        GModel::current()->getFields()->background_field = (int)(yyvsp[(4) - (5)].d);
+	GModel::current()->getFields()->background_field = (int)(yyvsp[(4) - (5)].d);
       else
-        yymsg(0, "Unknown command %s Field", (yyvsp[(1) - (5)].c));
+	yymsg(0, "Unknown command %s Field", (yyvsp[(1) - (5)].c));
 #endif
     ;}
     break;
@@ -4721,7 +4721,7 @@ yyreduce:
     {
 #if defined(HAVE_MESH)
       if(!GModel::current()->getFields()->newField((int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c)))
-        yymsg(0, "Cannot create field %i of type '%s'", (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c));
+	yymsg(0, "Cannot create field %i of type '%s'", (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c));
 #endif
       Free((yyvsp[(6) - (7)].c));
     ;}
@@ -4733,20 +4733,20 @@ yyreduce:
 #if defined(HAVE_MESH)
       Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (9)].d));
       if(field){
-        FieldOption *option = field->options[(yyvsp[(6) - (9)].c)];
-        if(option){
-          try { option->numericalValue((yyvsp[(8) - (9)].d)); }
-          catch(...){
-            yymsg(0, "Cannot assign a numerical value to option '%s' "
-                  "in field %i of type '%s'", (yyvsp[(6) - (9)].c), (int)(yyvsp[(3) - (9)].d), field->getName());
-          }
-        }
-        else
-          yymsg(0, "Unknown option '%s' in field %i of type '%s'",
-                (yyvsp[(6) - (9)].c), (int)(yyvsp[(3) - (9)].d), field->getName());
+	FieldOption *option = field->options[(yyvsp[(6) - (9)].c)];
+	if(option){
+	  try { option->numericalValue((yyvsp[(8) - (9)].d)); }
+	  catch(...){
+	    yymsg(0, "Cannot assign a numerical value to option '%s' "
+		  "in field %i of type '%s'", (yyvsp[(6) - (9)].c), (int)(yyvsp[(3) - (9)].d), field->getName());
+	  }
+	}
+	else
+	  yymsg(0, "Unknown option '%s' in field %i of type '%s'",
+		(yyvsp[(6) - (9)].c), (int)(yyvsp[(3) - (9)].d), field->getName());
       }
       else
-        yymsg(0, "No field with id %i", (int)(yyvsp[(3) - (9)].d));
+	yymsg(0, "No field with id %i", (int)(yyvsp[(3) - (9)].d));
 #endif
       Free((yyvsp[(6) - (9)].c));
     ;}
@@ -4758,20 +4758,20 @@ yyreduce:
 #if defined(HAVE_MESH)
       Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (9)].d));
       if(field){
-        FieldOption *option = field->options[(yyvsp[(6) - (9)].c)];
-        if(option){
-          try { option->string() = (yyvsp[(8) - (9)].c); }
-          catch (...){
-            yymsg(0, "Cannot assign a string value to  option '%s' "
-                  "in field %i of type '%s'", (yyvsp[(6) - (9)].c), (int)(yyvsp[(3) - (9)].d), field->getName());
-          }
-        }
-        else 
-          yymsg(0, "Unknown option '%s' in field %i of type '%s'", 
-                (yyvsp[(6) - (9)].c), (int)(yyvsp[(3) - (9)].d), field->getName());
+	FieldOption *option = field->options[(yyvsp[(6) - (9)].c)];
+	if(option){
+	  try { option->string() = (yyvsp[(8) - (9)].c); }
+	  catch (...){
+	    yymsg(0, "Cannot assign a string value to  option '%s' "
+		  "in field %i of type '%s'", (yyvsp[(6) - (9)].c), (int)(yyvsp[(3) - (9)].d), field->getName());
+	  }
+	}
+	else 
+	  yymsg(0, "Unknown option '%s' in field %i of type '%s'", 
+		(yyvsp[(6) - (9)].c), (int)(yyvsp[(3) - (9)].d), field->getName());
       }
       else 
-        yymsg(0, "No field with id %i", (int)(yyvsp[(3) - (9)].d));
+	yymsg(0, "No field with id %i", (int)(yyvsp[(3) - (9)].d));
 #endif
       Free((yyvsp[(6) - (9)].c));
       Free((yyvsp[(8) - (9)].c));
@@ -4784,22 +4784,22 @@ yyreduce:
 #if defined(HAVE_MESH)
       Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (11)].d));
       if(field){
-        FieldOption *option = field->options[(yyvsp[(6) - (11)].c)];
-        if(option){
-          std::list<int> &vl = option->list();
-          vl.clear();
-          for(int i = 0; i < List_Nbr((yyvsp[(9) - (11)].l)); i++){
-            double id;
-            List_Read((yyvsp[(9) - (11)].l), i, &id);
-            vl.push_back((int)id);
-          }
-        }
-        else
-          yymsg(0, "Unknown option '%s' in field %i of type '%s'",
-                (yyvsp[(6) - (11)].c), (int)(yyvsp[(3) - (11)].d), field->getName());
+	FieldOption *option = field->options[(yyvsp[(6) - (11)].c)];
+	if(option){
+	  std::list<int> &vl = option->list();
+	  vl.clear();
+	  for(int i = 0; i < List_Nbr((yyvsp[(9) - (11)].l)); i++){
+	    double id;
+	    List_Read((yyvsp[(9) - (11)].l), i, &id);
+	    vl.push_back((int)id);
+	  }
+	}
+	else
+	  yymsg(0, "Unknown option '%s' in field %i of type '%s'",
+		(yyvsp[(6) - (11)].c), (int)(yyvsp[(3) - (11)].d), field->getName());
       }
       else 
-        yymsg(0, "No field with id %i", (int)(yyvsp[(3) - (11)].d));
+	yymsg(0, "No field with id %i", (int)(yyvsp[(3) - (11)].d));
 #endif
       Free((yyvsp[(6) - (11)].c));
       List_Delete((yyvsp[(9) - (11)].l));
@@ -4811,10 +4811,10 @@ yyreduce:
     {
 #if defined(HAVE_POST)
       try {
-        PluginManager::instance()->setPluginOption((yyvsp[(3) - (9)].c), (yyvsp[(6) - (9)].c), (yyvsp[(8) - (9)].d)); 
+	PluginManager::instance()->setPluginOption((yyvsp[(3) - (9)].c), (yyvsp[(6) - (9)].c), (yyvsp[(8) - (9)].d)); 
       }
       catch (...) {
-        yymsg(0, "Unknown option '%s' or plugin '%s'", (yyvsp[(6) - (9)].c), (yyvsp[(3) - (9)].c));
+	yymsg(0, "Unknown option '%s' or plugin '%s'", (yyvsp[(6) - (9)].c), (yyvsp[(3) - (9)].c));
       }
 #endif
       Free((yyvsp[(3) - (9)].c)); Free((yyvsp[(6) - (9)].c));
@@ -4826,10 +4826,10 @@ yyreduce:
     {
 #if defined(HAVE_POST)
       try {
-        PluginManager::instance()->setPluginOption((yyvsp[(3) - (9)].c), (yyvsp[(6) - (9)].c), (yyvsp[(8) - (9)].c)); 
+	PluginManager::instance()->setPluginOption((yyvsp[(3) - (9)].c), (yyvsp[(6) - (9)].c), (yyvsp[(8) - (9)].c)); 
       }
       catch (...) {
-        yymsg(0, "Unknown option '%s' or plugin '%s'", (yyvsp[(6) - (9)].c), (yyvsp[(3) - (9)].c));
+	yymsg(0, "Unknown option '%s' or plugin '%s'", (yyvsp[(6) - (9)].c), (yyvsp[(3) - (9)].c));
       }
 #endif
       Free((yyvsp[(3) - (9)].c)); Free((yyvsp[(6) - (9)].c)); Free((yyvsp[(8) - (9)].c));
@@ -4866,9 +4866,9 @@ yyreduce:
       (yyval.l) = List_Create(1, 1, sizeof(Vertex*));
       Vertex *v = FindPoint((int)(yyvsp[(4) - (5)].d));
       if(!v)
-        yymsg(0, "Unknown point %d", (int)(yyvsp[(4) - (5)].d));
+	yymsg(0, "Unknown point %d", (int)(yyvsp[(4) - (5)].d));
       else{
-        List_Add((yyval.l), &v);
+	List_Add((yyval.l), &v);
       }
     ;}
     break;
@@ -4892,21 +4892,21 @@ yyreduce:
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindPoint(num)){
-        yymsg(0, "Point %d already exists", num);
+	yymsg(0, "Point %d already exists", num);
       }
       else{
-        double x = CTX::instance()->geom.scalingFactor * (yyvsp[(6) - (7)].v)[0];
-        double y = CTX::instance()->geom.scalingFactor * (yyvsp[(6) - (7)].v)[1];
-        double z = CTX::instance()->geom.scalingFactor * (yyvsp[(6) - (7)].v)[2];
-        double lc = CTX::instance()->geom.scalingFactor * (yyvsp[(6) - (7)].v)[3];
-        if(lc == 0.) lc = MAX_LC; // no mesh size given at the point
-        Vertex *v;
-        if(!myGmshSurface)
-          v = Create_Vertex(num, x, y, z, lc, 1.0);
-        else
-          v = Create_Vertex(num, x, y, myGmshSurface, lc);
-        Tree_Add(GModel::current()->getGEOInternals()->Points, &v);
-        AddToTemporaryBoundingBox(v->Pos.X, v->Pos.Y, v->Pos.Z);
+	double x = CTX::instance()->geom.scalingFactor * (yyvsp[(6) - (7)].v)[0];
+	double y = CTX::instance()->geom.scalingFactor * (yyvsp[(6) - (7)].v)[1];
+	double z = CTX::instance()->geom.scalingFactor * (yyvsp[(6) - (7)].v)[2];
+	double lc = CTX::instance()->geom.scalingFactor * (yyvsp[(6) - (7)].v)[3];
+	if(lc == 0.) lc = MAX_LC; // no mesh size given at the point
+	Vertex *v;
+	if(!myGmshSurface)
+	  v = Create_Vertex(num, x, y, z, lc, 1.0);
+	else
+	  v = Create_Vertex(num, x, y, myGmshSurface, lc);
+	Tree_Add(GModel::current()->getGEOInternals()->Points, &v);
+	AddToTemporaryBoundingBox(v->Pos.X, v->Pos.Y, v->Pos.Z);
       }
       (yyval.s).Type = MSH_POINT;
       (yyval.s).Num = num;
@@ -4925,13 +4925,13 @@ yyreduce:
     {
       int num = (int)(yyvsp[(5) - (9)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_POINT)){
-        yymsg(0, "Physical point %d already exists", num);
+	yymsg(0, "Physical point %d already exists", num);
       }
       else{
-        List_T *temp = ListOfDouble2ListOfInt((yyvsp[(8) - (9)].l));
-        PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_POINT, temp);
-        List_Delete(temp);
-        List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
+	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(8) - (9)].l));
+	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_POINT, temp);
+	List_Delete(temp);
+	List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
       }
       List_Delete((yyvsp[(8) - (9)].l));
       (yyval.s).Type = MSH_PHYSICAL_POINT;
@@ -4943,16 +4943,16 @@ yyreduce:
 #line 1057 "Gmsh.y"
     {      
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
-        double d;
-        List_Read((yyvsp[(3) - (6)].l), i, &d);
-        Vertex *v = FindPoint((int)d);   
-        if(v)
-          v->lc = (yyvsp[(5) - (6)].d);
-        else{
-          GVertex *gv = GModel::current()->getVertexByTag((int)d);
-          if(gv) 
-            gv->setPrescribedMeshSizeAtVertex((yyvsp[(5) - (6)].d));
-        }
+	double d;
+	List_Read((yyvsp[(3) - (6)].l), i, &d);
+	Vertex *v = FindPoint((int)d); 	 
+	if(v)
+	  v->lc = (yyvsp[(5) - (6)].d);
+	else{
+	  GVertex *gv = GModel::current()->getVertexByTag((int)d);
+	  if(gv) 
+	    gv->setPrescribedMeshSizeAtVertex((yyvsp[(5) - (6)].d));
+	}
       }
       List_Delete((yyvsp[(3) - (6)].l));
       // dummy values
@@ -4966,15 +4966,15 @@ yyreduce:
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
-        yymsg(0, "Curve %d already exists", num);
+	yymsg(0, "Curve %d already exists", num);
       }
       else{
-        List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (7)].l));
-        Curve *c = Create_Curve(num, MSH_SEGM_LINE, 1, temp, NULL,
-                                -1, -1, 0., 1.);
-        Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
-        CreateReversedCurve(c);
-        List_Delete(temp);
+	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (7)].l));
+	Curve *c = Create_Curve(num, MSH_SEGM_LINE, 1, temp, NULL,
+				-1, -1, 0., 1.);
+	Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
+	CreateReversedCurve(c);
+	List_Delete(temp);
       }
       List_Delete((yyvsp[(6) - (7)].l));
       (yyval.s).Type = MSH_SEGM_LINE;
@@ -4986,22 +4986,22 @@ yyreduce:
 #line 1097 "Gmsh.y"
     {
       for (int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
-        double dnum;
-        List_Read((yyvsp[(3) - (4)].l), i, &dnum);
-        int num = (int) fabs(dnum);
-        Curve *c = FindCurve(num);
-        if (c){
-          c->degenerated = true;
-        }
-        else{
-          GEdge *ge = GModel::current()->getEdgeByTag(num);
-          if (!ge){
-            yymsg(0, "Curve %d does not exist", num);
-          }
-          else{
-            ge->setTooSmall(true);
-          }
-        }
+	double dnum;
+	List_Read((yyvsp[(3) - (4)].l), i, &dnum);
+	int num = (int) fabs(dnum);
+	Curve *c = FindCurve(num);
+	if (c){
+	  c->degenerated = true;
+	}
+	else{
+	  GEdge *ge = GModel::current()->getEdgeByTag(num);
+	  if (!ge){
+	    yymsg(0, "Curve %d does not exist", num);
+	  }
+	  else{
+	    ge->setTooSmall(true);
+	  }
+	}
       }
     ;}
     break;
@@ -5011,15 +5011,15 @@ yyreduce:
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
-        yymsg(0, "Curve %d already exists", num);
+	yymsg(0, "Curve %d already exists", num);
       }
       else{
-        List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (7)].l));
-        Curve *c = Create_Curve(num, MSH_SEGM_SPLN, 3, temp, NULL,
-                                -1, -1, 0., 1.);
-        Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
-        CreateReversedCurve(c);
-        List_Delete(temp);
+	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (7)].l));
+	Curve *c = Create_Curve(num, MSH_SEGM_SPLN, 3, temp, NULL,
+				-1, -1, 0., 1.);
+	Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
+	CreateReversedCurve(c);
+	List_Delete(temp);
       }
       List_Delete((yyvsp[(6) - (7)].l));
       (yyval.s).Type = MSH_SEGM_SPLN;
@@ -5032,27 +5032,27 @@ yyreduce:
     {
       int num = (int)(yyvsp[(3) - (8)].d);
       if(FindCurve(num)){
-        yymsg(0, "Curve %d already exists", num);
+	yymsg(0, "Curve %d already exists", num);
       }
       else{
-        List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (8)].l));
-        Curve *c = Create_Curve(num, MSH_SEGM_CIRC, 2, temp, NULL,
-                                -1, -1, 0., 1.);
+	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (8)].l));
+	Curve *c = Create_Curve(num, MSH_SEGM_CIRC, 2, temp, NULL,
+				-1, -1, 0., 1.);
         if((yyvsp[(7) - (8)].v)[0] || (yyvsp[(7) - (8)].v)[1] || (yyvsp[(7) - (8)].v)[2]){
           c->Circle.n[0] = (yyvsp[(7) - (8)].v)[0];
           c->Circle.n[1] = (yyvsp[(7) - (8)].v)[1];
           c->Circle.n[2] = (yyvsp[(7) - (8)].v)[2];
           End_Curve(c);
         }
-        Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
-        Curve *rc = CreateReversedCurve(c);
+	Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
+	Curve *rc = CreateReversedCurve(c);
         if((yyvsp[(7) - (8)].v)[0] || (yyvsp[(7) - (8)].v)[1] || (yyvsp[(7) - (8)].v)[2]){
           rc->Circle.n[0] = (yyvsp[(7) - (8)].v)[0];
           rc->Circle.n[1] = (yyvsp[(7) - (8)].v)[1];
           rc->Circle.n[2] = (yyvsp[(7) - (8)].v)[2];
           End_Curve(rc);
         }
-        List_Delete(temp);
+	List_Delete(temp);
       }
       List_Delete((yyvsp[(6) - (8)].l));
       (yyval.s).Type = MSH_SEGM_CIRC;
@@ -5065,27 +5065,27 @@ yyreduce:
     {
       int num = (int)(yyvsp[(3) - (8)].d);
       if(FindCurve(num)){
-        yymsg(0, "Curve %d already exists", num);
+	yymsg(0, "Curve %d already exists", num);
       }
       else{
-        List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (8)].l));
-        Curve *c = Create_Curve(num, MSH_SEGM_ELLI, 2, temp, NULL,
-                                -1, -1, 0., 1.);
+	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (8)].l));
+	Curve *c = Create_Curve(num, MSH_SEGM_ELLI, 2, temp, NULL,
+				-1, -1, 0., 1.);
         if((yyvsp[(7) - (8)].v)[0] || (yyvsp[(7) - (8)].v)[1] || (yyvsp[(7) - (8)].v)[2]){
           c->Circle.n[0] = (yyvsp[(7) - (8)].v)[0];
           c->Circle.n[1] = (yyvsp[(7) - (8)].v)[1];
           c->Circle.n[2] = (yyvsp[(7) - (8)].v)[2];
           End_Curve(c);
         }
-        Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
-        Curve *rc = CreateReversedCurve(c);
+	Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
+	Curve *rc = CreateReversedCurve(c);
         if((yyvsp[(7) - (8)].v)[0] || (yyvsp[(7) - (8)].v)[1] || (yyvsp[(7) - (8)].v)[2]){
           rc->Circle.n[0] = (yyvsp[(7) - (8)].v)[0];
           rc->Circle.n[1] = (yyvsp[(7) - (8)].v)[1];
           rc->Circle.n[2] = (yyvsp[(7) - (8)].v)[2];
           End_Curve(rc);
         }
-        List_Delete(temp);
+	List_Delete(temp);
       }
       List_Delete((yyvsp[(6) - (8)].l));
       (yyval.s).Type = MSH_SEGM_ELLI;
@@ -5098,15 +5098,15 @@ yyreduce:
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
-        yymsg(0, "Curve %d already exists", num);
+	yymsg(0, "Curve %d already exists", num);
       }
       else{
-        List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (7)].l));
-        Curve *c = Create_Curve(num, MSH_SEGM_BSPLN, 2, temp, NULL,
-                                -1, -1, 0., 1.);
-        Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
-        CreateReversedCurve(c);
-        List_Delete(temp);
+	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (7)].l));
+	Curve *c = Create_Curve(num, MSH_SEGM_BSPLN, 2, temp, NULL,
+				-1, -1, 0., 1.);
+	Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
+	CreateReversedCurve(c);
+	List_Delete(temp);
       }
       List_Delete((yyvsp[(6) - (7)].l));
       (yyval.s).Type = MSH_SEGM_BSPLN;
@@ -5119,15 +5119,15 @@ yyreduce:
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
-        yymsg(0, "Curve %d already exists", num);
+	yymsg(0, "Curve %d already exists", num);
       }
       else{
-        List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (7)].l));
-        Curve *c = Create_Curve(num, MSH_SEGM_BEZIER, 2, temp, NULL,
-                                -1, -1, 0., 1.);
-        Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
-        CreateReversedCurve(c);
-        List_Delete(temp);
+	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (7)].l));
+	Curve *c = Create_Curve(num, MSH_SEGM_BEZIER, 2, temp, NULL,
+				-1, -1, 0., 1.);
+	Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
+	CreateReversedCurve(c);
+	List_Delete(temp);
       }
       List_Delete((yyvsp[(6) - (7)].l));
       (yyval.s).Type = MSH_SEGM_BEZIER;
@@ -5140,22 +5140,22 @@ yyreduce:
     {
       int num = (int)(yyvsp[(3) - (11)].d);
       if(List_Nbr((yyvsp[(6) - (11)].l)) + (int)(yyvsp[(10) - (11)].d) + 1 != List_Nbr((yyvsp[(8) - (11)].l))){
-        yymsg(0, "Wrong definition of Nurbs Curve %d: "
-              "got %d knots, need N + D + 1 = %d + %d + 1 = %d",
-              (int)(yyvsp[(3) - (11)].d), List_Nbr((yyvsp[(8) - (11)].l)), List_Nbr((yyvsp[(6) - (11)].l)), (int)(yyvsp[(10) - (11)].d), List_Nbr((yyvsp[(6) - (11)].l)) + (int)(yyvsp[(10) - (11)].d) + 1);
+	yymsg(0, "Wrong definition of Nurbs Curve %d: "
+	      "got %d knots, need N + D + 1 = %d + %d + 1 = %d",
+	      (int)(yyvsp[(3) - (11)].d), List_Nbr((yyvsp[(8) - (11)].l)), List_Nbr((yyvsp[(6) - (11)].l)), (int)(yyvsp[(10) - (11)].d), List_Nbr((yyvsp[(6) - (11)].l)) + (int)(yyvsp[(10) - (11)].d) + 1);
       }
       else{
-        if(FindCurve(num)){
-          yymsg(0, "Curve %d already exists", num);
-        }
-        else{
-          List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (11)].l));
-          Curve *c = Create_Curve(num, MSH_SEGM_NURBS, (int)(yyvsp[(10) - (11)].d), temp, (yyvsp[(8) - (11)].l),
-                                  -1, -1, 0., 1.);
-          Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
-          CreateReversedCurve(c);
-          List_Delete(temp);
-        }
+	if(FindCurve(num)){
+	  yymsg(0, "Curve %d already exists", num);
+	}
+	else{
+	  List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (11)].l));
+	  Curve *c = Create_Curve(num, MSH_SEGM_NURBS, (int)(yyvsp[(10) - (11)].d), temp, (yyvsp[(8) - (11)].l),
+				  -1, -1, 0., 1.);
+	  Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
+	  CreateReversedCurve(c);
+	  List_Delete(temp);
+	}
       }
       List_Delete((yyvsp[(6) - (11)].l));
       List_Delete((yyvsp[(8) - (11)].l));
@@ -5169,14 +5169,14 @@ yyreduce:
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindEdgeLoop(num)){
-        yymsg(0, "Line loop %d already exists", num);
+	yymsg(0, "Line loop %d already exists", num);
       }
       else{
-        List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
-        sortEdgesInLoop(num, temp);
-        EdgeLoop *l = Create_EdgeLoop(num, temp);
-        Tree_Add(GModel::current()->getGEOInternals()->EdgeLoops, &l);
-        List_Delete(temp);
+	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
+	sortEdgesInLoop(num, temp);
+	EdgeLoop *l = Create_EdgeLoop(num, temp);
+	Tree_Add(GModel::current()->getGEOInternals()->EdgeLoops, &l);
+	List_Delete(temp);
       }
       List_Delete((yyvsp[(7) - (8)].l));
       (yyval.s).Type = MSH_SEGM_LOOP;
@@ -5189,13 +5189,15 @@ yyreduce:
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindCurve(num)){
-        yymsg(0, "Curve %d already exists", num);
+	yymsg(0, "Curve %d already exists", num);
       }
       else{
         Curve *c = Create_Curve(num, MSH_SEGM_COMPOUND, 1, NULL, NULL, -1, -1, 0., 1.);
         for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++)
           c->compound.push_back((int)*(double*)List_Pointer((yyvsp[(7) - (8)].l), i));
-        Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
+	End_Curve(c);
+	Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
+	CreateReversedCurve(c);
       }
       List_Delete((yyvsp[(7) - (8)].l));
       (yyval.s).Type = MSH_SEGM_COMPOUND;
@@ -5204,24 +5206,24 @@ yyreduce:
     break;
 
   case 108:
-#line 1292 "Gmsh.y"
+#line 1294 "Gmsh.y"
     {
       curPhysDim = 1;
     ;}
     break;
 
   case 109:
-#line 1296 "Gmsh.y"
+#line 1298 "Gmsh.y"
     {
       int num = (int)(yyvsp[(5) - (9)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_LINE)){
-        yymsg(0, "Physical line %d already exists", num);
+	yymsg(0, "Physical line %d already exists", num);
       }
       else{
-        List_T *temp = ListOfDouble2ListOfInt((yyvsp[(8) - (9)].l));
-        PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_LINE, temp);
-        List_Delete(temp);
-        List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
+	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(8) - (9)].l));
+	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_LINE, temp);
+	List_Delete(temp);
+	List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
       }
       List_Delete((yyvsp[(8) - (9)].l));
       (yyval.s).Type = MSH_PHYSICAL_LINE;
@@ -5230,19 +5232,19 @@ yyreduce:
     break;
 
   case 110:
-#line 1315 "Gmsh.y"
+#line 1317 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindSurface(num)){
-        yymsg(0, "Surface %d already exists", num);
+	yymsg(0, "Surface %d already exists", num);
       }
       else{
-        Surface *s = Create_Surface(num, MSH_SURF_PLAN);
-        List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
-        setSurfaceGeneratrices(s, temp);
-        List_Delete(temp);
-        End_Surface(s);
-        Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &s);
+	Surface *s = Create_Surface(num, MSH_SURF_PLAN);
+	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
+	setSurfaceGeneratrices(s, temp);
+	List_Delete(temp);
+	End_Surface(s);
+	Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &s);
       }
       List_Delete((yyvsp[(7) - (8)].l));
       (yyval.s).Type = MSH_SURF_PLAN;
@@ -5251,40 +5253,40 @@ yyreduce:
     break;
 
   case 111:
-#line 1333 "Gmsh.y"
+#line 1335 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (9)].d), type = 0;
       if(FindSurface(num)){
-        yymsg(0, "Surface %d already exists", num);
+	yymsg(0, "Surface %d already exists", num);
       }
       else{
-        double d;
-        List_Read((yyvsp[(7) - (9)].l), 0, &d);
-        EdgeLoop *el = FindEdgeLoop((int)fabs(d));
-        if(!el){
-          yymsg(0, "Unknown line loop %d", (int)d);
-        }
-        else{
-          int j = List_Nbr(el->Curves);
-          if(j == 4){
-            type = MSH_SURF_REGL;
-          }
-          else if(j == 3){
-            type = MSH_SURF_TRIC;
-          }
-          else{
-            yymsg(0, "Wrong definition of Ruled Surface %d: "
-                  "%d borders instead of 3 or 4", num, j);
-            type = MSH_SURF_PLAN;
-          }
-          Surface *s = Create_Surface(num, type);
-          List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (9)].l));
-          setSurfaceGeneratrices(s, temp);
-          List_Delete(temp);
-          End_Surface(s);
-          s->InSphereCenter = (yyvsp[(8) - (9)].l);
-          Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &s);
-        }
+	double d;
+	List_Read((yyvsp[(7) - (9)].l), 0, &d);
+	EdgeLoop *el = FindEdgeLoop((int)fabs(d));
+	if(!el){
+	  yymsg(0, "Unknown line loop %d", (int)d);
+	}
+	else{
+	  int j = List_Nbr(el->Curves);
+	  if(j == 4){
+	    type = MSH_SURF_REGL;
+	  }
+	  else if(j == 3){
+	    type = MSH_SURF_TRIC;
+	  }
+	  else{
+	    yymsg(0, "Wrong definition of Ruled Surface %d: "
+		  "%d borders instead of 3 or 4", num, j);
+	    type = MSH_SURF_PLAN;
+	  }
+	  Surface *s = Create_Surface(num, type);
+	  List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (9)].l));
+	  setSurfaceGeneratrices(s, temp);
+	  List_Delete(temp);
+	  End_Surface(s);
+	  s->InSphereCenter = (yyvsp[(8) - (9)].l);
+	  Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &s);
+	}
       }
       List_Delete((yyvsp[(7) - (9)].l));
       (yyval.s).Type = type;
@@ -5293,7 +5295,7 @@ yyreduce:
     break;
 
   case 112:
-#line 1372 "Gmsh.y"
+#line 1374 "Gmsh.y"
     {
       myGmshSurface = 0;
       (yyval.s).Type = 0;
@@ -5302,7 +5304,7 @@ yyreduce:
     break;
 
   case 113:
-#line 1378 "Gmsh.y"
+#line 1380 "Gmsh.y"
     {
       myGmshSurface = gmshSurface::getSurface((int)(yyvsp[(3) - (4)].d));
       (yyval.s).Type = 0;
@@ -5311,7 +5313,7 @@ yyreduce:
     break;
 
   case 114:
-#line 1384 "Gmsh.y"
+#line 1386 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (10)].d);
       myGmshSurface = gmshParametricSurface::NewParametricSurface(num, (yyvsp[(7) - (10)].c), (yyvsp[(8) - (10)].c), (yyvsp[(9) - (10)].c));
@@ -5321,27 +5323,27 @@ yyreduce:
     break;
 
   case 115:
-#line 1391 "Gmsh.y"
+#line 1393 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if (List_Nbr((yyvsp[(6) - (7)].l)) != 2){
-        yymsg(0, "Sphere %d has to be defined using 2 points (center + "
-              "any point) and not %d", num, List_Nbr((yyvsp[(6) - (7)].l)));
+	yymsg(0, "Sphere %d has to be defined using 2 points (center + "
+	      "any point) and not %d", num, List_Nbr((yyvsp[(6) - (7)].l)));
       }
       else{
-        double p1,p2;
-        List_Read((yyvsp[(6) - (7)].l), 0, &p1);
-        List_Read((yyvsp[(6) - (7)].l), 1, &p2);
-        Vertex *v1 = FindPoint((int)p1);
-        Vertex *v2 = FindPoint((int)p2);
-        if(!v1) yymsg(0, "Sphere %d : unknown point %d", num, (int)p1);
-        if(!v2) yymsg(0, "Sphere %d : unknown point %d", num, (int)p2);
-        if(v1 && v2)
-          myGmshSurface = gmshSphere::NewSphere
-            (num, v1->Pos.X, v1->Pos.Y, v1->Pos.Z,
-             sqrt((v2->Pos.X - v1->Pos.X) * (v2->Pos.X - v1->Pos.X) +
-                  (v2->Pos.Y - v1->Pos.Y) * (v2->Pos.Y - v1->Pos.Y) +
-                  (v2->Pos.Z - v1->Pos.Z) * (v2->Pos.Z - v1->Pos.Z)));
+	double p1,p2;
+	List_Read((yyvsp[(6) - (7)].l), 0, &p1);
+	List_Read((yyvsp[(6) - (7)].l), 1, &p2);
+	Vertex *v1 = FindPoint((int)p1);
+	Vertex *v2 = FindPoint((int)p2);
+	if(!v1) yymsg(0, "Sphere %d : unknown point %d", num, (int)p1);
+	if(!v2) yymsg(0, "Sphere %d : unknown point %d", num, (int)p2);
+	if(v1 && v2)
+	  myGmshSurface = gmshSphere::NewSphere
+	    (num, v1->Pos.X, v1->Pos.Y, v1->Pos.Z,
+	     sqrt((v2->Pos.X - v1->Pos.X) * (v2->Pos.X - v1->Pos.X) +
+		  (v2->Pos.Y - v1->Pos.Y) * (v2->Pos.Y - v1->Pos.Y) +
+		  (v2->Pos.Z - v1->Pos.Z) * (v2->Pos.Z - v1->Pos.Z)));
       }
       (yyval.s).Type = 0;
       (yyval.s).Num = num;
@@ -5349,27 +5351,27 @@ yyreduce:
     break;
 
   case 116:
-#line 1416 "Gmsh.y"
+#line 1418 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if (List_Nbr((yyvsp[(6) - (7)].l)) != 2){
-        yymsg(0, "PolarSphere %d has to be defined using 2 points (center + "
-              "any point) and not %d", num, List_Nbr((yyvsp[(6) - (7)].l)));
+	yymsg(0, "PolarSphere %d has to be defined using 2 points (center + "
+	      "any point) and not %d", num, List_Nbr((yyvsp[(6) - (7)].l)));
       }
       else{
-        double p1,p2;
-        List_Read((yyvsp[(6) - (7)].l), 0, &p1);
-        List_Read((yyvsp[(6) - (7)].l), 1, &p2);
-        Vertex *v1 = FindPoint((int)p1);
-        Vertex *v2 = FindPoint((int)p2);
-        if(!v1) yymsg(0, "PolarSphere %d : unknown point %d", num, (int)p1);
-        if(!v2) yymsg(0, "PolarSphere %d : unknown point %d", num, (int)p2);
-        if(v1 && v2)
-          myGmshSurface = gmshPolarSphere::NewPolarSphere
-            (num, v1->Pos.X, v1->Pos.Y, v1->Pos.Z,
-             sqrt((v2->Pos.X - v1->Pos.X) * (v2->Pos.X - v1->Pos.X) +
-                  (v2->Pos.Y - v1->Pos.Y) * (v2->Pos.Y - v1->Pos.Y) +
-                  (v2->Pos.Z - v1->Pos.Z) * (v2->Pos.Z - v1->Pos.Z)));
+	double p1,p2;
+	List_Read((yyvsp[(6) - (7)].l), 0, &p1);
+	List_Read((yyvsp[(6) - (7)].l), 1, &p2);
+	Vertex *v1 = FindPoint((int)p1);
+	Vertex *v2 = FindPoint((int)p2);
+	if(!v1) yymsg(0, "PolarSphere %d : unknown point %d", num, (int)p1);
+	if(!v2) yymsg(0, "PolarSphere %d : unknown point %d", num, (int)p2);
+	if(v1 && v2)
+	  myGmshSurface = gmshPolarSphere::NewPolarSphere
+	    (num, v1->Pos.X, v1->Pos.Y, v1->Pos.Z,
+	     sqrt((v2->Pos.X - v1->Pos.X) * (v2->Pos.X - v1->Pos.X) +
+		  (v2->Pos.Y - v1->Pos.Y) * (v2->Pos.Y - v1->Pos.Y) +
+		  (v2->Pos.Z - v1->Pos.Z) * (v2->Pos.Z - v1->Pos.Z)));
       }
       (yyval.s).Type = 0;
       (yyval.s).Num = num;
@@ -5377,17 +5379,17 @@ yyreduce:
     break;
 
   case 117:
-#line 1441 "Gmsh.y"
+#line 1443 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindSurfaceLoop(num)){
-        yymsg(0, "Surface loop %d already exists", num);
+	yymsg(0, "Surface loop %d already exists", num);
       }
       else{
-        List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
-        SurfaceLoop *l = Create_SurfaceLoop(num, temp);
-        Tree_Add(GModel::current()->getGEOInternals()->SurfaceLoops, &l);
-        List_Delete(temp);
+	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
+	SurfaceLoop *l = Create_SurfaceLoop(num, temp);
+	Tree_Add(GModel::current()->getGEOInternals()->SurfaceLoops, &l);
+	List_Delete(temp);
       }
       List_Delete((yyvsp[(7) - (8)].l));
       (yyval.s).Type = MSH_SURF_LOOP;
@@ -5396,19 +5398,19 @@ yyreduce:
     break;
 
   case 118:
-#line 1457 "Gmsh.y"
+#line 1459 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (9)].d);
       if(FindSurface(num)){
-        yymsg(0, "Surface %d already exists", num);
+	yymsg(0, "Surface %d already exists", num);
       }
       else{
         Surface *s = Create_Surface(num, MSH_SURF_COMPOUND);
         for(int i = 0; i < List_Nbr((yyvsp[(7) - (9)].l)); i++){
           s->compound.push_back((int)*(double*)List_Pointer((yyvsp[(7) - (9)].l), i));
-          s->TypeOfMapping = (yyvsp[(8) - (9)].i);
-        }
-        Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &s);
+	  s->TypeOfMapping = (yyvsp[(8) - (9)].i);
+	}
+	Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &s);
       }
       List_Delete((yyvsp[(7) - (9)].l));
       (yyval.s).Type = MSH_SURF_COMPOUND;
@@ -5417,28 +5419,28 @@ yyreduce:
     break;
 
   case 119:
-#line 1476 "Gmsh.y"
+#line 1478 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (13)].d);
       if(FindSurface(num)){
-        yymsg(0, "Surface %d already exists", num);
+	yymsg(0, "Surface %d already exists", num);
       }
       else{
         Surface *s = Create_Surface(num, MSH_SURF_COMPOUND);
         for(int i = 0; i < List_Nbr((yyvsp[(7) - (13)].l)); i++)
           s->compound.push_back((int)*(double*)List_Pointer((yyvsp[(7) - (13)].l), i));
-        for (int i = 0; i < List_Nbr((yyvsp[(10) - (13)].l)); i++){
+	for (int i = 0; i < List_Nbr((yyvsp[(10) - (13)].l)); i++){
           if(i > 3){
             yymsg(0, "Too many boundary specifiers in compound surface");
             break;
           }
-          List_T *l = *(List_T**)List_Pointer((yyvsp[(10) - (13)].l), i);
+	  List_T *l = *(List_T**)List_Pointer((yyvsp[(10) - (13)].l), i);
           for (int j = 0; j < List_Nbr(l); j++){
             s->compoundBoundary[i].push_back((int)*(double*)List_Pointer(l, j));
-            s->TypeOfMapping = (yyvsp[(12) - (13)].i);
-          }
-        }
-        Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &s);
+	    s->TypeOfMapping = (yyvsp[(12) - (13)].i);
+	  }
+	}
+	Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &s);
       }
       List_Delete((yyvsp[(7) - (13)].l));
       for (int i = 0; i < List_Nbr((yyvsp[(10) - (13)].l)); i++)
@@ -5451,24 +5453,24 @@ yyreduce:
     break;
 
   case 120:
-#line 1507 "Gmsh.y"
+#line 1509 "Gmsh.y"
     {
       curPhysDim = 2;
     ;}
     break;
 
   case 121:
-#line 1511 "Gmsh.y"
+#line 1513 "Gmsh.y"
     {
       int num = (int)(yyvsp[(5) - (9)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE)){
-        yymsg(0, "Physical surface %d already exists", num);
+	yymsg(0, "Physical surface %d already exists", num);
       }
       else{
-        List_T *temp = ListOfDouble2ListOfInt((yyvsp[(8) - (9)].l));
-        PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_SURFACE, temp);
-        List_Delete(temp);
-        List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
+	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(8) - (9)].l));
+	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_SURFACE, temp);
+	List_Delete(temp);
+	List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
       }
       List_Delete((yyvsp[(8) - (9)].l));
       (yyval.s).Type = MSH_PHYSICAL_SURFACE;
@@ -5477,19 +5479,19 @@ yyreduce:
     break;
 
   case 122:
-#line 1531 "Gmsh.y"
+#line 1533 "Gmsh.y"
     {
       yymsg(0, "'Complex Volume' command is deprecated: use 'Volume' instead");
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindVolume(num)){
-        yymsg(0, "Volume %d already exists", num);
+	yymsg(0, "Volume %d already exists", num);
       }
       else{
-        Volume *v = Create_Volume(num, MSH_VOLUME);
-        List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
-        setVolumeSurfaces(v, temp);
-        List_Delete(temp);
-        Tree_Add(GModel::current()->getGEOInternals()->Volumes, &v);
+	Volume *v = Create_Volume(num, MSH_VOLUME);
+	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
+	setVolumeSurfaces(v, temp);
+	List_Delete(temp);
+	Tree_Add(GModel::current()->getGEOInternals()->Volumes, &v);
       }
       List_Delete((yyvsp[(7) - (8)].l));
       (yyval.s).Type = MSH_VOLUME;
@@ -5498,18 +5500,18 @@ yyreduce:
     break;
 
   case 123:
-#line 1549 "Gmsh.y"
+#line 1551 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindVolume(num)){
-        yymsg(0, "Volume %d already exists", num);
+	yymsg(0, "Volume %d already exists", num);
       }
       else{
-        Volume *v = Create_Volume(num, MSH_VOLUME);
-        List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (7)].l));
-        setVolumeSurfaces(v, temp);
-        List_Delete(temp);
-        Tree_Add(GModel::current()->getGEOInternals()->Volumes, &v);
+	Volume *v = Create_Volume(num, MSH_VOLUME);
+	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(6) - (7)].l));
+	setVolumeSurfaces(v, temp);
+	List_Delete(temp);
+	Tree_Add(GModel::current()->getGEOInternals()->Volumes, &v);
       }
       List_Delete((yyvsp[(6) - (7)].l));
       (yyval.s).Type = MSH_VOLUME;
@@ -5518,7 +5520,7 @@ yyreduce:
     break;
 
   case 124:
-#line 1567 "Gmsh.y"
+#line 1569 "Gmsh.y"
     {
 #if defined(HAVE_OCC)
       std::vector<double> data;
@@ -5534,17 +5536,17 @@ yyreduce:
     break;
 
   case 125:
-#line 1580 "Gmsh.y"
+#line 1582 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindVolume(num)){
-        yymsg(0, "Volume %d already exists", num);
+	yymsg(0, "Volume %d already exists", num);
       }
       else{
-        Volume *v = Create_Volume(num, MSH_VOLUME_COMPOUND);
+	Volume *v = Create_Volume(num, MSH_VOLUME_COMPOUND);
         for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++)
           v->compound.push_back((int)*(double*)List_Pointer((yyvsp[(7) - (8)].l), i));
-        Tree_Add(GModel::current()->getGEOInternals()->Volumes, &v);
+	Tree_Add(GModel::current()->getGEOInternals()->Volumes, &v);
       }
       List_Delete((yyvsp[(7) - (8)].l));
       (yyval.s).Type = MSH_VOLUME_COMPOUND;
@@ -5553,24 +5555,24 @@ yyreduce:
     break;
 
   case 126:
-#line 1596 "Gmsh.y"
+#line 1598 "Gmsh.y"
     {
       curPhysDim = 3;
     ;}
     break;
 
   case 127:
-#line 1600 "Gmsh.y"
+#line 1602 "Gmsh.y"
     {
       int num = (int)(yyvsp[(5) - (9)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME)){
-        yymsg(0, "Physical volume %d already exists", num);
+	yymsg(0, "Physical volume %d already exists", num);
       }
       else{
-        List_T *temp = ListOfDouble2ListOfInt((yyvsp[(8) - (9)].l));
-        PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_VOLUME, temp);
-        List_Delete(temp);
-        List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
+	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(8) - (9)].l));
+	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_VOLUME, temp);
+	List_Delete(temp);
+	List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
       }
       List_Delete((yyvsp[(8) - (9)].l));
       (yyval.s).Type = MSH_PHYSICAL_VOLUME;
@@ -5579,7 +5581,7 @@ yyreduce:
     break;
 
   case 128:
-#line 1622 "Gmsh.y"
+#line 1624 "Gmsh.y"
     {
       TranslateShapes((yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], (yyvsp[(4) - (5)].l));
       (yyval.l) = (yyvsp[(4) - (5)].l);
@@ -5587,7 +5589,7 @@ yyreduce:
     break;
 
   case 129:
-#line 1627 "Gmsh.y"
+#line 1629 "Gmsh.y"
     {
       RotateShapes((yyvsp[(3) - (11)].v)[0], (yyvsp[(3) - (11)].v)[1], (yyvsp[(3) - (11)].v)[2], (yyvsp[(5) - (11)].v)[0], (yyvsp[(5) - (11)].v)[1], (yyvsp[(5) - (11)].v)[2], (yyvsp[(7) - (11)].d), (yyvsp[(10) - (11)].l));
       (yyval.l) = (yyvsp[(10) - (11)].l);
@@ -5595,7 +5597,7 @@ yyreduce:
     break;
 
   case 130:
-#line 1632 "Gmsh.y"
+#line 1634 "Gmsh.y"
     {
       SymmetryShapes((yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], (yyvsp[(2) - (5)].v)[3], (yyvsp[(4) - (5)].l));
       (yyval.l) = (yyvsp[(4) - (5)].l);
@@ -5603,7 +5605,7 @@ yyreduce:
     break;
 
   case 131:
-#line 1637 "Gmsh.y"
+#line 1639 "Gmsh.y"
     {
       DilatShapes((yyvsp[(3) - (9)].v)[0], (yyvsp[(3) - (9)].v)[1], (yyvsp[(3) - (9)].v)[2], (yyvsp[(5) - (9)].d), (yyvsp[(8) - (9)].l));
       (yyval.l) = (yyvsp[(8) - (9)].l);
@@ -5611,7 +5613,7 @@ yyreduce:
     break;
 
   case 132:
-#line 1642 "Gmsh.y"
+#line 1644 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
       if(!strcmp((yyvsp[(1) - (4)].c), "Duplicata")){
@@ -5634,7 +5636,7 @@ yyreduce:
     break;
 
   case 133:
-#line 1662 "Gmsh.y"
+#line 1664 "Gmsh.y"
     { 
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       IntersectCurvesWithSurface((yyvsp[(4) - (9)].l), (int)(yyvsp[(8) - (9)].d), (yyval.l));
@@ -5643,7 +5645,7 @@ yyreduce:
     break;
 
   case 134:
-#line 1668 "Gmsh.y"
+#line 1670 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape*));
       List_T *tmp = ListOfDouble2ListOfInt((yyvsp[(7) - (9)].l));
@@ -5654,141 +5656,141 @@ yyreduce:
     break;
 
   case 135:
-#line 1678 "Gmsh.y"
+#line 1680 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
   case 136:
-#line 1679 "Gmsh.y"
+#line 1681 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
   case 137:
-#line 1684 "Gmsh.y"
+#line 1686 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
     ;}
     break;
 
   case 138:
-#line 1688 "Gmsh.y"
+#line 1690 "Gmsh.y"
     {
       List_Add((yyval.l), &(yyvsp[(2) - (2)].s));
     ;}
     break;
 
   case 139:
-#line 1692 "Gmsh.y"
+#line 1694 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
-        double d;
-        List_Read((yyvsp[(4) - (6)].l), i, &d);
-        Shape TheShape;
-        TheShape.Num = (int)d;
-        Vertex *v = FindPoint(std::abs(TheShape.Num));
-        if(v){
-          TheShape.Type = MSH_POINT;
-          List_Add((yyval.l), &TheShape);
-        }
-        else{
-          GVertex *gv = GModel::current()->getVertexByTag(std::abs(TheShape.Num));
-          if(gv){
-            TheShape.Type = MSH_POINT_FROM_GMODEL;
-            List_Add((yyval.l), &TheShape);
-          }
-          else
-            yymsg(1, "Unknown point %d", TheShape.Num);
-        }
+	double d;
+	List_Read((yyvsp[(4) - (6)].l), i, &d);
+	Shape TheShape;
+	TheShape.Num = (int)d;
+	Vertex *v = FindPoint(std::abs(TheShape.Num));
+	if(v){
+	  TheShape.Type = MSH_POINT;
+	  List_Add((yyval.l), &TheShape);
+	}
+	else{
+	  GVertex *gv = GModel::current()->getVertexByTag(std::abs(TheShape.Num));
+	  if(gv){
+	    TheShape.Type = MSH_POINT_FROM_GMODEL;
+	    List_Add((yyval.l), &TheShape);
+	  }
+	  else
+	    yymsg(1, "Unknown point %d", TheShape.Num);
+	}
       }
     ;}
     break;
 
   case 140:
-#line 1715 "Gmsh.y"
+#line 1717 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
-        double d;
-        List_Read((yyvsp[(4) - (6)].l), i, &d);
-        Shape TheShape;
-        TheShape.Num = (int)d;
-        Curve *c = FindCurve(std::abs(TheShape.Num));
-        if(c){
-          TheShape.Type = c->Typ;
-          List_Add((yyval.l), &TheShape);
-        }
-        else{
-          GEdge *ge = GModel::current()->getEdgeByTag(std::abs(TheShape.Num));
-          if(ge){
-            TheShape.Type = MSH_SEGM_FROM_GMODEL;
-            List_Add((yyval.l), &TheShape);
-          }
-          else
-            yymsg(1, "Unknown curve %d", TheShape.Num);
-        }
+	double d;
+	List_Read((yyvsp[(4) - (6)].l), i, &d);
+	Shape TheShape;
+	TheShape.Num = (int)d;
+	Curve *c = FindCurve(std::abs(TheShape.Num));
+	if(c){
+	  TheShape.Type = c->Typ;
+	  List_Add((yyval.l), &TheShape);
+	}
+	else{
+	  GEdge *ge = GModel::current()->getEdgeByTag(std::abs(TheShape.Num));
+	  if(ge){
+	    TheShape.Type = MSH_SEGM_FROM_GMODEL;
+	    List_Add((yyval.l), &TheShape);
+	  }
+	  else
+	    yymsg(1, "Unknown curve %d", TheShape.Num);
+	}
       }
     ;}
     break;
 
   case 141:
-#line 1738 "Gmsh.y"
+#line 1740 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
-        double d;
-        List_Read((yyvsp[(4) - (6)].l), i, &d);
-        Shape TheShape;
-        TheShape.Num = (int)d;
-        Surface *s = FindSurface(std::abs(TheShape.Num));
-        if(s){
-          TheShape.Type = s->Typ;
-          List_Add((yyval.l), &TheShape);
-        }
-        else{
-          GFace *gf = GModel::current()->getFaceByTag(std::abs(TheShape.Num));
-          if(gf){
-            TheShape.Type = MSH_SURF_FROM_GMODEL;
-            List_Add((yyval.l), &TheShape);
-          }
-          else
-            yymsg(1, "Unknown surface %d", TheShape.Num);
-        }
+	double d;
+	List_Read((yyvsp[(4) - (6)].l), i, &d);
+	Shape TheShape;
+	TheShape.Num = (int)d;
+	Surface *s = FindSurface(std::abs(TheShape.Num));
+	if(s){
+	  TheShape.Type = s->Typ;
+	  List_Add((yyval.l), &TheShape);
+	}
+	else{
+	  GFace *gf = GModel::current()->getFaceByTag(std::abs(TheShape.Num));
+	  if(gf){
+	    TheShape.Type = MSH_SURF_FROM_GMODEL;
+	    List_Add((yyval.l), &TheShape);
+	  }
+	  else
+	    yymsg(1, "Unknown surface %d", TheShape.Num);
+	}
       }
     ;}
     break;
 
   case 142:
-#line 1761 "Gmsh.y"
+#line 1763 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
-        double d;
-        List_Read((yyvsp[(4) - (6)].l), i, &d);
-        Shape TheShape;
-        TheShape.Num = (int)d;
-        Volume *v = FindVolume(std::abs(TheShape.Num));
-        if(v){
-          TheShape.Type = v->Typ;
-          List_Add((yyval.l), &TheShape);
-        }
-        else{
-          GRegion *gr = GModel::current()->getRegionByTag(std::abs(TheShape.Num));
-          if(gr){
-            TheShape.Type = MSH_VOLUME_FROM_GMODEL;
-            List_Add((yyval.l), &TheShape);
-          }
-          else
-            yymsg(1, "Unknown volume %d", TheShape.Num);
-        }
+	double d;
+	List_Read((yyvsp[(4) - (6)].l), i, &d);
+	Shape TheShape;
+	TheShape.Num = (int)d;
+	Volume *v = FindVolume(std::abs(TheShape.Num));
+	if(v){
+	  TheShape.Type = v->Typ;
+	  List_Add((yyval.l), &TheShape);
+	}
+	else{
+	  GRegion *gr = GModel::current()->getRegionByTag(std::abs(TheShape.Num));
+	  if(gr){
+	    TheShape.Type = MSH_VOLUME_FROM_GMODEL;
+	    List_Add((yyval.l), &TheShape);
+	  }
+	  else
+	    yymsg(1, "Unknown volume %d", TheShape.Num);
+	}
       }
     ;}
     break;
 
   case 143:
-#line 1789 "Gmsh.y"
+#line 1791 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(7) - (8)].l)) == 4){
         int t = (int)(yyvsp[(4) - (8)].d);
         if(FindLevelSet(t)){
-          yymsg(0, "Levelset %d already exists", t);
+	  yymsg(0, "Levelset %d already exists", t);
         }
         else {
           double d[4];
@@ -5806,13 +5808,13 @@ yyreduce:
     break;
 
   case 144:
-#line 1811 "Gmsh.y"
+#line 1813 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(12) - (14)].l)) == 0){
         int t = (int)(yyvsp[(4) - (14)].d);
         if(FindLevelSet(t)){
-          yymsg(0, "Levelset %d already exists", t);
+	  yymsg(0, "Levelset %d already exists", t);
         }
         else {
           double pt[3] = {(yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2]};
@@ -5829,13 +5831,13 @@ yyreduce:
     break;
 
   case 145:
-#line 1832 "Gmsh.y"
+#line 1834 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(14) - (16)].l)) == 0){
         int t = (int)(yyvsp[(4) - (16)].d);
         if(FindLevelSet(t)){
-          yymsg(0, "Levelset %d already exists", t);
+	  yymsg(0, "Levelset %d already exists", t);
         }
         else {
           double pt1[3] = {(yyvsp[(8) - (16)].v)[0], (yyvsp[(8) - (16)].v)[1], (yyvsp[(8) - (16)].v)[2]};
@@ -5853,13 +5855,13 @@ yyreduce:
     break;
 
   case 146:
-#line 1853 "Gmsh.y"
+#line 1855 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(10) - (12)].l)) == 1){
         int t = (int)(yyvsp[(4) - (12)].d);
         if(FindLevelSet(t)){
-          yymsg(0, "Levelset %d already exists", t);
+	  yymsg(0, "Levelset %d already exists", t);
         }
         else {
           double d;
@@ -5876,20 +5878,20 @@ yyreduce:
     break;
 
   case 147:
-#line 1873 "Gmsh.y"
+#line 1875 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[(2) - (8)].c), "Union")){
         int t = (int)(yyvsp[(4) - (8)].d);
         if(FindLevelSet(t)){
-          yymsg(0, "Levelset %d already exists", t);
+	  yymsg(0, "Levelset %d already exists", t);
         }
         else {
           std::vector<const gLevelset *> vl;
           for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++) {
             double d; List_Read((yyvsp[(7) - (8)].l), i, &d);
             LevelSet *pl = FindLevelSet((int)d);
-            if(!pl) yymsg(0, "Levelset Union %d : unknown levelset %d", t, (int)d);
+	    if(!pl) yymsg(0, "Levelset Union %d : unknown levelset %d", t, (int)d);
             else vl.push_back(pl->ls);
           }
           gLevelset *ls = new gLevelsetUnion(vl);
@@ -5900,14 +5902,14 @@ yyreduce:
       else if(!strcmp((yyvsp[(2) - (8)].c), "Intersection")){
         int t = (int)(yyvsp[(4) - (8)].d);
         if(FindLevelSet(t)){
-          yymsg(0, "Levelset %d already exists", t);
+	  yymsg(0, "Levelset %d already exists", t);
         }
         else {
           std::vector<const gLevelset *> vl;
           for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++) {
             double d; List_Read((yyvsp[(7) - (8)].l), i, &d);
             LevelSet *pl = FindLevelSet((int)d);
-            if(!pl) yymsg(0, "Levelset Intersection %d : unknown levelset %d", t, (int)d);
+	    if(!pl) yymsg(0, "Levelset Intersection %d : unknown levelset %d", t, (int)d);
             else vl.push_back(pl->ls);
           }
           gLevelset *ls = new gLevelsetIntersection(vl);
@@ -5918,14 +5920,14 @@ yyreduce:
       else if(!strcmp((yyvsp[(2) - (8)].c), "Cut")){
         int t = (int)(yyvsp[(4) - (8)].d);
         if(FindLevelSet(t)){
-          yymsg(0, "Levelset %d already exists", t);
+	  yymsg(0, "Levelset %d already exists", t);
         }
         else {
           std::vector<const gLevelset *> vl;
           for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++) {
             double d; List_Read((yyvsp[(7) - (8)].l), i, &d);
             LevelSet *pl = FindLevelSet((int)d);
-            if(!pl) yymsg(0, "Levelset Cut %d : unknown levelset %d", t, (int)d);
+	    if(!pl) yymsg(0, "Levelset Cut %d : unknown levelset %d", t, (int)d);
             else vl.push_back(pl->ls);
           }
           gLevelset *ls = new gLevelsetCut(vl);
@@ -5936,14 +5938,14 @@ yyreduce:
       else if(!strcmp((yyvsp[(2) - (8)].c), "Crack")){
         int t = (int)(yyvsp[(4) - (8)].d);
         if(FindLevelSet(t)){
-          yymsg(0, "Levelset %d already exists", t);
+	  yymsg(0, "Levelset %d already exists", t);
         }
         else {
           std::vector<const gLevelset *> vl;
           for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++) {
             double d; List_Read((yyvsp[(7) - (8)].l), i, &d);
             LevelSet *pl = FindLevelSet((int)d);
-            if(!pl) yymsg(0, "Levelset Crack %d : unknown levelset %d", t, (int)d);
+	    if(!pl) yymsg(0, "Levelset Crack %d : unknown levelset %d", t, (int)d);
             else vl.push_back(pl->ls);
           }
           gLevelset *ls = new gLevelsetCrack(vl);
@@ -5954,7 +5956,7 @@ yyreduce:
       else if(!strcmp((yyvsp[(2) - (8)].c), "Reverse")){
         int t = (int)(yyvsp[(4) - (8)].d);
         if(FindLevelSet(t)){
-          yymsg(0, "Levelset %d already exists", t);
+	  yymsg(0, "Levelset %d already exists", t);
         }
         else {
           double d;
@@ -5971,7 +5973,7 @@ yyreduce:
       else if(!strcmp((yyvsp[(2) - (8)].c), "PostView")){
         int t = (int)(yyvsp[(4) - (8)].d);
         if(FindLevelSet(t)){
-          yymsg(0, "Levelset %d already exists", t);
+	  yymsg(0, "Levelset %d already exists", t);
         }
         else {
           if(List_Nbr((yyvsp[(7) - (8)].l)) > 0){
@@ -5991,13 +5993,13 @@ yyreduce:
     break;
 
   case 148:
-#line 1985 "Gmsh.y"
+#line 1987 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[(2) - (8)].c), "MathEval")){
         int t = (int)(yyvsp[(4) - (8)].d);
         if(FindLevelSet(t)){
-          yymsg(0, "Levelset %d already exists", t);
+	  yymsg(0, "Levelset %d already exists", t);
         }
         else {
           gLevelset *ls = new gLevelsetMathEval((yyvsp[(7) - (8)].c), t);
@@ -6013,7 +6015,7 @@ yyreduce:
     break;
 
   case 149:
-#line 2004 "Gmsh.y"
+#line 2006 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[(2) - (6)].c), "CutMesh")){
@@ -6036,13 +6038,13 @@ yyreduce:
     break;
 
   case 150:
-#line 2025 "Gmsh.y"
+#line 2027 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[(2) - (14)].c), "Cylinder") && List_Nbr((yyvsp[(12) - (14)].l)) == 1){
         int t = (int)(yyvsp[(4) - (14)].d);
         if(FindLevelSet(t)){
-          yymsg(0, "Levelset %d already exists", t);
+	  yymsg(0, "Levelset %d already exists", t);
         }
         else {
           double d;
@@ -6057,7 +6059,7 @@ yyreduce:
       else if(!strcmp((yyvsp[(2) - (14)].c), "Cone") && List_Nbr((yyvsp[(12) - (14)].l)) == 1){
         int t = (int)(yyvsp[(4) - (14)].d);
         if(FindLevelSet(t)){
-          yymsg(0, "Levelset %d already exists", t);
+	  yymsg(0, "Levelset %d already exists", t);
         }
         else {
           double d;
@@ -6072,7 +6074,7 @@ yyreduce:
       else if(!strcmp((yyvsp[(2) - (14)].c), "Cylinder") && List_Nbr((yyvsp[(12) - (14)].l)) == 2){
         int t = (int)(yyvsp[(4) - (14)].d);
         if(FindLevelSet(t)){
-          yymsg(0, "Levelset %d already exists", t);
+	  yymsg(0, "Levelset %d already exists", t);
         }
         else {
           double d[2];
@@ -6088,7 +6090,7 @@ yyreduce:
       else if(!strcmp((yyvsp[(2) - (14)].c), "Cylinder") && List_Nbr((yyvsp[(12) - (14)].l)) == 3){
         int t = (int)(yyvsp[(4) - (14)].d);
         if(FindLevelSet(t)){
-          yymsg(0, "Levelset %d already exists", t);
+	  yymsg(0, "Levelset %d already exists", t);
         }
         else {
           double d[3];
@@ -6104,7 +6106,7 @@ yyreduce:
       else if(!strcmp((yyvsp[(2) - (14)].c), "Ellipsoid") && List_Nbr((yyvsp[(12) - (14)].l)) == 3){
         int t = (int)(yyvsp[(4) - (14)].d);
         if(FindLevelSet(t)){
-          yymsg(0, "Levelset %d already exists", t);
+	  yymsg(0, "Levelset %d already exists", t);
         }
         else {
           double d[3];
@@ -6120,7 +6122,7 @@ yyreduce:
       else if(!strcmp((yyvsp[(2) - (14)].c), "Quadric") && List_Nbr((yyvsp[(12) - (14)].l)) == 5){
         int t = (int)(yyvsp[(4) - (14)].d);
         if(FindLevelSet(t)){
-          yymsg(0, "Levelset %d already exists", t);
+	  yymsg(0, "Levelset %d already exists", t);
         }
         else {
           double d[5];
@@ -6142,19 +6144,19 @@ yyreduce:
     break;
 
   case 151:
-#line 2133 "Gmsh.y"
+#line 2135 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
-        Shape TheShape;
-        List_Read((yyvsp[(3) - (4)].l), i, &TheShape);
-        DeleteShape(TheShape.Type, TheShape.Num);
+	Shape TheShape;
+	List_Read((yyvsp[(3) - (4)].l), i, &TheShape);
+	DeleteShape(TheShape.Type, TheShape.Num);
       }
       List_Delete((yyvsp[(3) - (4)].l));
     ;}
     break;
 
   case 152:
-#line 2142 "Gmsh.y"
+#line 2144 "Gmsh.y"
     {
 #if defined(HAVE_MESH)
       GModel::current()->getFields()->deleteField((int)(yyvsp[(4) - (6)].d));
@@ -6163,237 +6165,237 @@ yyreduce:
     break;
 
   case 153:
-#line 2148 "Gmsh.y"
+#line 2150 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (6)].c), "View")){
-        int index = (int)(yyvsp[(4) - (6)].d);
-        if(index >= 0 && index < (int)PView::list.size())
-          delete PView::list[index];
-        else
-          yymsg(0, "Unknown view %d", index);
+	int index = (int)(yyvsp[(4) - (6)].d);
+	if(index >= 0 && index < (int)PView::list.size())
+	  delete PView::list[index];
+	else
+	  yymsg(0, "Unknown view %d", index);
       }
       else
-        yymsg(0, "Unknown command 'Delete %s'", (yyvsp[(2) - (6)].c));
+	yymsg(0, "Unknown command 'Delete %s'", (yyvsp[(2) - (6)].c));
 #endif
       Free((yyvsp[(2) - (6)].c));
     ;}
     break;
 
   case 154:
-#line 2163 "Gmsh.y"
+#line 2165 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Meshes") || !strcmp((yyvsp[(2) - (3)].c), "All")){
         ClearProject();
       }
       else if(!strcmp((yyvsp[(2) - (3)].c), "Model")){
-        GModel::current()->destroy();
-        GModel::current()->getGEOInternals()->destroy();
+	GModel::current()->destroy();
+	GModel::current()->getGEOInternals()->destroy();
       }
       else if(!strcmp((yyvsp[(2) - (3)].c), "Physicals")){
-        GModel::current()->getGEOInternals()->reset_physicals();
-        GModel::current()->deletePhysicalGroups();
+	GModel::current()->getGEOInternals()->reset_physicals();
+	GModel::current()->deletePhysicalGroups();
       }
       else if(!strcmp((yyvsp[(2) - (3)].c), "Variables")){
-        gmsh_yysymbols.clear();
+	gmsh_yysymbols.clear();
       }
       else if(!strcmp((yyvsp[(2) - (3)].c), "Options")){
         ReInitOptions(0);
         InitOptionsGUI(0);
       }
       else{
-        if(gmsh_yysymbols.count((yyvsp[(2) - (3)].c)))
-          gmsh_yysymbols.erase((yyvsp[(2) - (3)].c));
-        else
-          yymsg(0, "Unknown object or expression to delete '%s'", (yyvsp[(2) - (3)].c));
+	if(gmsh_yysymbols.count((yyvsp[(2) - (3)].c)))
+	  gmsh_yysymbols.erase((yyvsp[(2) - (3)].c));
+	else
+	  yymsg(0, "Unknown object or expression to delete '%s'", (yyvsp[(2) - (3)].c));
       }
       Free((yyvsp[(2) - (3)].c));
     ;}
     break;
 
   case 155:
-#line 2191 "Gmsh.y"
+#line 2193 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (4)].c), "Empty") && !strcmp((yyvsp[(3) - (4)].c), "Views")){
-        for(int i = PView::list.size() - 1; i >= 0; i--)
-          if(PView::list[i]->getData()->empty()) delete PView::list[i];
+	for(int i = PView::list.size() - 1; i >= 0; i--)
+	  if(PView::list[i]->getData()->empty()) delete PView::list[i];
       }
       else
-        yymsg(0, "Unknown command 'Delete %s %s'", (yyvsp[(2) - (4)].c), (yyvsp[(3) - (4)].c));
+	yymsg(0, "Unknown command 'Delete %s %s'", (yyvsp[(2) - (4)].c), (yyvsp[(3) - (4)].c));
 #endif
       Free((yyvsp[(2) - (4)].c)); Free((yyvsp[(3) - (4)].c));
     ;}
     break;
 
   case 156:
-#line 2208 "Gmsh.y"
+#line 2210 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
-        Shape TheShape;
-        List_Read((yyvsp[(4) - (5)].l), i, &TheShape);
-        ColorShape(TheShape.Type, TheShape.Num, (yyvsp[(2) - (5)].u));
+	Shape TheShape;
+	List_Read((yyvsp[(4) - (5)].l), i, &TheShape);
+	ColorShape(TheShape.Type, TheShape.Num, (yyvsp[(2) - (5)].u));
       }
       List_Delete((yyvsp[(4) - (5)].l));      
     ;}
     break;
 
   case 157:
-#line 2222 "Gmsh.y"
+#line 2224 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
-        VisibilityShape((yyvsp[(2) - (3)].c), i, 1);
+	VisibilityShape((yyvsp[(2) - (3)].c), i, 1);
       Free((yyvsp[(2) - (3)].c));
     ;}
     break;
 
   case 158:
-#line 2228 "Gmsh.y"
+#line 2230 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
-        VisibilityShape((yyvsp[(2) - (3)].c), i, 0);
+	VisibilityShape((yyvsp[(2) - (3)].c), i, 0);
       Free((yyvsp[(2) - (3)].c));
     ;}
     break;
 
   case 159:
-#line 2234 "Gmsh.y"
+#line 2236 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
-        Shape TheShape;
-        List_Read((yyvsp[(3) - (4)].l), i, &TheShape);
-        VisibilityShape(TheShape.Type, TheShape.Num, 1);
+	Shape TheShape;
+	List_Read((yyvsp[(3) - (4)].l), i, &TheShape);
+	VisibilityShape(TheShape.Type, TheShape.Num, 1);
       }
       List_Delete((yyvsp[(3) - (4)].l));
     ;}
     break;
 
   case 160:
-#line 2243 "Gmsh.y"
+#line 2245 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
-        Shape TheShape;
-        List_Read((yyvsp[(3) - (4)].l), i, &TheShape);
-        VisibilityShape(TheShape.Type, TheShape.Num, 0);
+	Shape TheShape;
+	List_Read((yyvsp[(3) - (4)].l), i, &TheShape);
+	VisibilityShape(TheShape.Type, TheShape.Num, 0);
       }
       List_Delete((yyvsp[(3) - (4)].l));
     ;}
     break;
 
   case 161:
-#line 2257 "Gmsh.y"
+#line 2259 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Include")){
         std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c));
-        // Warning: we *don't* close included files (to allow user
-        // functions in these files). If you need to include many many
-        // files and don't have functions in the files, use "Merge"
-        // instead: some OSes limit the number of files a process can
-        // open simultaneously. The right solution would be of course
-        // to modify FunctionManager to reopen the files instead of
-        // using the FILE pointer, but hey, I'm lazy...
-        Msg::StatusBar(2, true, "Reading '%s'", tmp.c_str());
-        ParseFile(tmp, false, true);
-        SetBoundingBox();
-        Msg::StatusBar(2, true, "Done reading '%s'", tmp.c_str());
+	// Warning: we *don't* close included files (to allow user
+	// functions in these files). If you need to include many many
+	// files and don't have functions in the files, use "Merge"
+	// instead: some OSes limit the number of files a process can
+	// open simultaneously. The right solution would be of course
+	// to modify FunctionManager to reopen the files instead of
+	// using the FILE pointer, but hey, I'm lazy...
+	Msg::StatusBar(2, true, "Reading '%s'", tmp.c_str());
+	ParseFile(tmp, false, true);
+	SetBoundingBox();
+	Msg::StatusBar(2, true, "Done reading '%s'", tmp.c_str());
       }
       else if(!strcmp((yyvsp[(1) - (3)].c), "Print")){
-        // make sure we have the latest data from GEO_Internals in GModel
-        // (fixes bug where we would have no geometry in the picture if
-        // the print command is in the same file as the geometry)
-        GModel::current()->importGEOInternals();
+	// make sure we have the latest data from GEO_Internals in GModel
+	// (fixes bug where we would have no geometry in the picture if
+	// the print command is in the same file as the geometry)
+	GModel::current()->importGEOInternals();
         std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c));
-        CreateOutputFile(tmp, CTX::instance()->print.format);
+	CreateOutputFile(tmp, CTX::instance()->print.format);
       }
       else if(!strcmp((yyvsp[(1) - (3)].c), "Save")){
-        GModel::current()->importGEOInternals();
+	GModel::current()->importGEOInternals();
         std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c));
-        CreateOutputFile(tmp, CTX::instance()->mesh.format);
+	CreateOutputFile(tmp, CTX::instance()->mesh.format);
       }
       else if(!strcmp((yyvsp[(1) - (3)].c), "Merge") || !strcmp((yyvsp[(1) - (3)].c), "MergeWithBoundingBox")){
-        // MergeWithBoundingBox is deprecated
+	// MergeWithBoundingBox is deprecated
         std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c));
-        MergeFile(tmp, true);
+	MergeFile(tmp, true);
       }
       else if(!strcmp((yyvsp[(1) - (3)].c), "System"))
-        SystemCall((yyvsp[(2) - (3)].c));
+	SystemCall((yyvsp[(2) - (3)].c));
       else if(!strcmp((yyvsp[(1) - (3)].c), "SetName"))
-        GModel::current()->setName((yyvsp[(2) - (3)].c));
+	GModel::current()->setName((yyvsp[(2) - (3)].c));
       else
-        yymsg(0, "Unknown command '%s'", (yyvsp[(1) - (3)].c));
+	yymsg(0, "Unknown command '%s'", (yyvsp[(1) - (3)].c));
       Free((yyvsp[(1) - (3)].c)); Free((yyvsp[(2) - (3)].c));
     ;}
     break;
 
   case 162:
-#line 2299 "Gmsh.y"
+#line 2301 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(1) - (7)].c), "Save") && !strcmp((yyvsp[(2) - (7)].c), "View")){
-        int index = (int)(yyvsp[(4) - (7)].d);
-        if(index >= 0 && index < (int)PView::list.size()){
+	int index = (int)(yyvsp[(4) - (7)].d);
+	if(index >= 0 && index < (int)PView::list.size()){
           std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(6) - (7)].c));
-          PView::list[index]->write(tmp, CTX::instance()->post.fileFormat);
-        }
-        else
-          yymsg(0, "Unknown view %d", index);
+	  PView::list[index]->write(tmp, CTX::instance()->post.fileFormat);
+	}
+	else
+	  yymsg(0, "Unknown view %d", index);
       }
       else
-        yymsg(0, "Unknown command '%s'", (yyvsp[(1) - (7)].c));
+	yymsg(0, "Unknown command '%s'", (yyvsp[(1) - (7)].c));
 #endif
       Free((yyvsp[(1) - (7)].c)); Free((yyvsp[(2) - (7)].c)); Free((yyvsp[(6) - (7)].c));
     ;}
     break;
 
   case 163:
-#line 2316 "Gmsh.y"
+#line 2318 "Gmsh.y"
     {
 #if defined(HAVE_POST) && defined(HAVE_MESH)
       if(!strcmp((yyvsp[(1) - (7)].c), "Background") && !strcmp((yyvsp[(2) - (7)].c), "Mesh")  && !strcmp((yyvsp[(3) - (7)].c), "View")){
-        int index = (int)(yyvsp[(5) - (7)].d);
-        if(index >= 0 && index < (int)PView::list.size())
-          GModel::current()->getFields()->setBackgroundMesh(index);
-        else
-          yymsg(0, "Unknown view %d", index);
+	int index = (int)(yyvsp[(5) - (7)].d);
+	if(index >= 0 && index < (int)PView::list.size())
+	  GModel::current()->getFields()->setBackgroundMesh(index);
+	else
+	  yymsg(0, "Unknown view %d", index);
       }
       else
-        yymsg(0, "Unknown command '%s'", (yyvsp[(1) - (7)].c));
+	yymsg(0, "Unknown command '%s'", (yyvsp[(1) - (7)].c));
 #endif
       Free((yyvsp[(1) - (7)].c)); Free((yyvsp[(2) - (7)].c)); Free((yyvsp[(3) - (7)].c));
     ;}
     break;
 
   case 164:
-#line 2331 "Gmsh.y"
+#line 2333 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Sleep")){
-        SleepInSeconds((yyvsp[(2) - (3)].d));
+	SleepInSeconds((yyvsp[(2) - (3)].d));
       }
       else if(!strcmp((yyvsp[(1) - (3)].c), "Remesh")){
-        yymsg(0, "Surface remeshing must be reinterfaced");
+	yymsg(0, "Surface remeshing must be reinterfaced");
       }
       else if(!strcmp((yyvsp[(1) - (3)].c), "Mesh")){
-        int lock = CTX::instance()->lock;
-        CTX::instance()->lock = 0;
-        GModel::current()->importGEOInternals();
-        GModel::current()->mesh((int)(yyvsp[(2) - (3)].d));
-        CTX::instance()->lock = lock;
+	int lock = CTX::instance()->lock;
+	CTX::instance()->lock = 0;
+	GModel::current()->importGEOInternals();
+	GModel::current()->mesh((int)(yyvsp[(2) - (3)].d));
+	CTX::instance()->lock = lock;
       }
       else
-        yymsg(0, "Unknown command '%s'", (yyvsp[(1) - (3)].c));
+	yymsg(0, "Unknown command '%s'", (yyvsp[(1) - (3)].c));
       Free((yyvsp[(1) - (3)].c));
     ;}
     break;
 
   case 165:
-#line 2350 "Gmsh.y"
+#line 2352 "Gmsh.y"
     {
 #if defined(HAVE_POST)
        try {
-         PluginManager::instance()->action((yyvsp[(3) - (7)].c), (yyvsp[(6) - (7)].c), 0);
+	 PluginManager::instance()->action((yyvsp[(3) - (7)].c), (yyvsp[(6) - (7)].c), 0);
        }
        catch(...) {
-         yymsg(0, "Unknown action '%s' or plugin '%s'", (yyvsp[(6) - (7)].c), (yyvsp[(3) - (7)].c));
+	 yymsg(0, "Unknown action '%s' or plugin '%s'", (yyvsp[(6) - (7)].c), (yyvsp[(3) - (7)].c));
        }
 #endif
        Free((yyvsp[(3) - (7)].c)); Free((yyvsp[(6) - (7)].c));
@@ -6401,41 +6403,41 @@ yyreduce:
     break;
 
   case 166:
-#line 2362 "Gmsh.y"
+#line 2364 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromAllViews"))
-        PView::combine(false, 1, CTX::instance()->post.combineRemoveOrig);
+	PView::combine(false, 1, CTX::instance()->post.combineRemoveOrig);
       else if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromVisibleViews"))
-        PView::combine(false, 0, CTX::instance()->post.combineRemoveOrig);
+	PView::combine(false, 0, CTX::instance()->post.combineRemoveOrig);
       else if(!strcmp((yyvsp[(2) - (3)].c), "ElementsByViewName"))
-        PView::combine(false, 2, CTX::instance()->post.combineRemoveOrig);
+	PView::combine(false, 2, CTX::instance()->post.combineRemoveOrig);
       else if(!strcmp((yyvsp[(2) - (3)].c), "TimeStepsFromAllViews"))
-        PView::combine(true, 1, CTX::instance()->post.combineRemoveOrig);
+	PView::combine(true, 1, CTX::instance()->post.combineRemoveOrig);
       else if(!strcmp((yyvsp[(2) - (3)].c), "TimeStepsFromVisibleViews"))
-        PView::combine(true, 0, CTX::instance()->post.combineRemoveOrig);
+	PView::combine(true, 0, CTX::instance()->post.combineRemoveOrig);
       else if(!strcmp((yyvsp[(2) - (3)].c), "TimeStepsByViewName"))
-        PView::combine(true, 2, CTX::instance()->post.combineRemoveOrig);
+	PView::combine(true, 2, CTX::instance()->post.combineRemoveOrig);
       else if(!strcmp((yyvsp[(2) - (3)].c), "Views"))
-        PView::combine(false, 1, CTX::instance()->post.combineRemoveOrig);
+	PView::combine(false, 1, CTX::instance()->post.combineRemoveOrig);
       else if(!strcmp((yyvsp[(2) - (3)].c), "TimeSteps"))
-        PView::combine(true, 2, CTX::instance()->post.combineRemoveOrig);
+	PView::combine(true, 2, CTX::instance()->post.combineRemoveOrig);
       else
-        yymsg(0, "Unknown 'Combine' command");
+	yymsg(0, "Unknown 'Combine' command");
 #endif
       Free((yyvsp[(2) - (3)].c));
     ;}
     break;
 
   case 167:
-#line 2386 "Gmsh.y"
+#line 2388 "Gmsh.y"
     {
       exit(0);
     ;}
     break;
 
   case 168:
-#line 2390 "Gmsh.y"
+#line 2392 "Gmsh.y"
     {
       // FIXME: this is a hack to force a transfer from the old DB to
       // the new DB. This will become unnecessary if/when we fill the 
@@ -6445,7 +6447,7 @@ yyreduce:
     break;
 
   case 169:
-#line 2397 "Gmsh.y"
+#line 2399 "Gmsh.y"
     {
       CTX::instance()->forcedBBox = 0;
       GModel::current()->importGEOInternals();
@@ -6454,7 +6456,7 @@ yyreduce:
     break;
 
   case 170:
-#line 2403 "Gmsh.y"
+#line 2405 "Gmsh.y"
     {
       CTX::instance()->forcedBBox = 1;
       SetBoundingBox((yyvsp[(3) - (15)].d), (yyvsp[(5) - (15)].d), (yyvsp[(7) - (15)].d), (yyvsp[(9) - (15)].d), (yyvsp[(11) - (15)].d), (yyvsp[(13) - (15)].d));
@@ -6462,7 +6464,7 @@ yyreduce:
     break;
 
   case 171:
-#line 2408 "Gmsh.y"
+#line 2410 "Gmsh.y"
     {
 #if defined(HAVE_OPENGL)
       drawContext::global()->draw();
@@ -6471,14 +6473,14 @@ yyreduce:
     break;
 
   case 172:
-#line 2414 "Gmsh.y"
+#line 2416 "Gmsh.y"
     {
        GModel::current()->createTopologyFromMesh();
     ;}
     break;
 
   case 173:
-#line 2424 "Gmsh.y"
+#line 2426 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (6)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (6)].d);
@@ -6487,18 +6489,18 @@ yyreduce:
       fgetpos(gmsh_yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]);
       yylinenoImbricatedLoopsTab[ImbricatedLoop] = gmsh_yylineno;
       if((yyvsp[(3) - (6)].d) > (yyvsp[(5) - (6)].d))
-        skip_until("For", "EndFor");
+	skip_until("For", "EndFor");
       else
-        ImbricatedLoop++;
+	ImbricatedLoop++;
       if(ImbricatedLoop > MAX_RECUR_LOOPS - 1){
-        yymsg(0, "Reached maximum number of imbricated loops");
-        ImbricatedLoop = MAX_RECUR_LOOPS - 1;
+	yymsg(0, "Reached maximum number of imbricated loops");
+	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
       }
     ;}
     break;
 
   case 174:
-#line 2441 "Gmsh.y"
+#line 2443 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (8)].d);
@@ -6507,18 +6509,18 @@ yyreduce:
       fgetpos(gmsh_yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]);
       yylinenoImbricatedLoopsTab[ImbricatedLoop] = gmsh_yylineno;
       if(((yyvsp[(7) - (8)].d) > 0. && (yyvsp[(3) - (8)].d) > (yyvsp[(5) - (8)].d)) || ((yyvsp[(7) - (8)].d) < 0. && (yyvsp[(3) - (8)].d) < (yyvsp[(5) - (8)].d)))
-        skip_until("For", "EndFor");
+	skip_until("For", "EndFor");
       else
-        ImbricatedLoop++;
+	ImbricatedLoop++;
       if(ImbricatedLoop > MAX_RECUR_LOOPS - 1){
-        yymsg(0, "Reached maximum number of imbricated loops");
-        ImbricatedLoop = MAX_RECUR_LOOPS - 1;
+	yymsg(0, "Reached maximum number of imbricated loops");
+	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
       }
     ;}
     break;
 
   case 175:
-#line 2458 "Gmsh.y"
+#line 2460 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (8)].d);
@@ -6529,18 +6531,18 @@ yyreduce:
       fgetpos(gmsh_yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]);
       yylinenoImbricatedLoopsTab[ImbricatedLoop] = gmsh_yylineno;
       if((yyvsp[(5) - (8)].d) > (yyvsp[(7) - (8)].d)) 
-        skip_until("For", "EndFor");
+	skip_until("For", "EndFor");
       else
-        ImbricatedLoop++;
+	ImbricatedLoop++;
       if(ImbricatedLoop > MAX_RECUR_LOOPS - 1){
-        yymsg(0, "Reached maximum number of imbricated loops");
-        ImbricatedLoop = MAX_RECUR_LOOPS - 1;
+	yymsg(0, "Reached maximum number of imbricated loops");
+	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
       }
     ;}
     break;
 
   case 176:
-#line 2477 "Gmsh.y"
+#line 2479 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (10)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (10)].d);
@@ -6551,25 +6553,25 @@ yyreduce:
       fgetpos(gmsh_yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]);
       yylinenoImbricatedLoopsTab[ImbricatedLoop] = gmsh_yylineno;
       if(((yyvsp[(9) - (10)].d) > 0. && (yyvsp[(5) - (10)].d) > (yyvsp[(7) - (10)].d)) || ((yyvsp[(9) - (10)].d) < 0. && (yyvsp[(5) - (10)].d) < (yyvsp[(7) - (10)].d)))
-        skip_until("For", "EndFor");
+	skip_until("For", "EndFor");
       else
-        ImbricatedLoop++;
+	ImbricatedLoop++;
       if(ImbricatedLoop > MAX_RECUR_LOOPS - 1){
-        yymsg(0, "Reached maximum number of imbricated loops");
-        ImbricatedLoop = MAX_RECUR_LOOPS - 1;
+	yymsg(0, "Reached maximum number of imbricated loops");
+	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
       }
     ;}
     break;
 
   case 177:
-#line 2496 "Gmsh.y"
+#line 2498 "Gmsh.y"
     {
       if(ImbricatedLoop <= 0){
-        yymsg(0, "Invalid For/EndFor loop");
-        ImbricatedLoop = 0;
+	yymsg(0, "Invalid For/EndFor loop");
+	ImbricatedLoop = 0;
       }
       else{
-        double step = LoopControlVariablesTab[ImbricatedLoop - 1][2];
+	double step = LoopControlVariablesTab[ImbricatedLoop - 1][2];
         const char *name = LoopControlVariablesNameTab[ImbricatedLoop - 1];
         if(name){
           if(!gmsh_yysymbols.count(name))
@@ -6582,422 +6584,422 @@ yyreduce:
         else{
           LoopControlVariablesTab[ImbricatedLoop - 1][0] += step;
         }
-        double x0 = LoopControlVariablesTab[ImbricatedLoop - 1][0];
-        double x1 = LoopControlVariablesTab[ImbricatedLoop - 1][1];
+	double x0 = LoopControlVariablesTab[ImbricatedLoop - 1][0];
+	double x1 = LoopControlVariablesTab[ImbricatedLoop - 1][1];
         if((step > 0. && x0 <= x1) || (step < 0. && x0 >= x1)){
-          fsetpos(gmsh_yyin, &yyposImbricatedLoopsTab[ImbricatedLoop - 1]);
-          gmsh_yylineno = yylinenoImbricatedLoopsTab[ImbricatedLoop - 1];
-        }
-        else
-          ImbricatedLoop--;
+	  fsetpos(gmsh_yyin, &yyposImbricatedLoopsTab[ImbricatedLoop - 1]);
+	  gmsh_yylineno = yylinenoImbricatedLoopsTab[ImbricatedLoop - 1];
+	}
+	else
+	  ImbricatedLoop--;
       }
     ;}
     break;
 
   case 178:
-#line 2526 "Gmsh.y"
+#line 2528 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->createFunction
          ((yyvsp[(2) - (2)].c), gmsh_yyin, gmsh_yyname, gmsh_yylineno))
-        yymsg(0, "Redefinition of function %s", (yyvsp[(2) - (2)].c));
+	yymsg(0, "Redefinition of function %s", (yyvsp[(2) - (2)].c));
       skip_until(NULL, "Return");
       //FIXME: wee leak $2
     ;}
     break;
 
   case 179:
-#line 2534 "Gmsh.y"
+#line 2536 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->leaveFunction
          (&gmsh_yyin, gmsh_yyname, gmsh_yylineno))
-        yymsg(0, "Error while exiting function");
+	yymsg(0, "Error while exiting function");
     ;}
     break;
 
   case 180:
-#line 2540 "Gmsh.y"
+#line 2542 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->enterFunction
          ((yyvsp[(2) - (3)].c), &gmsh_yyin, gmsh_yyname, gmsh_yylineno))
-        yymsg(0, "Unknown function %s", (yyvsp[(2) - (3)].c));
+	yymsg(0, "Unknown function %s", (yyvsp[(2) - (3)].c));
       //FIXME: wee leak $2
     ;}
     break;
 
   case 181:
-#line 2547 "Gmsh.y"
+#line 2549 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].d)) skip_until("If", "EndIf");
     ;}
     break;
 
   case 182:
-#line 2551 "Gmsh.y"
+#line 2553 "Gmsh.y"
     {
     ;}
     break;
 
   case 183:
-#line 2560 "Gmsh.y"
+#line 2562 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (5)].l), 
-                    (yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
-                    NULL, (yyval.l));
+		    (yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
+		    NULL, (yyval.l));
       List_Delete((yyvsp[(4) - (5)].l));
     ;}
     break;
 
   case 184:
-#line 2568 "Gmsh.y"
+#line 2570 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (11)].l), 
-                    0., 0., 0., (yyvsp[(3) - (11)].v)[0], (yyvsp[(3) - (11)].v)[1], (yyvsp[(3) - (11)].v)[2], (yyvsp[(5) - (11)].v)[0], (yyvsp[(5) - (11)].v)[1], (yyvsp[(5) - (11)].v)[2], (yyvsp[(7) - (11)].d),
-                    NULL, (yyval.l));
+		    0., 0., 0., (yyvsp[(3) - (11)].v)[0], (yyvsp[(3) - (11)].v)[1], (yyvsp[(3) - (11)].v)[2], (yyvsp[(5) - (11)].v)[0], (yyvsp[(5) - (11)].v)[1], (yyvsp[(5) - (11)].v)[2], (yyvsp[(7) - (11)].d),
+		    NULL, (yyval.l));
       List_Delete((yyvsp[(10) - (11)].l));
     ;}
     break;
 
   case 185:
-#line 2576 "Gmsh.y"
+#line 2578 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (13)].l), 
-                    (yyvsp[(3) - (13)].v)[0], (yyvsp[(3) - (13)].v)[1], (yyvsp[(3) - (13)].v)[2], (yyvsp[(5) - (13)].v)[0], (yyvsp[(5) - (13)].v)[1], (yyvsp[(5) - (13)].v)[2], (yyvsp[(7) - (13)].v)[0], (yyvsp[(7) - (13)].v)[1], (yyvsp[(7) - (13)].v)[2], (yyvsp[(9) - (13)].d),
-                    NULL, (yyval.l));
+		    (yyvsp[(3) - (13)].v)[0], (yyvsp[(3) - (13)].v)[1], (yyvsp[(3) - (13)].v)[2], (yyvsp[(5) - (13)].v)[0], (yyvsp[(5) - (13)].v)[1], (yyvsp[(5) - (13)].v)[2], (yyvsp[(7) - (13)].v)[0], (yyvsp[(7) - (13)].v)[1], (yyvsp[(7) - (13)].v)[2], (yyvsp[(9) - (13)].d),
+		    NULL, (yyval.l));
       List_Delete((yyvsp[(12) - (13)].l));
     ;}
     break;
 
   case 186:
-#line 2584 "Gmsh.y"
+#line 2586 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 187:
-#line 2588 "Gmsh.y"
+#line 2590 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (7)].l), 
-                    (yyvsp[(2) - (7)].v)[0], (yyvsp[(2) - (7)].v)[1], (yyvsp[(2) - (7)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
-                    &extr, (yyval.l));
+		    (yyvsp[(2) - (7)].v)[0], (yyvsp[(2) - (7)].v)[1], (yyvsp[(2) - (7)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
+		    &extr, (yyval.l));
       List_Delete((yyvsp[(4) - (7)].l));
     ;}
     break;
 
   case 188:
-#line 2596 "Gmsh.y"
+#line 2598 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 189:
-#line 2600 "Gmsh.y"
+#line 2602 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (13)].l), 
-                    0., 0., 0., (yyvsp[(3) - (13)].v)[0], (yyvsp[(3) - (13)].v)[1], (yyvsp[(3) - (13)].v)[2], (yyvsp[(5) - (13)].v)[0], (yyvsp[(5) - (13)].v)[1], (yyvsp[(5) - (13)].v)[2], (yyvsp[(7) - (13)].d),
-                    &extr, (yyval.l));
+		    0., 0., 0., (yyvsp[(3) - (13)].v)[0], (yyvsp[(3) - (13)].v)[1], (yyvsp[(3) - (13)].v)[2], (yyvsp[(5) - (13)].v)[0], (yyvsp[(5) - (13)].v)[1], (yyvsp[(5) - (13)].v)[2], (yyvsp[(7) - (13)].d),
+		    &extr, (yyval.l));
       List_Delete((yyvsp[(10) - (13)].l));
     ;}
     break;
 
   case 190:
-#line 2608 "Gmsh.y"
+#line 2610 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 191:
-#line 2612 "Gmsh.y"
+#line 2614 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (15)].l), 
-                    (yyvsp[(3) - (15)].v)[0], (yyvsp[(3) - (15)].v)[1], (yyvsp[(3) - (15)].v)[2], (yyvsp[(5) - (15)].v)[0], (yyvsp[(5) - (15)].v)[1], (yyvsp[(5) - (15)].v)[2], (yyvsp[(7) - (15)].v)[0], (yyvsp[(7) - (15)].v)[1], (yyvsp[(7) - (15)].v)[2], (yyvsp[(9) - (15)].d),
-                    &extr, (yyval.l));
+		    (yyvsp[(3) - (15)].v)[0], (yyvsp[(3) - (15)].v)[1], (yyvsp[(3) - (15)].v)[2], (yyvsp[(5) - (15)].v)[0], (yyvsp[(5) - (15)].v)[1], (yyvsp[(5) - (15)].v)[2], (yyvsp[(7) - (15)].v)[0], (yyvsp[(7) - (15)].v)[1], (yyvsp[(7) - (15)].v)[2], (yyvsp[(9) - (15)].d),
+		    &extr, (yyval.l));
       List_Delete((yyvsp[(12) - (15)].l));
     ;}
     break;
 
   case 192:
-#line 2620 "Gmsh.y"
+#line 2622 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 193:
-#line 2624 "Gmsh.y"
+#line 2626 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(BOUNDARY_LAYER, (yyvsp[(3) - (6)].l), 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
-                    &extr, (yyval.l));
+		    &extr, (yyval.l));
       List_Delete((yyvsp[(3) - (6)].l));
     ;}
     break;
 
   case 194:
-#line 2633 "Gmsh.y"
+#line 2635 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (8)].d), 
-                   (yyvsp[(6) - (8)].v)[0], (yyvsp[(6) - (8)].v)[1], (yyvsp[(6) - (8)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
-                   NULL, (yyval.l));
+		   (yyvsp[(6) - (8)].v)[0], (yyvsp[(6) - (8)].v)[1], (yyvsp[(6) - (8)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
+		   NULL, (yyval.l));
     ;}
     break;
 
   case 195:
-#line 2640 "Gmsh.y"
+#line 2642 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (8)].d), 
-                   (yyvsp[(6) - (8)].v)[0], (yyvsp[(6) - (8)].v)[1], (yyvsp[(6) - (8)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
-                   NULL, (yyval.l));
+		   (yyvsp[(6) - (8)].v)[0], (yyvsp[(6) - (8)].v)[1], (yyvsp[(6) - (8)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
+		   NULL, (yyval.l));
     ;}
     break;
 
   case 196:
-#line 2647 "Gmsh.y"
+#line 2649 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (8)].d), 
-                   (yyvsp[(6) - (8)].v)[0], (yyvsp[(6) - (8)].v)[1], (yyvsp[(6) - (8)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
-                   NULL, (yyval.l));
+		   (yyvsp[(6) - (8)].v)[0], (yyvsp[(6) - (8)].v)[1], (yyvsp[(6) - (8)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
+		   NULL, (yyval.l));
     ;}
     break;
 
   case 197:
-#line 2654 "Gmsh.y"
+#line 2656 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d), 
-                   0., 0., 0., (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], (yyvsp[(8) - (12)].v)[0], (yyvsp[(8) - (12)].v)[1], (yyvsp[(8) - (12)].v)[2], (yyvsp[(10) - (12)].d),
-                   NULL, (yyval.l));
+		   0., 0., 0., (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], (yyvsp[(8) - (12)].v)[0], (yyvsp[(8) - (12)].v)[1], (yyvsp[(8) - (12)].v)[2], (yyvsp[(10) - (12)].d),
+		   NULL, (yyval.l));
     ;}
     break;
 
   case 198:
-#line 2661 "Gmsh.y"
+#line 2663 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d), 
-                   0., 0., 0., (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], (yyvsp[(8) - (12)].v)[0], (yyvsp[(8) - (12)].v)[1], (yyvsp[(8) - (12)].v)[2], (yyvsp[(10) - (12)].d),
-                   NULL, (yyval.l));
+		   0., 0., 0., (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], (yyvsp[(8) - (12)].v)[0], (yyvsp[(8) - (12)].v)[1], (yyvsp[(8) - (12)].v)[2], (yyvsp[(10) - (12)].d),
+		   NULL, (yyval.l));
     ;}
     break;
 
   case 199:
-#line 2668 "Gmsh.y"
+#line 2670 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d), 
-                   0., 0., 0., (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], (yyvsp[(8) - (12)].v)[0], (yyvsp[(8) - (12)].v)[1], (yyvsp[(8) - (12)].v)[2], (yyvsp[(10) - (12)].d),
-                   NULL, (yyval.l));
+		   0., 0., 0., (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], (yyvsp[(8) - (12)].v)[0], (yyvsp[(8) - (12)].v)[1], (yyvsp[(8) - (12)].v)[2], (yyvsp[(10) - (12)].d),
+		   NULL, (yyval.l));
     ;}
     break;
 
   case 200:
-#line 2675 "Gmsh.y"
+#line 2677 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (14)].d), 
-                   (yyvsp[(6) - (14)].v)[0], (yyvsp[(6) - (14)].v)[1], (yyvsp[(6) - (14)].v)[2], (yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2], (yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2], (yyvsp[(12) - (14)].d),
-                   NULL, (yyval.l));
+		   (yyvsp[(6) - (14)].v)[0], (yyvsp[(6) - (14)].v)[1], (yyvsp[(6) - (14)].v)[2], (yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2], (yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2], (yyvsp[(12) - (14)].d),
+		   NULL, (yyval.l));
     ;}
     break;
 
   case 201:
-#line 2682 "Gmsh.y"
+#line 2684 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (14)].d), 
-                   (yyvsp[(6) - (14)].v)[0], (yyvsp[(6) - (14)].v)[1], (yyvsp[(6) - (14)].v)[2], (yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2], (yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2], (yyvsp[(12) - (14)].d),
-                   NULL, (yyval.l));
+		   (yyvsp[(6) - (14)].v)[0], (yyvsp[(6) - (14)].v)[1], (yyvsp[(6) - (14)].v)[2], (yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2], (yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2], (yyvsp[(12) - (14)].d),
+		   NULL, (yyval.l));
     ;}
     break;
 
   case 202:
-#line 2689 "Gmsh.y"
+#line 2691 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (14)].d), 
-                   (yyvsp[(6) - (14)].v)[0], (yyvsp[(6) - (14)].v)[1], (yyvsp[(6) - (14)].v)[2], (yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2], (yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2], (yyvsp[(12) - (14)].d),
-                   NULL, (yyval.l));
+		   (yyvsp[(6) - (14)].v)[0], (yyvsp[(6) - (14)].v)[1], (yyvsp[(6) - (14)].v)[2], (yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2], (yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2], (yyvsp[(12) - (14)].d),
+		   NULL, (yyval.l));
     ;}
     break;
 
   case 203:
-#line 2696 "Gmsh.y"
+#line 2698 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 204:
-#line 2700 "Gmsh.y"
+#line 2702 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d), 
-                   (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
-                   &extr, (yyval.l));
+		   (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
+		   &extr, (yyval.l));
     ;}
     break;
 
   case 205:
-#line 2707 "Gmsh.y"
+#line 2709 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 206:
-#line 2711 "Gmsh.y"
+#line 2713 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d), 
-                   (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
-                   &extr, (yyval.l));
+		   (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
+		   &extr, (yyval.l));
     ;}
     break;
 
   case 207:
-#line 2718 "Gmsh.y"
+#line 2720 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 208:
-#line 2722 "Gmsh.y"
+#line 2724 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d), 
-                   (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
-                   &extr, (yyval.l));
+		   (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
+		   &extr, (yyval.l));
     ;}
     break;
 
   case 209:
-#line 2729 "Gmsh.y"
+#line 2731 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 210:
-#line 2733 "Gmsh.y"
+#line 2735 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (16)].d), 
-                   0., 0., 0., (yyvsp[(6) - (16)].v)[0], (yyvsp[(6) - (16)].v)[1], (yyvsp[(6) - (16)].v)[2], (yyvsp[(8) - (16)].v)[0], (yyvsp[(8) - (16)].v)[1], (yyvsp[(8) - (16)].v)[2], (yyvsp[(10) - (16)].d),
-                   &extr, (yyval.l));
+		   0., 0., 0., (yyvsp[(6) - (16)].v)[0], (yyvsp[(6) - (16)].v)[1], (yyvsp[(6) - (16)].v)[2], (yyvsp[(8) - (16)].v)[0], (yyvsp[(8) - (16)].v)[1], (yyvsp[(8) - (16)].v)[2], (yyvsp[(10) - (16)].d),
+		   &extr, (yyval.l));
     ;}
     break;
 
   case 211:
-#line 2740 "Gmsh.y"
+#line 2742 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 212:
-#line 2744 "Gmsh.y"
+#line 2746 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (16)].d), 
-                   0., 0., 0., (yyvsp[(6) - (16)].v)[0], (yyvsp[(6) - (16)].v)[1], (yyvsp[(6) - (16)].v)[2], (yyvsp[(8) - (16)].v)[0], (yyvsp[(8) - (16)].v)[1], (yyvsp[(8) - (16)].v)[2], (yyvsp[(10) - (16)].d),
-                   &extr, (yyval.l));
+		   0., 0., 0., (yyvsp[(6) - (16)].v)[0], (yyvsp[(6) - (16)].v)[1], (yyvsp[(6) - (16)].v)[2], (yyvsp[(8) - (16)].v)[0], (yyvsp[(8) - (16)].v)[1], (yyvsp[(8) - (16)].v)[2], (yyvsp[(10) - (16)].d),
+		   &extr, (yyval.l));
     ;}
     break;
 
   case 213:
-#line 2751 "Gmsh.y"
+#line 2753 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 214:
-#line 2755 "Gmsh.y"
+#line 2757 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (16)].d), 
-                   0., 0., 0., (yyvsp[(6) - (16)].v)[0], (yyvsp[(6) - (16)].v)[1], (yyvsp[(6) - (16)].v)[2], (yyvsp[(8) - (16)].v)[0], (yyvsp[(8) - (16)].v)[1], (yyvsp[(8) - (16)].v)[2], (yyvsp[(10) - (16)].d),
-                   &extr, (yyval.l));
+		   0., 0., 0., (yyvsp[(6) - (16)].v)[0], (yyvsp[(6) - (16)].v)[1], (yyvsp[(6) - (16)].v)[2], (yyvsp[(8) - (16)].v)[0], (yyvsp[(8) - (16)].v)[1], (yyvsp[(8) - (16)].v)[2], (yyvsp[(10) - (16)].d),
+		   &extr, (yyval.l));
     ;}
     break;
 
   case 215:
-#line 2762 "Gmsh.y"
+#line 2764 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 216:
-#line 2766 "Gmsh.y"
+#line 2768 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (18)].d), 
-                   (yyvsp[(6) - (18)].v)[0], (yyvsp[(6) - (18)].v)[1], (yyvsp[(6) - (18)].v)[2], (yyvsp[(8) - (18)].v)[0], (yyvsp[(8) - (18)].v)[1], (yyvsp[(8) - (18)].v)[2], (yyvsp[(10) - (18)].v)[0], (yyvsp[(10) - (18)].v)[1], (yyvsp[(10) - (18)].v)[2], (yyvsp[(12) - (18)].d),
-                   &extr, (yyval.l));
+		   (yyvsp[(6) - (18)].v)[0], (yyvsp[(6) - (18)].v)[1], (yyvsp[(6) - (18)].v)[2], (yyvsp[(8) - (18)].v)[0], (yyvsp[(8) - (18)].v)[1], (yyvsp[(8) - (18)].v)[2], (yyvsp[(10) - (18)].v)[0], (yyvsp[(10) - (18)].v)[1], (yyvsp[(10) - (18)].v)[2], (yyvsp[(12) - (18)].d),
+		   &extr, (yyval.l));
     ;}
     break;
 
   case 217:
-#line 2773 "Gmsh.y"
+#line 2775 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 218:
-#line 2777 "Gmsh.y"
+#line 2779 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (18)].d), 
-                   (yyvsp[(6) - (18)].v)[0], (yyvsp[(6) - (18)].v)[1], (yyvsp[(6) - (18)].v)[2], (yyvsp[(8) - (18)].v)[0], (yyvsp[(8) - (18)].v)[1], (yyvsp[(8) - (18)].v)[2], (yyvsp[(10) - (18)].v)[0], (yyvsp[(10) - (18)].v)[1], (yyvsp[(10) - (18)].v)[2], (yyvsp[(12) - (18)].d),
-                   &extr, (yyval.l));
+		   (yyvsp[(6) - (18)].v)[0], (yyvsp[(6) - (18)].v)[1], (yyvsp[(6) - (18)].v)[2], (yyvsp[(8) - (18)].v)[0], (yyvsp[(8) - (18)].v)[1], (yyvsp[(8) - (18)].v)[2], (yyvsp[(10) - (18)].v)[0], (yyvsp[(10) - (18)].v)[1], (yyvsp[(10) - (18)].v)[2], (yyvsp[(12) - (18)].d),
+		   &extr, (yyval.l));
     ;}
     break;
 
   case 219:
-#line 2784 "Gmsh.y"
+#line 2786 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 220:
-#line 2788 "Gmsh.y"
+#line 2790 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (18)].d), 
-                   (yyvsp[(6) - (18)].v)[0], (yyvsp[(6) - (18)].v)[1], (yyvsp[(6) - (18)].v)[2], (yyvsp[(8) - (18)].v)[0], (yyvsp[(8) - (18)].v)[1], (yyvsp[(8) - (18)].v)[2], (yyvsp[(10) - (18)].v)[0], (yyvsp[(10) - (18)].v)[1], (yyvsp[(10) - (18)].v)[2], (yyvsp[(12) - (18)].d),
-                   &extr, (yyval.l));
+		   (yyvsp[(6) - (18)].v)[0], (yyvsp[(6) - (18)].v)[1], (yyvsp[(6) - (18)].v)[2], (yyvsp[(8) - (18)].v)[0], (yyvsp[(8) - (18)].v)[1], (yyvsp[(8) - (18)].v)[2], (yyvsp[(10) - (18)].v)[0], (yyvsp[(10) - (18)].v)[1], (yyvsp[(10) - (18)].v)[2], (yyvsp[(12) - (18)].d),
+		   &extr, (yyval.l));
     ;}
     break;
 
   case 221:
-#line 2799 "Gmsh.y"
+#line 2801 "Gmsh.y"
     {
     ;}
     break;
 
   case 222:
-#line 2802 "Gmsh.y"
+#line 2804 "Gmsh.y"
     {
     ;}
     break;
 
   case 223:
-#line 2808 "Gmsh.y"
+#line 2810 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = 1;
@@ -7009,48 +7011,48 @@ yyreduce:
     break;
 
   case 224:
-#line 2817 "Gmsh.y"
+#line 2819 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = List_Nbr((yyvsp[(3) - (7)].l));
       if(List_Nbr((yyvsp[(3) - (7)].l)) == List_Nbr((yyvsp[(5) - (7)].l))){
-        extr.mesh.NbElmLayer.clear();
-        extr.mesh.hLayer.clear();
-        for(int i = 0; i < List_Nbr((yyvsp[(3) - (7)].l)); i++){
-          double d;
-          List_Read((yyvsp[(3) - (7)].l), i, &d);
-          extr.mesh.NbElmLayer.push_back((d > 0) ? (int)d : 1);
-          List_Read((yyvsp[(5) - (7)].l), i, &d);
-          extr.mesh.hLayer.push_back(d);
-        }
+	extr.mesh.NbElmLayer.clear();
+	extr.mesh.hLayer.clear();
+	for(int i = 0; i < List_Nbr((yyvsp[(3) - (7)].l)); i++){
+	  double d;
+	  List_Read((yyvsp[(3) - (7)].l), i, &d);
+	  extr.mesh.NbElmLayer.push_back((d > 0) ? (int)d : 1);
+	  List_Read((yyvsp[(5) - (7)].l), i, &d);
+	  extr.mesh.hLayer.push_back(d);
+	}
       }
       else
-        yymsg(0, "Wrong layer definition {%d, %d}", List_Nbr((yyvsp[(3) - (7)].l)), List_Nbr((yyvsp[(5) - (7)].l)));
+	yymsg(0, "Wrong layer definition {%d, %d}", List_Nbr((yyvsp[(3) - (7)].l)), List_Nbr((yyvsp[(5) - (7)].l)));
       List_Delete((yyvsp[(3) - (7)].l));
       List_Delete((yyvsp[(5) - (7)].l));
     ;}
     break;
 
   case 225:
-#line 2837 "Gmsh.y"
+#line 2839 "Gmsh.y"
     {
       yymsg(0, "Explicit region numbers in layers are deprecated");
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = List_Nbr((yyvsp[(3) - (9)].l));
       if(List_Nbr((yyvsp[(3) - (9)].l)) == List_Nbr((yyvsp[(5) - (9)].l)) && List_Nbr((yyvsp[(3) - (9)].l)) == List_Nbr((yyvsp[(7) - (9)].l))){
-        extr.mesh.NbElmLayer.clear();
-        extr.mesh.hLayer.clear();
-        for(int i = 0; i < List_Nbr((yyvsp[(3) - (9)].l)); i++){
-          double d;
-          List_Read((yyvsp[(3) - (9)].l), i, &d);
-          extr.mesh.NbElmLayer.push_back((d > 0) ? (int)d : 1);
-          List_Read((yyvsp[(7) - (9)].l), i, &d);
-          extr.mesh.hLayer.push_back(d);
-        }
+	extr.mesh.NbElmLayer.clear();
+	extr.mesh.hLayer.clear();
+	for(int i = 0; i < List_Nbr((yyvsp[(3) - (9)].l)); i++){
+	  double d;
+	  List_Read((yyvsp[(3) - (9)].l), i, &d);
+	  extr.mesh.NbElmLayer.push_back((d > 0) ? (int)d : 1);
+	  List_Read((yyvsp[(7) - (9)].l), i, &d);
+	  extr.mesh.hLayer.push_back(d);
+	}
       }
       else
-        yymsg(0, "Wrong layer definition {%d, %d, %d}", List_Nbr((yyvsp[(3) - (9)].l)), 
-              List_Nbr((yyvsp[(5) - (9)].l)), List_Nbr((yyvsp[(7) - (9)].l)));
+	yymsg(0, "Wrong layer definition {%d, %d, %d}", List_Nbr((yyvsp[(3) - (9)].l)), 
+	      List_Nbr((yyvsp[(5) - (9)].l)), List_Nbr((yyvsp[(7) - (9)].l)));
       List_Delete((yyvsp[(3) - (9)].l));
       List_Delete((yyvsp[(5) - (9)].l));
       List_Delete((yyvsp[(7) - (9)].l));
@@ -7058,43 +7060,43 @@ yyreduce:
     break;
 
   case 226:
-#line 2860 "Gmsh.y"
+#line 2862 "Gmsh.y"
     {
       extr.mesh.Recombine = true;
     ;}
     break;
 
   case 227:
-#line 2864 "Gmsh.y"
+#line 2866 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindSurface(num)){
-        yymsg(0, "Surface %d already exists", num);
+	yymsg(0, "Surface %d already exists", num);
       }
       else{
-        Surface *s = Create_Surface(num, MSH_SURF_DISCRETE);
-        Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &s);
-        extr.mesh.Holes[num].first = (yyvsp[(8) - (9)].d);
-        extr.mesh.Holes[num].second.clear();
-        for(int i = 0; i < List_Nbr((yyvsp[(6) - (9)].l)); i++){
-          double d;
-          List_Read((yyvsp[(6) - (9)].l), i, &d);
-          extr.mesh.Holes[num].second.push_back((int)d);
-        }
+	Surface *s = Create_Surface(num, MSH_SURF_DISCRETE);
+	Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &s);
+	extr.mesh.Holes[num].first = (yyvsp[(8) - (9)].d);
+	extr.mesh.Holes[num].second.clear();
+	for(int i = 0; i < List_Nbr((yyvsp[(6) - (9)].l)); i++){
+	  double d;
+	  List_Read((yyvsp[(6) - (9)].l), i, &d);
+	  extr.mesh.Holes[num].second.push_back((int)d);
+	}
       }
       List_Delete((yyvsp[(6) - (9)].l));
     ;}
     break;
 
   case 228:
-#line 2887 "Gmsh.y"
+#line 2889 "Gmsh.y"
     {
       (yyval.i) = 1; // harmonic
     ;}
     break;
 
   case 229:
-#line 2891 "Gmsh.y"
+#line 2893 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "Harmonic"))
         (yyval.i) = 1;
@@ -7109,14 +7111,14 @@ yyreduce:
     break;
 
   case 230:
-#line 2906 "Gmsh.y"
+#line 2908 "Gmsh.y"
     {
       (yyval.v)[0] = (yyval.v)[1] = 1.;
     ;}
     break;
 
   case 231:
-#line 2910 "Gmsh.y"
+#line 2912 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Progression") || !strcmp((yyvsp[(2) - (3)].c), "Power"))
         (yyval.v)[0] = 1.;
@@ -7132,14 +7134,14 @@ yyreduce:
     break;
 
   case 232:
-#line 2925 "Gmsh.y"
+#line 2927 "Gmsh.y"
     {
       (yyval.i) = -1; // left
     ;}
     break;
 
   case 233:
-#line 2929 "Gmsh.y"
+#line 2931 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "Right"))
         (yyval.i) = 1;
@@ -7152,35 +7154,35 @@ yyreduce:
     break;
 
   case 234:
-#line 2941 "Gmsh.y"
+#line 2943 "Gmsh.y"
     {
      (yyval.l) = List_Create(1, 1, sizeof(double));
    ;}
     break;
 
   case 235:
-#line 2945 "Gmsh.y"
+#line 2947 "Gmsh.y"
     {
      (yyval.l) = (yyvsp[(2) - (2)].l);
    ;}
     break;
 
   case 236:
-#line 2950 "Gmsh.y"
+#line 2952 "Gmsh.y"
     {
       (yyval.i) = 45;
     ;}
     break;
 
   case 237:
-#line 2954 "Gmsh.y"
+#line 2956 "Gmsh.y"
     {
       (yyval.i) = (int)(yyvsp[(2) - (2)].d);
     ;}
     break;
 
   case 238:
-#line 2961 "Gmsh.y"
+#line 2963 "Gmsh.y"
     {
       int type = (int)(yyvsp[(6) - (7)].v)[0];
       double coef = fabs((yyvsp[(6) - (7)].v)[1]);
@@ -7239,7 +7241,7 @@ yyreduce:
     break;
 
   case 239:
-#line 3017 "Gmsh.y"
+#line 3019 "Gmsh.y"
     {
       int k = List_Nbr((yyvsp[(4) - (6)].l));
       if(k != 0 && k != 3 && k != 4){
@@ -7312,7 +7314,7 @@ yyreduce:
     break;
 
   case 240:
-#line 3087 "Gmsh.y"
+#line 3089 "Gmsh.y"
     {
       yymsg(1, "Elliptic Surface is deprecated: use Transfinite instead (with smoothing)");
       List_Delete((yyvsp[(7) - (8)].l));
@@ -7320,7 +7322,7 @@ yyreduce:
     break;
 
   case 241:
-#line 3092 "Gmsh.y"
+#line 3094 "Gmsh.y"
     {
       int k = List_Nbr((yyvsp[(4) - (5)].l));
       if(k != 0 && k != 6 && k != 8){
@@ -7390,10 +7392,10 @@ yyreduce:
     break;
 
   case 242:
-#line 3159 "Gmsh.y"
+#line 3161 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (5)].l)){
-        List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
+	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
         if(List_Nbr(tmp)){
           for(int i = 0; i < List_Nbr(tmp); i++){
             Surface *s;
@@ -7436,22 +7438,22 @@ yyreduce:
     break;
 
   case 243:
-#line 3202 "Gmsh.y"
+#line 3204 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
-        double d;
-        List_Read((yyvsp[(3) - (6)].l), i, &d);
-        int j = (int)d;
-        Surface *s = FindSurface(j);
-        if(s){
+	double d;
+	List_Read((yyvsp[(3) - (6)].l), i, &d);
+	int j = (int)d;
+	Surface *s = FindSurface(j);
+	if(s){
           s->TransfiniteSmoothing = (int)(yyvsp[(5) - (6)].d);
         }
         else{
-          GFace *gf = GModel::current()->getFaceByTag(j);
-          if(gf)
+	  GFace *gf = GModel::current()->getFaceByTag(j);
+	  if(gf)
             gf->meshAttributes.transfiniteSmoothing = (int)(yyvsp[(5) - (6)].d);
           else
-            yymsg(1, "Unknown surface %d", (int)(yyvsp[(5) - (6)].d));
+	    yymsg(1, "Unknown surface %d", (int)(yyvsp[(5) - (6)].d));
         }
       }
       List_Delete((yyvsp[(3) - (6)].l));
@@ -7459,11 +7461,11 @@ yyreduce:
     break;
 
   case 244:
-#line 3228 "Gmsh.y"
+#line 3230 "Gmsh.y"
     { 
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
-        setSurfaceEmbeddedPoints(s, (yyvsp[(3) - (10)].l));
+	setSurfaceEmbeddedPoints(s, (yyvsp[(3) - (10)].l));
       }
       else{
         GFace *gf = GModel::current()->getFaceByTag((int)(yyvsp[(8) - (10)].d));
@@ -7485,11 +7487,11 @@ yyreduce:
     break;
 
   case 245:
-#line 3251 "Gmsh.y"
+#line 3253 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
-        setSurfaceEmbeddedCurves(s, (yyvsp[(3) - (10)].l));
+	setSurfaceEmbeddedCurves(s, (yyvsp[(3) - (10)].l));
       }
       else{
         GFace *gf = GModel::current()->getFaceByTag((int)(yyvsp[(8) - (10)].d));
@@ -7511,26 +7513,26 @@ yyreduce:
     break;
 
   case 246:
-#line 3274 "Gmsh.y"
+#line 3276 "Gmsh.y"
     {
     ;}
     break;
 
   case 247:
-#line 3277 "Gmsh.y"
+#line 3279 "Gmsh.y"
     {
     ;}
     break;
 
   case 248:
-#line 3286 "Gmsh.y"
+#line 3288 "Gmsh.y"
     { 
       ReplaceAllDuplicates();
     ;}
     break;
 
   case 249:
-#line 3290 "Gmsh.y"
+#line 3292 "Gmsh.y"
     { 
       if(!strcmp((yyvsp[(2) - (3)].c), "Geometry"))
         ReplaceAllDuplicates();
@@ -7543,7 +7545,7 @@ yyreduce:
     break;
 
   case 250:
-#line 3307 "Gmsh.y"
+#line 3309 "Gmsh.y"
     {
     
     List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (11)].l));
@@ -7582,7 +7584,7 @@ yyreduce:
     break;
 
   case 251:
-#line 3344 "Gmsh.y"
+#line 3346 "Gmsh.y"
     {
     List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (11)].l));
     std::vector<int> domain;
@@ -7620,7 +7622,7 @@ yyreduce:
     break;
 
   case 252:
-#line 3380 "Gmsh.y"
+#line 3382 "Gmsh.y"
     {
     List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (11)].l));
     std::vector<int> domain;
@@ -7658,7 +7660,7 @@ yyreduce:
     break;
 
   case 253:
-#line 3415 "Gmsh.y"
+#line 3417 "Gmsh.y"
     {
     List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (11)].l));
     std::vector<int> domain;
@@ -7696,447 +7698,447 @@ yyreduce:
     break;
 
   case 254:
-#line 3454 "Gmsh.y"
+#line 3456 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d);           ;}
     break;
 
   case 255:
-#line 3455 "Gmsh.y"
+#line 3457 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (3)].d);           ;}
     break;
 
   case 256:
-#line 3456 "Gmsh.y"
+#line 3458 "Gmsh.y"
     { (yyval.d) = -(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 257:
-#line 3457 "Gmsh.y"
+#line 3459 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (2)].d);           ;}
     break;
 
   case 258:
-#line 3458 "Gmsh.y"
+#line 3460 "Gmsh.y"
     { (yyval.d) = !(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 259:
-#line 3459 "Gmsh.y"
+#line 3461 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 260:
-#line 3460 "Gmsh.y"
+#line 3462 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 261:
-#line 3461 "Gmsh.y"
+#line 3463 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 262:
-#line 3463 "Gmsh.y"
+#line 3465 "Gmsh.y"
     { 
       if(!(yyvsp[(3) - (3)].d))
-        yymsg(0, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
+	yymsg(0, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
       else
-        (yyval.d) = (yyvsp[(1) - (3)].d) / (yyvsp[(3) - (3)].d);     
+	(yyval.d) = (yyvsp[(1) - (3)].d) / (yyvsp[(3) - (3)].d);     
     ;}
     break;
 
   case 263:
-#line 3469 "Gmsh.y"
+#line 3471 "Gmsh.y"
     { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d);  ;}
     break;
 
   case 264:
-#line 3470 "Gmsh.y"
+#line 3472 "Gmsh.y"
     { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  ;}
     break;
 
   case 265:
-#line 3471 "Gmsh.y"
+#line 3473 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 266:
-#line 3472 "Gmsh.y"
+#line 3474 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 267:
-#line 3473 "Gmsh.y"
+#line 3475 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 268:
-#line 3474 "Gmsh.y"
+#line 3476 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 269:
-#line 3475 "Gmsh.y"
+#line 3477 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 270:
-#line 3476 "Gmsh.y"
+#line 3478 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 271:
-#line 3477 "Gmsh.y"
+#line 3479 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 272:
-#line 3478 "Gmsh.y"
+#line 3480 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 273:
-#line 3479 "Gmsh.y"
+#line 3481 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (5)].d) ? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d); ;}
     break;
 
   case 274:
-#line 3480 "Gmsh.y"
+#line 3482 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 275:
-#line 3481 "Gmsh.y"
+#line 3483 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 276:
-#line 3482 "Gmsh.y"
+#line 3484 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 277:
-#line 3483 "Gmsh.y"
+#line 3485 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 278:
-#line 3484 "Gmsh.y"
+#line 3486 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 279:
-#line 3485 "Gmsh.y"
+#line 3487 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 280:
-#line 3486 "Gmsh.y"
+#line 3488 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 281:
-#line 3487 "Gmsh.y"
+#line 3489 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 282:
-#line 3488 "Gmsh.y"
+#line 3490 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 283:
-#line 3489 "Gmsh.y"
+#line 3491 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 284:
-#line 3490 "Gmsh.y"
+#line 3492 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 285:
-#line 3491 "Gmsh.y"
+#line 3493 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 286:
-#line 3492 "Gmsh.y"
+#line 3494 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 287:
-#line 3493 "Gmsh.y"
+#line 3495 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 288:
-#line 3494 "Gmsh.y"
+#line 3496 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 289:
-#line 3495 "Gmsh.y"
+#line 3497 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 290:
-#line 3496 "Gmsh.y"
+#line 3498 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 291:
-#line 3497 "Gmsh.y"
+#line 3499 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 292:
-#line 3498 "Gmsh.y"
+#line 3500 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 293:
-#line 3499 "Gmsh.y"
+#line 3501 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 294:
-#line 3500 "Gmsh.y"
+#line 3502 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
   case 295:
-#line 3502 "Gmsh.y"
+#line 3504 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 296:
-#line 3503 "Gmsh.y"
+#line 3505 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 297:
-#line 3504 "Gmsh.y"
+#line 3506 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 298:
-#line 3505 "Gmsh.y"
+#line 3507 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 299:
-#line 3506 "Gmsh.y"
+#line 3508 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 300:
-#line 3507 "Gmsh.y"
+#line 3509 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 301:
-#line 3508 "Gmsh.y"
+#line 3510 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 302:
-#line 3509 "Gmsh.y"
+#line 3511 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 303:
-#line 3510 "Gmsh.y"
+#line 3512 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 304:
-#line 3511 "Gmsh.y"
+#line 3513 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 305:
-#line 3512 "Gmsh.y"
+#line 3514 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 306:
-#line 3513 "Gmsh.y"
+#line 3515 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 307:
-#line 3514 "Gmsh.y"
+#line 3516 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 308:
-#line 3515 "Gmsh.y"
+#line 3517 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 309:
-#line 3516 "Gmsh.y"
+#line 3518 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 310:
-#line 3517 "Gmsh.y"
+#line 3519 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 311:
-#line 3518 "Gmsh.y"
+#line 3520 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 312:
-#line 3519 "Gmsh.y"
+#line 3521 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 313:
-#line 3520 "Gmsh.y"
+#line 3522 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 314:
-#line 3521 "Gmsh.y"
+#line 3523 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 315:
-#line 3522 "Gmsh.y"
+#line 3524 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
   case 316:
-#line 3531 "Gmsh.y"
+#line 3533 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d); ;}
     break;
 
   case 317:
-#line 3532 "Gmsh.y"
+#line 3534 "Gmsh.y"
     { (yyval.d) = 3.141592653589793; ;}
     break;
 
   case 318:
-#line 3533 "Gmsh.y"
+#line 3535 "Gmsh.y"
     { (yyval.d) = Msg::GetCommRank(); ;}
     break;
 
   case 319:
-#line 3534 "Gmsh.y"
+#line 3536 "Gmsh.y"
     { (yyval.d) = Msg::GetCommSize(); ;}
     break;
 
   case 320:
-#line 3535 "Gmsh.y"
+#line 3537 "Gmsh.y"
     { (yyval.d) = GetGmshMajorVersion(); ;}
     break;
 
   case 321:
-#line 3536 "Gmsh.y"
+#line 3538 "Gmsh.y"
     { (yyval.d) = GetGmshMinorVersion(); ;}
     break;
 
   case 322:
-#line 3537 "Gmsh.y"
+#line 3539 "Gmsh.y"
     { (yyval.d) = GetGmshPatchVersion(); ;}
     break;
 
   case 323:
-#line 3542 "Gmsh.y"
+#line 3544 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (1)].c))){
-        yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (1)].c));
-        (yyval.d) = 0.;
+	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (1)].c));
+	(yyval.d) = 0.;
       }
       else
-        (yyval.d) = gmsh_yysymbols[(yyvsp[(1) - (1)].c)][0];
+	(yyval.d) = gmsh_yysymbols[(yyvsp[(1) - (1)].c)][0];
       Free((yyvsp[(1) - (1)].c));
     ;}
     break;
 
   case 324:
-#line 3555 "Gmsh.y"
+#line 3557 "Gmsh.y"
     {
       char tmpstring[1024];
       sprintf(tmpstring, "%s_%d", (yyvsp[(1) - (5)].c), (int)(yyvsp[(4) - (5)].d)) ;
       if(!gmsh_yysymbols.count(tmpstring)){
-        yymsg(0, "Unknown variable '%s'", tmpstring);
-        (yyval.d) = 0.;
+	yymsg(0, "Unknown variable '%s'", tmpstring);
+	(yyval.d) = 0.;
       }
       else
-        (yyval.d) = gmsh_yysymbols[tmpstring][0];
+	(yyval.d) = gmsh_yysymbols[tmpstring][0];
       Free((yyvsp[(1) - (5)].c));
     ;}
     break;
 
   case 325:
-#line 3567 "Gmsh.y"
+#line 3569 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
-        yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (4)].c));
-        (yyval.d) = 0.;
+	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (4)].c));
+	(yyval.d) = 0.;
       }
       else if((int)gmsh_yysymbols[(yyvsp[(1) - (4)].c)].size() < index + 1){
-        yymsg(0, "Uninitialized variable '%s[%d]'", (yyvsp[(1) - (4)].c), index);
-        (yyval.d) = 0.;
+	yymsg(0, "Uninitialized variable '%s[%d]'", (yyvsp[(1) - (4)].c), index);
+	(yyval.d) = 0.;
       }
       else
-        (yyval.d) = gmsh_yysymbols[(yyvsp[(1) - (4)].c)][index];
+	(yyval.d) = gmsh_yysymbols[(yyvsp[(1) - (4)].c)][index];
       Free((yyvsp[(1) - (4)].c));
     ;}
     break;
 
   case 326:
-#line 3582 "Gmsh.y"
+#line 3584 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(2) - (4)].c))){
-        yymsg(0, "Unknown variable '%s'", (yyvsp[(2) - (4)].c));
-        (yyval.d) = 0.;
+	yymsg(0, "Unknown variable '%s'", (yyvsp[(2) - (4)].c));
+	(yyval.d) = 0.;
       }
       else
-        (yyval.d) = gmsh_yysymbols[(yyvsp[(2) - (4)].c)].size();
+	(yyval.d) = gmsh_yysymbols[(yyvsp[(2) - (4)].c)].size();
       Free((yyvsp[(2) - (4)].c));
     ;}
     break;
 
   case 327:
-#line 3592 "Gmsh.y"
+#line 3594 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (2)].c))){
-        yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (2)].c));
-        (yyval.d) = 0.;
+	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (2)].c));
+	(yyval.d) = 0.;
       }
       else
-        (yyval.d) = (gmsh_yysymbols[(yyvsp[(1) - (2)].c)][0] += (yyvsp[(2) - (2)].i));
+	(yyval.d) = (gmsh_yysymbols[(yyvsp[(1) - (2)].c)][0] += (yyvsp[(2) - (2)].i));
       Free((yyvsp[(1) - (2)].c));
     ;}
     break;
 
   case 328:
-#line 3602 "Gmsh.y"
+#line 3604 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
-        yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (5)].c));
-        (yyval.d) = 0.;
+	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (5)].c));
+	(yyval.d) = 0.;
       }
       else if((int)gmsh_yysymbols[(yyvsp[(1) - (5)].c)].size() < index + 1){
-        yymsg(0, "Uninitialized variable '%s[%d]'", (yyvsp[(1) - (5)].c), index);
-        (yyval.d) = 0.;
+	yymsg(0, "Uninitialized variable '%s[%d]'", (yyvsp[(1) - (5)].c), index);
+	(yyval.d) = 0.;
       }
       else
-        (yyval.d) = (gmsh_yysymbols[(yyvsp[(1) - (5)].c)][index] += (yyvsp[(5) - (5)].i));
+	(yyval.d) = (gmsh_yysymbols[(yyvsp[(1) - (5)].c)][index] += (yyvsp[(5) - (5)].i));
       Free((yyvsp[(1) - (5)].c));
     ;}
     break;
 
   case 329:
-#line 3620 "Gmsh.y"
+#line 3622 "Gmsh.y"
     {
       NumberOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), (yyval.d));
       Free((yyvsp[(1) - (3)].c)); Free((yyvsp[(3) - (3)].c));
@@ -8144,7 +8146,7 @@ yyreduce:
     break;
 
   case 330:
-#line 3625 "Gmsh.y"
+#line 3627 "Gmsh.y"
     {
       NumberOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), (yyval.d));
       Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(6) - (6)].c));
@@ -8152,33 +8154,33 @@ yyreduce:
     break;
 
   case 331:
-#line 3630 "Gmsh.y"
+#line 3632 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d)){
-        d += (yyvsp[(4) - (4)].i);
-        NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d);
-        (yyval.d) = d;
+	d += (yyvsp[(4) - (4)].i);
+	NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d);
+	(yyval.d) = d;
       }
       Free((yyvsp[(1) - (4)].c)); Free((yyvsp[(3) - (4)].c));
     ;}
     break;
 
   case 332:
-#line 3640 "Gmsh.y"
+#line 3642 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d)){
-        d += (yyvsp[(7) - (7)].i);
-        NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d);
-        (yyval.d) = d;
+	d += (yyvsp[(7) - (7)].i);
+	NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d);
+	(yyval.d) = d;
       }
       Free((yyvsp[(1) - (7)].c)); Free((yyvsp[(6) - (7)].c));
     ;}
     break;
 
   case 333:
-#line 3650 "Gmsh.y"
+#line 3652 "Gmsh.y"
     { 
       (yyval.d) = Msg::GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
@@ -8186,70 +8188,70 @@ yyreduce:
     break;
 
   case 334:
-#line 3658 "Gmsh.y"
+#line 3660 "Gmsh.y"
     {
       memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double));
     ;}
     break;
 
   case 335:
-#line 3662 "Gmsh.y"
+#line 3664 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 336:
-#line 3666 "Gmsh.y"
+#line 3668 "Gmsh.y"
     { 
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 337:
-#line 3670 "Gmsh.y"
+#line 3672 "Gmsh.y"
     { 
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 338:
-#line 3674 "Gmsh.y"
+#line 3676 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 339:
-#line 3681 "Gmsh.y"
+#line 3683 "Gmsh.y"
     { 
       (yyval.v)[0] = (yyvsp[(2) - (11)].d);  (yyval.v)[1] = (yyvsp[(4) - (11)].d);  (yyval.v)[2] = (yyvsp[(6) - (11)].d);  (yyval.v)[3] = (yyvsp[(8) - (11)].d); (yyval.v)[4] = (yyvsp[(10) - (11)].d);
     ;}
     break;
 
   case 340:
-#line 3685 "Gmsh.y"
+#line 3687 "Gmsh.y"
     { 
       (yyval.v)[0] = (yyvsp[(2) - (9)].d);  (yyval.v)[1] = (yyvsp[(4) - (9)].d);  (yyval.v)[2] = (yyvsp[(6) - (9)].d);  (yyval.v)[3] = (yyvsp[(8) - (9)].d); (yyval.v)[4] = 1.0;
     ;}
     break;
 
   case 341:
-#line 3689 "Gmsh.y"
+#line 3691 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     ;}
     break;
 
   case 342:
-#line 3693 "Gmsh.y"
+#line 3695 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     ;}
     break;
 
   case 343:
-#line 3700 "Gmsh.y"
+#line 3702 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(List_T*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].l)));
@@ -8257,14 +8259,14 @@ yyreduce:
     break;
 
   case 344:
-#line 3705 "Gmsh.y"
+#line 3707 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].l)));
     ;}
     break;
 
   case 345:
-#line 3712 "Gmsh.y"
+#line 3714 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -8272,14 +8274,14 @@ yyreduce:
     break;
 
   case 346:
-#line 3717 "Gmsh.y"
+#line 3719 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 347:
-#line 3721 "Gmsh.y"
+#line 3723 "Gmsh.y"
     {
       // creates an empty list
       (yyval.l) = List_Create(2, 1, sizeof(double));
@@ -8287,43 +8289,43 @@ yyreduce:
     break;
 
   case 348:
-#line 3726 "Gmsh.y"
+#line 3728 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 349:
-#line 3730 "Gmsh.y"
+#line 3732 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
-        double *pd = (double*)List_Pointer((yyval.l), i);
-        (*pd) = - (*pd);
+	double *pd = (double*)List_Pointer((yyval.l), i);
+	(*pd) = - (*pd);
       }
     ;}
     break;
 
   case 350:
-#line 3738 "Gmsh.y"
+#line 3740 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (5)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
-        double *pd = (double*)List_Pointer((yyval.l), i);
-        (*pd) *= (yyvsp[(1) - (5)].d);
+	double *pd = (double*)List_Pointer((yyval.l), i);
+	(*pd) *= (yyvsp[(1) - (5)].d);
       }
     ;}
     break;
 
   case 351:
-#line 3749 "Gmsh.y"
+#line 3751 "Gmsh.y"
     { 
       (yyval.l) = (yyvsp[(1) - (1)].l); 
     ;}
     break;
 
   case 352:
-#line 3753 "Gmsh.y"
+#line 3755 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "*") || !strcmp((yyvsp[(1) - (1)].c), "all"))
         (yyval.l) = 0;
@@ -8335,53 +8337,53 @@ yyreduce:
     break;
 
   case 353:
-#line 3765 "Gmsh.y"
+#line 3767 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
-        double *pd = (double*)List_Pointer((yyval.l), i);
-        (*pd) = - (*pd);
+	double *pd = (double*)List_Pointer((yyval.l), i);
+	(*pd) = - (*pd);
       }
     ;}
     break;
 
   case 354:
-#line 3773 "Gmsh.y"
+#line 3775 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (3)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
-        double *pd = (double*)List_Pointer((yyval.l), i);
-        (*pd) *= (yyvsp[(1) - (3)].d);
+	double *pd = (double*)List_Pointer((yyval.l), i);
+	(*pd) *= (yyvsp[(1) - (3)].d);
       }
     ;}
     break;
 
   case 355:
-#line 3781 "Gmsh.y"
+#line 3783 "Gmsh.y"
     { 
       (yyval.l) = List_Create(2, 1, sizeof(double)); 
       for(double d = (yyvsp[(1) - (3)].d); ((yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d)) ? (d <= (yyvsp[(3) - (3)].d)) : (d >= (yyvsp[(3) - (3)].d)); 
           ((yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d)) ? (d += 1.) : (d -= 1.)) 
-        List_Add((yyval.l), &d);
+	List_Add((yyval.l), &d);
     ;}
     break;
 
   case 356:
-#line 3788 "Gmsh.y"
+#line 3790 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double)); 
       if(!(yyvsp[(5) - (5)].d) || ((yyvsp[(1) - (5)].d) < (yyvsp[(3) - (5)].d) && (yyvsp[(5) - (5)].d) < 0) || ((yyvsp[(1) - (5)].d) > (yyvsp[(3) - (5)].d) && (yyvsp[(5) - (5)].d) > 0)){
         yymsg(0, "Wrong increment in '%g:%g:%g'", (yyvsp[(1) - (5)].d), (yyvsp[(3) - (5)].d), (yyvsp[(5) - (5)].d));
-        List_Add((yyval.l), &((yyvsp[(1) - (5)].d)));
+	List_Add((yyval.l), &((yyvsp[(1) - (5)].d)));
       }
       else
-        for(double d = (yyvsp[(1) - (5)].d); ((yyvsp[(5) - (5)].d) > 0) ? (d <= (yyvsp[(3) - (5)].d)) : (d >= (yyvsp[(3) - (5)].d)); d += (yyvsp[(5) - (5)].d))
-          List_Add((yyval.l), &d);
+	for(double d = (yyvsp[(1) - (5)].d); ((yyvsp[(5) - (5)].d) > 0) ? (d <= (yyvsp[(3) - (5)].d)) : (d >= (yyvsp[(3) - (5)].d)); d += (yyvsp[(5) - (5)].d))
+	  List_Add((yyval.l), &d);
    ;}
     break;
 
   case 357:
-#line 3799 "Gmsh.y"
+#line 3801 "Gmsh.y"
     {
       // Returns the coordinates of a point and fills a list with it.
       // This allows to ensure e.g. that relative point positions are
@@ -8389,73 +8391,73 @@ yyreduce:
       Vertex *v = FindPoint((int)(yyvsp[(3) - (4)].d));
       (yyval.l) = List_Create(3, 1, sizeof(double));      
       if(!v) {
-        yymsg(0, "Unknown point '%d'", (int)(yyvsp[(3) - (4)].d));
-        double d = 0.0;
-        List_Add((yyval.l), &d);
-        List_Add((yyval.l), &d);
-        List_Add((yyval.l), &d);
+	yymsg(0, "Unknown point '%d'", (int)(yyvsp[(3) - (4)].d));
+	double d = 0.0;
+	List_Add((yyval.l), &d);
+	List_Add((yyval.l), &d);
+	List_Add((yyval.l), &d);
       }
       else{
-        List_Add((yyval.l), &v->Pos.X);
-        List_Add((yyval.l), &v->Pos.Y);
-        List_Add((yyval.l), &v->Pos.Z);
+	List_Add((yyval.l), &v->Pos.X);
+	List_Add((yyval.l), &v->Pos.Y);
+	List_Add((yyval.l), &v->Pos.Z);
       }
     ;}
     break;
 
   case 358:
-#line 3819 "Gmsh.y"
+#line 3821 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
-        Shape *s = (Shape*) List_Pointer((yyvsp[(1) - (1)].l), i);
-        double d = s->Num;
-        List_Add((yyval.l), &d);
+	Shape *s = (Shape*) List_Pointer((yyvsp[(1) - (1)].l), i);
+	double d = s->Num;
+	List_Add((yyval.l), &d);
       }
       List_Delete((yyvsp[(1) - (1)].l));
     ;}
     break;
 
   case 359:
-#line 3829 "Gmsh.y"
+#line 3831 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
-        Shape *s = (Shape*) List_Pointer((yyvsp[(1) - (1)].l), i);
-        double d = s->Num;
-        List_Add((yyval.l), &d);
+	Shape *s = (Shape*) List_Pointer((yyvsp[(1) - (1)].l), i);
+	double d = s->Num;
+	List_Add((yyval.l), &d);
       }
       List_Delete((yyvsp[(1) - (1)].l));
     ;}
     break;
 
   case 360:
-#line 3839 "Gmsh.y"
+#line 3841 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
-        yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (3)].c));
+	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (3)].c));
       else
-        for(unsigned int i = 0; i < gmsh_yysymbols[(yyvsp[(1) - (3)].c)].size(); i++)
-          List_Add((yyval.l), &gmsh_yysymbols[(yyvsp[(1) - (3)].c)][i]);
+	for(unsigned int i = 0; i < gmsh_yysymbols[(yyvsp[(1) - (3)].c)].size(); i++)
+	  List_Add((yyval.l), &gmsh_yysymbols[(yyvsp[(1) - (3)].c)][i]);
       Free((yyvsp[(1) - (3)].c));
     ;}
     break;
 
   case 361:
-#line 3849 "Gmsh.y"
+#line 3851 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
-        yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (6)].c));
+	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (6)].c));
       else{
-        for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
-          int index = (int)(*(double*)List_Pointer_Fast((yyvsp[(4) - (6)].l), i));
-          if((int)gmsh_yysymbols[(yyvsp[(1) - (6)].c)].size() < index + 1)
-            yymsg(0, "Uninitialized variable '%s[%d]'", (yyvsp[(1) - (6)].c), index);
-          else
-            List_Add((yyval.l), &gmsh_yysymbols[(yyvsp[(1) - (6)].c)][index]);
-        }
+	for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
+	  int index = (int)(*(double*)List_Pointer_Fast((yyvsp[(4) - (6)].l), i));
+	  if((int)gmsh_yysymbols[(yyvsp[(1) - (6)].c)].size() < index + 1)
+	    yymsg(0, "Uninitialized variable '%s[%d]'", (yyvsp[(1) - (6)].c), index);
+	  else
+	    List_Add((yyval.l), &gmsh_yysymbols[(yyvsp[(1) - (6)].c)][index]);
+	}
       }
       Free((yyvsp[(1) - (6)].c));
       List_Delete((yyvsp[(4) - (6)].l));
@@ -8463,7 +8465,7 @@ yyreduce:
     break;
 
   case 362:
-#line 3869 "Gmsh.y"
+#line 3871 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -8471,47 +8473,47 @@ yyreduce:
     break;
 
   case 363:
-#line 3874 "Gmsh.y"
+#line 3876 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 364:
-#line 3878 "Gmsh.y"
+#line 3880 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].d)));
     ;}
     break;
 
   case 365:
-#line 3882 "Gmsh.y"
+#line 3884 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
-        double d;
-        List_Read((yyvsp[(3) - (3)].l), i, &d);
-        List_Add((yyval.l), &d);
+	double d;
+	List_Read((yyvsp[(3) - (3)].l), i, &d);
+	List_Add((yyval.l), &d);
       }
       List_Delete((yyvsp[(3) - (3)].l));
     ;}
     break;
 
   case 366:
-#line 3894 "Gmsh.y"
+#line 3896 "Gmsh.y"
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (9)].d), (int)(yyvsp[(4) - (9)].d), (int)(yyvsp[(6) - (9)].d), (int)(yyvsp[(8) - (9)].d));
     ;}
     break;
 
   case 367:
-#line 3898 "Gmsh.y"
+#line 3900 "Gmsh.y"
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (7)].d), (int)(yyvsp[(4) - (7)].d), (int)(yyvsp[(6) - (7)].d), 255);
     ;}
     break;
 
   case 368:
-#line 3910 "Gmsh.y"
+#line 3912 "Gmsh.y"
     {
       int flag;
       (yyval.u) = GetColorForString(ColorString, -1, (yyvsp[(1) - (1)].c), &flag);
@@ -8521,7 +8523,7 @@ yyreduce:
     break;
 
   case 369:
-#line 3917 "Gmsh.y"
+#line 3919 "Gmsh.y"
     {
       unsigned int val = 0;
       ColorOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(5) - (5)].c), val);
@@ -8531,29 +8533,29 @@ yyreduce:
     break;
 
   case 370:
-#line 3927 "Gmsh.y"
+#line 3929 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 371:
-#line 3931 "Gmsh.y"
+#line 3933 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (6)].d));
       if(!ct)
-        yymsg(0, "View[%d] does not exist", (int)(yyvsp[(3) - (6)].d));
+	yymsg(0, "View[%d] does not exist", (int)(yyvsp[(3) - (6)].d));
       else{
-        for(int i = 0; i < ct->size; i++) 
-          List_Add((yyval.l), &ct->table[i]);
+	for(int i = 0; i < ct->size; i++) 
+	  List_Add((yyval.l), &ct->table[i]);
       }
       Free((yyvsp[(1) - (6)].c));
     ;}
     break;
 
   case 372:
-#line 3946 "Gmsh.y"
+#line 3948 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].u)));
@@ -8561,37 +8563,37 @@ yyreduce:
     break;
 
   case 373:
-#line 3951 "Gmsh.y"
+#line 3953 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].u)));
     ;}
     break;
 
   case 374:
-#line 3958 "Gmsh.y"
+#line 3960 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 375:
-#line 3962 "Gmsh.y"
+#line 3964 "Gmsh.y"
     {
       if(!gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c))){
-        yymsg(0, "Unknown string variable '%s'", (yyvsp[(1) - (1)].c));
-        (yyval.c) = (yyvsp[(1) - (1)].c);
+	yymsg(0, "Unknown string variable '%s'", (yyvsp[(1) - (1)].c));
+	(yyval.c) = (yyvsp[(1) - (1)].c);
       }
       else{
-        std::string val = gmsh_yystringsymbols[(yyvsp[(1) - (1)].c)];
-        (yyval.c) = (char *)Malloc((val.size() + 1) * sizeof(char));
-        strcpy((yyval.c), val.c_str());
-        Free((yyvsp[(1) - (1)].c));
+	std::string val = gmsh_yystringsymbols[(yyvsp[(1) - (1)].c)];
+	(yyval.c) = (char *)Malloc((val.size() + 1) * sizeof(char));
+	strcpy((yyval.c), val.c_str());
+	Free((yyvsp[(1) - (1)].c));
       }
     ;}
     break;
 
   case 376:
-#line 3975 "Gmsh.y"
+#line 3977 "Gmsh.y"
     { 
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), out);
@@ -8602,7 +8604,7 @@ yyreduce:
     break;
 
   case 377:
-#line 3983 "Gmsh.y"
+#line 3985 "Gmsh.y"
     { 
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), out);
@@ -8613,14 +8615,14 @@ yyreduce:
     break;
 
   case 378:
-#line 3994 "Gmsh.y"
+#line 3996 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 379:
-#line 3998 "Gmsh.y"
+#line 4000 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc(32 * sizeof(char));
       time_t now;
@@ -8631,7 +8633,7 @@ yyreduce:
     break;
 
   case 380:
-#line 4006 "Gmsh.y"
+#line 4008 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (6)].c)) + strlen((yyvsp[(5) - (6)].c)) + 1) * sizeof(char));
       strcpy((yyval.c), (yyvsp[(3) - (6)].c));
@@ -8642,16 +8644,16 @@ yyreduce:
     break;
 
   case 381:
-#line 4014 "Gmsh.y"
+#line 4016 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
       for(i = strlen((yyvsp[(3) - (4)].c)) - 1; i >= 0; i--){
-        if((yyvsp[(3) - (4)].c)[i] == '.'){
-          strncpy((yyval.c), (yyvsp[(3) - (4)].c), i);
-          (yyval.c)[i]='\0';
-          break;
-        }
+	if((yyvsp[(3) - (4)].c)[i] == '.'){
+	  strncpy((yyval.c), (yyvsp[(3) - (4)].c), i);
+	  (yyval.c)[i]='\0';
+	  break;
+	}
       }
       if(i <= 0) strcpy((yyval.c), (yyvsp[(3) - (4)].c));
       Free((yyvsp[(3) - (4)].c));
@@ -8659,46 +8661,46 @@ yyreduce:
     break;
 
   case 382:
-#line 4028 "Gmsh.y"
+#line 4030 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
       for(i = strlen((yyvsp[(3) - (4)].c)) - 1; i >= 0; i--){
-        if((yyvsp[(3) - (4)].c)[i] == '/' || (yyvsp[(3) - (4)].c)[i] == '\\')
-          break;
+	if((yyvsp[(3) - (4)].c)[i] == '/' || (yyvsp[(3) - (4)].c)[i] == '\\')
+	  break;
       }
       if(i <= 0)
-        strcpy((yyval.c), (yyvsp[(3) - (4)].c));
+	strcpy((yyval.c), (yyvsp[(3) - (4)].c));
       else
-        strcpy((yyval.c), &(yyvsp[(3) - (4)].c)[i+1]);
+	strcpy((yyval.c), &(yyvsp[(3) - (4)].c)[i+1]);
       Free((yyvsp[(3) - (4)].c));
     ;}
     break;
 
   case 383:
-#line 4042 "Gmsh.y"
+#line 4044 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     ;}
     break;
 
   case 384:
-#line 4046 "Gmsh.y"
+#line 4048 "Gmsh.y"
     {
       char tmpstring[1024];
       int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
       if(i < 0){
-        yymsg(0, "Too few arguments in Sprintf");
-        (yyval.c) = (yyvsp[(3) - (6)].c);
+	yymsg(0, "Too few arguments in Sprintf");
+	(yyval.c) = (yyvsp[(3) - (6)].c);
       }
       else if(i > 0){
-        yymsg(0, "%d extra argument%s in Sprintf", i, (i > 1) ? "s" : "");
-        (yyval.c) = (yyvsp[(3) - (6)].c);
+	yymsg(0, "%d extra argument%s in Sprintf", i, (i > 1) ? "s" : "");
+	(yyval.c) = (yyvsp[(3) - (6)].c);
       }
       else{
-        (yyval.c) = (char*)Malloc((strlen(tmpstring) + 1) * sizeof(char));
-        strcpy((yyval.c), tmpstring);
-        Free((yyvsp[(3) - (6)].c));
+	(yyval.c) = (char*)Malloc((strlen(tmpstring) + 1) * sizeof(char));
+	strcpy((yyval.c), tmpstring);
+	Free((yyvsp[(3) - (6)].c));
       }
       List_Delete((yyvsp[(5) - (6)].l));
     ;}
@@ -8706,7 +8708,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 8710 "Gmsh.tab.cpp"
+#line 8712 "Gmsh.tab.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -8745,35 +8747,35 @@ yyerrlab:
       yyerror (YY_("syntax error"));
 #else
       {
-        YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
-        if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
-          {
-            YYSIZE_T yyalloc = 2 * yysize;
-            if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
-              yyalloc = YYSTACK_ALLOC_MAXIMUM;
-            if (yymsg != yymsgbuf)
-              YYSTACK_FREE (yymsg);
-            yymsg = (char *) YYSTACK_ALLOC (yyalloc);
-            if (yymsg)
-              yymsg_alloc = yyalloc;
-            else
-              {
-                yymsg = yymsgbuf;
-                yymsg_alloc = sizeof yymsgbuf;
-              }
-          }
-
-        if (0 < yysize && yysize <= yymsg_alloc)
-          {
-            (void) yysyntax_error (yymsg, yystate, yychar);
-            yyerror (yymsg);
-          }
-        else
-          {
-            yyerror (YY_("syntax error"));
-            if (yysize != 0)
-              goto yyexhaustedlab;
-          }
+	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+	  {
+	    YYSIZE_T yyalloc = 2 * yysize;
+	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
+	    if (yymsg != yymsgbuf)
+	      YYSTACK_FREE (yymsg);
+	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+	    if (yymsg)
+	      yymsg_alloc = yyalloc;
+	    else
+	      {
+		yymsg = yymsgbuf;
+		yymsg_alloc = sizeof yymsgbuf;
+	      }
+	  }
+
+	if (0 < yysize && yysize <= yymsg_alloc)
+	  {
+	    (void) yysyntax_error (yymsg, yystate, yychar);
+	    yyerror (yymsg);
+	  }
+	else
+	  {
+	    yyerror (YY_("syntax error"));
+	    if (yysize != 0)
+	      goto yyexhaustedlab;
+	  }
       }
 #endif
     }
@@ -8783,20 +8785,20 @@ yyerrlab:
   if (yyerrstatus == 3)
     {
       /* If just tried and failed to reuse look-ahead token after an
-         error, discard it.  */
+	 error, discard it.  */
 
       if (yychar <= YYEOF)
-        {
-          /* Return failure if at end of input.  */
-          if (yychar == YYEOF)
-            YYABORT;
-        }
+	{
+	  /* Return failure if at end of input.  */
+	  if (yychar == YYEOF)
+	    YYABORT;
+	}
       else
-        {
-          yydestruct ("Error: discarding",
-                      yytoken, &yylval);
-          yychar = YYEMPTY;
-        }
+	{
+	  yydestruct ("Error: discarding",
+		      yytoken, &yylval);
+	  yychar = YYEMPTY;
+	}
     }
 
   /* Else will try to reuse look-ahead token after shifting the error
@@ -8828,29 +8830,29 @@ yyerrorlab:
 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
 `-------------------------------------------------------------*/
 yyerrlab1:
-  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
+  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
 
   for (;;)
     {
       yyn = yypact[yystate];
       if (yyn != YYPACT_NINF)
-        {
-          yyn += YYTERROR;
-          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-            {
-              yyn = yytable[yyn];
-              if (0 < yyn)
-                break;
-            }
-        }
+	{
+	  yyn += YYTERROR;
+	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+	    {
+	      yyn = yytable[yyn];
+	      if (0 < yyn)
+		break;
+	    }
+	}
 
       /* Pop the current state because it cannot handle the error token.  */
       if (yyssp == yyss)
-        YYABORT;
+	YYABORT;
 
 
       yydestruct ("Error: popping",
-                  yystos[yystate], yyvsp);
+		  yystos[yystate], yyvsp);
       YYPOPSTACK (1);
       yystate = *yyssp;
       YY_STACK_PRINT (yyss, yyssp);
@@ -8896,7 +8898,7 @@ yyexhaustedlab:
 yyreturn:
   if (yychar != YYEOF && yychar != YYEMPTY)
      yydestruct ("Cleanup: discarding lookahead",
-                 yytoken, &yylval);
+		 yytoken, &yylval);
   /* Do not reclaim the symbols of the rule which action triggered
      this YYABORT or YYACCEPT.  */
   YYPOPSTACK (yylen);
@@ -8904,7 +8906,7 @@ yyreturn:
   while (yyssp != yyss)
     {
       yydestruct ("Cleanup: popping",
-                  yystos[*yyssp], yyvsp);
+		  yystos[*yyssp], yyvsp);
       YYPOPSTACK (1);
     }
 #ifndef yyoverflow
@@ -8920,7 +8922,7 @@ yyreturn:
 }
 
 
-#line 4066 "Gmsh.y"
+#line 4068 "Gmsh.y"
 
 
 int PrintListOfDouble(char *format, List_T *list, char *buffer)
@@ -8939,15 +8941,15 @@ int PrintListOfDouble(char *format, List_T *list, char *buffer)
     j++;
     if(j < (int)strlen(format)){
       if(format[j] == '%'){
-        strcat(buffer, "%");
-        j++;
+	strcat(buffer, "%");
+	j++;
       }
       while(j < (int)strlen(format) && format[j] != '%') j++;
       if(k != j){
-        strncpy(tmp1, &(format[k]), j-k);
-        tmp1[j-k] = '\0';
-        sprintf(tmp2, tmp1, *(double*)List_Pointer(list, i)); 
-        strcat(buffer, tmp2);
+	strncpy(tmp1, &(format[k]), j-k);
+	tmp1[j-k] = '\0';
+	sprintf(tmp2, tmp1, *(double*)List_Pointer(list, i)); 
+	strcat(buffer, tmp2);
       }
     }
     else
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index efac5ac6f496417b95656a70f8a8b2db37425ab9..943e3042cc35c01f13589960668b5fe7304a2323 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1282,7 +1282,9 @@ Shape :
         Curve *c = Create_Curve(num, MSH_SEGM_COMPOUND, 1, NULL, NULL, -1, -1, 0., 1.);
         for(int i = 0; i < List_Nbr($7); i++)
           c->compound.push_back((int)*(double*)List_Pointer($7, i));
+	End_Curve(c);
 	Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
+	CreateReversedCurve(c);
       }
       List_Delete($7);
       $$.Type = MSH_SEGM_COMPOUND;
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index dfed508f70958d6597e1406f744ff054dc6f32d7..6bf864a5c2e71dc36102bc6092f3a986361e06d8 100644
--- a/Parser/Gmsh.yy.cpp
+++ b/Parser/Gmsh.yy.cpp
@@ -6,29 +6,10 @@
 
 /* A lexical scanner generated by flex */
 
-#define yy_create_buffer gmsh_yy_create_buffer
-#define yy_delete_buffer gmsh_yy_delete_buffer
-#define yy_flex_debug gmsh_yy_flex_debug
-#define yy_init_buffer gmsh_yy_init_buffer
-#define yy_flush_buffer gmsh_yy_flush_buffer
-#define yy_load_buffer_state gmsh_yy_load_buffer_state
-#define yy_switch_to_buffer gmsh_yy_switch_to_buffer
-#define yyin gmsh_yyin
-#define yyleng gmsh_yyleng
-#define yylex gmsh_yylex
-#define yylineno gmsh_yylineno
-#define yyout gmsh_yyout
-#define yyrestart gmsh_yyrestart
-#define yytext gmsh_yytext
-#define yywrap gmsh_yywrap
-#define yyalloc gmsh_yyalloc
-#define yyrealloc gmsh_yyrealloc
-#define yyfree gmsh_yyfree
-
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 35
+#define YY_FLEX_SUBMINOR_VERSION 33
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -50,7 +31,7 @@
 
 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
 
-#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#if __STDC_VERSION__ >= 199901L
 
 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
  * if you want the limit (max/min) macros for int types. 
@@ -111,15 +92,14 @@ typedef unsigned int flex_uint32_t;
 /* The "const" storage-class-modifier is valid. */
 #define YY_USE_CONST
 
-#else   /* ! __cplusplus */
+#else	/* ! __cplusplus */
 
-/* C99 requires __STDC__ to be defined as 1. */
-#if defined (__STDC__)
+#if __STDC__
 
 #define YY_USE_CONST
 
-#endif  /* defined (__STDC__) */
-#endif  /* ! __cplusplus */
+#endif	/* __STDC__ */
+#endif	/* ! __cplusplus */
 
 #ifdef YY_USE_CONST
 #define yyconst const
@@ -172,12 +152,7 @@ typedef unsigned int flex_uint32_t;
 typedef struct yy_buffer_state *YY_BUFFER_STATE;
 #endif
 
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef size_t yy_size_t;
-#endif
-
-extern yy_size_t gmsh_yyleng;
+extern int gmsh_yyleng;
 
 extern FILE *gmsh_yyin, *gmsh_yyout;
 
@@ -189,83 +164,93 @@ extern FILE *gmsh_yyin, *gmsh_yyout;
     
 /* Return all but the first "n" matched characters back to the input stream. */
 #define yyless(n) \
-        do \
-                { \
-                /* Undo effects of setting up gmsh_yytext. */ \
+	do \
+		{ \
+		/* Undo effects of setting up gmsh_yytext. */ \
         int yyless_macro_arg = (n); \
         YY_LESS_LINENO(yyless_macro_arg);\
-                *yy_cp = (yy_hold_char); \
-                YY_RESTORE_YY_MORE_OFFSET \
-                (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
-                YY_DO_BEFORE_ACTION; /* set up gmsh_yytext again */ \
-                } \
-        while ( 0 )
+		*yy_cp = (yy_hold_char); \
+		YY_RESTORE_YY_MORE_OFFSET \
+		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+		YY_DO_BEFORE_ACTION; /* set up gmsh_yytext again */ \
+		} \
+	while ( 0 )
 
 #define unput(c) yyunput( c, (yytext_ptr)  )
 
+/* The following is because we cannot portably get our hands on size_t
+ * (without autoconf's help, which isn't available because we want
+ * flex-generated scanners to compile on their own).
+ */
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef unsigned int yy_size_t;
+#endif
+
 #ifndef YY_STRUCT_YY_BUFFER_STATE
 #define YY_STRUCT_YY_BUFFER_STATE
 struct yy_buffer_state
-        {
-        FILE *yy_input_file;
-
-        char *yy_ch_buf;                /* input buffer */
-        char *yy_buf_pos;               /* current position in input buffer */
-
-        /* Size of input buffer in bytes, not including room for EOB
-         * characters.
-         */
-        yy_size_t yy_buf_size;
-
-        /* Number of characters read into yy_ch_buf, not including EOB
-         * characters.
-         */
-        yy_size_t yy_n_chars;
-
-        /* Whether we "own" the buffer - i.e., we know we created it,
-         * and can realloc() it to grow it, and should free() it to
-         * delete it.
-         */
-        int yy_is_our_buffer;
-
-        /* Whether this is an "interactive" input source; if so, and
-         * if we're using stdio for input, then we want to use getc()
-         * instead of fread(), to make sure we stop fetching input after
-         * each newline.
-         */
-        int yy_is_interactive;
-
-        /* Whether we're considered to be at the beginning of a line.
-         * If so, '^' rules will be active on the next match, otherwise
-         * not.
-         */
-        int yy_at_bol;
+	{
+	FILE *yy_input_file;
+
+	char *yy_ch_buf;		/* input buffer */
+	char *yy_buf_pos;		/* current position in input buffer */
+
+	/* Size of input buffer in bytes, not including room for EOB
+	 * characters.
+	 */
+	yy_size_t yy_buf_size;
+
+	/* Number of characters read into yy_ch_buf, not including EOB
+	 * characters.
+	 */
+	int yy_n_chars;
+
+	/* Whether we "own" the buffer - i.e., we know we created it,
+	 * and can realloc() it to grow it, and should free() it to
+	 * delete it.
+	 */
+	int yy_is_our_buffer;
+
+	/* Whether this is an "interactive" input source; if so, and
+	 * if we're using stdio for input, then we want to use getc()
+	 * instead of fread(), to make sure we stop fetching input after
+	 * each newline.
+	 */
+	int yy_is_interactive;
+
+	/* Whether we're considered to be at the beginning of a line.
+	 * If so, '^' rules will be active on the next match, otherwise
+	 * not.
+	 */
+	int yy_at_bol;
 
     int yy_bs_lineno; /**< The line count. */
     int yy_bs_column; /**< The column count. */
     
-        /* Whether to try to fill the input buffer when we reach the
-         * end of it.
-         */
-        int yy_fill_buffer;
+	/* Whether to try to fill the input buffer when we reach the
+	 * end of it.
+	 */
+	int yy_fill_buffer;
 
-        int yy_buffer_status;
+	int yy_buffer_status;
 
 #define YY_BUFFER_NEW 0
 #define YY_BUFFER_NORMAL 1
-        /* When an EOF's been seen but there's still some text to process
-         * then we mark the buffer as YY_EOF_PENDING, to indicate that we
-         * shouldn't try reading from the input source any more.  We might
-         * still have a bunch of tokens to match, though, because of
-         * possible backing-up.
-         *
-         * When we actually see the EOF, we change the status to "new"
-         * (via gmsh_yyrestart()), so that the user can continue scanning by
-         * just pointing gmsh_yyin at a new input file.
-         */
+	/* When an EOF's been seen but there's still some text to process
+	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+	 * shouldn't try reading from the input source any more.  We might
+	 * still have a bunch of tokens to match, though, because of
+	 * possible backing-up.
+	 *
+	 * When we actually see the EOF, we change the status to "new"
+	 * (via gmsh_yyrestart()), so that the user can continue scanning by
+	 * just pointing gmsh_yyin at a new input file.
+	 */
 #define YY_BUFFER_EOF_PENDING 2
 
-        };
+	};
 #endif /* !YY_STRUCT_YY_BUFFER_STATE */
 
 /* Stack of input buffers. */
@@ -290,13 +275,13 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
 
 /* yy_hold_char holds the character lost when gmsh_yytext is formed. */
 static char yy_hold_char;
-static yy_size_t yy_n_chars;            /* number of characters read into yy_ch_buf */
-yy_size_t gmsh_yyleng;
+static int yy_n_chars;		/* number of characters read into yy_ch_buf */
+int gmsh_yyleng;
 
 /* Points to current character in buffer. */
 static char *yy_c_buf_p = (char *) 0;
-static int yy_init = 0;         /* whether we need to initialize */
-static int yy_start = 0;        /* start state number */
+static int yy_init = 0;		/* whether we need to initialize */
+static int yy_start = 0;	/* start state number */
 
 /* Flag which is used to allow gmsh_yywrap()'s to do buffer switches
  * instead of setting up a fresh gmsh_yyin.  A bit of a hack ...
@@ -319,7 +304,7 @@ static void gmsh_yy_init_buffer (YY_BUFFER_STATE b,FILE *file  );
 
 YY_BUFFER_STATE gmsh_yy_scan_buffer (char *base,yy_size_t size  );
 YY_BUFFER_STATE gmsh_yy_scan_string (yyconst char *yy_str  );
-YY_BUFFER_STATE gmsh_yy_scan_bytes (yyconst char *bytes,yy_size_t len  );
+YY_BUFFER_STATE gmsh_yy_scan_bytes (yyconst char *bytes,int len  );
 
 void *gmsh_yyalloc (yy_size_t  );
 void *gmsh_yyrealloc (void *,yy_size_t  );
@@ -328,24 +313,24 @@ void gmsh_yyfree (void *  );
 #define yy_new_buffer gmsh_yy_create_buffer
 
 #define yy_set_interactive(is_interactive) \
-        { \
-        if ( ! YY_CURRENT_BUFFER ){ \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){ \
         gmsh_yyensure_buffer_stack (); \
-                YY_CURRENT_BUFFER_LVALUE =    \
+		YY_CURRENT_BUFFER_LVALUE =    \
             gmsh_yy_create_buffer(gmsh_yyin,YY_BUF_SIZE ); \
-        } \
-        YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
-        }
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+	}
 
 #define yy_set_bol(at_bol) \
-        { \
-        if ( ! YY_CURRENT_BUFFER ){\
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){\
         gmsh_yyensure_buffer_stack (); \
-                YY_CURRENT_BUFFER_LVALUE =    \
+		YY_CURRENT_BUFFER_LVALUE =    \
             gmsh_yy_create_buffer(gmsh_yyin,YY_BUF_SIZE ); \
-        } \
-        YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
-        }
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+	}
 
 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
 
@@ -373,21 +358,21 @@ static void yy_fatal_error (yyconst char msg[]  );
  * corresponding action - sets up gmsh_yytext.
  */
 #define YY_DO_BEFORE_ACTION \
-        (yytext_ptr) = yy_bp; \
-        gmsh_yyleng = (size_t) (yy_cp - yy_bp); \
-        (yy_hold_char) = *yy_cp; \
-        *yy_cp = '\0'; \
-        (yy_c_buf_p) = yy_cp;
+	(yytext_ptr) = yy_bp; \
+	gmsh_yyleng = (size_t) (yy_cp - yy_bp); \
+	(yy_hold_char) = *yy_cp; \
+	*yy_cp = '\0'; \
+	(yy_c_buf_p) = yy_cp;
 
 #define YY_NUM_RULES 151
 #define YY_END_OF_BUFFER 152
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
-        {
-        flex_int32_t yy_verify;
-        flex_int32_t yy_nxt;
-        };
+	{
+	flex_int32_t yy_verify;
+	flex_int32_t yy_nxt;
+	};
 static yyconst flex_int16_t yy_accept[648] =
     {   0,
         0,    0,  152,  150,    1,    1,  150,    5,  150,    6,
@@ -885,27 +870,27 @@ char  *strsave(char *ptr);
 void   skipcomments(void);
 void   skipline(void);
 
-#define YY_INPUT(buf,result,max_size)                                   \
-     {                                                                  \
-       int c = '*', n;                                                  \
-       for ( n = 0; n < max_size &&                                     \
-               (c = getc( gmsh_yyin )) != EOF && c != '\n'; ++n )               \
-         buf[n] = (char) c;                                             \
-       if ( c == '\n' ){                                                \
-         buf[n++] = (char) c;                                           \
-         gmsh_yylineno++;                                                       \
-       }                                                                \
-       if ( c == EOF && ferror( gmsh_yyin ) )                           \
-         Msg::Fatal("Input in flex scanner failed");                    \
-       result = n;                                                      \
-     }                                                                  \
+#define YY_INPUT(buf,result,max_size)					\
+     {									\
+       int c = '*', n;							\
+       for ( n = 0; n < max_size &&					\
+	       (c = getc( gmsh_yyin )) != EOF && c != '\n'; ++n )		\
+	 buf[n] = (char) c;						\
+       if ( c == '\n' ){						\
+	 buf[n++] = (char) c;						\
+	 gmsh_yylineno++;							\
+       }								\
+       if ( c == EOF && ferror( gmsh_yyin ) )				\
+	 Msg::Fatal("Input in flex scanner failed");			\
+       result = n;							\
+     }									\
 
 #if defined(WIN32)
 #define isatty(arg) -1
 #define YY_NO_UNISTD_H
 #endif
 
-#line 909 "Gmsh.yy.cpp"
+#line 894 "Gmsh.yy.cpp"
 
 #define INITIAL 0
 
@@ -923,35 +908,6 @@ void   skipline(void);
 
 static int yy_init_globals (void );
 
-/* Accessor methods to globals.
-   These are made visible to non-reentrant scanners for convenience. */
-
-int gmsh_yylex_destroy (void );
-
-int gmsh_yyget_debug (void );
-
-void gmsh_yyset_debug (int debug_flag  );
-
-YY_EXTRA_TYPE gmsh_yyget_extra (void );
-
-void gmsh_yyset_extra (YY_EXTRA_TYPE user_defined  );
-
-FILE *gmsh_yyget_in (void );
-
-void gmsh_yyset_in  (FILE * in_str  );
-
-FILE *gmsh_yyget_out (void );
-
-void gmsh_yyset_out  (FILE * out_str  );
-
-yy_size_t gmsh_yyget_leng (void );
-
-char *gmsh_yyget_text (void );
-
-int gmsh_yyget_lineno (void );
-
-void gmsh_yyset_lineno (int line_number  );
-
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
  */
@@ -994,7 +950,7 @@ static int input (void );
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO fwrite( gmsh_yytext, gmsh_yyleng, 1, gmsh_yyout )
+#define ECHO (void) fwrite( gmsh_yytext, gmsh_yyleng, 1, gmsh_yyout )
 #endif
 
 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
@@ -1002,33 +958,33 @@ static int input (void );
  */
 #ifndef YY_INPUT
 #define YY_INPUT(buf,result,max_size) \
-        if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
-                { \
-                int c = '*'; \
-                yy_size_t n; \
-                for ( n = 0; n < max_size && \
-                             (c = getc( gmsh_yyin )) != EOF && c != '\n'; ++n ) \
-                        buf[n] = (char) c; \
-                if ( c == '\n' ) \
-                        buf[n++] = (char) c; \
-                if ( c == EOF && ferror( gmsh_yyin ) ) \
-                        YY_FATAL_ERROR( "input in flex scanner failed" ); \
-                result = n; \
-                } \
-        else \
-                { \
-                errno=0; \
-                while ( (result = fread(buf, 1, max_size, gmsh_yyin))==0 && ferror(gmsh_yyin)) \
-                        { \
-                        if( errno != EINTR) \
-                                { \
-                                YY_FATAL_ERROR( "input in flex scanner failed" ); \
-                                break; \
-                                } \
-                        errno=0; \
-                        clearerr(gmsh_yyin); \
-                        } \
-                }\
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+		{ \
+		int c = '*'; \
+		size_t n; \
+		for ( n = 0; n < max_size && \
+			     (c = getc( gmsh_yyin )) != EOF && c != '\n'; ++n ) \
+			buf[n] = (char) c; \
+		if ( c == '\n' ) \
+			buf[n++] = (char) c; \
+		if ( c == EOF && ferror( gmsh_yyin ) ) \
+			YY_FATAL_ERROR( "input in flex scanner failed" ); \
+		result = n; \
+		} \
+	else \
+		{ \
+		errno=0; \
+		while ( (result = fread(buf, 1, max_size, gmsh_yyin))==0 && ferror(gmsh_yyin)) \
+			{ \
+			if( errno != EINTR) \
+				{ \
+				YY_FATAL_ERROR( "input in flex scanner failed" ); \
+				break; \
+				} \
+			errno=0; \
+			clearerr(gmsh_yyin); \
+			} \
+		}\
 \
 
 #endif
@@ -1077,823 +1033,823 @@ extern int gmsh_yylex (void);
 #endif
 
 #define YY_RULE_SETUP \
-        YY_USER_ACTION
+	YY_USER_ACTION
 
 /** The main scanner function which does all the work.
  */
 YY_DECL
 {
-        register yy_state_type yy_current_state;
-        register char *yy_cp, *yy_bp;
-        register int yy_act;
+	register yy_state_type yy_current_state;
+	register char *yy_cp, *yy_bp;
+	register int yy_act;
     
 #line 49 "Gmsh.l"
 
 
-#line 1094 "Gmsh.yy.cpp"
+#line 1050 "Gmsh.yy.cpp"
 
-        if ( !(yy_init) )
-                {
-                (yy_init) = 1;
+	if ( !(yy_init) )
+		{
+		(yy_init) = 1;
 
 #ifdef YY_USER_INIT
-                YY_USER_INIT;
+		YY_USER_INIT;
 #endif
 
-                if ( ! (yy_start) )
-                        (yy_start) = 1; /* first start state */
+		if ( ! (yy_start) )
+			(yy_start) = 1;	/* first start state */
 
-                if ( ! gmsh_yyin )
-                        gmsh_yyin = stdin;
+		if ( ! gmsh_yyin )
+			gmsh_yyin = stdin;
 
-                if ( ! gmsh_yyout )
-                        gmsh_yyout = stdout;
+		if ( ! gmsh_yyout )
+			gmsh_yyout = stdout;
 
-                if ( ! YY_CURRENT_BUFFER ) {
-                        gmsh_yyensure_buffer_stack ();
-                        YY_CURRENT_BUFFER_LVALUE =
-                                gmsh_yy_create_buffer(gmsh_yyin,YY_BUF_SIZE );
-                }
+		if ( ! YY_CURRENT_BUFFER ) {
+			gmsh_yyensure_buffer_stack ();
+			YY_CURRENT_BUFFER_LVALUE =
+				gmsh_yy_create_buffer(gmsh_yyin,YY_BUF_SIZE );
+		}
 
-                gmsh_yy_load_buffer_state( );
-                }
+		gmsh_yy_load_buffer_state( );
+		}
 
-        while ( 1 )             /* loops until end-of-file is reached */
-                {
-                yy_cp = (yy_c_buf_p);
+	while ( 1 )		/* loops until end-of-file is reached */
+		{
+		yy_cp = (yy_c_buf_p);
 
-                /* Support of gmsh_yytext. */
-                *yy_cp = (yy_hold_char);
+		/* Support of gmsh_yytext. */
+		*yy_cp = (yy_hold_char);
 
-                /* yy_bp points to the position in yy_ch_buf of the start of
-                 * the current run.
-                 */
-                yy_bp = yy_cp;
+		/* yy_bp points to the position in yy_ch_buf of the start of
+		 * the current run.
+		 */
+		yy_bp = yy_cp;
 
-                yy_current_state = (yy_start);
+		yy_current_state = (yy_start);
 yy_match:
-                do
-                        {
-                        register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
-                        if ( yy_accept[yy_current_state] )
-                                {
-                                (yy_last_accepting_state) = yy_current_state;
-                                (yy_last_accepting_cpos) = yy_cp;
-                                }
-                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-                                {
-                                yy_current_state = (int) yy_def[yy_current_state];
-                                if ( yy_current_state >= 648 )
-                                        yy_c = yy_meta[(unsigned int) yy_c];
-                                }
-                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-                        ++yy_cp;
-                        }
-                while ( yy_base[yy_current_state] != 770 );
+		do
+			{
+			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+			if ( yy_accept[yy_current_state] )
+				{
+				(yy_last_accepting_state) = yy_current_state;
+				(yy_last_accepting_cpos) = yy_cp;
+				}
+			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+				{
+				yy_current_state = (int) yy_def[yy_current_state];
+				if ( yy_current_state >= 648 )
+					yy_c = yy_meta[(unsigned int) yy_c];
+				}
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			++yy_cp;
+			}
+		while ( yy_base[yy_current_state] != 770 );
 
 yy_find_action:
-                yy_act = yy_accept[yy_current_state];
-                if ( yy_act == 0 )
-                        { /* have to back up */
-                        yy_cp = (yy_last_accepting_cpos);
-                        yy_current_state = (yy_last_accepting_state);
-                        yy_act = yy_accept[yy_current_state];
-                        }
-
-                YY_DO_BEFORE_ACTION;
-
-do_action:      /* This label is used only to access EOF actions. */
-
-                switch ( yy_act )
-        { /* beginning of action switch */
-                        case 0: /* must back up */
-                        /* undo the effects of YY_DO_BEFORE_ACTION */
-                        *yy_cp = (yy_hold_char);
-                        yy_cp = (yy_last_accepting_cpos);
-                        yy_current_state = (yy_last_accepting_state);
-                        goto yy_find_action;
+		yy_act = yy_accept[yy_current_state];
+		if ( yy_act == 0 )
+			{ /* have to back up */
+			yy_cp = (yy_last_accepting_cpos);
+			yy_current_state = (yy_last_accepting_state);
+			yy_act = yy_accept[yy_current_state];
+			}
+
+		YY_DO_BEFORE_ACTION;
+
+do_action:	/* This label is used only to access EOF actions. */
+
+		switch ( yy_act )
+	{ /* beginning of action switch */
+			case 0: /* must back up */
+			/* undo the effects of YY_DO_BEFORE_ACTION */
+			*yy_cp = (yy_hold_char);
+			yy_cp = (yy_last_accepting_cpos);
+			yy_current_state = (yy_last_accepting_state);
+			goto yy_find_action;
 
 case 1:
 /* rule 1 can match eol */
 YY_RULE_SETUP
 #line 51 "Gmsh.l"
 /* none */;
-        YY_BREAK
+	YY_BREAK
 case 2:
 YY_RULE_SETUP
 #line 52 "Gmsh.l"
 return tEND;
-        YY_BREAK
+	YY_BREAK
 case 3:
 YY_RULE_SETUP
 #line 53 "Gmsh.l"
 skipcomments();
-        YY_BREAK
+	YY_BREAK
 case 4:
 YY_RULE_SETUP
 #line 54 "Gmsh.l"
 skipline();
-        YY_BREAK
+	YY_BREAK
 case 5:
 YY_RULE_SETUP
 #line 55 "Gmsh.l"
 { parsestring('\"'); return tBIGSTR; }
-        YY_BREAK
+	YY_BREAK
 case 6:
 YY_RULE_SETUP
 #line 56 "Gmsh.l"
 { parsestring('\''); return tBIGSTR; }
-        YY_BREAK
+	YY_BREAK
 case 7:
 YY_RULE_SETUP
 #line 57 "Gmsh.l"
 { gmsh_yylval.d = NEWREG(); return tDOUBLE; }
-        YY_BREAK
+	YY_BREAK
 case 8:
 YY_RULE_SETUP
 #line 58 "Gmsh.l"
 { gmsh_yylval.d = NEWPOINT(); return tDOUBLE; }
-        YY_BREAK
+	YY_BREAK
 case 9:
 YY_RULE_SETUP
 #line 59 "Gmsh.l"
 { gmsh_yylval.d = NEWLINE(); return tDOUBLE; }
-        YY_BREAK
+	YY_BREAK
 case 10:
 YY_RULE_SETUP
 #line 60 "Gmsh.l"
 { gmsh_yylval.d = NEWLINE(); return tDOUBLE; }
-        YY_BREAK
+	YY_BREAK
 case 11:
 YY_RULE_SETUP
 #line 61 "Gmsh.l"
 { gmsh_yylval.d = NEWLINELOOP(); return tDOUBLE; }
-        YY_BREAK
+	YY_BREAK
 case 12:
 YY_RULE_SETUP
 #line 62 "Gmsh.l"
 { gmsh_yylval.d = NEWSURFACE(); return tDOUBLE; }
-        YY_BREAK
+	YY_BREAK
 case 13:
 YY_RULE_SETUP
 #line 63 "Gmsh.l"
 { gmsh_yylval.d = NEWSURFACELOOP(); return tDOUBLE; }
-        YY_BREAK
+	YY_BREAK
 case 14:
 YY_RULE_SETUP
 #line 64 "Gmsh.l"
 { gmsh_yylval.d = NEWVOLUME(); return tDOUBLE; }
-        YY_BREAK
+	YY_BREAK
 case 15:
 YY_RULE_SETUP
 #line 65 "Gmsh.l"
 { gmsh_yylval.d = NEWFIELD(); return tDOUBLE; }
-        YY_BREAK
+	YY_BREAK
 case 16:
 YY_RULE_SETUP
 #line 66 "Gmsh.l"
 return tAFFECT;
-        YY_BREAK
+	YY_BREAK
 case 17:
 YY_RULE_SETUP
 #line 67 "Gmsh.l"
 return tAFFECTPLUS;
-        YY_BREAK
+	YY_BREAK
 case 18:
 YY_RULE_SETUP
 #line 68 "Gmsh.l"
 return tAFFECTMINUS;
-        YY_BREAK
+	YY_BREAK
 case 19:
 YY_RULE_SETUP
 #line 69 "Gmsh.l"
 return tAFFECTTIMES;
-        YY_BREAK
+	YY_BREAK
 case 20:
 YY_RULE_SETUP
 #line 70 "Gmsh.l"
 return tAFFECTDIVIDE;
-        YY_BREAK
+	YY_BREAK
 case 21:
 YY_RULE_SETUP
 #line 71 "Gmsh.l"
 return tDOTS;
-        YY_BREAK
+	YY_BREAK
 case 22:
 YY_RULE_SETUP
 #line 72 "Gmsh.l"
 return tDOTS;
-        YY_BREAK
+	YY_BREAK
 case 23:
 YY_RULE_SETUP
 #line 73 "Gmsh.l"
 return tOR;
-        YY_BREAK
+	YY_BREAK
 case 24:
 YY_RULE_SETUP
 #line 74 "Gmsh.l"
 return tAND;
-        YY_BREAK
+	YY_BREAK
 case 25:
 YY_RULE_SETUP
 #line 75 "Gmsh.l"
 return tPLUSPLUS;
-        YY_BREAK
+	YY_BREAK
 case 26:
 YY_RULE_SETUP
 #line 76 "Gmsh.l"
 return tMINUSMINUS;
-        YY_BREAK
+	YY_BREAK
 case 27:
 YY_RULE_SETUP
 #line 77 "Gmsh.l"
 return tEQUAL;
-        YY_BREAK
+	YY_BREAK
 case 28:
 YY_RULE_SETUP
 #line 78 "Gmsh.l"
 return tNOTEQUAL;
-        YY_BREAK
+	YY_BREAK
 case 29:
 YY_RULE_SETUP
 #line 79 "Gmsh.l"
 return tLESSOREQUAL;
-        YY_BREAK
+	YY_BREAK
 case 30:
 YY_RULE_SETUP
 #line 80 "Gmsh.l"
 return tGREATEROREQUAL;
-        YY_BREAK
+	YY_BREAK
 case 31:
 YY_RULE_SETUP
 #line 82 "Gmsh.l"
 return tAcos;
-        YY_BREAK
+	YY_BREAK
 case 32:
 YY_RULE_SETUP
 #line 83 "Gmsh.l"
 return tAcos;
-        YY_BREAK
+	YY_BREAK
 case 33:
 YY_RULE_SETUP
 #line 84 "Gmsh.l"
 return tAlias;
-        YY_BREAK
+	YY_BREAK
 case 34:
 YY_RULE_SETUP
 #line 85 "Gmsh.l"
 return tAliasWithOptions;
-        YY_BREAK
+	YY_BREAK
 case 35:
 YY_RULE_SETUP
 #line 86 "Gmsh.l"
 return tAsin;
-        YY_BREAK
+	YY_BREAK
 case 36:
 YY_RULE_SETUP
 #line 87 "Gmsh.l"
 return tAsin;
-        YY_BREAK
+	YY_BREAK
 case 37:
 YY_RULE_SETUP
 #line 88 "Gmsh.l"
 return tAtan;
-        YY_BREAK
+	YY_BREAK
 case 38:
 YY_RULE_SETUP
 #line 89 "Gmsh.l"
 return tAtan;
-        YY_BREAK
+	YY_BREAK
 case 39:
 YY_RULE_SETUP
 #line 90 "Gmsh.l"
 return tAtan2;
-        YY_BREAK
+	YY_BREAK
 case 40:
 YY_RULE_SETUP
 #line 91 "Gmsh.l"
 return tAtan2;
-        YY_BREAK
+	YY_BREAK
 case 41:
 YY_RULE_SETUP
 #line 93 "Gmsh.l"
 return tBezier;
-        YY_BREAK
+	YY_BREAK
 case 42:
 YY_RULE_SETUP
 #line 94 "Gmsh.l"
 return tBSpline;
-        YY_BREAK
+	YY_BREAK
 case 43:
 YY_RULE_SETUP
 #line 95 "Gmsh.l"
 return tBoundingBox;
-        YY_BREAK
+	YY_BREAK
 case 44:
 YY_RULE_SETUP
 #line 97 "Gmsh.l"
 return tCeil;
-        YY_BREAK
+	YY_BREAK
 case 45:
 YY_RULE_SETUP
 #line 98 "Gmsh.l"
 return tCircle;
-        YY_BREAK
+	YY_BREAK
 case 46:
 YY_RULE_SETUP
 #line 99 "Gmsh.l"
 return tCoherence;
-        YY_BREAK
+	YY_BREAK
 case 47:
 YY_RULE_SETUP
 #line 100 "Gmsh.l"
 return tCombine;
-        YY_BREAK
+	YY_BREAK
 case 48:
 YY_RULE_SETUP
 #line 101 "Gmsh.l"
 return tCosh;
-        YY_BREAK
+	YY_BREAK
 case 49:
 YY_RULE_SETUP
 #line 102 "Gmsh.l"
 return tCos;
-        YY_BREAK
+	YY_BREAK
 case 50:
 YY_RULE_SETUP
 #line 103 "Gmsh.l"
 return tCharacteristic;
-        YY_BREAK
+	YY_BREAK
 case 51:
 YY_RULE_SETUP
 #line 104 "Gmsh.l"
 return tComplex;
-        YY_BREAK
+	YY_BREAK
 case 52:
 YY_RULE_SETUP
 #line 105 "Gmsh.l"
 return tColor;
-        YY_BREAK
+	YY_BREAK
 case 53:
 YY_RULE_SETUP
 #line 106 "Gmsh.l"
 return tColorTable;
-        YY_BREAK
+	YY_BREAK
 case 54:
 YY_RULE_SETUP
 #line 107 "Gmsh.l"
 return tCompound;
-        YY_BREAK
+	YY_BREAK
 case 55:
 YY_RULE_SETUP
 #line 108 "Gmsh.l"
 return tCoordinates;
-        YY_BREAK
+	YY_BREAK
 case 56:
 YY_RULE_SETUP
 #line 109 "Gmsh.l"
 return tSpline;
-        YY_BREAK
+	YY_BREAK
 case 57:
 YY_RULE_SETUP
 #line 110 "Gmsh.l"
 return tCall;
-        YY_BREAK
+	YY_BREAK
 case 58:
 YY_RULE_SETUP
 #line 111 "Gmsh.l"
 return tCreateTopology;
-        YY_BREAK
+	YY_BREAK
 case 59:
 YY_RULE_SETUP
 #line 113 "Gmsh.l"
 return tDelete;
-        YY_BREAK
+	YY_BREAK
 case 60:
 YY_RULE_SETUP
 #line 114 "Gmsh.l"
 return tDegenerated;
-        YY_BREAK
+	YY_BREAK
 case 61:
 YY_RULE_SETUP
 #line 115 "Gmsh.l"
 return tDilate;
-        YY_BREAK
+	YY_BREAK
 case 62:
 YY_RULE_SETUP
 #line 116 "Gmsh.l"
 return tDraw;
-        YY_BREAK
+	YY_BREAK
 case 63:
 YY_RULE_SETUP
 #line 118 "Gmsh.l"
 return tExp;
-        YY_BREAK
+	YY_BREAK
 case 64:
 YY_RULE_SETUP
 #line 119 "Gmsh.l"
 return tEllipse;
-        YY_BREAK
+	YY_BREAK
 case 65:
 YY_RULE_SETUP
 #line 120 "Gmsh.l"
 return tEllipse;
-        YY_BREAK
+	YY_BREAK
 case 66:
 YY_RULE_SETUP
 #line 121 "Gmsh.l"
 return tExtrude;
-        YY_BREAK
+	YY_BREAK
 case 67:
 YY_RULE_SETUP
 #line 122 "Gmsh.l"
 return tElliptic;
-        YY_BREAK
+	YY_BREAK
 case 68:
 YY_RULE_SETUP
 #line 123 "Gmsh.l"
 return tEndFor;
-        YY_BREAK
+	YY_BREAK
 case 69:
 YY_RULE_SETUP
 #line 124 "Gmsh.l"
 return tEndIf;
-        YY_BREAK
+	YY_BREAK
 case 70:
 YY_RULE_SETUP
 #line 125 "Gmsh.l"
 return tEuclidian;
-        YY_BREAK
+	YY_BREAK
 case 71:
 YY_RULE_SETUP
 #line 126 "Gmsh.l"
 return tExit;
-        YY_BREAK
+	YY_BREAK
 case 72:
 YY_RULE_SETUP
 #line 128 "Gmsh.l"
 return tFabs;
-        YY_BREAK
+	YY_BREAK
 case 73:
 YY_RULE_SETUP
 #line 129 "Gmsh.l"
 return tField;
-        YY_BREAK
+	YY_BREAK
 case 74:
 YY_RULE_SETUP
 #line 130 "Gmsh.l"
 return tFloor;
-        YY_BREAK
+	YY_BREAK
 case 75:
 YY_RULE_SETUP
 #line 131 "Gmsh.l"
 return tFmod;
-        YY_BREAK
+	YY_BREAK
 case 76:
 YY_RULE_SETUP
 #line 132 "Gmsh.l"
 return tFor;
-        YY_BREAK
+	YY_BREAK
 case 77:
 YY_RULE_SETUP
 #line 133 "Gmsh.l"
 return tFunction;
-        YY_BREAK
+	YY_BREAK
 case 78:
 YY_RULE_SETUP
 #line 135 "Gmsh.l"
 return tGetValue;
-        YY_BREAK
+	YY_BREAK
 case 79:
 YY_RULE_SETUP
 #line 136 "Gmsh.l"
 return tGMSH_MAJOR_VERSION;
-        YY_BREAK
+	YY_BREAK
 case 80:
 YY_RULE_SETUP
 #line 137 "Gmsh.l"
 return tGMSH_MINOR_VERSION;
-        YY_BREAK
+	YY_BREAK
 case 81:
 YY_RULE_SETUP
 #line 138 "Gmsh.l"
 return tGMSH_PATCH_VERSION;
-        YY_BREAK
+	YY_BREAK
 case 82:
 YY_RULE_SETUP
 #line 140 "Gmsh.l"
 return tHide;
-        YY_BREAK
+	YY_BREAK
 case 83:
 YY_RULE_SETUP
 #line 141 "Gmsh.l"
 return tHole;
-        YY_BREAK
+	YY_BREAK
 case 84:
 YY_RULE_SETUP
 #line 142 "Gmsh.l"
 return tHomRank;
-        YY_BREAK
+	YY_BREAK
 case 85:
 YY_RULE_SETUP
 #line 143 "Gmsh.l"
 return tHomGen;
-        YY_BREAK
+	YY_BREAK
 case 86:
 YY_RULE_SETUP
 #line 144 "Gmsh.l"
 return tHomCut;
-        YY_BREAK
+	YY_BREAK
 case 87:
 YY_RULE_SETUP
 #line 145 "Gmsh.l"
 return tHomSeq;
-        YY_BREAK
+	YY_BREAK
 case 88:
 YY_RULE_SETUP
 #line 146 "Gmsh.l"
 return tHypot;
-        YY_BREAK
+	YY_BREAK
 case 89:
 YY_RULE_SETUP
 #line 148 "Gmsh.l"
 return tIn;
-        YY_BREAK
+	YY_BREAK
 case 90:
 YY_RULE_SETUP
 #line 149 "Gmsh.l"
 return tIf;
-        YY_BREAK
+	YY_BREAK
 case 91:
 YY_RULE_SETUP
 #line 150 "Gmsh.l"
 return tIntersect;
-        YY_BREAK
+	YY_BREAK
 case 92:
 YY_RULE_SETUP
 #line 151 "Gmsh.l"
 return tInterpolationScheme;
-        YY_BREAK
+	YY_BREAK
 case 93:
 YY_RULE_SETUP
 #line 153 "Gmsh.l"
 return tNurbsKnots;
-        YY_BREAK
+	YY_BREAK
 case 94:
 YY_RULE_SETUP
 #line 155 "Gmsh.l"
 return tLength;
-        YY_BREAK
+	YY_BREAK
 case 95:
 YY_RULE_SETUP
 #line 156 "Gmsh.l"
 return tLine;
-        YY_BREAK
+	YY_BREAK
 case 96:
 YY_RULE_SETUP
 #line 157 "Gmsh.l"
 return tLoop;
-        YY_BREAK
+	YY_BREAK
 case 97:
 YY_RULE_SETUP
 #line 158 "Gmsh.l"
 return tLog;
-        YY_BREAK
+	YY_BREAK
 case 98:
 YY_RULE_SETUP
 #line 159 "Gmsh.l"
 return tLog10;
-        YY_BREAK
+	YY_BREAK
 case 99:
 YY_RULE_SETUP
 #line 160 "Gmsh.l"
 return tLayers;
-        YY_BREAK
+	YY_BREAK
 case 100:
 YY_RULE_SETUP
 #line 161 "Gmsh.l"
 return tLevelset;
-        YY_BREAK
+	YY_BREAK
 case 101:
 YY_RULE_SETUP
 #line 163 "Gmsh.l"
 return tModulo;
-        YY_BREAK
+	YY_BREAK
 case 102:
 YY_RULE_SETUP
 #line 164 "Gmsh.l"
 return tMPI_Rank;
-        YY_BREAK
+	YY_BREAK
 case 103:
 YY_RULE_SETUP
 #line 165 "Gmsh.l"
 return tMPI_Size;
-        YY_BREAK
+	YY_BREAK
 case 104:
 YY_RULE_SETUP
 #line 167 "Gmsh.l"
 return tNurbs;
-        YY_BREAK
+	YY_BREAK
 case 105:
 YY_RULE_SETUP
 #line 169 "Gmsh.l"
 return tNurbsOrder;
-        YY_BREAK
+	YY_BREAK
 case 106:
 YY_RULE_SETUP
 #line 170 "Gmsh.l"
 return tOCCShape;
-        YY_BREAK
+	YY_BREAK
 case 107:
 YY_RULE_SETUP
 #line 172 "Gmsh.l"
 return tPhysical;
-        YY_BREAK
+	YY_BREAK
 case 108:
 YY_RULE_SETUP
 #line 173 "Gmsh.l"
 return tPi;
-        YY_BREAK
+	YY_BREAK
 case 109:
 YY_RULE_SETUP
 #line 174 "Gmsh.l"
 return tPlane;
-        YY_BREAK
+	YY_BREAK
 case 110:
 YY_RULE_SETUP
 #line 175 "Gmsh.l"
 return tPoint;
-        YY_BREAK
+	YY_BREAK
 case 111:
 YY_RULE_SETUP
 #line 176 "Gmsh.l"
 return tParametric;
-        YY_BREAK
+	YY_BREAK
 case 112:
 YY_RULE_SETUP
 #line 177 "Gmsh.l"
 return tPolarSphere;
-        YY_BREAK
+	YY_BREAK
 case 113:
 YY_RULE_SETUP
 #line 178 "Gmsh.l"
 return tPrintf;
-        YY_BREAK
+	YY_BREAK
 case 114:
 YY_RULE_SETUP
 #line 179 "Gmsh.l"
 return tPlugin;
-        YY_BREAK
+	YY_BREAK
 case 115:
 YY_RULE_SETUP
 #line 181 "Gmsh.l"
 return tRecombine;
-        YY_BREAK
+	YY_BREAK
 case 116:
 YY_RULE_SETUP
 #line 182 "Gmsh.l"
 return tRotate;
-        YY_BREAK
+	YY_BREAK
 case 117:
 YY_RULE_SETUP
 #line 183 "Gmsh.l"
 return tRuled;
-        YY_BREAK
+	YY_BREAK
 case 118:
 YY_RULE_SETUP
 #line 184 "Gmsh.l"
 return tRand;
-        YY_BREAK
+	YY_BREAK
 case 119:
 YY_RULE_SETUP
 #line 185 "Gmsh.l"
 return tReturn;
-        YY_BREAK
+	YY_BREAK
 case 120:
 YY_RULE_SETUP
 #line 187 "Gmsh.l"
 return tSmoother;
-        YY_BREAK
+	YY_BREAK
 case 121:
 YY_RULE_SETUP
 #line 188 "Gmsh.l"
 return tSqrt;
-        YY_BREAK
+	YY_BREAK
 case 122:
 YY_RULE_SETUP
 #line 189 "Gmsh.l"
 return tSin;
-        YY_BREAK
+	YY_BREAK
 case 123:
 YY_RULE_SETUP
 #line 190 "Gmsh.l"
 return tSinh;
-        YY_BREAK
+	YY_BREAK
 case 124:
 YY_RULE_SETUP
 #line 191 "Gmsh.l"
 return tSphere;
-        YY_BREAK
+	YY_BREAK
 case 125:
 YY_RULE_SETUP
 #line 192 "Gmsh.l"
 return tSpline;
-        YY_BREAK
+	YY_BREAK
 case 126:
 YY_RULE_SETUP
 #line 193 "Gmsh.l"
 return tSplit;
-        YY_BREAK
+	YY_BREAK
 case 127:
 YY_RULE_SETUP
 #line 194 "Gmsh.l"
 return tSurface;
-        YY_BREAK
+	YY_BREAK
 case 128:
 YY_RULE_SETUP
 #line 195 "Gmsh.l"
 return tSprintf;
-        YY_BREAK
+	YY_BREAK
 case 129:
 YY_RULE_SETUP
 #line 196 "Gmsh.l"
 return tStrCat;
-        YY_BREAK
+	YY_BREAK
 case 130:
 YY_RULE_SETUP
 #line 197 "Gmsh.l"
 return tStrPrefix;
-        YY_BREAK
+	YY_BREAK
 case 131:
 YY_RULE_SETUP
 #line 198 "Gmsh.l"
 return tStrRelative;
-        YY_BREAK
+	YY_BREAK
 case 132:
 YY_RULE_SETUP
 #line 199 "Gmsh.l"
 return tShow;
-        YY_BREAK
+	YY_BREAK
 case 133:
 YY_RULE_SETUP
 #line 200 "Gmsh.l"
 return tSymmetry;
-        YY_BREAK
+	YY_BREAK
 case 134:
 YY_RULE_SETUP
 #line 201 "Gmsh.l"
 return tSyncModel;
-        YY_BREAK
+	YY_BREAK
 case 135:
 YY_RULE_SETUP
 #line 203 "Gmsh.l"
 return tText2D;
-        YY_BREAK
+	YY_BREAK
 case 136:
 YY_RULE_SETUP
 #line 204 "Gmsh.l"
 return tText3D;
-        YY_BREAK
+	YY_BREAK
 case 137:
 YY_RULE_SETUP
 #line 205 "Gmsh.l"
 return tTime;
-        YY_BREAK
+	YY_BREAK
 case 138:
 YY_RULE_SETUP
 #line 206 "Gmsh.l"
 return tTransfinite;
-        YY_BREAK
+	YY_BREAK
 case 139:
 YY_RULE_SETUP
 #line 207 "Gmsh.l"
 return tTranslate;
-        YY_BREAK
+	YY_BREAK
 case 140:
 YY_RULE_SETUP
 #line 208 "Gmsh.l"
 return tTanh;
-        YY_BREAK
+	YY_BREAK
 case 141:
 YY_RULE_SETUP
 #line 209 "Gmsh.l"
 return tTan;
-        YY_BREAK
+	YY_BREAK
 case 142:
 YY_RULE_SETUP
 #line 210 "Gmsh.l"
 return tToday;
-        YY_BREAK
+	YY_BREAK
 case 143:
 YY_RULE_SETUP
 #line 212 "Gmsh.l"
 return tUsing;
-        YY_BREAK
+	YY_BREAK
 case 144:
 YY_RULE_SETUP
 #line 214 "Gmsh.l"
 return tVolume;
-        YY_BREAK
+	YY_BREAK
 case 145:
 #line 217 "Gmsh.l"
 case 146:
@@ -1904,386 +1860,378 @@ case 148:
 YY_RULE_SETUP
 #line 219 "Gmsh.l"
 { gmsh_yylval.d = atof((char *)gmsh_yytext); return tDOUBLE; }
-        YY_BREAK
+	YY_BREAK
 case 149:
 YY_RULE_SETUP
 #line 221 "Gmsh.l"
 { gmsh_yylval.c = strsave((char*)gmsh_yytext); return tSTRING; }
-        YY_BREAK
+	YY_BREAK
 case 150:
 YY_RULE_SETUP
 #line 223 "Gmsh.l"
 return gmsh_yytext[0];
-        YY_BREAK
+	YY_BREAK
 case 151:
 YY_RULE_SETUP
 #line 225 "Gmsh.l"
 ECHO;
-        YY_BREAK
-#line 1924 "Gmsh.yy.cpp"
+	YY_BREAK
+#line 1880 "Gmsh.yy.cpp"
 case YY_STATE_EOF(INITIAL):
-        yyterminate();
-
-        case YY_END_OF_BUFFER:
-                {
-                /* Amount of text matched not including the EOB char. */
-                int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
-
-                /* Undo the effects of YY_DO_BEFORE_ACTION. */
-                *yy_cp = (yy_hold_char);
-                YY_RESTORE_YY_MORE_OFFSET
-
-                if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
-                        {
-                        /* We're scanning a new file or input source.  It's
-                         * possible that this happened because the user
-                         * just pointed gmsh_yyin at a new source and called
-                         * gmsh_yylex().  If so, then we have to assure
-                         * consistency between YY_CURRENT_BUFFER and our
-                         * globals.  Here is the right place to do so, because
-                         * this is the first action (other than possibly a
-                         * back-up) that will match for the new input source.
-                         */
-                        (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-                        YY_CURRENT_BUFFER_LVALUE->yy_input_file = gmsh_yyin;
-                        YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
-                        }
-
-                /* Note that here we test for yy_c_buf_p "<=" to the position
-                 * of the first EOB in the buffer, since yy_c_buf_p will
-                 * already have been incremented past the NUL character
-                 * (since all states make transitions on EOB to the
-                 * end-of-buffer state).  Contrast this with the test
-                 * in input().
-                 */
-                if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
-                        { /* This was really a NUL. */
-                        yy_state_type yy_next_state;
-
-                        (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
-
-                        yy_current_state = yy_get_previous_state(  );
-
-                        /* Okay, we're now positioned to make the NUL
-                         * transition.  We couldn't have
-                         * yy_get_previous_state() go ahead and do it
-                         * for us because it doesn't know how to deal
-                         * with the possibility of jamming (and we don't
-                         * want to build jamming into it because then it
-                         * will run more slowly).
-                         */
-
-                        yy_next_state = yy_try_NUL_trans( yy_current_state );
-
-                        yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-
-                        if ( yy_next_state )
-                                {
-                                /* Consume the NUL. */
-                                yy_cp = ++(yy_c_buf_p);
-                                yy_current_state = yy_next_state;
-                                goto yy_match;
-                                }
-
-                        else
-                                {
-                                yy_cp = (yy_c_buf_p);
-                                goto yy_find_action;
-                                }
-                        }
-
-                else switch ( yy_get_next_buffer(  ) )
-                        {
-                        case EOB_ACT_END_OF_FILE:
-                                {
-                                (yy_did_buffer_switch_on_eof) = 0;
-
-                                if ( gmsh_yywrap( ) )
-                                        {
-                                        /* Note: because we've taken care in
-                                         * yy_get_next_buffer() to have set up
-                                         * gmsh_yytext, we can now set up
-                                         * yy_c_buf_p so that if some total
-                                         * hoser (like flex itself) wants to
-                                         * call the scanner after we return the
-                                         * YY_NULL, it'll still work - another
-                                         * YY_NULL will get returned.
-                                         */
-                                        (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
-
-                                        yy_act = YY_STATE_EOF(YY_START);
-                                        goto do_action;
-                                        }
-
-                                else
-                                        {
-                                        if ( ! (yy_did_buffer_switch_on_eof) )
-                                                YY_NEW_FILE;
-                                        }
-                                break;
-                                }
-
-                        case EOB_ACT_CONTINUE_SCAN:
-                                (yy_c_buf_p) =
-                                        (yytext_ptr) + yy_amount_of_matched_text;
-
-                                yy_current_state = yy_get_previous_state(  );
-
-                                yy_cp = (yy_c_buf_p);
-                                yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-                                goto yy_match;
-
-                        case EOB_ACT_LAST_MATCH:
-                                (yy_c_buf_p) =
-                                &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
-
-                                yy_current_state = yy_get_previous_state(  );
-
-                                yy_cp = (yy_c_buf_p);
-                                yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-                                goto yy_find_action;
-                        }
-                break;
-                }
-
-        default:
-                YY_FATAL_ERROR(
-                        "fatal flex scanner internal error--no action found" );
-        } /* end of action switch */
-                } /* end of scanning one token */
+	yyterminate();
+
+	case YY_END_OF_BUFFER:
+		{
+		/* Amount of text matched not including the EOB char. */
+		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+
+		/* Undo the effects of YY_DO_BEFORE_ACTION. */
+		*yy_cp = (yy_hold_char);
+		YY_RESTORE_YY_MORE_OFFSET
+
+		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+			{
+			/* We're scanning a new file or input source.  It's
+			 * possible that this happened because the user
+			 * just pointed gmsh_yyin at a new source and called
+			 * gmsh_yylex().  If so, then we have to assure
+			 * consistency between YY_CURRENT_BUFFER and our
+			 * globals.  Here is the right place to do so, because
+			 * this is the first action (other than possibly a
+			 * back-up) that will match for the new input source.
+			 */
+			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+			YY_CURRENT_BUFFER_LVALUE->yy_input_file = gmsh_yyin;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+			}
+
+		/* Note that here we test for yy_c_buf_p "<=" to the position
+		 * of the first EOB in the buffer, since yy_c_buf_p will
+		 * already have been incremented past the NUL character
+		 * (since all states make transitions on EOB to the
+		 * end-of-buffer state).  Contrast this with the test
+		 * in input().
+		 */
+		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+			{ /* This was really a NUL. */
+			yy_state_type yy_next_state;
+
+			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+
+			yy_current_state = yy_get_previous_state(  );
+
+			/* Okay, we're now positioned to make the NUL
+			 * transition.  We couldn't have
+			 * yy_get_previous_state() go ahead and do it
+			 * for us because it doesn't know how to deal
+			 * with the possibility of jamming (and we don't
+			 * want to build jamming into it because then it
+			 * will run more slowly).
+			 */
+
+			yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+			yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+
+			if ( yy_next_state )
+				{
+				/* Consume the NUL. */
+				yy_cp = ++(yy_c_buf_p);
+				yy_current_state = yy_next_state;
+				goto yy_match;
+				}
+
+			else
+				{
+				yy_cp = (yy_c_buf_p);
+				goto yy_find_action;
+				}
+			}
+
+		else switch ( yy_get_next_buffer(  ) )
+			{
+			case EOB_ACT_END_OF_FILE:
+				{
+				(yy_did_buffer_switch_on_eof) = 0;
+
+				if ( gmsh_yywrap( ) )
+					{
+					/* Note: because we've taken care in
+					 * yy_get_next_buffer() to have set up
+					 * gmsh_yytext, we can now set up
+					 * yy_c_buf_p so that if some total
+					 * hoser (like flex itself) wants to
+					 * call the scanner after we return the
+					 * YY_NULL, it'll still work - another
+					 * YY_NULL will get returned.
+					 */
+					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+
+					yy_act = YY_STATE_EOF(YY_START);
+					goto do_action;
+					}
+
+				else
+					{
+					if ( ! (yy_did_buffer_switch_on_eof) )
+						YY_NEW_FILE;
+					}
+				break;
+				}
+
+			case EOB_ACT_CONTINUE_SCAN:
+				(yy_c_buf_p) =
+					(yytext_ptr) + yy_amount_of_matched_text;
+
+				yy_current_state = yy_get_previous_state(  );
+
+				yy_cp = (yy_c_buf_p);
+				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+				goto yy_match;
+
+			case EOB_ACT_LAST_MATCH:
+				(yy_c_buf_p) =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+
+				yy_current_state = yy_get_previous_state(  );
+
+				yy_cp = (yy_c_buf_p);
+				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+				goto yy_find_action;
+			}
+		break;
+		}
+
+	default:
+		YY_FATAL_ERROR(
+			"fatal flex scanner internal error--no action found" );
+	} /* end of action switch */
+		} /* end of scanning one token */
 } /* end of gmsh_yylex */
 
 /* yy_get_next_buffer - try to read in a new buffer
  *
  * Returns a code representing an action:
- *      EOB_ACT_LAST_MATCH -
- *      EOB_ACT_CONTINUE_SCAN - continue scanning from current position
- *      EOB_ACT_END_OF_FILE - end of file
+ *	EOB_ACT_LAST_MATCH -
+ *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ *	EOB_ACT_END_OF_FILE - end of file
  */
 static int yy_get_next_buffer (void)
 {
-        register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-        register char *source = (yytext_ptr);
-        register int number_to_move, i;
-        int ret_val;
-
-        if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
-                YY_FATAL_ERROR(
-                "fatal flex scanner internal error--end of buffer missed" );
-
-        if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
-                { /* Don't try to fill the buffer, so this is an EOF. */
-                if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
-                        {
-                        /* We matched a single character, the EOB, so
-                         * treat this as a final EOF.
-                         */
-                        return EOB_ACT_END_OF_FILE;
-                        }
-
-                else
-                        {
-                        /* We matched some text prior to the EOB, first
-                         * process it.
-                         */
-                        return EOB_ACT_LAST_MATCH;
-                        }
-                }
-
-        /* Try to read more data. */
-
-        /* First move last chars to start of buffer. */
-        number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
-
-        for ( i = 0; i < number_to_move; ++i )
-                *(dest++) = *(source++);
-
-        if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
-                /* don't do the read, it's not guaranteed to return an EOF,
-                 * just force an EOF
-                 */
-                YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
-
-        else
-                {
-                        yy_size_t num_to_read =
-                        YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
-
-                while ( num_to_read <= 0 )
-                        { /* Not enough room in the buffer - grow it. */
-
-                        /* just a shorter name for the current buffer */
-                        YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
-
-                        int yy_c_buf_p_offset =
-                                (int) ((yy_c_buf_p) - b->yy_ch_buf);
-
-                        if ( b->yy_is_our_buffer )
-                                {
-                                yy_size_t new_size = b->yy_buf_size * 2;
-
-                                if ( new_size <= 0 )
-                                        b->yy_buf_size += b->yy_buf_size / 8;
-                                else
-                                        b->yy_buf_size *= 2;
-
-                                b->yy_ch_buf = (char *)
-                                        /* Include room in for 2 EOB chars. */
-                                        gmsh_yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
-                                }
-                        else
-                                /* Can't grow it, we don't own it. */
-                                b->yy_ch_buf = 0;
-
-                        if ( ! b->yy_ch_buf )
-                                YY_FATAL_ERROR(
-                                "fatal error - scanner input buffer overflow" );
-
-                        (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
-
-                        num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
-                                                number_to_move - 1;
-
-                        }
-
-                if ( num_to_read > YY_READ_BUF_SIZE )
-                        num_to_read = YY_READ_BUF_SIZE;
-
-                /* Read in more data. */
-                YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-                        (yy_n_chars), num_to_read );
-
-                YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-                }
-
-        if ( (yy_n_chars) == 0 )
-                {
-                if ( number_to_move == YY_MORE_ADJ )
-                        {
-                        ret_val = EOB_ACT_END_OF_FILE;
-                        gmsh_yyrestart(gmsh_yyin  );
-                        }
-
-                else
-                        {
-                        ret_val = EOB_ACT_LAST_MATCH;
-                        YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
-                                YY_BUFFER_EOF_PENDING;
-                        }
-                }
-
-        else
-                ret_val = EOB_ACT_CONTINUE_SCAN;
-
-        if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
-                /* Extend the array by 50%, plus the number we really need. */
-                yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
-                YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) gmsh_yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
-                if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
-                        YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
-        }
-
-        (yy_n_chars) += number_to_move;
-        YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
-        YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
-
-        (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+	register char *source = (yytext_ptr);
+	register int number_to_move, i;
+	int ret_val;
+
+	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+		YY_FATAL_ERROR(
+		"fatal flex scanner internal error--end of buffer missed" );
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+		{ /* Don't try to fill the buffer, so this is an EOF. */
+		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+			{
+			/* We matched a single character, the EOB, so
+			 * treat this as a final EOF.
+			 */
+			return EOB_ACT_END_OF_FILE;
+			}
+
+		else
+			{
+			/* We matched some text prior to the EOB, first
+			 * process it.
+			 */
+			return EOB_ACT_LAST_MATCH;
+			}
+		}
+
+	/* Try to read more data. */
+
+	/* First move last chars to start of buffer. */
+	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+
+	for ( i = 0; i < number_to_move; ++i )
+		*(dest++) = *(source++);
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+		/* don't do the read, it's not guaranteed to return an EOF,
+		 * just force an EOF
+		 */
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+
+	else
+		{
+			int num_to_read =
+			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+		while ( num_to_read <= 0 )
+			{ /* Not enough room in the buffer - grow it. */
+
+			/* just a shorter name for the current buffer */
+			YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
+
+			int yy_c_buf_p_offset =
+				(int) ((yy_c_buf_p) - b->yy_ch_buf);
+
+			if ( b->yy_is_our_buffer )
+				{
+				int new_size = b->yy_buf_size * 2;
+
+				if ( new_size <= 0 )
+					b->yy_buf_size += b->yy_buf_size / 8;
+				else
+					b->yy_buf_size *= 2;
+
+				b->yy_ch_buf = (char *)
+					/* Include room in for 2 EOB chars. */
+					gmsh_yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
+				}
+			else
+				/* Can't grow it, we don't own it. */
+				b->yy_ch_buf = 0;
+
+			if ( ! b->yy_ch_buf )
+				YY_FATAL_ERROR(
+				"fatal error - scanner input buffer overflow" );
+
+			(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+						number_to_move - 1;
+
+			}
+
+		if ( num_to_read > YY_READ_BUF_SIZE )
+			num_to_read = YY_READ_BUF_SIZE;
+
+		/* Read in more data. */
+		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+			(yy_n_chars), num_to_read );
+
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	if ( (yy_n_chars) == 0 )
+		{
+		if ( number_to_move == YY_MORE_ADJ )
+			{
+			ret_val = EOB_ACT_END_OF_FILE;
+			gmsh_yyrestart(gmsh_yyin  );
+			}
+
+		else
+			{
+			ret_val = EOB_ACT_LAST_MATCH;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+				YY_BUFFER_EOF_PENDING;
+			}
+		}
+
+	else
+		ret_val = EOB_ACT_CONTINUE_SCAN;
+
+	(yy_n_chars) += number_to_move;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
 
-        return ret_val;
+	return ret_val;
 }
 
 /* yy_get_previous_state - get the state just before the EOB char was reached */
 
     static yy_state_type yy_get_previous_state (void)
 {
-        register yy_state_type yy_current_state;
-        register char *yy_cp;
+	register yy_state_type yy_current_state;
+	register char *yy_cp;
     
-        yy_current_state = (yy_start);
-
-        for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
-                {
-                register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
-                if ( yy_accept[yy_current_state] )
-                        {
-                        (yy_last_accepting_state) = yy_current_state;
-                        (yy_last_accepting_cpos) = yy_cp;
-                        }
-                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-                        {
-                        yy_current_state = (int) yy_def[yy_current_state];
-                        if ( yy_current_state >= 648 )
-                                yy_c = yy_meta[(unsigned int) yy_c];
-                        }
-                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-                }
-
-        return yy_current_state;
+	yy_current_state = (yy_start);
+
+	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+		{
+		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+		if ( yy_accept[yy_current_state] )
+			{
+			(yy_last_accepting_state) = yy_current_state;
+			(yy_last_accepting_cpos) = yy_cp;
+			}
+		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+			{
+			yy_current_state = (int) yy_def[yy_current_state];
+			if ( yy_current_state >= 648 )
+				yy_c = yy_meta[(unsigned int) yy_c];
+			}
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		}
+
+	return yy_current_state;
 }
 
 /* yy_try_NUL_trans - try to make a transition on the NUL character
  *
  * synopsis
- *      next_state = yy_try_NUL_trans( current_state );
+ *	next_state = yy_try_NUL_trans( current_state );
  */
     static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
 {
-        register int yy_is_jam;
-        register char *yy_cp = (yy_c_buf_p);
-
-        register YY_CHAR yy_c = 1;
-        if ( yy_accept[yy_current_state] )
-                {
-                (yy_last_accepting_state) = yy_current_state;
-                (yy_last_accepting_cpos) = yy_cp;
-                }
-        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-                {
-                yy_current_state = (int) yy_def[yy_current_state];
-                if ( yy_current_state >= 648 )
-                        yy_c = yy_meta[(unsigned int) yy_c];
-                }
-        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-        yy_is_jam = (yy_current_state == 647);
-
-        return yy_is_jam ? 0 : yy_current_state;
+	register int yy_is_jam;
+    	register char *yy_cp = (yy_c_buf_p);
+
+	register YY_CHAR yy_c = 1;
+	if ( yy_accept[yy_current_state] )
+		{
+		(yy_last_accepting_state) = yy_current_state;
+		(yy_last_accepting_cpos) = yy_cp;
+		}
+	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+		{
+		yy_current_state = (int) yy_def[yy_current_state];
+		if ( yy_current_state >= 648 )
+			yy_c = yy_meta[(unsigned int) yy_c];
+		}
+	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+	yy_is_jam = (yy_current_state == 647);
+
+	return yy_is_jam ? 0 : yy_current_state;
 }
 
     static void yyunput (int c, register char * yy_bp )
 {
-        register char *yy_cp;
+	register char *yy_cp;
     
     yy_cp = (yy_c_buf_p);
 
-        /* undo effects of setting up gmsh_yytext */
-        *yy_cp = (yy_hold_char);
+	/* undo effects of setting up gmsh_yytext */
+	*yy_cp = (yy_hold_char);
 
-        if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
-                { /* need to shift things up to make room */
-                /* +2 for EOB chars. */
-                register yy_size_t number_to_move = (yy_n_chars) + 2;
-                register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
-                                        YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
-                register char *source =
-                                &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+		{ /* need to shift things up to make room */
+		/* +2 for EOB chars. */
+		register int number_to_move = (yy_n_chars) + 2;
+		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+		register char *source =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
 
-                while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
-                        *--dest = *--source;
+		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			*--dest = *--source;
 
-                yy_cp += (int) (dest - source);
-                yy_bp += (int) (dest - source);
-                YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
-                        (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+		yy_cp += (int) (dest - source);
+		yy_bp += (int) (dest - source);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
 
-                if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
-                        YY_FATAL_ERROR( "flex scanner push-back overflow" );
-                }
+		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+			YY_FATAL_ERROR( "flex scanner push-back overflow" );
+		}
 
-        *--yy_cp = (char) c;
+	*--yy_cp = (char) c;
 
-        (yytext_ptr) = yy_bp;
-        (yy_hold_char) = *yy_cp;
-        (yy_c_buf_p) = yy_cp;
+	(yytext_ptr) = yy_bp;
+	(yy_hold_char) = *yy_cp;
+	(yy_c_buf_p) = yy_cp;
 }
 
 #ifndef YY_NO_INPUT
@@ -2294,71 +2242,71 @@ static int yy_get_next_buffer (void)
 #endif
 
 {
-        int c;
+	int c;
     
-        *(yy_c_buf_p) = (yy_hold_char);
-
-        if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
-                {
-                /* yy_c_buf_p now points to the character we want to return.
-                 * If this occurs *before* the EOB characters, then it's a
-                 * valid NUL; if not, then we've hit the end of the buffer.
-                 */
-                if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
-                        /* This was really a NUL. */
-                        *(yy_c_buf_p) = '\0';
-
-                else
-                        { /* need more input */
-                        yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
-                        ++(yy_c_buf_p);
-
-                        switch ( yy_get_next_buffer(  ) )
-                                {
-                                case EOB_ACT_LAST_MATCH:
-                                        /* This happens because yy_g_n_b()
-                                         * sees that we've accumulated a
-                                         * token and flags that we need to
-                                         * try matching the token before
-                                         * proceeding.  But for input(),
-                                         * there's no matching to consider.
-                                         * So convert the EOB_ACT_LAST_MATCH
-                                         * to EOB_ACT_END_OF_FILE.
-                                         */
-
-                                        /* Reset buffer status. */
-                                        gmsh_yyrestart(gmsh_yyin );
-
-                                        /*FALLTHROUGH*/
-
-                                case EOB_ACT_END_OF_FILE:
-                                        {
-                                        if ( gmsh_yywrap( ) )
-                                                return 0;
-
-                                        if ( ! (yy_did_buffer_switch_on_eof) )
-                                                YY_NEW_FILE;
+	*(yy_c_buf_p) = (yy_hold_char);
+
+	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+		{
+		/* yy_c_buf_p now points to the character we want to return.
+		 * If this occurs *before* the EOB characters, then it's a
+		 * valid NUL; if not, then we've hit the end of the buffer.
+		 */
+		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+			/* This was really a NUL. */
+			*(yy_c_buf_p) = '\0';
+
+		else
+			{ /* need more input */
+			int offset = (yy_c_buf_p) - (yytext_ptr);
+			++(yy_c_buf_p);
+
+			switch ( yy_get_next_buffer(  ) )
+				{
+				case EOB_ACT_LAST_MATCH:
+					/* This happens because yy_g_n_b()
+					 * sees that we've accumulated a
+					 * token and flags that we need to
+					 * try matching the token before
+					 * proceeding.  But for input(),
+					 * there's no matching to consider.
+					 * So convert the EOB_ACT_LAST_MATCH
+					 * to EOB_ACT_END_OF_FILE.
+					 */
+
+					/* Reset buffer status. */
+					gmsh_yyrestart(gmsh_yyin );
+
+					/*FALLTHROUGH*/
+
+				case EOB_ACT_END_OF_FILE:
+					{
+					if ( gmsh_yywrap( ) )
+						return 0;
+
+					if ( ! (yy_did_buffer_switch_on_eof) )
+						YY_NEW_FILE;
 #ifdef __cplusplus
-                                        return yyinput();
+					return yyinput();
 #else
-                                        return input();
+					return input();
 #endif
-                                        }
+					}
 
-                                case EOB_ACT_CONTINUE_SCAN:
-                                        (yy_c_buf_p) = (yytext_ptr) + offset;
-                                        break;
-                                }
-                        }
-                }
+				case EOB_ACT_CONTINUE_SCAN:
+					(yy_c_buf_p) = (yytext_ptr) + offset;
+					break;
+				}
+			}
+		}
 
-        c = *(unsigned char *) (yy_c_buf_p);    /* cast for 8-bit char's */
-        *(yy_c_buf_p) = '\0';   /* preserve gmsh_yytext */
-        (yy_hold_char) = *++(yy_c_buf_p);
+	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
+	*(yy_c_buf_p) = '\0';	/* preserve gmsh_yytext */
+	(yy_hold_char) = *++(yy_c_buf_p);
 
-        return c;
+	return c;
 }
-#endif  /* ifndef YY_NO_INPUT */
+#endif	/* ifndef YY_NO_INPUT */
 
 /** Immediately switch to a different input stream.
  * @param input_file A readable stream.
@@ -2368,14 +2316,14 @@ static int yy_get_next_buffer (void)
     void gmsh_yyrestart  (FILE * input_file )
 {
     
-        if ( ! YY_CURRENT_BUFFER ){
+	if ( ! YY_CURRENT_BUFFER ){
         gmsh_yyensure_buffer_stack ();
-                YY_CURRENT_BUFFER_LVALUE =
+		YY_CURRENT_BUFFER_LVALUE =
             gmsh_yy_create_buffer(gmsh_yyin,YY_BUF_SIZE );
-        }
+	}
 
-        gmsh_yy_init_buffer(YY_CURRENT_BUFFER,input_file );
-        gmsh_yy_load_buffer_state( );
+	gmsh_yy_init_buffer(YY_CURRENT_BUFFER,input_file );
+	gmsh_yy_load_buffer_state( );
 }
 
 /** Switch to a different input buffer.
@@ -2385,40 +2333,40 @@ static int yy_get_next_buffer (void)
     void gmsh_yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
 {
     
-        /* TODO. We should be able to replace this entire function body
-         * with
-         *              gmsh_yypop_buffer_state();
-         *              gmsh_yypush_buffer_state(new_buffer);
+	/* TODO. We should be able to replace this entire function body
+	 * with
+	 *		gmsh_yypop_buffer_state();
+	 *		gmsh_yypush_buffer_state(new_buffer);
      */
-        gmsh_yyensure_buffer_stack ();
-        if ( YY_CURRENT_BUFFER == new_buffer )
-                return;
-
-        if ( YY_CURRENT_BUFFER )
-                {
-                /* Flush out information for old buffer. */
-                *(yy_c_buf_p) = (yy_hold_char);
-                YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
-                YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-                }
-
-        YY_CURRENT_BUFFER_LVALUE = new_buffer;
-        gmsh_yy_load_buffer_state( );
-
-        /* We don't actually know whether we did this switch during
-         * EOF (gmsh_yywrap()) processing, but the only time this flag
-         * is looked at is after gmsh_yywrap() is called, so it's safe
-         * to go ahead and always set it.
-         */
-        (yy_did_buffer_switch_on_eof) = 1;
+	gmsh_yyensure_buffer_stack ();
+	if ( YY_CURRENT_BUFFER == new_buffer )
+		return;
+
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*(yy_c_buf_p) = (yy_hold_char);
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+	gmsh_yy_load_buffer_state( );
+
+	/* We don't actually know whether we did this switch during
+	 * EOF (gmsh_yywrap()) processing, but the only time this flag
+	 * is looked at is after gmsh_yywrap() is called, so it's safe
+	 * to go ahead and always set it.
+	 */
+	(yy_did_buffer_switch_on_eof) = 1;
 }
 
 static void gmsh_yy_load_buffer_state  (void)
 {
-        (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-        (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
-        gmsh_yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
-        (yy_hold_char) = *(yy_c_buf_p);
+    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+	gmsh_yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+	(yy_hold_char) = *(yy_c_buf_p);
 }
 
 /** Allocate and initialize an input buffer state.
@@ -2429,26 +2377,26 @@ static void gmsh_yy_load_buffer_state  (void)
  */
     YY_BUFFER_STATE gmsh_yy_create_buffer  (FILE * file, int  size )
 {
-        YY_BUFFER_STATE b;
+	YY_BUFFER_STATE b;
     
-        b = (YY_BUFFER_STATE) gmsh_yyalloc(sizeof( struct yy_buffer_state )  );
-        if ( ! b )
-                YY_FATAL_ERROR( "out of dynamic memory in gmsh_yy_create_buffer()" );
+	b = (YY_BUFFER_STATE) gmsh_yyalloc(sizeof( struct yy_buffer_state )  );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in gmsh_yy_create_buffer()" );
 
-        b->yy_buf_size = size;
+	b->yy_buf_size = size;
 
-        /* yy_ch_buf has to be 2 characters longer than the size given because
-         * we need to put in 2 end-of-buffer characters.
-         */
-        b->yy_ch_buf = (char *) gmsh_yyalloc(b->yy_buf_size + 2  );
-        if ( ! b->yy_ch_buf )
-                YY_FATAL_ERROR( "out of dynamic memory in gmsh_yy_create_buffer()" );
+	/* yy_ch_buf has to be 2 characters longer than the size given because
+	 * we need to put in 2 end-of-buffer characters.
+	 */
+	b->yy_ch_buf = (char *) gmsh_yyalloc(b->yy_buf_size + 2  );
+	if ( ! b->yy_ch_buf )
+		YY_FATAL_ERROR( "out of dynamic memory in gmsh_yy_create_buffer()" );
 
-        b->yy_is_our_buffer = 1;
+	b->yy_is_our_buffer = 1;
 
-        gmsh_yy_init_buffer(b,file );
+	gmsh_yy_init_buffer(b,file );
 
-        return b;
+	return b;
 }
 
 /** Destroy the buffer.
@@ -2458,16 +2406,16 @@ static void gmsh_yy_load_buffer_state  (void)
     void gmsh_yy_delete_buffer (YY_BUFFER_STATE  b )
 {
     
-        if ( ! b )
-                return;
+	if ( ! b )
+		return;
 
-        if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
-                YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
 
-        if ( b->yy_is_our_buffer )
-                gmsh_yyfree((void *) b->yy_ch_buf  );
+	if ( b->yy_is_our_buffer )
+		gmsh_yyfree((void *) b->yy_ch_buf  );
 
-        gmsh_yyfree((void *) b  );
+	gmsh_yyfree((void *) b  );
 }
 
 #ifndef __cplusplus
@@ -2481,12 +2429,12 @@ extern int isatty (int );
     static void gmsh_yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
 
 {
-        int oerrno = errno;
+	int oerrno = errno;
     
-        gmsh_yy_flush_buffer(b );
+	gmsh_yy_flush_buffer(b );
 
-        b->yy_input_file = file;
-        b->yy_fill_buffer = 1;
+	b->yy_input_file = file;
+	b->yy_fill_buffer = 1;
 
     /* If b is the current buffer, then gmsh_yy_init_buffer was _probably_
      * called from gmsh_yyrestart() or through yy_get_next_buffer.
@@ -2499,7 +2447,7 @@ extern int isatty (int );
 
         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
     
-        errno = oerrno;
+	errno = oerrno;
 }
 
 /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
@@ -2508,25 +2456,25 @@ extern int isatty (int );
  */
     void gmsh_yy_flush_buffer (YY_BUFFER_STATE  b )
 {
-        if ( ! b )
-                return;
+    	if ( ! b )
+		return;
 
-        b->yy_n_chars = 0;
+	b->yy_n_chars = 0;
 
-        /* We always need two end-of-buffer characters.  The first causes
-         * a transition to the end-of-buffer state.  The second causes
-         * a jam in that state.
-         */
-        b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
-        b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+	/* We always need two end-of-buffer characters.  The first causes
+	 * a transition to the end-of-buffer state.  The second causes
+	 * a jam in that state.
+	 */
+	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
 
-        b->yy_buf_pos = &b->yy_ch_buf[0];
+	b->yy_buf_pos = &b->yy_ch_buf[0];
 
-        b->yy_at_bol = 1;
-        b->yy_buffer_status = YY_BUFFER_NEW;
+	b->yy_at_bol = 1;
+	b->yy_buffer_status = YY_BUFFER_NEW;
 
-        if ( b == YY_CURRENT_BUFFER )
-                gmsh_yy_load_buffer_state( );
+	if ( b == YY_CURRENT_BUFFER )
+		gmsh_yy_load_buffer_state( );
 }
 
 /** Pushes the new state onto the stack. The new state becomes
@@ -2537,28 +2485,28 @@ extern int isatty (int );
  */
 void gmsh_yypush_buffer_state (YY_BUFFER_STATE new_buffer )
 {
-        if (new_buffer == NULL)
-                return;
-
-        gmsh_yyensure_buffer_stack();
-
-        /* This block is copied from gmsh_yy_switch_to_buffer. */
-        if ( YY_CURRENT_BUFFER )
-                {
-                /* Flush out information for old buffer. */
-                *(yy_c_buf_p) = (yy_hold_char);
-                YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
-                YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-                }
-
-        /* Only push if top exists. Otherwise, replace top. */
-        if (YY_CURRENT_BUFFER)
-                (yy_buffer_stack_top)++;
-        YY_CURRENT_BUFFER_LVALUE = new_buffer;
-
-        /* copied from gmsh_yy_switch_to_buffer. */
-        gmsh_yy_load_buffer_state( );
-        (yy_did_buffer_switch_on_eof) = 1;
+    	if (new_buffer == NULL)
+		return;
+
+	gmsh_yyensure_buffer_stack();
+
+	/* This block is copied from gmsh_yy_switch_to_buffer. */
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*(yy_c_buf_p) = (yy_hold_char);
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	/* Only push if top exists. Otherwise, replace top. */
+	if (YY_CURRENT_BUFFER)
+		(yy_buffer_stack_top)++;
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+	/* copied from gmsh_yy_switch_to_buffer. */
+	gmsh_yy_load_buffer_state( );
+	(yy_did_buffer_switch_on_eof) = 1;
 }
 
 /** Removes and deletes the top of the stack, if present.
@@ -2567,18 +2515,18 @@ void gmsh_yypush_buffer_state (YY_BUFFER_STATE new_buffer )
  */
 void gmsh_yypop_buffer_state (void)
 {
-        if (!YY_CURRENT_BUFFER)
-                return;
-
-        gmsh_yy_delete_buffer(YY_CURRENT_BUFFER );
-        YY_CURRENT_BUFFER_LVALUE = NULL;
-        if ((yy_buffer_stack_top) > 0)
-                --(yy_buffer_stack_top);
-
-        if (YY_CURRENT_BUFFER) {
-                gmsh_yy_load_buffer_state( );
-                (yy_did_buffer_switch_on_eof) = 1;
-        }
+    	if (!YY_CURRENT_BUFFER)
+		return;
+
+	gmsh_yy_delete_buffer(YY_CURRENT_BUFFER );
+	YY_CURRENT_BUFFER_LVALUE = NULL;
+	if ((yy_buffer_stack_top) > 0)
+		--(yy_buffer_stack_top);
+
+	if (YY_CURRENT_BUFFER) {
+		gmsh_yy_load_buffer_state( );
+		(yy_did_buffer_switch_on_eof) = 1;
+	}
 }
 
 /* Allocates the stack if it does not exist.
@@ -2586,45 +2534,41 @@ void gmsh_yypop_buffer_state (void)
  */
 static void gmsh_yyensure_buffer_stack (void)
 {
-        yy_size_t num_to_alloc;
+	int num_to_alloc;
     
-        if (!(yy_buffer_stack)) {
+	if (!(yy_buffer_stack)) {
 
-                /* First allocation is just for 2 elements, since we don't know if this
-                 * scanner will even need a stack. We use 2 instead of 1 to avoid an
-                 * immediate realloc on the next call.
+		/* First allocation is just for 2 elements, since we don't know if this
+		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
+		 * immediate realloc on the next call.
          */
-                num_to_alloc = 1;
-                (yy_buffer_stack) = (struct yy_buffer_state**)gmsh_yyalloc
-                                                                (num_to_alloc * sizeof(struct yy_buffer_state*)
-                                                                );
-                if ( ! (yy_buffer_stack) )
-                        YY_FATAL_ERROR( "out of dynamic memory in gmsh_yyensure_buffer_stack()" );
-                                                                  
-                memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-                                
-                (yy_buffer_stack_max) = num_to_alloc;
-                (yy_buffer_stack_top) = 0;
-                return;
-        }
-
-        if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
-
-                /* Increase the buffer to prepare for a possible push. */
-                int grow_size = 8 /* arbitrary grow size */;
-
-                num_to_alloc = (yy_buffer_stack_max) + grow_size;
-                (yy_buffer_stack) = (struct yy_buffer_state**)gmsh_yyrealloc
-                                                                ((yy_buffer_stack),
-                                                                num_to_alloc * sizeof(struct yy_buffer_state*)
-                                                                );
-                if ( ! (yy_buffer_stack) )
-                        YY_FATAL_ERROR( "out of dynamic memory in gmsh_yyensure_buffer_stack()" );
-
-                /* zero only the new slots.*/
-                memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
-                (yy_buffer_stack_max) = num_to_alloc;
-        }
+		num_to_alloc = 1;
+		(yy_buffer_stack) = (struct yy_buffer_state**)gmsh_yyalloc
+								(num_to_alloc * sizeof(struct yy_buffer_state*)
+								);
+		
+		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+				
+		(yy_buffer_stack_max) = num_to_alloc;
+		(yy_buffer_stack_top) = 0;
+		return;
+	}
+
+	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+		/* Increase the buffer to prepare for a possible push. */
+		int grow_size = 8 /* arbitrary grow size */;
+
+		num_to_alloc = (yy_buffer_stack_max) + grow_size;
+		(yy_buffer_stack) = (struct yy_buffer_state**)gmsh_yyrealloc
+								((yy_buffer_stack),
+								num_to_alloc * sizeof(struct yy_buffer_state*)
+								);
+
+		/* zero only the new slots.*/
+		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+		(yy_buffer_stack_max) = num_to_alloc;
+	}
 }
 
 /** Setup the input buffer state to scan directly from a user-specified character buffer.
@@ -2635,36 +2579,36 @@ static void gmsh_yyensure_buffer_stack (void)
  */
 YY_BUFFER_STATE gmsh_yy_scan_buffer  (char * base, yy_size_t  size )
 {
-        YY_BUFFER_STATE b;
+	YY_BUFFER_STATE b;
     
-        if ( size < 2 ||
-             base[size-2] != YY_END_OF_BUFFER_CHAR ||
-             base[size-1] != YY_END_OF_BUFFER_CHAR )
-                /* They forgot to leave room for the EOB's. */
-                return 0;
-
-        b = (YY_BUFFER_STATE) gmsh_yyalloc(sizeof( struct yy_buffer_state )  );
-        if ( ! b )
-                YY_FATAL_ERROR( "out of dynamic memory in gmsh_yy_scan_buffer()" );
-
-        b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
-        b->yy_buf_pos = b->yy_ch_buf = base;
-        b->yy_is_our_buffer = 0;
-        b->yy_input_file = 0;
-        b->yy_n_chars = b->yy_buf_size;
-        b->yy_is_interactive = 0;
-        b->yy_at_bol = 1;
-        b->yy_fill_buffer = 0;
-        b->yy_buffer_status = YY_BUFFER_NEW;
-
-        gmsh_yy_switch_to_buffer(b  );
-
-        return b;
+	if ( size < 2 ||
+	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
+	     base[size-1] != YY_END_OF_BUFFER_CHAR )
+		/* They forgot to leave room for the EOB's. */
+		return 0;
+
+	b = (YY_BUFFER_STATE) gmsh_yyalloc(sizeof( struct yy_buffer_state )  );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in gmsh_yy_scan_buffer()" );
+
+	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
+	b->yy_buf_pos = b->yy_ch_buf = base;
+	b->yy_is_our_buffer = 0;
+	b->yy_input_file = 0;
+	b->yy_n_chars = b->yy_buf_size;
+	b->yy_is_interactive = 0;
+	b->yy_at_bol = 1;
+	b->yy_fill_buffer = 0;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	gmsh_yy_switch_to_buffer(b  );
+
+	return b;
 }
 
 /** Setup the input buffer state to scan a string. The next call to gmsh_yylex() will
  * scan from a @e copy of @a str.
- * @param yystr a NUL-terminated string to scan
+ * @param str a NUL-terminated string to scan
  * 
  * @return the newly allocated buffer state object.
  * @note If you want to scan bytes that may contain NUL values, then use
@@ -2673,7 +2617,7 @@ YY_BUFFER_STATE gmsh_yy_scan_buffer  (char * base, yy_size_t  size )
 YY_BUFFER_STATE gmsh_yy_scan_string (yyconst char * yystr )
 {
     
-        return gmsh_yy_scan_bytes(yystr,strlen(yystr) );
+	return gmsh_yy_scan_bytes(yystr,strlen(yystr) );
 }
 
 /** Setup the input buffer state to scan the given bytes. The next call to gmsh_yylex() will
@@ -2683,33 +2627,34 @@ YY_BUFFER_STATE gmsh_yy_scan_string (yyconst char * yystr )
  * 
  * @return the newly allocated buffer state object.
  */
-YY_BUFFER_STATE gmsh_yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
+YY_BUFFER_STATE gmsh_yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
 {
-        YY_BUFFER_STATE b;
-        char *buf;
-        yy_size_t n, i;
+	YY_BUFFER_STATE b;
+	char *buf;
+	yy_size_t n;
+	int i;
     
-        /* Get memory for full buffer, including space for trailing EOB's. */
-        n = _yybytes_len + 2;
-        buf = (char *) gmsh_yyalloc(n  );
-        if ( ! buf )
-                YY_FATAL_ERROR( "out of dynamic memory in gmsh_yy_scan_bytes()" );
+	/* Get memory for full buffer, including space for trailing EOB's. */
+	n = _yybytes_len + 2;
+	buf = (char *) gmsh_yyalloc(n  );
+	if ( ! buf )
+		YY_FATAL_ERROR( "out of dynamic memory in gmsh_yy_scan_bytes()" );
 
-        for ( i = 0; i < _yybytes_len; ++i )
-                buf[i] = yybytes[i];
+	for ( i = 0; i < _yybytes_len; ++i )
+		buf[i] = yybytes[i];
 
-        buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
 
-        b = gmsh_yy_scan_buffer(buf,n );
-        if ( ! b )
-                YY_FATAL_ERROR( "bad buffer in gmsh_yy_scan_bytes()" );
+	b = gmsh_yy_scan_buffer(buf,n );
+	if ( ! b )
+		YY_FATAL_ERROR( "bad buffer in gmsh_yy_scan_bytes()" );
 
-        /* It's okay to grow etc. this buffer, and we should throw it
-         * away when we're done.
-         */
-        b->yy_is_our_buffer = 1;
+	/* It's okay to grow etc. this buffer, and we should throw it
+	 * away when we're done.
+	 */
+	b->yy_is_our_buffer = 1;
 
-        return b;
+	return b;
 }
 
 #ifndef YY_EXIT_FAILURE
@@ -2718,26 +2663,26 @@ YY_BUFFER_STATE gmsh_yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes
 
 static void yy_fatal_error (yyconst char* msg )
 {
-        (void) fprintf( stderr, "%s\n", msg );
-        exit( YY_EXIT_FAILURE );
+    	(void) fprintf( stderr, "%s\n", msg );
+	exit( YY_EXIT_FAILURE );
 }
 
 /* Redefine yyless() so it works in section 3 code. */
 
 #undef yyless
 #define yyless(n) \
-        do \
-                { \
-                /* Undo effects of setting up gmsh_yytext. */ \
+	do \
+		{ \
+		/* Undo effects of setting up gmsh_yytext. */ \
         int yyless_macro_arg = (n); \
         YY_LESS_LINENO(yyless_macro_arg);\
-                gmsh_yytext[gmsh_yyleng] = (yy_hold_char); \
-                (yy_c_buf_p) = gmsh_yytext + yyless_macro_arg; \
-                (yy_hold_char) = *(yy_c_buf_p); \
-                *(yy_c_buf_p) = '\0'; \
-                gmsh_yyleng = yyless_macro_arg; \
-                } \
-        while ( 0 )
+		gmsh_yytext[gmsh_yyleng] = (yy_hold_char); \
+		(yy_c_buf_p) = gmsh_yytext + yyless_macro_arg; \
+		(yy_hold_char) = *(yy_c_buf_p); \
+		*(yy_c_buf_p) = '\0'; \
+		gmsh_yyleng = yyless_macro_arg; \
+		} \
+	while ( 0 )
 
 /* Accessor  methods (get/set functions) to struct members. */
 
@@ -2769,7 +2714,7 @@ FILE *gmsh_yyget_out  (void)
 /** Get the length of the current token.
  * 
  */
-yy_size_t gmsh_yyget_leng  (void)
+int gmsh_yyget_leng  (void)
 {
         return gmsh_yyleng;
 }
@@ -2852,15 +2797,15 @@ int gmsh_yylex_destroy  (void)
 {
     
     /* Pop the buffer stack, destroying each element. */
-        while(YY_CURRENT_BUFFER){
-                gmsh_yy_delete_buffer(YY_CURRENT_BUFFER  );
-                YY_CURRENT_BUFFER_LVALUE = NULL;
-                gmsh_yypop_buffer_state();
-        }
+	while(YY_CURRENT_BUFFER){
+		gmsh_yy_delete_buffer(YY_CURRENT_BUFFER  );
+		YY_CURRENT_BUFFER_LVALUE = NULL;
+		gmsh_yypop_buffer_state();
+	}
 
-        /* Destroy the stack itself. */
-        gmsh_yyfree((yy_buffer_stack) );
-        (yy_buffer_stack) = NULL;
+	/* Destroy the stack itself. */
+	gmsh_yyfree((yy_buffer_stack) );
+	(yy_buffer_stack) = NULL;
 
     /* Reset the globals. This is important in a non-reentrant scanner so the next time
      * gmsh_yylex() is called, initialization will occur. */
@@ -2876,43 +2821,43 @@ int gmsh_yylex_destroy  (void)
 #ifndef yytext_ptr
 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
 {
-        register int i;
-        for ( i = 0; i < n; ++i )
-                s1[i] = s2[i];
+	register int i;
+	for ( i = 0; i < n; ++i )
+		s1[i] = s2[i];
 }
 #endif
 
 #ifdef YY_NEED_STRLEN
 static int yy_flex_strlen (yyconst char * s )
 {
-        register int n;
-        for ( n = 0; s[n]; ++n )
-                ;
+	register int n;
+	for ( n = 0; s[n]; ++n )
+		;
 
-        return n;
+	return n;
 }
 #endif
 
 void *gmsh_yyalloc (yy_size_t  size )
 {
-        return (void *) malloc( size );
+	return (void *) malloc( size );
 }
 
 void *gmsh_yyrealloc  (void * ptr, yy_size_t  size )
 {
-        /* The cast to (char *) in the following accommodates both
-         * implementations that use char* generic pointers, and those
-         * that use void* generic pointers.  It works with the latter
-         * because both ANSI C and C++ allow castless assignment from
-         * any pointer type to void*, and deal with argument conversions
-         * as though doing an assignment.
-         */
-        return (void *) realloc( (char *) ptr, size );
+	/* The cast to (char *) in the following accommodates both
+	 * implementations that use char* generic pointers, and those
+	 * that use void* generic pointers.  It works with the latter
+	 * because both ANSI C and C++ allow castless assignment from
+	 * any pointer type to void*, and deal with argument conversions
+	 * as though doing an assignment.
+	 */
+	return (void *) realloc( (char *) ptr, size );
 }
 
 void gmsh_yyfree (void * ptr )
 {
-        free( (char *) ptr );   /* see gmsh_yyrealloc() for (char *) cast */
+	free( (char *) ptr );	/* see gmsh_yyrealloc() for (char *) cast */
 }
 
 #define YYTABLES_NAME "yytables"
@@ -2932,7 +2877,7 @@ void skipcomments(void)
   while (1) {
     while ((c = yyinput()) != '*'){
       if(feof(gmsh_yyin)){
-        Msg::Error("End of file in commented region");
+	Msg::Error("End of file in commented region");
         return;
       }
     }
@@ -2999,8 +2944,8 @@ void skip_until(const char *skip, const char *until)
     while (1){
       chars[0] = yyinput();
       if(feof(gmsh_yyin)){
-        Msg::Error("Unexpected end of file");
-        return;
+	Msg::Error("Unexpected end of file");
+	return;
       }
       if(chars[0] == until[0]) break;
       if(skip && chars[0] == skip[0]) break;
@@ -3014,17 +2959,17 @@ void skip_until(const char *skip, const char *until)
     for(i=1; i<l; i++){
       chars[i] = yyinput();
       if(feof(gmsh_yyin)){
-        l = i;
-        break;
+	l = i;
+	break;
       }
     }
 
     if(!strncmp(chars,until,l_until)){
       if(!nb_skip){
-        return;
+	return;
       }
       else{
-        nb_skip--;
+	nb_skip--;
       }
     }
     else if(skip && !strncmp(chars,skip,l_skip)){
@@ -3032,7 +2977,7 @@ void skip_until(const char *skip, const char *until)
     }
     else{
       for(i=1;i<l-1;i++){
-        unput(chars[l-i]);
+	unput(chars[l-i]);
       }
     }
 
diff --git a/Plugin/Distance.cpp b/Plugin/Distance.cpp
index ae97e89d1aa34a9cf4ed60666109a67e4097d32a..a5cb8df70e4480ece4de55d9fc82c069608dbb43 100644
--- a/Plugin/Distance.cpp
+++ b/Plugin/Distance.cpp
@@ -165,7 +165,6 @@ PView *GMSH_DistancePlugin::execute(PView *v)
 
   double L = norm(SVector3(bbox.max(), bbox.min())); 
   double mu = L/28;
-  printf("L=%g \n", L);
 
   simpleFunction<double> DIFF(mu * mu), MONE(1.0);
   distanceTerm distance(GModel::current(), 1, &DIFF, &MONE);
diff --git a/Solver/multiscaleLaplace.cpp b/Solver/multiscaleLaplace.cpp
index 18d3749fb0fdab05279a4f463326cf2e18c08439..7abbceeb700bf2206b69bf750aa81ae1eb4819e8 100644
--- a/Solver/multiscaleLaplace.cpp
+++ b/Solver/multiscaleLaplace.cpp
@@ -308,7 +308,6 @@ static void recur_compute_centers_ (double R, double a1, double a2,
     printf("!!!!!!!! ARG added = %d != %d (bounds=%d, child=%d)\n",  added, 
            (int)(boundaries.size() - 1 - root->children.size()), (int)boundaries.size(), 
            (int)root->children.size());
-    //exit(1);
   }
 
   //sort centers
@@ -947,8 +946,8 @@ void multiscaleLaplace::parametrize (multiscaleLaplaceLevel & level){
     MElement *e = level.elements[i];
     std::vector<SPoint2> localCoord;
     double local_size = localSize(e,solution);
-    if (local_size < 5.e-4*global_size) //1.e-5
-      tooSmall.push_back(e);
+    if (local_size < 1.e-5*global_size) //1.e-5
+        tooSmall.push_back(e);
     else  goodSize.push_back(e);
   }
 
@@ -996,7 +995,7 @@ void multiscaleLaplace::parametrize (multiscaleLaplaceLevel & level){
 //       double area = fabs(triangle_area(q0, q1, q2));   
 //       totArea  += area;
       double local_size = localSize(e,solution);
-      if (local_size < 5.e-6 * global_size) //1.e-7
+      if (local_size < 1.e-7 * global_size) //1.e-7
         really_small_elements = true;
     }
     //center *= (1./regions_[i].size());