diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index c83548dcb9ce1b91ac9143986162998b3d4b7d24..be783358b69de26c59619953380c8918de204281 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -324,7 +324,7 @@
 /* Copy the first part of user declarations.  */
 #line 1 "Gmsh.y"
 
-// $Id: Gmsh.tab.cpp,v 1.373 2008-07-05 23:00:57 geuzaine Exp $
+// $Id: Gmsh.tab.cpp,v 1.374 2008-07-06 11:25:35 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -990,36 +990,36 @@ static const yytype_uint16 yyrline[] =
      296,   297,   298,   299,   300,   304,   306,   311,   313,   319,
      465,   318,   483,   490,   501,   500,   519,   526,   537,   536,
      554,   569,   589,   588,   602,   603,   604,   605,   606,   610,
-     611,   618,   649,   688,   742,   759,   777,   788,   805,   812,
-     817,   825,   843,   861,   870,   882,   887,   895,   915,   938,
-     947,   953,   973,   994,  1020,  1032,  1049,  1053,  1063,  1066,
-    1084,  1106,  1122,  1144,  1162,  1180,  1198,  1224,  1242,  1268,
-    1288,  1306,  1324,  1350,  1367,  1386,  1404,  1443,  1449,  1455,
-    1462,  1487,  1512,  1528,  1548,  1566,  1583,  1604,  1609,  1614,
-    1619,  1624,  1635,  1641,  1650,  1651,  1656,  1659,  1663,  1686,
-    1709,  1732,  1760,  1769,  1773,  1788,  1802,  1819,  1833,  1839,
-    1845,  1854,  1868,  1916,  1934,  1949,  1971,  1983,  2007,  2011,
-    2016,  2021,  2033,  2050,  2067,  2094,  2121,  2152,  2160,  2166,
-    2173,  2177,  2186,  2194,  2202,  2211,  2210,  2223,  2222,  2235,
-    2234,  2247,  2246,  2258,  2257,  2273,  2280,  2287,  2294,  2301,
-    2308,  2315,  2322,  2329,  2337,  2336,  2348,  2347,  2359,  2358,
-    2370,  2369,  2381,  2380,  2392,  2391,  2403,  2402,  2414,  2413,
-    2425,  2424,  2439,  2442,  2448,  2457,  2477,  2500,  2504,  2528,
-    2546,  2564,  2582,  2611,  2646,  2651,  2678,  2692,  2705,  2722,
-    2728,  2734,  2737,  2746,  2756,  2757,  2758,  2759,  2760,  2761,
-    2762,  2763,  2764,  2771,  2772,  2773,  2774,  2775,  2776,  2777,
-    2778,  2779,  2780,  2781,  2782,  2783,  2784,  2785,  2786,  2787,
-    2788,  2789,  2790,  2791,  2792,  2793,  2794,  2795,  2796,  2797,
-    2798,  2799,  2800,  2801,  2802,  2804,  2805,  2806,  2807,  2808,
-    2809,  2810,  2811,  2812,  2813,  2814,  2815,  2816,  2817,  2818,
-    2819,  2820,  2821,  2822,  2823,  2824,  2833,  2834,  2835,  2836,
-    2837,  2838,  2839,  2843,  2859,  2874,  2894,  2907,  2920,  2943,
-    2948,  2953,  2963,  2973,  2981,  2985,  2989,  2993,  2997,  3004,
-    3008,  3012,  3016,  3023,  3028,  3036,  3041,  3045,  3050,  3054,
-    3062,  3073,  3081,  3089,  3095,  3106,  3126,  3136,  3146,  3163,
-    3190,  3195,  3199,  3203,  3216,  3220,  3232,  3239,  3249,  3253,
-    3268,  3273,  3280,  3284,  3291,  3295,  3303,  3311,  3325,  3339,
-    3343,  3362,  3370
+     611,   618,   648,   686,   739,   755,   772,   782,   798,   805,
+     810,   818,   836,   854,   863,   875,   880,   888,   908,   931,
+     940,   946,   966,   987,  1013,  1025,  1042,  1046,  1056,  1059,
+    1077,  1099,  1115,  1137,  1155,  1173,  1191,  1217,  1235,  1261,
+    1281,  1299,  1317,  1343,  1360,  1379,  1397,  1436,  1442,  1448,
+    1455,  1480,  1505,  1521,  1541,  1559,  1576,  1597,  1602,  1607,
+    1612,  1617,  1628,  1634,  1643,  1644,  1649,  1652,  1656,  1679,
+    1702,  1725,  1753,  1762,  1766,  1781,  1795,  1812,  1826,  1832,
+    1838,  1847,  1861,  1909,  1927,  1942,  1961,  1973,  1997,  2001,
+    2006,  2011,  2023,  2040,  2057,  2083,  2109,  2139,  2147,  2153,
+    2160,  2164,  2173,  2181,  2189,  2198,  2197,  2210,  2209,  2222,
+    2221,  2234,  2233,  2245,  2244,  2260,  2267,  2274,  2281,  2288,
+    2295,  2302,  2309,  2316,  2324,  2323,  2335,  2334,  2346,  2345,
+    2357,  2356,  2368,  2367,  2379,  2378,  2390,  2389,  2401,  2400,
+    2412,  2411,  2426,  2429,  2435,  2444,  2464,  2487,  2491,  2515,
+    2533,  2551,  2569,  2598,  2633,  2638,  2665,  2679,  2692,  2709,
+    2715,  2721,  2724,  2733,  2743,  2744,  2745,  2746,  2747,  2748,
+    2749,  2750,  2751,  2758,  2759,  2760,  2761,  2762,  2763,  2764,
+    2765,  2766,  2767,  2768,  2769,  2770,  2771,  2772,  2773,  2774,
+    2775,  2776,  2777,  2778,  2779,  2780,  2781,  2782,  2783,  2784,
+    2785,  2786,  2787,  2788,  2789,  2791,  2792,  2793,  2794,  2795,
+    2796,  2797,  2798,  2799,  2800,  2801,  2802,  2803,  2804,  2805,
+    2806,  2807,  2808,  2809,  2810,  2811,  2820,  2821,  2822,  2823,
+    2824,  2825,  2826,  2830,  2845,  2859,  2878,  2890,  2902,  2924,
+    2929,  2934,  2944,  2954,  2962,  2966,  2970,  2974,  2978,  2985,
+    2989,  2993,  2997,  3004,  3009,  3016,  3021,  3025,  3030,  3034,
+    3042,  3053,  3061,  3069,  3075,  3086,  3106,  3116,  3126,  3142,
+    3168,  3173,  3177,  3181,  3193,  3197,  3209,  3216,  3226,  3230,
+    3245,  3250,  3257,  3261,  3268,  3272,  3280,  3288,  3302,  3316,
+    3320,  3339,  3347
 };
 #endif
 
@@ -3782,7 +3782,7 @@ yyreduce:
       if(i < 0) 
 	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);
       Free((yyvsp[(3) - (7)].c));
@@ -3798,7 +3798,7 @@ yyreduce:
       if(i < 0) 
 	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{
 	char tmpstring2[1024];
 	FixRelativePath((yyvsp[(8) - (9)].c), tmpstring2);
@@ -4231,9 +4231,8 @@ yyreduce:
   case 61:
 #line 619 "Gmsh.y"
     {
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = (yyvsp[(1) - (4)].c);
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	if(!(yyvsp[(2) - (4)].i)){
 	  TheSymbol.val = List_Create(1, 1, sizeof(double));
@@ -4263,11 +4262,10 @@ yyreduce:
     break;
 
   case 62:
-#line 650 "Gmsh.y"
+#line 649 "Gmsh.y"
     {
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = (yyvsp[(1) - (7)].c);
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	if(!(yyvsp[(5) - (7)].i)){
 	  TheSymbol.val = List_Create(5, 5, sizeof(double));
@@ -4305,16 +4303,15 @@ yyreduce:
     break;
 
   case 63:
-#line 689 "Gmsh.y"
+#line 687 "Gmsh.y"
     {
       if(List_Nbr((yyvsp[(4) - (9)].l)) != List_Nbr((yyvsp[(8) - (9)].l))){
 	yymsg(0, "Incompatible array dimensions in affectation");
 	Free((yyvsp[(1) - (9)].c));
       }
       else{
-	Symbol TheSymbol;
+	Symbol TheSymbol, *pSymbol;
 	TheSymbol.Name = (yyvsp[(1) - (9)].c);
-	Symbol *pSymbol;
 	if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	  if(!(yyvsp[(7) - (9)].i)){
 	    TheSymbol.val = List_Create(5, 5, sizeof(double));
@@ -4362,11 +4359,10 @@ yyreduce:
     break;
 
   case 64:
-#line 743 "Gmsh.y"
+#line 740 "Gmsh.y"
     {
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = (yyvsp[(1) - (6)].c);
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	TheSymbol.val = List_Create(5, 5, sizeof(double));
 	List_Copy((yyvsp[(5) - (6)].l), TheSymbol.val);
@@ -4382,12 +4378,11 @@ yyreduce:
     break;
 
   case 65:
-#line 760 "Gmsh.y"
+#line 756 "Gmsh.y"
     {
       // appends to the list
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = (yyvsp[(1) - (6)].c);
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	TheSymbol.val = List_Create(5, 5, sizeof(double));
 	List_Copy((yyvsp[(5) - (6)].l), TheSymbol.val);
@@ -4403,11 +4398,10 @@ yyreduce:
     break;
 
   case 66:
-#line 778 "Gmsh.y"
+#line 773 "Gmsh.y"
     {
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = (yyvsp[(1) - (3)].c);
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol)))
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (3)].c)); 
       else
@@ -4417,11 +4411,10 @@ yyreduce:
     break;
 
   case 67:
-#line 789 "Gmsh.y"
+#line 783 "Gmsh.y"
     {
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = (yyvsp[(1) - (6)].c);
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol)))
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (6)].c)); 
       else{
@@ -4436,14 +4429,14 @@ yyreduce:
     break;
 
   case 68:
-#line 806 "Gmsh.y"
+#line 799 "Gmsh.y"
     { 
       Msg::Warning("Named string expressions not implemented yet");
     ;}
     break;
 
   case 69:
-#line 813 "Gmsh.y"
+#line 806 "Gmsh.y"
     { 
       StringOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (6)].c), 0, (yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(3) - (6)].c));
