diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index a7a7e63547bec4777e18f3f038d7aefce569c0a8..140e6daf17cc69763fde07b170662716d490655b 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -132,7 +132,7 @@
 
 #line 1 "Gmsh.y"
 
-// $Id: Gmsh.tab.cpp,v 1.333 2007-09-11 15:28:59 geuzaine Exp $
+// $Id: Gmsh.tab.cpp,v 1.334 2007-09-12 05:42:40 geuzaine Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //
@@ -187,6 +187,8 @@ extern Mesh *THEM;
 
 static ExtrudeParams extr;
 
+static gmshSurface *myGmshSurface = 0;
+
 static PViewDataList *ViewData;
 static List_T *ViewValueList;
 static double ViewCoord[100];
@@ -194,7 +196,6 @@ static int *ViewNumList, ViewCoordIdx;
 
 #define MAX_RECUR_LOOPS 100
 static int ImbricatedLoop = 0;
-static gmshSurface *myGmshSurface = 0;
 static fpos_t yyposImbricatedLoopsTab[MAX_RECUR_LOOPS];
 static int yylinenoImbricatedLoopsTab[MAX_RECUR_LOOPS];
 static double LoopControlVariablesTab[MAX_RECUR_LOOPS][3];
@@ -205,7 +206,7 @@ void yymsg(int type, char *fmt, ...);
 void skip_until(char *skip, char *until);
 int PrintListOfDouble(char *format, List_T *list, char *buffer);
 
