* To help us fund GROMACS development, we humbly ask that you cite
* the research papers on the package. Check out http://www.gromacs.org.
*/
-/* This file is completely threadsafe - keep it that way! */
-#include "gromacs/commandline/pargs.h"
+#include "gmxpre.h"
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
+#include "pargs.h"
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <list>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "thread_mpi/threads.h"
-
#include "gromacs/commandline/cmdlinehelpcontext.h"
#include "gromacs/commandline/cmdlinehelpwriter.h"
#include "gromacs/commandline/cmdlineparser.h"
const bool bMultiple = ((fnm->flag & ffMULT) != 0);
const char *const name = &fnm->opt[1];
const char * defName = fnm->fn;
+ int defType = -1;
if (defName == NULL)
{
defName = ftp2defnm(fnm->ftp);
}
+ else if (std::strchr(defName, '.') != NULL)
+ {
+ defType = fn2ftp(defName);
+ GMX_RELEASE_ASSERT(defType != efNR,
+ "File name option specifies an invalid extension");
+ }
fileNameOptions_.push_back(FileNameData(fnm));
FileNameData &data = fileNameOptions_.back();
data.optionInfo = options->addOption(
FileNameOption(name).storeVector(&data.values)
- .defaultBasename(defName).legacyType(fnm->ftp)
- .legacyOptionalBehavior()
+ .defaultBasename(defName).defaultType(defType)
+ .legacyType(fnm->ftp).legacyOptionalBehavior()
.readWriteFlags(bRead, bWrite).required(!bOptional)
.libraryFile(bLibrary).multiValue(bMultiple)
.description(ftp2desc(fnm->ftp)));
snew(file->fnm->fns, file->fnm->nfiles);
for (int i = 0; i < file->fnm->nfiles; ++i)
{
- // TODO: Check for out-of-memory.
- file->fnm->fns[i] = strdup(file->values[i].c_str());
+ file->fnm->fns[i] = gmx_strdup(file->values[i].c_str());
}
}
std::list<ProgramArgData>::const_iterator arg;
try
{
- int nicelevel = 0;
double tbegin = 0.0, tend = 0.0, tdelta = 0.0;
bool bView = false;
int xvgFormat = 0;
fileOptManager.disableInputOptionChecking(
FF(PCA_NOT_READ_NODE) || FF(PCA_DISABLE_INPUT_FILE_CHECKING));
options.addManager(&fileOptManager);
- options.setDescription(gmx::ConstArrayRef<const char *>(desc, ndesc));
-
- options.addOption(
- gmx::IntegerOption("nice").store(&nicelevel)
- .defaultValue(FF(PCA_BE_NICE) ? 19 : 0)
- .description("Set the nicelevel"));
+ options.setDescription(gmx::constArrayRefFromArray<const char *>(desc, ndesc));
if (FF(PCA_CAN_SET_DEFFNM))
{
gmx::GlobalCommandLineHelpContext::get();
if (context != NULL)
{
- // TODO: The first check should not be necessary, but with
- // thread-MPI it is...
- GMX_RELEASE_ASSERT(!gmx_mpi_initialized() || gmx_node_rank() == 0,
+ GMX_RELEASE_ASSERT(gmx_node_rank() == 0,
"Help output should be handled higher up and "
"only get called only on the master rank");
gmx::CommandLineHelpWriter(options)
.setShowDescriptions(true)
.setTimeUnitString(timeUnitManager.timeUnitAsString())
- .setKnownIssues(gmx::ConstArrayRef<const char *>(bugs, nbugs))
+ .setKnownIssues(gmx::constArrayRefFromArray(bugs, nbugs))
.writeHelp(*context);
return FALSE;
}
(time_unit_t)(timeUnitManager.timeUnit() + 1), bView,
(xvg_format_t)(xvgFormat + 1), 0);
- /* Set the nice level */
-#ifdef HAVE_UNISTD_H
-#ifndef GMX_NO_NICE
- /* The some system, e.g. the catamount kernel on cray xt3 do not have nice(2). */
- if (nicelevel != 0)
- {
- static gmx_bool nice_set = FALSE; /* only set it once */
- static tMPI_Thread_mutex_t init_mutex = TMPI_THREAD_MUTEX_INITIALIZER;
- tMPI_Thread_mutex_lock(&init_mutex);
- if (!nice_set)
- {
- if (nice(nicelevel) == -1)
- {
- /* Do nothing, but use the return value to avoid warnings. */
- }
- nice_set = TRUE;
- }
- tMPI_Thread_mutex_unlock(&init_mutex);
- }
-#endif
-#endif
-
timeUnitManager.scaleTimeOptions(&options);
/* Extract Time info from arguments */