Mac binaries
[jabaws.git] / website / archive / binaries / mac / src / muscle / savebest.cpp
diff --git a/website/archive/binaries/mac/src/muscle/savebest.cpp b/website/archive/binaries/mac/src/muscle/savebest.cpp
new file mode 100644 (file)
index 0000000..24757f2
--- /dev/null
@@ -0,0 +1,66 @@
+#include "muscle.h"\r
+#include "msa.h"\r
+#include "textfile.h"\r
+#include <time.h>\r
+\r
+MSA *ptrBestMSA;\r
+static const char *pstrOutputFileName;\r
+\r
+void SetOutputFileName(const char *out)\r
+       {\r
+       pstrOutputFileName = out;\r
+       }\r
+\r
+void SetCurrentAlignment(MSA &msa)\r
+       {\r
+       ptrBestMSA = &msa;\r
+       }\r
+\r
+void SaveCurrentAlignment()\r
+       {\r
+       static bool bCalled = false;\r
+       if (bCalled)\r
+               {\r
+               fprintf(stderr,\r
+                 "\nRecursive call to SaveCurrentAlignment, giving up attempt to save.\n");\r
+               exit(EXIT_FatalError);\r
+               }\r
+\r
+       if (0 == ptrBestMSA)\r
+               {\r
+               fprintf(stderr, "\nAlignment not completed, cannot save.\n");\r
+               Log("Alignment not completed, cannot save.\n");\r
+               exit(EXIT_FatalError);\r
+               }\r
+\r
+       if (0 == pstrOutputFileName)\r
+               {\r
+               fprintf(stderr, "\nOutput file name not specified, cannot save.\n");\r
+               exit(EXIT_FatalError);\r
+               }\r
+\r
+       fprintf(stderr, "\nSaving current alignment ...\n");\r
+\r
+       TextFile fileOut(pstrOutputFileName, true);\r
+       ptrBestMSA->ToFASTAFile(fileOut);\r
+\r
+       fprintf(stderr, "Current alignment saved to \"%s\".\n", pstrOutputFileName);\r
+       Log("Current alignment saved to \"%s\".\n", pstrOutputFileName);\r
+       }\r
+\r
+void CheckMaxTime()\r
+       {\r
+       if (0 == g_ulMaxSecs)\r
+               return;\r
+\r
+       time_t Now = time(0);\r
+       time_t ElapsedSecs = Now - GetStartTime();\r
+       if (ElapsedSecs <= (time_t) g_ulMaxSecs)\r
+               return;\r
+\r
+       Log("Max time %s exceeded, elapsed seconds = %ul\n",\r
+         MaxSecsToStr(), ElapsedSecs);\r
+\r
+       SaveCurrentAlignment();\r
+       exit(EXIT_Success);\r
+       }\r