#include #include #include #include #include /* exit() */ #include #include #include #include "Sequence.h" using namespace std; void usage() { cerr << "Usage: maximum-parsimony " << endl; exit(42); } string getsequence(int fd) { string s; char chr; bool saw_name = false; for (;;) { int bytes_read = read(fd, &chr, 1); if (bytes_read < 1) { if (s == "") break; else { cerr << "Unexpected EOF in the middle of a line!" << endl; exit(2); } } else if (chr == '\n') { break; } else if (chr == ' ' || chr == '\t') { saw_name = true; } else { if (saw_name) s += chr; } } return s; } int main(int argc, char * argv[]) { int my_rank; int world_size; /* the number of processes */ char * filename = NULL; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); MPI_Comm_size(MPI_COMM_WORLD, &world_size); for (int i = 1; i < argc; i++) { filename = argv[i]; } if (filename == NULL) usage(); int fd = open(filename, O_RDONLY); if (fd < 0) { cerr << "Couldn't open '" << filename << "'!" << endl; exit(1); } vector sequences; for (;;) { string seqstr = getsequence(fd); if (seqstr == "") break; Sequence * seq = new Sequence(seqstr.c_str()); sequences.push_back(seq); } close(fd); cout << "Found " << sequences.size() << " sequences:" << endl; for (int i = 0, sz = sequences.size(); i < sz; i++) { cout << *sequences[i] << endl; } MPI_Finalize(); return 0; }