/* read_malign.h - shared procedures for handling textual multiple alignments */ #include "util.h" #include "read_malign.h" int *position_in_seq1(char **A, int ncol) { int k, j, *col2pos = ckalloc(ncol*sizeof(int)); for (k = j = 0; j < ncol; ++j) col2pos[j] = (isalpha(A[0][j]) ? ++k : 0); return col2pos; } int **read_sites(char *filename, int *nrow_ptr, int *ncol_ptr, char ***seqname_ptr, int **sites) { int nrow, ncol, i, j, c, k,**A; char **seqname, buf[500], *s,*token; FILE *fp = ckopen(filename, "r"); if (fgets(buf, 500, fp) == NULL || sscanf(buf, "%d %d", &nrow, &ncol) != 2) fatal("Cannot determine numbers of rows and columns."); seqname = ckalloc(nrow * sizeof(char *)); for (i = 0; i < nrow; ++i) { if (fgets(buf, 500, fp) == NULL) fatal("Cannot determine sequence names."); if ((s = strchr(buf, ' ')) != NULL) *s = '\0'; seqname[i] = copy_string(buf); } (*sites) =ckalloc((ncol) * sizeof(int)); A =ckalloc((nrow) * sizeof(int *)); A[0] = ckalloc((nrow) * ncol * sizeof(int)); for (i=0 ; i