📄 nmgetlib.c
字号:
/* 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 + -