Doxygen Source Code Documentation
clp.h File Reference
Go to the source code of this file.
Define Documentation
|
|
|
|
|
Definition at line 47 of file clp.h. Referenced by finish_string_list(), and main(). |
|
|
Definition at line 21 of file clp.h. Referenced by Clp_NewParser(). |
|
|
Definition at line 24 of file clp.h. Referenced by Clp_NewParser(). |
|
|
Definition at line 22 of file clp.h. Referenced by Clp_NewParser(). |
|
|
Definition at line 19 of file clp.h. Referenced by Clp_NewParser(). |
|
|
Definition at line 20 of file clp.h. Referenced by Clp_NewParser(). |
|
|
Definition at line 23 of file clp.h. Referenced by Clp_NewParser(). |
|
|
Definition at line 52 of file clp.h. Referenced by Clp_Next(), and main(). |
|
|
Definition at line 29 of file clp.h. Referenced by Clp_NewParser(), Clp_Next(), and main(). |
|
|
Definition at line 51 of file clp.h. Referenced by Clp_Next(), and main(). |
|
|
Definition at line 53 of file clp.h. Referenced by Clp_Next(). |
|
|
Definition at line 41 of file clp.h. Referenced by Clp_SetOptionChar(), and next_argument(). |
|
|
Definition at line 44 of file clp.h. Referenced by Clp_SetOptionChar(), and next_argument(). |
|
|
Definition at line 43 of file clp.h. Referenced by Clp_SetOptionChar(), and next_argument(). |
|
|
Definition at line 32 of file clp.h. Referenced by Clp_NewParser(), and Clp_Next(). |
|
|
|
|
|
Definition at line 34 of file clp.h. Referenced by check_duplicated_short_options(), Clp_NewParser(), Clp_Next(), find_prefix_opt(), and find_short(). |
|
|
|
|
|
Definition at line 50 of file clp.h. Referenced by Clp_Next(), main(), and next_argument(). |
|
|
Definition at line 36 of file clp.h. Referenced by check_duplicated_short_options(), Clp_NewParser(), find_prefix_opt(), and find_short(). |
|
|
Definition at line 33 of file clp.h. Referenced by Clp_NewParser(). |
|
|
Definition at line 40 of file clp.h. Referenced by Clp_NewParser(), Clp_SetOptionChar(), and next_argument(). |
|
|
Definition at line 42 of file clp.h. Referenced by Clp_SetOptionChar(), main(), next_argument(), and switch_to_short_argument(). |
Typedef Documentation
|
|
Definition at line 61 of file clp.h. Referenced by Clp_AddType(). |
|
|
Definition at line 62 of file clp.h. Referenced by Clp_SetErrorHandler(). |
|
|
|
|
|
|
|
|
|
|
|
|
Function Documentation
|
||||||||||||||||||||
|
Definition at line 667 of file clp.c. References finish_string_list(), Clp_Option::flags, flags, free, Clp_Option::long_name, malloc, name, Clp_Option::option_id, and realloc.
00669 : 00670 Clp_AddStringListType 00671 (clp, type_id, flags, 00672 char *s_1, int value_1, ..., char *s_n, int value_n, 0); 00673 00674 Defines type_id as a type in clp. 00675 This type accepts any of the strings s_1, ..., s_n 00676 (or unambiguous abbreviations thereof); 00677 if argument s_i is given, value_i is stored in clp->val.i. 00678 If Clp_AllowNumbers is set in flags, 00679 explicit integers are also allowed. 00680 00681 Returns 1 on success, 0 on memory allocation errors. */ 00682 { 00683 int nitems = 0; 00684 int itemscap = 5; 00685 Clp_Option *items = (Clp_Option *)malloc(sizeof(Clp_Option) * itemscap); 00686 00687 va_list val; 00688 va_start(val, flags); 00689 00690 if (!items) goto error; 00691 00692 /* slurp up the arguments */ 00693 while (1) { 00694 int value; 00695 char *name = va_arg(val, char *); 00696 if (!name) break; 00697 value = va_arg(val, int); 00698 00699 if (nitems >= itemscap) { 00700 Clp_Option *new_items; 00701 itemscap *= 2; 00702 new_items = (Clp_Option *)realloc(items, sizeof(Clp_Option) * itemscap); 00703 if (!new_items) goto error; 00704 items = new_items; 00705 } 00706 00707 items[nitems].long_name = name; 00708 items[nitems].option_id = value; 00709 items[nitems].flags = 0; 00710 nitems++; 00711 } 00712 00713 va_end(val); 00714 if (finish_string_list(clp, type_id, flags, items, nitems, itemscap)) 00715 return 1; 00716 00717 error: 00718 va_end(val); 00719 if (items) free(items); 00720 return 0; 00721 } |
|
||||||||||||||||||||||||||||
|
Definition at line 725 of file clp.c. References finish_string_list(), flags, free, i, and malloc.
00730 {
00731 int i;
00732 int itemscap = (nitems < 5 ? 5 : nitems);
00733 Clp_Option *items = (Clp_Option *)malloc(sizeof(Clp_Option) * itemscap);
00734 if (!items) return 0;
00735
00736 /* copy over items */
00737 for (i = 0; i < nitems; i++) {
00738 items[i].long_name = strings[i];
00739 items[i].option_id = values[i];
00740 items[i].flags = 0;
00741 }
00742
00743 if (finish_string_list(clp, type_id, flags, items, nitems, itemscap))
00744 return 1;
00745 else {
00746 free(items);
00747 return 0;
00748 }
00749 }
|
|
||||||||||||||||||||||||
|
Definition at line 470 of file clp.c. References Clp_Internal::argtype, Clp_ArgParseFunc, Clp_ArgType::flags, flags, Clp_ArgType::func, i, Clp_Parser::internal, Clp_Internal::nargtype, realloc, and Clp_ArgType::thunk. Referenced by Clp_NewParser(), finish_string_list(), and main().
00479 {
00480 int i;
00481 Clp_Internal *cli = clp->internal;
00482 Clp_ArgType *new_argtype;
00483 int nargtype = cli->nargtype;
00484 assert(nargtype);
00485
00486 if (type_id <= 0 || !func) return 0;
00487
00488 while (nargtype <= type_id)
00489 nargtype *= 2;
00490 new_argtype = (Clp_ArgType *)
00491 realloc(cli->argtype, sizeof(Clp_ArgType) * nargtype);
00492 if (!new_argtype) return 0;
00493 cli->argtype = new_argtype;
00494
00495 for (i = cli->nargtype; i < nargtype; i++)
00496 cli->argtype[i].func = 0;
00497 cli->nargtype = nargtype;
00498
00499 cli->argtype[type_id].func = func;
00500 cli->argtype[type_id].flags = flags;
00501 cli->argtype[type_id].thunk = thunk;
00502 return 1;
00503 }
|
|
|
Definition at line 257 of file clp.c. References Clp_Internal::argtype, free, i, Clp_Parser::internal, Clp_StringList::items, Clp_Internal::long_min_match, Clp_StringList::long_min_match, Clp_Internal::nargtype, and parse_string_list().
00260 {
00261 int i;
00262 Clp_Internal *cli;
00263 if (!clp) return;
00264
00265 cli = clp->internal;
00266
00267 /* get rid of any string list types */
00268 for (i = 0; i < cli->nargtype; i++)
00269 if (cli->argtype[i].func == parse_string_list) {
00270 Clp_StringList *clsl = (Clp_StringList *)cli->argtype[i].thunk;
00271 free(clsl->items);
00272 free(clsl->long_min_match);
00273 free(clsl);
00274 }
00275
00276 free(cli->argtype);
00277 free(cli->long_min_match);
00278 free(cli);
00279 free(clp);
00280 }
|
|
|
Definition at line 774 of file clp.c. References free.
00775 {
00776 free(save);
00777 }
|
|
||||||||||||||||||||
|
Definition at line 156 of file clp.c. References Clp_Internal::argc, argc, Clp_Internal::argtype, Clp_Internal::argv, Clp_Internal::both_short_and_long, calculate_long_min_match(), check_duplicated_short_options(), Clp_AddType(), Clp_AnyArgument, Clp_ArgBool, Clp_ArgDouble, Clp_ArgInt, Clp_ArgString, Clp_ArgStringNotOption, Clp_ArgUnsigned, Clp_DisallowOptions, Clp_Mandatory, Clp_Negate, Clp_OnlyNegated, Clp_Optional, Clp_Short, Clp_Internal::current_option, Clp_Internal::error_handler, free, i, Clp_Parser::internal, Clp_Internal::is_short, Clp_Internal::long_min_match, malloc, Clp_Internal::nargtype, Clp_Internal::nopt, Clp_Internal::opt, Clp_Internal::option_class, Clp_Internal::option_processing, parse_bool(), parse_double(), parse_int(), parse_string(), Clp_Internal::program_name, TEST, and Clp_Internal::whole_negated. Referenced by main().
00159 {
00160 int i;
00161 Clp_Parser *clp = (Clp_Parser *)malloc(sizeof(Clp_Parser));
00162 Clp_Internal *cli = (Clp_Internal *)malloc(sizeof(Clp_Internal));
00163 Clp_LongMinMatch *lmm = (Clp_LongMinMatch *)malloc(sizeof(Clp_LongMinMatch) * nopt);
00164 if (!clp || !cli || !lmm) goto failed;
00165
00166 clp->internal = cli;
00167 cli->long_min_match = lmm;
00168
00169 /* Get rid of negative option_ids, which are internal to CLP */
00170 for (i = 0; i < nopt; i++)
00171 if (opt[i].option_id < 0) {
00172 fprintf(stderr, "CLP error: option %d has negative option_id\n", i);
00173 opt[i] = opt[nopt - 1];
00174 nopt--;
00175 i--;
00176 }
00177
00178 /* Massage the options to make them usable */
00179 for (i = 0; i < nopt; i++) {
00180 /* Enforce invariants */
00181 if (opt[i].arg_type <= 0)
00182 opt[i].flags &= ~Clp_AnyArgument;
00183 if (opt[i].arg_type > 0 && !TEST(&opt[i], Clp_Optional))
00184 opt[i].flags |= Clp_Mandatory;
00185
00186 /* Nonexistent short options have character 256. We know this won't
00187 equal any character in an argument, even if characters are signed */
00188 if (opt[i].short_name <= 0 || opt[i].short_name > 255)
00189 opt[i].short_name = 256;
00190
00191 /* Options that start with `no-' should be changed to OnlyNegated */
00192 if (opt[i].long_name && strncmp(opt[i].long_name, "no-", 3) == 0) {
00193 opt[i].long_name += 3;
00194 opt[i].flags |= Clp_Negate | Clp_OnlyNegated;
00195 }
00196 }
00197
00198 /* Check for duplicated short options */
00199 check_duplicated_short_options(nopt, opt, 0);
00200 check_duplicated_short_options(nopt, opt, 1);
00201
00202 /* Calculate long options' minimum unambiguous length */
00203 for (i = 0; i < nopt; i++)
00204 if (opt[i].long_name && !TEST(&opt[i], Clp_OnlyNegated))
00205 lmm[i].pos = calculate_long_min_match
00206 (nopt, opt, i, Clp_OnlyNegated, 0);
00207 for (i = 0; i < nopt; i++)
00208 if (opt[i].long_name && TEST(&opt[i], Clp_Negate))
00209 lmm[i].neg = calculate_long_min_match
00210 (nopt, opt, i, Clp_Negate, Clp_Negate);
00211
00212 /* Set up clp->internal */
00213 cli->opt = opt;
00214 cli->nopt = nopt;
00215
00216 cli->argtype = (Clp_ArgType *)malloc(sizeof(Clp_ArgType) * 5);
00217 if (!cli->argtype) goto failed;
00218 cli->nargtype = 5;
00219
00220 cli->argc = argc;
00221 cli->argv = argv;
00222 {
00223 char *slash = strrchr(argv[0], '/');
00224 cli->program_name = slash ? slash + 1 : argv[0];
00225 }
00226 cli->error_handler = 0;
00227
00228 for (i = 0; i < 256; i++)
00229 cli->option_class[i] = 0;
00230 cli->option_class['-'] = Clp_Short;
00231 cli->both_short_and_long = 0;
00232
00233 cli->is_short = 0;
00234 cli->whole_negated = 0;
00235
00236 cli->option_processing = 1;
00237 cli->current_option = 0;
00238
00239 /* Add default type parsers */
00240 Clp_AddType(clp, Clp_ArgString, 0, parse_string, 0);
00241 Clp_AddType(clp, Clp_ArgStringNotOption, Clp_DisallowOptions, parse_string, 0);
00242 Clp_AddType(clp, Clp_ArgInt, 0, parse_int, 0);
00243 Clp_AddType(clp, Clp_ArgUnsigned, 0, parse_int, (void *)cli);
00244 Clp_AddType(clp, Clp_ArgBool, 0, parse_bool, 0);
00245 Clp_AddType(clp, Clp_ArgDouble, 0, parse_double, 0);
00246 return clp;
00247
00248 failed:
00249 if (cli && cli->argtype) free(cli->argtype);
00250 if (cli) free(cli);
00251 if (clp) free(clp);
00252 if (lmm) free(lmm);
00253 return 0;
00254 }
|
|
|
Definition at line 768 of file clp.c. References malloc.
00769 {
00770 return (Clp_ParserState *)malloc(sizeof(Clp_ParserState));
00771 }
|
|
|
Definition at line 1042 of file clp.c. References ambiguity_error(), Clp_Internal::ambiguous, Clp_Internal::ambiguous_values, Clp_Parser::arg, Clp_Option::arg_type, Clp_Internal::argtype, Clp_Internal::argv, Clp_AnyArgument, Clp_BadOption, Clp_DisallowOptions, Clp_Done, Clp_Error, Clp_Mandatory, Clp_Negate, Clp_NotOption, Clp_OptionError(), Clp_RestoreParser(), Clp_SaveParser(), Clp_SetOptionProcessing(), Clp_Internal::could_be_short, Clp_Internal::current_option, Clp_Internal::current_short, find_long(), find_short(), Clp_ArgType::func, Clp_Parser::have_arg, Clp_Parser::internal, Clp_Internal::is_short, Clp_Internal::nargtype, Clp_Parser::negated, Clp_Internal::negated_by_no, next_argument(), Clp_Internal::opt, Clp_Internal::option_chars, Clp_Option::option_id, Clp_Internal::option_processing, switch_to_short_argument(), TEST, Clp_Internal::text, Clp_ArgType::thunk, and Clp_Internal::whole_negated. Referenced by main().
01062 {
01063 Clp_Internal *cli = clp->internal;
01064 Clp_Option *opt;
01065 Clp_ParserState clpsave;
01066 int complain;
01067
01068 /** Set up clp **/
01069 cli->current_option = 0;
01070 cli->ambiguous = 0;
01071
01072 /** Get the next argument or option **/
01073 if (!next_argument(clp, cli->option_processing ? 0 : 2))
01074 return clp->have_arg ? Clp_NotOption : Clp_Done;
01075
01076 clp->negated = cli->whole_negated;
01077 if (cli->is_short)
01078 opt = find_short(clp, cli->text[0]);
01079 else
01080 opt = find_long(clp, cli->text);
01081
01082 /** If there's ambiguity between long & short options, and we couldn't find
01083 a long option, look for a short option **/
01084 if (!opt && cli->could_be_short) {
01085 switch_to_short_argument(clp);
01086 opt = find_short(clp, cli->text[0]);
01087 }
01088
01089 /** If we didn't find an option... **/
01090 if (!opt || (clp->negated && !TEST(opt, Clp_Negate))) {
01091
01092 /* default processing for the "--" option: turn off option processing
01093 and return the next argument */
01094 if (strcmp(cli->argv[0], "--") == 0) {
01095 Clp_SetOptionProcessing(clp, 0);
01096 return Clp_Next(clp);
01097 }
01098
01099 /* otherwise, report some error or other */
01100 if (cli->ambiguous)
01101 ambiguity_error(clp, cli->ambiguous, cli->ambiguous_values,
01102 cli->opt, cli->option_chars,
01103 "option `%s%s' is ambiguous",
01104 cli->option_chars, cli->text);
01105 else if (cli->is_short && !cli->could_be_short)
01106 Clp_OptionError(clp, "unrecognized option `%s%c'",
01107 cli->option_chars, cli->text[0]);
01108 else
01109 Clp_OptionError(clp, "unrecognized option `%s%s'",
01110 cli->option_chars, cli->text);
01111 return Clp_BadOption;
01112 }
01113
01114 /** Set the current option **/
01115 cli->current_option = opt;
01116 cli->current_short = cli->is_short;
01117 cli->negated_by_no = clp->negated && !cli->whole_negated;
01118
01119 /** The no-argument (or should-have-no-argument) case **/
01120 if (clp->negated || !TEST(opt, Clp_AnyArgument)) {
01121 if (clp->have_arg) {
01122 Clp_OptionError(clp, "`%O' can't take an argument");
01123 return Clp_BadOption;
01124 } else
01125 return opt->option_id;
01126 }
01127
01128 /** Get an argument if we need one, or if it's optional **/
01129 /* Sanity-check the argument type. */
01130 if (opt->arg_type <= 0 || opt->arg_type >= cli->nargtype
01131 || cli->argtype[ opt->arg_type ].func == 0)
01132 return Clp_Error;
01133
01134 /* complain == 1 only if the argument was explicitly given,
01135 or it is mandatory. */
01136 complain = (clp->have_arg != 0) || TEST(opt, Clp_Mandatory);
01137 Clp_SaveParser(clp, &clpsave);
01138
01139 if (TEST(opt, Clp_Mandatory) && !clp->have_arg) {
01140 /* Mandatory argument case */
01141 /* Allow arguments to options to start with a dash, but only if the
01142 argument type allows it by not setting Clp_DisallowOptions */
01143 int disallow = TEST(&cli->argtype[opt->arg_type], Clp_DisallowOptions);
01144 next_argument(clp, disallow ? 1 : 2);
01145 if (!clp->have_arg) {
01146 int got_option = cli->text != 0;
01147 Clp_RestoreParser(clp, &clpsave);
01148 if (got_option)
01149 Clp_OptionError(clp, "`%O' requires a non-option argument");
01150 else
01151 Clp_OptionError(clp, "`%O' requires an argument");
01152 return Clp_BadOption;
01153 }
01154
01155 } else if (cli->is_short && !clp->have_arg && cli->text[1] != 0)
01156 /* The -[option]argument case:
01157 Assume that the rest of the current string is the argument. */
01158 next_argument(clp, 1);
01159
01160 /** Parse the argument **/
01161 if (clp->have_arg) {
01162 Clp_ArgType *atr = &cli->argtype[ opt->arg_type ];
01163 if (atr->func(clp, clp->arg, complain, atr->thunk) <= 0) {
01164 /* parser failed */
01165 clp->have_arg = 0;
01166 if (TEST(opt, Clp_Mandatory))
01167 return Clp_BadOption;
01168 else
01169 Clp_RestoreParser(clp, &clpsave);
01170 }
01171 }
01172
01173 return opt->option_id;
01174 }
|
|
||||||||||||||||
|
Definition at line 1376 of file clp.c. References Clp_VaOptionError(), do_error(), and free_build_string(). Referenced by Clp_Next(), handle_extension(), main(), parse_bool(), parse_color(), parse_dimensions(), parse_double(), parse_frame_spec(), parse_int(), parse_position(), parse_rectangle(), parse_scale_factor(), and parse_two_colors().
01377 {
01378 Clp_BuildString *bs;
01379 va_list val;
01380 va_start(val, fmt);
01381 bs = Clp_VaOptionError(clp, 0, fmt, val);
01382 va_end(val);
01383 do_error(clp, bs);
01384 free_build_string(bs);
01385 return 0;
01386 }
|
|
|
Definition at line 757 of file clp.c. References Clp_Parser::internal, and Clp_Internal::program_name. Referenced by main().
00758 {
00759 return clp->internal->program_name;
00760 }
|
|
||||||||||||
|
Definition at line 795 of file clp.c. References Clp_ParserState::argc, Clp_Internal::argc, Clp_ParserState::argv, Clp_Internal::argv, Clp_Parser::internal, Clp_ParserState::is_short, Clp_Internal::is_short, Clp_ParserState::option_chars, Clp_Internal::option_chars, Clp_ParserState::text, Clp_Internal::text, Clp_ParserState::whole_negated, and Clp_Internal::whole_negated. Referenced by Clp_Next(), and Clp_Shift().
00797 {
00798 Clp_Internal *cli = clp->internal;
00799 cli->argv = save->argv;
00800 cli->argc = save->argc;
00801 memcpy(cli->option_chars, save->option_chars, 3);
00802 cli->text = save->text;
00803 cli->is_short = save->is_short;
00804 cli->whole_negated = save->whole_negated;
00805 }
|
|
||||||||||||
|
Definition at line 781 of file clp.c. References Clp_Internal::argc, Clp_ParserState::argc, Clp_Internal::argv, Clp_ParserState::argv, Clp_Parser::internal, Clp_Internal::is_short, Clp_ParserState::is_short, Clp_Internal::option_chars, Clp_ParserState::option_chars, Clp_Internal::text, Clp_ParserState::text, Clp_Internal::whole_negated, and Clp_ParserState::whole_negated. Referenced by Clp_Next(), and Clp_Shift().
00783 {
00784 Clp_Internal *cli = clp->internal;
00785 save->argv = cli->argv;
00786 save->argc = cli->argc;
00787 memcpy(save->option_chars, cli->option_chars, 3);
00788 save->text = cli->text;
00789 save->is_short = cli->is_short;
00790 save->whole_negated = cli->whole_negated;
00791 }
|
|
||||||||||||
|
Referenced by main(). |
|
||||||||||||||||
|
Definition at line 309 of file clp.c. References Clp_Internal::both_short_and_long, c, Clp_Long, Clp_LongImplicit, Clp_LongNegated, Clp_Short, Clp_ShortNegated, i, Clp_Parser::internal, Clp_Internal::long_min_match, Clp_Internal::nopt, Clp_Internal::opt, and Clp_Internal::option_class. Referenced by main().
00311 : 00312 00313 0 == Clp_NotOption `character' isn't an option. 00314 Clp_Short `character' introduces a list of short options. 00315 Clp_Long `character' introduces a long option. 00316 Clp_ShortNegated `character' introduces a negated list of 00317 short options. 00318 Clp_LongNegated `character' introduces a negated long option. 00319 Clp_LongImplicit `character' introduces a long option, and *is part 00320 of the long option itself*. 00321 00322 Some values are not allowed (Clp_Long | Clp_LongNegated isn't allowed, 00323 for instance). c=0 means ALL characters are that type. Returns 0 on 00324 failure (you gave an illegal option_type), 1 on success. */ 00325 { 00326 int i; 00327 Clp_Internal *cli = clp->internal; 00328 00329 if (option_type < 0 || option_type >= 2*Clp_LongImplicit 00330 || ((option_type & Clp_Short) && (option_type & Clp_ShortNegated)) 00331 || ((option_type & Clp_Long) && (option_type & Clp_LongNegated)) 00332 || ((option_type & Clp_LongImplicit) && (option_type & (Clp_Short | Clp_ShortNegated | Clp_Long | Clp_LongNegated)))) 00333 return 0; 00334 00335 if (c == 0) 00336 for (i = 1; i < 256; i++) 00337 cli->option_class[i] = option_type; 00338 else 00339 cli->option_class[c] = option_type; 00340 00341 /* If an option character can introduce either short or long options, then 00342 we need to fix up the long_min_match values. We may have set the 00343 long_min_match for option `--abcde' to 1, if no other option starts with 00344 `a'. But if `-' can introduce either a short option or a long option, AND 00345 a short option `-a' exists, then the long_min_match for `--abcde' must be 00346 set to 2! */ 00347 if (!cli->both_short_and_long) { 00348 int either_short = option_type & (Clp_Short | Clp_ShortNegated); 00349 int either_long = option_type & (Clp_Long | Clp_LongNegated); 00350 if (either_short && either_long) { 00351 unsigned char have_short[257]; 00352 for (i = 0; i < 256; i++) 00353 have_short[i] = 0; 00354 for (i = 0; i < cli->nopt; i++) 00355 have_short[cli->opt[i].short_name] = 1; 00356 for (i = 0; i < cli->nopt; i++) 00357 if (cli->opt[i].long_name && cli->long_min_match[i].pos == 1) { 00358 /* if `--Cxxxx's short name is `-C', keep long_min_match == 1 */ 00359 unsigned char first = (unsigned char)cli->opt[i].long_name[0]; 00360 if (have_short[first] && first != cli->opt[i].short_name) 00361 cli->long_min_match[i].pos++; 00362 } 00363 cli->both_short_and_long = 1; 00364 } 00365 } 00366 00367 return 1; 00368 } |
|
||||||||||||
|
Definition at line 284 of file clp.c. References Clp_Parser::internal, and Clp_Internal::option_processing. Referenced by Clp_Next().
00288 {
00289 Clp_Internal *cli = clp->internal;
00290 int old = cli->option_processing;
00291 cli->option_processing = option_processing;
00292 return old;
00293 }
|
|
||||||||||||
|
Parse the argument * Definition at line 1178 of file clp.c. References Clp_Parser::arg, Clp_RestoreParser(), Clp_SaveParser(), Clp_Parser::have_arg, and next_argument(). Referenced by handle_extension(), and parse_two_colors().
01181 {
01182 Clp_ParserState clpsave;
01183 Clp_SaveParser(clp, &clpsave);
01184 next_argument(clp, allow_dashes ? 2 : 1);
01185 if (!clp->have_arg)
01186 Clp_RestoreParser(clp, &clpsave);
01187 return clp->arg;
01188 }
|