@@ -4451,7 +4444,7 @@ yyreduce:
     break;
 
   case 70:
-#line 818 "Gmsh.y"
+#line 811 "Gmsh.y"
     { 
       StringOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), (yyvsp[(8) - (9)].c));
       Free((yyvsp[(1) - (9)].c)); Free((yyvsp[(6) - (9)].c));
@@ -4459,7 +4452,7 @@ yyreduce:
     break;
 
   case 71:
-#line 826 "Gmsh.y"
+#line 819 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (6)].c), 0, (yyvsp[(3) - (6)].c), d)){
@@ -4480,7 +4473,7 @@ yyreduce:
     break;
 
   case 72:
-#line 844 "Gmsh.y"
+#line 837 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), d)){
@@ -4501,7 +4494,7 @@ yyreduce:
     break;
 
   case 73:
-#line 862 "Gmsh.y"
+#line 855 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(3) - (5)].c), d)){
@@ -4513,7 +4506,7 @@ yyreduce:
     break;
 
   case 74:
-#line 871 "Gmsh.y"
+#line 864 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (8)].c), (int)(yyvsp[(3) - (8)].d), (yyvsp[(6) - (8)].c), d)){
@@ -4525,7 +4518,7 @@ yyreduce:
     break;
 
   case 75:
-#line 883 "Gmsh.y"
+#line 876 "Gmsh.y"
     {
       ColorOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (8)].c), 0, (yyvsp[(5) - (8)].c), (yyvsp[(7) - (8)].u));
       Free((yyvsp[(1) - (8)].c)); Free((yyvsp[(5) - (8)].c));
@@ -4533,7 +4526,7 @@ yyreduce:
     break;
 
   case 76:
-#line 888 "Gmsh.y"
+#line 881 "Gmsh.y"
     {
       ColorOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (11)].c), (int)(yyvsp[(3) - (11)].d), (yyvsp[(8) - (11)].c), (yyvsp[(10) - (11)].u));
       Free((yyvsp[(1) - (11)].c)); Free((yyvsp[(8) - (11)].c));
@@ -4541,7 +4534,7 @@ yyreduce:
     break;
 
   case 77:
-#line 896 "Gmsh.y"
+#line 889 "Gmsh.y"
     {
       GmshColorTable *ct = Get_ColorTable(0);
       if(!ct)
@@ -4564,7 +4557,7 @@ yyreduce:
     break;
 
   case 78:
-#line 916 "Gmsh.y"
+#line 909 "Gmsh.y"
     {
       GmshColorTable *ct = Get_ColorTable((int)(yyvsp[(3) - (9)].d));
       if(!ct)
@@ -4587,7 +4580,7 @@ yyreduce:
     break;
 
   case 79:
-#line 939 "Gmsh.y"
+#line 932 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (5)].c),"Background")){
 	GModel::current()->getFields()->background_field = (int)(yyvsp[(4) - (5)].d);
@@ -4599,7 +4592,7 @@ yyreduce:
     break;
 
   case 80:
-#line 948 "Gmsh.y"
+#line 941 "Gmsh.y"
     {
       if(!GModel::current()->getFields()->new_field((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));
@@ -4608,7 +4601,7 @@ yyreduce:
     break;
 
   case 81:
-#line 954 "Gmsh.y"
+#line 947 "Gmsh.y"
     {
       Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (9)].d));
       if(field){
@@ -4631,7 +4624,7 @@ yyreduce:
     break;
 
   case 82:
-#line 974 "Gmsh.y"
+#line 967 "Gmsh.y"
     {
       Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (9)].d));
       if(field){
@@ -4655,7 +4648,7 @@ yyreduce:
     break;
 
   case 83:
-#line 995 "Gmsh.y"
+#line 988 "Gmsh.y"
     {
       Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (11)].d));
       if(field){
@@ -4681,7 +4674,7 @@ yyreduce:
     break;
 
   case 84:
-#line 1021 "Gmsh.y"
+#line 1014 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       try {
@@ -4696,7 +4689,7 @@ yyreduce:
     break;
 
   case 85:
-#line 1033 "Gmsh.y"
+#line 1026 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       try {
@@ -4706,19 +4699,19 @@ yyreduce:
 	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)); // FIXME: sometimes leak $8
+      Free((yyvsp[(3) - (9)].c)); Free((yyvsp[(6) - (9)].c));
     ;}
     break;
 
   case 86:
-#line 1050 "Gmsh.y"
+#line 1043 "Gmsh.y"
     { 
       (yyval.i) = (int)(yyvsp[(1) - (1)].d); 
     ;}
     break;
 
   case 87:
