/* re_getlib.c - re-acquire a sequence given lseek, lcont */ #include #include #include #include "defs.h" #include "mm_file.h" #define GETLIB (m_fptr->getlib) int re_getlib(unsigned char *aa1, int maxn, /* longest aa1 */ int maxt3, /* alternate maxn */ int loff, /* overlap */ int lcont, int term_code, long *loffset, /* offset from real start of sequence */ long *l_off_p, /* coordinate of sequence start */ struct lmf_str *m_fptr) { unsigned char *aa1ptr; int icont, maxt, ccont, n1; char libstr[20]; fseek_t lmark; aa1ptr = aa1; icont=0; *loffset = 0l; maxt = maxn; n1 = -1; for (ccont=0; ccont<=lcont-1; ccont++) { n1= GETLIB(aa1ptr,maxt,libstr,sizeof(libstr),&lmark,&icont,m_fptr,l_off_p); if (term_code && m_fptr->lib_aa && aa1ptr[n1-1]!=term_code) { aa1ptr[n1++]=term_code; aa1ptr[n1]=0; } if (aa1ptr!=aa1) n1 += loff; if (icont>lcont-1) break; if (icont) { maxt = maxt3; memcpy(aa1,&aa1[n1-loff],loff); aa1ptr= &aa1[loff]; *loffset += n1 - loff; } else { maxt = maxn; aa1ptr=aa1; } } return n1; }