Mac binaries
[jabaws.git] / website / archive / binaries / mac / src / muscle / options.cpp
diff --git a/website/archive/binaries/mac/src/muscle/options.cpp b/website/archive/binaries/mac/src/muscle/options.cpp
new file mode 100644 (file)
index 0000000..902218d
--- /dev/null
@@ -0,0 +1,241 @@
+#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