diff --git a/Box/Box.cpp b/Box/Box.cpp
index 53f7e4ca78864bbeb3c4434f65a8487f41fe722a..2bc4bf57af1bb081157d021783f1a9da4339a0cf 100644
--- a/Box/Box.cpp
+++ b/Box/Box.cpp
@@ -1,4 +1,4 @@
-// $Id: Box.cpp,v 1.51 2008-04-13 18:52:51 geuzaine Exp $
+// $Id: Box.cpp,v 1.52 2008-04-28 10:10:51 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -82,6 +82,7 @@ int GMSHBOX(int argc, char *argv[])
   OpenProject(CTX.filename);
   for(unsigned int i = 1; i < CTX.files.size(); i++)
     MergeFile(CTX.files[i].c_str());
+#if !defined(HAVE_NO_POST)
   if(CTX.bgm_filename) {
     MergeFile(CTX.bgm_filename);
     if(PView::list.size())
@@ -89,6 +90,7 @@ int GMSHBOX(int argc, char *argv[])
     else
       fprintf(stderr, ERROR_STR "Invalid background mesh (no view)\n");
   }
+#endif
   if(CTX.batch > 0) {
     GModel::current()->mesh(CTX.batch);
     CreateOutputFile(CTX.output_filename, CTX.mesh.format);
diff --git a/Common/CommandLine.cpp b/Common/CommandLine.cpp
index c07a85098ff81be0e656bf7271bb542efa2ee0c1..5c47911f140ed74507d6b15953c0bbf26fbd9b00 100644
--- a/Common/CommandLine.cpp
+++ b/Common/CommandLine.cpp
@@ -1,4 +1,4 @@
-// $Id: CommandLine.cpp,v 1.127 2008-04-01 12:47:09 geuzaine Exp $
+// $Id: CommandLine.cpp,v 1.128 2008-04-28 10:10:51 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -29,10 +29,13 @@
 #include "Context.h"
 #include "Options.h"
 #include "GModel.h"
-#include "PView.h"
 #include "CreateFile.h"
 #include "OS.h"
 
+#if !defined(HAVE_NO_POST)
+#include "PView.h"
+#endif
+
 #if !defined(GMSH_EXTRA_VERSION)
 #error
 #error Common/GmshVersion.h is not up-to-date.
@@ -296,11 +299,15 @@ void Get_Options(int argc, char *argv[])
         while(i < argc) {
           char filename[256];
           sprintf(filename, "%s_new", argv[i]);
+#if !defined(HAVE_NO_POST)
           unsigned int n = PView::list.size();
+#endif
           OpenProject(argv[i]);
+#if !defined(HAVE_NO_POST)
           // convert post-processing views to latest binary format
           for(unsigned int j = n; j < PView::list.size(); j++)
             PView::list[j]->write(filename, 1, (j == n) ? false : true);
+#endif
           // convert mesh to latest binary format
           if(GModel::current()->getMeshStatus() > 0){
             CTX.mesh.msh_file_version = 2.0;
diff --git a/Common/Gmsh.cpp b/Common/Gmsh.cpp
index 9118b34aaddd38c2a726dd4ebf599b4e20ca451c..6a56ac579cd2ac0fb1f80c2c8589e662d3f7db86 100644
--- a/Common/Gmsh.cpp
+++ b/Common/Gmsh.cpp
@@ -1,4 +1,4 @@
-// $Id: Gmsh.cpp,v 1.4 2008-04-13 20:52:07 geuzaine Exp $
+// $Id: Gmsh.cpp,v 1.5 2008-04-28 10:10:51 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -19,13 +19,17 @@
 // 
 // Please report all bugs and problems to <gmsh@geuz.org>.
 
+#include <string>
 #include "Parser.h"
 #include "Options.h"
 #include "CommandLine.h"
 #include "OS.h"
-#include "PluginManager.h"
 #include "Numeric.h"
 
+#if !defined(HAVE_NO_POST)
+#include "PluginManager.h"
+#endif
+
 int GmshInitialize(int argc, char **argv)
 {
   // Initialize the symbol tree that will hold variable names in the
@@ -41,8 +45,10 @@ int GmshInitialize(int argc, char **argv)
   // Make sure we have enough resources (stack)
   CheckResources();
   
+#if !defined(HAVE_NO_POST)
   // Initialize the default plugins
   GMSH_PluginManager::instance()->registerDefaultPlugins();
+#endif
 
   // Check for buggy obsolete GSL versions
   check_gsl();
diff --git a/Common/Makefile b/Common/Makefile
index 45ebd517d3d45833725d2ac4d9ef721e482c2f19..0f6b0e5560c7e6f1e06434db3ab6eedeb99ba37c 100644
--- a/Common/Makefile
+++ b/Common/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.170 2008-04-23 23:00:39 geuzaine Exp $
+# $Id: Makefile,v 1.171 2008-04-28 10:10:51 geuzaine Exp $
 #
 # Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 #
@@ -76,15 +76,16 @@ Octree.o: Octree.cpp Octree.h OctreeInternals.h
 OctreeInternals.o: OctreeInternals.cpp Message.h OctreeInternals.h
 Options.o: Options.cpp GmshUI.h GmshDefines.h Message.h \
   ../Graphics/Draw.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Post/PView.h ../Post/PViewData.h ../DataStr/List.h \
-  ../Post/PViewOptions.h ../Post/ColorTable.h ../Post/adaptiveData.h \
-  ../Common/GmshMatrix.h ../Mesh/Generator.h Context.h Options.h \
-  ../Mesh/BackgroundMesh.h ../Plugin/PluginManager.h ../Plugin/Plugin.h \
-  ../Common/Options.h ../Common/Message.h ../Post/PViewDataList.h \
-  ../Post/PViewData.h ../Fltk/Solvers.h ../Fltk/GUI.h \
-  ../Fltk/Opengl_Window.h ../Fltk/Colorbar_Window.h ../Common/GmshUI.h \
-  ../Fltk/Popup_Button.h ../Fltk/SpherePosition_Widget.h ../Mesh/Field.h \
-  ../Geo/Geo.h ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
+  ../Mesh/Generator.h Context.h Options.h ../Post/ColorTable.h \
+  ../Mesh/BackgroundMesh.h ../Post/PView.h ../Post/PViewData.h \
+  ../DataStr/List.h ../Post/PViewOptions.h ../Post/ColorTable.h \
+  ../Post/adaptiveData.h ../Common/GmshMatrix.h ../Plugin/PluginManager.h \
+  ../Plugin/Plugin.h ../Common/Options.h ../Common/Message.h \
+  ../Post/PViewDataList.h ../Post/PViewData.h ../Fltk/Solvers.h \
+  ../Fltk/GUI.h ../Fltk/Opengl_Window.h ../Fltk/Colorbar_Window.h \
+  ../Common/GmshUI.h ../Fltk/Popup_Button.h \
+  ../Fltk/SpherePosition_Widget.h ../Mesh/Field.h ../Geo/Geo.h \
+  ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
   ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
   ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Numeric/Numeric.h \
   ../Numeric/NumericEmbedded.h ../DataStr/Tree.h ../DataStr/avl.h \
@@ -98,17 +99,17 @@ CommandLine.o: CommandLine.cpp GmshUI.h GmshDefines.h GmshVersion.h \
   ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
   ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
   ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
-  ../Geo/SBoundingBox3d.h ../Post/PView.h ../Post/PViewData.h \
-  ../DataStr/List.h ../Post/PViewOptions.h ../Post/ColorTable.h \
-  ../Parser/CreateFile.h OS.h
+  ../Geo/SBoundingBox3d.h ../Parser/CreateFile.h OS.h ../Post/PView.h \
+  ../Post/PViewData.h ../DataStr/List.h ../Post/PViewOptions.h \
+  ../Post/ColorTable.h
 Gmsh.o: Gmsh.cpp ../Parser/Parser.h ../DataStr/List.h ../DataStr/Tree.h \
   ../DataStr/avl.h Options.h ../Post/ColorTable.h CommandLine.h OS.h \
+  ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h \
   ../Plugin/PluginManager.h ../Plugin/Plugin.h ../Common/Options.h \
   ../Common/Message.h ../Post/PView.h ../Post/PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Post/PViewOptions.h \
   ../Post/ColorTable.h ../Post/PViewDataList.h ../Post/PViewData.h \
-  ../Common/GmshMatrix.h ../Numeric/Numeric.h \
-  ../Numeric/NumericEmbedded.h
+  ../Common/GmshMatrix.h
 OS.o: OS.cpp Message.h
 Visibility.o: Visibility.cpp Visibility.h GmshDefines.h ../Geo/GVertex.h \
   ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
diff --git a/Common/Options.cpp b/Common/Options.cpp
index cef0a33753b601131c867dc611bd5dc49b308257..5a17a55054e6f60d7f67ab885fcc5b8f71f22bad 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -1,4 +1,4 @@
-// $Id: Options.cpp,v 1.395 2008-04-22 07:37:08 geuzaine Exp $
+// $Id: Options.cpp,v 1.396 2008-04-28 10:10:51 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -24,16 +24,19 @@
 #include "GmshDefines.h"
 #include "Message.h"
 #include "Draw.h"
-#include "PView.h"
-#include "adaptiveData.h"
 #include "Generator.h"
 #include "Context.h"
 #include "Options.h"
 #include "BackgroundMesh.h"
-#include "PluginManager.h"
 
 extern Context_T CTX;
 
+#if !defined(HAVE_NO_POST)
+#include "PView.h"
+#include "adaptiveData.h"
+#include "PluginManager.h"
+#endif
+
 #if defined(HAVE_FLTK)
 #include "Solvers.h"
 #include "GUI.h"
@@ -153,12 +156,14 @@ void Init_Options(int num)
 void ReInit_Options(int num)
 {
   // horrible trick so that opt_view_XXX will act on the reference view
+#if !defined(HAVE_NO_POST)
   std::vector<PView*> tmp = PView::list;
   PView::list.clear(); 
   Init_Options_Safe(num);
   PView::list = tmp; 
   for(unsigned int i = 0; i < PView::list.size(); i++)
     PView::list[i]->setOptions();
+#endif
 }
 
 void Init_Options_GUI(int num)
@@ -203,6 +208,7 @@ static void Print_OptionCategory(int level, int diff, int help, const char *cat,
 
 GmshColorTable *Get_ColorTable(int num)
 {
+#if !defined(HAVE_NO_POST)
   PViewOptions *opt;
   if(PView::list.empty() || num < 0 || num > (int)PView::list.size() - 1)
     opt = &PViewOptions::reference;
@@ -212,10 +218,14 @@ GmshColorTable *Get_ColorTable(int num)
     PView::list[num]->setChanged(true);
   }
   return &opt->CT;
+#else
+  return 0;
+#endif
 }
 
 static void Print_ColorTable(int num, int diff, const char *prefix, FILE *file)
 {
+#if !defined(HAVE_NO_POST)
   PViewOptions *opt;
   if(PView::list.empty() || num < 0 || num > (int)PView::list.size() - 1)
     opt = &PViewOptions::reference;
@@ -248,6 +258,7 @@ static void Print_ColorTable(int num, int diff, const char *prefix, FILE *file)
     fprintf(file, "%s\n", tmp);
   else
     Msg(DIRECT, tmp);
+#endif
 }
 
 void Print_Options(int num, int level, int diff, int help, const char *filename)
@@ -326,6 +337,7 @@ void Print_Options(int num, int level, int diff, int help, const char *filename)
                      "PostProcessing.", file);
 
   if(level & GMSH_FULLRC) {
+#if !defined(HAVE_NO_POST)
     for(unsigned int i = 0; i < PView::list.size(); i++) {
       char tmp[256];
       sprintf(tmp, "View[%d].", i);
@@ -338,6 +350,7 @@ void Print_Options(int num, int level, int diff, int help, const char *filename)
       strcat(tmp, "ColorTable");
       Print_ColorTable(i, diff, tmp, file);
     }
+#endif
   }
   else if(level & GMSH_OPTIONSRC) {
     Print_OptionCategory(level, diff, help, "View options (strings)", file);
@@ -452,6 +465,7 @@ void Print_OptionsDoc()
   fprintf(file, "@end ftable\n");
   fclose(file);
 
+#if !defined(HAVE_NO_POST)
   file = fopen("opt_view.texi", "w");
   if(!file) {
     Msg(GERROR, "Unable to open file 'opt_view.texi'");
@@ -468,7 +482,6 @@ void Print_OptionsDoc()
   fprintf(file, "@end ftable\n");
   fclose(file);
 
-
   file = fopen("opt_plugin.texi", "w");
   if(!file) {
     Msg(GERROR, "Unable to open file 'opt_plugin.texi'");
@@ -513,6 +526,7 @@ void Print_OptionsDoc()
   }
   fprintf(file, "@end ftable\n");
   fclose(file);
+#endif
 }
 
 // General routines for string options
@@ -1927,6 +1941,7 @@ int _gui_action_valid(int action, int num)
 
 const char *opt_view_name(OPT_ARGS_STR)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(""); 
   if(!data) return "";
   if(action & GMSH_SET) {
@@ -1944,10 +1959,14 @@ const char *opt_view_name(OPT_ARGS_STR)
   }
 #endif
   return data->getName().c_str();
+#else
+  return "";
+#endif
 }
 
 const char *opt_view_format(OPT_ARGS_STR)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW("");
   if(action & GMSH_SET) {
     strcpy(opt->Format, val);
@@ -1957,17 +1976,25 @@ const char *opt_view_format(OPT_ARGS_STR)
     WID->view_input[1]->value(opt->Format);
 #endif
   return opt->Format;
+#else
+  return "";
+#endif
 }
 
 const char *opt_view_filename(OPT_ARGS_STR)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW("");
   if(!data) return "";
   return data->getFileName().c_str();
+#else
+  return "";
+#endif
 }
 
 const char *opt_view_axes_label0(OPT_ARGS_STR)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW("");
   if(action & GMSH_SET) {
     strcpy(opt->AxesLabel[0], val);
@@ -1977,10 +2004,14 @@ const char *opt_view_axes_label0(OPT_ARGS_STR)
     WID->view_input[10]->value(opt->AxesLabel[0]);
 #endif
   return opt->AxesLabel[0];
+#else
+  return "";
+#endif
 }
 
 const char *opt_view_axes_label1(OPT_ARGS_STR)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW("");
   if(action & GMSH_SET) {
     strcpy(opt->AxesLabel[1], val);
@@ -1990,10 +2021,14 @@ const char *opt_view_axes_label1(OPT_ARGS_STR)
     WID->view_input[11]->value(opt->AxesLabel[1]);
 #endif
   return opt->AxesLabel[1];
+#else
+  return "";
+#endif
 }
 
 const char *opt_view_axes_label2(OPT_ARGS_STR)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW("");
   if(action & GMSH_SET) {
     strcpy(opt->AxesLabel[2], val);
@@ -2003,10 +2038,14 @@ const char *opt_view_axes_label2(OPT_ARGS_STR)
     WID->view_input[12]->value(opt->AxesLabel[2]);
 #endif
   return opt->AxesLabel[2];
+#else
+  return "";
+#endif
 }
 
 const char *opt_view_axes_format0(OPT_ARGS_STR)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW("");
   if(action & GMSH_SET) {
     strcpy(opt->AxesFormat[0], val);
@@ -2016,10 +2055,14 @@ const char *opt_view_axes_format0(OPT_ARGS_STR)
     WID->view_input[7]->value(opt->AxesFormat[0]);
 #endif
   return opt->AxesFormat[0];
+#else
+  return "";
+#endif
 }
 
 const char *opt_view_axes_format1(OPT_ARGS_STR)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW("");
   if(action & GMSH_SET) {
     strcpy(opt->AxesFormat[1], val);
@@ -2029,10 +2072,14 @@ const char *opt_view_axes_format1(OPT_ARGS_STR)
     WID->view_input[8]->value(opt->AxesFormat[1]);
 #endif
   return opt->AxesFormat[1];
+#else
+  return "";
+#endif
 }
 
 const char *opt_view_axes_format2(OPT_ARGS_STR)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW("");
   if(action & GMSH_SET) {
     strcpy(opt->AxesFormat[2], val);
@@ -2042,10 +2089,14 @@ const char *opt_view_axes_format2(OPT_ARGS_STR)
     WID->view_input[9]->value(opt->AxesFormat[2]);
 #endif
   return opt->AxesFormat[2];
+#else
+  return "";
+#endif
 }
 
 const char *opt_view_gen_raise0(OPT_ARGS_STR)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW("");
   if(action & GMSH_SET) {
     strcpy(opt->GenRaiseX, val);
@@ -2056,10 +2107,14 @@ const char *opt_view_gen_raise0(OPT_ARGS_STR)
     WID->view_input[4]->value(opt->GenRaiseX);
 #endif
   return opt->GenRaiseX;
+#else
+  return "";
+#endif
 }
 
 const char *opt_view_gen_raise1(OPT_ARGS_STR)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW("");
   if(action & GMSH_SET) {
     strcpy(opt->GenRaiseY, val);
@@ -2070,10 +2125,14 @@ const char *opt_view_gen_raise1(OPT_ARGS_STR)
     WID->view_input[5]->value(opt->GenRaiseY);
 #endif
   return opt->GenRaiseY;
+#else
+  return "";
+#endif
 }
 
 const char *opt_view_gen_raise2(OPT_ARGS_STR)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW("");
   if(action & GMSH_SET) {
     strcpy(opt->GenRaiseZ, val);
@@ -2084,6 +2143,9 @@ const char *opt_view_gen_raise2(OPT_ARGS_STR)
     WID->view_input[6]->value(opt->GenRaiseZ);
 #endif
   return opt->GenRaiseZ;
+#else
+  return "";
+#endif
 }
 
 int _h2d(char c)
@@ -2119,6 +2181,7 @@ void _string2stipple(char str[32], int &repeat, int &pattern)
 
 const char *opt_view_stipple0(OPT_ARGS_STR)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW("");
   if(action & GMSH_SET) {
     strncpy(opt->StippleString[0], val, 31);
@@ -2126,10 +2189,14 @@ const char *opt_view_stipple0(OPT_ARGS_STR)
     _string2stipple(opt->StippleString[0], opt->Stipple[0][0], opt->Stipple[0][1]);
   }
   return opt->StippleString[0];
+#else
+  return "";
+#endif
 }
 
 const char *opt_view_stipple1(OPT_ARGS_STR)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW("");
   if(action & GMSH_SET) {
     strncpy(opt->StippleString[1], val, 31);
@@ -2137,10 +2204,14 @@ const char *opt_view_stipple1(OPT_ARGS_STR)
     _string2stipple(opt->StippleString[1], opt->Stipple[1][0], opt->Stipple[1][1]);
   }
   return opt->StippleString[1];
+#else
+  return "";
+#endif
 }
 
 const char *opt_view_stipple2(OPT_ARGS_STR)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW("");
   if(action & GMSH_SET) {
     strncpy(opt->StippleString[2], val, 31);
@@ -2148,10 +2219,14 @@ const char *opt_view_stipple2(OPT_ARGS_STR)
     _string2stipple(opt->StippleString[2], opt->Stipple[2][0], opt->Stipple[2][1]);
   }
   return opt->StippleString[2];
+#else
+  return "";
+#endif
 }
 
 const char *opt_view_stipple3(OPT_ARGS_STR)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW("");
   if(action & GMSH_SET) {
     strncpy(opt->StippleString[3], val, 31);
@@ -2159,10 +2234,14 @@ const char *opt_view_stipple3(OPT_ARGS_STR)
     _string2stipple(opt->StippleString[3], opt->Stipple[3][0], opt->Stipple[3][1]);
   }
   return opt->StippleString[3];
+#else
+  return "";
+#endif
 }
 
 const char *opt_view_stipple4(OPT_ARGS_STR)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW("");
   if(action & GMSH_SET) {
     strncpy(opt->StippleString[4], val, 31);
@@ -2170,10 +2249,14 @@ const char *opt_view_stipple4(OPT_ARGS_STR)
     _string2stipple(opt->StippleString[4], opt->Stipple[4][0], opt->Stipple[4][1]);
   }
   return opt->StippleString[4];
+#else
+  return "";
+#endif
 }
 
 const char *opt_view_stipple5(OPT_ARGS_STR)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW("");
   if(action & GMSH_SET) {
     strncpy(opt->StippleString[5], val, 31);
@@ -2181,10 +2264,14 @@ const char *opt_view_stipple5(OPT_ARGS_STR)
     _string2stipple(opt->StippleString[5], opt->Stipple[5][0], opt->Stipple[5][1]);
   }
   return opt->StippleString[5];
+#else
+  return "";
+#endif
 }
 
 const char *opt_view_stipple6(OPT_ARGS_STR)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW("");
   if(action & GMSH_SET) {
     strncpy(opt->StippleString[6], val, 31);
@@ -2192,10 +2279,14 @@ const char *opt_view_stipple6(OPT_ARGS_STR)
     _string2stipple(opt->StippleString[6], opt->Stipple[6][0], opt->Stipple[6][1]);
   }
   return opt->StippleString[6];
+#else
+  return "";
+#endif
 }
 
 const char *opt_view_stipple7(OPT_ARGS_STR)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW("");
   if(action & GMSH_SET) {
     strncpy(opt->StippleString[7], val, 31);
@@ -2203,10 +2294,14 @@ const char *opt_view_stipple7(OPT_ARGS_STR)
     _string2stipple(opt->StippleString[7], opt->Stipple[7][0], opt->Stipple[7][1]);
   }
   return opt->StippleString[7];
+#else
+  return "";
+#endif
 }
 
 const char *opt_view_stipple8(OPT_ARGS_STR)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW("");
   if(action & GMSH_SET) {
     strncpy(opt->StippleString[8], val, 31);
@@ -2214,10 +2309,14 @@ const char *opt_view_stipple8(OPT_ARGS_STR)
     _string2stipple(opt->StippleString[8], opt->Stipple[8][0], opt->Stipple[8][1]);
   }
   return opt->StippleString[8];
+#else
+  return "";
+#endif
 }
 
 const char *opt_view_stipple9(OPT_ARGS_STR)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW("");
   if(action & GMSH_SET) {
     strncpy(opt->StippleString[9], val, 31);
@@ -2225,6 +2324,9 @@ const char *opt_view_stipple9(OPT_ARGS_STR)
     _string2stipple(opt->StippleString[9], opt->Stipple[9][0], opt->Stipple[9][1]);
   }
   return opt->StippleString[9];
+#else
+  return "";
+#endif
 }
 
 // Numeric option routines
@@ -3240,8 +3342,10 @@ double opt_general_color_scheme(OPT_ARGS_NUM)
     Set_DefaultColorOptions(0, MeshOptions_Color);
     Set_DefaultColorOptions(0, SolverOptions_Color);
     Set_DefaultColorOptions(0, PostProcessingOptions_Color);
+#if !defined(HAVE_NO_POST)
     for(unsigned int i = 0; i < PView::list.size(); i++)
       Set_DefaultColorOptions(i, ViewOptions_Color);
+#endif
     Set_DefaultColorOptions(0, PrintOptions_Color);
 
     Set_ColorOptions_GUI(0, GeneralOptions_Color);
@@ -3249,15 +3353,19 @@ double opt_general_color_scheme(OPT_ARGS_NUM)
     Set_ColorOptions_GUI(0, MeshOptions_Color);
     Set_ColorOptions_GUI(0, SolverOptions_Color);
     Set_ColorOptions_GUI(0, PostProcessingOptions_Color);
+#if !defined(HAVE_NO_POST)
     for(unsigned int i = 0; i < PView::list.size(); i++)
       Set_ColorOptions_GUI(i, ViewOptions_Color);
+#endif
     Set_ColorOptions_GUI(0, PrintOptions_Color);
 
+#if !defined(HAVE_NO_POST)
     // horrible trick so that opt_view_XXX will act on the reference view
     std::vector<PView*> tmp = PView::list;
     PView::list.clear();
     Set_DefaultColorOptions(0, ViewOptions_Color);
     PView::list = tmp;
+#endif
   }
 #if defined(HAVE_FLTK)
   if(WID && (action & GMSH_GUI))
@@ -5475,7 +5583,11 @@ double opt_post_plugins(OPT_ARGS_NUM)
 
 double opt_post_nb_views(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   return PView::list.size();
+#else
+  return 0;
+#endif
 }
 
 double opt_post_file_format(OPT_ARGS_NUM)