-#line 76 "Gmsh.y"
+#line 77 "Gmsh.y"
 typedef union {
   char *c;
   int i;
@@ -529,42 +530,42 @@ static const short yyrhs[] = {   149,
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   142,   144,   149,   151,   154,   156,   157,   158,   159,   160,
-   161,   162,   163,   164,   165,   166,   167,   168,   171,   176,
-   182,   188,   203,   216,   244,   257,   266,   277,   282,   283,
-   284,   285,   286,   289,   292,   296,   299,   303,   448,   456,
-   462,   468,   475,   484,   490,   496,   503,   511,   517,   523,
-   532,   537,   544,   546,   547,   548,   549,   552,   554,   557,
-   592,   631,   685,   702,   720,   731,   748,   755,   769,   786,
-   812,   839,   853,   870,   884,   901,   921,   944,   954,   968,
-   973,   982,  1008,  1024,  1045,  1052,  1063,  1078,  1086,  1101,
-  1108,  1120,  1154,  1190,  1212,  1230,  1248,  1266,  1292,  1310,
-  1336,  1356,  1374,  1392,  1418,  1435,  1454,  1472,  1510,  1514,
-  1518,  1523,  1545,  1567,  1583,  1603,  1620,  1637,  1657,  1663,
-  1668,  1673,  1678,  1689,  1695,  1703,  1705,  1708,  1713,  1717,
-  1740,  1763,  1786,  1813,  1823,  1836,  1851,  1865,  1879,  1886,
-  1892,  1901,  1914,  1963,  1979,  1995,  2014,  2024,  2046,  2050,
-  2055,  2060,  2070,  2087,  2103,  2128,  2154,  2185,  2192,  2197,
-  2203,  2207,  2215,  2224,  2232,  2240,  2244,  2252,  2256,  2264,
-  2268,  2276,  2280,  2287,  2291,  2303,  2310,  2317,  2324,  2331,
-  2338,  2345,  2352,  2359,  2366,  2370,  2377,  2381,  2388,  2392,
-  2399,  2403,  2410,  2414,  2421,  2425,  2432,  2436,  2443,  2447,
-  2454,  2458,  2468,  2472,  2477,  2487,  2507,  2530,  2534,  2557,
-  2576,  2594,  2612,  2641,  2676,  2681,  2708,  2722,  2740,  2747,
-  2753,  2756,  2764,  2774,  2776,  2777,  2778,  2779,  2780,  2781,
-  2782,  2783,  2790,  2791,  2792,  2793,  2794,  2795,  2796,  2797,
-  2798,  2799,  2800,  2801,  2802,  2803,  2804,  2805,  2806,  2807,
-  2808,  2809,  2810,  2811,  2812,  2813,  2814,  2815,  2816,  2817,
-  2818,  2819,  2820,  2821,  2823,  2824,  2825,  2826,  2827,  2828,
-  2829,  2830,  2831,  2832,  2833,  2834,  2835,  2836,  2837,  2838,
-  2839,  2840,  2841,  2842,  2843,  2848,  2853,  2854,  2855,  2856,
-  2857,  2858,  2862,  2878,  2893,  2913,  2926,  2939,  2962,  2980,
-  2998,  3016,  3034,  3041,  3046,  3050,  3054,  3058,  3064,  3069,
-  3073,  3077,  3083,  3089,  3096,  3102,  3106,  3111,  3115,  3123,
-  3133,  3142,  3150,  3156,  3167,  3187,  3197,  3207,  3224,  3250,
-  3256,  3260,  3264,  3276,  3281,  3293,  3300,  3320,  3325,  3339,
-  3345,  3351,  3356,  3362,  3367,  3375,  3383,  3397,  3411,  3415,
-  3434,  3456
+   143,   145,   150,   152,   155,   157,   158,   159,   160,   161,
+   162,   163,   164,   165,   166,   167,   168,   169,   172,   177,
+   183,   189,   204,   217,   245,   258,   267,   278,   283,   284,
+   285,   286,   287,   290,   293,   297,   300,   304,   449,   457,
+   463,   469,   476,   485,   491,   497,   504,   512,   518,   524,
+   533,   538,   545,   547,   548,   549,   550,   553,   555,   558,
+   593,   632,   686,   703,   721,   732,   749,   756,   770,   787,
+   813,   840,   854,   871,   885,   902,   922,   945,   955,   969,
+   974,   983,  1009,  1025,  1046,  1053,  1064,  1079,  1087,  1102,
+  1109,  1121,  1155,  1191,  1213,  1231,  1249,  1267,  1293,  1311,
+  1337,  1357,  1375,  1393,  1419,  1436,  1455,  1473,  1511,  1515,
+  1519,  1524,  1546,  1568,  1584,  1604,  1621,  1638,  1658,  1664,
+  1669,  1674,  1679,  1690,  1696,  1704,  1706,  1709,  1714,  1718,
+  1741,  1764,  1787,  1814,  1824,  1837,  1852,  1866,  1880,  1887,
+  1893,  1902,  1915,  1964,  1980,  1996,  2015,  2025,  2047,  2051,
+  2056,  2061,  2071,  2088,  2104,  2129,  2155,  2186,  2193,  2198,
+  2204,  2208,  2216,  2225,  2233,  2241,  2245,  2253,  2257,  2265,
+  2269,  2277,  2281,  2288,  2292,  2304,  2311,  2318,  2325,  2332,
+  2339,  2346,  2353,  2360,  2367,  2371,  2378,  2382,  2389,  2393,
+  2400,  2404,  2411,  2415,  2422,  2426,  2433,  2437,  2444,  2448,
+  2455,  2459,  2469,  2473,  2478,  2488,  2508,  2531,  2535,  2558,
+  2577,  2595,  2613,  2642,  2677,  2682,  2709,  2723,  2741,  2748,
+  2754,  2757,  2765,  2775,  2777,  2778,  2779,  2780,  2781,  2782,
+  2783,  2784,  2791,  2792,  2793,  2794,  2795,  2796,  2797,  2798,
+  2799,  2800,  2801,  2802,  2803,  2804,  2805,  2806,  2807,  2808,
+  2809,  2810,  2811,  2812,  2813,  2814,  2815,  2816,  2817,  2818,
+  2819,  2820,  2821,  2822,  2824,  2825,  2826,  2827,  2828,  2829,
+  2830,  2831,  2832,  2833,  2834,  2835,  2836,  2837,  2838,  2839,
+  2840,  2841,  2842,  2843,  2844,  2849,  2854,  2855,  2856,  2857,
+  2858,  2859,  2863,  2879,  2894,  2914,  2927,  2940,  2963,  2981,
+  2999,  3017,  3035,  3042,  3047,  3051,  3055,  3059,  3065,  3070,
+  3074,  3078,  3084,  3090,  3097,  3103,  3107,  3112,  3116,  3124,
+  3134,  3143,  3151,  3157,  3168,  3188,  3198,  3208,  3225,  3251,
+  3257,  3261,  3265,  3277,  3282,  3294,  3301,  3321,  3326,  3340,
+  3346,  3352,  3357,  3363,  3368,  3376,  3384,  3398,  3412,  3416,
+  3435,  3457
 };
 #endif
 
@@ -2831,86 +2832,86 @@ yyreduce:
   switch (yyn) {
 
 case 2:
-#line 144 "Gmsh.y"
+#line 145 "Gmsh.y"
 { yyerrok; return 1; ;
     break;}
 case 5:
-#line 155 "Gmsh.y"
+#line 156 "Gmsh.y"
 { return 1; ;
     break;}
 case 6:
-#line 156 "Gmsh.y"
+#line 157 "Gmsh.y"
 { return 1; ;
     break;}
 case 7:
-#line 157 "Gmsh.y"
+#line 158 "Gmsh.y"
 { return 1; ;
     break;}
 case 8:
-#line 158 "Gmsh.y"
+#line 159 "Gmsh.y"
 { return 1; ;
     break;}
 case 9:
-#line 159 "Gmsh.y"
+#line 160 "Gmsh.y"
 { List_Delete(yyvsp[0].l); return 1; ;
     break;}
 case 10:
-#line 160 "Gmsh.y"
+#line 161 "Gmsh.y"
 { return 1; ;
     break;}
 case 11:
-#line 161 "Gmsh.y"
+#line 162 "Gmsh.y"
 { return 1; ;
     break;}
 case 12:
-#line 162 "Gmsh.y"
+#line 163 "Gmsh.y"
 { return 1; ;
     break;}
 case 13:
-#line 163 "Gmsh.y"
+#line 164 "Gmsh.y"
 { List_Delete(yyvsp[0].l); return 1; ;
     break;}
 case 14:
-#line 164 "Gmsh.y"
+#line 165 "Gmsh.y"
 { return 1; ;
     break;}
 case 15:
-#line 165 "Gmsh.y"
+#line 166 "Gmsh.y"
 { return 1; ;
     break;}
 case 16:
-#line 166 "Gmsh.y"
+#line 167 "Gmsh.y"
 { return 1; ;
     break;}
 case 17:
-#line 167 "Gmsh.y"
+#line 168 "Gmsh.y"
 { return 1; ;
     break;}
 case 18:
-#line 168 "Gmsh.y"
+#line 169 "Gmsh.y"
 { return 1; ;
     break;}
 case 19:
-#line 173 "Gmsh.y"
+#line 174 "Gmsh.y"
 {
       yyval.c = "w";
     ;
     break;}
 case 20:
-#line 177 "Gmsh.y"
+#line 178 "Gmsh.y"
 {
       yyval.c = "a";
     ;
     break;}
 case 21:
-#line 184 "Gmsh.y"
+#line 185 "Gmsh.y"
 {
       Msg(DIRECT, yyvsp[-2].c);
       Free(yyvsp[-2].c);
     ;
     break;}
 case 22:
-#line 189 "Gmsh.y"
+#line 190 "Gmsh.y"
 {
       char tmpstring[1024];
       FixRelativePath(yyvsp[-1].c, tmpstring);
@@ -2927,7 +2928,7 @@ case 22:
     ;
     break;}
 case 23:
-#line 204 "Gmsh.y"
+#line 205 "Gmsh.y"
 {
       char tmpstring[1024];
       int i = PrintListOfDouble(yyvsp[-4].c, yyvsp[-2].l, tmpstring);
@@ -2942,7 +2943,7 @@ case 23:
     ;
     break;}
 case 24:
-#line 217 "Gmsh.y"
+#line 218 "Gmsh.y"
 {
       char tmpstring[1024];
       int i = PrintListOfDouble(yyvsp[-6].c, yyvsp[-4].l, tmpstring);
@@ -2968,7 +2969,7 @@ case 24:
     ;
     break;}
 case 25:
-#line 246 "Gmsh.y"
+#line 247 "Gmsh.y"
 { 
       if(!strcmp(yyvsp[-5].c, "View") && ViewData->finalize()){
 	ViewData->setName(yyvsp[-4].c);
@@ -2982,7 +2983,7 @@ case 25:
     ;
     break;}
 case 26:
-#line 258 "Gmsh.y"
+#line 259 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-4].c, "View")){
 	int index = (int)yyvsp[-2].d;
@@ -2993,7 +2994,7 @@ case 26:
     ;
     break;}
 case 27:
-#line 267 "Gmsh.y"
+#line 268 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-4].c, "View")){
 	int index = (int)yyvsp[-2].d;
@@ -3004,29 +3005,29 @@ case 27:
     ;
     break;}
 case 28:
-#line 279 "Gmsh.y"
+#line 280 "Gmsh.y"
 {
       ViewData = new PViewDataList(true); 
     ;
     break;}
 case 34:
-#line 291 "Gmsh.y"
+#line 292 "Gmsh.y"
 { ViewCoord[ViewCoordIdx++] = yyvsp[0].d; ;
     break;}
 case 35:
-#line 293 "Gmsh.y"
+#line 294 "Gmsh.y"
 { ViewCoord[ViewCoordIdx++] = yyvsp[0].d; ;
     break;}
 case 36:
-#line 298 "Gmsh.y"
+#line 299 "Gmsh.y"
 { if(ViewValueList) List_Add(ViewValueList, &yyvsp[0].d); ;
     break;}
 case 37:
-#line 300 "Gmsh.y"
+#line 301 "Gmsh.y"
 { if(ViewValueList) List_Add(ViewValueList, &yyvsp[0].d); ;
     break;}
 case 38:
-#line 305 "Gmsh.y"
+#line 306 "Gmsh.y"
 {
       if(!strcmp(yyvsp[0].c, "SP")){
 	ViewValueList = ViewData->SP; ViewNumList = &ViewData->NbSP;
@@ -3172,7 +3173,7 @@ case 38:
     ;
     break;}
 case 39:
-#line 449 "Gmsh.y"
+#line 450 "Gmsh.y"
 {
       if(ViewValueList){
 	for(int i = 0; i < 3; i++)
@@ -3182,27 +3183,27 @@ case 39:
     ;
     break;}
 case 40:
-#line 457 "Gmsh.y"
+#line 458 "Gmsh.y"
 {
       if(ViewValueList) (*ViewNumList)++;
     ;
     break;}
 case 41:
-#line 464 "Gmsh.y"
+#line 465 "Gmsh.y"
 { 
       for(int i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(ViewData->T2C, &yyvsp[0].c[i]); 
       Free(yyvsp[0].c);
     ;
     break;}
 case 42:
-#line 469 "Gmsh.y"
+#line 470 "Gmsh.y"
 { 
       for(int i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(ViewData->T2C, &yyvsp[0].c[i]); 
       Free(yyvsp[0].c);
     ;
     break;}
 case 43:
-#line 477 "Gmsh.y"
+#line 478 "Gmsh.y"
 { 
       List_Add(ViewData->T2D, &yyvsp[-5].d); 
       List_Add(ViewData->T2D, &yyvsp[-3].d);
@@ -3212,27 +3213,27 @@ case 43:
     ;
     break;}
 case 44:
-#line 485 "Gmsh.y"
+#line 486 "Gmsh.y"
 {
       ViewData->NbT2++;
     ;
     break;}
 case 45:
-#line 492 "Gmsh.y"
+#line 493 "Gmsh.y"
 { 
       for(int i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(ViewData->T3C, &yyvsp[0].c[i]); 
       Free(yyvsp[0].c);
     ;
     break;}
 case 46:
-#line 497 "Gmsh.y"
+#line 498 "Gmsh.y"
 { 
       for(int i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(ViewData->T3C, &yyvsp[0].c[i]); 
       Free(yyvsp[0].c);
     ;
     break;}
 case 47:
-#line 505 "Gmsh.y"
+#line 506 "Gmsh.y"
 { 
       List_Add(ViewData->T3D, &yyvsp[-7].d); List_Add(ViewData->T3D, &yyvsp[-5].d);
       List_Add(ViewData->T3D, &yyvsp[-3].d); List_Add(ViewData->T3D, &yyvsp[-1].d); 
@@ -3241,64 +3242,64 @@ case 47:
     ;
     break;}
 case 48:
-#line 512 "Gmsh.y"
+#line 513 "Gmsh.y"
 {
       ViewData->NbT3++;
     ;
     break;}
 case 49:
-#line 520 "Gmsh.y"
+#line 521 "Gmsh.y"
 {
       ViewData->adaptive = new Adaptive_Post_View(ViewData, yyvsp[-5].l, yyvsp[-2].l);
     ;
     break;}
 case 50:
-#line 527 "Gmsh.y"
+#line 528 "Gmsh.y"
 {
       ViewData->adaptive = new Adaptive_Post_View(ViewData, yyvsp[-11].l, yyvsp[-8].l, yyvsp[-5].l, yyvsp[-2].l);
     ;
     break;}
 case 51:
-#line 534 "Gmsh.y"
+#line 535 "Gmsh.y"
 {
       ViewValueList = ViewData->Time;
     ;
     break;}
 case 52:
-#line 538 "Gmsh.y"
+#line 539 "Gmsh.y"
 {
     ;
     break;}
 case 53:
-#line 545 "Gmsh.y"
+#line 546 "Gmsh.y"
 { yyval.i = 0; ;
     break;}
 case 54:
-#line 546 "Gmsh.y"
+#line 547 "Gmsh.y"
 { yyval.i = 1; ;
     break;}
 case 55:
-#line 547 "Gmsh.y"
+#line 548 "Gmsh.y"
 { yyval.i = 2; ;
     break;}
 case 56:
-#line 548 "Gmsh.y"
+#line 549 "Gmsh.y"
 { yyval.i = 3; ;
     break;}
 case 57:
-#line 549 "Gmsh.y"
+#line 550 "Gmsh.y"
 { yyval.i = 4; ;
     break;}
 case 58:
-#line 553 "Gmsh.y"
+#line 554 "Gmsh.y"
 { yyval.i = 1; ;
     break;}
 case 59:
-#line 554 "Gmsh.y"
+#line 555 "Gmsh.y"
 { yyval.i = -1; ;
     break;}
 case 60:
-#line 562 "Gmsh.y"
+#line 563 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-3].c;
@@ -3331,7 +3332,7 @@ case 60:
     ;
     break;}
 case 61:
-#line 593 "Gmsh.y"
+#line 594 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-6].c;
@@ -3372,7 +3373,7 @@ case 61:
     ;
     break;}
 case 62:
-#line 632 "Gmsh.y"
+#line 633 "Gmsh.y"
 {
       if(List_Nbr(yyvsp[-5].l) != List_Nbr(yyvsp[-1].l)){
 	yymsg(GERROR, "Incompatible array dimensions in affectation");
@@ -3428,7 +3429,7 @@ case 62:
     ;
     break;}
 case 63:
-#line 686 "Gmsh.y"
+#line 687 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-5].c;
@@ -3447,7 +3448,7 @@ case 63:
     ;
     break;}
 case 64:
-#line 703 "Gmsh.y"
+#line 704 "Gmsh.y"
 {
       // appends to the list
       Symbol TheSymbol;
@@ -3467,7 +3468,7 @@ case 64:
     ;
     break;}
 case 65:
-#line 721 "Gmsh.y"
+#line 722 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-2].c;
@@ -3480,7 +3481,7 @@ case 65:
     ;
     break;}
 case 66:
-#line 732 "Gmsh.y"
+#line 733 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-5].c;
@@ -3498,13 +3499,13 @@ case 66:
     ;
     break;}
 case 67:
-#line 749 "Gmsh.y"
+#line 750 "Gmsh.y"
 { 
       Msg(WARNING, "Named string expressions not implemented yet");
     ;
     break;}
 case 68:
-#line 756 "Gmsh.y"
+#line 757 "Gmsh.y"
 { 
       char* (*pStrOpt)(int num, int action, char *value);
       StringXString *pStrCat;
@@ -3520,7 +3521,7 @@ case 68:
     ;
     break;}
 case 69:
-#line 770 "Gmsh.y"
+#line 771 "Gmsh.y"
 { 
       char* (*pStrOpt)(int num, int action, char *value);
       StringXString *pStrCat;
@@ -3536,7 +3537,7 @@ case 69:
     ;
     break;}
 case 70:
-#line 787 "Gmsh.y"
+#line 788 "Gmsh.y"
 {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -3564,7 +3565,7 @@ case 70:
     ;
     break;}
 case 71:
-#line 813 "Gmsh.y"
+#line 814 "Gmsh.y"
 {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -3593,7 +3594,7 @@ case 71:
     ;
     break;}
 case 72:
-#line 840 "Gmsh.y"
+#line 841 "Gmsh.y"
 {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -3609,7 +3610,7 @@ case 72:
     ;
     break;}
 case 73:
-#line 854 "Gmsh.y"
+#line 855 "Gmsh.y"
 {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -3625,7 +3626,7 @@ case 73:
     ;
     break;}
 case 74:
-#line 871 "Gmsh.y"
+#line 872 "Gmsh.y"
 {
       unsigned int (*pColOpt)(int num, int action, unsigned int value);
       StringXColor *pColCat;
@@ -3641,7 +3642,7 @@ case 74:
     ;
     break;}
 case 75:
-#line 885 "Gmsh.y"
+#line 886 "Gmsh.y"
 {
       unsigned int (*pColOpt)(int num, int action, unsigned int value);
       StringXColor *pColCat;
@@ -3657,7 +3658,7 @@ case 75:
     ;
     break;}
 case 76:
-#line 902 "Gmsh.y"
+#line 903 "Gmsh.y"
 {
       GmshColorTable *ct = Get_ColorTable(0);
       if(!ct)
@@ -3679,7 +3680,7 @@ case 76:
     ;
     break;}
 case 77:
-#line 922 "Gmsh.y"
+#line 923 "Gmsh.y"
 {
       GmshColorTable *ct = Get_ColorTable((int)yyvsp[-6].d);
       if(!ct)
@@ -3701,7 +3702,7 @@ case 77:
     ;
     break;}
 case 78:
-#line 945 "Gmsh.y"
+#line 946 "Gmsh.y"
 {
       try {
 	GMSH_PluginManager::instance()->setPluginOption(yyvsp[-6].c, yyvsp[-3].c, yyvsp[-1].d); 
@@ -3713,7 +3714,7 @@ case 78:
     ;
     break;}
 case 79:
-#line 955 "Gmsh.y"
+#line 956 "Gmsh.y"
 {
       try {
 	GMSH_PluginManager::instance()->setPluginOption(yyvsp[-6].c, yyvsp[-3].c, yyvsp[-1].c); 
@@ -3725,13 +3726,13 @@ case 79:
     ;
     break;}
 case 80:
-#line 970 "Gmsh.y"
+#line 971 "Gmsh.y"
 { 
       yyval.i = (int)yyvsp[0].d; 
     ;
     break;}
 case 81:
-#line 974 "Gmsh.y"
+#line 975 "Gmsh.y"
 { 
       yyval.i = GModel::current()->setPhysicalName(std::string(yyvsp[0].c),
 					      ++THEM->MaxPhysicalNum);
@@ -3739,7 +3740,7 @@ case 81:
     ;
     break;}
 case 82:
-#line 987 "Gmsh.y"
+#line 988 "Gmsh.y"
 {
       int num = (int)yyvsp[-4].d;
       if(FindPoint(num)){
@@ -3763,7 +3764,7 @@ case 82:
     ;
     break;}
 case 83:
-#line 1009 "Gmsh.y"
+#line 1010 "Gmsh.y"
 {
       int num = (int)yyvsp[-4].i;
       if(FindPhysicalGroup(num, MSH_PHYSICAL_POINT)){
@@ -3781,7 +3782,7 @@ case 83:
     ;
     break;}
 case 84:
-#line 1025 "Gmsh.y"
+#line 1026 "Gmsh.y"
 {
       AttractorField *att = new AttractorField();
       for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
@@ -3804,7 +3805,7 @@ case 84:
     ;
     break;}
 case 85:
-#line 1046 "Gmsh.y"
+#line 1047 "Gmsh.y"
 {
       fields.insert(new LatLonField(fields.get((int)yyvsp[-1].d)), (int)yyvsp[-4].d);
       // dummy values
@@ -3813,7 +3814,7 @@ case 85:
     ;
     break;}
 case 86:
-#line 1053 "Gmsh.y"
+#line 1054 "Gmsh.y"
 {
       int index = (int)yyvsp[-1].d;
       if(index >= 0 && index < PView::list.size()) 
@@ -3826,7 +3827,7 @@ case 86:
     ;
     break;}
 case 87:
-#line 1064 "Gmsh.y"
+#line 1065 "Gmsh.y"
 {
       double pars[] = {0, CTX.lc/10, CTX.lc, CTX.lc/100, CTX.lc/20};
       for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
@@ -3843,7 +3844,7 @@ case 87:
     ;
     break;}
 case 88:
-#line 1079 "Gmsh.y"
+#line 1080 "Gmsh.y"
 {
       std::list<Field*> *flist = new std::list<Field*>;
       fields.insert(new FunctionField(flist,yyvsp[-1].c), (int)yyvsp[-4].d);
@@ -3853,7 +3854,7 @@ case 88:
     ;
     break;}
 case 89:
-#line 1087 "Gmsh.y"
+#line 1088 "Gmsh.y"
 {
       std::list<Field*> *flist = new std::list<Field*>;
       flist->resize(0);
@@ -3870,7 +3871,7 @@ case 89:
     ;
     break;}
 case 90:
-#line 1102 "Gmsh.y"
+#line 1103 "Gmsh.y"
 {
       fields.insert(new StructuredField(yyvsp[-1].c), (int)yyvsp[-4].d);
       // dummy values
@@ -3879,7 +3880,7 @@ case 90:
     ;
     break;}
 case 91:
-#line 1109 "Gmsh.y"
+#line 1110 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
 	double id;
@@ -3892,7 +3893,7 @@ case 91:
     ;
     break;}
 case 92:
-#line 1121 "Gmsh.y"
+#line 1122 "Gmsh.y"
 {
       double pars[] = { CTX.lc/10, CTX.lc/100., CTX.lc/20, 1, 3 };
       for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
@@ -3928,7 +3929,7 @@ case 92:
     ;
     break;}
 case 93:
-#line 1155 "Gmsh.y"
+#line 1156 "Gmsh.y"
 {
       double pars[] = { CTX.lc/10, CTX.lc/100., CTX.lc/20, 10, 3 };
       for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
@@ -3966,7 +3967,7 @@ case 93:
     ;
     break;}
 case 94:
-#line 1191 "Gmsh.y"
+#line 1192 "Gmsh.y"
 {      
       for(int i = 0; i < List_Nbr(yyvsp[-3].l); i++){
 	double d;
@@ -3987,7 +3988,7 @@ case 94:
     ;
     break;}
 case 95:
-#line 1213 "Gmsh.y"
+#line 1214 "Gmsh.y"
 {
       int num = (int)yyvsp[-4].d;
       if(FindCurve(num)){
@@ -4007,7 +4008,7 @@ case 95:
     ;
     break;}
 case 96:
-#line 1231 "Gmsh.y"
+#line 1232 "Gmsh.y"
 {
       int num = (int)yyvsp[-4].d;
       if(FindCurve(num)){
@@ -4027,7 +4028,7 @@ case 96:
     ;
     break;}
 case 97:
-#line 1249 "Gmsh.y"
+#line 1250 "Gmsh.y"
 {
       int num = (int)yyvsp[-4].d;
       if(FindCurve(num)){
@@ -4047,7 +4048,7 @@ case 97:
     ;
     break;}
 case 98:
-#line 1267 "Gmsh.y"
+#line 1268 "Gmsh.y"
 {
       int num = (int)yyvsp[-6].d;
       if(FindCurve(num)){
@@ -4075,7 +4076,7 @@ case 98:
     ;
     break;}
 case 99:
-#line 1293 "Gmsh.y"
+#line 1294 "Gmsh.y"
 {
       int num = (int)yyvsp[-4].d;
       if(FindCurve(num)){
@@ -4095,7 +4096,7 @@ case 99:
     ;
     break;}
 case 100:
-#line 1311 "Gmsh.y"
+#line 1312 "Gmsh.y"
 {
       int num = (int)yyvsp[-6].d;
       if(FindCurve(num)){
@@ -4123,7 +4124,7 @@ case 100:
     ;
     break;}
 case 101:
-#line 1338 "Gmsh.y"
+#line 1339 "Gmsh.y"
 {
       int num = (int)yyvsp[-14].d;
       if(FindCurve(num)){
@@ -4144,7 +4145,7 @@ case 101:
     ;
     break;}
 case 102:
-#line 1357 "Gmsh.y"
+#line 1358 "Gmsh.y"
 {
       int num = (int)yyvsp[-4].d;
       if(FindCurve(num)){
@@ -4164,7 +4165,7 @@ case 102:
     ;
     break;}
 case 103:
-#line 1375 "Gmsh.y"
+#line 1376 "Gmsh.y"
 {
       int num = (int)yyvsp[-4].d;
       if(FindCurve(num)){
@@ -4184,7 +4185,7 @@ case 103:
     ;
     break;}
 case 104:
-#line 1393 "Gmsh.y"
+#line 1394 "Gmsh.y"
 {
       int num = (int)yyvsp[-8].d;
       if(List_Nbr(yyvsp[-5].l) + (int)yyvsp[-1].d + 1 != List_Nbr(yyvsp[-3].l)){
@@ -4212,7 +4213,7 @@ case 104:
     ;
     break;}
 case 105:
-#line 1419 "Gmsh.y"
+#line 1420 "Gmsh.y"
 {
       int num = (int)yyvsp[-4].d;
       if(FindEdgeLoop(num)){
@@ -4231,7 +4232,7 @@ case 105:
     ;
     break;}
 case 106:
-#line 1436 "Gmsh.y"
+#line 1437 "Gmsh.y"
 {
       int num = (int)yyvsp[-4].i;
       if(FindPhysicalGroup(num, MSH_PHYSICAL_LINE)){
@@ -4249,7 +4250,7 @@ case 106:
     ;
     break;}
 case 107:
-#line 1455 "Gmsh.y"
+#line 1456 "Gmsh.y"
 {
       int num = (int)yyvsp[-4].d;
       if(FindSurface(num)){
@@ -4269,7 +4270,7 @@ case 107:
     ;
     break;}
 case 108:
-#line 1473 "Gmsh.y"
+#line 1474 "Gmsh.y"
 {
       int num = (int)yyvsp[-4].d, type = 0;
       if(FindSurface(num)){
@@ -4309,26 +4310,26 @@ case 108:
     ;
     break;}
 case 109:
-#line 1511 "Gmsh.y"
+#line 1512 "Gmsh.y"
 {
       myGmshSurface = 0;
     ;
     break;}
 case 110:
-#line 1515 "Gmsh.y"
+#line 1516 "Gmsh.y"
 {
       myGmshSurface = gmshSurface :: surfaceByTag ( (int) yyvsp[-1].d);
     ;
     break;}
 case 111:
-#line 1519 "Gmsh.y"
+#line 1520 "Gmsh.y"
 {
       int num = (int)yyvsp[-6].d, type = 0;
       myGmshSurface = gmshParametricSurface::NewParametricSurface ((int)yyvsp[-6].d,yyvsp[-3].c,yyvsp[-2].c,yyvsp[-1].c);
     ;
     break;}
 case 112:
-#line 1524 "Gmsh.y"
+#line 1525 "Gmsh.y"
 {
       int num = (int)yyvsp[-4].d, type = 0;
       if (List_Nbr(yyvsp[-1].l) != 2){
@@ -4352,7 +4353,7 @@ case 112:
     ;
     break;}
 case 113:
-#line 1546 "Gmsh.y"
+#line 1547 "Gmsh.y"
 {
       int num = (int)yyvsp[-4].d, type = 0;
       if (List_Nbr(yyvsp[-1].l) != 2){
@@ -4376,7 +4377,7 @@ case 113:
     ;
     break;}
 case 114:
-#line 1568 "Gmsh.y"
+#line 1569 "Gmsh.y"
 {
       int num = (int)yyvsp[-4].d;
       if(FindSurfaceLoop(num)){
@@ -4394,7 +4395,7 @@ case 114:
     ;
     break;}
 case 115:
-#line 1584 "Gmsh.y"
+#line 1585 "Gmsh.y"
 {
       int num = (int)yyvsp[-4].i;
       if(FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE)){
@@ -4412,7 +4413,7 @@ case 115:
     ;
     break;}
 case 116:
-#line 1604 "Gmsh.y"
+#line 1605 "Gmsh.y"
 {
       int num = (int)yyvsp[-4].d;
       if(FindVolume(num)){
@@ -4431,7 +4432,7 @@ case 116:
     ;
     break;}
 case 117:
-#line 1621 "Gmsh.y"
+#line 1622 "Gmsh.y"
 {
       int num = (int)yyvsp[-4].d;
       if(FindVolume(num)){
@@ -4450,7 +4451,7 @@ case 117:
     ;
     break;}
 case 118:
-#line 1638 "Gmsh.y"
+#line 1639 "Gmsh.y"
 {
       int num = (int)yyvsp[-4].i;
       if(FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME)){
@@ -4468,35 +4469,35 @@ case 118:
     ;
     break;}
 case 119:
-#line 1659 "Gmsh.y"
+#line 1660 "Gmsh.y"
 {
       TranslateShapes(yyvsp[-3].v[0], yyvsp[-3].v[1], yyvsp[-3].v[2], yyvsp[-1].l);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 120:
-#line 1664 "Gmsh.y"
+#line 1665 "Gmsh.y"
 {
       RotateShapes(yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].d, yyvsp[-1].l);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 121:
-#line 1669 "Gmsh.y"
+#line 1670 "Gmsh.y"
 {
       SymmetryShapes(yyvsp[-3].v[0], yyvsp[-3].v[1], yyvsp[-3].v[2], yyvsp[-3].v[3], yyvsp[-1].l);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 122:
-#line 1674 "Gmsh.y"
+#line 1675 "Gmsh.y"
 {
       DilatShapes(yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].d, yyvsp[-1].l);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 123:
-#line 1679 "Gmsh.y"
+#line 1680 "Gmsh.y"
 {
       yyval.l = List_Create(3, 3, sizeof(Shape));
       for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
@@ -4509,7 +4510,7 @@ case 123:
     ;
     break;}
 case 124:
-#line 1690 "Gmsh.y"
+#line 1691 "Gmsh.y"
 { 
       yyval.l = List_Create(2, 1, sizeof(Shape));
       IntersectCurvesWithSurface(yyvsp[-5].l, (int)yyvsp[-1].d, yyval.l);
@@ -4517,7 +4518,7 @@ case 124:
     ;
     break;}
 case 125:
-#line 1696 "Gmsh.y"
+#line 1697 "Gmsh.y"
 { 
       yyval.l = List_Create(2, 1, sizeof(Shape));
       BoundaryShapes(yyvsp[-1].l, yyval.l);
@@ -4525,27 +4526,27 @@ case 125:
     ;
     break;}
 case 126:
-#line 1704 "Gmsh.y"
+#line 1705 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
 case 127:
-#line 1705 "Gmsh.y"
+#line 1706 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
 case 128:
-#line 1710 "Gmsh.y"
+#line 1711 "Gmsh.y"
 {
       yyval.l = List_Create(3, 3, sizeof(Shape));
     ;
     break;}
 case 129:
-#line 1714 "Gmsh.y"
+#line 1715 "Gmsh.y"
 {
       List_Add(yyval.l, &yyvsp[0].s);
     ;
     break;}
 case 130:
-#line 1718 "Gmsh.y"
+#line 1719 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){
 	double d;
@@ -4570,7 +4571,7 @@ case 130:
     ;
     break;}
 case 131:
-#line 1741 "Gmsh.y"
+#line 1742 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){
 	double d;
@@ -4595,7 +4596,7 @@ case 131:
     ;
     break;}
 case 132:
-#line 1764 "Gmsh.y"
+#line 1765 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){
 	double d;
@@ -4620,7 +4621,7 @@ case 132:
     ;
     break;}
 case 133:
-#line 1787 "Gmsh.y"
+#line 1788 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){
 	double d;
@@ -4645,7 +4646,7 @@ case 133:
     ;
     break;}
 case 134:
-#line 1815 "Gmsh.y"
+#line 1816 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
 	Shape TheShape;
@@ -4656,7 +4657,7 @@ case 134:
     ;
     break;}
 case 135:
-#line 1824 "Gmsh.y"
+#line 1825 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-4].c, "View")){
 	int index = (int)yyvsp[-2].d;
@@ -4671,7 +4672,7 @@ case 135:
     ;
     break;}
 case 136:
-#line 1837 "Gmsh.y"
+#line 1838 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-1].c, "Meshes") || !strcmp(yyvsp[-1].c, "All")){
 	GModel::current()->destroy();
@@ -4688,7 +4689,7 @@ case 136:
     ;
     break;}
 case 137:
-#line 1852 "Gmsh.y"
+#line 1853 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-2].c, "Empty") && !strcmp(yyvsp[-1].c, "Views")){
 	for(int i = PView::list.size() - 1; i >= 0; i--)
@@ -4700,7 +4701,7 @@ case 137:
     ;
     break;}
 case 138:
-#line 1867 "Gmsh.y"
+#line 1868 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
 	Shape TheShape;
@@ -4711,7 +4712,7 @@ case 138:
     ;
     break;}
 case 139:
-#line 1881 "Gmsh.y"
+#line 1882 "Gmsh.y"
 {
       for(int i = 0; i < 4; i++)
 	VisibilityShape(yyvsp[-1].c, i, 1);
@@ -4719,7 +4720,7 @@ case 139:
     ;
     break;}
 case 140:
-#line 1887 "Gmsh.y"
+#line 1888 "Gmsh.y"
 {
       for(int i = 0; i < 4; i++)
 	VisibilityShape(yyvsp[-1].c, i, 0);
@@ -4727,7 +4728,7 @@ case 140:
     ;
     break;}
 case 141:
-#line 1893 "Gmsh.y"
+#line 1894 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
 	Shape TheShape;
@@ -4738,7 +4739,7 @@ case 141:
     ;
     break;}
 case 142:
-#line 1902 "Gmsh.y"
+#line 1903 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
 	Shape TheShape;
@@ -4749,7 +4750,7 @@ case 142:
     ;
     break;}
 case 143:
-#line 1916 "Gmsh.y"
+#line 1917 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-2].c, "Include")){
 	char tmpstring[1024];
@@ -4799,7 +4800,7 @@ case 143:
     ;
     break;}
 case 144:
-#line 1964 "Gmsh.y"
+#line 1965 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-6].c, "Save") && !strcmp(yyvsp[-5].c, "View")){
 	int index = (int)yyvsp[-3].d;
@@ -4817,7 +4818,7 @@ case 144:
     ;
     break;}
 case 145:
-#line 1980 "Gmsh.y"
+#line 1981 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-6].c, "Background") && !strcmp(yyvsp[-5].c, "Mesh")  && !strcmp(yyvsp[-4].c, "View")){
 	int index = (int)yyvsp[-2].d;
@@ -4835,7 +4836,7 @@ case 145:
     ;
     break;}
 case 146:
-#line 1996 "Gmsh.y"
+#line 1997 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-2].c, "Sleep")){
 	SleepInSeconds(yyvsp[-1].d);
@@ -4856,7 +4857,7 @@ case 146:
     ;
     break;}
 case 147:
-#line 2015 "Gmsh.y"
+#line 2016 "Gmsh.y"
 {
        try {
 	 GMSH_PluginManager::instance()->action(yyvsp[-4].c, yyvsp[-1].c, 0);
@@ -4868,7 +4869,7 @@ case 147:
      ;
     break;}
 case 148:
-#line 2025 "Gmsh.y"
+#line 2026 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-1].c, "ElementsFromAllViews"))
 	PView::combine(false, 1, CTX.post.combine_remove_orig);
@@ -4892,27 +4893,27 @@ case 148:
     ;
     break;}
 case 149:
-#line 2047 "Gmsh.y"
+#line 2048 "Gmsh.y"
 {
       exit(0);
     ;
     break;}
 case 150:
-#line 2051 "Gmsh.y"
+#line 2052 "Gmsh.y"
 {
       CTX.forced_bbox = 0;
       SetBoundingBox();
     ;
     break;}
 case 151:
-#line 2056 "Gmsh.y"
+#line 2057 "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 152:
-#line 2061 "Gmsh.y"
+#line 2062 "Gmsh.y"
 {
 #if defined(HAVE_FLTK)
       Draw();
@@ -4920,7 +4921,7 @@ case 152:
     ;
     break;}
 case 153:
-#line 2073 "Gmsh.y"
+#line 2074 "Gmsh.y"
 {
       LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d;
       LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-1].d;
@@ -4937,7 +4938,7 @@ case 153:
     ;
     break;}
 case 154:
-#line 2088 "Gmsh.y"
+#line 2089 "Gmsh.y"
 {
       LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d;
       LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-3].d;
@@ -4955,7 +4956,7 @@ case 154:
     ;
     break;}
 case 155:
-#line 2104 "Gmsh.y"
+#line 2105 "Gmsh.y"
 {
       LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d;
       LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-1].d;
@@ -4982,7 +4983,7 @@ case 155:
     ;
     break;}
 case 156:
-#line 2129 "Gmsh.y"
+#line 2130 "Gmsh.y"
 {
       LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d;
       LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-3].d;
@@ -5010,7 +5011,7 @@ case 156:
     ;
     break;}
 case 157:
-#line 2155 "Gmsh.y"
+#line 2156 "Gmsh.y"
 {
       if(ImbricatedLoop <= 0){
 	yymsg(GERROR, "Invalid For/EndFor loop");
@@ -5043,7 +5044,7 @@ case 157:
     ;
     break;}
 case 158:
-#line 2186 "Gmsh.y"
+#line 2187 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->createFunction(yyvsp[0].c, yyin, yyname, yylineno))
 	yymsg(GERROR, "Redefinition of function %s", yyvsp[0].c);
@@ -5052,14 +5053,14 @@ case 158:
     ;
     break;}
 case 159:
-#line 2193 "Gmsh.y"
+#line 2194 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->leaveFunction(&yyin, yyname, yylineno))
 	yymsg(GERROR, "Error while exiting function");
     ;
     break;}
 case 160:
-#line 2198 "Gmsh.y"
+#line 2199 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->enterFunction(yyvsp[-1].c, &yyin, yyname, yylineno))
 	yymsg(GERROR, "Unknown function %s", yyvsp[-1].c);
@@ -5067,18 +5068,18 @@ case 160:
     ;
     break;}
 case 161:
-#line 2204 "Gmsh.y"
+#line 2205 "Gmsh.y"
 {
       if(!yyvsp[-1].d) skip_until("If", "EndIf");
     ;
     break;}
 case 162:
-#line 2208 "Gmsh.y"
+#line 2209 "Gmsh.y"
 {
     ;
     break;}
 case 163:
-#line 2217 "Gmsh.y"
+#line 2218 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, yyvsp[-1].l, 
@@ -5088,7 +5089,7 @@ case 163:
     ;
     break;}
 case 164:
-#line 2225 "Gmsh.y"
+#line 2226 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, yyvsp[-1].l, 
@@ -5098,7 +5099,7 @@ case 164:
     ;
     break;}
 case 165:
-#line 2233 "Gmsh.y"
+#line 2234 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, yyvsp[-1].l, 
@@ -5108,13 +5109,13 @@ case 165:
     ;
     break;}
 case 166:
-#line 2241 "Gmsh.y"
+#line 2242 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;
     break;}
 case 167:
-#line 2245 "Gmsh.y"
+#line 2246 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, yyvsp[-3].l, 
@@ -5124,13 +5125,13 @@ case 167:
     ;
     break;}
 case 168:
-#line 2253 "Gmsh.y"
+#line 2254 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;
     break;}
 case 169:
-#line 2257 "Gmsh.y"
+#line 2258 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, yyvsp[-3].l, 
@@ -5140,13 +5141,13 @@ case 169:
     ;
     break;}
 case 170:
-#line 2265 "Gmsh.y"
+#line 2266 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;
     break;}
 case 171:
-#line 2269 "Gmsh.y"
+#line 2270 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, yyvsp[-3].l, 
@@ -5156,13 +5157,13 @@ case 171:
     ;
     break;}
 case 172:
-#line 2277 "Gmsh.y"
+#line 2278 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;
     break;}
 case 173:
-#line 2281 "Gmsh.y"
+#line 2282 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(BOUNDARY_LAYER, yyvsp[-3].l, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
@@ -5171,13 +5172,13 @@ case 173:
     ;
     break;}
 case 174:
-#line 2288 "Gmsh.y"
+#line 2289 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;
     break;}
 case 175:
-#line 2292 "Gmsh.y"
+#line 2293 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       extr.mesh.ViewIndex = (int)yyvsp[-6].d;
@@ -5189,7 +5190,7 @@ case 175:
     ;
     break;}
 case 176:
-#line 2304 "Gmsh.y"
+#line 2305 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)yyvsp[-4].d, 
@@ -5198,7 +5199,7 @@ case 176:
     ;
     break;}
 case 177:
-#line 2311 "Gmsh.y"
+#line 2312 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)yyvsp[-4].d, 
@@ -5207,7 +5208,7 @@ case 177:
     ;
     break;}
 case 178:
-#line 2318 "Gmsh.y"
+#line 2319 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)yyvsp[-4].d, 
@@ -5216,7 +5217,7 @@ case 178:
     ;
     break;}
 case 179:
-#line 2325 "Gmsh.y"
+#line 2326 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)yyvsp[-8].d, 
@@ -5225,7 +5226,7 @@ case 179:
     ;
     break;}
 case 180:
-#line 2332 "Gmsh.y"
+#line 2333 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)yyvsp[-8].d, 
@@ -5234,7 +5235,7 @@ case 180:
     ;
     break;}
 case 181:
-#line 2339 "Gmsh.y"
+#line 2340 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)yyvsp[-8].d, 
@@ -5243,7 +5244,7 @@ case 181:
     ;
     break;}
 case 182:
-#line 2346 "Gmsh.y"
+#line 2347 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)yyvsp[-10].d, 
@@ -5252,7 +5253,7 @@ case 182:
     ;
     break;}
 case 183:
-#line 2353 "Gmsh.y"
+#line 2354 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)yyvsp[-10].d, 
@@ -5261,7 +5262,7 @@ case 183:
     ;
     break;}
 case 184:
-#line 2360 "Gmsh.y"
+#line 2361 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)yyvsp[-10].d, 
@@ -5270,13 +5271,13 @@ case 184:
     ;
     break;}
 case 185:
-#line 2367 "Gmsh.y"
+#line 2368 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;
     break;}
 case 186:
-#line 2371 "Gmsh.y"
+#line 2372 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)yyvsp[-8].d, 
@@ -5285,13 +5286,13 @@ case 186:
     ;
     break;}
 case 187:
-#line 2378 "Gmsh.y"
+#line 2379 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;
     break;}
 case 188:
-#line 2382 "Gmsh.y"
+#line 2383 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)yyvsp[-8].d, 
@@ -5300,13 +5301,13 @@ case 188:
     ;
     break;}
 case 189:
-#line 2389 "Gmsh.y"
+#line 2390 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;
     break;}
 case 190:
-#line 2393 "Gmsh.y"
+#line 2394 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)yyvsp[-8].d, 
@@ -5315,13 +5316,13 @@ case 190:
     ;
     break;}
 case 191:
-#line 2400 "Gmsh.y"
+#line 2401 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;
     break;}
 case 192:
-#line 2404 "Gmsh.y"
+#line 2405 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)yyvsp[-12].d, 
@@ -5330,13 +5331,13 @@ case 192:
     ;
     break;}
 case 193:
-#line 2411 "Gmsh.y"
+#line 2412 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;
     break;}
 case 194:
-#line 2415 "Gmsh.y"
+#line 2416 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)yyvsp[-12].d, 
@@ -5345,13 +5346,13 @@ case 194:
     ;
     break;}
 case 195:
-#line 2422 "Gmsh.y"
+#line 2423 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;
     break;}
 case 196:
-#line 2426 "Gmsh.y"
+#line 2427 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)yyvsp[-12].d, 
@@ -5360,13 +5361,13 @@ case 196:
     ;
     break;}
 case 197:
-#line 2433 "Gmsh.y"
+#line 2434 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;
     break;}
 case 198:
-#line 2437 "Gmsh.y"
+#line 2438 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)yyvsp[-14].d, 
@@ -5375,13 +5376,13 @@ case 198:
     ;
     break;}
 case 199:
-#line 2444 "Gmsh.y"
+#line 2445 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;
     break;}
 case 200:
-#line 2448 "Gmsh.y"
+#line 2449 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)yyvsp[-14].d, 
@@ -5390,13 +5391,13 @@ case 200:
     ;
     break;}
 case 201:
-#line 2455 "Gmsh.y"
+#line 2456 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;
     break;}
 case 202:
-#line 2459 "Gmsh.y"
+#line 2460 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)yyvsp[-14].d, 
@@ -5405,17 +5406,17 @@ case 202:
     ;
     break;}
 case 203:
-#line 2470 "Gmsh.y"
+#line 2471 "Gmsh.y"
 {
     ;
     break;}
 case 204:
-#line 2473 "Gmsh.y"
+#line 2474 "Gmsh.y"
 {
     ;
     break;}
 case 205:
-#line 2479 "Gmsh.y"
+#line 2480 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = 1;
@@ -5426,7 +5427,7 @@ case 205:
     ;
     break;}
 case 206:
-#line 2488 "Gmsh.y"
+#line 2489 "Gmsh.y"
 {
       double d;
       extr.mesh.ExtrudeMesh = true;
@@ -5448,7 +5449,7 @@ case 206:
     ;
     break;}
 case 207:
-#line 2508 "Gmsh.y"
+#line 2509 "Gmsh.y"
 {
       yymsg(GERROR, "Explicit region numbers in layers are deprecated");
       double d;
@@ -5473,13 +5474,13 @@ case 207:
     ;
     break;}
 case 208:
-#line 2531 "Gmsh.y"
+#line 2532 "Gmsh.y"
 {
       extr.mesh.Recombine = true;
     ;
     break;}
 case 209:
-#line 2535 "Gmsh.y"
+#line 2536 "Gmsh.y"
 {
       int num = (int)yyvsp[-6].d;
       if(FindSurface(num)){
@@ -5500,7 +5501,7 @@ case 209:
     ;
     break;}
 case 210:
-#line 2559 "Gmsh.y"
+#line 2560 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-3].l); i++){
 	double d;
@@ -5520,7 +5521,7 @@ case 210:
     ;
     break;}
 case 211:
-#line 2577 "Gmsh.y"
+#line 2578 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-6].l); i++){
 	double d;
@@ -5540,7 +5541,7 @@ case 211:
     ;
     break;}
 case 212:
-#line 2595 "Gmsh.y"
+#line 2596 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-6].l); i++){
 	double d;
@@ -5560,7 +5561,7 @@ case 212:
     ;
     break;}
 case 213:
-#line 2613 "Gmsh.y"
+#line 2614 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d);
       if(!s)
@@ -5591,7 +5592,7 @@ case 213:
     ;
     break;}
 case 214:
-#line 2642 "Gmsh.y"
+#line 2643 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-5].d);
       if(!s)
@@ -5628,14 +5629,14 @@ case 214:
     ;
     break;}
 case 215:
-#line 2677 "Gmsh.y"
+#line 2678 "Gmsh.y"
 {
       yymsg(WARNING, "Elliptic Surface is deprecated: use Transfinite instead (with smoothing)");
       List_Delete(yyvsp[-1].l);
     ;
     break;}
 case 216:
-#line 2682 "Gmsh.y"
+#line 2683 "Gmsh.y"
 {
       Volume *v = FindVolume((int)yyvsp[-4].d);
       if(!v)
@@ -5664,7 +5665,7 @@ case 216:
     ;
     break;}
 case 217:
-#line 2709 "Gmsh.y"
+#line 2710 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-3].l); i++){
 	double d;
@@ -5680,7 +5681,7 @@ case 217:
     ;
     break;}
 case 218:
-#line 2723 "Gmsh.y"
+#line 2724 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
 	double d;
@@ -5695,7 +5696,7 @@ case 218:
     ;
     break;}
 case 219:
-#line 2742 "Gmsh.y"
+#line 2743 "Gmsh.y"
 { 
       Surface *s = FindSurface((int)yyvsp[-2].d);
       if(s)
@@ -5703,7 +5704,7 @@ case 219:
     ;
     break;}
 case 220:
-#line 2748 "Gmsh.y"
+#line 2749 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-2].d);
       if(s)
@@ -5711,55 +5712,55 @@ case 220:
     ;
     break;}
 case 221:
-#line 2754 "Gmsh.y"
+#line 2755 "Gmsh.y"
 {
     ;
     break;}
 case 222:
-#line 2757 "Gmsh.y"
+#line 2758 "Gmsh.y"
 {
     ;
     break;}
 case 223:
-#line 2766 "Gmsh.y"
+#line 2767 "Gmsh.y"
 { 
       ReplaceAllDuplicates();
     ;
     break;}
 case 224:
-#line 2775 "Gmsh.y"
+#line 2776 "Gmsh.y"
 { yyval.d = yyvsp[0].d;           ;
     break;}
 case 225:
-#line 2776 "Gmsh.y"
+#line 2777 "Gmsh.y"
 { yyval.d = yyvsp[-1].d;           ;
     break;}
 case 226:
-#line 2777 "Gmsh.y"
+#line 2778 "Gmsh.y"
 { yyval.d = -yyvsp[0].d;          ;
     break;}
 case 227:
-#line 2778 "Gmsh.y"
+#line 2779 "Gmsh.y"
 { yyval.d = yyvsp[0].d;           ;
     break;}
 case 228:
-#line 2779 "Gmsh.y"
+#line 2780 "Gmsh.y"
 { yyval.d = !yyvsp[0].d;          ;
     break;}
 case 229:
-#line 2780 "Gmsh.y"
+#line 2781 "Gmsh.y"
 { yyval.d = yyvsp[-2].d - yyvsp[0].d;      ;
     break;}
 case 230:
-#line 2781 "Gmsh.y"
+#line 2782 "Gmsh.y"
 { yyval.d = yyvsp[-2].d + yyvsp[0].d;      ;
     break;}
 case 231:
-#line 2782 "Gmsh.y"
+#line 2783 "Gmsh.y"
 { yyval.d = yyvsp[-2].d * yyvsp[0].d;      ;
     break;}
 case 232:
-#line 2784 "Gmsh.y"
+#line 2785 "Gmsh.y"
 { 
       if(!yyvsp[0].d)
 	yymsg(GERROR, "Division by zero in '%g / %g'", yyvsp[-2].d, yyvsp[0].d);
@@ -5768,247 +5769,247 @@ case 232:
     ;
     break;}
 case 233:
-#line 2790 "Gmsh.y"
+#line 2791 "Gmsh.y"
 { yyval.d = (int)yyvsp[-2].d % (int)yyvsp[0].d;  ;
     break;}
 case 234:
-#line 2791 "Gmsh.y"
+#line 2792 "Gmsh.y"
 { yyval.d = pow(yyvsp[-2].d, yyvsp[0].d);  ;
     break;}
 case 235:
-#line 2792 "Gmsh.y"
+#line 2793 "Gmsh.y"
 { yyval.d = yyvsp[-2].d < yyvsp[0].d;      ;
     break;}
 case 236:
-#line 2793 "Gmsh.y"
+#line 2794 "Gmsh.y"
 { yyval.d = yyvsp[-2].d > yyvsp[0].d;      ;
     break;}
 case 237:
-#line 2794 "Gmsh.y"
+#line 2795 "Gmsh.y"
 { yyval.d = yyvsp[-2].d <= yyvsp[0].d;     ;
     break;}
 case 238:
-#line 2795 "Gmsh.y"
+#line 2796 "Gmsh.y"
 { yyval.d = yyvsp[-2].d >= yyvsp[0].d;     ;
     break;}
 case 239:
-#line 2796 "Gmsh.y"
+#line 2797 "Gmsh.y"
 { yyval.d = yyvsp[-2].d == yyvsp[0].d;     ;
     break;}
 case 240:
-#line 2797 "Gmsh.y"
+#line 2798 "Gmsh.y"
 { yyval.d = yyvsp[-2].d != yyvsp[0].d;     ;
     break;}
 case 241:
-#line 2798 "Gmsh.y"
+#line 2799 "Gmsh.y"
 { yyval.d = yyvsp[-2].d && yyvsp[0].d;     ;
     break;}
 case 242:
-#line 2799 "Gmsh.y"
+#line 2800 "Gmsh.y"
 { yyval.d = yyvsp[-2].d || yyvsp[0].d;     ;
     break;}
 case 243:
-#line 2800 "Gmsh.y"
+#line 2801 "Gmsh.y"
 { yyval.d = yyvsp[-4].d? yyvsp[-2].d : yyvsp[0].d;  ;
     break;}
 case 244:
-#line 2801 "Gmsh.y"
+#line 2802 "Gmsh.y"
 { yyval.d = exp(yyvsp[-1].d);      ;
     break;}
 case 245:
-#line 2802 "Gmsh.y"
+#line 2803 "Gmsh.y"
 { yyval.d = log(yyvsp[-1].d);      ;
     break;}
 case 246:
-#line 2803 "Gmsh.y"
+#line 2804 "Gmsh.y"
 { yyval.d = log10(yyvsp[-1].d);    ;
     break;}
 case 247:
-#line 2804 "Gmsh.y"
+#line 2805 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-1].d);     ;
     break;}
 case 248:
-#line 2805 "Gmsh.y"
+#line 2806 "Gmsh.y"
 { yyval.d = sin(yyvsp[-1].d);      ;
     break;}
 case 249:
-#line 2806 "Gmsh.y"
+#line 2807 "Gmsh.y"
 { yyval.d = asin(yyvsp[-1].d);     ;
     break;}
 case 250:
-#line 2807 "Gmsh.y"
+#line 2808 "Gmsh.y"
 { yyval.d = cos(yyvsp[-1].d);      ;
     break;}
 case 251:
-#line 2808 "Gmsh.y"
+#line 2809 "Gmsh.y"
 { yyval.d = acos(yyvsp[-1].d);     ;
     break;}
 case 252:
-#line 2809 "Gmsh.y"
+#line 2810 "Gmsh.y"
 { yyval.d = tan(yyvsp[-1].d);      ;
     break;}
 case 253:
-#line 2810 "Gmsh.y"
+#line 2811 "Gmsh.y"
 { yyval.d = atan(yyvsp[-1].d);     ;
     break;}
 case 254:
-#line 2811 "Gmsh.y"
+#line 2812 "Gmsh.y"
 { yyval.d = atan2(yyvsp[-3].d, yyvsp[-1].d);;
     break;}
 case 255:
-#line 2812 "Gmsh.y"
+#line 2813 "Gmsh.y"
 { yyval.d = sinh(yyvsp[-1].d);     ;
     break;}
 case 256:
-#line 2813 "Gmsh.y"
+#line 2814 "Gmsh.y"
 { yyval.d = cosh(yyvsp[-1].d);     ;
     break;}
 case 257:
-#line 2814 "Gmsh.y"
+#line 2815 "Gmsh.y"
 { yyval.d = tanh(yyvsp[-1].d);     ;
     break;}
 case 258:
-#line 2815 "Gmsh.y"
+#line 2816 "Gmsh.y"
 { yyval.d = fabs(yyvsp[-1].d);     ;
     break;}
 case 259:
-#line 2816 "Gmsh.y"
+#line 2817 "Gmsh.y"
 { yyval.d = floor(yyvsp[-1].d);    ;
     break;}
 case 260:
-#line 2817 "Gmsh.y"
+#line 2818 "Gmsh.y"
 { yyval.d = ceil(yyvsp[-1].d);     ;
     break;}
 case 261:
-#line 2818 "Gmsh.y"
+#line 2819 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
     break;}
 case 262:
-#line 2819 "Gmsh.y"
+#line 2820 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
     break;}
 case 263:
-#line 2820 "Gmsh.y"
+#line 2821 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
     break;}
 case 264:
-#line 2821 "Gmsh.y"
+#line 2822 "Gmsh.y"
 { yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
     break;}
 case 265:
-#line 2823 "Gmsh.y"
+#line 2824 "Gmsh.y"
 { yyval.d = exp(yyvsp[-1].d);      ;
     break;}
 case 266:
-#line 2824 "Gmsh.y"
+#line 2825 "Gmsh.y"
 { yyval.d = log(yyvsp[-1].d);      ;
     break;}
 case 267:
-#line 2825 "Gmsh.y"
+#line 2826 "Gmsh.y"
 { yyval.d = log10(yyvsp[-1].d);    ;
     break;}
 case 268:
-#line 2826 "Gmsh.y"
+#line 2827 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-1].d);     ;
     break;}
 case 269:
-#line 2827 "Gmsh.y"
+#line 2828 "Gmsh.y"
 { yyval.d = sin(yyvsp[-1].d);      ;
     break;}
 case 270:
-#line 2828 "Gmsh.y"
+#line 2829 "Gmsh.y"
 { yyval.d = asin(yyvsp[-1].d);     ;
     break;}
 case 271:
-#line 2829 "Gmsh.y"
+#line 2830 "Gmsh.y"
 { yyval.d = cos(yyvsp[-1].d);      ;
     break;}
 case 272:
-#line 2830 "Gmsh.y"
+#line 2831 "Gmsh.y"
 { yyval.d = acos(yyvsp[-1].d);     ;
     break;}
 case 273:
-#line 2831 "Gmsh.y"
+#line 2832 "Gmsh.y"
 { yyval.d = tan(yyvsp[-1].d);      ;
     break;}
 case 274:
-#line 2832 "Gmsh.y"
+#line 2833 "Gmsh.y"
 { yyval.d = atan(yyvsp[-1].d);     ;
     break;}
 case 275:
-#line 2833 "Gmsh.y"
+#line 2834 "Gmsh.y"
 { yyval.d = atan2(yyvsp[-3].d, yyvsp[-1].d);;
     break;}
 case 276:
-#line 2834 "Gmsh.y"
+#line 2835 "Gmsh.y"
 { yyval.d = sinh(yyvsp[-1].d);     ;
     break;}
 case 277:
-#line 2835 "Gmsh.y"
+#line 2836 "Gmsh.y"
 { yyval.d = cosh(yyvsp[-1].d);     ;
     break;}
 case 278:
-#line 2836 "Gmsh.y"
+#line 2837 "Gmsh.y"
 { yyval.d = tanh(yyvsp[-1].d);     ;
     break;}
 case 279:
-#line 2837 "Gmsh.y"
+#line 2838 "Gmsh.y"
 { yyval.d = fabs(yyvsp[-1].d);     ;
     break;}
 case 280:
-#line 2838 "Gmsh.y"
+#line 2839 "Gmsh.y"
 { yyval.d = floor(yyvsp[-1].d);    ;
     break;}
 case 281:
-#line 2839 "Gmsh.y"
+#line 2840 "Gmsh.y"
 { yyval.d = ceil(yyvsp[-1].d);     ;
     break;}
 case 282:
-#line 2840 "Gmsh.y"
+#line 2841 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
     break;}
 case 283:
-#line 2841 "Gmsh.y"
+#line 2842 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
     break;}
 case 284:
-#line 2842 "Gmsh.y"
+#line 2843 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
     break;}
 case 285:
-#line 2843 "Gmsh.y"
+#line 2844 "Gmsh.y"
 { yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
     break;}
 case 286:
-#line 2852 "Gmsh.y"
+#line 2853 "Gmsh.y"
 { yyval.d = yyvsp[0].d; ;
     break;}
 case 287:
-#line 2853 "Gmsh.y"
+#line 2854 "Gmsh.y"
 { yyval.d = 3.141592653589793; ;
     break;}
 case 288:
-#line 2854 "Gmsh.y"
+#line 2855 "Gmsh.y"
 { yyval.d = ParUtil::Instance()->rank(); ;
     break;}
 case 289:
-#line 2855 "Gmsh.y"
+#line 2856 "Gmsh.y"
 { yyval.d = ParUtil::Instance()->size(); ;
     break;}
 case 290:
-#line 2856 "Gmsh.y"
+#line 2857 "Gmsh.y"
 { yyval.d = Get_GmshMajorVersion(); ;
     break;}
 case 291:
-#line 2857 "Gmsh.y"
+#line 2858 "Gmsh.y"
 { yyval.d = Get_GmshMinorVersion(); ;
     break;}
 case 292:
-#line 2858 "Gmsh.y"
+#line 2859 "Gmsh.y"
 { yyval.d = Get_GmshPatchVersion(); ;
     break;}
 case 293:
-#line 2863 "Gmsh.y"
+#line 2864 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[0].c;
@@ -6023,7 +6024,7 @@ case 293:
     ;
     break;}
 case 294:
-#line 2879 "Gmsh.y"
+#line 2880 "Gmsh.y"
 {
       char tmpstring[1024];
       sprintf(tmpstring, "%s_%d", yyvsp[-4].c, (int)yyvsp[-1].d) ;
@@ -6040,7 +6041,7 @@ case 294:
     ;
     break;}
 case 295:
-#line 2894 "Gmsh.y"
+#line 2895 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-3].c;
@@ -6062,7 +6063,7 @@ case 295:
     ;
     break;}
 case 296:
-#line 2914 "Gmsh.y"
+#line 2915 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-2].c;
@@ -6077,7 +6078,7 @@ case 296:
     ;
     break;}
 case 297:
-#line 2927 "Gmsh.y"
+#line 2928 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-1].c;
@@ -6092,7 +6093,7 @@ case 297:
     ;
     break;}
 case 298:
-#line 2940 "Gmsh.y"
+#line 2941 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-4].c;
@@ -6114,7 +6115,7 @@ case 298:
     ;
     break;}
 case 299:
-#line 2963 "Gmsh.y"
+#line 2964 "Gmsh.y"
 {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -6134,7 +6135,7 @@ case 299:
     ;
     break;}
 case 300:
-#line 2981 "Gmsh.y"
+#line 2982 "Gmsh.y"
 {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -6154,7 +6155,7 @@ case 300:
     ;
     break;}
 case 301:
-#line 2999 "Gmsh.y"
+#line 3000 "Gmsh.y"
 {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -6174,7 +6175,7 @@ case 301:
     ;
     break;}
 case 302:
-#line 3017 "Gmsh.y"
+#line 3018 "Gmsh.y"
 {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -6194,107 +6195,107 @@ case 302:
     ;
     break;}
 case 303:
-#line 3035 "Gmsh.y"
+#line 3036 "Gmsh.y"
 { 
       yyval.d = GetValue(yyvsp[-3].c, yyvsp[-1].d);
       Free(yyvsp[-3].c);
     ;
     break;}
 case 304:
-#line 3043 "Gmsh.y"
+#line 3044 "Gmsh.y"
 {
       memcpy(yyval.v, yyvsp[0].v, 5*sizeof(double));
     ;
     break;}
 case 305:
-#line 3047 "Gmsh.y"
+#line 3048 "Gmsh.y"
 {
       for(int i = 0; i < 5; i++) yyval.v[i] = -yyvsp[0].v[i];
     ;
     break;}
 case 306:
-#line 3051 "Gmsh.y"
+#line 3052 "Gmsh.y"
 { 
       for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[0].v[i];
     ;
     break;}
 case 307:
-#line 3055 "Gmsh.y"
+#line 3056 "Gmsh.y"
 { 
       for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[-2].v[i] - yyvsp[0].v[i];
     ;
     break;}
 case 308:
-#line 3059 "Gmsh.y"
+#line 3060 "Gmsh.y"
 {
       for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[-2].v[i] + yyvsp[0].v[i];
     ;
     break;}
 case 309:
-#line 3066 "Gmsh.y"
+#line 3067 "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 310:
-#line 3070 "Gmsh.y"
+#line 3071 "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 311:
-#line 3074 "Gmsh.y"
+#line 3075 "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 312:
-#line 3078 "Gmsh.y"
+#line 3079 "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 313:
-#line 3085 "Gmsh.y"
+#line 3086 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(List_T*));
       List_Add(yyval.l, &(yyvsp[0].l));
     ;
     break;}
 case 314:
-#line 3090 "Gmsh.y"
+#line 3091 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].l));
     ;
     break;}
 case 315:
-#line 3098 "Gmsh.y"
+#line 3099 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       List_Add(yyval.l, &(yyvsp[0].d));
     ;
     break;}
 case 316:
-#line 3103 "Gmsh.y"
+#line 3104 "Gmsh.y"
 {
       yyval.l = yyvsp[0].l;
     ;
     break;}
 case 317:
-#line 3107 "Gmsh.y"
+#line 3108 "Gmsh.y"
 {
       // creates an empty list
       yyval.l = List_Create(2, 1, sizeof(double));
     ;
     break;}
 case 318:
-#line 3112 "Gmsh.y"
+#line 3113 "Gmsh.y"
 {
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 319:
-#line 3116 "Gmsh.y"
+#line 3117 "Gmsh.y"
 {
       yyval.l = yyvsp[-1].l;
       for(int i = 0; i < List_Nbr(yyval.l); i++){
@@ -6304,7 +6305,7 @@ case 319:
     ;
     break;}
 case 320:
-#line 3124 "Gmsh.y"
+#line 3125 "Gmsh.y"
 {
       yyval.l = yyvsp[-1].l;
       for(int i = 0; i < List_Nbr(yyval.l); i++){
@@ -6314,7 +6315,7 @@ case 320:
     ;
     break;}
 case 321:
-#line 3135 "Gmsh.y"
+#line 3136 "Gmsh.y"
 {
       yyval.l = yyvsp[0].l;
       for(int i = 0; i < List_Nbr(yyval.l); i++){
@@ -6324,7 +6325,7 @@ case 321:
     ;
     break;}
 case 322:
-#line 3143 "Gmsh.y"
+#line 3144 "Gmsh.y"
 {
       yyval.l = yyvsp[0].l;
       for(int i = 0; i < List_Nbr(yyval.l); i++){
@@ -6334,7 +6335,7 @@ case 322:
     ;
     break;}
 case 323:
-#line 3151 "Gmsh.y"
+#line 3152 "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.)) 
@@ -6342,7 +6343,7 @@ case 323:
     ;
     break;}
 case 324:
-#line 3157 "Gmsh.y"
+#line 3158 "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)){
@@ -6355,7 +6356,7 @@ case 324:
    ;
     break;}
 case 325:
-#line 3168 "Gmsh.y"
+#line 3169 "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
@@ -6377,7 +6378,7 @@ case 325:
     ;
     break;}
 case 326:
-#line 3188 "Gmsh.y"
+#line 3189 "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++){
@@ -6389,7 +6390,7 @@ case 326:
     ;
     break;}
 case 327:
-#line 3198 "Gmsh.y"
+#line 3199 "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++){
@@ -6401,7 +6402,7 @@ case 327:
     ;
     break;}
 case 328:
-#line 3208 "Gmsh.y"
+#line 3209 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       Symbol TheSymbol;
@@ -6420,7 +6421,7 @@ case 328:
     ;
     break;}
 case 329:
-#line 3225 "Gmsh.y"
+#line 3226 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       Symbol TheSymbol;
@@ -6446,26 +6447,26 @@ case 329:
     ;
     break;}
 case 330:
-#line 3252 "Gmsh.y"
+#line 3253 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       List_Add(yyval.l, &(yyvsp[0].d));
     ;
     break;}
 case 331:
-#line 3257 "Gmsh.y"
+#line 3258 "Gmsh.y"
 {
       yyval.l = yyvsp[0].l;
     ;
     break;}
 case 332:
-#line 3261 "Gmsh.y"
+#line 3262 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].d));
     ;
     break;}
 case 333:
-#line 3265 "Gmsh.y"
+#line 3266 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){
 	double d;
@@ -6476,19 +6477,19 @@ case 333:
     ;
     break;}
 case 334:
-#line 3278 "Gmsh.y"
+#line 3279 "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 335:
-#line 3282 "Gmsh.y"
+#line 3283 "Gmsh.y"
 {
       yyval.u = CTX.PACK_COLOR((int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d, 255);
     ;
     break;}
 case 336:
-#line 3294 "Gmsh.y"
+#line 3295 "Gmsh.y"
 {
       int flag;
       yyval.u = Get_ColorForString(ColorString, -1, yyvsp[0].c, &flag);
@@ -6497,7 +6498,7 @@ case 336:
     ;
     break;}
 case 337:
-#line 3301 "Gmsh.y"
+#line 3302 "Gmsh.y"
 {
       unsigned int (*pColOpt)(int num, int action, unsigned int value);
       StringXColor *pColCat;
@@ -6517,13 +6518,13 @@ case 337:
     ;
     break;}
 case 338:
-#line 3322 "Gmsh.y"
+#line 3323 "Gmsh.y"
 {
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 339:
-#line 3326 "Gmsh.y"
+#line 3327 "Gmsh.y"
 {
       yyval.l = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = Get_ColorTable((int)yyvsp[-3].d);
@@ -6537,38 +6538,38 @@ case 339:
     ;
     break;}
 case 340:
-#line 3341 "Gmsh.y"
+#line 3342 "Gmsh.y"
 {
       yyval.l = List_Create(256, 10, sizeof(unsigned int));
       List_Add(yyval.l, &(yyvsp[0].u));
     ;
     break;}
 case 341:
-#line 3346 "Gmsh.y"
+#line 3347 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].u));
     ;
     break;}
 case 342:
-#line 3353 "Gmsh.y"
+#line 3354 "Gmsh.y"
 {
       yyval.c = yyvsp[0].c;
     ;
     break;}
 case 343:
-#line 3357 "Gmsh.y"
+#line 3358 "Gmsh.y"
 {
       Msg(WARNING, "Named string expressions not implemented yet");
     ;
     break;}
 case 344:
-#line 3364 "Gmsh.y"
+#line 3365 "Gmsh.y"
 {
       yyval.c = yyvsp[0].c;
     ;
     break;}
 case 345:
-#line 3368 "Gmsh.y"
+#line 3369 "Gmsh.y"
 {
       yyval.c = (char *)Malloc(32*sizeof(char));
       time_t now;
@@ -6578,7 +6579,7 @@ case 345:
     ;
     break;}
 case 346:
-#line 3376 "Gmsh.y"
+#line 3377 "Gmsh.y"
 {
       yyval.c = (char *)Malloc((strlen(yyvsp[-3].c)+strlen(yyvsp[-1].c)+1)*sizeof(char));
       strcpy(yyval.c, yyvsp[-3].c);
@@ -6588,7 +6589,7 @@ case 346:
     ;
     break;}
 case 347:
-#line 3384 "Gmsh.y"
+#line 3385 "Gmsh.y"
 {
       yyval.c = (char *)Malloc((strlen(yyvsp[-1].c)+1)*sizeof(char));
       int i;
@@ -6604,7 +6605,7 @@ case 347:
     ;
     break;}
 case 348:
-#line 3398 "Gmsh.y"
+#line 3399 "Gmsh.y"
 {
       yyval.c = (char *)Malloc((strlen(yyvsp[-1].c)+1)*sizeof(char));
       int i;
@@ -6620,13 +6621,13 @@ case 348:
     ;
     break;}
 case 349:
-#line 3412 "Gmsh.y"
+#line 3413 "Gmsh.y"
 {
       yyval.c = yyvsp[-1].c;
     ;
     break;}
 case 350:
-#line 3416 "Gmsh.y"
+#line 3417 "Gmsh.y"
 {
       char tmpstring[1024];
       int i = PrintListOfDouble(yyvsp[-3].c, yyvsp[-1].l, tmpstring);
@@ -6647,7 +6648,7 @@ case 350:
     ;
     break;}
 case 351:
-#line 3435 "Gmsh.y"
+#line 3436 "Gmsh.y"
 { 
       char* (*pStrOpt)(int num, int action, char *value);
       StringXString *pStrCat;
@@ -6671,7 +6672,7 @@ case 351:
     ;
     break;}
 case 352:
-#line 3457 "Gmsh.y"
+#line 3458 "Gmsh.y"
 { 
       char* (*pStrOpt)(int num, int action, char *value);
       StringXString *pStrCat;
@@ -6916,7 +6917,7 @@ yyerrhandle:
     }
   return 1;
 }
-#line 3480 "Gmsh.y"
+#line 3481 "Gmsh.y"
 
 
 void DeleteSymbol(void *a, void *b){
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index 3f12bfbb27e95346e76edbc92a1ff94220cddcce..923d9fd469a3c292bcf1286ddc1112acbad5b56d 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1,5 +1,5 @@
 %{
-// $Id: Gmsh.y,v 1.287 2007-09-11 15:29:01 geuzaine Exp $
+// $Id: Gmsh.y,v 1.288 2007-09-12 05:42:41 geuzaine Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //
@@ -54,6 +54,8 @@ extern Mesh *THEM;
 
 static ExtrudeParams extr;
 
+static gmshSurface *myGmshSurface = 0;
+
 static PViewDataList *ViewData;
 static List_T *ViewValueList;
 static double ViewCoord[100];
@@ -61,7 +63,6 @@ static int *ViewNumList, ViewCoordIdx;
 
 #define MAX_RECUR_LOOPS 100
 static int ImbricatedLoop = 0;
-static gmshSurface *myGmshSurface = 0;
 static fpos_t yyposImbricatedLoopsTab[MAX_RECUR_LOOPS];
 static int yylinenoImbricatedLoopsTab[MAX_RECUR_LOOPS];
 static double LoopControlVariablesTab[MAX_RECUR_LOOPS][3];
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index 8b289b343f7f89c29523d260da03bae2a59c127a..6108a85ab1f50b90ce2d0f8d070e2ea4da0f26c4 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.332 2007-09-11 15:29:01 geuzaine Exp $
+ * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.333 2007-09-12 05:42:41 geuzaine Exp $
  */
 
 #define FLEX_SCANNER
@@ -757,7 +757,7 @@ char *yytext;
 #line 1 "Gmsh.l"
 #define INITIAL 0
 #line 2 "Gmsh.l"
-// $Id: Gmsh.yy.cpp,v 1.332 2007-09-11 15:29:01 geuzaine Exp $
+// $Id: Gmsh.yy.cpp,v 1.333 2007-09-12 05:42:41 geuzaine Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //