WSTester updated to work plus hopefully all the other changes that need to go into...
[jabaws.git] / binaries / src / ViennaRNA / RNAforester / src / rnaforester_options.h
diff --git a/binaries/src/ViennaRNA/RNAforester/src/rnaforester_options.h b/binaries/src/ViennaRNA/RNAforester/src/rnaforester_options.h
new file mode 100644 (file)
index 0000000..a2d611a
--- /dev/null
@@ -0,0 +1,140 @@
+#ifndef _RNAFORESTER_OPTIONS_H
+#define _RNAFORESTER_OPTIONS_H
+
+//#include <string>
+#ifndef WIN32
+#include "config.h"
+#endif
+
+#ifndef HAVE_LIBRNA
+#undef HAVE_LIBG2
+#endif
+
+#include "Arguments.h"
+#include "types.h"
+
+class RNAforesterOptions
+{
+ private:
+  struct OptionsInfo
+  {
+    string tag;
+    string parameter;
+    string filler;
+    string description;
+    bool hidden;
+  };
+
+ public:
+  enum RNAforesterOption
+  {
+    Help=0,
+    Version,
+    OutputAlignmentDotFormat,
+    CalculateDistance,
+    RelativeScore,
+    LocalSimilarity,
+    LocalSubopts,
+    SmallInLarge,
+    Multiple,
+    ClusterThreshold,
+    ClusterJoinCutoff,
+#ifdef HAVE_LIBRNA  // This features require the ViennaRNA library
+    PredictProfile,
+    PredictMinPairProb,
+#endif
+    SaveProfile,
+    ProfileSearch,
+    TreeEdit,
+    GlobalAlignment,
+    BpRepScore,
+    BpDelScore,
+    BMatchScore,
+    BRepScore,
+    BDelScore,
+    RIBOSUMScore,
+    ConsensusMinPairProb,
+#ifdef HAVE_LIBG2  // This features require the g2 library
+    MakeSquigglePlot,
+    SquiggleHideBaseNumbers,
+    SquiggleBaseNumberInterval,
+    SquiggleGreyColors,
+    SquiggleScaleFactor,
+    SquiggleGenerateFIG,
+#ifdef HAVE_LIBGD  // This features require the gd library
+    SquiggleGeneratePNG,
+    SquiggleGenerateJPG,
+#endif
+#endif
+    ShowOnlyScore,
+    FastaOutput,
+    ReadFromFile,
+    NoScale,
+    MakeDotForInputTrees,
+#ifdef HAVE_LIBRNA  // This features require the ViennaRNA library
+#ifdef HAVE_LIBXMLPLUSPLUS
+    GenerateXML,
+    XmlOutputFile,
+#endif
+#endif
+    SpaceTimeInfo,
+    SecretHelp,
+    NumberOfOptions  // this must always be the last entry in the enum
+  };
+
+  class IncompatibleException
+    {
+    private:
+      string m_tag1;
+      string m_tag2;
+
+    public:
+      IncompatibleException(string tag1,string tag2)
+       : m_tag1(tag1), m_tag2(tag2) {};
+
+      void showError();
+    };
+
+    class RequiresException
+    {
+    private:
+      string m_tag1;
+      string m_tag2;
+
+    public:
+      RequiresException(string tag1,string tag2)
+       : m_tag1(tag1), m_tag2(tag2) {};
+
+      void showError();
+    };
+
+  RNAforesterOptions(int argc, const char **argv);
+  ~RNAforesterOptions();
+
+  bool has(RNAforesterOption option) const;
+  const char** getArgs() const;
+  const unsigned int getNrOfOptions() const;
+  
+  template<class T>
+  void get(RNAforesterOption option, T &var, T def) const
+    {
+      m_args->get(m_options[option].tag,var,def);
+    }
+
+  void help();
+  void secretHelp();
+  string generateFilename(RNAforesterOption option, const string &suffix, const string &defName, Uint count=0) const;
+
+private:
+  OptionsInfo *m_options;
+  Arguments *m_args;
+  const char **m_argv;
+  unsigned int nrArgs;
+  
+  inline void setOption(RNAforesterOption,string tag, string parameter, string filler, string description, bool hidden);
+  void exclude(RNAforesterOption opt1, RNAforesterOption opt2);
+  void requires(RNAforesterOption opt1, RNAforesterOption opt2);
+
+};
+
+#endif