--- /dev/null
+#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