--- /dev/null
+/**
+ * Author: Mark Larkin
+ *
+ * Copyright (c) 2007 Des Higgins, Julie Thompson and Toby Gibson.
+ */
+/**
+ * The class CommandLineParser is used to parse the command line arguments. It then
+ * sets some parameters, and calls the required functions.
+ * To get it to parse the command line, and execute the required job, create a
+ * CommandLineParser object and pass the list of arguments to the constructor.
+ */
+
+#ifndef COMMANDLINEPARSER_H
+#define COMMANDLINEPARSER_H
+
+#include <vector>
+#include <string>
+#include "../Clustal.h"
+#include "../general/clustalw.h"
+#include "../general/userparams.h"
+#include "../general/utils.h"
+#include "../general/debuglogObject.h"
+#include "../general/statsObject.h"
+namespace clustalw
+{
+
+typedef std::vector<std::string> StringArray;
+
+typedef struct {
+ const char *str;
+ int *flag;
+ int type;
+ StringArray* arg;
+} CmdLineData;
+
+class CommandLineParser
+{
+ public:
+ /* Functions */
+ CommandLineParser(StringArray* args, bool xmenus);
+ ~CommandLineParser();
+
+ private:
+ /* Functions */
+
+ /** separate argument options and values
+ *
+ * put all the parameters and their values in the
+ * vectors, and also to check that all parameters that require a value
+ * have it.
+ *
+ * @param args contains parameters as value and optional option pairs
+ * @param parameters used for storing parsed arguments
+ * @param paramArgs used for storing values of parsed arguments
+ * @return number of parsed parameters or -1 on error
+ */
+ int checkParam(StringArray* args, StringArray* params, StringArray* paramArg);
+
+ /** Parse all parameters
+ */
+ void parseParams(StringArray* args, bool xmenus);
+ void setOptionalParam();
+ int findMatch(string probe, StringArray* list, int n);
+ CmdLineData getCmdLineDataStruct(const char *str, int *flag, int type, StringArray* arg);
+ void printCmdLineData(const CmdLineData& temp);
+ string ConvertStringToLower(string strToConvert);
+ void exitWithErrorMsg(string msg);
+ void reportBadOptionAndExit(string option, string expectedType);
+ void reportInvalidOptionAndExit(string option);
+
+
+ /* Attributes */
+ Clustal *clustalObj;
+
+ static const int MAXARGS = 100;
+ static const int NOARG = 0;
+ static const int INTARG = 1;
+ static const int FLTARG = 2;
+ static const int STRARG = 3;
+ static const int FILARG = 4;
+ static const int OPTARG = 5;
+
+ int setOptions;
+ int setHelp;
+ int setFullHelp;
+ int setQuiet;
+ int setInteractive;
+ int setBatch;
+ int setGapOpen;
+ int setGapExtend;
+ int setPWGapOpen;
+ int setPWGapExtend;
+ int setOutOrder;
+ int setBootLabels;
+ int setPWMatrix;
+ int setMatrix;
+ int setPWDNAMatrix;
+ int setDNAMatrix;
+ int setNegative;
+ int setNoWeights;
+ int setOutput;
+ int setOutputTree;
+ int setQuickTree;
+ int setType;
+ int setCase;
+ int setSeqNo;
+ int setSeqNoRange;
+ int setRange;
+ int setTransWeight;
+ int setSeed;
+ int setScore;
+ int setWindow;
+ int setKtuple;
+ int setKimura;
+ int setTopDiags;
+ int setPairGap;
+ int setTossGaps;
+ int setNoPGap;
+ int setNoHGap;
+ int setNoVGap;
+ int setHGapRes;
+ int setUseEndGaps;
+ int setMaxDiv;
+ int setGapDist;
+ int setDebug;
+ int setOutfile;
+ int setInfile;
+ int setProfile1;
+ int setProfile2;
+ int setAlign;
+ int setConvert;
+ int setNewTree;
+ int setUseTree;
+ int setNewTree1;
+ int setUseTree1;
+ int setNewTree2;
+ int setUseTree2;
+ int setBootstrap;
+ int setTree;
+ int setProfile;
+ int setSequences;
+ int setSecStruct1;
+ int setSecStruct2;
+ int setSecStructOutput;
+ int setHelixGap;
+ int setStrandGap;
+ int setLoopGap;
+ int setTerminalGap;
+ int setHelixEndIn;
+ int setHelixEndOut;
+ int setStrandEndIn;
+ int setStrandEndOut;
+ int profileType;
+ int setDoIteration;
+ int setNumIterations;
+ int setTreeAlgorithm;
+ int setMaxSeqLen;
+ int setStatsFile;
+ int setOutputPim;
+
+ string userMatrixName;
+ string pwUserMatrixName;
+ string DNAUserMatrixName;
+ string pwDNAUserMatrixName;
+
+ CmdLineData cmdLineFile[4];
+ CmdLineData cmdLineVerb[20];
+ CmdLineData cmdLinePara[56];
+
+ string clustalTreeName;
+ string distTreeName;
+ string phylipTreeName;
+ string nexusTreeName;
+ string p1TreeName;
+ string p2TreeName;
+ string pimName;
+
+ StringArray* typeArg;
+ StringArray* bootLabelsArg;
+ StringArray* outOrderArg;
+ StringArray* caseArg;
+ StringArray* seqNoArg;
+ StringArray* seqNoRangeArg;
+ StringArray* scoreArg;
+ StringArray* outputArg;
+ StringArray* outputTreeArg;
+ StringArray* outputSecStrArg;
+ StringArray* cmdLineType;
+ StringArray* clusterAlgorithm;
+ StringArray* iterationArg;
+
+ StringArray* params; // parameter names
+ StringArray* paramArg; // parameter values
+};
+
+}
+#endif