ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/src/applications/staticProps/StaticPropsCmd.cpp
Revision: 1390
Committed: Wed Nov 25 20:02:06 2009 UTC (15 years, 5 months ago) by gezelter
Content type: text/plain
Original Path: trunk/src/applications/staticProps/StaticPropsCmd.c
File size: 46588 byte(s)
Log Message:
Almost all of the changes necessary to create OpenMD out of our old
project (OOPSE-4)

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