/* Program From Progressive Alignment of Amino Acid Sequences and Construction of Phylogenetic Trees from Them, by D. F. Feng and R. F. Doolittle, Methods of Enzymology, v266, p368 (1996) 2/7/1996 Read "readme.doc" before using. */ #include #define MAX 60000 char seqt[100],code[8]; char seq[MAX]; int len; main(ac,av) int ac; char *av[]; { FILE *fd1, *fopen(); int i,sp,ep; if(ac<3) { fprintf(stderr,"\nPurpose: Cut Sequence to Order.\n"); fprintf(stderr,"Usage: "); fprintf(stderr,"%s rf St [Ed] [>wf]\n",av[0]); fprintf(stderr,"\trf: Sequence.\n"); fprintf(stderr,"\tSt: Starting point.\n"); fprintf(stderr,"\tEd: Ending point(default=end of "); fprintf(stderr,"sequence).\n"); fprintf(stderr,"\twf: Cropped sequence.\n"); fprintf(stderr,"Note: Sequence in rf must be in"); fprintf(stderr," Old Atlas format.\n\n"); exit(); } /* Open fd1 */ if( (fd1 = fopen( av[1],"r" )) == NULL ) /*error check*/ exit(fprintf(stderr,"%s: can't open %s\n",av[1]) ); sp=atoi(av[2]); Read_seq(fd1); if((ep=atoi(av[3]))==0) ep=len; Rite_seq(sp,ep); } Read_seq(fd) FILE *fd; { int i; char s; /* Enter sequences */ fgetc(fd); fgets(code,6L,fd); /*Get the 1st 5 letters as code*/ while((s=fgetc(fd))==' ') ; ungetc(s,fd); fgets(seqt, sizeof seqt, fd); /*Get sequence title*/ fseek(fd,11,1); /*Skip 11 characters*/ for(i=0; (s=fgetc(fd)) && (s != '*'); ++i) { if(s=='\n') { --i; fseek(fd,11,1); } else if(s==' ') --i; else seq[i]=s; } fgetc(fd); if(i > MAX-1) { printf("%s length exceeded %d,",MAX); printf(" execution terminated!\n"); exit(0); } seq[i]='\0'; len=strlen(seq); } Rite_seq(sp,ep) int sp,ep; { int j,k,l; j = k = 0; l=ep-sp+1; printf("T%s (%d->%d=%d)%s",code,sp,ep,l,seqt); printf("P%s %3d",code,j+1); while(sp<=ep) { printf("%2c",seq[sp-1]); sp++; j++; k++; if(k==30) { printf("\nP%s%4d",code,j+1); k = 0; } } printf("%2c\n",'*'); }