2 * This file is part of the GROMACS molecular simulation package.
4 * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
5 * Copyright (c) 2001-2004, The GROMACS development team.
6 * Copyright (c) 2013, by the GROMACS development team, led by
7 * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
8 * and including many others, as listed in the AUTHORS file in the
9 * top-level source directory and at http://www.gromacs.org.
11 * GROMACS is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU Lesser General Public License
13 * as published by the Free Software Foundation; either version 2.1
14 * of the License, or (at your option) any later version.
16 * GROMACS is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * Lesser General Public License for more details.
21 * You should have received a copy of the GNU Lesser General Public
22 * License along with GROMACS; if not, see
23 * http://www.gnu.org/licenses, or write to the Free Software Foundation,
24 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
26 * If you want to redistribute modifications to GROMACS, please
27 * consider that scientific software is very special. Version
28 * control is crucial - bugs must be traceable. We will be happy to
29 * consider code for inclusion in the official distribution, but
30 * derived work must not be called official GROMACS. Details are found
31 * in the README & COPYING files - if they are missing, get the
32 * official version at http://www.gromacs.org.
34 * To help us fund GROMACS development, we humbly ask that you cite
35 * the research papers on the package. Check out http://www.gromacs.org.
37 #ifndef GMX_COMMANDLINE_PARGS_H
38 #define GMX_COMMANDLINE_PARGS_H
40 #include "../legacyheaders/types/simple.h"
41 #include "../legacyheaders/oenv.h"
42 #include "../fileio/filenm.h"
49 /* This structure is used for parsing arguments off the comand line */
52 etINT, etINT64, etREAL, etTIME, etSTR, etBOOL, etRVEC, etENUM, etNR
62 void *v; /* This is a nasty workaround, to be able to use initialized */
66 const char **c; /* Must be pointer to string (when type == etSTR) */
67 /* or null terminated list of enums (when type == etENUM) */
74 gmx_bool is_hidden(t_pargs *pa);
75 /* Return TRUE when the option is a secret one */
77 int nenum(const char *const enumc[]);
78 /* returns ordinal number of selected enum from args
79 * depends on enumc[0] pointing to one of the other elements
80 * array must be terminated by a NULL pointer
83 int opt2parg_int(const char *option, int nparg, t_pargs pa[]);
85 gmx_bool opt2parg_gmx_bool(const char *option, int nparg, t_pargs pa[]);
87 real opt2parg_real(const char *option, int nparg, t_pargs pa[]);
89 const char *opt2parg_str(const char *option, int nparg, t_pargs pa[]);
91 const char *opt2parg_enum(const char *option, int nparg, t_pargs pa[]);
93 gmx_bool opt2parg_bSet(const char *option, int nparg, t_pargs pa[]);
96 #define PCA_CAN_VIEW (1<<5)
97 /* add option -w to view output files (must be implemented in program) */
98 #define PCA_CAN_BEGIN (1<<6)
99 #define PCA_CAN_END (1<<7)
100 #define PCA_CAN_DT (1<<14)
101 #define PCA_CAN_TIME (PCA_CAN_BEGIN | PCA_CAN_END | PCA_CAN_DT)
102 /* adds options -b and -e for begin and end time for reading trajectories */
103 #define PCA_TIME_UNIT (1<<15)
104 /* set time unit for output */
105 #define PCA_CAN_SET_DEFFNM (1<<10)
106 /* does something for non-master mdrun nodes */
107 #define PCA_NOEXIT_ON_ARGS (1<<11)
108 /* no fatal_error when invalid options are encountered */
109 #define PCA_QUIET (1<<12)
110 /* does something for non-master mdrun nodes */
111 #define PCA_BE_NICE (1<<13)
112 /* Default to low priority, unless configured with --disable-nice */
113 #define PCA_NOT_READ_NODE (1<<16)
114 /* Is this node not reading: for parallel all nodes but the master */
116 gmx_bool parse_common_args(int *argc, char *argv[], unsigned long Flags,
117 int nfile, t_filenm fnm[], int npargs, t_pargs *pa,
118 int ndesc, const char **desc,
119 int nbugs, const char **bugs,
121 /* Get arguments from the arg-list. The arguments extracted
122 * are removed from the list. If manual is NULL a default message is displayed
123 * when errors are encountered. The Flags argument, when non-0 enables
124 * some input checks. Using this routine also means that the arguments
125 * -b and -e will be used for begin and end time, whether this is
126 * appropriate or not!