[pktools] 43/375: converted all apps for new Optionpk.h

Bas Couwenberg sebastic at xs4all.nl
Wed Dec 3 21:53:56 UTC 2014


This is an automated email from the git hooks/post-receive script.

sebastic-guest pushed a commit to branch upstream-master
in repository pktools.

commit 48453a50c9d52236dcf8aa610bf03c4f4580f928
Author: user <user at osgeolive.(none)>
Date:   Mon Jan 28 11:55:33 2013 +0100

    converted all apps for new Optionpk.h
---
 src/apps/pkascii2img.cc    |  63 ++++++++-------------
 src/apps/pkascii2ogr.cc    |  58 +++++++-------------
 src/apps/pkclassify_nn.cc  | 104 ++++++++++++++---------------------
 src/apps/pkclassify_svm.cc |   2 -
 src/apps/pkcreatect.cc     |  60 +++++++-------------
 src/apps/pkcrop.cc         |  81 ++++++++++-----------------
 src/apps/pkdiff.cc         |  78 ++++++++++----------------
 src/apps/pkdsm2shadow.cc   |  57 ++++++-------------
 src/apps/pkdumpimg.cc      |  64 ++++++++--------------
 src/apps/pkdumpogr.cc      |  48 +++++-----------
 src/apps/pkegcs.cc         |  50 ++++++-----------
 src/apps/pkextract.cc      |  84 +++++++++++-----------------
 src/apps/pkfillnodata.cc   |  48 +++++-----------
 src/apps/pkfilter.cc       |  74 +++++++++----------------
 src/apps/pkfs_svm.cc       |  93 ++++++++++++-------------------
 src/apps/pkgetmask.cc      |  63 +++++++--------------
 src/apps/pklas2img.cc      |  95 +++++++++++++-------------------
 src/apps/pkmosaic.cc       |  93 ++++++++++++-------------------
 src/apps/pkndvi.cc         |  64 ++++++++--------------
 src/apps/pkopt_svm.cc      |  92 ++++++++++++-------------------
 src/apps/pkreclass.cc      |  66 ++++++++--------------
 src/apps/pksensormodel.cc  | 125 ++++++++++++++++++------------------------
 src/apps/pksetmask.cc      |  58 ++++++--------------
 src/apps/pksieve.cc        |  49 +++++------------
 src/apps/pkstat.cc         |  81 ++++++++++-----------------
 src/apps/pkstatogr.cc      |  56 ++++++-------------
 src/base/Optionpk.h        | 134 ++++++++++++++++++++++++++++-----------------
 27 files changed, 724 insertions(+), 1216 deletions(-)

