From ca019abfefd56919a1bb8bb64f0f5ed81798d567 Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Fri, 11 Oct 2002 01:38:13 +0000
Subject: [PATCH] Added "MergeWithBoundingBox" to force the computation of the
 bounding box of e.g. a view when merged in a script

---
 Parser/Gmsh.tab.cpp | 399 ++++++++++++++++++++++----------------------
 Parser/Gmsh.y       |   9 +-
 Parser/Gmsh.yy.cpp  |   4 +-
 Parser/OpenFile.cpp |  19 ++-
 Parser/OpenFile.h   |   1 +
 5 files changed, 229 insertions(+), 203 deletions(-)

diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index e509aa76c2..2fe16c9743 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -188,7 +188,7 @@
 #line 1 "Gmsh.y"
  
 
-// $Id: Gmsh.tab.cpp,v 1.145 2002-10-04 21:14:17 geuzaine Exp $
+// $Id: Gmsh.tab.cpp,v 1.146 2002-10-11 01:38:12 geuzaine Exp $
 //
 // Copyright (C) 1997 - 2002 C. Geuzaine, J.-F. Remacle
 //
@@ -751,24 +751,24 @@ static const short yyrline[] =
     1663,  1669,  1680,  1691,  1716,  1722,  1741,  1762,  1770,  1776,
     1782,  1791,  1797,  1803,  1813,  1819,  1824,  1829,  1836,  1838,
     1839,  1842,  1847,  1852,  1867,  1882,  1901,  1912,  1921,  1929,
-    1933,  1941,  1953,  2022,  2042,  2049,  2053,  2073,  2085,  2095,
-    2116,  2137,  2158,  2164,  2169,  2174,  2178,  2186,  2197,  2204,
-    2214,  2219,  2224,  2229,  2229,  2239,  2239,  2249,  2249,  2262,
-    2267,  2272,  2277,  2277,  2288,  2288,  2300,  2300,  2314,  2318,
-    2323,  2350,  2374,  2382,  2401,  2419,  2437,  2459,  2480,  2501,
-    2515,  2534,  2539,  2548,  2550,  2551,  2552,  2553,  2556,  2558,
-    2559,  2560,  2561,  2562,  2563,  2564,  2565,  2572,  2573,  2574,
-    2575,  2576,  2577,  2578,  2579,  2580,  2581,  2582,  2583,  2584,
-    2585,  2586,  2587,  2588,  2589,  2590,  2591,  2592,  2593,  2594,
-    2595,  2596,  2597,  2598,  2599,  2600,  2601,  2602,  2603,  2605,
-    2606,  2607,  2608,  2609,  2610,  2611,  2612,  2613,  2614,  2615,
-    2616,  2617,  2618,  2619,  2620,  2621,  2622,  2623,  2624,  2625,
-    2630,  2635,  2636,  2637,  2641,  2652,  2669,  2680,  2699,  2715,
-    2731,  2747,  2764,  2769,  2773,  2777,  2781,  2787,  2792,  2796,
-    2800,  2806,  2810,  2815,  2819,  2824,  2828,  2832,  2838,  2844,
-    2851,  2857,  2861,  2865,  2875,  2882,  2893,  2907,  2923,  2943,
-    2967,  2973,  2977,  2981,  2992,  2997,  3008,  3013,  3031,  3036,
-    3049,  3055,  3061,  3066,  3074,  3087,  3091,  3109,  3123
+    1933,  1941,  1953,  2029,  2049,  2056,  2060,  2080,  2092,  2102,
+    2123,  2144,  2165,  2171,  2176,  2181,  2185,  2193,  2204,  2211,
+    2221,  2226,  2231,  2236,  2236,  2246,  2246,  2256,  2256,  2269,
+    2274,  2279,  2284,  2284,  2295,  2295,  2307,  2307,  2321,  2325,
+    2330,  2357,  2381,  2389,  2408,  2426,  2444,  2466,  2487,  2508,
+    2522,  2541,  2546,  2555,  2557,  2558,  2559,  2560,  2563,  2565,
+    2566,  2567,  2568,  2569,  2570,  2571,  2572,  2579,  2580,  2581,
+    2582,  2583,  2584,  2585,  2586,  2587,  2588,  2589,  2590,  2591,
+    2592,  2593,  2594,  2595,  2596,  2597,  2598,  2599,  2600,  2601,
+    2602,  2603,  2604,  2605,  2606,  2607,  2608,  2609,  2610,  2612,
+    2613,  2614,  2615,  2616,  2617,  2618,  2619,  2620,  2621,  2622,
+    2623,  2624,  2625,  2626,  2627,  2628,  2629,  2630,  2631,  2632,
+    2637,  2642,  2643,  2644,  2648,  2659,  2676,  2687,  2706,  2722,
+    2738,  2754,  2771,  2776,  2780,  2784,  2788,  2794,  2799,  2803,
+    2807,  2813,  2817,  2822,  2826,  2831,  2835,  2839,  2845,  2851,
+    2858,  2864,  2868,  2872,  2882,  2889,  2900,  2914,  2930,  2950,
+    2974,  2980,  2984,  2988,  2999,  3004,  3015,  3020,  3038,  3043,
+    3056,  3062,  3068,  3073,  3081,  3094,  3098,  3116,  3130
 };
 #endif
 
@@ -6579,6 +6579,13 @@ case 272:
 	MergeProblem(yyvsp[-1].c);
 	yyin = ff;
 
+      }
+      else if(!strcmp(yyvsp[-2].c, "MergeWithBoundingBox")){
+
+	FILE *ff = yyin;
+	MergeProblemWithBoundingBox(yyvsp[-1].c);
+	yyin = ff;
+
       }
       else if(!strcmp(yyvsp[-2].c, "Open")){
 
@@ -6598,7 +6605,7 @@ case 272:
     ;
     break;}
 case 273:
-#line 2023 "Gmsh.y"
+#line 2030 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-2].c, "Sleep")){
 
@@ -6620,7 +6627,7 @@ case 273:
     ;
     break;}
 case 274:
-#line 2043 "Gmsh.y"
+#line 2050 "Gmsh.y"
 {
 #ifndef _NOPLUGIN
     if(CTX.default_plugins)
@@ -6629,13 +6636,13 @@ case 274:
    ;
     break;}
 case 275:
-#line 2050 "Gmsh.y"
+#line 2057 "Gmsh.y"
 {
       exit(0);
     ;
     break;}
 case 276:
-#line 2054 "Gmsh.y"
+#line 2061 "Gmsh.y"
 {
 #ifndef _BLACKBOX
       if(!CTX.batch){ // we're in interactive mode
@@ -6653,7 +6660,7 @@ case 276:
     ;
     break;}
 case 277:
-#line 2076 "Gmsh.y"
+#line 2083 "Gmsh.y"
 {
       LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d ;
       LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-1].d ;
@@ -6665,7 +6672,7 @@ case 277:
     ;
     break;}
 case 278:
-#line 2086 "Gmsh.y"
+#line 2093 "Gmsh.y"
 {
       LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d ;
       LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-3].d ;
@@ -6677,7 +6684,7 @@ case 278:
     ;
     break;}
 case 279:
-#line 2096 "Gmsh.y"
+#line 2103 "Gmsh.y"
 {
       LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d ;
       LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-1].d ;
@@ -6700,7 +6707,7 @@ case 279:
     ;
     break;}
 case 280:
-#line 2117 "Gmsh.y"
+#line 2124 "Gmsh.y"
 {
       LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d ;
       LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-3].d ;
@@ -6723,7 +6730,7 @@ case 280:
     ;
     break;}
 case 281:
-#line 2138 "Gmsh.y"
+#line 2145 "Gmsh.y"
 {
       if(LoopControlVariablesTab[ImbricatedLoop-1][1] >  
 	 LoopControlVariablesTab[ImbricatedLoop-1][0]){
@@ -6746,7 +6753,7 @@ case 281:
     ;
     break;}
 case 282:
-#line 2159 "Gmsh.y"
+#line 2166 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->createFunction(yyvsp[0].c,yyin,yyname,yylineno))
 	yymsg(GERROR, "Redefinition of function %s",yyvsp[0].c);
@@ -6754,32 +6761,32 @@ case 282:
     ;
     break;}
 case 283:
-#line 2165 "Gmsh.y"
+#line 2172 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->leaveFunction(&yyin,yyname,yylineno))
 	yymsg(GERROR, "Error while exiting function");
     ;
     break;}
 case 284:
-#line 2170 "Gmsh.y"
+#line 2177 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->enterFunction(yyvsp[-1].c,&yyin,yyname,yylineno))
 	yymsg(GERROR, "Unknown function %s",yyvsp[-1].c);
     ;
     break;}
 case 285:
-#line 2175 "Gmsh.y"
+#line 2182 "Gmsh.y"
 {
       if(!yyvsp[-1].d) skip_until("If", "EndIf");
     ;
     break;}
 case 286:
-#line 2179 "Gmsh.y"
+#line 2186 "Gmsh.y"
 {
     ;
     break;}
 case 287:
-#line 2191 "Gmsh.y"
+#line 2198 "Gmsh.y"
 {
       Curve *pc, *prc;
       Extrude_ProtudePoint(TRANSLATE,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],
@@ -6788,7 +6795,7 @@ case 287:
     ;
     break;}
 case 288:
-#line 2198 "Gmsh.y"
+#line 2205 "Gmsh.y"
 {
       Curve *pc, *prc;
       Extrude_ProtudePoint(ROTATE,(int)yyvsp[-8].d,0.,0.,0.,
@@ -6797,7 +6804,7 @@ case 288:
     ;
     break;}
 case 289:
-#line 2205 "Gmsh.y"
+#line 2212 "Gmsh.y"
 {
       Curve *pc, *prc;
       Extrude_ProtudePoint(TRANSLATE_ROTATE,(int)yyvsp[-10].d,yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],
@@ -6806,98 +6813,98 @@ case 289:
     ;
     break;}
 case 290:
-#line 2215 "Gmsh.y"
+#line 2222 "Gmsh.y"
 {
       Extrude_ProtudeCurve(TRANSLATE,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],
 			   0.,0.,0.,0.,0.,0.,0.,1,NULL);
     ;
     break;}
 case 291:
-#line 2220 "Gmsh.y"
+#line 2227 "Gmsh.y"
 {
       Extrude_ProtudeCurve(ROTATE,(int)yyvsp[-8].d,0.,0.,0.,
 			   yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,1,NULL);
     ;
     break;}
 case 292:
-#line 2225 "Gmsh.y"
+#line 2232 "Gmsh.y"
 {
       Extrude_ProtudeCurve(TRANSLATE_ROTATE,(int)yyvsp[-10].d,yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],
 			   yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,1,NULL);
     ;
     break;}
 case 293:
-#line 2230 "Gmsh.y"
+#line 2237 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 294:
-#line 2235 "Gmsh.y"
+#line 2242 "Gmsh.y"
 {
       Extrude_ProtudeCurve(TRANSLATE,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],
 			   0.,0.,0.,0.,0.,0.,0.,1,&extr);
     ;
     break;}
 case 295:
-#line 2240 "Gmsh.y"
+#line 2247 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 296:
-#line 2245 "Gmsh.y"
+#line 2252 "Gmsh.y"
 {
       Extrude_ProtudeCurve(ROTATE,(int)yyvsp[-12].d,0.,0.,0.,
 			   yyvsp[-10].v[0],yyvsp[-10].v[1],yyvsp[-10].v[2],yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],yyvsp[-6].d,1,&extr);
     ;
     break;}
 case 297:
-#line 2250 "Gmsh.y"
+#line 2257 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 298:
-#line 2255 "Gmsh.y"
+#line 2262 "Gmsh.y"
 {
       Extrude_ProtudeCurve(TRANSLATE_ROTATE,(int)yyvsp[-14].d,yyvsp[-12].v[0],yyvsp[-12].v[1],yyvsp[-12].v[2],
 			   yyvsp[-10].v[0],yyvsp[-10].v[1],yyvsp[-10].v[2],yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],yyvsp[-6].d,1,&extr);
     ;
     break;}
 case 299:
-#line 2263 "Gmsh.y"
+#line 2270 "Gmsh.y"
 {
       Extrude_ProtudeSurface(TRANSLATE,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],
 			     0.,0.,0.,0.,0.,0.,0.,0,NULL);
     ;
     break;}
 case 300:
-#line 2268 "Gmsh.y"
+#line 2275 "Gmsh.y"
 {
       Extrude_ProtudeSurface(ROTATE,(int)yyvsp[-8].d,0.,0.,0.,
 			     yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,0,NULL);
     ;
     break;}
 case 301:
-#line 2273 "Gmsh.y"
+#line 2280 "Gmsh.y"
 {
       Extrude_ProtudeSurface(TRANSLATE_ROTATE,(int)yyvsp[-10].d,yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],
 			     yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,0,NULL);
     ;
     break;}
 case 302:
-#line 2278 "Gmsh.y"
+#line 2285 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 303:
-#line 2283 "Gmsh.y"
+#line 2290 "Gmsh.y"
 {
       int vol = NEWREG();
       Extrude_ProtudeSurface(TRANSLATE,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],
@@ -6905,14 +6912,14 @@ case 303:
     ;
     break;}
 case 304:
-#line 2289 "Gmsh.y"
+#line 2296 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 305:
-#line 2295 "Gmsh.y"
+#line 2302 "Gmsh.y"
 {
       int vol = NEWREG();
       Extrude_ProtudeSurface(ROTATE,(int)yyvsp[-12].d,0.,0.,0.,
@@ -6920,14 +6927,14 @@ case 305:
     ;
     break;}
 case 306:
-#line 2301 "Gmsh.y"
+#line 2308 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 307:
-#line 2307 "Gmsh.y"
+#line 2314 "Gmsh.y"
 {
       int vol = NEWREG();
       Extrude_ProtudeSurface(TRANSLATE_ROTATE,(int)yyvsp[-14].d,yyvsp[-12].v[0],yyvsp[-12].v[1],yyvsp[-12].v[2],
@@ -6935,17 +6942,17 @@ case 307:
     ;
     break;}
 case 308:
-#line 2316 "Gmsh.y"
+#line 2323 "Gmsh.y"
 {
     ;
     break;}
 case 309:
-#line 2319 "Gmsh.y"
+#line 2326 "Gmsh.y"
 {
     ;
     break;}
 case 310:
-#line 2325 "Gmsh.y"
+#line 2332 "Gmsh.y"
 {
       double d;
       extr.mesh.ExtrudeMesh = true;
@@ -6973,7 +6980,7 @@ case 310:
     ;
     break;}
 case 311:
-#line 2351 "Gmsh.y"
+#line 2358 "Gmsh.y"
 {
       double d;
       extr.mesh.ExtrudeMesh = true;
@@ -6999,13 +7006,13 @@ case 311:
     ;
     break;}
 case 312:
-#line 2375 "Gmsh.y"
+#line 2382 "Gmsh.y"
 {
       extr.mesh.Recombine = true;
     ;
     break;}
 case 313:
-#line 2384 "Gmsh.y"
+#line 2391 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-3].l);i++){
@@ -7025,7 +7032,7 @@ case 313:
     ;
     break;}
 case 314:
-#line 2402 "Gmsh.y"
+#line 2409 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-6].l);i++){
@@ -7045,7 +7052,7 @@ case 314:
     ;
     break;}
 case 315:
-#line 2420 "Gmsh.y"
+#line 2427 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-6].l);i++){
@@ -7065,7 +7072,7 @@ case 315:
     ;
     break;}
 case 316:
-#line 2438 "Gmsh.y"
+#line 2445 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d,THEM);
       if(!s)
@@ -7089,7 +7096,7 @@ case 316:
     ;
     break;}
 case 317:
-#line 2460 "Gmsh.y"
+#line 2467 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d,THEM);
       if(!s)
@@ -7112,7 +7119,7 @@ case 317:
     ;
     break;}
 case 318:
-#line 2481 "Gmsh.y"
+#line 2488 "Gmsh.y"
 {
       Volume *v = FindVolume((int)yyvsp[-4].d,THEM);
       if(!v)
@@ -7135,7 +7142,7 @@ case 318:
     ;
     break;}
 case 319:
-#line 2502 "Gmsh.y"
+#line 2509 "Gmsh.y"
 {
       Surface *s;
       for(i=0;i<List_Nbr(yyvsp[-3].l);i++){
@@ -7151,7 +7158,7 @@ case 319:
     ;
     break;}
 case 320:
-#line 2516 "Gmsh.y"
+#line 2523 "Gmsh.y"
 {
       Surface *s;
       for(i=0;i<List_Nbr(yyvsp[-1].l);i++){
@@ -7167,71 +7174,71 @@ case 320:
     ;
     break;}
 case 321:
-#line 2536 "Gmsh.y"
+#line 2543 "Gmsh.y"
 { 
       ReplaceAllDuplicates(THEM);
     ;
     break;}
 case 322:
-#line 2540 "Gmsh.y"
+#line 2547 "Gmsh.y"
 { 
       IntersectAllSegmentsTogether();
     ;
     break;}
 case 323:
-#line 2549 "Gmsh.y"
+#line 2556 "Gmsh.y"
 {yyval.i = 1;;
     break;}
 case 324:
-#line 2550 "Gmsh.y"
+#line 2557 "Gmsh.y"
 {yyval.i = 0;;
     break;}
 case 325:
-#line 2551 "Gmsh.y"
+#line 2558 "Gmsh.y"
 {yyval.i = -1;;
     break;}
 case 326:
-#line 2552 "Gmsh.y"
+#line 2559 "Gmsh.y"
 {yyval.i = -1;;
     break;}
 case 327:
-#line 2553 "Gmsh.y"
+#line 2560 "Gmsh.y"
 {yyval.i = -1;;
     break;}
 case 328:
-#line 2557 "Gmsh.y"
+#line 2564 "Gmsh.y"
 { yyval.d = yyvsp[0].d;           ;
     break;}
 case 329:
-#line 2558 "Gmsh.y"
+#line 2565 "Gmsh.y"
 { yyval.d = yyvsp[-1].d ;          ;
     break;}
 case 330:
-#line 2559 "Gmsh.y"
+#line 2566 "Gmsh.y"
 { yyval.d = -yyvsp[0].d ;         ;
     break;}
 case 331:
-#line 2560 "Gmsh.y"
+#line 2567 "Gmsh.y"
 { yyval.d = yyvsp[0].d;           ;
     break;}
 case 332:
-#line 2561 "Gmsh.y"
+#line 2568 "Gmsh.y"
 { yyval.d = !yyvsp[0].d ;         ;
     break;}
 case 333:
-#line 2562 "Gmsh.y"
+#line 2569 "Gmsh.y"
 { yyval.d = yyvsp[-2].d - yyvsp[0].d ;     ;
     break;}
 case 334:
-#line 2563 "Gmsh.y"
+#line 2570 "Gmsh.y"
 { yyval.d = yyvsp[-2].d + yyvsp[0].d ;     ;
     break;}
 case 335:
-#line 2564 "Gmsh.y"
+#line 2571 "Gmsh.y"
 { yyval.d = yyvsp[-2].d * yyvsp[0].d ;     ;
     break;}
 case 336:
-#line 2566 "Gmsh.y"
+#line 2573 "Gmsh.y"
 { 
       if(!yyvsp[0].d)
 	yymsg(GERROR, "Division by zero in '%g / %g'", yyvsp[-2].d, yyvsp[0].d);
@@ -7240,235 +7247,235 @@ case 336:
     ;
     break;}
 case 337:
-#line 2572 "Gmsh.y"
+#line 2579 "Gmsh.y"
 { yyval.d = (int)yyvsp[-2].d % (int)yyvsp[0].d ;  ;
     break;}
 case 338:
-#line 2573 "Gmsh.y"
+#line 2580 "Gmsh.y"
 { yyval.d = pow(yyvsp[-2].d,yyvsp[0].d) ;  ;
     break;}
 case 339:
-#line 2574 "Gmsh.y"
+#line 2581 "Gmsh.y"
 { yyval.d = yyvsp[-2].d < yyvsp[0].d ;     ;
     break;}
 case 340:
-#line 2575 "Gmsh.y"
+#line 2582 "Gmsh.y"
 { yyval.d = yyvsp[-2].d > yyvsp[0].d ;     ;
     break;}
 case 341:
-#line 2576 "Gmsh.y"
+#line 2583 "Gmsh.y"
 { yyval.d = yyvsp[-2].d <= yyvsp[0].d ;    ;
     break;}
 case 342:
-#line 2577 "Gmsh.y"
+#line 2584 "Gmsh.y"
 { yyval.d = yyvsp[-2].d >= yyvsp[0].d ;    ;
     break;}
 case 343:
-#line 2578 "Gmsh.y"
+#line 2585 "Gmsh.y"
 { yyval.d = yyvsp[-2].d == yyvsp[0].d ;    ;
     break;}
 case 344:
-#line 2579 "Gmsh.y"
+#line 2586 "Gmsh.y"
 { yyval.d = yyvsp[-2].d != yyvsp[0].d ;    ;
     break;}
 case 345:
-#line 2580 "Gmsh.y"
+#line 2587 "Gmsh.y"
 { yyval.d = yyvsp[-2].d && yyvsp[0].d ;    ;
     break;}
 case 346:
-#line 2581 "Gmsh.y"
+#line 2588 "Gmsh.y"
 { yyval.d = yyvsp[-2].d || yyvsp[0].d ;    ;
     break;}
 case 347:
-#line 2582 "Gmsh.y"
+#line 2589 "Gmsh.y"
 { yyval.d = yyvsp[-4].d? yyvsp[-2].d : yyvsp[0].d ; ;
     break;}
 case 348:
-#line 2583 "Gmsh.y"
+#line 2590 "Gmsh.y"
 { yyval.d = exp(yyvsp[-1].d);      ;
     break;}
 case 349:
-#line 2584 "Gmsh.y"
+#line 2591 "Gmsh.y"
 { yyval.d = log(yyvsp[-1].d);      ;
     break;}
 case 350:
-#line 2585 "Gmsh.y"
+#line 2592 "Gmsh.y"
 { yyval.d = log10(yyvsp[-1].d);    ;
     break;}
 case 351:
-#line 2586 "Gmsh.y"
+#line 2593 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-1].d);     ;
     break;}
 case 352:
-#line 2587 "Gmsh.y"
+#line 2594 "Gmsh.y"
 { yyval.d = sin(yyvsp[-1].d);      ;
     break;}
 case 353:
-#line 2588 "Gmsh.y"
+#line 2595 "Gmsh.y"
 { yyval.d = asin(yyvsp[-1].d);     ;
     break;}
 case 354:
-#line 2589 "Gmsh.y"
+#line 2596 "Gmsh.y"
 { yyval.d = cos(yyvsp[-1].d);      ;
     break;}
 case 355:
-#line 2590 "Gmsh.y"
+#line 2597 "Gmsh.y"
 { yyval.d = acos(yyvsp[-1].d);     ;
     break;}
 case 356:
-#line 2591 "Gmsh.y"
+#line 2598 "Gmsh.y"
 { yyval.d = tan(yyvsp[-1].d);      ;
     break;}
 case 357:
-#line 2592 "Gmsh.y"
+#line 2599 "Gmsh.y"
 { yyval.d = atan(yyvsp[-1].d);     ;
     break;}
 case 358:
-#line 2593 "Gmsh.y"
+#line 2600 "Gmsh.y"
 { yyval.d = atan2(yyvsp[-3].d,yyvsp[-1].d); ;
     break;}
 case 359:
-#line 2594 "Gmsh.y"
+#line 2601 "Gmsh.y"
 { yyval.d = sinh(yyvsp[-1].d);     ;
     break;}
 case 360:
-#line 2595 "Gmsh.y"
+#line 2602 "Gmsh.y"
 { yyval.d = cosh(yyvsp[-1].d);     ;
     break;}
 case 361:
-#line 2596 "Gmsh.y"
+#line 2603 "Gmsh.y"
 { yyval.d = tanh(yyvsp[-1].d);     ;
     break;}
 case 362:
-#line 2597 "Gmsh.y"
+#line 2604 "Gmsh.y"
 { yyval.d = fabs(yyvsp[-1].d);     ;
     break;}
 case 363:
-#line 2598 "Gmsh.y"
+#line 2605 "Gmsh.y"
 { yyval.d = floor(yyvsp[-1].d);    ;
     break;}
 case 364:
-#line 2599 "Gmsh.y"
+#line 2606 "Gmsh.y"
 { yyval.d = ceil(yyvsp[-1].d);     ;
     break;}
 case 365:
-#line 2600 "Gmsh.y"
+#line 2607 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
 case 366:
-#line 2601 "Gmsh.y"
+#line 2608 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
 case 367:
-#line 2602 "Gmsh.y"
+#line 2609 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
     break;}
 case 368:
-#line 2603 "Gmsh.y"
+#line 2610 "Gmsh.y"
 { yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
     break;}
 case 369:
-#line 2605 "Gmsh.y"
+#line 2612 "Gmsh.y"
 { yyval.d = exp(yyvsp[-1].d);      ;
     break;}
 case 370:
-#line 2606 "Gmsh.y"
+#line 2613 "Gmsh.y"
 { yyval.d = log(yyvsp[-1].d);      ;
     break;}
 case 371:
-#line 2607 "Gmsh.y"
+#line 2614 "Gmsh.y"
 { yyval.d = log10(yyvsp[-1].d);    ;
     break;}
 case 372:
-#line 2608 "Gmsh.y"
+#line 2615 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-1].d);     ;
     break;}
 case 373:
-#line 2609 "Gmsh.y"
+#line 2616 "Gmsh.y"
 { yyval.d = sin(yyvsp[-1].d);      ;
     break;}
 case 374:
-#line 2610 "Gmsh.y"
+#line 2617 "Gmsh.y"
 { yyval.d = asin(yyvsp[-1].d);     ;
     break;}
 case 375:
-#line 2611 "Gmsh.y"
+#line 2618 "Gmsh.y"
 { yyval.d = cos(yyvsp[-1].d);      ;
     break;}
 case 376:
-#line 2612 "Gmsh.y"
+#line 2619 "Gmsh.y"
 { yyval.d = acos(yyvsp[-1].d);     ;
     break;}
 case 377:
-#line 2613 "Gmsh.y"
+#line 2620 "Gmsh.y"
 { yyval.d = tan(yyvsp[-1].d);      ;
     break;}
 case 378:
-#line 2614 "Gmsh.y"
+#line 2621 "Gmsh.y"
 { yyval.d = atan(yyvsp[-1].d);     ;
     break;}
 case 379:
-#line 2615 "Gmsh.y"
+#line 2622 "Gmsh.y"
 { yyval.d = atan2(yyvsp[-3].d,yyvsp[-1].d); ;
     break;}
 case 380:
-#line 2616 "Gmsh.y"
+#line 2623 "Gmsh.y"
 { yyval.d = sinh(yyvsp[-1].d);     ;
     break;}
 case 381:
-#line 2617 "Gmsh.y"
+#line 2624 "Gmsh.y"
 { yyval.d = cosh(yyvsp[-1].d);     ;
     break;}
 case 382:
-#line 2618 "Gmsh.y"
+#line 2625 "Gmsh.y"
 { yyval.d = tanh(yyvsp[-1].d);     ;
     break;}
 case 383:
-#line 2619 "Gmsh.y"
+#line 2626 "Gmsh.y"
 { yyval.d = fabs(yyvsp[-1].d);     ;
     break;}
 case 384:
-#line 2620 "Gmsh.y"
+#line 2627 "Gmsh.y"
 { yyval.d = floor(yyvsp[-1].d);    ;
     break;}
 case 385:
-#line 2621 "Gmsh.y"
+#line 2628 "Gmsh.y"
 { yyval.d = ceil(yyvsp[-1].d);     ;
     break;}
 case 386:
-#line 2622 "Gmsh.y"
+#line 2629 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
 case 387:
-#line 2623 "Gmsh.y"
+#line 2630 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
 case 388:
-#line 2624 "Gmsh.y"
+#line 2631 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
     break;}
 case 389:
-#line 2625 "Gmsh.y"
+#line 2632 "Gmsh.y"
 { yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
     break;}
 case 390:
-#line 2634 "Gmsh.y"
+#line 2641 "Gmsh.y"
 { yyval.d = yyvsp[0].d; ;
     break;}
 case 391:
-#line 2635 "Gmsh.y"
+#line 2642 "Gmsh.y"
 { yyval.d = 3.141592653589793; ;
     break;}
 case 392:
-#line 2636 "Gmsh.y"
+#line 2643 "Gmsh.y"
 { yyval.d = ParUtil::Instance()->rank(); ;
     break;}
 case 393:
-#line 2637 "Gmsh.y"
+#line 2644 "Gmsh.y"
 { yyval.d = ParUtil::Instance()->size(); ;
     break;}
 case 394:
-#line 2642 "Gmsh.y"
+#line 2649 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[0].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -7480,7 +7487,7 @@ case 394:
     ;
     break;}
 case 395:
-#line 2653 "Gmsh.y"
+#line 2660 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-3].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -7498,7 +7505,7 @@ case 395:
     ;
     break;}
 case 396:
-#line 2670 "Gmsh.y"
+#line 2677 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-1].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -7510,7 +7517,7 @@ case 396:
     ;
     break;}
 case 397:
-#line 2681 "Gmsh.y"
+#line 2688 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-4].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -7528,7 +7535,7 @@ case 397:
     ;
     break;}
 case 398:
-#line 2700 "Gmsh.y"
+#line 2707 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-2].c))){
 	yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-2].c);
@@ -7545,7 +7552,7 @@ case 398:
     ;
     break;}
 case 399:
-#line 2716 "Gmsh.y"
+#line 2723 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-5].c))){
 	yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-5].c);
@@ -7562,7 +7569,7 @@ case 399:
     ;
     break;}
 case 400:
-#line 2732 "Gmsh.y"
+#line 2739 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-3].c))){
 	yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-3].c);
@@ -7579,7 +7586,7 @@ case 400:
     ;
     break;}
 case 401:
-#line 2748 "Gmsh.y"
+#line 2755 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-6].c))){
 	yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-6].c);
@@ -7596,130 +7603,130 @@ case 401:
     ;
     break;}
 case 402:
-#line 2766 "Gmsh.y"
+#line 2773 "Gmsh.y"
 {
       memcpy(yyval.v, yyvsp[0].v, 5*sizeof(double)) ;
     ;
     break;}
 case 403:
-#line 2770 "Gmsh.y"
+#line 2777 "Gmsh.y"
 {
       for(i=0 ; i<5 ; i++) yyval.v[i] = -yyvsp[0].v[i] ;
     ;
     break;}
 case 404:
-#line 2774 "Gmsh.y"
+#line 2781 "Gmsh.y"
 { 
       for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[0].v[i];
     ;
     break;}
 case 405:
-#line 2778 "Gmsh.y"
+#line 2785 "Gmsh.y"
 { 
       for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[-2].v[i] - yyvsp[0].v[i] ;
     ;
     break;}
 case 406:
-#line 2782 "Gmsh.y"
+#line 2789 "Gmsh.y"
 {
       for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[-2].v[i] + yyvsp[0].v[i] ;
     ;
     break;}
 case 407:
-#line 2789 "Gmsh.y"
+#line 2796 "Gmsh.y"
 { 
       yyval.v[0]=yyvsp[-9].d;  yyval.v[1]=yyvsp[-7].d;  yyval.v[2]=yyvsp[-5].d;  yyval.v[3]=yyvsp[-3].d; yyval.v[4]=yyvsp[-1].d;
     ;
     break;}
 case 408:
-#line 2793 "Gmsh.y"
+#line 2800 "Gmsh.y"
 { 
       yyval.v[0]=yyvsp[-7].d;  yyval.v[1]=yyvsp[-5].d;  yyval.v[2]=yyvsp[-3].d;  yyval.v[3]=yyvsp[-1].d; yyval.v[4]=1.0;
     ;
     break;}
 case 409:
-#line 2797 "Gmsh.y"
+#line 2804 "Gmsh.y"
 {
       yyval.v[0]=yyvsp[-5].d;  yyval.v[1]=yyvsp[-3].d;  yyval.v[2]=yyvsp[-1].d;  yyval.v[3]=0.0; yyval.v[4]=1.0;
     ;
     break;}
 case 410:
-#line 2801 "Gmsh.y"
+#line 2808 "Gmsh.y"
 {
       yyval.v[0]=yyvsp[-5].d;  yyval.v[1]=yyvsp[-3].d;  yyval.v[2]=yyvsp[-1].d;  yyval.v[3]=0.0; yyval.v[4]=1.0;
     ;
     break;}
 case 411:
-#line 2808 "Gmsh.y"
+#line 2815 "Gmsh.y"
 {
     ;
     break;}
 case 412:
-#line 2811 "Gmsh.y"
+#line 2818 "Gmsh.y"
 {
     ;
     break;}
 case 413:
-#line 2817 "Gmsh.y"
+#line 2824 "Gmsh.y"
 {
     ;
     break;}
 case 414:
-#line 2820 "Gmsh.y"
+#line 2827 "Gmsh.y"
 {
     ;
     break;}
 case 415:
-#line 2826 "Gmsh.y"
+#line 2833 "Gmsh.y"
 {
     ;
     break;}
 case 416:
-#line 2829 "Gmsh.y"
+#line 2836 "Gmsh.y"
 {
        yyval.l=yyvsp[-1].l;
     ;
     break;}
 case 417:
-#line 2833 "Gmsh.y"
+#line 2840 "Gmsh.y"
 {
        yyval.l=yyvsp[-1].l;
     ;
     break;}
 case 418:
-#line 2840 "Gmsh.y"
+#line 2847 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(List_T*)) ;
       List_Add(yyval.l, &(yyvsp[0].l)) ;
     ;
     break;}
 case 419:
-#line 2845 "Gmsh.y"
+#line 2852 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].l)) ;
     ;
     break;}
 case 420:
-#line 2853 "Gmsh.y"
+#line 2860 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       List_Add(yyval.l, &(yyvsp[0].d)) ;
     ;
     break;}
 case 421:
-#line 2858 "Gmsh.y"
+#line 2865 "Gmsh.y"
 {
       yyval.l = yyvsp[0].l ;
     ;
     break;}
 case 422:
-#line 2862 "Gmsh.y"
+#line 2869 "Gmsh.y"
 {
       yyval.l=yyvsp[-1].l;
     ;
     break;}
 case 423:
-#line 2866 "Gmsh.y"
+#line 2873 "Gmsh.y"
 {
       yyval.l=yyvsp[-1].l;
       for(i=0 ; i<List_Nbr(yyval.l) ; i++){
@@ -7729,7 +7736,7 @@ case 423:
     ;
     break;}
 case 424:
-#line 2877 "Gmsh.y"
+#line 2884 "Gmsh.y"
 { 
       yyval.l = List_Create(2,1,sizeof(double)) ; 
       for(d=yyvsp[-2].d ; (yyvsp[-2].d<yyvsp[0].d)?(d<=yyvsp[0].d):(d>=yyvsp[0].d) ; (yyvsp[-2].d<yyvsp[0].d)?(d+=1.):(d-=1.)) 
@@ -7737,7 +7744,7 @@ case 424:
     ;
     break;}
 case 425:
-#line 2883 "Gmsh.y"
+#line 2890 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ; 
       if(!yyvsp[0].d || (yyvsp[-4].d<yyvsp[-2].d && yyvsp[0].d<0) || (yyvsp[-4].d>yyvsp[-2].d && yyvsp[0].d>0)){
@@ -7750,7 +7757,7 @@ case 425:
    ;
     break;}
 case 426:
-#line 2894 "Gmsh.y"
+#line 2901 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       TheSymbol.Name = yyvsp[-2].c ;
@@ -7766,7 +7773,7 @@ case 426:
     ;
     break;}
 case 427:
-#line 2908 "Gmsh.y"
+#line 2915 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       TheSymbol.Name = yyvsp[-2].c ;
@@ -7784,7 +7791,7 @@ case 427:
     ;
     break;}
 case 428:
-#line 2924 "Gmsh.y"
+#line 2931 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       TheSymbol.Name = yyvsp[-5].c ;
@@ -7806,7 +7813,7 @@ case 428:
     ;
     break;}
 case 429:
-#line 2944 "Gmsh.y"
+#line 2951 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       TheSymbol.Name = yyvsp[-5].c ;
@@ -7830,26 +7837,26 @@ case 429:
     ;
     break;}
 case 430:
-#line 2969 "Gmsh.y"
+#line 2976 "Gmsh.y"
 {
       yyval.l = List_Create(2,1,sizeof(double)) ;
       List_Add(yyval.l, &(yyvsp[0].d)) ;
     ;
     break;}
 case 431:
-#line 2974 "Gmsh.y"
+#line 2981 "Gmsh.y"
 {
       yyval.l = yyvsp[0].l ;
     ;
     break;}
 case 432:
-#line 2978 "Gmsh.y"
+#line 2985 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].d)) ;
     ;
     break;}
 case 433:
-#line 2982 "Gmsh.y"
+#line 2989 "Gmsh.y"
 {
       for(i=0 ; i<List_Nbr(yyvsp[0].l) ; i++){
 	List_Read(yyvsp[0].l, i, &d) ;
@@ -7859,26 +7866,26 @@ case 433:
     ;
     break;}
 case 434:
-#line 2994 "Gmsh.y"
+#line 3001 "Gmsh.y"
 {
       yyval.u = PACK_COLOR((int)yyvsp[-7].d, (int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d);
     ;
     break;}
 case 435:
-#line 2998 "Gmsh.y"
+#line 3005 "Gmsh.y"
 {
       yyval.u = PACK_COLOR((int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d, 255);
     ;
     break;}
 case 436:
-#line 3009 "Gmsh.y"
+#line 3016 "Gmsh.y"
 {
       yyval.u = Get_ColorForString(ColorString, -1, yyvsp[0].c, &flag);
       if(flag) yymsg(GERROR, "Unknown color '%s'", yyvsp[0].c);
     ;
     break;}
 case 437:
-#line 3014 "Gmsh.y"
+#line 3021 "Gmsh.y"
 {
       if(!(pColCat = Get_ColorOptionCategory(yyvsp[-4].c))){
 	yymsg(GERROR, "Unknown color option class '%s'", yyvsp[-4].c);
@@ -7896,13 +7903,13 @@ case 437:
     ;
     break;}
 case 438:
-#line 3033 "Gmsh.y"
+#line 3040 "Gmsh.y"
 {
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 439:
-#line 3037 "Gmsh.y"
+#line 3044 "Gmsh.y"
 {
       yyval.l = List_Create(256,10,sizeof(unsigned int)) ;
       GmshColorTable *ct = Get_ColorTable((int)yyvsp[-3].d);
@@ -7915,26 +7922,26 @@ case 439:
     ;
     break;}
 case 440:
-#line 3051 "Gmsh.y"
+#line 3058 "Gmsh.y"
 {
       yyval.l = List_Create(256,10,sizeof(unsigned int)) ;
       List_Add(yyval.l, &(yyvsp[0].u)) ;
     ;
     break;}
 case 441:
-#line 3056 "Gmsh.y"
+#line 3063 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].u)) ;
     ;
     break;}
 case 442:
-#line 3063 "Gmsh.y"
+#line 3070 "Gmsh.y"
 {
       yyval.c = yyvsp[0].c;
     ;
     break;}
 case 443:
-#line 3067 "Gmsh.y"
+#line 3074 "Gmsh.y"
 {
       yyval.c = (char *)Malloc((strlen(yyvsp[-3].c)+strlen(yyvsp[-1].c)+1)*sizeof(char)) ;
       strcpy(yyval.c, yyvsp[-3].c) ;  
@@ -7944,7 +7951,7 @@ case 443:
     ;
     break;}
 case 444:
-#line 3075 "Gmsh.y"
+#line 3082 "Gmsh.y"
 {
       yyval.c = (char *)Malloc((strlen(yyvsp[-1].c)+1)*sizeof(char)) ;
       for(i=strlen(yyvsp[-1].c)-1; i>=0; i--){
@@ -7959,13 +7966,13 @@ case 444:
     ;
     break;}
 case 445:
-#line 3088 "Gmsh.y"
+#line 3095 "Gmsh.y"
 {
       yyval.c = yyvsp[-1].c;
     ;
     break;}
 case 446:
-#line 3092 "Gmsh.y"
+#line 3099 "Gmsh.y"
 {
       i = PrintListOfDouble(yyvsp[-3].c,yyvsp[-1].l,tmpstring);
       if(i<0){
@@ -7985,7 +7992,7 @@ case 446:
     ;
     break;}
 case 447:
-#line 3110 "Gmsh.y"
+#line 3117 "Gmsh.y"
 { 
       if(!(pStrCat = Get_StringOptionCategory(yyvsp[-3].c)))
 	yymsg(GERROR, "Unknown string option class '%s'", yyvsp[-3].c);
@@ -8001,7 +8008,7 @@ case 447:
     ;
     break;}
 case 448:
-#line 3124 "Gmsh.y"
+#line 3131 "Gmsh.y"
 { 
       if(!(pStrCat = Get_StringOptionCategory(yyvsp[-6].c)))
 	yymsg(GERROR, "Unknown string option class '%s'", yyvsp[-6].c);
@@ -8249,7 +8256,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 3139 "Gmsh.y"
+#line 3146 "Gmsh.y"
 
 
 void InitSymbols(void){
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index 330e9cb206..f1b176f3e7 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1,6 +1,6 @@
 %{ 
 
-// $Id: Gmsh.y,v 1.126 2002-10-04 21:14:18 geuzaine Exp $
+// $Id: Gmsh.y,v 1.127 2002-10-11 01:38:12 geuzaine Exp $
 //
 // Copyright (C) 1997 - 2002 C. Geuzaine, J.-F. Remacle
 //
@@ -2002,6 +2002,13 @@ Command :
 	MergeProblem($2);
 	yyin = ff;
 
+      }
+      else if(!strcmp($1, "MergeWithBoundingBox")){
+
+	FILE *ff = yyin;
+	MergeProblemWithBoundingBox($2);
+	yyin = ff;
+
       }
       else if(!strcmp($1, "Open")){
 
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index 72c0e44d0f..881e02da89 100644
--- a/Parser/Gmsh.yy.cpp
+++ b/Parser/Gmsh.yy.cpp
@@ -2,7 +2,7 @@
 /* A lexical scanner generated by flex */
 
 /* Scanner skeleton version:
- * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.144 2002-10-04 21:14:19 geuzaine Exp $
+ * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.145 2002-10-11 01:38:13 geuzaine Exp $
  */
 
 #define FLEX_SCANNER
@@ -1007,7 +1007,7 @@ char *yytext;
 #define INITIAL 0
 #line 2 "Gmsh.l"
 
-// $Id: Gmsh.yy.cpp,v 1.144 2002-10-04 21:14:19 geuzaine Exp $
+// $Id: Gmsh.yy.cpp,v 1.145 2002-10-11 01:38:13 geuzaine Exp $
 //
 // Copyright (C) 1997 - 2002 C. Geuzaine, J.-F. Remacle
 //
diff --git a/Parser/OpenFile.cpp b/Parser/OpenFile.cpp
index 787856b0b1..36f7c27eaf 100644
--- a/Parser/OpenFile.cpp
+++ b/Parser/OpenFile.cpp
@@ -1,4 +1,4 @@
-// $Id: OpenFile.cpp,v 1.31 2002-09-24 02:04:34 geuzaine Exp $
+// $Id: OpenFile.cpp,v 1.32 2002-10-11 01:38:13 geuzaine Exp $
 //
 // Copyright (C) 1997 - 2002 C. Geuzaine, J.-F. Remacle
 //
@@ -109,9 +109,20 @@ void MergeProblem(char *name){
   ParseFile(name,0);  
 }
 
+void MergeProblemWithBoundingBox(char *name){
+  int nb = List_Nbr(CTX.post.list);
+  int status = ParseFile(name,0);
+  if(List_Nbr(CTX.post.list) > nb)
+    CalculateMinMax(NULL, ((Post_View*)List_Pointer
+			   (CTX.post.list,List_Nbr(CTX.post.list)-1))->BBox);
+  else if(!status) 
+    CalculateMinMax(THEM->Points,NULL);
+  else
+    CalculateMinMax(THEM->Vertices,NULL);
+}
+
 void OpenProblem(char *name){
   char ext[6];
-  int  status;
 
   if(CTX.threads_lock){
     Msg(INFO, "I'm busy! Ask me that later...");
@@ -150,7 +161,7 @@ void OpenProblem(char *name){
 
   int nb = List_Nbr(CTX.post.list);
 
-  status = ParseFile(CTX.filename,0);
+  int status = ParseFile(CTX.filename,0);
 
   ApplyLcFactor(THEM);
 
@@ -168,7 +179,7 @@ void OpenProblem(char *name){
 #ifndef _BLACKBOX
   ZeroHighlight(&M); 
 #endif
-  
+
   if(List_Nbr(CTX.post.list) > nb)
     CalculateMinMax(NULL, ((Post_View*)List_Pointer
 			   (CTX.post.list,List_Nbr(CTX.post.list)-1))->BBox);
diff --git a/Parser/OpenFile.h b/Parser/OpenFile.h
index 0b297a6fb5..6a18049a7f 100644
--- a/Parser/OpenFile.h
+++ b/Parser/OpenFile.h
@@ -26,5 +26,6 @@ int  ParseFile(char *filename, int silent);
 void ParseString(char *str);
 void OpenProblem(char *filename);
 void MergeProblem(char *filename);
+void MergeProblemWithBoundingBox(char *filename);
 
 #endif
-- 
GitLab