-#line 1054 "Gmsh.y"
+#line 1047 "Gmsh.y"
     { 
       (yyval.i) = GModel::current()->setPhysicalName
 	(std::string((yyvsp[(1) - (1)].c)), ++GModel::current()->getGEOInternals()->MaxPhysicalNum);
@@ -4727,14 +4720,14 @@ yyreduce:
     break;
 
   case 88:
-#line 1063 "Gmsh.y"
+#line 1056 "Gmsh.y"
     {
       (yyval.l) = 0;
     ;}
     break;
 
   case 89:
-#line 1067 "Gmsh.y"
+#line 1060 "Gmsh.y"
     {
       (yyval.l) = List_Create(4, 4, sizeof(double));
       Vertex *v = FindPoint((int)(yyvsp[(4) - (5)].d));
@@ -4749,7 +4742,7 @@ yyreduce:
     break;
 
   case 90:
-#line 1085 "Gmsh.y"
+#line 1078 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindPoint(num)){
@@ -4774,7 +4767,7 @@ yyreduce:
     break;
 
   case 91:
-#line 1107 "Gmsh.y"
+#line 1100 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_POINT)){
@@ -4793,7 +4786,7 @@ yyreduce:
     break;
 
   case 92:
-#line 1123 "Gmsh.y"
+#line 1116 "Gmsh.y"
     {      
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -4815,7 +4808,7 @@ yyreduce:
     break;
 
   case 93:
-#line 1145 "Gmsh.y"
+#line 1138 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -4836,7 +4829,7 @@ yyreduce:
     break;
 
   case 94:
-#line 1163 "Gmsh.y"
+#line 1156 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -4857,7 +4850,7 @@ yyreduce:
     break;
 
   case 95:
-#line 1181 "Gmsh.y"
+#line 1174 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -4878,7 +4871,7 @@ yyreduce:
     break;
 
   case 96:
-#line 1199 "Gmsh.y"
+#line 1192 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindCurve(num)){
@@ -4907,7 +4900,7 @@ yyreduce:
     break;
 
   case 97:
-#line 1225 "Gmsh.y"
+#line 1218 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -4928,7 +4921,7 @@ yyreduce:
     break;
 
   case 98:
-#line 1243 "Gmsh.y"
+#line 1236 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindCurve(num)){
@@ -4957,7 +4950,7 @@ yyreduce:
     break;
 
   case 99:
-#line 1270 "Gmsh.y"
+#line 1263 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (17)].d);
       if(FindCurve(num)){
@@ -4979,7 +4972,7 @@ yyreduce:
     break;
 
   case 100:
-#line 1289 "Gmsh.y"
+#line 1282 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -5000,7 +4993,7 @@ yyreduce:
     break;
 
   case 101:
-#line 1307 "Gmsh.y"
+#line 1300 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -5021,7 +5014,7 @@ yyreduce:
     break;
 
   case 102:
-#line 1325 "Gmsh.y"
+#line 1318 "Gmsh.y"
     {
       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))){
@@ -5050,7 +5043,7 @@ yyreduce:
     break;
 
   case 103:
-#line 1351 "Gmsh.y"
+#line 1344 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindEdgeLoop(num)){
@@ -5070,7 +5063,7 @@ yyreduce:
     break;
 
   case 104:
-#line 1368 "Gmsh.y"
+#line 1361 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_LINE)){
@@ -5089,7 +5082,7 @@ yyreduce:
     break;
 
   case 105:
-#line 1387 "Gmsh.y"
+#line 1380 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindSurface(num)){
@@ -5110,7 +5103,7 @@ yyreduce:
     break;
 
   case 106:
-#line 1405 "Gmsh.y"
+#line 1398 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (9)].d), type = 0;
       if(FindSurface(num)){
@@ -5152,7 +5145,7 @@ yyreduce:
     break;
 
   case 107:
-#line 1444 "Gmsh.y"
+#line 1437 "Gmsh.y"
     {
       myGmshSurface = 0;
       (yyval.s).Type = 0;
@@ -5161,7 +5154,7 @@ yyreduce:
     break;
 
   case 108:
-#line 1450 "Gmsh.y"
+#line 1443 "Gmsh.y"
     {
       myGmshSurface = gmshSurface::getSurface((int)(yyvsp[(3) - (4)].d));
       (yyval.s).Type = 0;
@@ -5170,7 +5163,7 @@ yyreduce:
     break;
 
   case 109:
-#line 1456 "Gmsh.y"
+#line 1449 "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));
@@ -5180,7 +5173,7 @@ yyreduce:
     break;
 
   case 110:
-#line 1463 "Gmsh.y"
+#line 1456 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if (List_Nbr((yyvsp[(6) - (7)].l)) != 2){
@@ -5208,7 +5201,7 @@ yyreduce:
     break;
 
   case 111:
-#line 1488 "Gmsh.y"
+#line 1481 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if (List_Nbr((yyvsp[(6) - (7)].l)) != 2){
@@ -5236,7 +5229,7 @@ yyreduce:
     break;
 
   case 112:
-#line 1513 "Gmsh.y"
+#line 1506 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindSurfaceLoop(num)){
@@ -5255,7 +5248,7 @@ yyreduce:
     break;
 
   case 113:
-#line 1529 "Gmsh.y"
+#line 1522 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE)){
@@ -5274,7 +5267,7 @@ yyreduce:
     break;
 
   case 114:
-#line 1549 "Gmsh.y"
+#line 1542 "Gmsh.y"
     {
       yymsg(0, "'Complex Volume' command is deprecated: use 'Volume' instead");
       int num = (int)(yyvsp[(4) - (8)].d);
@@ -5295,7 +5288,7 @@ yyreduce:
     break;
 
   case 115:
-#line 1567 "Gmsh.y"
+#line 1560 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindVolume(num)){
@@ -5315,7 +5308,7 @@ yyreduce:
     break;
 
   case 116:
-#line 1584 "Gmsh.y"
+#line 1577 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME)){
@@ -5334,7 +5327,7 @@ yyreduce:
     break;
 
   case 117:
-#line 1605 "Gmsh.y"
+#line 1598 "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);
@@ -5342,7 +5335,7 @@ yyreduce:
     break;
 
   case 118:
-#line 1610 "Gmsh.y"
+#line 1603 "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);
@@ -5350,7 +5343,7 @@ yyreduce:
     break;
 
   case 119:
-#line 1615 "Gmsh.y"
+#line 1608 "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);
@@ -5358,7 +5351,7 @@ yyreduce:
     break;
 
   case 120:
-#line 1620 "Gmsh.y"
+#line 1613 "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);
@@ -5366,7 +5359,7 @@ yyreduce:
     break;
 
   case 121:
-#line 1625 "Gmsh.y"
+#line 1618 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
@@ -5380,7 +5373,7 @@ yyreduce:
     break;
 
   case 122:
-#line 1636 "Gmsh.y"
+#line 1629 "Gmsh.y"
     { 
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       IntersectCurvesWithSurface((yyvsp[(4) - (9)].l), (int)(yyvsp[(8) - (9)].d), (yyval.l));
@@ -5389,7 +5382,7 @@ yyreduce:
     break;
 
   case 123:
-#line 1642 "Gmsh.y"
+#line 1635 "Gmsh.y"
     { 
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       BoundaryShapes((yyvsp[(3) - (4)].l), (yyval.l));
@@ -5398,31 +5391,31 @@ yyreduce:
     break;
 
   case 124:
-#line 1650 "Gmsh.y"
+#line 1643 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
   case 125:
-#line 1651 "Gmsh.y"
+#line 1644 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
   case 126:
-#line 1656 "Gmsh.y"
+#line 1649 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
     ;}
     break;
 
   case 127:
-#line 1660 "Gmsh.y"
+#line 1653 "Gmsh.y"
     {
       List_Add((yyval.l), &(yyvsp[(2) - (2)].s));
     ;}
     break;
 
   case 128:
-#line 1664 "Gmsh.y"
+#line 1657 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -5448,7 +5441,7 @@ yyreduce:
     break;
 
   case 129:
-#line 1687 "Gmsh.y"
+#line 1680 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -5474,7 +5467,7 @@ yyreduce:
     break;
 
   case 130:
-#line 1710 "Gmsh.y"
+#line 1703 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -5500,7 +5493,7 @@ yyreduce:
     break;
 
   case 131:
-#line 1733 "Gmsh.y"
+#line 1726 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -5526,7 +5519,7 @@ yyreduce:
     break;
 
   case 132:
-#line 1761 "Gmsh.y"
+#line 1754 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -5538,14 +5531,14 @@ yyreduce:
     break;
 
   case 133:
-#line 1770 "Gmsh.y"
+#line 1763 "Gmsh.y"
     {
       GModel::current()->getFields()->delete_field((int)(yyvsp[(4) - (6)].d));
     ;}
     break;
 
   case 134:
-#line 1774 "Gmsh.y"
+#line 1767 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(2) - (6)].c), "View")){
@@ -5563,7 +5556,7 @@ yyreduce:
     break;
 
   case 135:
-#line 1789 "Gmsh.y"
+#line 1782 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Meshes") || !strcmp((yyvsp[(2) - (3)].c), "All")){
 	GModel::current()->destroy();
@@ -5580,7 +5573,7 @@ yyreduce:
     break;
 
   case 136:
-#line 1803 "Gmsh.y"
+#line 1796 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(2) - (4)].c), "Empty") && !strcmp((yyvsp[(3) - (4)].c), "Views")){
@@ -5595,7 +5588,7 @@ yyreduce:
     break;
 
   case 137:
-#line 1820 "Gmsh.y"
+#line 1813 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
 	Shape TheShape;
@@ -5607,7 +5600,7 @@ yyreduce:
     break;
 
   case 138:
-#line 1834 "Gmsh.y"
+#line 1827 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[(2) - (3)].c), i, 1);
@@ -5616,7 +5609,7 @@ yyreduce:
     break;
 
   case 139:
-#line 1840 "Gmsh.y"
+#line 1833 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[(2) - (3)].c), i, 0);
@@ -5625,7 +5618,7 @@ yyreduce:
     break;
 
   case 140:
-#line 1846 "Gmsh.y"
+#line 1839 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -5637,7 +5630,7 @@ yyreduce:
     break;
 
   case 141:
-#line 1855 "Gmsh.y"
+#line 1848 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -5649,7 +5642,7 @@ yyreduce:
     break;
 
   case 142:
-#line 1869 "Gmsh.y"
+#line 1862 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Include")){
 	char tmpstring[1024];
@@ -5700,7 +5693,7 @@ yyreduce:
     break;
 
   case 143:
-#line 1917 "Gmsh.y"
+#line 1910 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(1) - (7)].c), "Save") && !strcmp((yyvsp[(2) - (7)].c), "View")){
@@ -5721,7 +5714,7 @@ yyreduce:
     break;
 
   case 144:
-#line 1935 "Gmsh.y"
+#line 1928 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(1) - (7)].c), "Background") && !strcmp((yyvsp[(2) - (7)].c), "Mesh")  && !strcmp((yyvsp[(3) - (7)].c), "View")){
@@ -5739,13 +5732,13 @@ yyreduce:
     break;
 
   case 145:
-#line 1950 "Gmsh.y"
+#line 1943 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Sleep")){
 	SleepInSeconds((yyvsp[(2) - (3)].d));
       }
       else if(!strcmp((yyvsp[(1) - (3)].c), "Remesh")){
-	Msg::Error("Surface ReMeshing must be reinterfaced");
+	Msg::Error("Surface remeshing must be reinterfaced");
       }
       else if(!strcmp((yyvsp[(1) - (3)].c), "Mesh")){
 	int lock = CTX.threads_lock;
@@ -5754,9 +5747,6 @@ yyreduce:
 	GModel::current()->mesh((int)(yyvsp[(2) - (3)].d));
 	CTX.threads_lock = lock;
       }
-      else if(!strcmp((yyvsp[(1) - (3)].c), "Status")){
-	yymsg(0, "Mesh directives are not (yet) allowed in scripts");
-      }
       else
 	yymsg(0, "Unknown command '%s'", (yyvsp[(1) - (3)].c));
       Free((yyvsp[(1) - (3)].c));
@@ -5764,7 +5754,7 @@ yyreduce:
     break;
 
   case 146:
-#line 1972 "Gmsh.y"
+#line 1962 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
        try {
@@ -5779,7 +5769,7 @@ yyreduce:
     break;
 
   case 147:
-#line 1984 "Gmsh.y"
+#line 1974 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromAllViews"))
@@ -5806,14 +5796,14 @@ yyreduce:
     break;
 
   case 148:
-#line 2008 "Gmsh.y"
+#line 1998 "Gmsh.y"
     {
       exit(0);
     ;}
     break;
 
   case 149:
-#line 2012 "Gmsh.y"
+#line 2002 "Gmsh.y"
     {
       CTX.forced_bbox = 0;
       SetBoundingBox();
@@ -5821,7 +5811,7 @@ yyreduce:
     break;
 
   case 150:
-#line 2017 "Gmsh.y"
+#line 2007 "Gmsh.y"
     {
       CTX.forced_bbox = 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));
@@ -5829,7 +5819,7 @@ yyreduce:
     break;
 
   case 151:
-#line 2022 "Gmsh.y"
+#line 2012 "Gmsh.y"
     {
 #if defined(HAVE_FLTK)
       Draw();
@@ -5838,7 +5828,7 @@ yyreduce:
     break;
 
   case 152:
-#line 2034 "Gmsh.y"
+#line 2024 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (6)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (6)].d);
@@ -5850,15 +5840,15 @@ yyreduce:
 	skip_until("For", "EndFor");
       else
 	ImbricatedLoop++;
-      if(ImbricatedLoop > MAX_RECUR_LOOPS-1){
+      if(ImbricatedLoop > MAX_RECUR_LOOPS - 1){
 	yymsg(0, "Reached maximum number of imbricated loops");
-	ImbricatedLoop = MAX_RECUR_LOOPS-1;
+	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
       }
     ;}
     break;
 
   case 153:
-#line 2051 "Gmsh.y"
+#line 2041 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (8)].d);
@@ -5870,23 +5860,22 @@ yyreduce:
 	skip_until("For", "EndFor");
       else
 	ImbricatedLoop++;
-      if(ImbricatedLoop > MAX_RECUR_LOOPS-1){
+      if(ImbricatedLoop > MAX_RECUR_LOOPS - 1){
 	yymsg(0, "Reached maximum number of imbricated loops");
-	ImbricatedLoop = MAX_RECUR_LOOPS-1;
+	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
       }
     ;}
     break;
 
   case 154:
-#line 2068 "Gmsh.y"
+#line 2058 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][2] = 1.0;
       LoopControlVariablesNameTab[ImbricatedLoop] = (yyvsp[(2) - (8)].c);
-      Symbol TheSymbol;      
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = (yyvsp[(2) - (8)].c);
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	TheSymbol.val = List_Create(1, 1, sizeof(double));
 	List_Put(TheSymbol.val, 0, &(yyvsp[(5) - (8)].d));
@@ -5900,23 +5889,22 @@ yyreduce:
 	skip_until("For", "EndFor");
       else
 	ImbricatedLoop++;
-      if(ImbricatedLoop > MAX_RECUR_LOOPS-1){
+      if(ImbricatedLoop > MAX_RECUR_LOOPS - 1){
 	yymsg(0, "Reached maximum number of imbricated loops");
-	ImbricatedLoop = MAX_RECUR_LOOPS-1;
+	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
       }
     ;}
     break;
 
   case 155:
-#line 2095 "Gmsh.y"
+#line 2084 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (10)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (10)].d);
       LoopControlVariablesTab[ImbricatedLoop][2] = (yyvsp[(9) - (10)].d);
       LoopControlVariablesNameTab[ImbricatedLoop] = (yyvsp[(2) - (10)].c);
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = (yyvsp[(2) - (10)].c);
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	TheSymbol.val = List_Create(1, 1, sizeof(double));
 	List_Put(TheSymbol.val, 0, &(yyvsp[(5) - (10)].d));
@@ -5930,40 +5918,39 @@ yyreduce:
 	skip_until("For", "EndFor");
       else
 	ImbricatedLoop++;
-      if(ImbricatedLoop > MAX_RECUR_LOOPS-1){
+      if(ImbricatedLoop > MAX_RECUR_LOOPS - 1){
 	yymsg(0, "Reached maximum number of imbricated loops");
-	ImbricatedLoop = MAX_RECUR_LOOPS-1;
+	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
       }
     ;}
     break;
 
   case 156:
-#line 2122 "Gmsh.y"
+#line 2110 "Gmsh.y"
     {
       if(ImbricatedLoop <= 0){
 	yymsg(0, "Invalid For/EndFor loop");
 	ImbricatedLoop = 0;
       }
       else{
-	double x0 = LoopControlVariablesTab[ImbricatedLoop-1][0];
-	double x1 = LoopControlVariablesTab[ImbricatedLoop-1][1];
-	double step = LoopControlVariablesTab[ImbricatedLoop-1][2];
-	int do_next = (step > 0.) ? (x0+step <= x1) : (x0+step >= x1);
+	double x0 = LoopControlVariablesTab[ImbricatedLoop - 1][0];
+	double x1 = LoopControlVariablesTab[ImbricatedLoop - 1][1];
+	double step = LoopControlVariablesTab[ImbricatedLoop - 1][2];
+	int do_next = (step > 0.) ? (x0 + step <= x1) : (x0 + step >= x1);
 	if(do_next){
-	  LoopControlVariablesTab[ImbricatedLoop-1][0] +=
-	    LoopControlVariablesTab[ImbricatedLoop-1][2];
-	  if(LoopControlVariablesNameTab[ImbricatedLoop-1]){
-	    Symbol TheSymbol;
-	    TheSymbol.Name = LoopControlVariablesNameTab[ImbricatedLoop-1];
-	    Symbol *pSymbol;
+	  LoopControlVariablesTab[ImbricatedLoop - 1][0] +=
+	    LoopControlVariablesTab[ImbricatedLoop - 1][2];
+	  if(LoopControlVariablesNameTab[ImbricatedLoop - 1]){
+	    Symbol TheSymbol, *pSymbol;
+	    TheSymbol.Name = LoopControlVariablesNameTab[ImbricatedLoop - 1];
 	    if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol)))
 	      yymsg(0, "Unknown loop variable");
 	    else
 	      *(double*)List_Pointer_Fast(pSymbol->val, 0) += 
-		LoopControlVariablesTab[ImbricatedLoop-1][2];
+		LoopControlVariablesTab[ImbricatedLoop - 1][2];
 	  }
-	  fsetpos(gmsh_yyin, &yyposImbricatedLoopsTab[ImbricatedLoop-1]);
-	  gmsh_yylineno = yylinenoImbricatedLoopsTab[ImbricatedLoop-1];
+	  fsetpos(gmsh_yyin, &yyposImbricatedLoopsTab[ImbricatedLoop - 1]);
+	  gmsh_yylineno = yylinenoImbricatedLoopsTab[ImbricatedLoop - 1];
 	}
 	else
 	  ImbricatedLoop--;
@@ -5972,7 +5959,7 @@ yyreduce:
     break;
 
   case 157:
-#line 2153 "Gmsh.y"
+#line 2140 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->createFunction((yyvsp[(2) - (2)].c), gmsh_yyin, gmsh_yyname,
 						      gmsh_yylineno))
@@ -5983,7 +5970,7 @@ yyreduce:
     break;
 
   case 158:
-#line 2161 "Gmsh.y"
+#line 2148 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->leaveFunction(&gmsh_yyin, gmsh_yyname,
 						     gmsh_yylineno))
@@ -5992,7 +5979,7 @@ yyreduce:
     break;
 
   case 159:
-#line 2167 "Gmsh.y"
+#line 2154 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->enterFunction((yyvsp[(2) - (3)].c), &gmsh_yyin, gmsh_yyname,
 						     gmsh_yylineno))
@@ -6002,20 +5989,20 @@ yyreduce:
     break;
 
   case 160:
-#line 2174 "Gmsh.y"
+#line 2161 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].d)) skip_until("If", "EndIf");
     ;}
     break;
 
   case 161:
-#line 2178 "Gmsh.y"
+#line 2165 "Gmsh.y"
     {
     ;}
     break;
 
   case 162:
-#line 2187 "Gmsh.y"
+#line 2174 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (5)].l), 
@@ -6026,7 +6013,7 @@ yyreduce:
     break;
 
   case 163:
-#line 2195 "Gmsh.y"
+#line 2182 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (11)].l), 
@@ -6037,7 +6024,7 @@ yyreduce:
     break;
 
   case 164:
-#line 2203 "Gmsh.y"
+#line 2190 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (13)].l), 
@@ -6048,14 +6035,14 @@ yyreduce:
     break;
 
   case 165:
-#line 2211 "Gmsh.y"
+#line 2198 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 166:
-#line 2215 "Gmsh.y"
+#line 2202 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (7)].l), 
@@ -6066,14 +6053,14 @@ yyreduce:
     break;
 
   case 167:
-#line 2223 "Gmsh.y"
+#line 2210 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 168:
-#line 2227 "Gmsh.y"
+#line 2214 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (13)].l), 
@@ -6084,14 +6071,14 @@ yyreduce:
     break;
 
   case 169:
-#line 2235 "Gmsh.y"
+#line 2222 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 170:
-#line 2239 "Gmsh.y"
+#line 2226 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (15)].l), 
@@ -6102,14 +6089,14 @@ yyreduce:
     break;
 
   case 171:
-#line 2247 "Gmsh.y"
+#line 2234 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 172:
-#line 2251 "Gmsh.y"
+#line 2238 "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.,
@@ -6119,14 +6106,14 @@ yyreduce:
     break;
 
   case 173:
-#line 2258 "Gmsh.y"
+#line 2245 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 174:
-#line 2262 "Gmsh.y"
+#line 2249 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       extr.mesh.ViewIndex = (int)(yyvsp[(4) - (10)].d);
@@ -6139,7 +6126,7 @@ yyreduce:
     break;
 
   case 175:
-#line 2274 "Gmsh.y"
+#line 2261 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (8)].d), 
@@ -6149,7 +6136,7 @@ yyreduce:
     break;
 
   case 176:
-#line 2281 "Gmsh.y"
+#line 2268 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (8)].d), 
@@ -6159,7 +6146,7 @@ yyreduce:
     break;
 
   case 177:
-#line 2288 "Gmsh.y"
+#line 2275 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (8)].d), 
@@ -6169,7 +6156,7 @@ yyreduce:
     break;
 
   case 178:
-#line 2295 "Gmsh.y"
+#line 2282 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d), 
@@ -6179,7 +6166,7 @@ yyreduce:
     break;
 
   case 179:
-#line 2302 "Gmsh.y"
+#line 2289 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d), 
@@ -6189,7 +6176,7 @@ yyreduce:
     break;
 
   case 180:
-#line 2309 "Gmsh.y"
+#line 2296 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d), 
@@ -6199,7 +6186,7 @@ yyreduce:
     break;
 
   case 181:
-#line 2316 "Gmsh.y"
+#line 2303 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (14)].d), 
@@ -6209,7 +6196,7 @@ yyreduce:
     break;
 
   case 182:
-#line 2323 "Gmsh.y"
+#line 2310 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (14)].d), 
@@ -6219,7 +6206,7 @@ yyreduce:
     break;
 
   case 183:
-#line 2330 "Gmsh.y"
+#line 2317 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (14)].d), 
@@ -6229,14 +6216,14 @@ yyreduce:
     break;
 
   case 184:
-#line 2337 "Gmsh.y"
+#line 2324 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 185:
-#line 2341 "Gmsh.y"
+#line 2328 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d), 
@@ -6246,14 +6233,14 @@ yyreduce:
     break;
 
   case 186:
-#line 2348 "Gmsh.y"
+#line 2335 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 187:
-#line 2352 "Gmsh.y"
+#line 2339 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d), 
@@ -6263,14 +6250,14 @@ yyreduce:
     break;
 
   case 188:
-#line 2359 "Gmsh.y"
+#line 2346 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 189:
-#line 2363 "Gmsh.y"
+#line 2350 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d), 
@@ -6280,14 +6267,14 @@ yyreduce:
     break;
 
   case 190:
-#line 2370 "Gmsh.y"
+#line 2357 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 191:
-#line 2374 "Gmsh.y"
+#line 2361 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (16)].d), 
@@ -6297,14 +6284,14 @@ yyreduce:
     break;
 
   case 192:
-#line 2381 "Gmsh.y"
+#line 2368 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 193:
-#line 2385 "Gmsh.y"
+#line 2372 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (16)].d), 
@@ -6314,14 +6301,14 @@ yyreduce:
     break;
 
   case 194:
-#line 2392 "Gmsh.y"
+#line 2379 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 195:
-#line 2396 "Gmsh.y"
+#line 2383 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (16)].d), 
@@ -6331,14 +6318,14 @@ yyreduce:
     break;
 
   case 196:
-#line 2403 "Gmsh.y"
+#line 2390 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 197:
-#line 2407 "Gmsh.y"
+#line 2394 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (18)].d), 
@@ -6348,14 +6335,14 @@ yyreduce:
     break;
 
   case 198:
-#line 2414 "Gmsh.y"
+#line 2401 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 199:
-#line 2418 "Gmsh.y"
+#line 2405 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (18)].d), 
@@ -6365,14 +6352,14 @@ yyreduce:
     break;
 
   case 200:
-#line 2425 "Gmsh.y"
+#line 2412 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 201:
-#line 2429 "Gmsh.y"
+#line 2416 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (18)].d), 
@@ -6382,19 +6369,19 @@ yyreduce:
     break;
 
   case 202:
-#line 2440 "Gmsh.y"
+#line 2427 "Gmsh.y"
     {
     ;}
     break;
 
   case 203:
-#line 2443 "Gmsh.y"
+#line 2430 "Gmsh.y"
     {
     ;}
     break;
 
   case 204:
-#line 2449 "Gmsh.y"
+#line 2436 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = 1;
@@ -6406,15 +6393,15 @@ yyreduce:
     break;
 
   case 205:
-#line 2458 "Gmsh.y"
+#line 2445 "Gmsh.y"
     {
-      double d;
       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);
@@ -6429,16 +6416,16 @@ yyreduce:
     break;
 
   case 206:
-#line 2478 "Gmsh.y"
+#line 2465 "Gmsh.y"
     {
       yymsg(0, "Explicit region numbers in layers are deprecated");
-      double d;
       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);
@@ -6455,14 +6442,14 @@ yyreduce:
     break;
 
   case 207:
-#line 2501 "Gmsh.y"
+#line 2488 "Gmsh.y"
     {
       extr.mesh.Recombine = true;
     ;}
     break;
 
   case 208:
-#line 2505 "Gmsh.y"
+#line 2492 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindSurface(num)){
@@ -6484,7 +6471,7 @@ yyreduce:
     break;
 
   case 209:
-#line 2529 "Gmsh.y"
+#line 2516 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -6505,7 +6492,7 @@ yyreduce:
     break;
 
   case 210:
-#line 2547 "Gmsh.y"
+#line 2534 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (9)].l)); i++){
 	double d;
@@ -6526,7 +6513,7 @@ yyreduce:
     break;
 
   case 211:
-#line 2565 "Gmsh.y"
+#line 2552 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (9)].l)); i++){
 	double d;
@@ -6547,7 +6534,7 @@ yyreduce:
     break;
 
   case 212:
-#line 2583 "Gmsh.y"
+#line 2570 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(4) - (8)].d));
       if(!s)
@@ -6579,7 +6566,7 @@ yyreduce:
     break;
 
   case 213:
-#line 2612 "Gmsh.y"
+#line 2599 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(4) - (9)].d));
       if(!s)
@@ -6617,7 +6604,7 @@ yyreduce:
     break;
 
   case 214:
-#line 2647 "Gmsh.y"
+#line 2634 "Gmsh.y"
     {
       yymsg(1, "Elliptic Surface is deprecated: use Transfinite instead (with smoothing)");
       List_Delete((yyvsp[(7) - (8)].l));
@@ -6625,7 +6612,7 @@ yyreduce:
     break;
 
   case 215:
-#line 2652 "Gmsh.y"
+#line 2639 "Gmsh.y"
     {
       Volume *v = FindVolume((int)(yyvsp[(4) - (8)].d));
       if(!v)
@@ -6655,7 +6642,7 @@ yyreduce:
     break;
 
   case 216:
-#line 2679 "Gmsh.y"
+#line 2666 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -6672,7 +6659,7 @@ yyreduce:
     break;
 
   case 217:
-#line 2693 "Gmsh.y"
+#line 2680 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	double d;
@@ -6688,7 +6675,7 @@ yyreduce:
     break;
 
   case 218:
-#line 2706 "Gmsh.y"
+#line 2693 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -6702,7 +6689,7 @@ yyreduce:
     break;
 
   case 219:
-#line 2723 "Gmsh.y"
+#line 2710 "Gmsh.y"
     { 
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s)
@@ -6711,7 +6698,7 @@ yyreduce:
     break;
 
   case 220:
-#line 2729 "Gmsh.y"
+#line 2716 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s)
@@ -6720,66 +6707,66 @@ yyreduce:
     break;
 
   case 221:
-#line 2735 "Gmsh.y"
+#line 2722 "Gmsh.y"
     {
     ;}
     break;
 
   case 222:
-#line 2738 "Gmsh.y"
+#line 2725 "Gmsh.y"
     {
     ;}
     break;
 
   case 223:
-#line 2747 "Gmsh.y"
+#line 2734 "Gmsh.y"
     { 
       ReplaceAllDuplicates();
     ;}
     break;
 
   case 224:
-#line 2756 "Gmsh.y"
+#line 2743 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d);           ;}
     break;
 
   case 225:
-#line 2757 "Gmsh.y"
+#line 2744 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (3)].d);           ;}
     break;
 
   case 226:
-#line 2758 "Gmsh.y"
+#line 2745 "Gmsh.y"
     { (yyval.d) = -(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 227:
-#line 2759 "Gmsh.y"
+#line 2746 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (2)].d);           ;}
     break;
 
   case 228:
-#line 2760 "Gmsh.y"
+#line 2747 "Gmsh.y"
     { (yyval.d) = !(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 229:
-#line 2761 "Gmsh.y"
+#line 2748 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 230:
-#line 2762 "Gmsh.y"
+#line 2749 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 231:
-#line 2763 "Gmsh.y"
+#line 2750 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 232:
-#line 2765 "Gmsh.y"
+#line 2752 "Gmsh.y"
     { 
       if(!(yyvsp[(3) - (3)].d))
 	yymsg(0, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
@@ -6789,311 +6776,310 @@ yyreduce:
     break;
 
   case 233:
-#line 2771 "Gmsh.y"
+#line 2758 "Gmsh.y"
     { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d);  ;}
     break;
 
   case 234:
-#line 2772 "Gmsh.y"
+#line 2759 "Gmsh.y"
     { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  ;}
     break;
 
   case 235:
-#line 2773 "Gmsh.y"
+#line 2760 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 236:
-#line 2774 "Gmsh.y"
+#line 2761 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 237:
-#line 2775 "Gmsh.y"
+#line 2762 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 238:
-#line 2776 "Gmsh.y"
+#line 2763 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 239:
-#line 2777 "Gmsh.y"
+#line 2764 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 240:
-#line 2778 "Gmsh.y"
+#line 2765 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 241:
-#line 2779 "Gmsh.y"
+#line 2766 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 242:
-#line 2780 "Gmsh.y"
+#line 2767 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 243:
-#line 2781 "Gmsh.y"
-    { (yyval.d) = (yyvsp[(1) - (5)].d)? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d);  ;}
+#line 2768 "Gmsh.y"
+    { (yyval.d) = (yyvsp[(1) - (5)].d) ? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d); ;}
     break;
 
   case 244:
-#line 2782 "Gmsh.y"
+#line 2769 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 245:
-#line 2783 "Gmsh.y"
+#line 2770 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 246:
-#line 2784 "Gmsh.y"
+#line 2771 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 247:
-#line 2785 "Gmsh.y"
+#line 2772 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 248:
-#line 2786 "Gmsh.y"
+#line 2773 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 249:
-#line 2787 "Gmsh.y"
+#line 2774 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 250:
-#line 2788 "Gmsh.y"
+#line 2775 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 251:
-#line 2789 "Gmsh.y"
+#line 2776 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 252:
-#line 2790 "Gmsh.y"
+#line 2777 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 253:
-#line 2791 "Gmsh.y"
+#line 2778 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 254:
-#line 2792 "Gmsh.y"
+#line 2779 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 255:
-#line 2793 "Gmsh.y"
+#line 2780 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 256:
-#line 2794 "Gmsh.y"
+#line 2781 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 257:
-#line 2795 "Gmsh.y"
+#line 2782 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 258:
-#line 2796 "Gmsh.y"
+#line 2783 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 259:
-#line 2797 "Gmsh.y"
+#line 2784 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 260:
-#line 2798 "Gmsh.y"
+#line 2785 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 261:
-#line 2799 "Gmsh.y"
+#line 2786 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 262:
-#line 2800 "Gmsh.y"
+#line 2787 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 263:
-#line 2801 "Gmsh.y"
-    { (yyval.d) = sqrt((yyvsp[(3) - (6)].d)*(yyvsp[(3) - (6)].d)+(yyvsp[(5) - (6)].d)*(yyvsp[(5) - (6)].d)); ;}
+#line 2788 "Gmsh.y"
+    { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 264:
-#line 2802 "Gmsh.y"
-    { (yyval.d) = (yyvsp[(3) - (4)].d)*(double)rand()/(double)RAND_MAX; ;}
+#line 2789 "Gmsh.y"
+    { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
   case 265:
-#line 2804 "Gmsh.y"
+#line 2791 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 266:
-#line 2805 "Gmsh.y"
+#line 2792 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 267:
-#line 2806 "Gmsh.y"
+#line 2793 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 268:
-#line 2807 "Gmsh.y"
+#line 2794 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 269:
-#line 2808 "Gmsh.y"
+#line 2795 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 270:
-#line 2809 "Gmsh.y"
+#line 2796 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 271:
-#line 2810 "Gmsh.y"
+#line 2797 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 272:
-#line 2811 "Gmsh.y"
+#line 2798 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 273:
-#line 2812 "Gmsh.y"
+#line 2799 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 274:
-#line 2813 "Gmsh.y"
+#line 2800 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 275:
-#line 2814 "Gmsh.y"
+#line 2801 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 276:
-#line 2815 "Gmsh.y"
+#line 2802 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 277:
-#line 2816 "Gmsh.y"
+#line 2803 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 278:
-#line 2817 "Gmsh.y"
+#line 2804 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 279:
-#line 2818 "Gmsh.y"
+#line 2805 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 280:
-#line 2819 "Gmsh.y"
+#line 2806 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 281:
-#line 2820 "Gmsh.y"
+#line 2807 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 282:
-#line 2821 "Gmsh.y"
+#line 2808 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 283:
-#line 2822 "Gmsh.y"
+#line 2809 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 284:
-#line 2823 "Gmsh.y"
-    { (yyval.d) = sqrt((yyvsp[(3) - (6)].d)*(yyvsp[(3) - (6)].d)+(yyvsp[(5) - (6)].d)*(yyvsp[(5) - (6)].d)); ;}
+#line 2810 "Gmsh.y"
+    { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 285:
-#line 2824 "Gmsh.y"
-    { (yyval.d) = (yyvsp[(3) - (4)].d)*(double)rand()/(double)RAND_MAX; ;}
+#line 2811 "Gmsh.y"
+    { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
   case 286:
-#line 2833 "Gmsh.y"
+#line 2820 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d); ;}
     break;
 
   case 287:
-#line 2834 "Gmsh.y"
+#line 2821 "Gmsh.y"
     { (yyval.d) = 3.141592653589793; ;}
     break;
 
   case 288:
-#line 2835 "Gmsh.y"
+#line 2822 "Gmsh.y"
     { (yyval.d) = Msg::GetCommRank(); ;}
     break;
 
   case 289:
-#line 2836 "Gmsh.y"
+#line 2823 "Gmsh.y"
     { (yyval.d) = Msg::GetCommSize(); ;}
     break;
 
   case 290:
-#line 2837 "Gmsh.y"
+#line 2824 "Gmsh.y"
     { (yyval.d) = Get_GmshMajorVersion(); ;}
     break;
 
   case 291:
-#line 2838 "Gmsh.y"
+#line 2825 "Gmsh.y"
     { (yyval.d) = Get_GmshMinorVersion(); ;}
     break;
 
   case 292:
-#line 2839 "Gmsh.y"
+#line 2826 "Gmsh.y"
     { (yyval.d) = Get_GmshPatchVersion(); ;}
     break;
 
   case 293:
-#line 2844 "Gmsh.y"
+#line 2831 "Gmsh.y"
     {
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = (yyvsp[(1) - (1)].c);
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (1)].c));
 	(yyval.d) = 0.;
@@ -7105,13 +7091,12 @@ yyreduce:
     break;
 
   case 294:
-#line 2860 "Gmsh.y"
+#line 2846 "Gmsh.y"
     {
       char tmpstring[1024];
       sprintf(tmpstring, "%s_%d", (yyvsp[(1) - (5)].c), (int)(yyvsp[(4) - (5)].d)) ;
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = tmpstring;
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
 	yymsg(0, "Unknown variable '%s'", tmpstring);
 	(yyval.d) = 0.;
@@ -7123,11 +7108,10 @@ yyreduce:
     break;
 
   case 295:
-#line 2875 "Gmsh.y"
+#line 2860 "Gmsh.y"
     {
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = (yyvsp[(1) - (4)].c);
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (4)].c));
 	(yyval.d) = 0.;
@@ -7146,11 +7130,10 @@ yyreduce:
     break;
 
   case 296:
-#line 2895 "Gmsh.y"
+#line 2879 "Gmsh.y"
     {
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = (yyvsp[(2) - (4)].c);
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(2) - (4)].c));
 	(yyval.d) = 0.;
@@ -7162,11 +7145,10 @@ yyreduce:
     break;
 
   case 297:
-#line 2908 "Gmsh.y"
+#line 2891 "Gmsh.y"
     {
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = (yyvsp[(1) - (2)].c);
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (2)].c));
 	(yyval.d) = 0.;
@@ -7178,11 +7160,10 @@ yyreduce:
     break;
 
   case 298:
-#line 2921 "Gmsh.y"
+#line 2903 "Gmsh.y"
     {
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = (yyvsp[(1) - (5)].c);
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (5)].c));
 	(yyval.d) = 0.;
@@ -7201,7 +7182,7 @@ yyreduce:
     break;
 
   case 299:
-#line 2944 "Gmsh.y"
+#line 2925 "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));
@@ -7209,7 +7190,7 @@ yyreduce:
     break;
 
   case 300:
-#line 2949 "Gmsh.y"
+#line 2930 "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));
@@ -7217,7 +7198,7 @@ yyreduce:
     break;
 
   case 301:
-#line 2954 "Gmsh.y"
+#line 2935 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d)){
@@ -7230,7 +7211,7 @@ yyreduce:
     break;
 
   case 302:
-#line 2964 "Gmsh.y"
+#line 2945 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d)){
@@ -7243,7 +7224,7 @@ yyreduce:
     break;
 
   case 303:
-#line 2974 "Gmsh.y"
+#line 2955 "Gmsh.y"
     { 
       (yyval.d) = Msg::GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
@@ -7251,70 +7232,70 @@ yyreduce:
     break;
 
   case 304:
-#line 2982 "Gmsh.y"
+#line 2963 "Gmsh.y"
     {
       memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double));
     ;}
     break;
 
   case 305:
-#line 2986 "Gmsh.y"
+#line 2967 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 306:
-#line 2990 "Gmsh.y"
+#line 2971 "Gmsh.y"
     { 
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 307:
-#line 2994 "Gmsh.y"
+#line 2975 "Gmsh.y"
     { 
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 308:
-#line 2998 "Gmsh.y"
+#line 2979 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 309:
-#line 3005 "Gmsh.y"
+#line 2986 "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 310:
-#line 3009 "Gmsh.y"
+#line 2990 "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 311:
-#line 3013 "Gmsh.y"
+#line 2994 "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 312:
-#line 3017 "Gmsh.y"
+#line 2998 "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 313:
-#line 3024 "Gmsh.y"
+#line 3005 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(List_T*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].l)));
@@ -7322,14 +7303,14 @@ yyreduce:
     break;
 
   case 314:
-#line 3029 "Gmsh.y"
+#line 3010 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].l)));
     ;}
     break;
 
   case 315:
-#line 3037 "Gmsh.y"
+#line 3017 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -7337,14 +7318,14 @@ yyreduce:
     break;
 
   case 316:
-#line 3042 "Gmsh.y"
+#line 3022 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 317:
-#line 3046 "Gmsh.y"
+#line 3026 "Gmsh.y"
     {
       // creates an empty list
       (yyval.l) = List_Create(2, 1, sizeof(double));
@@ -7352,14 +7333,14 @@ yyreduce:
     break;
 
   case 318:
-#line 3051 "Gmsh.y"
+#line 3031 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 319:
-#line 3055 "Gmsh.y"
+#line 3035 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -7370,7 +7351,7 @@ yyreduce:
     break;
 
   case 320:
-#line 3063 "Gmsh.y"
+#line 3043 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (5)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -7381,7 +7362,7 @@ yyreduce:
     break;
 
   case 321:
-#line 3074 "Gmsh.y"
+#line 3054 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -7392,7 +7373,7 @@ yyreduce:
     break;
 
   case 322:
-#line 3082 "Gmsh.y"
+#line 3062 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (3)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -7403,7 +7384,7 @@ yyreduce:
     break;
 
   case 323:
-#line 3090 "Gmsh.y"
+#line 3070 "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.)) 
@@ -7412,7 +7393,7 @@ yyreduce:
     break;
 
   case 324:
-#line 3096 "Gmsh.y"
+#line 3076 "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)){
@@ -7426,7 +7407,7 @@ yyreduce:
     break;
 
   case 325:
-#line 3107 "Gmsh.y"
+#line 3087 "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
@@ -7449,7 +7430,7 @@ yyreduce:
     break;
 
   case 326:
-#line 3127 "Gmsh.y"
+#line 3107 "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++){
@@ -7462,7 +7443,7 @@ yyreduce:
     break;
 
   case 327:
-#line 3137 "Gmsh.y"
+#line 3117 "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++){
@@ -7475,12 +7456,11 @@ yyreduce:
     break;
 
   case 328:
-#line 3147 "Gmsh.y"
+#line 3127 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = (yyvsp[(1) - (3)].c);
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (3)].c));
 	double d = 0.0;
