diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 43b7cf11d8496834b4370ccdec96c3037448b8eb..0dc9fd437c2720c49ada7440a559a6d138f47166 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -177,7 +177,7 @@
 #line 1 "Gmsh.y"
  
 
-// $Id: Gmsh.tab.cpp,v 1.121 2001-11-05 08:36:49 geuzaine Exp $
+// $Id: Gmsh.tab.cpp,v 1.122 2001-11-07 09:30:26 geuzaine Exp $
 
 #include <stdarg.h>
 #ifndef _NOPLUGIN
@@ -222,7 +222,6 @@ static double         LoopControlVariablesTab[MAX_OPEN_FILES][3];
 static char*          LoopControlVariablesNameTab[MAX_OPEN_FILES];
 static char           yynameTab[MAX_OPEN_FILES][256];
 static char           tmpstring[256];
-static char           tmpstring2[256], tmpstring3[256];
 static Symbol         TheSymbol, *pSymbol;
 static Surface       *STL_Surf;
 static Shape          TheShape;
@@ -243,6 +242,7 @@ char *strsave(char *ptr);
 void  yyerror (char *s);
 void  vyyerror (char *fmt, ...);
 void  skip_until (char *skip, char *until);
+int PrintListOfDouble(char *format, List_T *list, char *buffer);
 
 #line 71 "Gmsh.y"
 typedef union {
@@ -613,38 +613,38 @@ static const short yyrline[] = { 0,
    287,   292,   296,   299,   304,   308,   312,   316,   321,   325,
    328,   332,   336,   340,   344,   348,   352,   355,   359,   362,
    366,   369,   378,   382,   388,   390,   391,   392,   393,   394,
-   395,   396,   397,   398,   399,   400,   403,   408,   437,   442,
-   448,   453,   454,   455,   456,   457,   458,   459,   460,   461,
-   462,   463,   464,   465,   466,   469,   472,   476,   482,   488,
-   491,   495,   501,   507,   510,   514,   520,   526,   529,   533,
-   541,   547,   550,   554,   562,   568,   571,   575,   583,   589,
-   592,   596,   608,   614,   617,   621,   633,   639,   642,   646,
-   658,   664,   667,   671,   684,   690,   693,   697,   710,   716,
-   719,   723,   736,   742,   748,   755,   763,   769,   775,   782,
-   790,   801,   803,   804,   805,   806,   808,   810,   812,   843,
-   877,   924,   939,   948,   963,   975,   989,  1012,  1036,  1048,
-  1062,  1074,  1088,  1104,  1120,  1133,  1153,  1164,  1170,  1189,
-  1200,  1208,  1214,  1220,  1239,  1245,  1251,  1267,  1274,  1280,
-  1286,  1297,  1308,  1330,  1342,  1348,  1367,  1388,  1396,  1402,
-  1408,  1414,  1426,  1432,  1438,  1450,  1456,  1461,  1466,  1473,
-  1475,  1476,  1479,  1484,  1495,  1513,  1521,  1526,  1537,  1605,
-  1625,  1632,  1636,  1656,  1669,  1680,  1702,  1724,  1745,  1751,
-  1756,  1761,  1765,  1775,  1782,  1791,  1795,  1799,  1804,  1808,
-  1813,  1820,  1824,  1828,  1833,  1838,  1844,  1851,  1855,  1860,
-  1887,  1911,  1921,  1940,  1958,  1976,  1998,  2019,  2040,  2054,
-  2075,  2080,  2091,  2093,  2094,  2095,  2096,  2099,  2101,  2102,
-  2103,  2104,  2105,  2106,  2107,  2108,  2115,  2116,  2117,  2118,
-  2119,  2120,  2121,  2122,  2123,  2124,  2125,  2126,  2127,  2128,
-  2129,  2130,  2131,  2132,  2133,  2134,  2135,  2136,  2137,  2138,
-  2139,  2140,  2141,  2142,  2143,  2144,  2145,  2146,  2148,  2149,
-  2150,  2151,  2152,  2153,  2154,  2155,  2156,  2157,  2158,  2159,
-  2160,  2161,  2162,  2163,  2164,  2165,  2166,  2167,  2168,  2173,
-  2178,  2179,  2180,  2184,  2195,  2212,  2223,  2242,  2258,  2274,
-  2290,  2307,  2312,  2316,  2320,  2324,  2329,  2334,  2338,  2342,
-  2348,  2352,  2357,  2361,  2366,  2370,  2374,  2380,  2386,  2393,
-  2399,  2403,  2407,  2417,  2424,  2435,  2449,  2465,  2485,  2509,
-  2515,  2519,  2523,  2534,  2539,  2550,  2555,  2573,  2578,  2591,
-  2597,  2603,  2608,  2616,  2629,  2633,  2658,  2672
+   395,   396,   397,   398,   399,   400,   403,   408,   425,   430,
+   436,   441,   442,   443,   444,   445,   446,   447,   448,   449,
+   450,   451,   452,   453,   454,   457,   460,   464,   470,   476,
+   479,   483,   489,   495,   498,   502,   508,   514,   517,   521,
+   529,   535,   538,   542,   550,   556,   559,   563,   571,   577,
+   580,   584,   596,   602,   605,   609,   621,   627,   630,   634,
+   646,   652,   655,   659,   672,   678,   681,   685,   698,   704,
+   707,   711,   724,   730,   736,   743,   751,   757,   763,   770,
+   778,   789,   791,   792,   793,   794,   796,   798,   800,   831,
+   865,   912,   927,   936,   951,   963,   977,  1000,  1024,  1036,
+  1050,  1062,  1076,  1092,  1108,  1121,  1141,  1152,  1158,  1177,
+  1188,  1196,  1202,  1208,  1227,  1233,  1239,  1255,  1262,  1268,
+  1274,  1285,  1296,  1318,  1330,  1336,  1355,  1376,  1384,  1390,
+  1396,  1402,  1414,  1420,  1426,  1438,  1444,  1449,  1454,  1461,
+  1463,  1464,  1467,  1472,  1483,  1501,  1509,  1514,  1525,  1593,
+  1613,  1620,  1624,  1644,  1657,  1668,  1690,  1712,  1733,  1739,
+  1744,  1749,  1753,  1763,  1770,  1779,  1783,  1787,  1792,  1796,
+  1801,  1808,  1812,  1816,  1821,  1826,  1832,  1839,  1843,  1848,
+  1875,  1899,  1909,  1928,  1946,  1964,  1986,  2007,  2028,  2042,
+  2063,  2068,  2079,  2081,  2082,  2083,  2084,  2087,  2089,  2090,
+  2091,  2092,  2093,  2094,  2095,  2096,  2103,  2104,  2105,  2106,
+  2107,  2108,  2109,  2110,  2111,  2112,  2113,  2114,  2115,  2116,
+  2117,  2118,  2119,  2120,  2121,  2122,  2123,  2124,  2125,  2126,
+  2127,  2128,  2129,  2130,  2131,  2132,  2133,  2134,  2136,  2137,
+  2138,  2139,  2140,  2141,  2142,  2143,  2144,  2145,  2146,  2147,
+  2148,  2149,  2150,  2151,  2152,  2153,  2154,  2155,  2156,  2161,
+  2166,  2167,  2168,  2172,  2183,  2200,  2211,  2230,  2246,  2262,
+  2278,  2295,  2300,  2304,  2308,  2312,  2317,  2322,  2326,  2330,
+  2336,  2340,  2345,  2349,  2354,  2358,  2362,  2368,  2374,  2381,
+  2387,  2391,  2395,  2405,  2412,  2423,  2437,  2453,  2473,  2497,
+  2503,  2507,  2511,  2522,  2527,  2538,  2543,  2561,  2566,  2579,
+  2585,  2591,  2596,  2604,  2617,  2621,  2639,  2653
 };
 #endif
 
@@ -3504,119 +3504,107 @@ case 67:
 case 68:
 #line 409 "Gmsh.y"
 {
-      for(i = 0 ; i<List_Nbr(yyvsp[-2].l) ; i++){
-	if(!i){
-	  str = strtok(yyvsp[-4].c, "%");
-	  strcpy(tmpstring, str); 
-	}
-	str = strtok(NULL, "%");
-	if(str){
-	  strcpy(tmpstring2, "%");
-	  strcat(tmpstring2, str);
-	  sprintf(tmpstring3, tmpstring2, *(double*)List_Pointer(yyvsp[-2].l,i)); 
-	  strcat(tmpstring, tmpstring3);
-	}
-	else{
-	  vyyerror("Missing %d parameter(s) in Printf format",
-		   List_Nbr(yyvsp[-2].l)-i);
-	  break ;
-	}
-      }
-      Msg(DIRECT, tmpstring);
+      i = PrintListOfDouble(yyvsp[-4].c,yyvsp[-2].l,tmpstring);
+      if(i<0) 
+	vyyerror("Too few arguments in Printf");
+      else if(i>0)
+	vyyerror("Too many arguments (%d) in Printf", i);
+      else
+	Msg(DIRECT, tmpstring);
       List_Delete(yyvsp[-2].l);
     ;
     break;}
 case 69:
-#line 439 "Gmsh.y"
+#line 427 "Gmsh.y"
 { 
       if(!strcmp(yyvsp[-5].c, "View")) EndView(View, 1, yyname, yyvsp[-4].c); 
     ;
     break;}
 case 70:
-#line 443 "Gmsh.y"
+#line 431 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-7].c, "View")) EndView(View, 1, yyname, yyvsp[-6].c);
     ;
     break;}
 case 71:
-#line 450 "Gmsh.y"
+#line 438 "Gmsh.y"
 {
       View = BeginView(1); 
     ;
     break;}
 case 86:
-#line 471 "Gmsh.y"
+#line 459 "Gmsh.y"
 { List_Add(View->SP, &yyvsp[0].d) ; ;
     break;}
 case 87:
-#line 473 "Gmsh.y"
+#line 461 "Gmsh.y"
 { List_Add(View->SP, &yyvsp[0].d) ; ;
     break;}
 case 88:
-#line 478 "Gmsh.y"
+#line 466 "Gmsh.y"
 { 
       List_Add(View->SP, &yyvsp[-5].d); List_Add(View->SP, &yyvsp[-3].d);
       List_Add(View->SP, &yyvsp[-1].d);
     ;
     break;}
 case 89:
-#line 483 "Gmsh.y"
+#line 471 "Gmsh.y"
 {
       View->NbSP++ ;
     ;
     break;}
 case 90:
-#line 490 "Gmsh.y"
+#line 478 "Gmsh.y"
 { List_Add(View->VP, &yyvsp[0].d) ; ;
     break;}
 case 91:
-#line 492 "Gmsh.y"
+#line 480 "Gmsh.y"
 { List_Add(View->VP, &yyvsp[0].d) ; ;
     break;}
 case 92:
-#line 497 "Gmsh.y"
+#line 485 "Gmsh.y"
 { 
       List_Add(View->VP, &yyvsp[-5].d); List_Add(View->VP, &yyvsp[-3].d);
       List_Add(View->VP, &yyvsp[-1].d); 
     ;
     break;}
 case 93:
-#line 502 "Gmsh.y"
+#line 490 "Gmsh.y"
 {
       View->NbVP++ ;
     ;
     break;}
 case 94:
-#line 509 "Gmsh.y"
+#line 497 "Gmsh.y"
 { List_Add(View->TP, &yyvsp[0].d) ; ;
     break;}
 case 95:
-#line 511 "Gmsh.y"
+#line 499 "Gmsh.y"
 { List_Add(View->TP, &yyvsp[0].d) ; ;
     break;}
 case 96:
-#line 516 "Gmsh.y"
+#line 504 "Gmsh.y"
 { 
       List_Add(View->TP, &yyvsp[-5].d); List_Add(View->TP, &yyvsp[-3].d);
       List_Add(View->TP, &yyvsp[-1].d);
     ;
     break;}
 case 97:
-#line 521 "Gmsh.y"
+#line 509 "Gmsh.y"
 {
       View->NbTP++ ;
     ;
     break;}
 case 98:
-#line 528 "Gmsh.y"
+#line 516 "Gmsh.y"
 { List_Add(View->SL, &yyvsp[0].d) ; ;
     break;}
 case 99:
-#line 530 "Gmsh.y"
+#line 518 "Gmsh.y"
 { List_Add(View->SL, &yyvsp[0].d) ; ;
     break;}
 case 100:
-#line 536 "Gmsh.y"
+#line 524 "Gmsh.y"
 { 
       List_Add(View->SL, &yyvsp[-11].d); List_Add(View->SL, &yyvsp[-5].d);
       List_Add(View->SL, &yyvsp[-9].d); List_Add(View->SL, &yyvsp[-3].d);
@@ -3624,21 +3612,21 @@ case 100:
     ;
     break;}
 case 101:
-#line 542 "Gmsh.y"
+#line 530 "Gmsh.y"
 {
       View->NbSL++ ;
     ;
     break;}
 case 102:
-#line 549 "Gmsh.y"
+#line 537 "Gmsh.y"
 { List_Add(View->VL, &yyvsp[0].d) ; ;
     break;}
 case 103:
-#line 551 "Gmsh.y"
+#line 539 "Gmsh.y"
 { List_Add(View->VL, &yyvsp[0].d) ; ;
     break;}
 case 104:
-#line 557 "Gmsh.y"
+#line 545 "Gmsh.y"
 { 
       List_Add(View->VL, &yyvsp[-11].d); List_Add(View->VL, &yyvsp[-5].d);
       List_Add(View->VL, &yyvsp[-9].d); List_Add(View->VL, &yyvsp[-3].d);
@@ -3646,21 +3634,21 @@ case 104:
     ;
     break;}
 case 105:
-#line 563 "Gmsh.y"
+#line 551 "Gmsh.y"
 {
       View->NbVL++ ;
     ;
     break;}
 case 106:
-#line 570 "Gmsh.y"
+#line 558 "Gmsh.y"
 { List_Add(View->TL, &yyvsp[0].d) ; ;
     break;}
 case 107:
-#line 572 "Gmsh.y"
+#line 560 "Gmsh.y"
 { List_Add(View->TL, &yyvsp[0].d) ; ;
     break;}
 case 108:
-#line 578 "Gmsh.y"
+#line 566 "Gmsh.y"
 { 
       List_Add(View->TL, &yyvsp[-11].d); List_Add(View->TL, &yyvsp[-5].d);
       List_Add(View->TL, &yyvsp[-9].d); List_Add(View->TL, &yyvsp[-3].d);
@@ -3668,21 +3656,21 @@ case 108:
     ;
     break;}
 case 109:
-#line 584 "Gmsh.y"
+#line 572 "Gmsh.y"
 {
       View->NbTL++ ;
     ;
     break;}
 case 110:
-#line 591 "Gmsh.y"
+#line 579 "Gmsh.y"
 { List_Add(View->ST, &yyvsp[0].d) ; ;
     break;}
 case 111:
-#line 593 "Gmsh.y"
+#line 581 "Gmsh.y"
 { List_Add(View->ST, &yyvsp[0].d) ; ;
     break;}
 case 112:
-#line 600 "Gmsh.y"
+#line 588 "Gmsh.y"
 { 
       List_Add(View->ST, &yyvsp[-17].d); List_Add(View->ST, &yyvsp[-11].d);
       List_Add(View->ST, &yyvsp[-5].d);
@@ -3693,21 +3681,21 @@ case 112:
     ;
     break;}
 case 113:
-#line 609 "Gmsh.y"
+#line 597 "Gmsh.y"
 {
       View->NbST++ ;
     ;
     break;}
 case 114:
-#line 616 "Gmsh.y"
+#line 604 "Gmsh.y"
 { List_Add(View->VT, &yyvsp[0].d) ; ;
     break;}
 case 115:
-#line 618 "Gmsh.y"
+#line 606 "Gmsh.y"
 { List_Add(View->VT, &yyvsp[0].d) ; ;
     break;}
 case 116:
-#line 625 "Gmsh.y"
+#line 613 "Gmsh.y"
 { 
       List_Add(View->VT, &yyvsp[-17].d); List_Add(View->VT, &yyvsp[-11].d);
       List_Add(View->VT, &yyvsp[-5].d);
@@ -3718,21 +3706,21 @@ case 116:
     ;
     break;}
 case 117:
-#line 634 "Gmsh.y"
+#line 622 "Gmsh.y"
 {
       View->NbVT++ ;
     ;
     break;}
 case 118:
-#line 641 "Gmsh.y"
+#line 629 "Gmsh.y"
 { List_Add(View->TT, &yyvsp[0].d) ; ;
     break;}
 case 119:
-#line 643 "Gmsh.y"
+#line 631 "Gmsh.y"
 { List_Add(View->TT, &yyvsp[0].d) ; ;
     break;}
 case 120:
-#line 650 "Gmsh.y"
+#line 638 "Gmsh.y"
 { 
       List_Add(View->TT, &yyvsp[-17].d); List_Add(View->TT, &yyvsp[-11].d);
       List_Add(View->TT, &yyvsp[-5].d);
@@ -3743,21 +3731,21 @@ case 120:
     ;
     break;}
 case 121:
-#line 659 "Gmsh.y"
+#line 647 "Gmsh.y"
 {
       View->NbTT++ ;
     ;
     break;}
 case 122:
-#line 666 "Gmsh.y"
+#line 654 "Gmsh.y"
 { List_Add(View->SS, &yyvsp[0].d) ; ;
     break;}
 case 123:
-#line 668 "Gmsh.y"
+#line 656 "Gmsh.y"
 { List_Add(View->SS, &yyvsp[0].d) ; ;
     break;}
 case 124:
-#line 676 "Gmsh.y"
+#line 664 "Gmsh.y"
 { 
       List_Add(View->SS, &yyvsp[-23].d);  List_Add(View->SS, &yyvsp[-17].d);
       List_Add(View->SS, &yyvsp[-11].d); List_Add(View->SS, &yyvsp[-5].d);
@@ -3768,21 +3756,21 @@ case 124:
     ;
     break;}
 case 125:
-#line 685 "Gmsh.y"
+#line 673 "Gmsh.y"
 {
       View->NbSS++ ;
     ;
     break;}
 case 126:
-#line 692 "Gmsh.y"
+#line 680 "Gmsh.y"
 { List_Add(View->VS, &yyvsp[0].d) ; ;
     break;}
 case 127:
-#line 694 "Gmsh.y"
+#line 682 "Gmsh.y"
 { List_Add(View->VS, &yyvsp[0].d) ; ;
     break;}
 case 128:
-#line 702 "Gmsh.y"
+#line 690 "Gmsh.y"
 { 
       List_Add(View->VS, &yyvsp[-23].d);  List_Add(View->VS, &yyvsp[-17].d);
       List_Add(View->VS, &yyvsp[-11].d); List_Add(View->VS, &yyvsp[-5].d);
@@ -3793,21 +3781,21 @@ case 128:
     ;
     break;}
 case 129:
-#line 711 "Gmsh.y"
+#line 699 "Gmsh.y"
 {
       View->NbVS++ ;
     ;
     break;}
 case 130:
-#line 718 "Gmsh.y"
+#line 706 "Gmsh.y"
 { List_Add(View->TS, &yyvsp[0].d) ; ;
     break;}
 case 131:
-#line 720 "Gmsh.y"
+#line 708 "Gmsh.y"
 { List_Add(View->TS, &yyvsp[0].d) ; ;
     break;}
 case 132:
-#line 728 "Gmsh.y"
+#line 716 "Gmsh.y"
 { 
       List_Add(View->TS, &yyvsp[-23].d);  List_Add(View->TS, &yyvsp[-17].d);
       List_Add(View->TS, &yyvsp[-11].d); List_Add(View->TS, &yyvsp[-5].d);
@@ -3818,27 +3806,27 @@ case 132:
     ;
     break;}
 case 133:
-#line 737 "Gmsh.y"
+#line 725 "Gmsh.y"
 {
       View->NbTS++ ;
     ;
     break;}
 case 134:
-#line 744 "Gmsh.y"
+#line 732 "Gmsh.y"
 { 
       for(i=0; i<(int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T2C, &yyvsp[0].c[i]) ; 
       Free(yyvsp[0].c);
     ;
     break;}
 case 135:
-#line 749 "Gmsh.y"
+#line 737 "Gmsh.y"
 { 
       for(i=0; i<(int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T2C, &yyvsp[0].c[i]) ; 
       Free(yyvsp[0].c);
     ;
     break;}
 case 136:
-#line 757 "Gmsh.y"
+#line 745 "Gmsh.y"
 { 
       List_Add(View->T2D, &yyvsp[-5].d); List_Add(View->T2D, &yyvsp[-3].d);
       List_Add(View->T2D, &yyvsp[-1].d); 
@@ -3847,27 +3835,27 @@ case 136:
     ;
     break;}
 case 137:
-#line 764 "Gmsh.y"
+#line 752 "Gmsh.y"
 {
       View->NbT2++ ;
     ;
     break;}
 case 138:
-#line 771 "Gmsh.y"
+#line 759 "Gmsh.y"
 { 
       for(i=0; i<(int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T3C, &yyvsp[0].c[i]) ; 
       Free(yyvsp[0].c);
     ;
     break;}
 case 139:
-#line 776 "Gmsh.y"
+#line 764 "Gmsh.y"
 { 
       for(i=0; i<(int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T3C, &yyvsp[0].c[i]) ; 
       Free(yyvsp[0].c);
     ;
     break;}
 case 140:
-#line 784 "Gmsh.y"
+#line 772 "Gmsh.y"
 { 
       List_Add(View->T3D, &yyvsp[-7].d); List_Add(View->T3D, &yyvsp[-5].d);
       List_Add(View->T3D, &yyvsp[-3].d); List_Add(View->T3D, &yyvsp[-1].d); 
@@ -3876,41 +3864,41 @@ case 140:
     ;
     break;}
 case 141:
-#line 791 "Gmsh.y"
+#line 779 "Gmsh.y"
 {
       View->NbT3++ ;
     ;
     break;}
 case 142:
-#line 802 "Gmsh.y"
+#line 790 "Gmsh.y"
 { yyval.i = 0 ; ;
     break;}
 case 143:
-#line 803 "Gmsh.y"
+#line 791 "Gmsh.y"
 { yyval.i = 1 ; ;
     break;}
 case 144:
-#line 804 "Gmsh.y"
+#line 792 "Gmsh.y"
 { yyval.i = 2 ; ;
     break;}
 case 145:
-#line 805 "Gmsh.y"
+#line 793 "Gmsh.y"
 { yyval.i = 3 ; ;
     break;}
 case 146:
-#line 806 "Gmsh.y"
+#line 794 "Gmsh.y"
 { yyval.i = 4 ; ;
     break;}
 case 147:
-#line 809 "Gmsh.y"
+#line 797 "Gmsh.y"
 { yyval.i = 1 ; ;
     break;}
 case 148:
-#line 810 "Gmsh.y"
+#line 798 "Gmsh.y"
 { yyval.i = -1 ; ;
     break;}
 case 149:
-#line 817 "Gmsh.y"
+#line 805 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-3].c;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))){
@@ -3938,7 +3926,7 @@ case 149:
     ;
     break;}
 case 150:
-#line 844 "Gmsh.y"
+#line 832 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-6].c;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))){
@@ -3973,7 +3961,7 @@ case 150:
     ;
     break;}
 case 151:
-#line 878 "Gmsh.y"
+#line 866 "Gmsh.y"
 {
       if(List_Nbr(yyvsp[-5].l) != List_Nbr(yyvsp[-1].l))
 	vyyerror("Incompatible array dimensions in affectation");
@@ -4021,7 +4009,7 @@ case 151:
     ;
     break;}
 case 152:
-#line 925 "Gmsh.y"
+#line 913 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-5].c;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))){
@@ -4037,7 +4025,7 @@ case 152:
     ;
     break;}
 case 153:
-#line 940 "Gmsh.y"
+#line 928 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-2].c;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
@@ -4047,7 +4035,7 @@ case 153:
     ;
     break;}
 case 154:
-#line 949 "Gmsh.y"
+#line 937 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-5].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols)))
@@ -4061,7 +4049,7 @@ case 154:
     ;
     break;}
 case 155:
-#line 964 "Gmsh.y"
+#line 952 "Gmsh.y"
 { 
       if(!(pStrCat = Get_StringOptionCategory(yyvsp[-5].c)))
 	vyyerror("Unknown string option class '%s'", yyvsp[-5].c);
@@ -4074,7 +4062,7 @@ case 155:
     ;
     break;}
 case 156:
-#line 976 "Gmsh.y"
+#line 964 "Gmsh.y"
 { 
       if(!(pStrCat = Get_StringOptionCategory(yyvsp[-8].c)))
 	vyyerror("Unknown string option class '%s'", yyvsp[-8].c);
@@ -4087,7 +4075,7 @@ case 156:
     ;
     break;}
 case 157:
-#line 990 "Gmsh.y"
+#line 978 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-5].c)))
 	vyyerror("Unknown numeric option class '%s'", yyvsp[-5].c);
@@ -4111,7 +4099,7 @@ case 157:
     ;
     break;}
 case 158:
-#line 1013 "Gmsh.y"
+#line 1001 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-8].c)))
 	vyyerror("Unknown numeric option class '%s'", yyvsp[-8].c);
@@ -4136,7 +4124,7 @@ case 158:
     ;
     break;}
 case 159:
-#line 1037 "Gmsh.y"
+#line 1025 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-4].c)))
 	vyyerror("Unknown numeric option class '%s'", yyvsp[-4].c);
@@ -4149,7 +4137,7 @@ case 159:
     ;
     break;}
 case 160:
-#line 1049 "Gmsh.y"
+#line 1037 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-7].c)))
 	vyyerror("Unknown numeric option class '%s'", yyvsp[-7].c);
@@ -4162,7 +4150,7 @@ case 160:
     ;
     break;}
 case 161:
-#line 1063 "Gmsh.y"
+#line 1051 "Gmsh.y"
 {
       if(!(pColCat = Get_ColorOptionCategory(yyvsp[-7].c)))
 	vyyerror("Unknown color option class '%s'", yyvsp[-7].c);
@@ -4175,7 +4163,7 @@ case 161:
     ;
     break;}
 case 162:
-#line 1075 "Gmsh.y"
+#line 1063 "Gmsh.y"
 {
       if(!(pColCat = Get_ColorOptionCategory(yyvsp[-10].c)))
 	vyyerror("Unknown color option class '%s'", yyvsp[-10].c);
@@ -4188,7 +4176,7 @@ case 162:
     ;
     break;}
 case 163:
-#line 1089 "Gmsh.y"
+#line 1077 "Gmsh.y"
 {
       ColorTable *ct = Get_ColorTable(0);
       if(!ct)
@@ -4205,7 +4193,7 @@ case 163:
     ;
     break;}
 case 164:
-#line 1105 "Gmsh.y"
+#line 1093 "Gmsh.y"
 {
       ColorTable *ct = Get_ColorTable((int)yyvsp[-6].d);
       if(!ct)
@@ -4222,7 +4210,7 @@ case 164:
     ;
     break;}
 case 165:
-#line 1121 "Gmsh.y"
+#line 1109 "Gmsh.y"
 {
 #ifndef _NOPLUGIN
     if(CTX.default_plugins){
@@ -4237,7 +4225,7 @@ case 165:
   ;
     break;}
 case 166:
-#line 1134 "Gmsh.y"
+#line 1122 "Gmsh.y"
 {
 #ifndef _NOPLUGIN
     if(CTX.default_plugins){
@@ -4252,7 +4240,7 @@ case 166:
   ;
     break;}
 case 167:
-#line 1158 "Gmsh.y"
+#line 1146 "Gmsh.y"
 {
       Cdbpts101((int)yyvsp[-4].d,yyvsp[-1].v[0],yyvsp[-1].v[1],yyvsp[-1].v[2],yyvsp[-1].v[3],yyvsp[-1].v[4]);
       yyval.s.Type = MSH_POINT;
@@ -4260,7 +4248,7 @@ case 167:
     ;
     break;}
 case 168:
-#line 1165 "Gmsh.y"
+#line 1153 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_POINT,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_PHYSICAL_POINT;
@@ -4268,7 +4256,7 @@ case 168:
     ;
     break;}
 case 169:
-#line 1171 "Gmsh.y"
+#line 1159 "Gmsh.y"
 {
       Vertex *v;
       Attractor *a;
@@ -4289,7 +4277,7 @@ case 169:
     ;
     break;}
 case 170:
-#line 1190 "Gmsh.y"
+#line 1178 "Gmsh.y"
 {
       for(i=0;i<List_Nbr(yyvsp[-3].l);i++){
 	List_Read(yyvsp[-3].l,i,&d);
@@ -4302,14 +4290,14 @@ case 170:
     ;
     break;}
 case 171:
-#line 1201 "Gmsh.y"
+#line 1189 "Gmsh.y"
 {
       yyval.s.Type = MSH_POINT;
       yyval.s.Num  = (int)yyvsp[-2].d;
     ;
     break;}
 case 172:
-#line 1209 "Gmsh.y"
+#line 1197 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_LINE,1,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
       yyval.s.Type = MSH_SEGM_LINE;
@@ -4317,7 +4305,7 @@ case 172:
     ;
     break;}
 case 173:
-#line 1215 "Gmsh.y"
+#line 1203 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_SPLN,3,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
       yyval.s.Type = MSH_SEGM_SPLN;
@@ -4325,7 +4313,7 @@ case 173:
     ;
     break;}
 case 174:
-#line 1221 "Gmsh.y"
+#line 1209 "Gmsh.y"
 {
       Curve *c;
       Attractor *a;
@@ -4346,7 +4334,7 @@ case 174:
     ;
     break;}
 case 175:
-#line 1240 "Gmsh.y"
+#line 1228 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_CIRC,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
       yyval.s.Type = MSH_SEGM_CIRC ;
@@ -4354,7 +4342,7 @@ case 175:
     ;
     break;}
 case 176:
-#line 1246 "Gmsh.y"
+#line 1234 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_ELLI,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
       yyval.s.Type = MSH_SEGM_ELLI ;
@@ -4362,7 +4350,7 @@ case 176:
     ;
     break;}
 case 177:
-#line 1252 "Gmsh.y"
+#line 1240 "Gmsh.y"
 {
       List_T *temp;
       int i,j;
@@ -4380,7 +4368,7 @@ case 177:
     ;
     break;}
 case 178:
-#line 1269 "Gmsh.y"
+#line 1257 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-14].d,MSH_SEGM_PARAMETRIC,2,NULL,NULL,-1,-1,yyvsp[-10].d,yyvsp[-8].d,yyvsp[-6].c,yyvsp[-4].c,yyvsp[-2].c);
       yyval.s.Type = MSH_SEGM_PARAMETRIC ;
@@ -4388,7 +4376,7 @@ case 178:
     ;
     break;}
 case 179:
-#line 1275 "Gmsh.y"
+#line 1263 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_LINE,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_PHYSICAL_LINE;
@@ -4396,7 +4384,7 @@ case 179:
     ;
     break;}
 case 180:
-#line 1281 "Gmsh.y"
+#line 1269 "Gmsh.y"
 {
       yyval.s.Type = MSH_SEGM_LOOP;
       Cdbz101((int)yyvsp[-4].d,yyval.s.Type,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
@@ -4404,7 +4392,7 @@ case 180:
     ;
     break;}
 case 181:
-#line 1287 "Gmsh.y"
+#line 1275 "Gmsh.y"
 {
       if(List_Nbr(yyvsp[-1].l) > 3){
 	Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_BSPLN,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
@@ -4417,7 +4405,7 @@ case 181:
     ;
     break;}
 case 182:
-#line 1298 "Gmsh.y"
+#line 1286 "Gmsh.y"
 {
       if(List_Nbr(yyvsp[-1].l) > 3){
 	Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_BEZIER,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
@@ -4430,7 +4418,7 @@ case 182:
     ;
     break;}
 case 183:
-#line 1309 "Gmsh.y"
+#line 1297 "Gmsh.y"
 {
       List_T *Temp;
       int i;
@@ -4454,7 +4442,7 @@ case 183:
     ;
     break;}
 case 184:
-#line 1331 "Gmsh.y"
+#line 1319 "Gmsh.y"
 {
       yyval.s.Num = (int)yyvsp[-2].d;
       Curve *c = FindCurve(yyval.s.Num,THEM);
@@ -4465,7 +4453,7 @@ case 184:
     ;
     break;}
 case 185:
-#line 1343 "Gmsh.y"
+#line 1331 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_SURF_PLAN,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_SURF_PLAN;
@@ -4473,7 +4461,7 @@ case 185:
     ;
     break;}
 case 186:
-#line 1349 "Gmsh.y"
+#line 1337 "Gmsh.y"
 {
       Surface *s,*support;
       support = FindSurface((int)yyvsp[-4].d,THEM);
@@ -4494,7 +4482,7 @@ case 186:
     ;
     break;}
 case 187:
-#line 1368 "Gmsh.y"
+#line 1356 "Gmsh.y"
 {
       List_Read(yyvsp[-1].l,0,&d);
       i = (int)d;
@@ -4517,7 +4505,7 @@ case 187:
     ;
     break;}
 case 188:
-#line 1391 "Gmsh.y"
+#line 1379 "Gmsh.y"
 {
       CreateNurbsSurface ( (int) yyvsp[-16].d , (int)yyvsp[-4].d , (int)yyvsp[-2].d  , yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l);
       yyval.s.Type  = MSH_SURF_NURBS;
@@ -4525,13 +4513,13 @@ case 188:
     ;
     break;}
 case 189:
-#line 1399 "Gmsh.y"
+#line 1387 "Gmsh.y"
 {
       CreateNurbsSurfaceSupport ((int)yyvsp[-16].d, (int) yyvsp[-4].d , (int) yyvsp[-2].d , yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l);
     ;
     break;}
 case 190:
-#line 1403 "Gmsh.y"
+#line 1391 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_SURFACE,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_PHYSICAL_SURFACE;
@@ -4539,7 +4527,7 @@ case 190:
     ;
     break;}
 case 191:
-#line 1409 "Gmsh.y"
+#line 1397 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_SURF_LOOP,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_SURF_LOOP;
@@ -4547,7 +4535,7 @@ case 191:
     ;
     break;}
 case 192:
-#line 1415 "Gmsh.y"
+#line 1403 "Gmsh.y"
 {
       yyval.s.Num = (int)yyvsp[-2].d;
       Surface *s = FindSurface(yyval.s.Num,THEM);
@@ -4558,7 +4546,7 @@ case 192:
      ;
     break;}
 case 193:
-#line 1427 "Gmsh.y"
+#line 1415 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_VOLUME,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_VOLUME;
@@ -4566,7 +4554,7 @@ case 193:
     ;
     break;}
 case 194:
-#line 1433 "Gmsh.y"
+#line 1421 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_VOLUME,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_VOLUME;
@@ -4574,7 +4562,7 @@ case 194:
     ;
     break;}
 case 195:
-#line 1439 "Gmsh.y"
+#line 1427 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_VOLUME,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_PHYSICAL_VOLUME;
@@ -4582,60 +4570,60 @@ case 195:
     ;
     break;}
 case 196:
-#line 1452 "Gmsh.y"
+#line 1440 "Gmsh.y"
 {
       TranslateShapes (yyvsp[-3].v[0],yyvsp[-3].v[1],yyvsp[-3].v[2],yyvsp[-1].l,1);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 197:
-#line 1457 "Gmsh.y"
+#line 1445 "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 198:
-#line 1462 "Gmsh.y"
+#line 1450 "Gmsh.y"
 {
       SymmetryShapes(yyvsp[-3].v[0],yyvsp[-3].v[1],yyvsp[-3].v[2],yyvsp[-3].v[3],yyvsp[-1].l,1);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 199:
-#line 1467 "Gmsh.y"
+#line 1455 "Gmsh.y"
 {
       DilatShapes(yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].d,yyvsp[-1].l,1);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 200:
-#line 1474 "Gmsh.y"
+#line 1462 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
 case 201:
-#line 1475 "Gmsh.y"
+#line 1463 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
 case 202:
-#line 1476 "Gmsh.y"
+#line 1464 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
 case 203:
-#line 1481 "Gmsh.y"
+#line 1469 "Gmsh.y"
 {
       yyval.l = List_Create(3,3,sizeof(Shape));
     ;
     break;}
 case 204:
-#line 1485 "Gmsh.y"
+#line 1473 "Gmsh.y"
 {
       List_Add(yyval.l,&yyvsp[0].s);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 205:
-#line 1497 "Gmsh.y"
+#line 1485 "Gmsh.y"
 {
       yyval.l = List_Create(3,3,sizeof(Shape));
       for(i=0;i<List_Nbr(yyvsp[-1].l);i++){
@@ -4647,7 +4635,7 @@ case 205:
     ;
     break;}
 case 206:
-#line 1515 "Gmsh.y"
+#line 1503 "Gmsh.y"
 {
       for(i=0;i<List_Nbr(yyvsp[-1].l);i++){
 	List_Read (yyvsp[-1].l,i,&TheShape);
@@ -4656,20 +4644,20 @@ case 206:
     ;
     break;}
 case 207:
-#line 1522 "Gmsh.y"
+#line 1510 "Gmsh.y"
 {
 	if(!strcmp(yyvsp[-4].c, "View"))
 	  FreeView((int)yyvsp[-2].d);
       ;
     break;}
 case 208:
-#line 1527 "Gmsh.y"
+#line 1515 "Gmsh.y"
 {
       Init_Mesh(THEM, 1);
     ;
     break;}
 case 209:
-#line 1539 "Gmsh.y"
+#line 1527 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-2].c, "Include")){
 
@@ -4738,7 +4726,7 @@ case 209:
     ;
     break;}
 case 210:
-#line 1606 "Gmsh.y"
+#line 1594 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-2].c, "Sleep")){
 
@@ -4760,7 +4748,7 @@ case 210:
     ;
     break;}
 case 211:
-#line 1626 "Gmsh.y"
+#line 1614 "Gmsh.y"
 {
 #ifndef _NOPLUGIN
     if(CTX.default_plugins)
@@ -4769,13 +4757,13 @@ case 211:
    ;
     break;}
 case 212:
-#line 1633 "Gmsh.y"
+#line 1621 "Gmsh.y"
 {
       exit(0);
     ;
     break;}
 case 213:
-#line 1637 "Gmsh.y"
+#line 1625 "Gmsh.y"
 {
       if(!CTX.batch){ // we're in interactive mode
 	if(Tree_Nbr(THEM->Points) != Last_NumberOfPoints){
@@ -4791,7 +4779,7 @@ case 213:
     ;
     break;}
 case 214:
-#line 1659 "Gmsh.y"
+#line 1647 "Gmsh.y"
 {
       // here, we seek remember the position in yyin
       LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d ;
@@ -4804,7 +4792,7 @@ case 214:
     ;
     break;}
 case 215:
-#line 1670 "Gmsh.y"
+#line 1658 "Gmsh.y"
 {
       // here, we seek remember the position in yyin
       LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d ;
@@ -4817,7 +4805,7 @@ case 215:
     ;
     break;}
 case 216:
-#line 1681 "Gmsh.y"
+#line 1669 "Gmsh.y"
 {
       // here, we seek remember the position in yyin
       LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d ;
@@ -4841,7 +4829,7 @@ case 216:
     ;
     break;}
 case 217:
-#line 1703 "Gmsh.y"
+#line 1691 "Gmsh.y"
 {
       // here, we seek remember the position in yyin
       LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d ;
@@ -4865,7 +4853,7 @@ case 217:
     ;
     break;}
 case 218:
-#line 1725 "Gmsh.y"
+#line 1713 "Gmsh.y"
 {
       if(LoopControlVariablesTab[ImbricatedLoop-1][1] >  
 	 LoopControlVariablesTab[ImbricatedLoop-1][0]){
@@ -4888,7 +4876,7 @@ case 218:
     ;
     break;}
 case 219:
-#line 1746 "Gmsh.y"
+#line 1734 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->createFunction(yyvsp[0].c,yyin,yyname,yylineno))
 	vyyerror("Redefinition of function %s",yyvsp[0].c);
@@ -4896,39 +4884,39 @@ case 219:
     ;
     break;}
 case 220:
-#line 1752 "Gmsh.y"
+#line 1740 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->leaveFunction(&yyin,yyname,yylineno))
 	vyyerror("Error while exiting function");
     ;
     break;}
 case 221:
-#line 1757 "Gmsh.y"
+#line 1745 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->enterFunction(yyvsp[-1].c,&yyin,yyname,yylineno))
 	vyyerror("Unknown function %s",yyvsp[-1].c);
     ;
     break;}
 case 222:
-#line 1762 "Gmsh.y"
+#line 1750 "Gmsh.y"
 {
       if(!yyvsp[-1].d) skip_until("If", "EndIf");
     ;
     break;}
 case 223:
-#line 1766 "Gmsh.y"
+#line 1754 "Gmsh.y"
 {
     ;
     break;}
 case 224:
-#line 1778 "Gmsh.y"
+#line 1766 "Gmsh.y"
 {
       Curve *pc, *prc;
       Extrude_ProtudePoint(1,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],0.,0.,0.,0.,&pc,&prc,NULL);
     ;
     break;}
 case 225:
-#line 1783 "Gmsh.y"
+#line 1771 "Gmsh.y"
 {
       Curve *pc, *prc;
       Extrude_ProtudePoint(0,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,
@@ -4936,95 +4924,95 @@ case 225:
     ;
     break;}
 case 226:
-#line 1792 "Gmsh.y"
+#line 1780 "Gmsh.y"
 {
       Extrude_ProtudeCurve(1,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],0.,0.,0.,0.,NULL);
     ;
     break;}
 case 227:
-#line 1796 "Gmsh.y"
+#line 1784 "Gmsh.y"
 {
       Extrude_ProtudeCurve(0,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,NULL);
     ;
     break;}
 case 228:
-#line 1800 "Gmsh.y"
+#line 1788 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 229:
-#line 1805 "Gmsh.y"
+#line 1793 "Gmsh.y"
 {
       Extrude_ProtudeCurve(1,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],0.,0.,0.,0.,&extr);
     ;
     break;}
 case 230:
-#line 1809 "Gmsh.y"
+#line 1797 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 231:
-#line 1814 "Gmsh.y"
+#line 1802 "Gmsh.y"
 {
       Extrude_ProtudeCurve(0,(int)yyvsp[-12].d,yyvsp[-10].v[0],yyvsp[-10].v[1],yyvsp[-10].v[2],yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],yyvsp[-6].d,&extr);
     ;
     break;}
 case 232:
-#line 1821 "Gmsh.y"
+#line 1809 "Gmsh.y"
 {
       Extrude_ProtudeSurface(1,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],0.,0.,0.,0.,0,NULL);
     ;
     break;}
 case 233:
-#line 1825 "Gmsh.y"
+#line 1813 "Gmsh.y"
 {
       Extrude_ProtudeSurface(0,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,0,NULL);
     ;
     break;}
 case 234:
-#line 1829 "Gmsh.y"
+#line 1817 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 235:
-#line 1834 "Gmsh.y"
+#line 1822 "Gmsh.y"
 {
       int vol = NEWREG();
       Extrude_ProtudeSurface(1,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],0.,0.,0.,0.,vol,&extr);
     ;
     break;}
 case 236:
-#line 1839 "Gmsh.y"
+#line 1827 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 237:
-#line 1845 "Gmsh.y"
+#line 1833 "Gmsh.y"
 {
       int vol = NEWREG();
       Extrude_ProtudeSurface(0,(int)yyvsp[-12].d,yyvsp[-10].v[0],yyvsp[-10].v[1],yyvsp[-10].v[2],yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],yyvsp[-6].d,vol,&extr);
     ;
     break;}
 case 238:
-#line 1853 "Gmsh.y"
+#line 1841 "Gmsh.y"
 {
     ;
     break;}
 case 239:
-#line 1856 "Gmsh.y"
+#line 1844 "Gmsh.y"
 {
     ;
     break;}
 case 240:
-#line 1862 "Gmsh.y"
+#line 1850 "Gmsh.y"
 {
       double d;
       extr.mesh.ExtrudeMesh = true;
@@ -5052,7 +5040,7 @@ case 240:
     ;
     break;}
 case 241:
-#line 1888 "Gmsh.y"
+#line 1876 "Gmsh.y"
 {
       double d;
       extr.mesh.ExtrudeMesh = true;
@@ -5078,13 +5066,13 @@ case 241:
     ;
     break;}
 case 242:
-#line 1912 "Gmsh.y"
+#line 1900 "Gmsh.y"
 {
       extr.mesh.Recombine = true;
     ;
     break;}
 case 243:
-#line 1923 "Gmsh.y"
+#line 1911 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-3].l);i++){
@@ -5104,7 +5092,7 @@ case 243:
     ;
     break;}
 case 244:
-#line 1941 "Gmsh.y"
+#line 1929 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-6].l);i++){
@@ -5124,7 +5112,7 @@ case 244:
     ;
     break;}
 case 245:
-#line 1959 "Gmsh.y"
+#line 1947 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-6].l);i++){
@@ -5144,7 +5132,7 @@ case 245:
     ;
     break;}
 case 246:
-#line 1977 "Gmsh.y"
+#line 1965 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d,THEM);
       if(!s)
@@ -5168,7 +5156,7 @@ case 246:
     ;
     break;}
 case 247:
-#line 1999 "Gmsh.y"
+#line 1987 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d,THEM);
       if(!s)
@@ -5191,7 +5179,7 @@ case 247:
     ;
     break;}
 case 248:
-#line 2020 "Gmsh.y"
+#line 2008 "Gmsh.y"
 {
       Volume *v = FindVolume((int)yyvsp[-4].d,THEM);
       if(!v)
@@ -5214,7 +5202,7 @@ case 248:
     ;
     break;}
 case 249:
-#line 2041 "Gmsh.y"
+#line 2029 "Gmsh.y"
 {
       Surface *s;
       for(i=0;i<List_Nbr(yyvsp[-3].l);i++){
@@ -5230,7 +5218,7 @@ case 249:
     ;
     break;}
 case 250:
-#line 2055 "Gmsh.y"
+#line 2043 "Gmsh.y"
 {
       Surface *s;
       for(i=0;i<List_Nbr(yyvsp[-1].l);i++){
@@ -5246,71 +5234,71 @@ case 250:
     ;
     break;}
 case 251:
-#line 2077 "Gmsh.y"
+#line 2065 "Gmsh.y"
 { 
       Coherence_PS();
     ;
     break;}
 case 252:
-#line 2081 "Gmsh.y"
+#line 2069 "Gmsh.y"
 { 
       IntersectAllSegmentsTogether();
     ;
     break;}
 case 253:
-#line 2092 "Gmsh.y"
+#line 2080 "Gmsh.y"
 {yyval.i = 1;;
     break;}
 case 254:
-#line 2093 "Gmsh.y"
+#line 2081 "Gmsh.y"
 {yyval.i = 0;;
     break;}
 case 255:
-#line 2094 "Gmsh.y"
+#line 2082 "Gmsh.y"
 {yyval.i = -1;;
     break;}
 case 256:
-#line 2095 "Gmsh.y"
+#line 2083 "Gmsh.y"
 {yyval.i = -1;;
     break;}
 case 257:
-#line 2096 "Gmsh.y"
+#line 2084 "Gmsh.y"
 {yyval.i = -1;;
     break;}
 case 258:
-#line 2100 "Gmsh.y"
+#line 2088 "Gmsh.y"
 { yyval.d = yyvsp[0].d;           ;
     break;}
 case 259:
-#line 2101 "Gmsh.y"
+#line 2089 "Gmsh.y"
 { yyval.d = yyvsp[-1].d ;          ;
     break;}
 case 260:
-#line 2102 "Gmsh.y"
+#line 2090 "Gmsh.y"
 { yyval.d = -yyvsp[0].d ;         ;
     break;}
 case 261:
-#line 2103 "Gmsh.y"
+#line 2091 "Gmsh.y"
 { yyval.d = yyvsp[0].d;           ;
     break;}
 case 262:
-#line 2104 "Gmsh.y"
+#line 2092 "Gmsh.y"
 { yyval.d = !yyvsp[0].d ;         ;
     break;}
 case 263:
-#line 2105 "Gmsh.y"
+#line 2093 "Gmsh.y"
 { yyval.d = yyvsp[-2].d - yyvsp[0].d ;     ;
     break;}
 case 264:
-#line 2106 "Gmsh.y"
+#line 2094 "Gmsh.y"
 { yyval.d = yyvsp[-2].d + yyvsp[0].d ;     ;
     break;}
 case 265:
-#line 2107 "Gmsh.y"
+#line 2095 "Gmsh.y"
 { yyval.d = yyvsp[-2].d * yyvsp[0].d ;     ;
     break;}
 case 266:
-#line 2109 "Gmsh.y"
+#line 2097 "Gmsh.y"
 { 
       if(!yyvsp[0].d)
 	vyyerror("Division by zero in '%g / %g'", yyvsp[-2].d, yyvsp[0].d);
@@ -5319,235 +5307,235 @@ case 266:
     ;
     break;}
 case 267:
-#line 2115 "Gmsh.y"
+#line 2103 "Gmsh.y"
 { yyval.d = (int)yyvsp[-2].d % (int)yyvsp[0].d ;  ;
     break;}
 case 268:
-#line 2116 "Gmsh.y"
+#line 2104 "Gmsh.y"
 { yyval.d = pow(yyvsp[-2].d,yyvsp[0].d) ;  ;
     break;}
 case 269:
-#line 2117 "Gmsh.y"
+#line 2105 "Gmsh.y"
 { yyval.d = yyvsp[-2].d < yyvsp[0].d ;     ;
     break;}
 case 270:
-#line 2118 "Gmsh.y"
+#line 2106 "Gmsh.y"
 { yyval.d = yyvsp[-2].d > yyvsp[0].d ;     ;
     break;}
 case 271:
-#line 2119 "Gmsh.y"
+#line 2107 "Gmsh.y"
 { yyval.d = yyvsp[-2].d <= yyvsp[0].d ;    ;
     break;}
 case 272:
-#line 2120 "Gmsh.y"
+#line 2108 "Gmsh.y"
 { yyval.d = yyvsp[-2].d >= yyvsp[0].d ;    ;
     break;}
 case 273:
-#line 2121 "Gmsh.y"
+#line 2109 "Gmsh.y"
 { yyval.d = yyvsp[-2].d == yyvsp[0].d ;    ;
     break;}
 case 274:
-#line 2122 "Gmsh.y"
+#line 2110 "Gmsh.y"
 { yyval.d = yyvsp[-2].d != yyvsp[0].d ;    ;
     break;}
 case 275:
-#line 2123 "Gmsh.y"
+#line 2111 "Gmsh.y"
 { yyval.d = yyvsp[-2].d && yyvsp[0].d ;    ;
     break;}
 case 276:
-#line 2124 "Gmsh.y"
+#line 2112 "Gmsh.y"
 { yyval.d = yyvsp[-2].d || yyvsp[0].d ;    ;
     break;}
 case 277:
-#line 2125 "Gmsh.y"
+#line 2113 "Gmsh.y"
 { yyval.d = yyvsp[-4].d? yyvsp[-2].d : yyvsp[0].d ; ;
     break;}
 case 278:
-#line 2126 "Gmsh.y"
+#line 2114 "Gmsh.y"
 { yyval.d = exp(yyvsp[-1].d);      ;
     break;}
 case 279:
-#line 2127 "Gmsh.y"
+#line 2115 "Gmsh.y"
 { yyval.d = log(yyvsp[-1].d);      ;
     break;}
 case 280:
-#line 2128 "Gmsh.y"
+#line 2116 "Gmsh.y"
 { yyval.d = log10(yyvsp[-1].d);    ;
     break;}
 case 281:
-#line 2129 "Gmsh.y"
+#line 2117 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-1].d);     ;
     break;}
 case 282:
-#line 2130 "Gmsh.y"
+#line 2118 "Gmsh.y"
 { yyval.d = sin(yyvsp[-1].d);      ;
     break;}
 case 283:
-#line 2131 "Gmsh.y"
+#line 2119 "Gmsh.y"
 { yyval.d = asin(yyvsp[-1].d);     ;
     break;}
 case 284:
-#line 2132 "Gmsh.y"
+#line 2120 "Gmsh.y"
 { yyval.d = cos(yyvsp[-1].d);      ;
     break;}
 case 285:
-#line 2133 "Gmsh.y"
+#line 2121 "Gmsh.y"
 { yyval.d = acos(yyvsp[-1].d);     ;
     break;}
 case 286:
-#line 2134 "Gmsh.y"
+#line 2122 "Gmsh.y"
 { yyval.d = tan(yyvsp[-1].d);      ;
     break;}
 case 287:
-#line 2135 "Gmsh.y"
+#line 2123 "Gmsh.y"
 { yyval.d = atan(yyvsp[-1].d);     ;
     break;}
 case 288:
-#line 2136 "Gmsh.y"
+#line 2124 "Gmsh.y"
 { yyval.d = atan2(yyvsp[-3].d,yyvsp[-1].d); ;
     break;}
 case 289:
-#line 2137 "Gmsh.y"
+#line 2125 "Gmsh.y"
 { yyval.d = sinh(yyvsp[-1].d);     ;
     break;}
 case 290:
-#line 2138 "Gmsh.y"
+#line 2126 "Gmsh.y"
 { yyval.d = cosh(yyvsp[-1].d);     ;
     break;}
 case 291:
-#line 2139 "Gmsh.y"
+#line 2127 "Gmsh.y"
 { yyval.d = tanh(yyvsp[-1].d);     ;
     break;}
 case 292:
-#line 2140 "Gmsh.y"
+#line 2128 "Gmsh.y"
 { yyval.d = fabs(yyvsp[-1].d);     ;
     break;}
 case 293:
-#line 2141 "Gmsh.y"
+#line 2129 "Gmsh.y"
 { yyval.d = floor(yyvsp[-1].d);    ;
     break;}
 case 294:
-#line 2142 "Gmsh.y"
+#line 2130 "Gmsh.y"
 { yyval.d = ceil(yyvsp[-1].d);     ;
     break;}
 case 295:
-#line 2143 "Gmsh.y"
+#line 2131 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
 case 296:
-#line 2144 "Gmsh.y"
+#line 2132 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
 case 297:
-#line 2145 "Gmsh.y"
+#line 2133 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
     break;}
 case 298:
-#line 2146 "Gmsh.y"
+#line 2134 "Gmsh.y"
 { yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
     break;}
 case 299:
-#line 2148 "Gmsh.y"
+#line 2136 "Gmsh.y"
 { yyval.d = exp(yyvsp[-1].d);      ;
     break;}
 case 300:
-#line 2149 "Gmsh.y"
+#line 2137 "Gmsh.y"
 { yyval.d = log(yyvsp[-1].d);      ;
     break;}
 case 301:
-#line 2150 "Gmsh.y"
+#line 2138 "Gmsh.y"
 { yyval.d = log10(yyvsp[-1].d);    ;
     break;}
 case 302:
-#line 2151 "Gmsh.y"
+#line 2139 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-1].d);     ;
     break;}
 case 303:
-#line 2152 "Gmsh.y"
+#line 2140 "Gmsh.y"
 { yyval.d = sin(yyvsp[-1].d);      ;
     break;}
 case 304:
-#line 2153 "Gmsh.y"
+#line 2141 "Gmsh.y"
 { yyval.d = asin(yyvsp[-1].d);     ;
     break;}
 case 305:
-#line 2154 "Gmsh.y"
+#line 2142 "Gmsh.y"
 { yyval.d = cos(yyvsp[-1].d);      ;
     break;}
 case 306:
-#line 2155 "Gmsh.y"
+#line 2143 "Gmsh.y"
 { yyval.d = acos(yyvsp[-1].d);     ;
     break;}
 case 307:
-#line 2156 "Gmsh.y"
+#line 2144 "Gmsh.y"
 { yyval.d = tan(yyvsp[-1].d);      ;
     break;}
 case 308:
-#line 2157 "Gmsh.y"
+#line 2145 "Gmsh.y"
 { yyval.d = atan(yyvsp[-1].d);     ;
     break;}
 case 309:
-#line 2158 "Gmsh.y"
+#line 2146 "Gmsh.y"
 { yyval.d = atan2(yyvsp[-3].d,yyvsp[-1].d); ;
     break;}
 case 310:
-#line 2159 "Gmsh.y"
+#line 2147 "Gmsh.y"
 { yyval.d = sinh(yyvsp[-1].d);     ;
     break;}
 case 311:
-#line 2160 "Gmsh.y"
+#line 2148 "Gmsh.y"
 { yyval.d = cosh(yyvsp[-1].d);     ;
     break;}
 case 312:
-#line 2161 "Gmsh.y"
+#line 2149 "Gmsh.y"
 { yyval.d = tanh(yyvsp[-1].d);     ;
     break;}
 case 313:
-#line 2162 "Gmsh.y"
+#line 2150 "Gmsh.y"
 { yyval.d = fabs(yyvsp[-1].d);     ;
     break;}
 case 314:
-#line 2163 "Gmsh.y"
+#line 2151 "Gmsh.y"
 { yyval.d = floor(yyvsp[-1].d);    ;
     break;}
 case 315:
-#line 2164 "Gmsh.y"
+#line 2152 "Gmsh.y"
 { yyval.d = ceil(yyvsp[-1].d);     ;
     break;}
 case 316:
-#line 2165 "Gmsh.y"
+#line 2153 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
 case 317:
-#line 2166 "Gmsh.y"
+#line 2154 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
 case 318:
-#line 2167 "Gmsh.y"
+#line 2155 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
     break;}
 case 319:
-#line 2168 "Gmsh.y"
+#line 2156 "Gmsh.y"
 { yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
     break;}
 case 320:
-#line 2177 "Gmsh.y"
+#line 2165 "Gmsh.y"
 { yyval.d = yyvsp[0].d; ;
     break;}
 case 321:
-#line 2178 "Gmsh.y"
+#line 2166 "Gmsh.y"
 { yyval.d = 3.141592653589793; ;
     break;}
 case 322:
-#line 2179 "Gmsh.y"
+#line 2167 "Gmsh.y"
 { yyval.d = ParUtil::Instance()->rank(); ;
     break;}
 case 323:
-#line 2180 "Gmsh.y"
+#line 2168 "Gmsh.y"
 { yyval.d = ParUtil::Instance()->size(); ;
     break;}
 case 324:
-#line 2185 "Gmsh.y"
+#line 2173 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[0].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -5559,7 +5547,7 @@ case 324:
     ;
     break;}
 case 325:
-#line 2196 "Gmsh.y"
+#line 2184 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-3].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -5577,7 +5565,7 @@ case 325:
     ;
     break;}
 case 326:
-#line 2213 "Gmsh.y"
+#line 2201 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-1].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -5589,7 +5577,7 @@ case 326:
     ;
     break;}
 case 327:
-#line 2224 "Gmsh.y"
+#line 2212 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-4].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -5607,7 +5595,7 @@ case 327:
     ;
     break;}
 case 328:
-#line 2243 "Gmsh.y"
+#line 2231 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-2].c))){
 	vyyerror("Unknown numeric option class '%s'", yyvsp[-2].c);
@@ -5624,7 +5612,7 @@ case 328:
     ;
     break;}
 case 329:
-#line 2259 "Gmsh.y"
+#line 2247 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-5].c))){
 	vyyerror("Unknown numeric option class '%s'", yyvsp[-5].c);
@@ -5641,7 +5629,7 @@ case 329:
     ;
     break;}
 case 330:
-#line 2275 "Gmsh.y"
+#line 2263 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-3].c))){
 	vyyerror("Unknown numeric option class '%s'", yyvsp[-3].c);
@@ -5658,7 +5646,7 @@ case 330:
     ;
     break;}
 case 331:
-#line 2291 "Gmsh.y"
+#line 2279 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-6].c))){
 	vyyerror("Unknown numeric option class '%s'", yyvsp[-6].c);
@@ -5675,130 +5663,130 @@ case 331:
     ;
     break;}
 case 332:
-#line 2309 "Gmsh.y"
+#line 2297 "Gmsh.y"
 {
       memcpy(yyval.v, yyvsp[0].v, 5*sizeof(double)) ;
     ;
     break;}
 case 333:
-#line 2313 "Gmsh.y"
+#line 2301 "Gmsh.y"
 {
       for(i=0 ; i<5 ; i++) yyval.v[i] = -yyvsp[0].v[i] ;
     ;
     break;}
 case 334:
-#line 2317 "Gmsh.y"
+#line 2305 "Gmsh.y"
 { 
       for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[0].v[i];
     ;
     break;}
 case 335:
-#line 2321 "Gmsh.y"
+#line 2309 "Gmsh.y"
 { 
       for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[-2].v[i] - yyvsp[0].v[i] ;
     ;
     break;}
 case 336:
-#line 2325 "Gmsh.y"
+#line 2313 "Gmsh.y"
 {
       for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[-2].v[i] + yyvsp[0].v[i] ;
     ;
     break;}
 case 337:
-#line 2331 "Gmsh.y"
+#line 2319 "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 338:
-#line 2335 "Gmsh.y"
+#line 2323 "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 339:
-#line 2339 "Gmsh.y"
+#line 2327 "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 340:
-#line 2343 "Gmsh.y"
+#line 2331 "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 341:
-#line 2350 "Gmsh.y"
+#line 2338 "Gmsh.y"
 {
     ;
     break;}
 case 342:
-#line 2353 "Gmsh.y"
+#line 2341 "Gmsh.y"
 {
     ;
     break;}
 case 343:
-#line 2359 "Gmsh.y"
+#line 2347 "Gmsh.y"
 {
     ;
     break;}
 case 344:
-#line 2362 "Gmsh.y"
+#line 2350 "Gmsh.y"
 {
     ;
     break;}
 case 345:
-#line 2368 "Gmsh.y"
+#line 2356 "Gmsh.y"
 {
     ;
     break;}
 case 346:
-#line 2371 "Gmsh.y"
+#line 2359 "Gmsh.y"
 {
        yyval.l=yyvsp[-1].l;
     ;
     break;}
 case 347:
-#line 2375 "Gmsh.y"
+#line 2363 "Gmsh.y"
 {
        yyval.l=yyvsp[-1].l;
     ;
     break;}
 case 348:
-#line 2382 "Gmsh.y"
+#line 2370 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(List_T*)) ;
       List_Add(yyval.l, &(yyvsp[0].l)) ;
     ;
     break;}
 case 349:
-#line 2387 "Gmsh.y"
+#line 2375 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].l)) ;
     ;
     break;}
 case 350:
-#line 2395 "Gmsh.y"
+#line 2383 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       List_Add(yyval.l, &(yyvsp[0].d)) ;
     ;
     break;}
 case 351:
-#line 2400 "Gmsh.y"
+#line 2388 "Gmsh.y"
 {
       yyval.l = yyvsp[0].l ;
     ;
     break;}
 case 352:
-#line 2404 "Gmsh.y"
+#line 2392 "Gmsh.y"
 {
       yyval.l=yyvsp[-1].l;
     ;
     break;}
 case 353:
-#line 2408 "Gmsh.y"
+#line 2396 "Gmsh.y"
 {
       yyval.l=yyvsp[-1].l;
       for(i=0 ; i<List_Nbr(yyval.l) ; i++){
@@ -5808,7 +5796,7 @@ case 353:
     ;
     break;}
 case 354:
-#line 2419 "Gmsh.y"
+#line 2407 "Gmsh.y"
 { 
       yyval.l = List_Create(2,1,sizeof(double)) ; 
       for(d=yyvsp[-2].d ; (yyvsp[-2].d<yyvsp[0].d)?(d<=yyvsp[0].d):(d>=yyvsp[0].d) ; (yyvsp[-2].d<yyvsp[0].d)?(d+=1.):(d-=1.)) 
@@ -5816,7 +5804,7 @@ case 354:
     ;
     break;}
 case 355:
-#line 2425 "Gmsh.y"
+#line 2413 "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)){
@@ -5829,7 +5817,7 @@ case 355:
    ;
     break;}
 case 356:
-#line 2436 "Gmsh.y"
+#line 2424 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       TheSymbol.Name = yyvsp[-2].c ;
@@ -5845,7 +5833,7 @@ case 356:
     ;
     break;}
 case 357:
-#line 2450 "Gmsh.y"
+#line 2438 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       TheSymbol.Name = yyvsp[-2].c ;
@@ -5863,7 +5851,7 @@ case 357:
     ;
     break;}
 case 358:
-#line 2466 "Gmsh.y"
+#line 2454 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       TheSymbol.Name = yyvsp[-5].c ;
@@ -5885,7 +5873,7 @@ case 358:
     ;
     break;}
 case 359:
-#line 2486 "Gmsh.y"
+#line 2474 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       TheSymbol.Name = yyvsp[-5].c ;
@@ -5909,26 +5897,26 @@ case 359:
     ;
     break;}
 case 360:
-#line 2511 "Gmsh.y"
+#line 2499 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       List_Add(yyval.l, &(yyvsp[0].d)) ;
     ;
     break;}
 case 361:
-#line 2516 "Gmsh.y"
+#line 2504 "Gmsh.y"
 {
       yyval.l = yyvsp[0].l ;
     ;
     break;}
 case 362:
-#line 2520 "Gmsh.y"
+#line 2508 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].d)) ;
     ;
     break;}
 case 363:
-#line 2524 "Gmsh.y"
+#line 2512 "Gmsh.y"
 {
       for(i=0 ; i<List_Nbr(yyvsp[0].l) ; i++){
 	List_Read(yyvsp[0].l, i, &d) ;
@@ -5938,26 +5926,26 @@ case 363:
     ;
     break;}
 case 364:
-#line 2536 "Gmsh.y"
+#line 2524 "Gmsh.y"
 {
       yyval.u = PACK_COLOR((int)yyvsp[-7].d, (int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d);
     ;
     break;}
 case 365:
-#line 2540 "Gmsh.y"
+#line 2528 "Gmsh.y"
 {
       yyval.u = PACK_COLOR((int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d, 255);
     ;
     break;}
 case 366:
-#line 2551 "Gmsh.y"
+#line 2539 "Gmsh.y"
 {
       yyval.u = Get_ColorForString(ColorString, -1, yyvsp[0].c, &flag);
       if(flag) vyyerror("Unknown color '%s'", yyvsp[0].c);
     ;
     break;}
 case 367:
-#line 2556 "Gmsh.y"
+#line 2544 "Gmsh.y"
 {
       if(!(pColCat = Get_ColorOptionCategory(yyvsp[-4].c))){
 	vyyerror("Unknown color option class '%s'", yyvsp[-4].c);
@@ -5975,13 +5963,13 @@ case 367:
     ;
     break;}
 case 368:
-#line 2575 "Gmsh.y"
+#line 2563 "Gmsh.y"
 {
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 369:
-#line 2579 "Gmsh.y"
+#line 2567 "Gmsh.y"
 {
       yyval.l = List_Create(256,10,sizeof(unsigned int)) ;
       ColorTable *ct = Get_ColorTable((int)yyvsp[-3].d);
@@ -5994,26 +5982,26 @@ case 369:
     ;
     break;}
 case 370:
-#line 2593 "Gmsh.y"
+#line 2581 "Gmsh.y"
 {
       yyval.l = List_Create(256,10,sizeof(unsigned int)) ;
       List_Add(yyval.l, &(yyvsp[0].u)) ;
     ;
     break;}
 case 371:
-#line 2598 "Gmsh.y"
+#line 2586 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].u)) ;
     ;
     break;}
 case 372:
-#line 2605 "Gmsh.y"
+#line 2593 "Gmsh.y"
 {
       yyval.c = yyvsp[0].c;
     ;
     break;}
 case 373:
-#line 2609 "Gmsh.y"
+#line 2597 "Gmsh.y"
 {
       yyval.c = (char *)Malloc((strlen(yyvsp[-3].c)+strlen(yyvsp[-1].c)+1)*sizeof(char)) ;
       strcpy(yyval.c, yyvsp[-3].c) ;  
@@ -6023,7 +6011,7 @@ case 373:
     ;
     break;}
 case 374:
-#line 2617 "Gmsh.y"
+#line 2605 "Gmsh.y"
 {
       yyval.c = (char *)Malloc((strlen(yyvsp[-1].c)+1)*sizeof(char)) ;
       for(i=strlen(yyvsp[-1].c)-1; i>=0; i--){
@@ -6038,40 +6026,33 @@ case 374:
     ;
     break;}
 case 375:
-#line 2630 "Gmsh.y"
+#line 2618 "Gmsh.y"
 {
       yyval.c = yyvsp[-1].c;
     ;
     break;}
 case 376:
-#line 2634 "Gmsh.y"
+#line 2622 "Gmsh.y"
 {
-      for(i = 0 ; i<List_Nbr(yyvsp[-1].l) ; i++){
-	if(!i){
-	  str = strtok(yyvsp[-3].c, "%");
-	  strcpy(tmpstring, str);
-	}
-	str = strtok(NULL, "%");
-	if(str){
-	  strcpy(tmpstring2, "%");
-	  strcat(tmpstring2, str);
-	  sprintf(tmpstring3, tmpstring2, *(double*)List_Pointer(yyvsp[-1].l,i)); 
-	  strcat(tmpstring, tmpstring3);
-	}
-	else{
-	  vyyerror("Missing %d parameter(s) in Sprintf format",
-		   List_Nbr(yyvsp[-1].l)-i);
-	  break ;
-	}
+      i = PrintListOfDouble(yyvsp[-3].c,yyvsp[-1].l,tmpstring);
+      if(i<0){
+	vyyerror("Too few arguments in Sprintf");
+	yyval.c = "";
+      }
+      else if(i>0){
+	vyyerror("Too many arguments (%d) in Sprintf", i);
+	yyval.c = "";
+      }
+      else{
+	yyval.c = (char*)Malloc((strlen(tmpstring)+1)*sizeof(char));
+	strcpy(yyval.c, tmpstring);
       }
-      yyval.c = (char*)Malloc((strlen(tmpstring)+1)*sizeof(char));
-      strcpy(yyval.c, tmpstring);
-      List_Delete(yyvsp[-1].l);
       Free(yyvsp[-3].c);
+      List_Delete(yyvsp[-1].l);
     ;
     break;}
 case 377:
-#line 2659 "Gmsh.y"
+#line 2640 "Gmsh.y"
 { 
       if(!(pStrCat = Get_StringOptionCategory(yyvsp[-3].c)))
 	vyyerror("Unknown string option class '%s'", yyvsp[-3].c);
@@ -6087,7 +6068,7 @@ case 377:
     ;
     break;}
 case 378:
-#line 2673 "Gmsh.y"
+#line 2654 "Gmsh.y"
 { 
       if(!(pStrCat = Get_StringOptionCategory(yyvsp[-6].c)))
 	vyyerror("Unknown string option class '%s'", yyvsp[-6].c);
@@ -6324,7 +6305,7 @@ yyerrhandle:
     }
   return 1;
 }
-#line 2688 "Gmsh.y"
+#line 2669 "Gmsh.y"
 
 
 void InitSymbols(void){
@@ -6344,6 +6325,40 @@ void DeleteSymbols(void){
 int CompareSymbols (const void *a, const void *b){
   return(strcmp(((Symbol*)a)->Name,((Symbol*)b)->Name));
 }
+
+int PrintListOfDouble(char *format, List_T *list, char *buffer){
+  int i, j, k;
+  char tmp1[256], tmp2[256];
+
+  j=0;
+  while(format[j]!='%') j++;
+  strncpy(buffer, format, j); 
+  buffer[j]='\0'; 
+  for(i = 0 ; i<List_Nbr(list) ; i++){
+    k = j;
+    j++;
+    if(j<(int)strlen(format)){
+      if(format[j]=='%'){
+	strcat(buffer, "%");
+	j++;
+      }
+      while(format[j]!='%' && j<(int)strlen(format)) j++;
+      if(k != j){
+	strncpy(tmp1, &(format[k]),j-k);
+	tmp1[j-k]='\0';
+	sprintf(tmp2, tmp1, *(double*)List_Pointer(list,i)); 
+	strcat(buffer, tmp2);
+      }
+    }
+    else{
+      return List_Nbr(list)-i;
+      break ;
+    }
+  }
+  if(j != (int)strlen(format))
+    return -1;
+  return 0;
+}
   
 void yyerror(char *s){
   Msg(PARSER_ERROR, "'%s', line %d : %s (%s)",yyname,yylineno-1,s,yytext);
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index a6941d467c2536d16617bae17125d6b6a3f16a4b..16c6654712f8541b0d97c4b88bf33edd25f48233 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1,6 +1,6 @@
 %{ 
 
-// $Id: Gmsh.y,v 1.106 2001-11-05 08:36:49 geuzaine Exp $
+// $Id: Gmsh.y,v 1.107 2001-11-07 09:30:26 geuzaine Exp $
 
 #include <stdarg.h>
 #ifndef _NOPLUGIN
@@ -45,7 +45,6 @@ static double         LoopControlVariablesTab[MAX_OPEN_FILES][3];
 static char*          LoopControlVariablesNameTab[MAX_OPEN_FILES];
 static char           yynameTab[MAX_OPEN_FILES][256];
 static char           tmpstring[256];
-static char           tmpstring2[256], tmpstring3[256];
 static Symbol         TheSymbol, *pSymbol;
 static Surface       *STL_Surf;
 static Shape          TheShape;
@@ -66,6 +65,7 @@ char *strsave(char *ptr);
 void  yyerror (char *s);
 void  vyyerror (char *fmt, ...);
 void  skip_until (char *skip, char *until);
+int PrintListOfDouble(char *format, List_T *list, char *buffer);
 %}
 
 %union {
@@ -407,25 +407,13 @@ Printf :
     }
   | tPrintf '(' tBIGSTR ',' RecursiveListOfDouble ')' tEND
     {
-      for(i = 0 ; i<List_Nbr($5) ; i++){
-	if(!i){
-	  str = strtok($3, "%");
-	  strcpy(tmpstring, str); 
-	}
-	str = strtok(NULL, "%");
-	if(str){
-	  strcpy(tmpstring2, "%");
-	  strcat(tmpstring2, str);
-	  sprintf(tmpstring3, tmpstring2, *(double*)List_Pointer($5,i)); 
-	  strcat(tmpstring, tmpstring3);
-	}
-	else{
-	  vyyerror("Missing %d parameter(s) in Printf format",
-		   List_Nbr($5)-i);
-	  break ;
-	}
-      }
-      Msg(DIRECT, tmpstring);
+      i = PrintListOfDouble($3,$5,tmpstring);
+      if(i<0) 
+	vyyerror("Too few arguments in Printf");
+      else if(i>0)
+	vyyerror("Too many arguments (%d) in Printf", i);
+      else
+	Msg(DIRECT, tmpstring);
       List_Delete($5);
     }
 ;
@@ -2632,28 +2620,21 @@ StringExpr :
     }
   | tSprintf '(' StringExpr ',' RecursiveListOfDouble ')'
     {
-      for(i = 0 ; i<List_Nbr($5) ; i++){
-	if(!i){
-	  str = strtok($3, "%");
-	  strcpy(tmpstring, str);
-	}
-	str = strtok(NULL, "%");
-	if(str){
-	  strcpy(tmpstring2, "%");
-	  strcat(tmpstring2, str);
-	  sprintf(tmpstring3, tmpstring2, *(double*)List_Pointer($5,i)); 
-	  strcat(tmpstring, tmpstring3);
-	}
-	else{
-	  vyyerror("Missing %d parameter(s) in Sprintf format",
-		   List_Nbr($5)-i);
-	  break ;
-	}
+      i = PrintListOfDouble($3,$5,tmpstring);
+      if(i<0){
+	vyyerror("Too few arguments in Sprintf");
+	$$ = "";
+      }
+      else if(i>0){
+	vyyerror("Too many arguments (%d) in Sprintf", i);
+	$$ = "";
+      }
+      else{
+	$$ = (char*)Malloc((strlen(tmpstring)+1)*sizeof(char));
+	strcpy($$, tmpstring);
       }
-      $$ = (char*)Malloc((strlen(tmpstring)+1)*sizeof(char));
-      strcpy($$, tmpstring);
-      List_Delete($5);
       Free($3);
+      List_Delete($5);
     }
   | tSprintf '(' tSTRING '.' tSTRING ')'
     { 
@@ -2704,6 +2685,40 @@ void DeleteSymbols(void){
 int CompareSymbols (const void *a, const void *b){
   return(strcmp(((Symbol*)a)->Name,((Symbol*)b)->Name));
 }
+
+int PrintListOfDouble(char *format, List_T *list, char *buffer){
+  int i, j, k;
+  char tmp1[256], tmp2[256];
+
+  j=0;
+  while(format[j]!='%') j++;
+  strncpy(buffer, format, j); 
+  buffer[j]='\0'; 
+  for(i = 0 ; i<List_Nbr(list) ; i++){
+    k = j;
+    j++;
+    if(j<(int)strlen(format)){
+      if(format[j]=='%'){
+	strcat(buffer, "%");
+	j++;
+      }
+      while(format[j]!='%' && j<(int)strlen(format)) j++;
+      if(k != j){
+	strncpy(tmp1, &(format[k]),j-k);
+	tmp1[j-k]='\0';
+	sprintf(tmp2, tmp1, *(double*)List_Pointer(list,i)); 
+	strcat(buffer, tmp2);
+      }
+    }
+    else{
+      return List_Nbr(list)-i;
+      break ;
+    }
+  }
+  if(j != (int)strlen(format))
+    return -1;
+  return 0;
+}
   
 void yyerror(char *s){
   Msg(PARSER_ERROR, "'%s', line %d : %s (%s)",yyname,yylineno-1,s,yytext);
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index f3842e3cd8c5a6404af7540e067fb929f91a0cf7..b16fe1cea229246cc252801938fe77b3e34eb546 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.121 2001-11-05 08:36:49 geuzaine Exp $
+ * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.122 2001-11-07 09:30:26 geuzaine Exp $
  */
 
 #define FLEX_SCANNER
@@ -1000,7 +1000,7 @@ char *yytext;
 #define INITIAL 0
 #line 2 "Gmsh.l"
 
-// $Id: Gmsh.yy.cpp,v 1.121 2001-11-05 08:36:49 geuzaine Exp $
+// $Id: Gmsh.yy.cpp,v 1.122 2001-11-07 09:30:26 geuzaine Exp $
 
 #include <stdio.h>
 #include <stdlib.h>