diff --git a/Common/OpenFile.cpp b/Common/OpenFile.cpp
index 150cb3fbd411c6f5392917718504566eceee147d..a1881b2695a043a651bd23b3b346c0cd4bd2dd83 100644
--- a/Common/OpenFile.cpp
+++ b/Common/OpenFile.cpp
@@ -148,6 +148,8 @@ void AddToTemporaryBoundingBox(double x, double y, double z)
   for(int i = 0; i < 3; i++) CTX::instance()->cg[i] = temp_bb.center()[i];
 }
 
+static std::vector<FILE*> openedFiles;
+
 int ParseFile(std::string fileName, bool close, bool warnIfMissing)
 {
 #if !defined(HAVE_PARSER)
@@ -193,6 +195,9 @@ int ParseFile(std::string fileName, bool close, bool warnIfMissing)
     gmsh_yyflush();
     fclose(gmsh_yyin);
   }
+  else{
+    openedFiles.push_back(gmsh_yyin);
+  }
 
   gmsh_yyname = old_yyname;
   gmsh_yyin = old_yyin;
@@ -424,6 +429,14 @@ void ClearProject()
 #endif
   for(int i = GModel::list.size() - 1; i >= 0; i--)
     delete GModel::list[i];
+
+  // close the files that might have been left open by ParseFile
+  if(openedFiles.size()){
+    for(unsigned int i = 0; i < openedFiles.size(); i++)
+      fclose(openedFiles[i]);
+    openedFiles.clear();
+  }
+
   new GModel();
   GModel::current()->setFileName(CTX::instance()->defaultFileName);
   GModel::current()->setName("");
@@ -482,6 +495,14 @@ void OpenProject(std::string fileName)
       FlGui::instance()->menu->fillRecentHistoryMenu();
 #endif
   }
+
+  // close the files that might have been left open by ParseFile
+  if(openedFiles.size()){
+    for(unsigned int i = 0; i < openedFiles.size(); i++)
+      fclose(openedFiles[i]);
+    openedFiles.clear();
+  }
+
   CTX::instance()->lock = 0;
 
 #if defined(HAVE_FLTK)
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 6c492ce7a6aee6fa753181772b7c3672334e52f9..5b7065b2c482649467b64f8c07ffd42d2aad5f61 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -1,10 +1,9 @@
-
-/* A Bison parser, made by GNU Bison 2.4.1.  */
+/* A Bison parser, made by GNU Bison 2.4.3.  */
 
 /* Skeleton implementation for Bison's Yacc-like parsers in C
    
-      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
+      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+   2009, 2010 Free Software Foundation, Inc.
    
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -46,7 +45,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.4.1"
+#define YYBISON_VERSION "2.4.3"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -164,7 +163,7 @@ fullMatrix<double> ListOfListOfDouble2Matrix(List_T *list);
 
 
 /* Line 189 of yacc.c  */
-#line 168 "Gmsh.tab.cpp"
+#line 167 "Gmsh.tab.cpp"
 
 /* Enabling traces.  */
 #ifndef YYDEBUG
@@ -349,7 +348,7 @@ typedef union YYSTYPE
 
 
 /* Line 214 of yacc.c  */
-#line 353 "Gmsh.tab.cpp"
+#line 352 "Gmsh.tab.cpp"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -361,7 +360,7 @@ typedef union YYSTYPE
 
 
 /* Line 264 of yacc.c  */
-#line 365 "Gmsh.tab.cpp"
+#line 364 "Gmsh.tab.cpp"
 
 #ifdef short
 # undef short
@@ -411,7 +410,7 @@ typedef short int yytype_int16;
 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
 
 #ifndef YY_
-# if YYENABLE_NLS
+# if defined YYENABLE_NLS && YYENABLE_NLS
 #  if ENABLE_NLS
 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
@@ -947,31 +946,31 @@ static const yytype_uint16 yyrline[] =
     1773,  1778,  1783,  1788,  1793,  1816,  1822,  1833,  1834,  1839,
     1842,  1846,  1869,  1892,  1915,  1943,  1964,  1987,  2008,  2030,
     2050,  2162,  2181,  2219,  2328,  2337,  2343,  2358,  2386,  2403,
-    2417,  2423,  2429,  2438,  2452,  2494,  2511,  2526,  2545,  2557,
-    2581,  2585,  2592,  2598,  2603,  2609,  2613,  2617,  2627,  2644,
-    2661,  2682,  2703,  2738,  2746,  2752,  2759,  2763,  2772,  2780,
-    2788,  2797,  2796,  2810,  2809,  2823,  2822,  2836,  2835,  2848,
-    2855,  2862,  2869,  2876,  2883,  2890,  2897,  2904,  2912,  2911,
-    2924,  2923,  2936,  2935,  2948,  2947,  2960,  2959,  2972,  2971,
-    2984,  2983,  2996,  2995,  3008,  3007,  3023,  3026,  3032,  3041,
-    3061,  3084,  3088,  3092,  3096,  3100,  3104,  3123,  3136,  3139,
-    3155,  3158,  3171,  3174,  3180,  3183,  3190,  3246,  3316,  3321,
-    3388,  3424,  3467,  3492,  3519,  3563,  3586,  3609,  3612,  3621,
-    3625,  3635,  3670,  3671,  3675,  3680,  3691,  3713,  3714,  3715,
-    3716,  3717,  3718,  3719,  3720,  3721,  3728,  3729,  3730,  3731,
-    3732,  3733,  3734,  3735,  3736,  3737,  3738,  3739,  3740,  3741,
-    3742,  3743,  3744,  3745,  3746,  3747,  3748,  3749,  3750,  3751,
-    3752,  3753,  3754,  3755,  3756,  3757,  3758,  3759,  3761,  3762,
-    3763,  3764,  3765,  3766,  3767,  3768,  3769,  3770,  3771,  3772,
-    3773,  3774,  3775,  3776,  3777,  3778,  3779,  3780,  3781,  3790,
-    3791,  3792,  3793,  3794,  3795,  3796,  3800,  3820,  3839,  3857,
-    3869,  3886,  3907,  3912,  3917,  3927,  3937,  3945,  3949,  3953,
-    3957,  3961,  3968,  3972,  3976,  3980,  3987,  3992,  3999,  4004,
-    4008,  4013,  4017,  4025,  4036,  4040,  4052,  4060,  4068,  4075,
-    4086,  4106,  4110,  4114,  4118,  4122,  4132,  4142,  4154,  4166,
-    4187,  4192,  4196,  4200,  4212,  4216,  4228,  4235,  4245,  4249,
-    4264,  4269,  4276,  4280,  4293,  4301,  4312,  4316,  4324,  4332,
-    4340,  4348,  4362,  4376,  4380
+    2417,  2423,  2429,  2438,  2452,  2495,  2512,  2527,  2546,  2558,
+    2582,  2586,  2593,  2599,  2604,  2610,  2614,  2618,  2628,  2645,
+    2662,  2683,  2704,  2739,  2747,  2753,  2760,  2764,  2773,  2781,
+    2789,  2798,  2797,  2811,  2810,  2824,  2823,  2837,  2836,  2849,
+    2856,  2863,  2870,  2877,  2884,  2891,  2898,  2905,  2913,  2912,
+    2925,  2924,  2937,  2936,  2949,  2948,  2961,  2960,  2973,  2972,
+    2985,  2984,  2997,  2996,  3009,  3008,  3024,  3027,  3033,  3042,
+    3062,  3085,  3089,  3093,  3097,  3101,  3105,  3124,  3137,  3140,
+    3156,  3159,  3172,  3175,  3181,  3184,  3191,  3247,  3317,  3322,
+    3389,  3425,  3468,  3493,  3520,  3564,  3587,  3610,  3613,  3622,
+    3626,  3636,  3671,  3672,  3676,  3681,  3692,  3714,  3715,  3716,
+    3717,  3718,  3719,  3720,  3721,  3722,  3729,  3730,  3731,  3732,
+    3733,  3734,  3735,  3736,  3737,  3738,  3739,  3740,  3741,  3742,
+    3743,  3744,  3745,  3746,  3747,  3748,  3749,  3750,  3751,  3752,
+    3753,  3754,  3755,  3756,  3757,  3758,  3759,  3760,  3762,  3763,
+    3764,  3765,  3766,  3767,  3768,  3769,  3770,  3771,  3772,  3773,
+    3774,  3775,  3776,  3777,  3778,  3779,  3780,  3781,  3782,  3791,
+    3792,  3793,  3794,  3795,  3796,  3797,  3801,  3821,  3840,  3858,
+    3870,  3887,  3908,  3913,  3918,  3928,  3938,  3946,  3950,  3954,
+    3958,  3962,  3969,  3973,  3977,  3981,  3988,  3993,  4000,  4005,
+    4009,  4014,  4018,  4026,  4037,  4041,  4053,  4061,  4069,  4076,
+    4087,  4107,  4111,  4115,  4119,  4123,  4133,  4143,  4155,  4167,
+    4188,  4193,  4197,  4201,  4213,  4217,  4229,  4236,  4246,  4250,
+    4265,  4270,  4277,  4281,  4294,  4302,  4313,  4317,  4325,  4333,
+    4341,  4349,  4363,  4377,  4381
 };
 #endif
 
@@ -3167,9 +3166,18 @@ static const yytype_uint8 yystos[] =
 
 /* Like YYERROR except do call yyerror.  This remains here temporarily
    to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  */
+   Once GCC version 2 has supplanted version 1, this can go.  However,
+   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
+   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+   discussed.  */
 
 #define YYFAIL		goto yyerrlab
+#if defined YYFAIL
+  /* This is here to suppress warnings from the GCC cpp's
+     -Wunused-macros.  Normally we don't worry about that warning, but
+     some users do, and we want to make it easy for users to remove
+     YYFAIL uses, which will produce warnings from Bison 2.5.  */
+#endif
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
@@ -3226,7 +3234,7 @@ while (YYID (0))
    we won't break user code: when these are the locations we know.  */
 
 #ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
+# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
 #  define YY_LOCATION_PRINT(File, Loc)			\
      fprintf (File, "%d.%d-%d.%d",			\
 	      (Loc).first_line, (Loc).first_column,	\
@@ -3965,133 +3973,133 @@ yyreduce:
     {
         case 3:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 159 "Gmsh.y"
     { yyerrok; return 1; ;}
     break;
 
   case 6:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 170 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 7:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 171 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 8:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 172 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 9:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 173 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 10:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 174 "Gmsh.y"
     { List_Delete((yyvsp[(1) - (1)].l)); return 1; ;}
     break;
 
   case 11:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 175 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 12:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 176 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 13:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 177 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 14:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 178 "Gmsh.y"
     { List_Delete((yyvsp[(1) - (1)].l)); return 1; ;}
     break;
 
   case 15:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 179 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 16:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 180 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 17:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 181 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 18:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 182 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 19:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 183 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 20:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 184 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 21:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 185 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 22:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 186 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 23:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 191 "Gmsh.y"
     {
       (yyval.c) = (char*)"w";
@@ -4100,7 +4108,7 @@ yyreduce:
 
   case 24:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 195 "Gmsh.y"
     {
       (yyval.c) = (char*)"a";
@@ -4109,7 +4117,7 @@ yyreduce:
 
   case 25:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 202 "Gmsh.y"
     {
       Msg::Direct((yyvsp[(3) - (5)].c));
@@ -4119,7 +4127,7 @@ yyreduce:
 
   case 26:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 207 "Gmsh.y"
     {
       std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(6) - (7)].c));
@@ -4138,7 +4146,7 @@ yyreduce:
 
   case 27:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 221 "Gmsh.y"
     {
       char tmpstring[1024];
@@ -4156,7 +4164,7 @@ yyreduce:
 
   case 28:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 234 "Gmsh.y"
     {
       char tmpstring[1024];
@@ -4184,7 +4192,7 @@ yyreduce:
 
   case 29:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 262 "Gmsh.y"
     {
 #if defined(HAVE_POST)
@@ -4203,7 +4211,7 @@ yyreduce:
 
   case 30:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 276 "Gmsh.y"
     {
 #if defined(HAVE_POST)
@@ -4219,7 +4227,7 @@ yyreduce:
 
   case 31:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 287 "Gmsh.y"
     {
 #if defined(HAVE_POST)
@@ -4235,7 +4243,7 @@ yyreduce:
 
   case 32:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 301 "Gmsh.y"
     {
 #if defined(HAVE_POST)
@@ -4246,35 +4254,35 @@ yyreduce:
 
   case 38:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 315 "Gmsh.y"
     { ViewCoord.push_back((yyvsp[(1) - (1)].d)); ;}
     break;
 
   case 39:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 317 "Gmsh.y"
     { ViewCoord.push_back((yyvsp[(3) - (3)].d)); ;}
     break;
 
   case 40:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 322 "Gmsh.y"
     { if(ViewValueList) ViewValueList->push_back((yyvsp[(1) - (1)].d)); ;}
     break;
 
   case 41:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 324 "Gmsh.y"
     { if(ViewValueList) ViewValueList->push_back((yyvsp[(3) - (3)].d)); ;}
     break;
 
   case 42:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 329 "Gmsh.y"
     {
 #if defined(HAVE_POST)
@@ -4383,7 +4391,7 @@ yyreduce:
 
   case 43:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 433 "Gmsh.y"
     {
 #if defined(HAVE_POST)
@@ -4398,7 +4406,7 @@ yyreduce:
 
   case 44:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 443 "Gmsh.y"
     {
 #if defined(HAVE_POST)
@@ -4409,7 +4417,7 @@ yyreduce:
 
   case 45:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 452 "Gmsh.y"
     {
 #if defined(HAVE_POST)
@@ -4421,7 +4429,7 @@ yyreduce:
 
   case 46:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 459 "Gmsh.y"
     {
 #if defined(HAVE_POST)
@@ -4433,7 +4441,7 @@ yyreduce:
 
   case 47:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 469 "Gmsh.y"
     {
 #if defined(HAVE_POST)
@@ -4447,7 +4455,7 @@ yyreduce:
 
   case 48:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 478 "Gmsh.y"
     {
 #if defined(HAVE_POST)
@@ -4458,7 +4466,7 @@ yyreduce:
 
   case 49:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 487 "Gmsh.y"
     {
 #if defined(HAVE_POST)
@@ -4470,7 +4478,7 @@ yyreduce:
 
   case 50:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 494 "Gmsh.y"
     {
 #if defined(HAVE_POST)
@@ -4482,7 +4490,7 @@ yyreduce:
 
   case 51:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 504 "Gmsh.y"
     {
 #if defined(HAVE_POST)
@@ -4495,7 +4503,7 @@ yyreduce:
 
   case 52:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 512 "Gmsh.y"
     {
 #if defined(HAVE_POST)
@@ -4506,7 +4514,7 @@ yyreduce:
 
   case 53:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 522 "Gmsh.y"
     {
 #if defined(HAVE_POST)
@@ -4527,7 +4535,7 @@ yyreduce:
 
   case 54:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 541 "Gmsh.y"
     {
 #if defined(HAVE_POST)
@@ -4548,7 +4556,7 @@ yyreduce:
 
   case 55:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 560 "Gmsh.y"
     {
 #if defined(HAVE_POST)
@@ -4559,7 +4567,7 @@ yyreduce:
 
   case 56:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 566 "Gmsh.y"
     {
     ;}
@@ -4567,56 +4575,56 @@ yyreduce:
 
   case 57:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 573 "Gmsh.y"
     { (yyval.i) = 0; ;}
     break;
 
   case 58:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 574 "Gmsh.y"
     { (yyval.i) = 1; ;}
     break;
 
   case 59:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 575 "Gmsh.y"
     { (yyval.i) = 2; ;}
     break;
 
   case 60:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 576 "Gmsh.y"
     { (yyval.i) = 3; ;}
     break;
 
   case 61:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 577 "Gmsh.y"
     { (yyval.i) = 4; ;}
     break;
 
   case 62:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 581 "Gmsh.y"
     { (yyval.i) = 1; ;}
     break;
 
   case 63:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 582 "Gmsh.y"
     { (yyval.i) = -1; ;}
     break;
 
   case 65:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 591 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c)) && (yyvsp[(2) - (4)].i) && List_Nbr((yyvsp[(3) - (4)].l)) == 1){
@@ -4681,7 +4689,7 @@ yyreduce:
 
   case 66:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 654 "Gmsh.y"
     {
       gmsh_yysymbol &s(gmsh_yysymbols[(yyvsp[(1) - (6)].c)]);
@@ -4715,7 +4723,7 @@ yyreduce:
 
   case 67:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 684 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (7)].d);
@@ -4753,7 +4761,7 @@ yyreduce:
 
   case 68:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 717 "Gmsh.y"
     {
       if(List_Nbr((yyvsp[(4) - (9)].l)) != List_Nbr((yyvsp[(8) - (9)].l))){
@@ -4804,7 +4812,7 @@ yyreduce:
 
   case 69:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 763 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -4824,7 +4832,7 @@ yyreduce:
 
   case 70:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 778 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -4845,7 +4853,7 @@ yyreduce:
 
   case 71:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 794 "Gmsh.y"
     {
       gmsh_yystringsymbols[(yyvsp[(1) - (4)].c)] = std::string((yyvsp[(3) - (4)].c));
@@ -4856,7 +4864,7 @@ yyreduce:
 
   case 72:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 803 "Gmsh.y"
     {
       std::string tmp((yyvsp[(5) - (6)].c));
@@ -4867,7 +4875,7 @@ yyreduce:
 
   case 73:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 809 "Gmsh.y"
     {
       std::string tmp((yyvsp[(8) - (9)].c));
@@ -4878,7 +4886,7 @@ yyreduce:
 
   case 74:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 818 "Gmsh.y"
     {
       double d = 0.;
@@ -4901,7 +4909,7 @@ yyreduce:
 
   case 75:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 836 "Gmsh.y"
     {
       double d = 0.;
@@ -4924,7 +4932,7 @@ yyreduce:
 
   case 76:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 854 "Gmsh.y"
     {
       double d = 0.;
@@ -4938,7 +4946,7 @@ yyreduce:
 
   case 77:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 863 "Gmsh.y"
     {
       double d = 0.;
@@ -4952,7 +4960,7 @@ yyreduce:
 
   case 78:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 875 "Gmsh.y"
     {
       ColorOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (8)].c), 0, (yyvsp[(5) - (8)].c), (yyvsp[(7) - (8)].u));
@@ -4962,7 +4970,7 @@ yyreduce:
 
   case 79:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 880 "Gmsh.y"
     {
       ColorOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (11)].c), (int)(yyvsp[(3) - (11)].d), (yyvsp[(8) - (11)].c), (yyvsp[(10) - (11)].u));
@@ -4972,7 +4980,7 @@ yyreduce:
 
   case 80:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 888 "Gmsh.y"
     {
       GmshColorTable *ct = GetColorTable(0);
@@ -4997,7 +5005,7 @@ yyreduce:
 
   case 81:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 908 "Gmsh.y"
     {
       GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (9)].d));
@@ -5022,7 +5030,7 @@ yyreduce:
 
   case 82:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 931 "Gmsh.y"
     {
 #if defined(HAVE_MESH)
@@ -5038,7 +5046,7 @@ yyreduce:
 
   case 83:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 942 "Gmsh.y"
     {
 #if defined(HAVE_MESH)
@@ -5051,7 +5059,7 @@ yyreduce:
 
   case 84:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 950 "Gmsh.y"
     {
 #if defined(HAVE_MESH)
@@ -5078,7 +5086,7 @@ yyreduce:
 
   case 85:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 972 "Gmsh.y"
     {
 #if defined(HAVE_MESH)
@@ -5106,7 +5114,7 @@ yyreduce:
 
   case 86:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 995 "Gmsh.y"
     {
 #if defined(HAVE_MESH)
@@ -5136,7 +5144,7 @@ yyreduce:
 
   case 87:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1020 "Gmsh.y"
     {
 #if defined(HAVE_MESH)
@@ -5159,7 +5167,7 @@ yyreduce:
 
   case 88:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1041 "Gmsh.y"
     {
 #if defined(HAVE_PLUGINS)
@@ -5176,7 +5184,7 @@ yyreduce:
 
   case 89:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1053 "Gmsh.y"
     {
 #if defined(HAVE_PLUGINS)
@@ -5193,7 +5201,7 @@ yyreduce:
 
   case 93:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1071 "Gmsh.y"
     {
       std::string key((yyvsp[(3) - (3)].c));
@@ -5209,7 +5217,7 @@ yyreduce:
 
   case 94:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1082 "Gmsh.y"
     {
       std::string key((yyvsp[(3) - (5)].c));
@@ -5225,14 +5233,14 @@ yyreduce:
 
   case 95:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1093 "Gmsh.y"
     { floatOptions.clear(); charOptions.clear(); ;}
     break;
 
   case 96:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1095 "Gmsh.y"
     {
       std::string key((yyvsp[(3) - (9)].c));
@@ -5246,7 +5254,7 @@ yyreduce:
 
   case 99:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1111 "Gmsh.y"
     {
       std::string key((yyvsp[(2) - (3)].c));
@@ -5262,7 +5270,7 @@ yyreduce:
 
   case 100:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1122 "Gmsh.y"
     {
       std::string key((yyvsp[(2) - (3)].c));
@@ -5275,7 +5283,7 @@ yyreduce:
 
   case 101:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1135 "Gmsh.y"
     {
       (yyval.i) = (int)(yyvsp[(1) - (1)].d);
@@ -5284,7 +5292,7 @@ yyreduce:
 
   case 102:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1139 "Gmsh.y"
     {
       (yyval.i) = GModel::current()->setPhysicalName
@@ -5296,7 +5304,7 @@ yyreduce:
 
   case 103:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1149 "Gmsh.y"
     {
       (yyval.l) = 0;
@@ -5305,7 +5313,7 @@ yyreduce:
 
   case 104:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1153 "Gmsh.y"
     {
       (yyval.l) = List_Create(1, 1, sizeof(Vertex*));
@@ -5320,7 +5328,7 @@ yyreduce:
 
   case 105:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1165 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++) (yyval.v)[i] = 0.;
@@ -5329,7 +5337,7 @@ yyreduce:
 
   case 106:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1169 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
@@ -5338,7 +5346,7 @@ yyreduce:
 
   case 107:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1179 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
@@ -5366,7 +5374,7 @@ yyreduce:
 
   case 108:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1202 "Gmsh.y"
     {
       curPhysDim = 0;
@@ -5375,7 +5383,7 @@ yyreduce:
 
   case 109:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1206 "Gmsh.y"
     {
       int num = (int)(yyvsp[(5) - (9)].i);
@@ -5396,7 +5404,7 @@ yyreduce:
 
   case 110:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1222 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
@@ -5420,7 +5428,7 @@ yyreduce:
 
   case 111:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1244 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
@@ -5443,7 +5451,7 @@ yyreduce:
 
   case 112:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1262 "Gmsh.y"
     {
       for (int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
@@ -5469,7 +5477,7 @@ yyreduce:
 
   case 113:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1283 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
@@ -5492,7 +5500,7 @@ yyreduce:
 
   case 114:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1301 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (8)].d);
@@ -5527,7 +5535,7 @@ yyreduce:
 
   case 115:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1331 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (8)].d);
@@ -5562,7 +5570,7 @@ yyreduce:
 
   case 116:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1361 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
@@ -5585,7 +5593,7 @@ yyreduce:
 
   case 117:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1379 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
@@ -5608,7 +5616,7 @@ yyreduce:
 
   case 118:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1397 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (11)].d);
@@ -5639,7 +5647,7 @@ yyreduce:
 
   case 119:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1423 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
@@ -5662,7 +5670,7 @@ yyreduce:
 
   case 120:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1441 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
@@ -5685,7 +5693,7 @@ yyreduce:
 
   case 121:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1459 "Gmsh.y"
     {
       curPhysDim = 1;
@@ -5694,7 +5702,7 @@ yyreduce:
 
   case 122:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1463 "Gmsh.y"
     {
       int num = (int)(yyvsp[(5) - (9)].i);
@@ -5715,7 +5723,7 @@ yyreduce:
 
   case 123:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1482 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
@@ -5738,7 +5746,7 @@ yyreduce:
 
   case 124:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1500 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (9)].d), type = 0;
@@ -5782,7 +5790,7 @@ yyreduce:
 
   case 125:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1539 "Gmsh.y"
     {
       myGmshSurface = 0;
@@ -5793,7 +5801,7 @@ yyreduce:
 
   case 126:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1545 "Gmsh.y"
     {
       myGmshSurface = gmshSurface::getSurface((int)(yyvsp[(3) - (4)].d));
@@ -5804,7 +5812,7 @@ yyreduce:
 
   case 127:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1551 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (10)].d);
@@ -5816,7 +5824,7 @@ yyreduce:
 
   case 128:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1558 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
@@ -5846,7 +5854,7 @@ yyreduce:
 
   case 129:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1583 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
@@ -5876,7 +5884,7 @@ yyreduce:
 
   case 130:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1608 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
@@ -5898,7 +5906,7 @@ yyreduce:
 
   case 131:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1625 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
@@ -5920,7 +5928,7 @@ yyreduce:
 
   case 132:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1643 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (12)].d);
@@ -5955,7 +5963,7 @@ yyreduce:
 
   case 133:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1673 "Gmsh.y"
     {
       curPhysDim = 2;
@@ -5964,7 +5972,7 @@ yyreduce:
 
   case 134:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1677 "Gmsh.y"
     {
       int num = (int)(yyvsp[(5) - (9)].i);
@@ -5985,7 +5993,7 @@ yyreduce:
 
   case 135:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1697 "Gmsh.y"
     {
       yymsg(0, "'Complex Volume' command is deprecated: use 'Volume' instead");
@@ -6008,7 +6016,7 @@ yyreduce:
 
   case 136:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1715 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
@@ -6030,7 +6038,7 @@ yyreduce:
 
   case 137:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1732 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
@@ -6051,7 +6059,7 @@ yyreduce:
 
   case 138:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1748 "Gmsh.y"
     {
       curPhysDim = 3;
@@ -6060,7 +6068,7 @@ yyreduce:
 
   case 139:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1752 "Gmsh.y"
     {
       int num = (int)(yyvsp[(5) - (9)].i);
@@ -6081,7 +6089,7 @@ yyreduce:
 
   case 140:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1774 "Gmsh.y"
     {
       TranslateShapes((yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], (yyvsp[(4) - (5)].l));
@@ -6091,7 +6099,7 @@ yyreduce:
 
   case 141:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1779 "Gmsh.y"
     {
       RotateShapes((yyvsp[(3) - (11)].v)[0], (yyvsp[(3) - (11)].v)[1], (yyvsp[(3) - (11)].v)[2], (yyvsp[(5) - (11)].v)[0], (yyvsp[(5) - (11)].v)[1], (yyvsp[(5) - (11)].v)[2], (yyvsp[(7) - (11)].d), (yyvsp[(10) - (11)].l));
@@ -6101,7 +6109,7 @@ yyreduce:
 
   case 142:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1784 "Gmsh.y"
     {
       SymmetryShapes((yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], (yyvsp[(2) - (5)].v)[3], (yyvsp[(4) - (5)].l));
@@ -6111,7 +6119,7 @@ yyreduce:
 
   case 143:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1789 "Gmsh.y"
     {
       DilatShapes((yyvsp[(3) - (9)].v)[0], (yyvsp[(3) - (9)].v)[1], (yyvsp[(3) - (9)].v)[2], (yyvsp[(5) - (9)].d), (yyvsp[(8) - (9)].l));
@@ -6121,7 +6129,7 @@ yyreduce:
 
   case 144:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1794 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
@@ -6149,7 +6157,7 @@ yyreduce:
 
   case 145:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1817 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
@@ -6160,7 +6168,7 @@ yyreduce:
 
   case 146:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1823 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape*));
@@ -6173,21 +6181,21 @@ yyreduce:
 
   case 147:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1833 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
   case 148:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1834 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
   case 149:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1839 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
@@ -6196,7 +6204,7 @@ yyreduce:
 
   case 150:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1843 "Gmsh.y"
     {
       List_Add((yyval.l), &(yyvsp[(2) - (2)].s));
@@ -6205,7 +6213,7 @@ yyreduce:
 
   case 151:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1847 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
@@ -6233,7 +6241,7 @@ yyreduce:
 
   case 152:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1870 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
@@ -6261,7 +6269,7 @@ yyreduce:
 
   case 153:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1893 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
@@ -6289,7 +6297,7 @@ yyreduce:
 
   case 154:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1916 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
@@ -6317,7 +6325,7 @@ yyreduce:
 
   case 155:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1944 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
@@ -6343,7 +6351,7 @@ yyreduce:
 
   case 156:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1965 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
@@ -6371,7 +6379,7 @@ yyreduce:
 
   case 157:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 1989 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
@@ -6396,7 +6404,7 @@ yyreduce:
 
   case 158:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2010 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
@@ -6422,7 +6430,7 @@ yyreduce:
 
   case 159:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2031 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
@@ -6447,7 +6455,7 @@ yyreduce:
 
   case 160:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2051 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
@@ -6564,7 +6572,7 @@ yyreduce:
 
   case 161:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2163 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
@@ -6588,7 +6596,7 @@ yyreduce:
 
   case 162:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2182 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
@@ -6631,7 +6639,7 @@ yyreduce:
 
   case 163:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2221 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
@@ -6739,7 +6747,7 @@ yyreduce:
 
   case 164:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2329 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
@@ -6753,7 +6761,7 @@ yyreduce:
 
   case 165:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2338 "Gmsh.y"
     {
 #if defined(HAVE_MESH)
@@ -6764,7 +6772,7 @@ yyreduce:
 
   case 166:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2344 "Gmsh.y"
     {
 #if defined(HAVE_POST)
@@ -6784,7 +6792,7 @@ yyreduce:
 
   case 167:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2359 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Meshes") || !strcmp((yyvsp[(2) - (3)].c), "All")){
@@ -6817,7 +6825,7 @@ yyreduce:
 
   case 168:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2387 "Gmsh.y"
     {
 #if defined(HAVE_POST)
@@ -6834,7 +6842,7 @@ yyreduce:
 
   case 169:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2404 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -6848,7 +6856,7 @@ yyreduce:
 
   case 170:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2418 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
@@ -6859,7 +6867,7 @@ yyreduce:
 
   case 171:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2424 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
@@ -6870,7 +6878,7 @@ yyreduce:
 
   case 172:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2430 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
@@ -6884,7 +6892,7 @@ yyreduce:
 
   case 173:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2439 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
@@ -6898,19 +6906,20 @@ yyreduce:
 
   case 174:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 2453 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Include")){
         std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c));
-	// Warning: we *don't* close included files (to allow user
-	// functions in these files). If you need to include many many
-	// files and don't have functions in the files, use "Merge"
-	// instead: some OSes limit the number of files a process can
-	// open simultaneously. The right solution would be of course
-	// to modify FunctionManager to reopen the files instead of
-	// using the FILE pointer, but hey, I'm lazy...
 	Msg::StatusBar(2, true, "Reading '%s'...", tmp.c_str());
+	// Warning: we explicitly ask ParseFile not to fclose() the included
+        // file, in order to allow user functions definitions in these files.
+        // The files will be closed in the next time OpenFile terminates. If
+        // you need to include many many files and don't have functions in
+        // the files, use "Merge" instead of "Include", as some OSes limit
+        // the number of files a process can open simultaneously. (A better
+        // solution would be to modify FunctionManager to reopen the files
+        // instead of using the FILE pointer...)
 	ParseFile(tmp, false, true);
 	SetBoundingBox();
 	Msg::StatusBar(2, true, "Done reading '%s'", tmp.c_str());
@@ -6945,8 +6954,8 @@ yyreduce:
 
   case 175:
 
-/* Line 1455 of yacc.c  */
-#line 2495 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2496 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(1) - (7)].c), "Save") && !strcmp((yyvsp[(2) - (7)].c), "View")){
@@ -6967,8 +6976,8 @@ yyreduce:
 
   case 176:
 
-/* Line 1455 of yacc.c  */
-#line 2512 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2513 "Gmsh.y"
     {
 #if defined(HAVE_POST) && defined(HAVE_MESH)
       if(!strcmp((yyvsp[(1) - (7)].c), "Background") && !strcmp((yyvsp[(2) - (7)].c), "Mesh")  && !strcmp((yyvsp[(3) - (7)].c), "View")){
@@ -6987,8 +6996,8 @@ yyreduce:
 
   case 177:
 
-/* Line 1455 of yacc.c  */
-#line 2527 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2528 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Sleep")){
 	SleepInSeconds((yyvsp[(2) - (3)].d));
@@ -7011,8 +7020,8 @@ yyreduce:
 
   case 178:
 
-/* Line 1455 of yacc.c  */
-#line 2546 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2547 "Gmsh.y"
     {
 #if defined(HAVE_PLUGINS)
        try {
@@ -7028,8 +7037,8 @@ yyreduce:
 
   case 179:
 
-/* Line 1455 of yacc.c  */
-#line 2558 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2559 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromAllViews"))
@@ -7057,8 +7066,8 @@ yyreduce:
 
   case 180:
 
-/* Line 1455 of yacc.c  */
-#line 2582 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2583 "Gmsh.y"
     {
       exit(0);
     ;}
@@ -7066,8 +7075,8 @@ yyreduce:
 
   case 181:
 
-/* Line 1455 of yacc.c  */
-#line 2586 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2587 "Gmsh.y"
     {
       // FIXME: this is a hack to force a transfer from the old DB to
       // the new DB. This will become unnecessary if/when we fill the
@@ -7078,8 +7087,8 @@ yyreduce:
 
   case 182:
 
-/* Line 1455 of yacc.c  */
-#line 2593 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2594 "Gmsh.y"
     {
       CTX::instance()->forcedBBox = 0;
       GModel::current()->importGEOInternals();
@@ -7089,8 +7098,8 @@ yyreduce:
 
   case 183:
 
-/* Line 1455 of yacc.c  */
-#line 2599 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2600 "Gmsh.y"
     {
       CTX::instance()->forcedBBox = 1;
       SetBoundingBox((yyvsp[(3) - (15)].d), (yyvsp[(5) - (15)].d), (yyvsp[(7) - (15)].d), (yyvsp[(9) - (15)].d), (yyvsp[(11) - (15)].d), (yyvsp[(13) - (15)].d));
@@ -7099,8 +7108,8 @@ yyreduce:
 
   case 184:
 
-/* Line 1455 of yacc.c  */
-#line 2604 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2605 "Gmsh.y"
     {
 #if defined(HAVE_OPENGL)
       drawContext::global()->draw();
@@ -7110,8 +7119,8 @@ yyreduce:
 
   case 185:
 
-/* Line 1455 of yacc.c  */
-#line 2610 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2611 "Gmsh.y"
     {
       GModel::current()->createTopologyFromMesh();
     ;}
@@ -7119,8 +7128,8 @@ yyreduce:
 
   case 186:
 
-/* Line 1455 of yacc.c  */
-#line 2614 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2615 "Gmsh.y"
     {
       GModel::current()->createTopologyFromMesh(1);
     ;}
@@ -7128,8 +7137,8 @@ yyreduce:
 
   case 187:
 
-/* Line 1455 of yacc.c  */
-#line 2618 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2619 "Gmsh.y"
     {
       GModel::current()->importGEOInternals();
       GModel::current()->refineMesh(CTX::instance()->mesh.secondOrderLinear);
@@ -7138,8 +7147,8 @@ yyreduce:
 
   case 188:
 
-/* Line 1455 of yacc.c  */
-#line 2628 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2629 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (6)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (6)].d);
@@ -7160,8 +7169,8 @@ yyreduce:
 
   case 189:
 
-/* Line 1455 of yacc.c  */
-#line 2645 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2646 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (8)].d);
@@ -7182,8 +7191,8 @@ yyreduce:
 
   case 190:
 
-/* Line 1455 of yacc.c  */
-#line 2662 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2663 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (8)].d);
@@ -7208,8 +7217,8 @@ yyreduce:
 
   case 191:
 
-/* Line 1455 of yacc.c  */
-#line 2683 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2684 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (10)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (10)].d);
@@ -7234,8 +7243,8 @@ yyreduce:
 
   case 192:
 
-/* Line 1455 of yacc.c  */
-#line 2704 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2705 "Gmsh.y"
     {
       if(ImbricatedLoop <= 0){
 	yymsg(0, "Invalid For/EndFor loop");
@@ -7274,8 +7283,8 @@ yyreduce:
 
   case 193:
 
-/* Line 1455 of yacc.c  */
-#line 2739 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2740 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->createFunction
          ((yyvsp[(2) - (2)].c), gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -7287,8 +7296,8 @@ yyreduce:
 
   case 194:
 
-/* Line 1455 of yacc.c  */
-#line 2747 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2748 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->leaveFunction
          (&gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -7298,8 +7307,8 @@ yyreduce:
 
   case 195:
 
-/* Line 1455 of yacc.c  */
-#line 2753 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2754 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->enterFunction
          ((yyvsp[(2) - (3)].c), &gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -7310,8 +7319,8 @@ yyreduce:
 
   case 196:
 
-/* Line 1455 of yacc.c  */
-#line 2760 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2761 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].d)) skip_until("If", "EndIf");
     ;}
@@ -7319,16 +7328,16 @@ yyreduce:
 
   case 197:
 
-/* Line 1455 of yacc.c  */
-#line 2764 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2765 "Gmsh.y"
     {
     ;}
     break;
 
   case 198:
 
-/* Line 1455 of yacc.c  */
-#line 2773 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2774 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (5)].l),
@@ -7340,8 +7349,8 @@ yyreduce:
 
   case 199:
 
-/* Line 1455 of yacc.c  */
-#line 2781 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2782 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (11)].l),
@@ -7353,8 +7362,8 @@ yyreduce:
 
   case 200:
 
-/* Line 1455 of yacc.c  */
-#line 2789 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2790 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (13)].l),
@@ -7366,8 +7375,8 @@ yyreduce:
 
   case 201:
 
-/* Line 1455 of yacc.c  */
-#line 2797 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2798 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -7376,8 +7385,8 @@ yyreduce:
 
   case 202:
 
-/* Line 1455 of yacc.c  */
-#line 2802 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2803 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (7)].l),
@@ -7389,8 +7398,8 @@ yyreduce:
 
   case 203:
 
-/* Line 1455 of yacc.c  */
-#line 2810 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2811 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -7399,8 +7408,8 @@ yyreduce:
 
   case 204:
 
-/* Line 1455 of yacc.c  */
-#line 2815 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2816 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (13)].l),
@@ -7412,8 +7421,8 @@ yyreduce:
 
   case 205:
 
-/* Line 1455 of yacc.c  */
-#line 2823 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2824 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -7422,8 +7431,8 @@ yyreduce:
 
   case 206:
 
-/* Line 1455 of yacc.c  */
-#line 2828 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2829 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (15)].l),
@@ -7435,8 +7444,8 @@ yyreduce:
 
   case 207:
 
-/* Line 1455 of yacc.c  */
-#line 2836 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2837 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -7445,8 +7454,8 @@ yyreduce:
 
   case 208:
 
-/* Line 1455 of yacc.c  */
-#line 2841 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2842 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(BOUNDARY_LAYER, (yyvsp[(3) - (6)].l), 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
@@ -7457,8 +7466,8 @@ yyreduce:
 
   case 209:
 
-/* Line 1455 of yacc.c  */
-#line 2849 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2850 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (8)].d),
@@ -7469,8 +7478,8 @@ yyreduce:
 
   case 210:
 
-/* Line 1455 of yacc.c  */
-#line 2856 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2857 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (8)].d),
@@ -7481,8 +7490,8 @@ yyreduce:
 
   case 211:
 
-/* Line 1455 of yacc.c  */
-#line 2863 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2864 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (8)].d),
@@ -7493,8 +7502,8 @@ yyreduce:
 
   case 212:
 
-/* Line 1455 of yacc.c  */
-#line 2870 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2871 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d),
@@ -7505,8 +7514,8 @@ yyreduce:
 
   case 213:
 
-/* Line 1455 of yacc.c  */
-#line 2877 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2878 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d),
@@ -7517,8 +7526,8 @@ yyreduce:
 
   case 214:
 
-/* Line 1455 of yacc.c  */
-#line 2884 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2885 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d),
@@ -7529,8 +7538,8 @@ yyreduce:
 
   case 215:
 
-/* Line 1455 of yacc.c  */
-#line 2891 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2892 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (14)].d),
@@ -7541,8 +7550,8 @@ yyreduce:
 
   case 216:
 
-/* Line 1455 of yacc.c  */
-#line 2898 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2899 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (14)].d),
@@ -7553,8 +7562,8 @@ yyreduce:
 
   case 217:
 
-/* Line 1455 of yacc.c  */
-#line 2905 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2906 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (14)].d),
@@ -7565,8 +7574,8 @@ yyreduce:
 
   case 218:
 
-/* Line 1455 of yacc.c  */
-#line 2912 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2913 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -7575,8 +7584,8 @@ yyreduce:
 
   case 219:
 
-/* Line 1455 of yacc.c  */
-#line 2917 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2918 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d),
@@ -7587,8 +7596,8 @@ yyreduce:
 
   case 220:
 
-/* Line 1455 of yacc.c  */
-#line 2924 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2925 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -7597,8 +7606,8 @@ yyreduce:
 
   case 221:
 
-/* Line 1455 of yacc.c  */
-#line 2929 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2930 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d),
@@ -7609,8 +7618,8 @@ yyreduce:
 
   case 222:
 
-/* Line 1455 of yacc.c  */
-#line 2936 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2937 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -7619,8 +7628,8 @@ yyreduce:
 
   case 223:
 
-/* Line 1455 of yacc.c  */
-#line 2941 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2942 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d),
@@ -7631,8 +7640,8 @@ yyreduce:
 
   case 224:
 
-/* Line 1455 of yacc.c  */
-#line 2948 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2949 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -7641,8 +7650,8 @@ yyreduce:
 
   case 225:
 
-/* Line 1455 of yacc.c  */
-#line 2953 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2954 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (16)].d),
@@ -7653,8 +7662,8 @@ yyreduce:
 
   case 226:
 
-/* Line 1455 of yacc.c  */
-#line 2960 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2961 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -7663,8 +7672,8 @@ yyreduce:
 
   case 227:
 
-/* Line 1455 of yacc.c  */
-#line 2965 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2966 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (16)].d),
@@ -7675,8 +7684,8 @@ yyreduce:
 
   case 228:
 
-/* Line 1455 of yacc.c  */
-#line 2972 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2973 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -7685,8 +7694,8 @@ yyreduce:
 
   case 229:
 
-/* Line 1455 of yacc.c  */
-#line 2977 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2978 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (16)].d),
@@ -7697,8 +7706,8 @@ yyreduce:
 
   case 230:
 
-/* Line 1455 of yacc.c  */
-#line 2984 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2985 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -7707,8 +7716,8 @@ yyreduce:
 
   case 231:
 
-/* Line 1455 of yacc.c  */
-#line 2989 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2990 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (18)].d),
@@ -7719,8 +7728,8 @@ yyreduce:
 
   case 232:
 
-/* Line 1455 of yacc.c  */
-#line 2996 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 2997 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -7729,8 +7738,8 @@ yyreduce:
 
   case 233:
 
-/* Line 1455 of yacc.c  */
-#line 3001 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3002 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (18)].d),
@@ -7741,8 +7750,8 @@ yyreduce:
 
   case 234:
 
-/* Line 1455 of yacc.c  */
-#line 3008 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3009 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -7751,8 +7760,8 @@ yyreduce:
 
   case 235:
 
-/* Line 1455 of yacc.c  */
-#line 3013 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3014 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (18)].d),
@@ -7763,24 +7772,24 @@ yyreduce:
 
   case 236:
 
-/* Line 1455 of yacc.c  */
-#line 3024 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3025 "Gmsh.y"
     {
     ;}
     break;
 
   case 237:
 
-/* Line 1455 of yacc.c  */
-#line 3027 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3028 "Gmsh.y"
     {
     ;}
     break;
 
   case 238:
 
-/* Line 1455 of yacc.c  */
-#line 3033 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3034 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = 1;
@@ -7793,8 +7802,8 @@ yyreduce:
 
   case 239:
 
-/* Line 1455 of yacc.c  */
-#line 3042 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3043 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = List_Nbr((yyvsp[(3) - (7)].l));
@@ -7818,8 +7827,8 @@ yyreduce:
 
   case 240:
 
-/* Line 1455 of yacc.c  */
-#line 3062 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3063 "Gmsh.y"
     {
       yymsg(0, "Explicit region numbers in layers are deprecated");
       extr.mesh.ExtrudeMesh = true;
@@ -7846,8 +7855,8 @@ yyreduce:
 
   case 241:
 
-/* Line 1455 of yacc.c  */
-#line 3085 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3086 "Gmsh.y"
     {
       extr.mesh.Recombine = true;
     ;}
@@ -7855,8 +7864,8 @@ yyreduce:
 
   case 242:
 
-/* Line 1455 of yacc.c  */
-#line 3089 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3090 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_DBL_1;
     ;}
@@ -7864,8 +7873,8 @@ yyreduce:
 
   case 243:
 
-/* Line 1455 of yacc.c  */
-#line 3093 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3094 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_DBL_1_RECOMB;
     ;}
@@ -7873,8 +7882,8 @@ yyreduce:
 
   case 244:
 
-/* Line 1455 of yacc.c  */
-#line 3097 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3098 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_SNGL_1;
     ;}
@@ -7882,8 +7891,8 @@ yyreduce:
 
   case 245:
 
-/* Line 1455 of yacc.c  */
-#line 3101 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3102 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_SNGL_1_RECOMB;
     ;}
@@ -7891,8 +7900,8 @@ yyreduce:
 
   case 246:
 
-/* Line 1455 of yacc.c  */
-#line 3105 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3106 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindSurface(num)){
@@ -7915,8 +7924,8 @@ yyreduce:
 
   case 247:
 
-/* Line 1455 of yacc.c  */
-#line 3124 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3125 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (6)].c), "Index"))
         extr.mesh.BoundaryLayerIndex = (yyvsp[(4) - (6)].d);
@@ -7928,8 +7937,8 @@ yyreduce:
 
   case 248:
 
-/* Line 1455 of yacc.c  */
-#line 3136 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3137 "Gmsh.y"
     {
       (yyval.v)[0] = (yyval.v)[1] = 1.;
     ;}
@@ -7937,8 +7946,8 @@ yyreduce:
 
   case 249:
 
-/* Line 1455 of yacc.c  */
-#line 3140 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3141 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Progression") || !strcmp((yyvsp[(2) - (3)].c), "Power"))
         (yyval.v)[0] = 1.;
@@ -7955,8 +7964,8 @@ yyreduce:
 
   case 250:
 
-/* Line 1455 of yacc.c  */
-#line 3155 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3156 "Gmsh.y"
     {
       (yyval.i) = -1; // left
     ;}
@@ -7964,8 +7973,8 @@ yyreduce:
 
   case 251:
 
-/* Line 1455 of yacc.c  */
-#line 3159 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3160 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "Right"))
         (yyval.i) = 1;
@@ -7979,8 +7988,8 @@ yyreduce:
 
   case 252:
 
-/* Line 1455 of yacc.c  */
-#line 3171 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3172 "Gmsh.y"
     {
      (yyval.l) = List_Create(1, 1, sizeof(double));
    ;}
@@ -7988,8 +7997,8 @@ yyreduce:
 
   case 253:
 
-/* Line 1455 of yacc.c  */
-#line 3175 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3176 "Gmsh.y"
     {
      (yyval.l) = (yyvsp[(2) - (2)].l);
    ;}
@@ -7997,8 +8006,8 @@ yyreduce:
 
   case 254:
 
-/* Line 1455 of yacc.c  */
-#line 3180 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3181 "Gmsh.y"
     {
       (yyval.i) = 45;
     ;}
@@ -8006,8 +8015,8 @@ yyreduce:
 
   case 255:
 
-/* Line 1455 of yacc.c  */
-#line 3184 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3185 "Gmsh.y"
     {
       (yyval.i) = (int)(yyvsp[(2) - (2)].d);
     ;}
@@ -8015,8 +8024,8 @@ yyreduce:
 
   case 256:
 
-/* Line 1455 of yacc.c  */
-#line 3191 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3192 "Gmsh.y"
     {
       int type = (int)(yyvsp[(6) - (7)].v)[0];
       double coef = fabs((yyvsp[(6) - (7)].v)[1]);
@@ -8076,8 +8085,8 @@ yyreduce:
 
   case 257:
 
-/* Line 1455 of yacc.c  */
-#line 3247 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3248 "Gmsh.y"
     {
       int k = List_Nbr((yyvsp[(4) - (6)].l));
       if(k != 0 && k != 3 && k != 4){
@@ -8151,8 +8160,8 @@ yyreduce:
 
   case 258:
 
-/* Line 1455 of yacc.c  */
-#line 3317 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3318 "Gmsh.y"
     {
       yymsg(1, "Elliptic Surface is deprecated: use Transfinite instead (with smoothing)");
       List_Delete((yyvsp[(7) - (8)].l));
@@ -8161,8 +8170,8 @@ yyreduce:
 
   case 259:
 
-/* Line 1455 of yacc.c  */
-#line 3322 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3323 "Gmsh.y"
     {
       int k = List_Nbr((yyvsp[(4) - (5)].l));
       if(k != 0 && k != 6 && k != 8){
@@ -8233,8 +8242,8 @@ yyreduce:
 
   case 260:
 
-/* Line 1455 of yacc.c  */
-#line 3389 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3390 "Gmsh.y"
     {
       if(!(yyvsp[(2) - (3)].l)){
   	  List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Volumes);
@@ -8274,8 +8283,8 @@ yyreduce:
 
   case 261:
 
-/* Line 1455 of yacc.c  */
-#line 3425 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3426 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (5)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
@@ -8322,8 +8331,8 @@ yyreduce:
 
   case 262:
 
-/* Line 1455 of yacc.c  */
-#line 3468 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3469 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -8347,8 +8356,8 @@ yyreduce:
 
   case 263:
 
-/* Line 1455 of yacc.c  */
-#line 3493 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3494 "Gmsh.y"
     {
       if(List_Nbr((yyvsp[(5) - (6)].l)) != List_Nbr((yyvsp[(3) - (6)].l))){
 	yymsg(0, "Number of master (%d) different from number of slave (%d) lines",
@@ -8379,8 +8388,8 @@ yyreduce:
 
   case 264:
 
-/* Line 1455 of yacc.c  */
-#line 3521 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3522 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(5) - (12)].l)) != List_Nbr((yyvsp[(10) - (12)].l))){
 	yymsg(0, "Number of master surface edges (%d) different from number of "
@@ -8420,8 +8429,8 @@ yyreduce:
 
   case 265:
 
-/* Line 1455 of yacc.c  */
-#line 3564 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3565 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -8448,8 +8457,8 @@ yyreduce:
 
   case 266:
 
-/* Line 1455 of yacc.c  */
-#line 3587 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3588 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -8476,24 +8485,24 @@ yyreduce:
 
   case 267:
 
-/* Line 1455 of yacc.c  */
-#line 3610 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3611 "Gmsh.y"
     {
     ;}
     break;
 
   case 268:
 
-/* Line 1455 of yacc.c  */
-#line 3613 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3614 "Gmsh.y"
     {
     ;}
     break;
 
   case 269:
 
-/* Line 1455 of yacc.c  */
-#line 3622 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3623 "Gmsh.y"
     {
       ReplaceAllDuplicates();
     ;}
@@ -8501,8 +8510,8 @@ yyreduce:
 
   case 270:
 
-/* Line 1455 of yacc.c  */
-#line 3626 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3627 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Geometry"))
         ReplaceAllDuplicates();
@@ -8516,8 +8525,8 @@ yyreduce:
 
   case 271:
 
-/* Line 1455 of yacc.c  */
-#line 3636 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3637 "Gmsh.y"
     {
       if(List_Nbr((yyvsp[(4) - (6)].l)) >= 2){
         double d;
@@ -8551,22 +8560,22 @@ yyreduce:
 
   case 272:
 
-/* Line 1455 of yacc.c  */
-#line 3670 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3671 "Gmsh.y"
     { (yyval.c) = (char*)"Homology"; ;}
     break;
 
   case 273:
 
-/* Line 1455 of yacc.c  */
-#line 3671 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3672 "Gmsh.y"
     { (yyval.c) = (char*)"Cohomology"; ;}
     break;
 
   case 274:
 
-/* Line 1455 of yacc.c  */
-#line 3676 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3677 "Gmsh.y"
     {
       std::vector<int> domain, subdomain;
       GModel::current()->addHomologyRequest((yyvsp[(1) - (2)].c), domain, subdomain);
@@ -8575,8 +8584,8 @@ yyreduce:
 
   case 275:
 
-/* Line 1455 of yacc.c  */
-#line 3681 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3682 "Gmsh.y"
     {
       std::vector<int> domain, subdomain;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (5)].l)); i++){
@@ -8591,8 +8600,8 @@ yyreduce:
 
   case 276:
 
-/* Line 1455 of yacc.c  */
-#line 3692 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3693 "Gmsh.y"
     {
       std::vector<int> domain, subdomain;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (7)].l)); i++){
@@ -8613,64 +8622,64 @@ yyreduce:
 
   case 277:
 
-/* Line 1455 of yacc.c  */
-#line 3713 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3714 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d);           ;}
     break;
 
   case 278:
 
-/* Line 1455 of yacc.c  */
-#line 3714 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3715 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (3)].d);           ;}
     break;
 
   case 279:
 
-/* Line 1455 of yacc.c  */
-#line 3715 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3716 "Gmsh.y"
     { (yyval.d) = -(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 280:
 
-/* Line 1455 of yacc.c  */
-#line 3716 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3717 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (2)].d);           ;}
     break;
 
   case 281:
 
-/* Line 1455 of yacc.c  */
-#line 3717 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3718 "Gmsh.y"
     { (yyval.d) = !(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 282:
 
-/* Line 1455 of yacc.c  */
-#line 3718 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3719 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 283:
 
-/* Line 1455 of yacc.c  */
-#line 3719 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3720 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 284:
 
-/* Line 1455 of yacc.c  */
-#line 3720 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3721 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 285:
 
-/* Line 1455 of yacc.c  */
-#line 3722 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3723 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (3)].d))
 	yymsg(0, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
@@ -8681,428 +8690,428 @@ yyreduce:
 
   case 286:
 
-/* Line 1455 of yacc.c  */
-#line 3728 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3729 "Gmsh.y"
     { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d);  ;}
     break;
 
   case 287:
 
-/* Line 1455 of yacc.c  */
-#line 3729 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3730 "Gmsh.y"
     { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  ;}
     break;
 
   case 288:
 
-/* Line 1455 of yacc.c  */
-#line 3730 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3731 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 289:
 
-/* Line 1455 of yacc.c  */
-#line 3731 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3732 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 290:
 
-/* Line 1455 of yacc.c  */
-#line 3732 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3733 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 291:
 
-/* Line 1455 of yacc.c  */
-#line 3733 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3734 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 292:
 
-/* Line 1455 of yacc.c  */
-#line 3734 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3735 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 293:
 
-/* Line 1455 of yacc.c  */
-#line 3735 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3736 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 294:
 
-/* Line 1455 of yacc.c  */
-#line 3736 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3737 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 295:
 
-/* Line 1455 of yacc.c  */
-#line 3737 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3738 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 296:
 
-/* Line 1455 of yacc.c  */
-#line 3738 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3739 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (5)].d) ? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d); ;}
     break;
 
   case 297:
 
-/* Line 1455 of yacc.c  */
-#line 3739 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3740 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 298:
 
-/* Line 1455 of yacc.c  */
-#line 3740 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3741 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 299:
 
-/* Line 1455 of yacc.c  */
-#line 3741 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3742 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 300:
 
-/* Line 1455 of yacc.c  */
-#line 3742 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3743 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 301:
 
-/* Line 1455 of yacc.c  */
-#line 3743 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3744 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 302:
 
-/* Line 1455 of yacc.c  */
-#line 3744 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3745 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 303:
 
-/* Line 1455 of yacc.c  */
-#line 3745 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3746 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 304:
 
-/* Line 1455 of yacc.c  */
-#line 3746 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3747 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 305:
 
-/* Line 1455 of yacc.c  */
-#line 3747 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3748 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 306:
 
-/* Line 1455 of yacc.c  */
-#line 3748 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3749 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 307:
 
-/* Line 1455 of yacc.c  */
-#line 3749 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3750 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 308:
 
-/* Line 1455 of yacc.c  */
-#line 3750 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3751 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 309:
 
-/* Line 1455 of yacc.c  */
-#line 3751 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3752 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 310:
 
-/* Line 1455 of yacc.c  */
-#line 3752 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3753 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 311:
 
-/* Line 1455 of yacc.c  */
-#line 3753 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3754 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 312:
 
-/* Line 1455 of yacc.c  */
-#line 3754 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3755 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 313:
 
-/* Line 1455 of yacc.c  */
-#line 3755 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3756 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 314:
 
-/* Line 1455 of yacc.c  */
-#line 3756 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3757 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 315:
 
-/* Line 1455 of yacc.c  */
-#line 3757 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3758 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 316:
 
-/* Line 1455 of yacc.c  */
-#line 3758 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3759 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 317:
 
-/* Line 1455 of yacc.c  */
-#line 3759 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3760 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
   case 318:
 
-/* Line 1455 of yacc.c  */
-#line 3761 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3762 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 319:
 
-/* Line 1455 of yacc.c  */
-#line 3762 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3763 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 320:
 
-/* Line 1455 of yacc.c  */
-#line 3763 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3764 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 321:
 
-/* Line 1455 of yacc.c  */
-#line 3764 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3765 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 322:
 
-/* Line 1455 of yacc.c  */
-#line 3765 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3766 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 323:
 
-/* Line 1455 of yacc.c  */
-#line 3766 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3767 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 324:
 
-/* Line 1455 of yacc.c  */
-#line 3767 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3768 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 325:
 
-/* Line 1455 of yacc.c  */
-#line 3768 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3769 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 326:
 
-/* Line 1455 of yacc.c  */
-#line 3769 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3770 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 327:
 
-/* Line 1455 of yacc.c  */
-#line 3770 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3771 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 328:
 
-/* Line 1455 of yacc.c  */
-#line 3771 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3772 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 329:
 
-/* Line 1455 of yacc.c  */
-#line 3772 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3773 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 330:
 
-/* Line 1455 of yacc.c  */
-#line 3773 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3774 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 331:
 
-/* Line 1455 of yacc.c  */
-#line 3774 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3775 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 332:
 
-/* Line 1455 of yacc.c  */
-#line 3775 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3776 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 333:
 
-/* Line 1455 of yacc.c  */
-#line 3776 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3777 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 334:
 
-/* Line 1455 of yacc.c  */
-#line 3777 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3778 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 335:
 
-/* Line 1455 of yacc.c  */
-#line 3778 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3779 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 336:
 
-/* Line 1455 of yacc.c  */
-#line 3779 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3780 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 337:
 
-/* Line 1455 of yacc.c  */
-#line 3780 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3781 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 338:
 
-/* Line 1455 of yacc.c  */
-#line 3781 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3782 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
   case 339:
 
-/* Line 1455 of yacc.c  */
-#line 3790 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3791 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d); ;}
     break;
 
   case 340:
 
-/* Line 1455 of yacc.c  */
-#line 3791 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3792 "Gmsh.y"
     { (yyval.d) = 3.141592653589793; ;}
     break;
 
   case 341:
 
-/* Line 1455 of yacc.c  */
-#line 3792 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3793 "Gmsh.y"
     { (yyval.d) = Msg::GetCommRank(); ;}
     break;
 
   case 342:
 
-/* Line 1455 of yacc.c  */
-#line 3793 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3794 "Gmsh.y"
     { (yyval.d) = Msg::GetCommSize(); ;}
     break;
 
   case 343:
 
-/* Line 1455 of yacc.c  */
-#line 3794 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3795 "Gmsh.y"
     { (yyval.d) = GetGmshMajorVersion(); ;}
     break;
 
   case 344:
 
-/* Line 1455 of yacc.c  */
-#line 3795 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3796 "Gmsh.y"
     { (yyval.d) = GetGmshMinorVersion(); ;}
     break;
 
   case 345:
 
-/* Line 1455 of yacc.c  */
-#line 3796 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3797 "Gmsh.y"
     { (yyval.d) = GetGmshPatchVersion(); ;}
     break;
 
   case 346:
 
-/* Line 1455 of yacc.c  */
-#line 3801 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3802 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (1)].c));
@@ -9123,8 +9132,8 @@ yyreduce:
 
   case 347:
 
-/* Line 1455 of yacc.c  */
-#line 3821 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3822 "Gmsh.y"
     {
       char tmpstring[1024];
       sprintf(tmpstring, "%s_%d", (yyvsp[(1) - (5)].c), (int)(yyvsp[(4) - (5)].d)) ;
@@ -9147,8 +9156,8 @@ yyreduce:
 
   case 348:
 
-/* Line 1455 of yacc.c  */
-#line 3840 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3841 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -9170,8 +9179,8 @@ yyreduce:
 
   case 349:
 
-/* Line 1455 of yacc.c  */
-#line 3858 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3859 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(2) - (4)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(2) - (4)].c));
@@ -9187,8 +9196,8 @@ yyreduce:
 
   case 350:
 
-/* Line 1455 of yacc.c  */
-#line 3870 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3871 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (2)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (2)].c));
@@ -9209,8 +9218,8 @@ yyreduce:
 
   case 351:
 
-/* Line 1455 of yacc.c  */
-#line 3887 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3888 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -9232,8 +9241,8 @@ yyreduce:
 
   case 352:
 
-/* Line 1455 of yacc.c  */
-#line 3908 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3909 "Gmsh.y"
     {
       NumberOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), (yyval.d));
       Free((yyvsp[(1) - (3)].c)); Free((yyvsp[(3) - (3)].c));
@@ -9242,8 +9251,8 @@ yyreduce:
 
   case 353:
 
-/* Line 1455 of yacc.c  */
-#line 3913 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3914 "Gmsh.y"
     {
       NumberOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), (yyval.d));
       Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(6) - (6)].c));
@@ -9252,8 +9261,8 @@ yyreduce:
 
   case 354:
 
-/* Line 1455 of yacc.c  */
-#line 3918 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3919 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d)){
@@ -9267,8 +9276,8 @@ yyreduce:
 
   case 355:
 
-/* Line 1455 of yacc.c  */
-#line 3928 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3929 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d)){
@@ -9282,8 +9291,8 @@ yyreduce:
 
   case 356:
 
-/* Line 1455 of yacc.c  */
-#line 3938 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3939 "Gmsh.y"
     {
       (yyval.d) = Msg::GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
@@ -9292,8 +9301,8 @@ yyreduce:
 
   case 357:
 
-/* Line 1455 of yacc.c  */
-#line 3946 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3947 "Gmsh.y"
     {
       memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double));
     ;}
@@ -9301,8 +9310,8 @@ yyreduce:
 
   case 358:
 
-/* Line 1455 of yacc.c  */
-#line 3950 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3951 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i];
     ;}
@@ -9310,8 +9319,8 @@ yyreduce:
 
   case 359:
 
-/* Line 1455 of yacc.c  */
-#line 3954 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3955 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
     ;}
@@ -9319,8 +9328,8 @@ yyreduce:
 
   case 360:
 
-/* Line 1455 of yacc.c  */
-#line 3958 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3959 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i];
     ;}
@@ -9328,8 +9337,8 @@ yyreduce:
 
   case 361:
 
-/* Line 1455 of yacc.c  */
-#line 3962 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3963 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i];
     ;}
@@ -9337,8 +9346,8 @@ yyreduce:
 
   case 362:
 
-/* Line 1455 of yacc.c  */
-#line 3969 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3970 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (11)].d);  (yyval.v)[1] = (yyvsp[(4) - (11)].d);  (yyval.v)[2] = (yyvsp[(6) - (11)].d);  (yyval.v)[3] = (yyvsp[(8) - (11)].d); (yyval.v)[4] = (yyvsp[(10) - (11)].d);
     ;}
@@ -9346,8 +9355,8 @@ yyreduce:
 
   case 363:
 
-/* Line 1455 of yacc.c  */
-#line 3973 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3974 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (9)].d);  (yyval.v)[1] = (yyvsp[(4) - (9)].d);  (yyval.v)[2] = (yyvsp[(6) - (9)].d);  (yyval.v)[3] = (yyvsp[(8) - (9)].d); (yyval.v)[4] = 1.0;
     ;}
@@ -9355,8 +9364,8 @@ yyreduce:
 
   case 364:
 
-/* Line 1455 of yacc.c  */
-#line 3977 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3978 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     ;}
@@ -9364,8 +9373,8 @@ yyreduce:
 
   case 365:
 
-/* Line 1455 of yacc.c  */
-#line 3981 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3982 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     ;}
@@ -9373,8 +9382,8 @@ yyreduce:
 
   case 366:
 
-/* Line 1455 of yacc.c  */
-#line 3988 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3989 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(List_T*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].l)));
@@ -9383,8 +9392,8 @@ yyreduce:
 
   case 367:
 
-/* Line 1455 of yacc.c  */
-#line 3993 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 3994 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].l)));
     ;}
@@ -9392,8 +9401,8 @@ yyreduce:
 
   case 368:
 
-/* Line 1455 of yacc.c  */
-#line 4000 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4001 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -9402,8 +9411,8 @@ yyreduce:
 
   case 369:
 
-/* Line 1455 of yacc.c  */
-#line 4005 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4006 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
@@ -9411,8 +9420,8 @@ yyreduce:
 
   case 370:
 
-/* Line 1455 of yacc.c  */
-#line 4009 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4010 "Gmsh.y"
     {
       // creates an empty list
       (yyval.l) = List_Create(2, 1, sizeof(double));
@@ -9421,8 +9430,8 @@ yyreduce:
 
   case 371:
 
-/* Line 1455 of yacc.c  */
-#line 4014 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4015 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
@@ -9430,8 +9439,8 @@ yyreduce:
 
   case 372:
 
-/* Line 1455 of yacc.c  */
-#line 4018 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4019 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -9443,8 +9452,8 @@ yyreduce:
 
   case 373:
 
-/* Line 1455 of yacc.c  */
-#line 4026 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4027 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (5)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -9456,8 +9465,8 @@ yyreduce:
 
   case 374:
 
-/* Line 1455 of yacc.c  */
-#line 4037 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4038 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
@@ -9465,8 +9474,8 @@ yyreduce:
 
   case 375:
 
-/* Line 1455 of yacc.c  */
-#line 4041 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4042 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "*") || !strcmp((yyvsp[(1) - (1)].c), "all"))
         (yyval.l) = 0;
@@ -9479,8 +9488,8 @@ yyreduce:
 
   case 376:
 
-/* Line 1455 of yacc.c  */
-#line 4053 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4054 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -9492,8 +9501,8 @@ yyreduce:
 
   case 377:
 
-/* Line 1455 of yacc.c  */
-#line 4061 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4062 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (3)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -9505,8 +9514,8 @@ yyreduce:
 
   case 378:
 
-/* Line 1455 of yacc.c  */
-#line 4069 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4070 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       for(double d = (yyvsp[(1) - (3)].d); ((yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d)) ? (d <= (yyvsp[(3) - (3)].d)) : (d >= (yyvsp[(3) - (3)].d));
@@ -9517,8 +9526,8 @@ yyreduce:
 
   case 379:
 
-/* Line 1455 of yacc.c  */
-#line 4076 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4077 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!(yyvsp[(5) - (5)].d) || ((yyvsp[(1) - (5)].d) < (yyvsp[(3) - (5)].d) && (yyvsp[(5) - (5)].d) < 0) || ((yyvsp[(1) - (5)].d) > (yyvsp[(3) - (5)].d) && (yyvsp[(5) - (5)].d) > 0)){
@@ -9533,8 +9542,8 @@ yyreduce:
 
   case 380:
 
-/* Line 1455 of yacc.c  */
-#line 4087 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4088 "Gmsh.y"
     {
       // Returns the coordinates of a point and fills a list with it.
       // This allows to ensure e.g. that relative point positions are
@@ -9558,8 +9567,8 @@ yyreduce:
 
   case 381:
 
-/* Line 1455 of yacc.c  */
-#line 4107 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4108 "Gmsh.y"
     {
       (yyval.l) = GetAllEntityNumbers(0);
     ;}
@@ -9567,8 +9576,8 @@ yyreduce:
 
   case 382:
 
-/* Line 1455 of yacc.c  */
-#line 4111 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4112 "Gmsh.y"
     {
       (yyval.l) = GetAllEntityNumbers(1);
     ;}
@@ -9576,8 +9585,8 @@ yyreduce:
 
   case 383:
 
-/* Line 1455 of yacc.c  */
-#line 4115 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4116 "Gmsh.y"
     {
       (yyval.l) = GetAllEntityNumbers(2);
     ;}
@@ -9585,8 +9594,8 @@ yyreduce:
 
   case 384:
 
-/* Line 1455 of yacc.c  */
-#line 4119 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4120 "Gmsh.y"
     {
       (yyval.l) = GetAllEntityNumbers(3);
     ;}
@@ -9594,8 +9603,8 @@ yyreduce:
 
   case 385:
 
-/* Line 1455 of yacc.c  */
-#line 4123 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4124 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
@@ -9609,8 +9618,8 @@ yyreduce:
 
   case 386:
 
-/* Line 1455 of yacc.c  */
-#line 4133 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4134 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
@@ -9624,8 +9633,8 @@ yyreduce:
 
   case 387:
 
-/* Line 1455 of yacc.c  */
-#line 4143 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4144 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -9641,8 +9650,8 @@ yyreduce:
 
   case 388:
 
-/* Line 1455 of yacc.c  */
-#line 4155 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4156 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(3) - (4)].c)))
@@ -9658,8 +9667,8 @@ yyreduce:
 
   case 389:
 
-/* Line 1455 of yacc.c  */
-#line 4167 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4168 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -9681,8 +9690,8 @@ yyreduce:
 
   case 390:
 
-/* Line 1455 of yacc.c  */
-#line 4188 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4189 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -9691,8 +9700,8 @@ yyreduce:
 
   case 391:
 
-/* Line 1455 of yacc.c  */
-#line 4193 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4194 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
@@ -9700,8 +9709,8 @@ yyreduce:
 
   case 392:
 
-/* Line 1455 of yacc.c  */
-#line 4197 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4198 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].d)));
     ;}
@@ -9709,8 +9718,8 @@ yyreduce:
 
   case 393:
 
-/* Line 1455 of yacc.c  */
-#line 4201 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4202 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
 	double d;
@@ -9723,8 +9732,8 @@ yyreduce:
 
   case 394:
 
-/* Line 1455 of yacc.c  */
-#line 4213 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4214 "Gmsh.y"
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (9)].d), (int)(yyvsp[(4) - (9)].d), (int)(yyvsp[(6) - (9)].d), (int)(yyvsp[(8) - (9)].d));
     ;}
@@ -9732,8 +9741,8 @@ yyreduce:
 
   case 395:
 
-/* Line 1455 of yacc.c  */
-#line 4217 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4218 "Gmsh.y"
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (7)].d), (int)(yyvsp[(4) - (7)].d), (int)(yyvsp[(6) - (7)].d), 255);
     ;}
@@ -9741,8 +9750,8 @@ yyreduce:
 
   case 396:
 
-/* Line 1455 of yacc.c  */
-#line 4229 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4230 "Gmsh.y"
     {
       int flag;
       (yyval.u) = GetColorForString(ColorString, -1, (yyvsp[(1) - (1)].c), &flag);
@@ -9753,8 +9762,8 @@ yyreduce:
 
   case 397:
 
-/* Line 1455 of yacc.c  */
-#line 4236 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4237 "Gmsh.y"
     {
       unsigned int val = 0;
       ColorOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(5) - (5)].c), val);
@@ -9765,8 +9774,8 @@ yyreduce:
 
   case 398:
 
-/* Line 1455 of yacc.c  */
-#line 4246 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4247 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
@@ -9774,8 +9783,8 @@ yyreduce:
 
   case 399:
 
-/* Line 1455 of yacc.c  */
-#line 4250 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4251 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (6)].d));
@@ -9791,8 +9800,8 @@ yyreduce:
 
   case 400:
 
-/* Line 1455 of yacc.c  */
-#line 4265 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4266 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].u)));
@@ -9801,8 +9810,8 @@ yyreduce:
 
   case 401:
 
-/* Line 1455 of yacc.c  */
-#line 4270 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4271 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].u)));
     ;}
@@ -9810,8 +9819,8 @@ yyreduce:
 
   case 402:
 
-/* Line 1455 of yacc.c  */
-#line 4277 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4278 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
@@ -9819,8 +9828,8 @@ yyreduce:
 
   case 403:
 
-/* Line 1455 of yacc.c  */
-#line 4281 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4282 "Gmsh.y"
     {
       if(!gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown string variable '%s'", (yyvsp[(1) - (1)].c));
@@ -9837,8 +9846,8 @@ yyreduce:
 
   case 404:
 
-/* Line 1455 of yacc.c  */
-#line 4294 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4295 "Gmsh.y"
     {
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), out);
@@ -9850,8 +9859,8 @@ yyreduce:
 
   case 405:
 
-/* Line 1455 of yacc.c  */
-#line 4302 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4303 "Gmsh.y"
     {
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), out);
@@ -9863,8 +9872,8 @@ yyreduce:
 
   case 406:
 
-/* Line 1455 of yacc.c  */
-#line 4313 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4314 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
@@ -9872,8 +9881,8 @@ yyreduce:
 
   case 407:
 
-/* Line 1455 of yacc.c  */
-#line 4317 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4318 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc(32 * sizeof(char));
       time_t now;
@@ -9885,8 +9894,8 @@ yyreduce:
 
   case 408:
 
-/* Line 1455 of yacc.c  */
-#line 4325 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4326 "Gmsh.y"
     {
       const char *env = GetEnvironmentVar((yyvsp[(3) - (4)].c));
       if(!env) env = "";
@@ -9898,8 +9907,8 @@ yyreduce:
 
   case 409:
 
-/* Line 1455 of yacc.c  */
-#line 4333 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4334 "Gmsh.y"
     {
       std::string s = Msg::GetString((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -9911,8 +9920,8 @@ yyreduce:
 
   case 410:
 
-/* Line 1455 of yacc.c  */
-#line 4341 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4342 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (6)].c)) + strlen((yyvsp[(5) - (6)].c)) + 1) * sizeof(char));
       strcpy((yyval.c), (yyvsp[(3) - (6)].c));
@@ -9924,8 +9933,8 @@ yyreduce:
 
   case 411:
 
-/* Line 1455 of yacc.c  */
-#line 4349 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4350 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -9943,8 +9952,8 @@ yyreduce:
 
   case 412:
 
-/* Line 1455 of yacc.c  */
-#line 4363 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4364 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -9962,8 +9971,8 @@ yyreduce:
 
   case 413:
 
-/* Line 1455 of yacc.c  */
-#line 4377 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4378 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     ;}
@@ -9971,8 +9980,8 @@ yyreduce:
 
   case 414:
 
-/* Line 1455 of yacc.c  */
-#line 4381 "Gmsh.y"
+/* Line 1464 of yacc.c  */
+#line 4382 "Gmsh.y"
     {
       char tmpstring[1024];
       int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
@@ -9995,8 +10004,8 @@ yyreduce:
 
 
 
-/* Line 1455 of yacc.c  */
-#line 10000 "Gmsh.tab.cpp"
+/* Line 1464 of yacc.c  */
+#line 10009 "Gmsh.tab.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -10207,8 +10216,8 @@ yyreturn:
 
 
 
-/* Line 1675 of yacc.c  */
-#line 4401 "Gmsh.y"
+/* Line 1684 of yacc.c  */
+#line 4402 "Gmsh.y"
 
 
 int PrintListOfDouble(char *format, List_T *list, char *buffer)
diff --git a/Parser/Gmsh.tab.hpp b/Parser/Gmsh.tab.hpp
index b0fa1dec2c1c29fcc3fa94d981f2763576f456ed..74b36e603bcef7a57059b2d4f50b08146d20e118 100644
--- a/Parser/Gmsh.tab.hpp
+++ b/Parser/Gmsh.tab.hpp
@@ -1,10 +1,9 @@
-
-/* A Bison parser, made by GNU Bison 2.4.1.  */
+/* A Bison parser, made by GNU Bison 2.4.3.  */
 
 /* Skeleton interface for Bison's Yacc-like parsers in C
    
-      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
+      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+   2009, 2010 Free Software Foundation, Inc.
    
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -183,7 +182,7 @@
 typedef union YYSTYPE
 {
 
-/* Line 1676 of yacc.c  */
+/* Line 1685 of yacc.c  */
 #line 87 "Gmsh.y"
 
   char *c;
@@ -196,8 +195,8 @@ typedef union YYSTYPE
 
 
 
-/* Line 1676 of yacc.c  */
-#line 201 "Gmsh.tab.hpp"
+/* Line 1685 of yacc.c  */
+#line 200 "Gmsh.tab.hpp"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index a46af7a3f6b869dc7e289a1be714c41efae8cea0..60a56d20f91a0f2631e5a0f0e2c9dd1ed324fc4c 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -2453,14 +2453,15 @@ Command :
     {
       if(!strcmp($1, "Include")){
         std::string tmp = FixRelativePath(gmsh_yyname, $2);
-	// Warning: we *don't* close included files (to allow user
-	// functions in these files). If you need to include many many
-	// files and don't have functions in the files, use "Merge"
-	// instead: some OSes limit the number of files a process can
-	// open simultaneously. The right solution would be of course
-	// to modify FunctionManager to reopen the files instead of
-	// using the FILE pointer, but hey, I'm lazy...
 	Msg::StatusBar(2, true, "Reading '%s'...", tmp.c_str());
+	// Warning: we explicitly ask ParseFile not to fclose() the included
+        // file, in order to allow user functions definitions in these files.
+        // The files will be closed in the next time OpenFile terminates. If
+        // you need to include many many files and don't have functions in
+        // the files, use "Merge" instead of "Include", as some OSes limit
+        // the number of files a process can open simultaneously. (A better
+        // solution would be to modify FunctionManager to reopen the files
+        // instead of using the FILE pointer...)
 	ParseFile(tmp, false, true);
 	SetBoundingBox();
 	Msg::StatusBar(2, true, "Done reading '%s'", tmp.c_str());
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index 2bc746933ebd95c8ec895b1a079f8e13e8b9f276..e7cc92b77dbe299aff2d692321a8f444b54417c2 100644
--- a/Parser/Gmsh.yy.cpp
+++ b/Parser/Gmsh.yy.cpp
@@ -73,6 +73,7 @@ typedef int flex_int32_t;
 typedef unsigned char flex_uint8_t; 
 typedef unsigned short int flex_uint16_t;
 typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
 
 /* Limits of integral types. */
 #ifndef INT8_MIN
@@ -103,8 +104,6 @@ typedef unsigned int flex_uint32_t;
 #define UINT32_MAX             (4294967295U)
 #endif
 
-#endif /* ! C99 */
-
 #endif /* ! FLEXINT_H */
 
 #ifdef __cplusplus
@@ -161,15 +160,7 @@ typedef unsigned int flex_uint32_t;
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k.
- * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
- * Ditto for the __ia64__ case accordingly.
- */
-#define YY_BUF_SIZE 32768
-#else
 #define YY_BUF_SIZE 16384
-#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -181,7 +172,12 @@ typedef unsigned int flex_uint32_t;
 typedef struct yy_buffer_state *YY_BUFFER_STATE;
 #endif
 
-extern int gmsh_yyleng;
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+extern yy_size_t gmsh_yyleng;
 
 extern FILE *gmsh_yyin, *gmsh_yyout;
 
@@ -207,11 +203,6 @@ extern FILE *gmsh_yyin, *gmsh_yyout;
 
 #define unput(c) yyunput( c, (yytext_ptr)  )
 
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef size_t yy_size_t;
-#endif
-
 #ifndef YY_STRUCT_YY_BUFFER_STATE
 #define YY_STRUCT_YY_BUFFER_STATE
 struct yy_buffer_state
@@ -229,7 +220,7 @@ struct yy_buffer_state
 	/* Number of characters read into yy_ch_buf, not including EOB
 	 * characters.
 	 */
-	int yy_n_chars;
+	yy_size_t yy_n_chars;
 
 	/* Whether we "own" the buffer - i.e., we know we created it,
 	 * and can realloc() it to grow it, and should free() it to
@@ -299,8 +290,8 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
 
 /* yy_hold_char holds the character lost when gmsh_yytext is formed. */
 static char yy_hold_char;
-static int yy_n_chars;		/* number of characters read into yy_ch_buf */
-int gmsh_yyleng;
+static yy_size_t yy_n_chars;		/* number of characters read into yy_ch_buf */
+yy_size_t gmsh_yyleng;
 
 /* Points to current character in buffer. */
 static char *yy_c_buf_p = (char *) 0;
@@ -328,7 +319,7 @@ static void gmsh_yy_init_buffer (YY_BUFFER_STATE b,FILE *file  );
 
 YY_BUFFER_STATE gmsh_yy_scan_buffer (char *base,yy_size_t size  );
 YY_BUFFER_STATE gmsh_yy_scan_string (yyconst char *yy_str  );
-YY_BUFFER_STATE gmsh_yy_scan_bytes (yyconst char *bytes,int len  );
+YY_BUFFER_STATE gmsh_yy_scan_bytes (yyconst char *bytes,yy_size_t len  );
 
 void *gmsh_yyalloc (yy_size_t  );
 void *gmsh_yyrealloc (void *,yy_size_t  );
@@ -954,7 +945,7 @@ void   skipline(void);
 #define YY_NO_UNISTD_H
 #endif
 
-#line 958 "Gmsh.yy.cpp"
+#line 949 "Gmsh.yy.cpp"
 
 #define INITIAL 0
 
@@ -993,7 +984,7 @@ FILE *gmsh_yyget_out (void );
 
 void gmsh_yyset_out  (FILE * out_str  );
 
-int gmsh_yyget_leng (void );
+yy_size_t gmsh_yyget_leng (void );
 
 char *gmsh_yyget_text (void );
 
@@ -1035,12 +1026,7 @@ static int input (void );
 
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k */
-#define YY_READ_BUF_SIZE 16384
-#else
 #define YY_READ_BUF_SIZE 8192
-#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -1048,7 +1034,7 @@ static int input (void );
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO do { if (fwrite( gmsh_yytext, gmsh_yyleng, 1, gmsh_yyout )) {} } while (0)
+#define ECHO fwrite( gmsh_yytext, gmsh_yyleng, 1, gmsh_yyout )
 #endif
 
 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
@@ -1059,7 +1045,7 @@ static int input (void );
 	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
 		{ \
 		int c = '*'; \
-		size_t n; \
+		yy_size_t n; \
 		for ( n = 0; n < max_size && \
 			     (c = getc( gmsh_yyin )) != EOF && c != '\n'; ++n ) \
 			buf[n] = (char) c; \
@@ -1144,7 +1130,7 @@ YY_DECL
 #line 49 "Gmsh.l"
 
 
-#line 1148 "Gmsh.yy.cpp"
+#line 1134 "Gmsh.yy.cpp"
 
 	if ( !(yy_init) )
 		{
@@ -2009,7 +1995,7 @@ YY_RULE_SETUP
 #line 233 "Gmsh.l"
 ECHO;
 	YY_BREAK
-#line 2013 "Gmsh.yy.cpp"
+#line 1999 "Gmsh.yy.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -2195,7 +2181,7 @@ static int yy_get_next_buffer (void)
 
 	else
 		{
-			int num_to_read =
+			yy_size_t num_to_read =
 			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
 
 		while ( num_to_read <= 0 )
@@ -2209,7 +2195,7 @@ static int yy_get_next_buffer (void)
 
 			if ( b->yy_is_our_buffer )
 				{
-				int new_size = b->yy_buf_size * 2;
+				yy_size_t new_size = b->yy_buf_size * 2;
 
 				if ( new_size <= 0 )
 					b->yy_buf_size += b->yy_buf_size / 8;
@@ -2240,7 +2226,7 @@ static int yy_get_next_buffer (void)
 
 		/* Read in more data. */
 		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-			(yy_n_chars), (size_t) num_to_read );
+			(yy_n_chars), num_to_read );
 
 		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
 		}
@@ -2350,7 +2336,7 @@ static int yy_get_next_buffer (void)
 	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
 		{ /* need to shift things up to make room */
 		/* +2 for EOB chars. */
-		register int number_to_move = (yy_n_chars) + 2;
+		register yy_size_t number_to_move = (yy_n_chars) + 2;
 		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
 					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
 		register char *source =
@@ -2399,7 +2385,7 @@ static int yy_get_next_buffer (void)
 
 		else
 			{ /* need more input */
-			int offset = (yy_c_buf_p) - (yytext_ptr);
+			yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
 			++(yy_c_buf_p);
 
 			switch ( yy_get_next_buffer(  ) )
@@ -2423,7 +2409,7 @@ static int yy_get_next_buffer (void)
 				case EOB_ACT_END_OF_FILE:
 					{
 					if ( gmsh_yywrap( ) )
-						return EOF;
+						return 0;
 
 					if ( ! (yy_did_buffer_switch_on_eof) )
 						YY_NEW_FILE;
@@ -2675,7 +2661,7 @@ void gmsh_yypop_buffer_state (void)
  */
 static void gmsh_yyensure_buffer_stack (void)
 {
-	int num_to_alloc;
+	yy_size_t num_to_alloc;
     
 	if (!(yy_buffer_stack)) {
 
@@ -2767,17 +2753,16 @@ YY_BUFFER_STATE gmsh_yy_scan_string (yyconst char * yystr )
 
 /** Setup the input buffer state to scan the given bytes. The next call to gmsh_yylex() will
  * scan from a @e copy of @a bytes.
- * @param yybytes the byte buffer to scan
- * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ * @param bytes the byte buffer to scan
+ * @param len the number of bytes in the buffer pointed to by @a bytes.
  * 
  * @return the newly allocated buffer state object.
  */
-YY_BUFFER_STATE gmsh_yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
+YY_BUFFER_STATE gmsh_yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
 {
 	YY_BUFFER_STATE b;
 	char *buf;
-	yy_size_t n;
-	int i;
+	yy_size_t n, i;
     
 	/* Get memory for full buffer, including space for trailing EOB's. */
 	n = _yybytes_len + 2;
@@ -2859,7 +2844,7 @@ FILE *gmsh_yyget_out  (void)
 /** Get the length of the current token.
  * 
  */
-int gmsh_yyget_leng  (void)
+yy_size_t gmsh_yyget_leng  (void)
 {
         return gmsh_yyleng;
 }