From eae1a35e4004f70c27db6aef6abd20338c089eae Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Tue, 4 Apr 2006 04:32:34 +0000
Subject: [PATCH] - fix discrete surf (for the 100000th time) - new Status N
 command in parser to force mesh status - create reverse discrete curves

---
 Mesh/DiscreteSurface.cpp |   7 +-
 Mesh/Read_Mesh.cpp       |   3 +-
 Parser/Gmsh.tab.cpp      | 442 ++++++++++++++++++++-------------------
 Parser/Gmsh.y            |   5 +-
 Parser/Gmsh.yy.cpp       |   4 +-
 doc/texinfo/gmsh.texi    |   5 +-
 6 files changed, 241 insertions(+), 225 deletions(-)

diff --git a/Mesh/DiscreteSurface.cpp b/Mesh/DiscreteSurface.cpp
index 2e62d1ecc0..14a3ad922a 100644
--- a/Mesh/DiscreteSurface.cpp
+++ b/Mesh/DiscreteSurface.cpp
@@ -1,4 +1,4 @@
-// $Id: DiscreteSurface.cpp,v 1.38 2006-03-08 17:04:59 remacle Exp $
+// $Id: DiscreteSurface.cpp,v 1.39 2006-04-04 04:32:31 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -451,6 +451,11 @@ int MeshDiscreteSurface(Surface * s)
     }
     return 2;
   }
+  else if(s->Typ == MSH_SURF_DISCRETE) {
+    // nothing else to do: we assume that the surface is represented
+    // by a mesh that will not be modified
+    return 1;
+  }
   else
     return 0;
 }
diff --git a/Mesh/Read_Mesh.cpp b/Mesh/Read_Mesh.cpp
index c298e28691..42adc73243 100644
--- a/Mesh/Read_Mesh.cpp
+++ b/Mesh/Read_Mesh.cpp
@@ -1,4 +1,4 @@
-// $Id: Read_Mesh.cpp,v 1.102 2006-03-29 01:45:13 geuzaine Exp $
+// $Id: Read_Mesh.cpp,v 1.103 2006-04-04 04:32:31 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -61,6 +61,7 @@ Curve *addElementaryCurve(Mesh * M, int Num)
   if(!(c = FindCurve(Num, M))) {
     c = Create_Curve(Num, MSH_SEGM_DISCRETE, 0, NULL, NULL, -1, -1, 0., 1.);
     Tree_Add(M->Curves, &c);
+    CreateReversedCurve(M, c);
   }
   return c;
 }
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 2f874c4921..ade0e04657 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -126,7 +126,7 @@
 
 #line 1 "Gmsh.y"
 
-// $Id: Gmsh.tab.cpp,v 1.263 2006-03-17 21:04:34 geuzaine Exp $
+// $Id: Gmsh.tab.cpp,v 1.264 2006-04-04 04:32:31 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -519,26 +519,26 @@ static const short yyrline[] = { 0,
   1497,  1517,  1523,  1528,  1533,  1540,  1542,  1543,  1546,  1551,
   1555,  1571,  1587,  1603,  1623,  1638,  1644,  1650,  1661,  1671,
   1681,  1695,  1713,  1727,  1736,  1742,  1753,  1766,  1811,  1826,
-  1837,  1853,  1863,  1885,  1889,  1894,  1899,  1910,  1927,  1943,
-  1969,  1996,  2028,  2035,  2040,  2046,  2050,  2058,  2067,  2075,
-  2083,  2088,  2096,  2101,  2109,  2114,  2124,  2131,  2138,  2145,
-  2152,  2159,  2166,  2173,  2180,  2187,  2192,  2199,  2204,  2211,
-  2216,  2223,  2228,  2235,  2240,  2247,  2252,  2259,  2264,  2271,
-  2276,  2283,  2288,  2298,  2302,  2307,  2334,  2358,  2366,  2385,
-  2403,  2421,  2450,  2485,  2512,  2539,  2553,  2571,  2576,  2585,
-  2587,  2588,  2589,  2590,  2591,  2592,  2593,  2594,  2601,  2602,
-  2603,  2604,  2605,  2606,  2607,  2608,  2609,  2610,  2611,  2612,
-  2613,  2614,  2615,  2616,  2617,  2618,  2619,  2620,  2621,  2622,
-  2623,  2624,  2625,  2626,  2627,  2628,  2629,  2630,  2631,  2632,
-  2634,  2635,  2636,  2637,  2638,  2639,  2640,  2641,  2642,  2643,
-  2644,  2645,  2646,  2647,  2648,  2649,  2650,  2651,  2652,  2653,
-  2654,  2659,  2664,  2665,  2666,  2667,  2668,  2669,  2673,  2686,
-  2706,  2720,  2733,  2756,  2774,  2792,  2810,  2828,  2835,  2840,
-  2844,  2848,  2852,  2858,  2863,  2867,  2871,  2877,  2881,  2885,
-  2891,  2897,  2904,  2910,  2914,  2919,  2923,  2934,  2941,  2952,
-  2972,  2982,  2992,  3002,  3019,  3038,  3062,  3090,  3096,  3100,
-  3104,  3116,  3121,  3133,  3140,  3161,  3166,  3180,  3186,  3192,
-  3197,  3205,  3213,  3227,  3241,  3245,  3264,  3286
+  1837,  1857,  1867,  1889,  1893,  1898,  1903,  1914,  1931,  1947,
+  1973,  2000,  2032,  2039,  2044,  2050,  2054,  2062,  2071,  2079,
+  2087,  2092,  2100,  2105,  2113,  2118,  2128,  2135,  2142,  2149,
+  2156,  2163,  2170,  2177,  2184,  2191,  2196,  2203,  2208,  2215,
+  2220,  2227,  2232,  2239,  2244,  2251,  2256,  2263,  2268,  2275,
+  2280,  2287,  2292,  2302,  2306,  2311,  2338,  2362,  2370,  2389,
+  2407,  2425,  2454,  2489,  2516,  2543,  2557,  2575,  2580,  2589,
+  2591,  2592,  2593,  2594,  2595,  2596,  2597,  2598,  2605,  2606,
+  2607,  2608,  2609,  2610,  2611,  2612,  2613,  2614,  2615,  2616,
+  2617,  2618,  2619,  2620,  2621,  2622,  2623,  2624,  2625,  2626,
+  2627,  2628,  2629,  2630,  2631,  2632,  2633,  2634,  2635,  2636,
+  2638,  2639,  2640,  2641,  2642,  2643,  2644,  2645,  2646,  2647,
+  2648,  2649,  2650,  2651,  2652,  2653,  2654,  2655,  2656,  2657,
+  2658,  2663,  2668,  2669,  2670,  2671,  2672,  2673,  2677,  2690,
+  2710,  2724,  2737,  2760,  2778,  2796,  2814,  2832,  2839,  2844,
+  2848,  2852,  2856,  2862,  2867,  2871,  2875,  2881,  2885,  2889,
+  2895,  2901,  2908,  2914,  2918,  2923,  2927,  2938,  2945,  2956,
+  2976,  2986,  2996,  3006,  3023,  3042,  3066,  3094,  3100,  3104,
+  3108,  3120,  3125,  3137,  3144,  3165,  3170,  3184,  3190,  3196,
+  3201,  3209,  3217,  3231,  3245,  3249,  3268,  3290
 };
 #endif
 
