diff --git a/Geo/Print_Geo.cpp b/Geo/Print_Geo.cpp
index 7379c87255cab0da83a3ee54890356dab10396d0..a403c2367df0744473591c399a9bce792743125c 100644
--- a/Geo/Print_Geo.cpp
+++ b/Geo/Print_Geo.cpp
@@ -1,4 +1,4 @@
-// $Id: Print_Geo.cpp,v 1.20 2001-08-17 08:31:31 geuzaine Exp $
+// $Id: Print_Geo.cpp,v 1.21 2001-08-27 11:19:18 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "Geo.h"
@@ -30,14 +30,14 @@ void Print_Nurbs (Curve *c, FILE *f){
     if(i%8 == 7 && i!=List_Nbr(c->Control_Points)-1)fprintf(FOUT,"\n");
   }
   fprintf(f,"}\n");
-  fprintf(f,"Knots {");
+  fprintf(f,"  Knots {");
   for(j=0;j<List_Nbr(c->Control_Points)+c->degre+1;j++){
     if(!j)fprintf(f,"%g",c->k[j]);
     else fprintf(f,", %g",c->k[j]);
-    if(j%5 == 4 && j!=List_Nbr(c->Control_Points)+c->degre)fprintf(FOUT,"\n");
+    if(j%5 == 4 && j!=List_Nbr(c->Control_Points)+c->degre)fprintf(FOUT,"\n        ");
   }
-  fprintf(f,"}");
-  fprintf(f,"Order %d;\n\n",c->degre);
+  fprintf(f,"}\n");
+  fprintf(f,"  Order %d;\n",c->degre);
 }
 
 void Print_Curve(void *a, void *b){
@@ -139,7 +139,7 @@ void Print_Surface(void *a, void *b){
   case MSH_SURF_NURBS:
     fprintf(FOUT,"Nurbs Surface (%d) = {\n",s->Num);
     for(i=0;i<s->Nv;i++){
-      fprintf(FOUT,"\t\t{");
+      fprintf(FOUT,"  {");
       for(j=0;j<s->Nu;j++){
         List_Read(s->Control_Points,j+s->Nu *i,&v);
         if(!j)
@@ -152,19 +152,19 @@ void Print_Surface(void *a, void *b){
       else
         fprintf(FOUT,"}}\n");
     }
-    fprintf(FOUT,"\t\tKnots\n\t\t{");
+    fprintf(FOUT,"  Knots\n  {");
     for(j=0;j<s->Nu+s->OrderU+1;j++){
       if(!j)fprintf(FOUT,"%g",s->ku[j]);
       else fprintf(FOUT,", %g",s->ku[j]);
-      if(j%5 == 4 && j!=s->Nu + s->OrderU)fprintf(FOUT,"\n\t\t");
+      if(j%5 == 4 && j!=s->Nu + s->OrderU)fprintf(FOUT,"\n  ");
     }
-    fprintf(FOUT,"}\n\t\t{");
+    fprintf(FOUT,"}\n  {");
     for(j=0;j<s->Nv+s->OrderV+1;j++){
       if(!j)fprintf(FOUT,"%g",s->kv[j]);
       else fprintf(FOUT,", %g",s->kv[j]);
-      if(j%5 == 4 && j!=s->Nv + s->OrderV)fprintf(FOUT,"\n\t\t");
+      if(j%5 == 4 && j!=s->Nv + s->OrderV)fprintf(FOUT,"\n  ");
     }
-    fprintf(FOUT,"}\n\t\tOrder %d %d;\n\n",s->OrderU,s->OrderV);
+    fprintf(FOUT,"}\n  Order %d %d;\n",s->OrderU,s->OrderV);
     break;
   }
 }
diff --git a/Makefile b/Makefile
index d51e203b369d902348ae0fdd9ef41c4bd2ed3bc5..8a7d102e4dc3854778352f1e5996a148147fa761 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.140 2001-08-20 08:30:05 geuzaine Exp $
+# $Id: Makefile,v 1.141 2001-08-27 11:19:18 geuzaine Exp $
 
 GMSH_RELEASE = 1.24
 
@@ -249,6 +249,27 @@ link_linux:
                  -L$(HOME)/SOURCES/fltk/lib $(FLTK_LIB) -L/usr/X11R6/lib $(X11_LIB) -lm -ldl
 linux: tag compile_linux link_linux strip_bin
 
+#
+# Test for fltk 1.1
+#
+compile_fltk1:
+	@for i in $(GMSH_FLTK_DIR); do (cd $$i && $(MAKE) \
+           "CXX=$(CXX)" \
+           "CC=$(CC)" \
+           "OPT_FLAGS=-g -Wall" \
+           "OS_FLAGS=-D_LITTLE_ENDIAN" \
+           "VERSION_FLAGS=-D_FLTK" \
+           "GL_INCLUDE=" \
+           "GUI_INCLUDE=-I$(HOME)/SOURCES/fltk-1.1.0b1" \
+        ); done
+link_fltk1:
+	$(CXX) -o $(GMSH_BIN_DIR)/gmsh $(GMSH_FLTK_LIB)\
+                 $(HOME)/SOURCES/fltk-1.1.0b1/lib/libfltkgl.a\
+                 $(OPENGL_LIB) \
+                 $(HOME)/SOURCES/fltk-1.1.0b1/lib/libfltk.a \
+                 -L/usr/X11R6/lib $(X11_LIB) -lm
+fltk1: compile_fltk1 link_fltk1
+
 #
 # Test for fltk 2.0
 #
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 45e7279b1f69db39a9344c2098a33294e6d127d8..e1b6d3035f56fb6f379714e6f9384d7c50d8bfdd 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -175,7 +175,7 @@
 #line 1 "Gmsh.y"
  
 
-// $Id: Gmsh.tab.cpp,v 1.110 2001-08-20 10:30:19 geuzaine Exp $
+// $Id: Gmsh.tab.cpp,v 1.111 2001-08-27 11:19:18 geuzaine Exp $
 
   //
   // Generaliser sprintf avec des chaines de caracteres
@@ -601,24 +601,24 @@ static const short yyrline[] = { 0,
    824,   871,   886,   895,   910,   922,   936,   959,   983,   995,
   1009,  1021,  1035,  1051,  1067,  1080,  1100,  1111,  1117,  1136,
   1147,  1155,  1161,  1167,  1186,  1192,  1198,  1214,  1221,  1227,
-  1233,  1244,  1255,  1274,  1286,  1292,  1311,  1332,  1340,  1346,
-  1352,  1358,  1370,  1376,  1382,  1394,  1400,  1405,  1410,  1417,
-  1419,  1420,  1423,  1428,  1439,  1457,  1465,  1470,  1481,  1549,
-  1569,  1575,  1579,  1599,  1615,  1629,  1654,  1679,  1705,  1711,
-  1716,  1721,  1725,  1735,  1741,  1747,  1751,  1755,  1759,  1763,
-  1768,  1773,  1779,  1786,  1790,  1795,  1825,  1835,  1854,  1872,
-  1890,  1912,  1933,  1954,  1968,  1989,  1994,  2005,  2007,  2008,
-  2009,  2010,  2013,  2015,  2016,  2017,  2018,  2019,  2020,  2021,
-  2022,  2029,  2030,  2031,  2032,  2033,  2034,  2035,  2036,  2037,
-  2038,  2039,  2040,  2041,  2042,  2043,  2044,  2045,  2046,  2047,
-  2048,  2049,  2050,  2051,  2052,  2053,  2054,  2055,  2056,  2057,
-  2058,  2059,  2060,  2065,  2070,  2071,  2072,  2076,  2087,  2104,
-  2115,  2134,  2150,  2166,  2182,  2199,  2204,  2208,  2212,  2216,
-  2221,  2226,  2230,  2234,  2240,  2244,  2249,  2253,  2258,  2262,
-  2266,  2272,  2278,  2285,  2291,  2295,  2299,  2309,  2316,  2327,
-  2341,  2357,  2377,  2401,  2407,  2411,  2415,  2426,  2431,  2442,
-  2447,  2465,  2470,  2483,  2489,  2495,  2500,  2508,  2521,  2525,
-  2550,  2564
+  1233,  1244,  1255,  1277,  1289,  1295,  1314,  1335,  1343,  1349,
+  1355,  1361,  1373,  1379,  1385,  1397,  1403,  1408,  1413,  1420,
+  1422,  1423,  1426,  1431,  1442,  1460,  1468,  1473,  1484,  1552,
+  1572,  1578,  1582,  1602,  1618,  1632,  1657,  1682,  1708,  1714,
+  1719,  1724,  1728,  1738,  1744,  1750,  1754,  1758,  1762,  1766,
+  1771,  1776,  1782,  1789,  1793,  1798,  1828,  1838,  1857,  1875,
+  1893,  1915,  1936,  1957,  1971,  1992,  1997,  2008,  2010,  2011,
+  2012,  2013,  2016,  2018,  2019,  2020,  2021,  2022,  2023,  2024,
+  2025,  2032,  2033,  2034,  2035,  2036,  2037,  2038,  2039,  2040,
+  2041,  2042,  2043,  2044,  2045,  2046,  2047,  2048,  2049,  2050,
+  2051,  2052,  2053,  2054,  2055,  2056,  2057,  2058,  2059,  2060,
+  2061,  2062,  2063,  2068,  2073,  2074,  2075,  2079,  2090,  2107,
+  2118,  2137,  2153,  2169,  2185,  2202,  2207,  2211,  2215,  2219,
+  2224,  2229,  2233,  2237,  2243,  2247,  2252,  2256,  2261,  2265,
+  2269,  2275,  2281,  2288,  2294,  2298,  2302,  2312,  2319,  2330,
+  2344,  2360,  2380,  2404,  2410,  2414,  2418,  2429,  2434,  2445,
+  2450,  2468,  2473,  2486,  2492,  2498,  2503,  2511,  2524,  2528,
+  2553,  2567
 };
 #endif
 
@@ -4162,23 +4162,26 @@ case 173:
       List_T *Temp;
       int i;
       double d;
-      if((int)yyvsp[-1].d + 1 + List_Nbr(yyvsp[-5].l) != List_Nbr(yyvsp[-3].l)){
+      if(List_Nbr(yyvsp[-5].l) + (int)yyvsp[-1].d + 1 != List_Nbr(yyvsp[-3].l)){
 	vyyerror("Wrong definition of Nurbs Curve %d: "
-		"[Degree]%d + 1 + [NbPts]%d != [NbKnots]%d",
-		(int)yyvsp[-8].d, (int)yyvsp[-1].d, List_Nbr(yyvsp[-5].l), List_Nbr(yyvsp[-3].l));
+		 "got %d Knots, need N + D + 1 = %d + %d + 1 = %d",
+		 (int)yyvsp[-8].d, 
+		 List_Nbr(yyvsp[-3].l), List_Nbr(yyvsp[-5].l), (int)yyvsp[-1].d, List_Nbr(yyvsp[-5].l) + (int)yyvsp[-1].d + 1);
       }
-      Temp = List_Create(List_Nbr(yyvsp[-5].l),1,sizeof(int));
-      for(i=0;i<List_Nbr(yyvsp[-5].l);i++) {
-      	List_Read(yyvsp[-5].l,i,&d);
-        j = (int)d;
-        List_Add(Temp,&j);
+      else{
+	Temp = List_Create(List_Nbr(yyvsp[-5].l),1,sizeof(int));
+	for(i=0;i<List_Nbr(yyvsp[-5].l);i++) {
+	  List_Read(yyvsp[-5].l,i,&d);
+	  j = (int)d;
+	  List_Add(Temp,&j);
+	}
+	AddCurveInDataBase ((int)yyvsp[-8].d,MSH_SEGM_NURBS,(int)yyvsp[-1].d,Temp,yyvsp[-3].l,-1,-1,0.,1.);
+	List_Delete(Temp);
       }
-      AddCurveInDataBase ((int)yyvsp[-8].d,MSH_SEGM_NURBS,(int)yyvsp[-1].d,Temp,yyvsp[-3].l,-1,-1,0.,1.);
-      List_Delete(Temp);
     ;
     break;}
 case 174:
-#line 1275 "Gmsh.y"
+#line 1278 "Gmsh.y"
 {
       yyval.s.Num = (int)yyvsp[-2].d;
       Curve *c = FindCurve(yyval.s.Num,THEM);
@@ -4189,7 +4192,7 @@ case 174:
     ;
     break;}
 case 175:
-#line 1287 "Gmsh.y"
+#line 1290 "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;
@@ -4197,7 +4200,7 @@ case 175:
     ;
     break;}
 case 176:
-#line 1293 "Gmsh.y"
+#line 1296 "Gmsh.y"
 {
       Surface *s,*support;
       support = FindSurface((int)yyvsp[-4].d,THEM);
@@ -4218,7 +4221,7 @@ case 176:
     ;
     break;}
 case 177:
-#line 1312 "Gmsh.y"
+#line 1315 "Gmsh.y"
 {
       List_Read(yyvsp[-1].l,0,&d);
       i = (int)d;
@@ -4241,7 +4244,7 @@ case 177:
     ;
     break;}
 case 178:
-#line 1335 "Gmsh.y"
+#line 1338 "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;
@@ -4249,13 +4252,13 @@ case 178:
     ;
     break;}
 case 179:
-#line 1343 "Gmsh.y"
+#line 1346 "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 180:
-#line 1347 "Gmsh.y"
+#line 1350 "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;
@@ -4263,7 +4266,7 @@ case 180:
     ;
     break;}
 case 181:
-#line 1353 "Gmsh.y"
+#line 1356 "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;
@@ -4271,7 +4274,7 @@ case 181:
     ;
     break;}
 case 182:
-#line 1359 "Gmsh.y"
+#line 1362 "Gmsh.y"
 {
       yyval.s.Num = (int)yyvsp[-2].d;
       Surface *s = FindSurface(yyval.s.Num,THEM);
@@ -4282,7 +4285,7 @@ case 182:
      ;
     break;}
 case 183:
-#line 1371 "Gmsh.y"
+#line 1374 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_VOLUME,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_VOLUME;
@@ -4290,7 +4293,7 @@ case 183:
     ;
     break;}
 case 184:
-#line 1377 "Gmsh.y"
+#line 1380 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_VOLUME,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_VOLUME;
@@ -4298,7 +4301,7 @@ case 184:
     ;
     break;}
 case 185:
-#line 1383 "Gmsh.y"
+#line 1386 "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;
@@ -4306,60 +4309,60 @@ case 185:
     ;
     break;}
 case 186:
-#line 1396 "Gmsh.y"
+#line 1399 "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 187:
-#line 1401 "Gmsh.y"
+#line 1404 "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 188:
-#line 1406 "Gmsh.y"
+#line 1409 "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 189:
-#line 1411 "Gmsh.y"
+#line 1414 "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 190:
-#line 1418 "Gmsh.y"
+#line 1421 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
 case 191:
-#line 1419 "Gmsh.y"
+#line 1422 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
 case 192:
-#line 1420 "Gmsh.y"
+#line 1423 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
 case 193:
-#line 1425 "Gmsh.y"
+#line 1428 "Gmsh.y"
 {
       yyval.l = List_Create(3,3,sizeof(Shape));
     ;
     break;}
 case 194:
-#line 1429 "Gmsh.y"
+#line 1432 "Gmsh.y"
 {
       List_Add(yyval.l,&yyvsp[0].s);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 195:
-#line 1441 "Gmsh.y"
+#line 1444 "Gmsh.y"
 {
       yyval.l = List_Create(3,3,sizeof(Shape));
       for(i=0;i<List_Nbr(yyvsp[-1].l);i++){
@@ -4371,7 +4374,7 @@ case 195:
     ;
     break;}
 case 196:
-#line 1459 "Gmsh.y"
+#line 1462 "Gmsh.y"
 {
       for(i=0;i<List_Nbr(yyvsp[-1].l);i++){
 	List_Read (yyvsp[-1].l,i,&TheShape);
@@ -4380,20 +4383,20 @@ case 196:
     ;
     break;}
 case 197:
-#line 1466 "Gmsh.y"
+#line 1469 "Gmsh.y"
 {
 	if(!strcmp(yyvsp[-4].c, "View"))
 	  FreeView((int)yyvsp[-2].d);
       ;
     break;}
 case 198:
-#line 1471 "Gmsh.y"
+#line 1474 "Gmsh.y"
 {
       Init_Mesh(THEM, 1);
     ;
     break;}
 case 199:
-#line 1483 "Gmsh.y"
+#line 1486 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-2].c, "Include")){
 
@@ -4462,7 +4465,7 @@ case 199:
     ;
     break;}
 case 200:
-#line 1550 "Gmsh.y"
+#line 1553 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-2].c, "Sleep")){
 
@@ -4484,7 +4487,7 @@ case 200:
     ;
     break;}
 case 201:
-#line 1570 "Gmsh.y"
+#line 1573 "Gmsh.y"
 {
 #ifndef _NOPLUGIN
     GMSH_PluginManager::Instance()->Action(yyvsp[-4].c,yyvsp[-1].c,0); 
@@ -4492,13 +4495,13 @@ case 201:
    ;
     break;}
 case 202:
-#line 1576 "Gmsh.y"
+#line 1579 "Gmsh.y"
 {
       exit(0);
     ;
     break;}
 case 203:
-#line 1580 "Gmsh.y"
+#line 1583 "Gmsh.y"
 {
       if(!CTX.batch){ // we're in interactive mode
 	if(Tree_Nbr(THEM->Points) != Last_NumberOfPoints){
@@ -4514,7 +4517,7 @@ case 203:
     ;
     break;}
 case 204:
-#line 1602 "Gmsh.y"
+#line 1605 "Gmsh.y"
 {
       FILE* ff;
       if(RecursionLevel)
@@ -4530,7 +4533,7 @@ case 204:
     ;
     break;}
 case 205:
-#line 1616 "Gmsh.y"
+#line 1619 "Gmsh.y"
 {
       FILE* ff;
       if(RecursionLevel)
@@ -4546,7 +4549,7 @@ case 205:
     ;
     break;}
 case 206:
-#line 1630 "Gmsh.y"
+#line 1633 "Gmsh.y"
 {
       FILE* ff;
       if(RecursionLevel)
@@ -4573,7 +4576,7 @@ case 206:
     ;
     break;}
 case 207:
-#line 1655 "Gmsh.y"
+#line 1658 "Gmsh.y"
 {
       FILE* ff;
       if(RecursionLevel)
@@ -4600,7 +4603,7 @@ case 207:
     ;
     break;}
 case 208:
-#line 1680 "Gmsh.y"
+#line 1683 "Gmsh.y"
 {
       if(LoopControlVariablesTab[ImbricatedLoop-1][1] >  
 	 LoopControlVariablesTab[ImbricatedLoop-1][0]){
@@ -4628,7 +4631,7 @@ case 208:
     ;
     break;}
 case 209:
-#line 1706 "Gmsh.y"
+#line 1709 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->createFunction(yyvsp[0].c,yyin,yylineno))
 	vyyerror("Redefinition of function %s",yyvsp[0].c);
@@ -4636,39 +4639,39 @@ case 209:
     ;
     break;}
 case 210:
-#line 1712 "Gmsh.y"
+#line 1715 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->leaveFunction(&yyin,yylineno))
 	vyyerror("Error while exiting function");
     ;
     break;}
 case 211:
-#line 1717 "Gmsh.y"
+#line 1720 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->enterFunction(yyvsp[-1].c,&yyin,yylineno))
 	vyyerror("Unknown function %s",yyvsp[-1].c);
     ;
     break;}
 case 212:
-#line 1722 "Gmsh.y"
+#line 1725 "Gmsh.y"
 {
       if(!yyvsp[-1].d) skip_until("If", "EndIf");
     ;
     break;}
 case 213:
-#line 1726 "Gmsh.y"
+#line 1729 "Gmsh.y"
 {
     ;
     break;}
 case 214:
-#line 1737 "Gmsh.y"
+#line 1740 "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 215:
-#line 1742 "Gmsh.y"
+#line 1745 "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,
@@ -4676,69 +4679,69 @@ case 215:
     ;
     break;}
 case 216:
-#line 1748 "Gmsh.y"
+#line 1751 "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 217:
-#line 1752 "Gmsh.y"
+#line 1755 "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 218:
-#line 1756 "Gmsh.y"
+#line 1759 "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 219:
-#line 1760 "Gmsh.y"
+#line 1763 "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 220:
-#line 1764 "Gmsh.y"
+#line 1767 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 221:
-#line 1769 "Gmsh.y"
+#line 1772 "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 222:
-#line 1774 "Gmsh.y"
+#line 1777 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 223:
-#line 1780 "Gmsh.y"
+#line 1783 "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 224:
-#line 1788 "Gmsh.y"
+#line 1791 "Gmsh.y"
 {
     ;
     break;}
 case 225:
-#line 1791 "Gmsh.y"
+#line 1794 "Gmsh.y"
 {
     ;
     break;}
 case 226:
-#line 1797 "Gmsh.y"
+#line 1800 "Gmsh.y"
 {
       double d;
       int j;
@@ -4769,13 +4772,13 @@ case 226:
     ;
     break;}
 case 227:
-#line 1826 "Gmsh.y"
+#line 1829 "Gmsh.y"
 {
       extr.mesh.Recombine = true;
     ;
     break;}
 case 228:
-#line 1837 "Gmsh.y"
+#line 1840 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-3].l);i++){
@@ -4795,7 +4798,7 @@ case 228:
     ;
     break;}
 case 229:
-#line 1855 "Gmsh.y"
+#line 1858 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-6].l);i++){
@@ -4815,7 +4818,7 @@ case 229:
     ;
     break;}
 case 230:
-#line 1873 "Gmsh.y"
+#line 1876 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-6].l);i++){
@@ -4835,7 +4838,7 @@ case 230:
     ;
     break;}
 case 231:
-#line 1891 "Gmsh.y"
+#line 1894 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d,THEM);
       if(!s)
@@ -4859,7 +4862,7 @@ case 231:
     ;
     break;}
 case 232:
-#line 1913 "Gmsh.y"
+#line 1916 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d,THEM);
       if(!s)
@@ -4882,7 +4885,7 @@ case 232:
     ;
     break;}
 case 233:
-#line 1934 "Gmsh.y"
+#line 1937 "Gmsh.y"
 {
       Volume *v = FindVolume((int)yyvsp[-4].d,THEM);
       if(!v)
@@ -4905,7 +4908,7 @@ case 233:
     ;
     break;}
 case 234:
-#line 1955 "Gmsh.y"
+#line 1958 "Gmsh.y"
 {
       Surface *s;
       for(i=0;i<List_Nbr(yyvsp[-3].l);i++){
@@ -4921,7 +4924,7 @@ case 234:
     ;
     break;}
 case 235:
-#line 1969 "Gmsh.y"
+#line 1972 "Gmsh.y"
 {
       Surface *s;
       for(i=0;i<List_Nbr(yyvsp[-1].l);i++){
@@ -4937,71 +4940,71 @@ case 235:
     ;
     break;}
 case 236:
-#line 1991 "Gmsh.y"
+#line 1994 "Gmsh.y"
 { 
       Coherence_PS();
     ;
     break;}
 case 237:
-#line 1995 "Gmsh.y"
+#line 1998 "Gmsh.y"
 { 
       IntersectAllSegmentsTogether();
     ;
     break;}
 case 238:
-#line 2006 "Gmsh.y"
+#line 2009 "Gmsh.y"
 {yyval.i = 1;;
     break;}
 case 239:
-#line 2007 "Gmsh.y"
+#line 2010 "Gmsh.y"
 {yyval.i = 0;;
     break;}
 case 240:
-#line 2008 "Gmsh.y"
+#line 2011 "Gmsh.y"
 {yyval.i = -1;;
     break;}
 case 241:
-#line 2009 "Gmsh.y"
+#line 2012 "Gmsh.y"
 {yyval.i = -1;;
     break;}
 case 242:
-#line 2010 "Gmsh.y"
+#line 2013 "Gmsh.y"
 {yyval.i = -1;;
     break;}
 case 243:
-#line 2014 "Gmsh.y"
+#line 2017 "Gmsh.y"
 { yyval.d = yyvsp[0].d;           ;
     break;}
 case 244:
-#line 2015 "Gmsh.y"
+#line 2018 "Gmsh.y"
 { yyval.d = yyvsp[-1].d ;          ;
     break;}
 case 245:
-#line 2016 "Gmsh.y"
+#line 2019 "Gmsh.y"
 { yyval.d = -yyvsp[0].d ;         ;
     break;}
 case 246:
-#line 2017 "Gmsh.y"
+#line 2020 "Gmsh.y"
 { yyval.d = yyvsp[0].d;           ;
     break;}
 case 247:
-#line 2018 "Gmsh.y"
+#line 2021 "Gmsh.y"
 { yyval.d = !yyvsp[0].d ;         ;
     break;}
 case 248:
-#line 2019 "Gmsh.y"
+#line 2022 "Gmsh.y"
 { yyval.d = yyvsp[-2].d - yyvsp[0].d ;     ;
     break;}
 case 249:
-#line 2020 "Gmsh.y"
+#line 2023 "Gmsh.y"
 { yyval.d = yyvsp[-2].d + yyvsp[0].d ;     ;
     break;}
 case 250:
-#line 2021 "Gmsh.y"
+#line 2024 "Gmsh.y"
 { yyval.d = yyvsp[-2].d * yyvsp[0].d ;     ;
     break;}
 case 251:
-#line 2023 "Gmsh.y"
+#line 2026 "Gmsh.y"
 { 
       if(!yyvsp[0].d)
 	vyyerror("Division by zero in '%g / %g'", yyvsp[-2].d, yyvsp[0].d);
@@ -5010,151 +5013,151 @@ case 251:
     ;
     break;}
 case 252:
-#line 2029 "Gmsh.y"
+#line 2032 "Gmsh.y"
 { yyval.d = (int)yyvsp[-2].d % (int)yyvsp[0].d ;  ;
     break;}
 case 253:
-#line 2030 "Gmsh.y"
+#line 2033 "Gmsh.y"
 { yyval.d = pow(yyvsp[-2].d,yyvsp[0].d) ;  ;
     break;}
 case 254:
-#line 2031 "Gmsh.y"
+#line 2034 "Gmsh.y"
 { yyval.d = yyvsp[-2].d < yyvsp[0].d ;     ;
     break;}
 case 255:
-#line 2032 "Gmsh.y"
+#line 2035 "Gmsh.y"
 { yyval.d = yyvsp[-2].d > yyvsp[0].d ;     ;
     break;}
 case 256:
-#line 2033 "Gmsh.y"
+#line 2036 "Gmsh.y"
 { yyval.d = yyvsp[-2].d <= yyvsp[0].d ;    ;
     break;}
 case 257:
-#line 2034 "Gmsh.y"
+#line 2037 "Gmsh.y"
 { yyval.d = yyvsp[-2].d >= yyvsp[0].d ;    ;
     break;}
 case 258:
-#line 2035 "Gmsh.y"
+#line 2038 "Gmsh.y"
 { yyval.d = yyvsp[-2].d == yyvsp[0].d ;    ;
     break;}
 case 259:
-#line 2036 "Gmsh.y"
+#line 2039 "Gmsh.y"
 { yyval.d = yyvsp[-2].d != yyvsp[0].d ;    ;
     break;}
 case 260:
-#line 2037 "Gmsh.y"
+#line 2040 "Gmsh.y"
 { yyval.d = yyvsp[-2].d && yyvsp[0].d ;    ;
     break;}
 case 261:
-#line 2038 "Gmsh.y"
+#line 2041 "Gmsh.y"
 { yyval.d = yyvsp[-2].d || yyvsp[0].d ;    ;
     break;}
 case 262:
-#line 2039 "Gmsh.y"
+#line 2042 "Gmsh.y"
 { yyval.d = yyvsp[-4].d? yyvsp[-2].d : yyvsp[0].d ; ;
     break;}
 case 263:
-#line 2040 "Gmsh.y"
+#line 2043 "Gmsh.y"
 { yyval.d = exp(yyvsp[-1].d);      ;
     break;}
 case 264:
-#line 2041 "Gmsh.y"
+#line 2044 "Gmsh.y"
 { yyval.d = log(yyvsp[-1].d);      ;
     break;}
 case 265:
-#line 2042 "Gmsh.y"
+#line 2045 "Gmsh.y"
 { yyval.d = log10(yyvsp[-1].d);    ;
     break;}
 case 266:
-#line 2043 "Gmsh.y"
+#line 2046 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-1].d);     ;
     break;}
 case 267:
-#line 2044 "Gmsh.y"
+#line 2047 "Gmsh.y"
 { yyval.d = sin(yyvsp[-1].d);      ;
     break;}
 case 268:
-#line 2045 "Gmsh.y"
+#line 2048 "Gmsh.y"
 { yyval.d = asin(yyvsp[-1].d);     ;
     break;}
 case 269:
-#line 2046 "Gmsh.y"
+#line 2049 "Gmsh.y"
 { yyval.d = cos(yyvsp[-1].d);      ;
     break;}
 case 270:
-#line 2047 "Gmsh.y"
+#line 2050 "Gmsh.y"
 { yyval.d = acos(yyvsp[-1].d);     ;
     break;}
 case 271:
-#line 2048 "Gmsh.y"
+#line 2051 "Gmsh.y"
 { yyval.d = tan(yyvsp[-1].d);      ;
     break;}
 case 272:
-#line 2049 "Gmsh.y"
+#line 2052 "Gmsh.y"
 { yyval.d = atan(yyvsp[-1].d);     ;
     break;}
 case 273:
-#line 2050 "Gmsh.y"
+#line 2053 "Gmsh.y"
 { yyval.d = atan2(yyvsp[-3].d,yyvsp[-1].d); ;
     break;}
 case 274:
-#line 2051 "Gmsh.y"
+#line 2054 "Gmsh.y"
 { yyval.d = sinh(yyvsp[-1].d);     ;
     break;}
 case 275:
-#line 2052 "Gmsh.y"
+#line 2055 "Gmsh.y"
 { yyval.d = cosh(yyvsp[-1].d);     ;
     break;}
 case 276:
-#line 2053 "Gmsh.y"
+#line 2056 "Gmsh.y"
 { yyval.d = tanh(yyvsp[-1].d);     ;
     break;}
 case 277:
-#line 2054 "Gmsh.y"
+#line 2057 "Gmsh.y"
 { yyval.d = fabs(yyvsp[-1].d);     ;
     break;}
 case 278:
-#line 2055 "Gmsh.y"
+#line 2058 "Gmsh.y"
 { yyval.d = floor(yyvsp[-1].d);    ;
     break;}
 case 279:
-#line 2056 "Gmsh.y"
+#line 2059 "Gmsh.y"
 { yyval.d = ceil(yyvsp[-1].d);     ;
     break;}
 case 280:
-#line 2057 "Gmsh.y"
+#line 2060 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
 case 281:
-#line 2058 "Gmsh.y"
+#line 2061 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
 case 282:
-#line 2059 "Gmsh.y"
+#line 2062 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
     break;}
 case 283:
-#line 2060 "Gmsh.y"
+#line 2063 "Gmsh.y"
 { yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
     break;}
 case 284:
-#line 2069 "Gmsh.y"
+#line 2072 "Gmsh.y"
 { yyval.d = yyvsp[0].d; ;
     break;}
 case 285:
-#line 2070 "Gmsh.y"
+#line 2073 "Gmsh.y"
 { yyval.d = 3.141592653589793; ;
     break;}
 case 286:
-#line 2071 "Gmsh.y"
+#line 2074 "Gmsh.y"
 { yyval.d = ParUtil::Instance()->rank(); ;
     break;}
 case 287:
-#line 2072 "Gmsh.y"
+#line 2075 "Gmsh.y"
 { yyval.d = ParUtil::Instance()->size(); ;
     break;}
 case 288:
-#line 2077 "Gmsh.y"
+#line 2080 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[0].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -5166,7 +5169,7 @@ case 288:
     ;
     break;}
 case 289:
-#line 2088 "Gmsh.y"
+#line 2091 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-3].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -5184,7 +5187,7 @@ case 289:
     ;
     break;}
 case 290:
-#line 2105 "Gmsh.y"
+#line 2108 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-1].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -5196,7 +5199,7 @@ case 290:
     ;
     break;}
 case 291:
-#line 2116 "Gmsh.y"
+#line 2119 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-4].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -5214,7 +5217,7 @@ case 291:
     ;
     break;}
 case 292:
-#line 2135 "Gmsh.y"
+#line 2138 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-2].c))){
 	vyyerror("Unknown numeric option class '%s'", yyvsp[-2].c);
@@ -5231,7 +5234,7 @@ case 292:
     ;
     break;}
 case 293:
-#line 2151 "Gmsh.y"
+#line 2154 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-5].c))){
 	vyyerror("Unknown numeric option class '%s'", yyvsp[-5].c);
@@ -5248,7 +5251,7 @@ case 293:
     ;
     break;}
 case 294:
-#line 2167 "Gmsh.y"
+#line 2170 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-3].c))){
 	vyyerror("Unknown numeric option class '%s'", yyvsp[-3].c);
@@ -5265,7 +5268,7 @@ case 294:
     ;
     break;}
 case 295:
-#line 2183 "Gmsh.y"
+#line 2186 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-6].c))){
 	vyyerror("Unknown numeric option class '%s'", yyvsp[-6].c);
@@ -5282,130 +5285,130 @@ case 295:
     ;
     break;}
 case 296:
-#line 2201 "Gmsh.y"
+#line 2204 "Gmsh.y"
 {
       memcpy(yyval.v, yyvsp[0].v, 5*sizeof(double)) ;
     ;
     break;}
 case 297:
-#line 2205 "Gmsh.y"
+#line 2208 "Gmsh.y"
 {
       for(i=0 ; i<5 ; i++) yyval.v[i] = -yyvsp[0].v[i] ;
     ;
     break;}
 case 298:
-#line 2209 "Gmsh.y"
+#line 2212 "Gmsh.y"
 { 
       for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[0].v[i];
     ;
     break;}
 case 299:
-#line 2213 "Gmsh.y"
+#line 2216 "Gmsh.y"
 { 
       for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[-2].v[i] - yyvsp[0].v[i] ;
     ;
     break;}
 case 300:
-#line 2217 "Gmsh.y"
+#line 2220 "Gmsh.y"
 {
       for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[-2].v[i] + yyvsp[0].v[i] ;
     ;
     break;}
 case 301:
-#line 2223 "Gmsh.y"
+#line 2226 "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 302:
-#line 2227 "Gmsh.y"
+#line 2230 "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 303:
-#line 2231 "Gmsh.y"
+#line 2234 "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 304:
-#line 2235 "Gmsh.y"
+#line 2238 "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 305:
-#line 2242 "Gmsh.y"
+#line 2245 "Gmsh.y"
 {
     ;
     break;}
 case 306:
-#line 2245 "Gmsh.y"
+#line 2248 "Gmsh.y"
 {
     ;
     break;}
 case 307:
-#line 2251 "Gmsh.y"
+#line 2254 "Gmsh.y"
 {
     ;
     break;}
 case 308:
-#line 2254 "Gmsh.y"
+#line 2257 "Gmsh.y"
 {
     ;
     break;}
 case 309:
-#line 2260 "Gmsh.y"
+#line 2263 "Gmsh.y"
 {
     ;
     break;}
 case 310:
-#line 2263 "Gmsh.y"
+#line 2266 "Gmsh.y"
 {
        yyval.l=yyvsp[-1].l;
     ;
     break;}
 case 311:
-#line 2267 "Gmsh.y"
+#line 2270 "Gmsh.y"
 {
        yyval.l=yyvsp[-1].l;
     ;
     break;}
 case 312:
-#line 2274 "Gmsh.y"
+#line 2277 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(List_T*)) ;
       List_Add(yyval.l, &(yyvsp[0].l)) ;
     ;
     break;}
 case 313:
-#line 2279 "Gmsh.y"
+#line 2282 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].l)) ;
     ;
     break;}
 case 314:
-#line 2287 "Gmsh.y"
+#line 2290 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       List_Add(yyval.l, &(yyvsp[0].d)) ;
     ;
     break;}
 case 315:
-#line 2292 "Gmsh.y"
+#line 2295 "Gmsh.y"
 {
       yyval.l = yyvsp[0].l ;
     ;
     break;}
 case 316:
-#line 2296 "Gmsh.y"
+#line 2299 "Gmsh.y"
 {
       yyval.l=yyvsp[-1].l;
     ;
     break;}
 case 317:
-#line 2300 "Gmsh.y"
+#line 2303 "Gmsh.y"
 {
       yyval.l=yyvsp[-1].l;
       for(i=0 ; i<List_Nbr(yyval.l) ; i++){
@@ -5415,7 +5418,7 @@ case 317:
     ;
     break;}
 case 318:
-#line 2311 "Gmsh.y"
+#line 2314 "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.)) 
@@ -5423,7 +5426,7 @@ case 318:
     ;
     break;}
 case 319:
-#line 2317 "Gmsh.y"
+#line 2320 "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)){
@@ -5436,7 +5439,7 @@ case 319:
    ;
     break;}
 case 320:
-#line 2328 "Gmsh.y"
+#line 2331 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       TheSymbol.Name = yyvsp[-2].c ;
@@ -5452,7 +5455,7 @@ case 320:
     ;
     break;}
 case 321:
-#line 2342 "Gmsh.y"
+#line 2345 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       TheSymbol.Name = yyvsp[-2].c ;
@@ -5470,7 +5473,7 @@ case 321:
     ;
     break;}
 case 322:
-#line 2358 "Gmsh.y"
+#line 2361 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       TheSymbol.Name = yyvsp[-5].c ;
@@ -5492,7 +5495,7 @@ case 322:
     ;
     break;}
 case 323:
-#line 2378 "Gmsh.y"
+#line 2381 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       TheSymbol.Name = yyvsp[-5].c ;
@@ -5516,26 +5519,26 @@ case 323:
     ;
     break;}
 case 324:
-#line 2403 "Gmsh.y"
+#line 2406 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       List_Add(yyval.l, &(yyvsp[0].d)) ;
     ;
     break;}
 case 325:
-#line 2408 "Gmsh.y"
+#line 2411 "Gmsh.y"
 {
       yyval.l = yyvsp[0].l ;
     ;
     break;}
 case 326:
-#line 2412 "Gmsh.y"
+#line 2415 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].d)) ;
     ;
     break;}
 case 327:
-#line 2416 "Gmsh.y"
+#line 2419 "Gmsh.y"
 {
       for(i=0 ; i<List_Nbr(yyvsp[0].l) ; i++){
 	List_Read(yyvsp[0].l, i, &d) ;
@@ -5545,26 +5548,26 @@ case 327:
     ;
     break;}
 case 328:
-#line 2428 "Gmsh.y"
+#line 2431 "Gmsh.y"
 {
       yyval.u = PACK_COLOR((int)yyvsp[-7].d, (int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d);
     ;
     break;}
 case 329:
-#line 2432 "Gmsh.y"
+#line 2435 "Gmsh.y"
 {
       yyval.u = PACK_COLOR((int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d, 255);
     ;
     break;}
 case 330:
-#line 2443 "Gmsh.y"
+#line 2446 "Gmsh.y"
 {
       yyval.u = Get_ColorForString(ColorString, -1, yyvsp[0].c, &flag);
       if(flag) vyyerror("Unknown color '%s'", yyvsp[0].c);
     ;
     break;}
 case 331:
-#line 2448 "Gmsh.y"
+#line 2451 "Gmsh.y"
 {
       if(!(pColCat = Get_ColorOptionCategory(yyvsp[-4].c))){
 	vyyerror("Unknown color option class '%s'", yyvsp[-4].c);
@@ -5582,13 +5585,13 @@ case 331:
     ;
     break;}
 case 332:
-#line 2467 "Gmsh.y"
+#line 2470 "Gmsh.y"
 {
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 333:
-#line 2471 "Gmsh.y"
+#line 2474 "Gmsh.y"
 {
       yyval.l = List_Create(256,10,sizeof(unsigned int)) ;
       ColorTable *ct = Get_ColorTable((int)yyvsp[-3].d);
@@ -5601,26 +5604,26 @@ case 333:
     ;
     break;}
 case 334:
-#line 2485 "Gmsh.y"
+#line 2488 "Gmsh.y"
 {
       yyval.l = List_Create(256,10,sizeof(unsigned int)) ;
       List_Add(yyval.l, &(yyvsp[0].u)) ;
     ;
     break;}
 case 335:
-#line 2490 "Gmsh.y"
+#line 2493 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].u)) ;
     ;
     break;}
 case 336:
-#line 2497 "Gmsh.y"
+#line 2500 "Gmsh.y"
 {
       yyval.c = yyvsp[0].c;
     ;
     break;}
 case 337:
-#line 2501 "Gmsh.y"
+#line 2504 "Gmsh.y"
 {
       yyval.c = (char *)Malloc((strlen(yyvsp[-3].c)+strlen(yyvsp[-1].c)+1)*sizeof(char)) ;
       strcpy(yyval.c, yyvsp[-3].c) ;  
@@ -5630,7 +5633,7 @@ case 337:
     ;
     break;}
 case 338:
-#line 2509 "Gmsh.y"
+#line 2512 "Gmsh.y"
 {
       yyval.c = (char *)Malloc((strlen(yyvsp[-1].c)+1)*sizeof(char)) ;
       for(i=strlen(yyvsp[-1].c)-1; i>=0; i--){
@@ -5645,13 +5648,13 @@ case 338:
     ;
     break;}
 case 339:
-#line 2522 "Gmsh.y"
+#line 2525 "Gmsh.y"
 {
       yyval.c = yyvsp[-1].c;
     ;
     break;}
 case 340:
-#line 2526 "Gmsh.y"
+#line 2529 "Gmsh.y"
 {
       for(i = 0 ; i<List_Nbr(yyvsp[-1].l) ; i++){
 	if(!i){
@@ -5678,7 +5681,7 @@ case 340:
     ;
     break;}
 case 341:
-#line 2551 "Gmsh.y"
+#line 2554 "Gmsh.y"
 { 
       if(!(pStrCat = Get_StringOptionCategory(yyvsp[-3].c)))
 	vyyerror("Unknown string option class '%s'", yyvsp[-3].c);
@@ -5694,7 +5697,7 @@ case 341:
     ;
     break;}
 case 342:
-#line 2565 "Gmsh.y"
+#line 2568 "Gmsh.y"
 { 
       if(!(pStrCat = Get_StringOptionCategory(yyvsp[-6].c)))
 	vyyerror("Unknown string option class '%s'", yyvsp[-6].c);
@@ -5931,7 +5934,7 @@ yyerrhandle:
     }
   return 1;
 }
-#line 2580 "Gmsh.y"
+#line 2583 "Gmsh.y"
 
 
 void InitSymbols(void){
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index f96299fea5fb5a6b436d265a333dafa8f2a1863e..7b084b718795cf737306e084ede0edc6b16fdf48 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1,6 +1,6 @@
 %{ 
 
-// $Id: Gmsh.y,v 1.96 2001-08-20 10:30:20 geuzaine Exp $
+// $Id: Gmsh.y,v 1.97 2001-08-27 11:19:18 geuzaine Exp $
 
   //
   // Generaliser sprintf avec des chaines de caracteres
@@ -1257,19 +1257,22 @@ Shape :
       List_T *Temp;
       int i;
       double d;
-      if((int)$10 + 1 + List_Nbr($6) != List_Nbr($8)){
+      if(List_Nbr($6) + (int)$10 + 1 != List_Nbr($8)){
 	vyyerror("Wrong definition of Nurbs Curve %d: "
-		"[Degree]%d + 1 + [NbPts]%d != [NbKnots]%d",
-		(int)$3, (int)$10, List_Nbr($6), List_Nbr($8));
+		 "got %d Knots, need N + D + 1 = %d + %d + 1 = %d",
+		 (int)$3, 
+		 List_Nbr($8), List_Nbr($6), (int)$10, List_Nbr($6) + (int)$10 + 1);
       }
-      Temp = List_Create(List_Nbr($6),1,sizeof(int));
-      for(i=0;i<List_Nbr($6);i++) {
-      	List_Read($6,i,&d);
-        j = (int)d;
-        List_Add(Temp,&j);
+      else{
+	Temp = List_Create(List_Nbr($6),1,sizeof(int));
+	for(i=0;i<List_Nbr($6);i++) {
+	  List_Read($6,i,&d);
+	  j = (int)d;
+	  List_Add(Temp,&j);
+	}
+	AddCurveInDataBase ((int)$3,MSH_SEGM_NURBS,(int)$10,Temp,$8,-1,-1,0.,1.);
+	List_Delete(Temp);
       }
-      AddCurveInDataBase ((int)$3,MSH_SEGM_NURBS,(int)$10,Temp,$8,-1,-1,0.,1.);
-      List_Delete(Temp);
     }
   | tLine '{' FExpr '}' tEND
     {
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index 9eae60b210ec808f48dc81cd5eb810dc1ca613d9..7ed81a5f63587d885cc32f027aa3109e30115c5d 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.110 2001-08-20 10:30:20 geuzaine Exp $
+ * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.111 2001-08-27 11:19:19 geuzaine Exp $
  */
 
 #define FLEX_SCANNER
@@ -998,7 +998,7 @@ char *yytext;
 #define INITIAL 0
 #line 2 "Gmsh.l"
 
-// $Id: Gmsh.yy.cpp,v 1.110 2001-08-20 10:30:20 geuzaine Exp $
+// $Id: Gmsh.yy.cpp,v 1.111 2001-08-27 11:19:19 geuzaine Exp $
 
 #include <stdio.h>
 #include <stdlib.h>