[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10. Programming notes

Gmsh was originally written in C, and later enhanced with various C++ additions. The resulting code is a hybrid C/C++ beast, hopefully not too badly structured... The scripting language is parsed using Lex and Yacc (actually, Flex and Bison), while the GUI relies on OpenGL for the 3D graphics and FLTK for the widget set. See http://www.opengl.org, http://www.mesa3d.org and http://www.fltk.org for more information.

Gmsh's build system is based on autoconf, and should work on most modern platforms providing standard compliant C and C++ compilers. Practical notes on how to compile Gmsh's source code are included in the distribution. See B. Frequently asked questions, for more information.

10.1 Coding style  
10.2 Option handling  


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.1 Coding style

If you plan to contribute code to the Gmsh project, here are some easy rules to make the code easy to read/debug/maintain:

  1. please enable full warnings for your compiler (e.g., add -Wall to FLAGS in the `variables' file);
  2. always use the Msg() function to print information, errors, ...;
  3. indent your files using `utils/misc/indent.sh';


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.2 Option handling

To add a new option in Gmsh:

  1. create the option in the Context_T class (`Common/Context.h') if it's a classical option, or in the Post_View class (`Common/View.h') if it's a post-processing view-dependent option;
  2. in `Common/DefaultOptions.h', give a name (for the parser to be able to access it), a reference to a handling routine (i.e. opt_XXX) and a default value for this option;
  3. create the handling routine opt_XXX in `Common/Options.cpp' (and add the prototype in `Common/Options.h');
  4. optional: create the associated widget in `Fltk/GUI.cpp';
  5. optional: if no special callback is to be associated with the widget, add the handling routine opt_XXX to the OK callback for the corresponding option panel (in `Fltk/Callbacks.cpp').


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

Back to geuz.org/gmsh