6 const char *m_pstrName;
\r
7 const char *m_pstrValue;
\r
12 const char *m_pstrName;
\r
16 static VALUE_OPT ValueOpts[] =
\r
30 "SmoothScoreCeil", 0,
\r
31 "MinBestColScore", 0,
\r
32 "MinSmoothScore", 0,
\r
60 "UseTree_NoWarn", 0,
\r
69 "ComputeWeights", 0,
\r
85 static int ValueOptCount = sizeof(ValueOpts)/sizeof(ValueOpts[0]);
\r
87 static FLAG_OPT FlagOpts[] =
\r
102 "NoAnchors", false,
\r
108 "ClusterOnly", false,
\r
112 "clwstrict", false,
\r
125 static int FlagOptCount = sizeof(FlagOpts)/sizeof(FlagOpts[0]);
\r
127 static bool TestSetFlagOpt(const char *Arg)
\r
129 for (int i = 0; i < FlagOptCount; ++i)
\r
130 if (!stricmp(Arg, FlagOpts[i].m_pstrName))
\r
132 FlagOpts[i].m_bSet = true;
\r
138 static bool TestSetValueOpt(const char *Arg, const char *Value)
\r
140 for (int i = 0; i < ValueOptCount; ++i)
\r
141 if (!stricmp(Arg, ValueOpts[i].m_pstrName))
\r
145 fprintf(stderr, "Option -%s must have value\n", Arg);
\r
146 exit(EXIT_NotStarted);
\r
148 ValueOpts[i].m_pstrValue = strsave(Value);
\r
154 bool FlagOpt(const char *Name)
\r
156 for (int i = 0; i < FlagOptCount; ++i)
\r
157 if (!stricmp(Name, FlagOpts[i].m_pstrName))
\r
158 return FlagOpts[i].m_bSet;
\r
159 Quit("FlagOpt(%s) invalid", Name);
\r
163 const char *ValueOpt(const char *Name)
\r
165 for (int i = 0; i < ValueOptCount; ++i)
\r
166 if (!stricmp(Name, ValueOpts[i].m_pstrName))
\r
167 return ValueOpts[i].m_pstrValue;
\r
168 Quit("ValueOpt(%s) invalid", Name);
\r
172 void ProcessArgVect(int argc, char *argv[])
\r
174 for (int iArgIndex = 0; iArgIndex < argc; )
\r
176 const char *Arg = argv[iArgIndex];
\r
179 fprintf(stderr, "Command-line option \"%s\" must start with '-'\n", Arg);
\r
180 exit(EXIT_NotStarted);
\r
182 const char *ArgName = Arg + 1;
\r
183 if (TestSetFlagOpt(ArgName))
\r
190 if (iArgIndex < argc - 1)
\r
191 Value = argv[iArgIndex+1];
\r
192 if (TestSetValueOpt(ArgName, Value))
\r
197 fprintf(stderr, "Invalid command line option \"%s\"\n", ArgName);
\r
199 exit(EXIT_NotStarted);
\r
203 void ProcessArgStr(const char *ArgStr)
\r
205 const int MAX_ARGS = 64;
\r
206 char *argv[MAX_ARGS];
\r
212 char *StrCopy = strsave(ArgStr);
\r
215 bool bInArg = false;
\r
216 char *Str = StrCopy;
\r
217 while (char c = *Str)
\r
227 if (argc >= MAX_ARGS)
\r
228 Quit("Too many args in MUSCLE_CMDLINE");
\r
229 argv[argc++] = Str;
\r
233 ProcessArgVect(argc, argv);
\r
237 void ListFlagOpts()
\r
239 for (int i = 0; i < FlagOptCount; ++i)
\r
240 Log("%s %d\n", FlagOpts[i].m_pstrName, FlagOpts[i].m_bSet);
\r