OLD | NEW |
1 /* | 1 /* |
2 ******************************************************************************* | 2 ******************************************************************************* |
3 * | 3 * |
4 * Copyright (C) 2000, International Business Machines | 4 * Copyright (C) 2000-2015, International Business Machines |
5 * Corporation and others. All Rights Reserved. | 5 * Corporation and others. All Rights Reserved. |
6 * | 6 * |
7 ******************************************************************************* | 7 ******************************************************************************* |
8 * file name: uoptions.c | 8 * file name: uoptions.c |
9 * encoding: US-ASCII | 9 * encoding: US-ASCII |
10 * tab size: 8 (not used) | 10 * tab size: 8 (not used) |
11 * indentation:4 | 11 * indentation:4 |
12 * | 12 * |
13 * created on: 2000apr17 | 13 * created on: 2000apr17 |
14 * created by: Markus W. Scherer | 14 * created by: Markus W. Scherer |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 } | 53 } |
54 option->doesOccur=1; | 54 option->doesOccur=1; |
55 | 55 |
56 if(option->hasArg!=UOPT_NO_ARG) { | 56 if(option->hasArg!=UOPT_NO_ARG) { |
57 /* parse the argument for the option, if any */ | 57 /* parse the argument for the option, if any */ |
58 if(i+1<argc && !(argv[i+1][0]=='-' && argv[i+1][1]!=0))
{ | 58 if(i+1<argc && !(argv[i+1][0]=='-' && argv[i+1][1]!=0))
{ |
59 /* argument in the next argv[], and there is not an
option in there */ | 59 /* argument in the next argv[], and there is not an
option in there */ |
60 option->value=argv[++i]; | 60 option->value=argv[++i]; |
61 } else if(option->hasArg==UOPT_REQUIRES_ARG) { | 61 } else if(option->hasArg==UOPT_REQUIRES_ARG) { |
62 /* there is no argument, but one is required: return
with error */ | 62 /* there is no argument, but one is required: return
with error */ |
| 63 option->doesOccur=0; |
63 return -i; | 64 return -i; |
64 } | 65 } |
65 } | 66 } |
| 67 |
| 68 if(option->optionFn!=NULL && option->optionFn(option->contex
t, option)<0) { |
| 69 /* the option function was called and returned an error
*/ |
| 70 option->doesOccur=0; |
| 71 return -i; |
| 72 } |
66 } | 73 } |
67 } else { | 74 } else { |
68 /* process one or more short options */ | 75 /* process one or more short options */ |
69 do { | 76 do { |
70 /* search for the option letter */ | 77 /* search for the option letter */ |
71 int j; | 78 int j; |
72 for(j=0; j<optionCount; ++j) { | 79 for(j=0; j<optionCount; ++j) { |
73 if(c==options[j].shortName) { | 80 if(c==options[j].shortName) { |
74 option=options+j; | 81 option=options+j; |
75 break; | 82 break; |
(...skipping 12 matching lines...) Expand all Loading... |
88 option->value=arg; | 95 option->value=arg; |
89 /* do not process the rest of this arg as option let
ters */ | 96 /* do not process the rest of this arg as option let
ters */ |
90 break; | 97 break; |
91 } else if(i+1<argc && !(argv[i+1][0]=='-' && argv[i+1][1
]!=0)) { | 98 } else if(i+1<argc && !(argv[i+1][0]=='-' && argv[i+1][1
]!=0)) { |
92 /* argument in the next argv[], and there is not an
option in there */ | 99 /* argument in the next argv[], and there is not an
option in there */ |
93 option->value=argv[++i]; | 100 option->value=argv[++i]; |
94 /* this break is redundant because we know that *arg
==0 */ | 101 /* this break is redundant because we know that *arg
==0 */ |
95 break; | 102 break; |
96 } else if(option->hasArg==UOPT_REQUIRES_ARG) { | 103 } else if(option->hasArg==UOPT_REQUIRES_ARG) { |
97 /* there is no argument, but one is required: return
with error */ | 104 /* there is no argument, but one is required: return
with error */ |
| 105 option->doesOccur=0; |
98 return -i; | 106 return -i; |
99 } | 107 } |
100 } | 108 } |
101 | 109 |
| 110 if(option->optionFn!=NULL && option->optionFn(option->contex
t, option)<0) { |
| 111 /* the option function was called and returned an error
*/ |
| 112 option->doesOccur=0; |
| 113 return -i; |
| 114 } |
| 115 |
102 /* get the next option letter */ | 116 /* get the next option letter */ |
103 option=NULL; | 117 option=NULL; |
104 c=*arg++; | 118 c=*arg++; |
105 } while(c!=0); | 119 } while(c!=0); |
106 } | 120 } |
107 | 121 |
108 if(option!=0 && option->optionFn!=0 && option->optionFn(option->cont
ext, option)<0) { | |
109 /* the option function was called and returned an error */ | |
110 return -i; | |
111 } | |
112 | |
113 /* go to next argv[] */ | 122 /* go to next argv[] */ |
114 ++i; | 123 ++i; |
115 } else { | 124 } else { |
116 /* move a non-option up in argv[] */ | 125 /* move a non-option up in argv[] */ |
117 argv[remaining++]=arg; | 126 argv[remaining++]=arg; |
118 ++i; | 127 ++i; |
119 } | 128 } |
120 } | 129 } |
121 return remaining; | 130 return remaining; |
122 } | 131 } |
OLD | NEW |