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
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121 #ifndef _PARGLIST
00122 #define _PARGLIST
00123
00124 #ifdef P_USE_PRAGMA
00125 #pragma interface
00126 #endif
00127
00132 class PArgList : public PObject
00133 {
00134 PCLASSINFO(PArgList, PObject);
00135
00136 public:
00149 PArgList(
00150 const char * theArgPtr = NULL,
00151 const char * argumentSpecPtr = NULL,
00152 BOOL optionsBeforeParams = TRUE
00153 );
00155 PArgList(
00156 const PString & theArgStr,
00157 const char * argumentSpecPtr = NULL,
00158 BOOL optionsBeforeParams = TRUE
00159 );
00161 PArgList(
00162 const PString & theArgStr,
00163 const PString & argumentSpecStr,
00164 BOOL optionsBeforeParams = TRUE
00165 );
00167 PArgList(
00168 int theArgc,
00169 char ** theArgv,
00170 const char * argumentSpecPtr = NULL,
00171 BOOL optionsBeforeParams = TRUE
00172 );
00174 PArgList(
00175 int theArgc,
00176 char ** theArgv,
00177 const PString & argumentSpecStr,
00178 BOOL optionsBeforeParams = TRUE
00179 );
00181
00186 virtual void PrintOn(
00187 ostream & strm
00188 ) const;
00189
00193 virtual void ReadFrom(
00194 istream & strm
00195 );
00197
00202 void SetArgs(
00203 const PString & theArgStr
00204 );
00206 void SetArgs(
00207 int theArgc,
00208 char ** theArgv
00209 );
00211 void SetArgs(
00212 const PStringArray & theArgs
00213 );
00214
00237 virtual BOOL Parse(
00238 const char * theArgumentSpec,
00239 BOOL optionsBeforeParams = TRUE
00240 );
00242 virtual BOOL Parse(
00243 const PString & theArgumentStr,
00244 BOOL optionsBeforeParams = TRUE
00245 );
00247
00255 virtual PINDEX GetOptionCount(
00256 char optionChar
00257 ) const;
00259 virtual PINDEX GetOptionCount(
00260 const char * optionStr
00261 ) const;
00263 virtual PINDEX GetOptionCount(
00264 const PString & optionName
00265 ) const;
00266
00272 BOOL HasOption(
00273 char optionChar
00274 ) const;
00276 BOOL HasOption(
00277 const char * optionStr
00278 ) const;
00280 BOOL HasOption(
00281 const PString & optionName
00282 ) const;
00283
00292 virtual PString GetOptionString(
00293 char optionChar,
00294 const char * dflt = NULL
00295 ) const;
00297 virtual PString GetOptionString(
00298 const char * optionStr,
00299 const char * dflt = NULL
00300 ) const;
00302 virtual PString GetOptionString(
00303 const PString & optionName,
00304 const char * dflt = NULL
00305 ) const;
00306
00314 PINDEX GetCount() const;
00315
00320 PStringArray GetParameters(
00321 PINDEX first = 0,
00322 PINDEX last = P_MAX_INDEX
00323 ) const;
00324
00329 PString GetParameter(
00330 PINDEX num
00331 ) const;
00332
00338 PString operator[](
00339 PINDEX num
00340 ) const;
00341
00345 void Shift(
00346 int sh
00347 );
00348
00352 PArgList & operator<<(
00353 int sh
00354 );
00355
00359 PArgList & operator>>(
00360 int sh
00361 );
00363
00370 virtual void IllegalArgumentIndex(
00371 PINDEX idx
00372 ) const;
00373
00378 virtual void UnknownOption(
00379 const PString & option
00380 ) const;
00381
00387 virtual void MissingArgument(
00388 const PString & option
00389 ) const;
00391
00392 protected:
00394 PStringArray argumentArray;
00396 PString optionLetters;
00398 PStringArray optionNames;
00400 PIntArray optionCount;
00402 PStringArray optionString;
00404 PIntArray parameterIndex;
00406 int shift;
00407
00408 private:
00409 BOOL ParseOption(PINDEX idx, PINDEX offset, PINDEX & arg, const PIntArray & canHaveOptionString);
00410 PINDEX GetOptionCountByIndex(PINDEX idx) const;
00411 PString GetOptionStringByIndex(PINDEX idx, const char * dflt) const;
00412 };
00413
00414
00415 #ifdef P_CONFIG_FILE
00416
00420 class PConfigArgs : public PArgList
00421 {
00422 PCLASSINFO(PConfigArgs, PArgList);
00423 public:
00426 PConfigArgs(
00427 const PArgList & args
00428 );
00430
00438 virtual PINDEX GetOptionCount(
00439 char optionChar
00440 ) const;
00442 virtual PINDEX GetOptionCount(
00443 const char * optionStr
00444 ) const;
00446 virtual PINDEX GetOptionCount(
00447 const PString & optionName
00448 ) const;
00449
00458 virtual PString GetOptionString(
00459 char optionChar,
00460 const char * dflt = NULL
00461 ) const;
00462
00464 virtual PString GetOptionString(
00465 const char * optionStr,
00466 const char * dflt = NULL
00467 ) const;
00468
00470 virtual PString GetOptionString(
00471 const PString & optionName,
00472 const char * dflt = NULL
00473 ) const;
00475
00484 void Save(
00485 const PString & optionName
00486 );
00487
00490 void SetSectionName(
00491 const PString & section
00492 ) { sectionName = section; }
00493
00496 const PString & GetSectionName() const { return sectionName; }
00497
00501 void SetNegationPrefix(
00502 const PString & prefix
00503 ) { negationPrefix = prefix; }
00504
00508 const PString & GetNegationPrefix() const { return negationPrefix; }
00510
00511
00512 protected:
00513 PString CharToString(char ch) const;
00514 PConfig config;
00515 PString sectionName;
00516 PString negationPrefix;
00517 };
00518
00519 #endif // P_CONFIG_FILE
00520
00521 #endif
00522
00523