|
AndroMeta
2.0.0
|
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
1.7.6.1