+++ /dev/null
-#include "muscle.h"\r
-#include <stdio.h>\r
-#include <time.h>\r
-\r
-// Functions that provide visible feedback to the user\r
-// that progress is being made.\r
-\r
-static unsigned g_uIter = 0; // Main MUSCLE iteration 1, 2..\r
-static unsigned g_uLocalMaxIters = 0; // Max iters\r
-static FILE *g_fProgress = stderr; // Default to standard error\r
-static char g_strFileName[32]; // File name\r
-static time_t g_tLocalStart; // Start time\r
-static char g_strDesc[32]; // Description\r
-static bool g_bWipeDesc = false;\r
-static int g_nPrevDescLength;\r
-static unsigned g_uTotalSteps;\r
-\r
-const char *ElapsedTimeAsStr()\r
- {\r
- time_t Now = time(0);\r
- unsigned long ElapsedSecs = (unsigned long) (Now - g_tLocalStart);\r
- return SecsToStr(ElapsedSecs);\r
- }\r
-\r
-const char *MemToStr(double MB)\r
- {\r
- if (MB < 0)\r
- return "";\r
-\r
- static char Str[16];\r
- static double MaxMB = 0;\r
- static double RAMMB = 0;\r
-\r
- if (RAMMB == 0)\r
- RAMMB = GetRAMSizeMB();\r
-\r
- if (MB > MaxMB)\r
- MaxMB = MB;\r
- double Pct = (MaxMB*100.0)/RAMMB;\r
- if (Pct > 100)\r
- Pct = 100;\r
- sprintf(Str, "%.0f MB(%.0f%%)", MaxMB, Pct);\r
- return Str;\r
- }\r
-\r
-void SetInputFileName(const char *pstrFileName)\r
- {\r
- NameFromPath(pstrFileName, g_strFileName, sizeof(g_strFileName));\r
- }\r
-\r
-void SetSeqStats(unsigned uSeqCount, unsigned uMaxL, unsigned uAvgL)\r
- {\r
- if (g_bQuiet)\r
- return;\r
-\r
- fprintf(g_fProgress, "%s %u seqs, max length %u, avg length %u\n",\r
- g_strFileName, uSeqCount, uMaxL, uAvgL);\r
- if (g_bVerbose)\r
- Log("%u seqs, max length %u, avg length %u\n",\r
- uSeqCount, uMaxL, uAvgL);\r
- }\r
-\r
-void SetStartTime()\r
- {\r
- time(&g_tLocalStart);\r
- }\r
-\r
-unsigned long GetStartTime()\r
- {\r
- return (unsigned long) g_tLocalStart;\r
- }\r
-\r
-void SetIter(unsigned uIter)\r
- {\r
- g_uIter = uIter;\r
- }\r
-\r
-void IncIter()\r
- {\r
- ++g_uIter;\r
- }\r
-\r
-void SetMaxIters(unsigned uMaxIters)\r
- {\r
- g_uLocalMaxIters = uMaxIters;\r
- }\r
-\r
-void SetProgressDesc(const char szDesc[])\r
- {\r
- strncpy(g_strDesc, szDesc, sizeof(g_strDesc));\r
- g_strDesc[sizeof(g_strDesc) - 1] = 0;\r
- }\r
-\r
-static void Wipe(int n)\r
- {\r
- for (int i = 0; i < n; ++i)\r
- fprintf(g_fProgress, " ");\r
- }\r
-\r
-void Progress(const char *szFormat, ...)\r
- {\r
- CheckMaxTime();\r
-\r
- if (g_bQuiet)\r
- return;\r
-\r
- double MB = GetMemUseMB();\r
-\r
- char szStr[4096];\r
- va_list ArgList;\r
- va_start(ArgList, szFormat);\r
- vsprintf(szStr, szFormat, ArgList);\r
-\r
- fprintf(g_fProgress, "%8.8s %12s %s",\r
- ElapsedTimeAsStr(),\r
- MemToStr(MB),\r
- szStr);\r
-\r
- fprintf(g_fProgress, "\n");\r
- fflush(g_fProgress);\r
- }\r
-\r
-void Progress(unsigned uStep, unsigned uTotalSteps)\r
- {\r
- CheckMaxTime();\r
-\r
- if (g_bQuiet)\r
- return;\r
-\r
- double dPct = ((uStep + 1)*100.0)/uTotalSteps;\r
- double MB = GetMemUseMB();\r
- fprintf(g_fProgress, "%8.8s %12s Iter %3u %6.2f%% %s",\r
- ElapsedTimeAsStr(),\r
- MemToStr(MB),\r
- g_uIter,\r
- dPct,\r
- g_strDesc);\r
-\r
- if (g_bWipeDesc)\r
- {\r
- int n = g_nPrevDescLength - (int) strlen(g_strDesc);\r
- Wipe(n);\r
- g_bWipeDesc = false;\r
- }\r
-\r
- fprintf(g_fProgress, "\r");\r
-\r
- g_uTotalSteps = uTotalSteps;\r
- }\r
-\r
-void ProgressStepsDone()\r
- {\r
- CheckMaxTime();\r
-\r
- if (g_bVerbose)\r
- {\r
- double MB = GetMemUseMB();\r
- Log("Elapsed time %8.8s Peak memory use %12s Iteration %3u %s\n",\r
- ElapsedTimeAsStr(),\r
- MemToStr(MB),\r
- g_uIter,\r
- g_strDesc);\r
- }\r
-\r
- if (g_bQuiet)\r
- return;\r
-\r
- Progress(g_uTotalSteps - 1, g_uTotalSteps);\r
- fprintf(g_fProgress, "\n");\r
- g_bWipeDesc = true;\r
- g_nPrevDescLength = (int) strlen(g_strDesc);\r
- }\r