/* chofas.c an adaptation of Kanehisa's fortran program */ #include #include #include #include "upam.gbl" #define XTERNAL #include "uascii.gbl" int getseq(char *filen, char *seq, int maxs, int *dnaseq); int gettitle(char *filen, char * title, int len); void makemap(char *input, int *map, int n); void predi(char *iseq, int n); char *refstr="\nPlease cite:\n Chou and Fasman (1974) Biochem., 13:222-245\n"; char *verstr="version 2.0u66 September 1998"; char *progstr="CHOFAS"; char *iprompt0=" CHOFAS predicts protein secondary structure\n"; char *iprompt1=" protein sequence name: "; #ifdef __MWERKS__ #include #include SFReply freply; Point wpos; int tval; char prompt[256]; #include #define getenv mgetenv short glvRef,anvRef, sqvRef, ouvRef, q0vRef, q1vRef; #define IntroDID 400 /* LFASTA */ #endif char amino[]={'A','R','N','D','C','Q','E','G','H','I','L','K','M', 'F','P','S','T','W','Y','V','X',' ',' '}; char charge[]={' ','+',' ','-',' ',' ','-',' ','.',' ',' ','+',' ', ' ',' ',' ',' ',' ',' ',' ',' '}; float hydro[]={0.5,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.5,1.8,1.8,0.0,1.3, 2.5,0.0,0.0,0.4,3.4,2.3,1.5,0.0}; int amap[23]; int dnaseq= -1; #define MAXSEQ 1000 char iseq[MAXSEQ]; int n0; long sq0off=1; #define MAXT 60 char title[MAXT]; char cph[MAXSEQ], cps[MAXSEQ], cpt[MAXSEQ]; int iph[MAXSEQ], ips[MAXSEQ]; float ph[MAXSEQ], ps[MAXSEQ], hyd[MAXSEQ], smd[MAXSEQ]; int iarr[3]; int main(int argc, char *argv[]) { float ya, yb, yc, da, dab, dbc, db, fn0; int i, l0, l1; char fname[256]; #ifdef __MWERKS__ SIOUXSettings.asktosaveonclose=FALSE; SIOUXSettings.showstatusline=FALSE; SIOUXSettings.autocloseonquit=TRUE; argc = ccommand(&argv); if (GetResource('DLOG',IntroDID)==(Handle)0 && OpenResFile("\pFASTA.rsrc")<0) { SysBeep(100); fprintf(stderr," WARNING FASTA.rsrc file could not be found\n"); } GetVol((StringPtr)prompt,&ouvRef); wpos.h=50; wpos.v=100; #endif if (argc < 2) { #ifndef __MWERKS__ fputs(iprompt0,stdout); fprintf(stdout," %s%s\n",verstr,refstr); l1: fputs(iprompt1,stdout); fflush(stdout); if (fgets(fname,sizeof(fname),stdin)==NULL) exit(0); if (fname[strlen(fname)-1]=='\n') fname[strlen(fname)-1]='\0'; if (fname[0]=='\0') goto l1; #else NIntroDlog(IntroDID,iprompt0,verstr,refstr,"\0"); l1: FileDlog(iprompt1,&freply); if (freply.good==TRUE) { PtoCstr(freply.fName); strcpy(fname,(char *)freply.fName); q0vRef=freply.vRefNum; SetVol("\p\0",q0vRef); } else exit(0); #endif } else { fputs(iprompt0,stderr); fprintf(stderr," %s%s\n",verstr,refstr); strncpy(fname,argv[1],sizeof(fname)); } sascii = aascii; if ((n0=getseq(fname,iseq,MAXSEQ,&dnaseq))<=0) { fprintf(stderr," could not read %s\n",fname); exit(1); } gettitle(fname,title,MAXT); makemap(amino,amap,naa); for (i=0; i= 8 out of six residues */ for (i=0; i= 8) { for (i1=i; i1=0 && parr[iseq[i2]].nh == 0; i2--); for (k=i1; k= 3) { for (i1=i; i1=0 && (parr[iseq[i2]].ns == 0); i2--); for (k=i1; k=4; i--) { if (iph[i]!=0) continue; if (ph[i-4] < 1.0 && mh[i-4] < 0) break; iph[i] = 1; } i = i2-1; } /* ---Sheet propagation and termination--- */ for(i=0; i=3; i--) { if (ips[i]!=0) continue; if (ps[i-4]<1.0 && ms[i-4]<=0) break; ips[i]=1; } i = i2-1; } /* helix boundaries */ k=0; ipr=0; for (i=0; i 2) goto l55; l53: iph[i]=k; l++; goto l60; l55: if (l>5) goto l51; l1 = l-1; for (j=0; j5) goto l60; l1 = l-1; for (j=0; j