diff --git a/src/apps/pkascii2img.cc b/src/apps/pkascii2img.cc
index 03caf61..1b51861 100644
--- a/src/apps/pkascii2img.cc
+++ b/src/apps/pkascii2img.cc
@@ -23,22 +23,9 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 #include <assert.h>
 #include "imageclasses/ImgWriterGdal.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
 
 int main(int argc, char *argv[])
 {
-  std::string versionString="version ";
-  versionString+=VERSION;
-  versionString+=", Copyright (C) 2008-2012 Pieter Kempeneers.\n\
-   This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n\
-   This is free software, and you are welcome to redistribute it\n\
-   under certain conditions; use option --license for details.";
-  Optionpk<bool> version_opt("\0","version",versionString,false);
-  Optionpk<bool> license_opt("lic","license","show license information",false);
-  Optionpk<bool> help_opt("h","help","shows this help info",false);
-  Optionpk<bool> todo_opt("\0","todo","introduce -uli -ulj to crop based on image coordinates",false);
   Optionpk<std::string> input_opt("i","input","input ASCII file");
   Optionpk<string> output_opt("o", "output", "Output image file");
   Optionpk<string> dataType_opt("ot", "otype", "Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image","Byte");
@@ -53,38 +40,32 @@ int main(int argc, char *argv[])
   Optionpk<string> description_opt("d", "description", "Set image description");
   Optionpk<bool> verbose_opt("v", "verbose", "verbose (false)", false);
 
-  version_opt.retrieveOption(argc,argv);
-  license_opt.retrieveOption(argc,argv);
-  help_opt.retrieveOption(argc,argv);
-  todo_opt.retrieveOption(argc,argv);
-
-  if(version_opt[0]||todo_opt[0]){
-    cout << version_opt.getHelp() << endl;
-    cout << "todo: " << todo_opt.getHelp() << endl;
-    exit(0);
+  bool doProcess;//stop process when program was invoked with help option (-h --help)
+  try{
+    doProcess=input_opt.retrieveOption(argc,argv);
+    input_opt.retrieveOption(argc,argv);
+    output_opt.retrieveOption(argc,argv);
+    dataType_opt.retrieveOption(argc,argv);
+    imageType_opt.retrieveOption(argc,argv);
+    option_opt.retrieveOption(argc,argv);
+    ulx_opt.retrieveOption(argc,argv);
+    uly_opt.retrieveOption(argc,argv);
+    dx_opt.retrieveOption(argc,argv);
+    dy_opt.retrieveOption(argc,argv);
+    colorTable_opt.retrieveOption(argc,argv);
+    projection_opt.retrieveOption(argc,argv);
+    description_opt.retrieveOption(argc,argv);
+    verbose_opt.retrieveOption(argc,argv);
   }
-  if(license_opt[0]){
-    cout << Optionpk<bool>::getGPLv3License() << endl;
+  catch(string predefinedString){
+    std::cout << predefinedString << std::endl;
     exit(0);
   }
-  input_opt.retrieveOption(argc,argv);
-  output_opt.retrieveOption(argc,argv);
-  dataType_opt.retrieveOption(argc,argv);
-  imageType_opt.retrieveOption(argc,argv);
-  option_opt.retrieveOption(argc,argv);
-  ulx_opt.retrieveOption(argc,argv);
-  uly_opt.retrieveOption(argc,argv);
-  dx_opt.retrieveOption(argc,argv);
-  dy_opt.retrieveOption(argc,argv);
-  colorTable_opt.retrieveOption(argc,argv);
-  projection_opt.retrieveOption(argc,argv);
-  description_opt.retrieveOption(argc,argv);
-  verbose_opt.retrieveOption(argc,argv);
-
-  if(help_opt[0]){
-    cout << "usage: pkascii2img -i asciifile -o imgfile [OPTIONS]" << endl;
-    exit(0);
+  if(!doProcess){
+    std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+    exit(0);//help was invoked, stop processing
   }
+
   assert(input_opt.size());
   assert(output_opt.size());
   ImgWriterGdal imgWriter;
diff --git a/src/apps/pkascii2ogr.cc b/src/apps/pkascii2ogr.cc
index 6ab9c2c..60791ba 100644
--- a/src/apps/pkascii2ogr.cc
+++ b/src/apps/pkascii2ogr.cc
@@ -23,22 +23,8 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 #include "base/Optionpk.h"
 #include "imageclasses/ImgWriterOgr.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 int main(int argc, char *argv[])
 {
-  std::string versionString="version ";
-  versionString+=VERSION;
-  versionString+=", Copyright (C) 2008-2012 Pieter Kempeneers.\n\
-   This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n\
-   This is free software, and you are welcome to redistribute it\n\
-   under certain conditions; use option --license for details.";
-  Optionpk<bool> version_opt("\0","version",versionString,false);
-  Optionpk<bool> license_opt("lic","license","show license information",false);
-  Optionpk<bool> todo_opt("\0","todo","",false);
-  Optionpk<bool> help_opt("h","help","shows this help info",false);
   Optionpk<string> input_opt("i","input","Input ASCII file");
   Optionpk<string> output_opt("o", "output", "Output file");
   Optionpk<short> colX_opt("x", "x", "column number of x (0)", 0);
@@ -51,34 +37,28 @@ int main(int argc, char *argv[])
   Optionpk<char> fs_opt("fs","fs","field separator.",' ');
   Optionpk<int> verbose_opt("v", "verbose", "verbose (0)", 0);
 
-  version_opt.retrieveOption(argc,argv);
-  license_opt.retrieveOption(argc,argv);
-  help_opt.retrieveOption(argc,argv);
-  todo_opt.retrieveOption(argc,argv);
-  input_opt.retrieveOption(argc,argv);
-  output_opt.retrieveOption(argc,argv);
-  colX_opt.retrieveOption(argc,argv);
-  colY_opt.retrieveOption(argc,argv);
-  polygon_opt.retrieveOption(argc,argv);
-  fname_opt.retrieveOption(argc,argv);
-  ftype_opt.retrieveOption(argc,argv);
-  itype_opt.retrieveOption(argc,argv);
-  projection_opt.retrieveOption(argc,argv);
-  fs_opt.retrieveOption(argc,argv);
-  verbose_opt.retrieveOption(argc,argv);
-
-  if(version_opt[0]){
-    cout << version_opt.getHelp() << endl;
-    exit(0);
+  bool doProcess;//stop process when program was invoked with help option (-h --help)
+  try{
+    doProcess=input_opt.retrieveOption(argc,argv);
+    input_opt.retrieveOption(argc,argv);
+    output_opt.retrieveOption(argc,argv);
+    colX_opt.retrieveOption(argc,argv);
+    colY_opt.retrieveOption(argc,argv);
+    polygon_opt.retrieveOption(argc,argv);
+    fname_opt.retrieveOption(argc,argv);
+    ftype_opt.retrieveOption(argc,argv);
+    itype_opt.retrieveOption(argc,argv);
+    projection_opt.retrieveOption(argc,argv);
+    fs_opt.retrieveOption(argc,argv);
+    verbose_opt.retrieveOption(argc,argv);
   }
-  if(license_opt[0]){
-    cout << Optionpk<bool>::getGPLv3License() << endl;
+  catch(string predefinedString){
+    std::cout << predefinedString << std::endl;
     exit(0);
   }
-
-  if(help_opt[0]){
-    cout << "usage: pksensormodel -i asciifile [OPTIONS]" << endl;
-    exit(0);
+  if(!doProcess){
+    std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+    exit(0);//help was invoked, stop processing
   }
 
   string theProjection;
diff --git a/src/apps/pkclassify_nn.cc b/src/apps/pkclassify_nn.cc
index a8574d1..afcd750 100644
--- a/src/apps/pkclassify_nn.cc
+++ b/src/apps/pkclassify_nn.cc
@@ -30,10 +30,6 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 #include "floatfann.h"
 #include "myfann_cpp.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 void reclass(const vector<float>& result, const vector<int>& vreclass, const vector<double>& priors, unsigned short aggregation, vector<float>& theResultReclass);
 
 void reclass(const vector<float>& result, const vector<int>& vreclass, const vector<double>& priors, unsigned short aggregation, vector<float>& theResultReclass){
@@ -87,17 +83,6 @@ int main(int argc, char *argv[])
   vector<double> priorsReclass;
   
   //--------------------------- command line options ------------------------------------
-
-  std::string versionString="version ";
-  versionString+=VERSION;
-  versionString+=", Copyright (C) 2008-2012 Pieter Kempeneers.\n\
-   This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n\
-   This is free software, and you are welcome to redistribute it\n\
-   under certain conditions; use option --license for details.";
-  Optionpk<bool> version_opt("\0","version",versionString,false);
-  Optionpk<bool> license_opt("lic","license","show license information",false);
-  Optionpk<bool> help_opt("h","help","shows this help info",false);
-  Optionpk<bool> todo_opt("\0","todo","",false);
   Optionpk<string> input_opt("i", "input", "input image"); 
   Optionpk<string> training_opt("t", "training", "training shape file. A single shape file contains all training features (must be set as: B0, B1, B2,...) for all classes (class numbers identified by label option). Use multiple training files for bootstrap aggregation (alternative to the bag and bsize options, where a random subset is taken from a single training file)"); 
   Optionpk<string> label_opt("label", "label", "identifier for class label in training shape file.","label"); 
@@ -132,57 +117,50 @@ int main(int argc, char *argv[])
   Optionpk<string> prob_opt("\0", "prob", "probability image. Default is no probability image"); 
   Optionpk<short> verbose_opt("v", "verbose", "set to: 0 (results only), 1 (confusion matrix), 2 (debug)",0);
 
-  version_opt.retrieveOption(argc,argv);
-  license_opt.retrieveOption(argc,argv);
-  help_opt.retrieveOption(argc,argv);
-  todo_opt.retrieveOption(argc,argv);
-
-  input_opt.retrieveOption(argc,argv);
-  training_opt.retrieveOption(argc,argv);
-  label_opt.retrieveOption(argc,argv);
-  reclass_opt.retrieveOption(argc,argv);
-  balance_opt.retrieveOption(argc,argv);
-  minSize_opt.retrieveOption(argc,argv);
-  start_opt.retrieveOption(argc,argv);
-  end_opt.retrieveOption(argc,argv);
-  band_opt.retrieveOption(argc,argv);
-  offset_opt.retrieveOption(argc,argv);
-  scale_opt.retrieveOption(argc,argv);
-  aggreg_opt.retrieveOption(argc,argv);
-  priors_opt.retrieveOption(argc,argv);
-  cv_opt.retrieveOption(argc,argv);
-  nneuron_opt.retrieveOption(argc,argv);
-  connection_opt.retrieveOption(argc,argv);
-  weights_opt.retrieveOption(argc,argv);
-  learning_opt.retrieveOption(argc,argv);
-  maxit_opt.retrieveOption(argc,argv);
-  comb_opt.retrieveOption(argc,argv);
-  bag_opt.retrieveOption(argc,argv);
-  bagSize_opt.retrieveOption(argc,argv);
-  classBag_opt.retrieveOption(argc,argv);
-  mask_opt.retrieveOption(argc,argv);
-  maskValue_opt.retrieveOption(argc,argv);
-  flag_opt.retrieveOption(argc,argv);
-  output_opt.retrieveOption(argc,argv);
-  otype_opt.retrieveOption(argc,argv);
-  oformat_opt.retrieveOption(argc,argv);
-  colorTable_opt.retrieveOption(argc,argv);
-  option_opt.retrieveOption(argc,argv);
-  prob_opt.retrieveOption(argc,argv);
-  verbose_opt.retrieveOption(argc,argv);
-
-  if(version_opt[0]||todo_opt[0]){
-    cout << version_opt.getHelp() << endl;
-    cout << "todo: " << todo_opt.getHelp() << endl;
-    exit(0);
+  bool doProcess;//stop process when program was invoked with help option (-h --help)
+  try{
+    doProcess=input_opt.retrieveOption(argc,argv);
+    input_opt.retrieveOption(argc,argv);
+    training_opt.retrieveOption(argc,argv);
+    label_opt.retrieveOption(argc,argv);
+    reclass_opt.retrieveOption(argc,argv);
+    balance_opt.retrieveOption(argc,argv);
+    minSize_opt.retrieveOption(argc,argv);
+    start_opt.retrieveOption(argc,argv);
+    end_opt.retrieveOption(argc,argv);
+    band_opt.retrieveOption(argc,argv);
+    offset_opt.retrieveOption(argc,argv);
+    scale_opt.retrieveOption(argc,argv);
+    aggreg_opt.retrieveOption(argc,argv);
+    priors_opt.retrieveOption(argc,argv);
+    cv_opt.retrieveOption(argc,argv);
+    nneuron_opt.retrieveOption(argc,argv);
+    connection_opt.retrieveOption(argc,argv);
+    weights_opt.retrieveOption(argc,argv);
+    learning_opt.retrieveOption(argc,argv);
+    maxit_opt.retrieveOption(argc,argv);
+    comb_opt.retrieveOption(argc,argv);
+    bag_opt.retrieveOption(argc,argv);
+    bagSize_opt.retrieveOption(argc,argv);
+    classBag_opt.retrieveOption(argc,argv);
+    mask_opt.retrieveOption(argc,argv);
+    maskValue_opt.retrieveOption(argc,argv);
+    flag_opt.retrieveOption(argc,argv);
+    output_opt.retrieveOption(argc,argv);
+    otype_opt.retrieveOption(argc,argv);
+    oformat_opt.retrieveOption(argc,argv);
+    colorTable_opt.retrieveOption(argc,argv);
+    option_opt.retrieveOption(argc,argv);
+    prob_opt.retrieveOption(argc,argv);
+    verbose_opt.retrieveOption(argc,argv);
   }
-  if(license_opt[0]){
-    cout << Optionpk<bool>::getGPLv3License() << endl;
+  catch(string predefinedString){
+    std::cout << predefinedString << std::endl;
     exit(0);
   }
-  if(help_opt[0]){
-    cout << "usage: pkclassify_nn -i testimage -o outputimage -t training [OPTIONS]" << endl;
-    exit(0);
+  if(!doProcess){
+    std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+    exit(0);//help was invoked, stop processing
   }
 
   if(verbose_opt[0]>=1){
diff --git a/src/apps/pkclassify_svm.cc b/src/apps/pkclassify_svm.cc
index e35bc40..db3b615 100644
--- a/src/apps/pkclassify_svm.cc
+++ b/src/apps/pkclassify_svm.cc
@@ -17,7 +17,6 @@ GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 ***********************************************************************/
-
 #include <vector>
 #include <map>
 #include <algorithm>
@@ -86,7 +85,6 @@ int main(int argc, char *argv[])
   vector<double> priorsReclass;
   
   //--------------------------- command line options ------------------------------------
-
   Optionpk<string> input_opt("i", "input", "input image"); 
   Optionpk<string> training_opt("t", "training", "training shape file. A single shape file contains all training features (must be set as: B0, B1, B2,...) for all classes (class numbers identified by label option). Use multiple training files for bootstrap aggregation (alternative to the bag and bsize options, where a random subset is taken from a single training file)"); 
   Optionpk<string> label_opt("label", "label", "identifier for class label in training shape file.","label"); 
diff --git a/src/apps/pkcreatect.cc b/src/apps/pkcreatect.cc
index b911e30..c880cce 100644
--- a/src/apps/pkcreatect.cc
+++ b/src/apps/pkcreatect.cc
@@ -22,10 +22,6 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 #include "imageclasses/ImgWriterGdal.h"
 #include "base/Optionpk.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 using namespace std;
 
 int main(int argc,char **argv) {
@@ -34,16 +30,6 @@ int main(int argc,char **argv) {
   short green=-1;
   short blue=-1;
 
-  std::string versionString="version ";
-  versionString+=VERSION;
-  versionString+=", Copyright (C) 2008-2012 Pieter Kempeneers.\n\
-   This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n\
-   This is free software, and you are welcome to redistribute it\n\
-   under certain conditions; use option --license for details.";
-  Optionpk<bool> version_opt("\0","version",versionString,false);
-  Optionpk<bool> license_opt("lic","license","show license information",false);
-  Optionpk<bool> help_opt("h","help","shows this help info",false);
-  Optionpk<bool> todo_opt("\0","todo","",false);
   Optionpk<string>  input_opt("i", "input", "Input image file", "");
   Optionpk<string>  output_opt("o", "output", "Output image file", "");
   Optionpk<string>  legend_opt("l", "legend", "Create legend as png file", "");
@@ -57,36 +43,28 @@ int main(int argc,char **argv) {
   Optionpk<string>  description_opt("d", "description", "Set image description", "");
   Optionpk<bool>  verbose_opt("v", "verbose", "verbose", false);
 
-  version_opt.retrieveOption(argc,argv);
-  license_opt.retrieveOption(argc,argv);
-  help_opt.retrieveOption(argc,argv);
-  todo_opt.retrieveOption(argc,argv);
-
-  if(version_opt[0]||todo_opt[0]){
-    cout << version_opt.getHelp() << endl;
-    cout << "todo: " << todo_opt.getHelp() << endl;
-    exit(0);
+  bool doProcess;//stop process when program was invoked with help option (-h --help)
+  try{
+    doProcess=input_opt.retrieveOption(argc,argv);
+    output_opt.retrieveOption(argc,argv);
+    legend_opt.retrieveOption(argc,argv);
+    dim_opt.retrieveOption(argc,argv);
+    min_opt.retrieveOption(argc,argv);
+    max_opt.retrieveOption(argc,argv);
+    grey_opt.retrieveOption(argc,argv);
+    colorTable_opt.retrieveOption(argc,argv);
+    description_opt.retrieveOption(argc,argv);
+    oformat_opt.retrieveOption(argc,argv);
+    option_opt.retrieveOption(argc,argv);
+    verbose_opt.retrieveOption(argc,argv);
   }
-  if(license_opt[0]){
-    cout << Optionpk<bool>::getGPLv3License() << endl;
+  catch(string predefinedString){
+    std::cout << predefinedString << std::endl;
     exit(0);
   }
-  input_opt.retrieveOption(argc,argv);
-  output_opt.retrieveOption(argc,argv);
-  legend_opt.retrieveOption(argc,argv);
-  dim_opt.retrieveOption(argc,argv);
-  min_opt.retrieveOption(argc,argv);
-  max_opt.retrieveOption(argc,argv);
-  grey_opt.retrieveOption(argc,argv);
-  colorTable_opt.retrieveOption(argc,argv);
-  description_opt.retrieveOption(argc,argv);
-  oformat_opt.retrieveOption(argc,argv);
-  option_opt.retrieveOption(argc,argv);
-  verbose_opt.retrieveOption(argc,argv);
-
-  if(help_opt[0]){
-    cout << "usage: pkcreatect [OPTIONS]" << endl;
-    exit(0);
+  if(!doProcess){
+    std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+    exit(0);//help was invoked, stop processing
   }
 
   GDALColorTable colorTable;
diff --git a/src/apps/pkcrop.cc b/src/apps/pkcrop.cc
index 263f0ca..6a4e71b 100644
--- a/src/apps/pkcrop.cc
+++ b/src/apps/pkcrop.cc
@@ -28,22 +28,8 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 #include "base/Optionpk.h"
 #include "algorithms/Egcs.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 int main(int argc, char *argv[])
 {
-  std::string versionString="version ";
-  versionString+=VERSION;
-  versionString+=", Copyright (C) 2008-2012 Pieter Kempeneers.\n\
-   This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n\
-   This is free software, and you are welcome to redistribute it\n\
-   under certain conditions; use option --license for details.";
-  Optionpk<bool> version_opt("\0","version",versionString,false);
-  Optionpk<bool> license_opt("lic","license","show license information",false);
-  Optionpk<bool> help_opt("h","help","shows this help info",false);
-  Optionpk<bool> todo_opt("\0","todo","",false);
   Optionpk<string>  input_opt("i", "input", "Input image file(s). If input contains multiple images, a multi-band output is created", "");
   Optionpk<string>  output_opt("o", "output", "Output image file", "");
   Optionpk<string>  projection_opt("p", "projection", "projection in EPSG format (leave blank to copy from input file, use EPSG:3035 to use European projection and to force to European grid", "");
@@ -67,46 +53,39 @@ int main(int argc, char *argv[])
   Optionpk<string>  description_opt("d", "description", "Set image description", "");
   Optionpk<bool>  verbose_opt("v", "verbose", "verbose", false);
 
-  version_opt.retrieveOption(argc,argv);
-  license_opt.retrieveOption(argc,argv);
-  help_opt.retrieveOption(argc,argv);
-  todo_opt.retrieveOption(argc,argv);
-
-  input_opt.retrieveOption(argc,argv);
-  output_opt.retrieveOption(argc,argv);
-  projection_opt.retrieveOption(argc,argv);
-  extent_opt.retrieveOption(argc,argv);
-  mask_opt.retrieveOption(argc,argv);
-  ulx_opt.retrieveOption(argc,argv);
-  uly_opt.retrieveOption(argc,argv);
-  lrx_opt.retrieveOption(argc,argv);
-  lry_opt.retrieveOption(argc,argv);
-  band_opt.retrieveOption(argc,argv);
-  scale_opt.retrieveOption(argc,argv);
-  offset_opt.retrieveOption(argc,argv);
-  otype_opt.retrieveOption(argc,argv);
-  oformat_opt.retrieveOption(argc,argv);
-  colorTable_opt.retrieveOption(argc,argv);
-  dx_opt.retrieveOption(argc,argv);
-  dy_opt.retrieveOption(argc,argv);
-  option_opt.retrieveOption(argc,argv);
-  flag_opt.retrieveOption(argc,argv);
-  resample_opt.retrieveOption(argc,argv);
-  description_opt.retrieveOption(argc,argv);
-  verbose_opt.retrieveOption(argc,argv);
-
-  if(version_opt[0]||todo_opt[0]){
-    cout << version_opt.getHelp() << endl;
-    cout << "todo: " << todo_opt.getHelp() << endl;
-    exit(0);
+  bool doProcess;//stop process when program was invoked with help option (-h --help)
+  try{
+    doProcess=input_opt.retrieveOption(argc,argv);
+    input_opt.retrieveOption(argc,argv);
+    output_opt.retrieveOption(argc,argv);
+    projection_opt.retrieveOption(argc,argv);
+    extent_opt.retrieveOption(argc,argv);
+    mask_opt.retrieveOption(argc,argv);
+    ulx_opt.retrieveOption(argc,argv);
+    uly_opt.retrieveOption(argc,argv);
+    lrx_opt.retrieveOption(argc,argv);
+    lry_opt.retrieveOption(argc,argv);
+    band_opt.retrieveOption(argc,argv);
+    scale_opt.retrieveOption(argc,argv);
+    offset_opt.retrieveOption(argc,argv);
+    otype_opt.retrieveOption(argc,argv);
+    oformat_opt.retrieveOption(argc,argv);
+    colorTable_opt.retrieveOption(argc,argv);
+    dx_opt.retrieveOption(argc,argv);
+    dy_opt.retrieveOption(argc,argv);
+    option_opt.retrieveOption(argc,argv);
+    flag_opt.retrieveOption(argc,argv);
+    resample_opt.retrieveOption(argc,argv);
+    description_opt.retrieveOption(argc,argv);
+    verbose_opt.retrieveOption(argc,argv);
   }
-  if(license_opt[0]){
-    cout << Optionpk<bool>::getGPLv3License() << endl;
+  catch(string predefinedString){
+    std::cout << predefinedString << std::endl;
     exit(0);
   }
-  if(help_opt[0]){
-    cout << "usage: pkcrop -i inputimage -o outputimage [OPTIONS]" << endl;
-    exit(0);
+  if(!doProcess){
+    std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+    exit(0);//help was invoked, stop processing
   }
 
   RESAMPLE theResample;
diff --git a/src/apps/pkdiff.cc b/src/apps/pkdiff.cc
index e6b51b2..ac673ad 100644
--- a/src/apps/pkdiff.cc
+++ b/src/apps/pkdiff.cc
@@ -25,22 +25,8 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 #include "Optionpk.h"
 #include "algorithms/ConfusionMatrix.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 int main(int argc, char *argv[])
 {
-  std::string versionString="version ";
-  versionString+=VERSION;
-  versionString+=", Copyright (C) 2008-2012 Pieter Kempeneers.\n\
-   This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n\
-   This is free software, and you are welcome to redistribute it\n\
-   under certain conditions; use option --license for details.";
-  Optionpk<bool> version_opt("\0","version",versionString,false);
-  Optionpk<bool> license_opt("lic","license","show license information",false);
-  Optionpk<bool> help_opt("h","help","shows this help info",false);
-  Optionpk<bool> todo_opt("\0","todo","todo: support different data types (now only integer type supported)",false);
   Optionpk<string> input_opt("i", "input", "Input image file.", "");
   Optionpk<string> reference_opt("r", "reference", "Reference image file", "");
   Optionpk<string> output_opt("o", "output", "Output image file. Default is empty: no output image, only report difference or identical.", "");
@@ -63,45 +49,37 @@ int main(int argc, char *argv[])
   Optionpk<string> option_opt("co", "co", "options: NAME=VALUE [-co COMPRESS=LZW] [-co INTERLEAVE=BAND]");
   Optionpk<short> verbose_opt("v", "verbose", "verbose (default value is 0)", 0);
 
-  version_opt.retrieveOption(argc,argv);
-  license_opt.retrieveOption(argc,argv);
-  help_opt.retrieveOption(argc,argv);
-  todo_opt.retrieveOption(argc,argv);
-
-  if(version_opt[0]||todo_opt[0]){
-    cout << version_opt.getHelp() << endl;
-    cout << "todo: " << todo_opt.getHelp() << endl;
-    exit(0);
+  bool doProcess;//stop process when program was invoked with help option (-h --help)
+  try{
+    doProcess=input_opt.retrieveOption(argc,argv);
+    output_opt.retrieveOption(argc,argv);
+    option_opt.retrieveOption(argc,argv);
+    reference_opt.retrieveOption(argc,argv);
+    mask_opt.retrieveOption(argc,argv);
+    colorTable_opt.retrieveOption(argc,argv);
+    valueE_opt.retrieveOption(argc,argv);
+    valueO_opt.retrieveOption(argc,argv);
+    valueC_opt.retrieveOption(argc,argv);
+    flag_opt.retrieveOption(argc,argv);
+    mflag_opt.retrieveOption(argc,argv);
+    band_opt.retrieveOption(argc,argv);
+    confusion_opt.retrieveOption(argc,argv);
+    lzw_opt.retrieveOption(argc,argv);
+    labelref_opt.retrieveOption(argc,argv);
+    labelclass_opt.retrieveOption(argc,argv);
+    class_opt.retrieveOption(argc,argv);
+    boundary_opt.retrieveOption(argc,argv);
+    disc_opt.retrieveOption(argc,argv);
+    homogeneous_opt.retrieveOption(argc,argv);
+    verbose_opt.retrieveOption(argc,argv);
   }
-  if(license_opt[0]){
-    cout << Optionpk<bool>::getGPLv3License() << endl;
+  catch(string predefinedString){
+    std::cout << predefinedString << std::endl;
     exit(0);
   }
-  input_opt.retrieveOption(argc,argv);
-  output_opt.retrieveOption(argc,argv);
-  option_opt.retrieveOption(argc,argv);
-  reference_opt.retrieveOption(argc,argv);
-  mask_opt.retrieveOption(argc,argv);
-  colorTable_opt.retrieveOption(argc,argv);
-  valueE_opt.retrieveOption(argc,argv);
-  valueO_opt.retrieveOption(argc,argv);
-  valueC_opt.retrieveOption(argc,argv);
-  flag_opt.retrieveOption(argc,argv);
-  mflag_opt.retrieveOption(argc,argv);
-  band_opt.retrieveOption(argc,argv);
-  confusion_opt.retrieveOption(argc,argv);
-  lzw_opt.retrieveOption(argc,argv);
-  labelref_opt.retrieveOption(argc,argv);
-  labelclass_opt.retrieveOption(argc,argv);
-  class_opt.retrieveOption(argc,argv);
-  boundary_opt.retrieveOption(argc,argv);
-  disc_opt.retrieveOption(argc,argv);
-  homogeneous_opt.retrieveOption(argc,argv);
-  verbose_opt.retrieveOption(argc,argv);
-
-  if(help_opt[0]){
-    cout << "usage: pkdiff -i inputimage -r referenceimage [OPTIONS]" << endl;
-    exit(0);
+  if(!doProcess){
+    std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+    exit(0);//help was invoked, stop processing
   }
 
   ImgReaderGdal inputReader;
diff --git a/src/apps/pkdsm2shadow.cc b/src/apps/pkdsm2shadow.cc
index 87dbd6f..ea1d6f4 100644
--- a/src/apps/pkdsm2shadow.cc
+++ b/src/apps/pkdsm2shadow.cc
@@ -30,25 +30,10 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 #include "imageclasses/ImgReaderGdal.h"
 #include "imageclasses/ImgWriterGdal.h"
 
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 /*------------------
   Main procedure
   ----------------*/
 int main(int argc,char **argv) {
-  std::string versionString="version ";
-  versionString+=VERSION;
-  versionString+=", Copyright (C) 2008-2012 Pieter Kempeneers.\n\
-   This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n\
-   This is free software, and you are welcome to redistribute it\n\
-   under certain conditions; use option --license for details.";
-  Optionpk<bool> version_opt("\0","version",versionString,false);
-  Optionpk<bool> license_opt("lic","license","show license information",false);
-  Optionpk<bool> help_opt("h","help","shows this help info",false);
-  Optionpk<bool> todo_opt("\0","todo","",false);
   Optionpk<std::string> input_opt("i","input","input image file","");
   Optionpk<std::string> output_opt("o", "output", "Output image file", "");
   Optionpk<double> sza_opt("sza", "sza", "Sun zenith angle.");
@@ -60,34 +45,26 @@ int main(int argc,char **argv) {
   Optionpk<std::string> option_opt("co", "co", "options: NAME=VALUE [-co COMPRESS=LZW] [-co INTERLEAVE=BAND]");
   Optionpk<short> verbose_opt("v", "verbose", "verbose mode if > 0", 0);
 
-  version_opt.retrieveOption(argc,argv);
-  license_opt.retrieveOption(argc,argv);
-  help_opt.retrieveOption(argc,argv);
-  todo_opt.retrieveOption(argc,argv);
-
-  input_opt.retrieveOption(argc,argv);
-  output_opt.retrieveOption(argc,argv);
-  sza_opt.retrieveOption(argc,argv);
-  saa_opt.retrieveOption(argc,argv);
-  flag_opt.retrieveOption(argc,argv);
-  option_opt.retrieveOption(argc,argv);
-  otype_opt.retrieveOption(argc,argv);
-  oformat_opt.retrieveOption(argc,argv);
-  colorTable_opt.retrieveOption(argc,argv);
-  verbose_opt.retrieveOption(argc,argv);
-
-  if(version_opt[0]||todo_opt[0]){
-    cout << version_opt.getHelp() << endl;
-    cout << "todo: " << todo_opt.getHelp() << endl;
-    exit(0);
+  bool doProcess;//stop process when program was invoked with help option (-h --help)
+  try{
+    doProcess=input_opt.retrieveOption(argc,argv);
+    output_opt.retrieveOption(argc,argv);
+    sza_opt.retrieveOption(argc,argv);
+    saa_opt.retrieveOption(argc,argv);
+    flag_opt.retrieveOption(argc,argv);
+    option_opt.retrieveOption(argc,argv);
+    otype_opt.retrieveOption(argc,argv);
+    oformat_opt.retrieveOption(argc,argv);
+    colorTable_opt.retrieveOption(argc,argv);
+    verbose_opt.retrieveOption(argc,argv);
   }
-  if(license_opt[0]){
-    cout << Optionpk<bool>::getGPLv3License() << endl;
+  catch(string predefinedString){
+    std::cout << predefinedString << std::endl;
     exit(0);
   }
-  if(help_opt[0]){
-    cout << "usage: pkveg2shadow -i inputimage -o outputimage [OPTIONS]" << endl;
-    exit(0);
+  if(!doProcess){
+    std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+    exit(0);//help was invoked, stop processing
   }
 
   ImgReaderGdal input;
diff --git a/src/apps/pkdumpimg.cc b/src/apps/pkdumpimg.cc
index 36e82de..ea7e52a 100644
--- a/src/apps/pkdumpimg.cc
+++ b/src/apps/pkdumpimg.cc
@@ -32,16 +32,6 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 
 int main(int argc, char *argv[])
 {
-  std::string versionString="version ";
-  versionString+=VERSION;
-  versionString+=", Copyright (C) 2008-2012 Pieter Kempeneers.\n\
-   This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n\
-   This is free software, and you are welcome to redistribute it\n\
-   under certain conditions; use option --license for details.";
-  Optionpk<bool> version_opt("\0","version",versionString,false);
-  Optionpk<bool> license_opt("lic","license","show license information",false);
-  Optionpk<bool> help_opt("h","help","shows this help info",false);
-  Optionpk<bool> todo_opt("\0","todo","introduce -uli -ulj to crop based on image coordinates",false);
   Optionpk<std::string> input_opt("i","input","input image file","");
   Optionpk<string> output_opt("o", "output", "Output ascii file (Default is empty: use stdout", "");
   Optionpk<string> otype_opt("ot", "otype", "Data type for output ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image", "");
@@ -59,40 +49,32 @@ int main(int argc, char *argv[])
   Optionpk<double> nodata_opt("nodata", "nodata", "set no data value(s) for calculations (flags in input image)");
   Optionpk<short> verbose_opt("v", "verbose", "verbose (Default: 0)", 0);
 
-  version_opt.retrieveOption(argc,argv);
-  license_opt.retrieveOption(argc,argv);
-  help_opt.retrieveOption(argc,argv);
-  todo_opt.retrieveOption(argc,argv);
-
-  if(version_opt[0]||todo_opt[0]){
-    cout << version_opt.getHelp() << endl;
-    cout << "todo: " << todo_opt.getHelp() << endl;
-    exit(0);
+  bool doProcess;//stop process when program was invoked with help option (-h --help)
+  try{
+    doProcess=input_opt.retrieveOption(argc,argv);
+    output_opt.retrieveOption(argc,argv);
+    otype_opt.retrieveOption(argc,argv);
+    oformat_opt.retrieveOption(argc,argv);
+    band_opt.retrieveOption(argc,argv);
+    extent_opt.retrieveOption(argc,argv);
+    ulx_opt.retrieveOption(argc,argv);
+    uly_opt.retrieveOption(argc,argv);
+    lrx_opt.retrieveOption(argc,argv);
+    lry_opt.retrieveOption(argc,argv);
+    dx_opt.retrieveOption(argc,argv);
+    dy_opt.retrieveOption(argc,argv);
+    resample_opt.retrieveOption(argc,argv);
+    flag_opt.retrieveOption(argc,argv);
+    nodata_opt.retrieveOption(argc,argv);
+    verbose_opt.retrieveOption(argc,argv);
   }
-  if(license_opt[0]){
-    cout << Optionpk<bool>::getGPLv3License() << endl;
+  catch(string predefinedString){
+    std::cout << predefinedString << std::endl;
     exit(0);
   }
-  input_opt.retrieveOption(argc,argv);
-  output_opt.retrieveOption(argc,argv);
-  otype_opt.retrieveOption(argc,argv);
-  oformat_opt.retrieveOption(argc,argv);
-  band_opt.retrieveOption(argc,argv);
-  extent_opt.retrieveOption(argc,argv);
-  ulx_opt.retrieveOption(argc,argv);
-  uly_opt.retrieveOption(argc,argv);
-  lrx_opt.retrieveOption(argc,argv);
-  lry_opt.retrieveOption(argc,argv);
-  dx_opt.retrieveOption(argc,argv);
-  dy_opt.retrieveOption(argc,argv);
-  resample_opt.retrieveOption(argc,argv);
-  flag_opt.retrieveOption(argc,argv);
-  nodata_opt.retrieveOption(argc,argv);
-  verbose_opt.retrieveOption(argc,argv);
-
-  if(help_opt[0]){
-    cout << "usage: pkdumpimg -i imgfile [-o asciifile] [OPTIONS]" << endl;
-    exit(0);
+  if(!doProcess){
+    std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+    exit(0);//help was invoked, stop processing
   }
 
   ofstream outputStream;
diff --git a/src/apps/pkdumpogr.cc b/src/apps/pkdumpogr.cc
index a64c64e..53a498b 100644
--- a/src/apps/pkdumpogr.cc
+++ b/src/apps/pkdumpogr.cc
@@ -26,22 +26,8 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 #include "algorithms/Histogram.h"
 #include "pkdumpogr.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 int main(int argc, char *argv[])
 {
-  std::string versionString="version ";
-  versionString+=VERSION;
-  versionString+=", Copyright (C) 2008-2012 Pieter Kempeneers.\n\
-   This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n\
-   This is free software, and you are welcome to redistribute it\n\
-   under certain conditions; use option --license for details.";
-  Optionpk<bool> version_opt("\0","version",versionString,false);
-  Optionpk<bool> license_opt("lic","license","show license information",false);
-  Optionpk<bool> help_opt("h","help","shows this help info",false);
-  Optionpk<bool> todo_opt("\0","todo","",false);
   Optionpk<string> input_opt("i", "input", "Input shape file", "");
   Optionpk<string> output_opt("o", "output", "Output ASCII file", "");
   Optionpk<string> attribute_opt("n", "name", "names of the attributes to select. Each attribute is stored in a separate band. Default is ALL: write all attributes", "ALL");
@@ -49,30 +35,22 @@ int main(int argc, char *argv[])
   Optionpk<bool> transpose_opt("t","transpose","transpose output (does not work for -n ALL ",false);
   Optionpk<short> verbose_opt("v", "verbose", "verbose (Default: 0)", 0);
 
-  version_opt.retrieveOption(argc,argv);
-  license_opt.retrieveOption(argc,argv);
-  help_opt.retrieveOption(argc,argv);
-  todo_opt.retrieveOption(argc,argv);
-
-  input_opt.retrieveOption(argc,argv);
-  output_opt.retrieveOption(argc,argv);
-  attribute_opt.retrieveOption(argc,argv);
-  pos_opt.retrieveOption(argc,argv);
-  transpose_opt.retrieveOption(argc,argv);
-  verbose_opt.retrieveOption(argc,argv);
-
-  if(version_opt[0]||todo_opt[0]){
-    cout << version_opt.getHelp() << endl;
-    cout << "todo: " << todo_opt.getHelp() << endl;
-    exit(0);
+  bool doProcess;//stop process when program was invoked with help option (-h --help)
+  try{
+    doProcess=input_opt.retrieveOption(argc,argv);
+    output_opt.retrieveOption(argc,argv);
+    attribute_opt.retrieveOption(argc,argv);
+    pos_opt.retrieveOption(argc,argv);
+    transpose_opt.retrieveOption(argc,argv);
+    verbose_opt.retrieveOption(argc,argv);
   }
-  if(license_opt[0]){
-    cout << Optionpk<bool>::getGPLv3License() << endl;
+  catch(string predefinedString){
+    std::cout << predefinedString << std::endl;
     exit(0);
   }
-  if(help_opt[0]){
-    cout << "usage: pkdumpogr -i input [OPTIONS]" << endl;
-    exit(0);
+  if(!doProcess){
+    std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+    exit(0);//help was invoked, stop processing
   }
 
   ImgReaderOgr imgReader;
diff --git a/src/apps/pkegcs.cc b/src/apps/pkegcs.cc
index 60357f3..c7fa5f8 100644
--- a/src/apps/pkegcs.cc
+++ b/src/apps/pkegcs.cc
@@ -21,21 +21,8 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 #include "imageclasses/ImgReaderGdal.h"
 #include "algorithms/Egcs.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 int main(int argc, char *argv[])
 {
-  std::string versionString="version ";
-  versionString+=VERSION;
-  versionString+=", Copyright (C) 2008-2012 Pieter Kempeneers.\n\
-   This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n\
-   This is free software, and you are welcome to redistribute it\n\
-   under certain conditions; use option --license for details.";
-  Optionpk<bool> version_opt("\0","version",versionString,false);
-  Optionpk<bool> license_opt("lic","license","show license information",false);
-  Optionpk<bool> help_opt("h","help","shows this help info",false);
   Optionpk<string> image_opt("i","image","input image to analyse","");
   Optionpk<unsigned short>  band_opt("b", "band", "Band specific information", 0);
   Optionpk<string> cell2bb_opt("c2b","cell2bb","convert cell code to geo coordinates of boundingbox (e.g. 32-AB)","");
@@ -47,29 +34,28 @@ int main(int argc, char *argv[])
   Optionpk<double> x_opt("x","x","x coordinate in epsg:3035",0);
   Optionpk<double> y_opt("y","y","y coordinate in epsg:3035",0);
 
-  version_opt.retrieveOption(argc,argv);
-  license_opt.retrieveOption(argc,argv);
-  help_opt.retrieveOption(argc,argv);
 
-  if(version_opt[0]){
-    cout << version_opt.getHelp() << endl;
-    exit(0);
+  bool doProcess;//stop process when program was invoked with help option (-h --help)
+  try{
+    doProcess=image_opt.retrieveOption(argc,argv);
+    band_opt.retrieveOption(argc,argv);
+    cell2bb_opt.retrieveOption(argc,argv);
+    cell2mid_opt.retrieveOption(argc,argv);
+    geo2cell_opt.retrieveOption(argc,argv);
+    refpixel_opt.retrieveOption(argc,argv);
+    maskValue_opt.retrieveOption(argc,argv);
+    dx_opt.retrieveOption(argc,argv);
+    x_opt.retrieveOption(argc,argv);
+    y_opt.retrieveOption(argc,argv);
   }
-  if(license_opt[0]){
-    cout << Optionpk<bool>::getGPLv3License() << endl;
+  catch(string predefinedString){
+    std::cout << predefinedString << std::endl;
     exit(0);
   }
-
-  image_opt.retrieveOption(argc,argv);
-  band_opt.retrieveOption(argc,argv);
-  cell2bb_opt.retrieveOption(argc,argv);
-  cell2mid_opt.retrieveOption(argc,argv);
-  geo2cell_opt.retrieveOption(argc,argv);
-  refpixel_opt.retrieveOption(argc,argv);
-  maskValue_opt.retrieveOption(argc,argv);
-  dx_opt.retrieveOption(argc,argv);
-  x_opt.retrieveOption(argc,argv);
-  y_opt.retrieveOption(argc,argv);
+  if(!doProcess){
+    std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+    exit(0);//help was invoked, stop processing
+  }
   
   Egcs egcs;
   if(cell2bb_opt[0]!=""){
diff --git a/src/apps/pkextract.cc b/src/apps/pkextract.cc
index c3ac4f9..b18b17c 100644
--- a/src/apps/pkextract.cc
+++ b/src/apps/pkextract.cc
@@ -29,10 +29,6 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 #include "base/Optionpk.h"
 #include "algorithms/Histogram.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 #ifndef PI
 #define PI 3.1415926535897932384626433832795
 #endif
@@ -40,16 +36,6 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 
 int main(int argc, char *argv[])
 {
-  std::string versionString="version ";
-  versionString+=VERSION;
-  versionString+=", Copyright (C) 2008-2012 Pieter Kempeneers.\n\
-   This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n\
-   This is free software, and you are welcome to redistribute it\n\
-   under certain conditions; use option --license for details.";
-  Optionpk<bool> version_opt("\0","version",versionString,false);
-  Optionpk<bool> license_opt("lic","license","show license information",false);
-  Optionpk<bool> help_opt("h","help","shows this help info",false);
-  Optionpk<bool> todo_opt("\0","todo","",false);
   Optionpk<string> image_opt("i", "image", "Input image file", "");
   Optionpk<string> sample_opt("s", "sample", "Input sample file (shape) or class file (e.g. Corine CLC) if class option is set", "");
   Optionpk<string> mask_opt("m", "mask", "Mask image file", "");
@@ -75,48 +61,40 @@ int main(int argc, char *argv[])
   Optionpk<short> rule_opt("r", "rule", "rule how to report image information per feature. 0: value at each point (or at centroid of the polygon if line is not set), 1: mean value (written to centroid of polygon if line is not set), 2: proportion classes, 3: custom, 4: minimum of polygon).", 0);
   Optionpk<short> verbose_opt("v", "verbose", "verbose mode if > 0", 0);
 
-  version_opt.retrieveOption(argc,argv);
-  license_opt.retrieveOption(argc,argv);
-  help_opt.retrieveOption(argc,argv);
-  todo_opt.retrieveOption(argc,argv);
-
-  image_opt.retrieveOption(argc,argv);
-  sample_opt.retrieveOption(argc,argv);
-  mask_opt.retrieveOption(argc,argv);
-  invalid_opt.retrieveOption(argc,argv);
-  class_opt.retrieveOption(argc,argv);
-  output_opt.retrieveOption(argc,argv);
-  keepFeatures_opt.retrieveOption(argc,argv);
-  bufferOutput_opt.retrieveOption(argc,argv);
-  geo_opt.retrieveOption(argc,argv);
-  down_opt.retrieveOption(argc,argv);
-  threshold_opt.retrieveOption(argc,argv);
-  min_opt.retrieveOption(argc,argv);
-  boundary_opt.retrieveOption(argc,argv);
-  rbox_opt.retrieveOption(argc,argv);
-  cbox_opt.retrieveOption(argc,argv);
-  disc_opt.retrieveOption(argc,argv);
-  ftype_opt.retrieveOption(argc,argv);
-  ltype_opt.retrieveOption(argc,argv);
-  fieldname_opt.retrieveOption(argc,argv);
-  label_opt.retrieveOption(argc,argv);
-  polygon_opt.retrieveOption(argc,argv);
-  band_opt.retrieveOption(argc,argv);
-  rule_opt.retrieveOption(argc,argv);
-  verbose_opt.retrieveOption(argc,argv);
-
-  if(version_opt[0]||todo_opt[0]){
-    std::cout << version_opt.getHelp() << std::endl;
-    std::cout << "todo: " << todo_opt.getHelp() << std::endl;
-    exit(0);
+  bool doProcess;//stop process when program was invoked with help option (-h --help)
+  try{
+    doProcess=image_opt.retrieveOption(argc,argv);
+    sample_opt.retrieveOption(argc,argv);
+    mask_opt.retrieveOption(argc,argv);
+    invalid_opt.retrieveOption(argc,argv);
+    class_opt.retrieveOption(argc,argv);
+    output_opt.retrieveOption(argc,argv);
+    keepFeatures_opt.retrieveOption(argc,argv);
+    bufferOutput_opt.retrieveOption(argc,argv);
+    geo_opt.retrieveOption(argc,argv);
+    down_opt.retrieveOption(argc,argv);
+    threshold_opt.retrieveOption(argc,argv);
+    min_opt.retrieveOption(argc,argv);
+    boundary_opt.retrieveOption(argc,argv);
+    rbox_opt.retrieveOption(argc,argv);
+    cbox_opt.retrieveOption(argc,argv);
+    disc_opt.retrieveOption(argc,argv);
+    ftype_opt.retrieveOption(argc,argv);
+    ltype_opt.retrieveOption(argc,argv);
+    fieldname_opt.retrieveOption(argc,argv);
+    label_opt.retrieveOption(argc,argv);
+    polygon_opt.retrieveOption(argc,argv);
+    band_opt.retrieveOption(argc,argv);
+    rule_opt.retrieveOption(argc,argv);
+    verbose_opt.retrieveOption(argc,argv);
   }
-  if(license_opt[0]){
-    std::cout << Optionpk<bool>::getGPLv3License() << std::endl;
+  catch(string predefinedString){
+    std::cout << predefinedString << std::endl;
     exit(0);
   }
-  if(help_opt[0]){
-    std::cout << "usage: pkextract -i input -s sample [OPTIONS]" << std::endl;
-    exit(0);
+  if(!doProcess){
+    std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+    exit(0);//help was invoked, stop processing
   }
 
   if(verbose_opt[0])
diff --git a/src/apps/pkfillnodata.cc b/src/apps/pkfillnodata.cc
index f30967b..90136b9 100644
--- a/src/apps/pkfillnodata.cc
+++ b/src/apps/pkfillnodata.cc
@@ -25,20 +25,7 @@ extern "C" {
 }
 #include "base/Optionpk.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 int main(int argc,char **argv) {
-  std::string versionString="version ";
-  versionString+=VERSION;
-  versionString+=", Copyright (C) 2008-2012 Pieter Kempeneers.\n\
-   This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n\
-   This is free software, and you are welcome to redistribute it\n\
-   under certain conditions; use option --license for details.";
-  Optionpk<bool> version_opt("\0","version",versionString,false);
-  Optionpk<bool> license_opt("lic","license","show license information",false);
-  Optionpk<bool> help_opt("h","help","shows this help info",false);
   Optionpk<string> input_opt("i", "input", "Input image file (WARNING: will be overwritten with output!", "");
   Optionpk<int> band_opt("b", "band", "band(s) to process (Default is -1: process all bands)", -1);
   Optionpk<string> mask_opt("m", "mask", "Mask band indicating pixels to be interpolated (zero valued) ", "");
@@ -47,30 +34,23 @@ int main(int argc,char **argv) {
   Optionpk<int> iteration_opt("it", "iteration", "Number of 3x3 smoothing filter passes to run (default 0)", 0);
   Optionpk<short> verbose_opt("v", "verbose", "verbose", 0);
 
-  version_opt.retrieveOption(argc,argv);
-  license_opt.retrieveOption(argc,argv);
-  help_opt.retrieveOption(argc,argv);
-
-  if(version_opt[0]){
-    cout << version_opt.getHelp() << endl;
-    exit(0);
+  bool doProcess;//stop process when program was invoked with help option (-h --help)
+  try{
+    doProcess=input_opt.retrieveOption(argc,argv);
+    band_opt.retrieveOption(argc,argv);
+    output_opt.retrieveOption(argc,argv);
+    mask_opt.retrieveOption(argc,argv);
+    distance_opt.retrieveOption(argc,argv);
+    iteration_opt.retrieveOption(argc,argv);
+    verbose_opt.retrieveOption(argc,argv);
   }
-  if(license_opt[0]){
-    cout << Optionpk<bool>::getGPLv3License() << endl;
+  catch(string predefinedString){
+    std::cout << predefinedString << std::endl;
     exit(0);
   }
-
-  input_opt.retrieveOption(argc,argv);
-  band_opt.retrieveOption(argc,argv);
-  output_opt.retrieveOption(argc,argv);
-  mask_opt.retrieveOption(argc,argv);
-  distance_opt.retrieveOption(argc,argv);
-  iteration_opt.retrieveOption(argc,argv);
-  verbose_opt.retrieveOption(argc,argv);
-
-  if(help_opt[0]){
-    cout << "usage: pkfillnodata -i inputimage -o outputimage -m maskimage [OPTIONS]" << endl;
-    exit(0);
+  if(!doProcess){
+    std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+    exit(0);//help was invoked, stop processing
   }
 
   GDALAllRegister();
diff --git a/src/apps/pkfilter.cc b/src/apps/pkfilter.cc
index 7beadb0..c8846d5 100644
--- a/src/apps/pkfilter.cc
+++ b/src/apps/pkfilter.cc
@@ -32,24 +32,10 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 #include "imageclasses/ImgWriterGdal.h"
 
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 /*------------------
   Main procedure
   ----------------*/
 int main(int argc,char **argv) {
-  std::string versionString="version ";
-  versionString+=VERSION;
-  versionString+=", Copyright (C) 2008-2012 Pieter Kempeneers.\n\
-   This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n\
-   This is free software, and you are welcome to redistribute it\n\
-   under certain conditions; use option --license for details.";
-  Optionpk<bool> version_opt("\0","version",versionString,false);
-  Optionpk<bool> license_opt("lic","license","show license information",false);
-  Optionpk<bool> help_opt("h","help","shows this help info",false);
-  Optionpk<bool> todo_opt("\0","todo","",false);
   Optionpk<std::string> input_opt("i","input","input image file");
   Optionpk<std::string> output_opt("o", "output", "Output image file");
   Optionpk<bool> disc_opt("c", "circular", "circular disc kernel for dilation and erosion", false);
@@ -70,43 +56,35 @@ int main(int argc,char **argv) {
   Optionpk<short> down_opt("d", "down", "down sampling factor. Use value 1 for no downsampling)", 1);
   Optionpk<short> verbose_opt("v", "verbose", "verbose mode if > 0", 0);
 
-  version_opt.retrieveOption(argc,argv);
-  license_opt.retrieveOption(argc,argv);
-  help_opt.retrieveOption(argc,argv);
-  todo_opt.retrieveOption(argc,argv);
-
-  input_opt.retrieveOption(argc,argv);
-  output_opt.retrieveOption(argc,argv);
-  disc_opt.retrieveOption(argc,argv);
-  angle_opt.retrieveOption(argc,argv);
-  function_opt.retrieveOption(argc,argv);
-  dimX_opt.retrieveOption(argc,argv);
-  dimY_opt.retrieveOption(argc,argv);
-  dimZ_opt.retrieveOption(argc,argv);
-  option_opt.retrieveOption(argc,argv);
-  class_opt.retrieveOption(argc,argv);
-  threshold_opt.retrieveOption(argc,argv);
-  mask_opt.retrieveOption(argc,argv);
-  tap_opt.retrieveOption(argc,argv);
-  tapz_opt.retrieveOption(argc,argv);
-  down_opt.retrieveOption(argc,argv);
-  otype_opt.retrieveOption(argc,argv);
-  oformat_opt.retrieveOption(argc,argv);
-  colorTable_opt.retrieveOption(argc,argv);
-  verbose_opt.retrieveOption(argc,argv);
-
-  if(version_opt[0]||todo_opt[0]){
-    cout << version_opt.getHelp() << endl;
-    cout << "todo: " << todo_opt.getHelp() << endl;
-    exit(0);
+  bool doProcess;//stop process when program was invoked with help option (-h --help)
+  try{
+    doProcess=input_opt.retrieveOption(argc,argv);
+    output_opt.retrieveOption(argc,argv);
+    disc_opt.retrieveOption(argc,argv);
+    angle_opt.retrieveOption(argc,argv);
+    function_opt.retrieveOption(argc,argv);
+    dimX_opt.retrieveOption(argc,argv);
+    dimY_opt.retrieveOption(argc,argv);
+    dimZ_opt.retrieveOption(argc,argv);
+    option_opt.retrieveOption(argc,argv);
+    class_opt.retrieveOption(argc,argv);
+    threshold_opt.retrieveOption(argc,argv);
+    mask_opt.retrieveOption(argc,argv);
+    tap_opt.retrieveOption(argc,argv);
+    tapz_opt.retrieveOption(argc,argv);
+    down_opt.retrieveOption(argc,argv);
+    otype_opt.retrieveOption(argc,argv);
+    oformat_opt.retrieveOption(argc,argv);
+    colorTable_opt.retrieveOption(argc,argv);
+    verbose_opt.retrieveOption(argc,argv);
   }
-  if(license_opt[0]){
-    cout << Optionpk<bool>::getGPLv3License() << endl;
+  catch(string predefinedString){
+    std::cout << predefinedString << std::endl;
     exit(0);
   }
-  if(help_opt[0]){
-    cout << "usage: pkfilter -i inputimage -o outputimage [OPTIONS]" << endl;
-    exit(0);
+  if(!doProcess){
+    std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+    exit(0);//help was invoked, stop processing
   }
 
   ImgReaderGdal input;
diff --git a/src/apps/pkfs_svm.cc b/src/apps/pkfs_svm.cc
index 24c4969..1277e1f 100644
--- a/src/apps/pkfs_svm.cc
+++ b/src/apps/pkfs_svm.cc
@@ -27,10 +27,6 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 #include "algorithms/svm.h"
 #include "pkclassify_nn.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 #define Malloc(type,n) (type *)malloc((n)*sizeof(type))
 
 enum SelectorValue  { NA=0, SFFS=1, SFS=2, SBS=3, BFS=4 };
@@ -146,16 +142,6 @@ int main(int argc, char *argv[])
   // vector<double> priors;
   
   //--------------------------- command line options ------------------------------------
-  std::string versionString="version ";
-  versionString+=static_cast<string>(VERSION);
-  versionString+=", Copyright (C) 2008-2012 Pieter Kempeneers.\n\
-   This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n\
-   This is free software, and you are welcome to redistribute it\n\
-   under certain conditions; use option --license for details.";
-  Optionpk<bool> version_opt("\0","version",versionString,false);
-  Optionpk<bool> license_opt("lic","license","show license information",false);
-  Optionpk<bool> help_opt("h","help","shows this help info",false);
-  Optionpk<bool> todo_opt("\0","todo","",false);
   Optionpk<string> training_opt("t", "training", "training shape file. A single shape file contains all training features (must be set as: B0, B1, B2,...) for all classes (class numbers identified by label option)."); 
   Optionpk<string> label_opt("\0", "label", "identifier for class label in training shape file.","label"); 
   Optionpk<unsigned short> maxFeatures_opt("n", "nf", "number of features to select (0 to select optimal number, see also ecost option)", 0);
@@ -170,53 +156,46 @@ int main(int argc, char *argv[])
   Optionpk<string> selector_opt("sm", "sm", "feature selection method (sffs=sequential floating forward search,sfs=sequential forward search, sbs, sequential backward search ,bfs=brute force search)","sffs"); 
   Optionpk<float> epsilon_cost_opt("ecost", "ecost", "epsilon for stopping criterion in cost function to determine optimal number of features",0.001);
 
-  version_opt.retrieveOption(argc,argv);
-  license_opt.retrieveOption(argc,argv);
-  help_opt.retrieveOption(argc,argv);
-  todo_opt.retrieveOption(argc,argv);
-  training_opt.retrieveOption(argc,argv);
-  maxFeatures_opt.retrieveOption(argc,argv);
-  label_opt.retrieveOption(argc,argv);
-  reclass_opt.retrieveOption(argc,argv);
-  balance_opt.retrieveOption(argc,argv);
-  minSize_opt.retrieveOption(argc,argv);
-  start_opt.retrieveOption(argc,argv);
-  end_opt.retrieveOption(argc,argv);
-  band_opt.retrieveOption(argc,argv);
-  offset_opt.retrieveOption(argc,argv);
-  scale_opt.retrieveOption(argc,argv);
-  // priors_opt.retrieveOption(argc,argv);
-  svm_type_opt.retrieveOption(argc,argv);
-  kernel_type_opt.retrieveOption(argc,argv);
-  kernel_degree_opt.retrieveOption(argc,argv);
-  gamma_opt.retrieveOption(argc,argv);
-  coef0_opt.retrieveOption(argc,argv);
-  ccost_opt.retrieveOption(argc,argv);
-  nu_opt.retrieveOption(argc,argv);
-  epsilon_loss_opt.retrieveOption(argc,argv);
-  cache_opt.retrieveOption(argc,argv);
-  epsilon_tol_opt.retrieveOption(argc,argv);
-  shrinking_opt.retrieveOption(argc,argv);
-  prob_est_opt.retrieveOption(argc,argv);
-  cv_opt.retrieveOption(argc,argv);
-  selector_opt.retrieveOption(argc,argv);
-  epsilon_cost_opt.retrieveOption(argc,argv);
-  verbose_opt.retrieveOption(argc,argv);
-
-  if(version_opt[0]||todo_opt[0]){
-    std::cout << version_opt.getHelp() << std::endl;
-    std::cout << "todo: " << todo_opt.getHelp() << std::endl;
-    exit(0);
+  bool doProcess;//stop process when program was invoked with help option (-h --help)
+  try{
+    doProcess=training_opt.retrieveOption(argc,argv);
+    maxFeatures_opt.retrieveOption(argc,argv);
+    label_opt.retrieveOption(argc,argv);
+    reclass_opt.retrieveOption(argc,argv);
+    balance_opt.retrieveOption(argc,argv);
+    minSize_opt.retrieveOption(argc,argv);
+    start_opt.retrieveOption(argc,argv);
+    end_opt.retrieveOption(argc,argv);
+    band_opt.retrieveOption(argc,argv);
+    offset_opt.retrieveOption(argc,argv);
+    scale_opt.retrieveOption(argc,argv);
+    // priors_opt.retrieveOption(argc,argv);
+    svm_type_opt.retrieveOption(argc,argv);
+    kernel_type_opt.retrieveOption(argc,argv);
+    kernel_degree_opt.retrieveOption(argc,argv);
+    gamma_opt.retrieveOption(argc,argv);
+    coef0_opt.retrieveOption(argc,argv);
+    ccost_opt.retrieveOption(argc,argv);
+    nu_opt.retrieveOption(argc,argv);
+    epsilon_loss_opt.retrieveOption(argc,argv);
+    cache_opt.retrieveOption(argc,argv);
+    epsilon_tol_opt.retrieveOption(argc,argv);
+    shrinking_opt.retrieveOption(argc,argv);
+    prob_est_opt.retrieveOption(argc,argv);
+    cv_opt.retrieveOption(argc,argv);
+    selector_opt.retrieveOption(argc,argv);
+    epsilon_cost_opt.retrieveOption(argc,argv);
+    verbose_opt.retrieveOption(argc,argv);
   }
-  if(license_opt[0]){
-    std::cout << Optionpk<bool>::getGPLv3License() << std::endl;
+  catch(string predefinedString){
+    std::cout << predefinedString << std::endl;
     exit(0);
   }
-  if(help_opt[0]){
-    std::cout << "usage: pkfs_svm -t training [OPTIONS]" << std::endl;
-    exit(0);
+  if(!doProcess){
+    std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+    exit(0);//help was invoked, stop processing
   }
-  
+
   static std::map<std::string, SelectorValue> selMap;
   //initialize selMap
   selMap["sffs"]=SFFS;
diff --git a/src/apps/pkgetmask.cc b/src/apps/pkgetmask.cc
index 03e7aaf..9548f9f 100644
--- a/src/apps/pkgetmask.cc
+++ b/src/apps/pkgetmask.cc
@@ -23,22 +23,8 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 #include "imageclasses/ImgWriterGdal.h"
 #include "base/Optionpk.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 using namespace std;
 int main(int argc,char **argv) {
-  std::string versionString="version ";
-  versionString+=VERSION;
-  versionString+=", Copyright (C) 2008-2012 Pieter Kempeneers.\n\
-   This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n\
-   This is free software, and you are welcome to redistribute it\n\
-   under certain conditions; use option --license for details.";
-  Optionpk<bool> version_opt("\0","version",versionString,false);
-  Optionpk<bool> license_opt("lic","license","show license information",false);
-  Optionpk<bool> help_opt("h","help","shows this help info",false);
-  Optionpk<bool> todo_opt("\0","todo","",false);
   Optionpk<string>  input_opt("i", "input", "Input image file", "");
   Optionpk<short>  band_opt("b", "band", "band(s) used for mask", 0);
   Optionpk<double> min_opt("min", "min", "Values smaller than min threshold(s) are masked as invalid. Use one threshold for each band", 0);
@@ -53,40 +39,31 @@ int main(int argc,char **argv) {
   Optionpk<string> colorTable_opt("ct", "ct", "color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid)", "");
   Optionpk<short> verbose_opt("v", "verbose", "verbose", 0);
 
-  version_opt.retrieveOption(argc,argv);
-  license_opt.retrieveOption(argc,argv);
-  help_opt.retrieveOption(argc,argv);
-  todo_opt.retrieveOption(argc,argv);
-
-  if(version_opt[0]||todo_opt[0]){
-    cout << version_opt.getHelp() << endl;
-    cout << "todo: " << todo_opt.getHelp() << endl;
-    exit(0);
+  bool doProcess;//stop process when program was invoked with help option (-h --help)
+  try{
+    doProcess=input_opt.retrieveOption(argc,argv);
+    band_opt.retrieveOption(argc,argv);
+    min_opt.retrieveOption(argc,argv);
+    max_opt.retrieveOption(argc,argv);
+    operator_opt.retrieveOption(argc,argv);
+    valid_opt.retrieveOption(argc,argv);
+    invalid_opt.retrieveOption(argc,argv);
+    output_opt.retrieveOption(argc,argv);
+    otype_opt.retrieveOption(argc,argv);
+    oformat_opt.retrieveOption(argc,argv);
+    option_opt.retrieveOption(argc,argv);
+    colorTable_opt.retrieveOption(argc,argv);
+    verbose_opt.retrieveOption(argc,argv);
   }
-  if(license_opt[0]){
-    cout << Optionpk<bool>::getGPLv3License() << endl;
+  catch(string predefinedString){
+    std::cout << predefinedString << std::endl;
     exit(0);
   }
-  input_opt.retrieveOption(argc,argv);
-  band_opt.retrieveOption(argc,argv);
-  min_opt.retrieveOption(argc,argv);
-  max_opt.retrieveOption(argc,argv);
-  operator_opt.retrieveOption(argc,argv);
-  valid_opt.retrieveOption(argc,argv);
-  invalid_opt.retrieveOption(argc,argv);
-  output_opt.retrieveOption(argc,argv);
-  otype_opt.retrieveOption(argc,argv);
-  oformat_opt.retrieveOption(argc,argv);
-  option_opt.retrieveOption(argc,argv);
-  colorTable_opt.retrieveOption(argc,argv);
-  verbose_opt.retrieveOption(argc,argv);
-
-  if(help_opt[0]){
-    cout << "usage: pkinfo -i inputimage -o outputimage [OPTIONS]" << endl;
-    exit(0);
+  if(!doProcess){
+    std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+    exit(0);//help was invoked, stop processing
   }
 
-
   const char* pszMessage;
   void* pProgressArg=NULL;
   GDALProgressFunc pfnProgress=GDALTermProgress;
diff --git a/src/apps/pklas2img.cc b/src/apps/pklas2img.cc
index 4233052..afbf4ad 100644
--- a/src/apps/pklas2img.cc
+++ b/src/apps/pklas2img.cc
@@ -26,20 +26,7 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 #include "algorithms/Histogram.h"
 #include "algorithms/Filter2d.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 int main(int argc,char **argv) {
-  std::string versionString="version ";
-  versionString+=VERSION;
-  versionString+=", Copyright (C) 2008-2012 Pieter Kempeneers.\n\
-   This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n\
-   This is free software, and you are welcome to redistribute it\n\
-   under certain conditions; use option --license for details.";
-  Optionpk<bool> version_opt("\0","version",versionString,false);
-  Optionpk<bool> license_opt("lic","license","show license information",false);
-  Optionpk<bool> help_opt("h","help","shows this help info",false);
   Optionpk<string> input_opt("i", "input", "Input las file", "");
   // Optionpk<string> mask_opt("m", "mask", "mask image file", "");
   // Optionpk<short> invalid_opt("t", "invalid", "Mask value(s) where image is invalid. Use multiple values for a single mask. Default value is 0", 0);
@@ -71,56 +58,48 @@ int main(int argc,char **argv) {
   Optionpk<string> colorTable_opt("ct", "ct", "color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid)", "");
   Optionpk<short> verbose_opt("v", "verbose", "verbose (default is 0)", 0);
 
-  version_opt.retrieveOption(argc,argv);
-  license_opt.retrieveOption(argc,argv);
-  help_opt.retrieveOption(argc,argv);
-
-  if(version_opt[0]){
-    cout << version_opt.getHelp() << endl;
-    exit(0);
+  bool doProcess;//stop process when program was invoked with help option (-h --help)
+  try{
+    doProcess=input_opt.retrieveOption(argc,argv);
+    // mask_opt.retrieveOption(argc,argv);
+    // invalid_opt.retrieveOption(argc,argv);
+    flag_opt.retrieveOption(argc,argv);
+    attribute_opt.retrieveOption(argc,argv);
+    disc_opt.retrieveOption(argc,argv);
+    maxSlope_opt.retrieveOption(argc,argv);
+    hThreshold_opt.retrieveOption(argc,argv);
+    maxIter_opt.retrieveOption(argc,argv);
+    nbin_opt.retrieveOption(argc,argv);
+    returns_opt.retrieveOption(argc,argv);
+    classes_opt.retrieveOption(argc,argv);
+    composite_opt.retrieveOption(argc,argv);
+    filter_opt.retrieveOption(argc,argv);
+    postFilter_opt.retrieveOption(argc,argv);
+    dimx_opt.retrieveOption(argc,argv);
+    dimy_opt.retrieveOption(argc,argv);
+    output_opt.retrieveOption(argc,argv);
+    projection_opt.retrieveOption(argc,argv);
+    ulx_opt.retrieveOption(argc,argv);
+    uly_opt.retrieveOption(argc,argv);
+    lrx_opt.retrieveOption(argc,argv);
+    lry_opt.retrieveOption(argc,argv);
+    otype_opt.retrieveOption(argc,argv);
+    oformat_opt.retrieveOption(argc,argv);
+    option_opt.retrieveOption(argc,argv);
+    dx_opt.retrieveOption(argc,argv);
+    dy_opt.retrieveOption(argc,argv);
+    colorTable_opt.retrieveOption(argc,argv);
+    verbose_opt.retrieveOption(argc,argv);
   }
-  if(license_opt[0]){
-    cout << Optionpk<bool>::getGPLv3License() << endl;
+  catch(string predefinedString){
+    std::cout << predefinedString << std::endl;
     exit(0);
   }
-
-  input_opt.retrieveOption(argc,argv);
-  // mask_opt.retrieveOption(argc,argv);
-  // invalid_opt.retrieveOption(argc,argv);
-  flag_opt.retrieveOption(argc,argv);
-  attribute_opt.retrieveOption(argc,argv);
-  disc_opt.retrieveOption(argc,argv);
-  maxSlope_opt.retrieveOption(argc,argv);
-  hThreshold_opt.retrieveOption(argc,argv);
-  maxIter_opt.retrieveOption(argc,argv);
-  nbin_opt.retrieveOption(argc,argv);
-  returns_opt.retrieveOption(argc,argv);
-  classes_opt.retrieveOption(argc,argv);
-  composite_opt.retrieveOption(argc,argv);
-  filter_opt.retrieveOption(argc,argv);
-  postFilter_opt.retrieveOption(argc,argv);
-  dimx_opt.retrieveOption(argc,argv);
-  dimy_opt.retrieveOption(argc,argv);
-  output_opt.retrieveOption(argc,argv);
-  projection_opt.retrieveOption(argc,argv);
-  ulx_opt.retrieveOption(argc,argv);
-  uly_opt.retrieveOption(argc,argv);
-  lrx_opt.retrieveOption(argc,argv);
-  lry_opt.retrieveOption(argc,argv);
-  otype_opt.retrieveOption(argc,argv);
-  oformat_opt.retrieveOption(argc,argv);
-  option_opt.retrieveOption(argc,argv);
-  dx_opt.retrieveOption(argc,argv);
-  dy_opt.retrieveOption(argc,argv);
-  colorTable_opt.retrieveOption(argc,argv);
-  verbose_opt.retrieveOption(argc,argv);
-
-  if(help_opt[0]){
-    cout << version_opt.getHelp() << endl;
-    exit(0);
+  if(!doProcess){
+    std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+    exit(0);//help was invoked, stop processing
   }
 
-
   GDALAllRegister();
 
   double dfComplete=0.0;
diff --git a/src/apps/pkmosaic.cc b/src/apps/pkmosaic.cc
index 1340409..62ae98c 100644
--- a/src/apps/pkmosaic.cc
+++ b/src/apps/pkmosaic.cc
@@ -28,24 +28,10 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 #include "base/Optionpk.h"
 #include "algorithms/Histogram.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 using namespace std;
 
 int main(int argc, char *argv[])
 {
-  std::string versionString="version ";
-  versionString+=VERSION;
-  versionString+=", Copyright (C) 2008-2012 Pieter Kempeneers.\n\
-   This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n\
-   This is free software, and you are welcome to redistribute it\n\
-   under certain conditions; use option --license for details.";
-  Optionpk<bool> version_opt("\0","version",versionString,false);
-  Optionpk<bool> license_opt("lic","license","show license information",false);
-  Optionpk<bool> help_opt("h","help","shows this help info",false);
-  Optionpk<bool> todo_opt("\0","todo","",false);
   Optionpk<string>  input_opt("i", "input", "Input image file(s). If input contains multiple images, a multi-band output is created", "");
   Optionpk<string>  output_opt("o", "output", "Output image file", "");
   Optionpk<string>  projection_opt("p", "projection", "projection in EPSG format (leave blank to copy from input file, use EPSG:3035 to use European projection and to force to European grid", "");
@@ -75,53 +61,44 @@ int main(int argc, char *argv[])
   Optionpk<short> class_opt("c", "class", "classes for multi-band output image: each band represents the number of observations for one specific class. Use value 0 for no multi-band output image).", 0);
   Optionpk<bool>  verbose_opt("v", "verbose", "verbose", false);
 
-  version_opt.retrieveOption(argc,argv);
-  license_opt.retrieveOption(argc,argv);
-  help_opt.retrieveOption(argc,argv);
-  todo_opt.retrieveOption(argc,argv);
-
-  if(version_opt[0]||todo_opt[0]){
-    cout << version_opt.getHelp() << endl;
-    cout << "todo: " << todo_opt.getHelp() << endl;
-    exit(0);
+  bool doProcess;//stop process when program was invoked with help option (-h --help)
+  try{
+    doProcess=input_opt.retrieveOption(argc,argv);
+    output_opt.retrieveOption(argc,argv);
+    projection_opt.retrieveOption(argc,argv);
+    extent_opt.retrieveOption(argc,argv);
+    ulx_opt.retrieveOption(argc,argv);
+    uly_opt.retrieveOption(argc,argv);
+    lrx_opt.retrieveOption(argc,argv);
+    lry_opt.retrieveOption(argc,argv);
+    band_opt.retrieveOption(argc,argv);
+    otype_opt.retrieveOption(argc,argv);
+    oformat_opt.retrieveOption(argc,argv);
+    colorTable_opt.retrieveOption(argc,argv);
+    dx_opt.retrieveOption(argc,argv);
+    dy_opt.retrieveOption(argc,argv);
+    option_opt.retrieveOption(argc,argv);
+    flag_opt.retrieveOption(argc,argv);
+    resample_opt.retrieveOption(argc,argv);
+    description_opt.retrieveOption(argc,argv);
+    mrule_opt.retrieveOption(argc,argv);
+    ruleBand_opt.retrieveOption(argc,argv);
+    validBand_opt.retrieveOption(argc,argv);
+    invalid_opt.retrieveOption(argc,argv);
+    minValue_opt.retrieveOption(argc,argv);
+    maxValue_opt.retrieveOption(argc,argv);
+    file_opt.retrieveOption(argc,argv);
+    weight_opt.retrieveOption(argc,argv);
+    class_opt.retrieveOption(argc,argv);
+    verbose_opt.retrieveOption(argc,argv);
   }
-  if(license_opt[0]){
-    cout << Optionpk<bool>::getGPLv3License() << endl;
+  catch(string predefinedString){
+    std::cout << predefinedString << std::endl;
     exit(0);
   }
-  
-  input_opt.retrieveOption(argc,argv);
-  output_opt.retrieveOption(argc,argv);
-  projection_opt.retrieveOption(argc,argv);
-  extent_opt.retrieveOption(argc,argv);
-  ulx_opt.retrieveOption(argc,argv);
-  uly_opt.retrieveOption(argc,argv);
-  lrx_opt.retrieveOption(argc,argv);
-  lry_opt.retrieveOption(argc,argv);
-  band_opt.retrieveOption(argc,argv);
-  otype_opt.retrieveOption(argc,argv);
-  oformat_opt.retrieveOption(argc,argv);
-  colorTable_opt.retrieveOption(argc,argv);
-  dx_opt.retrieveOption(argc,argv);
-  dy_opt.retrieveOption(argc,argv);
-  option_opt.retrieveOption(argc,argv);
-  flag_opt.retrieveOption(argc,argv);
-  resample_opt.retrieveOption(argc,argv);
-  description_opt.retrieveOption(argc,argv);
-  mrule_opt.retrieveOption(argc,argv);
-  ruleBand_opt.retrieveOption(argc,argv);
-  validBand_opt.retrieveOption(argc,argv);
-  invalid_opt.retrieveOption(argc,argv);
-  minValue_opt.retrieveOption(argc,argv);
-  maxValue_opt.retrieveOption(argc,argv);
-  file_opt.retrieveOption(argc,argv);
-  weight_opt.retrieveOption(argc,argv);
-  class_opt.retrieveOption(argc,argv);
-  verbose_opt.retrieveOption(argc,argv);
-
-  if(help_opt[0]){
-    cout << "usage: pkmosaic -i inputimage -o outputimage [OPTIONS]" << endl;
-    exit(0);
+  if(!doProcess){
+    std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+    exit(0);//help was invoked, stop processing
   }
 
   while(invalid_opt.size()<validBand_opt.size())
diff --git a/src/apps/pkndvi.cc b/src/apps/pkndvi.cc
index d792b2f..bda887e 100644
--- a/src/apps/pkndvi.cc
+++ b/src/apps/pkndvi.cc
@@ -23,24 +23,11 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 #include "imageclasses/ImgWriterGdal.h"
 #include "base/Optionpk.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 using namespace std;
 
 int main(int argc, char *argv[])
 {
   //command line options
-  std::string versionString="version ";
-  versionString+=VERSION;
-  versionString+=", Copyright (C) 2008-2012 Pieter Kempeneers.\n\
-   This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n\
-   This is free software, and you are welcome to redistribute it\n\
-   under certain conditions; use option --license for details.";
-  Optionpk<bool> version_opt("\0","version",versionString,false);
-  Optionpk<bool> license_opt("lic","license","show license information",false);
-  Optionpk<bool> help_opt("h","help","shows this help info",false);
   Optionpk<string> input_opt("i","input","input image file","");
   Optionpk<string> output_opt("o","output","output image file containing ndvi","");
   Optionpk<short> band_opt("b", "band", "Bands to be used for vegetation index (see rule option)", 0);
@@ -58,37 +45,32 @@ int main(int argc, char *argv[])
   Optionpk<string> option_opt("co", "co", "options: NAME=VALUE [-co COMPRESS=LZW] [-co INTERLEAVE=BAND]");
   Optionpk<short> verbose_opt("v", "verbose", "verbose mode if > 0", 0);
 
-  version_opt.retrieveOption(argc,argv);
-  license_opt.retrieveOption(argc,argv);
-  help_opt.retrieveOption(argc,argv);
-  input_opt.retrieveOption(argc,argv);
-  output_opt.retrieveOption(argc,argv);
-  band_opt.retrieveOption(argc,argv);
-  rule_opt.retrieveOption(argc,argv);
-  invalid_opt.retrieveOption(argc,argv);
-  flag_opt.retrieveOption(argc,argv);
-  colorTable_opt.retrieveOption(argc,argv);
-  description_opt.retrieveOption(argc,argv);
-  minmax_opt.retrieveOption(argc,argv);
-  eps_opt.retrieveOption(argc,argv);
-  scale_opt.retrieveOption(argc,argv);
-  offset_opt.retrieveOption(argc,argv);
-  otype_opt.retrieveOption(argc,argv);
-  oformat_opt.retrieveOption(argc,argv);
-  option_opt.retrieveOption(argc,argv);
-  verbose_opt.retrieveOption(argc,argv);
-
-  if(version_opt[0]){
-    cout << version_opt.getHelp() << endl;
-    exit(0);
+  bool doProcess;//stop process when program was invoked with help option (-h --help)
+  try{
+    doProcess=input_opt.retrieveOption(argc,argv);
+    output_opt.retrieveOption(argc,argv);
+    band_opt.retrieveOption(argc,argv);
+    rule_opt.retrieveOption(argc,argv);
+    invalid_opt.retrieveOption(argc,argv);
+    flag_opt.retrieveOption(argc,argv);
+    colorTable_opt.retrieveOption(argc,argv);
+    description_opt.retrieveOption(argc,argv);
+    minmax_opt.retrieveOption(argc,argv);
+    eps_opt.retrieveOption(argc,argv);
+    scale_opt.retrieveOption(argc,argv);
+    offset_opt.retrieveOption(argc,argv);
+    otype_opt.retrieveOption(argc,argv);
+    oformat_opt.retrieveOption(argc,argv);
+    option_opt.retrieveOption(argc,argv);
+    verbose_opt.retrieveOption(argc,argv);
   }
-  if(license_opt[0]){
-    cout << Optionpk<bool>::getGPLv3License() << endl;
+  catch(string predefinedString){
+    std::cout << predefinedString << std::endl;
     exit(0);
   }
-  if(help_opt[0]){
-    cout << "usage: pkinfo -i inputimage -o outputimage [OPTIONS]" << endl;
-    exit(0);
+  if(!doProcess){
+    std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+    exit(0);//help was invoked, stop processing
   }
 
   if(scale_opt.size()<2){
diff --git a/src/apps/pkopt_svm.cc b/src/apps/pkopt_svm.cc
index 29ff82e..ea2b9da 100644
--- a/src/apps/pkopt_svm.cc
+++ b/src/apps/pkopt_svm.cc
@@ -31,10 +31,6 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 #include "algorithms/svm.h"
 #include "pkclassify_nn.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 #define Malloc(type,n) (type *)malloc((n)*sizeof(type))
                                     //declare objective function
 double objFunction(const std::vector<double> &x, std::vector<double> &grad, void *my_func_data);
@@ -153,16 +149,6 @@ int main(int argc, char *argv[])
 {
   map<short,int> reclassMap;
   vector<int> vreclass;
-  std::string versionString="version ";
-  versionString+=VERSION;
-  versionString+=", Copyright (C) 2008-2012 Pieter Kempeneers.\n\
-   This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n\
-   This is free software, and you are welcome to redistribute it\n\
-   under certain conditions; use option --license for details.";
-  Optionpk<bool> version_opt("\0","version",versionString,false);
-  Optionpk<bool> license_opt("lic","license","show license information",false);
-  Optionpk<bool> todo_opt("\0","todo","",false);
-  Optionpk<bool> help_opt("h","help","shows this help info",false);
   Optionpk<string> training_opt("t", "training", "training shape file. A single shape file contains all training features (must be set as: B0, B1, B2,...) for all classes (class numbers identified by label option)."); 
   Optionpk<string> label_opt("\0", "label", "identifier for class label in training shape file.","label"); 
   Optionpk<unsigned short> reclass_opt("\0", "rc", "reclass code (e.g. --rc=12 --rc=23 to reclass first two classes to 12 and 23 resp.).", 0);
@@ -179,54 +165,46 @@ int main(int argc, char *argv[])
   Optionpk<string> algorithm_opt("a", "algorithm", "optimization algorithm (see http://ab-initio.mit.edu/wiki/index.php/NLopt_Algorithms)","LN_COBYLA"); 
   Optionpk<double> tolerance_opt("tol","tolerance","relative tolerance for stopping criterion",0.0001);
 
-  version_opt.retrieveOption(argc,argv);
-  license_opt.retrieveOption(argc,argv);
-  help_opt.retrieveOption(argc,argv);
-  todo_opt.retrieveOption(argc,argv);
-  training_opt.retrieveOption(argc,argv);
-  label_opt.retrieveOption(argc,argv);
-  reclass_opt.retrieveOption(argc,argv);
-  balance_opt.retrieveOption(argc,argv);
-  minSize_opt.retrieveOption(argc,argv);
-  start_opt.retrieveOption(argc,argv);
-  end_opt.retrieveOption(argc,argv);
-  band_opt.retrieveOption(argc,argv);
-  offset_opt.retrieveOption(argc,argv);
-  scale_opt.retrieveOption(argc,argv);
-  svm_type_opt.retrieveOption(argc,argv);
-  kernel_type_opt.retrieveOption(argc,argv);
-  kernel_degree_opt.retrieveOption(argc,argv);
-  gamma_opt.retrieveOption(argc,argv);
-  coef0_opt.retrieveOption(argc,argv);
-  ccost_opt.retrieveOption(argc,argv);
-  nu_opt.retrieveOption(argc,argv);
-  epsilon_loss_opt.retrieveOption(argc,argv);
-  cache_opt.retrieveOption(argc,argv);
-  epsilon_tol_opt.retrieveOption(argc,argv);
-  shrinking_opt.retrieveOption(argc,argv);
-  prob_est_opt.retrieveOption(argc,argv);
-  cv_opt.retrieveOption(argc,argv);
-  costfunction_opt.retrieveOption(argc,argv);
-  maxit_opt.retrieveOption(argc,argv);
-  tolerance_opt.retrieveOption(argc,argv);
-  algorithm_opt.retrieveOption(argc,argv);
-  verbose_opt.retrieveOption(argc,argv);
-
-  if(version_opt[0]||todo_opt[0]){
-    std::cout << version_opt.getHelp() << std::endl;
-    std::cout << "todo: " << todo_opt.getHelp() << std::endl;
-    exit(0);
+  bool doProcess;//stop process when program was invoked with help option (-h --help)
+  try{
+    doProcess=training_opt.retrieveOption(argc,argv);
+    label_opt.retrieveOption(argc,argv);
+    reclass_opt.retrieveOption(argc,argv);
+    balance_opt.retrieveOption(argc,argv);
+    minSize_opt.retrieveOption(argc,argv);
+    start_opt.retrieveOption(argc,argv);
+    end_opt.retrieveOption(argc,argv);
+    band_opt.retrieveOption(argc,argv);
+    offset_opt.retrieveOption(argc,argv);
+    scale_opt.retrieveOption(argc,argv);
+    svm_type_opt.retrieveOption(argc,argv);
+    kernel_type_opt.retrieveOption(argc,argv);
+    kernel_degree_opt.retrieveOption(argc,argv);
+    gamma_opt.retrieveOption(argc,argv);
+    coef0_opt.retrieveOption(argc,argv);
+    ccost_opt.retrieveOption(argc,argv);
+    nu_opt.retrieveOption(argc,argv);
+    epsilon_loss_opt.retrieveOption(argc,argv);
+    cache_opt.retrieveOption(argc,argv);
+    epsilon_tol_opt.retrieveOption(argc,argv);
+    shrinking_opt.retrieveOption(argc,argv);
+    prob_est_opt.retrieveOption(argc,argv);
+    cv_opt.retrieveOption(argc,argv);
+    costfunction_opt.retrieveOption(argc,argv);
+    maxit_opt.retrieveOption(argc,argv);
+    tolerance_opt.retrieveOption(argc,argv);
+    algorithm_opt.retrieveOption(argc,argv);
+    verbose_opt.retrieveOption(argc,argv);
   }
-  if(license_opt[0]){
-    std::cout << Optionpk<bool>::getGPLv3License() << std::endl;
+  catch(string predefinedString){
+    std::cout << predefinedString << std::endl;
     exit(0);
   }
-  if(help_opt[0]){
-    std::cout << "usage: pkopt_svm -t training [OPTIONS]" << std::endl;
-    exit(0);
+  if(!doProcess){
+    std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+    exit(0);//help was invoked, stop processing
   }
 
-
   assert(training_opt[0].size());
   if(verbose_opt[0]>=1)
     std::cout << "training shape file: " << training_opt[0] << std::endl;
diff --git a/src/apps/pkreclass.cc b/src/apps/pkreclass.cc
index 407b0c4..e976877 100644
--- a/src/apps/pkreclass.cc
+++ b/src/apps/pkreclass.cc
@@ -25,24 +25,10 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 #include "imageclasses/ImgReaderGdal.h"
 #include "imageclasses/ImgWriterGdal.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 using namespace std;
 
 int main(int argc, char *argv[])
 {
-  std::string versionString="version ";
-  versionString+=VERSION;
-  versionString+=", Copyright (C) 2008-2012 Pieter Kempeneers.\n\
-   This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n\
-   This is free software, and you are welcome to redistribute it\n\
-   under certain conditions; use option --license for details.";
-  Optionpk<bool> version_opt("\0","version",versionString,false);
-  Optionpk<bool> license_opt("lic","license","show license information",false);
-  Optionpk<bool> help_opt("h","help","shows this help info",false);
-  Optionpk<bool> todo_opt("\0","todo","",false);
   Optionpk<string>  input_opt("i", "input", "Input image", "");
   Optionpk<string>  mask_opt("m", "mask", "Mask image(s)", "");
   Optionpk<string> output_opt("o", "output", "Output mask file", "");
@@ -59,39 +45,31 @@ int main(int argc, char *argv[])
   Optionpk<string> description_opt("d", "description", "Set image description", "");
   Optionpk<short> verbose_opt("v", "verbose", "verbose", 0);
 
-  version_opt.retrieveOption(argc,argv);
-  license_opt.retrieveOption(argc,argv);
-  help_opt.retrieveOption(argc,argv);
-  todo_opt.retrieveOption(argc,argv);
-
-  if(version_opt[0]||todo_opt[0]){
-    cout << version_opt.getHelp() << endl;
-    cout << "todo: " << todo_opt.getHelp() << endl;
-    exit(0);
+  bool doProcess;//stop process when program was invoked with help option (-h --help)
+  try{
+    doProcess=input_opt.retrieveOption(argc,argv);
+    mask_opt.retrieveOption(argc,argv);
+    invalid_opt.retrieveOption(argc,argv);
+    flag_opt.retrieveOption(argc,argv);
+    code_opt.retrieveOption(argc,argv);
+    class_opt.retrieveOption(argc,argv);
+    reclass_opt.retrieveOption(argc,argv);
+    colorTable_opt.retrieveOption(argc,argv);
+    output_opt.retrieveOption(argc,argv);
+    type_opt.retrieveOption(argc,argv);
+    band_opt.retrieveOption(argc,argv);
+    fieldname_opt.retrieveOption(argc,argv);
+    option_opt.retrieveOption(argc,argv);
+    description_opt.retrieveOption(argc,argv);
+    verbose_opt.retrieveOption(argc,argv);
   }
-  if(license_opt[0]){
-    cout << Optionpk<bool>::getGPLv3License() << endl;
+  catch(string predefinedString){
+    std::cout << predefinedString << std::endl;
     exit(0);
   }
-  input_opt.retrieveOption(argc,argv);
-  mask_opt.retrieveOption(argc,argv);
-  invalid_opt.retrieveOption(argc,argv);
-  flag_opt.retrieveOption(argc,argv);
-  code_opt.retrieveOption(argc,argv);
-  class_opt.retrieveOption(argc,argv);
-  reclass_opt.retrieveOption(argc,argv);
-  colorTable_opt.retrieveOption(argc,argv);
-  output_opt.retrieveOption(argc,argv);
-  type_opt.retrieveOption(argc,argv);
-  band_opt.retrieveOption(argc,argv);
-  fieldname_opt.retrieveOption(argc,argv);
-  option_opt.retrieveOption(argc,argv);
-  description_opt.retrieveOption(argc,argv);
-  verbose_opt.retrieveOption(argc,argv);
-
-  if(help_opt[0]){
-    cout << "usage: pkinfo -i inputimage -o outputimage [OPTIONS]" << endl;
-    exit(0);
+  if(!doProcess){
+    std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+    exit(0);//help was invoked, stop processing
   }
 
   // vector<short> bandVector;
diff --git a/src/apps/pksensormodel.cc b/src/apps/pksensormodel.cc
index 90e3f38..3f4fb06 100644
--- a/src/apps/pksensormodel.cc
+++ b/src/apps/pksensormodel.cc
@@ -28,10 +28,6 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 #include "algorithms/Histogram.h"
 #include "pksensormodel.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 double objFunction(const std::vector<double> &x, std::vector<double> &grad, void *my_func_data){
   assert(grad.empty());
   double error=0;
@@ -51,16 +47,6 @@ double objFunction(const std::vector<double> &x, std::vector<double> &grad, void
 
 int main(int argc, char *argv[])
 {
-  std::string versionString="version ";
-  versionString+=VERSION;
-  versionString+=", Copyright (C) 2008-2012 Pieter Kempeneers.\n\
-   This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n\
-   This is free software, and you are welcome to redistribute it\n\
-   under certain conditions; use option --license for details.";
-  Optionpk<bool> version_opt("\0","version",versionString,false);
-  Optionpk<bool> license_opt("lic","license","show license information",false);
-  Optionpk<bool> todo_opt("\0","todo","",false);
-  Optionpk<bool> help_opt("h","help","shows this help info",false);
   Optionpk<string> input_opt("i","input","name of the input text file");
   Optionpk<string> datum_opt("datum","datum","GPS datum of the input points","WGS84");
   Optionpk<int> s_srs_opt("s_srs","s_srs","source EPSG (integer) code of GCP input coordinates",4326);
@@ -107,68 +93,61 @@ int main(int argc, char *argv[])
   Optionpk<string> algorithm_opt("a", "algorithm", "optimization algorithm (see http://ab-initio.mit.edu/wiki/index.php/NLopt_Algorithms)","LN_COBYLA"); 
   Optionpk<short> verbose_opt("v", "verbose", "verbose mode when > 0", 0);
 
-  version_opt.retrieveOption(argc,argv);
-  license_opt.retrieveOption(argc,argv);
-  help_opt.retrieveOption(argc,argv);
-  todo_opt.retrieveOption(argc,argv);
-  input_opt.retrieveOption(argc,argv);
-  datum_opt.retrieveOption(argc,argv);
-  s_srs_opt.retrieveOption(argc,argv);
-  t_srs_opt.retrieveOption(argc,argv);
-  focal_opt.retrieveOption(argc,argv);
-  dx_opt.retrieveOption(argc,argv);
-  dy_opt.retrieveOption(argc,argv);
-  nx_opt.retrieveOption(argc,argv);
-  ny_opt.retrieveOption(argc,argv);
-  x_opt.retrieveOption(argc,argv);
-  y_opt.retrieveOption(argc,argv);
-  z_opt.retrieveOption(argc,argv);
-  errorZ_opt.retrieveOption(argc,argv);
-  xl_opt.retrieveOption(argc,argv);
-  yl_opt.retrieveOption(argc,argv);
-  zl_opt.retrieveOption(argc,argv);
-  roll_opt.retrieveOption(argc,argv);
-  pitch_opt.retrieveOption(argc,argv);
-  yaw_opt.retrieveOption(argc,argv);
-  col_opt.retrieveOption(argc,argv);
-  row_opt.retrieveOption(argc,argv);
-  // bcpos_opt.retrieveOption(argc,argv);
-  bcatt_opt.retrieveOption(argc,argv);
-  fov_opt.retrieveOption(argc,argv);
-  ppx_opt.retrieveOption(argc,argv);
-  ppy_opt.retrieveOption(argc,argv);
-  fs_opt.retrieveOption(argc,argv);
-  output_opt.retrieveOption(argc,argv);
-  sensor_opt.retrieveOption(argc,argv);
-  polynome_opt.retrieveOption(argc,argv);
-  mean_opt.retrieveOption(argc,argv);
-  optimize_opt.retrieveOption(argc,argv);
-  lb_opt.retrieveOption(argc,argv);
-  ub_opt.retrieveOption(argc,argv);
-  maxit_opt.retrieveOption(argc,argv);
-  tolerance_opt.retrieveOption(argc,argv);
-  init_opt.retrieveOption(argc,argv);
-  threshold_opt.retrieveOption(argc,argv);
-  gcprad_opt.retrieveOption(argc,argv);
-  pplrad_opt.retrieveOption(argc,argv);
-  aplrad_opt.retrieveOption(argc,argv);
-  bcrad_opt.retrieveOption(argc,argv);
-  getzenith_opt.retrieveOption(argc,argv);
-  algorithm_opt.retrieveOption(argc,argv);
-  verbose_opt.retrieveOption(argc,argv);
-
-  if(version_opt[0]){
-    cout << version_opt.getHelp() << endl;
-    exit(0);
+  bool doProcess;//stop process when program was invoked with help option (-h --help)
+  try{
+    doProcess=input_opt.retrieveOption(argc,argv);
+    datum_opt.retrieveOption(argc,argv);
+    s_srs_opt.retrieveOption(argc,argv);
+    t_srs_opt.retrieveOption(argc,argv);
+    focal_opt.retrieveOption(argc,argv);
+    dx_opt.retrieveOption(argc,argv);
+    dy_opt.retrieveOption(argc,argv);
+    nx_opt.retrieveOption(argc,argv);
+    ny_opt.retrieveOption(argc,argv);
+    x_opt.retrieveOption(argc,argv);
+    y_opt.retrieveOption(argc,argv);
+    z_opt.retrieveOption(argc,argv);
+    errorZ_opt.retrieveOption(argc,argv);
+    xl_opt.retrieveOption(argc,argv);
+    yl_opt.retrieveOption(argc,argv);
+    zl_opt.retrieveOption(argc,argv);
+    roll_opt.retrieveOption(argc,argv);
+    pitch_opt.retrieveOption(argc,argv);
+    yaw_opt.retrieveOption(argc,argv);
+    col_opt.retrieveOption(argc,argv);
+    row_opt.retrieveOption(argc,argv);
+    // bcpos_opt.retrieveOption(argc,argv);
+    bcatt_opt.retrieveOption(argc,argv);
+    fov_opt.retrieveOption(argc,argv);
+    ppx_opt.retrieveOption(argc,argv);
+    ppy_opt.retrieveOption(argc,argv);
+    fs_opt.retrieveOption(argc,argv);
+    output_opt.retrieveOption(argc,argv);
+    sensor_opt.retrieveOption(argc,argv);
+    polynome_opt.retrieveOption(argc,argv);
+    mean_opt.retrieveOption(argc,argv);
+    optimize_opt.retrieveOption(argc,argv);
+    lb_opt.retrieveOption(argc,argv);
+    ub_opt.retrieveOption(argc,argv);
+    maxit_opt.retrieveOption(argc,argv);
+    tolerance_opt.retrieveOption(argc,argv);
+    init_opt.retrieveOption(argc,argv);
+    threshold_opt.retrieveOption(argc,argv);
+    gcprad_opt.retrieveOption(argc,argv);
+    pplrad_opt.retrieveOption(argc,argv);
+    aplrad_opt.retrieveOption(argc,argv);
+    bcrad_opt.retrieveOption(argc,argv);
+    getzenith_opt.retrieveOption(argc,argv);
+    algorithm_opt.retrieveOption(argc,argv);
+    verbose_opt.retrieveOption(argc,argv);
   }
-  if(license_opt[0]){
-    cout << Optionpk<bool>::getGPLv3License() << endl;
+  catch(string predefinedString){
+    std::cout << predefinedString << std::endl;
     exit(0);
   }
-
-  if(help_opt[0]){
-    cout << "usage: pksensormodel -i asciifile [OPTIONS]" << endl;
-    exit(0);
+  if(!doProcess){
+    std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+    exit(0);//help was invoked, stop processing
   }
 
   //ID, row of GCP, column of GCP, x_GCP, y_GCP, Z_GCP, x_platform, y_platform, z_platform, platform roll, platform pitch, platform yaw of point.
diff --git a/src/apps/pksetmask.cc b/src/apps/pksetmask.cc
index 8b6f87d..9b85a7f 100644
--- a/src/apps/pksetmask.cc
+++ b/src/apps/pksetmask.cc
@@ -23,25 +23,11 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 #include "imageclasses/ImgWriterGdal.h"
 #include "base/Optionpk.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 using namespace std;
 
 int main(int argc, char *argv[])
 {
   //command line options
-  std::string versionString="version ";
-  versionString+=VERSION;
-  versionString+=", Copyright (C) 2008-2012 Pieter Kempeneers.\n\
-   This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n\
-   This is free software, and you are welcome to redistribute it\n\
-   under certain conditions; use option --license for details.";
-  Optionpk<bool> version_opt("\0","version",versionString,false);
-  Optionpk<bool> license_opt("lic","license","show license information",false);
-  Optionpk<bool> help_opt("h","help","shows this help info",false);
-  Optionpk<bool> todo_opt("\0","todo","",false);
   Optionpk<string>  input_opt("i", "input", "Input image", "");
   Optionpk<string>  mask_opt("m", "mask", "Mask image(s)", "");
   Optionpk<string> output_opt("o", "output", "Output mask file", "");
@@ -54,35 +40,27 @@ int main(int argc, char *argv[])
   Optionpk<string> colorTable_opt("ct", "ct", "color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid)", "");
   Optionpk<short> verbose_opt("v", "verbose", "verbose", 0);
 
-  version_opt.retrieveOption(argc,argv);
-  license_opt.retrieveOption(argc,argv);
-  help_opt.retrieveOption(argc,argv);
-  todo_opt.retrieveOption(argc,argv);
-
-  if(version_opt[0]||todo_opt[0]){
-    cout << version_opt.getHelp() << endl;
-    cout << "todo: " << todo_opt.getHelp() << endl;
-    exit(0);
+  bool doProcess;//stop process when program was invoked with help option (-h --help)
+  try{
+    doProcess=input_opt.retrieveOption(argc,argv);
+    mask_opt.retrieveOption(argc,argv);
+    output_opt.retrieveOption(argc,argv);
+    otype_opt.retrieveOption(argc,argv);
+    oformat_opt.retrieveOption(argc,argv);
+    option_opt.retrieveOption(argc,argv);
+    invalid_opt.retrieveOption(argc,argv);
+    operator_opt.retrieveOption(argc,argv);
+    flag_opt.retrieveOption(argc,argv);
+    colorTable_opt.retrieveOption(argc,argv);
+    verbose_opt.retrieveOption(argc,argv);
   }
-  if(license_opt[0]){
-    cout << Optionpk<bool>::getGPLv3License() << endl;
+  catch(string predefinedString){
+    std::cout << predefinedString << std::endl;
     exit(0);
   }
-  input_opt.retrieveOption(argc,argv);
-  mask_opt.retrieveOption(argc,argv);
-  output_opt.retrieveOption(argc,argv);
-  otype_opt.retrieveOption(argc,argv);
-  oformat_opt.retrieveOption(argc,argv);
-  option_opt.retrieveOption(argc,argv);
-  invalid_opt.retrieveOption(argc,argv);
-  operator_opt.retrieveOption(argc,argv);
-  flag_opt.retrieveOption(argc,argv);
-  colorTable_opt.retrieveOption(argc,argv);
-  verbose_opt.retrieveOption(argc,argv);
-
-  if(help_opt[0]){
-    cout << "usage: pksetmask -i inputimage -o outputimage -m maskimage [OPTIONS]" << endl;
-    exit(0);
+  if(!doProcess){
+    std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+    exit(0);//help was invoked, stop processing
   }
 
   if(verbose_opt[0])
diff --git a/src/apps/pksieve.cc b/src/apps/pksieve.cc
index 747557e..7b8dee3 100644
--- a/src/apps/pksieve.cc
+++ b/src/apps/pksieve.cc
@@ -30,23 +30,9 @@ extern "C" {
 #include "ogr_api.h"
 }
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 using namespace std;
 
 int main(int argc,char **argv) {
-  std::string versionString="version ";
-  versionString+=VERSION;
-  versionString+=", Copyright (C) 2008-2012 Pieter Kempeneers.\n\
-   This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n\
-   This is free software, and you are welcome to redistribute it\n\
-   under certain conditions; use option --license for details.";
-  Optionpk<bool> version_opt("\0","version",versionString,false);
-  Optionpk<bool> license_opt("lic","license","show license information",false);
-  Optionpk<bool> help_opt("h","help","shows this help info",false);
-  Optionpk<bool> todo_opt("\0","todo","",false);
   Optionpk<string> input_opt("i", "input", "Input image file", "");
   Optionpk<string> mask_opt("m", "mask", "Mask band indicating pixels to be interpolated (zero valued) ", "");
   Optionpk<string> output_opt("o", "output", "Output image file", "");
@@ -55,30 +41,23 @@ int main(int argc,char **argv) {
   Optionpk<int> size_opt("s", "size", "raster polygons with sizes smaller than this will be merged into their largest neighbour. No sieve is performed if size = 0", 0);
   Optionpk<short> verbose_opt("v", "verbose", "verbose mode if > 0", 0);
 
-  version_opt.retrieveOption(argc,argv);
-  license_opt.retrieveOption(argc,argv);
-  help_opt.retrieveOption(argc,argv);
-  todo_opt.retrieveOption(argc,argv);
-
-  input_opt.retrieveOption(argc,argv);
-  mask_opt.retrieveOption(argc,argv);
-  output_opt.retrieveOption(argc,argv);
-  band_opt.retrieveOption(argc,argv);
-  connect_opt.retrieveOption(argc,argv);
-  size_opt.retrieveOption(argc,argv);
-  verbose_opt.retrieveOption(argc,argv);
-
-  if(version_opt[0]){
-    cout << version_opt.getHelp() << endl;
-    exit(0);
+  bool doProcess;//stop process when program was invoked with help option (-h --help)
+  try{
+    doProcess=input_opt.retrieveOption(argc,argv);
+    mask_opt.retrieveOption(argc,argv);
+    output_opt.retrieveOption(argc,argv);
+    band_opt.retrieveOption(argc,argv);
+    connect_opt.retrieveOption(argc,argv);
+    size_opt.retrieveOption(argc,argv);
+    verbose_opt.retrieveOption(argc,argv);
   }
-  if(license_opt[0]){
-    cout << Optionpk<bool>::getGPLv3License() << endl;
+  catch(string predefinedString){
+    std::cout << predefinedString << std::endl;
     exit(0);
   }
-  if(help_opt[0]){
-    cout << "usage: pksieve -i inputimage -o outputimage [OPTIONS]" << endl;
-    exit(0);
+  if(!doProcess){
+    std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+    exit(0);//help was invoked, stop processing
   }
 
   GDALAllRegister();
diff --git a/src/apps/pkstat.cc b/src/apps/pkstat.cc
index d24f3e6..f6940ff 100644
--- a/src/apps/pkstat.cc
+++ b/src/apps/pkstat.cc
@@ -24,24 +24,10 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 #include "base/Optionpk.h"
 #include "algorithms/Histogram.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 using namespace std;
 
 int main(int argc, char *argv[])
 {
-  std::string versionString="version ";
-  versionString+=VERSION;
-  versionString+=", Copyright (C) 2008-2012 Pieter Kempeneers.\n\
-   This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n\
-   This is free software, and you are welcome to redistribute it\n\
-   under certain conditions; use option --license for details.";
-  Optionpk<bool> version_opt("\0","version",versionString,false);
-  Optionpk<bool> license_opt("lic","license","show license information",false);
-  Optionpk<bool> todo_opt("\0","todo","",false);
-  Optionpk<bool> help_opt("h","help","shows this help info",false);
   Optionpk<string> input_opt("i","input","name of the input text file","");
   Optionpk<char> fs_opt("fs","fs","field separator.",' ');
   Optionpk<bool> output_opt("o","output","output the selected columns",false);
@@ -66,46 +52,39 @@ int main(int argc, char *argv[])
   Optionpk<bool> reg_opt("reg","regression","calculate linear regression error between two columns (defined by -c <col1> -c <col2>",false);
   Optionpk<short> verbose_opt("v", "verbose", "verbose mode when > 0", 0);
 
-  version_opt.retrieveOption(argc,argv);
-  license_opt.retrieveOption(argc,argv);
-  help_opt.retrieveOption(argc,argv);
-  todo_opt.retrieveOption(argc,argv);
-  input_opt.retrieveOption(argc,argv);
-  fs_opt.retrieveOption(argc,argv);
-  output_opt.retrieveOption(argc,argv);
-  col_opt.retrieveOption(argc,argv);
-  range_opt.retrieveOption(argc,argv);
-  size_opt.retrieveOption(argc,argv);
-  mean_opt.retrieveOption(argc,argv);
-  median_opt.retrieveOption(argc,argv);
-  var_opt.retrieveOption(argc,argv);
-  stdev_opt.retrieveOption(argc,argv);
-  skewness_opt.retrieveOption(argc,argv);
-  kurtosis_opt.retrieveOption(argc,argv);
-  sum_opt.retrieveOption(argc,argv);
-  minmax_opt.retrieveOption(argc,argv);
-  min_opt.retrieveOption(argc,argv);
-  max_opt.retrieveOption(argc,argv);
-  histogram_opt.retrieveOption(argc,argv);
-  nbin_opt.retrieveOption(argc,argv);
-  relative_opt.retrieveOption(argc,argv);
-  correlation_opt.retrieveOption(argc,argv);
-  rmse_opt.retrieveOption(argc,argv);
-  reg_opt.retrieveOption(argc,argv);
-  verbose_opt.retrieveOption(argc,argv);
-
-  if(version_opt[0]){
-    cout << version_opt.getHelp() << endl;
-    exit(0);
+  bool doProcess;//stop process when program was invoked with help option (-h --help)
+  try{
+    doProcess=input_opt.retrieveOption(argc,argv);
+    fs_opt.retrieveOption(argc,argv);
+    output_opt.retrieveOption(argc,argv);
+    col_opt.retrieveOption(argc,argv);
+    range_opt.retrieveOption(argc,argv);
+    size_opt.retrieveOption(argc,argv);
+    mean_opt.retrieveOption(argc,argv);
+    median_opt.retrieveOption(argc,argv);
+    var_opt.retrieveOption(argc,argv);
+    stdev_opt.retrieveOption(argc,argv);
+    skewness_opt.retrieveOption(argc,argv);
+    kurtosis_opt.retrieveOption(argc,argv);
+    sum_opt.retrieveOption(argc,argv);
+    minmax_opt.retrieveOption(argc,argv);
+    min_opt.retrieveOption(argc,argv);
+    max_opt.retrieveOption(argc,argv);
+    histogram_opt.retrieveOption(argc,argv);
+    nbin_opt.retrieveOption(argc,argv);
+    relative_opt.retrieveOption(argc,argv);
+    correlation_opt.retrieveOption(argc,argv);
+    rmse_opt.retrieveOption(argc,argv);
+    reg_opt.retrieveOption(argc,argv);
+    verbose_opt.retrieveOption(argc,argv);
   }
-  if(license_opt[0]){
-    cout << Optionpk<bool>::getGPLv3License() << endl;
+  catch(string predefinedString){
+    std::cout << predefinedString << std::endl;
     exit(0);
   }
-
-  if(help_opt[0]){
-    cout << "usage: pkstat -i asciifile [OPTIONS]" << endl;
-    exit(0);
+  if(!doProcess){
+    std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+    exit(0);//help was invoked, stop processing
   }
 
   vector< vector<double> > dataVector(col_opt.size());
diff --git a/src/apps/pkstatogr.cc b/src/apps/pkstatogr.cc
index 51ff299..a1d497b 100644
--- a/src/apps/pkstatogr.cc
+++ b/src/apps/pkstatogr.cc
@@ -25,22 +25,8 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 #include "imageclasses/ImgReaderOgr.h"
 #include "algorithms/Histogram.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 int main(int argc, char *argv[])
 {
-  std::string versionString="version ";
-  versionString+=VERSION;
-  versionString+=", Copyright (C) 2008-2012 Pieter Kempeneers.\n\
-   This program comes with ABSOLUTELY NO WARRANTY; for details type use option -h.\n\
-   This is free software, and you are welcome to redistribute it\n\
-   under certain conditions; use option --license for details.";
-  Optionpk<bool> version_opt("\0","version",versionString,false);
-  Optionpk<bool> license_opt("lic","license","show license information",false);
-  Optionpk<bool> help_opt("h","help","shows this help info",false);
-  Optionpk<bool> todo_opt("\0","todo","",false);
   Optionpk<string> input_opt("i", "input", "Input shape file", "");
   Optionpk<string> fieldname_opt("n", "fname", "fields on which to calculate statistics", "");
   Optionpk<short> nbin_opt("nbin", "nbin", "number of bins", 0);
@@ -52,34 +38,26 @@ int main(int argc, char *argv[])
   Optionpk<bool> size_opt("s","size","sample size (number of points)",false);
   Optionpk<short> verbose_opt("v", "verbose", "verbose mode if > 0", 0);
 
-  version_opt.retrieveOption(argc,argv);
-  license_opt.retrieveOption(argc,argv);
-  help_opt.retrieveOption(argc,argv);
-  todo_opt.retrieveOption(argc,argv);
-
-  input_opt.retrieveOption(argc,argv);
-  fieldname_opt.retrieveOption(argc,argv);
-  nbin_opt.retrieveOption(argc,argv);
-  min_opt.retrieveOption(argc,argv);
-  max_opt.retrieveOption(argc,argv);
-  mean_opt.retrieveOption(argc,argv);
-  median_opt.retrieveOption(argc,argv);
-  stdev_opt.retrieveOption(argc,argv);
-  size_opt.retrieveOption(argc,argv);
-  verbose_opt.retrieveOption(argc,argv);
-
-  if(version_opt[0]||todo_opt[0]){
-    std::cout << version_opt.getHelp() << std::endl;
-    std::cout << "todo: " << todo_opt.getHelp() << std::endl;
-    exit(0);
+  bool doProcess;//stop process when program was invoked with help option (-h --help)
+  try{
+    doProcess=input_opt.retrieveOption(argc,argv);
+    fieldname_opt.retrieveOption(argc,argv);
+    nbin_opt.retrieveOption(argc,argv);
+    min_opt.retrieveOption(argc,argv);
+    max_opt.retrieveOption(argc,argv);
+    mean_opt.retrieveOption(argc,argv);
+    median_opt.retrieveOption(argc,argv);
+    stdev_opt.retrieveOption(argc,argv);
+    size_opt.retrieveOption(argc,argv);
+    verbose_opt.retrieveOption(argc,argv);
   }
-  if(license_opt[0]){
-    std::cout << Optionpk<bool>::getGPLv3License() << std::endl;
+  catch(string predefinedString){
+    std::cout << predefinedString << std::endl;
     exit(0);
   }
-  if(help_opt[0]){
-    std::cout << "usage: pkstatogr -i inputimage -n nbin -n fieldname [-n fieldname]" << std::endl;
-    exit(0);
+  if(!doProcess){
+    std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl;
+    exit(0);//help was invoked, stop processing
   }
 
   ImgReaderOgr imgReader;
diff --git a/src/base/Optionpk.h b/src/base/Optionpk.h
index 8c84b46..11379d9 100644
--- a/src/base/Optionpk.h
+++ b/src/base/Optionpk.h
@@ -37,6 +37,7 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 
 using namespace std;
 
+///throw this class when syntax error in command line option
 class BadConversion : public runtime_error {
  public:
  BadConversion(string const& s)
@@ -44,29 +45,31 @@ class BadConversion : public runtime_error {
     { }
 };
 
-template<typename T> inline T string2type(std::string const& s,bool failIfLeftoverChars){
+///convert command line option to value of the defined type, throw exception in case of failure
+template<typename T> inline T string2type(std::string const& s){
   std::istringstream i(s);
-  char c;
   T x;
-  if (!(i >> x) || (failIfLeftoverChars && i.get(c)))
+  if (!(i >> x) )
      throw BadConversion(s);
   return x;
 }
 
-template<typename T> inline T string2type(std::string const& s){
+///convert command line option to value of the defined type, throw if entire string could not get converted
+template<typename T> inline T string2type(std::string const& s,bool failIfLeftoverChars){
   std::istringstream i(s);
+  char c;
   T x;
-  if (!(i >> x) )
+  if (!(i >> x) || (failIfLeftoverChars && i.get(c)))
      throw BadConversion(s);
   return x;
 }
 
-//specialization for string
+///specialization for string
 template<> inline std::string string2type(std::string const& s){
   return s;
 }
 
-//specialization for OGRFieldType
+///specialization for OGRFieldType
 template<> inline OGRFieldType string2type(std::string const& s){
   OGRFieldType ftype;
   int ogr_typecount=11;//hard coded for now!
@@ -78,13 +81,14 @@ template<> inline OGRFieldType string2type(std::string const& s){
   return ftype;
 }
 
+///serialization for help or to dump option values to screen in verbose mode
 template<typename T> inline std::string type2string(T const& value){
   std::ostringstream oss;
   oss << value;
   return oss.str();
 }
 
-//specialization for bool
+///specialization for bool
 template<> inline std::string type2string(bool const& value){
   if(value)
     return("true");
@@ -92,7 +96,7 @@ template<> inline std::string type2string(bool const& value){
     return("false");
 }
 
-//specialization for string
+///specialization for string
 template<> inline std::string type2string(std::string const& value){
   // if(value.empty())
   //   return("<empty string>");
@@ -100,7 +104,7 @@ template<> inline std::string type2string(std::string const& value){
     return(value);
 }
 
-//specialization for float
+///specialization for float
 template<> inline std::string type2string(float const& value){
   std::ostringstream oss;
   // oss.precision(1);
@@ -109,7 +113,7 @@ template<> inline std::string type2string(float const& value){
   return oss.str();
 }
 
-//specialization for double
+///specialization for double
 template<> inline std::string type2string(double const& value){
   std::ostringstream oss;
   // oss.precision(1);
@@ -121,13 +125,29 @@ template<> inline std::string type2string(double const& value){
 template<class T> class Optionpk : public std::vector <T>
 {
 public:
+  ///default constructor
   Optionpk();
+  ///constructor for option without default value
   Optionpk(const std::string& shortName, const std::string& longName, const std::string& helpInfo);
+  ///constructor for option with default value. Option can be hidden for help info
   Optionpk(const std::string& shortName, const std::string& longName, const std::string& helpInfo,const T& defaultValue, short hide=0);
+  ///default destructor
   ~Optionpk();
+  ///set help information
   void setHelp(const std::string& helpInfo){m_help=helpInfo;};
-  std::string usage() const;
-  std::string usageDoxygen() const;
+  bool retrieveOption(int argc, char ** argv);
+  template<class T1> friend ostream& operator<<(ostream & os, const Optionpk<T1>& theOption);
+
+  void setAll(const std::string& shortName, const std::string& longName, const std::string& helpInfo);
+  void setAll(const std::string& shortName, const std::string& longName, const std::string& helpInfo,const T& defaultValue, short hide);
+  void setDefault(const T& defaultValue);
+  std::string getDefaultValue() const {return m_defaultValue;};
+  void setShortName(const std::string& shortName);
+  void setLongName(const std::string& longName);
+  std::string getShortName() const {return m_shortName;};
+  std::string getLongName() const {return m_longName;};
+
+  std::string getHelp() const {return m_help;};
   static std::string getGPLv3License(){
     return static_cast<std::string>("\n\
     This program is free software: you can redistribute it and/or modify\n\
@@ -142,30 +162,21 @@ public:
                                           \n\
     You should have received a copy of the GNU General Public License\n\
     along with this program.  If not, see <http://www.gnu.org/licenses/>.\n");};
-  std::string getHelp() const {return m_help;};
-  bool retrieveOption(int argc, char ** argv);///make sure to call this function first before using the option
   std::vector<std::string>::const_iterator findSubstring(const std::string& argument) const;
-  template<class T1> friend ostream& operator<<(ostream & os, const Optionpk<T1>& theOption);
 private:
-  void setAll(const std::string& shortName, const std::string& longName, const std::string& helpInfo);
-  void setAll(const std::string& shortName, const std::string& longName, const std::string& helpInfo,const T& defaultValue, short hide);
-  void setDefault(const T& defaultValue);
-  std::string getDefaultValue() const {return m_defaultValue;};
-  void setShortName(const std::string& shortName);
-  void setLongName(const std::string& longName);
-  std::string getShortName() const {return m_shortName;};
-  std::string getLongName() const {return m_longName;};
   bool hasArgument() const {return m_hasArgument;};//all options except bools should have arguments
   bool hasShortOption() const {return m_shortName.compare("\0");};
   bool hasLongOption() const {return m_longName.compare("\0");};
+  std::string usage() const;
+  std::string usageDoxygen() const;
 
-  /*! short option invoked with `-` */std::string m_shortName;
-  /*! long option invoked with `--` */ std::string m_longName;
-  /*! the help message that is shown when option -h or --help is invoked */ std::string m_help;
-  /*! false for options of type bool */ bool m_hasArgument;
-  /*! the default value of the option */ T m_defaultValue;
-  /*! option has a default value */ bool m_hasDefault;
-  /*! 0: always show, 1: only show with long help (--help), 2: never show (hide)*/ short m_hide;
+  std::string m_shortName;
+  std::string m_longName;
+  std::string m_help;
+  bool m_hasArgument;
+  T m_defaultValue;
+  bool m_hasDefault;
+  short m_hide;
 };
 
 template<class T1> ostream& operator<<(ostream& os, const Optionpk<T1>& theOption)
@@ -182,12 +193,29 @@ template<class T> Optionpk<T>::Optionpk()
 {
 }
 
+/**
+constructor without default value\n
+shortName is option invoked with `-`\n
+longName is option invoked with `--`\n
+helpInfo is the help message that is shown when option -h or --help is invoked\n
+When the constructor without default value is used, the option is only visible in long help (`--help`), i.e., hide=1
+**/
 template<class T> Optionpk<T>::Optionpk(const std::string& shortName, const std::string& longName, const std::string& helpInfo)
 : m_hasDefault(false)
 {
   setAll(shortName,longName,helpInfo);
 }
 
+/*!
+constructor with default value.\n
+shortName is option invoked with `-`\n
+longName is option invoked with `--`\n
+helpInfo is the help message that is shown when option -h or --help is invoked\n
+defaultValue is default value of the option (first value of vector: option[0])\n
+hide=0 : option is visible for in both short (`-h`) and long (`--help`) help. Typical use: mandatory options\n
+hide=1 : option is only visible in long help (`--help`). Typical use: expert options\n
+hide=2 : option is hidden for user. Typical use: Easter eggs or options only known to author
+*/
 template<class T> Optionpk<T>::Optionpk(const std::string& shortName, const std::string& longName, const std::string& helpInfo,const T& defaultValue, short hide)
 {
   setAll(shortName,longName,helpInfo,defaultValue, hide);
@@ -238,35 +266,33 @@ template<class T> std::string Optionpk<T>::usageDoxygen() const
   return helpss.str();
 }
 
-template<class T> void Optionpk<T>::setAll(const std::string& shortName, const std::string& longName, const std::string& helpInfo,const T& defaultValue, short hide)
+template<class T> void Optionpk<T>::setAll(const std::string& shortName, const std::string& longName, const std::string& helpInfo)
 {
   m_shortName=shortName;
   m_longName=longName;
   m_hasArgument=true;
   m_help=helpInfo;
-  m_defaultValue=defaultValue;
-  m_hasDefault=true;
-  m_hide=hide;
+  m_hide=1;
 }
 
-template<class T> void Optionpk<T>::setAll(const std::string& shortName, const std::string& longName, const std::string& helpInfo)
+template<class T> void Optionpk<T>::setAll(const std::string& shortName, const std::string& longName, const std::string& helpInfo,const T& defaultValue, short hide)
 {
   m_shortName=shortName;
   m_longName=longName;
   m_hasArgument=true;
   m_help=helpInfo;
-  m_hide=1;//option with no default value can be hidden (level 1: only visible with long help info)
+  m_defaultValue=defaultValue;
+  m_hasDefault=true;
+  m_hide=hide;
 }
 
-template<> void Optionpk<bool>::setAll(const std::string& shortName, const std::string& longName, const std::string& helpInfo,const bool& defaultValue, short hide);
-
+///specialization for bool
 template<> void Optionpk<bool>::setAll(const std::string& shortName, const std::string& longName, const std::string& helpInfo);
 
-template<> Optionpk<bool>::Optionpk(const std::string& shortName, const std::string& longName, const std::string& helpInfo,const bool& defaultValue, short hide)
-{
-  setAll(shortName,longName,helpInfo,defaultValue, hide);
-}
+///specialization for bool
+template<> void Optionpk<bool>::setAll(const std::string& shortName, const std::string& longName, const std::string& helpInfo,const bool& defaultValue, short hide);
 
+///specialization for bool
 template<> void Optionpk<bool>::setAll(const std::string& shortName, const std::string& longName, const std::string& helpInfo,const bool& defaultValue, short hide)
 {
   m_shortName=shortName;
@@ -278,17 +304,24 @@ template<> void Optionpk<bool>::setAll(const std::string& shortName, const std::
   m_hide=hide;
 }
 
+///specialization for bool
+template<> Optionpk<bool>::Optionpk(const std::string& shortName, const std::string& longName, const std::string& helpInfo,const bool& defaultValue, short hide)
+{
+  setAll(shortName,longName,helpInfo,defaultValue, hide);
+}
+
 template<class T> Optionpk<T>::~Optionpk() 
 {
 }
 
+///make sure to call this function first before using the option in main program (or segmentation fault will occur...)
 template<class T> bool Optionpk<T>::retrieveOption(int argc, char **argv){ 
-  bool noHelp=true;///return value, alert main program that hard coded option (help, version, license, doxygen) was invoked
-  std::string helpStringShort="-h";///short option for help (hard coded)
-  std::string helpStringLong="--help";///long option for help (hard coded)
-  std::string helpStringDoxygen="--doxygen";///option to create table of options ready to use for doxygen
-  std::string versionString="--version";///option to show current version
-  std::string licenseString="--license";///option to show current version
+  bool noHelp=true;//return value, alert main program that hard coded option (help, version, license, doxygen) was invoked
+  std::string helpStringShort="-h";//short option for help (hard coded)
+  std::string helpStringLong="--help";//long option for help (hard coded)
+  std::string helpStringDoxygen="--doxygen";//option to create table of options ready to use for doxygen
+  std::string versionString="--version";//option to show current version
+  std::string licenseString="--license";//option to show current version
   for(int i = 1; i < argc; ++i ){
     std::string currentArgument;
     std::string currentOption=argv[i];
@@ -350,7 +383,8 @@ template<class T> bool Optionpk<T>::retrieveOption(int argc, char **argv){
   return(noHelp);
 }
 
-template<class T> std::vector<std::string>::const_iterator Optionpk<T>::findSubstring(const std::string& argument) const{
+//find a substring in string option (e.g., option is of type -co INTERLEAVE=BAND)
+template<> std::vector<std::string>::const_iterator Optionpk<std::string>::findSubstring(const std::string& argument) const{
   std::vector<std::string>::const_iterator opit=this->begin();
   while(opit!=this->end()){
     if(opit->find(argument)!=std::string::npos)

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/pktools.git



More information about the Pkg-grass-devel mailing list