@@ -7495,12 +7475,11 @@ yyreduce:
     break;
 
   case 329:
-#line 3164 "Gmsh.y"
+#line 3143 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = (yyvsp[(1) - (6)].c);
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (6)].c));
 	double d = 0.0;
@@ -7522,7 +7501,7 @@ yyreduce:
     break;
 
   case 330:
-#line 3191 "Gmsh.y"
+#line 3169 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -7530,21 +7509,21 @@ yyreduce:
     break;
 
   case 331:
-#line 3196 "Gmsh.y"
+#line 3174 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 332:
-#line 3200 "Gmsh.y"
+#line 3178 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].d)));
     ;}
     break;
 
   case 333:
-#line 3204 "Gmsh.y"
+#line 3182 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
 	double d;
@@ -7556,21 +7535,21 @@ yyreduce:
     break;
 
   case 334:
-#line 3217 "Gmsh.y"
+#line 3194 "Gmsh.y"
     {
       (yyval.u) = CTX.PACK_COLOR((int)(yyvsp[(2) - (9)].d), (int)(yyvsp[(4) - (9)].d), (int)(yyvsp[(6) - (9)].d), (int)(yyvsp[(8) - (9)].d));
     ;}
     break;
 
   case 335:
-#line 3221 "Gmsh.y"
+#line 3198 "Gmsh.y"
     {
       (yyval.u) = CTX.PACK_COLOR((int)(yyvsp[(2) - (7)].d), (int)(yyvsp[(4) - (7)].d), (int)(yyvsp[(6) - (7)].d), 255);
     ;}
     break;
 
   case 336:
-#line 3233 "Gmsh.y"
+#line 3210 "Gmsh.y"
     {
       int flag;
       (yyval.u) = Get_ColorForString(ColorString, -1, (yyvsp[(1) - (1)].c), &flag);
@@ -7580,7 +7559,7 @@ yyreduce:
     break;
 
   case 337:
-#line 3240 "Gmsh.y"
+#line 3217 "Gmsh.y"
     {
       unsigned int val = 0;
       ColorOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(5) - (5)].c), val);
@@ -7590,14 +7569,14 @@ yyreduce:
     break;
 
   case 338:
-#line 3250 "Gmsh.y"
+#line 3227 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 339:
-#line 3254 "Gmsh.y"
+#line 3231 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = Get_ColorTable((int)(yyvsp[(3) - (6)].d));
@@ -7612,7 +7591,7 @@ yyreduce:
     break;
 
   case 340:
-#line 3269 "Gmsh.y"
+#line 3246 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].u)));
@@ -7620,35 +7599,35 @@ yyreduce:
     break;
 
   case 341:
-#line 3274 "Gmsh.y"
+#line 3251 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].u)));
     ;}
     break;
 
   case 342:
-#line 3281 "Gmsh.y"
+#line 3258 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 343:
-#line 3285 "Gmsh.y"
+#line 3262 "Gmsh.y"
     {
       Msg::Warning("Named string expressions not implemented yet");
     ;}
     break;
 
   case 344:
-#line 3292 "Gmsh.y"
+#line 3269 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 345:
-#line 3296 "Gmsh.y"
+#line 3273 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc(32*sizeof(char));
       time_t now;
@@ -7659,7 +7638,7 @@ yyreduce:
     break;
 
   case 346:
-#line 3304 "Gmsh.y"
+#line 3281 "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));
@@ -7670,11 +7649,11 @@ yyreduce:
     break;
 
   case 347:
-#line 3312 "Gmsh.y"
+#line 3289 "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--){
+      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';
@@ -7687,11 +7666,11 @@ yyreduce:
     break;
 
   case 348:
-#line 3326 "Gmsh.y"
+#line 3303 "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--){
+      for(i = strlen((yyvsp[(3) - (4)].c)) - 1; i >= 0; i--){
 	if((yyvsp[(3) - (4)].c)[i] == '/' || (yyvsp[(3) - (4)].c)[i] == '\\')
 	  break;
       }
@@ -7704,14 +7683,14 @@ yyreduce:
     break;
 
   case 349:
-#line 3340 "Gmsh.y"
+#line 3317 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     ;}
     break;
 
   case 350:
-#line 3344 "Gmsh.y"
+#line 3321 "Gmsh.y"
     {
       char tmpstring[1024];
       int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
@@ -7720,7 +7699,7 @@ yyreduce:
 	(yyval.c) = (yyvsp[(3) - (6)].c);
       }
       else if(i > 0){
-	yymsg(0, "%d extra argument%s in Sprintf", i, (i>1)?"s":"");
+	yymsg(0, "%d extra argument%s in Sprintf", i, (i > 1) ? "s" : "");
 	(yyval.c) = (yyvsp[(3) - (6)].c);
       }
       else{
@@ -7733,7 +7712,7 @@ yyreduce:
     break;
 
   case 351:
-#line 3363 "Gmsh.y"
+#line 3340 "Gmsh.y"
     { 
       const char *val = "";
       StringOption(GMSH_GET, (yyvsp[(3) - (6)].c), 0, (yyvsp[(5) - (6)].c), val);
@@ -7744,7 +7723,7 @@ yyreduce:
     break;
 
   case 352:
-#line 3371 "Gmsh.y"
+#line 3348 "Gmsh.y"
     { 
       const char *val = "";
       StringOption(GMSH_GET, (yyvsp[(3) - (9)].c), (int)(yyvsp[(5) - (9)].d), (yyvsp[(8) - (9)].c), val);
@@ -7756,7 +7735,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 7760 "Gmsh.tab.cpp"
+#line 7739 "Gmsh.tab.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -7970,7 +7949,7 @@ yyreturn:
 }
 
 
-#line 3380 "Gmsh.y"
+#line 3357 "Gmsh.y"
 
 
 void DeleteSymbol(void *a, void *b)
@@ -8038,7 +8017,7 @@ void FixRelativePath(const char *in, char *out)
   else{
     // append 'in' to the path of the parent file
     strcpy(out, gmsh_yyname);
-    int i = strlen(out)-1 ;
+    int i = strlen(out) - 1 ;
     while(i >= 0 && gmsh_yyname[i] != '/' && gmsh_yyname[i] != '\\') i-- ;
     out[i+1] = '\0';
     strcat(out, in);
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index f399984ad74772b95e2ebe1d883f737940e084a1..a3284749e89075d82b2cc7706d7a46eacf50e381 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1,5 +1,5 @@
 %{
-// $Id: Gmsh.y,v 1.322 2008-07-05 23:01:02 geuzaine Exp $
+// $Id: Gmsh.y,v 1.323 2008-07-06 11:25:37 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -213,7 +213,7 @@ Printf :
       if(i < 0) 
 	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);
       Free($3);
@@ -226,7 +226,7 @@ Printf :
       if(i < 0) 
 	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{
 	char tmpstring2[1024];
 	FixRelativePath($8, tmpstring2);
@@ -617,9 +617,8 @@ Affectation :
 
     tSTRING NumericAffectation FExpr tEND
     {
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = $1;
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	if(!$2){
 	  TheSymbol.val = List_Create(1, 1, sizeof(double));
@@ -648,9 +647,8 @@ Affectation :
     }
   | tSTRING '[' FExpr ']' NumericAffectation FExpr tEND
     {
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = $1;
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	if(!$5){
 	  TheSymbol.val = List_Create(5, 5, sizeof(double));
@@ -692,9 +690,8 @@ Affectation :
 	Free($1);
       }
       else{
-	Symbol TheSymbol;
+	Symbol TheSymbol, *pSymbol;
 	TheSymbol.Name = $1;
-	Symbol *pSymbol;
 	if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	  if(!$7){
 	    TheSymbol.val = List_Create(5, 5, sizeof(double));
@@ -741,9 +738,8 @@ Affectation :
     }
   | tSTRING '[' ']' tAFFECT ListOfDouble tEND
     {
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = $1;
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	TheSymbol.val = List_Create(5, 5, sizeof(double));
 	List_Copy($5, TheSymbol.val);
@@ -759,9 +755,8 @@ Affectation :
   | tSTRING '[' ']' tAFFECTPLUS ListOfDouble tEND
     {
       // appends to the list
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = $1;
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	TheSymbol.val = List_Create(5, 5, sizeof(double));
 	List_Copy($5, TheSymbol.val);
@@ -776,9 +771,8 @@ Affectation :
     }
   | tSTRING NumericIncrement tEND
     {
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = $1;
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol)))
 	yymsg(0, "Unknown variable '%s'", $1); 
       else
@@ -787,9 +781,8 @@ Affectation :
     }
   | tSTRING '[' FExpr ']' NumericIncrement tEND
     {
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = $1;
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol)))
 	yymsg(0, "Unknown variable '%s'", $1); 
       else{
@@ -1039,7 +1032,7 @@ Affectation :
 	yymsg(0, "Unknown option '%s' or plugin '%s'", $6, $3);
       }
 #endif
-      Free($3); Free($6); // FIXME: sometimes leak $8
+      Free($3); Free($6);
     }
 ;
 
@@ -1952,7 +1945,7 @@ Command :
 	SleepInSeconds($2);
       }
       else if(!strcmp($1, "Remesh")){
-	Msg::Error("Surface ReMeshing must be reinterfaced");
+	Msg::Error("Surface remeshing must be reinterfaced");
       }
       else if(!strcmp($1, "Mesh")){
 	int lock = CTX.threads_lock;
@@ -1961,9 +1954,6 @@ Command :
 	GModel::current()->mesh((int)$2);
 	CTX.threads_lock = lock;
       }
-      else if(!strcmp($1, "Status")){
-	yymsg(0, "Mesh directives are not (yet) allowed in scripts");
-      }
       else
 	yymsg(0, "Unknown command '%s'", $1);
       Free($1);
@@ -2042,9 +2032,9 @@ Loop :
 	skip_until("For", "EndFor");
       else
 	ImbricatedLoop++;
-      if(ImbricatedLoop > MAX_RECUR_LOOPS-1){
+      if(ImbricatedLoop > MAX_RECUR_LOOPS - 1){
 	yymsg(0, "Reached maximum number of imbricated loops");
-	ImbricatedLoop = MAX_RECUR_LOOPS-1;
+	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
       }
     }
   | tFor '(' FExpr tDOTS FExpr tDOTS FExpr ')'
@@ -2059,9 +2049,9 @@ Loop :
 	skip_until("For", "EndFor");
       else
 	ImbricatedLoop++;
-      if(ImbricatedLoop > MAX_RECUR_LOOPS-1){
+      if(ImbricatedLoop > MAX_RECUR_LOOPS - 1){
 	yymsg(0, "Reached maximum number of imbricated loops");
-	ImbricatedLoop = MAX_RECUR_LOOPS-1;
+	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
       }
     }
   | tFor tSTRING tIn '{' FExpr tDOTS FExpr '}' 
@@ -2070,9 +2060,8 @@ Loop :
       LoopControlVariablesTab[ImbricatedLoop][1] = $7;
       LoopControlVariablesTab[ImbricatedLoop][2] = 1.0;
       LoopControlVariablesNameTab[ImbricatedLoop] = $2;
-      Symbol TheSymbol;      
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = $2;
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	TheSymbol.val = List_Create(1, 1, sizeof(double));
 	List_Put(TheSymbol.val, 0, &$5);
@@ -2086,9 +2075,9 @@ Loop :
 	skip_until("For", "EndFor");
       else
 	ImbricatedLoop++;
-      if(ImbricatedLoop > MAX_RECUR_LOOPS-1){
+      if(ImbricatedLoop > MAX_RECUR_LOOPS - 1){
 	yymsg(0, "Reached maximum number of imbricated loops");
-	ImbricatedLoop = MAX_RECUR_LOOPS-1;
+	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
       }
     }
   | tFor tSTRING tIn '{' FExpr tDOTS FExpr tDOTS FExpr '}' 
@@ -2097,9 +2086,8 @@ Loop :
       LoopControlVariablesTab[ImbricatedLoop][1] = $7;
       LoopControlVariablesTab[ImbricatedLoop][2] = $9;
       LoopControlVariablesNameTab[ImbricatedLoop] = $2;
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = $2;
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
 	TheSymbol.val = List_Create(1, 1, sizeof(double));
 	List_Put(TheSymbol.val, 0, &$5);
@@ -2113,9 +2101,9 @@ Loop :
 	skip_until("For", "EndFor");
       else
 	ImbricatedLoop++;
-      if(ImbricatedLoop > MAX_RECUR_LOOPS-1){
+      if(ImbricatedLoop > MAX_RECUR_LOOPS - 1){
 	yymsg(0, "Reached maximum number of imbricated loops");
-	ImbricatedLoop = MAX_RECUR_LOOPS-1;
+	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
       }
     }
   | tEndFor 
@@ -2125,25 +2113,24 @@ Loop :
 	ImbricatedLoop = 0;
       }
       else{
-	double x0 = LoopControlVariablesTab[ImbricatedLoop-1][0];
-	double x1 = LoopControlVariablesTab[ImbricatedLoop-1][1];
-	double step = LoopControlVariablesTab[ImbricatedLoop-1][2];
-	int do_next = (step > 0.) ? (x0+step <= x1) : (x0+step >= x1);
+	double x0 = LoopControlVariablesTab[ImbricatedLoop - 1][0];
+	double x1 = LoopControlVariablesTab[ImbricatedLoop - 1][1];
+	double step = LoopControlVariablesTab[ImbricatedLoop - 1][2];
+	int do_next = (step > 0.) ? (x0 + step <= x1) : (x0 + step >= x1);
 	if(do_next){
-	  LoopControlVariablesTab[ImbricatedLoop-1][0] +=
-	    LoopControlVariablesTab[ImbricatedLoop-1][2];
-	  if(LoopControlVariablesNameTab[ImbricatedLoop-1]){
-	    Symbol TheSymbol;
-	    TheSymbol.Name = LoopControlVariablesNameTab[ImbricatedLoop-1];
-	    Symbol *pSymbol;
+	  LoopControlVariablesTab[ImbricatedLoop - 1][0] +=
+	    LoopControlVariablesTab[ImbricatedLoop - 1][2];
+	  if(LoopControlVariablesNameTab[ImbricatedLoop - 1]){
+	    Symbol TheSymbol, *pSymbol;
+	    TheSymbol.Name = LoopControlVariablesNameTab[ImbricatedLoop - 1];
 	    if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol)))
 	      yymsg(0, "Unknown loop variable");
 	    else
 	      *(double*)List_Pointer_Fast(pSymbol->val, 0) += 
-		LoopControlVariablesTab[ImbricatedLoop-1][2];
+		LoopControlVariablesTab[ImbricatedLoop - 1][2];
 	  }
