AndroMeta  2.0.0
AndroMeta/include/AndroMeta/MProgram.h
Go to the documentation of this file.
00001 /*
00002  * Copyright 2009-2012 AndroMeta LLC. All rights reserved.
00003  *
00004  * AndroMeta LLC retains all intellectual property and proprietary 
00005  * rights to this software and related documentation and any modifications 
00006  * thereto.  Any use, reproduction, disclosure, or distribution of this 
00007  * software and related documentation without an express license agreement 
00008  * from AndroMeta LLC is strictly prohibited.
00009  * 
00010  */
00011 
00020 #ifndef ANDROMETA_M_PROGRAM_H
00021 #define ANDROMETA_M_PROGRAM_H
00022 
00023 #include <AndroMeta/MVar.h>
00024 
00025 #include <ostream>
00026 
00027 namespace Meta{
00028   
00042   class MProgram{
00043   public:
00044     
00048     MProgram(int& argc, char** argv, const mvar& args=undef);
00049     
00056     MProgram(const mvar& args=undef);
00057     
00061     virtual ~MProgram();
00062     
00066     virtual void onExit();
00067     
00071     static mvar parseArgs(int argc, char** argv);
00072     
00078     static mstr toArgStr(const mvar& v);
00079     
00083     enum ExitType{
00084       FullExit,
00085       ImmediateExit,
00086       ForceExit
00087     };
00088     
00103     static void exit(int status, ExitType exitType=ImmediateExit);
00104     
00108     static MProgram* instance();
00109     
00113     static mvar args();
00114     
00118     static bool hasArg(const mstr& key);
00119     
00123     static void setArgs(const mvar& args);
00124     
00128     static mvar arg(const mstr& key);
00129     
00134     static mvar arg(const mstr& key, const mvar& def);
00135     
00139     static void setArg(const mstr& key, const mvar& value);
00140     
00150     static void argDefault(const mstr& key,
00151                            const mvar& value,
00152                            const mstr& description="");
00153     
00165     static void argDefault(const mstr& key,
00166                            const mstr& alias,
00167                            const mvar& value,
00168                            const mstr& description);
00169     
00177     static void requireArg(const mstr& key,
00178                            const mstr& description="");
00179     
00187     static mstr usage(const mstr& msg);
00188     
00193     virtual void onFatalSignal();
00194     
00199     virtual void onSigHup();
00200     
00205     virtual void onSigInt();
00206     
00211     virtual void onSigQuit();
00212     
00217     virtual void onSigIll();
00218     
00223     virtual void onSigTrap();
00224     
00229     virtual void onSigAbrt();
00230     
00235     virtual void onSigFpe();
00236     
00241     virtual void onSigBus();
00242     
00247     virtual void onSigSegv();
00248     
00253     virtual void onSigSys();
00254     
00259     virtual void onSigPipe();
00260     
00265     virtual void onSigAlrm();
00266     
00271     virtual void onSigTerm();
00272     
00276     virtual void onSigUrg();
00277     
00281     virtual void onSigCont();
00282     
00286     virtual void onSigChld();
00287     
00291     virtual void onSigIo();
00292     
00297     virtual void onSigXCPU();
00298     
00303     virtual void onSigXFSz();
00304     
00309     virtual void onSigVtAlrm();
00310     
00315     virtual void onSigProf();
00316     
00320     virtual void onSigWInch();
00321     
00325     virtual void onSigUsr1();
00326     
00330     virtual void onSigUsr2();
00331     
00337     static void resetSignalHandlers();
00338     
00343     static void setOutputStream(std::ostream& outputStream);
00344     
00348     static int argc;
00349     
00353     static char** argv;
00354     
00355   private:  
00356     MProgram& operator=(const MProgram&);
00357     MProgram(const MProgram&);
00358     
00359     class MProgram_* x_;
00360   };
00361   
00362 } // end namespace Meta
00363 
00364 #endif // ANDROMETA_M_PROGRAM_H