95 |
} |
} |
96 |
|
|
97 |
int |
int |
98 |
mh_argp_parse (int argc, char **argv, |
mh_argp_parse (int *pargc, char **pargv[], |
99 |
int flags, |
int flags, |
100 |
struct argp_option *option, |
struct argp_option *option, |
101 |
struct mh_option *mh_option, |
struct mh_option *mh_option, |
108 |
int index; |
int index; |
109 |
int extra = 0; |
int extra = 0; |
110 |
|
|
111 |
program_invocation_name = argv[0]; |
program_invocation_name = (*pargv)[0]; |
112 |
p = strrchr (argv[0], '/'); |
p = strrchr ((*pargv)[0], '/'); |
113 |
if (p) |
if (p) |
114 |
program_invocation_short_name = p+1; |
program_invocation_short_name = p+1; |
115 |
else |
else |
131 |
p = mh_global_profile_get (program_invocation_short_name, NULL); |
p = mh_global_profile_get (program_invocation_short_name, NULL); |
132 |
if (p) |
if (p) |
133 |
{ |
{ |
134 |
int _argc; |
int argc; |
135 |
char **_argv; |
char **argv; |
136 |
int xargc; |
int xargc; |
137 |
char **xargv; |
char **xargv; |
138 |
int i, j; |
int i, j; |
139 |
|
|
140 |
argcv_get (p, "", NULL, &xargc, &xargv); |
argcv_get (p, "", NULL, &xargc, &xargv); |
141 |
|
|
142 |
_argc = argc + xargc; |
argc = *pargc + xargc; |
143 |
_argv = calloc (_argc+1, sizeof *_argv); |
argv = calloc (argc+1, sizeof *argv); |
144 |
if (!_argv) |
if (!argv) |
145 |
mh_err_memory (1); |
mh_err_memory (1); |
146 |
|
|
147 |
i = 0; |
i = 0; |
148 |
_argv[i++] = argv[0]; |
argv[i++] = (*pargv)[0]; |
149 |
for (j = 0; j < xargc; i++, j++) |
for (j = 0; j < xargc; i++, j++) |
150 |
_argv[i] = xargv[j]; |
argv[i] = xargv[j]; |
151 |
for (j = 1; i < _argc; i++, j++) |
for (j = 1; i < argc; i++, j++) |
152 |
_argv[i] = argv[j]; |
argv[i] = (*pargv)[j]; |
153 |
_argv[i] = NULL; |
argv[i] = NULL; |
154 |
mh_argv_preproc (_argc, _argv, &data); |
|
|
|
|
|
my_argp_parse (&argp, _argc, _argv, flags, &index, &data); |
|
|
|
|
|
free (_argv); |
|
|
extra = index < _argc; |
|
|
index -= xargc; |
|
|
if (index < 0) |
|
|
index = argc; |
|
|
} |
|
|
else |
|
|
{ |
|
155 |
mh_argv_preproc (argc, argv, &data); |
mh_argv_preproc (argc, argv, &data); |
156 |
|
|
157 |
my_argp_parse (&argp, argc, argv, flags, &index, &data); |
my_argp_parse (&argp, argc, argv, flags, &index, &data); |
158 |
|
|
159 |
extra = index < argc; |
extra = index < argc; |
160 |
|
|
161 |
|
*pargc = argc; |
162 |
|
*pargv = argv; |
163 |
|
free (xargv); |
164 |
|
} |
165 |
|
else |
166 |
|
{ |
167 |
|
mh_argv_preproc (*pargc, *pargv, &data); |
168 |
|
my_argp_parse (&argp, *pargc, *pargv, flags, &index, &data); |
169 |
|
extra = index < *pargc; |
170 |
} |
} |
171 |
if (pindex) |
if (pindex) |
172 |
*pindex = index; |
*pindex = index; |