48 {
int i = strlen(optarg);
49 return i <= Optmaxl && i >= Optminl &&
50 !strncmp((
const char *)Optword, optarg, i);
54 {
int i = strlen(optarg);
56 do if (i <= p->Optmaxl && i >= p->Optminl &&
57 !strncmp((
const char *)p->Optword, optarg, i))
return p->Optvalu;
58 while((p = p->Optnext));
63 {Optword = strdup(optw);
64 Optminl = minl; Optmaxl = strlen(optw);
66 Optvalu[1] = (optm[0] ? optm[1] :
'\0');
71 {
if (Optword) free(Optword);
72 if (Optnext)
delete Optnext;
100 inStream = Argc = Aloc = 0; vopts = curopt = 0; endopts = 1;
101 optp = 0; eDest = erp;
102 epfx = strdup(etxt ? etxt :
"");
106 if (StdOpts && *StdOpts ==
':') {missarg =
':'; StdOpts++;}
108 vopts = strdup(StdOpts ? StdOpts :
"");
115 {minl = va_arg(ap,
int);
116 optm = va_arg(ap,
const char *);
118 optw = va_arg(ap,
const char *);
127 {
if (vopts) free(vopts);
128 if (optp)
delete optp;
141 if (inStream)
return arg_stream.
GetToken();
142 if (Aloc >= Argc)
return (
char *)0;
153 char optbuff[3] = {
'-',
'x',
'\0'}, *optspec, *arglist, *optname = 0;
157 if (endopts)
return -1;
161 if (curopt && *curopt) curopt++;
163 {
if ((optname = curopt = arg_stream.
GetToken(&arglist)))
164 {
if (*curopt !=
'-') {arg_stream.
RetToken(); curopt = 0;}
168 else if (Aloc >= Argc || *Argv[Aloc] !=
'-') curopt = 0;
169 else optname = curopt = Argv[Aloc++]+1;
173 if (!curopt) {endopts = 1;
return -1;}
175 {
if (eDest) eDest->
Say(epfx,
"Option letter missing after '-'.");
182 if (*curopt ==
':' || *curopt ==
'.') optspec = 0;
183 else {
if (optp) {optspec = *optp%curopt; curopt = 0;}
184 else {optspec = index(vopts,
int(*curopt));
185 optbuff[1] = *curopt; optname = optbuff; curopt++;
191 {sprintf(buff,
"Invalid option, '%s'.", optname);
192 eDest->
Say(epfx, buff);
200 if (optspec[1] !=
':' && optspec[1] !=
'.')
return *optspec;
205 else argval = (Aloc < Argc ? Argv[Aloc++] : 0);
211 else if (*
argval !=
'-')
return *optspec;
216 if (optspec[1] ==
'.')
218 {
if (inStream) arg_stream.
RetToken();
227 if (eDest) eDest->
Say(epfx,
"Value not specified for '", optname,
"'.");
239 arg_stream.
Attach(arglist);
241 endopts = !arg_stream.
GetLine();
247 Argc = argc; Argv = argv; Aloc = 0;
248 curopt = 0; endopts = 0;
int operator==(char *optarg)
XrdOucArgsXO(XrdOucArgsXO *nP, const char *optw, int minl, const char *optm)
char * operator%(char *optarg)
XrdOucArgs(XrdSysError *erp, const char *etxt, const char *StdOpts, const char *optw=0,...)
char * GetToken(char **rest=0, int lowcase=0)
void Say(const char *text1, const char *text2=0, const char *txt3=0, const char *text4=0, const char *text5=0, const char *txt6=0)