garg.h

Go to the documentation of this file.
00001 #ifndef gARG_X_H
00002 #define gARG_X_H
00003 
00004 #include "glist.h"
00005 #include "gstring.h"
00006 #include "gcontrol.h"
00007 
00008 #define MAX_REAL_LVAL 2147483648.0
00009 // MAX_LONG_L is 2147483648LL
00010 
00011 ////////////////////////////////////////////////////////////
00012 // Global enums
00013 // ---------------------------------------------------------
00014 enum eParamConfig {
00015     e_ParamNotUsed,
00016     e_ParamUsedSingle,  // e.g.: -z (or --zero)
00017     e_ParamUsedRepeat,  // e.g.: -v -vv (or -v -v)
00018     e_ParamDashSimple,  // e.g.: -zero
00019     e_ParamNonPosix,    // e.g.: z (or zero)
00020 };
00021 ////////////////////////////////////////////////////////////
00022 class gParam : public gList {
00023 public:
00024     // Public enums
00025     enum eParamCriteria {
00026         e_Normal,
00027         e_StopSplitOnFirst = 1,
00028         e_NormalQuoted
00029     };
00030 
00031     // Constructor,etc
00032     gParam () ;
00033     gParam (gString& copy, char* sParamSplit=nil, eParamCriteria aParamCriteria=e_Normal) ;
00034     gParam (char* s, char* sParamSplit=nil, eParamCriteria aParamCriteria=e_Normal) ;
00035     virtual ~gParam () ;
00036 
00037     // Public data-members
00038     gString strParamSplit;
00039     static bool doAutoTrim;
00040 
00041     // Get methods
00042     gStorage* GetNewObjectFromFormat (char* s) ;
00043     virtual unsigned Find (gString& s, gString& sSubStr, int iCriteria) ;
00044 
00045 protected:
00046     eParamCriteria paramCriteria;
00047 
00048     // Protected methods
00049     int thisSplit (char* s, gString& strSplit, gList& resL) ;
00050 
00051 private:
00052     // Operators,empty
00053     gParam (gParam& ) ; //empty
00054     gParam& operator= (gParam& ) ; //empty
00055 };
00056 ////////////////////////////////////////////////////////////
00057 struct sParamRaw {
00058     // Struct enums
00059     enum eParamFollow {
00060         e_ParamNoVal,
00061         e_ParamThisArg,
00062         e_ParamNextArg
00063     };
00064 
00065     sParamRaw (eParamFollow aParamFollow=e_ParamNoVal) ;
00066     ~sParamRaw () ;
00067 
00068     // Data-members
00069     eParamFollow paramFollow;
00070     gString sufStr;
00071     gString paramSep; // usually empty or "="
00072     gList members;
00073     unsigned posControl;
00074     gStorage* myParamVal;
00075 
00076     gStorage* GetParamVal () ;
00077     bool BuildParamVal (char* s) ;
00078     bool AddMember (char* s) ;
00079 };
00080 ////////////////////////////////////////////////////////////
00081 class gParamVal : public gControl {
00082 public:
00083     gParamVal ()
00084         : gControl( e_StoreExtend ),
00085           cVal( 0 ),
00086           lVal( MAX_LONG_L ),
00087           realVal( MAX_REAL_LVAL ),
00088           repeats( -1 ),
00089           errorCode( 0 ) {
00090     }
00091     virtual ~gParamVal () {
00092     }
00093 
00094     // Public data-members
00095     t_uchar cVal;    // e.g. -z
00096     gString allStr;  // e.g. --zero, if exists
00097     gString sufStr;  // suffix, e.g. zero
00098     gString sVal;    // e.g. --zero=__STR__
00099     long long lVal;  // e.g. --zero=__-123__
00100     float realVal;
00101     short repeats;   // e.g. -v -v turns repeats=2
00102     int errorCode;   // 0:ok; non-0:invalid
00103 
00104     // Get methods
00105     bool GetChar (t_uchar& chr) {
00106         if ( cVal==0 ) return false;
00107         chr = cVal;
00108         return true;
00109     }
00110     long GetLongValue () {
00111         long val;
00112         if ( GetLong(val)==false ) return 0;
00113         return (int)val;
00114     }
00115     bool GetLong (long& val) {
00116         if ( lVal==MAX_LONG_L ) return false;
00117         val = (long)lVal;
00118         return true;
00119     }
00120     bool GetFloat (float& val) {
00121         if ( realVal>=MAX_REAL_LVAL ) return false;
00122         val = realVal;
00123         return true;
00124     }
00125 
00126     // Set methods
00127     bool SetLong (long val) {
00128         lVal = val;
00129         realVal = (long)val;
00130         return true;
00131     }
00132     bool SetString (char* s) {
00133         lVal = MAX_LONG_L;
00134         realVal = MAX_REAL_LVAL;
00135         sVal = s;
00136         return s!=nil;
00137     }
00138 
00139     void CopyParam (gParamVal& copy) ;
00140     virtual bool AddToList (gList& resL) ;
00141     virtual bool FillParam (gString& newSVal, gStorage* aObj) ;
00142 
00143     // Special methods
00144     gParamVal* FindObj (gList& copyL, t_uchar chr, unsigned& idx) ;
00145     unsigned FindMainChar (gList& copyL, t_uchar chr) ;
00146 
00147     // Save/etc methods
00148     virtual gStorage* NewObject () ;
00149     virtual t_uchar* ToString (t_uchar* uBuf) ;
00150 
00151     // Show methods
00152     virtual void Show (bool doShowAll=true) ;
00153 
00154 private:
00155     // Operators,empty
00156     gParamVal (gParamVal& ) ; //empty
00157     gParamVal& operator= (gParamVal& ) ; //empty
00158 };
00159 ////////////////////////////////////////////////////////////
00160 class gParamElem : public gList {
00161 public:
00162     gParamElem (eParamConfig aParamConfig=e_ParamNotUsed) ;
00163     virtual ~gParamElem () ;
00164 
00165     // Public data-members
00166     eParamConfig paramConfig;
00167     t_uchar mainChr;
00168     sParamRaw sRaw;
00169 
00170     // Get methods
00171     t_uchar MainChar () {
00172         return mainChr==0 ? ' ' : mainChr;
00173     }
00174 
00175     // Set methods
00176     unsigned Add (gString& copy) ;
00177     unsigned Add (char* s) ;
00178 
00179     virtual gStorage* NewObject () ;
00180 
00181 private:
00182     // Operators,empty
00183     gParamElem (gParamElem& ) ; //empty
00184     gParamElem& operator= (gParamElem& ) ; //empty
00185 };
00186 ////////////////////////////////////////////////////////////
00187 class gArg : public gList {
00188 public:
00189     gArg (char** argv, char** envp=nil) ;
00190     virtual ~gArg () ;
00191 
00192     // Public data-members
00193     gString prog;
00194     gList env;
00195     gList param;
00196     gList opt;    // Flushed options
00197     gList errors; // Flush errors
00198     short nParamDashWordSimple;
00199 
00200     // Get methods
00201     unsigned NumberParams () {
00202         return param.N();
00203     }
00204     char* Program () {
00205         return programName.Str();
00206     }
00207     gParamVal* GetOptionPtr (unsigned idx) ;
00208 
00209     // Set methods
00210     int AddParams (t_uint16 paramStart, char* s) ;
00211     int FlushParams () ;
00212 
00213     // Special methods
00214     bool NoArg () {
00215         return N()==0;
00216     }
00217     bool FindOption (char c) ;
00218     bool FindOption (char* s) ;
00219     bool FindOption (char* s, int& val) ;
00220     bool FindOption (char* s, long& val) ;
00221     bool FindOption (char c, gString& sRes) ;
00222     bool FindOption (char* s, gString& sRes) ;
00223     bool FindOptionOccurr (char* s, short& nRepeats) ;
00224     bool FindOptionOccurr (char* s, bool& b1) ;
00225     bool FindOptionOccurr (char* s, bool& b1, bool& b2) ;
00226 
00227     // Save/etc methods
00228     virtual t_uchar* ToString (t_uchar* uBuf) ;
00229     virtual bool SaveGuts (FILE* f) { return true; }
00230     virtual bool RestoreGuts (FILE* f) { return true; }
00231 
00232     // Show methods
00233     virtual void Show (bool doShowAll=true) ;
00234 
00235 protected:
00236     gParamElem* internParams;
00237     unsigned keepPos;
00238 
00239     // Protected methods
00240     bool thisProgramName () ;
00241     bool thisAddOneParam (t_uint16 paramStart, char* sParam, gList& resL) ;
00242 
00243     bool thisBuildInternParam (gList& paramIn, char* strSepSplit) ;
00244 
00245     bool thisProcessParamElem (gParam& aParam, gParamElem& paramElem) ;
00246 
00247     bool thisProcessParamElem (gParam& aParam,
00248                                gParamElem& paramElem,
00249                                bool& isDashWordSimple) ;
00250 
00251     unsigned thisFindParamFromChr (t_uchar inChr,
00252                                    unsigned nParams,
00253                                    gParamElem* intParams) ;
00254 
00255     unsigned thisFindParamFromStr (char* s,
00256                                    unsigned nParams,
00257                                    gParamElem* intParams,
00258                                    bool& doMatch,
00259                                    unsigned& possibleParamIdx) ;
00260 
00261     bool thisFillParamFromChr (t_uchar inChr,
00262                                unsigned nParams,
00263                                gParamElem* intParams,
00264                                gParamVal& paramVal) ;
00265 
00266     bool thisFillParamFromStr (char* s,
00267                                unsigned paramRef,
00268                                unsigned nParams,
00269                                gParamElem* intParams,
00270                                gParamVal& paramVal) ;
00271 
00272     int thisFlushAll (gList& inputL,
00273                       gList& paramIn,
00274                       unsigned nParams,
00275                       gParamElem* intParams,
00276                       gList& resArgL,
00277                       gList& resOptL,
00278                       gList& resErrL) ;
00279 
00280 private:
00281     eParamConfig paramLetter[256];
00282     gString programName;
00283 
00284     // Operators,empty
00285     gArg (gArg& ) ;
00286     gArg& operator= (gArg& ) ;
00287 };
00288 ////////////////////////////////////////////////////////////
00289 #endif //gARG_X_H
00290 

Generated on Sat Aug 18 02:40:50 2007 for xpfweb_v2x lib by  doxygen 1.4.2