⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nmgetlib.c

📁 序列对齐 Compare a protein sequence to a protein sequence database or a DNA sequence to a DNA sequenc
💻 C
📖 第 1 页 / 共 4 页
字号:
/*	if (*lcont==0 && (long)(seqp-seq)!=lm_fd->gcg_len)	printf("%s read %d of %d\n",libstr,(int)(seqp-seq),lm_fd->gcg_len);	*/return (int)(seqp-seq);}voideranlib(char *str,	int cnt,	fseek_t seek,	char *libstr,	struct lmf_str *lm_fd){  char *bp;  char id[14];  /* Holds Identifier */  FSEEK(lm_fd->libf, seek, 0);  fgets(lm_fd->lline,MAX_STR,lm_fd->libf);  if (lm_fd->lfflag) getc(lm_fd->libf);  sscanf(&lm_fd->lline[5],"%s",id);  sprintf(str,"%-12.12s ",id);  fgets(lm_fd->lline,MAX_STR,lm_fd->libf);  if (lm_fd->lfflag) getc(lm_fd->libf);  while (lm_fd->lline[0]!='D' || lm_fd->lline[1]!='E') fgets(lm_fd->lline,MAX_STR,lm_fd->libf);  strncpy(str+12,&lm_fd->lline[5],cnt-11);  str[cnt-11]='\0';  if ((bp = strchr(str,'\r'))!=NULL) *bp='\0';  if ((bp = strchr(str,'\n'))!=NULL) *bp='\0';  FSEEK(lm_fd->libf,seek,0);  fgets(lm_fd->lline,MAX_STR,lm_fd->libf);  if (lm_fd->lfflag) getc(lm_fd->libf);}intigetlib(unsigned char *seq, int maxs,	char *libstr,	int n_libstr,	fseek_t *libpos,	int *lcont,	struct lmf_str *lm_fd,	long *l_off){	register unsigned char *cp, *seqp;	register int *ap;	unsigned char *seqm, *seqm1;	char *bp;	*l_off = 1;	seqp = seq;	seqm = &seq[maxs-9];	seqm1 = seqm-1;	ap = lm_fd->sascii;	if (*lcont==0) {		while (lm_fd->lline[0]!=';') {			lm_fd->lpos = FTELL(lm_fd->libf);			if (fgets(lm_fd->lline,MAX_STR,lm_fd->libf)==NULL) return (-1);			}		*libpos = lm_fd->lpos;		while (lm_fd->lline[0]==';') fgets(lm_fd->lline,MAX_STR,lm_fd->libf);		strncpy(libstr,lm_fd->lline+1,12);		libstr[12]='\0';		if((bp=strchr(libstr,'\n'))!=NULL) *bp='\0';		}	lm_fd->lline[0]='\0';	while (seqp<seqm1 && fgets((char *)seqp,(size_t)(seqm-seqp),lm_fd->libf)!=NULL) {		if (*seqp=='>') goto new;		if (*seqp==';') {			if (strchr((char *)seqp,'\n')==NULL) goto cont;			continue;			}		for (cp=seqp; seqp<seqm1; ) {			if ((*seqp++=ap[*cp++])<NA &&			    (*seqp++=ap[*cp++])<NA &&		            (*seqp++=ap[*cp++])<NA &&		            (*seqp++=ap[*cp++])<NA &&			    (*seqp++=ap[*cp++])<NA &&			    (*seqp++=ap[*cp++])<NA &&			    (*seqp++=ap[*cp++])<NA &&			    (*seqp++=ap[*cp++])<NA &&			    (*seqp++=ap[*cp++])<NA) continue;			    if (*(--seqp)>NA) break;			    }		if (*seqp==ES) goto done;		lm_fd->lpos = FTELL(lm_fd->libf);		}	goto done;new:	strncpy(lm_fd->lline,(char *)seqp,MAX_STR);	lm_fd->lline[MAX_STR-1]='\0';	if (strchr((char *)seqp,'\n')==NULL)	    fgets(lm_fd->lline,MAX_STR-strlen(lm_fd->lline),lm_fd->libf);	goto done;cont:	fgets(lm_fd->lline,MAX_STR,lm_fd->libf);	seqm1 = seqp;done:	if (seqp>=seqm1) {		(*lcont)++;		}	else {	*lcont=0;		}	*seqp = EOSEQ;	/*	if ((int)(seqp-seq)==0) return 1; */	return (int)(seqp-seq);	}voidiranlib(char *str,	int cnt,	fseek_t seek,	char *libstr,	struct lmf_str *lm_fd){	char *bp;	char tline[MAX_FN];	FSEEK(lm_fd->libf, seek, 0);	fgets(lm_fd->lline,MAX_STR,lm_fd->libf);	if (lm_fd->lline[0]=='>' || lm_fd->lline[0]==';') {		strncpy(tline,lm_fd->lline+1,sizeof(tline));		tline[sizeof(tline)-1]='\0';		if ((bp = strchr(tline,'\n'))!=NULL) *bp='\0';		}	else {		tline[0]='\0';		}	while (lm_fd->lline[0]==';') fgets(lm_fd->lline,MAX_STR,lm_fd->libf);	if ((bp=strchr(lm_fd->lline,'\n'))!=NULL) *bp=0;	if ((bp=strchr(lm_fd->lline,' '))!=NULL) *bp=0;	strncpy(str,lm_fd->lline,cnt);	str[cnt-1]='\0';	strncat(str,"  ",cnt-strlen(str)-1);	strncat(str,tline,cnt-strlen(str)-1);		FSEEK(lm_fd->libf,seek,0);	fgets(lm_fd->lline,MAX_STR,lm_fd->libf);	}intvgetlib(unsigned char *seq, int maxs,	char *libstr,	int n_libstr,	fseek_t *libpos,	int *lcont,	struct lmf_str *lm_fd,	long *l_off){  int i, ich;  register unsigned char *cp, *seqp;  register int *ap;  unsigned char *seqm, *seqm1;  char *bp, *tp;  *l_off = 1;  seqp = seq;  seqm = &seq[maxs-9];  seqm1 = seqm-1;  ap = lm_fd->sascii;  if (*lcont==0) {    while (lm_fd->lline[0]!='>' && lm_fd->lline[0]!=';') {      lm_fd->lpos = FTELL(lm_fd->libf);      if (fgets(lm_fd->lline,MAX_STR,lm_fd->libf)==NULL) return (-1);      if (lm_fd->lfflag) getc(lm_fd->libf);    }#ifdef SUPERFAMNUM    if ((bp=strchr(&lm_fd->lline[1],' ')) &&	 (bp=strchr(bp+1,SFCHAR))) {      i=0;      if ((tp = strtok(bp+1," \t\n"))!=NULL) sfnum[i++] = atoi(tp);      while ((tp = strtok(NULL," \t")) != NULL) {	sfnum[i++] = atoi(tp);	if (i>=10) break;      }      sfnum[nsfnum=i]= 0;      if (nsfnum>1) sf_sort(sfnum,nsfnum);      else {	if (nsfnum < 1) fprintf(stderr," found | but no sfnum: %s\n",libstr);      }    }    else sfnum[0]=nsfnum=0;#endif    if ((bp=strchr(lm_fd->lline,'\n'))!=NULL) *bp='\0';    strncpy(libstr,&lm_fd->lline[4],12);    libstr[12]='\0';    if ((bp=strchr(libstr,' '))!=NULL) *bp='\0';    if ((bp=strchr(libstr,'\n'))!=NULL) *bp='\0';        fgets(lm_fd->lline,MAX_STR,lm_fd->libf);    if (lm_fd->lfflag) getc(lm_fd->libf);    if (n_libstr > 21) {      strcat(libstr," ");      strncat(libstr,lm_fd->lline,n_libstr-1-strlen(libstr));      if ((bp=strchr(libstr,'\n'))!=NULL) *bp='\0';      libstr[n_libstr-1]='\0';    }    *libpos = lm_fd->lpos;  }  lm_fd->lline[0]='\0';  while (seqp<seqm1 && fgets((char *)seqp,(size_t)(seqm-seqp),lm_fd->libf)!=NULL) {    if (lm_fd->lfflag && (ich=getc(lm_fd->libf))!=LFCHAR) ungetc(ich,lm_fd->libf);    if (*seqp=='>') goto new;    if (*seqp==';') {      if (strchr((char *)seqp,'\n')==NULL) goto cont;      continue;    }    for (cp=seqp; seqp<seqm1; ) {      if ((*seqp++=ap[*cp++])<NA &&	  (*seqp++=ap[*cp++])<NA &&	  (*seqp++=ap[*cp++])<NA &&	  (*seqp++=ap[*cp++])<NA &&	  (*seqp++=ap[*cp++])<NA &&	  (*seqp++=ap[*cp++])<NA &&	  (*seqp++=ap[*cp++])<NA &&	  (*seqp++=ap[*cp++])<NA &&	  (*seqp++=ap[*cp++])<NA) continue;      if (*(--seqp)>NA) break;    }    if (*seqp==ES) goto done;    lm_fd->lpos = FTELL(lm_fd->libf);  }  goto done;new:  strncpy(lm_fd->lline,(char *)seqp,MAX_STR);  lm_fd->lline[MAX_STR-1]='\0';  if (strchr((char *)seqp,'\n')==NULL) {    fgets(&lm_fd->lline[strlen(lm_fd->lline)],MAX_STR-strlen(lm_fd->lline),lm_fd->libf);    if (lm_fd->lfflag && (ich=getc(lm_fd->libf))!=LFCHAR) ungetc(ich,lm_fd->libf);  }  goto done;cont:  fgets(lm_fd->lline,MAX_STR,lm_fd->libf);  if (lm_fd->lfflag && (ich=getc(lm_fd->libf))!=LFCHAR) ungetc(ich,lm_fd->libf);  seqm1 = seqp;done:  if (seqp>=seqm1) {    (*lcont)++;  }  else {    *lcont=0;  }  *seqp = EOSEQ;  /*   if ((int)(seqp-seq)==0) return 1;*/  return (int)(seqp-seq);}voidvranlib(char *str,	int cnt,	fseek_t seek,	char *libstr,	struct lmf_str *lm_fd){  char *bp, *llp;  FSEEK(lm_fd->libf, seek, 0);  fgets(lm_fd->lline,MAX_STR,lm_fd->libf);  if (lm_fd->lfflag) getc(lm_fd->libf);  if (lm_fd->lline[0]=='>'&&(lm_fd->lline[3]==';'||			     lm_fd->lline[3]=='>')	/* GCG ascii */      ) {    strncpy(str,&lm_fd->lline[4],cnt-1);    str[cnt-1]='\0';    if (lm_fd->lline[3]=='>' && (bp = strchr(str,' '))!=NULL) *bp='\0';    if ((bp = strchr(str,':'))!=NULL) *bp='\0';    if ((bp=strchr(str,'\r'))!=NULL) *bp='\0';    else if ((bp = strchr(str,'\n'))!=NULL) *bp='\0';    else str[cnt-1]='\0';    fgets(lm_fd->lline,MAX_STR,lm_fd->libf);    if (lm_fd->lfflag) getc(lm_fd->libf);    /* skip over redundant stuff */    for (llp=lm_fd->lline,bp=str; *llp==*bp; llp++,bp++);    if ((int)(llp-lm_fd->lline)<5) llp = lm_fd->lline;    if ((bp=strchr(llp,'\r'))!=NULL) *bp=' ';    if ((bp=strchr(llp,'\n'))!=NULL) *bp='\0';    strncat(str," ",(size_t)1);    strncat(str,llp,(size_t)cnt-strlen(str)-1);  }  else {    str[0]='\0';  }  FSEEK(lm_fd->libf,seek,0);  fgets(lm_fd->lline,MAX_STR,lm_fd->libf);  if (lm_fd->lfflag) getc(lm_fd->libf);}static int gcg_bton[4]={2,4,1,3};intgcg_getlib(unsigned char *seq, int maxs,	   char *libstr,	   int n_libstr,	   fseek_t *libpos,	   int *lcont,	   struct lmf_str *lm_fd,	   long *l_off){  char dummy[20];  char gcg_date[10];  register unsigned char *cp, *seqp, stmp;  register int *ap;  char gcg_type[10];  unsigned char *seqm, *seqm1;  long r_block, b_block;  char *bp;  *l_off = 1;  seqp = seq;  seqm = &seq[maxs-9];  seqm1 = seqm-1;  ap = lm_fd->sascii;  if (*lcont==0) {    while (lm_fd->lline[0]!='>' && lm_fd->lline[0]!=';') {      lm_fd->lpos = FTELL(lm_fd->libf);      if (fgets(lm_fd->lline,MAX_STR,lm_fd->libf)==NULL) return (-1);    }    sscanf(&lm_fd->lline[4],"%s %s %s %s %ld",	   libstr,gcg_date,gcg_type,dummy,&(lm_fd->gcg_len));    lm_fd->gcg_binary = (gcg_type[0]=='2');    fgets(lm_fd->lline,MAX_STR,lm_fd->libf);    while (strchr((char *)lm_fd->lline,'\n')==NULL) {      if (strlen(lm_fd->lline)<MAX_STR/2) 	fgets(&lm_fd->lline[strlen(lm_fd->lline)],MAX_STR/2,lm_fd->libf);      else       fgets(&lm_fd->lline[strlen(lm_fd->lline)-MAX_STR/2],MAX_STR/2,lm_fd->libf);    }    lm_fd->lline[MAX_STR-1]='\0';    if (n_libstr <= 21) {      libstr[12]='\0';    }    else {      strncat(libstr," ",1);      strncat(libstr,lm_fd->lline,n_libstr-1-strlen(libstr));      if ((bp = strchr(libstr,'\n'))!=NULL) *bp='\0';      libstr[n_libstr-1]='\0';    }    *libpos = lm_fd->lpos;  }  lm_fd->lline[0]='\0';  r_block = b_block = min((size_t)(seqm-seqp),lm_fd->gcg_len);  if (lm_fd->gcg_binary) { r_block = (r_block+3)/4; }  fread((char *)seqp,(size_t)r_block,(size_t)1,lm_fd->libf);  if (!lm_fd->gcg_binary)     for (cp=seqp; seqp<seq+r_block; ) *seqp++ = ap[*cp++];  else if (lm_fd->gcg_binary) {    seqp = seq + r_block;    cp = seq + 4*r_block;    while (seqp > seq) {      stmp = *--seqp;      *--cp = gcg_bton[stmp&3];      *--cp = gcg_bton[(stmp >>= 2)&3];      *--cp = gcg_bton[(stmp >>= 2)&3];      *--cp = gcg_bton[(stmp >>= 2)&3];    }  }  if (4 * r_block >= lm_fd->gcg_len) {    fgets(lm_fd->lline,MAX_STR,lm_fd->libf);    *lcont = 0;  }  else {    if (lm_fd->gcg_binary) b_block = 4*r_block;    lm_fd->gcg_len -= b_block;    (*lcont)++;  }  seq[b_block] = EOSEQ;  /*   if (b_block==0) return 1; else */  return b_block;}voidgcg_ranlib(char *str,	   int cnt,	   fseek_t seek,	   char *libstr,	   struct lmf_str *lm_fd){  char *bp, *bp1, *llp;  FSEEK(lm_fd->libf, seek, 0);  fgets(lm_fd->lline,MAX_STR,lm_fd->libf);  if (lm_fd->lline[0]=='>'&&(lm_fd->lline[3]==';'||lm_fd->lline[3]=='>')) {    strncpy(str,&lm_fd->lline[4],cnt-1);    str[cnt-1]='\0';    if ((bp = strchr(str,' '))!=NULL) *bp='\0';    else if ((bp=strchr(str,'\r'))!=NULL) *bp='\0';    else if ((bp = strchr(str,'\n'))!=NULL) *bp='\0';    else str[cnt-1]='\0';    fgets(lm_fd->lline,MAX_STR,lm_fd->libf);    /* check beginning of line it is a duplicate */    for (llp=lm_fd->lline,bp=str; *llp == *bp; llp++,bp++);    if ((int)(llp-lm_fd->lline)<5) llp = lm_fd->lline;    /* here we would like to skip over some species stuff */	/*    if ((bp1 = strchr(llp,';'))!=NULL && (int)(bp1-llp)<50) {      if ((bp2 = strchr(bp1+1,';'))!=NULL && (int)(bp2-bp1)<50) {	*(bp2+1)='\0'; bp1 = bp2+2;      }      else {bp1=llp;}    }    else if ((bp1=strchr(llp,'.'))!=NULL && *(bp1+1)==' ') {      *(bp1+1) = '\0'; bp1 += 2;}    else bp1 = llp;    */        bp1 = llp;    if ((bp=strchr(bp1,'\r'))!=NULL) *bp='\0';    if ((bp=strchr(bp1,'\n'))!=NULL) *bp='\0';    strncat(str," ",(size_t)1);    strncat(str,bp1,(size_t)cnt-strlen(str));    if (bp1!=llp) strncat(str,llp,(size_t)cnt-strlen(str));  }  else {    str[0]='\0';  }  FSEEK(lm_fd->libf,seek,0);  fgets(lm_fd->lline,MAX_STR,lm_fd->libf);}voidsf_sort(s,n)     int *s, n;{  int gap, i, j;  int itmp;  if (n == 1) return;	  for (i=0; i<n-1; i++)    if (s[i]>s[i+1]) goto l2;  return;l2:  for (gap=n/2; gap>0; gap/=2)    for (i=gap; i<n; i++)      for (j=i-gap; j>=0; j -= gap) {	if (s[j] <= s[j+gap]) break;	itmp = s[j];	s[j]=s[j+gap];	s[j+gap]=itmp;      }}struct sel_acc_str {  int curr_entry;  int max_entry;  char fmt_term;  char *acc_buff;  char **acc_list;  int *gi_list;  int *acc_hash;  int *acc_hash_link;  int hash_mask;};/* allocate space, read the accessions from an already open file of   accessions */void *sel_acc_libstr_init(FILE *libf, int *acc_off, char fmt_term) {  struct sel_acc_str *sel_acc_ptr;  char acc_line[MAX_STR];  char *bp, *bp1;  char *acc_buff;  char *acc_buff_max;	/* end of buffer */  char *new_buff;	/* reallocated buffer size */  char *acc_buff_p;  char **acc_list;  int acc_cnt, i;  int new_buff_siz;  int abuff_siz;		/* allocated buffer size */  int buff_siz;		/* fread buff_siz */  if ((sel_acc_ptr = (struct sel_acc_str *)calloc(1,sizeof(struct sel_acc_str)))==NULL) {    fprintf(stderr, "Cannot allocate struct sel_acc_str\n");    return NULL;  }  /*  if (fmt && *fmt != '\0') {    sel_acc_ptr->fmt = (char *)calloc(strlen(fmt)+1,sizeof(char));    strncpy(sel_acc_ptr->fmt, fmt, strlen(fmt)+1);    sel_acc_ptr->fmt[strlen(fmt)] = '\0';

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -