Next version of JABA
[jabaws.git] / binaries / src / clustalw / src / fileInput / FileParser.cpp
1 /**
2  * Author: Mark Larkin
3  * 
4  * Copyright (c) 2007 Des Higgins, Julie Thompson and Toby Gibson.  
5  */
6 /**
7  * 10-02-07,Nigel Brown(EMBL): Removed delimiter and findDelimiter()
8  * members, as functionality now handled by the stream class.
9  */
10
11 #ifdef HAVE_CONFIG_H
12     #include "config.h"
13 #endif
14 #include "FileParser.h"
15 const char LF = 0x0a;  //linefeed
16 const char CR = 0x0d;  //carriage return
17
18
19
20
21
22 namespace clustalw
23 {
24 FileParser::FileParser()
25 {
26     parseExitCode = OK;
27 }
28
29 FileParser::~FileParser()
30 {
31     // Dont do anything!!!!
32 }
33
34
35 void FileParser::fillCharTab(void)
36 {
37     register int i;
38     register char c;
39
40     for (i = 0; i < 128; chartab[i++] = 0)
41         ;
42     for (i = 0; i <= userParameters->getMaxAA() + 1; i++)
43     {
44         c = userParameters->getAminoAcidCode(i);
45         chartab[(int)c] = chartab[tolower(c)] = c;
46     }
47 }
48
49 void FileParser::freeFileResources(InFileStream* filePtr)
50 {
51     if(filePtr != 0)
52     {
53         filePtr->close();
54         delete filePtr;
55         filePtr = 0;    
56     }
57 }
58
59
60 char FileParser::getDelimiter(string filename)
61 {
62     ifstream in;
63     int type = 0;
64     char delim;
65
66     in.open(filename.c_str(), ios::in);
67     in.seekg(0, ios::beg);
68
69     //look for CR or LF or CRLF (or LFCR)
70     if (in.is_open()) {
71         char c;
72         while (in.get(c)) {
73             if (c == CR)
74                 type |= 1;
75             else if (c == LF)
76                 type |= 2;
77             else if (type)
78                 break;
79         }
80     }
81     in.close();
82
83     switch (type) {
84         case 1:
85             //cout << "file is Mac System 9" << endl;
86             delim = '\r';
87             break;
88         case 2:
89             //cout << "file is UNIX" << endl;
90             delim = '\n';
91             break;
92         case 3:
93             //cout << "file is DOS" << endl;
94             delim = '\n';
95             break;
96         default: //short or empty file
97             //cout << "file is UNIX (default)" << endl;
98             delim = '\n';
99     }
100     return delim;
101 }
102
103 }