+++ /dev/null
-#include "muscle.h"\r
-#include <stdio.h>\r
-\r
-struct VALUE_OPT\r
- {\r
- const char *m_pstrName;\r
- const char *m_pstrValue;\r
- };\r
-\r
-struct FLAG_OPT\r
- {\r
- const char *m_pstrName;\r
- bool m_bSet;\r
- };\r
-\r
-static VALUE_OPT ValueOpts[] =\r
- {\r
- "in", 0,\r
- "in1", 0,\r
- "in2", 0,\r
- "out", 0,\r
- "MaxIters", 0,\r
- "MaxHours", 0,\r
- "GapOpen", 0,\r
- "GapOpen2", 0,\r
- "GapExtend", 0,\r
- "GapExtend2", 0,\r
- "GapAmbig", 0,\r
- "Center", 0,\r
- "SmoothScoreCeil", 0,\r
- "MinBestColScore", 0,\r
- "MinSmoothScore", 0,\r
- "ObjScore", 0,\r
- "SmoothWindow", 0,\r
- "RefineWindow", 0,\r
- "FromWindow", 0,\r
- "ToWindow", 0,\r
- "SaveWindow", 0,\r
- "WindowOffset", 0,\r
- "FirstWindow", 0,\r
- "AnchorSpacing", 0,\r
- "Log", 0,\r
- "LogA", 0,\r
- "MaxTrees", 0,\r
- "SUEFF", 0,\r
- "Distance", 0,\r
- "Distance1", 0,\r
- "Distance2", 0,\r
- "Weight", 0,\r
- "Weight1", 0,\r
- "Weight2", 0,\r
- "Cluster", 0,\r
- "Cluster1", 0,\r
- "Cluster2", 0,\r
- "Root1", 0,\r
- "Root2", 0,\r
- "Tree1", 0,\r
- "Tree2", 0,\r
- "UseTree", 0,\r
- "UseTree_NoWarn", 0,\r
- "DiagLength", 0,\r
- "DiagMargin", 0,\r
- "DiagBreak", 0,\r
- "Hydro", 0,\r
- "HydroFactor", 0,\r
- "SPScore", 0,\r
- "SeqType", 0,\r
- "MaxMB", 0,\r
- "ComputeWeights", 0,\r
- "MaxSubFam", 0,\r
- "ScoreFile", 0,\r
- "TermGaps", 0,\r
- "FASTAOut", 0,\r
- "CLWOut", 0,\r
- "CLWStrictOut", 0,\r
- "HTMLOut", 0,\r
- "MSFOut", 0,\r
- "PHYIOut", 0,\r
- "PHYSOut", 0,\r
- "Matrix", 0,\r
- "DistMx1", 0,\r
- "DistMx2", 0,\r
- "Weight", 0,\r
- };\r
-static int ValueOptCount = sizeof(ValueOpts)/sizeof(ValueOpts[0]);\r
-\r
-static FLAG_OPT FlagOpts[] =\r
- {\r
- "LE", false,\r
- "SP", false,\r
- "SV", false,\r
- "SPN", false,\r
- "Core", false,\r
- "NoCore", false,\r
- "Diags1", false,\r
- "Diags2", false,\r
- "Diags", false,\r
- "Quiet", false,\r
- "MSF", false,\r
- "Verbose", false,\r
- "Anchors", false,\r
- "NoAnchors", false,\r
- "Refine", false,\r
- "RefineW", false,\r
- "SW", false,\r
- "Profile", false,\r
- "PPScore", false,\r
- "ClusterOnly", false,\r
- "Brenner", false,\r
- "Dimer", false,\r
- "clw", false,\r
- "clwstrict", false,\r
- "HTML", false,\r
- "Version", false,\r
- "Stable", false,\r
- "Group", false,\r
- "FASTA", false,\r
- "ProfDB", false,\r
- "PAS", false,\r
- "PHYI", false,\r
- "PHYS", false,\r
- "TomHydro", false,\r
- "MakeTree", false,\r
- };\r
-static int FlagOptCount = sizeof(FlagOpts)/sizeof(FlagOpts[0]);\r
-\r
-static bool TestSetFlagOpt(const char *Arg)\r
- {\r
- for (int i = 0; i < FlagOptCount; ++i)\r
- if (!stricmp(Arg, FlagOpts[i].m_pstrName))\r
- {\r
- FlagOpts[i].m_bSet = true;\r
- return true;\r
- }\r
- return false;\r
- }\r
-\r
-static bool TestSetValueOpt(const char *Arg, const char *Value)\r
- {\r
- for (int i = 0; i < ValueOptCount; ++i)\r
- if (!stricmp(Arg, ValueOpts[i].m_pstrName))\r
- {\r
- if (0 == Value)\r
- {\r
- fprintf(stderr, "Option -%s must have value\n", Arg);\r
- exit(EXIT_NotStarted);\r
- }\r
- ValueOpts[i].m_pstrValue = strsave(Value);\r
- return true;\r
- }\r
- return false;\r
- }\r
-\r
-bool FlagOpt(const char *Name)\r
- {\r
- for (int i = 0; i < FlagOptCount; ++i)\r
- if (!stricmp(Name, FlagOpts[i].m_pstrName))\r
- return FlagOpts[i].m_bSet;\r
- Quit("FlagOpt(%s) invalid", Name);\r
- return false;\r
- }\r
-\r
-const char *ValueOpt(const char *Name)\r
- {\r
- for (int i = 0; i < ValueOptCount; ++i)\r
- if (!stricmp(Name, ValueOpts[i].m_pstrName))\r
- return ValueOpts[i].m_pstrValue;\r
- Quit("ValueOpt(%s) invalid", Name);\r
- return 0;\r
- }\r
-\r
-void ProcessArgVect(int argc, char *argv[])\r
- {\r
- for (int iArgIndex = 0; iArgIndex < argc; )\r
- {\r
- const char *Arg = argv[iArgIndex];\r
- if (Arg[0] != '-')\r
- {\r
- fprintf(stderr, "Command-line option \"%s\" must start with '-'\n", Arg);\r
- exit(EXIT_NotStarted);\r
- }\r
- const char *ArgName = Arg + 1;\r
- if (TestSetFlagOpt(ArgName))\r
- {\r
- ++iArgIndex;\r
- continue;\r
- }\r
- \r
- char *Value = 0;\r
- if (iArgIndex < argc - 1)\r
- Value = argv[iArgIndex+1];\r
- if (TestSetValueOpt(ArgName, Value))\r
- {\r
- iArgIndex += 2;\r
- continue;\r
- }\r
- fprintf(stderr, "Invalid command line option \"%s\"\n", ArgName);\r
- Usage();\r
- exit(EXIT_NotStarted);\r
- }\r
- }\r
-\r
-void ProcessArgStr(const char *ArgStr)\r
- {\r
- const int MAX_ARGS = 64;\r
- char *argv[MAX_ARGS];\r
-\r
- if (0 == ArgStr)\r
- return;\r
-\r
-// Modifiable copy\r
- char *StrCopy = strsave(ArgStr);\r
-\r
- int argc = 0;\r
- bool bInArg = false;\r
- char *Str = StrCopy;\r
- while (char c = *Str)\r
- {\r
- if (isspace(c))\r
- {\r
- *Str = 0;\r
- bInArg = false;\r
- }\r
- else if (!bInArg)\r
- {\r
- bInArg = true;\r
- if (argc >= MAX_ARGS)\r
- Quit("Too many args in MUSCLE_CMDLINE");\r
- argv[argc++] = Str;\r
- }\r
- Str++;\r
- }\r
- ProcessArgVect(argc, argv);\r
- free(StrCopy);\r
- }\r
-\r
-void ListFlagOpts()\r
- {\r
- for (int i = 0; i < FlagOptCount; ++i)\r
- Log("%s %d\n", FlagOpts[i].m_pstrName, FlagOpts[i].m_bSet);\r
- }\r