@@ -4512,6 +4512,10 @@ case 131:
       else if(!strcmp(yyvsp[-2].c, "Mesh")){
 	yymsg(GERROR, "Mesh directives are not (yet) allowed in scripts");
       }
+      else if(!strcmp(yyvsp[-2].c, "Status")){
+	THEM->status = (int)yyvsp[-1].d;
+	printf("parser stat = %d\n", THEM->status);
+      }
       else{
 	yymsg(GERROR, "Unknown command '%s'", yyvsp[-2].c);
       }
@@ -4519,7 +4523,7 @@ case 131:
     ;
     break;}
 case 132:
-#line 1854 "Gmsh.y"
+#line 1858 "Gmsh.y"
 {
        try {
 	 GMSH_PluginManager::instance()->action(yyvsp[-4].c, yyvsp[-1].c, 0);
@@ -4531,7 +4535,7 @@ case 132:
      ;
     break;}
 case 133:
-#line 1864 "Gmsh.y"
+#line 1868 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-1].c, "ElementsFromAllViews"))
 	CombineViews(0, 1, CTX.post.combine_remove_orig);
@@ -4555,27 +4559,27 @@ case 133:
     ;
     break;}
 case 134:
-#line 1886 "Gmsh.y"
+#line 1890 "Gmsh.y"
 {
       exit(0);
     ;
     break;}
 case 135:
-#line 1890 "Gmsh.y"
+#line 1894 "Gmsh.y"
 {
       CTX.forced_bbox = 0;
       SetBoundingBox();
     ;
     break;}
 case 136:
-#line 1895 "Gmsh.y"
+#line 1899 "Gmsh.y"
 {
       CTX.forced_bbox = 1;
       SetBoundingBox(yyvsp[-12].d, yyvsp[-10].d, yyvsp[-8].d, yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d);
     ;
     break;}
 case 137:
-#line 1900 "Gmsh.y"
+#line 1904 "Gmsh.y"
 {
 #if defined(HAVE_FLTK)
       if(!CTX.batch) // we're in interactive mode
@@ -4584,7 +4588,7 @@ case 137:
     ;
     break;}
 case 138:
-#line 1913 "Gmsh.y"
+#line 1917 "Gmsh.y"
 {
       LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d;
       LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-1].d;
@@ -4601,7 +4605,7 @@ case 138:
     ;
     break;}
 case 139:
-#line 1928 "Gmsh.y"
+#line 1932 "Gmsh.y"
 {
       LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d;
       LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-3].d;
@@ -4619,7 +4623,7 @@ case 139:
     ;
     break;}
 case 140:
-#line 1944 "Gmsh.y"
+#line 1948 "Gmsh.y"
 {
       LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d;
       LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-1].d;
@@ -4647,7 +4651,7 @@ case 140:
     ;
     break;}
 case 141:
-#line 1970 "Gmsh.y"
+#line 1974 "Gmsh.y"
 {
       LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d;
       LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-3].d;
@@ -4676,7 +4680,7 @@ case 141:
     ;
     break;}
 case 142:
-#line 1997 "Gmsh.y"
+#line 2001 "Gmsh.y"
 {
       if(ImbricatedLoop <= 0){
 	yymsg(GERROR, "Invalid For/EndFor loop");
@@ -4710,7 +4714,7 @@ case 142:
     ;
     break;}
 case 143:
-#line 2029 "Gmsh.y"
+#line 2033 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->createFunction(yyvsp[0].c, yyin, yyname, yylineno))
 	yymsg(GERROR, "Redefinition of function %s", yyvsp[0].c);
@@ -4719,14 +4723,14 @@ case 143:
     ;
     break;}
 case 144:
-#line 2036 "Gmsh.y"
+#line 2040 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->leaveFunction(&yyin, yyname, yylineno))
 	yymsg(GERROR, "Error while exiting function");
     ;
     break;}
 case 145:
-#line 2041 "Gmsh.y"
+#line 2045 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->enterFunction(yyvsp[-1].c, &yyin, yyname, yylineno))
 	yymsg(GERROR, "Unknown function %s", yyvsp[-1].c);
@@ -4734,18 +4738,18 @@ case 145:
     ;
     break;}
 case 146:
-#line 2047 "Gmsh.y"
+#line 2051 "Gmsh.y"
 {
       if(!yyvsp[-1].d) skip_until("If", "EndIf");
     ;
     break;}
 case 147:
-#line 2051 "Gmsh.y"
+#line 2055 "Gmsh.y"
 {
     ;
     break;}
 case 148:
-#line 2060 "Gmsh.y"
+#line 2064 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, yyvsp[-1].l, 
@@ -4755,7 +4759,7 @@ case 148:
     ;
     break;}
 case 149:
-#line 2068 "Gmsh.y"
+#line 2072 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, yyvsp[-1].l, 
@@ -4765,7 +4769,7 @@ case 149:
     ;
     break;}
 case 150:
-#line 2076 "Gmsh.y"
+#line 2080 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, yyvsp[-1].l, 
@@ -4775,14 +4779,14 @@ case 150:
     ;
     break;}
 case 151:
-#line 2084 "Gmsh.y"
+#line 2088 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 152:
-#line 2089 "Gmsh.y"
+#line 2093 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, yyvsp[-3].l, 
@@ -4792,14 +4796,14 @@ case 152:
     ;
     break;}
 case 153:
-#line 2097 "Gmsh.y"
+#line 2101 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 154:
-#line 2102 "Gmsh.y"
+#line 2106 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, yyvsp[-3].l, 
@@ -4809,14 +4813,14 @@ case 154:
     ;
     break;}
 case 155:
-#line 2110 "Gmsh.y"
+#line 2114 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 156:
-#line 2115 "Gmsh.y"
+#line 2119 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, yyvsp[-3].l, 
@@ -4826,7 +4830,7 @@ case 156:
     ;
     break;}
 case 157:
-#line 2125 "Gmsh.y"
+#line 2129 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)yyvsp[-4].d, 
@@ -4835,7 +4839,7 @@ case 157:
     ;
     break;}
 case 158:
-#line 2132 "Gmsh.y"
+#line 2136 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)yyvsp[-4].d, 
@@ -4844,7 +4848,7 @@ case 158:
     ;
     break;}
 case 159:
-#line 2139 "Gmsh.y"
+#line 2143 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)yyvsp[-4].d, 
@@ -4853,7 +4857,7 @@ case 159:
     ;
     break;}
 case 160:
-#line 2146 "Gmsh.y"
+#line 2150 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)yyvsp[-8].d, 
@@ -4862,7 +4866,7 @@ case 160:
     ;
     break;}
 case 161:
-#line 2153 "Gmsh.y"
+#line 2157 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)yyvsp[-8].d, 
@@ -4871,7 +4875,7 @@ case 161:
     ;
     break;}
 case 162:
-#line 2160 "Gmsh.y"
+#line 2164 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)yyvsp[-8].d, 
@@ -4880,7 +4884,7 @@ case 162:
     ;
     break;}
 case 163:
-#line 2167 "Gmsh.y"
+#line 2171 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)yyvsp[-10].d, 
@@ -4889,7 +4893,7 @@ case 163:
     ;
     break;}
 case 164:
-#line 2174 "Gmsh.y"
+#line 2178 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)yyvsp[-10].d, 
@@ -4898,7 +4902,7 @@ case 164:
     ;
     break;}
 case 165:
-#line 2181 "Gmsh.y"
+#line 2185 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)yyvsp[-10].d, 
@@ -4907,14 +4911,14 @@ case 165:
     ;
     break;}
 case 166:
-#line 2188 "Gmsh.y"
+#line 2192 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 167:
-#line 2193 "Gmsh.y"
+#line 2197 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)yyvsp[-8].d, 
@@ -4923,14 +4927,14 @@ case 167:
     ;
     break;}
 case 168:
-#line 2200 "Gmsh.y"
+#line 2204 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 169:
-#line 2205 "Gmsh.y"
+#line 2209 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)yyvsp[-8].d, 
@@ -4939,14 +4943,14 @@ case 169:
     ;
     break;}
 case 170:
-#line 2212 "Gmsh.y"
+#line 2216 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 171:
-#line 2217 "Gmsh.y"
+#line 2221 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)yyvsp[-8].d, 
@@ -4955,14 +4959,14 @@ case 171:
     ;
     break;}
 case 172:
-#line 2224 "Gmsh.y"
+#line 2228 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 173:
-#line 2229 "Gmsh.y"
+#line 2233 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)yyvsp[-12].d, 
@@ -4971,14 +4975,14 @@ case 173:
     ;
     break;}
 case 174:
-#line 2236 "Gmsh.y"
+#line 2240 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 175:
-#line 2241 "Gmsh.y"
+#line 2245 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)yyvsp[-12].d, 
@@ -4987,14 +4991,14 @@ case 175:
     ;
     break;}
 case 176:
-#line 2248 "Gmsh.y"
+#line 2252 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 177:
-#line 2253 "Gmsh.y"
+#line 2257 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)yyvsp[-12].d, 
@@ -5003,14 +5007,14 @@ case 177:
     ;
     break;}
 case 178:
-#line 2260 "Gmsh.y"
+#line 2264 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 179:
-#line 2265 "Gmsh.y"
+#line 2269 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)yyvsp[-14].d, 
@@ -5019,14 +5023,14 @@ case 179:
     ;
     break;}
 case 180:
-#line 2272 "Gmsh.y"
+#line 2276 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 181:
-#line 2277 "Gmsh.y"
+#line 2281 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)yyvsp[-14].d, 
@@ -5035,14 +5039,14 @@ case 181:
     ;
     break;}
 case 182:
-#line 2284 "Gmsh.y"
+#line 2288 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 183:
-#line 2289 "Gmsh.y"
+#line 2293 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)yyvsp[-14].d, 
@@ -5051,17 +5055,17 @@ case 183:
     ;
     break;}
 case 184:
-#line 2300 "Gmsh.y"
+#line 2304 "Gmsh.y"
 {
     ;
     break;}
 case 185:
-#line 2303 "Gmsh.y"
+#line 2307 "Gmsh.y"
 {
     ;
     break;}
 case 186:
-#line 2309 "Gmsh.y"
+#line 2313 "Gmsh.y"
 {
       double d;
       extr.mesh.ExtrudeMesh = true;
@@ -5089,7 +5093,7 @@ case 186:
     ;
     break;}
 case 187:
-#line 2335 "Gmsh.y"
+#line 2339 "Gmsh.y"
 {
       double d;
       extr.mesh.ExtrudeMesh = true;
@@ -5115,13 +5119,13 @@ case 187:
     ;
     break;}
 case 188:
-#line 2359 "Gmsh.y"
+#line 2363 "Gmsh.y"
 {
       extr.mesh.Recombine = true;
     ;
     break;}
 case 189:
-#line 2368 "Gmsh.y"
+#line 2372 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-3].l); i++){
 	double d;
@@ -5141,7 +5145,7 @@ case 189:
     ;
     break;}
 case 190:
-#line 2386 "Gmsh.y"
+#line 2390 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-6].l); i++){
 	double d;
@@ -5161,7 +5165,7 @@ case 190:
     ;
     break;}
 case 191:
-#line 2404 "Gmsh.y"
+#line 2408 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-6].l); i++){
 	double d;
@@ -5181,7 +5185,7 @@ case 191:
     ;
     break;}
 case 192:
-#line 2422 "Gmsh.y"
+#line 2426 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d, THEM);
       if(!s)
@@ -5212,7 +5216,7 @@ case 192:
     ;
     break;}
 case 193:
-#line 2451 "Gmsh.y"
+#line 2455 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-5].d, THEM);
       if(!s)
@@ -5249,7 +5253,7 @@ case 193:
     ;
     break;}
 case 194:
-#line 2486 "Gmsh.y"
+#line 2490 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d, THEM);
       if(!s)
@@ -5278,7 +5282,7 @@ case 194:
     ;
     break;}
 case 195:
-#line 2513 "Gmsh.y"
+#line 2517 "Gmsh.y"
 {
       Volume *v = FindVolume((int)yyvsp[-4].d, THEM);
       if(!v)
@@ -5307,7 +5311,7 @@ case 195:
     ;
     break;}
 case 196:
-#line 2540 "Gmsh.y"
+#line 2544 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-3].l); i++){
 	double d;
@@ -5323,7 +5327,7 @@ case 196:
     ;
     break;}
 case 197:
-#line 2554 "Gmsh.y"
+#line 2558 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
 	double d;
@@ -5338,51 +5342,51 @@ case 197:
     ;
     break;}
 case 198:
-#line 2573 "Gmsh.y"
+#line 2577 "Gmsh.y"
 { 
       ReplaceAllDuplicates(THEM);
     ;
     break;}
 case 199:
-#line 2577 "Gmsh.y"
+#line 2581 "Gmsh.y"
 { 
       IntersectAllSegmentsTogether();
     ;
     break;}
 case 200:
-#line 2586 "Gmsh.y"
+#line 2590 "Gmsh.y"
 { yyval.d = yyvsp[0].d;           ;
     break;}
 case 201:
-#line 2587 "Gmsh.y"
+#line 2591 "Gmsh.y"
 { yyval.d = yyvsp[-1].d;           ;
     break;}
 case 202:
-#line 2588 "Gmsh.y"
+#line 2592 "Gmsh.y"
 { yyval.d = -yyvsp[0].d;          ;
     break;}
 case 203:
-#line 2589 "Gmsh.y"
+#line 2593 "Gmsh.y"
 { yyval.d = yyvsp[0].d;           ;
     break;}
 case 204:
-#line 2590 "Gmsh.y"
+#line 2594 "Gmsh.y"
 { yyval.d = !yyvsp[0].d;          ;
     break;}
 case 205:
-#line 2591 "Gmsh.y"
+#line 2595 "Gmsh.y"
 { yyval.d = yyvsp[-2].d - yyvsp[0].d;      ;
     break;}
 case 206:
-#line 2592 "Gmsh.y"
+#line 2596 "Gmsh.y"
 { yyval.d = yyvsp[-2].d + yyvsp[0].d;      ;
     break;}
 case 207:
-#line 2593 "Gmsh.y"
+#line 2597 "Gmsh.y"
 { yyval.d = yyvsp[-2].d * yyvsp[0].d;      ;
     break;}
 case 208:
-#line 2595 "Gmsh.y"
+#line 2599 "Gmsh.y"
 { 
       if(!yyvsp[0].d)
 	yymsg(GERROR, "Division by zero in '%g / %g'", yyvsp[-2].d, yyvsp[0].d);
@@ -5391,247 +5395,247 @@ case 208:
     ;
     break;}
 case 209:
-#line 2601 "Gmsh.y"
+#line 2605 "Gmsh.y"
 { yyval.d = (int)yyvsp[-2].d % (int)yyvsp[0].d;  ;
     break;}
 case 210:
-#line 2602 "Gmsh.y"
+#line 2606 "Gmsh.y"
 { yyval.d = pow(yyvsp[-2].d, yyvsp[0].d);  ;
     break;}
 case 211:
-#line 2603 "Gmsh.y"
+#line 2607 "Gmsh.y"
 { yyval.d = yyvsp[-2].d < yyvsp[0].d;      ;
     break;}
 case 212:
-#line 2604 "Gmsh.y"
+#line 2608 "Gmsh.y"
 { yyval.d = yyvsp[-2].d > yyvsp[0].d;      ;
     break;}
 case 213:
-#line 2605 "Gmsh.y"
+#line 2609 "Gmsh.y"
 { yyval.d = yyvsp[-2].d <= yyvsp[0].d;     ;
     break;}
 case 214:
-#line 2606 "Gmsh.y"
+#line 2610 "Gmsh.y"
 { yyval.d = yyvsp[-2].d >= yyvsp[0].d;     ;
     break;}
 case 215:
-#line 2607 "Gmsh.y"
+#line 2611 "Gmsh.y"
 { yyval.d = yyvsp[-2].d == yyvsp[0].d;     ;
     break;}
 case 216:
-#line 2608 "Gmsh.y"
+#line 2612 "Gmsh.y"
 { yyval.d = yyvsp[-2].d != yyvsp[0].d;     ;
     break;}
 case 217:
-#line 2609 "Gmsh.y"
+#line 2613 "Gmsh.y"
 { yyval.d = yyvsp[-2].d && yyvsp[0].d;     ;
     break;}
 case 218:
-#line 2610 "Gmsh.y"
+#line 2614 "Gmsh.y"
 { yyval.d = yyvsp[-2].d || yyvsp[0].d;     ;
     break;}
 case 219:
-#line 2611 "Gmsh.y"
+#line 2615 "Gmsh.y"
 { yyval.d = yyvsp[-4].d? yyvsp[-2].d : yyvsp[0].d;  ;
     break;}
 case 220:
-#line 2612 "Gmsh.y"
+#line 2616 "Gmsh.y"
 { yyval.d = exp(yyvsp[-1].d);      ;
     break;}
 case 221:
-#line 2613 "Gmsh.y"
+#line 2617 "Gmsh.y"
 { yyval.d = log(yyvsp[-1].d);      ;
     break;}
 case 222:
-#line 2614 "Gmsh.y"
+#line 2618 "Gmsh.y"
 { yyval.d = log10(yyvsp[-1].d);    ;
     break;}
 case 223:
-#line 2615 "Gmsh.y"
+#line 2619 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-1].d);     ;
     break;}
 case 224:
-#line 2616 "Gmsh.y"
+#line 2620 "Gmsh.y"
 { yyval.d = sin(yyvsp[-1].d);      ;
     break;}
 case 225:
-#line 2617 "Gmsh.y"
+#line 2621 "Gmsh.y"
 { yyval.d = asin(yyvsp[-1].d);     ;
     break;}
 case 226:
-#line 2618 "Gmsh.y"
+#line 2622 "Gmsh.y"
 { yyval.d = cos(yyvsp[-1].d);      ;
     break;}
 case 227:
-#line 2619 "Gmsh.y"
+#line 2623 "Gmsh.y"
 { yyval.d = acos(yyvsp[-1].d);     ;
     break;}
 case 228:
-#line 2620 "Gmsh.y"
+#line 2624 "Gmsh.y"
 { yyval.d = tan(yyvsp[-1].d);      ;
     break;}
 case 229:
-#line 2621 "Gmsh.y"
+#line 2625 "Gmsh.y"
 { yyval.d = atan(yyvsp[-1].d);     ;
     break;}
 case 230:
-#line 2622 "Gmsh.y"
+#line 2626 "Gmsh.y"
 { yyval.d = atan2(yyvsp[-3].d, yyvsp[-1].d);;
     break;}
 case 231:
-#line 2623 "Gmsh.y"
+#line 2627 "Gmsh.y"
 { yyval.d = sinh(yyvsp[-1].d);     ;
     break;}
 case 232:
-#line 2624 "Gmsh.y"
+#line 2628 "Gmsh.y"
 { yyval.d = cosh(yyvsp[-1].d);     ;
     break;}
 case 233:
-#line 2625 "Gmsh.y"
+#line 2629 "Gmsh.y"
 { yyval.d = tanh(yyvsp[-1].d);     ;
     break;}
 case 234:
-#line 2626 "Gmsh.y"
+#line 2630 "Gmsh.y"
 { yyval.d = fabs(yyvsp[-1].d);     ;
     break;}
 case 235:
-#line 2627 "Gmsh.y"
+#line 2631 "Gmsh.y"
 { yyval.d = floor(yyvsp[-1].d);    ;
     break;}
 case 236:
-#line 2628 "Gmsh.y"
+#line 2632 "Gmsh.y"
 { yyval.d = ceil(yyvsp[-1].d);     ;
     break;}
 case 237:
-#line 2629 "Gmsh.y"
+#line 2633 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
     break;}
 case 238:
-#line 2630 "Gmsh.y"
+#line 2634 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
     break;}
 case 239:
-#line 2631 "Gmsh.y"
+#line 2635 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
     break;}
 case 240:
-#line 2632 "Gmsh.y"
+#line 2636 "Gmsh.y"
 { yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
     break;}
 case 241:
-#line 2634 "Gmsh.y"
+#line 2638 "Gmsh.y"
 { yyval.d = exp(yyvsp[-1].d);      ;
     break;}
 case 242:
-#line 2635 "Gmsh.y"
+#line 2639 "Gmsh.y"
 { yyval.d = log(yyvsp[-1].d);      ;
     break;}
 case 243:
-#line 2636 "Gmsh.y"
+#line 2640 "Gmsh.y"
 { yyval.d = log10(yyvsp[-1].d);    ;
     break;}
 case 244:
-#line 2637 "Gmsh.y"
+#line 2641 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-1].d);     ;
     break;}
 case 245:
-#line 2638 "Gmsh.y"
+#line 2642 "Gmsh.y"
 { yyval.d = sin(yyvsp[-1].d);      ;
     break;}
 case 246:
-#line 2639 "Gmsh.y"
+#line 2643 "Gmsh.y"
 { yyval.d = asin(yyvsp[-1].d);     ;
     break;}
 case 247:
-#line 2640 "Gmsh.y"
+#line 2644 "Gmsh.y"
 { yyval.d = cos(yyvsp[-1].d);      ;
     break;}
 case 248:
-#line 2641 "Gmsh.y"
+#line 2645 "Gmsh.y"
 { yyval.d = acos(yyvsp[-1].d);     ;
     break;}
 case 249:
-#line 2642 "Gmsh.y"
+#line 2646 "Gmsh.y"
 { yyval.d = tan(yyvsp[-1].d);      ;
     break;}
 case 250:
-#line 2643 "Gmsh.y"
+#line 2647 "Gmsh.y"
 { yyval.d = atan(yyvsp[-1].d);     ;
     break;}
 case 251:
-#line 2644 "Gmsh.y"
+#line 2648 "Gmsh.y"
 { yyval.d = atan2(yyvsp[-3].d, yyvsp[-1].d);;
     break;}
 case 252:
-#line 2645 "Gmsh.y"
+#line 2649 "Gmsh.y"
 { yyval.d = sinh(yyvsp[-1].d);     ;
     break;}
 case 253:
-#line 2646 "Gmsh.y"
+#line 2650 "Gmsh.y"
 { yyval.d = cosh(yyvsp[-1].d);     ;
     break;}
 case 254:
-#line 2647 "Gmsh.y"
+#line 2651 "Gmsh.y"
 { yyval.d = tanh(yyvsp[-1].d);     ;
     break;}
 case 255:
-#line 2648 "Gmsh.y"
+#line 2652 "Gmsh.y"
 { yyval.d = fabs(yyvsp[-1].d);     ;
     break;}
 case 256:
-#line 2649 "Gmsh.y"
+#line 2653 "Gmsh.y"
 { yyval.d = floor(yyvsp[-1].d);    ;
     break;}
 case 257:
-#line 2650 "Gmsh.y"
+#line 2654 "Gmsh.y"
 { yyval.d = ceil(yyvsp[-1].d);     ;
     break;}
 case 258:
-#line 2651 "Gmsh.y"
+#line 2655 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
     break;}
 case 259:
-#line 2652 "Gmsh.y"
+#line 2656 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
     break;}
 case 260:
-#line 2653 "Gmsh.y"
+#line 2657 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
     break;}
 case 261:
-#line 2654 "Gmsh.y"
+#line 2658 "Gmsh.y"
 { yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
     break;}
 case 262:
-#line 2663 "Gmsh.y"
+#line 2667 "Gmsh.y"
 { yyval.d = yyvsp[0].d; ;
     break;}
 case 263:
-#line 2664 "Gmsh.y"
+#line 2668 "Gmsh.y"
 { yyval.d = 3.141592653589793; ;
     break;}
 case 264:
-#line 2665 "Gmsh.y"
+#line 2669 "Gmsh.y"
 { yyval.d = ParUtil::Instance()->rank(); ;
     break;}
 case 265:
-#line 2666 "Gmsh.y"
+#line 2670 "Gmsh.y"
 { yyval.d = ParUtil::Instance()->size(); ;
     break;}
 case 266:
-#line 2667 "Gmsh.y"
+#line 2671 "Gmsh.y"
 { yyval.d = Get_GmshMajorVersion(); ;
     break;}
 case 267:
-#line 2668 "Gmsh.y"
+#line 2672 "Gmsh.y"
 { yyval.d = Get_GmshMinorVersion(); ;
     break;}
 case 268:
-#line 2669 "Gmsh.y"
+#line 2673 "Gmsh.y"
 { yyval.d = Get_GmshPatchVersion(); ;
     break;}
 case 269:
-#line 2674 "Gmsh.y"
+#line 2678 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[0].c;
@@ -5646,7 +5650,7 @@ case 269:
     ;
     break;}
 case 270:
-#line 2687 "Gmsh.y"
+#line 2691 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-3].c;
@@ -5668,7 +5672,7 @@ case 270:
     ;
     break;}
 case 271:
-#line 2707 "Gmsh.y"
+#line 2711 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-2].c;
@@ -5684,7 +5688,7 @@ case 271:
     ;
     break;}
 case 272:
-#line 2721 "Gmsh.y"
+#line 2725 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-1].c;
@@ -5699,7 +5703,7 @@ case 272:
     ;
     break;}
 case 273:
-#line 2734 "Gmsh.y"
+#line 2738 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-4].c;
@@ -5721,7 +5725,7 @@ case 273:
     ;
     break;}
 case 274:
-#line 2757 "Gmsh.y"
+#line 2761 "Gmsh.y"
 {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -5741,7 +5745,7 @@ case 274:
     ;
     break;}
 case 275:
-#line 2775 "Gmsh.y"
+#line 2779 "Gmsh.y"
 {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -5761,7 +5765,7 @@ case 275:
     ;
     break;}
 case 276:
-#line 2793 "Gmsh.y"
+#line 2797 "Gmsh.y"
 {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -5781,7 +5785,7 @@ case 276:
     ;
     break;}
 case 277:
-#line 2811 "Gmsh.y"
+#line 2815 "Gmsh.y"
 {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -5801,124 +5805,124 @@ case 277:
     ;
     break;}
 case 278:
-#line 2829 "Gmsh.y"
+#line 2833 "Gmsh.y"
 { 
       yyval.d = GetValue(yyvsp[-3].c, yyvsp[-1].d);
       Free(yyvsp[-3].c);
     ;
     break;}
 case 279:
-#line 2837 "Gmsh.y"
+#line 2841 "Gmsh.y"
 {
       memcpy(yyval.v, yyvsp[0].v, 5*sizeof(double));
     ;
     break;}
 case 280:
-#line 2841 "Gmsh.y"
+#line 2845 "Gmsh.y"
 {
       for(int i = 0; i < 5; i++) yyval.v[i] = -yyvsp[0].v[i];
     ;
     break;}
 case 281:
-#line 2845 "Gmsh.y"
+#line 2849 "Gmsh.y"
 { 
       for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[0].v[i];
     ;
     break;}
 case 282:
-#line 2849 "Gmsh.y"
+#line 2853 "Gmsh.y"
 { 
       for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[-2].v[i] - yyvsp[0].v[i];
     ;
     break;}
 case 283:
-#line 2853 "Gmsh.y"
+#line 2857 "Gmsh.y"
 {
       for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[-2].v[i] + yyvsp[0].v[i];
     ;
     break;}
 case 284:
-#line 2860 "Gmsh.y"
+#line 2864 "Gmsh.y"
 { 
       yyval.v[0] = yyvsp[-9].d;  yyval.v[1] = yyvsp[-7].d;  yyval.v[2] = yyvsp[-5].d;  yyval.v[3] = yyvsp[-3].d; yyval.v[4] = yyvsp[-1].d;
     ;
     break;}
 case 285:
-#line 2864 "Gmsh.y"
+#line 2868 "Gmsh.y"
 { 
       yyval.v[0] = yyvsp[-7].d;  yyval.v[1] = yyvsp[-5].d;  yyval.v[2] = yyvsp[-3].d;  yyval.v[3] = yyvsp[-1].d; yyval.v[4] = 1.0;
     ;
     break;}
 case 286:
-#line 2868 "Gmsh.y"
+#line 2872 "Gmsh.y"
 {
       yyval.v[0] = yyvsp[-5].d;  yyval.v[1] = yyvsp[-3].d;  yyval.v[2] = yyvsp[-1].d;  yyval.v[3] = 0.0; yyval.v[4] = 1.0;
     ;
     break;}
 case 287:
-#line 2872 "Gmsh.y"
+#line 2876 "Gmsh.y"
 {
       yyval.v[0] = yyvsp[-5].d;  yyval.v[1] = yyvsp[-3].d;  yyval.v[2] = yyvsp[-1].d;  yyval.v[3] = 0.0; yyval.v[4] = 1.0;
     ;
     break;}
 case 288:
-#line 2879 "Gmsh.y"
+#line 2883 "Gmsh.y"
 {
     ;
     break;}
 case 289:
-#line 2882 "Gmsh.y"
+#line 2886 "Gmsh.y"
 {
        yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 290:
-#line 2886 "Gmsh.y"
+#line 2890 "Gmsh.y"
 {
        yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 291:
-#line 2893 "Gmsh.y"
+#line 2897 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(List_T*));
       List_Add(yyval.l, &(yyvsp[0].l));
     ;
     break;}
 case 292:
-#line 2898 "Gmsh.y"
+#line 2902 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].l));
     ;
     break;}
 case 293:
-#line 2906 "Gmsh.y"
+#line 2910 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       List_Add(yyval.l, &(yyvsp[0].d));
     ;
     break;}
 case 294:
-#line 2911 "Gmsh.y"
+#line 2915 "Gmsh.y"
 {
       yyval.l = yyvsp[0].l;
     ;
     break;}
 case 295:
-#line 2915 "Gmsh.y"
+#line 2919 "Gmsh.y"
 {
       // creates an empty list
       yyval.l = List_Create(2, 1, sizeof(double));
     ;
     break;}
 case 296:
-#line 2920 "Gmsh.y"
+#line 2924 "Gmsh.y"
 {
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 297:
-#line 2924 "Gmsh.y"
+#line 2928 "Gmsh.y"
 {
       yyval.l = yyvsp[-1].l;
       double *pd;
@@ -5929,7 +5933,7 @@ case 297:
     ;
     break;}
 case 298:
-#line 2936 "Gmsh.y"
+#line 2940 "Gmsh.y"
 { 
       yyval.l = List_Create(2, 1, sizeof(double)); 
       for(double d = yyvsp[-2].d; (yyvsp[-2].d < yyvsp[0].d) ? (d <= yyvsp[0].d) : (d >= yyvsp[0].d); (yyvsp[-2].d < yyvsp[0].d) ? (d += 1.) : (d -= 1.)) 
@@ -5937,7 +5941,7 @@ case 298:
     ;
     break;}
 case 299:
-#line 2942 "Gmsh.y"
+#line 2946 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double)); 
       if(!yyvsp[0].d || (yyvsp[-4].d < yyvsp[-2].d && yyvsp[0].d < 0) || (yyvsp[-4].d > yyvsp[-2].d && yyvsp[0].d > 0)){
@@ -5950,7 +5954,7 @@ case 299:
    ;
     break;}
 case 300:
-#line 2953 "Gmsh.y"
+#line 2957 "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
@@ -5972,7 +5976,7 @@ case 300:
     ;
     break;}
 case 301:
-#line 2973 "Gmsh.y"
+#line 2977 "Gmsh.y"
 {
       yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double));
       for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){
@@ -5984,7 +5988,7 @@ case 301:
     ;
     break;}
 case 302:
-#line 2983 "Gmsh.y"
+#line 2987 "Gmsh.y"
 {
       yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double));
       for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){
@@ -5996,7 +6000,7 @@ case 302:
     ;
     break;}
 case 303:
-#line 2993 "Gmsh.y"
+#line 2997 "Gmsh.y"
 {
       yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double));
       for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){
@@ -6008,7 +6012,7 @@ case 303:
     ;
     break;}
 case 304:
-#line 3003 "Gmsh.y"
+#line 3007 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       Symbol TheSymbol;
@@ -6027,7 +6031,7 @@ case 304:
     ;
     break;}
 case 305:
-#line 3020 "Gmsh.y"
+#line 3024 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       Symbol TheSymbol;
@@ -6048,7 +6052,7 @@ case 305:
     ;
     break;}
 case 306:
-#line 3039 "Gmsh.y"
+#line 3043 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       Symbol TheSymbol;
@@ -6074,7 +6078,7 @@ case 306:
     ;
     break;}
 case 307:
-#line 3063 "Gmsh.y"
+#line 3067 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       Symbol TheSymbol;
@@ -6102,26 +6106,26 @@ case 307:
     ;
     break;}
 case 308:
-#line 3092 "Gmsh.y"
+#line 3096 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       List_Add(yyval.l, &(yyvsp[0].d));
     ;
     break;}
 case 309:
-#line 3097 "Gmsh.y"
+#line 3101 "Gmsh.y"
 {
       yyval.l = yyvsp[0].l;
     ;
     break;}
 case 310:
-#line 3101 "Gmsh.y"
+#line 3105 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].d));
     ;
     break;}
 case 311:
-#line 3105 "Gmsh.y"
+#line 3109 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){
 	double d;
@@ -6132,19 +6136,19 @@ case 311:
     ;
     break;}
 case 312:
-#line 3118 "Gmsh.y"
+#line 3122 "Gmsh.y"
 {
       yyval.u = CTX.PACK_COLOR((int)yyvsp[-7].d, (int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d);
     ;
     break;}
 case 313:
-#line 3122 "Gmsh.y"
+#line 3126 "Gmsh.y"
 {
       yyval.u = CTX.PACK_COLOR((int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d, 255);
     ;
     break;}
 case 314:
-#line 3134 "Gmsh.y"
+#line 3138 "Gmsh.y"
 {
       int flag;
       yyval.u = Get_ColorForString(ColorString, -1, yyvsp[0].c, &flag);
@@ -6153,7 +6157,7 @@ case 314:
     ;
     break;}
 case 315:
-#line 3141 "Gmsh.y"
+#line 3145 "Gmsh.y"
 {
       unsigned int (*pColOpt)(int num, int action, unsigned int value);
       StringXColor *pColCat;
@@ -6174,13 +6178,13 @@ case 315:
     ;
     break;}
 case 316:
-#line 3163 "Gmsh.y"
+#line 3167 "Gmsh.y"
 {
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 317:
-#line 3167 "Gmsh.y"
+#line 3171 "Gmsh.y"
 {
       yyval.l = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = Get_ColorTable((int)yyvsp[-3].d);
@@ -6194,26 +6198,26 @@ case 317:
     ;
     break;}
 case 318:
-#line 3182 "Gmsh.y"
+#line 3186 "Gmsh.y"
 {
       yyval.l = List_Create(256, 10, sizeof(unsigned int));
       List_Add(yyval.l, &(yyvsp[0].u));
     ;
     break;}
 case 319:
-#line 3187 "Gmsh.y"
+#line 3191 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].u));
     ;
     break;}
 case 320:
-#line 3194 "Gmsh.y"
+#line 3198 "Gmsh.y"
 {
       yyval.c = yyvsp[0].c;
     ;
     break;}
 case 321:
-#line 3198 "Gmsh.y"
+#line 3202 "Gmsh.y"
 {
       yyval.c = (char *)Malloc(32*sizeof(char));
       time_t now;
@@ -6223,7 +6227,7 @@ case 321:
     ;
     break;}
 case 322:
-#line 3206 "Gmsh.y"
+#line 3210 "Gmsh.y"
 {
       yyval.c = (char *)Malloc((strlen(yyvsp[-3].c)+strlen(yyvsp[-1].c)+1)*sizeof(char));
       strcpy(yyval.c, yyvsp[-3].c);
@@ -6233,7 +6237,7 @@ case 322:
     ;
     break;}
 case 323:
-#line 3214 "Gmsh.y"
+#line 3218 "Gmsh.y"
 {
       yyval.c = (char *)Malloc((strlen(yyvsp[-1].c)+1)*sizeof(char));
       int i;
@@ -6249,7 +6253,7 @@ case 323:
     ;
     break;}
 case 324:
-#line 3228 "Gmsh.y"
+#line 3232 "Gmsh.y"
 {
       yyval.c = (char *)Malloc((strlen(yyvsp[-1].c)+1)*sizeof(char));
       int i;
@@ -6265,13 +6269,13 @@ case 324:
     ;
     break;}
 case 325:
-#line 3242 "Gmsh.y"
+#line 3246 "Gmsh.y"
 {
       yyval.c = yyvsp[-1].c;
     ;
     break;}
 case 326:
-#line 3246 "Gmsh.y"
+#line 3250 "Gmsh.y"
 {
       char tmpstring[1024];
       int i = PrintListOfDouble(yyvsp[-3].c, yyvsp[-1].l, tmpstring);
@@ -6292,7 +6296,7 @@ case 326:
     ;
     break;}
 case 327:
-#line 3265 "Gmsh.y"
+#line 3269 "Gmsh.y"
 { 
       char* (*pStrOpt)(int num, int action, char *value);
       StringXString *pStrCat;
@@ -6316,7 +6320,7 @@ case 327:
     ;
     break;}
 case 328:
-#line 3287 "Gmsh.y"
+#line 3291 "Gmsh.y"
 { 
       char* (*pStrOpt)(int num, int action, char *value);
       StringXString *pStrCat;
@@ -6561,7 +6565,7 @@ yyerrhandle:
     }
   return 1;
 }
-#line 3310 "Gmsh.y"
+#line 3314 "Gmsh.y"
 
 
 void DeleteSymbol(void *a, void *b){
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index 556e9e352c..75db073c0d 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1,5 +1,5 @@
 %{
-// $Id: Gmsh.y,v 1.226 2006-03-17 21:04:42 geuzaine Exp $
+// $Id: Gmsh.y,v 1.227 2006-04-04 04:32:34 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -1845,6 +1845,9 @@ Command :
       else if(!strcmp($1, "Mesh")){
 	yymsg(GERROR, "Mesh directives are not (yet) allowed in scripts");
       }
+      else if(!strcmp($1, "Status")){
+	THEM->status = (int)$2;
+      }
       else{
 	yymsg(GERROR, "Unknown command '%s'", $1);
       }
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index 8708dbfcda..99cf6aa99f 100644
--- a/Parser/Gmsh.yy.cpp
+++ b/Parser/Gmsh.yy.cpp
@@ -2,7 +2,7 @@
 /* A lexical scanner generated by flex */
 
 /* Scanner skeleton version:
- * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.262 2006-03-17 21:04:43 geuzaine Exp $
+ * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.263 2006-04-04 04:32:34 geuzaine Exp $
  */
 
 #define FLEX_SCANNER
@@ -727,7 +727,7 @@ char *yytext;
 #line 1 "Gmsh.l"
 #define INITIAL 0
 #line 2 "Gmsh.l"
-// $Id: Gmsh.yy.cpp,v 1.262 2006-03-17 21:04:43 geuzaine Exp $
+// $Id: Gmsh.yy.cpp,v 1.263 2006-04-04 04:32:34 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
diff --git a/doc/texinfo/gmsh.texi b/doc/texinfo/gmsh.texi
index 1592d86e1e..df0709a071 100644
--- a/doc/texinfo/gmsh.texi
+++ b/doc/texinfo/gmsh.texi
@@ -1,5 +1,5 @@
 \input texinfo.tex @c -*-texinfo-*-
-@c $Id: gmsh.texi,v 1.206 2006-03-22 12:37:46 geuzaine Exp $
+@c $Id: gmsh.texi,v 1.207 2006-04-04 04:32:34 geuzaine Exp $
 @c
 @c Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 @c
@@ -1322,6 +1322,9 @@ the path of the current file.
 @item Sleep @var{expression};
 Suspends the execution of Gmsh during @var{expression} seconds.
 
+@item Status @var{expression};
+Forces mesh status to @var{expression}.
+
 @item System @var{char-expression};
 Executes a system call.
 
-- 
GitLab