@@ -5487,6 +5599,7 @@ double opt_post_file_format(OPT_ARGS_NUM)
 
 double opt_view_nb_timestep(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(!data) return 1;
 #if defined(HAVE_FLTK)
@@ -5496,10 +5609,14 @@ double opt_view_nb_timestep(OPT_ARGS_NUM)
     WID->check_anim_buttons();
 #endif
   return data->getNumTimeSteps();
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_timestep(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(!data) return 0;
   if(action & GMSH_SET) {
@@ -5520,26 +5637,38 @@ double opt_view_timestep(OPT_ARGS_NUM)
     WID->view_value[50]->value(opt->TimeStep);
 #endif
   return opt->TimeStep;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_min(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(!data) return 0.;
   // use adaptive data if available
   return view->getData(true)->getMin();
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_max(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(!data) return 0.;
   // use adaptive data if available
   return view->getData(true)->getMax();
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_custom_min(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->CustomMin = val;
@@ -5551,10 +5680,14 @@ double opt_view_custom_min(OPT_ARGS_NUM)
   }
 #endif
   return opt->CustomMin;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_custom_max(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->CustomMax = val;
@@ -5565,52 +5698,80 @@ double opt_view_custom_max(OPT_ARGS_NUM)
     WID->view_value[32]->value(opt->CustomMax);
 #endif
   return opt->CustomMax;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_xmin(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(!data) return 0.;
   return data->getBoundingBox().min().x();
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_xmax(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(!data) return 0.;
   return data->getBoundingBox().max().x();
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_ymin(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(!data) return 0.;
   return data->getBoundingBox().min().y();
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_ymax(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(!data) return 0.;
   return data->getBoundingBox().max().y();
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_zmin(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(!data) return 0.;
   return data->getBoundingBox().min().z();
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_zmax(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(!data) return 0.;
   return data->getBoundingBox().max().z();
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_offset0(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Offset[0] = val;
@@ -5621,10 +5782,14 @@ double opt_view_offset0(OPT_ARGS_NUM)
     WID->view_value[40]->value(opt->Offset[0]);
 #endif
   return opt->Offset[0];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_offset1(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Offset[1] = val;
@@ -5635,10 +5800,14 @@ double opt_view_offset1(OPT_ARGS_NUM)
     WID->view_value[41]->value(opt->Offset[1]);
 #endif
   return opt->Offset[1];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_offset2(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Offset[2] = val;
@@ -5649,10 +5818,14 @@ double opt_view_offset2(OPT_ARGS_NUM)
     WID->view_value[42]->value(opt->Offset[2]);
 #endif
   return opt->Offset[2];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_raise0(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Raise[0] = val;
@@ -5663,10 +5836,14 @@ double opt_view_raise0(OPT_ARGS_NUM)
     WID->view_value[43]->value(opt->Raise[0]);
 #endif
   return opt->Raise[0];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_raise1(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Raise[1] = val;
@@ -5677,10 +5854,14 @@ double opt_view_raise1(OPT_ARGS_NUM)
     WID->view_value[44]->value(opt->Raise[1]);
 #endif
   return opt->Raise[1];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_raise2(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Raise[2] = val;
@@ -5691,10 +5872,14 @@ double opt_view_raise2(OPT_ARGS_NUM)
     WID->view_value[45]->value(opt->Raise[2]);
 #endif
   return opt->Raise[2];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_normal_raise(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->NormalRaise = val;
@@ -5705,10 +5890,14 @@ double opt_view_normal_raise(OPT_ARGS_NUM)
     WID->view_value[46]->value(opt->NormalRaise);
 #endif
   return opt->NormalRaise;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_transform00(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Transform[0][0] = val;
@@ -5719,10 +5908,14 @@ double opt_view_transform00(OPT_ARGS_NUM)
     WID->view_value[51]->value(opt->Transform[0][0]);
 #endif
   return opt->Transform[0][0];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_transform01(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Transform[0][1] = val;
@@ -5733,10 +5926,14 @@ double opt_view_transform01(OPT_ARGS_NUM)
     WID->view_value[52]->value(opt->Transform[0][1]);
 #endif
   return opt->Transform[0][1];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_transform02(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Transform[0][2] = val;
@@ -5747,10 +5944,14 @@ double opt_view_transform02(OPT_ARGS_NUM)
     WID->view_value[53]->value(opt->Transform[0][2]);
 #endif
   return opt->Transform[0][2];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_transform10(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Transform[1][0] = val;
@@ -5761,10 +5962,14 @@ double opt_view_transform10(OPT_ARGS_NUM)
     WID->view_value[54]->value(opt->Transform[1][0]);
 #endif
   return opt->Transform[1][0];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_transform11(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Transform[1][1] = val;
@@ -5775,10 +5980,14 @@ double opt_view_transform11(OPT_ARGS_NUM)
     WID->view_value[55]->value(opt->Transform[1][1]);
 #endif
   return opt->Transform[1][1];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_transform12(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Transform[1][2] = val;
@@ -5789,10 +5998,14 @@ double opt_view_transform12(OPT_ARGS_NUM)
     WID->view_value[56]->value(opt->Transform[1][2]);
 #endif
   return opt->Transform[1][2];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_transform20(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Transform[2][0] = val;
@@ -5803,10 +6016,14 @@ double opt_view_transform20(OPT_ARGS_NUM)
     WID->view_value[57]->value(opt->Transform[2][0]);
 #endif
   return opt->Transform[2][0];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_transform21(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Transform[2][1] = val;
@@ -5817,10 +6034,14 @@ double opt_view_transform21(OPT_ARGS_NUM)
     WID->view_value[58]->value(opt->Transform[2][1]);
 #endif
   return opt->Transform[2][1];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_transform22(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Transform[2][2] = val;
@@ -5831,10 +6052,14 @@ double opt_view_transform22(OPT_ARGS_NUM)
     WID->view_value[59]->value(opt->Transform[2][2]);
 #endif
   return opt->Transform[2][2];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_arrow_size(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->ArrowSize = val;
@@ -5844,10 +6069,14 @@ double opt_view_arrow_size(OPT_ARGS_NUM)
     WID->view_value[60]->value(opt->ArrowSize);
 #endif
   return opt->ArrowSize;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_arrow_size_proportional(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->ArrowSizeProportional = (int)val;
@@ -5857,10 +6086,14 @@ double opt_view_arrow_size_proportional(OPT_ARGS_NUM)
     WID->view_butt[0]->value(opt->ArrowSizeProportional);
 #endif
   return opt->ArrowSizeProportional;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_arrow_head_radius(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET){
     if(val < 0.) val = 0.;
@@ -5868,10 +6101,14 @@ double opt_view_arrow_head_radius(OPT_ARGS_NUM)
     opt->ArrowRelHeadRadius = val;
   }
   return opt->ArrowRelHeadRadius;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_arrow_stem_length(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET){
     if(val < 0.) val = 0.;
@@ -5879,10 +6116,14 @@ double opt_view_arrow_stem_length(OPT_ARGS_NUM)
     opt->ArrowRelStemLength = val;
   }
   return opt->ArrowRelStemLength;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_arrow_stem_radius(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET){
     if(val < 0.) val = 0.;
@@ -5890,10 +6131,14 @@ double opt_view_arrow_stem_radius(OPT_ARGS_NUM)
     opt->ArrowRelStemRadius = val;
   }
   return opt->ArrowRelStemRadius;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_normals(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Normals = val;
@@ -5903,10 +6148,14 @@ double opt_view_normals(OPT_ARGS_NUM)
     WID->view_value[0]->value(opt->Normals);
 #endif
   return opt->Normals;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_tangents(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Tangents = val;
@@ -5916,10 +6165,14 @@ double opt_view_tangents(OPT_ARGS_NUM)
     WID->view_value[1]->value(opt->Tangents);
 #endif
   return opt->Tangents;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_displacement_factor(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->DisplacementFactor = val;
@@ -5930,10 +6183,14 @@ double opt_view_displacement_factor(OPT_ARGS_NUM)
     WID->view_value[63]->value(opt->DisplacementFactor);
 #endif
   return opt->DisplacementFactor;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_fake_transparency(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->FakeTransparency = (int)val;
@@ -5944,10 +6201,14 @@ double opt_view_fake_transparency(OPT_ARGS_NUM)
     WID->view_butt[24]->value(opt->FakeTransparency);
 #endif
   return opt->FakeTransparency;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_explode(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Explode = val;
@@ -5958,10 +6219,14 @@ double opt_view_explode(OPT_ARGS_NUM)
     WID->view_value[12]->value(opt->Explode);
 #endif
   return opt->Explode;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_visible(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Visible = (int)val;
@@ -5971,10 +6236,14 @@ double opt_view_visible(OPT_ARGS_NUM)
     WID->m_toggle_butt[num]->value(opt->Visible);
 #endif
   return opt->Visible;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_intervals_type(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->IntervalsType = (int)val;
@@ -5988,10 +6257,14 @@ double opt_view_intervals_type(OPT_ARGS_NUM)
   }
 #endif
   return opt->IntervalsType;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_saturate_values(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->SaturateValues = (int)val;
@@ -6003,10 +6276,14 @@ double opt_view_saturate_values(OPT_ARGS_NUM)
   }
 #endif
   return opt->SaturateValues;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_max_recursion_level(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->MaxRecursionLevel = (int)val;
@@ -6022,10 +6299,14 @@ double opt_view_max_recursion_level(OPT_ARGS_NUM)
   }
 #endif
   return opt->MaxRecursionLevel;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_target_error(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->TargetError = val;
@@ -6041,10 +6322,14 @@ double opt_view_target_error(OPT_ARGS_NUM)
   }
 #endif
   return opt->TargetError;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_type(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Type = (int)val;
@@ -6058,10 +6343,14 @@ double opt_view_type(OPT_ARGS_NUM)
   }
 #endif
   return opt->Type;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_auto_position(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->AutoPosition = (int)val;
@@ -6073,10 +6362,14 @@ double opt_view_auto_position(OPT_ARGS_NUM)
   }
 #endif
   return opt->AutoPosition;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_position0(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Position[0] = (int)val;
@@ -6086,10 +6379,14 @@ double opt_view_position0(OPT_ARGS_NUM)
     WID->view_value[20]->value(opt->Position[0]);
 #endif
   return opt->Position[0];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_position1(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Position[1] = (int)val;
@@ -6099,10 +6396,14 @@ double opt_view_position1(OPT_ARGS_NUM)
     WID->view_value[21]->value(opt->Position[1]);
 #endif
   return opt->Position[1];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_size0(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Size[0] = (int)val;
@@ -6112,10 +6413,14 @@ double opt_view_size0(OPT_ARGS_NUM)
     WID->view_value[22]->value(opt->Size[0]);
 #endif
   return opt->Size[0];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_size1(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Size[1] = (int)val;
@@ -6125,10 +6430,14 @@ double opt_view_size1(OPT_ARGS_NUM)
     WID->view_value[23]->value(opt->Size[1]);
 #endif
   return opt->Size[1];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_axes(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Axes = (int)val;
@@ -6142,9 +6451,13 @@ double opt_view_axes(OPT_ARGS_NUM)
   }
 #endif
   return opt->Axes;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_axes_mikado(OPT_ARGS_NUM){
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->AxesMikado = (int)val;
@@ -6155,10 +6468,14 @@ double opt_view_axes_mikado(OPT_ARGS_NUM){
   }
 #endif
   return opt->AxesMikado;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_axes_auto_position(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->AxesAutoPosition = (int)val;
@@ -6170,10 +6487,14 @@ double opt_view_axes_auto_position(OPT_ARGS_NUM)
   }
 #endif
   return opt->AxesAutoPosition;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_axes_xmin(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->AxesPosition[0] = val;
@@ -6184,10 +6505,14 @@ double opt_view_axes_xmin(OPT_ARGS_NUM)
   }
 #endif
   return opt->AxesPosition[0];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_axes_xmax(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->AxesPosition[1] = val;
@@ -6198,10 +6523,14 @@ double opt_view_axes_xmax(OPT_ARGS_NUM)
   }
 #endif
   return opt->AxesPosition[1];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_axes_ymin(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->AxesPosition[2] = val;
@@ -6212,10 +6541,14 @@ double opt_view_axes_ymin(OPT_ARGS_NUM)
   }
 #endif
   return opt->AxesPosition[2];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_axes_ymax(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->AxesPosition[3] = val;
@@ -6226,10 +6559,14 @@ double opt_view_axes_ymax(OPT_ARGS_NUM)
   }
 #endif
   return opt->AxesPosition[3];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_axes_zmin(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->AxesPosition[4] = val;
@@ -6240,10 +6577,14 @@ double opt_view_axes_zmin(OPT_ARGS_NUM)
   }
 #endif
   return opt->AxesPosition[4];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_axes_zmax(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->AxesPosition[5] = val;
@@ -6254,10 +6595,14 @@ double opt_view_axes_zmax(OPT_ARGS_NUM)
   }
 #endif
   return opt->AxesPosition[5];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_axes_tics0(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->AxesTics[0] = (int)val;
@@ -6268,10 +6613,14 @@ double opt_view_axes_tics0(OPT_ARGS_NUM)
   }
 #endif
   return opt->AxesTics[0];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_axes_tics1(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->AxesTics[1] = (int)val;
@@ -6282,10 +6631,14 @@ double opt_view_axes_tics1(OPT_ARGS_NUM)
   }
 #endif
   return opt->AxesTics[1];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_axes_tics2(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->AxesTics[2] = (int)val;
@@ -6296,10 +6649,14 @@ double opt_view_axes_tics2(OPT_ARGS_NUM)
   }
 #endif
   return opt->AxesTics[2];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_nb_iso(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->NbIso = (int)val;
@@ -6310,10 +6667,14 @@ double opt_view_nb_iso(OPT_ARGS_NUM)
     WID->view_value[30]->value(opt->NbIso);
 #endif
   return opt->NbIso;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_boundary(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Boundary = (int)val;
@@ -6327,10 +6688,14 @@ double opt_view_boundary(OPT_ARGS_NUM)
   }
 #endif
   return opt->Boundary;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_light(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->Light = (int)val;
@@ -6343,10 +6708,14 @@ double opt_view_light(OPT_ARGS_NUM)
   }
 #endif
   return opt->Light;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_light_two_side(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->LightTwoSide = (int)val;
@@ -6356,10 +6725,14 @@ double opt_view_light_two_side(OPT_ARGS_NUM)
     WID->view_butt[9]->value(opt->LightTwoSide);
 #endif
   return opt->LightTwoSide;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_light_lines(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->LightLines = (int)val;
@@ -6369,10 +6742,14 @@ double opt_view_light_lines(OPT_ARGS_NUM)
     WID->view_butt[8]->value(opt->LightLines);
 #endif
   return opt->LightLines;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_smooth_normals(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->SmoothNormals = (int)val;
@@ -6383,10 +6760,14 @@ double opt_view_smooth_normals(OPT_ARGS_NUM)
     WID->view_butt[12]->value(opt->SmoothNormals);
 #endif
   return opt->SmoothNormals;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_angle_smooth_normals(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->AngleSmoothNormals = val;
@@ -6397,10 +6778,14 @@ double opt_view_angle_smooth_normals(OPT_ARGS_NUM)
     WID->view_value[10]->value(opt->AngleSmoothNormals);
 #endif
   return opt->AngleSmoothNormals;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_show_element(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->ShowElement = (int)val;
@@ -6411,10 +6796,14 @@ double opt_view_show_element(OPT_ARGS_NUM)
     WID->view_butt[10]->value(opt->ShowElement);
 #endif
   return opt->ShowElement;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_show_time(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->ShowTime = (int)val;
@@ -6426,10 +6815,14 @@ double opt_view_show_time(OPT_ARGS_NUM)
     WID->view_choice[12]->value(opt->ShowTime);
 #endif
   return opt->ShowTime;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_show_scale(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->ShowScale = (int)val;
@@ -6439,10 +6832,14 @@ double opt_view_show_scale(OPT_ARGS_NUM)
     WID->view_butt[4]->value(opt->ShowScale);
 #endif
   return opt->ShowScale;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_draw_strings(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->DrawStrings = (int)val;
@@ -6452,10 +6849,14 @@ double opt_view_draw_strings(OPT_ARGS_NUM)
     WID->view_butt[5]->value(opt->DrawStrings);
 #endif
   return opt->DrawStrings;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_draw_points(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->DrawPoints = (int)val;
@@ -6470,10 +6871,14 @@ double opt_view_draw_points(OPT_ARGS_NUM)
   }
 #endif
   return opt->DrawPoints;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_draw_lines(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->DrawLines = (int)val;
@@ -6488,10 +6893,14 @@ double opt_view_draw_lines(OPT_ARGS_NUM)
   }
 #endif
   return opt->DrawLines;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_draw_triangles(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->DrawTriangles = (int)val;
@@ -6506,10 +6915,14 @@ double opt_view_draw_triangles(OPT_ARGS_NUM)
   }
 #endif
   return opt->DrawTriangles;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_draw_quadrangles(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->DrawQuadrangles = (int)val;
@@ -6524,10 +6937,14 @@ double opt_view_draw_quadrangles(OPT_ARGS_NUM)
   }
 #endif
   return opt->DrawQuadrangles;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_draw_tetrahedra(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->DrawTetrahedra = (int)val;
@@ -6542,10 +6959,14 @@ double opt_view_draw_tetrahedra(OPT_ARGS_NUM)
   }
 #endif
   return opt->DrawTetrahedra;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_draw_hexahedra(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->DrawHexahedra = (int)val;
@@ -6560,10 +6981,14 @@ double opt_view_draw_hexahedra(OPT_ARGS_NUM)
   }
 #endif
   return opt->DrawHexahedra;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_draw_prisms(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->DrawPrisms = (int)val;
@@ -6578,10 +7003,14 @@ double opt_view_draw_prisms(OPT_ARGS_NUM)
   }
 #endif
   return opt->DrawPrisms;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_draw_pyramids(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->DrawPyramids = (int)val;
@@ -6596,10 +7025,14 @@ double opt_view_draw_pyramids(OPT_ARGS_NUM)
   }
 #endif
   return opt->DrawPyramids;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_draw_scalars(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->DrawScalars = (int)val;
@@ -6614,10 +7047,14 @@ double opt_view_draw_scalars(OPT_ARGS_NUM)
   }
 #endif
   return opt->DrawScalars;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_draw_vectors(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->DrawVectors = (int)val;
@@ -6632,10 +7069,14 @@ double opt_view_draw_vectors(OPT_ARGS_NUM)
   }
 #endif
   return opt->DrawVectors;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_draw_tensors(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->DrawTensors = (int)val;
@@ -6650,10 +7091,14 @@ double opt_view_draw_tensors(OPT_ARGS_NUM)
   }
 #endif
   return opt->DrawTensors;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_draw_skin_only(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->DrawSkinOnly = (int)val;
@@ -6664,10 +7109,14 @@ double opt_view_draw_skin_only(OPT_ARGS_NUM)
     WID->view_butt[2]->value(opt->DrawSkinOnly);
 #endif
   return opt->DrawSkinOnly;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_scale_type(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->ScaleType = (int)val;
@@ -6681,10 +7130,14 @@ double opt_view_scale_type(OPT_ARGS_NUM)
   }
 #endif
   return opt->ScaleType;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_range_type(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->RangeType = (int)val;
@@ -6699,10 +7152,14 @@ double opt_view_range_type(OPT_ARGS_NUM)
   }
 #endif
   return opt->RangeType;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_tensor_type(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->TensorType = (int)val;
@@ -6716,10 +7173,14 @@ double opt_view_tensor_type(OPT_ARGS_NUM)
    }
  #endif
   return opt->TensorType;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_vector_type(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->VectorType = (int)val;
@@ -6733,10 +7194,14 @@ double opt_view_vector_type(OPT_ARGS_NUM)
   }
 #endif
   return opt->VectorType;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_glyph_location(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->GlyphLocation = (int)val;
@@ -6750,10 +7215,14 @@ double opt_view_glyph_location(OPT_ARGS_NUM)
   }
 #endif
   return opt->GlyphLocation;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_center_glyphs(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->CenterGlyphs = val ? 1 : 0;
@@ -6765,10 +7234,14 @@ double opt_view_center_glyphs(OPT_ARGS_NUM)
   }
 #endif
   return opt->CenterGlyphs;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_point_size(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->PointSize = val;
@@ -6778,10 +7251,14 @@ double opt_view_point_size(OPT_ARGS_NUM)
     WID->view_value[61]->value(opt->PointSize);
 #endif
   return opt->PointSize;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_line_width(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->LineWidth = val;
@@ -6791,10 +7268,14 @@ double opt_view_line_width(OPT_ARGS_NUM)
     WID->view_value[62]->value(opt->LineWidth);
 #endif
   return opt->LineWidth;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_point_type(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->PointType = (int)val;
@@ -6808,10 +7289,14 @@ double opt_view_point_type(OPT_ARGS_NUM)
   }
 #endif
   return opt->PointType;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_line_type(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->LineType = (int)val;
@@ -6825,10 +7310,14 @@ double opt_view_line_type(OPT_ARGS_NUM)
   }
 #endif
   return opt->LineType;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_colormap_alpha(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->CT.dpar[COLORTABLE_ALPHA] = val;
@@ -6841,10 +7330,14 @@ double opt_view_colormap_alpha(OPT_ARGS_NUM)
   }
 #endif
   return opt->CT.dpar[COLORTABLE_ALPHA];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_colormap_alpha_power(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->CT.dpar[COLORTABLE_ALPHAPOW] = val;
@@ -6857,10 +7350,14 @@ double opt_view_colormap_alpha_power(OPT_ARGS_NUM)
   }
 #endif
   return opt->CT.dpar[COLORTABLE_ALPHAPOW];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_colormap_beta(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->CT.dpar[COLORTABLE_BETA] = val;
@@ -6873,10 +7370,14 @@ double opt_view_colormap_beta(OPT_ARGS_NUM)
   }
 #endif
   return opt->CT.dpar[COLORTABLE_BETA];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_colormap_bias(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->CT.dpar[COLORTABLE_BIAS] = val;
@@ -6889,10 +7390,14 @@ double opt_view_colormap_bias(OPT_ARGS_NUM)
   }
 #endif
   return opt->CT.dpar[COLORTABLE_BIAS];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_colormap_curvature(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->CT.dpar[COLORTABLE_CURVATURE] = val;
@@ -6905,10 +7410,14 @@ double opt_view_colormap_curvature(OPT_ARGS_NUM)
   }
 #endif
   return opt->CT.dpar[COLORTABLE_CURVATURE];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_colormap_invert(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->CT.ipar[COLORTABLE_INVERT] = (int)val;
@@ -6921,10 +7430,14 @@ double opt_view_colormap_invert(OPT_ARGS_NUM)
   }
 #endif
   return opt->CT.ipar[COLORTABLE_INVERT];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_colormap_number(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->CT.ipar[COLORTABLE_NUMBER] = (int)val;
@@ -6937,10 +7450,14 @@ double opt_view_colormap_number(OPT_ARGS_NUM)
   }
 #endif
   return opt->CT.ipar[COLORTABLE_NUMBER];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_colormap_rotation(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->CT.ipar[COLORTABLE_ROTATION] = (int)val;
@@ -6953,10 +7470,14 @@ double opt_view_colormap_rotation(OPT_ARGS_NUM)
   }
 #endif
   return opt->CT.ipar[COLORTABLE_ROTATION];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_colormap_swap(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->CT.ipar[COLORTABLE_SWAP] = (int)val;
@@ -6969,10 +7490,14 @@ double opt_view_colormap_swap(OPT_ARGS_NUM)
   }
 #endif
   return opt->CT.ipar[COLORTABLE_SWAP];
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_external_view(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->ExternalViewIndex = (int)val;
@@ -6989,10 +7514,14 @@ double opt_view_external_view(OPT_ARGS_NUM)
   }
 #endif
   return opt->ExternalViewIndex;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_gen_raise_view(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->ViewIndexForGenRaise = (int)val;
@@ -7009,10 +7538,14 @@ double opt_view_gen_raise_view(OPT_ARGS_NUM)
   }
 #endif
   return opt->ViewIndexForGenRaise;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_gen_raise_factor(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->GenRaiseFactor = val;
@@ -7023,10 +7556,14 @@ double opt_view_gen_raise_factor(OPT_ARGS_NUM)
     WID->view_value[2]->value(opt->GenRaiseFactor);
 #endif
   return opt->GenRaiseFactor;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_use_gen_raise(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->UseGenRaise = (int)val;
@@ -7039,10 +7576,14 @@ double opt_view_use_gen_raise(OPT_ARGS_NUM)
   }
 #endif
   return opt->UseGenRaise;
+#else
+  return 0.;
+#endif
 }
 
 double opt_view_use_stipple(OPT_ARGS_NUM)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0.);
   if(action & GMSH_SET) {
     opt->UseStipple = (int)val;
@@ -7053,6 +7594,9 @@ double opt_view_use_stipple(OPT_ARGS_NUM)
   }
 #endif
   return opt->UseStipple;
+#else
+  return 0.;
+#endif
 }
 
 double opt_print_format(OPT_ARGS_NUM)
@@ -7630,6 +8174,7 @@ unsigned int opt_mesh_color_19(OPT_ARGS_COL){ return opt_mesh_color_(19, num, ac
 
 unsigned int opt_view_color_points(OPT_ARGS_COL)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0);
   if(action & GMSH_SET) {
     opt->color.point = val;
@@ -7641,10 +8186,14 @@ unsigned int opt_view_color_points(OPT_ARGS_COL)
   }
 #endif
   return opt->color.point;
+#else
+  return 0;
+#endif
 }
 
 unsigned int opt_view_color_lines(OPT_ARGS_COL)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0);
   if(action & GMSH_SET) {
     opt->color.line = val;
@@ -7656,10 +8205,14 @@ unsigned int opt_view_color_lines(OPT_ARGS_COL)
   }
 #endif
   return opt->color.line;
+#else
+  return 0;
+#endif
 }
 
 unsigned int opt_view_color_triangles(OPT_ARGS_COL)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0);
   if(action & GMSH_SET) {
     opt->color.triangle = val;
@@ -7671,10 +8224,14 @@ unsigned int opt_view_color_triangles(OPT_ARGS_COL)
   }
 #endif
   return opt->color.triangle;
+#else
+  return 0;
+#endif
 }
 
 unsigned int opt_view_color_quadrangles(OPT_ARGS_COL)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0);
   if(action & GMSH_SET) {
     opt->color.quadrangle = val;
@@ -7686,10 +8243,14 @@ unsigned int opt_view_color_quadrangles(OPT_ARGS_COL)
   }
 #endif
   return opt->color.quadrangle;
+#else
+  return 0;
+#endif
 }
 
 unsigned int opt_view_color_tetrahedra(OPT_ARGS_COL)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0);
   if(action & GMSH_SET) {
     opt->color.tetrahedron = val;
@@ -7701,10 +8262,14 @@ unsigned int opt_view_color_tetrahedra(OPT_ARGS_COL)
   }
 #endif
   return opt->color.tetrahedron;
+#else
+  return 0;
+#endif
 }
 
 unsigned int opt_view_color_hexahedra(OPT_ARGS_COL)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0);
   if(action & GMSH_SET) {
     opt->color.hexahedron = val;
@@ -7716,10 +8281,14 @@ unsigned int opt_view_color_hexahedra(OPT_ARGS_COL)
   }
 #endif
   return opt->color.hexahedron;
+#else
+  return 0;
+#endif
 }
 
 unsigned int opt_view_color_prisms(OPT_ARGS_COL)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0);
   if(action & GMSH_SET) {
     opt->color.prism = val;
@@ -7731,10 +8300,14 @@ unsigned int opt_view_color_prisms(OPT_ARGS_COL)
   }
 #endif
   return opt->color.prism;
+#else
+  return 0;
+#endif
 }
 
 unsigned int opt_view_color_pyramids(OPT_ARGS_COL)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0);
   if(action & GMSH_SET) {
     opt->color.pyramid = val;
@@ -7746,10 +8319,14 @@ unsigned int opt_view_color_pyramids(OPT_ARGS_COL)
   }
 #endif
   return opt->color.pyramid;
+#else
+  return 0;
+#endif
 }
 
 unsigned int opt_view_color_tangents(OPT_ARGS_COL)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0);
   if(action & GMSH_SET) {
     opt->color.tangents = val;
@@ -7761,10 +8338,14 @@ unsigned int opt_view_color_tangents(OPT_ARGS_COL)
   }
 #endif
   return opt->color.tangents;
+#else
+  return 0;
+#endif
 }
 
 unsigned int opt_view_color_normals(OPT_ARGS_COL)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0);
   if(action & GMSH_SET) {
     opt->color.normals = val;
@@ -7776,10 +8357,14 @@ unsigned int opt_view_color_normals(OPT_ARGS_COL)
   }
 #endif
   return opt->color.normals;
+#else
+  return 0;
+#endif
 }
 
 unsigned int opt_view_color_text2d(OPT_ARGS_COL)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0);
   if(action & GMSH_SET) {
     opt->color.text2d = val;
@@ -7790,10 +8375,14 @@ unsigned int opt_view_color_text2d(OPT_ARGS_COL)
   }
 #endif
   return opt->color.text2d;
+#else
+  return 0;
+#endif
 }
 
 unsigned int opt_view_color_text3d(OPT_ARGS_COL)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0);
   if(action & GMSH_SET) {
     opt->color.text3d = val;
@@ -7804,10 +8393,14 @@ unsigned int opt_view_color_text3d(OPT_ARGS_COL)
   }
 #endif
   return opt->color.text3d;
+#else
+  return 0;
+#endif
 }
 
 unsigned int opt_view_color_axes(OPT_ARGS_COL)
 {
+#if !defined(HAVE_NO_POST)
   GET_VIEW(0);
   if(action & GMSH_SET) {
     opt->color.axes = val;
@@ -7818,4 +8411,7 @@ unsigned int opt_view_color_axes(OPT_ARGS_COL)
   }
 #endif
   return opt->color.axes;
+#else
+  return 0;
+#endif
 }
diff --git a/Geo/GEdge.cpp b/Geo/GEdge.cpp
index 209a9a1d09276b88c1db581c53d434d4ec42365c..c697ad7a61039193c28e7ee7321f870d449aed31 100644
--- a/Geo/GEdge.cpp
+++ b/Geo/GEdge.cpp
@@ -1,4 +1,4 @@
-// $Id: GEdge.cpp,v 1.47 2008-04-23 09:02:53 geuzaine Exp $
+// $Id: GEdge.cpp,v 1.48 2008-04-28 10:10:52 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -136,6 +136,12 @@ std::string GEdge::getAdditionalInfoString()
   return std::string(tmp);
 }
 
+GPoint GEdge::closestPoint(const SPoint3 & queryPoint) const
+{
+  Msg(GERROR, "Closet point not implemented for this type of edge");
+  return GPoint(0, 0, 0);
+}
+
 int GEdge::containsParam(double pt) const
 {
   Range<double> rg = parBounds(0);
diff --git a/Geo/GEdge.h b/Geo/GEdge.h
index d53fa4256420e9185af152b97568ac0fec5ed267..c2a4db0bd1f68a7aad87e7d2763df5b50b7b4fee 100644
--- a/Geo/GEdge.h
+++ b/Geo/GEdge.h
@@ -66,7 +66,7 @@ class GEdge : public GEntity {
   virtual GPoint point(double p) const = 0;
 
   // Get the closest point on the edge to the given point.
-  virtual GPoint closestPoint(const SPoint3 & queryPoint) const { throw; }
+  virtual GPoint closestPoint(const SPoint3 & queryPoint) const;
 
   // True if the edge contains the given parameter.
   virtual int containsParam(double pt) const;
diff --git a/Geo/GFace.cpp b/Geo/GFace.cpp
index b1fe9d4e7e3f4374b17ca935ec585c600ef91354..43dbb95ad1c812b0ecc8235962626c30148e3aca 100644
--- a/Geo/GFace.cpp
+++ b/Geo/GFace.cpp
@@ -1,4 +1,4 @@
-// $Id: GFace.cpp,v 1.60 2008-03-20 11:44:04 geuzaine Exp $
+// $Id: GFace.cpp,v 1.61 2008-04-28 10:10:52 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -112,6 +112,14 @@ SBoundingBox3d GFace::bounds() const
   return res;
 }
 
+surface_params GFace::getSurfaceParams() const
+{
+  surface_params p;
+  p.radius = p.radius2 = p.height = p.cx = p.cy = p.cz = 0.;
+  Msg(GERROR, "Empty surface parameters for this type of surface");
+  return p;
+}
+
 std::list<GVertex*> GFace::vertices() const
 {
   std::list<GEdge*>::const_iterator it = l_edges.begin();
@@ -430,7 +438,7 @@ void GFace::getMeanPlaneData(double plan[3][3]) const
       plan[i][j] = meanPlane.plan[i][j];
 }
 
-double GFace::curvature (const SPoint2 &param) const
+double GFace::curvature(const SPoint2 &param) const
 {
   if (geomType() == Plane) return 0;
 
@@ -466,6 +474,12 @@ double GFace::curvature (const SPoint2 &param) const
   return c;
 }
 
+double GFace::getMetricEigenvalue(const SPoint2 &)
+{
+  Msg(GERROR, "Metric eigenvalue is not implemented for this type of surface");
+  return 0.;
+}
+
 void GFace::XYZtoUV(const double X, const double Y, const double Z,
                     double &U, double &V, const double relax,
                     const bool onSurface) const
@@ -561,6 +575,12 @@ SPoint2 GFace::parFromPoint(const SPoint3 &p) const
   return SPoint2(U, V);
 }
 
+GPoint GFace::closestPoint(const SPoint3 & queryPoint) const
+{
+  Msg(GERROR, "Closet point not implemented for this type of surface");
+  return GPoint(0, 0, 0);
+}
+
 int GFace::containsParam(const SPoint2 &pt) const
 {
   Range<double> uu = parBounds(0);
diff --git a/Geo/GFace.h b/Geo/GFace.h
index 46600eb1e5f38fbe5732ed40a2bdbf9673c34025..8d1810e89bf947fc346cf97bda7c09e28c53e511 100644
--- a/Geo/GFace.h
+++ b/Geo/GFace.h
@@ -96,7 +96,7 @@ class GFace : public GEntity
   virtual SBoundingBox3d bounds() const;
 
   // retrieve surface params
-  virtual surface_params getSurfaceParams() const { throw; }
+  virtual surface_params getSurfaceParams() const;
 
   // Return the point on the face corresponding to the given parameter.
   virtual GPoint point(double par1, double par2) const = 0;
@@ -114,7 +114,7 @@ class GFace : public GEntity
   // metric at a given point this is a special feature for
   // stereographic mappings of the sphere that is used in 2D mesh
   // generation !
-  virtual double getMetricEigenvalue(const SPoint2 &){ throw; }
+  virtual double getMetricEigenvalue(const SPoint2 &);
 
   // Return the parmater location on the face given a point in space
   // that is on the face.
@@ -124,7 +124,7 @@ class GFace : public GEntity
   virtual int containsParam(const SPoint2 &pt) const;
 
   // Return the point on the face closest to the given point.
-  virtual GPoint closestPoint(const SPoint3 & queryPoint) const { throw; }
+  virtual GPoint closestPoint(const SPoint3 & queryPoint) const;
 
   // Return the normal to the face at the given parameter location.
   virtual SVector3 normal(const SPoint2 &param) const = 0;
diff --git a/Makefile b/Makefile
index 96b50bcb667b38f1c491ab3f1527d5f7a7f63d1c..959621a4bc905dff0e8ad42cdd28fecf635d3e7f 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.480 2008-04-23 23:00:39 geuzaine Exp $
+# $Id: Makefile,v 1.481 2008-04-28 10:10:50 geuzaine Exp $
 #
 # Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 #
@@ -23,8 +23,8 @@ include variables
 
 GMSH_MAJOR_VERSION = 2
 GMSH_MINOR_VERSION = 2
-GMSH_PATCH_VERSION = 0
-GMSH_EXTRA_VERSION = 
+GMSH_PATCH_VERSION = 1
+GMSH_EXTRA_VERSION =
 
 GMSH_VERSION = ${GMSH_MAJOR_VERSION}.${GMSH_MINOR_VERSION}.${GMSH_PATCH_VERSION}${GMSH_EXTRA_VERSION}
 
diff --git a/Mesh/Field.cpp b/Mesh/Field.cpp
index 0177ea88c524158ce9a2ed57c42fce3c2301caeb..88c9448589b84034137534270191c4de6d7c98d3 100644
--- a/Mesh/Field.cpp
+++ b/Mesh/Field.cpp
@@ -1,4 +1,4 @@
-// $Id: Field.cpp,v 1.34 2008-04-22 13:27:43 remacle Exp $
+// $Id: Field.cpp,v 1.35 2008-04-28 10:10:52 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -37,8 +37,11 @@
 #include "GeoInterpolation.h"
 #include "GModel.h"
 #include "Message.h"
+
+#if !defined(HAVE_NO_POST)
 #include "OctreePost.h"
 #include "PViewDataList.h"
+#endif
 
 #define MAX_LC 1.e22
 
@@ -916,6 +919,7 @@ public:
 };
 #endif
 
+#if !defined(HAVE_NO_POST)
 class PostViewField:public Field
 {
   OctreePost *octree;
@@ -978,6 +982,7 @@ public:int view_index;
     return dialogBox;
   }
 };
+#endif
 
 class MinField:public Field
 {
@@ -1160,7 +1165,9 @@ FieldManager::FieldManager()
   map_type_name["Threshold"] = new FieldFactoryT < ThresholdField > ();
   map_type_name["Box"] = new FieldFactoryT < BoxField > ();
   map_type_name["LonLat"] = new FieldFactoryT < LonLatField > ();
+#if !defined(HAVE_NO_POST)
   map_type_name["PostView"] = new FieldFactoryT < PostViewField > ();
+#endif
   map_type_name["Gradient"] = new FieldFactoryT < GradientField > ();
   map_type_name["Min"] = new FieldFactoryT < MinField > ();
   map_type_name["Max"] = new FieldFactoryT < MaxField > ();
@@ -1206,6 +1213,7 @@ Field::Field()
 {
 }
 
+#if !defined(HAVE_NO_POST)
 void Field::put_on_view(PView * view, int comp)
 {
   PViewDataList *data = dynamic_cast < PViewDataList * >(view->getData());
@@ -1246,6 +1254,7 @@ void Field::put_on_view(PView * view, int comp)
   data->finalize();
   view->setChanged(true);
 }
+#endif
 
 void FieldManager::set_background_mesh(int iView)
 {
diff --git a/Mesh/Field.h b/Mesh/Field.h
index 30ae062c270b1ce5441ec90307e6e5376ba96644..c98864601941d7447e1c37e8969e7a9a436dee29 100644
--- a/Mesh/Field.h
+++ b/Mesh/Field.h
@@ -24,7 +24,10 @@
 #include <list>
 #include <string.h>
 #include "Geo.h"
+
+#if !defined(HAVE_NO_POST)
 #include "PView.h"
+#endif
 
 class Field;
 
@@ -75,7 +78,9 @@ class Field {
   Field();
   virtual const char *get_name() = 0;
   virtual FieldDialogBox *&dialog_box() = 0;
+#if !defined(HAVE_NO_POST)
   void put_on_view(PView * view, int comp = -1);
+#endif
 };
 
 class FieldFactory {
diff --git a/Mesh/Generator.cpp b/Mesh/Generator.cpp
index 1c7fde7fe891adc8179171055ac7abb45ce84c5e..043dacc5f6be7cee63420ab2210788c330577a09 100644
--- a/Mesh/Generator.cpp
+++ b/Mesh/Generator.cpp
@@ -1,4 +1,4 @@
-// $Id: Generator.cpp,v 1.140 2008-04-17 21:05:51 geuzaine Exp $
+// $Id: Generator.cpp,v 1.141 2008-04-28 10:10:52 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -22,7 +22,6 @@
 #include "Message.h"
 #include "Numeric.h"
 #include "Context.h"
-#include "PView.h"
 #include "OS.h"
 #include "GModel.h"
 #include "MElement.h"
@@ -34,6 +33,10 @@
 #include "BoundaryLayer.h"
 #include "HighOrder.h"
 
+#if !defined(HAVE_NO_POST)
+#include "PView.h"
+#endif
+
 extern Context_T CTX;
 
 template<class T>
@@ -132,6 +135,7 @@ void GetStatistics(double stat[50], double quality[3][100])
     stat[25] = rhoMax;
   }
 
+#if !defined(HAVE_NO_POST)
   stat[26] = PView::list.size();
   for(unsigned int i = 0; i < PView::list.size(); i++) {
     PViewData *data = PView::list[i]->getData();
@@ -145,6 +149,7 @@ void GetStatistics(double stat[50], double quality[3][100])
     stat[34] += data->getNumPyramids();
     stat[35] += data->getNumStrings2D() + data->getNumStrings3D();
   }
+#endif
 }
 
 static bool TooManyElements(GModel *m, int dim)
diff --git a/Mesh/Makefile b/Mesh/Makefile
index ecd8680120678749af3e00fc73c1afe6d4f27892..e74ad5d1ee9776af1136dd9954d5693b93fca85c 100644
--- a/Mesh/Makefile
+++ b/Mesh/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.216 2008-04-23 23:00:39 geuzaine Exp $
+# $Id: Makefile,v 1.217 2008-04-28 10:10:52 geuzaine Exp $
 #
 # Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 #
@@ -88,21 +88,20 @@ depend:
 
 # DO NOT DELETE THIS LINE
 Generator.o: Generator.cpp ../Common/Message.h ../Numeric/Numeric.h \
-  ../Numeric/NumericEmbedded.h ../Common/Context.h ../Post/PView.h \
-  ../Post/PViewData.h ../DataStr/List.h ../Geo/SBoundingBox3d.h \
-  ../Geo/SPoint3.h ../Post/PViewOptions.h ../Post/ColorTable.h \
-  ../Common/OS.h ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h \
-  ../Geo/Range.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
-  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
-  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h \
+  ../Numeric/NumericEmbedded.h ../Common/Context.h ../Common/OS.h \
+  ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
+  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h \
+  ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h \
+  ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h \
+  ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h \
   ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
   ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
   ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h meshGEdge.h \
   meshGFace.h meshGFaceBDS.h meshGRegion.h BackgroundMesh.h \
-  BoundaryLayer.h HighOrder.h
+  BoundaryLayer.h HighOrder.h ../Post/PView.h ../Post/PViewData.h \
+  ../DataStr/List.h ../Post/PViewOptions.h ../Post/ColorTable.h
 Field.o: Field.cpp ../Common/Context.h Field.h ../Geo/Geo.h \
   ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
   ../Geo/Range.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/SVector3.h \
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index b45d6b10520efb32403b9e0092fdc97d2a9f9b74..bd163fe78e7bae92704bffbe38a0016b4c6cbf27 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -324,7 +324,7 @@
 /* Copy the first part of user declarations.  */
 #line 1 "Gmsh.y"
 
-// $Id: Gmsh.tab.cpp,v 1.360 2008-04-24 17:29:47 geuzaine Exp $
+// $Id: Gmsh.tab.cpp,v 1.361 2008-04-28 10:10:52 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -351,7 +351,6 @@
 #include "Message.h"
 #include "Malloc.h"
 #include "Tools.h"
-#include "PluginManager.h"
 #include "ParUtil.h"
 #include "Numeric.h"
 #include "Context.h"
@@ -360,8 +359,6 @@
 #include "GeoInterpolation.h"
 #include "Generator.h"
 #include "Draw.h"
-#include "PView.h"
-#include "PViewDataList.h"
 #include "Options.h"
 #include "Colors.h"
 #include "Parser.h"
@@ -375,6 +372,13 @@
 #include "Field.h"
 #include "BackgroundMesh.h"
 
+#if !defined(HAVE_NO_POST)
+#include "PView.h"
+#include "PViewDataList.h"
+#include "PluginManager.h"
+static PViewDataList *ViewData;
+#endif
+
 Tree_T *Symbol_T = NULL;
 
 extern Context_T CTX;
@@ -383,7 +387,6 @@ static ExtrudeParams extr;
 
 static gmshSurface *myGmshSurface = 0;
 
-static PViewDataList *ViewData;
 static List_T *ViewValueList;
 static double ViewCoord[100];
 static int *ViewNumList, ViewCoordIdx;
@@ -421,7 +424,7 @@ int PrintListOfDouble(char *format, List_T *list, char *buffer);
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 79 "Gmsh.y"
+#line 82 "Gmsh.y"
 {
   char *c;
   int i;
@@ -432,7 +435,7 @@ typedef union YYSTYPE
   List_T *l;
 }
 /* Line 193 of yacc.c.  */
-#line 436 "Gmsh.tab.cpp"
+#line 439 "Gmsh.tab.cpp"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -445,7 +448,7 @@ typedef union YYSTYPE
 
 
 /* Line 216 of yacc.c.  */
-#line 449 "Gmsh.tab.cpp"
+#line 452 "Gmsh.tab.cpp"
 
 #ifdef short
 # undef short
@@ -980,42 +983,42 @@ static const yytype_int16 yyrhs[] =
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   145,   145,   146,   151,   153,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     174,   178,   185,   190,   205,   218,   247,   259,   268,   281,
-     284,   285,   286,   287,   288,   292,   294,   299,   301,   307,
-     451,   306,   465,   470,   479,   478,   493,   498,   507,   506,
-     520,   532,   550,   549,   561,   562,   563,   564,   565,   569,
-     570,   577,   608,   647,   701,   718,   736,   747,   764,   771,
-     786,   804,   830,   857,   871,   888,   903,   921,   941,   964,
-     973,   978,   997,  1016,  1040,  1050,  1065,  1069,  1079,  1082,
-    1100,  1122,  1138,  1160,  1178,  1196,  1214,  1240,  1258,  1284,
-    1304,  1322,  1340,  1366,  1383,  1402,  1420,  1459,  1465,  1471,
-    1478,  1503,  1528,  1544,  1564,  1582,  1599,  1620,  1625,  1630,
-    1635,  1640,  1651,  1657,  1666,  1667,  1672,  1675,  1679,  1702,
-    1725,  1748,  1776,  1785,  1789,  1802,  1818,  1833,  1847,  1853,
-    1859,  1868,  1882,  1930,  1946,  1959,  1978,  1988,  2010,  2014,
-    2019,  2024,  2036,  2053,  2070,  2097,  2124,  2155,  2163,  2169,
-    2176,  2180,  2189,  2197,  2205,  2214,  2213,  2226,  2225,  2238,
-    2237,  2250,  2249,  2261,  2260,  2276,  2283,  2290,  2297,  2304,
-    2311,  2318,  2325,  2332,  2340,  2339,  2351,  2350,  2362,  2361,
-    2373,  2372,  2384,  2383,  2395,  2394,  2406,  2405,  2417,  2416,
-    2428,  2427,  2442,  2445,  2451,  2460,  2480,  2503,  2507,  2531,
-    2549,  2567,  2585,  2614,  2649,  2654,  2681,  2695,  2708,  2725,
-    2731,  2737,  2740,  2749,  2759,  2760,  2761,  2762,  2763,  2764,
-    2765,  2766,  2767,  2774,  2775,  2776,  2777,  2778,  2779,  2780,
-    2781,  2782,  2783,  2784,  2785,  2786,  2787,  2788,  2789,  2790,
-    2791,  2792,  2793,  2794,  2795,  2796,  2797,  2798,  2799,  2800,
-    2801,  2802,  2803,  2804,  2805,  2807,  2808,  2809,  2810,  2811,
-    2812,  2813,  2814,  2815,  2816,  2817,  2818,  2819,  2820,  2821,
-    2822,  2823,  2824,  2825,  2826,  2827,  2836,  2837,  2838,  2839,
-    2840,  2841,  2842,  2846,  2862,  2877,  2897,  2910,  2923,  2946,
-    2964,  2982,  3000,  3018,  3026,  3030,  3034,  3038,  3042,  3049,
-    3053,  3057,  3061,  3068,  3073,  3081,  3086,  3090,  3095,  3099,
-    3107,  3118,  3126,  3134,  3140,  3151,  3171,  3181,  3191,  3208,
-    3235,  3240,  3244,  3248,  3261,  3265,  3277,  3284,  3305,  3309,
-    3324,  3329,  3336,  3340,  3347,  3351,  3359,  3367,  3381,  3395,
-    3399,  3418,  3441
+       0,   148,   148,   149,   154,   156,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     177,   181,   188,   193,   208,   221,   250,   264,   275,   290,
+     295,   296,   297,   298,   299,   303,   305,   310,   312,   318,
+     464,   317,   482,   489,   500,   499,   518,   525,   536,   535,
+     553,   567,   587,   586,   600,   601,   602,   603,   604,   608,
+     609,   616,   647,   686,   740,   757,   775,   786,   803,   810,
+     825,   843,   869,   896,   910,   927,   942,   960,   980,  1003,
+    1012,  1017,  1036,  1055,  1079,  1091,  1108,  1112,  1122,  1125,
+    1143,  1165,  1181,  1203,  1221,  1239,  1257,  1283,  1301,  1327,
+    1347,  1365,  1383,  1409,  1426,  1445,  1463,  1502,  1508,  1514,
+    1521,  1546,  1571,  1587,  1607,  1625,  1642,  1663,  1668,  1673,
+    1678,  1683,  1694,  1700,  1709,  1710,  1715,  1718,  1722,  1745,
+    1768,  1791,  1819,  1828,  1832,  1847,  1863,  1880,  1894,  1900,
+    1906,  1915,  1929,  1977,  1995,  2010,  2029,  2041,  2065,  2069,
+    2074,  2079,  2091,  2108,  2125,  2152,  2179,  2210,  2218,  2224,
+    2231,  2235,  2244,  2252,  2260,  2269,  2268,  2281,  2280,  2293,
+    2292,  2305,  2304,  2316,  2315,  2331,  2338,  2345,  2352,  2359,
+    2366,  2373,  2380,  2387,  2395,  2394,  2406,  2405,  2417,  2416,
+    2428,  2427,  2439,  2438,  2450,  2449,  2461,  2460,  2472,  2471,
+    2483,  2482,  2497,  2500,  2506,  2515,  2535,  2558,  2562,  2586,
+    2604,  2622,  2640,  2669,  2704,  2709,  2736,  2750,  2763,  2780,
+    2786,  2792,  2795,  2804,  2814,  2815,  2816,  2817,  2818,  2819,
+    2820,  2821,  2822,  2829,  2830,  2831,  2832,  2833,  2834,  2835,
+    2836,  2837,  2838,  2839,  2840,  2841,  2842,  2843,  2844,  2845,
+    2846,  2847,  2848,  2849,  2850,  2851,  2852,  2853,  2854,  2855,
+    2856,  2857,  2858,  2859,  2860,  2862,  2863,  2864,  2865,  2866,
+    2867,  2868,  2869,  2870,  2871,  2872,  2873,  2874,  2875,  2876,
+    2877,  2878,  2879,  2880,  2881,  2882,  2891,  2892,  2893,  2894,
+    2895,  2896,  2897,  2901,  2917,  2932,  2952,  2965,  2978,  3001,
+    3019,  3037,  3055,  3073,  3081,  3085,  3089,  3093,  3097,  3104,
+    3108,  3112,  3116,  3123,  3128,  3136,  3141,  3145,  3150,  3154,
+    3162,  3173,  3181,  3189,  3195,  3206,  3226,  3236,  3246,  3263,
+    3290,  3295,  3299,  3303,  3316,  3320,  3332,  3339,  3360,  3364,
+    3379,  3384,  3391,  3395,  3402,  3406,  3414,  3422,  3436,  3450,
+    3454,  3473,  3496
 };
 #endif
 
@@ -3656,96 +3659,96 @@ yyreduce:
   switch (yyn)
     {
         case 3:
-#line 146 "Gmsh.y"
+#line 149 "Gmsh.y"
     { yyerrok; return 1; ;}
     break;
 
   case 6:
-#line 157 "Gmsh.y"
+#line 160 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 7:
-#line 158 "Gmsh.y"
+#line 161 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 8:
-#line 159 "Gmsh.y"
+#line 162 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 9:
-#line 160 "Gmsh.y"
+#line 163 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 10:
-#line 161 "Gmsh.y"
+#line 164 "Gmsh.y"
     { List_Delete((yyvsp[(1) - (1)].l)); return 1; ;}
     break;
 
   case 11:
-#line 162 "Gmsh.y"
+#line 165 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 12:
-#line 163 "Gmsh.y"
+#line 166 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 13:
-#line 164 "Gmsh.y"
+#line 167 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 14:
-#line 165 "Gmsh.y"
+#line 168 "Gmsh.y"
     { List_Delete((yyvsp[(1) - (1)].l)); return 1; ;}
     break;
 
   case 15:
-#line 166 "Gmsh.y"
+#line 169 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 16:
-#line 167 "Gmsh.y"
+#line 170 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 17:
-#line 168 "Gmsh.y"
+#line 171 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 18:
-#line 169 "Gmsh.y"
+#line 172 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 19:
-#line 170 "Gmsh.y"
+#line 173 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 20:
-#line 175 "Gmsh.y"
+#line 178 "Gmsh.y"
     {
       (yyval.c) = (char*)"w";
     ;}
     break;
 
   case 21:
-#line 179 "Gmsh.y"
+#line 182 "Gmsh.y"
     {
       (yyval.c) = (char*)"a";
     ;}
     break;
 
   case 22:
-#line 186 "Gmsh.y"
+#line 189 "Gmsh.y"
     {
       Msg(DIRECT, (yyvsp[(3) - (5)].c));
       Free((yyvsp[(3) - (5)].c));
@@ -3753,7 +3756,7 @@ yyreduce:
     break;
 
   case 23:
-#line 191 "Gmsh.y"
+#line 194 "Gmsh.y"
     {
       char tmpstring[1024];
       FixRelativePath((yyvsp[(6) - (7)].c), tmpstring);
@@ -3771,7 +3774,7 @@ yyreduce:
     break;
 
   case 24:
-#line 206 "Gmsh.y"
+#line 209 "Gmsh.y"
     {
       char tmpstring[1024];
       int i = PrintListOfDouble((yyvsp[(3) - (7)].c), (yyvsp[(5) - (7)].l), tmpstring);
@@ -3787,7 +3790,7 @@ yyreduce:
     break;
 
   case 25:
-#line 219 "Gmsh.y"
+#line 222 "Gmsh.y"
     {
       char tmpstring[1024];
       int i = PrintListOfDouble((yyvsp[(3) - (9)].c), (yyvsp[(5) - (9)].l), tmpstring);
@@ -3814,8 +3817,9 @@ yyreduce:
     break;
 
   case 26:
-#line 248 "Gmsh.y"
+#line 251 "Gmsh.y"
     { 
+#if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(1) - (6)].c), "View") && ViewData->finalize()){
 	ViewData->setName((yyvsp[(2) - (6)].c));
 	ViewData->setFileName(gmsh_yyname);
@@ -3824,64 +3828,72 @@ yyreduce:
       }
       else
 	delete ViewData;
+#endif
       Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(2) - (6)].c));
     ;}
     break;
 
   case 27:
-#line 260 "Gmsh.y"
+#line 265 "Gmsh.y"
     {
+#if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(2) - (6)].c), "View")){
 	int index = (int)(yyvsp[(4) - (6)].d);
 	if(index >= 0 && index < (int)PView::list.size())
 	  new PView(PView::list[index], false);
       }
+#endif
       Free((yyvsp[(2) - (6)].c));
     ;}
     break;
 
   case 28:
-#line 269 "Gmsh.y"
+#line 276 "Gmsh.y"
     {
+#if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(2) - (6)].c), "View")){
 	int index = (int)(yyvsp[(4) - (6)].d);
 	if(index >= 0 && index < (int)PView::list.size())
 	  new PView(PView::list[index], true);
       }
+#endif
       Free((yyvsp[(2) - (6)].c));
     ;}
     break;
 
   case 29:
-#line 281 "Gmsh.y"
+#line 290 "Gmsh.y"
     {
+#if !defined(HAVE_NO_POST)
       ViewData = new PViewDataList(true); 
+#endif
     ;}
     break;
 
   case 35:
-#line 293 "Gmsh.y"
+#line 304 "Gmsh.y"
     { ViewCoord[ViewCoordIdx++] = (yyvsp[(1) - (1)].d); ;}
     break;
 
   case 36:
-#line 295 "Gmsh.y"
+#line 306 "Gmsh.y"
     { ViewCoord[ViewCoordIdx++] = (yyvsp[(3) - (3)].d); ;}
     break;
 
   case 37:
-#line 300 "Gmsh.y"
+#line 311 "Gmsh.y"
     { if(ViewValueList) List_Add(ViewValueList, &(yyvsp[(1) - (1)].d)); ;}
     break;
 
   case 38:
-#line 302 "Gmsh.y"
+#line 313 "Gmsh.y"
     { if(ViewValueList) List_Add(ViewValueList, &(yyvsp[(3) - (3)].d)); ;}
     break;
 
   case 39:
-#line 307 "Gmsh.y"
+#line 318 "Gmsh.y"
     {
+#if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(1) - (1)].c), "SP")){
 	ViewValueList = ViewData->SP; ViewNumList = &ViewData->NbSP;
       }
@@ -4023,97 +4035,119 @@ yyreduce:
       }
       Free((yyvsp[(1) - (1)].c));
       ViewCoordIdx = 0;
+#endif
     ;}
     break;
 
   case 40:
-#line 451 "Gmsh.y"
+#line 464 "Gmsh.y"
     {
+#if !defined(HAVE_NO_POST)
       if(ViewValueList){
 	for(int i = 0; i < 3; i++)
 	  for(int j = 0; j < ViewCoordIdx / 3; j++)
 	    List_Add(ViewValueList, &ViewCoord[3 * j + i]);
       }
+#endif
     ;}
     break;
 
   case 41:
-#line 459 "Gmsh.y"
+#line 474 "Gmsh.y"
     {
+#if !defined(HAVE_NO_POST)
       if(ViewValueList) (*ViewNumList)++;
+#endif
     ;}
     break;
 
   case 42:
-#line 466 "Gmsh.y"
+#line 483 "Gmsh.y"
     { 
+#if !defined(HAVE_NO_POST)
       for(int i = 0; i < (int)strlen((yyvsp[(1) - (1)].c))+1; i++) List_Add(ViewData->T2C, &(yyvsp[(1) - (1)].c)[i]); 
+#endif
       Free((yyvsp[(1) - (1)].c));
     ;}
     break;
 
   case 43:
-#line 471 "Gmsh.y"
+#line 490 "Gmsh.y"
     { 
+#if !defined(HAVE_NO_POST)
       for(int i = 0; i < (int)strlen((yyvsp[(3) - (3)].c))+1; i++) List_Add(ViewData->T2C, &(yyvsp[(3) - (3)].c)[i]); 
+#endif
       Free((yyvsp[(3) - (3)].c));
     ;}
     break;
 
   case 44:
-#line 479 "Gmsh.y"
+#line 500 "Gmsh.y"
     { 
+#if !defined(HAVE_NO_POST)
       List_Add(ViewData->T2D, &(yyvsp[(3) - (8)].d)); 
       List_Add(ViewData->T2D, &(yyvsp[(5) - (8)].d));
       List_Add(ViewData->T2D, &(yyvsp[(7) - (8)].d)); 
       double d = List_Nbr(ViewData->T2C);
       List_Add(ViewData->T2D, &d); 
+#endif
     ;}
     break;
 
   case 45:
-#line 487 "Gmsh.y"
+#line 510 "Gmsh.y"
     {
+#if !defined(HAVE_NO_POST)
       ViewData->NbT2++;
+#endif
     ;}
     break;
 
   case 46:
-#line 494 "Gmsh.y"
+#line 519 "Gmsh.y"
     { 
+#if !defined(HAVE_NO_POST)
       for(int i = 0; i < (int)strlen((yyvsp[(1) - (1)].c))+1; i++) List_Add(ViewData->T3C, &(yyvsp[(1) - (1)].c)[i]); 
+#endif
       Free((yyvsp[(1) - (1)].c));
     ;}
     break;
 
   case 47:
-#line 499 "Gmsh.y"
+#line 526 "Gmsh.y"
     { 
+#if !defined(HAVE_NO_POST)
       for(int i = 0; i < (int)strlen((yyvsp[(3) - (3)].c))+1; i++) List_Add(ViewData->T3C, &(yyvsp[(3) - (3)].c)[i]); 
+#endif
       Free((yyvsp[(3) - (3)].c));
     ;}
     break;
 
   case 48:
-#line 507 "Gmsh.y"
+#line 536 "Gmsh.y"
     { 
+#if !defined(HAVE_NO_POST)
       List_Add(ViewData->T3D, &(yyvsp[(3) - (10)].d)); List_Add(ViewData->T3D, &(yyvsp[(5) - (10)].d));
       List_Add(ViewData->T3D, &(yyvsp[(7) - (10)].d)); List_Add(ViewData->T3D, &(yyvsp[(9) - (10)].d)); 
       double d = List_Nbr(ViewData->T3C);
       List_Add(ViewData->T3D, &d); 
+#endif
     ;}
     break;
 
   case 49:
-#line 514 "Gmsh.y"
+#line 545 "Gmsh.y"
     {
+#if !defined(HAVE_NO_POST)
       ViewData->NbT3++;
+#endif
     ;}
     break;
 
   case 50:
-#line 522 "Gmsh.y"
+#line 555 "Gmsh.y"
     {
+#if !defined(HAVE_NO_POST)
       int type = 
 	(ViewData->NbSL || ViewData->NbVL) ? 1 : 
 	(ViewData->NbST || ViewData->NbVT) ? 3 : 
@@ -4122,12 +4156,14 @@ yyreduce:
       	(ViewData->NbSH || ViewData->NbVH) ? 12 : 
 	0;
       ViewData->setInterpolationScheme(type, (yyvsp[(3) - (8)].l), (yyvsp[(6) - (8)].l));
+#endif
     ;}
     break;
 
   case 51:
-#line 536 "Gmsh.y"
+#line 571 "Gmsh.y"
     {
+#if !defined(HAVE_NO_POST)
       int type = 
 	(ViewData->NbSL || ViewData->NbVL) ? 1 : 
 	(ViewData->NbST || ViewData->NbVT) ? 3 : 
@@ -4136,59 +4172,62 @@ yyreduce:
       	(ViewData->NbSH || ViewData->NbVH) ? 12 : 
 	0;
       ViewData->setInterpolationScheme(type, (yyvsp[(3) - (14)].l), (yyvsp[(6) - (14)].l), (yyvsp[(9) - (14)].l), (yyvsp[(12) - (14)].l));
+#endif
     ;}
     break;
 
   case 52:
-#line 550 "Gmsh.y"
+#line 587 "Gmsh.y"
     {
+#if !defined(HAVE_NO_POST)
       ViewValueList = ViewData->Time;
+#endif
     ;}
     break;
 
   case 53:
-#line 554 "Gmsh.y"
+#line 593 "Gmsh.y"
     {
     ;}
     break;
 
   case 54:
-#line 561 "Gmsh.y"
+#line 600 "Gmsh.y"
     { (yyval.i) = 0; ;}
     break;
 
   case 55:
-#line 562 "Gmsh.y"
+#line 601 "Gmsh.y"
     { (yyval.i) = 1; ;}
     break;
 
   case 56:
-#line 563 "Gmsh.y"
+#line 602 "Gmsh.y"
     { (yyval.i) = 2; ;}
     break;
 
   case 57:
-#line 564 "Gmsh.y"
+#line 603 "Gmsh.y"
     { (yyval.i) = 3; ;}
     break;
 
   case 58:
-#line 565 "Gmsh.y"
+#line 604 "Gmsh.y"
     { (yyval.i) = 4; ;}
     break;
 
   case 59:
-#line 569 "Gmsh.y"
+#line 608 "Gmsh.y"
     { (yyval.i) = 1; ;}
     break;
 
   case 60:
-#line 570 "Gmsh.y"
+#line 609 "Gmsh.y"
     { (yyval.i) = -1; ;}
     break;
 
   case 61:
-#line 578 "Gmsh.y"
+#line 617 "Gmsh.y"
     {
       Symbol TheSymbol;
       TheSymbol.Name = (yyvsp[(1) - (4)].c);
@@ -4222,7 +4261,7 @@ yyreduce:
     break;
 
   case 62:
-#line 609 "Gmsh.y"
+#line 648 "Gmsh.y"
     {
       Symbol TheSymbol;
       TheSymbol.Name = (yyvsp[(1) - (7)].c);
@@ -4264,7 +4303,7 @@ yyreduce:
     break;
 
   case 63:
-#line 648 "Gmsh.y"
+#line 687 "Gmsh.y"
     {
       if(List_Nbr((yyvsp[(4) - (9)].l)) != List_Nbr((yyvsp[(8) - (9)].l))){
 	yymsg(GERROR, "Incompatible array dimensions in affectation");
@@ -4321,7 +4360,7 @@ yyreduce:
     break;
 
   case 64:
-#line 702 "Gmsh.y"
+#line 741 "Gmsh.y"
     {
       Symbol TheSymbol;
       TheSymbol.Name = (yyvsp[(1) - (6)].c);
@@ -4341,7 +4380,7 @@ yyreduce:
     break;
 
   case 65:
-#line 719 "Gmsh.y"
+#line 758 "Gmsh.y"
     {
       // appends to the list
       Symbol TheSymbol;
@@ -4362,7 +4401,7 @@ yyreduce:
     break;
 
   case 66:
-#line 737 "Gmsh.y"
+#line 776 "Gmsh.y"
     {
       Symbol TheSymbol;
       TheSymbol.Name = (yyvsp[(1) - (3)].c);
@@ -4376,7 +4415,7 @@ yyreduce:
     break;
 
   case 67:
-#line 748 "Gmsh.y"
+#line 787 "Gmsh.y"
     {
       Symbol TheSymbol;
       TheSymbol.Name = (yyvsp[(1) - (6)].c);
@@ -4395,14 +4434,14 @@ yyreduce:
     break;
 
   case 68:
-#line 765 "Gmsh.y"
+#line 804 "Gmsh.y"
     { 
       Msg(WARNING, "Named string expressions not implemented yet");
     ;}
     break;
 
   case 69:
-#line 772 "Gmsh.y"
+#line 811 "Gmsh.y"
     { 
       const char* (*pStrOpt)(int num, int action, const char *value);
       StringXString *pStrCat;
@@ -4420,7 +4459,7 @@ yyreduce:
     break;
 
   case 70:
-#line 787 "Gmsh.y"
+#line 826 "Gmsh.y"
     { 
       const char* (*pStrOpt)(int num, int action, const char *value);
       StringXString *pStrCat;
@@ -4438,7 +4477,7 @@ yyreduce:
     break;
 
   case 71:
-#line 805 "Gmsh.y"
+#line 844 "Gmsh.y"
     {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -4467,7 +4506,7 @@ yyreduce:
     break;
 
   case 72:
-#line 831 "Gmsh.y"
+#line 870 "Gmsh.y"
     {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -4497,7 +4536,7 @@ yyreduce:
     break;
 
   case 73:
-#line 858 "Gmsh.y"
+#line 897 "Gmsh.y"
     {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -4514,7 +4553,7 @@ yyreduce:
     break;
 
   case 74:
-#line 872 "Gmsh.y"
+#line 911 "Gmsh.y"
     {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -4531,7 +4570,7 @@ yyreduce:
     break;
 
   case 75:
-#line 889 "Gmsh.y"
+#line 928 "Gmsh.y"
     {
       unsigned int (*pColOpt)(int num, int action, unsigned int value);
       StringXColor *pColCat;
@@ -4549,7 +4588,7 @@ yyreduce:
     break;
 
   case 76:
-#line 904 "Gmsh.y"
+#line 943 "Gmsh.y"
     {
       unsigned int (*pColOpt)(int num, int action, unsigned int value);
       StringXColor *pColCat;
@@ -4567,7 +4606,7 @@ yyreduce:
     break;
 
   case 77:
-#line 922 "Gmsh.y"
+#line 961 "Gmsh.y"
     {
       GmshColorTable *ct = Get_ColorTable(0);
       if(!ct)
@@ -4590,7 +4629,7 @@ yyreduce:
     break;
 
   case 78:
-#line 942 "Gmsh.y"
+#line 981 "Gmsh.y"
     {
       GmshColorTable *ct = Get_ColorTable((int)(yyvsp[(3) - (9)].d));
       if(!ct)
@@ -4613,7 +4652,7 @@ yyreduce:
     break;
 
   case 79:
-#line 965 "Gmsh.y"
+#line 1004 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (5)].c),"Background")){
 	GModel::current()->getFields()->background_field = (int)(yyvsp[(4) - (5)].d);
@@ -4625,7 +4664,7 @@ yyreduce:
     break;
 
   case 80:
-#line 974 "Gmsh.y"
+#line 1013 "Gmsh.y"
     {
       if(!GModel::current()->getFields()->new_field((int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c)))
 	yymsg(GERROR, "Cannot create field %i of type '%s'", (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c));
@@ -4633,7 +4672,7 @@ yyreduce:
     break;
 
   case 81:
-#line 979 "Gmsh.y"
+#line 1018 "Gmsh.y"
     {
       Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (9)].d));
       if(field){
@@ -4655,7 +4694,7 @@ yyreduce:
     break;
 
   case 82:
-#line 998 "Gmsh.y"
+#line 1037 "Gmsh.y"
     {
       Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (9)].d));
       if(field){
@@ -4677,7 +4716,7 @@ yyreduce:
     break;
 
   case 83:
-#line 1017 "Gmsh.y"
+#line 1056 "Gmsh.y"
     {
       Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (11)].d));
       if(field){
@@ -4701,40 +4740,44 @@ yyreduce:
     break;
 
   case 84:
-#line 1041 "Gmsh.y"
+#line 1080 "Gmsh.y"
     {
+#if !defined(HAVE_NO_POST)
       try {
 	GMSH_PluginManager::instance()->setPluginOption((yyvsp[(3) - (9)].c), (yyvsp[(6) - (9)].c), (yyvsp[(8) - (9)].d)); 
       }
       catch (...) {
 	yymsg(GERROR, "Unknown option '%s' or plugin '%s'", (yyvsp[(6) - (9)].c), (yyvsp[(3) - (9)].c));
       }
+#endif
       Free((yyvsp[(3) - (9)].c)); Free((yyvsp[(6) - (9)].c));
     ;}
     break;
 
   case 85:
-#line 1051 "Gmsh.y"
+#line 1092 "Gmsh.y"
     {
+#if !defined(HAVE_NO_POST)
       try {
 	GMSH_PluginManager::instance()->setPluginOption((yyvsp[(3) - (9)].c), (yyvsp[(6) - (9)].c), (yyvsp[(8) - (9)].c)); 
       }
       catch (...) {
 	yymsg(GERROR, "Unknown option '%s' or plugin '%s'", (yyvsp[(6) - (9)].c), (yyvsp[(3) - (9)].c));
       }
+#endif
       Free((yyvsp[(3) - (9)].c)); Free((yyvsp[(6) - (9)].c)); // FIXME: sometimes leak $8
     ;}
     break;
 
   case 86:
-#line 1066 "Gmsh.y"
+#line 1109 "Gmsh.y"
     { 
       (yyval.i) = (int)(yyvsp[(1) - (1)].d); 
     ;}
     break;
 
   case 87:
-#line 1070 "Gmsh.y"
+#line 1113 "Gmsh.y"
     { 
       (yyval.i) = GModel::current()->setPhysicalName
 	(std::string((yyvsp[(1) - (1)].c)), ++GModel::current()->getGEOInternals()->MaxPhysicalNum);
@@ -4743,14 +4786,14 @@ yyreduce:
     break;
 
   case 88:
-#line 1079 "Gmsh.y"
+#line 1122 "Gmsh.y"
     {
       (yyval.l) = 0;
     ;}
     break;
 
   case 89:
-#line 1083 "Gmsh.y"
+#line 1126 "Gmsh.y"
     {
       (yyval.l) = List_Create(4, 4, sizeof(double));
       Vertex *v = FindPoint((int)(yyvsp[(4) - (5)].d));
@@ -4765,7 +4808,7 @@ yyreduce:
     break;
 
   case 90:
-#line 1101 "Gmsh.y"
+#line 1144 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindPoint(num)){
@@ -4790,7 +4833,7 @@ yyreduce:
     break;
 
   case 91:
-#line 1123 "Gmsh.y"
+#line 1166 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_POINT)){
@@ -4809,7 +4852,7 @@ yyreduce:
     break;
 
   case 92:
-#line 1139 "Gmsh.y"
+#line 1182 "Gmsh.y"
     {      
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -4831,7 +4874,7 @@ yyreduce:
     break;
 
   case 93:
-#line 1161 "Gmsh.y"
+#line 1204 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -4852,7 +4895,7 @@ yyreduce:
     break;
 
   case 94:
-#line 1179 "Gmsh.y"
+#line 1222 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -4873,7 +4916,7 @@ yyreduce:
     break;
 
   case 95:
-#line 1197 "Gmsh.y"
+#line 1240 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -4894,7 +4937,7 @@ yyreduce:
     break;
 
   case 96:
-#line 1215 "Gmsh.y"
+#line 1258 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindCurve(num)){
@@ -4923,7 +4966,7 @@ yyreduce:
     break;
 
   case 97:
-#line 1241 "Gmsh.y"
+#line 1284 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -4944,7 +4987,7 @@ yyreduce:
     break;
 
   case 98:
-#line 1259 "Gmsh.y"
+#line 1302 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindCurve(num)){
@@ -4973,7 +5016,7 @@ yyreduce:
     break;
 
   case 99:
-#line 1286 "Gmsh.y"
+#line 1329 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (17)].d);
       if(FindCurve(num)){
@@ -4995,7 +5038,7 @@ yyreduce:
     break;
 
   case 100:
-#line 1305 "Gmsh.y"
+#line 1348 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -5016,7 +5059,7 @@ yyreduce:
     break;
 
   case 101:
-#line 1323 "Gmsh.y"
+#line 1366 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -5037,7 +5080,7 @@ yyreduce:
     break;
 
   case 102:
-#line 1341 "Gmsh.y"
+#line 1384 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (11)].d);
       if(List_Nbr((yyvsp[(6) - (11)].l)) + (int)(yyvsp[(10) - (11)].d) + 1 != List_Nbr((yyvsp[(8) - (11)].l))){
@@ -5066,7 +5109,7 @@ yyreduce:
     break;
 
   case 103:
-#line 1367 "Gmsh.y"
+#line 1410 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindEdgeLoop(num)){
@@ -5086,7 +5129,7 @@ yyreduce:
     break;
 
   case 104:
-#line 1384 "Gmsh.y"
+#line 1427 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_LINE)){
@@ -5105,7 +5148,7 @@ yyreduce:
     break;
 
   case 105:
-#line 1403 "Gmsh.y"
+#line 1446 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindSurface(num)){
@@ -5126,7 +5169,7 @@ yyreduce:
     break;
 
   case 106:
-#line 1421 "Gmsh.y"
+#line 1464 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (9)].d), type = 0;
       if(FindSurface(num)){
@@ -5168,7 +5211,7 @@ yyreduce:
     break;
 
   case 107:
-#line 1460 "Gmsh.y"
+#line 1503 "Gmsh.y"
     {
       myGmshSurface = 0;
       (yyval.s).Type = 0;
@@ -5177,7 +5220,7 @@ yyreduce:
     break;
 
   case 108:
-#line 1466 "Gmsh.y"
+#line 1509 "Gmsh.y"
     {
       myGmshSurface = gmshSurface::getSurface((int)(yyvsp[(3) - (4)].d));
       (yyval.s).Type = 0;
@@ -5186,7 +5229,7 @@ yyreduce:
     break;
 
   case 109:
-#line 1472 "Gmsh.y"
+#line 1515 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (10)].d);
       myGmshSurface = gmshParametricSurface::NewParametricSurface(num, (yyvsp[(7) - (10)].c), (yyvsp[(8) - (10)].c), (yyvsp[(9) - (10)].c));
@@ -5196,7 +5239,7 @@ yyreduce:
     break;
 
   case 110:
-#line 1479 "Gmsh.y"
+#line 1522 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if (List_Nbr((yyvsp[(6) - (7)].l)) != 2){
@@ -5224,7 +5267,7 @@ yyreduce:
     break;
 
   case 111:
-#line 1504 "Gmsh.y"
+#line 1547 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if (List_Nbr((yyvsp[(6) - (7)].l)) != 2){
@@ -5252,7 +5295,7 @@ yyreduce:
     break;
 
   case 112:
-#line 1529 "Gmsh.y"
+#line 1572 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindSurfaceLoop(num)){
@@ -5271,7 +5314,7 @@ yyreduce:
     break;
 
   case 113:
-#line 1545 "Gmsh.y"
+#line 1588 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE)){
@@ -5290,7 +5333,7 @@ yyreduce:
     break;
 
   case 114:
-#line 1565 "Gmsh.y"
+#line 1608 "Gmsh.y"
     {
       yymsg(GERROR, "'Complex Volume' command is deprecated: use 'Volume' instead");
       int num = (int)(yyvsp[(4) - (8)].d);
@@ -5311,7 +5354,7 @@ yyreduce:
     break;
 
   case 115:
-#line 1583 "Gmsh.y"
+#line 1626 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindVolume(num)){
@@ -5331,7 +5374,7 @@ yyreduce:
     break;
 
   case 116:
-#line 1600 "Gmsh.y"
+#line 1643 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME)){
@@ -5350,7 +5393,7 @@ yyreduce:
     break;
 
   case 117:
-#line 1621 "Gmsh.y"
+#line 1664 "Gmsh.y"
     {
       TranslateShapes((yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], (yyvsp[(4) - (5)].l));
       (yyval.l) = (yyvsp[(4) - (5)].l);
@@ -5358,7 +5401,7 @@ yyreduce:
     break;
 
   case 118:
-#line 1626 "Gmsh.y"
+#line 1669 "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));
       (yyval.l) = (yyvsp[(10) - (11)].l);
@@ -5366,7 +5409,7 @@ yyreduce:
     break;
 
   case 119:
-#line 1631 "Gmsh.y"
+#line 1674 "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));
       (yyval.l) = (yyvsp[(4) - (5)].l);
@@ -5374,7 +5417,7 @@ yyreduce:
     break;
 
   case 120:
-#line 1636 "Gmsh.y"
+#line 1679 "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));
       (yyval.l) = (yyvsp[(8) - (9)].l);
@@ -5382,7 +5425,7 @@ yyreduce:
     break;
 
   case 121:
-#line 1641 "Gmsh.y"
+#line 1684 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
@@ -5396,7 +5439,7 @@ yyreduce:
     break;
 
   case 122:
-#line 1652 "Gmsh.y"
+#line 1695 "Gmsh.y"
     { 
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       IntersectCurvesWithSurface((yyvsp[(4) - (9)].l), (int)(yyvsp[(8) - (9)].d), (yyval.l));
@@ -5405,7 +5448,7 @@ yyreduce:
     break;
 
   case 123:
-#line 1658 "Gmsh.y"
+#line 1701 "Gmsh.y"
     { 
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       BoundaryShapes((yyvsp[(3) - (4)].l), (yyval.l));
@@ -5414,31 +5457,31 @@ yyreduce:
     break;
 
   case 124:
-#line 1666 "Gmsh.y"
+#line 1709 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
   case 125:
-#line 1667 "Gmsh.y"
+#line 1710 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
   case 126:
-#line 1672 "Gmsh.y"
+#line 1715 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
     ;}
     break;
 
   case 127:
-#line 1676 "Gmsh.y"
+#line 1719 "Gmsh.y"
     {
       List_Add((yyval.l), &(yyvsp[(2) - (2)].s));
     ;}
     break;
 
   case 128:
-#line 1680 "Gmsh.y"
+#line 1723 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -5464,7 +5507,7 @@ yyreduce:
     break;
 
   case 129:
-#line 1703 "Gmsh.y"
+#line 1746 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -5490,7 +5533,7 @@ yyreduce:
     break;
 
   case 130:
-#line 1726 "Gmsh.y"
+#line 1769 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -5516,7 +5559,7 @@ yyreduce:
     break;
 
   case 131:
-#line 1749 "Gmsh.y"
+#line 1792 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -5542,7 +5585,7 @@ yyreduce:
     break;
 
   case 132:
-#line 1777 "Gmsh.y"
+#line 1820 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -5554,15 +5597,16 @@ yyreduce:
     break;
 
   case 133:
-#line 1786 "Gmsh.y"
+#line 1829 "Gmsh.y"
     {
       GModel::current()->getFields()->delete_field((int)(yyvsp[(4) - (6)].d));
     ;}
     break;
 
   case 134:
-#line 1790 "Gmsh.y"
+#line 1833 "Gmsh.y"
     {
+#if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(2) - (6)].c), "View")){
 	int index = (int)(yyvsp[(4) - (6)].d);
 	if(index >= 0 && index < (int)PView::list.size())
@@ -5572,12 +5616,13 @@ yyreduce:
       }
       else
 	yymsg(GERROR, "Unknown command 'Delete %s'", (yyvsp[(2) - (6)].c));
+#endif
       Free((yyvsp[(2) - (6)].c));
     ;}
     break;
 
   case 135:
-#line 1803 "Gmsh.y"
+#line 1848 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Meshes") || !strcmp((yyvsp[(2) - (3)].c), "All")){
 	GModel::current()->destroy();
@@ -5596,20 +5641,22 @@ yyreduce:
     break;
 
   case 136:
-#line 1819 "Gmsh.y"
+#line 1864 "Gmsh.y"
     {
+#if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(2) - (4)].c), "Empty") && !strcmp((yyvsp[(3) - (4)].c), "Views")){
 	for(int i = PView::list.size() - 1; i >= 0; i--)
 	  if(PView::list[i]->getData()->empty()) delete PView::list[i];
       }
       else
 	yymsg(GERROR, "Unknown command 'Delete %s %s'", (yyvsp[(2) - (4)].c), (yyvsp[(3) - (4)].c));
+#endif
       Free((yyvsp[(2) - (4)].c)); Free((yyvsp[(3) - (4)].c));
     ;}
     break;
 
   case 137:
-#line 1834 "Gmsh.y"
+#line 1881 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
 	Shape TheShape;
@@ -5621,7 +5668,7 @@ yyreduce:
     break;
 
   case 138:
-#line 1848 "Gmsh.y"
+#line 1895 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[(2) - (3)].c), i, 1);
@@ -5630,7 +5677,7 @@ yyreduce:
     break;
 
   case 139:
-#line 1854 "Gmsh.y"
+#line 1901 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[(2) - (3)].c), i, 0);
@@ -5639,7 +5686,7 @@ yyreduce:
     break;
 
   case 140:
-#line 1860 "Gmsh.y"
+#line 1907 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -5651,7 +5698,7 @@ yyreduce:
     break;
 
   case 141:
-#line 1869 "Gmsh.y"
+#line 1916 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -5663,7 +5710,7 @@ yyreduce:
     break;
 
   case 142:
-#line 1883 "Gmsh.y"
+#line 1930 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Include")){
 	char tmpstring[1024];
@@ -5714,8 +5761,9 @@ yyreduce:
     break;
 
   case 143:
-#line 1931 "Gmsh.y"
+#line 1978 "Gmsh.y"
     {
+#if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(1) - (7)].c), "Save") && !strcmp((yyvsp[(2) - (7)].c), "View")){
 	int index = (int)(yyvsp[(4) - (7)].d);
 	if(index >= 0 && index < (int)PView::list.size()){
@@ -5728,13 +5776,15 @@ yyreduce:
       }
       else
 	yymsg(GERROR, "Unknown command '%s'", (yyvsp[(1) - (7)].c));
+#endif
       Free((yyvsp[(1) - (7)].c)); Free((yyvsp[(2) - (7)].c)); Free((yyvsp[(6) - (7)].c));
     ;}
     break;
 
   case 144:
-#line 1947 "Gmsh.y"
+#line 1996 "Gmsh.y"
     {
+#if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(1) - (7)].c), "Background") && !strcmp((yyvsp[(2) - (7)].c), "Mesh")  && !strcmp((yyvsp[(3) - (7)].c), "View")){
 	int index = (int)(yyvsp[(5) - (7)].d);
 	if(index >= 0 && index < (int)PView::list.size())
@@ -5744,12 +5794,13 @@ yyreduce:
       }
       else
 	yymsg(GERROR, "Unknown command '%s'", (yyvsp[(1) - (7)].c));
+#endif
       Free((yyvsp[(1) - (7)].c)); Free((yyvsp[(2) - (7)].c)); Free((yyvsp[(3) - (7)].c));
     ;}
     break;
 
   case 145:
-#line 1960 "Gmsh.y"
+#line 2011 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Sleep")){
 	SleepInSeconds((yyvsp[(2) - (3)].d));
@@ -5771,21 +5822,24 @@ yyreduce:
     break;
 
   case 146:
-#line 1979 "Gmsh.y"
+#line 2030 "Gmsh.y"
     {
+#if !defined(HAVE_NO_POST)
        try {
 	 GMSH_PluginManager::instance()->action((yyvsp[(3) - (7)].c), (yyvsp[(6) - (7)].c), 0);
        }
        catch(...) {
 	 yymsg(GERROR, "Unknown action '%s' or plugin '%s'", (yyvsp[(6) - (7)].c), (yyvsp[(3) - (7)].c));
        }
+#endif
        Free((yyvsp[(3) - (7)].c)); Free((yyvsp[(6) - (7)].c));
      ;}
     break;
 
   case 147:
-#line 1989 "Gmsh.y"
+#line 2042 "Gmsh.y"
     {
+#if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromAllViews"))
 	PView::combine(false, 1, CTX.post.combine_remove_orig);
       else if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromVisibleViews"))
@@ -5804,19 +5858,20 @@ yyreduce:
 	PView::combine(true, 2, CTX.post.combine_remove_orig);
       else
 	yymsg(GERROR, "Unknown 'Combine' command");
+#endif
       Free((yyvsp[(2) - (3)].c));
     ;}
     break;
 
   case 148:
-#line 2011 "Gmsh.y"
+#line 2066 "Gmsh.y"
     {
       exit(0);
     ;}
     break;
 
   case 149:
-#line 2015 "Gmsh.y"
+#line 2070 "Gmsh.y"
     {
       CTX.forced_bbox = 0;
       SetBoundingBox();
@@ -5824,7 +5879,7 @@ yyreduce:
     break;
 
   case 150:
-#line 2020 "Gmsh.y"
+#line 2075 "Gmsh.y"
     {
       CTX.forced_bbox = 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));
@@ -5832,7 +5887,7 @@ yyreduce:
     break;
 
   case 151:
-#line 2025 "Gmsh.y"
+#line 2080 "Gmsh.y"
     {
 #if defined(HAVE_FLTK)
       Draw();
@@ -5841,7 +5896,7 @@ yyreduce:
     break;
 
   case 152:
-#line 2037 "Gmsh.y"
+#line 2092 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (6)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (6)].d);
@@ -5861,7 +5916,7 @@ yyreduce:
     break;
 
   case 153:
-#line 2054 "Gmsh.y"
+#line 2109 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (8)].d);
@@ -5881,7 +5936,7 @@ yyreduce:
     break;
 
   case 154:
-#line 2071 "Gmsh.y"
+#line 2126 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (8)].d);
@@ -5911,7 +5966,7 @@ yyreduce:
     break;
 
   case 155:
-#line 2098 "Gmsh.y"
+#line 2153 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (10)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (10)].d);
@@ -5941,7 +5996,7 @@ yyreduce:
     break;
 
   case 156:
-#line 2125 "Gmsh.y"
+#line 2180 "Gmsh.y"
     {
       if(ImbricatedLoop <= 0){
 	yymsg(GERROR, "Invalid For/EndFor loop");
@@ -5975,7 +6030,7 @@ yyreduce:
     break;
 
   case 157:
-#line 2156 "Gmsh.y"
+#line 2211 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->createFunction((yyvsp[(2) - (2)].c), gmsh_yyin, gmsh_yyname,
 						      gmsh_yylineno))
@@ -5986,7 +6041,7 @@ yyreduce:
     break;
 
   case 158:
-#line 2164 "Gmsh.y"
+#line 2219 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->leaveFunction(&gmsh_yyin, gmsh_yyname,
 						     gmsh_yylineno))
@@ -5995,7 +6050,7 @@ yyreduce:
     break;
 
   case 159:
-#line 2170 "Gmsh.y"
+#line 2225 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->enterFunction((yyvsp[(2) - (3)].c), &gmsh_yyin, gmsh_yyname,
 						     gmsh_yylineno))
@@ -6005,20 +6060,20 @@ yyreduce:
     break;
 
   case 160:
-#line 2177 "Gmsh.y"
+#line 2232 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].d)) skip_until("If", "EndIf");
     ;}
     break;
 
   case 161:
-#line 2181 "Gmsh.y"
+#line 2236 "Gmsh.y"
     {
     ;}
     break;
 
   case 162:
-#line 2190 "Gmsh.y"
+#line 2245 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (5)].l), 
@@ -6029,7 +6084,7 @@ yyreduce:
     break;
 
   case 163:
-#line 2198 "Gmsh.y"
+#line 2253 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (11)].l), 
@@ -6040,7 +6095,7 @@ yyreduce:
     break;
 
   case 164:
-#line 2206 "Gmsh.y"
+#line 2261 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (13)].l), 
@@ -6051,14 +6106,14 @@ yyreduce:
     break;
 
   case 165:
-#line 2214 "Gmsh.y"
+#line 2269 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 166:
-#line 2218 "Gmsh.y"
+#line 2273 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (7)].l), 
@@ -6069,14 +6124,14 @@ yyreduce:
     break;
 
   case 167:
-#line 2226 "Gmsh.y"
+#line 2281 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 168:
-#line 2230 "Gmsh.y"
+#line 2285 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (13)].l), 
@@ -6087,14 +6142,14 @@ yyreduce:
     break;
 
   case 169:
-#line 2238 "Gmsh.y"
+#line 2293 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 170:
-#line 2242 "Gmsh.y"
+#line 2297 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (15)].l), 
@@ -6105,14 +6160,14 @@ yyreduce:
     break;
 
   case 171:
-#line 2250 "Gmsh.y"
+#line 2305 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 172:
-#line 2254 "Gmsh.y"
+#line 2309 "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.,
@@ -6122,14 +6177,14 @@ yyreduce:
     break;
 
   case 173:
-#line 2261 "Gmsh.y"
+#line 2316 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 174:
-#line 2265 "Gmsh.y"
+#line 2320 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       extr.mesh.ViewIndex = (int)(yyvsp[(4) - (10)].d);
@@ -6142,7 +6197,7 @@ yyreduce:
     break;
 
   case 175:
-#line 2277 "Gmsh.y"
+#line 2332 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (8)].d), 
@@ -6152,7 +6207,7 @@ yyreduce:
     break;
 
   case 176:
-#line 2284 "Gmsh.y"
+#line 2339 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (8)].d), 
@@ -6162,7 +6217,7 @@ yyreduce:
     break;
 
   case 177:
-#line 2291 "Gmsh.y"
+#line 2346 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (8)].d), 
@@ -6172,7 +6227,7 @@ yyreduce:
     break;
 
   case 178:
-#line 2298 "Gmsh.y"
+#line 2353 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d), 
@@ -6182,7 +6237,7 @@ yyreduce:
     break;
 
   case 179:
-#line 2305 "Gmsh.y"
+#line 2360 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d), 
@@ -6192,7 +6247,7 @@ yyreduce:
     break;
 
   case 180:
-#line 2312 "Gmsh.y"
+#line 2367 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d), 
@@ -6202,7 +6257,7 @@ yyreduce:
     break;
 
   case 181:
-#line 2319 "Gmsh.y"
+#line 2374 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (14)].d), 
@@ -6212,7 +6267,7 @@ yyreduce:
     break;
 
   case 182:
-#line 2326 "Gmsh.y"
+#line 2381 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (14)].d), 
@@ -6222,7 +6277,7 @@ yyreduce:
     break;
 
   case 183:
-#line 2333 "Gmsh.y"
+#line 2388 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (14)].d), 
@@ -6232,14 +6287,14 @@ yyreduce:
     break;
 
   case 184:
-#line 2340 "Gmsh.y"
+#line 2395 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 185:
-#line 2344 "Gmsh.y"
+#line 2399 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d), 
@@ -6249,14 +6304,14 @@ yyreduce:
     break;
 
   case 186:
-#line 2351 "Gmsh.y"
+#line 2406 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 187:
-#line 2355 "Gmsh.y"
+#line 2410 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d), 
@@ -6266,14 +6321,14 @@ yyreduce:
     break;
 
   case 188:
-#line 2362 "Gmsh.y"
+#line 2417 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 189:
-#line 2366 "Gmsh.y"
+#line 2421 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d), 
@@ -6283,14 +6338,14 @@ yyreduce:
     break;
 
   case 190:
-#line 2373 "Gmsh.y"
+#line 2428 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 191:
-#line 2377 "Gmsh.y"
+#line 2432 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (16)].d), 
@@ -6300,14 +6355,14 @@ yyreduce:
     break;
 
   case 192:
-#line 2384 "Gmsh.y"
+#line 2439 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 193:
-#line 2388 "Gmsh.y"
+#line 2443 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (16)].d), 
@@ -6317,14 +6372,14 @@ yyreduce:
     break;
 
   case 194:
-#line 2395 "Gmsh.y"
+#line 2450 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 195:
-#line 2399 "Gmsh.y"
+#line 2454 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (16)].d), 
@@ -6334,14 +6389,14 @@ yyreduce:
     break;
 
   case 196:
-#line 2406 "Gmsh.y"
+#line 2461 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 197:
-#line 2410 "Gmsh.y"
+#line 2465 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (18)].d), 
@@ -6351,14 +6406,14 @@ yyreduce:
     break;
 
   case 198:
-#line 2417 "Gmsh.y"
+#line 2472 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 199:
-#line 2421 "Gmsh.y"
+#line 2476 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (18)].d), 
@@ -6368,14 +6423,14 @@ yyreduce:
     break;
 
   case 200:
-#line 2428 "Gmsh.y"
+#line 2483 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 201:
-#line 2432 "Gmsh.y"
+#line 2487 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (18)].d), 
@@ -6385,19 +6440,19 @@ yyreduce:
     break;
 
   case 202:
-#line 2443 "Gmsh.y"
+#line 2498 "Gmsh.y"
     {
     ;}
     break;
 
   case 203:
-#line 2446 "Gmsh.y"
+#line 2501 "Gmsh.y"
     {
     ;}
     break;
 
   case 204:
-#line 2452 "Gmsh.y"
+#line 2507 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = 1;
@@ -6409,7 +6464,7 @@ yyreduce:
     break;
 
   case 205:
-#line 2461 "Gmsh.y"
+#line 2516 "Gmsh.y"
     {
       double d;
       extr.mesh.ExtrudeMesh = true;
@@ -6432,7 +6487,7 @@ yyreduce:
     break;
 
   case 206:
-#line 2481 "Gmsh.y"
+#line 2536 "Gmsh.y"
     {
       yymsg(GERROR, "Explicit region numbers in layers are deprecated");
       double d;
@@ -6458,14 +6513,14 @@ yyreduce:
     break;
 
   case 207:
-#line 2504 "Gmsh.y"
+#line 2559 "Gmsh.y"
     {
       extr.mesh.Recombine = true;
     ;}
     break;
 
   case 208:
-#line 2508 "Gmsh.y"
+#line 2563 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindSurface(num)){
@@ -6487,7 +6542,7 @@ yyreduce:
     break;
 
   case 209:
-#line 2532 "Gmsh.y"
+#line 2587 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -6508,7 +6563,7 @@ yyreduce:
     break;
 
   case 210:
-#line 2550 "Gmsh.y"
+#line 2605 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (9)].l)); i++){
 	double d;
@@ -6529,7 +6584,7 @@ yyreduce:
     break;
 
   case 211:
-#line 2568 "Gmsh.y"
+#line 2623 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (9)].l)); i++){
 	double d;
@@ -6550,7 +6605,7 @@ yyreduce:
     break;
 
   case 212:
-#line 2586 "Gmsh.y"
+#line 2641 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(4) - (8)].d));
       if(!s)
@@ -6582,7 +6637,7 @@ yyreduce:
     break;
 
   case 213:
-#line 2615 "Gmsh.y"
+#line 2670 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(4) - (9)].d));
       if(!s)
@@ -6620,7 +6675,7 @@ yyreduce:
     break;
 
   case 214:
-#line 2650 "Gmsh.y"
+#line 2705 "Gmsh.y"
     {
       yymsg(WARNING, "Elliptic Surface is deprecated: use Transfinite instead (with smoothing)");
       List_Delete((yyvsp[(7) - (8)].l));
@@ -6628,7 +6683,7 @@ yyreduce:
     break;
 
   case 215:
-#line 2655 "Gmsh.y"
+#line 2710 "Gmsh.y"
     {
       Volume *v = FindVolume((int)(yyvsp[(4) - (8)].d));
       if(!v)
@@ -6658,7 +6713,7 @@ yyreduce:
     break;
 
   case 216:
-#line 2682 "Gmsh.y"
+#line 2737 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -6675,7 +6730,7 @@ yyreduce:
     break;
 
   case 217:
-#line 2696 "Gmsh.y"
+#line 2751 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	double d;
@@ -6691,7 +6746,7 @@ yyreduce:
     break;
 
   case 218:
-#line 2709 "Gmsh.y"
+#line 2764 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -6705,7 +6760,7 @@ yyreduce:
     break;
 
   case 219:
-#line 2726 "Gmsh.y"
+#line 2781 "Gmsh.y"
     { 
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s)
@@ -6714,7 +6769,7 @@ yyreduce:
     break;
 
   case 220:
-#line 2732 "Gmsh.y"
+#line 2787 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s)
@@ -6723,66 +6778,66 @@ yyreduce:
     break;
 
   case 221:
-#line 2738 "Gmsh.y"
+#line 2793 "Gmsh.y"
     {
     ;}
     break;
 
   case 222:
-#line 2741 "Gmsh.y"
+#line 2796 "Gmsh.y"
     {
     ;}
     break;
 
   case 223:
-#line 2750 "Gmsh.y"
+#line 2805 "Gmsh.y"
     { 
       ReplaceAllDuplicates();
     ;}
     break;
 
   case 224:
-#line 2759 "Gmsh.y"
+#line 2814 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d);           ;}
     break;
 
   case 225:
-#line 2760 "Gmsh.y"
+#line 2815 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (3)].d);           ;}
     break;
 
   case 226:
-#line 2761 "Gmsh.y"
+#line 2816 "Gmsh.y"
     { (yyval.d) = -(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 227:
-#line 2762 "Gmsh.y"
+#line 2817 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (2)].d);           ;}
     break;
 
   case 228:
-#line 2763 "Gmsh.y"
+#line 2818 "Gmsh.y"
     { (yyval.d) = !(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 229:
-#line 2764 "Gmsh.y"
+#line 2819 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 230:
-#line 2765 "Gmsh.y"
+#line 2820 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 231:
-#line 2766 "Gmsh.y"
+#line 2821 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 232:
-#line 2768 "Gmsh.y"
+#line 2823 "Gmsh.y"
     { 
       if(!(yyvsp[(3) - (3)].d))
 	yymsg(GERROR, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
@@ -6792,307 +6847,307 @@ yyreduce:
     break;
 
   case 233:
-#line 2774 "Gmsh.y"
+#line 2829 "Gmsh.y"
     { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d);  ;}
     break;
 
   case 234:
-#line 2775 "Gmsh.y"
+#line 2830 "Gmsh.y"
     { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  ;}
     break;
 
   case 235:
-#line 2776 "Gmsh.y"
+#line 2831 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 236:
-#line 2777 "Gmsh.y"
+#line 2832 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 237:
-#line 2778 "Gmsh.y"
+#line 2833 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 238:
-#line 2779 "Gmsh.y"
+#line 2834 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 239:
-#line 2780 "Gmsh.y"
+#line 2835 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 240:
-#line 2781 "Gmsh.y"
+#line 2836 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 241:
-#line 2782 "Gmsh.y"
+#line 2837 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 242:
-#line 2783 "Gmsh.y"
+#line 2838 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 243:
-#line 2784 "Gmsh.y"
+#line 2839 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (5)].d)? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d);  ;}
     break;
 
   case 244:
-#line 2785 "Gmsh.y"
+#line 2840 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 245:
-#line 2786 "Gmsh.y"
+#line 2841 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 246:
-#line 2787 "Gmsh.y"
+#line 2842 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 247:
-#line 2788 "Gmsh.y"
+#line 2843 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 248:
-#line 2789 "Gmsh.y"
+#line 2844 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 249:
-#line 2790 "Gmsh.y"
+#line 2845 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 250:
-#line 2791 "Gmsh.y"
+#line 2846 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 251:
-#line 2792 "Gmsh.y"
+#line 2847 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 252:
-#line 2793 "Gmsh.y"
+#line 2848 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 253:
-#line 2794 "Gmsh.y"
+#line 2849 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 254:
-#line 2795 "Gmsh.y"
+#line 2850 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 255:
-#line 2796 "Gmsh.y"
+#line 2851 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 256:
-#line 2797 "Gmsh.y"
+#line 2852 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 257:
-#line 2798 "Gmsh.y"
+#line 2853 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 258:
-#line 2799 "Gmsh.y"
+#line 2854 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 259:
-#line 2800 "Gmsh.y"
+#line 2855 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 260:
-#line 2801 "Gmsh.y"
+#line 2856 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 261:
-#line 2802 "Gmsh.y"
+#line 2857 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 262:
-#line 2803 "Gmsh.y"
+#line 2858 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 263:
-#line 2804 "Gmsh.y"
+#line 2859 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d)*(yyvsp[(3) - (6)].d)+(yyvsp[(5) - (6)].d)*(yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 264:
-#line 2805 "Gmsh.y"
+#line 2860 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d)*(double)rand()/(double)RAND_MAX; ;}
     break;
 
   case 265:
-#line 2807 "Gmsh.y"
+#line 2862 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 266:
-#line 2808 "Gmsh.y"
+#line 2863 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 267:
-#line 2809 "Gmsh.y"
+#line 2864 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 268:
-#line 2810 "Gmsh.y"
+#line 2865 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 269:
-#line 2811 "Gmsh.y"
+#line 2866 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 270:
-#line 2812 "Gmsh.y"
+#line 2867 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 271:
-#line 2813 "Gmsh.y"
+#line 2868 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 272:
-#line 2814 "Gmsh.y"
+#line 2869 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 273:
-#line 2815 "Gmsh.y"
+#line 2870 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 274:
-#line 2816 "Gmsh.y"
+#line 2871 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 275:
-#line 2817 "Gmsh.y"
+#line 2872 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 276:
-#line 2818 "Gmsh.y"
+#line 2873 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 277:
-#line 2819 "Gmsh.y"
+#line 2874 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 278:
-#line 2820 "Gmsh.y"
+#line 2875 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 279:
-#line 2821 "Gmsh.y"
+#line 2876 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 280:
-#line 2822 "Gmsh.y"
+#line 2877 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 281:
-#line 2823 "Gmsh.y"
+#line 2878 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 282:
-#line 2824 "Gmsh.y"
+#line 2879 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 283:
-#line 2825 "Gmsh.y"
+#line 2880 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 284:
-#line 2826 "Gmsh.y"
+#line 2881 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d)*(yyvsp[(3) - (6)].d)+(yyvsp[(5) - (6)].d)*(yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 285:
-#line 2827 "Gmsh.y"
+#line 2882 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d)*(double)rand()/(double)RAND_MAX; ;}
     break;
 
   case 286:
-#line 2836 "Gmsh.y"
+#line 2891 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d); ;}
     break;
 
   case 287:
-#line 2837 "Gmsh.y"
+#line 2892 "Gmsh.y"
     { (yyval.d) = 3.141592653589793; ;}
     break;
 
   case 288:
-#line 2838 "Gmsh.y"
+#line 2893 "Gmsh.y"
     { (yyval.d) = ParUtil::Instance()->rank(); ;}
     break;
 
   case 289:
-#line 2839 "Gmsh.y"
+#line 2894 "Gmsh.y"
     { (yyval.d) = ParUtil::Instance()->size(); ;}
     break;
 
   case 290:
-#line 2840 "Gmsh.y"
+#line 2895 "Gmsh.y"
     { (yyval.d) = Get_GmshMajorVersion(); ;}
     break;
 
   case 291:
-#line 2841 "Gmsh.y"
+#line 2896 "Gmsh.y"
     { (yyval.d) = Get_GmshMinorVersion(); ;}
     break;
 
   case 292:
-#line 2842 "Gmsh.y"
+#line 2897 "Gmsh.y"
     { (yyval.d) = Get_GmshPatchVersion(); ;}
     break;
 
   case 293:
-#line 2847 "Gmsh.y"
+#line 2902 "Gmsh.y"
     {
       Symbol TheSymbol;
       TheSymbol.Name = (yyvsp[(1) - (1)].c);
@@ -7108,7 +7163,7 @@ yyreduce:
     break;
 
   case 294:
-#line 2863 "Gmsh.y"
+#line 2918 "Gmsh.y"
     {
       char tmpstring[1024];
       sprintf(tmpstring, "%s_%d", (yyvsp[(1) - (5)].c), (int)(yyvsp[(4) - (5)].d)) ;
@@ -7126,7 +7181,7 @@ yyreduce:
     break;
 
   case 295:
-#line 2878 "Gmsh.y"
+#line 2933 "Gmsh.y"
     {
       Symbol TheSymbol;
       TheSymbol.Name = (yyvsp[(1) - (4)].c);
@@ -7149,7 +7204,7 @@ yyreduce:
     break;
 
   case 296:
-#line 2898 "Gmsh.y"
+#line 2953 "Gmsh.y"
     {
       Symbol TheSymbol;
       TheSymbol.Name = (yyvsp[(2) - (4)].c);
@@ -7165,7 +7220,7 @@ yyreduce:
     break;
 
   case 297:
-#line 2911 "Gmsh.y"
+#line 2966 "Gmsh.y"
     {
       Symbol TheSymbol;
       TheSymbol.Name = (yyvsp[(1) - (2)].c);
@@ -7181,7 +7236,7 @@ yyreduce:
     break;
 
   case 298:
-#line 2924 "Gmsh.y"
+#line 2979 "Gmsh.y"
     {
       Symbol TheSymbol;
       TheSymbol.Name = (yyvsp[(1) - (5)].c);
@@ -7204,7 +7259,7 @@ yyreduce:
     break;
 
   case 299:
-#line 2947 "Gmsh.y"
+#line 3002 "Gmsh.y"
     {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -7225,7 +7280,7 @@ yyreduce:
     break;
 
   case 300:
-#line 2965 "Gmsh.y"
+#line 3020 "Gmsh.y"
     {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -7246,7 +7301,7 @@ yyreduce:
     break;
 
   case 301:
-#line 2983 "Gmsh.y"
+#line 3038 "Gmsh.y"
     {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -7267,7 +7322,7 @@ yyreduce:
     break;
 
   case 302:
-#line 3001 "Gmsh.y"
+#line 3056 "Gmsh.y"
     {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -7288,7 +7343,7 @@ yyreduce:
     break;
 
   case 303:
-#line 3019 "Gmsh.y"
+#line 3074 "Gmsh.y"
     { 
       (yyval.d) = GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
@@ -7296,70 +7351,70 @@ yyreduce:
     break;
 
   case 304:
-#line 3027 "Gmsh.y"
+#line 3082 "Gmsh.y"
     {
       memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double));
     ;}
     break;
 
   case 305:
-#line 3031 "Gmsh.y"
+#line 3086 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 306:
-#line 3035 "Gmsh.y"
+#line 3090 "Gmsh.y"
     { 
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 307:
-#line 3039 "Gmsh.y"
+#line 3094 "Gmsh.y"
     { 
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 308:
-#line 3043 "Gmsh.y"
+#line 3098 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 309:
-#line 3050 "Gmsh.y"
+#line 3105 "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);
     ;}
     break;
 
   case 310:
-#line 3054 "Gmsh.y"
+#line 3109 "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;
     ;}
     break;
 
   case 311:
-#line 3058 "Gmsh.y"
+#line 3113 "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;
     ;}
     break;
 
   case 312:
-#line 3062 "Gmsh.y"
+#line 3117 "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;
     ;}
     break;
 
   case 313:
-#line 3069 "Gmsh.y"
+#line 3124 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(List_T*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].l)));
@@ -7367,14 +7422,14 @@ yyreduce:
     break;
 
   case 314:
-#line 3074 "Gmsh.y"
+#line 3129 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].l)));
     ;}
     break;
 
   case 315:
-#line 3082 "Gmsh.y"
+#line 3137 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -7382,14 +7437,14 @@ yyreduce:
     break;
 
   case 316:
-#line 3087 "Gmsh.y"
+#line 3142 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 317:
-#line 3091 "Gmsh.y"
+#line 3146 "Gmsh.y"
     {
       // creates an empty list
       (yyval.l) = List_Create(2, 1, sizeof(double));
@@ -7397,14 +7452,14 @@ yyreduce:
     break;
 
   case 318:
-#line 3096 "Gmsh.y"
+#line 3151 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 319:
-#line 3100 "Gmsh.y"
+#line 3155 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -7415,7 +7470,7 @@ yyreduce:
     break;
 
   case 320:
-#line 3108 "Gmsh.y"
+#line 3163 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (5)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -7426,7 +7481,7 @@ yyreduce:
     break;
 
   case 321:
-#line 3119 "Gmsh.y"
+#line 3174 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -7437,7 +7492,7 @@ yyreduce:
     break;
 
   case 322:
-#line 3127 "Gmsh.y"
+#line 3182 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (3)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -7448,7 +7503,7 @@ yyreduce:
     break;
 
   case 323:
-#line 3135 "Gmsh.y"
+#line 3190 "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)); ((yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d)) ? (d += 1.) : (d -= 1.)) 
@@ -7457,7 +7512,7 @@ yyreduce:
     break;
 
   case 324:
-#line 3141 "Gmsh.y"
+#line 3196 "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)){
@@ -7471,7 +7526,7 @@ yyreduce:
     break;
 
   case 325:
-#line 3152 "Gmsh.y"
+#line 3207 "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
@@ -7494,7 +7549,7 @@ yyreduce:
     break;
 
   case 326:
-#line 3172 "Gmsh.y"
+#line 3227 "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++){
@@ -7507,7 +7562,7 @@ yyreduce:
     break;
 
   case 327:
-#line 3182 "Gmsh.y"
+#line 3237 "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++){
@@ -7520,7 +7575,7 @@ yyreduce:
     break;
 
   case 328:
-#line 3192 "Gmsh.y"
+#line 3247 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       Symbol TheSymbol;
@@ -7540,7 +7595,7 @@ yyreduce:
     break;
 
   case 329:
-#line 3209 "Gmsh.y"
+#line 3264 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       Symbol TheSymbol;
@@ -7567,7 +7622,7 @@ yyreduce:
     break;
 
   case 330:
-#line 3236 "Gmsh.y"
+#line 3291 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -7575,21 +7630,21 @@ yyreduce:
     break;
 
   case 331:
-#line 3241 "Gmsh.y"
+#line 3296 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 332:
-#line 3245 "Gmsh.y"
+#line 3300 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].d)));
     ;}
     break;
 
   case 333:
-#line 3249 "Gmsh.y"
+#line 3304 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
 	double d;
@@ -7601,21 +7656,21 @@ yyreduce:
     break;
 
   case 334:
-#line 3262 "Gmsh.y"
+#line 3317 "Gmsh.y"
     {
       (yyval.u) = CTX.PACK_COLOR((int)(yyvsp[(2) - (9)].d), (int)(yyvsp[(4) - (9)].d), (int)(yyvsp[(6) - (9)].d), (int)(yyvsp[(8) - (9)].d));
     ;}
     break;
 
   case 335:
-#line 3266 "Gmsh.y"
+#line 3321 "Gmsh.y"
     {
       (yyval.u) = CTX.PACK_COLOR((int)(yyvsp[(2) - (7)].d), (int)(yyvsp[(4) - (7)].d), (int)(yyvsp[(6) - (7)].d), 255);
     ;}
     break;
 
   case 336:
-#line 3278 "Gmsh.y"
+#line 3333 "Gmsh.y"
     {
       int flag;
       (yyval.u) = Get_ColorForString(ColorString, -1, (yyvsp[(1) - (1)].c), &flag);
@@ -7625,7 +7680,7 @@ yyreduce:
     break;
 
   case 337:
-#line 3285 "Gmsh.y"
+#line 3340 "Gmsh.y"
     {
       unsigned int (*pColOpt)(int num, int action, unsigned int value);
       StringXColor *pColCat;
@@ -7646,14 +7701,14 @@ yyreduce:
     break;
 
   case 338:
-#line 3306 "Gmsh.y"
+#line 3361 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 339:
-#line 3310 "Gmsh.y"
+#line 3365 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = Get_ColorTable((int)(yyvsp[(3) - (6)].d));
@@ -7668,7 +7723,7 @@ yyreduce:
     break;
 
   case 340:
-#line 3325 "Gmsh.y"
+#line 3380 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].u)));
@@ -7676,35 +7731,35 @@ yyreduce:
     break;
 
   case 341:
-#line 3330 "Gmsh.y"
+#line 3385 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].u)));
     ;}
     break;
 
   case 342:
-#line 3337 "Gmsh.y"
+#line 3392 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 343:
-#line 3341 "Gmsh.y"
+#line 3396 "Gmsh.y"
     {
       Msg(WARNING, "Named string expressions not implemented yet");
     ;}
     break;
 
   case 344:
-#line 3348 "Gmsh.y"
+#line 3403 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 345:
-#line 3352 "Gmsh.y"
+#line 3407 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc(32*sizeof(char));
       time_t now;
@@ -7715,7 +7770,7 @@ yyreduce:
     break;
 
   case 346:
-#line 3360 "Gmsh.y"
+#line 3415 "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));
@@ -7726,7 +7781,7 @@ yyreduce:
     break;
 
   case 347:
-#line 3368 "Gmsh.y"
+#line 3423 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c))+1)*sizeof(char));
       int i;
@@ -7743,7 +7798,7 @@ yyreduce:
     break;
 
   case 348:
-#line 3382 "Gmsh.y"
+#line 3437 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c))+1)*sizeof(char));
       int i;
@@ -7760,14 +7815,14 @@ yyreduce:
     break;
 
   case 349:
-#line 3396 "Gmsh.y"
+#line 3451 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     ;}
     break;
 
   case 350:
-#line 3400 "Gmsh.y"
+#line 3455 "Gmsh.y"
     {
       char tmpstring[1024];
       int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
@@ -7789,7 +7844,7 @@ yyreduce:
     break;
 
   case 351:
-#line 3419 "Gmsh.y"
+#line 3474 "Gmsh.y"
     { 
       const char* (*pStrOpt)(int num, int action, const char *value);
       StringXString *pStrCat;
@@ -7815,7 +7870,7 @@ yyreduce:
     break;
 
   case 352:
-#line 3442 "Gmsh.y"
+#line 3497 "Gmsh.y"
     { 
       const char* (*pStrOpt)(int num, int action, const char *value);
       StringXString *pStrCat;
@@ -7842,7 +7897,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 7846 "Gmsh.tab.cpp"
+#line 7901 "Gmsh.tab.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -8056,7 +8111,7 @@ yyreturn:
 }
 
 
-#line 3466 "Gmsh.y"
+#line 3521 "Gmsh.y"
 
 
 void DeleteSymbol(void *a, void *b)
diff --git a/Parser/Gmsh.tab.hpp b/Parser/Gmsh.tab.hpp
index 0ea316969f3e5fa58b1890b0464d05d0dccac93a..7f8f26c5d9d26beceda77a2663a3dcc518f24258 100644
--- a/Parser/Gmsh.tab.hpp
+++ b/Parser/Gmsh.tab.hpp
@@ -288,7 +288,7 @@
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 79 "Gmsh.y"
+#line 82 "Gmsh.y"
 {
   char *c;
   int i;
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index d2411e61399d8d53131887b26e5d1cb45f602735..a90a6a1545604b8a5ac2cfff2611b2589b5b82cb 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1,5 +1,5 @@
 %{
-// $Id: Gmsh.y,v 1.310 2008-04-24 17:29:53 geuzaine Exp $
+// $Id: Gmsh.y,v 1.311 2008-04-28 10:10:59 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -26,7 +26,6 @@
 #include "Message.h"
 #include "Malloc.h"
 #include "Tools.h"
-#include "PluginManager.h"
 #include "ParUtil.h"
 #include "Numeric.h"
 #include "Context.h"
@@ -35,8 +34,6 @@
 #include "GeoInterpolation.h"
 #include "Generator.h"
 #include "Draw.h"
-#include "PView.h"
-#include "PViewDataList.h"
 #include "Options.h"
 #include "Colors.h"
 #include "Parser.h"
@@ -50,6 +47,13 @@
 #include "Field.h"
 #include "BackgroundMesh.h"
 
+#if !defined(HAVE_NO_POST)
+#include "PView.h"
+#include "PViewDataList.h"
+#include "PluginManager.h"
+static PViewDataList *ViewData;
+#endif
+
 Tree_T *Symbol_T = NULL;
 
 extern Context_T CTX;
@@ -58,7 +62,6 @@ static ExtrudeParams extr;
 
 static gmshSurface *myGmshSurface = 0;
 
-static PViewDataList *ViewData;
 static List_T *ViewValueList;
 static double ViewCoord[100];
 static int *ViewNumList, ViewCoordIdx;
@@ -246,6 +249,7 @@ Printf :
 View :
     tSTRING tBIGSTR '{' Views '}' tEND
     { 
+#if !defined(HAVE_NO_POST)
       if(!strcmp($1, "View") && ViewData->finalize()){
 	ViewData->setName($2);
 	ViewData->setFileName(gmsh_yyname);
@@ -254,24 +258,29 @@ View :
       }
       else
 	delete ViewData;
+#endif
       Free($1); Free($2);
     }
   | tAlias tSTRING '[' FExpr ']' tEND
     {
+#if !defined(HAVE_NO_POST)
       if(!strcmp($2, "View")){
 	int index = (int)$4;
 	if(index >= 0 && index < (int)PView::list.size())
 	  new PView(PView::list[index], false);
       }
+#endif
       Free($2);
     }
   | tAliasWithOptions tSTRING '[' FExpr ']' tEND
     {
+#if !defined(HAVE_NO_POST)
       if(!strcmp($2, "View")){
 	int index = (int)$4;
 	if(index >= 0 && index < (int)PView::list.size())
 	  new PView(PView::list[index], true);
       }
+#endif
       Free($2);
     }
 ;
@@ -279,7 +288,9 @@ View :
 Views :
     // nothing
     {
+#if !defined(HAVE_NO_POST)
       ViewData = new PViewDataList(true); 
+#endif
     }
   | Views Element
   | Views Text2D
@@ -305,6 +316,7 @@ ElementValues :
 Element : 
     tSTRING 
     {
+#if !defined(HAVE_NO_POST)
       if(!strcmp($1, "SP")){
 	ViewValueList = ViewData->SP; ViewNumList = &ViewData->NbSP;
       }
@@ -446,30 +458,39 @@ Element :
       }
       Free($1);
       ViewCoordIdx = 0;
+#endif
     }
     '(' ElementCoords ')'
     {
+#if !defined(HAVE_NO_POST)
       if(ViewValueList){
 	for(int i = 0; i < 3; i++)
 	  for(int j = 0; j < ViewCoordIdx / 3; j++)
 	    List_Add(ViewValueList, &ViewCoord[3 * j + i]);
       }
+#endif
     }
     '{' ElementValues '}' tEND
     {
+#if !defined(HAVE_NO_POST)
       if(ViewValueList) (*ViewNumList)++;
+#endif
     }
 ;
 
 Text2DValues :
     StringExprVar
     { 
+#if !defined(HAVE_NO_POST)
       for(int i = 0; i < (int)strlen($1)+1; i++) List_Add(ViewData->T2C, &$1[i]); 
+#endif
       Free($1);
     }
   | Text2DValues ',' StringExprVar
     { 
+#if !defined(HAVE_NO_POST)
       for(int i = 0; i < (int)strlen($3)+1; i++) List_Add(ViewData->T2C, &$3[i]); 
+#endif
       Free($3);
     }
 ;
@@ -477,27 +498,35 @@ Text2DValues :
 Text2D : 
     tText2D '(' FExpr ',' FExpr ',' FExpr ')'
     { 
+#if !defined(HAVE_NO_POST)
       List_Add(ViewData->T2D, &$3); 
       List_Add(ViewData->T2D, &$5);
       List_Add(ViewData->T2D, &$7); 
       double d = List_Nbr(ViewData->T2C);
       List_Add(ViewData->T2D, &d); 
+#endif
     }
     '{' Text2DValues '}' tEND
     {
+#if !defined(HAVE_NO_POST)
       ViewData->NbT2++;
+#endif
     }
 ;
 
 Text3DValues :
     StringExprVar
     { 
+#if !defined(HAVE_NO_POST)
       for(int i = 0; i < (int)strlen($1)+1; i++) List_Add(ViewData->T3C, &$1[i]); 
+#endif
       Free($1);
     }
   | Text3DValues ',' StringExprVar
     { 
+#if !defined(HAVE_NO_POST)
       for(int i = 0; i < (int)strlen($3)+1; i++) List_Add(ViewData->T3C, &$3[i]); 
+#endif
       Free($3);
     }
 ;
@@ -505,14 +534,18 @@ Text3DValues :
 Text3D : 
     tText3D '(' FExpr ',' FExpr ',' FExpr ',' FExpr ')'
     { 
+#if !defined(HAVE_NO_POST)
       List_Add(ViewData->T3D, &$3); List_Add(ViewData->T3D, &$5);
       List_Add(ViewData->T3D, &$7); List_Add(ViewData->T3D, &$9); 
       double d = List_Nbr(ViewData->T3C);
       List_Add(ViewData->T3D, &d); 
+#endif
     }
     '{' Text3DValues '}' tEND
     {
+#if !defined(HAVE_NO_POST)
       ViewData->NbT3++;
+#endif
     }
 ;
 
@@ -520,6 +553,7 @@ InterpolationMatrix :
     tInterpolationScheme '{' RecursiveListOfListOfDouble '}' 
                          '{' RecursiveListOfListOfDouble '}'  tEND
     {
+#if !defined(HAVE_NO_POST)
       int type = 
 	(ViewData->NbSL || ViewData->NbVL) ? 1 : 
 	(ViewData->NbST || ViewData->NbVT) ? 3 : 
@@ -528,12 +562,14 @@ InterpolationMatrix :
       	(ViewData->NbSH || ViewData->NbVH) ? 12 : 
 	0;
       ViewData->setInterpolationScheme(type, $3, $6);
+#endif
     }
  |  tInterpolationScheme '{' RecursiveListOfListOfDouble '}' 
                          '{' RecursiveListOfListOfDouble '}'  
                          '{' RecursiveListOfListOfDouble '}'  
                          '{' RecursiveListOfListOfDouble '}'  tEND
     {
+#if !defined(HAVE_NO_POST)
       int type = 
 	(ViewData->NbSL || ViewData->NbVL) ? 1 : 
 	(ViewData->NbST || ViewData->NbVT) ? 3 : 
@@ -542,13 +578,16 @@ InterpolationMatrix :
       	(ViewData->NbSH || ViewData->NbVH) ? 12 : 
 	0;
       ViewData->setInterpolationScheme(type, $3, $6, $9, $12);
+#endif
     }
 ;
 
 Time :
     tTime 
     {
+#if !defined(HAVE_NO_POST)
       ViewValueList = ViewData->Time;
+#endif
     }
    '{' ElementValues '}' tEND
     {
@@ -1039,22 +1078,26 @@ Affectation :
 
   | tPlugin '(' tSTRING ')' '.' tSTRING tAFFECT FExpr tEND 
     {
+#if !defined(HAVE_NO_POST)
       try {
 	GMSH_PluginManager::instance()->setPluginOption($3, $6, $8); 
       }
       catch (...) {
 	yymsg(GERROR, "Unknown option '%s' or plugin '%s'", $6, $3);
       }
+#endif
       Free($3); Free($6);
     }
   | tPlugin '(' tSTRING ')' '.' tSTRING tAFFECT StringExpr tEND 
     {
+#if !defined(HAVE_NO_POST)
       try {
 	GMSH_PluginManager::instance()->setPluginOption($3, $6, $8); 
       }
       catch (...) {
 	yymsg(GERROR, "Unknown option '%s' or plugin '%s'", $6, $3);
       }
+#endif
       Free($3); Free($6); // FIXME: sometimes leak $8
     }
 ;
@@ -1788,6 +1831,7 @@ Delete :
     }
   | tDelete tSTRING '[' FExpr ']' tEND
     {
+#if !defined(HAVE_NO_POST)
       if(!strcmp($2, "View")){
 	int index = (int)$4;
 	if(index >= 0 && index < (int)PView::list.size())
@@ -1797,6 +1841,7 @@ Delete :
       }
       else
 	yymsg(GERROR, "Unknown command 'Delete %s'", $2);
+#endif
       Free($2);
     }
   | tDelete tSTRING tEND
@@ -1817,12 +1862,14 @@ Delete :
     }
   | tDelete tSTRING tSTRING tEND
     {
+#if !defined(HAVE_NO_POST)
       if(!strcmp($2, "Empty") && !strcmp($3, "Views")){
 	for(int i = PView::list.size() - 1; i >= 0; i--)
 	  if(PView::list[i]->getData()->empty()) delete PView::list[i];
       }
       else
 	yymsg(GERROR, "Unknown command 'Delete %s %s'", $2, $3);
+#endif
       Free($2); Free($3);
     }
 ;
@@ -1929,6 +1976,7 @@ Command :
     } 
   | tSTRING tSTRING '[' FExpr ']' StringExprVar tEND
     {
+#if !defined(HAVE_NO_POST)
       if(!strcmp($1, "Save") && !strcmp($2, "View")){
 	int index = (int)$4;
 	if(index >= 0 && index < (int)PView::list.size()){
@@ -1941,10 +1989,12 @@ Command :
       }
       else
 	yymsg(GERROR, "Unknown command '%s'", $1);
+#endif
       Free($1); Free($2); Free($6);
     }
   | tSTRING tSTRING tSTRING '[' FExpr ']' tEND
     {
+#if !defined(HAVE_NO_POST)
       if(!strcmp($1, "Background") && !strcmp($2, "Mesh")  && !strcmp($3, "View")){
 	int index = (int)$5;
 	if(index >= 0 && index < (int)PView::list.size())
@@ -1954,6 +2004,7 @@ Command :
       }
       else
 	yymsg(GERROR, "Unknown command '%s'", $1);
+#endif
       Free($1); Free($2); Free($3);
     }
   | tSTRING FExpr tEND
@@ -1977,16 +2028,19 @@ Command :
     }
    | tPlugin '(' tSTRING ')' '.' tSTRING tEND
      {
+#if !defined(HAVE_NO_POST)
        try {
 	 GMSH_PluginManager::instance()->action($3, $6, 0);
        }
        catch(...) {
 	 yymsg(GERROR, "Unknown action '%s' or plugin '%s'", $6, $3);
        }
+#endif
        Free($3); Free($6);
      }
    | tCombine tSTRING tEND
     {
+#if !defined(HAVE_NO_POST)
       if(!strcmp($2, "ElementsFromAllViews"))
 	PView::combine(false, 1, CTX.post.combine_remove_orig);
       else if(!strcmp($2, "ElementsFromVisibleViews"))
@@ -2005,6 +2059,7 @@ Command :
 	PView::combine(true, 2, CTX.post.combine_remove_orig);
       else
 	yymsg(GERROR, "Unknown 'Combine' command");
+#endif
       Free($2);
     } 
    | tExit tEND
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index 378e992837c50fdc9e47694df17a192f0755c0ad..ba526cf2fc4b39fe904f205b6beeb8c38d780857 100644
--- a/Parser/Gmsh.yy.cpp
+++ b/Parser/Gmsh.yy.cpp
@@ -835,7 +835,7 @@ int gmsh_yy_flex_debug = 0;
 char *gmsh_yytext;
 #line 1 "Gmsh.l"
 #line 2 "Gmsh.l"
-// $Id: Gmsh.yy.cpp,v 1.360 2008-04-24 17:29:53 geuzaine Exp $
+// $Id: Gmsh.yy.cpp,v 1.361 2008-04-28 10:10:59 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
diff --git a/Parser/Makefile b/Parser/Makefile
index 28c06a63232c9b382aa2de127acc93d0b3f46f29..7860678607231781866d95888567824ef9569e7f 100644
--- a/Parser/Makefile
+++ b/Parser/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.151 2008-04-23 23:00:39 geuzaine Exp $
+# $Id: Makefile,v 1.152 2008-04-28 10:11:00 geuzaine Exp $
 #
 # Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 #
@@ -73,14 +73,10 @@ depend:
 # DO NOT DELETE THIS LINE
 Gmsh.tab.o: Gmsh.tab.cpp ../Common/Message.h ../DataStr/Malloc.h \
   ../DataStr/Tools.h ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h \
-  ../Plugin/PluginManager.h ../Plugin/Plugin.h ../Common/Options.h \
-  ../Post/ColorTable.h ../Post/PView.h ../Post/PViewData.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Post/PViewOptions.h \
-  ../Post/ColorTable.h ../Post/PViewDataList.h ../Post/PViewData.h \
-  ../Common/GmshMatrix.h ../Parallel/ParUtil.h ../Numeric/Numeric.h \
-  ../Numeric/NumericEmbedded.h ../Common/Context.h ../Geo/GModel.h \
-  ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
+  ../Parallel/ParUtil.h ../Numeric/Numeric.h ../Numeric/NumericEmbedded.h \
+  ../Common/Context.h ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h \
+  ../Geo/Range.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
+  ../Geo/SPoint3.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
   ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
   ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
   ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
@@ -90,9 +86,13 @@ Gmsh.tab.o: Gmsh.tab.cpp ../Common/Message.h ../DataStr/Malloc.h \
   ../Geo/SPoint3.h ../Geo/SVector3.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint2.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
   ../Geo/GeoInterpolation.h ../Geo/Geo.h ../Mesh/Generator.h \
-  ../Graphics/Draw.h ../Common/Colors.h ../Common/Options.h Parser.h \
-  OpenFile.h ../Common/CommandLine.h FunctionManager.h ../Common/OS.h \
-  CreateFile.h ../Mesh/Field.h ../Mesh/BackgroundMesh.h
+  ../Graphics/Draw.h ../Common/Options.h ../Post/ColorTable.h \
+  ../Common/Colors.h ../Common/Options.h Parser.h OpenFile.h \
+  ../Common/CommandLine.h FunctionManager.h ../Common/OS.h CreateFile.h \
+  ../Mesh/Field.h ../Post/PView.h ../Post/PViewData.h \
+  ../Post/PViewOptions.h ../Post/ColorTable.h ../Mesh/BackgroundMesh.h \
+  ../Post/PViewDataList.h ../Post/PViewData.h ../Plugin/PluginManager.h \
+  ../Plugin/Plugin.h ../Common/GmshMatrix.h
 Gmsh.yy.o: Gmsh.yy.cpp ../Common/Message.h ../Numeric/Numeric.h \
   ../Numeric/NumericEmbedded.h ../Geo/Geo.h ../Common/GmshDefines.h \
   ../Geo/gmshSurface.h ../Geo/Pair.h ../Geo/Range.h ../Geo/SPoint2.h \
@@ -114,9 +114,9 @@ OpenFile.o: OpenFile.cpp ../Common/Message.h ../Geo/Geo.h \
   ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h \
   ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SBoundingBox3d.h \
   ../Common/Context.h Parser.h OpenFile.h ../Common/CommandLine.h \
+  ../Graphics/ReadImg.h ../Common/OS.h ../Mesh/HighOrder.h \
   ../Post/PView.h ../Post/PViewData.h ../Post/PViewOptions.h \
-  ../Post/ColorTable.h ../Graphics/ReadImg.h ../Common/OS.h \
-  ../Mesh/HighOrder.h ../Common/GmshUI.h ../Graphics/Draw.h \
+  ../Post/ColorTable.h ../Common/GmshUI.h ../Graphics/Draw.h \
   ../Graphics/SelectBuffer.h ../Fltk/GUI.h ../Fltk/Opengl_Window.h \
   ../Fltk/Colorbar_Window.h ../Fltk/Popup_Button.h \
   ../Fltk/SpherePosition_Widget.h ../Mesh/Field.h
diff --git a/Parser/OpenFile.cpp b/Parser/OpenFile.cpp
index 086572c452faa0fd87a36b30fb9c6babd3a0da1a..8463f4b9d463da49975435b887eabd71bb766a6a 100644
--- a/Parser/OpenFile.cpp
+++ b/Parser/OpenFile.cpp
@@ -1,4 +1,4 @@
-// $Id: OpenFile.cpp,v 1.185 2008-04-18 16:40:29 geuzaine Exp $
+// $Id: OpenFile.cpp,v 1.186 2008-04-28 10:11:00 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -32,11 +32,14 @@
 #include "Parser.h"
 #include "OpenFile.h"
 #include "CommandLine.h"
-#include "PView.h"
 #include "ReadImg.h"
 #include "OS.h"
 #include "HighOrder.h"
 
+#if !defined(HAVE_NO_POST)
+#include "PView.h"
+#endif
+
 #if defined(HAVE_FLTK)
 #include "GmshUI.h"
 #include "Draw.h"
@@ -156,11 +159,13 @@ void SetBoundingBox(void)
 
   SBoundingBox3d bb = GModel::current()->bounds();
   
+#if !defined(HAVE_NO_POST)
   if(bb.empty()) {
     for(unsigned int i = 0; i < PView::list.size(); i++)
       if(!PView::list[i]->getData()->getBoundingBox().empty())
         bb += PView::list[i]->getData()->getBoundingBox();
   }
+#endif
   
   if(bb.empty()){
     bb += SPoint3(-1., -1., -1.);
@@ -207,7 +212,9 @@ int ParseFile(const char *f, int close, int warn_if_missing)
     return 0;
   }
 
+#if !defined(HAVE_NO_POST)
   int numViewsBefore = PView::list.size();
+#endif
 
   strncpy(yyname_old, gmsh_yyname, 255);
   yyin_old = gmsh_yyin;
@@ -243,7 +250,7 @@ int ParseFile(const char *f, int close, int warn_if_missing)
   gmsh_yylineno = yylineno_old;
   gmsh_yyviewindex = yyviewindex_old;
 
-#if defined(HAVE_FLTK)
+#if defined(HAVE_FLTK) && !defined(HAVE_NO_POST)
   if(!CTX.batch && numViewsBefore != (int)PView::list.size())
     WID->update_views();
 #endif
@@ -330,7 +337,9 @@ int MergeFile(const char *name, int warn_if_missing)
   // work out of the box.
   // GModel *m = new GModel;
 
+#if !defined(HAVE_NO_POST)
   int numViewsBefore = PView::list.size();
+#endif
 
   int status = 0;
   if(!strcmp(ext, ".stl") || !strcmp(ext, ".STL")){
@@ -359,12 +368,14 @@ int MergeFile(const char *name, int warn_if_missing)
   else if(!strcmp(ext, ".mesh") || !strcmp(ext, ".MESH")){
     status = m->readMESH(name);
   }
+#if !defined(HAVE_NO_POST)
   else if(!strcmp(ext, ".med") || !strcmp(ext, ".MED") ||
 	  !strcmp(ext, ".mmed") || !strcmp(ext, ".MMED") ||
 	  !strcmp(ext, ".rmed") || !strcmp(ext, ".RMED")){
     status = GModel::readMED(name);
     if(status > 1) status = PView::readMED(name);
   }
+#endif
   else if(!strcmp(ext, ".bdf") || !strcmp(ext, ".BDF") ||
           !strcmp(ext, ".nas") || !strcmp(ext, ".NAS")){
     status = m->readBDF(name);
@@ -403,12 +414,16 @@ int MergeFile(const char *name, int warn_if_missing)
        !strncmp(header, "$PARA", 5) || !strncmp(header, "$ELM", 4) ||
        !strncmp(header, "$MeshFormat", 11)) {
       status = m->readMSH(name);
+#if !defined(HAVE_NO_POST)
       if(status > 1) status = PView::readMSH(name);
+#endif
     }
+#if !defined(HAVE_NO_POST)
     else if(!strncmp(header, "$PostFormat", 11) || 
             !strncmp(header, "$View", 5)) {
       status = PView::readPOS(name);
     }
+#endif
     else {
       status = m->readGEO(name);
     }
@@ -419,7 +434,7 @@ int MergeFile(const char *name, int warn_if_missing)
   CTX.geom.draw = 1;
   CTX.mesh.changed = ENT_ALL;
 
-#if defined(HAVE_FLTK)
+#if defined(HAVE_FLTK) && !defined(HAVE_NO_POST)
   if(!CTX.batch && numViewsBefore != (int)PView::list.size())
     WID->update_views();
 #endif
@@ -437,9 +452,11 @@ void OpenProject(const char *name)
   CTX.threads_lock = 1;
 
   // FIXME: this will change once we clarify Open/Merge/Clear
+#if !defined(HAVE_NO_POST)
   for(int i = PView::list.size() - 1; i >= 0; i--)
     if(PView::list[i]->getData()->hasModel(GModel::current()))
       delete PView::list[i];
+#endif
   GModel::current()->destroy();
   GModel::current()->getGEOInternals()->destroy();
 
diff --git a/Post/PViewData.cpp b/Post/PViewData.cpp
index 1db74af407aab9536a34d2b22ecab86fc92ff1fc..404b3cc36686ec5ed0db6555b8b42e889d00b1f0 100644
--- a/Post/PViewData.cpp
+++ b/Post/PViewData.cpp
@@ -1,4 +1,4 @@
-// $Id: PViewData.cpp,v 1.19 2008-04-22 09:29:29 geuzaine Exp $
+// $Id: PViewData.cpp,v 1.20 2008-04-28 10:11:00 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -92,3 +92,20 @@ int PViewData::getInterpolationScheme(int type, std::vector<List_T*> &p)
   }
   return 0;
 }
+
+void PViewData::smooth()
+{
+  Msg(GERROR, "Smoothing is not implemented for this type of data");
+}
+
+bool PViewData::combineTime(nameData &nd)
+{ 
+  Msg(GERROR, "Combine time is not implemented for this type of data");
+  return false; 
+}
+
+bool PViewData::combineSpace(nameData &nd)
+{ 
+  Msg(GERROR, "Combine space is not implemented for this type of data");
+  return false; 
+}
diff --git a/Post/PViewData.h b/Post/PViewData.h
index 92a4622380d80b8bff6b5cc27916523535c7edee..a7d4aaf7bc6fb9b853fff9e2c0e2527bde3e1e9a 100644
--- a/Post/PViewData.h
+++ b/Post/PViewData.h
@@ -152,10 +152,11 @@ class PViewData {
   int getInterpolationScheme(int type, std::vector<List_T*> &p);
 
   // Smoothes the data in the view (makes it C0)
-  virtual void smooth(){}
+  virtual void smooth();
 
-  virtual bool combineTime(nameData &nd){ return false; }
-  virtual bool combineSpace(nameData &nd){ return false; }
+  // Combine time steps or elements from multiple datasets
+  virtual bool combineTime(nameData &nd);
+  virtual bool combineSpace(nameData &nd);
 
   // I/O routines
   virtual bool writeSTL(std::string fileName);
diff --git a/Post/PViewDataGModel.h b/Post/PViewDataGModel.h
index 25c08053176cf1e4751f36ee38f34552de1c74f5..94e17631d67fbe0e61b4a5bf1ef6401908de6141 100644
--- a/Post/PViewDataGModel.h
+++ b/Post/PViewDataGModel.h
@@ -192,11 +192,10 @@ class PViewDataGModel : public PViewData {
   // direct access to value by index
   bool getValueByIndex(int step, int dataIndex, int node, int comp, double &val);
 
-  // Add some data "on the fly"
-  // data are stored by vertex, i.e., if field has let's say 3 components,
-  // nodalData contains 3 * N entries with N being the number of mesh vertices 
-  // of in the model.
-  // nodlaData [ iVer * N + jComp] is the jComp th component at vertex iVer
+  // Add some data "on the fly" (data is stored by vertex: if a field
+  // has e.g. 3 components, nodalData contains 3 * N entries with N
+  // being the number of mesh vertices in the model ; nodalData [ iVer
+  // * N + jComp] is the jComp-th component at vertex iVer)
   bool addNodalData(int step, double time, int partition, 
 		    int numComp, const std::vector<double> &nodalData);
 
diff --git a/Post/PViewDataGModelIO.cpp b/Post/PViewDataGModelIO.cpp
index 66b296388e82a509b091e7c020e4096c39b410ac..9a71fa5b3752f99be87b0125239ff5f22b163408 100644
--- a/Post/PViewDataGModelIO.cpp
+++ b/Post/PViewDataGModelIO.cpp
@@ -1,4 +1,4 @@
-// $Id: PViewDataGModelIO.cpp,v 1.43 2008-04-22 10:02:44 remacle Exp $
+// $Id: PViewDataGModelIO.cpp,v 1.44 2008-04-28 10:11:00 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -30,30 +30,26 @@
 #include "Numeric.h"
 #include "StringUtils.h"
 
-bool PViewDataGModel::addNodalData(int step, 
-				   double time, 
-				   int partition, 
-				   int numComp, 
-				   const std::vector<double> &nodalData){
+bool PViewDataGModel::addNodalData(int step, double time, int partition, 
+				   int numComp, const std::vector<double> &nodalData)
+{
   // add empty steps up to the actual step 
   while(step >= (int)_steps.size())
     _steps.push_back(new stepData<double>(GModel::current(), numComp));
-
-  const int mult = 1;
+  
   int numEnt = _steps[step]->getModel()->getNumMeshVertices();
-  if (nodalData.size() != numEnt * numComp){
+  if(nodalData.size() != numEnt * numComp){
     Msg(GERROR, "adding nodal data with wrong number of entries (%d != %d)", 
 	nodalData.size(), numEnt);
     return false;
   }
-
+  
   _steps[step]->setTime(time);
   _steps[step]->resizeData(numEnt);
-
+  
   for(int i = 0; i < numEnt; i++){
-    //    MVertex *v = _steps[step]->getModel()->getMeshVertexByTag(i);
-    double *d  = _steps[step]->getData(i, true, 1);
-    for(int j = 0; j < numComp * mult; j++)
+    double *d  = _steps[step]->getData(i, true);
+    for(int j = 0; j < numComp; j++)
       d[j] = nodalData[i * numComp + j];
   }
   _partitions.insert(partition);
@@ -61,7 +57,6 @@ bool PViewDataGModel::addNodalData(int step,
   return true;
 }
 
-
 bool PViewDataGModel::readMSH(std::string fileName, int fileIndex, FILE *fp,
                               bool binary, bool swap, int step, double time, 
                               int partition, int numComp, int numEnt)
diff --git a/configure b/configure
index 0bae233ea2d2a1331d4bf2226496c757d4c42324..3cc96ef72bb4c4882d107f30daca9cdcb535dff8 100755
--- a/configure
+++ b/configure
@@ -1265,6 +1265,7 @@ Optional Features:
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
   --enable-gsl            use GSL as numerical toolkit (default=yes)
   --enable-gui            build the graphical user interface (default=yes)
+  --enable-post           build the post-processing module (default=yes)
   --enable-cygwin         use the Cygwin library on Windows (default=no)
   --enable-parallel       enable parallel version (default=no)
   --enable-jpeg           enable JPEG support (default=yes)
@@ -1836,6 +1837,11 @@ if test "${enable_gui+set}" = set; then
   enableval=$enable_gui;
 fi
 
+# Check whether --enable-post was given.
+if test "${enable_post+set}" = set; then
+  enableval=$enable_post;
+fi
+
 # Check whether --enable-cygwin was given.
 if test "${enable_cygwin+set}" = set; then
   enableval=$enable_cygwin;
@@ -3625,11 +3631,9 @@ echo "$as_me: error: Could not find the library archiver, aborting." >&2;}
     ;;
 esac
 
-GMSH_DIRS="Common DataStr Geo Mesh Post Numeric Parallel Parser Plugin"
-
 if test "x$enable_gui" != "xno"; then
 
-  GMSH_DIRS="${GMSH_DIRS} Graphics Fltk"
+  GMSH_DIRS="Common DataStr Geo Mesh Post Numeric Parallel Parser Plugin Graphics Fltk"
   GMSH_LIBS="-Llib -lGmshFltk -lGmshParser -lGmshGraphics -lGmshPlugin"
   GMSH_LIBS="${GMSH_LIBS} -lGmshMesh -lGmshGeo -lGmshPost -lGmshCommon"
   GMSH_LIBS="${GMSH_LIBS} -lGmshDataStr -lGmshNumeric -lGmshParallel"
@@ -4090,10 +4094,18 @@ fi
 
 else
 
-  GMSH_DIRS="${GMSH_DIRS} Box"
-  GMSH_LIBS="-Llib Box/Main.o -lGmshBox -lGmshParser -lGmshPlugin"
-  GMSH_LIBS="${GMSH_LIBS} -lGmshGeo -lGmshMesh -lGmshPost -lGmshCommon"
-  GMSH_LIBS="${GMSH_LIBS} -lGmshDataStr -lGmshNumeric -lGmshParallel"
+  if test "x$enable_post" != "xno"; then
+    GMSH_DIRS="Common DataStr Geo Mesh Post Numeric Parallel Parser Plugin Box"
+    GMSH_LIBS="-Llib Box/Main.o -lGmshBox -lGmshParser -lGmshPlugin"
+    GMSH_LIBS="${GMSH_LIBS} -lGmshGeo -lGmshMesh -lGmshPost -lGmshCommon"
+    GMSH_LIBS="${GMSH_LIBS} -lGmshDataStr -lGmshNumeric -lGmshParallel"
+  else
+    GMSH_DIRS="Common DataStr Geo Mesh Numeric Parallel Parser Box"
+    GMSH_LIBS="-Llib Box/Main.o -lGmshBox -lGmshParser"
+    GMSH_LIBS="${GMSH_LIBS} -lGmshGeo -lGmshMesh -lGmshCommon"
+    GMSH_LIBS="${GMSH_LIBS} -lGmshDataStr -lGmshNumeric -lGmshParallel"
+    FLAGS="-DHAVE_NO_POST ${FLAGS}"
+  fi
 
     ZLIB=""
   if test "x$enable_zlib" != "xno"; then
@@ -6868,7 +6880,7 @@ if test $ac_cv_sizeof_size_t != 4; then
     { echo "$as_me:$LINENO: WARNING: Unsupported size of size_t - this may affect FNV hashing." >&5
 echo "$as_me: WARNING: Unsupported size of size_t - this may affect FNV hashing." >&2;}
   else
-    FLAGS="$FLAGS -DHAVE_64BIT_SIZE_T"
+    FLAGS="${FLAGS} -DHAVE_64BIT_SIZE_T"
   fi
 fi
 
diff --git a/configure.in b/configure.in
index 008462e5625e1bedfd0969ae700c60027c10ad3b..5b88acedb60a3f9151fe35fecf64894207ecef06 100644
--- a/configure.in
+++ b/configure.in
@@ -1,4 +1,4 @@
-dnl $Id: configure.in,v 1.153 2008-04-23 20:49:41 geuzaine Exp $
+dnl $Id: configure.in,v 1.154 2008-04-28 10:10:51 geuzaine Exp $
 dnl
 dnl Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 dnl
@@ -89,6 +89,9 @@ AC_ARG_ENABLE(gsl,
 AC_ARG_ENABLE(gui,
               AC_HELP_STRING([--enable-gui],
                              [build the graphical user interface (default=yes)]))
+AC_ARG_ENABLE(post,
+              AC_HELP_STRING([--enable-post],
+                             [build the post-processing module (default=yes)]))
 AC_ARG_ENABLE(cygwin,
               AC_HELP_STRING([--enable-cygwin],
                              [use the Cygwin library on Windows (default=no)]))
@@ -199,13 +202,10 @@ case "$UNAME" in
     ;;
 esac
 
-dnl Set default subdirectories and libraries
-GMSH_DIRS="Common DataStr Geo Mesh Post Numeric Parallel Parser Plugin"
-
 dnl Choose blackbox or GUI version
 if test "x$enable_gui" != "xno"; then
 
-  GMSH_DIRS="${GMSH_DIRS} Graphics Fltk"
+  GMSH_DIRS="Common DataStr Geo Mesh Post Numeric Parallel Parser Plugin Graphics Fltk"
   GMSH_LIBS="-Llib -lGmshFltk -lGmshParser -lGmshGraphics -lGmshPlugin"
   GMSH_LIBS="${GMSH_LIBS} -lGmshMesh -lGmshGeo -lGmshPost -lGmshCommon"
   GMSH_LIBS="${GMSH_LIBS} -lGmshDataStr -lGmshNumeric -lGmshParallel"
@@ -334,10 +334,18 @@ if test "x$enable_gui" != "xno"; then
 
 else
 
-  GMSH_DIRS="${GMSH_DIRS} Box"
-  GMSH_LIBS="-Llib Box/Main.o -lGmshBox -lGmshParser -lGmshPlugin"
-  GMSH_LIBS="${GMSH_LIBS} -lGmshGeo -lGmshMesh -lGmshPost -lGmshCommon"
-  GMSH_LIBS="${GMSH_LIBS} -lGmshDataStr -lGmshNumeric -lGmshParallel"
+  if test "x$enable_post" != "xno"; then
+    GMSH_DIRS="Common DataStr Geo Mesh Post Numeric Parallel Parser Plugin Box"
+    GMSH_LIBS="-Llib Box/Main.o -lGmshBox -lGmshParser -lGmshPlugin"
+    GMSH_LIBS="${GMSH_LIBS} -lGmshGeo -lGmshMesh -lGmshPost -lGmshCommon"
+    GMSH_LIBS="${GMSH_LIBS} -lGmshDataStr -lGmshNumeric -lGmshParallel"
+  else
+    GMSH_DIRS="Common DataStr Geo Mesh Numeric Parallel Parser Box"
+    GMSH_LIBS="-Llib Box/Main.o -lGmshBox -lGmshParser"
+    GMSH_LIBS="${GMSH_LIBS} -lGmshGeo -lGmshMesh -lGmshCommon"
+    GMSH_LIBS="${GMSH_LIBS} -lGmshDataStr -lGmshNumeric -lGmshParallel"
+    FLAGS="-DHAVE_NO_POST ${FLAGS}"
+  fi
 
   dnl Check for libz
   ZLIB=""
@@ -779,14 +787,13 @@ case "$UNAME" in
 
 esac
 
-dnl Compiler characteristics
 dnl Check sizeof size_t (flag as 64 if not 32)
 AC_CHECK_SIZEOF([size_t])
 if test $ac_cv_sizeof_size_t != 4; then
   if test $ac_cv_sizeof_size_t != 8; then
     AC_MSG_WARN([Unsupported size of size_t - this may affect FNV hashing.])
   else
-    FLAGS="$FLAGS -DHAVE_64BIT_SIZE_T"
+    FLAGS="${FLAGS} -DHAVE_64BIT_SIZE_T"
   fi
 fi
 
diff --git a/lib/Makefile b/lib/Makefile
index 7f5b8097ac45443f5ff2061187a880e638b937f0..4d3cb323887363c677b96734c6c39dd10c5fd50e 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.12 2008-02-17 08:48:12 geuzaine Exp $
+# $Id: Makefile,v 1.13 2008-04-28 10:11:01 geuzaine Exp $
 #
 # Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 #
@@ -20,5 +20,6 @@
 # Please report all bugs and problems to <gmsh@geuz.org>.
 
 clean:
-	rm -f *.a
+	rm -f *.a *.lib
+