00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109 #ifndef _PARGLIST
00110 #define _PARGLIST
00111
00112 #ifdef P_USE_PRAGMA
00113 #pragma interface
00114 #endif
00115
00120 class PArgList : public PObject
00121 {
00122 PCLASSINFO(PArgList, PObject);
00123
00124 public:
00137 PArgList(
00138 const char * theArgPtr = NULL,
00139 const char * argumentSpecPtr = NULL,
00143 BOOL optionsBeforeParams = TRUE
00144 );
00146 PArgList(
00147 const PString & theArgStr,
00148 const char * argumentSpecPtr = NULL,
00152 BOOL optionsBeforeParams = TRUE
00153 );
00155 PArgList(
00156 const PString & theArgStr,
00157 const PString & argumentSpecStr,
00161 BOOL optionsBeforeParams = TRUE
00162 );
00164 PArgList(
00165 int theArgc,
00166 char ** theArgv,
00167 const char * argumentSpecPtr = NULL,
00171 BOOL optionsBeforeParams = TRUE
00172 );
00174 PArgList(
00175 int theArgc,
00176 char ** theArgv,
00177 const PString & argumentSpecStr,
00181 BOOL optionsBeforeParams = TRUE
00182 );
00184
00189 virtual void PrintOn(
00190 ostream & strm
00191 ) const;
00192
00196 virtual void ReadFrom(
00197 istream & strm
00198 );
00200
00205 void SetArgs(
00206 const PString & theArgStr
00207 );
00209 void SetArgs(
00210 int theArgc,
00211 char ** theArgv
00212 );
00214 void SetArgs(
00215 const PStringArray & theArgs
00216 );
00217
00240 virtual BOOL Parse(
00241 const char * theArgumentSpec,
00245 BOOL optionsBeforeParams = TRUE
00246 );
00248 virtual BOOL Parse(
00249 const PString & theArgumentStr,
00253 BOOL optionsBeforeParams = TRUE
00254 );
00256
00264 virtual PINDEX GetOptionCount(
00265 char optionChar
00266 ) const;
00268 virtual PINDEX GetOptionCount(
00269 const char * optionStr
00270 ) const;
00272 virtual PINDEX GetOptionCount(
00273 const PString & optionName
00274 ) const;
00275
00281 BOOL HasOption(
00282 char optionChar
00283 ) const;
00285 BOOL HasOption(
00286 const char * optionStr
00287 ) const;
00289 BOOL HasOption(
00290 const PString & optionName
00291 ) const;
00292
00301 virtual PString GetOptionString(
00302 char optionChar,
00303 const char * dflt = NULL
00304 ) const;
00306 virtual PString GetOptionString(
00307 const char * optionStr,
00308 const char * dflt = NULL
00309 ) const;
00311 virtual PString GetOptionString(
00312 const PString & optionName,
00313 const char * dflt = NULL
00314 ) const;
00315
00323 PINDEX GetCount() const;
00324
00329 PStringArray GetParameters(
00330 PINDEX first = 0,
00331 PINDEX last = P_MAX_INDEX
00332 ) const;
00333
00338 PString GetParameter(
00339 PINDEX num
00340 ) const;
00341
00347 PString operator[](
00348 PINDEX num
00349 ) const;
00350
00354 void Shift(
00355 int sh
00356 );
00357
00361 PArgList & operator<<(
00362 int sh
00363 );
00364
00368 PArgList & operator>>(
00369 int sh
00370 );
00372
00379 virtual void IllegalArgumentIndex(
00380 PINDEX idx
00381 ) const;
00382
00387 virtual void UnknownOption(
00388 const PString & option
00389 ) const;
00390
00396 virtual void MissingArgument(
00397 const PString & option
00398 ) const;
00400
00401 protected:
00403 PStringArray argumentArray;
00405 PString optionLetters;
00407 PStringArray optionNames;
00409 PIntArray optionCount;
00411 PStringArray optionString;
00413 PIntArray parameterIndex;
00415 int shift;
00416
00417 private:
00418 BOOL ParseOption(PINDEX idx, PINDEX offset, PINDEX & arg, const PIntArray & canHaveOptionString);
00419 PINDEX GetOptionCountByIndex(PINDEX idx) const;
00420 PString GetOptionStringByIndex(PINDEX idx, const char * dflt) const;
00421 };
00422
00423
00427 class PConfigArgs : public PArgList
00428 {
00429 PCLASSINFO(PConfigArgs, PArgList);
00430 public:
00433 PConfigArgs(
00434 const PArgList & args
00435 );
00437
00445 virtual PINDEX GetOptionCount(
00446 char optionChar
00447 ) const;
00449 virtual PINDEX GetOptionCount(
00450 const char * optionStr
00451 ) const;
00453 virtual PINDEX GetOptionCount(
00454 const PString & optionName
00455 ) const;
00456
00465 virtual PString GetOptionString(
00466 char optionChar,
00467 const char * dflt = NULL
00468 ) const;
00470 virtual PString GetOptionString(
00471 const char * optionStr,
00472 const char * dflt = NULL
00473 ) const;
00475 virtual PString GetOptionString(
00476 const PString & optionName,
00477 const char * dflt = NULL
00478 ) const;
00480
00489 void Save(
00490 const PString & optionName
00491 );
00492
00495 void SetSectionName(
00496 const PString & section
00497 ) { sectionName = section; }
00498
00501 const PString & GetSectionName() const { return sectionName; }
00502
00506 void SetNegationPrefix(
00507 const PString & prefix
00508 ) { negationPrefix = prefix; }
00509
00513 const PString & GetNegationPrefix() const { return negationPrefix; }
00515
00516
00517 protected:
00518 PString CharToString(char ch) const;
00519 PConfig config;
00520 PString sectionName;
00521 PString negationPrefix;
00522 };
00523
00524 #endif
00525
00526