ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/branches/development/src/applications/staticProps/StaticPropsCmd.cpp
Revision: 1454
Committed: Wed Jun 23 19:25:02 2010 UTC (14 years, 10 months ago) by gezelter
Content type: text/plain
Original Path: trunk/src/applications/staticProps/StaticPropsCmd.c
File size: 53151 byte(s)
Log Message:
Adding 2-D g(r) module to static props

File Contents

# User Rev Content
1 tim 310 /*
2 gezelter 1390 File autogenerated by gengetopt version 2.22
3 tim 310 generated with the following command:
4 gezelter 1454 gengetopt -F StaticPropsCmd -u
5 tim 310
6     The developers of gengetopt consider the fixed text that goes in all
7     gengetopt output files to be in the public domain:
8     we make no copyright claims on it.
9     */
10    
11 gezelter 929 /* If we use autoconf. */
12     #ifdef HAVE_CONFIG_H
13     #include "config.h"
14     #endif
15 tim 310
16     #include <stdio.h>
17     #include <stdlib.h>
18     #include <string.h>
19    
20     #include "getopt.h"
21    
22 tim 311 #include "StaticPropsCmd.h"
23 tim 310
24 chuckv 1128 const char *gengetopt_args_info_purpose = "";
25    
26 gezelter 1454 const char *gengetopt_args_info_usage = "Usage: StaticProps [OPTIONS]... [FILES]...";
27 chuckv 1128
28     const char *gengetopt_args_info_description = "";
29    
30     const char *gengetopt_args_info_help[] = {
31     " -h, --help Print help and exit",
32     " -V, --version Print version and exit",
33     " -i, --input=filename input dump file",
34     " -o, --output=filename output file name",
35     " -n, --step=INT process every n frame (default=`1')",
36     " -b, --nbins=INT number of bins (general purpose) \n (default=`100')",
37     " -x, --nbins_x=INT number of bins in x axis (default=`100')",
38     " -y, --nbins_y=INT number of bins in y axis (default=`100')",
39 gezelter 1440 " --nbins_z=INT number of bins in z axis (default=`100')",
40 chuckv 1128 " -a, --nanglebins=INT number of bins for cos(angle) (default=`50')",
41 chuckv 1445 " -c, --rcut=DOUBLE cutoff radius (rcut)",
42 gezelter 1454 " --dz=DOUBLE slab width (dz)",
43 chuckv 1128 " --length=DOUBLE maximum length (Defaults to 1/2 smallest length \n of first frame)",
44 chuckv 1445 " --zlength=DOUBLE maximum length (Defaults to 1/2 smallest length \n of first frame)",
45 chuckv 1128 " -z, --zoffset=DOUBLE Where to set the zero for the slab_density \n calculation (default=`0')",
46     " --sele1=selection script select the first stuntdouble set",
47     " --sele2=selection script select the second stuntdouble set",
48     " --sele3=selection script select the third stuntdouble set",
49     " --refsele=selection script\n select reference (use and only use with --gxyz)",
50 gezelter 1390 " --comsele=selection script\n select stunt doubles for center-of-mass \n reference point",
51 chuckv 1128 " --molname=STRING molecule name",
52     " --begin=INT begin internal index",
53     " --end=INT end internal index",
54     " --radius=DOUBLE nanoparticle radius",
55     "\n Group: staticProps\n an option of this group is required",
56     " --bo bond order parameter (--rcut must be specified)",
57     " --bor bond order parameter as a function of radius \n (--rcut must be specified)",
58 chuckv 1180 " --bad N(theta) bond angle density within (--rcut must \n be specified)",
59 chuckv 1128 " -g, --gofr g(r)",
60 xsun 1213 " --gofz g(z)",
61 chuckv 1128 " --r_theta g(r, cos(theta))",
62     " --r_omega g(r, cos(omega))",
63 gezelter 1440 " --r_z g(r, z)",
64 chuckv 1128 " --theta_omega g(cos(theta), cos(omega))",
65     " --gxyz g(x, y, z)",
66 gezelter 1454 " --twodgofr 2D g(r) (Slab width --dz must be specified)",
67 chuckv 1128 " -p, --p2 p2 order parameter (--sele1 and --sele2 must be \n specified)",
68     " --rp2 rp2 order parameter (--sele1 and --sele2 must \n be specified)",
69     " -s, --scd scd order parameter (either --sele1, --sele2, \n --sele3 are specified or --molname, --begin, \n --end are specified)",
70     " -d, --density density plot",
71     " --slab_density slab density",
72 gezelter 1413 " --p_angle p(cos(theta))",
73 chuckv 1128 " --hxy hxy",
74     " --rho_r rho of R",
75 chuckv 1180 " --hullvol hull volume of nanoparticle",
76 chuckv 1128 0
77     };
78    
79 gezelter 1390 typedef enum {ARG_NO
80     , ARG_STRING
81     , ARG_INT
82     , ARG_DOUBLE
83     } cmdline_parser_arg_type;
84    
85 gezelter 929 static
86     void clear_given (struct gengetopt_args_info *args_info);
87     static
88     void clear_args (struct gengetopt_args_info *args_info);
89    
90     static int
91 gezelter 1390 cmdline_parser_internal (int argc, char * const *argv, struct gengetopt_args_info *args_info,
92     struct cmdline_parser_params *params, const char *additional_error);
93 gezelter 929
94     static int
95     cmdline_parser_required2 (struct gengetopt_args_info *args_info, const char *prog_name, const char *additional_error);
96    
97     static char *
98     gengetopt_strdup (const char *s);
99    
100     static
101     void clear_given (struct gengetopt_args_info *args_info)
102     {
103     args_info->help_given = 0 ;
104     args_info->version_given = 0 ;
105     args_info->input_given = 0 ;
106     args_info->output_given = 0 ;
107     args_info->step_given = 0 ;
108 gezelter 1041 args_info->nbins_given = 0 ;
109 xsun 955 args_info->nbins_x_given = 0 ;
110     args_info->nbins_y_given = 0 ;
111 gezelter 1440 args_info->nbins_z_given = 0 ;
112 gezelter 929 args_info->nanglebins_given = 0 ;
113 chuckv 1445 args_info->rcut_given = 0 ;
114 gezelter 1454 args_info->dz_given = 0 ;
115 gezelter 929 args_info->length_given = 0 ;
116 chuckv 1445 args_info->zlength_given = 0 ;
117 gezelter 929 args_info->zoffset_given = 0 ;
118     args_info->sele1_given = 0 ;
119     args_info->sele2_given = 0 ;
120     args_info->sele3_given = 0 ;
121     args_info->refsele_given = 0 ;
122 gezelter 1390 args_info->comsele_given = 0 ;
123 gezelter 929 args_info->molname_given = 0 ;
124     args_info->begin_given = 0 ;
125     args_info->end_given = 0 ;
126 chuckv 1091 args_info->radius_given = 0 ;
127 gezelter 1039 args_info->bo_given = 0 ;
128 chuckv 1128 args_info->bor_given = 0 ;
129 chuckv 1180 args_info->bad_given = 0 ;
130 gezelter 929 args_info->gofr_given = 0 ;
131 xsun 1213 args_info->gofz_given = 0 ;
132 gezelter 929 args_info->r_theta_given = 0 ;
133     args_info->r_omega_given = 0 ;
134 gezelter 1440 args_info->r_z_given = 0 ;
135 gezelter 929 args_info->theta_omega_given = 0 ;
136     args_info->gxyz_given = 0 ;
137 gezelter 1454 args_info->twodgofr_given = 0 ;
138 gezelter 929 args_info->p2_given = 0 ;
139 xsun 980 args_info->rp2_given = 0 ;
140 gezelter 929 args_info->scd_given = 0 ;
141     args_info->density_given = 0 ;
142     args_info->slab_density_given = 0 ;
143 gezelter 1413 args_info->p_angle_given = 0 ;
144 xsun 955 args_info->hxy_given = 0 ;
145 chuckv 1091 args_info->rho_r_given = 0 ;
146 chuckv 1180 args_info->hullvol_given = 0 ;
147 gezelter 929 args_info->staticProps_group_counter = 0 ;
148     }
149    
150     static
151     void clear_args (struct gengetopt_args_info *args_info)
152     {
153     args_info->input_arg = NULL;
154     args_info->input_orig = NULL;
155     args_info->output_arg = NULL;
156     args_info->output_orig = NULL;
157     args_info->step_arg = 1;
158     args_info->step_orig = NULL;
159 gezelter 1041 args_info->nbins_arg = 100;
160     args_info->nbins_orig = NULL;
161 xsun 955 args_info->nbins_x_arg = 100;
162     args_info->nbins_x_orig = NULL;
163     args_info->nbins_y_arg = 100;
164     args_info->nbins_y_orig = NULL;
165 gezelter 1440 args_info->nbins_z_arg = 100;
166     args_info->nbins_z_orig = NULL;
167 gezelter 929 args_info->nanglebins_arg = 50;
168     args_info->nanglebins_orig = NULL;
169 chuckv 1445 args_info->rcut_orig = NULL;
170 gezelter 1454 args_info->dz_orig = NULL;
171 gezelter 929 args_info->length_orig = NULL;
172 chuckv 1445 args_info->zlength_orig = NULL;
173 gezelter 929 args_info->zoffset_arg = 0;
174     args_info->zoffset_orig = NULL;
175     args_info->sele1_arg = NULL;
176     args_info->sele1_orig = NULL;
177     args_info->sele2_arg = NULL;
178     args_info->sele2_orig = NULL;
179     args_info->sele3_arg = NULL;
180     args_info->sele3_orig = NULL;
181     args_info->refsele_arg = NULL;
182     args_info->refsele_orig = NULL;
183 gezelter 1390 args_info->comsele_arg = NULL;
184     args_info->comsele_orig = NULL;
185 gezelter 929 args_info->molname_arg = NULL;
186     args_info->molname_orig = NULL;
187     args_info->begin_orig = NULL;
188     args_info->end_orig = NULL;
189 chuckv 1091 args_info->radius_orig = NULL;
190 gezelter 929
191     }
192    
193 chuckv 1128 static
194     void init_args_info(struct gengetopt_args_info *args_info)
195     {
196 gezelter 1390
197    
198 chuckv 1128 args_info->help_help = gengetopt_args_info_help[0] ;
199     args_info->version_help = gengetopt_args_info_help[1] ;
200     args_info->input_help = gengetopt_args_info_help[2] ;
201     args_info->output_help = gengetopt_args_info_help[3] ;
202     args_info->step_help = gengetopt_args_info_help[4] ;
203     args_info->nbins_help = gengetopt_args_info_help[5] ;
204     args_info->nbins_x_help = gengetopt_args_info_help[6] ;
205     args_info->nbins_y_help = gengetopt_args_info_help[7] ;
206 gezelter 1440 args_info->nbins_z_help = gengetopt_args_info_help[8] ;
207     args_info->nanglebins_help = gengetopt_args_info_help[9] ;
208 chuckv 1445 args_info->rcut_help = gengetopt_args_info_help[10] ;
209 gezelter 1454 args_info->dz_help = gengetopt_args_info_help[11] ;
210     args_info->length_help = gengetopt_args_info_help[12] ;
211     args_info->zlength_help = gengetopt_args_info_help[13] ;
212     args_info->zoffset_help = gengetopt_args_info_help[14] ;
213     args_info->sele1_help = gengetopt_args_info_help[15] ;
214     args_info->sele2_help = gengetopt_args_info_help[16] ;
215     args_info->sele3_help = gengetopt_args_info_help[17] ;
216     args_info->refsele_help = gengetopt_args_info_help[18] ;
217     args_info->comsele_help = gengetopt_args_info_help[19] ;
218     args_info->molname_help = gengetopt_args_info_help[20] ;
219     args_info->begin_help = gengetopt_args_info_help[21] ;
220     args_info->end_help = gengetopt_args_info_help[22] ;
221     args_info->radius_help = gengetopt_args_info_help[23] ;
222     args_info->bo_help = gengetopt_args_info_help[25] ;
223     args_info->bor_help = gengetopt_args_info_help[26] ;
224     args_info->bad_help = gengetopt_args_info_help[27] ;
225     args_info->gofr_help = gengetopt_args_info_help[28] ;
226     args_info->gofz_help = gengetopt_args_info_help[29] ;
227     args_info->r_theta_help = gengetopt_args_info_help[30] ;
228     args_info->r_omega_help = gengetopt_args_info_help[31] ;
229     args_info->r_z_help = gengetopt_args_info_help[32] ;
230     args_info->theta_omega_help = gengetopt_args_info_help[33] ;
231     args_info->gxyz_help = gengetopt_args_info_help[34] ;
232     args_info->twodgofr_help = gengetopt_args_info_help[35] ;
233     args_info->p2_help = gengetopt_args_info_help[36] ;
234     args_info->rp2_help = gengetopt_args_info_help[37] ;
235     args_info->scd_help = gengetopt_args_info_help[38] ;
236     args_info->density_help = gengetopt_args_info_help[39] ;
237     args_info->slab_density_help = gengetopt_args_info_help[40] ;
238     args_info->p_angle_help = gengetopt_args_info_help[41] ;
239     args_info->hxy_help = gengetopt_args_info_help[42] ;
240     args_info->rho_r_help = gengetopt_args_info_help[43] ;
241     args_info->hullvol_help = gengetopt_args_info_help[44] ;
242 chuckv 1128
243     }
244    
245 tim 310 void
246     cmdline_parser_print_version (void)
247     {
248     printf ("%s %s\n", CMDLINE_PARSER_PACKAGE, CMDLINE_PARSER_VERSION);
249     }
250    
251 gezelter 1390 static void print_help_common(void) {
252 tim 310 cmdline_parser_print_version ();
253 chuckv 1128
254     if (strlen(gengetopt_args_info_purpose) > 0)
255     printf("\n%s\n", gengetopt_args_info_purpose);
256    
257 gezelter 1390 if (strlen(gengetopt_args_info_usage) > 0)
258     printf("\n%s\n", gengetopt_args_info_usage);
259 chuckv 1128
260 gezelter 1390 printf("\n");
261    
262 chuckv 1128 if (strlen(gengetopt_args_info_description) > 0)
263     printf("%s\n", gengetopt_args_info_description);
264 gezelter 1390 }
265 chuckv 1128
266 gezelter 1390 void
267     cmdline_parser_print_help (void)
268     {
269     int i = 0;
270     print_help_common();
271 chuckv 1128 while (gengetopt_args_info_help[i])
272     printf("%s\n", gengetopt_args_info_help[i++]);
273 tim 310 }
274    
275 gezelter 929 void
276     cmdline_parser_init (struct gengetopt_args_info *args_info)
277     {
278     clear_given (args_info);
279     clear_args (args_info);
280 chuckv 1128 init_args_info (args_info);
281 gezelter 1454
282     args_info->inputs = NULL;
283     args_info->inputs_num = 0;
284 gezelter 1390 }
285 chuckv 1128
286 gezelter 1390 void
287     cmdline_parser_params_init(struct cmdline_parser_params *params)
288     {
289     if (params)
290     {
291     params->override = 0;
292     params->initialize = 1;
293     params->check_required = 1;
294     params->check_ambiguity = 0;
295     params->print_errors = 1;
296     }
297 gezelter 929 }
298 tim 310
299 gezelter 1390 struct cmdline_parser_params *
300     cmdline_parser_params_create(void)
301     {
302     struct cmdline_parser_params *params =
303     (struct cmdline_parser_params *)malloc(sizeof(struct cmdline_parser_params));
304     cmdline_parser_params_init(params);
305     return params;
306     }
307    
308 gezelter 929 static void
309 gezelter 1390 free_string_field (char **s)
310 gezelter 929 {
311 gezelter 1390 if (*s)
312 gezelter 929 {
313 gezelter 1390 free (*s);
314     *s = 0;
315 gezelter 929 }
316 gezelter 1390 }
317    
318    
319     static void
320     cmdline_parser_release (struct gengetopt_args_info *args_info)
321     {
322 gezelter 1454 unsigned int i;
323 gezelter 1390 free_string_field (&(args_info->input_arg));
324     free_string_field (&(args_info->input_orig));
325     free_string_field (&(args_info->output_arg));
326     free_string_field (&(args_info->output_orig));
327     free_string_field (&(args_info->step_orig));
328     free_string_field (&(args_info->nbins_orig));
329     free_string_field (&(args_info->nbins_x_orig));
330     free_string_field (&(args_info->nbins_y_orig));
331 gezelter 1440 free_string_field (&(args_info->nbins_z_orig));
332 gezelter 1390 free_string_field (&(args_info->nanglebins_orig));
333 chuckv 1445 free_string_field (&(args_info->rcut_orig));
334 gezelter 1454 free_string_field (&(args_info->dz_orig));
335 gezelter 1390 free_string_field (&(args_info->length_orig));
336 chuckv 1445 free_string_field (&(args_info->zlength_orig));
337 gezelter 1390 free_string_field (&(args_info->zoffset_orig));
338     free_string_field (&(args_info->sele1_arg));
339     free_string_field (&(args_info->sele1_orig));
340     free_string_field (&(args_info->sele2_arg));
341     free_string_field (&(args_info->sele2_orig));
342     free_string_field (&(args_info->sele3_arg));
343     free_string_field (&(args_info->sele3_orig));
344     free_string_field (&(args_info->refsele_arg));
345     free_string_field (&(args_info->refsele_orig));
346     free_string_field (&(args_info->comsele_arg));
347     free_string_field (&(args_info->comsele_orig));
348     free_string_field (&(args_info->molname_arg));
349     free_string_field (&(args_info->molname_orig));
350     free_string_field (&(args_info->begin_orig));
351     free_string_field (&(args_info->end_orig));
352     free_string_field (&(args_info->radius_orig));
353 gezelter 929
354 chuckv 1128
355 gezelter 1454 for (i = 0; i < args_info->inputs_num; ++i)
356     free (args_info->inputs [i]);
357 gezelter 1390
358 gezelter 1454 if (args_info->inputs_num)
359     free (args_info->inputs);
360    
361 gezelter 929 clear_given (args_info);
362     }
363 tim 310
364 gezelter 1390
365     static void
366     write_into_file(FILE *outfile, const char *opt, const char *arg, char *values[])
367     {
368     if (arg) {
369     fprintf(outfile, "%s=\"%s\"\n", opt, arg);
370     } else {
371     fprintf(outfile, "%s\n", opt);
372     }
373     }
374    
375    
376 gezelter 929 int
377 gezelter 1390 cmdline_parser_dump(FILE *outfile, struct gengetopt_args_info *args_info)
378     {
379     int i = 0;
380    
381     if (!outfile)
382     {
383     fprintf (stderr, "%s: cannot dump options to stream\n", CMDLINE_PARSER_PACKAGE);
384     return EXIT_FAILURE;
385     }
386    
387     if (args_info->help_given)
388     write_into_file(outfile, "help", 0, 0 );
389     if (args_info->version_given)
390     write_into_file(outfile, "version", 0, 0 );
391     if (args_info->input_given)
392     write_into_file(outfile, "input", args_info->input_orig, 0);
393     if (args_info->output_given)
394     write_into_file(outfile, "output", args_info->output_orig, 0);
395     if (args_info->step_given)
396     write_into_file(outfile, "step", args_info->step_orig, 0);
397     if (args_info->nbins_given)
398     write_into_file(outfile, "nbins", args_info->nbins_orig, 0);
399     if (args_info->nbins_x_given)
400     write_into_file(outfile, "nbins_x", args_info->nbins_x_orig, 0);
401     if (args_info->nbins_y_given)
402     write_into_file(outfile, "nbins_y", args_info->nbins_y_orig, 0);
403 gezelter 1440 if (args_info->nbins_z_given)
404     write_into_file(outfile, "nbins_z", args_info->nbins_z_orig, 0);
405 gezelter 1390 if (args_info->nanglebins_given)
406     write_into_file(outfile, "nanglebins", args_info->nanglebins_orig, 0);
407 chuckv 1445 if (args_info->rcut_given)
408     write_into_file(outfile, "rcut", args_info->rcut_orig, 0);
409 gezelter 1454 if (args_info->dz_given)
410     write_into_file(outfile, "dz", args_info->dz_orig, 0);
411 gezelter 1390 if (args_info->length_given)
412     write_into_file(outfile, "length", args_info->length_orig, 0);
413 chuckv 1445 if (args_info->zlength_given)
414     write_into_file(outfile, "zlength", args_info->zlength_orig, 0);
415 gezelter 1390 if (args_info->zoffset_given)
416     write_into_file(outfile, "zoffset", args_info->zoffset_orig, 0);
417     if (args_info->sele1_given)
418     write_into_file(outfile, "sele1", args_info->sele1_orig, 0);
419     if (args_info->sele2_given)
420     write_into_file(outfile, "sele2", args_info->sele2_orig, 0);
421     if (args_info->sele3_given)
422     write_into_file(outfile, "sele3", args_info->sele3_orig, 0);
423     if (args_info->refsele_given)
424     write_into_file(outfile, "refsele", args_info->refsele_orig, 0);
425     if (args_info->comsele_given)
426     write_into_file(outfile, "comsele", args_info->comsele_orig, 0);
427     if (args_info->molname_given)
428     write_into_file(outfile, "molname", args_info->molname_orig, 0);
429     if (args_info->begin_given)
430     write_into_file(outfile, "begin", args_info->begin_orig, 0);
431     if (args_info->end_given)
432     write_into_file(outfile, "end", args_info->end_orig, 0);
433     if (args_info->radius_given)
434     write_into_file(outfile, "radius", args_info->radius_orig, 0);
435     if (args_info->bo_given)
436     write_into_file(outfile, "bo", 0, 0 );
437     if (args_info->bor_given)
438     write_into_file(outfile, "bor", 0, 0 );
439     if (args_info->bad_given)
440     write_into_file(outfile, "bad", 0, 0 );
441     if (args_info->gofr_given)
442     write_into_file(outfile, "gofr", 0, 0 );
443     if (args_info->gofz_given)
444     write_into_file(outfile, "gofz", 0, 0 );
445     if (args_info->r_theta_given)
446     write_into_file(outfile, "r_theta", 0, 0 );
447     if (args_info->r_omega_given)
448     write_into_file(outfile, "r_omega", 0, 0 );
449 gezelter 1440 if (args_info->r_z_given)
450     write_into_file(outfile, "r_z", 0, 0 );
451 gezelter 1390 if (args_info->theta_omega_given)
452     write_into_file(outfile, "theta_omega", 0, 0 );
453     if (args_info->gxyz_given)
454     write_into_file(outfile, "gxyz", 0, 0 );
455 gezelter 1454 if (args_info->twodgofr_given)
456     write_into_file(outfile, "twodgofr", 0, 0 );
457 gezelter 1390 if (args_info->p2_given)
458     write_into_file(outfile, "p2", 0, 0 );
459     if (args_info->rp2_given)
460     write_into_file(outfile, "rp2", 0, 0 );
461     if (args_info->scd_given)
462     write_into_file(outfile, "scd", 0, 0 );
463     if (args_info->density_given)
464     write_into_file(outfile, "density", 0, 0 );
465     if (args_info->slab_density_given)
466     write_into_file(outfile, "slab_density", 0, 0 );
467 gezelter 1413 if (args_info->p_angle_given)
468     write_into_file(outfile, "p_angle", 0, 0 );
469 gezelter 1390 if (args_info->hxy_given)
470     write_into_file(outfile, "hxy", 0, 0 );
471     if (args_info->rho_r_given)
472     write_into_file(outfile, "rho_r", 0, 0 );
473     if (args_info->hullvol_given)
474     write_into_file(outfile, "hullvol", 0, 0 );
475    
476    
477     i = EXIT_SUCCESS;
478     return i;
479     }
480    
481     int
482 gezelter 929 cmdline_parser_file_save(const char *filename, struct gengetopt_args_info *args_info)
483     {
484     FILE *outfile;
485     int i = 0;
486    
487     outfile = fopen(filename, "w");
488    
489     if (!outfile)
490     {
491     fprintf (stderr, "%s: cannot open file for writing: %s\n", CMDLINE_PARSER_PACKAGE, filename);
492     return EXIT_FAILURE;
493     }
494    
495 gezelter 1390 i = cmdline_parser_dump(outfile, args_info);
496 gezelter 929 fclose (outfile);
497    
498     return i;
499     }
500    
501     void
502     cmdline_parser_free (struct gengetopt_args_info *args_info)
503     {
504     cmdline_parser_release (args_info);
505     }
506    
507 gezelter 1390 /** @brief replacement of strdup, which is not standard */
508 tim 310 char *
509     gengetopt_strdup (const char *s)
510     {
511 gezelter 929 char *result = NULL;
512     if (!s)
513     return result;
514    
515     result = (char*)malloc(strlen(s) + 1);
516 tim 310 if (result == (char*)0)
517     return (char*)0;
518     strcpy(result, s);
519     return result;
520     }
521    
522 gezelter 929 static void
523     reset_group_staticProps(struct gengetopt_args_info *args_info)
524 tim 310 {
525 gezelter 929 if (! args_info->staticProps_group_counter)
526     return;
527 tim 310
528 gezelter 1039 args_info->bo_given = 0 ;
529 chuckv 1128 args_info->bor_given = 0 ;
530 chuckv 1180 args_info->bad_given = 0 ;
531 tim 310 args_info->gofr_given = 0 ;
532 xsun 1213 args_info->gofz_given = 0 ;
533 tim 310 args_info->r_theta_given = 0 ;
534     args_info->r_omega_given = 0 ;
535 gezelter 1440 args_info->r_z_given = 0 ;
536 tim 310 args_info->theta_omega_given = 0 ;
537 tim 369 args_info->gxyz_given = 0 ;
538 gezelter 1454 args_info->twodgofr_given = 0 ;
539 tim 543 args_info->p2_given = 0 ;
540 xsun 980 args_info->rp2_given = 0 ;
541 tim 544 args_info->scd_given = 0 ;
542 tim 545 args_info->density_given = 0 ;
543 tim 840 args_info->slab_density_given = 0 ;
544 gezelter 1413 args_info->p_angle_given = 0 ;
545 xsun 967 args_info->hxy_given = 0 ;
546 chuckv 1091 args_info->rho_r_given = 0 ;
547 chuckv 1180 args_info->hullvol_given = 0 ;
548 gezelter 929
549     args_info->staticProps_group_counter = 0;
550 tim 543 }
551 tim 310
552 gezelter 929 int
553     cmdline_parser (int argc, char * const *argv, struct gengetopt_args_info *args_info)
554     {
555     return cmdline_parser2 (argc, argv, args_info, 0, 1, 1);
556     }
557 tim 310
558 gezelter 929 int
559 gezelter 1390 cmdline_parser_ext (int argc, char * const *argv, struct gengetopt_args_info *args_info,
560     struct cmdline_parser_params *params)
561     {
562     int result;
563     result = cmdline_parser_internal (argc, argv, args_info, params, NULL);
564    
565     if (result == EXIT_FAILURE)
566     {
567     cmdline_parser_free (args_info);
568     exit (EXIT_FAILURE);
569     }
570    
571     return result;
572     }
573    
574     int
575 gezelter 929 cmdline_parser2 (int argc, char * const *argv, struct gengetopt_args_info *args_info, int override, int initialize, int check_required)
576     {
577     int result;
578 gezelter 1390 struct cmdline_parser_params params;
579    
580     params.override = override;
581     params.initialize = initialize;
582     params.check_required = check_required;
583     params.check_ambiguity = 0;
584     params.print_errors = 1;
585 gezelter 929
586 gezelter 1390 result = cmdline_parser_internal (argc, argv, args_info, &params, NULL);
587 gezelter 929
588     if (result == EXIT_FAILURE)
589     {
590     cmdline_parser_free (args_info);
591     exit (EXIT_FAILURE);
592     }
593    
594     return result;
595     }
596    
597     int
598     cmdline_parser_required (struct gengetopt_args_info *args_info, const char *prog_name)
599     {
600     int result = EXIT_SUCCESS;
601    
602     if (cmdline_parser_required2(args_info, prog_name, NULL) > 0)
603     result = EXIT_FAILURE;
604    
605     if (result == EXIT_FAILURE)
606     {
607     cmdline_parser_free (args_info);
608     exit (EXIT_FAILURE);
609     }
610    
611     return result;
612     }
613    
614     int
615     cmdline_parser_required2 (struct gengetopt_args_info *args_info, const char *prog_name, const char *additional_error)
616     {
617     int error = 0;
618    
619 chuckv 1128 /* checks for required options */
620 gezelter 929 if (! args_info->input_given)
621     {
622     fprintf (stderr, "%s: '--input' ('-i') option required%s\n", prog_name, (additional_error ? additional_error : ""));
623     error = 1;
624     }
625 chuckv 1128
626 gezelter 929 if (args_info->staticProps_group_counter == 0)
627     {
628     fprintf (stderr, "%s: %d options of group staticProps were given. One is required.%s\n", prog_name, args_info->staticProps_group_counter, (additional_error ? additional_error : ""));
629     error = 1;
630     }
631    
632    
633 chuckv 1128 /* checks for dependences among options */
634    
635 gezelter 929 return error;
636     }
637    
638 gezelter 1390
639     static char *package_name = 0;
640    
641     /**
642     * @brief updates an option
643     * @param field the generic pointer to the field to update
644     * @param orig_field the pointer to the orig field
645     * @param field_given the pointer to the number of occurrence of this option
646     * @param prev_given the pointer to the number of occurrence already seen
647     * @param value the argument for this option (if null no arg was specified)
648     * @param possible_values the possible values for this option (if specified)
649     * @param default_value the default value (in case the option only accepts fixed values)
650     * @param arg_type the type of this option
651     * @param check_ambiguity @see cmdline_parser_params.check_ambiguity
652     * @param override @see cmdline_parser_params.override
653     * @param no_free whether to free a possible previous value
654     * @param multiple_option whether this is a multiple option
655     * @param long_opt the corresponding long option
656     * @param short_opt the corresponding short option (or '-' if none)
657     * @param additional_error possible further error specification
658     */
659     static
660     int update_arg(void *field, char **orig_field,
661     unsigned int *field_given, unsigned int *prev_given,
662     char *value, char *possible_values[], const char *default_value,
663     cmdline_parser_arg_type arg_type,
664     int check_ambiguity, int override,
665     int no_free, int multiple_option,
666     const char *long_opt, char short_opt,
667     const char *additional_error)
668     {
669     char *stop_char = 0;
670     const char *val = value;
671     int found;
672     char **string_field;
673    
674     stop_char = 0;
675     found = 0;
676    
677     if (!multiple_option && prev_given && (*prev_given || (check_ambiguity && *field_given)))
678     {
679     if (short_opt != '-')
680     fprintf (stderr, "%s: `--%s' (`-%c') option given more than once%s\n",
681     package_name, long_opt, short_opt,
682     (additional_error ? additional_error : ""));
683     else
684     fprintf (stderr, "%s: `--%s' option given more than once%s\n",
685     package_name, long_opt,
686     (additional_error ? additional_error : ""));
687     return 1; /* failure */
688     }
689    
690    
691     if (field_given && *field_given && ! override)
692     return 0;
693     if (prev_given)
694     (*prev_given)++;
695     if (field_given)
696     (*field_given)++;
697     if (possible_values)
698     val = possible_values[found];
699    
700     switch(arg_type) {
701     case ARG_INT:
702     if (val) *((int *)field) = strtol (val, &stop_char, 0);
703     break;
704     case ARG_DOUBLE:
705     if (val) *((double *)field) = strtod (val, &stop_char);
706     break;
707     case ARG_STRING:
708     if (val) {
709     string_field = (char **)field;
710     if (!no_free && *string_field)
711     free (*string_field); /* free previous string */
712     *string_field = gengetopt_strdup (val);
713     }
714     break;
715     default:
716     break;
717     };
718    
719     /* check numeric conversion */
720     switch(arg_type) {
721     case ARG_INT:
722     case ARG_DOUBLE:
723     if (val && !(stop_char && *stop_char == '\0')) {
724     fprintf(stderr, "%s: invalid numeric value: %s\n", package_name, val);
725     return 1; /* failure */
726     }
727     break;
728     default:
729     ;
730     };
731    
732     /* store the original value */
733     switch(arg_type) {
734     case ARG_NO:
735     break;
736     default:
737     if (value && orig_field) {
738     if (no_free) {
739     *orig_field = value;
740     } else {
741     if (*orig_field)
742     free (*orig_field); /* free previous string */
743     *orig_field = gengetopt_strdup (value);
744     }
745     }
746     };
747    
748     return 0; /* OK */
749     }
750    
751    
752 gezelter 929 int
753 gezelter 1390 cmdline_parser_internal (int argc, char * const *argv, struct gengetopt_args_info *args_info,
754     struct cmdline_parser_params *params, const char *additional_error)
755 gezelter 929 {
756     int c; /* Character of the parsed option. */
757    
758     int error = 0;
759     struct gengetopt_args_info local_args_info;
760 gezelter 1390
761     int override;
762     int initialize;
763     int check_required;
764     int check_ambiguity;
765    
766     package_name = argv[0];
767    
768     override = params->override;
769     initialize = params->initialize;
770     check_required = params->check_required;
771     check_ambiguity = params->check_ambiguity;
772 gezelter 929
773     if (initialize)
774     cmdline_parser_init (args_info);
775    
776     cmdline_parser_init (&local_args_info);
777    
778 tim 310 optarg = 0;
779 chuckv 1128 optind = 0;
780 gezelter 1390 opterr = params->print_errors;
781 tim 310 optopt = '?';
782    
783     while (1)
784     {
785     int option_index = 0;
786    
787     static struct option long_options[] = {
788     { "help", 0, NULL, 'h' },
789     { "version", 0, NULL, 'V' },
790     { "input", 1, NULL, 'i' },
791     { "output", 1, NULL, 'o' },
792 tim 311 { "step", 1, NULL, 'n' },
793 gezelter 1041 { "nbins", 1, NULL, 'b' },
794 xsun 967 { "nbins_x", 1, NULL, 'x' },
795     { "nbins_y", 1, NULL, 'y' },
796 gezelter 1440 { "nbins_z", 1, NULL, 0 },
797 tim 310 { "nanglebins", 1, NULL, 'a' },
798 chuckv 1445 { "rcut", 1, NULL, 'c' },
799 gezelter 1454 { "dz", 1, NULL, 0 },
800 gezelter 1039 { "length", 1, NULL, 0 },
801 chuckv 1445 { "zlength", 1, NULL, 0 },
802 gezelter 929 { "zoffset", 1, NULL, 'z' },
803 tim 310 { "sele1", 1, NULL, 0 },
804     { "sele2", 1, NULL, 0 },
805 tim 544 { "sele3", 1, NULL, 0 },
806 tim 369 { "refsele", 1, NULL, 0 },
807 gezelter 1390 { "comsele", 1, NULL, 0 },
808 tim 544 { "molname", 1, NULL, 0 },
809     { "begin", 1, NULL, 0 },
810     { "end", 1, NULL, 0 },
811 chuckv 1091 { "radius", 1, NULL, 0 },
812 gezelter 1041 { "bo", 0, NULL, 0 },
813 chuckv 1128 { "bor", 0, NULL, 0 },
814 chuckv 1180 { "bad", 0, NULL, 0 },
815 gezelter 1039 { "gofr", 0, NULL, 'g' },
816 xsun 1213 { "gofz", 0, NULL, 0 },
817 tim 310 { "r_theta", 0, NULL, 0 },
818     { "r_omega", 0, NULL, 0 },
819 gezelter 1440 { "r_z", 0, NULL, 0 },
820 tim 310 { "theta_omega", 0, NULL, 0 },
821 tim 369 { "gxyz", 0, NULL, 0 },
822 gezelter 1454 { "twodgofr", 0, NULL, 0 },
823 gezelter 1039 { "p2", 0, NULL, 'p' },
824 xsun 980 { "rp2", 0, NULL, 0 },
825 gezelter 1039 { "scd", 0, NULL, 's' },
826     { "density", 0, NULL, 'd' },
827 tim 840 { "slab_density", 0, NULL, 0 },
828 gezelter 1413 { "p_angle", 0, NULL, 0 },
829 xsun 955 { "hxy", 0, NULL, 0 },
830 chuckv 1091 { "rho_r", 0, NULL, 0 },
831 chuckv 1180 { "hullvol", 0, NULL, 0 },
832 tim 310 { NULL, 0, NULL, 0 }
833     };
834    
835 gezelter 1052 c = getopt_long (argc, argv, "hVi:o:n:b:x:y:a:c:z:gpsd", long_options, &option_index);
836 tim 310
837     if (c == -1) break; /* Exit from `while (1)' loop. */
838    
839     switch (c)
840     {
841     case 'h': /* Print help and exit. */
842     cmdline_parser_print_help ();
843 gezelter 929 cmdline_parser_free (&local_args_info);
844 tim 310 exit (EXIT_SUCCESS);
845    
846     case 'V': /* Print version and exit. */
847     cmdline_parser_print_version ();
848 gezelter 929 cmdline_parser_free (&local_args_info);
849 tim 310 exit (EXIT_SUCCESS);
850    
851     case 'i': /* input dump file. */
852 gezelter 1390
853    
854     if (update_arg( (void *)&(args_info->input_arg),
855     &(args_info->input_orig), &(args_info->input_given),
856     &(local_args_info.input_given), optarg, 0, 0, ARG_STRING,
857     check_ambiguity, override, 0, 0,
858     "input", 'i',
859     additional_error))
860     goto failure;
861    
862 tim 310 break;
863     case 'o': /* output file name. */
864 gezelter 1390
865    
866     if (update_arg( (void *)&(args_info->output_arg),
867     &(args_info->output_orig), &(args_info->output_given),
868     &(local_args_info.output_given), optarg, 0, 0, ARG_STRING,
869     check_ambiguity, override, 0, 0,
870     "output", 'o',
871     additional_error))
872     goto failure;
873    
874 tim 310 break;
875 tim 311 case 'n': /* process every n frame. */
876 gezelter 1390
877    
878     if (update_arg( (void *)&(args_info->step_arg),
879     &(args_info->step_orig), &(args_info->step_given),
880     &(local_args_info.step_given), optarg, 0, "1", ARG_INT,
881     check_ambiguity, override, 0, 0,
882     "step", 'n',
883     additional_error))
884 gezelter 929 goto failure;
885 gezelter 1390
886 tim 310 break;
887 gezelter 1041 case 'b': /* number of bins (general purpose). */
888 gezelter 1390
889    
890     if (update_arg( (void *)&(args_info->nbins_arg),
891     &(args_info->nbins_orig), &(args_info->nbins_given),
892     &(local_args_info.nbins_given), optarg, 0, "100", ARG_INT,
893     check_ambiguity, override, 0, 0,
894     "nbins", 'b',
895     additional_error))
896 gezelter 929 goto failure;
897 gezelter 1390
898 tim 310 break;
899 xsun 955 case 'x': /* number of bins in x axis. */
900 gezelter 1390
901    
902     if (update_arg( (void *)&(args_info->nbins_x_arg),
903     &(args_info->nbins_x_orig), &(args_info->nbins_x_given),
904     &(local_args_info.nbins_x_given), optarg, 0, "100", ARG_INT,
905     check_ambiguity, override, 0, 0,
906     "nbins_x", 'x',
907     additional_error))
908 xsun 955 goto failure;
909 gezelter 1390
910 xsun 955 break;
911     case 'y': /* number of bins in y axis. */
912 gezelter 1390
913    
914     if (update_arg( (void *)&(args_info->nbins_y_arg),
915     &(args_info->nbins_y_orig), &(args_info->nbins_y_given),
916     &(local_args_info.nbins_y_given), optarg, 0, "100", ARG_INT,
917     check_ambiguity, override, 0, 0,
918     "nbins_y", 'y',
919     additional_error))
920 xsun 955 goto failure;
921 gezelter 1390
922 xsun 955 break;
923 tim 310 case 'a': /* number of bins for cos(angle). */
924 gezelter 1390
925    
926     if (update_arg( (void *)&(args_info->nanglebins_arg),
927     &(args_info->nanglebins_orig), &(args_info->nanglebins_given),
928     &(local_args_info.nanglebins_given), optarg, 0, "50", ARG_INT,
929     check_ambiguity, override, 0, 0,
930     "nanglebins", 'a',
931     additional_error))
932 gezelter 929 goto failure;
933 gezelter 1390
934 tim 310 break;
935 gezelter 1039 case 'c': /* cutoff radius (rcut). */
936 gezelter 1390
937    
938     if (update_arg( (void *)&(args_info->rcut_arg),
939     &(args_info->rcut_orig), &(args_info->rcut_given),
940     &(local_args_info.rcut_given), optarg, 0, 0, ARG_DOUBLE,
941     check_ambiguity, override, 0, 0,
942     "rcut", 'c',
943     additional_error))
944 gezelter 1039 goto failure;
945 gezelter 1390
946 gezelter 1039 break;
947 gezelter 929 case 'z': /* Where to set the zero for the slab_density calculation. */
948 gezelter 1390
949    
950     if (update_arg( (void *)&(args_info->zoffset_arg),
951     &(args_info->zoffset_orig), &(args_info->zoffset_given),
952     &(local_args_info.zoffset_given), optarg, 0, "0", ARG_DOUBLE,
953     check_ambiguity, override, 0, 0,
954     "zoffset", 'z',
955     additional_error))
956 gezelter 929 goto failure;
957 gezelter 1390
958 gezelter 929 break;
959 gezelter 1039 case 'g': /* g(r). */
960 gezelter 1390
961 gezelter 1039 if (args_info->staticProps_group_counter && override)
962     reset_group_staticProps (args_info);
963     args_info->staticProps_group_counter += 1;
964 gezelter 1390
965     if (update_arg( 0 ,
966     0 , &(args_info->gofr_given),
967     &(local_args_info.gofr_given), optarg, 0, 0, ARG_NO,
968     check_ambiguity, override, 0, 0,
969     "gofr", 'g',
970     additional_error))
971     goto failure;
972    
973 gezelter 1039 break;
974     case 'p': /* p2 order parameter (--sele1 and --sele2 must be specified). */
975 gezelter 1390
976 gezelter 1039 if (args_info->staticProps_group_counter && override)
977     reset_group_staticProps (args_info);
978     args_info->staticProps_group_counter += 1;
979 gezelter 1390
980     if (update_arg( 0 ,
981     0 , &(args_info->p2_given),
982     &(local_args_info.p2_given), optarg, 0, 0, ARG_NO,
983     check_ambiguity, override, 0, 0,
984     "p2", 'p',
985     additional_error))
986     goto failure;
987    
988 gezelter 1039 break;
989     case 's': /* scd order parameter (either --sele1, --sele2, --sele3 are specified or --molname, --begin, --end are specified). */
990 gezelter 1390
991 gezelter 1039 if (args_info->staticProps_group_counter && override)
992     reset_group_staticProps (args_info);
993     args_info->staticProps_group_counter += 1;
994 gezelter 1390
995     if (update_arg( 0 ,
996     0 , &(args_info->scd_given),
997     &(local_args_info.scd_given), optarg, 0, 0, ARG_NO,
998     check_ambiguity, override, 0, 0,
999     "scd", 's',
1000     additional_error))
1001     goto failure;
1002    
1003 gezelter 1039 break;
1004     case 'd': /* density plot. */
1005 gezelter 1390
1006 gezelter 1039 if (args_info->staticProps_group_counter && override)
1007     reset_group_staticProps (args_info);
1008     args_info->staticProps_group_counter += 1;
1009 gezelter 1390
1010     if (update_arg( 0 ,
1011     0 , &(args_info->density_given),
1012     &(local_args_info.density_given), optarg, 0, 0, ARG_NO,
1013     check_ambiguity, override, 0, 0,
1014     "density", 'd',
1015     additional_error))
1016     goto failure;
1017    
1018 gezelter 1039 break;
1019    
1020 tim 310 case 0: /* Long option with no short option */
1021 gezelter 1440 /* number of bins in z axis. */
1022     if (strcmp (long_options[option_index].name, "nbins_z") == 0)
1023     {
1024    
1025    
1026     if (update_arg( (void *)&(args_info->nbins_z_arg),
1027     &(args_info->nbins_z_orig), &(args_info->nbins_z_given),
1028     &(local_args_info.nbins_z_given), optarg, 0, "100", ARG_INT,
1029     check_ambiguity, override, 0, 0,
1030     "nbins_z", '-',
1031     additional_error))
1032     goto failure;
1033    
1034     }
1035 gezelter 1454 /* slab width (dz). */
1036     else if (strcmp (long_options[option_index].name, "dz") == 0)
1037     {
1038    
1039    
1040     if (update_arg( (void *)&(args_info->dz_arg),
1041     &(args_info->dz_orig), &(args_info->dz_given),
1042     &(local_args_info.dz_given), optarg, 0, 0, ARG_DOUBLE,
1043     check_ambiguity, override, 0, 0,
1044     "dz", '-',
1045     additional_error))
1046     goto failure;
1047    
1048     }
1049 gezelter 1039 /* maximum length (Defaults to 1/2 smallest length of first frame). */
1050 gezelter 1440 else if (strcmp (long_options[option_index].name, "length") == 0)
1051 gezelter 1039 {
1052 gezelter 1390
1053    
1054     if (update_arg( (void *)&(args_info->length_arg),
1055     &(args_info->length_orig), &(args_info->length_given),
1056     &(local_args_info.length_given), optarg, 0, 0, ARG_DOUBLE,
1057     check_ambiguity, override, 0, 0,
1058     "length", '-',
1059     additional_error))
1060 gezelter 1039 goto failure;
1061 gezelter 1390
1062 gezelter 1039 }
1063 chuckv 1445 /* maximum length (Defaults to 1/2 smallest length of first frame). */
1064     else if (strcmp (long_options[option_index].name, "zlength") == 0)
1065     {
1066    
1067    
1068     if (update_arg( (void *)&(args_info->zlength_arg),
1069     &(args_info->zlength_orig), &(args_info->zlength_given),
1070     &(local_args_info.zlength_given), optarg, 0, 0, ARG_DOUBLE,
1071     check_ambiguity, override, 0, 0,
1072     "zlength", '-',
1073     additional_error))
1074     goto failure;
1075    
1076     }
1077 tim 544 /* select the first stuntdouble set. */
1078 gezelter 1039 else if (strcmp (long_options[option_index].name, "sele1") == 0)
1079 tim 543 {
1080 gezelter 1390
1081    
1082     if (update_arg( (void *)&(args_info->sele1_arg),
1083     &(args_info->sele1_orig), &(args_info->sele1_given),
1084     &(local_args_info.sele1_given), optarg, 0, 0, ARG_STRING,
1085     check_ambiguity, override, 0, 0,
1086     "sele1", '-',
1087     additional_error))
1088     goto failure;
1089    
1090 tim 543 }
1091 tim 544 /* select the second stuntdouble set. */
1092 tim 310 else if (strcmp (long_options[option_index].name, "sele2") == 0)
1093 tim 543 {
1094 gezelter 1390
1095    
1096     if (update_arg( (void *)&(args_info->sele2_arg),
1097     &(args_info->sele2_orig), &(args_info->sele2_given),
1098     &(local_args_info.sele2_given), optarg, 0, 0, ARG_STRING,
1099     check_ambiguity, override, 0, 0,
1100     "sele2", '-',
1101     additional_error))
1102     goto failure;
1103    
1104 tim 543 }
1105 tim 544 /* select the third stuntdouble set. */
1106     else if (strcmp (long_options[option_index].name, "sele3") == 0)
1107     {
1108 gezelter 1390
1109    
1110     if (update_arg( (void *)&(args_info->sele3_arg),
1111     &(args_info->sele3_orig), &(args_info->sele3_given),
1112     &(local_args_info.sele3_given), optarg, 0, 0, ARG_STRING,
1113     check_ambiguity, override, 0, 0,
1114     "sele3", '-',
1115     additional_error))
1116     goto failure;
1117    
1118 tim 544 }
1119 tim 369 /* select reference (use and only use with --gxyz). */
1120     else if (strcmp (long_options[option_index].name, "refsele") == 0)
1121 tim 543 {
1122 gezelter 1390
1123    
1124     if (update_arg( (void *)&(args_info->refsele_arg),
1125     &(args_info->refsele_orig), &(args_info->refsele_given),
1126     &(local_args_info.refsele_given), optarg, 0, 0, ARG_STRING,
1127     check_ambiguity, override, 0, 0,
1128     "refsele", '-',
1129     additional_error))
1130     goto failure;
1131    
1132 tim 543 }
1133 gezelter 1390 /* select stunt doubles for center-of-mass reference point. */
1134     else if (strcmp (long_options[option_index].name, "comsele") == 0)
1135     {
1136    
1137    
1138     if (update_arg( (void *)&(args_info->comsele_arg),
1139     &(args_info->comsele_orig), &(args_info->comsele_given),
1140     &(local_args_info.comsele_given), optarg, 0, 0, ARG_STRING,
1141     check_ambiguity, override, 0, 0,
1142     "comsele", '-',
1143     additional_error))
1144     goto failure;
1145    
1146     }
1147 tim 544 /* molecule name. */
1148     else if (strcmp (long_options[option_index].name, "molname") == 0)
1149     {
1150 gezelter 1390
1151    
1152     if (update_arg( (void *)&(args_info->molname_arg),
1153     &(args_info->molname_orig), &(args_info->molname_given),
1154     &(local_args_info.molname_given), optarg, 0, 0, ARG_STRING,
1155     check_ambiguity, override, 0, 0,
1156     "molname", '-',
1157     additional_error))
1158     goto failure;
1159    
1160 tim 544 }
1161 gezelter 1039 /* begin internal index. */
1162 tim 544 else if (strcmp (long_options[option_index].name, "begin") == 0)
1163     {
1164 gezelter 1390
1165    
1166     if (update_arg( (void *)&(args_info->begin_arg),
1167     &(args_info->begin_orig), &(args_info->begin_given),
1168     &(local_args_info.begin_given), optarg, 0, 0, ARG_INT,
1169     check_ambiguity, override, 0, 0,
1170     "begin", '-',
1171     additional_error))
1172 gezelter 929 goto failure;
1173 gezelter 1390
1174 tim 544 }
1175     /* end internal index. */
1176     else if (strcmp (long_options[option_index].name, "end") == 0)
1177     {
1178 gezelter 1390
1179    
1180     if (update_arg( (void *)&(args_info->end_arg),
1181     &(args_info->end_orig), &(args_info->end_given),
1182     &(local_args_info.end_given), optarg, 0, 0, ARG_INT,
1183     check_ambiguity, override, 0, 0,
1184     "end", '-',
1185     additional_error))
1186 gezelter 929 goto failure;
1187 gezelter 1390
1188 tim 544 }
1189 chuckv 1091 /* nanoparticle radius. */
1190     else if (strcmp (long_options[option_index].name, "radius") == 0)
1191     {
1192 gezelter 1390
1193    
1194     if (update_arg( (void *)&(args_info->radius_arg),
1195     &(args_info->radius_orig), &(args_info->radius_given),
1196     &(local_args_info.radius_given), optarg, 0, 0, ARG_DOUBLE,
1197     check_ambiguity, override, 0, 0,
1198     "radius", '-',
1199     additional_error))
1200 chuckv 1091 goto failure;
1201 gezelter 1390
1202 chuckv 1091 }
1203 chuckv 1128 /* bond order parameter (--rcut must be specified). */
1204 gezelter 1041 else if (strcmp (long_options[option_index].name, "bo") == 0)
1205     {
1206 gezelter 1390
1207 gezelter 1041 if (args_info->staticProps_group_counter && override)
1208     reset_group_staticProps (args_info);
1209     args_info->staticProps_group_counter += 1;
1210 gezelter 1390
1211     if (update_arg( 0 ,
1212     0 , &(args_info->bo_given),
1213     &(local_args_info.bo_given), optarg, 0, 0, ARG_NO,
1214     check_ambiguity, override, 0, 0,
1215     "bo", '-',
1216     additional_error))
1217     goto failure;
1218    
1219 gezelter 1041 }
1220 chuckv 1128 /* bond order parameter as a function of radius (--rcut must be specified). */
1221     else if (strcmp (long_options[option_index].name, "bor") == 0)
1222     {
1223 gezelter 1390
1224 chuckv 1128 if (args_info->staticProps_group_counter && override)
1225     reset_group_staticProps (args_info);
1226     args_info->staticProps_group_counter += 1;
1227 gezelter 1390
1228     if (update_arg( 0 ,
1229     0 , &(args_info->bor_given),
1230     &(local_args_info.bor_given), optarg, 0, 0, ARG_NO,
1231     check_ambiguity, override, 0, 0,
1232     "bor", '-',
1233     additional_error))
1234     goto failure;
1235    
1236 chuckv 1128 }
1237 chuckv 1180 /* N(theta) bond angle density within (--rcut must be specified). */
1238     else if (strcmp (long_options[option_index].name, "bad") == 0)
1239     {
1240 gezelter 1390
1241 chuckv 1180 if (args_info->staticProps_group_counter && override)
1242     reset_group_staticProps (args_info);
1243     args_info->staticProps_group_counter += 1;
1244 gezelter 1390
1245     if (update_arg( 0 ,
1246     0 , &(args_info->bad_given),
1247     &(local_args_info.bad_given), optarg, 0, 0, ARG_NO,
1248     check_ambiguity, override, 0, 0,
1249     "bad", '-',
1250     additional_error))
1251     goto failure;
1252    
1253 chuckv 1180 }
1254 xsun 1213 /* g(z). */
1255     else if (strcmp (long_options[option_index].name, "gofz") == 0)
1256     {
1257 gezelter 1390
1258 xsun 1213 if (args_info->staticProps_group_counter && override)
1259     reset_group_staticProps (args_info);
1260     args_info->staticProps_group_counter += 1;
1261 gezelter 1390
1262     if (update_arg( 0 ,
1263     0 , &(args_info->gofz_given),
1264     &(local_args_info.gofz_given), optarg, 0, 0, ARG_NO,
1265     check_ambiguity, override, 0, 0,
1266     "gofz", '-',
1267     additional_error))
1268     goto failure;
1269    
1270 xsun 1213 }
1271 tim 310 /* g(r, cos(theta)). */
1272     else if (strcmp (long_options[option_index].name, "r_theta") == 0)
1273 tim 543 {
1274 gezelter 1390
1275 gezelter 929 if (args_info->staticProps_group_counter && override)
1276     reset_group_staticProps (args_info);
1277     args_info->staticProps_group_counter += 1;
1278 gezelter 1390
1279     if (update_arg( 0 ,
1280     0 , &(args_info->r_theta_given),
1281     &(local_args_info.r_theta_given), optarg, 0, 0, ARG_NO,
1282     check_ambiguity, override, 0, 0,
1283     "r_theta", '-',
1284     additional_error))
1285     goto failure;
1286    
1287 tim 543 }
1288 tim 310 /* g(r, cos(omega)). */
1289     else if (strcmp (long_options[option_index].name, "r_omega") == 0)
1290 tim 543 {
1291 gezelter 1390
1292 gezelter 929 if (args_info->staticProps_group_counter && override)
1293     reset_group_staticProps (args_info);
1294     args_info->staticProps_group_counter += 1;
1295 gezelter 1390
1296     if (update_arg( 0 ,
1297     0 , &(args_info->r_omega_given),
1298     &(local_args_info.r_omega_given), optarg, 0, 0, ARG_NO,
1299     check_ambiguity, override, 0, 0,
1300     "r_omega", '-',
1301     additional_error))
1302     goto failure;
1303    
1304 tim 543 }
1305 gezelter 1440 /* g(r, z). */
1306     else if (strcmp (long_options[option_index].name, "r_z") == 0)
1307     {
1308    
1309     if (args_info->staticProps_group_counter && override)
1310     reset_group_staticProps (args_info);
1311     args_info->staticProps_group_counter += 1;
1312    
1313     if (update_arg( 0 ,
1314     0 , &(args_info->r_z_given),
1315     &(local_args_info.r_z_given), optarg, 0, 0, ARG_NO,
1316     check_ambiguity, override, 0, 0,
1317     "r_z", '-',
1318     additional_error))
1319     goto failure;
1320    
1321     }
1322 tim 310 /* g(cos(theta), cos(omega)). */
1323     else if (strcmp (long_options[option_index].name, "theta_omega") == 0)
1324 tim 543 {
1325 gezelter 1390
1326 gezelter 929 if (args_info->staticProps_group_counter && override)
1327     reset_group_staticProps (args_info);
1328     args_info->staticProps_group_counter += 1;
1329 gezelter 1390
1330     if (update_arg( 0 ,
1331     0 , &(args_info->theta_omega_given),
1332     &(local_args_info.theta_omega_given), optarg, 0, 0, ARG_NO,
1333     check_ambiguity, override, 0, 0,
1334     "theta_omega", '-',
1335     additional_error))
1336     goto failure;
1337    
1338 tim 543 }
1339 tim 310 /* g(x, y, z). */
1340 tim 369 else if (strcmp (long_options[option_index].name, "gxyz") == 0)
1341 tim 543 {
1342 gezelter 1390
1343 gezelter 929 if (args_info->staticProps_group_counter && override)
1344     reset_group_staticProps (args_info);
1345     args_info->staticProps_group_counter += 1;
1346 gezelter 1390
1347     if (update_arg( 0 ,
1348     0 , &(args_info->gxyz_given),
1349     &(local_args_info.gxyz_given), optarg, 0, 0, ARG_NO,
1350     check_ambiguity, override, 0, 0,
1351     "gxyz", '-',
1352     additional_error))
1353     goto failure;
1354    
1355 tim 543 }
1356 gezelter 1454 /* 2D g(r) (Slab width --dz must be specified). */
1357     else if (strcmp (long_options[option_index].name, "twodgofr") == 0)
1358     {
1359    
1360     if (args_info->staticProps_group_counter && override)
1361     reset_group_staticProps (args_info);
1362     args_info->staticProps_group_counter += 1;
1363    
1364     if (update_arg( 0 ,
1365     0 , &(args_info->twodgofr_given),
1366     &(local_args_info.twodgofr_given), optarg, 0, 0, ARG_NO,
1367     check_ambiguity, override, 0, 0,
1368     "twodgofr", '-',
1369     additional_error))
1370     goto failure;
1371    
1372     }
1373 xsun 980 /* rp2 order parameter (--sele1 and --sele2 must be specified). */
1374     else if (strcmp (long_options[option_index].name, "rp2") == 0)
1375     {
1376 gezelter 1390
1377 xsun 980 if (args_info->staticProps_group_counter && override)
1378     reset_group_staticProps (args_info);
1379     args_info->staticProps_group_counter += 1;
1380 gezelter 1390
1381     if (update_arg( 0 ,
1382     0 , &(args_info->rp2_given),
1383     &(local_args_info.rp2_given), optarg, 0, 0, ARG_NO,
1384     check_ambiguity, override, 0, 0,
1385     "rp2", '-',
1386     additional_error))
1387     goto failure;
1388    
1389 xsun 980 }
1390 gezelter 1039 /* slab density. */
1391 tim 840 else if (strcmp (long_options[option_index].name, "slab_density") == 0)
1392     {
1393 gezelter 1390
1394 gezelter 929 if (args_info->staticProps_group_counter && override)
1395     reset_group_staticProps (args_info);
1396     args_info->staticProps_group_counter += 1;
1397 gezelter 1390
1398     if (update_arg( 0 ,
1399     0 , &(args_info->slab_density_given),
1400     &(local_args_info.slab_density_given), optarg, 0, 0, ARG_NO,
1401     check_ambiguity, override, 0, 0,
1402     "slab_density", '-',
1403     additional_error))
1404     goto failure;
1405    
1406 tim 840 }
1407 gezelter 1413 /* p(cos(theta)). */
1408     else if (strcmp (long_options[option_index].name, "p_angle") == 0)
1409     {
1410    
1411     if (args_info->staticProps_group_counter && override)
1412     reset_group_staticProps (args_info);
1413     args_info->staticProps_group_counter += 1;
1414    
1415     if (update_arg( 0 ,
1416     0 , &(args_info->p_angle_given),
1417     &(local_args_info.p_angle_given), optarg, 0, 0, ARG_NO,
1418     check_ambiguity, override, 0, 0,
1419     "p_angle", '-',
1420     additional_error))
1421     goto failure;
1422    
1423     }
1424 gezelter 1039 /* hxy. */
1425 xsun 955 else if (strcmp (long_options[option_index].name, "hxy") == 0)
1426     {
1427 gezelter 1390
1428 xsun 955 if (args_info->staticProps_group_counter && override)
1429     reset_group_staticProps (args_info);
1430     args_info->staticProps_group_counter += 1;
1431 gezelter 1390
1432     if (update_arg( 0 ,
1433     0 , &(args_info->hxy_given),
1434     &(local_args_info.hxy_given), optarg, 0, 0, ARG_NO,
1435     check_ambiguity, override, 0, 0,
1436     "hxy", '-',
1437     additional_error))
1438     goto failure;
1439    
1440 xsun 955 }
1441 chuckv 1091 /* rho of R. */
1442     else if (strcmp (long_options[option_index].name, "rho_r") == 0)
1443     {
1444 gezelter 1390
1445 chuckv 1091 if (args_info->staticProps_group_counter && override)
1446     reset_group_staticProps (args_info);
1447     args_info->staticProps_group_counter += 1;
1448 gezelter 1390
1449     if (update_arg( 0 ,
1450     0 , &(args_info->rho_r_given),
1451     &(local_args_info.rho_r_given), optarg, 0, 0, ARG_NO,
1452     check_ambiguity, override, 0, 0,
1453     "rho_r", '-',
1454     additional_error))
1455     goto failure;
1456    
1457 chuckv 1091 }
1458 chuckv 1180 /* hull volume of nanoparticle. */
1459     else if (strcmp (long_options[option_index].name, "hullvol") == 0)
1460     {
1461 gezelter 1390
1462 chuckv 1180 if (args_info->staticProps_group_counter && override)
1463     reset_group_staticProps (args_info);
1464     args_info->staticProps_group_counter += 1;
1465 gezelter 1390
1466     if (update_arg( 0 ,
1467     0 , &(args_info->hullvol_given),
1468     &(local_args_info.hullvol_given), optarg, 0, 0, ARG_NO,
1469     check_ambiguity, override, 0, 0,
1470     "hullvol", '-',
1471     additional_error))
1472     goto failure;
1473    
1474 chuckv 1180 }
1475 tim 840
1476 gezelter 929 break;
1477 tim 310 case '?': /* Invalid option. */
1478     /* `getopt_long' already printed an error message. */
1479 gezelter 929 goto failure;
1480 tim 310
1481     default: /* bug: option not considered. */
1482 gezelter 929 fprintf (stderr, "%s: option unknown: %c%s\n", CMDLINE_PARSER_PACKAGE, c, (additional_error ? additional_error : ""));
1483 tim 310 abort ();
1484     } /* switch */
1485     } /* while */
1486    
1487 gezelter 929 if (args_info->staticProps_group_counter > 1)
1488 tim 310 {
1489 gezelter 929 fprintf (stderr, "%s: %d options of group staticProps were given. One is required.%s\n", argv[0], args_info->staticProps_group_counter, (additional_error ? additional_error : ""));
1490     error = 1;
1491 tim 310 }
1492    
1493    
1494 gezelter 929
1495     if (check_required)
1496 tim 310 {
1497 gezelter 929 error += cmdline_parser_required2 (args_info, argv[0], additional_error);
1498 tim 310 }
1499    
1500 gezelter 929 cmdline_parser_release (&local_args_info);
1501    
1502     if ( error )
1503     return (EXIT_FAILURE);
1504    
1505 gezelter 1454 if (optind < argc)
1506     {
1507     int i = 0 ;
1508     int found_prog_name = 0;
1509     /* whether program name, i.e., argv[0], is in the remaining args
1510     (this may happen with some implementations of getopt,
1511     but surely not with the one included by gengetopt) */
1512    
1513     i = optind;
1514     while (i < argc)
1515     if (argv[i++] == argv[0]) {
1516     found_prog_name = 1;
1517     break;
1518     }
1519     i = 0;
1520    
1521     args_info->inputs_num = argc - optind - found_prog_name;
1522     args_info->inputs =
1523     (char **)(malloc ((args_info->inputs_num)*sizeof(char *))) ;
1524     while (optind < argc)
1525     if (argv[optind++] != argv[0])
1526     args_info->inputs[ i++ ] = gengetopt_strdup (argv[optind-1]) ;
1527     }
1528    
1529 tim 310 return 0;
1530 gezelter 929
1531     failure:
1532    
1533     cmdline_parser_release (&local_args_info);
1534     return (EXIT_FAILURE);
1535 tim 310 }

Properties

Name Value
svn:keywords Author Id Revision Date