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