-	  fsetpos(gmsh_yyin, &yyposImbricatedLoopsTab[ImbricatedLoop-1]);
-	  gmsh_yylineno = yylinenoImbricatedLoopsTab[ImbricatedLoop-1];
+	  fsetpos(gmsh_yyin, &yyposImbricatedLoopsTab[ImbricatedLoop - 1]);
+	  gmsh_yylineno = yylinenoImbricatedLoopsTab[ImbricatedLoop - 1];
 	}
 	else
 	  ImbricatedLoop--;
@@ -2456,13 +2443,13 @@ ExtrudeParameter :
     }
   | tLayers '{' ListOfDouble ',' ListOfDouble '}' tEND
     {
-      double d;
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = List_Nbr($3);
       if(List_Nbr($3) == List_Nbr($5)){
 	extr.mesh.NbElmLayer.clear();
 	extr.mesh.hLayer.clear();
 	for(int i = 0; i < List_Nbr($3); i++){
+	  double d;
 	  List_Read($3, i, &d);
 	  extr.mesh.NbElmLayer.push_back((d > 0) ? (int)d : 1);
 	  List_Read($5, i, &d);
@@ -2477,13 +2464,13 @@ ExtrudeParameter :
   | tLayers '{' ListOfDouble ',' ListOfDouble ',' ListOfDouble '}' tEND
     {
       yymsg(0, "Explicit region numbers in layers are deprecated");
-      double d;
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = List_Nbr($3);
       if(List_Nbr($3) == List_Nbr($5) && List_Nbr($3) == List_Nbr($7)){
 	extr.mesh.NbElmLayer.clear();
 	extr.mesh.hLayer.clear();
 	for(int i = 0; i < List_Nbr($3); i++){
+	  double d;
 	  List_Read($3, i, &d);
 	  extr.mesh.NbElmLayer.push_back((d > 0) ? (int)d : 1);
 	  List_Read($7, i, &d);
@@ -2778,7 +2765,7 @@ FExpr :
   | FExpr tNOTEQUAL FExpr            { $$ = $1 != $3;     }
   | FExpr tAND FExpr                 { $$ = $1 && $3;     }
   | FExpr tOR FExpr                  { $$ = $1 || $3;     }
-  | FExpr '?' FExpr tDOTS FExpr      { $$ = $1? $3 : $5;  }
+  | FExpr '?' FExpr tDOTS FExpr      { $$ = $1 ? $3 : $5; }
   | tExp    '(' FExpr ')'            { $$ = exp($3);      }
   | tLog    '(' FExpr ')'            { $$ = log($3);      }
   | tLog10  '(' FExpr ')'            { $$ = log10($3);    }
@@ -2798,8 +2785,8 @@ FExpr :
   | tCeil   '(' FExpr ')'            { $$ = ceil($3);     }
   | tFmod   '(' FExpr ',' FExpr ')'  { $$ = fmod($3, $5); }
   | tModulo '(' FExpr ',' FExpr ')'  { $$ = fmod($3, $5); }
-  | tHypot  '(' FExpr ',' FExpr ')'  { $$ = sqrt($3*$3+$5*$5); }
-  | tRand   '(' FExpr ')'            { $$ = $3*(double)rand()/(double)RAND_MAX; }
+  | tHypot  '(' FExpr ',' FExpr ')'  { $$ = sqrt($3 * $3 + $5 * $5); }
+  | tRand   '(' FExpr ')'            { $$ = $3 * (double)rand() / (double)RAND_MAX; }
   // The following is for GetDP compatibility
   | tExp    '[' FExpr ']'            { $$ = exp($3);      }
   | tLog    '[' FExpr ']'            { $$ = log($3);      }
@@ -2820,8 +2807,8 @@ FExpr :
   | tCeil   '[' FExpr ']'            { $$ = ceil($3);     }
   | tFmod   '[' FExpr ',' FExpr ']'  { $$ = fmod($3, $5); }
   | tModulo '[' FExpr ',' FExpr ']'  { $$ = fmod($3, $5); }
-  | tHypot  '[' FExpr ',' FExpr ']'  { $$ = sqrt($3*$3+$5*$5); }
-  | tRand   '[' FExpr ']'            { $$ = $3*(double)rand()/(double)RAND_MAX; }
+  | tHypot  '[' FExpr ',' FExpr ']'  { $$ = sqrt($3 * $3 + $5 * $5); }
+  | tRand   '[' FExpr ']'            { $$ = $3 * (double)rand() / (double)RAND_MAX; }
 ;
 
 // FIXME: add +=, -=, *= et /=
@@ -2842,9 +2829,8 @@ FExpr_Single :
 
   | tSTRING
     {
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = $1;
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
 	yymsg(0, "Unknown variable '%s'", $1);
 	$$ = 0.;
@@ -2860,9 +2846,8 @@ FExpr_Single :
     {
       char tmpstring[1024];
       sprintf(tmpstring, "%s_%d", $1, (int)$4) ;
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = tmpstring;
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
 	yymsg(0, "Unknown variable '%s'", tmpstring);
 	$$ = 0.;
@@ -2873,9 +2858,8 @@ FExpr_Single :
     }
   | tSTRING '[' FExpr ']'
     {
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = $1;
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
 	yymsg(0, "Unknown variable '%s'", $1);
 	$$ = 0.;
@@ -2893,9 +2877,8 @@ FExpr_Single :
     }
   | '#' tSTRING '[' ']'
     {
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = $2;
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
 	yymsg(0, "Unknown variable '%s'", $2);
 	$$ = 0.;
@@ -2906,9 +2889,8 @@ FExpr_Single :
     }
   | tSTRING NumericIncrement
     {
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = $1;
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
 	yymsg(0, "Unknown variable '%s'", $1);
 	$$ = 0.;
@@ -2919,9 +2901,8 @@ FExpr_Single :
     }
   | tSTRING '[' FExpr ']' NumericIncrement
     {
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = $1;
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
 	yymsg(0, "Unknown variable '%s'", $1);
 	$$ = 0.;
@@ -3031,7 +3012,6 @@ RecursiveListOfListOfDouble :
     }
 ;
 
-
 ListOfDouble :
     FExpr
     {
@@ -3146,9 +3126,8 @@ FExpr_Multi :
   | tSTRING '[' ']'
     {
       $$ = List_Create(2, 1, sizeof(double));
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = $1;
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
 	yymsg(0, "Unknown variable '%s'", $1);
 	double d = 0.0;
@@ -3163,9 +3142,8 @@ FExpr_Multi :
   | tSTRING '[' '{' RecursiveListOfDouble '}' ']'
     {
       $$ = List_Create(2, 1, sizeof(double));
-      Symbol TheSymbol;
+      Symbol TheSymbol, *pSymbol;
       TheSymbol.Name = $1;
-      Symbol *pSymbol;
       if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
 	yymsg(0, "Unknown variable '%s'", $1);
 	double d = 0.0;
@@ -3211,7 +3189,6 @@ RecursiveListOfDouble :
     }
 ;
 
-
 ColorExpr :
     '{' FExpr ',' FExpr ',' FExpr ',' FExpr '}'
     {
@@ -3312,7 +3289,7 @@ StringExpr :
     {
       $$ = (char *)Malloc((strlen($3)+1)*sizeof(char));
       int i;
-      for(i = strlen($3)-1; i >= 0; i--){
+      for(i = strlen($3) - 1; i >= 0; i--){
 	if($3[i] == '.'){
 	  strncpy($$, $3, i);
 	  $$[i]='\0';
@@ -3326,7 +3303,7 @@ StringExpr :
     {
       $$ = (char *)Malloc((strlen($3)+1)*sizeof(char));
       int i;
-      for(i = strlen($3)-1; i >= 0; i--){
+      for(i = strlen($3) - 1; i >= 0; i--){
 	if($3[i] == '/' || $3[i] == '\\')
 	  break;
       }
@@ -3349,7 +3326,7 @@ StringExpr :
 	$$ = $3;
       }
       else if(i > 0){
-	yymsg(0, "%d extra argument%s in Sprintf", i, (i>1)?"s":"");
+	yymsg(0, "%d extra argument%s in Sprintf", i, (i > 1) ? "s" : "");
 	$$ = $3;
       }
       else{
@@ -3444,7 +3421,7 @@ void FixRelativePath(const char *in, char *out)
   else{
     // append 'in' to the path of the parent file
     strcpy(out, gmsh_yyname);
-    int i = strlen(out)-1 ;
+    int i = strlen(out) - 1 ;
     while(i >= 0 && gmsh_yyname[i] != '/' && gmsh_yyname[i] != '\\') i-- ;
     out[i+1] = '\0';
     strcat(out, in);
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index 9bbd26530b7296e19cad5c5e516812d8b5c22422..28adfb3b5914880ad553643a93de23d231a1c3de 100644
--- a/Parser/Gmsh.yy.cpp
+++ b/Parser/Gmsh.yy.cpp
@@ -835,7 +835,7 @@ int gmsh_yy_flex_debug = 0;
 char *gmsh_yytext;
 #line 1 "Gmsh.l"
 #line 2 "Gmsh.l"
-// $Id: Gmsh.yy.cpp,v 1.372 2008-07-05 23:01:02 geuzaine Exp $
+// $Id: Gmsh.yy.cpp,v 1.373 2008-07-06 11:25:37 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
diff --git a/utils/misc/driver.cpp b/utils/misc/driver.cpp
index 2ada8029975135f154e73b94042853be25215ad3..420daeb733e80f1f2ab0a84f1e74b4226283765f 100644
--- a/utils/misc/driver.cpp
+++ b/utils/misc/driver.cpp
@@ -13,6 +13,7 @@
 int main(int argc, char **argv)
 {
   GmshInitialize(argc, argv);
+  GmshSetOption("Mesh", "Algorithm", 5);
   GModel *m = new GModel();
   m->readGEO("../../tutorial/t5.geo");
   m->mesh(3);