Mac binaries
[jabaws.git] / website / archive / binaries / mac / src / muscle / physeq.cpp
diff --git a/website/archive/binaries/mac/src/muscle/physeq.cpp b/website/archive/binaries/mac/src/muscle/physeq.cpp
new file mode 100644 (file)
index 0000000..522f8b1
--- /dev/null
@@ -0,0 +1,128 @@
+#include "muscle.h"\r
+#include "msa.h"\r
+#include "textfile.h"\r
+\r
+const int BLOCKSIZE = 60;\r
+\r
+static char FixChar(char c)\r
+       {\r
+       switch (c)\r
+               {\r
+       case '(':\r
+       case ')':\r
+       case '[':\r
+       case ']':\r
+       case ':':\r
+       case ';':\r
+       case ',':\r
+               return '_';\r
+               }\r
+       if (!isprint(c))\r
+               return '_';\r
+       return c;\r
+       }\r
+\r
+static void FixName(char Name[])\r
+       {\r
+       while (char c = *Name)\r
+               *Name++ = FixChar(c);\r
+       }\r
+\r
+void MSA::ToPhySequentialFile(TextFile &File) const\r
+       {\r
+       const unsigned SeqCount = GetSeqCount();\r
+       const unsigned ColCount = GetColCount();\r
+\r
+       File.PutFormat("%d %d\n", SeqCount, ColCount);\r
+\r
+       if (0 == ColCount)\r
+               return;\r
+\r
+       for (unsigned Seq = 0; Seq < SeqCount; ++Seq)\r
+               {\r
+               char Name[11];\r
+               const char *ptrName = GetSeqName(Seq);\r
+               size_t n = strlen(ptrName);\r
+               if (n > 10)\r
+                       n = 10;\r
+               memcpy(Name, ptrName, n);\r
+               Name[n] = 0;\r
+               FixName(Name);\r
+               File.PutFormat("%-10.10s", Name);\r
+\r
+               int BlockIndex = 0;\r
+               int Col = 0;\r
+               for (;;)\r
+                       {\r
+                       const unsigned MaxCols = (BlockIndex == 0) ? (BLOCKSIZE - 10) : BLOCKSIZE;\r
+                       for (unsigned ColsThisBlock = 0; ColsThisBlock < MaxCols; ++ColsThisBlock)\r
+                               {\r
+                               if (Col == ColCount)\r
+                                       break;\r
+                               if (ColsThisBlock%10 == 0 && (BlockIndex == 0 || ColsThisBlock > 0))\r
+                                       File.PutChar(' ');\r
+                               char c = GetChar(Seq, Col);\r
+                               if (isalpha(c))\r
+                                       c = toupper(c);\r
+                               File.PutChar(c);\r
+                               ++Col;\r
+                               }\r
+                       File.PutChar('\n');\r
+                       if (Col == ColCount)\r
+                               break;\r
+                       ++BlockIndex;\r
+                       }\r
+               }\r
+       }\r
+\r
+void MSA::ToPhyInterleavedFile(TextFile &File) const\r
+       {\r
+       const unsigned SeqCount = GetSeqCount();\r
+       const unsigned ColCount = GetColCount();\r
+\r
+       File.PutFormat("%d %d\n", SeqCount, ColCount);\r
+\r
+       if (0 == ColCount)\r
+               return;\r
+\r
+       int Col = 0;\r
+       for (;;)\r
+               {\r
+               const unsigned ColBlockStart = Col;\r
+               const unsigned MaxCols = (ColBlockStart == 0) ? (BLOCKSIZE - 10) : BLOCKSIZE;\r
+\r
+               for (unsigned Seq = 0; Seq < SeqCount; ++Seq)\r
+                       {\r
+                       if (0 == ColBlockStart)\r
+                               {\r
+                               char Name[11];\r
+                               const char *ptrName = GetSeqName(Seq);\r
+                               size_t n = strlen(ptrName);\r
+                               if (n > 10)\r
+                                       n = 10;\r
+                               memcpy(Name, ptrName, n);\r
+                               Name[n] = 0;\r
+                               FixName(Name);\r
+                               File.PutFormat("%-10.10s", Name);\r
+                               }\r
+\r
+                       Col = ColBlockStart;\r
+                       for (unsigned ColsThisBlock = 0; ColsThisBlock < MaxCols; ++ColsThisBlock)\r
+                               {\r
+                               if (Col == ColCount)\r
+                                       break;\r
+                               if (ColsThisBlock%10 == 0 && (0 == ColBlockStart || ColsThisBlock > 0))\r
+                                       File.PutChar(' ');\r
+                               char c = GetChar(Seq, Col);\r
+                               if (isalpha(c))\r
+                                       c = toupper(c);\r
+                               File.PutChar(c);\r
+                               ++Col;\r
+                               }\r
+                       File.PutChar('\n');\r
+                       }\r
+               if (Col == ColCount)\r
+                       break;\r
+               File.PutChar('\n');\r
+               }\r
+       }\r