FreeBSD Bugzilla – Attachment 62220 Details for
Bug 93053
sync update of biology/emboss && biology/embassy
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
emboss_again.diff
emboss_again.diff (text/plain; charset=us-ascii), 285.76 KB, created by
Fernan Aguero
on 2006-03-28 20:50:44 UTC
(
hide
)
Description:
emboss_again.diff
Filename:
MIME Type:
Creator:
Fernan Aguero
Created:
2006-03-28 20:50:44 UTC
Size:
285.76 KB
patch
obsolete
>diff -ruN /usr/ports/biology/emboss/Makefile emboss/Makefile >--- /usr/ports/biology/emboss/Makefile Wed Mar 1 20:11:41 2006 >+++ emboss/Makefile Thu Mar 16 18:37:01 2006 >@@ -6,14 +6,15 @@ > # > > PORTNAME= emboss >-PORTVERSION= 2.10.0 >-PORTREVISION= 1 >+PORTVERSION= 3.0.0 > CATEGORIES= biology >-MASTER_SITES= ftp://ftp.uk.embnet.org/pub/EMBOSS/ \ >+MASTER_SITES= ftp://emboss.open-bio.org/pub/EMBOSS/ \ >+ ftp://ftp.uk.embnet.org/pub/EMBOSS/ \ > ftp://ftp.es.embnet.org/pub/software/emboss/EMBOSS/ \ > ftp://ftp.ebi.ac.uk/pub/software/unix/EMBOSS/ > DISTNAME= ${PORTNAME:U}-${PORTVERSION} > DISTFILES= ${PORTNAME:U}-${PORTVERSION}${EXTRACT_SUFX} >+DIST_SUBDIR= ${PORTNAME} > > MAINTAINER= fernan@iib.unsam.edu.ar > COMMENT= A collection of open source tools for genetic sequence analysis >@@ -28,11 +29,12 @@ > USE_SUBMAKE= yes > USE_GMAKE= yes > GNU_CONFIGURE= yes >+USE_AUTOTOOLS= libtool:15 > INSTALLS_SHLIB= yes > USE_XLIB= yes > USE_MOTIF= yes >-USE_REINPLACE= yes >-PKGMESSAGE= ${WRKDIR}/pkg-message >+SUB_FILES= pkg-message >+SUB_LIST= PREFIX=${PREFIX} DATADIR=${DATADIR} > > DOCSDIR= ${PREFIX}/share/doc/${PORTNAME:U} > DATADIR= ${PREFIX}/share/${PORTNAME:U} >@@ -43,20 +45,17 @@ > post-patch: > .if !defined(NOPORTDOCS) > .for DIR in ${DOC_DIRS} >- ${REINPLACE_CMD} -e \ >+ @ ${REINPLACE_CMD} -e \ > 's#$$(prefix)/share/$$(PACKAGE)/doc#$$(datadir)/doc/$$(PACKAGE)#' \ > ${WRKSRC}/${DIR}/Makefile.in > .endfor > .endif > >+pre-install: >+ @ ${REINPLACE_CMD} -e 's#%%DATADIR%%#${DATADIR}#' ${CONFIG_FILE} >+ > post-install: >- @ cd ${WRKSRC} && \ >- ${SED} -e 's#%%PREFIX%%#${PREFIX}#' \ >- ${CONFIG_FILE} > ${PREFIX}/etc/emboss.default.sample && \ >- ${CHOWN} ${SHAREOWN}:${SHAREGRP} ${PREFIX}/etc/emboss.default.sample >- @ ${SED} -e 's#%%PREFIX%%#${PREFIX}#' ${.CURDIR}/pkg-message > ${PKGMESSAGE} >-.if !defined(BATCH) >+ ${CHOWN} ${SHAREOWN}:${SHAREGRP} ${DATADIR}/emboss.default.template > @ ${CAT} ${PKGMESSAGE} >-.endif > > .include <bsd.port.mk> >diff -ruN /usr/ports/biology/emboss/distinfo emboss/distinfo >--- /usr/ports/biology/emboss/distinfo Wed Jan 25 11:31:47 2006 >+++ emboss/distinfo Thu Jan 19 15:37:47 2006 >@@ -1,3 +1,3 @@ >-MD5 (EMBOSS-2.10.0.tar.gz) = 4a48388ced7021a8ffece5166c40a364 >-SHA256 (EMBOSS-2.10.0.tar.gz) = 1d3a8d84ff9c4f77d81b88c9e7c33517a232e7797eb2b761729f97898aa34a8f >-SIZE (EMBOSS-2.10.0.tar.gz) = 16262124 >+MD5 (emboss/EMBOSS-3.0.0.tar.gz) = fa72feded9ab9272e3e731c09f545dcc >+SHA256 (emboss/EMBOSS-3.0.0.tar.gz) = 47a51ba7aeb9f6e7f4cd23c28cffad7c6d28432e92f37d6f08121791ef894dea >+SIZE (emboss/EMBOSS-3.0.0.tar.gz) = 16257908 >diff -ruN /usr/ports/biology/emboss/files/patch-ajindex.c emboss/files/patch-ajindex.c >--- /usr/ports/biology/emboss/files/patch-ajindex.c Wed Dec 31 21:00:00 1969 >+++ emboss/files/patch-ajindex.c Mon Jan 23 12:18:51 2006 >@@ -0,0 +1,5134 @@ >+--- ajax/ajindex.c.orig Mon Jan 23 12:17:02 2006 >++++ ajax/ajindex.c Thu Dec 22 13:12:27 2005 >+@@ -22,7 +22,6 @@ >+ >+ >+ >+- >+ static AjPBtpage btreeCacheLocate(const AjPBtcache cache, ajlong page); >+ static AjPBtpage btreeCacheLruUnlink(AjPBtcache cache); >+ static void btreeCacheUnlink(AjPBtcache cache, AjPBtpage cpage); >+@@ -35,10 +34,14 @@ >+ AjBool isread); >+ static AjPBtpage btreeFindINode(AjPBtcache cache, AjPBtpage page, >+ const char *item); >++static AjPBtpage btreeSecFindINode(AjPBtcache cache, AjPBtpage page, >++ const char *item); >+ >+ >+ static AjPBtpage btreePageFromKey(AjPBtcache cache, unsigned char *buf, >+ const char *item); >++static AjPBtpage btreeSecPageFromKey(AjPBtcache cache, unsigned char *buf, >++ const char *item); >+ static ajint btreeNumInBucket(AjPBtcache cache, ajlong pageno); >+ static AjPBucket btreeReadBucket(AjPBtcache cache, ajlong pageno); >+ static void btreeWriteBucket(AjPBtcache cache, const AjPBucket bucket, >+@@ -55,6 +58,7 @@ >+ AjPStr const *keys, const ajlong *ptrs, >+ ajint nkeys); >+ static AjBool btreeNodeIsFull(const AjPBtcache cache, AjPBtpage page); >++static AjBool btreeNodeIsFullSec(const AjPBtcache cache, AjPBtpage page); >+ static void btreeInsertNonFull(AjPBtcache cache, AjPBtpage page, >+ const AjPStr key, ajlong less, >+ ajlong greater); >+@@ -87,6 +91,8 @@ >+ >+ >+ >++ >++ >+ #if 0 >+ static AjPBtpage btreeTraverseLeaves(AjPBtcache cache, AjPBtpage thys); >+ static void btreeJoinLeaves(AjPBtcache cache); >+@@ -168,6 +174,63 @@ >+ static ajint btreeDbnoCompare(const void *a, const void *b); >+ >+ >++static AjPBtMem btreeAllocPriArray(AjPBtcache cache); >++static void btreeDeallocPriArray(AjPBtcache cache, AjPBtMem node); >++static AjPBtMem btreeAllocSecArray(AjPBtcache cache); >++static void btreeDeallocSecArray(AjPBtcache cache, AjPBtMem node); >++ >++ >++ >++static void btreeAddToHybBucket(AjPBtcache cache, ajlong pageno, >++ const AjPBtHybrid id); >++static AjPBtpage btreeHybFindINode(AjPBtcache cache, AjPBtpage page, >++ const char *item); >++static AjPBtpage btreeHybPageFromKey(AjPBtcache cache, >++ unsigned char *buf, const char *key); >++static ajlong btreeHybInsertShift(AjPBtcache cache, AjPBtpage *retpage, >++ const char *key); >++static AjBool btreeHybReorderBuckets(AjPBtcache cache, AjPBtpage leaf); >++static AjPBtpage btreeHybSplitLeaf(AjPBtcache cache, AjPBtpage spage); >++static void btreeHybInsertKey(AjPBtcache cache, AjPBtpage page, >++ const AjPStr key, ajlong less, >++ ajlong greater); >++static void btreeHybSplitRoot(AjPBtcache cache); >++static void btreeHybDupInsert(AjPBtcache cache, AjPBtHybrid hyb, >++ AjPBtId btid); >++static void btreeGetNumKeys(AjPBtcache cache, unsigned char *buf, >++ ajlong **keys, ajlong **ptrs); >++static void btreeWriteNumNode(AjPBtcache cache, AjPBtpage spage, >++ const ajlong *keys, const ajlong *ptrs, >++ ajint nkeys); >++static AjPNumBucket btreeReadNumBucket(AjPBtcache cache, ajlong pageno); >++static void btreeNumBucketDel(AjPNumBucket *thys); >++static void btreeAddToNumBucket(AjPBtcache cache, ajlong pageno, >++ const AjPBtNumId num); >++static AjPBtpage btreeNumFindINode(AjPBtcache cache, AjPBtpage page, >++ const ajlong item); >++static AjPBtpage btreeNumPageFromKey(AjPBtcache cache, unsigned char *buf, >++ const ajlong key); >++static ajint btreeNumInNumBucket(AjPBtcache cache, ajlong pageno); >++static AjBool btreeReorderNumBuckets(AjPBtcache cache, AjPBtpage leaf); >++static AjPNumBucket btreeNumBucketNew(ajint n); >++static ajint btreeNumIdCompare(const void *a, const void *b); >++static AjBool btreeNumNodeIsFull(const AjPBtcache cache, >++ AjPBtpage page); >++static void btreeNumInsertNonFull(AjPBtcache cache, AjPBtpage page, >++ const ajlong key, ajlong less, >++ ajlong greater); >++static void btreeNumInsertKey(AjPBtcache cache, AjPBtpage page, >++ const ajlong key, ajlong less, >++ ajlong greater); >++static void btreeNumSplitRoot(AjPBtcache cache); >++static void btreeNumKeyShift(AjPBtcache cache, AjPBtpage tpage); >++static ajlong btreeNumInsertShift(AjPBtcache cache, AjPBtpage *retpage, >++ ajlong key); >++static AjPBtpage btreeNumSplitLeaf(AjPBtcache cache, AjPBtpage spage); >++ >++ >++ >++ >+ >+ >+ >+@@ -196,11 +259,14 @@ >+ { >+ FILE *fp; >+ AjPBtcache cache = NULL; >++#if 0 >+ #if defined (HAVE64) && !defined(_OSF_SOURCE) && !defined(_AIX) && !defined(__hpux) && !defined(__ppc__) && !defined(__FreeBSD__) >+ struct stat64 buf; >+ #else >+ struct stat buf; >+ #endif >++#endif >++ >+ ajlong filelen = 0L; >+ >+ AjPStr fn = NULL; >+@@ -213,12 +279,18 @@ >+ return NULL; >+ >+ >++ /* Commented out pending database updating */ >++#if 0 >++ if(strcmp(mode,"r")) >++ { >+ #if defined (HAVE64) && !defined(_OSF_SOURCE) && !defined(_AIX) && !defined(__hpux) && !defined(__ppc__) && !defined(__FreeBSD__) >+- if(!stat64(file, &buf)) >++ if(!stat64(fn->Ptr, &buf)) >+ #else >+- if(!stat(file, &buf)) >++ if(!stat(fn->Ptr, &buf)) >+ #endif >+- filelen = buf.st_size; >++ filelen = buf.st_size; >++ } >++#endif >+ >+ AJNEW0(cache); >+ >+@@ -244,6 +316,13 @@ >+ cache->totsize = filelen; >+ cache->cachesize = cachesize; >+ >++ cache->bmem = NULL; >++ cache->tmem = NULL; >++ >++ cache->bsmem = NULL; >++ cache->tsmem = NULL; >++ >++ >+ /* Add slevel, sorder and snperbucket ???? */ >+ >+ ajStrDel(&fn); >+@@ -808,7 +887,7 @@ >+ root = btreeCacheLocate(cache,0L); >+ >+ if(!root) >+- ajFatal("Something has unlocked the PRI root cache page\n"); >++ ajFatal("The PRI root cache page has been unlocked\n"); >+ >+ if(!cache->level) >+ return root; >+@@ -863,6 +942,48 @@ >+ >+ >+ >++/* @funcstatic btreeSecFindINode ************************************************* >++** >++** Recursive search for insert node in a secondary tree >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [u] page [AjPBtpage] page >++** @param [r] item [const char*] key to search for >++** >++** @return [AjPBtpage] leaf node where item should be inserted >++** @@ >++******************************************************************************/ >++ >++static AjPBtpage btreeSecFindINode(AjPBtcache cache, AjPBtpage page, >++ const char *item) >++{ >++ AjPBtpage ret = NULL; >++ AjPBtpage pg = NULL; >++ >++ unsigned char *buf = NULL; >++ ajint status = 0; >++ ajint ival = 0; >++ >++ /* ajDebug("In btreeSecFindINode\n"); */ >++ >++ ret = page; >++ buf = page->buf; >++ GBT_NODETYPE(buf,&ival); >++ if(ival != BT_LEAF) >++ { >++ status = ret->dirty; >++ ret->dirty = BT_LOCK; /* Lock in case of lots of overflow pages */ >++ pg = btreeSecPageFromKey(cache,buf,item); >++ ret->dirty = status; >++ ret = btreeSecFindINode(cache,pg,item); >++ } >++ >++ return ret; >++} >++ >++ >++ >++ >+ /* @funcstatic btreePageFromKey ******************************************* >+ ** >+ ** Return next lower index page given a key >+@@ -928,6 +1049,71 @@ >+ >+ >+ >++/* @funcstatic btreeSecPageFromKey ******************************************* >++** >++** Return next lower index page given a key in a secondary tree >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [u] buf [unsigned char *] page buffer >++** @param [r] key [const char *] key to search for >++** >++** @return [AjPBtpage] pointer to a page >++** @@ >++******************************************************************************/ >++ >++static AjPBtpage btreeSecPageFromKey(AjPBtcache cache, unsigned char *buf, >++ const char *key) >++{ >++ unsigned char *rootbuf = NULL; >++ ajint nkeys = 0; >++ ajint order = 0; >++ ajint i; >++ >++ ajlong blockno = 0L; >++ AjPStr *karray = NULL; >++ ajlong *parray = NULL; >++ AjPBtpage page = NULL; >++ >++ /* ajDebug("In btreePageFromKey\n"); */ >++ >++ rootbuf = buf; >++ >++ >++ GBT_NKEYS(rootbuf,&nkeys); >++ order = cache->sorder; >++ >++ AJCNEW0(karray,order); >++ AJCNEW0(parray,order); >++ for(i=0;i<order;++i) >++ karray[i] = ajStrNew(); >++ >++ btreeGetKeys(cache,rootbuf,&karray,&parray); >++ i = 0; >++ while(i!=nkeys && strcmp(key,karray[i]->Ptr)>=0) >++ ++i; >++ if(i==nkeys) >++ { >++ if(strcmp(key,karray[i-1]->Ptr)<0) >++ blockno = parray[i-1]; >++ else >++ blockno = parray[i]; >++ } >++ else >++ blockno = parray[i]; >++ >++ for(i=0;i<order;++i) >++ ajStrDel(&karray[i]); >++ AJFREE(karray); >++ AJFREE(parray); >++ >++ page = ajBtreeCacheRead(cache,blockno); >++ >++ return page; >++} >++ >++ >++ >++ >+ /* @func ajBtreeIdNew ********************************************* >+ ** >+ ** Constructor for index bucket ID informationn >+@@ -1617,6 +1803,36 @@ >+ >+ >+ >++/* @funcstatic btreeNodeIsFullSec ***************************************** >++** >++** Tests whether a secondary node is full of keys >++** >++** @param [r] cache [const AjPBtcache] cache >++** @param [u] page [AjPBtpage] original page >++** >++** @return [AjBool] true if full >++** @@ >++******************************************************************************/ >++ >++static AjBool btreeNodeIsFullSec(const AjPBtcache cache, AjPBtpage page) >++{ >++ unsigned char *buf = NULL; >++ ajint nkeys = 0; >++ >++ /* ajDebug("In btreeNodeIsFull\n"); */ >++ >++ buf = page->buf; >++ GBT_NKEYS(buf,&nkeys); >++ >++ if(nkeys == cache->sorder - 1) >++ return ajTrue; >++ >++ return ajFalse; >++} >++ >++ >++ >++ >+ /* @funcstatic btreeInsertNonFull ***************************************** >+ ** >+ ** Insert a key into a non-full node >+@@ -2289,6 +2505,25 @@ >+ >+ >+ >++/* @funcstatic btreeNumIdCompare ******************************************* >++** >++** Comparison function for ajListSort >++** >++** @param [r] a [const void*] ID 1 >++** @param [r] b [const void*] ID 2 >++** >++** @return [ajint] 0 = bases match >++** @@ >++******************************************************************************/ >++ >++static ajint btreeNumIdCompare(const void *a, const void *b) >++{ >++ return (*(AjPBtNumId*)a)->offset - (*(AjPBtNumId*)b)->offset; >++} >++ >++ >++ >++ >+ /* @funcstatic btreeWriteNode ******************************************* >+ ** >+ ** Write an internal node >+@@ -2999,8 +3234,7 @@ >+ rno = totalkeys - lno; >+ >+ maxnperbucket = nperbucket >> 1; >+- if(!maxnperbucket) >+- ++maxnperbucket; >++ ++maxnperbucket; >+ >+ cbucket = btreeBucketNew(maxnperbucket); >+ >+@@ -5729,7 +5963,17 @@ >+ { >+ bentries = buckets[i]->Nentries; >+ for(j=0;j<bentries;++j) >+- ajListPush(list,(void *)buckets[i]->Ids[j]); >++ { >++ if(!buckets[i]->Ids[j]->dups) >++ ajListPush(list,(void *)buckets[i]->Ids[j]); >++ else >++ { >++ ajBtreeHybLeafList(cache,buckets[i]->Ids[j]->offset, >++ buckets[i]->Ids[j]->id,list); >++ ajBtreeIdDel(&buckets[i]->Ids[j]); >++ } >++ } >++ >+ AJFREE(buckets[i]->keylen); >+ AJFREE(buckets[i]->Ids); >+ AJFREE(buckets[i]); >+@@ -6273,6 +6517,7 @@ >+ ** >+ ** @param [r] filename [const char*] file name >+ ** @param [r] indexdir [const char*] index file directory >++** @param [r] directory [const char*] file directory >+ ** @param [w] seqfiles [AjPStr**] sequence file names >+ ** @param [w] reffiles [AjPStr**] reference file names (if any) >+ >+@@ -6282,6 +6527,7 @@ >+ ******************************************************************************/ >+ >+ ajint ajBtreeReadEntries(const char *filename, const char *indexdir, >++ const char *directory, >+ AjPStr **seqfiles, AjPStr **reffiles) >+ { >+ AjPStr line = NULL; >+@@ -6292,6 +6538,8 @@ >+ >+ AjPStr seqname = NULL; >+ AjPStr refname = NULL; >++ AjPStr tseqname = NULL; >++ AjPStr trefname = NULL; >+ >+ AjPFile inf = NULL; >+ char p; >+@@ -6303,6 +6551,9 @@ >+ line = ajStrNew(); >+ list = ajListNew(); >+ reflist = ajListNew(); >++ >++ tseqname = ajStrNew(); >++ trefname = ajStrNew(); >+ >+ fn = ajStrNew(); >+ ajFmtPrintS(&fn,"%s/%s",indexdir,filename); >+@@ -6329,7 +6580,8 @@ >+ while(ajFileReadLine(inf, &line)) >+ { >+ seqname = ajStrNew(); >+- ajFmtScanS(line,"%S",&seqname); >++ ajFmtScanS(line,"%S",&tseqname); >++ ajFmtPrintS(&seqname,"%s/%S",directory,tseqname); >+ ajListPushApp(list,(void *)seqname); >+ } >+ >+@@ -6342,7 +6594,9 @@ >+ { >+ seqname = ajStrNew(); >+ refname = ajStrNew(); >+- ajFmtScanS(line,"%S%S",&seqname,&refname); >++ ajFmtScanS(line,"%S%S",&tseqname,&trefname); >++ ajFmtPrintS(&seqname,"%s/%S",directory,tseqname); >++ ajFmtPrintS(&refname,"%s/%S",directory,trefname); >+ ajListPushApp(list,(void *)seqname); >+ ajListPushApp(reflist,(void *)refname); >+ } >+@@ -6357,6 +6611,11 @@ >+ ajListDel(&reflist); >+ ajStrDel(&line); >+ ajStrDel(&fn); >++ >++ ajStrDel(&tseqname); >++ ajStrDel(&trefname); >++ >++ >+ ajFileClose(&inf); >+ >+ return entries; >+@@ -6967,7 +7226,7 @@ >+ pripage = btreeCacheLocate(cache,0L); >+ pripage->dirty = BT_LOCK; >+ >+- ajDebug("Created secondary tree at block %d\n",(ajint)secrootpage); >++ /* ajDebug("Created 2ry tree at block %d\n",(ajint)secrootpage); */ >+ } >+ else >+ { >+@@ -7776,8 +8035,7 @@ >+ rno = totalkeys - lno; >+ >+ maxnperbucket = nperbucket >> 1; >+- if(!maxnperbucket) >+- ++maxnperbucket; >++ ++maxnperbucket; >+ >+ cbucket = btreePriBucketNew(maxnperbucket); >+ >+@@ -8230,11 +8488,13 @@ >+ { >+ FILE *fp; >+ AjPBtcache cache = NULL; >++#if 0 >+ #if defined (HAVE64) && !defined(_OSF_SOURCE) && !defined(_AIX) && !defined(__hpux) && !defined(__ppc__) && !defined(__FreeBSD__) >+ struct stat64 buf; >+ #else >+ struct stat buf; >+ #endif >++#endif >+ ajlong filelen = 0L; >+ >+ AjPStr fn = NULL; >+@@ -8246,13 +8506,18 @@ >+ if(!fp) >+ return NULL; >+ >+- >++ /* Commented out pending database updating */ >++#if 0 >++ if(strcmp(mode,"r")) >++ { >+ #if defined (HAVE64) && !defined(_OSF_SOURCE) && !defined(_AIX) && !defined(__hpux) && !defined(__ppc__) && !defined(__FreeBSD__) >+- if(!stat64(file, &buf)) >++ if(!stat64(fn->Ptr, &buf)) >+ #else >+- if(!stat(file, &buf)) >++ if(!stat(fn->Ptr, &buf)) >++#endif >++ filelen = buf.st_size; >++ } >+ #endif >+- filelen = buf.st_size; >+ >+ AJNEW0(cache); >+ >+@@ -8283,6 +8548,12 @@ >+ cache->snperbucket = sfill; >+ cache->count = count; >+ cache->kwlimit = kwlimit; >++ >++ cache->bmem = NULL; >++ cache->tmem = NULL; >++ >++ cache->bsmem = NULL; >++ cache->tsmem = NULL; >+ >+ ajStrDel(&fn); >+ >+@@ -8456,8 +8727,7 @@ >+ rno = totalkeys - lno; >+ >+ maxnperbucket = nperbucket >> 1; >+- if(!maxnperbucket) >+- ++maxnperbucket; >++ ++maxnperbucket; >+ >+ cbucket = btreeSecBucketNew(maxnperbucket); >+ >+@@ -9070,7 +9340,7 @@ >+ if(!cache->slevel) >+ return root; >+ >+- ret = btreeFindINode(cache,root,key); >++ ret = btreeSecFindINode(cache,root,key); >+ >+ return ret; >+ } >+@@ -9694,7 +9964,7 @@ >+ >+ /* ajDebug("In btreeInsertKeySec\n"); */ >+ >+- if(!btreeNodeIsFull(cache,page)) >++ if(!btreeNodeIsFullSec(cache,page)) >+ { >+ btreeInsertNonFullSec(cache,page,key,less,greater); >+ return; >+@@ -10572,7 +10842,7 @@ >+ >+ list = ajListNew(); >+ >+- order = cache->order; >++ order = cache->sorder; >+ >+ AJCNEW0(karray,order); >+ AJCNEW0(parray,order); >+@@ -11724,3 +11994,4580 @@ >+ return (*(AjPBtId*)a)->dbno - >+ (*(AjPBtId*)b)->dbno; >+ } >++ >++ >++ >++ >++ >++ >++ >++ >++/* @func ajBtreeHybNew ********************************************* >++** >++** Constructor for index bucket ID informationn >++** >++** >++** @return [AjPBtHybrid] Index ID object >++** @@ >++******************************************************************************/ >++ >++AjPBtHybrid ajBtreeHybNew(void) >++{ >++ AjPBtHybrid Id = NULL; >++ >++ /* ajDebug("In ajBtreeHybNew\n"); */ >++ >++ AJNEW0(Id); >++ Id->key1 = ajStrNew(); >++ Id->dbno = 0; >++ Id->dups = 0; >++ Id->offset = 0L; >++ Id->refoffset = 0L; >++ Id->treeblock = 0L; >++ >++ return Id; >++} >++ >++ >++ >++ >++/* @func ajBtreeHybDel ********************************************* >++** >++** Destructor for index bucket ID information >++** >++** @param [w] thys [AjPBtHybrid*] index ID object >++** >++** @return [void] >++** @@ >++******************************************************************************/ >++ >++void ajBtreeHybDel(AjPBtHybrid *thys) >++{ >++ AjPBtHybrid Id = NULL; >++ >++ /* ajDebug("In ajBtreeIdDel\n"); */ >++ >++ if(!thys || !*thys) >++ return; >++ Id = *thys; >++ >++ ajStrDel(&Id->key1); >++ AJFREE(Id); >++ *thys = NULL; >++ >++ return; >++} >++ >++ >++ >++ >++/* @funcstatic btreeAllocPriArray ******************************************* >++** >++** Allocate karray and parray arrays for a primary key >++** >++** @param [rw] cache [AjPBtcache] cache >++** >++** @return [AjPBtMem] memory node >++** @@ >++******************************************************************************/ >++ >++static AjPBtMem btreeAllocPriArray(AjPBtcache cache) >++{ >++ AjPBtMem node = NULL; >++ ajint i; >++ ajint limit; >++ AjPBtMem p = NULL; >++ >++ limit = cache->order; >++ if(!cache->bmem) >++ { >++ AJNEW0(node); >++ cache->bmem = node; >++ cache->tmem = node; >++ node->prev = NULL; >++ node->next = NULL; >++ node->used = ajTrue; >++ AJCNEW0(node->karray,limit); >++ AJCNEW0(node->parray,limit); >++ AJCNEW0(node->overflows,limit); >++ for(i=0;i<limit;++i) >++ node->karray[i] = ajStrNew(); >++ >++ return node; >++ } >++ >++ if(!cache->bmem->used) >++ { >++ cache->bmem->used = ajTrue; >++ >++ if(cache->bmem->next) >++ { >++ p = cache->bmem->next; >++ >++ cache->tmem->next = cache->bmem; >++ cache->bmem->next = NULL; >++ >++ cache->bmem->prev = cache->tmem; >++ >++ cache->tmem = cache->bmem; >++ >++ cache->bmem = p; >++ cache->bmem->prev = NULL; >++ >++ memset(cache->tmem->parray,0,sizeof(ajlong)*limit); >++ >++ return cache->tmem; >++ } >++ >++ memset(cache->bmem->parray,0,sizeof(ajlong)*limit); >++ >++ return cache->bmem; >++ } >++ >++ >++ AJNEW0(node); >++ node->used = ajTrue; >++ node->next = NULL; >++ node->prev = cache->tmem; >++ cache->tmem->next = node; >++ cache->tmem = node; >++ >++ AJCNEW0(node->karray,limit); >++ AJCNEW0(node->parray,limit); >++ AJCNEW0(node->overflows,limit); >++ for(i=0;i<limit;++i) >++ node->karray[i] = ajStrNew(); >++ >++ return node; >++} >++ >++ >++ >++ >++/* @funcstatic btreeDeallocPriArray ******************************************* >++** >++** Deallocate karray and parray arrays for a primary key >++** >++** @param [rw] cache [AjPBtcache] cache >++** @param [rw] node [AjPBtMem] node >++** >++** @return [void] >++** @@ >++******************************************************************************/ >++ >++static void btreeDeallocPriArray(AjPBtcache cache, AjPBtMem node) >++{ >++ node->used = ajFalse; >++ if(!node->prev) >++ return; >++ >++ node->prev->next = node->next; >++ if(node->next) >++ node->next->prev = node->prev; >++ else >++ cache->tmem = node->prev; >++ >++ node->next = cache->bmem; >++ cache->bmem->prev = node; >++ cache->bmem = node; >++ node->prev = NULL; >++ >++ return; >++} >++ >++ >++ >++ >++ >++/* @funcstatic btreeAllocSecArray ******************************************* >++** >++** Allocate karray and parray arrays for a primary key >++** >++** @param [rw] cache [AjPBtcache] cache >++** >++** @return [AjPBtMem] memory node >++** @@ >++******************************************************************************/ >++ >++static AjPBtMem btreeAllocSecArray(AjPBtcache cache) >++{ >++ AjPBtMem node = NULL; >++ ajint i; >++ ajint limit; >++ AjPBtMem p = NULL; >++ >++ limit = cache->sorder; >++ if(!cache->bsmem) >++ { >++ AJNEW0(node); >++ cache->bsmem = node; >++ cache->tsmem = node; >++ node->prev = NULL; >++ node->next = NULL; >++ node->used = ajTrue; >++ AJCNEW0(node->karray,limit); >++ AJCNEW0(node->parray,limit); >++ AJCNEW0(node->overflows,limit); >++ for(i=0;i<limit;++i) >++ node->karray[i] = ajStrNew(); >++ >++ return node; >++ } >++ >++ if(!cache->bsmem->used) >++ { >++ cache->bsmem->used = ajTrue; >++ >++ if(cache->bsmem->next) >++ { >++ p = cache->bsmem->next; >++ >++ cache->tsmem->next = cache->bsmem; >++ cache->bsmem->next = NULL; >++ >++ cache->bsmem->prev = cache->tsmem; >++ >++ cache->tsmem = cache->bsmem; >++ >++ cache->bsmem = p; >++ cache->bsmem->prev = NULL; >++ >++ memset(cache->tsmem->parray,0,sizeof(ajlong)*limit); >++ return cache->tsmem; >++ } >++ >++ memset(cache->bsmem->parray,0,sizeof(ajlong)*limit); >++ return cache->bsmem; >++ } >++ >++ AJNEW0(node); >++ node->used = ajTrue; >++ node->next = NULL; >++ node->prev = cache->tsmem; >++ cache->tsmem->next = node; >++ cache->tsmem = node; >++ >++ AJCNEW0(node->karray,limit); >++ AJCNEW0(node->parray,limit); >++ AJCNEW0(node->overflows,limit); >++ for(i=0;i<limit;++i) >++ node->karray[i] = ajStrNew(); >++ >++ return node; >++} >++ >++ >++ >++ >++/* @funcstatic btreeDeallocSecArray ******************************************* >++** >++** Deallocate karray and parray arrays for a primary key >++** >++** @param [rw] cache [AjPBtcache] cache >++** @param [rw] node [AjPBtMem] node >++** >++** @return [void] >++** @@ >++******************************************************************************/ >++ >++static void btreeDeallocSecArray(AjPBtcache cache, AjPBtMem node) >++{ >++ node->used = ajFalse; >++ if(!node->prev) >++ return; >++ >++ node->prev->next = node->next; >++ if(node->next) >++ node->next->prev = node->prev; >++ else >++ cache->tsmem = node->prev; >++ >++ node->next = cache->bsmem; >++ cache->bsmem->prev = node; >++ cache->bsmem = node; >++ node->prev = NULL; >++ >++ return; >++} >++ >++ >++ >++ >++/* @funcstatic btreeAddToHybBucket ******************************************* >++** >++** Add an ID to a bucket >++** Only called if there is room in the bucket >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [r] pageno [ajlong] page number of bucket >++** @param [r] id [const AjPBtId] ID info >++** >++** @return [void] >++** @@ >++******************************************************************************/ >++ >++static void btreeAddToHybBucket(AjPBtcache cache, ajlong pageno, >++ const AjPBtHybrid hyb) >++{ >++ AjPBucket bucket = NULL; >++ AjPBtId destid = NULL; >++ >++ ajint nentries; >++ >++ /* ajDebug("In btreeAddToHybBucket\n"); */ >++ >++ bucket = btreeReadBucket(cache,pageno); >++ nentries = bucket->Nentries; >++ >++ >++ /* Reading a bucket always gives one extra ID position */ >++ bucket->Ids[nentries] = ajBtreeIdNew(); >++ destid = bucket->Ids[nentries]; >++ >++ ajStrAssS(&destid->id,hyb->key1); >++ destid->dbno = hyb->dbno; >++ destid->offset = hyb->offset; >++ destid->refoffset = hyb->refoffset; >++ destid->dups = hyb->dups; >++ >++ ++bucket->Nentries; >++ >++ btreeWriteBucket(cache,bucket,pageno); >++ >++ btreeBucketDel(&bucket); >++ >++ return; >++} >++ >++ >++ >++ >++/* @func ajBtreeHybFindInsert *********************************************** >++** >++** Find the node that should contain a new key for insertion >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [r] key [const char*] key to search for >++** >++** @return [AjPBtpage] leaf node where item should be inserted >++** @@ >++******************************************************************************/ >++ >++AjPBtpage ajBtreeHybFindInsert(AjPBtcache cache, const char *key) >++{ >++ AjPBtpage root = NULL; >++ AjPBtpage ret = NULL; >++ >++ /* ajDebug("In ajBtreeHybFindInsert\n"); */ >++ >++ /* The root node should always be in the cache (BT_LOCKed) */ >++ root = btreeCacheLocate(cache,0L); >++ >++ if(!root) >++ ajFatal("The PRI root cache page has been unlocked\n"); >++ >++ if(!cache->level) >++ return root; >++ >++ ret = btreeHybFindINode(cache,root,key); >++ >++ return ret; >++} >++ >++ >++ >++ >++/* @funcstatic btreeHybFindINode ********************************************* >++** >++** Recursive search for insert node >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [u] page [AjPBtpage] page >++** @param [r] item [const char*] key to search for >++** >++** @return [AjPBtpage] leaf node where item should be inserted >++** @@ >++******************************************************************************/ >++ >++static AjPBtpage btreeHybFindINode(AjPBtcache cache, AjPBtpage page, >++ const char *item) >++{ >++ AjPBtpage ret = NULL; >++ AjPBtpage pg = NULL; >++ >++ unsigned char *buf = NULL; >++ ajint status = 0; >++ ajint ival = 0; >++ >++ /* ajDebug("In btreeHybFindINode\n"); */ >++ >++ ret = page; >++ buf = page->buf; >++ GBT_NODETYPE(buf,&ival); >++ if(ival != BT_LEAF) >++ { >++ status = ret->dirty; >++ ret->dirty = BT_LOCK; /* Lock in case of lots of overflow pages */ >++ pg = btreeHybPageFromKey(cache,buf,item); >++ ret->dirty = status; >++ ret = btreeHybFindINode(cache,pg,item); >++ } >++ >++ return ret; >++} >++ >++ >++ >++ >++/* @funcstatic btreeHybPageFromKey ******************************************* >++** >++** Return next lower index page given a key >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [u] buf [unsigned char *] page buffer >++** @param [r] key [const char *] key to search for >++** >++** @return [AjPBtpage] pointer to a page >++** @@ >++******************************************************************************/ >++ >++static AjPBtpage btreeHybPageFromKey(AjPBtcache cache, unsigned char *buf, >++ const char *key) >++{ >++ unsigned char *rootbuf = NULL; >++ ajint nkeys = 0; >++ ajint order = 0; >++ ajint i; >++ >++ ajlong blockno = 0L; >++ AjPStr *karray = NULL; >++ ajlong *parray = NULL; >++ AjPBtpage page = NULL; >++ AjPBtMem arrays = NULL; >++ >++ /* ajDebug("In btreeHybPageFromKey\n"); */ >++ >++ rootbuf = buf; >++ >++ >++ GBT_NKEYS(rootbuf,&nkeys); >++ order = cache->order; >++ >++ arrays = btreeAllocPriArray(cache); >++ karray = arrays->karray; >++ parray = arrays->parray; >++ >++ btreeGetKeys(cache,rootbuf,&karray,&parray); >++ i = 0; >++ while(i!=nkeys && strcmp(key,karray[i]->Ptr)>=0) >++ ++i; >++ if(i==nkeys) >++ { >++ if(strcmp(key,karray[i-1]->Ptr)<0) >++ blockno = parray[i-1]; >++ else >++ blockno = parray[i]; >++ } >++ else >++ blockno = parray[i]; >++ >++ btreeDeallocPriArray(cache,arrays); >++ >++ page = ajBtreeCacheRead(cache,blockno); >++ >++ return page; >++} >++ >++ >++ >++ >++/* @funcstatic btreeHybInsertShift ******************************************** >++** >++** Rebalance buckets on insertion >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [u] retpage [AjPBtpage*] page >++** @param [r] key [const char *] key >++** >++** @return [ajlong] bucket block or 0L if shift not posible >++** @@ >++******************************************************************************/ >++ >++static ajlong btreeHybInsertShift(AjPBtcache cache, AjPBtpage *retpage, >++ const char *key) >++{ >++ unsigned char *tbuf = NULL; >++ unsigned char *pbuf = NULL; >++ unsigned char *sbuf = NULL; >++ >++ AjPBtpage ppage = NULL; >++ AjPBtpage spage = NULL; >++ AjPBtpage tpage = NULL; >++ >++ ajint tkeys = 0; >++ ajint pkeys = 0; >++ ajint skeys = 0; >++ ajint order = 0; >++ >++ ajint i; >++ ajint n; >++ >++ ajlong parent = 0L; >++ ajlong blockno = 0L; >++ >++ AjPStr *kTarray = NULL; >++ AjPStr *kParray = NULL; >++ AjPStr *kSarray = NULL; >++ ajlong *pTarray = NULL; >++ ajlong *pParray = NULL; >++ ajlong *pSarray = NULL; >++ >++ AjPStr *karray = NULL; >++ ajlong *parray = NULL; >++ >++ ajint ppos = 0; >++ ajint pkeypos = 0; >++ ajint minsize = 0; >++ >++ AjPBtMem arrays1 = NULL; >++ AjPBtMem arrays2 = NULL; >++ AjPBtMem arrays3 = NULL; >++ >++ /* ajDebug("In btreeHybInsertShift\n"); */ >++ >++ >++ tpage = *retpage; >++ >++ tbuf = tpage->buf; >++ >++ GBT_PREV(tbuf,&parent); >++ GBT_NKEYS(tbuf,&tkeys); >++ >++ order = cache->order; >++ minsize = order / 2; >++ if(order % 2) >++ ++minsize; >++ >++ if(tkeys <= minsize) >++ return 0L; >++ >++ ppage = ajBtreeCacheRead(cache,parent); >++ >++ pbuf = ppage->buf; >++ GBT_NKEYS(pbuf,&pkeys); >++ >++ >++ arrays1 = btreeAllocPriArray(cache); >++ kParray = arrays1->karray; >++ pParray = arrays1->parray; >++ >++ arrays2 = btreeAllocPriArray(cache); >++ kSarray = arrays2->karray; >++ pSarray = arrays2->parray; >++ >++ arrays3 = btreeAllocPriArray(cache); >++ kTarray = arrays3->karray; >++ pTarray = arrays3->parray; >++ >++ >++ btreeGetKeys(cache,pbuf,&kParray,&pParray); >++ >++ i=0; >++ while(i!=pkeys && strcmp(key,kParray[i]->Ptr)>=0) >++ ++i; >++ pkeypos = i; >++ >++ if(i==pkeys) >++ { >++ if(strcmp(key,kParray[i-1]->Ptr)<0) >++ ppos = i-1; >++ else >++ ppos = i; >++ } >++ else >++ ppos = i; >++ >++ >++ if(ppos) /* There is another leaf to the left */ >++ { >++ spage = ajBtreeCacheRead(cache,pParray[ppos-1]); >++ sbuf = spage->buf; >++ GBT_NKEYS(sbuf,&skeys); >++ } >++ >++ if(i && skeys != order-1) /* There is space in the left leaf */ >++ { >++ /* ajDebug("Left shift\n"); */ >++ btreeGetKeys(cache,tbuf,&kTarray,&pTarray); >++ if(skeys) >++ btreeGetKeys(cache,sbuf,&kSarray,&pSarray); >++ >++ i = 0; >++ while(pParray[i] != tpage->pageno) >++ ++i; >++ --i; >++ >++ pkeypos = i; >++ >++ ajStrAssS(&kSarray[skeys],kParray[pkeypos]); >++ pSarray[skeys+1] = pTarray[0]; >++ ++skeys; >++ --tkeys; >++ ajStrAssS(&kParray[pkeypos],kTarray[0]); >++ for(i=0;i<tkeys;++i) >++ { >++ ajStrAssS(&kTarray[i],kTarray[i+1]); >++ pTarray[i] = pTarray[i+1]; >++ } >++ pTarray[i] = pTarray[i+1]; >++ pTarray[i+1] = 0L; >++ >++ btreeWriteNode(cache,spage,kSarray,pSarray,skeys); >++ btreeWriteNode(cache,tpage,kTarray,pTarray,tkeys); >++ btreeWriteNode(cache,ppage,kParray,pParray,pkeys); >++ if(!ppage->pageno) >++ ppage->dirty = BT_LOCK; >++ >++ i = 0; >++ while(i!=pkeys && strcmp(key,kParray[i]->Ptr)>=0) >++ ++i; >++ if(i==pkeys) >++ { >++ if(strcmp(key,kParray[i-1]->Ptr)<0) >++ blockno = pParray[i-1]; >++ else >++ blockno = pParray[i]; >++ } >++ else >++ blockno = pParray[i]; >++ >++ if(blockno == spage->pageno) >++ { >++ *retpage = spage; >++ karray = kSarray; >++ parray = pSarray; >++ n = skeys; >++ } >++ else >++ { >++ karray = kTarray; >++ parray = pTarray; >++ n = tkeys; >++ } >++ >++ >++ i = 0; >++ while(i!=n && strcmp(key,karray[i]->Ptr)>=0) >++ ++i; >++ if(i==n) >++ { >++ if(strcmp(key,karray[i-1]->Ptr)<0) >++ blockno = parray[i-1]; >++ else >++ blockno = parray[i]; >++ } >++ else >++ blockno = parray[i]; >++ >++ btreeDeallocPriArray(cache,arrays1); >++ btreeDeallocPriArray(cache,arrays2); >++ btreeDeallocPriArray(cache,arrays3); >++ >++ /* ajDebug("... returns blockno (a) %Ld\n",blockno); */ >++ >++ return blockno; >++ } >++ >++ >++ if(ppos != pkeys) /* There is a right node */ >++ { >++ spage = ajBtreeCacheRead(cache,pParray[ppos+1]); >++ sbuf = spage->buf; >++ GBT_NKEYS(sbuf,&skeys); >++ } >++ >++ >++ /* Space in the right leaf */ >++ if(ppos != pkeys && skeys != order-1) >++ { >++ /* ajDebug("Right shift\n"); */ >++ btreeGetKeys(cache,tbuf,&kTarray,&pTarray); >++ btreeGetKeys(cache,sbuf,&kSarray,&pSarray); >++ >++ i = 0; >++ while(pParray[i] != tpage->pageno) >++ ++i; >++ pkeypos = i; >++ >++ pSarray[skeys+1] = pSarray[skeys]; >++ for(i=skeys-1;i>-1;--i) >++ { >++ ajStrAssS(&kSarray[i+1],kSarray[i]); >++ pSarray[i+1] = pSarray[i]; >++ } >++ ajStrAssS(&kSarray[0],kParray[pkeypos]); >++ pSarray[0] = pTarray[tkeys]; >++ ajStrAssS(&kParray[pkeypos],kTarray[tkeys-1]); >++ ++skeys; >++ --tkeys; >++ pTarray[tkeys+1] = 0L; >++ >++ btreeWriteNode(cache,spage,kSarray,pSarray,skeys); >++ btreeWriteNode(cache,tpage,kTarray,pTarray,tkeys); >++ btreeWriteNode(cache,ppage,kParray,pParray,pkeys); >++ if(!ppage->pageno) >++ ppage->dirty = BT_LOCK; >++ >++ i = 0; >++ while(i!=pkeys && strcmp(key,kParray[i]->Ptr)>=0) >++ ++i; >++ if(i==pkeys) >++ { >++ if(strcmp(key,kParray[i-1]->Ptr)<0) >++ blockno = pParray[i-1]; >++ else >++ blockno = pParray[i]; >++ } >++ else >++ blockno = pParray[i]; >++ >++ if(blockno == spage->pageno) >++ { >++ *retpage = spage; >++ karray = kSarray; >++ parray = pSarray; >++ n = skeys; >++ } >++ else >++ { >++ karray = kTarray; >++ parray = pTarray; >++ n = tkeys; >++ } >++ >++ i = 0; >++ while(i!=n && strcmp(key,karray[i]->Ptr)>=0) >++ ++i; >++ if(i==n) >++ { >++ if(strcmp(key,karray[i-1]->Ptr)<0) >++ blockno = parray[i-1]; >++ else >++ blockno = parray[i]; >++ } >++ else >++ blockno = parray[i]; >++ >++ btreeDeallocPriArray(cache,arrays1); >++ btreeDeallocPriArray(cache,arrays2); >++ btreeDeallocPriArray(cache,arrays3); >++ >++ /* ajDebug("... returns blockno (b) %Ld\n",blockno); */ >++ >++ return blockno; >++ } >++ >++ >++ btreeDeallocPriArray(cache,arrays1); >++ btreeDeallocPriArray(cache,arrays2); >++ btreeDeallocPriArray(cache,arrays3); >++ >++ /* ajDebug("... returns 0L\n"); */ >++ >++ return 0L; >++} >++ >++ >++ >++ >++/* @funcstatic btreeHybReorderBuckets ***************************************** >++** >++** Re-order leaf buckets >++** Must only be called if one of the buckets is full >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [u] leaf [AjPBtpage] leaf page >++** >++** @return [AjBool] true if reorder was successful i.e. leaf not full >++** @@ >++******************************************************************************/ >++ >++static AjBool btreeHybReorderBuckets(AjPBtcache cache, AjPBtpage leaf) >++{ >++ ajint nkeys = 0; >++ unsigned char *lbuf = NULL; >++ AjPBucket *buckets = NULL; >++ AjPStr *keys = NULL; >++ ajlong *ptrs = NULL; >++ ajlong *overflows = NULL; >++ AjPBtMem arrays = NULL; >++ >++ ajint i = 0; >++ ajint j = 0; >++ >++ ajint order; >++ ajint bentries = 0; >++ ajint totalkeys = 0; >++ ajint nperbucket = 0; >++ ajint maxnperbucket = 0; >++ ajint count = 0; >++ ajint totkeylen = 0; >++ ajint keylimit = 0; >++ ajint bucketn = 0; >++ ajint bucketlimit = 0; >++ ajint nodetype = 0; >++ >++ AjPList idlist = NULL; >++ ajint dirtysave = 0; >++ AjPBtId bid = NULL; >++ AjPBucket cbucket = NULL; >++ AjPBtId cid = NULL; >++ >++ ajint v = 0; >++ >++ /* ajDebug("In btreeHybReorderBuckets\n"); */ >++ >++ dirtysave = leaf->dirty; >++ >++ leaf->dirty = BT_LOCK; >++ lbuf = leaf->buf; >++ >++ GBT_NODETYPE(lbuf,&nodetype); >++ >++ order = cache->order; >++ nperbucket = cache->nperbucket; >++ >++ >++ /* Read keys/ptrs */ >++ arrays = btreeAllocPriArray(cache); >++ keys = arrays->karray; >++ ptrs = arrays->parray; >++ overflows = arrays->overflows; >++ >++ btreeGetKeys(cache,lbuf,&keys,&ptrs); >++ >++ GBT_NKEYS(lbuf,&nkeys); >++ >++ >++ if(!nkeys) >++ ajFatal("BucketReorder: Attempt to reorder empty leaf"); >++ >++ for(i=0;i<nkeys;++i) >++ totalkeys += btreeNumInBucket(cache,ptrs[i]); >++ totalkeys += btreeNumInBucket(cache,ptrs[i]); >++ >++ /* Set the number of entries per bucket to approximately half full */ >++ maxnperbucket = nperbucket >> 1; >++ >++ if(!maxnperbucket) >++ ++maxnperbucket; >++ >++ /* Work out the number of new buckets needed */ >++ bucketn = (totalkeys / maxnperbucket); >++ if(totalkeys % maxnperbucket) >++ ++bucketn; >++ >++ if(bucketn > order) >++ { >++ btreeDeallocPriArray(cache,arrays); >++ >++ leaf->dirty = dirtysave; >++ return ajFalse; >++ } >++ >++ >++ /* Read buckets */ >++ AJCNEW0(buckets,nkeys+1); >++ keylimit = nkeys + 1; >++ >++ for(i=0;i<keylimit;++i) >++ buckets[i] = btreeReadBucket(cache,ptrs[i]); >++ >++ >++ /* Read IDs from all buckets and push to list and sort (increasing id) */ >++ idlist = ajListNew(); >++ >++ for(i=0;i<keylimit;++i) >++ { >++ overflows[i] = buckets[i]->Overflow; >++ bentries = buckets[i]->Nentries; >++ for(j=0;j<bentries;++j) >++ ajListPush(idlist,(void *)buckets[i]->Ids[j]); >++ >++ AJFREE(buckets[i]->keylen); >++ AJFREE(buckets[i]->Ids); >++ AJFREE(buckets[i]); >++ } >++ ajListSort(idlist,btreeIdCompare); >++ AJFREE(buckets); >++ >++ cbucket = btreeBucketNew(maxnperbucket); >++ bucketlimit = bucketn - 1; >++ >++ for(i=0;i<bucketlimit;++i) >++ { >++ cbucket->Overflow = overflows[i]; >++ cbucket->Nentries = 0; >++ >++ count = 0; >++ while(count!=maxnperbucket) >++ { >++ ajListPop(idlist,(void **)&bid); >++ >++ cid = cbucket->Ids[count]; >++ ajStrAssS(&cid->id,bid->id); >++ cid->dbno = bid->dbno; >++ cid->dups = bid->dups; >++ cid->offset = bid->offset; >++ cid->refoffset = bid->refoffset; >++ >++ cbucket->keylen[count] = BT_BUCKIDLEN(bid->id); >++ ++cbucket->Nentries; >++ ++count; >++ ajBtreeIdDel(&bid); >++ } >++ >++ >++ ajListPeek(idlist,(void **)&bid); >++ ajStrAssS(&keys[i],bid->id); >++ >++ totkeylen += ajStrLen(bid->id); >++ >++ if(!ptrs[i]) >++ ptrs[i] = cache->totsize; >++ btreeWriteBucket(cache,cbucket,ptrs[i]); >++ } >++ >++ >++ /* Deal with greater-than bucket */ >++ >++ cbucket->Overflow = overflows[i]; >++ cbucket->Nentries = 0; >++ >++ count = 0; >++ while(ajListPop(idlist,(void **)&bid)) >++ { >++ cid = cbucket->Ids[count]; >++ ajStrAssS(&cid->id,bid->id); >++ cid->dbno = bid->dbno; >++ cid->dups = bid->dups; >++ cid->offset = bid->offset; >++ cid->refoffset = bid->refoffset; >++ >++ ++cbucket->Nentries; >++ ++count; >++ ajBtreeIdDel(&bid); >++ } >++ >++ >++ if(!ptrs[i]) >++ ptrs[i] = cache->totsize; >++ btreeWriteBucket(cache,cbucket,ptrs[i]); >++ >++ cbucket->Nentries = maxnperbucket; >++ btreeBucketDel(&cbucket); >++ >++ /* Now write out a modified leaf with new keys/ptrs */ >++ >++ nkeys = bucketn - 1; >++ v = nkeys; >++ SBT_NKEYS(lbuf,v); >++ v = totkeylen; >++ SBT_TOTLEN(lbuf,v); >++ >++ btreeWriteNode(cache,leaf,keys,ptrs,nkeys); >++ >++ leaf->dirty = BT_DIRTY; >++ if(nodetype == BT_ROOT) >++ leaf->dirty = BT_LOCK; >++ >++ btreeDeallocPriArray(cache,arrays); >++ >++ btreeBucketDel(&cbucket); >++ ajListDel(&idlist); >++ >++ return ajTrue; >++} >++ >++ >++ >++ >++/* @funcstatic btreeHybSplitLeaf ********************************************* >++** >++** Split a leaf and propagate up if necessary >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [u] spage [AjPBtpage] page >++** >++** @return [AjPBtpage] pointer to a parent page >++** @@ >++******************************************************************************/ >++ >++static AjPBtpage btreeHybSplitLeaf(AjPBtcache cache, AjPBtpage spage) >++{ >++ ajint nkeys = 0; >++ ajint order = 0; >++ ajint totalkeys = 0; >++ ajint bentries = 0; >++ ajint keylimit = 0; >++ ajint nodetype = 0; >++ >++ ajint rootnodetype = 0; >++ >++ ajint i; >++ ajint j; >++ >++ AjPBtpage lpage = NULL; >++ AjPBtpage rpage = NULL; >++ AjPBtpage page = NULL; >++ >++ AjPStr mediankey = NULL; >++ ajlong mediangtr = 0L; >++ ajlong medianless = 0L; >++ >++ >++ AjPBtId bid = NULL; >++ AjPBtId cid = NULL; >++ >++ unsigned char *buf = NULL; >++ unsigned char *lbuf = NULL; >++ unsigned char *rbuf = NULL; >++ >++ AjPList idlist = NULL; >++ >++ AjPBucket *buckets = NULL; >++ AjPBucket cbucket = NULL; >++ >++ AjPStr *karray = NULL; >++ ajlong *parray = NULL; >++ AjPBtMem arrays = NULL; >++ >++ ajint keypos = 0; >++ ajint lno = 0; >++ ajint rno = 0; >++ >++ ajint bucketlimit = 0; >++ ajint maxnperbucket = 0; >++ ajint nperbucket = 0; >++ ajint bucketn = 0; >++ ajint count = 0; >++ ajint totkeylen = 0; >++ >++ ajlong lblockno = 0L; >++ ajlong rblockno = 0L; >++ ajlong prev = 0L; >++ ajlong overflow = 0L; >++ ajlong prevsave = 0L; >++ >++ ajlong zero = 0L; >++ ajlong join = 0L; >++ >++ ajlong lv = 0L; >++ ajint v = 0; >++ >++ /* ajDebug("In btreeHybSplitLeaf\n"); */ >++ >++ order = cache->order; >++ nperbucket = cache->nperbucket; >++ >++ mediankey = ajStrNew(); >++ >++ arrays = btreeAllocPriArray(cache); >++ karray = arrays->karray; >++ parray = arrays->parray; >++ >++ >++ buf = spage->buf; >++ lbuf = buf; >++ >++ GBT_NKEYS(buf,&nkeys); >++ >++ for(i=nkeys+1; i<order; ++i) >++ parray[i] = 0L; >++ >++ GBT_NODETYPE(buf,&rootnodetype); >++ >++ if(rootnodetype == BT_ROOT) >++ { >++ /* ajDebug("Splitting root node\n"); */ >++ lblockno = cache->totsize; >++ lpage = ajBtreeCacheWrite(cache,lblockno); >++ lpage->pageno = cache->totsize; >++ cache->totsize += cache->pagesize; >++ lbuf = lpage->buf; >++ lv = prev; >++ SBT_PREV(lbuf,lv); >++ } >++ else >++ { >++ lblockno = spage->pageno; >++ lpage = spage; >++ } >++ >++ lpage->dirty = BT_LOCK; >++ >++ >++ rblockno = cache->totsize; >++ rpage = ajBtreeCacheWrite(cache,rblockno); >++ rpage->pageno = cache->totsize; >++ rpage->dirty = BT_LOCK; >++ cache->totsize += cache->pagesize; >++ rbuf = rpage->buf; >++ >++ >++ if(rootnodetype == BT_ROOT) >++ { >++ lv = zero; >++ SBT_RIGHT(rbuf,lv); >++ lv = zero; >++ SBT_LEFT(lbuf,lv); >++ } >++ else >++ { >++ GBT_RIGHT(lbuf,&join); >++ lv = join; >++ SBT_RIGHT(rbuf,lv); >++ } >++ lv = lblockno; >++ SBT_LEFT(rbuf,lv); >++ lv = rblockno; >++ SBT_RIGHT(lbuf,lv); >++ >++ >++ btreeGetKeys(cache,buf,&karray,&parray); >++ >++ >++ keylimit = nkeys+1; >++ AJCNEW0(buckets,keylimit); >++ for(i=0;i<keylimit;++i) >++ buckets[i] = btreeReadBucket(cache,parray[i]); >++ >++ idlist = ajListNew(); >++ for(i=0;i<keylimit;++i) >++ { >++ bentries = buckets[i]->Nentries; >++ for(j=0;j<bentries;++j) >++ ajListPush(idlist,(void *)buckets[i]->Ids[j]); >++ AJFREE(buckets[i]->keylen); >++ AJFREE(buckets[i]->Ids); >++ AJFREE(buckets[i]); >++ } >++ ajListSort(idlist,btreeIdCompare); >++ AJFREE(buckets); >++ >++ >++ totalkeys = ajListLength(idlist); >++ >++ keypos = totalkeys / 2; >++ >++ lno = keypos; >++ rno = totalkeys - lno; >++ >++ maxnperbucket = nperbucket >> 1; >++ ++maxnperbucket; >++ >++ cbucket = btreeBucketNew(maxnperbucket); >++ >++ bucketn = lno / maxnperbucket; >++ if(lno % maxnperbucket) >++ ++bucketn; >++ bucketlimit = bucketn - 1; >++ >++ >++ totkeylen = 0; >++ count = 0; >++ for(i=0;i<bucketlimit;++i) >++ { >++ cbucket->Nentries = 0; >++ for(j=0;j<maxnperbucket;++j) >++ { >++ ajListPop(idlist,(void **)&bid); >++ >++ cid = cbucket->Ids[j]; >++ ajStrAssS(&cid->id,bid->id); >++ cid->dbno = bid->dbno; >++ cid->dups = bid->dups; >++ cid->offset = bid->offset; >++ cid->refoffset = bid->refoffset; >++ >++ cbucket->keylen[j] = BT_BUCKIDLEN(bid->id); >++ ++count; >++ ++cbucket->Nentries; >++ ajBtreeIdDel(&bid); >++ } >++ ajListPeek(idlist,(void **)&bid); >++ >++ ajStrAssS(&karray[i],bid->id); >++ totkeylen += ajStrLen(bid->id); >++ >++ if(!parray[i]) >++ parray[i] = cache->totsize; >++ btreeWriteBucket(cache,cbucket,parray[i]); >++ } >++ >++ cbucket->Nentries = 0; >++ >++ j = 0; >++ while(count != lno) >++ { >++ ajListPop(idlist,(void **)&bid); >++ cid = cbucket->Ids[j]; >++ ++j; >++ ++count; >++ >++ ajStrAssS(&cid->id,bid->id); >++ cid->dbno = bid->dbno; >++ cid->dups = bid->dups; >++ cid->offset = bid->offset; >++ cid->refoffset = bid->refoffset; >++ >++ ++cbucket->Nentries; >++ ajBtreeIdDel(&bid); >++ } >++ >++ if(!parray[i]) >++ parray[i] = cache->totsize; >++ btreeWriteBucket(cache,cbucket,parray[i]); >++ >++ nkeys = bucketn - 1; >++ v = nkeys; >++ SBT_NKEYS(lbuf,v); >++ v = totkeylen; >++ SBT_TOTLEN(lbuf,v); >++ nodetype = BT_LEAF; >++ v = nodetype; >++ SBT_NODETYPE(lbuf,v); >++ lpage->dirty = BT_DIRTY; >++ >++ GBT_PREV(lbuf,&prevsave); >++ >++ btreeWriteNode(cache,lpage,karray,parray,nkeys); >++ >++ ajListPeek(idlist,(void **)&bid); >++ ajStrAssS(&mediankey,bid->id); >++ >++ totkeylen = 0; >++ bucketn = rno / maxnperbucket; >++ if(rno % maxnperbucket) >++ ++bucketn; >++ bucketlimit = bucketn - 1; >++ >++ for(i=0;i<bucketlimit;++i) >++ { >++ cbucket->Nentries = 0; >++ for(j=0;j<maxnperbucket;++j) >++ { >++ ajListPop(idlist,(void **)&bid); >++ >++ cid = cbucket->Ids[j]; >++ ajStrAssS(&cid->id,bid->id); >++ cid->dbno = bid->dbno; >++ cid->dups = bid->dups; >++ cid->offset = bid->offset; >++ cid->refoffset = bid->refoffset; >++ >++ cbucket->keylen[j] = BT_BUCKIDLEN(bid->id); >++ ++cbucket->Nentries; >++ ajBtreeIdDel(&bid); >++ } >++ >++ ajListPeek(idlist,(void **)&bid); >++ ajStrAssS(&karray[i],bid->id); >++ totkeylen += ajStrLen(bid->id); >++ >++ parray[i] = cache->totsize; >++ btreeWriteBucket(cache,cbucket,parray[i]); >++ } >++ >++ cbucket->Nentries = 0; >++ >++ j = 0; >++ while(ajListPop(idlist,(void**)&bid)) >++ { >++ cid = cbucket->Ids[j]; >++ ++j; >++ >++ ajStrAssS(&cid->id,bid->id); >++ cid->dbno = bid->dbno; >++ cid->dups = bid->dups; >++ cid->offset = bid->offset; >++ cid->refoffset = bid->refoffset; >++ >++ ++cbucket->Nentries; >++ ajBtreeIdDel(&bid); >++ } >++ >++ parray[i] = cache->totsize; >++ btreeWriteBucket(cache,cbucket,parray[i]); >++ >++ nkeys = bucketn - 1; >++ >++ v = nkeys; >++ SBT_NKEYS(rbuf,v); >++ v = totkeylen; >++ SBT_TOTLEN(rbuf,v); >++ nodetype = BT_LEAF; >++ v = nodetype; >++ SBT_NODETYPE(rbuf,v); >++ lv = prevsave; >++ SBT_PREV(rbuf,lv); >++ lv = overflow; >++ SBT_OVERFLOW(rbuf,lv); >++ >++ btreeWriteNode(cache,rpage,karray,parray,nkeys); >++ rpage->dirty = BT_DIRTY; >++ >++ cbucket->Nentries = maxnperbucket; >++ btreeBucketDel(&cbucket); >++ ajListDel(&idlist); >++ >++ >++ >++ medianless = lblockno; >++ mediangtr = rblockno; >++ >++ >++ if(rootnodetype == BT_ROOT) >++ { >++ ajStrAssS(&karray[0],mediankey); >++ parray[0]=lblockno; >++ parray[1]=rblockno; >++ nkeys = 1; >++ btreeWriteNode(cache,spage,karray,parray,nkeys); >++ spage->dirty = BT_LOCK; >++ >++ btreeDeallocPriArray(cache,arrays); >++ >++ ajStrDel(&mediankey); >++ ++cache->level; >++ return spage; >++ } >++ >++ >++ btreeDeallocPriArray(cache,arrays); >++ >++ page = ajBtreeCacheRead(cache,prevsave); >++ btreeHybInsertKey(cache,page,mediankey,medianless,mediangtr); >++ ajStrDel(&mediankey); >++ >++ page = ajBtreeCacheRead(cache,prevsave); >++ >++ return page; >++} >++ >++ >++ >++ >++/* @funcstatic btreeHybInsertKey ***************************************** >++** >++** Insert a key into a potentially full node >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [u] page [AjPBtpage] original page >++** @param [r] key [const AjPStr] key to insert >++** @param [r] less [ajlong] less-than pointer >++** @param [r] greater [ajlong] greater-than pointer >++** >++** @return [void] >++** @@ >++******************************************************************************/ >++ >++static void btreeHybInsertKey(AjPBtcache cache, AjPBtpage page, >++ const AjPStr key, ajlong less, ajlong greater) >++{ >++ unsigned char *lbuf = NULL; >++ unsigned char *rbuf = NULL; >++ unsigned char *tbuf = NULL; >++ AjPStr *karray = NULL; >++ ajlong *parray = NULL; >++ AjPStr *tkarray = NULL; >++ ajlong *tparray = NULL; >++ >++ AjPBtMem arrays1 = NULL; >++ AjPBtMem arrays2 = NULL; >++ >++ ajint nkeys = 0; >++ ajint order = 0; >++ ajint keypos = 0; >++ ajint rkeyno = 0; >++ >++ ajint i = 0; >++ ajint n = 0; >++ >++ ajint nodetype = 0; >++ AjPBtpage ipage = NULL; >++ AjPBtpage lpage = NULL; >++ AjPBtpage rpage = NULL; >++ AjPBtpage tpage = NULL; >++ >++ ajlong blockno = 0L; >++ ajlong rblockno = 0L; >++ ajlong lblockno = 0L; >++ AjPStr mediankey = NULL; >++ ajlong medianless = 0L; >++ ajlong mediangtr = 0L; >++ ajlong overflow = 0L; >++ ajlong prev = 0L; >++ ajint totlen = 0; >++ >++ ajlong lv = 0L; >++ ajint v = 0; >++ >++ /* ajDebug("In btreeHybInsertKey\n"); */ >++ >++ if(!btreeNodeIsFull(cache,page)) >++ { >++ btreeInsertNonFull(cache,page,key,less,greater); >++ return; >++ } >++ >++ order = cache->order; >++ lbuf = page->buf; >++ GBT_NODETYPE(lbuf,&nodetype); >++ page->dirty = BT_LOCK; >++ >++ if(nodetype == BT_ROOT) >++ { >++ arrays1 = btreeAllocPriArray(cache); >++ karray = arrays1->karray; >++ parray = arrays1->parray; >++ >++ btreeHybSplitRoot(cache); >++ >++ if(page->pageno) >++ page->dirty = BT_DIRTY; >++ btreeGetKeys(cache,lbuf,&karray,&parray); >++ >++ if(strcmp(key->Ptr,karray[0]->Ptr)<0) >++ blockno = parray[0]; >++ else >++ blockno = parray[1]; >++ ipage = ajBtreeCacheRead(cache,blockno); >++ btreeInsertNonFull(cache,ipage,key,less,greater); >++ >++ btreeDeallocPriArray(cache,arrays1); >++ return; >++ } >++ >++ >++ arrays1 = btreeAllocPriArray(cache); >++ karray = arrays1->karray; >++ parray = arrays1->parray; >++ >++ arrays2 = btreeAllocPriArray(cache); >++ tkarray = arrays2->karray; >++ tparray = arrays2->parray; >++ >++ mediankey = ajStrNew(); >++ >++ lpage = page; >++ lbuf = lpage->buf; >++ >++ btreeGetKeys(cache,lbuf,&karray,&parray); >++ >++ GBT_BLOCKNUMBER(lbuf,&lblockno); >++ rblockno = cache->totsize; >++ rpage = ajBtreeCacheWrite(cache,rblockno); >++ rpage->dirty = BT_LOCK; >++ rpage->pageno = cache->totsize; >++ cache->totsize += cache->pagesize; >++ rbuf = rpage->buf; >++ lv = rblockno; >++ SBT_BLOCKNUMBER(rbuf,lv); >++ >++ >++ GBT_PREV(lbuf,&prev); >++ lv = prev; >++ SBT_PREV(rbuf,lv); >++ >++ nkeys = order - 1; >++ keypos = nkeys / 2; >++ if(!(nkeys % 2)) >++ --keypos; >++ >++ ajStrAssS(&mediankey,karray[keypos]); >++ medianless = lblockno; >++ mediangtr = rblockno; >++ >++ >++ GBT_NODETYPE(lbuf,&nodetype); >++ v = nodetype; >++ SBT_NODETYPE(rbuf,v); >++ lv = overflow; >++ SBT_OVERFLOW(rbuf,lv); >++ >++ >++ totlen = 0; >++ for(i=0;i<keypos;++i) >++ { >++ ajStrAssS(&tkarray[i],karray[i]); >++ totlen += ajStrLen(karray[i]); >++ tparray[i] = parray[i]; >++ } >++ tparray[i] = parray[i]; >++ v = totlen; >++ SBT_TOTLEN(lbuf,v); >++ n = i; >++ v = n; >++ SBT_NKEYS(lbuf,v); >++ btreeWriteNode(cache,lpage,tkarray,tparray,i); >++ >++ >++ >++ for(i=0;i<n+1;++i) >++ { >++ tpage = ajBtreeCacheRead(cache,tparray[i]); >++ tbuf = tpage->buf; >++ lv = lblockno; >++ SBT_PREV(tbuf,lv); >++ tpage->dirty = BT_DIRTY; >++ } >++ >++ >++ totlen = 0; >++ for(i=keypos+1;i<nkeys;++i) >++ { >++ ajStrAssS(&tkarray[i-(keypos+1)],karray[i]); >++ totlen += ajStrLen(karray[i]); >++ tparray[i-(keypos+1)] = parray[i]; >++ } >++ tparray[i-(keypos+1)] = parray[i]; >++ v = totlen; >++ SBT_TOTLEN(rbuf,v); >++ rkeyno = (nkeys-keypos) - 1; >++ v = rkeyno; >++ SBT_NKEYS(rbuf,v); >++ rpage->dirty = BT_DIRTY; >++ btreeWriteNode(cache,rpage,tkarray,tparray,rkeyno); >++ >++ >++ for(i=0;i<rkeyno+1;++i) >++ { >++ tpage = ajBtreeCacheRead(cache,tparray[i]); >++ tbuf = tpage->buf; >++ lv = rblockno; >++ SBT_PREV(tbuf,lv); >++ tpage->dirty = BT_DIRTY; >++ } >++ >++ >++ ipage = rpage; >++ if(strcmp(key->Ptr,mediankey->Ptr)<0) >++ ipage = lpage; >++ >++ btreeInsertNonFull(cache,ipage,key,less,greater); >++ >++ >++ btreeDeallocPriArray(cache,arrays1); >++ btreeDeallocPriArray(cache,arrays2); >++ >++ ipage = ajBtreeCacheRead(cache,prev); >++ >++ btreeHybInsertKey(cache,ipage,mediankey,medianless,mediangtr); >++ ajStrDel(&mediankey); >++ >++ return; >++} >++ >++ >++ >++ >++/* @funcstatic btreeHybSplitRoot ***************************************** >++** >++** Split the root node >++** >++** @param [u] cache [AjPBtcache] cache >++** >++** @return [void] >++** @@ >++******************************************************************************/ >++ >++static void btreeHybSplitRoot(AjPBtcache cache) >++{ >++ AjPBtpage rootpage = NULL; >++ AjPBtpage rpage = NULL; >++ AjPBtpage lpage = NULL; >++ AjPBtpage tpage = NULL; >++ >++ AjPStr *karray = NULL; >++ AjPStr *tkarray = NULL; >++ ajlong *parray = NULL; >++ ajlong *tparray = NULL; >++ AjPBtMem arrays1 = NULL; >++ AjPBtMem arrays2 = NULL; >++ >++ ajint order = 0; >++ ajint nkeys = 0; >++ ajint keypos = 0; >++ >++ ajlong rblockno = 0L; >++ ajlong lblockno = 0L; >++ >++ AjPStr key = NULL; >++ ajint i; >++ >++ unsigned char *rootbuf = NULL; >++ unsigned char *rbuf = NULL; >++ unsigned char *lbuf = NULL; >++ unsigned char *tbuf = NULL; >++ >++ ajint nodetype = 0; >++ ajlong overflow = 0L; >++ ajlong zero = 0L; >++ ajint totlen = 0; >++ ajint rkeyno = 0; >++ ajint n = 0; >++ >++ ajlong lv = 0L; >++ ajint v = 0; >++ >++ >++ /* ajDebug("In btreeHybSplitRoot\n"); */ >++ >++ order = cache->order; >++ >++ arrays1 = btreeAllocPriArray(cache); >++ karray = arrays1->karray; >++ parray = arrays1->parray; >++ >++ arrays2 = btreeAllocPriArray(cache); >++ tkarray = arrays2->karray; >++ tparray = arrays2->parray; >++ >++ key = ajStrNew(); >++ >++ rootpage = btreeCacheLocate(cache,0L); >++ if(!rootpage) >++ ajFatal("Root page has been unlocked 1"); >++ >++ rootbuf = rootpage->buf; >++ >++ nkeys = order - 1; >++ >++ keypos = nkeys / 2; >++ if(!(nkeys % 2)) >++ --keypos; >++ >++ >++ rblockno = cache->totsize; >++ rpage = ajBtreeCacheWrite(cache,rblockno); >++ rpage->dirty = BT_LOCK; >++ rpage->pageno = cache->totsize; >++ cache->totsize += cache->pagesize; >++ >++ lblockno = cache->totsize; >++ lpage = ajBtreeCacheWrite(cache,lblockno); >++ lpage->pageno = cache->totsize; >++ cache->totsize += cache->pagesize; >++ >++ lv = rblockno; >++ SBT_BLOCKNUMBER(rpage->buf,lv); >++ lv = lblockno; >++ SBT_BLOCKNUMBER(lpage->buf,lv); >++ >++ if(!cache->level) >++ { >++ lv = zero; >++ SBT_LEFT(lpage->buf,lv); >++ lv = rblockno; >++ SBT_RIGHT(lpage->buf,lv); >++ lv = lblockno; >++ SBT_LEFT(rpage->buf,lv); >++ lv = zero; >++ SBT_RIGHT(rpage->buf,lv); >++ } >++ >++ btreeGetKeys(cache,rootbuf,&karray,&parray); >++ >++ /* Get key for root node and write new root node */ >++ ajStrAssS(&tkarray[0],karray[keypos]); >++ tparray[0] = lblockno; >++ tparray[1] = rblockno; >++ >++ >++ n = 1; >++ v = n; >++ SBT_NKEYS(rootbuf,v); >++ btreeWriteNode(cache,rootpage,tkarray,tparray,1); >++ rootpage->dirty = BT_LOCK; >++ >++ rbuf = rpage->buf; >++ lbuf = lpage->buf; >++ >++ if(cache->level) >++ nodetype = BT_INTERNAL; >++ else >++ nodetype = BT_LEAF; >++ >++ v = nodetype; >++ SBT_NODETYPE(rbuf,v); >++ v = nodetype; >++ SBT_NODETYPE(lbuf,v); >++ lv = overflow; >++ SBT_OVERFLOW(rbuf,lv); >++ lv = overflow; >++ SBT_PREV(rbuf,lv); >++ lv = overflow; >++ SBT_OVERFLOW(lbuf,lv); >++ lv = overflow; >++ SBT_PREV(lbuf,lv); >++ >++ totlen = 0; >++ for(i=0;i<keypos;++i) >++ { >++ ajStrAssS(&tkarray[i],karray[i]); >++ totlen += ajStrLen(karray[i]); >++ tparray[i] = parray[i]; >++ } >++ tparray[i] = parray[i]; >++ v = totlen; >++ SBT_TOTLEN(lbuf,v); >++ n = i; >++ v = n; >++ SBT_NKEYS(lbuf,v); >++ btreeWriteNode(cache,lpage,tkarray,tparray,i); >++ >++ for(i=0;i<n+1;++i) >++ { >++ tpage = ajBtreeCacheRead(cache,tparray[i]); >++ tbuf = tpage->buf; >++ lv = lblockno; >++ SBT_PREV(tbuf,lv); >++ tpage->dirty = BT_DIRTY; >++ } >++ >++ totlen = 0; >++ for(i=keypos+1;i<nkeys;++i) >++ { >++ ajStrAssS(&tkarray[i-(keypos+1)],karray[i]); >++ totlen += ajStrLen(karray[i]); >++ tparray[i-(keypos+1)] = parray[i]; >++ } >++ tparray[i-(keypos+1)] = parray[i]; >++ v = totlen; >++ SBT_TOTLEN(rbuf,v); >++ rkeyno = (nkeys-keypos) - 1; >++ v = rkeyno; >++ SBT_NKEYS(rbuf,v); >++ rpage->dirty = BT_DIRTY; >++ btreeWriteNode(cache,rpage,tkarray,tparray,rkeyno); >++ >++ for(i=0;i<rkeyno+1;++i) >++ { >++ tpage = ajBtreeCacheRead(cache,tparray[i]); >++ tbuf = tpage->buf; >++ lv = rblockno; >++ SBT_PREV(tbuf,lv); >++ tpage->dirty = BT_DIRTY; >++ } >++ >++ >++ btreeDeallocPriArray(cache,arrays1); >++ btreeDeallocPriArray(cache,arrays2); >++ >++ ++cache->level; >++ >++ ajStrDel(&key); >++ >++ return; >++} >++ >++ >++ >++ >++/* @func ajBtreeHybInsertId ********************************************* >++** >++** Insert an ID structure into the tree >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [r] id [const AjPBtId] Id object >++** >++** @return [void] pointer to a page >++** @@ >++******************************************************************************/ >++ >++void ajBtreeHybInsertId(AjPBtcache cache, AjPBtHybrid hyb) >++{ >++ AjPBtpage spage = NULL; >++ AjPBtpage parent = NULL; >++ AjPStr key = NULL; >++ const char *ckey = NULL; >++ AjPBucket lbucket = NULL; >++ AjPBucket rbucket = NULL; >++ AjPBucket bucket = NULL; >++ ajlong lblockno = 0L; >++ ajlong rblockno = 0L; >++ ajlong blockno = 0L; >++ ajlong shift = 0L; >++ >++ ajint nkeys = 0; >++ ajint order = 0; >++ >++ ajint nodetype = 0; >++ ajint nentries = 0; >++ >++ AjPStr *karray = NULL; >++ ajlong *parray = NULL; >++ AjPBtMem arrays = NULL; >++ AjBool found = ajFalse; >++ AjPBtId btid = NULL; >++ >++ ajint i; >++ ajint n; >++ >++ unsigned char *buf = NULL; >++ >++ /* ajDebug("In ajBtreeHybInsertId\n"); */ >++ >++ key = ajStrNew(); >++ >++ >++ ajStrAssS(&key,hyb->key1); >++ if(!ajStrLen(key)) >++ { >++ ajStrDel(&key); >++ return; >++ } >++ >++ ckey = ajStrStr(key); >++ spage = ajBtreeHybFindInsert(cache,ckey); >++ buf = spage->buf; >++ >++ GBT_NKEYS(buf,&nkeys); >++ GBT_NODETYPE(buf,&nodetype); >++ >++ order = cache->order; >++ >++ arrays = btreeAllocPriArray(cache); >++ karray = arrays->karray; >++ parray = arrays->parray; >++ >++ if(!nkeys) >++ { >++ lbucket = btreeBucketNew(0); >++ rbucket = btreeBucketNew(0); >++ >++ lblockno = cache->totsize; >++ btreeWriteBucket(cache,lbucket,lblockno); >++ >++ rblockno = cache->totsize; >++ btreeWriteBucket(cache,rbucket,rblockno); >++ >++ parray[0] = lblockno; >++ parray[1] = rblockno; >++ ajStrAssS(karray,key); >++ >++ btreeWriteNode(cache,spage,karray,parray,1); >++ >++ btreeBucketDel(&lbucket); >++ btreeBucketDel(&rbucket); >++ >++ btreeAddToHybBucket(cache,rblockno,hyb); >++ >++ btreeDeallocPriArray(cache,arrays); >++ >++ ajStrDel(&key); >++ >++ return; >++ } >++ >++ >++ /* Search to see whether entry exists */ >++ >++ btreeGetKeys(cache,buf,&karray,&parray); >++ >++ i=0; >++ while(i!=nkeys && strcmp(key->Ptr,karray[i]->Ptr)>=0) >++ ++i; >++ if(i==nkeys) >++ { >++ if(strcmp(key->Ptr,karray[i-1]->Ptr)<0) >++ blockno = parray[i-1]; >++ else >++ blockno = parray[i]; >++ } >++ else >++ blockno = parray[i]; >++ >++ >++ bucket = btreeReadBucket(cache,blockno); >++ >++ nentries = bucket->Nentries; >++ >++ found = ajFalse; >++ >++ for(i=0;i<nentries;++i) >++ if(!strcmp(hyb->key1->Ptr,bucket->Ids[i]->id->Ptr)) >++ { >++ found = ajTrue; >++ break; >++ } >++ >++ >++ if(found) >++ { >++ btid = bucket->Ids[i]; >++ >++ btreeHybDupInsert(cache,hyb,btid); >++ >++ btreeWriteBucket(cache,bucket,blockno); >++ btreeBucketDel(&bucket); >++ >++ btreeDeallocPriArray(cache,arrays); >++ >++ ajStrDel(&key); >++ >++ return; >++ } >++ else >++ btreeBucketDel(&bucket); >++ >++ if(nodetype != BT_ROOT) >++ if((shift = btreeHybInsertShift(cache,&spage,key->Ptr))) >++ blockno = shift; >++ >++ buf = spage->buf; >++ >++ n = btreeNumInBucket(cache,blockno); >++ >++ if(n == cache->nperbucket) >++ { >++ if(btreeHybReorderBuckets(cache,spage)) >++ { >++ GBT_NKEYS(buf,&nkeys); >++ btreeGetKeys(cache,buf,&karray,&parray); >++ >++ i=0; >++ while(i!=nkeys && strcmp(key->Ptr,karray[i]->Ptr)>=0) >++ ++i; >++ >++ if(i==nkeys) >++ { >++ if(strcmp(key->Ptr,karray[i-1]->Ptr)<0) >++ blockno = parray[i-1]; >++ else >++ blockno = parray[i]; >++ } >++ else >++ blockno = parray[i]; >++ } >++ else >++ { >++ parent = btreeHybSplitLeaf(cache,spage); >++ spage = ajBtreeHybFindInsert(cache,ckey); >++ buf = spage->buf; >++ >++ btreeGetKeys(cache,buf,&karray,&parray); >++ >++ GBT_NKEYS(buf,&nkeys); >++ i=0; >++ while(i!=nkeys && strcmp(key->Ptr,karray[i]->Ptr)>=0) >++ ++i; >++ >++ if(i==nkeys) >++ { >++ if(strcmp(key->Ptr,karray[i-1]->Ptr)<0) >++ blockno = parray[i-1]; >++ else >++ blockno = parray[i]; >++ } >++ else >++ blockno = parray[i]; >++ >++ } >++ } >++ >++ >++ btreeAddToHybBucket(cache,blockno,hyb); >++ >++ ++cache->count; >++ >++ btreeDeallocPriArray(cache,arrays); >++ >++ ajStrDel(&key); >++ >++ return; >++} >++ >++ >++ >++ >++static void btreeHybDupInsert(AjPBtcache cache, AjPBtHybrid hyb, >++ AjPBtId btid) >++{ >++ AjPBtpage page; >++ AjPBtpage rpage; >++ ajlong secrootpage = 0L; >++ unsigned char *buf; >++ ajlong right = 0L; >++ AjPBtNumId num = NULL; >++ >++ /* ajDebug("In btreeHybDupInsert\n"); */ >++ >++ if(!btid->dups) >++ { >++ btid->dups = 1; >++ AJNEW0(num); >++ >++ num->offset = btid->offset; >++ num->refoffset = btid->refoffset; >++ num->dbno = btid->dbno; >++ >++ secrootpage = cache->totsize; >++ >++ btid->offset = secrootpage; >++ >++ ajBtreeCreateRootNode(cache,secrootpage); >++ cache->secrootblock = secrootpage; >++ page = ajBtreeCacheWrite(cache,secrootpage); >++ page->dirty = BT_DIRTY; >++ ajBtreeCacheSync(cache,secrootpage); >++ page->dirty = BT_LOCK; >++ >++ rpage = btreeCacheLocate(cache, 0L); >++ rpage->dirty = BT_LOCK; >++ >++ cache->slevel = 0; >++ >++ ajBtreeInsertNum(cache,num,page); >++ >++ num->offset = hyb->offset; >++ num->refoffset = hyb->refoffset; >++ num->dbno = hyb->dbno; >++ >++ ajBtreeInsertNum(cache,num,page); >++ ++btid->dups; >++ >++ AJFREE(num); >++ >++ return; >++ } >++ else >++ { >++ cache->secrootblock = btid->offset; >++ page = ajBtreeCacheWrite(cache,cache->secrootblock); >++ page->dirty = BT_LOCK; >++ buf = page->buf; >++ GBT_RIGHT(buf,&right); >++ cache->slevel = (ajint) right; >++ >++ AJNEW0(num); >++ >++ num->offset = hyb->offset; >++ num->refoffset = hyb->refoffset; >++ num->dbno = hyb->dbno; >++ >++ ajBtreeInsertNum(cache,num,page); >++ >++ AJFREE(num); >++ >++ ++btid->dups; >++ } >++ >++ >++ page->dirty = BT_DIRTY; >++ >++ return; >++} >++ >++ >++ >++ >++/* @funcstatic btreeGetNumKeys ********************************************* >++** >++** Get Keys and Pointers from an internal node >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [u] buf [unsigned char *] page buffer >++** @param [w] keys [ajlong **] keys >++** @param [w] ptrs [ajlong**] ptrs >++** >++** @return [void] >++** @@ >++******************************************************************************/ >++ >++static void btreeGetNumKeys(AjPBtcache cache, unsigned char *buf, >++ ajlong **keys, ajlong **ptrs) >++{ >++ ajlong *karray = NULL; >++ ajlong *parray = NULL; >++ >++ ajint nkeys = 0; >++ unsigned char *pptr = NULL; >++ ajint i; >++ >++ /* ajDebug("In btreeGetNumKeys\n"); */ >++ >++ >++ karray = *keys; >++ parray = *ptrs; >++ >++ pptr = PBT_KEYLEN(buf); >++ GBT_NKEYS(buf,&nkeys); >++ if(!nkeys) >++ ajFatal("GetNumKeys: No keys in node"); >++ >++ for(i=0;i<nkeys;++i) >++ { >++ BT_GETAJLONG(pptr,&karray[i]); >++ pptr += sizeof(ajlong); >++ } >++ >++ for(i=0;i<nkeys;++i) >++ { >++ BT_GETAJLONG(pptr,&parray[i]); >++ pptr += sizeof(ajlong); >++ } >++ >++ BT_GETAJLONG(pptr,&parray[i]); >++ >++ return; >++} >++ >++ >++ >++ >++/* @funcstatic btreeWriteNumNode ******************************************* >++** >++** Write an internal node >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [u] spage [AjPBtpage] buffer >++** @param [r] keys [AjPStr const *] keys >++** @param [r] ptrs [const ajlong*] page pointers >++** @param [r] nkeys [ajint] number of keys >++ >++** >++** @return [void] >++** @@ >++******************************************************************************/ >++ >++static void btreeWriteNumNode(AjPBtcache cache, AjPBtpage spage, >++ const ajlong *keys, const ajlong *ptrs, >++ ajint nkeys) >++{ >++ unsigned char *pptr = NULL; >++ unsigned char *buf; >++ >++ ajint tnkeys = 0; >++ >++ ajlong aspace = 0L; >++ ajlong lv = 0L; >++ ajlong overflow = 0L; >++ ajint i; >++ >++ >++ /* ajDebug("In btreeWriteNumNode\n"); */ >++ >++ buf = spage->buf; >++ >++ tnkeys = nkeys; >++ SBT_NKEYS(buf,tnkeys); >++ >++ pptr = PBT_KEYLEN(buf); >++ aspace = 2 * nkeys * sizeof(ajlong) + sizeof(ajlong); >++ if((pptr+aspace)-buf > cache->pagesize) >++ ajFatal("WriteNumNode: too many keys for available pagesize"); >++ >++ for(i=0;i<nkeys;++i) >++ { >++ lv = keys[i]; >++ BT_SETAJLONG(pptr,lv); >++ pptr += sizeof(ajlong); >++ } >++ >++ for(i=0;i<nkeys;++i) >++ { >++ lv = ptrs[i]; >++ BT_SETAJLONG(pptr,lv); >++ pptr += sizeof(ajlong); >++ } >++ >++ lv = ptrs[i]; >++ BT_SETAJLONG(pptr,lv); >++ >++ spage->dirty = BT_DIRTY; >++ >++ overflow = 0L; >++ SBT_OVERFLOW(buf,overflow); >++ >++ >++ return; >++} >++ >++ >++ >++ >++/* @funcstatic btreeWriteNumBucket ******************************************* >++** >++** Write index bucket object to the cache given a disc page number >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [r] bucket [const AjPBucket] bucket >++** @param [r] pageno [ajlong] page number >++** >++** @return [void] >++** @@ >++******************************************************************************/ >++ >++static void btreeWriteNumBucket(AjPBtcache cache, const AjPNumBucket bucket, >++ ajlong pageno) >++{ >++ AjPBtpage page = NULL; >++ unsigned char *buf = NULL; >++ unsigned char *pptr = NULL; >++ >++ ajint v = 0; >++ ajint i = 0; >++ ajlong lv = 0L; >++ ajint nentries = 0; >++ ajlong overflow = 0L; >++ >++ /* ajDebug("In btreeWriteNumBucket\n"); */ >++ >++ if(pageno == cache->totsize) >++ { >++ page = ajBtreeCacheWrite(cache,pageno); >++ page->pageno = cache->totsize; >++ cache->totsize += cache->pagesize; >++ buf = page->buf; >++ overflow = 0L; >++ lv = overflow; >++ SBT_BUCKOVERFLOW(buf,lv); >++ } >++ else >++ { >++ page = ajBtreeCacheRead(cache,pageno); >++ buf = page->buf; >++ GBT_BUCKOVERFLOW(buf,&overflow); >++ } >++ >++ v = BT_BUCKET; >++ SBT_BUCKNODETYPE(buf,v); >++ page->dirty = BT_LOCK; >++ >++ nentries = bucket->Nentries; >++ v = nentries; >++ SBT_BUCKNENTRIES(buf,v); >++ >++ pptr = PBT_BUCKKEYLEN(buf); >++ >++ for(i=0;i<nentries;++i) >++ { >++ lv = bucket->NumId[i]->offset; >++ BT_SETAJLONG(pptr,lv); >++ pptr += sizeof(ajlong); >++ lv = bucket->NumId[i]->refoffset; >++ BT_SETAJLONG(pptr,lv); >++ pptr += sizeof(ajlong); >++ v = bucket->NumId[i]->dbno; >++ BT_SETAJINT(pptr,v); >++ pptr += sizeof(ajint); >++ } >++ >++ lv = 0L; >++ SBT_BUCKOVERFLOW(buf,lv); >++ page->dirty = BT_DIRTY; >++ >++ return; >++} >++ >++ >++ >++ >++/* @funcstatic btreeReadNumBucket ********************************************* >++** >++** Constructor for index bucket given a disc page number >++** Creates one empty key slot for possible addition >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [r] pageno [ajlong] page number >++** >++** @return [AjPNumBucket] bucket >++** @@ >++******************************************************************************/ >++ >++static AjPNumBucket btreeReadNumBucket(AjPBtcache cache, ajlong pageno) >++{ >++ AjPNumBucket bucket = NULL; >++ AjPBtpage page = NULL; >++ unsigned char *buf = NULL; >++ unsigned char *pptr = NULL; >++ ajint nodetype = 0; >++ ajint nentries = 0; >++ ajlong overflow = 0L; >++ ajint dirtysave = 0; >++ >++ ajint i; >++ >++ /* ajDebug("In btreeReadNumBucket\n"); */ >++ >++ if(pageno == cache->secrootblock) >++ ajFatal("ReadNumBucket: cannot read bucket from a root page"); >++ >++ page = ajBtreeCacheRead(cache,pageno); >++ dirtysave = page->dirty; >++ page->dirty = BT_LOCK; >++ buf = page->buf; >++ >++ GBT_BUCKNODETYPE(buf,&nodetype); >++ if(nodetype != BT_BUCKET) >++ ajFatal("ReadNumBucket: Nodetype mismatch. Not bucket (%d)",nodetype); >++ >++ GBT_BUCKNENTRIES(buf,&nentries); >++ if(nentries > cache->snperbucket) >++ ajFatal("ReadNumBucket: Bucket too full"); >++ >++ GBT_BUCKOVERFLOW(buf,&overflow); >++ >++ AJNEW0(bucket); >++ bucket->NodeType = nodetype; >++ bucket->Nentries = nentries; >++ bucket->Overflow = overflow; >++ >++ AJCNEW0(bucket->NumId,nentries+1); >++ for(i=0;i<nentries;++i) >++ AJNEW0(bucket->NumId[i]); >++ >++ >++ pptr = PBT_BUCKKEYLEN(buf); >++ >++ for(i=0;i<nentries;++i) >++ { >++ BT_GETAJLONG(pptr,&bucket->NumId[i]->offset); >++ pptr += sizeof(ajlong); >++ BT_GETAJLONG(pptr,&bucket->NumId[i]->refoffset); >++ pptr += sizeof(ajlong); >++ BT_GETAJINT(pptr,&bucket->NumId[i]->dbno); >++ pptr += sizeof(ajint); >++ } >++ >++ page->dirty = dirtysave; >++ >++ return bucket; >++} >++ >++ >++ >++ >++/* @funcstatic btreeNumBucketDel ********************************************* >++** >++** Delete a bucket object >++** >++** @param [w] thys [AjPNumBucket*] bucket >++** >++** @return [void] >++** @@ >++******************************************************************************/ >++ >++static void btreeNumBucketDel(AjPNumBucket *thys) >++{ >++ AjPNumBucket pthis = NULL; >++ int i; >++ >++ >++ /* ajDebug("In btreeNumBucketDel\n"); */ >++ >++ if(!thys || !*thys) >++ return; >++ >++ pthis = *thys; >++ >++ if(pthis->Nentries) >++ { >++ for(i=0;i<pthis->Nentries;++i) >++ AJFREE(pthis->NumId[i]); >++ >++ AJFREE(pthis->NumId); >++ } >++ >++ >++ AJFREE(pthis); >++ >++ *thys = NULL; >++ >++ return; >++} >++ >++ >++ >++ >++/* @func ajBtreeNumFindInsert *********************************************** >++** >++** Find the node that should contain a new key for insertion >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [r] key [const ajlong] key to search for >++** >++** @return [AjPBtpage] leaf node where item should be inserted >++** @@ >++******************************************************************************/ >++ >++AjPBtpage ajBtreeNumFindInsert(AjPBtcache cache, const ajlong key) >++{ >++ AjPBtpage root = NULL; >++ AjPBtpage ret = NULL; >++ >++ /* ajDebug("In ajBtreeNumFindInsert\n"); */ >++ >++ /* The root node should always be in the cache (BT_LOCKed) */ >++ root = btreeCacheLocate(cache,cache->secrootblock); >++ >++ /* ajDebug("cache->slevel = %d root=%d\n",cache->slevel,(ajint)root); */ >++ >++ >++ if(!cache->slevel) >++ return root; >++ >++ ret = btreeNumFindINode(cache,root,key); >++ >++ return ret; >++} >++ >++ >++ >++ >++/* @funcstatic btreeNumFindINode ********************************************** >++** >++** Recursive search for insert node in a secondary tree >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [u] page [AjPBtpage] page >++** @param [r] item [const ajlong] key to search for >++** >++** @return [AjPBtpage] leaf node where item should be inserted >++** @@ >++******************************************************************************/ >++ >++static AjPBtpage btreeNumFindINode(AjPBtcache cache, AjPBtpage page, >++ const ajlong item) >++{ >++ AjPBtpage ret = NULL; >++ AjPBtpage pg = NULL; >++ >++ unsigned char *buf = NULL; >++ ajint status = 0; >++ ajint ival = 0; >++ >++ /* ajDebug("In btreeNumFindINode\n"); */ >++ >++ ret = page; >++ buf = page->buf; >++ GBT_NODETYPE(buf,&ival); >++ if(ival != BT_LEAF) >++ { >++ status = ret->dirty; >++ ret->dirty = BT_LOCK; /* Lock in case of lots of overflow pages */ >++ pg = btreeNumPageFromKey(cache,buf,item); >++ ret->dirty = status; >++ ret = btreeNumFindINode(cache,pg,item); >++ } >++ >++ return ret; >++} >++ >++ >++ >++ >++/* @funcstatic btreeNumPageFromKey ******************************************* >++** >++** Return next lower index page given a key in a secondary tree >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [u] buf [unsigned char *] page buffer >++** @param [r] key [const ajlong] key to search for >++** >++** @return [AjPBtpage] pointer to a page >++** @@ >++******************************************************************************/ >++ >++static AjPBtpage btreeNumPageFromKey(AjPBtcache cache, unsigned char *buf, >++ const ajlong key) >++{ >++ unsigned char *rootbuf = NULL; >++ ajint nkeys = 0; >++ ajint order = 0; >++ ajint i; >++ >++ ajlong blockno = 0L; >++ ajlong *karray = NULL; >++ ajlong *parray = NULL; >++ AjPBtpage page = NULL; >++ AjPBtMem array = NULL; >++ >++ /* ajDebug("In btreeNumPageFromKey\n"); */ >++ >++ rootbuf = buf; >++ >++ >++ GBT_NKEYS(rootbuf,&nkeys); >++ order = cache->sorder; >++ >++ array = btreeAllocSecArray(cache); >++ karray = array->overflows; >++ parray = array->parray; >++ >++ btreeGetNumKeys(cache,rootbuf,&karray,&parray); >++ i = 0; >++ while(i!=nkeys && key >= karray[i]) >++ ++i; >++ if(i==nkeys) >++ { >++ if(key < karray[i-1]) >++ blockno = parray[i-1]; >++ else >++ blockno = parray[i]; >++ } >++ else >++ blockno = parray[i]; >++ >++ btreeDeallocSecArray(cache,array); >++ >++ page = ajBtreeCacheRead(cache,blockno); >++ >++ return page; >++} >++ >++ >++ >++ >++/* @funcstatic btreeAddToNumBucket ******************************************* >++** >++** Add offset info to a bucket >++** Only called if there is room in the bucket >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [r] pageno [ajlong] page number of bucket >++** @param [r] num [const AjPBtNumId] ID info >++** >++** @return [void] >++** @@ >++******************************************************************************/ >++ >++static void btreeAddToNumBucket(AjPBtcache cache, ajlong pageno, >++ const AjPBtNumId num) >++{ >++ AjPNumBucket bucket = NULL; >++ ajint nentries; >++ >++ /* ajDebug("In btreeAddToNumBucket\n"); */ >++ >++ bucket = btreeReadNumBucket(cache,pageno); >++ >++ nentries = bucket->Nentries; >++ >++ /* Reading a bucket always gives one extra ID position */ >++ >++ AJNEW0(bucket->NumId[nentries]); >++ bucket->NumId[nentries]->offset = num->offset; >++ bucket->NumId[nentries]->refoffset = num->refoffset; >++ bucket->NumId[nentries]->dbno = num->dbno; >++ >++ >++ ++bucket->Nentries; >++ >++ btreeWriteNumBucket(cache,bucket,pageno); >++ >++ btreeNumBucketDel(&bucket); >++ >++ return; >++} >++ >++ >++ >++ >++/* @funcstatic btreeNumInNumBucket ******************************************* >++** >++** Return number of entries in a bucket >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [r] pageno [ajlong] page number >++** >++** @return [ajint] Number of entries in bucket >++** @@ >++******************************************************************************/ >++ >++static ajint btreeNumInNumBucket(AjPBtcache cache, ajlong pageno) >++{ >++ AjPBtpage page = NULL; >++ unsigned char *buf = NULL; >++ ajint nodetype = 0; >++ ajint nentries = 0; >++ >++ /* ajDebug("In btreeNumInNumBucket\n"); */ >++ >++ if(pageno == cache->secrootblock) >++ ajFatal("NumInNumBucket: Attempt to read bucket from root page\n"); >++ >++ page = ajBtreeCacheRead(cache,pageno); >++ >++ buf = page->buf; >++ >++ GBT_BUCKNODETYPE(buf,&nodetype); >++ if(nodetype != BT_BUCKET) >++ ajFatal("NumInNumBucket: NodeType mismatch. Not bucket (%d)", >++ nodetype); >++ >++ GBT_BUCKNENTRIES(buf,&nentries); >++ >++ return nentries; >++} >++ >++ >++ >++ >++/* @funcstatic btreeNumBucketNew ********************************************* >++** >++** Construct a bucket object >++** >++** @param [r] n [ajint] Number of IDs >++** >++** @return [AjPBucket] initialised disc block cache structure >++** @@ >++******************************************************************************/ >++ >++static AjPNumBucket btreeNumBucketNew(ajint n) >++{ >++ AjPNumBucket bucket = NULL; >++ ajint i; >++ >++ /* ajDebug("In btreeNumBucketNew\n"); */ >++ >++ AJNEW0(bucket); >++ >++ if(n) >++ { >++ AJCNEW0(bucket->NumId,n); >++ for(i=0;i<n;++i) >++ AJNEW0(bucket->NumId[i]); >++ } >++ >++ bucket->NodeType = BT_BUCKET; >++ bucket->Nentries = n; >++ bucket->Overflow = 0L; >++ >++ return bucket; >++} >++ >++ >++ >++ >++/* @funcstatic btreeReorderNumBuckets ***************************************** >++** >++** Re-order leaf buckets >++** Must only be called if one of the buckets is full >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [u] leaf [AjPBtpage] leaf page >++** >++** @return [AjBool] true if reorder was successful i.e. leaf not full >++** @@ >++******************************************************************************/ >++ >++static AjBool btreeReorderNumBuckets(AjPBtcache cache, AjPBtpage leaf) >++{ >++ ajint nkeys = 0; >++ unsigned char *lbuf = NULL; >++ >++ ajlong *keys = NULL; >++ ajlong *ptrs = NULL; >++ >++ AjPNumBucket *buckets = NULL; >++ >++ ajint i = 0; >++ ajint j = 0; >++ >++ ajint order; >++ ajint bentries = 0; >++ ajint totalkeys = 0; >++ ajint nperbucket = 0; >++ ajint maxnperbucket = 0; >++ ajint count = 0; >++ ajint keylimit = 0; >++ ajint bucketn = 0; >++ ajint bucketlimit = 0; >++ ajint nodetype = 0; >++ >++ AjPList idlist = NULL; >++ ajint dirtysave = 0; >++ AjPBtNumId bid = NULL; >++ AjPNumBucket cbucket = NULL; >++ AjPBtNumId cid = NULL; >++ >++ ajint v = 0; >++ AjPBtMem array = NULL; >++ >++ /* ajDebug("In btreeReorderNumBuckets\n"); */ >++ >++ dirtysave = leaf->dirty; >++ >++ leaf->dirty = BT_LOCK; >++ lbuf = leaf->buf; >++ >++ GBT_NODETYPE(lbuf,&nodetype); >++ >++ order = cache->sorder; >++ nperbucket = cache->snperbucket; >++ >++ >++ array = btreeAllocSecArray(cache); >++ keys = array->overflows; >++ ptrs = array->parray; >++ >++ /* Read keys/ptrs */ >++ >++ btreeGetNumKeys(cache,lbuf,&keys,&ptrs); >++ >++ GBT_NKEYS(lbuf,&nkeys); >++ >++ >++ if(!nkeys) >++ ajFatal("NumBucketReorder: Attempt to reorder empty leaf"); >++ >++ for(i=0;i<nkeys;++i) >++ totalkeys += btreeNumInNumBucket(cache,ptrs[i]); >++ totalkeys += btreeNumInNumBucket(cache,ptrs[i]); >++ >++ /* Set the number of entries per bucket to approximately half full */ >++ maxnperbucket = nperbucket >> 1; >++ >++ if(!maxnperbucket) >++ ++maxnperbucket; >++ >++ /* Work out the number of new buckets needed */ >++ bucketn = (totalkeys / maxnperbucket); >++ if(totalkeys % maxnperbucket) >++ ++bucketn; >++ >++ if(bucketn > order) >++ { >++ btreeDeallocSecArray(cache,array); >++ >++ leaf->dirty = dirtysave; >++ return ajFalse; >++ } >++ >++ >++ /* Read buckets */ >++ AJCNEW0(buckets,nkeys+1); >++ keylimit = nkeys + 1; >++ >++ for(i=0;i<keylimit;++i) >++ buckets[i] = btreeReadNumBucket(cache,ptrs[i]); >++ >++ >++ /* Read IDs from all buckets and push to list and sort (increasing id) */ >++ idlist = ajListNew(); >++ >++ for(i=0;i<keylimit;++i) >++ { >++ bentries = buckets[i]->Nentries; >++ for(j=0;j<bentries;++j) >++ ajListPush(idlist,(void *)buckets[i]->NumId[j]); >++ >++ AJFREE(buckets[i]->NumId); >++ AJFREE(buckets[i]); >++ } >++ ajListSort(idlist,btreeNumIdCompare); >++ AJFREE(buckets); >++ >++ cbucket = btreeNumBucketNew(maxnperbucket); >++ bucketlimit = bucketn - 1; >++ >++ for(i=0;i<bucketlimit;++i) >++ { >++ cbucket->Nentries = 0; >++ >++ count = 0; >++ while(count!=maxnperbucket) >++ { >++ ajListPop(idlist,(void **)&bid); >++ >++ cid = cbucket->NumId[count]; >++ cid->dbno = bid->dbno; >++ cid->offset = bid->offset; >++ cid->refoffset = bid->refoffset; >++ >++ ++cbucket->Nentries; >++ ++count; >++ AJFREE(bid); >++ } >++ >++ >++ ajListPeek(idlist,(void **)&bid); >++ keys[i] = bid->offset; >++ >++ if(!ptrs[i]) >++ ptrs[i] = cache->totsize; >++ btreeWriteNumBucket(cache,cbucket,ptrs[i]); >++ } >++ >++ >++ /* Deal with greater-than bucket */ >++ >++ cbucket->Nentries = 0; >++ >++ count = 0; >++ while(ajListPop(idlist,(void **)&bid)) >++ { >++ cid = cbucket->NumId[count]; >++ cid->dbno = bid->dbno; >++ cid->offset = bid->offset; >++ cid->refoffset = bid->refoffset; >++ >++ ++cbucket->Nentries; >++ ++count; >++ AJFREE(bid); >++ } >++ >++ >++ if(!ptrs[i]) >++ ptrs[i] = cache->totsize; >++ btreeWriteNumBucket(cache,cbucket,ptrs[i]); >++ >++ cbucket->Nentries = maxnperbucket; >++ btreeNumBucketDel(&cbucket); >++ >++ /* Now write out a modified leaf with new keys/ptrs */ >++ >++ nkeys = bucketn - 1; >++ v = nkeys; >++ SBT_NKEYS(lbuf,v); >++ >++ btreeWriteNumNode(cache,leaf,keys,ptrs,nkeys); >++ >++ leaf->dirty = BT_DIRTY; >++ if(nodetype == BT_ROOT) >++ leaf->dirty = BT_LOCK; >++ >++ btreeDeallocSecArray(cache,array); >++ >++ ajListDel(&idlist); >++ >++ return ajTrue; >++} >++ >++ >++ >++ >++/* @funcstatic btreeNumNodeIsFull ***************************************** >++** >++** Tests whether a node is full of keys >++** >++** @param [r] cache [const AjPBtcache] cache >++** @param [u] page [AjPBtpage] original page >++** >++** @return [AjBool] true if full >++** @@ >++******************************************************************************/ >++ >++static AjBool btreeNumNodeIsFull(const AjPBtcache cache, AjPBtpage page) >++{ >++ unsigned char *buf = NULL; >++ ajint nkeys = 0; >++ >++ /* ajDebug("In btreeNumNodeIsFull\n"); */ >++ >++ buf = page->buf; >++ GBT_NKEYS(buf,&nkeys); >++ >++ if(nkeys == cache->sorder - 1) >++ return ajTrue; >++ >++ return ajFalse; >++} >++ >++ >++ >++ >++/* @funcstatic btreeNumInsertNonFull ***************************************** >++** >++** Insert a key into a non-full node >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [u] page [AjPBtpage] original page >++** @param [r] key [const ajlong] key to insert >++** @param [r] less [ajlong] less-than pointer >++** @param [r] greater [ajlong] greater-than pointer >++** >++** @return [void] >++** @@ >++******************************************************************************/ >++ >++static void btreeNumInsertNonFull(AjPBtcache cache, AjPBtpage page, >++ const ajlong key, ajlong less, >++ ajlong greater) >++{ >++ unsigned char *buf = NULL; >++ ajlong *karray = NULL; >++ ajlong *parray = NULL; >++ ajint nkeys = 0; >++ ajint order = 0; >++ ajint ipos = 0; >++ ajint i; >++ ajint count = 0; >++ >++ ajlong lv = 0L; >++ ajint v = 0; >++ AjPBtMem array = NULL; >++ >++ AjPBtpage ppage = NULL; >++ ajlong pageno = 0L; >++ >++ ajint nodetype = 0; >++ >++ /* ajDebug("In btreeNumInsertNonFull\n"); */ >++ >++ order = cache->sorder; >++ >++ array = btreeAllocSecArray(cache); >++ karray = array->overflows; >++ parray = array->parray; >++ >++ >++ buf = page->buf; >++ GBT_NKEYS(buf,&nkeys); >++ GBT_NODETYPE(buf,&nodetype); >++ >++ btreeGetNumKeys(cache,buf,&karray,&parray); >++ >++ i = 0; >++ while(i!=nkeys && key >= karray[i]) >++ ++i; >++ >++ ipos = i; >++ >++ count = nkeys - ipos; >++ >++ >++ if(ipos == nkeys) >++ { >++ karray[ipos] = key; >++ parray[ipos+1] = greater; >++ parray[ipos] = less; >++ } >++ else >++ { >++ parray[nkeys+1] = parray[nkeys]; >++ >++ for(i=nkeys-1; count>0; --count, --i) >++ { >++ karray[i+1] = karray[i]; >++ parray[i+1] = parray[i]; >++ } >++ >++ karray[ipos] = key; >++ parray[ipos] = less; >++ parray[ipos+1] = greater; >++ } >++ >++ ++nkeys; >++ v = nkeys; >++ SBT_NKEYS(buf,v); >++ >++ btreeWriteNumNode(cache,page,karray,parray,nkeys); >++ if(nodetype == BT_ROOT) >++ page->dirty = BT_LOCK; >++ >++ pageno = page->pageno; >++ ppage = ajBtreeCacheRead(cache,less); >++ lv = pageno; >++ SBT_PREV(ppage->buf,lv); >++ ppage->dirty = BT_DIRTY; >++ ppage = ajBtreeCacheRead(cache,greater); >++ lv = pageno; >++ SBT_PREV(ppage->buf,lv); >++ ppage->dirty = BT_DIRTY; >++ >++ >++ btreeDeallocSecArray(cache,array); >++ >++ if(nodetype != BT_ROOT) >++ btreeNumKeyShift(cache,page); >++ >++ return; >++} >++ >++ >++ >++ >++/* @funcstatic btreeNumInsertKey ********************************************** >++** >++** Insert a key into a potentially full node >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [u] page [AjPBtpage] original page >++** @param [r] key [const ajlong] key to insert >++** @param [r] less [ajlong] less-than pointer >++** @param [r] greater [ajlong] greater-than pointer >++** >++** @return [void] >++** @@ >++******************************************************************************/ >++ >++static void btreeNumInsertKey(AjPBtcache cache, AjPBtpage page, >++ const ajlong key, ajlong less, ajlong greater) >++{ >++ unsigned char *lbuf = NULL; >++ unsigned char *rbuf = NULL; >++ unsigned char *tbuf = NULL; >++ ajlong *karray = NULL; >++ ajlong *parray = NULL; >++ ajlong *tkarray = NULL; >++ ajlong *tparray = NULL; >++ ajint nkeys = 0; >++ ajint order = 0; >++ ajint keypos = 0; >++ ajint rkeyno = 0; >++ >++ ajint i = 0; >++ ajint n = 0; >++ >++ ajint nodetype = 0; >++ AjPBtpage ipage = NULL; >++ AjPBtpage lpage = NULL; >++ AjPBtpage rpage = NULL; >++ AjPBtpage tpage = NULL; >++ >++ ajlong blockno = 0L; >++ ajlong rblockno = 0L; >++ ajlong lblockno = 0L; >++ ajlong mediankey = 0L; >++ ajlong medianless = 0L; >++ ajlong mediangtr = 0L; >++ ajlong overflow = 0L; >++ ajlong prev = 0L; >++ ajint totlen = 0; >++ >++ ajlong lv = 0L; >++ ajint v = 0; >++ AjPBtMem array = NULL; >++ AjPBtMem array2 = NULL; >++ >++ /* ajDebug("In btreeNumInsertKey\n"); */ >++ >++ if(!btreeNumNodeIsFull(cache,page)) >++ { >++ btreeNumInsertNonFull(cache,page,key,less,greater); >++ return; >++ } >++ >++ order = cache->sorder; >++ lbuf = page->buf; >++ GBT_NODETYPE(lbuf,&nodetype); >++ page->dirty = BT_LOCK; >++ >++ if(nodetype == BT_ROOT) >++ { >++ array = btreeAllocSecArray(cache); >++ karray = array->overflows; >++ parray = array->parray; >++ >++ btreeNumSplitRoot(cache); >++ >++ if(page->pageno) >++ page->dirty = BT_DIRTY; >++ btreeGetNumKeys(cache,lbuf,&karray,&parray); >++ >++ if(key < karray[0]) >++ blockno = parray[0]; >++ else >++ blockno = parray[1]; >++ ipage = ajBtreeCacheRead(cache,blockno); >++ btreeNumInsertNonFull(cache,ipage,key,less,greater); >++ >++ btreeDeallocSecArray(cache,array); >++ return; >++ } >++ >++ >++ array = btreeAllocSecArray(cache); >++ karray = array->overflows; >++ parray = array->parray; >++ >++ array2 = btreeAllocSecArray(cache); >++ tkarray = array2->overflows; >++ tparray = array2->parray; >++ >++ >++ lpage = page; >++ lbuf = lpage->buf; >++ >++ btreeGetNumKeys(cache,lbuf,&karray,&parray); >++ >++ GBT_BLOCKNUMBER(lbuf,&lblockno); >++ rblockno = cache->totsize; >++ rpage = ajBtreeCacheWrite(cache,rblockno); >++ rpage->dirty = BT_LOCK; >++ rpage->pageno = cache->totsize; >++ cache->totsize += cache->pagesize; >++ rbuf = rpage->buf; >++ lv = rblockno; >++ SBT_BLOCKNUMBER(rbuf,lv); >++ >++ >++ GBT_PREV(lbuf,&prev); >++ lv = prev; >++ SBT_PREV(rbuf,lv); >++ >++ nkeys = order - 1; >++ keypos = nkeys / 2; >++ if(!(nkeys % 2)) >++ --keypos; >++ >++ mediankey = karray[keypos]; >++ medianless = lblockno; >++ mediangtr = rblockno; >++ >++ >++ GBT_NODETYPE(lbuf,&nodetype); >++ v = nodetype; >++ SBT_NODETYPE(rbuf,v); >++ lv = overflow; >++ SBT_OVERFLOW(rbuf,lv); >++ >++ >++ totlen = 0; >++ for(i=0;i<keypos;++i) >++ { >++ tkarray[i] = karray[i]; >++ tparray[i] = parray[i]; >++ } >++ tparray[i] = parray[i]; >++ >++ n = i; >++ v = n; >++ SBT_NKEYS(lbuf,v); >++ btreeWriteNumNode(cache,lpage,tkarray,tparray,i); >++ >++ >++ >++ for(i=0;i<n+1;++i) >++ { >++ tpage = ajBtreeCacheRead(cache,tparray[i]); >++ tbuf = tpage->buf; >++ lv = lblockno; >++ SBT_PREV(tbuf,lv); >++ tpage->dirty = BT_DIRTY; >++ } >++ >++ >++ totlen = 0; >++ for(i=keypos+1;i<nkeys;++i) >++ { >++ tkarray[i-(keypos+1)] = karray[i]; >++ tparray[i-(keypos+1)] = parray[i]; >++ } >++ tparray[i-(keypos+1)] = parray[i]; >++ >++ rkeyno = (nkeys-keypos) - 1; >++ v = rkeyno; >++ SBT_NKEYS(rbuf,v); >++ rpage->dirty = BT_DIRTY; >++ btreeWriteNumNode(cache,rpage,tkarray,tparray,rkeyno); >++ >++ >++ for(i=0;i<rkeyno+1;++i) >++ { >++ tpage = ajBtreeCacheRead(cache,tparray[i]); >++ tbuf = tpage->buf; >++ lv = rblockno; >++ SBT_PREV(tbuf,lv); >++ tpage->dirty = BT_DIRTY; >++ } >++ >++ >++ ipage = rpage; >++ if(key < mediankey) >++ ipage = lpage; >++ >++ btreeNumInsertNonFull(cache,ipage,key,less,greater); >++ >++ >++ btreeDeallocSecArray(cache,array); >++ btreeDeallocSecArray(cache,array2); >++ >++ ipage = ajBtreeCacheRead(cache,prev); >++ >++ btreeNumInsertKey(cache,ipage,mediankey,medianless,mediangtr); >++ >++ return; >++} >++ >++ >++ >++ >++/* @funcstatic btreeNumSplitRoot ***************************************** >++** >++** Split s secondary root node >++** >++** @param [u] cache [AjPBtcache] cache >++** >++** @return [void] >++** @@ >++******************************************************************************/ >++ >++static void btreeNumSplitRoot(AjPBtcache cache) >++{ >++ AjPBtpage rootpage = NULL; >++ AjPBtpage rpage = NULL; >++ AjPBtpage lpage = NULL; >++ AjPBtpage tpage = NULL; >++ >++ ajlong *karray = NULL; >++ ajlong *tkarray = NULL; >++ ajlong *parray = NULL; >++ ajlong *tparray = NULL; >++ >++ ajint order = 0; >++ ajint nkeys = 0; >++ ajint keypos = 0; >++ >++ ajlong rblockno = 0L; >++ ajlong lblockno = 0L; >++ >++ ajlong right; >++ >++ ajint i; >++ >++ unsigned char *rootbuf = NULL; >++ unsigned char *rbuf = NULL; >++ unsigned char *lbuf = NULL; >++ unsigned char *tbuf = NULL; >++ >++ ajint nodetype = 0; >++ ajlong overflow = 0L; >++ ajlong zero = 0L; >++ ajint rkeyno = 0; >++ ajint n = 0; >++ >++ ajlong lv = 0L; >++ ajint v = 0; >++ >++ AjPBtMem array = NULL; >++ AjPBtMem array2 = NULL; >++ >++ >++ /* ajDebug("In btreeNumSplitRoot\n"); */ >++ >++ order = cache->sorder; >++ >++ array = btreeAllocSecArray(cache); >++ karray = array->overflows; >++ parray = array->parray; >++ >++ array2 = btreeAllocSecArray(cache); >++ tkarray = array2->overflows; >++ tparray = array2->parray; >++ >++ >++ rootpage = btreeCacheLocate(cache,cache->secrootblock); >++ rootbuf = rootpage->buf; >++ >++ nkeys = order - 1; >++ >++ keypos = nkeys / 2; >++ if(!(nkeys % 2)) >++ --keypos; >++ >++ >++ rblockno = cache->totsize; >++ rpage = ajBtreeCacheWrite(cache,rblockno); >++ rpage->pageno = cache->totsize; >++ cache->totsize += cache->pagesize; >++ rpage->dirty = BT_LOCK; >++ >++ lblockno = cache->totsize; >++ lpage = ajBtreeCacheWrite(cache,lblockno); >++ lpage->pageno = cache->totsize; >++ cache->totsize += cache->pagesize; >++ >++ lv = rblockno; >++ SBT_BLOCKNUMBER(rpage->buf,lv); >++ lv = lblockno; >++ SBT_BLOCKNUMBER(lpage->buf,lv); >++ >++ /* Comment this next block out after the beta test */ >++ if(!cache->slevel) >++ { >++ fprintf(stderr,"btreeSplitRootSec: Shouldn't get here\n"); >++ exit(0); >++ lv = zero; >++ SBT_LEFT(lpage->buf,lv); >++ lv = rblockno; >++ SBT_RIGHT(lpage->buf,lv); >++ lv = lblockno; >++ SBT_LEFT(rpage->buf,lv); >++ lv = zero; >++ SBT_RIGHT(rpage->buf,lv); >++ } >++ >++ btreeGetNumKeys(cache,rootbuf,&karray,&parray); >++ >++ /* Get key for root node and write new root node */ >++ tkarray[0] = karray[keypos]; >++ tparray[0] = lblockno; >++ tparray[1] = rblockno; >++ >++ >++ n = 1; >++ v = n; >++ SBT_NKEYS(rootbuf,v); >++ btreeWriteNumNode(cache,rootpage,tkarray,tparray,1); >++ right = (ajlong)(cache->slevel + 1); >++ SBT_RIGHT(rootbuf,right); >++ >++ rootpage->dirty = BT_LOCK; >++ >++ rbuf = rpage->buf; >++ lbuf = lpage->buf; >++ >++ if(cache->slevel) >++ nodetype = BT_INTERNAL; >++ else >++ nodetype = BT_LEAF; >++ >++ v = nodetype; >++ SBT_NODETYPE(rbuf,v); >++ v = nodetype; >++ SBT_NODETYPE(lbuf,v); >++ lv = overflow; >++ SBT_OVERFLOW(rbuf,lv); >++ lv = cache->secrootblock; >++ SBT_PREV(rbuf,lv); >++ lv = overflow; >++ SBT_OVERFLOW(lbuf,lv); >++ lv = cache->secrootblock; >++ SBT_PREV(lbuf,lv); >++ >++ for(i=0;i<keypos;++i) >++ { >++ tkarray[i] = karray[i]; >++ tparray[i] = parray[i]; >++ } >++ tparray[i] = parray[i]; >++ >++ n = i; >++ v = n; >++ SBT_NKEYS(lbuf,v); >++ btreeWriteNumNode(cache,lpage,tkarray,tparray,i); >++ >++ for(i=0;i<n+1;++i) >++ { >++ tpage = ajBtreeCacheRead(cache,tparray[i]); >++ tbuf = tpage->buf; >++ lv = lblockno; >++ SBT_PREV(tbuf,lv); >++ tpage->dirty = BT_DIRTY; >++ } >++ >++ for(i=keypos+1;i<nkeys;++i) >++ { >++ tkarray[i-(keypos+1)] = karray[i]; >++ tparray[i-(keypos+1)] = parray[i]; >++ } >++ tparray[i-(keypos+1)] = parray[i]; >++ >++ rkeyno = (nkeys-keypos) - 1; >++ v = rkeyno; >++ SBT_NKEYS(rbuf,v); >++ rpage->dirty = BT_DIRTY; >++ btreeWriteNumNode(cache,rpage,tkarray,tparray,rkeyno); >++ >++ for(i=0;i<rkeyno+1;++i) >++ { >++ tpage = ajBtreeCacheRead(cache,tparray[i]); >++ tbuf = tpage->buf; >++ lv = rblockno; >++ SBT_PREV(tbuf,lv); >++ tpage->dirty = BT_DIRTY; >++ } >++ >++ >++ ++cache->slevel; >++ >++ btreeDeallocSecArray(cache,array); >++ btreeDeallocSecArray(cache,array2); >++ >++ return; >++} >++ >++ >++ >++ >++/* @funcstatic btreeNumKeyShift ******************************************** >++** >++** Rebalance Nodes on insertion >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [u] tpage [AjPBtpage] page >++** >++** @return [void] >++** @@ >++******************************************************************************/ >++ >++static void btreeNumKeyShift(AjPBtcache cache, AjPBtpage tpage) >++{ >++ unsigned char *tbuf = NULL; >++ unsigned char *pbuf = NULL; >++ unsigned char *sbuf = NULL; >++ unsigned char *buf = NULL; >++ >++ AjPBtpage ppage = NULL; >++ AjPBtpage spage = NULL; >++ AjPBtpage page = NULL; >++ >++ ajint tkeys = 0; >++ ajint pkeys = 0; >++ ajint skeys = 0; >++ ajint order = 0; >++ >++ ajint i; >++ >++ ajlong parent = 0L; >++ >++ ajlong *kTarray = NULL; >++ ajlong *kParray = NULL; >++ ajlong *kSarray = NULL; >++ ajlong *pTarray = NULL; >++ ajlong *pParray = NULL; >++ ajlong *pSarray = NULL; >++ >++ ajint pkeypos = 0; >++ ajint minsize = 0; >++ >++ ajlong lv = 0L; >++ >++ AjPBtMem array = NULL; >++ AjPBtMem array2 = NULL; >++ AjPBtMem array3 = NULL; >++ >++ /* ajDebug("In btreeNumKeyShift\n"); */ >++ >++ tbuf = tpage->buf; >++ >++ GBT_PREV(tbuf,&parent); >++ GBT_NKEYS(tbuf,&tkeys); >++ >++ order = cache->sorder; >++ minsize = order / 2; >++ if(order % 2) >++ ++minsize; >++ >++ if(tkeys <= minsize) >++ return; >++ >++ >++ ppage = ajBtreeCacheRead(cache,parent); >++ pbuf = ppage->buf; >++ GBT_NKEYS(pbuf,&pkeys); >++ >++ array = btreeAllocSecArray(cache); >++ kParray = array->overflows; >++ pParray = array->parray; >++ >++ array2 = btreeAllocSecArray(cache); >++ kSarray = array2->overflows; >++ pSarray = array2->parray; >++ >++ array3 = btreeAllocSecArray(cache); >++ kTarray = array3->overflows; >++ pTarray = array3->parray; >++ >++ >++ btreeGetNumKeys(cache,tbuf,&kTarray,&pTarray); >++ GBT_NKEYS(tbuf,&tkeys); >++ >++ >++ btreeGetNumKeys(cache,pbuf,&kParray,&pParray); >++ i=0; >++ while(pParray[i] != tpage->pageno) >++ ++i; >++ >++ if(i) /* There is another leaf to the left */ >++ { >++ pkeypos = i-1; >++ spage = ajBtreeCacheRead(cache,pParray[pkeypos]); >++ sbuf = spage->buf; >++ GBT_NKEYS(sbuf,&skeys); >++ >++ } >++ >++ if(i && skeys != order-1) /* There is space in the left leaf */ >++ { >++ if(skeys) >++ btreeGetNumKeys(cache,sbuf,&kSarray,&pSarray); >++ >++ kSarray[skeys] = kParray[pkeypos]; >++ pSarray[skeys+1] = pTarray[0]; >++ ++skeys; >++ --tkeys; >++ kParray[pkeypos] = kTarray[0]; >++ for(i=0;i<tkeys;++i) >++ { >++ kTarray[i] = kTarray[i+1]; >++ pTarray[i] = pTarray[i+1]; >++ } >++ pTarray[i] = pTarray[i+1]; >++ pTarray[i+1] = 0L; >++ >++ btreeWriteNumNode(cache,spage,kSarray,pSarray,skeys); >++ btreeWriteNumNode(cache,tpage,kTarray,pTarray,tkeys); >++ btreeWriteNumNode(cache,ppage,kParray,pParray,pkeys); >++ if(!ppage->pageno) >++ ppage->dirty = BT_LOCK; >++ >++ page = ajBtreeCacheRead(cache,pSarray[skeys]); >++ buf = page->buf; >++ lv = spage->pageno; >++ SBT_PREV(buf,lv); >++ page->dirty = BT_DIRTY; >++ >++ >++ btreeDeallocSecArray(cache,array); >++ btreeDeallocSecArray(cache,array2); >++ btreeDeallocSecArray(cache,array3); >++ >++ return; >++ } >++ >++ >++ >++ if(i != pkeys) /* There is a right node */ >++ { >++ pkeypos = i; >++ spage = ajBtreeCacheRead(cache,pParray[pkeypos+1]); >++ sbuf = spage->buf; >++ GBT_NKEYS(sbuf,&skeys); >++ } >++ >++ >++ if(i != pkeys && skeys != order-1) /* Space in the right node */ >++ { >++ if(skeys) >++ btreeGetNumKeys(cache,sbuf,&kSarray,&pSarray); >++ >++ pSarray[skeys+1] = pSarray[skeys]; >++ for(i=skeys-1;i>-1;--i) >++ { >++ kSarray[i+1] = kSarray[i]; >++ pSarray[i+1] = pSarray[i]; >++ } >++ kSarray[0] = kParray[pkeypos]; >++ pSarray[0] = pTarray[tkeys]; >++ kParray[pkeypos] = kTarray[tkeys-1]; >++ ++skeys; >++ --tkeys; >++ pTarray[tkeys+1] = 0L; >++ >++ btreeWriteNumNode(cache,spage,kSarray,pSarray,skeys); >++ btreeWriteNumNode(cache,tpage,kTarray,pTarray,tkeys); >++ btreeWriteNumNode(cache,ppage,kParray,pParray,pkeys); >++ if(!ppage->pageno) >++ ppage->dirty = BT_LOCK; >++ >++ page = ajBtreeCacheRead(cache,pSarray[0]); >++ buf = page->buf; >++ lv = spage->pageno; >++ SBT_PREV(buf,lv); >++ page->dirty = BT_DIRTY; >++ >++ btreeDeallocSecArray(cache,array); >++ btreeDeallocSecArray(cache,array2); >++ btreeDeallocSecArray(cache,array3); >++ >++ return; >++ } >++ >++ >++ btreeDeallocSecArray(cache,array); >++ btreeDeallocSecArray(cache,array2); >++ btreeDeallocSecArray(cache,array3); >++ >++ return; >++} >++ >++ >++ >++ >++/* @funcstatic btreeNumInsertShift ******************************************** >++** >++** Rebalance buckets on insertion >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [u] retpage [AjPBtpage*] page >++** @param [r] key [const ajlong] key >++** >++** @return [ajlong] bucket block or 0L if shift not posible >++** @@ >++******************************************************************************/ >++ >++static ajlong btreeNumInsertShift(AjPBtcache cache, AjPBtpage *retpage, >++ ajlong key) >++{ >++ unsigned char *tbuf = NULL; >++ unsigned char *pbuf = NULL; >++ unsigned char *sbuf = NULL; >++ >++ AjPBtpage ppage = NULL; >++ AjPBtpage spage = NULL; >++ AjPBtpage tpage = NULL; >++ >++ ajint tkeys = 0; >++ ajint pkeys = 0; >++ ajint skeys = 0; >++ ajint order = 0; >++ >++ ajint i; >++ ajint n; >++ >++ ajlong parent = 0L; >++ ajlong blockno = 0L; >++ >++ ajlong *kTarray = NULL; >++ ajlong *kParray = NULL; >++ ajlong *kSarray = NULL; >++ ajlong *pTarray = NULL; >++ ajlong *pParray = NULL; >++ ajlong *pSarray = NULL; >++ >++ ajlong *karray = NULL; >++ ajlong *parray = NULL; >++ >++ ajint ppos = 0; >++ ajint pkeypos = 0; >++ ajint minsize = 0; >++ >++ AjPBtMem array = NULL; >++ AjPBtMem array2 = NULL; >++ AjPBtMem array3 = NULL; >++ >++ >++ >++ /* ajDebug("In btreeNumInsertShift\n"); */ >++ >++ >++ tpage = *retpage; >++ >++ tbuf = tpage->buf; >++ >++ GBT_PREV(tbuf,&parent); >++ GBT_NKEYS(tbuf,&tkeys); >++ >++ >++ order = cache->sorder; >++ minsize = order / 2; >++ if(order % 2) >++ ++minsize; >++ >++ if(tkeys <= minsize) >++ return 0L; >++ >++ ppage = ajBtreeCacheRead(cache,parent); >++ >++ >++ >++ pbuf = ppage->buf; >++ GBT_NKEYS(pbuf,&pkeys); >++ >++ >++ array = btreeAllocSecArray(cache); >++ kParray = array->overflows; >++ pParray = array->parray; >++ >++ array2 = btreeAllocSecArray(cache); >++ kSarray = array2->overflows; >++ pSarray = array2->parray; >++ >++ array3 = btreeAllocSecArray(cache); >++ kTarray = array3->overflows; >++ pTarray = array3->parray; >++ >++ >++ btreeGetNumKeys(cache,pbuf,&kParray,&pParray); >++ >++ i=0; >++ while(i!=pkeys && key >= kParray[i]) >++ ++i; >++ pkeypos = i; >++ >++ if(i==pkeys) >++ { >++ if(key < kParray[i-1]) >++ ppos = i-1; >++ else >++ ppos = i; >++ } >++ else >++ ppos = i; >++ >++ >++ if(ppos) /* There is another leaf to the left */ >++ { >++ spage = ajBtreeCacheRead(cache,pParray[ppos-1]); >++ sbuf = spage->buf; >++ GBT_NKEYS(sbuf,&skeys); >++ } >++ >++ if(i && skeys != order-1) /* There is space in the left leaf */ >++ { >++ /* ajDebug("Left shift\n"); */ >++ btreeGetNumKeys(cache,tbuf,&kTarray,&pTarray); >++ if(skeys) >++ btreeGetNumKeys(cache,sbuf,&kSarray,&pSarray); >++ >++ i = 0; >++ while(pParray[i] != tpage->pageno) >++ ++i; >++ --i; >++ >++ pkeypos = i; >++ >++ kSarray[skeys] = kParray[pkeypos]; >++ pSarray[skeys+1] = pTarray[0]; >++ ++skeys; >++ --tkeys; >++ kParray[pkeypos] = kTarray[0]; >++ for(i=0;i<tkeys;++i) >++ { >++ kTarray[i] = kTarray[i+1]; >++ pTarray[i] = pTarray[i+1]; >++ } >++ pTarray[i] = pTarray[i+1]; >++ pTarray[i+1] = 0L; >++ >++ btreeWriteNumNode(cache,spage,kSarray,pSarray,skeys); >++ btreeWriteNumNode(cache,tpage,kTarray,pTarray,tkeys); >++ btreeWriteNumNode(cache,ppage,kParray,pParray,pkeys); >++ if(!ppage->pageno) >++ ppage->dirty = BT_LOCK; >++ >++ i = 0; >++ while(i!=pkeys && key >= kParray[i]) >++ ++i; >++ if(i==pkeys) >++ { >++ if(key < kParray[i-1]) >++ blockno = pParray[i-1]; >++ else >++ blockno = pParray[i]; >++ } >++ else >++ blockno = pParray[i]; >++ >++ if(blockno == spage->pageno) >++ { >++ *retpage = spage; >++ karray = kSarray; >++ parray = pSarray; >++ n = skeys; >++ } >++ else >++ { >++ karray = kTarray; >++ parray = pTarray; >++ n = tkeys; >++ } >++ >++ >++ i = 0; >++ while(i!=n && key >= karray[i]) >++ ++i; >++ if(i==n) >++ { >++ if(key < karray[i-1]) >++ blockno = parray[i-1]; >++ else >++ blockno = parray[i]; >++ } >++ else >++ blockno = parray[i]; >++ >++ btreeDeallocSecArray(cache,array); >++ btreeDeallocSecArray(cache,array2); >++ btreeDeallocSecArray(cache,array3); >++ >++ /* ajDebug("... returns blockno (a) %Ld\n",blockno); */ >++ >++ return blockno; >++ } >++ >++ >++ if(ppos != pkeys) /* There is a right node */ >++ { >++ spage = ajBtreeCacheRead(cache,pParray[ppos+1]); >++ sbuf = spage->buf; >++ GBT_NKEYS(sbuf,&skeys); >++ } >++ >++ >++ /* Space in the right leaf */ >++ if(ppos != pkeys && skeys != order-1) >++ { >++ /* ajDebug("Right shift\n"); */ >++ btreeGetNumKeys(cache,tbuf,&kTarray,&pTarray); >++ btreeGetNumKeys(cache,sbuf,&kSarray,&pSarray); >++ >++ i = 0; >++ while(pParray[i] != tpage->pageno) >++ ++i; >++ pkeypos = i; >++ >++ pSarray[skeys+1] = pSarray[skeys]; >++ for(i=skeys-1;i>-1;--i) >++ { >++ kSarray[i+1] = kSarray[i]; >++ pSarray[i+1] = pSarray[i]; >++ } >++ kSarray[0] = kParray[pkeypos]; >++ pSarray[0] = pTarray[tkeys]; >++ kParray[pkeypos] = kTarray[tkeys-1]; >++ ++skeys; >++ --tkeys; >++ pTarray[tkeys+1] = 0L; >++ >++ btreeWriteNumNode(cache,spage,kSarray,pSarray,skeys); >++ btreeWriteNumNode(cache,tpage,kTarray,pTarray,tkeys); >++ btreeWriteNumNode(cache,ppage,kParray,pParray,pkeys); >++ if(!ppage->pageno) >++ ppage->dirty = BT_LOCK; >++ >++ i = 0; >++ while(i!=pkeys && key >= kParray[i]) >++ ++i; >++ if(i==pkeys) >++ { >++ if(key < kParray[i-1]) >++ blockno = pParray[i-1]; >++ else >++ blockno = pParray[i]; >++ } >++ else >++ blockno = pParray[i]; >++ >++ if(blockno == spage->pageno) >++ { >++ *retpage = spage; >++ karray = kSarray; >++ parray = pSarray; >++ n = skeys; >++ } >++ else >++ { >++ karray = kTarray; >++ parray = pTarray; >++ n = tkeys; >++ } >++ >++ i = 0; >++ while(i!=n && key >= karray[i]) >++ ++i; >++ if(i==n) >++ { >++ if(key < karray[i-1]) >++ blockno = parray[i-1]; >++ else >++ blockno = parray[i]; >++ } >++ else >++ blockno = parray[i]; >++ >++ btreeDeallocSecArray(cache,array); >++ btreeDeallocSecArray(cache,array2); >++ btreeDeallocSecArray(cache,array3); >++ >++ /* ajDebug("... returns blockno (b) %Ld\n",blockno); */ >++ >++ return blockno; >++ } >++ >++ >++ btreeDeallocSecArray(cache,array); >++ btreeDeallocSecArray(cache,array2); >++ btreeDeallocSecArray(cache,array3); >++ >++ /* ajDebug("... returns 0L\n"); */ >++ >++ return 0L; >++} >++ >++ >++ >++ >++void ajBtreeInsertNum(AjPBtcache cache, AjPBtNumId num, AjPBtpage page) >++{ >++ unsigned char *buf = NULL; >++ ajint order; >++ AjPBtMem array = NULL; >++ ajlong key; >++ AjPBtpage spage = NULL; >++ AjPBtpage parent = NULL; >++ ajint nkeys = 0; >++ ajint nodetype = 0; >++ ajlong *karray = NULL; >++ ajlong *parray = NULL; >++ AjPNumBucket lbucket = NULL; >++ AjPNumBucket rbucket = NULL; >++ ajlong lblockno; >++ ajlong rblockno; >++ ajlong blockno; >++ ajlong shift; >++ ajint n; >++ ajint i; >++ >++ /* ajDebug("In ajBtreeInsertNum\n"); */ >++ >++ key = num->offset; >++ >++ spage = ajBtreeNumFindInsert(cache,key); >++ buf = spage->buf; >++ >++ GBT_NKEYS(buf,&nkeys); >++ GBT_NODETYPE(buf,&nodetype); >++ >++ order = cache->sorder; >++ >++ array = btreeAllocSecArray(cache); >++ karray = array->overflows; >++ parray = array->parray; >++ >++ if(!nkeys) >++ { >++ lbucket = btreeNumBucketNew(0); >++ rbucket = btreeNumBucketNew(0); >++ >++ lblockno = cache->totsize; >++ btreeWriteNumBucket(cache,lbucket,lblockno); >++ rblockno = cache->totsize; >++ btreeWriteNumBucket(cache,rbucket,rblockno); >++ >++ parray[0] = lblockno; >++ parray[1] = rblockno; >++ karray[0] = key; >++ >++ btreeWriteNumNode(cache,spage,karray,parray,1); >++ >++ btreeNumBucketDel(&lbucket); >++ btreeNumBucketDel(&rbucket); >++ >++ btreeAddToNumBucket(cache,rblockno,num); >++ >++ btreeDeallocSecArray(cache,array); >++ >++ return; >++ } >++ >++ >++ btreeGetNumKeys(cache,buf,&karray,&parray); >++ i=0; >++ while(i != nkeys && key >= karray[i]) >++ ++i; >++ if(i==nkeys) >++ { >++ if(key < karray[i-1]) >++ blockno = parray[i-1]; >++ else >++ blockno = parray[i]; >++ } >++ else >++ blockno = parray[i]; >++ >++ if(nodetype != BT_ROOT) >++ if((shift = btreeNumInsertShift(cache,&spage,key))) >++ blockno = shift; >++ >++ >++ buf = spage->buf; >++ n = btreeNumInNumBucket(cache,blockno); >++ >++ if(n == cache->snperbucket) >++ { >++ if(btreeReorderNumBuckets(cache,spage)) >++ { >++ GBT_NKEYS(buf,&nkeys); >++ btreeGetNumKeys(cache,buf,&karray,&parray); >++ i=0; >++ while(i != nkeys && key >= karray[i]) >++ ++i; >++ if(i==nkeys) >++ { >++ if(key < karray[i-1]) >++ blockno = parray[i-1]; >++ else >++ blockno = parray[i]; >++ } >++ else >++ blockno = parray[i]; >++ } >++ else >++ { >++ parent = btreeNumSplitLeaf(cache,spage); >++ spage = ajBtreeNumFindInsert(cache,key); >++ buf = spage->buf; >++ >++ btreeGetNumKeys(cache,buf,&karray,&parray); >++ GBT_NKEYS(buf,&nkeys); >++ >++ i=0; >++ while(i != nkeys && key >= karray[i]) >++ ++i; >++ if(i==nkeys) >++ { >++ if(key < karray[i-1]) >++ blockno = parray[i-1]; >++ else >++ blockno = parray[i]; >++ } >++ else >++ blockno = parray[i]; >++ } >++ } >++ >++ btreeAddToNumBucket(cache,blockno,num); >++ >++ btreeDeallocSecArray(cache,array); >++ >++ ++cache->count; >++ >++ return; >++} >++ >++ >++ >++ >++/* @funcstatic btreeNumSplitLeaf ********************************************* >++** >++** Split a leaf and propagate up if necessary >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [u] spage [AjPBtpage] page >++** >++** @return [AjPBtpage] pointer to a parent page >++** @@ >++******************************************************************************/ >++ >++static AjPBtpage btreeNumSplitLeaf(AjPBtcache cache, AjPBtpage spage) >++{ >++ ajint nkeys = 0; >++ ajint order = 0; >++ ajint totalkeys = 0; >++ ajint bentries = 0; >++ ajint keylimit = 0; >++ ajint nodetype = 0; >++ >++ ajint rootnodetype = 0; >++ >++ ajint i; >++ ajint j; >++ >++ AjPBtpage lpage = NULL; >++ AjPBtpage rpage = NULL; >++ AjPBtpage page = NULL; >++ >++ ajlong mediankey = 0L; >++ ajlong mediangtr = 0L; >++ ajlong medianless = 0L; >++ >++ AjPBtNumId bid = NULL; >++ >++ unsigned char *buf = NULL; >++ unsigned char *lbuf = NULL; >++ unsigned char *rbuf = NULL; >++ >++ AjPList idlist = NULL; >++ >++ AjPNumBucket *buckets = NULL; >++ AjPNumBucket cbucket = NULL; >++ >++ ajlong *karray = NULL; >++ ajlong *parray = NULL; >++ >++ ajint keypos = 0; >++ ajint lno = 0; >++ ajint rno = 0; >++ >++ ajint bucketlimit = 0; >++ ajint maxnperbucket = 0; >++ ajint nperbucket = 0; >++ ajint bucketn = 0; >++ ajint count = 0; >++ >++ ajlong lblockno = 0L; >++ ajlong rblockno = 0L; >++ ajlong overflow = 0L; >++ ajlong prevsave = 0L; >++ >++ ajlong zero = 0L; >++ ajlong join = 0L; >++ >++ ajlong lv = 0L; >++ ajint v = 0; >++ >++ AjPBtMem array = NULL; >++ >++ >++ /* ajDebug("In btreeNumSplitLeaf\n"); */ >++ >++ order = cache->sorder; >++ nperbucket = cache->snperbucket; >++ >++ array = btreeAllocSecArray(cache); >++ karray = array->overflows; >++ parray = array->parray; >++ >++ buf = spage->buf; >++ lbuf = buf; >++ >++ GBT_NKEYS(buf,&nkeys); >++ GBT_NODETYPE(buf,&rootnodetype); >++ >++ if(rootnodetype == BT_ROOT) >++ { >++ /* ajDebug("Root leaf splitting\n"); */ >++ lblockno = cache->totsize; >++ lpage = ajBtreeCacheWrite(cache,lblockno); >++ lpage->pageno = cache->totsize; >++ cache->totsize += cache->pagesize; >++ lbuf = lpage->buf; >++ lv = cache->secrootblock; >++ SBT_PREV(lbuf,lv); >++ } >++ else >++ { >++ lblockno = spage->pageno; >++ lpage = spage; >++ } >++ >++ lpage->dirty = BT_LOCK; >++ >++ rblockno = cache->totsize; >++ rpage = ajBtreeCacheWrite(cache,rblockno); >++ rpage->pageno = cache->totsize; >++ cache->totsize += cache->pagesize; >++ rbuf = rpage->buf; >++ rpage->dirty = BT_LOCK; >++ >++ if(rootnodetype == BT_ROOT) >++ { >++ lv = zero; >++ SBT_RIGHT(rbuf,lv); >++ lv = zero; >++ SBT_LEFT(lbuf,lv); >++ } >++ else >++ { >++ GBT_RIGHT(lbuf,&join); >++ lv = join; >++ SBT_RIGHT(rbuf,lv); >++ } >++ lv = lblockno; >++ SBT_LEFT(rbuf,lv); >++ lv = rblockno; >++ SBT_RIGHT(lbuf,lv); >++ >++ >++ btreeGetNumKeys(cache,buf,&karray,&parray); >++ >++ >++ keylimit = nkeys+1; >++ AJCNEW0(buckets,keylimit); >++ for(i=0;i<keylimit;++i) >++ buckets[i] = btreeReadNumBucket(cache,parray[i]); >++ >++ idlist = ajListNew(); >++ for(i=0;i<keylimit;++i) >++ { >++ bentries = buckets[i]->Nentries; >++ for(j=0;j<bentries;++j) >++ ajListPush(idlist,(void *)buckets[i]->NumId[j]); >++ AJFREE(buckets[i]->NumId); >++ AJFREE(buckets[i]); >++ } >++ >++ >++ >++ ajListSort(idlist,btreeNumIdCompare); >++ AJFREE(buckets); >++ >++ totalkeys = ajListLength(idlist); >++ >++ keypos = totalkeys / 2; >++ >++ lno = keypos; >++ rno = totalkeys - lno; >++ >++ maxnperbucket = nperbucket >> 1; >++ ++maxnperbucket; >++ >++ cbucket = btreeNumBucketNew(maxnperbucket); >++ >++ bucketn = lno / maxnperbucket; >++ if(lno % maxnperbucket) >++ ++bucketn; >++ bucketlimit = bucketn - 1; >++ >++ >++ count = 0; >++ for(i=0;i<bucketlimit;++i) >++ { >++ cbucket->Nentries = 0; >++ for(j=0;j<maxnperbucket;++j) >++ { >++ ajListPop(idlist,(void **)&bid); >++ >++ cbucket->NumId[j]->offset = bid->offset; >++ cbucket->NumId[j]->refoffset = bid->refoffset; >++ cbucket->NumId[j]->dbno = bid->dbno; >++ >++ ++count; >++ ++cbucket->Nentries; >++ AJFREE(bid); >++ } >++ ajListPeek(idlist,(void **)&bid); >++ >++ karray[i] = bid->offset; >++ >++ if(!parray[i]) >++ parray[i] = cache->totsize; >++ btreeWriteNumBucket(cache,cbucket,parray[i]); >++ } >++ >++ cbucket->Nentries = 0; >++ >++ j = 0; >++ while(count != lno) >++ { >++ ajListPop(idlist,(void **)&bid); >++ >++ cbucket->NumId[j]->offset = bid->offset; >++ cbucket->NumId[j]->refoffset = bid->refoffset; >++ cbucket->NumId[j]->dbno = bid->dbno; >++ >++ ++j; >++ ++count; >++ >++ >++ ++cbucket->Nentries; >++ AJFREE(bid); >++ } >++ >++ if(!parray[i]) >++ parray[i] = cache->totsize; >++ btreeWriteNumBucket(cache,cbucket,parray[i]); >++ >++ nkeys = bucketn - 1; >++ v = nkeys; >++ SBT_NKEYS(lbuf,v); >++ nodetype = BT_LEAF; >++ v = nodetype; >++ SBT_NODETYPE(lbuf,v); >++ GBT_PREV(lbuf,&prevsave); >++ lpage->dirty = BT_DIRTY; >++ btreeWriteNumNode(cache,lpage,karray,parray,nkeys); >++ >++ ajListPeek(idlist,(void **)&bid); >++ mediankey = bid->offset; >++ >++ bucketn = rno / maxnperbucket; >++ if(rno % maxnperbucket) >++ ++bucketn; >++ bucketlimit = bucketn - 1; >++ >++ for(i=0;i<bucketlimit;++i) >++ { >++ cbucket->Nentries = 0; >++ for(j=0;j<maxnperbucket;++j) >++ { >++ ajListPop(idlist,(void **)&bid); >++ >++ cbucket->NumId[j]->offset = bid->offset; >++ cbucket->NumId[j]->refoffset = bid->refoffset; >++ cbucket->NumId[j]->dbno = bid->dbno; >++ >++ ++cbucket->Nentries; >++ AJFREE(bid); >++ } >++ >++ ajListPeek(idlist,(void **)&bid); >++ karray[i] = bid->offset; >++ >++ parray[i] = cache->totsize; >++ btreeWriteNumBucket(cache,cbucket,parray[i]); >++ } >++ >++ cbucket->Nentries = 0; >++ >++ j = 0; >++ while(ajListPop(idlist,(void**)&bid)) >++ { >++ cbucket->NumId[j]->offset = bid->offset; >++ cbucket->NumId[j]->refoffset = bid->refoffset; >++ cbucket->NumId[j]->dbno = bid->dbno; >++ ++j; >++ >++ >++ ++cbucket->Nentries; >++ AJFREE(bid); >++ } >++ >++ parray[i] = cache->totsize; >++ btreeWriteNumBucket(cache,cbucket,parray[i]); >++ >++ nkeys = bucketn - 1; >++ >++ v = nkeys; >++ SBT_NKEYS(rbuf,v); >++ nodetype = BT_LEAF; >++ v = nodetype; >++ SBT_NODETYPE(rbuf,v); >++ lv = prevsave; >++ SBT_PREV(rbuf,lv); >++ lv = overflow; >++ SBT_OVERFLOW(rbuf,lv); >++ >++ btreeWriteNumNode(cache,rpage,karray,parray,nkeys); >++ rpage->dirty = BT_DIRTY; >++ >++ cbucket->Nentries = maxnperbucket; >++ btreeNumBucketDel(&cbucket); >++ ajListDel(&idlist); >++ >++ >++ >++ medianless = lblockno; >++ mediangtr = rblockno; >++ >++ >++ if(rootnodetype == BT_ROOT) >++ { >++ karray[0] = mediankey; >++ parray[0]=lblockno; >++ parray[1]=rblockno; >++ nkeys = 1; >++ spage->dirty = BT_DIRTY; >++ btreeWriteNumNode(cache,spage,karray,parray,nkeys); >++ >++ ++cache->slevel; >++ lv = cache->slevel; >++ SBT_RIGHT(buf,lv); >++ spage->dirty = BT_LOCK; >++ >++ btreeDeallocSecArray(cache,array); >++ >++ return spage; >++ } >++ >++ btreeDeallocSecArray(cache,array); >++ >++ >++ page = ajBtreeCacheRead(cache,prevsave); >++ btreeNumInsertKey(cache,page,mediankey,medianless,mediangtr); >++ >++ >++ page = ajBtreeCacheRead(cache,prevsave); >++ >++ return page; >++} >++ >++ >++ >++ >++/* @func ajBtreeFreePriArray ******************************************* >++** >++** Free karray and parray arrays for a primary key >++** >++** @param [rw] cache [AjPBtcache] cache >++** >++** @return [void] >++** @@ >++******************************************************************************/ >++ >++void ajBtreeFreePriArray(AjPBtcache cache) >++{ >++ AjPBtMem p; >++ AjPBtMem next; >++ ajint i; >++ >++ /* ajDebug("In ajBtreeFreePriArray\n"); */ >++ >++ if(!cache->bmem) >++ return; >++ >++ p = cache->bmem; >++ next = p->next; >++ >++ while(next) >++ { >++ AJFREE(p->parray); >++ AJFREE(p->overflows); >++ for(i=0;i<cache->order;++i) >++ ajStrDel(&p->karray[i]); >++ AJFREE(p->karray); >++ AJFREE(p); >++ p = next; >++ next = p->next; >++ } >++ >++ >++ AJFREE(p->parray); >++ AJFREE(p->overflows); >++ for(i=0;i<cache->order;++i) >++ ajStrDel(&p->karray[i]); >++ AJFREE(p->karray); >++ AJFREE(p); >++ >++ cache->bmem = NULL; >++ cache->tmem = NULL; >++ >++ return; >++} >++ >++ >++ >++ >++/* @func ajBtreeFreeSecArray ******************************************* >++** >++** Free karray and parray arrays for a secondary key >++** >++** @param [rw] cache [AjPBtcache] cache >++** >++** @return [void] >++** @@ >++******************************************************************************/ >++ >++void ajBtreeFreeSecArray(AjPBtcache cache) >++{ >++ AjPBtMem p; >++ AjPBtMem next; >++ ajint i; >++ >++ /* ajDebug("In ajBtreeFreeSecArray\n"); */ >++ >++ if(!cache->bsmem) >++ return; >++ >++ p = cache->bsmem; >++ next = p->next; >++ >++ while(next) >++ { >++ AJFREE(p->parray); >++ AJFREE(p->overflows); >++ for(i=0;i<cache->sorder;++i) >++ ajStrDel(&p->karray[i]); >++ AJFREE(p->karray); >++ AJFREE(p); >++ >++ p = next; >++ next = p->next; >++ } >++ >++ >++ AJFREE(p->parray); >++ AJFREE(p->overflows); >++ for(i=0;i<cache->sorder;++i) >++ ajStrDel(&p->karray[i]); >++ AJFREE(p->karray); >++ AJFREE(p); >++ >++ cache->bsmem = NULL; >++ cache->tsmem = NULL; >++ >++ return; >++} >++ >++ >++ >++ >++/* @func ajBtreeHybLeafList ******************************************** >++** >++** Read the leaves of a secondary hybrid tree >++** >++** @param [u] cache [AjPBtcache] cache >++** @param [r] rootblock [ajlong] root page of secondary tree >++** @param [r] idname [AjPStr] id name >++** @param [r] list [AjPList] list to add BtIDs to >++** >++** @return [void] >++** @@ >++******************************************************************************/ >++ >++void ajBtreeHybLeafList(AjPBtcache cache, ajlong rootblock, AjPStr idname, >++ AjPList list) >++{ >++ AjPBtId id = NULL; >++ >++ ajint order; >++ ajlong *karray; >++ ajlong *parray; >++ AjPBtpage page; >++ unsigned char *buf; >++ ajint nodetype; >++ ajint i; >++ ajint j; >++ ajlong level = 0L; >++ >++ AjPNumBucket bucket; >++ ajint nkeys; >++ ajlong right; >++ AjPBtMem array = NULL; >++ >++ order = cache->sorder; >++ >++ array = btreeAllocSecArray(cache); >++ karray = array->overflows; >++ parray = array->parray; >++ >++ page = ajBtreeCacheRead(cache, rootblock); >++ buf = page->buf; >++ >++ GBT_RIGHT(buf,&level); >++ cache->slevel = (ajint) level; >++ >++ btreeGetNumKeys(cache,buf,&karray,&parray); >++ GBT_NODETYPE(buf,&nodetype); >++ >++ while(nodetype != BT_LEAF && cache->slevel != 0) >++ { >++ page = ajBtreeCacheRead(cache,parray[0]); >++ buf = page->buf; >++ btreeGetNumKeys(cache,buf,&karray,&parray); >++ GBT_NODETYPE(buf,&nodetype); >++ } >++ >++ do >++ { >++ GBT_NKEYS(buf,&nkeys); >++ for(i=0;i<nkeys+1;++i) >++ { >++ bucket = btreeReadNumBucket(cache,parray[i]); >++ for(j=0;j<bucket->Nentries;++j) >++ { >++ id = ajBtreeIdNew(); >++ ajStrAssS(&id->id,idname); >++ id->offset = bucket->NumId[j]->offset; >++ id->refoffset = bucket->NumId[j]->refoffset; >++ id->dbno = bucket->NumId[j]->dbno; >++ ajListPush(list, (void*)id); >++ } >++ btreeNumBucketDel(&bucket); >++ } >++ >++ right = 0L; >++ if(cache->slevel) >++ { >++ GBT_RIGHT(buf,&right); >++ if(right) >++ { >++ page = ajBtreeCacheRead(cache,right); >++ buf = page->buf; >++ btreeGetNumKeys(cache,buf,&karray,&parray); >++ } >++ } >++ } while(right); >++ >++ btreeDeallocSecArray(cache,array); >++ >++ return; >++} >++ >diff -ruN /usr/ports/biology/emboss/files/patch-ajindex.h emboss/files/patch-ajindex.h >--- /usr/ports/biology/emboss/files/patch-ajindex.h Wed Dec 31 21:00:00 1969 >+++ emboss/files/patch-ajindex.h Mon Jan 23 12:18:57 2006 >@@ -0,0 +1,170 @@ >+--- ajax/ajindex.h.orig Mon Jan 23 12:17:10 2006 >++++ ajax/ajindex.h Thu Dec 22 13:12:32 2005 >+@@ -67,6 +67,23 @@ >+ } AjOBtNode; >+ #define AjPBtNode AjOBtNode* >+ >++ >++ >++ >++typedef struct AjSBtMem >++{ >++ struct AjSBtMem *next; >++ struct AjSBtMem *prev; >++ AjPStr *karray; >++ ajlong *parray; >++ ajlong *overflows; >++ AjBool used; >++} AjOBtMem; >++#define AjPBtMem AjOBtMem* >++ >++ >++ >++ >+ /* @data AjPBtId *************************************************** >+ ** >+ ** Btree ID >+@@ -137,6 +154,54 @@ >+ >+ >+ >++/* @data AjPBtNumId *************************************************** >++** >++** Btree ID >++** >++** @attr id [AjPStr] Unique ID >++** @attr dbno [ajint] Database file number >++** @attr dups [ajint] Duplicates >++** @attr offset [ajlong] Offset within database file (ftello) >++** @attr refoffset [ajlong] Offset within reference database file (ftello) >++******************************************************************************/ >++ >++typedef struct AjSBtNumId >++{ >++ ajint dbno; >++ ajlong offset; >++ ajlong refoffset; >++} AjOBtNumId; >++#define AjPBtNumId AjOBtNumId* >++ >++ >++ >++ >++/* @data AjPNumBucket *************************************************** >++** >++** Offset bucket structure on disc >++** >++** Key, filenumber, ftell ID, subkey page (char*, ajint, ajlong, ajlong) >++** >++** @attr NodeType [ajint] Node type >++** @attr Nentries [ajint] Number of entries >++** @attr Overflow [ajlong] Offset to overflow block >++** @attr offset [ajlong*] file offsets >++** @attr refoffset [ajlong*] ref file offsets >++** @attr offset [ajint*] database numbers >++******************************************************************************/ >++ >++typedef struct AjSNumBucket >++{ >++ ajint NodeType; >++ ajint Nentries; >++ ajlong Overflow; >++ AjPBtNumId *NumId; >++} AjONumBucket; >++#define AjPNumBucket AjONumBucket* >++ >++ >++ >++ >+ /* Database file name structure >+ ** >+ ** ajint order Order of B+tree >+@@ -387,6 +452,10 @@ >+ ** @attr snperbucket [ajint] Undocumented >+ ** @attr secrootblock [ajlong] secondary tree root block >+ ** @attr kwlimit [ajint] Max length of secondary key >++** @attr bmem [AjPBtMem] primary memory allocation MRU bottom >++** @attr bsmem [AjPBtMem] secondary memory allocation MRU bottom >++** @attr tmem [AjPBtMem] primary memory allocation MRU top >++** @attr tsmem [AjPBtMem] secondary memory allocation MRU top >+ ******************************************************************************/ >+ >+ typedef struct AjSBtCache >+@@ -409,6 +478,12 @@ >+ ajint snperbucket; >+ ajlong secrootblock; >+ ajint kwlimit; >++ >++ AjPBtMem bmem; >++ AjPBtMem tmem; >++ AjPBtMem bsmem; >++ AjPBtMem tsmem; >++ >+ } AjOBtcache; >+ #define AjPBtcache AjOBtcache* >+ >+@@ -511,6 +586,32 @@ >+ >+ >+ >++/* @data AjPBtHybrid *************************************************** >++** >++** Btree ID >++** >++** @attr key1 [AjPStr] Unique ID >++** @attr dbno [ajint] Database file number >++** @attr dups [ajint] Duplicates >++** @attr offset [ajlong] Offset within database file (ftello)** @attr refoffset [ajlong] Offset within reference database file (ftello) >++** @attr refoffset [ajlong] Offset within reference database file (ftello) >++** @attr treeblock [ajlong] Secondary tree root page >++******************************************************************************/ >++ >++typedef struct AjSBtHybrid >++{ >++ AjPStr key1; >++ ajint dbno; >++ ajint dups; >++ ajlong offset; >++ ajlong refoffset; >++ ajlong treeblock; >++} AjOBtHybrid; >++#define AjPBtHybrid AjOBtHybrid* >++ >++ >++ >++ >+ AjPBtcache ajBtreeCacheNewC(const char *file, const char *ext, >+ const char *idir, const char *mode, >+ ajint pagesize, ajint order, ajint fill, >+@@ -553,7 +654,8 @@ >+ AjBool ajBtreeReplaceId(AjPBtcache cache, const AjPBtId rid); >+ >+ ajint ajBtreeReadEntries(const char *filename, const char *indexdir, >+- AjPStr **seqfiles, AjPStr **reffiles); >++ const char *directory, >++ AjPStr **seqfiles, AjPStr **reffiles); >+ void ajBtreeInsertDupId(AjPBtcache cache, AjPBtId id); >+ AjPList ajBtreeDupFromKey(AjPBtcache cache, const char *key); >+ >+@@ -580,6 +682,21 @@ >+ void ajBtreeInsertKeyword(AjPBtcache cache, const AjPBtPri pri); >+ >+ void ajBtreeLockTest(AjPBtcache cache); >++ >++ >++ >++AjPBtpage ajBtreeHybFindInsert(AjPBtcache cache, const char *key); >++AjPBtpage ajBtreeNumFindInsert(AjPBtcache cache, const ajlong key); >++ >++void ajBtreeInsertNum(AjPBtcache cache, AjPBtNumId num, AjPBtpage page); >++void ajBtreeHybInsertId(AjPBtcache cache, AjPBtHybrid hyb); >++AjPBtHybrid ajBtreeHybNew(void); >++void ajBtreeHybDel(AjPBtHybrid *thys); >++void ajBtreeFreePriArray(AjPBtcache cache); >++void ajBtreeFreeSecArray(AjPBtcache cache); >++void ajBtreeHybLeafList(AjPBtcache cache, ajlong rootblock, >++ AjPStr idname, AjPList list); >++ >+ >+ #endif >+ >diff -ruN /usr/ports/biology/emboss/files/patch-ajpdb.c emboss/files/patch-ajpdb.c >--- /usr/ports/biology/emboss/files/patch-ajpdb.c Wed Dec 31 21:00:00 1969 >+++ emboss/files/patch-ajpdb.c Mon Jan 23 12:20:04 2006 >@@ -0,0 +1,67 @@ >+--- ajax/ajpdb.c.orig Mon Jan 23 12:19:22 2006 >++++ ajax/ajpdb.c Fri Aug 19 13:49:12 2005 >+@@ -1198,7 +1198,7 @@ >+ osstr = ajStrNew(); >+ xstr = ajStrNew(); >+ >+- /* Start of main application loop */ >++ /* Start of main loop */ >+ while(ajFileReadLine(inf,&line)) >+ { >+ if(ajStrPrefixC(line,"XX")) >+@@ -1313,6 +1313,8 @@ >+ >+ (ret)->Nchn = ncha; >+ (ret)->Ngp = ngrp; >++ >++ continue; >+ } >+ >+ >+@@ -1382,7 +1384,11 @@ >+ ajStrToken(&token,&handle,NULL); >+ ajStrToInt(token,&mod); >+ if((mode == 0) && (mod!=1)) >+- break; >++ { >++ /* break; */ >++ /* Discard remaining AT lines */ >++ while(ajFileReadLine(inf,&line) && ajStrPrefixC(line,"AT")); >++ } >+ >+ /* Chain number */ >+ ajStrToken(&token,&handle,NULL); >+@@ -1463,7 +1469,10 @@ >+ "jison@hgmp.mrc.ac.uk"); >+ } >+ else >++ { >+ ajListPushApp((ret)->Chains[chn-1]->Atoms,(void *)atom); >++ } >++ continue; >+ } >+ >+ /* Parse residue line */ >+@@ -1479,8 +1488,11 @@ >+ ajStrToken(&token,&handle,NULL); >+ ajStrToInt(token,&mod); >+ if((mode == 0) && (mod!=1)) >+- break; >+- >++ { >++ /* break;*/ >++ /* Discard remaining RE lines */ >++ while(ajFileReadLine(inf,&line) && ajStrPrefixC(line,"RE")); >++ } >+ /* Chain number */ >+ ajStrToken(&token,&handle,NULL); >+ ajStrToInt(token,&chn); >+@@ -1585,6 +1597,8 @@ >+ ajStrToFloat(token,&residue->pol_rel); >+ >+ ajListPushApp((ret)->Chains[chn-1]->Residues,(void *)residue); >++ >++ continue; >+ } >+ } >+ /* End of main application loop */ >diff -ruN /usr/ports/biology/emboss/files/patch-ajseqdb.c emboss/files/patch-ajseqdb.c >--- /usr/ports/biology/emboss/files/patch-ajseqdb.c Wed Dec 31 21:00:00 1969 >+++ emboss/files/patch-ajseqdb.c Mon Jan 23 12:21:36 2006 >@@ -0,0 +1,195 @@ >+--- ajax/ajseqdb.c.orig Mon Jan 23 12:20:25 2006 >++++ ajax/ajseqdb.c Thu Dec 22 13:12:57 2005 >+@@ -27,8 +27,7 @@ >+ ******************************************************************************/ >+ >+ #include "ajax.h" >+-#include "ajmem.h" >+-#include "ajfile.h" >++ >+ #include "limits.h" >+ #include <stdarg.h> >+ #include <sys/types.h> >+@@ -3055,13 +3054,13 @@ >+ >+ >+ if(qryd->do_id) >+- seqEmbossOpenCache(qry,ID_EXTENSION,&qryd->idcache); >++ seqEmbossOpenSecCache(qry,ID_EXTENSION,&qryd->idcache); >+ >+ if(qryd->do_ac) >+- seqEmbossOpenCache(qry,AC_EXTENSION,&qryd->accache); >++ seqEmbossOpenSecCache(qry,AC_EXTENSION,&qryd->accache); >+ >+ if(qryd->do_sv) >+- seqEmbossOpenCache(qry,SV_EXTENSION,&qryd->svcache); >++ seqEmbossOpenSecCache(qry,SV_EXTENSION,&qryd->svcache); >+ >+ if(qryd->do_kw) >+ { >+@@ -3073,14 +3072,14 @@ >+ if(qryd->do_de) >+ { >+ if(!qryd->idcache) >+- seqEmbossOpenCache(qry,ID_EXTENSION,&qryd->idcache); >++ seqEmbossOpenSecCache(qry,ID_EXTENSION,&qryd->idcache); >+ seqEmbossOpenSecCache(qry,DE_EXTENSION,&qryd->decache); >+ } >+ >+ if(qryd->do_tx) >+ { >+ if(!qryd->idcache) >+- seqEmbossOpenCache(qry,ID_EXTENSION,&qryd->idcache); >++ seqEmbossOpenSecCache(qry,ID_EXTENSION,&qryd->idcache); >+ seqEmbossOpenSecCache(qry,TX_EXTENSION,&qryd->txcache); >+ } >+ >+@@ -3149,6 +3148,7 @@ >+ if(qryd->nentries == -1) >+ qryd->nentries = ajBtreeReadEntries(ajStrStr(qry->DbAlias), >+ ajStrStr(qry->IndexDir), >++ ajStrStr(qry->Directory), >+ &qryd->files,&qryd->reffiles); >+ >+ *cache = ajBtreeCacheNewC(ajStrStr(qry->DbAlias),ext, >+@@ -3209,6 +3209,7 @@ >+ if(qryd->nentries == -1) >+ qryd->nentries = ajBtreeReadEntries(ajStrStr(qry->DbAlias), >+ ajStrStr(qry->IndexDir), >++ ajStrStr(qry->Directory), >+ &qryd->files,&qryd->reffiles); >+ >+ >+@@ -3270,6 +3271,7 @@ >+ >+ >+ n = ajBtreeReadEntries(qry->DbAlias->Ptr,qry->IndexDir->Ptr, >++ qry->Directory->Ptr, >+ &filestrings,&reffilestrings); >+ >+ >+@@ -3365,7 +3367,13 @@ >+ { >+ entry = ajBtreeIdFromKey(qryd->idcache,ajStrStr(qry->Id)); >+ if(entry) >+- ajListPushApp(qryd->List,(void *)entry); >++ { >++ if(!entry->dups) >++ ajListPushApp(qryd->List,(void *)entry); >++ else >++ ajBtreeHybLeafList(qryd->idcache,entry->offset, >++ entry->id,qryd->List); >++ } >+ } >+ >+ >+@@ -3373,14 +3381,26 @@ >+ { >+ entry = ajBtreeIdFromKey(qryd->accache,ajStrStr(qry->Acc)); >+ if(entry) >+- ajListPushApp(qryd->List,(void *)entry); >++ { >++ if(!entry->dups) >++ ajListPushApp(qryd->List,(void *)entry); >++ else >++ ajBtreeHybLeafList(qryd->accache,entry->offset, >++ entry->id,qryd->List); >++ } >+ } >+ >+ if((qryd->do_sv && !entry) && (qryd->do_sv && qryd->svcache)) >+ { >+ entry = ajBtreeIdFromKey(qryd->svcache,ajStrStr(qry->Gi)); >+ if(entry) >+- ajListPushApp(qryd->List,(void *)entry); >++ { >++ if(!entry->dups) >++ ajListPushApp(qryd->List,(void *)entry); >++ else >++ ajBtreeHybLeafList(qryd->svcache,entry->offset, >++ entry->id,qryd->List); >++ } >+ } >+ >+ if(!ajListLength(qryd->List)) >+@@ -3512,13 +3532,25 @@ >+ qryd = qry->QryData; >+ >+ if(qryd->do_id && qryd->idcache) >++ { >++ ajBtreeFreeSecArray(qryd->idcache); >+ ajBtreeCacheDel(&qryd->idcache); >++ } >++ >+ >+ if(qryd->do_ac && qryd->accache) >++ { >++ ajBtreeFreeSecArray(qryd->accache); >+ ajBtreeCacheDel(&qryd->accache); >++ } >++ >+ >+ if(qryd->do_sv && qryd->svcache) >++ { >++ ajBtreeFreeSecArray(qryd->svcache); >+ ajBtreeCacheDel(&qryd->svcache); >++ } >++ >+ >+ if(qryd->do_kw && qryd->kwcache) >+ ajBtreeCacheDel(&qryd->kwcache); >+@@ -3608,7 +3640,14 @@ >+ ajStrToLower(&kwid); >+ id = ajBtreeIdFromKey(qryd->idcache,ajStrStr(kwid)); >+ if(id) >+- ajListPushApp(qryd->List,(void *)id); >++ { >++ if(!id->dups) >++ ajListPushApp(qryd->List,(void *)id); >++ else >++ ajBtreeHybLeafList(qryd->idcache,id->offset, >++ id->id,qryd->List); >++ } >++ ajStrDel(&kwid); >+ } >+ ajListDel(&tlist); >+ ajBtreePriDel(&pri); >+@@ -3637,7 +3676,13 @@ >+ ajStrToLower(&kwid); >+ id = ajBtreeIdFromKey(qryd->idcache,ajStrStr(kwid)); >+ if(id) >+- ajListPushApp(qryd->List,(void *)id); >++ { >++ if(!id->dups) >++ ajListPushApp(qryd->List,(void *)id); >++ else >++ ajBtreeHybLeafList(qryd->idcache,id->offset, >++ id->id,qryd->List); >++ } >+ ajStrDel(&kwid); >+ } >+ ajListDel(&tlist); >+@@ -3667,7 +3712,14 @@ >+ ajStrToLower(&kwid); >+ id = ajBtreeIdFromKey(qryd->idcache,ajStrStr(kwid)); >+ if(id) >+- ajListPushApp(qryd->List,(void *)id); >++ { >++ if(!id->dups) >++ ajListPushApp(qryd->List,(void *)id); >++ else >++ ajBtreeHybLeafList(qryd->idcache,id->offset, >++ id->id,qryd->List); >++ } >++ ajStrDel(&kwid); >+ } >+ ajListDel(&tlist); >+ ajBtreePriDel(&pri); >+@@ -3832,6 +3884,7 @@ >+ qryd = qry->QryData; >+ i = -1; >+ ajBtreeReadEntries(qry->DbAlias->Ptr,qry->IndexDir->Ptr, >++ qry->Directory->Ptr, >+ &qryd->files,&qryd->reffiles); >+ >+ seqin->Single = ajTrue; >diff -ruN /usr/ports/biology/emboss/files/patch-dbxfasta.c emboss/files/patch-dbxfasta.c >--- /usr/ports/biology/emboss/files/patch-dbxfasta.c Wed Dec 31 21:00:00 1969 >+++ emboss/files/patch-dbxfasta.c Mon Jan 23 12:23:34 2006 >@@ -0,0 +1,89 @@ >+--- emboss/dbxfasta.c.orig Mon Jan 23 12:22:12 2006 >++++ emboss/dbxfasta.c Wed Jan 4 16:31:37 2006 >+@@ -2,7 +2,7 @@ >+ ** >+ ** Index flatfile databases >+ ** >+-** @author: Copyright (C) Alan Bleasby (ableasby@hgmp.mrc.ac.uk) >++** @author Copyright (C) Alan Bleasby (ableasby@hgmp.mrc.ac.uk) >+ ** @@ >+ ** >+ ** This program is free software; you can redistribute it and/or >+@@ -77,6 +77,7 @@ >+ >+ AjPBtId idobj = NULL; >+ AjPBtPri priobj = NULL; >++ AjPBtHybrid hyb = NULL; >+ >+ >+ AjPRegexp typeexp = NULL; >+@@ -102,7 +103,8 @@ >+ >+ idobj = ajBtreeIdNew(); >+ priobj = ajBtreePriNew(); >+- >++ hyb = ajBtreeHybNew(); >++ >+ >+ nfields = embBtreeSetFields(entry,fieldarray); >+ embBtreeSetDbInfo(entry,dbname,dbrs,datestr,release,dbtype,directory, >+@@ -134,22 +136,22 @@ >+ if(entry->do_id) >+ { >+ ajStrToLower(&entry->id); >+- ajStrAssS(&idobj->id,entry->id); >+- idobj->dbno = i; >+- idobj->offset = entry->fpos; >+- idobj->dups = 0; >+- ajBtreeInsertId(entry->idcache,idobj); >++ ajStrAssS(&hyb->key1,entry->id); >++ hyb->dbno = i; >++ hyb->offset = entry->fpos; >++ hyb->dups = 0; >++ ajBtreeHybInsertId(entry->idcache,hyb); >+ } >+ >+ if(entry->do_accession) >+ while(ajListPop(entry->ac,(void **)&word)) >+ { >+ ajStrToLower(&word); >+- ajStrAssS(&idobj->id,word); >+- idobj->dbno = i; >+- idobj->offset = entry->fpos; >+- idobj->dups = 0; >+- ajBtreeInsertId(entry->accache,idobj); >++ ajStrAssS(&hyb->key1,word); >++ hyb->dbno = i; >++ hyb->offset = entry->fpos; >++ hyb->dups = 0; >++ ajBtreeHybInsertId(entry->accache,hyb); >+ ajStrDel(&word); >+ } >+ >+@@ -157,11 +159,11 @@ >+ while(ajListPop(entry->sv,(void **)&word)) >+ { >+ ajStrToLower(&word); >+- ajStrAssS(&idobj->id,word); >+- idobj->dbno = i; >+- idobj->offset = entry->fpos; >+- idobj->dups = 0; >+- ajBtreeInsertId(entry->svcache,idobj); >++ ajStrAssS(&hyb->key1,word); >++ hyb->dbno = i; >++ hyb->offset = entry->fpos; >++ hyb->dups = 0; >++ ajBtreeHybInsertId(entry->svcache,hyb); >+ ajStrDel(&word); >+ } >+ >+@@ -197,7 +199,8 @@ >+ >+ ajBtreeIdDel(&idobj); >+ ajBtreePriDel(&priobj); >+- >++ ajBtreeHybDel(&hyb); >++ >+ ajExit(); >+ >+ return 0; >diff -ruN /usr/ports/biology/emboss/files/patch-dbxflat.c emboss/files/patch-dbxflat.c >--- /usr/ports/biology/emboss/files/patch-dbxflat.c Wed Dec 31 21:00:00 1969 >+++ emboss/files/patch-dbxflat.c Mon Jan 23 12:23:51 2006 >@@ -0,0 +1,146 @@ >+--- emboss/dbxflat.c.orig Mon Jan 23 12:22:23 2006 >++++ emboss/dbxflat.c Sun Jan 1 07:29:09 2006 >+@@ -2,7 +2,7 @@ >+ ** >+ ** Index flatfile databases >+ ** >+-** @author: Copyright (C) Alan Bleasby (ableasby@hgmp.mrc.ac.uk) >++** @author Copyright (C) Alan Bleasby (ableasby@hgmp.mrc.ac.uk) >+ ** @@ >+ ** >+ ** This program is free software; you can redistribute it and/or >+@@ -106,6 +106,7 @@ >+ >+ AjPBtId idobj = NULL; >+ AjPBtPri priobj = NULL; >++ AjPBtHybrid hyb = NULL; >+ >+ >+ embInit("dbxflat", argc, argv); >+@@ -126,7 +127,8 @@ >+ >+ idobj = ajBtreeIdNew(); >+ priobj = ajBtreePriNew(); >+- >++ hyb = ajBtreeHybNew(); >++ >+ >+ nfields = embBtreeSetFields(entry,fieldarray); >+ embBtreeSetDbInfo(entry,dbname,dbrs,datestr,release,dbtype,directory, >+@@ -156,11 +158,11 @@ >+ if(entry->do_id) >+ { >+ ajStrToLower(&entry->id); >+- ajStrAssS(&idobj->id,entry->id); >+- idobj->dbno = i; >+- idobj->offset = entry->fpos; >+- idobj->dups = 0; >+- ajBtreeInsertId(entry->idcache,idobj); >++ ajStrAssS(&hyb->key1,entry->id); >++ hyb->dbno = i; >++ hyb->offset = entry->fpos; >++ hyb->dups = 0; >++ ajBtreeHybInsertId(entry->idcache,hyb); >+ } >+ >+ if(entry->do_accession) >+@@ -168,11 +170,11 @@ >+ while(ajListPop(entry->ac,(void **)&word)) >+ { >+ ajStrToLower(&word); >+- ajStrAssS(&idobj->id,word); >+- idobj->dbno = i; >+- idobj->offset = entry->fpos; >+- idobj->dups = 0; >+- ajBtreeInsertId(entry->accache,idobj); >++ ajStrAssS(&hyb->key1,word); >++ hyb->dbno = i; >++ hyb->offset = entry->fpos; >++ hyb->dups = 0; >++ ajBtreeHybInsertId(entry->accache,hyb); >+ ajStrDel(&word); >+ } >+ } >+@@ -182,11 +184,11 @@ >+ while(ajListPop(entry->sv,(void **)&word)) >+ { >+ ajStrToLower(&word); >+- ajStrAssS(&idobj->id,word); >+- idobj->dbno = i; >+- idobj->offset = entry->fpos; >+- idobj->dups = 0; >+- ajBtreeInsertId(entry->svcache,idobj); >++ ajStrAssS(&hyb->key1,word); >++ hyb->dbno = i; >++ hyb->offset = entry->fpos; >++ hyb->dups = 0; >++ ajBtreeHybInsertId(entry->svcache,hyb); >+ ajStrDel(&word); >+ } >+ } >+@@ -231,15 +233,11 @@ >+ } >+ } >+ >+- >+- >+- >+- >+- >+ ajFileClose(&inf); >+ } >+ >+ >++ >+ embBtreeDumpParameters(entry); >+ embBtreeCloseCaches(entry); >+ >+@@ -256,7 +254,8 @@ >+ >+ ajBtreeIdDel(&idobj); >+ ajBtreePriDel(&priobj); >+- >++ ajBtreeHybDel(&hyb); >++ >+ ajExit(); >+ >+ return 0; >+@@ -306,11 +305,13 @@ >+ } >+ >+ if(entry->do_sv) >+- if(ajStrPrefixC(line,"SV")) >++ if(ajStrPrefixC(line,"SV") || >++ ajStrPrefixC(line,"IV")) /* emblcds database format */ >+ embBtreeEmblAC(line,entry->sv); >+ >+ if(entry->do_accession) >+- if(ajStrPrefixC(line,"AC")) >++ if(ajStrPrefixC(line,"AC") || >++ ajStrPrefixC(line,"PA")) /* emblcds database format */ >+ embBtreeEmblAC(line,entry->ac); >+ >+ if(entry->do_keyword) >+@@ -356,12 +357,10 @@ >+ >+ line = ajStrNewC(""); >+ sumline = ajStrNew(); >++ >+ >+ while(!ajStrPrefixC(line,"//") && ret) >+ { >+- pos = ajFileTell(inf); >+- >+- >+ if(ajStrPrefixC(line,"LOCUS")) >+ { >+ entry->fpos = pos; >+@@ -423,7 +422,7 @@ >+ } >+ >+ >+- >++ pos = ajFileTell(inf); >+ >+ if(!ajFileReadLine(inf,&line)) >+ ret = ajFalse; >diff -ruN /usr/ports/biology/emboss/files/patch-dbxgcg.c emboss/files/patch-dbxgcg.c >--- /usr/ports/biology/emboss/files/patch-dbxgcg.c Wed Dec 31 21:00:00 1969 >+++ emboss/files/patch-dbxgcg.c Mon Jan 23 12:24:04 2006 >@@ -0,0 +1,96 @@ >+--- emboss/dbxgcg.c.orig Mon Jan 23 12:22:30 2006 >++++ emboss/dbxgcg.c Thu Dec 22 13:13:18 2005 >+@@ -2,7 +2,7 @@ >+ ** >+ ** Index flatfile databases >+ ** >+-** @author: Copyright (C) Alan Bleasby (ableasby@hgmp.mrc.ac.uk) >++** @author Copyright (C) Alan Bleasby (ableasby@hgmp.mrc.ac.uk) >+ ** @@ >+ ** >+ ** This program is free software; you can redistribute it and/or >+@@ -136,6 +136,7 @@ >+ >+ AjPBtId idobj = NULL; >+ AjPBtPri priobj = NULL; >++ AjPBtHybrid hyb = NULL; >+ >+ >+ embInit("dbxgcg", argc, argv); >+@@ -156,7 +157,8 @@ >+ >+ idobj = ajBtreeIdNew(); >+ priobj = ajBtreePriNew(); >+- >++ hyb = ajBtreeHybNew(); >++ >+ >+ nfields = embBtreeSetFields(entry,fieldarray); >+ embBtreeSetDbInfo(entry,dbname,dbrs,datestr,release,dbtype,directory, >+@@ -204,12 +206,12 @@ >+ if(entry->do_id) >+ { >+ ajStrToLower(&entry->id); >+- ajStrAssS(&idobj->id,entry->id); >+- idobj->dbno = i; >+- idobj->offset = entry->fpos; >+- idobj->refoffset = entry->reffpos; >+- idobj->dups = 0; >+- ajBtreeInsertId(entry->idcache,idobj); >++ ajStrAssS(&hyb->key1,entry->id); >++ hyb->dbno = i; >++ hyb->offset = entry->fpos; >++ hyb->refoffset = entry->reffpos; >++ hyb->dups = 0; >++ ajBtreeHybInsertId(entry->idcache,hyb); >+ } >+ >+ if(entry->do_accession) >+@@ -217,12 +219,12 @@ >+ while(ajListPop(entry->ac,(void **)&word)) >+ { >+ ajStrToLower(&word); >+- ajStrAssS(&idobj->id,word); >+- idobj->dbno = i; >+- idobj->offset = entry->fpos; >+- idobj->refoffset = entry->reffpos; >+- idobj->dups = 0; >+- ajBtreeInsertId(entry->accache,idobj); >++ ajStrAssS(&hyb->key1,word); >++ hyb->dbno = i; >++ hyb->offset = entry->fpos; >++ hyb->refoffset = entry->reffpos; >++ hyb->dups = 0; >++ ajBtreeHybInsertId(entry->accache,hyb); >+ ajStrDel(&word); >+ } >+ } >+@@ -232,12 +234,12 @@ >+ while(ajListPop(entry->sv,(void **)&word)) >+ { >+ ajStrToLower(&word); >+- ajStrAssS(&idobj->id,word); >+- idobj->dbno = i; >+- idobj->offset = entry->fpos; >+- idobj->refoffset = entry->reffpos; >+- idobj->dups = 0; >+- ajBtreeInsertId(entry->svcache,idobj); >++ ajStrAssS(&hyb->key1,word); >++ hyb->dbno = i; >++ hyb->offset = entry->fpos; >++ hyb->refoffset = entry->reffpos; >++ hyb->dups = 0; >++ ajBtreeHybInsertId(entry->svcache,hyb); >+ ajStrDel(&word); >+ } >+ } >+@@ -303,7 +305,8 @@ >+ >+ ajBtreeIdDel(&idobj); >+ ajBtreePriDel(&priobj); >+- >++ ajBtreeHybDel(&hyb); >++ >+ ajExit(); >+ >+ return 0; >diff -ruN /usr/ports/biology/emboss/files/patch-embindex.c emboss/files/patch-embindex.c >--- /usr/ports/biology/emboss/files/patch-embindex.c Wed Dec 31 21:00:00 1969 >+++ emboss/files/patch-embindex.c Mon Jan 23 12:25:40 2006 >@@ -0,0 +1,115 @@ >+--- nucleus/embindex.c.orig Mon Jan 23 12:24:54 2006 >++++ nucleus/embindex.c Thu Dec 22 13:12:38 2005 >+@@ -973,15 +973,14 @@ >+ if(!do_ref) >+ { >+ ajListPop(entry->files,(void **)&tmpstr); >+- ajFmtPrintF(entfile,"%S%S\n",entry->directory,tmpstr); >++ ajFmtPrintF(entfile,"%S\n",tmpstr); >+ ajListPushApp(entry->files,(void *)tmpstr); >+ } >+ else >+ { >+ ajListPop(entry->files,(void **)&tmpstr); >+ ajListPop(entry->reffiles,(void **)&refstr); >+- ajFmtPrintF(entfile,"%S%S %S%S\n",entry->directory,tmpstr, >+- entry->directory,refstr); >++ ajFmtPrintF(entfile,"%S %S\n",tmpstr, refstr); >+ ajListPushApp(entry->files,(void *)tmpstr); >+ ajListPushApp(entry->reffiles,(void *)refstr); >+ } >+@@ -1150,7 +1149,15 @@ >+ entry->desecfill = (entry->pagesize - 16) / (entry->idlen + 4); >+ entry->txsecfill = (entry->pagesize - 16) / (entry->idlen + 4); >+ >++ entry->idsecorder = (entry->pagesize - 60) / 24; >++ entry->idsecfill = (entry->pagesize - 60) / 20; >+ >++ entry->acsecorder = (entry->pagesize - 60) / 24; >++ entry->acsecfill = (entry->pagesize - 60) / 20; >++ >++ entry->svsecorder = (entry->pagesize - 60) / 24; >++ entry->svsecfill = (entry->pagesize - 60) / 20; >++ >+ ajStrDel(&value); >+ >+ return; >+@@ -1183,28 +1190,38 @@ >+ >+ if(entry->do_id) >+ { >+- entry->idcache = ajBtreeCacheNewC(basenam,ID_EXTENSION,idir,"w+", >+- entry->pagesize, entry->idorder, >+- entry->idfill, level, >+- entry->cachesize); >++ entry->idcache = ajBtreeSecCacheNewC(basenam,ID_EXTENSION,idir,"w+", >++ entry->pagesize, entry->idorder, >++ entry->idfill, level, >++ entry->cachesize, >++ entry->idsecorder, slevel, >++ entry->idsecfill, count, >++ entry->kwlen); >+ ajBtreeCreateRootNode(entry->idcache,0L); >+ } >+ >+ if(entry->do_accession) >+ { >+- entry->accache = ajBtreeCacheNewC(basenam,AC_EXTENSION,idir,"w+", >+- entry->pagesize, entry->acorder, >+- entry->acfill, level, >+- entry->cachesize); >++ entry->accache = ajBtreeSecCacheNewC(basenam,AC_EXTENSION,idir,"w+", >++ entry->pagesize, >++ entry->acorder, entry->acfill, >++ level, >++ entry->cachesize, >++ entry->acsecorder, slevel, >++ entry->acsecfill, count, >++ entry->kwlen); >+ ajBtreeCreateRootNode(entry->accache,0L); >+ } >+ >+ if(entry->do_sv) >+ { >+- entry->svcache = ajBtreeCacheNewC(basenam,SV_EXTENSION,idir,"w+", >+- entry->pagesize, entry->svorder, >+- entry->svfill, level, >+- entry->cachesize); >++ entry->svcache = ajBtreeSecCacheNewC(basenam,SV_EXTENSION,idir,"w+", >++ entry->pagesize, entry->svorder, >++ entry->svfill, level, >++ entry->cachesize, >++ entry->svsecorder, slevel, >++ entry->svsecfill, count, >++ entry->kwlen); >+ ajBtreeCreateRootNode(entry->svcache,0L); >+ } >+ >+@@ -1270,18 +1287,27 @@ >+ >+ if(entry->do_id) >+ { >++ ajBtreeFreePriArray(entry->idcache); >++ ajBtreeFreeSecArray(entry->idcache); >++ >+ ajBtreeCacheSync(entry->idcache,0L); >+ ajBtreeCacheDel(&entry->idcache); >+ } >+ >+ if(entry->do_accession) >+ { >++ ajBtreeFreePriArray(entry->accache); >++ ajBtreeFreeSecArray(entry->accache); >++ >+ ajBtreeCacheSync(entry->accache,0L); >+ ajBtreeCacheDel(&entry->accache); >+ } >+ >+ if(entry->do_sv) >+ { >++ ajBtreeFreePriArray(entry->svcache); >++ ajBtreeFreeSecArray(entry->svcache); >++ >+ ajBtreeCacheSync(entry->svcache,0L); >+ ajBtreeCacheDel(&entry->svcache); >+ } >diff -ruN /usr/ports/biology/emboss/files/patch-embindex.h emboss/files/patch-embindex.h >--- /usr/ports/biology/emboss/files/patch-embindex.h Wed Dec 31 21:00:00 1969 >+++ emboss/files/patch-embindex.h Mon Jan 23 12:25:48 2006 >@@ -0,0 +1,96 @@ >+--- nucleus/embindex.h.orig Mon Jan 23 12:24:46 2006 >++++ nucleus/embindex.h Thu Dec 22 13:12:44 2005 >+@@ -16,6 +16,76 @@ >+ #define BTREE_DEF_CACHESIZE 100 >+ #define BTREE_DEF_PAGESIZE 2048 >+ >++/* @data EmbPBtreeEntry ******************************************************* >++** >++** Index tree entries >++** >++** @alias EmbSBtreeEntry >++** >++** @attr do_id [AjBool] Undocumented >++** @attr do_accession [AjBool] Undocumented >++** @attr do_sv [AjBool] Undocumented >++** @attr do_description [AjBool] Undocumented >++** @attr do_keyword [AjBool] Undocumented >++** @attr do_taxonomy [AjBool] Undocumented >++** @attr dbname [AjPStr] Undocumented >++** @attr dbrs [AjPStr] Undocumented >++** @attr release [AjPStr] Undocumented >++** @attr date [AjPStr] Undocumented >++** @attr dbtype [AjPStr] Undocumented >++** @attr directory [AjPStr] Undocumented >++** @attr idirectory [AjPStr] Undocumented >++** @attr files [AjPList] Undocumented >++** @attr reffiles [AjPList] Undocumented >++** @attr nfiles [ajint] Undocumented >++** @attr cachesize [ajint] Undocumented >++** @attr pagesize [ajint] Undocumented >++** @attr idlen [ajint] Undocumented >++** @attr aclen [ajint] Undocumented >++** @attr svlen [ajint] Undocumented >++** @attr kwlen [ajint] Undocumented >++** @attr delen [ajint] Undocumented >++** @attr txlen [ajint] Undocumented >++** @attr idorder [ajint] Undocumented >++** @attr idfill [ajint] Undocumented >++** @attr idsecorder [ajint] Undocumented >++** @attr idsecfill [ajint] Undocumented >++** @attr acorder [ajint] Undocumented >++** @attr acfill [ajint] Undocumented >++** @attr acsecorder [ajint] Undocumented >++** @attr acsecfill [ajint] Undocumented >++** @attr svorder [ajint] Undocumented >++** @attr svfill [ajint] Undocumented >++** @attr svsecorder [ajint] Undocumented >++** @attr svsecfill [ajint] Undocumented >++** @attr kworder [ajint] Undocumented >++** @attr kwfill [ajint] Undocumented >++** @attr kwsecorder [ajint] Undocumented >++** @attr kwsecfill [ajint] Undocumented >++** @attr deorder [ajint] Undocumented >++** @attr defill [ajint] Undocumented >++** @attr desecorder [ajint] Undocumented >++** @attr desecfill [ajint] Undocumented >++** @attr txorder [ajint] Undocumented >++** @attr txfill [ajint] Undocumented >++** @attr txsecorder [ajint] Undocumented >++** @attr txsecfill [ajint] Undocumented >++** @attr idcache [AjPBtcache] Undocumented >++** @attr accache [AjPBtcache] Undocumented >++** @attr svcache [AjPBtcache] Undocumented >++** @attr kwcache [AjPBtcache] Undocumented >++** @attr decache [AjPBtcache] Undocumented >++** @attr txcache [AjPBtcache] Undocumented >++** @attr fpos [ajlong] Undocumented >++** @attr reffpos [ajlong] Undocumented >++** @attr id [AjPStr] Undocumented >++** @attr ac [AjPList] Undocumented >++** @attr sv [AjPList] Undocumented >++** @attr tx [AjPList] Undocumented >++** @attr kw [AjPList] Undocumented >++** @attr de [AjPList] Undocumented >++******************************************************************************/ >++ >+ typedef struct EmbSBtreeEntry >+ { >+ AjBool do_id; >+@@ -48,10 +118,16 @@ >+ >+ ajint idorder; >+ ajint idfill; >++ ajint idsecorder; >++ ajint idsecfill; >+ ajint acorder; >+ ajint acfill; >++ ajint acsecorder; >++ ajint acsecfill; >+ ajint svorder; >+ ajint svfill; >++ ajint svsecorder; >++ ajint svsecfill; >+ >+ ajint kworder; >+ ajint kwfill; >diff -ruN /usr/ports/biology/emboss/files/patch-emboss.default.template emboss/files/patch-emboss.default.template >--- /usr/ports/biology/emboss/files/patch-emboss.default.template Wed Dec 31 21:00:00 1969 >+++ emboss/files/patch-emboss.default.template Wed Feb 8 00:44:31 2006 >@@ -0,0 +1,20 @@ >+--- emboss/emboss.default.template.orig Wed Feb 8 00:43:42 2006 >++++ emboss/emboss.default.template Wed Feb 8 00:40:34 2006 >+@@ -4,7 +4,7 @@ >+ # By default this is /usr/local/share/EMBOSS/test but the directory can >+ # be changed with --prefix when you configure EMBOSS. >+ >+-# SET emboss_tempdata path_to_directory_$EMBOSS/test >++# SET emboss_tempdata %%DATADIR%%/test >+ >+ # Proxy - set this if any databases are accessed through a proxy web server. >+ # Turn off in the DB definition with proxy: ":" for any >+@@ -15,7 +15,7 @@ >+ # Logfile - set this to a file that any user can append to >+ # and EMBOSS applications will automatically write log information >+ >+-# SET emboss_logfile /packages/emboss/emboss/log >++# SET emboss_logfile /var/log/emboss.log >+ >+ # Pagesize - this is the size of disc page blocks and is >+ # required by the 'dbx' indexing programs and 'method: emboss' >diff -ruN /usr/ports/biology/emboss/files/patch-marscan.c emboss/files/patch-marscan.c >--- /usr/ports/biology/emboss/files/patch-marscan.c Wed Dec 31 21:00:00 1969 >+++ emboss/files/patch-marscan.c Mon Jan 23 11:37:24 2006 >@@ -0,0 +1,72 @@ >+--- emboss/marscan.c.orig Mon Jan 23 11:36:36 2006 >++++ emboss/marscan.c Mon Jan 23 08:56:35 2006 >+@@ -1,7 +1,7 @@ >+ /* @source marscan application >+ ** >+ ** Finds MAR/SAR sites in nucleic sequences >+-** @author: Copyright (C) Gary Williams (gwilliam@hgmp.mrc.ac.uk) >++** @author Copyright (C) Gary Williams (gwilliam@hgmp.mrc.ac.uk) >+ ** @@ >+ ** >+ ** This program is free software; you can redistribute it and/or >+@@ -249,33 +249,41 @@ >+ amino8rev, carboxyl8rev, buf8rev, off8rev, >+ sotable8rev, solimit8rev, regexp8rev, skipm8rev, >+ &hits8rev, m8rev, &tidy8rev); >++ ajDebug("Marscan '%S' hits %d:%d %d:%d\n", seqname, >++ hits16, hits16rev, >++ hits8, hits8rev); >++ >++ /* initialise the output feature table */ >++ tab = ajFeattableNewDna(seqname); >++ >++ /* >++ ** append reverse lists to forward lists and sort them by match >++ ** position >++ */ >+ >+- if((hits16 || hits16rev) && (hits8 || hits8rev)) >++ if(hits8 || hits8rev) >+ { >+- /* >+- ** append reverse lists to forward lists and sort them by match >+- ** position >+- */ >+ ajListPushList(l8, &l8rev); >+ ajListSort(l8, embPatRestrictStartCompare); >+- >++ } >++ if((hits16 || hits16rev)) >++ { >+ ajListPushList(l16, &l16rev); >+ ajListSort(l16, embPatRestrictStartCompare); >+ >+- /* initialise the output feature table */ >+- if(!tab) >+- tab = ajFeattableNewDna(seqname); >+- >+- /* >+- ** find pairs of hits within the required distance and output >+- ** the results >+- */ >+- marscan_stepdown(l16, l8, &tab); >+- >+- /* write features and tidy up */ >+- ajReportWrite(report, tab, seq); >+- ajFeattableDel(&tab); >+ } >++ >++ >++ /* >++ ** find pairs of hits within the required distance and output >++ ** the results >++ */ >++ marscan_stepdown(l16, l8, &tab); >++ >++ ajDebug("Marscan reportwrite '%S'\n", seqname); >++ /* write features and tidy up */ >++ ajReportWrite(report, tab, seq); >++ ajFeattableDel(&tab); >+ >+ while(ajListPop(l16,(void **)&aptr)) >+ embMatMatchDel(&aptr); >diff -ruN /usr/ports/biology/emboss/files/pkg-message.in emboss/files/pkg-message.in >--- /usr/ports/biology/emboss/files/pkg-message.in Wed Dec 31 21:00:00 1969 >+++ emboss/files/pkg-message.in Wed Feb 8 14:12:12 2006 >@@ -0,0 +1,27 @@ >+============================================================================= >+ >+ The EMBOSS suite has been successfully installed under >+ %%PREFIX%% >+ >+ To run EMBOSS programs make sure that %%PREFIX%%/bin is in your PATH. >+ >+ In order to see graphical output from some EMBOSS programs, you will >+ need to set the following environment variable in your shell: >+ >+ set PLPLOT_LIB to: "%%PREFIX%%/share/EMBOSS" >+ >+ A sample configuration file has been installed in >+ %%DATADIR%%/emboss.default.template >+ >+ This must be renamed to emboss.default and edited to suit your site >+ and requirements. >+ >+ A .embossrc file in a user's home directory overrides settings in the >+ system-wide emboss.default. >+ >+ Additional third party applications for EMBOSS can be installed from the >+ biology/embassy port. Remember, though that if you installed EMBOSS in a >+ PREFIX other than the default, you will have to install EMBASSY into this >+ same PREFIX. >+ >+============================================================================= >diff -ruN /usr/ports/biology/emboss/files/pre-install.in emboss/files/pre-install.in >--- /usr/ports/biology/emboss/files/pre-install.in Wed Dec 31 21:00:00 1969 >+++ emboss/files/pre-install.in Wed Jan 25 15:06:47 2006 >@@ -0,0 +1,21 @@ >+=============================================================================== >+ >+ ATENTION!!! >+ >+ The EMBOSS port is currently affected by a CONFLICTS condition. >+ If you install the port in the default prefix >+ PREFIX = LOCALBASE = %%LOCALBASE%% >+ it will conflict with other ports that install applications with the >+ same name, in the same places. >+ >+ It is highly recommended that you install EMBOSS to a different prefix, >+ for example PREFIX=%%LOCALBASE%%/emboss >+ In this case, all of the documentation and examples will be installed >+ within this PREFIX. >+ >+ If you still choose to install EMBOSS on the default prefix, do note >+ that documentation, examples and shared data will not be installed >+ in the usual places for a FreeBSD port (i.e. docs in >+ PREFIX/share/EMBOSS/doc instead of in PREFIX/share/doc/EMBOSS). >+ >+=============================================================================== >diff -ruN /usr/ports/biology/emboss/pkg-message emboss/pkg-message >--- /usr/ports/biology/emboss/pkg-message Thu Apr 28 09:05:22 2005 >+++ emboss/pkg-message Wed Dec 31 21:00:00 1969 >@@ -1,22 +0,0 @@ >--------------------------------------------------------------------------- >- >-The EMBOSS suite has been successfully installed. >- >-In order to see graphical output from some EMBOSS programs, you will need to >-set the following environment variable in your shell startup file: >- >-- set PLPLOT_LIB to: "%%PREFIX%%/share/EMBOSS" >- >-NB: A sample configuration file has been installed to %%PREFIX%%/etc as >-emboss.default.sample. This must be renamed to emboss.default and edited >-to suit your site and its requirements. >- >-A .embossrc in a user's home directory overrides settings in the >-system-wide emboss.default. >- >-Online EMBOSS documentation is available at: >- http://www.uk.embnet.org/Software/EMBOSS/userdoc.html >- http://www.uk.embnet.org/Software/EMBOSS/Doc/ >- http://emboss.sourceforge.net/docs/ >- >--------------------------------------------------------------------------- >diff -ruN /usr/ports/biology/emboss/pkg-plist emboss/pkg-plist >--- /usr/ports/biology/emboss/pkg-plist Wed Mar 1 20:11:41 2006 >+++ emboss/pkg-plist Tue Mar 28 16:23:31 2006 >@@ -17,6 +17,7 @@ > bin/chips > bin/cirdna > bin/codcmp >+bin/codcopy > bin/coderet > bin/compseq > bin/cons >@@ -24,12 +25,15 @@ > bin/cpgreport > bin/cusp > bin/cutgextract >-bin/cutseq > bin/dan >+bin/cutseq > bin/dbiblast > bin/dbifasta > bin/dbiflat > bin/dbigcg >+bin/dbxfasta >+bin/dbxflat >+bin/dbxgcg > bin/degapseq > bin/descseq > bin/diffseq >@@ -119,7 +123,6 @@ > bin/restover > bin/restrict > bin/revseq >-bin/runJemboss.csh > bin/seealso > bin/seqmatchall > bin/seqret >@@ -135,11 +138,11 @@ > bin/sirna > bin/sixpack > bin/skipseq >+bin/syco > bin/splitter > bin/stretcher > bin/stssearch > bin/supermatcher >-bin/syco > bin/tcode > bin/textsearch > bin/tfextract >@@ -160,18 +163,30 @@ > bin/wordmatch > bin/wossname > bin/yank >-etc/emboss.default.sample >+bin/runJemboss.csh >+include/drivers.h >+include/pdf.h >+include/plcore.h >+include/plevent.h >+include/plplotP.h >+include/plxwd.h >+include/metadefs.h >+include/plConfig.h >+include/pldebug.h >+include/plplot.h >+include/plstrm.h >+include/plDevs.h >+include/ajax.h >+include/ajarch.h >+include/ajdefine.h > include/ajacd.h > include/ajalign.h >-include/ajarch.h > include/ajarr.h > include/ajassert.h >-include/ajax.h > include/ajbase.h > include/ajcall.h > include/ajcod.h > include/ajdan.h >-include/ajdefine.h > include/ajdmx.h > include/ajdomain.h > include/ajexcept.h >@@ -180,8 +195,8 @@ > include/ajfile.h > include/ajfmt.h > include/ajgraph.h >-include/ajgraphstruct.h > include/ajgraphxml.h >+include/ajgraphstruct.h > include/ajhist.h > include/ajindex.h > include/ajjava.h >@@ -214,7 +229,14 @@ > include/ajtree.h > include/ajutil.h > include/ajvector.h >-include/drivers.h >+include/pcre.h >+include/pcre_chartables.c >+include/pcre_config.h >+include/pcre_get.c >+include/pcre_printint.c >+include/pcre_internal.h >+include/pcreposix.h >+include/emboss.h > include/embaln.h > include/embcom.h > include/embcons.h >@@ -232,999 +254,234 @@ > include/embmisc.h > include/embmol.h > include/embnmer.h >-include/emboss.h > include/embpat.h >-include/embpdb.h > include/embprop.h >+include/embpdb.h > include/embread.h >-include/embshow.h > include/embsig.h >+include/embshow.h > include/embword.h >-include/metadefs.h >-include/pcre.h >-include/pcre_chartables.c >-include/pcre_config.h >-include/pcre_get.c >-include/pcre_internal.h >-include/pcre_printint.c >-include/pcreposix.h >-include/pdf.h >-include/plConfig.h >-include/plDevs.h >-include/plcore.h >-include/pldebug.h >-include/plevent.h >-include/plplot.h >-include/plplotP.h >-include/plstrm.h >-include/plxwd.h >-lib/libajax.a >-lib/libajax.la >+lib/libplplot.so.5 >+lib/libplplot.so >+lib/libplplot.la >+lib/libplplot.a >+lib/libajax.so.3 > lib/libajax.so >-lib/libajax.so.1 >-lib/libajaxg.a >-lib/libajaxg.la >+lib/libajax.la >+lib/libajax.a >+lib/libajaxg.so.3 > lib/libajaxg.so >-lib/libajaxg.so.1 >-lib/libnucleus.a >-lib/libnucleus.la >+lib/libajaxg.la >+lib/libajaxg.a >+lib/libnucleus.so.3 > lib/libnucleus.so >-lib/libnucleus.so.1 >-lib/libplplot.a >-lib/libplplot.la >-lib/libplplot.so >-lib/libplplot.so.5 >-%%DATADIR%%/acd/aaindexextract.acd >-%%DATADIR%%/acd/abiview.acd >-%%DATADIR%%/acd/acdc.acd >-%%DATADIR%%/acd/acdlog.acd >-%%DATADIR%%/acd/acdpretty.acd >-%%DATADIR%%/acd/acdtable.acd >-%%DATADIR%%/acd/acdtrace.acd >-%%DATADIR%%/acd/acdvalid.acd >-%%DATADIR%%/acd/ajbad.acd >-%%DATADIR%%/acd/ajfeatest.acd >-%%DATADIR%%/acd/ajtest.acd >-%%DATADIR%%/acd/antigenic.acd >-%%DATADIR%%/acd/backtranseq.acd >-%%DATADIR%%/acd/banana.acd >-%%DATADIR%%/acd/biosed.acd >-%%DATADIR%%/acd/btwisted.acd >-%%DATADIR%%/acd/cai.acd >-%%DATADIR%%/acd/chaos.acd >-%%DATADIR%%/acd/charge.acd >-%%DATADIR%%/acd/checktrans.acd >-%%DATADIR%%/acd/chips.acd >-%%DATADIR%%/acd/cirdna.acd >-%%DATADIR%%/acd/codcmp.acd >-%%DATADIR%%/acd/coderet.acd >-%%DATADIR%%/acd/codes.english >-%%DATADIR%%/acd/complex.acd >-%%DATADIR%%/acd/compseq.acd >-%%DATADIR%%/acd/cons.acd >-%%DATADIR%%/acd/corbatest.acd >-%%DATADIR%%/acd/cpgplot.acd >-%%DATADIR%%/acd/cpgreport.acd >-%%DATADIR%%/acd/cusp.acd >-%%DATADIR%%/acd/cutgextract.acd >-%%DATADIR%%/acd/cutseq.acd >-%%DATADIR%%/acd/dan.acd >-%%DATADIR%%/acd/dbiblast.acd >-%%DATADIR%%/acd/dbifasta.acd >-%%DATADIR%%/acd/dbiflat.acd >-%%DATADIR%%/acd/dbigcg.acd >-%%DATADIR%%/acd/degapseq.acd >-%%DATADIR%%/acd/demoalign.acd >-%%DATADIR%%/acd/demofeatures.acd >-%%DATADIR%%/acd/demolist.acd >-%%DATADIR%%/acd/demoreport.acd >-%%DATADIR%%/acd/demosequence.acd >-%%DATADIR%%/acd/demostring.acd >-%%DATADIR%%/acd/demotable.acd >-%%DATADIR%%/acd/descseq.acd >-%%DATADIR%%/acd/diffseq.acd >-%%DATADIR%%/acd/digest.acd >-%%DATADIR%%/acd/distmat.acd >-%%DATADIR%%/acd/dotmatcher.acd >-%%DATADIR%%/acd/dotpath.acd >-%%DATADIR%%/acd/dottup.acd >-%%DATADIR%%/acd/dreg.acd >-%%DATADIR%%/acd/einverted.acd >-%%DATADIR%%/acd/embossdata.acd >-%%DATADIR%%/acd/embossversion.acd >-%%DATADIR%%/acd/emma.acd >-%%DATADIR%%/acd/emowse.acd >-%%DATADIR%%/acd/entrails.acd >-%%DATADIR%%/acd/entret.acd >-%%DATADIR%%/acd/epestfind.acd >-%%DATADIR%%/acd/eprimer3.acd >-%%DATADIR%%/acd/equicktandem.acd >-%%DATADIR%%/acd/est2genome.acd >-%%DATADIR%%/acd/etandem.acd >-%%DATADIR%%/acd/extractfeat.acd >-%%DATADIR%%/acd/extractseq.acd >-%%DATADIR%%/acd/findkm.acd >-%%DATADIR%%/acd/freak.acd >-%%DATADIR%%/acd/fuzznuc.acd >-%%DATADIR%%/acd/fuzzpro.acd >-%%DATADIR%%/acd/fuzztran.acd >-%%DATADIR%%/acd/garnier.acd >-%%DATADIR%%/acd/geecee.acd >-%%DATADIR%%/acd/getorf.acd >-%%DATADIR%%/acd/giep.acd >-%%DATADIR%%/acd/groups.standard >-%%DATADIR%%/acd/helixturnhelix.acd >-%%DATADIR%%/acd/histogramtest.acd >-%%DATADIR%%/acd/hmoment.acd >-%%DATADIR%%/acd/iep.acd >-%%DATADIR%%/acd/infoalign.acd >-%%DATADIR%%/acd/infoseq.acd >-%%DATADIR%%/acd/intconv.acd >-%%DATADIR%%/acd/isochore.acd >-%%DATADIR%%/acd/kmrsplitter.acd >-%%DATADIR%%/acd/kmrunion.acd >-%%DATADIR%%/acd/knowntypes.standard >-%%DATADIR%%/acd/lindna.acd >-%%DATADIR%%/acd/listor.acd >-%%DATADIR%%/acd/marscan.acd >-%%DATADIR%%/acd/maskfeat.acd >-%%DATADIR%%/acd/maskseq.acd >-%%DATADIR%%/acd/matcher.acd >-%%DATADIR%%/acd/megamerger.acd >-%%DATADIR%%/acd/merger.acd >-%%DATADIR%%/acd/msbar.acd >-%%DATADIR%%/acd/mwcontam.acd >-%%DATADIR%%/acd/mwfilter.acd >-%%DATADIR%%/acd/needle.acd >-%%DATADIR%%/acd/newcoils.acd >-%%DATADIR%%/acd/newcpgreport.acd >-%%DATADIR%%/acd/newcpgseek.acd >-%%DATADIR%%/acd/newseq.acd >-%%DATADIR%%/acd/noreturn.acd >-%%DATADIR%%/acd/notseq.acd >-%%DATADIR%%/acd/nthseq.acd >-%%DATADIR%%/acd/octanol.acd >-%%DATADIR%%/acd/oddcomp.acd >-%%DATADIR%%/acd/palindrome.acd >-%%DATADIR%%/acd/pasteseq.acd >-%%DATADIR%%/acd/patmatdb.acd >-%%DATADIR%%/acd/patmatmotifs.acd >-%%DATADIR%%/acd/patmattest.acd >-%%DATADIR%%/acd/pepcoil.acd >-%%DATADIR%%/acd/pepinfo.acd >-%%DATADIR%%/acd/pepnet.acd >-%%DATADIR%%/acd/pepstats.acd >-%%DATADIR%%/acd/pepwheel.acd >-%%DATADIR%%/acd/pepwindow.acd >-%%DATADIR%%/acd/pepwindowall.acd >-%%DATADIR%%/acd/plotcon.acd >-%%DATADIR%%/acd/plotorf.acd >-%%DATADIR%%/acd/polydot.acd >-%%DATADIR%%/acd/preg.acd >-%%DATADIR%%/acd/prettyplot.acd >-%%DATADIR%%/acd/prettyseq.acd >-%%DATADIR%%/acd/prima.acd >-%%DATADIR%%/acd/primers.acd >-%%DATADIR%%/acd/primersearch.acd >-%%DATADIR%%/acd/printsextract.acd >-%%DATADIR%%/acd/profit.acd >-%%DATADIR%%/acd/prophecy.acd >-%%DATADIR%%/acd/prophet.acd >-%%DATADIR%%/acd/prosextract.acd >-%%DATADIR%%/acd/pscan.acd >-%%DATADIR%%/acd/psiphi.acd >-%%DATADIR%%/acd/rebaseextract.acd >-%%DATADIR%%/acd/recoder.acd >-%%DATADIR%%/acd/redata.acd >-%%DATADIR%%/acd/remap.acd >-%%DATADIR%%/acd/restover.acd >-%%DATADIR%%/acd/restrict.acd >-%%DATADIR%%/acd/revseq.acd >-%%DATADIR%%/acd/sections.standard >-%%DATADIR%%/acd/seealso.acd >-%%DATADIR%%/acd/seqinfo.acd >-%%DATADIR%%/acd/seqmatchall.acd >-%%DATADIR%%/acd/seqret.acd >-%%DATADIR%%/acd/seqretall.acd >-%%DATADIR%%/acd/seqretallfeat.acd >-%%DATADIR%%/acd/seqretset.acd >-%%DATADIR%%/acd/seqretsingle.acd >-%%DATADIR%%/acd/seqretsplit.acd >-%%DATADIR%%/acd/seqrettype.acd >-%%DATADIR%%/acd/showalign.acd >-%%DATADIR%%/acd/showdb.acd >-%%DATADIR%%/acd/showfeat.acd >-%%DATADIR%%/acd/showorf.acd >-%%DATADIR%%/acd/showseq.acd >-%%DATADIR%%/acd/shuffleseq.acd >-%%DATADIR%%/acd/sigcleave.acd >-%%DATADIR%%/acd/silent.acd >-%%DATADIR%%/acd/sirna.acd >-%%DATADIR%%/acd/sixpack.acd >-%%DATADIR%%/acd/skipseq.acd >-%%DATADIR%%/acd/splitter.acd >-%%DATADIR%%/acd/stretcher.acd >-%%DATADIR%%/acd/stssearch.acd >-%%DATADIR%%/acd/supermatcher.acd >-%%DATADIR%%/acd/syco.acd >-%%DATADIR%%/acd/tcode.acd >-%%DATADIR%%/acd/testplot.acd >-%%DATADIR%%/acd/textsearch.acd >-%%DATADIR%%/acd/tfextract.acd >-%%DATADIR%%/acd/tfm.acd >-%%DATADIR%%/acd/tfscan.acd >-%%DATADIR%%/acd/tmap.acd >-%%DATADIR%%/acd/tranalign.acd >-%%DATADIR%%/acd/transeq.acd >-%%DATADIR%%/acd/treetypedisplay.acd >-%%DATADIR%%/acd/trimest.acd >-%%DATADIR%%/acd/trimseq.acd >-%%DATADIR%%/acd/twofeat.acd >-%%DATADIR%%/acd/union.acd >-%%DATADIR%%/acd/variables.standard >-%%DATADIR%%/acd/vectorstrip.acd >-%%DATADIR%%/acd/water.acd >-%%DATADIR%%/acd/whichdb.acd >-%%DATADIR%%/acd/wobble.acd >-%%DATADIR%%/acd/wordcount.acd >-%%DATADIR%%/acd/wordmatch.acd >-%%DATADIR%%/acd/wossname.acd >-%%DATADIR%%/acd/yank.acd >-%%DATADIR%%/data/AAINDEX/dummyfile >-%%DATADIR%%/data/CODONS/Eacc.cut >-%%DATADIR%%/data/CODONS/Eadenovirus5.cut >-%%DATADIR%%/data/CODONS/Eadenovirus7.cut >-%%DATADIR%%/data/CODONS/Eaidlav.cut >-%%DATADIR%%/data/CODONS/Eanasp.cut >-%%DATADIR%%/data/CODONS/Eani.cut >-%%DATADIR%%/data/CODONS/Eani_h.cut >-%%DATADIR%%/data/CODONS/Eanidmit.cut >-%%DATADIR%%/data/CODONS/Easn.cut >-%%DATADIR%%/data/CODONS/Eath.cut >-%%DATADIR%%/data/CODONS/Eatu.cut >-%%DATADIR%%/data/CODONS/Eavi.cut >-%%DATADIR%%/data/CODONS/Ebja.cut >-%%DATADIR%%/data/CODONS/Ebly.cut >-%%DATADIR%%/data/CODONS/Ebme.cut >-%%DATADIR%%/data/CODONS/Ebmo.cut >-%%DATADIR%%/data/CODONS/Ebna.cut >-%%DATADIR%%/data/CODONS/Ebov.cut >-%%DATADIR%%/data/CODONS/Ebovsp.cut >-%%DATADIR%%/data/CODONS/Ebst.cut >-%%DATADIR%%/data/CODONS/Ebsu.cut >-%%DATADIR%%/data/CODONS/Ebsu_h.cut >-%%DATADIR%%/data/CODONS/Ecac.cut >-%%DATADIR%%/data/CODONS/Ecal.cut >-%%DATADIR%%/data/CODONS/Eccr.cut >-%%DATADIR%%/data/CODONS/Ecel.cut >-%%DATADIR%%/data/CODONS/Echi.cut >-%%DATADIR%%/data/CODONS/Echicken.cut >-%%DATADIR%%/data/CODONS/Echisp.cut >-%%DATADIR%%/data/CODONS/Echk.cut >-%%DATADIR%%/data/CODONS/Echmp.cut >-%%DATADIR%%/data/CODONS/Echnt.cut >-%%DATADIR%%/data/CODONS/Echos.cut >-%%DATADIR%%/data/CODONS/Echzm.cut >-%%DATADIR%%/data/CODONS/Echzmrubp.cut >-%%DATADIR%%/data/CODONS/Ecpx.cut >-%%DATADIR%%/data/CODONS/Ecre.cut >-%%DATADIR%%/data/CODONS/Ecrisp.cut >-%%DATADIR%%/data/CODONS/Ectr.cut >-%%DATADIR%%/data/CODONS/Edayhoff.cut >-%%DATADIR%%/data/CODONS/Eddi.cut >-%%DATADIR%%/data/CODONS/Eddi_h.cut >-%%DATADIR%%/data/CODONS/Edog.cut >-%%DATADIR%%/data/CODONS/Edro.cut >-%%DATADIR%%/data/CODONS/Edro_h.cut >-%%DATADIR%%/data/CODONS/Edrosophila.cut >-%%DATADIR%%/data/CODONS/Eeca.cut >-%%DATADIR%%/data/CODONS/Eeco.cut >-%%DATADIR%%/data/CODONS/Eeco_h.cut >-%%DATADIR%%/data/CODONS/Eecoli.cut >-%%DATADIR%%/data/CODONS/Ef1.cut >-%%DATADIR%%/data/CODONS/Efish.cut >-%%DATADIR%%/data/CODONS/Efmdvpolyp.cut >-%%DATADIR%%/data/CODONS/Eham.cut >-%%DATADIR%%/data/CODONS/Ehha.cut >-%%DATADIR%%/data/CODONS/Ehin.cut >-%%DATADIR%%/data/CODONS/Ehma.cut >-%%DATADIR%%/data/CODONS/Ehum.cut >-%%DATADIR%%/data/CODONS/Ehuman.cut >-%%DATADIR%%/data/CODONS/Ekla.cut >-%%DATADIR%%/data/CODONS/Ekpn.cut >-%%DATADIR%%/data/CODONS/Ella.cut >-%%DATADIR%%/data/CODONS/Emac.cut >-%%DATADIR%%/data/CODONS/Emaize.cut >-%%DATADIR%%/data/CODONS/Emam_h.cut >-%%DATADIR%%/data/CODONS/Emixlg.cut >-%%DATADIR%%/data/CODONS/Emouse.cut >-%%DATADIR%%/data/CODONS/Emsa.cut >-%%DATADIR%%/data/CODONS/Emse.cut >-%%DATADIR%%/data/CODONS/Emta.cut >-%%DATADIR%%/data/CODONS/Emtu.cut >-%%DATADIR%%/data/CODONS/Emus.cut >-%%DATADIR%%/data/CODONS/Emussp.cut >-%%DATADIR%%/data/CODONS/Emva.cut >-%%DATADIR%%/data/CODONS/Emze.cut >-%%DATADIR%%/data/CODONS/Emzecp.cut >-%%DATADIR%%/data/CODONS/Encr.cut >-%%DATADIR%%/data/CODONS/Eneu.cut >-%%DATADIR%%/data/CODONS/Engo.cut >-%%DATADIR%%/data/CODONS/Eoncsp.cut >-%%DATADIR%%/data/CODONS/Epae.cut >-%%DATADIR%%/data/CODONS/Epea.cut >-%%DATADIR%%/data/CODONS/Epet.cut >-%%DATADIR%%/data/CODONS/Epfa.cut >-%%DATADIR%%/data/CODONS/Ephix174.cut >-%%DATADIR%%/data/CODONS/Ephv.cut >-%%DATADIR%%/data/CODONS/Ephy.cut >-%%DATADIR%%/data/CODONS/Epig.cut >-%%DATADIR%%/data/CODONS/Epolyomaa2.cut >-%%DATADIR%%/data/CODONS/Epombe.cut >-%%DATADIR%%/data/CODONS/Epombecai.cut >-%%DATADIR%%/data/CODONS/Epot.cut >-%%DATADIR%%/data/CODONS/Eppu.cut >-%%DATADIR%%/data/CODONS/Epse.cut >-%%DATADIR%%/data/CODONS/Epsy.cut >-%%DATADIR%%/data/CODONS/Epvu.cut >-%%DATADIR%%/data/CODONS/Erab.cut >-%%DATADIR%%/data/CODONS/Erabbit.cut >-%%DATADIR%%/data/CODONS/Erabsp.cut >-%%DATADIR%%/data/CODONS/Erat.cut >-%%DATADIR%%/data/CODONS/Eratsp.cut >-%%DATADIR%%/data/CODONS/Erca.cut >-%%DATADIR%%/data/CODONS/Erhm.cut >-%%DATADIR%%/data/CODONS/Eric.cut >-%%DATADIR%%/data/CODONS/Erle.cut >-%%DATADIR%%/data/CODONS/Erme.cut >-%%DATADIR%%/data/CODONS/Ersp.cut >-%%DATADIR%%/data/CODONS/Esalsp.cut >-%%DATADIR%%/data/CODONS/Esau.cut >-%%DATADIR%%/data/CODONS/Esco.cut >-%%DATADIR%%/data/CODONS/Esgi.cut >-%%DATADIR%%/data/CODONS/Eshp.cut >-%%DATADIR%%/data/CODONS/Eshpsp.cut >-%%DATADIR%%/data/CODONS/Esli.cut >-%%DATADIR%%/data/CODONS/Eslm.cut >-%%DATADIR%%/data/CODONS/Esma.cut >-%%DATADIR%%/data/CODONS/Esmi.cut >-%%DATADIR%%/data/CODONS/Esmu.cut >-%%DATADIR%%/data/CODONS/Esoy.cut >-%%DATADIR%%/data/CODONS/Espi.cut >-%%DATADIR%%/data/CODONS/Espn.cut >-%%DATADIR%%/data/CODONS/Espo.cut >-%%DATADIR%%/data/CODONS/Espo_h.cut >-%%DATADIR%%/data/CODONS/Espu.cut >-%%DATADIR%%/data/CODONS/Esta.cut >-%%DATADIR%%/data/CODONS/Esty.cut >-%%DATADIR%%/data/CODONS/Esus.cut >-%%DATADIR%%/data/CODONS/Esv40.cut >-%%DATADIR%%/data/CODONS/Esyhsp.cut >-%%DATADIR%%/data/CODONS/Esynsp.cut >-%%DATADIR%%/data/CODONS/Etbr.cut >-%%DATADIR%%/data/CODONS/Etcr.cut >-%%DATADIR%%/data/CODONS/Eter.cut >-%%DATADIR%%/data/CODONS/Etetsp.cut >-%%DATADIR%%/data/CODONS/Etob.cut >-%%DATADIR%%/data/CODONS/Etobcp.cut >-%%DATADIR%%/data/CODONS/Etom.cut >-%%DATADIR%%/data/CODONS/Etrb.cut >-%%DATADIR%%/data/CODONS/Evco.cut >-%%DATADIR%%/data/CODONS/Ewht.cut >-%%DATADIR%%/data/CODONS/Exel.cut >-%%DATADIR%%/data/CODONS/Exenopus.cut >-%%DATADIR%%/data/CODONS/Eyeast.cut >-%%DATADIR%%/data/CODONS/Eyeastcai.cut >-%%DATADIR%%/data/CODONS/Eyen.cut >-%%DATADIR%%/data/CODONS/Eysc.cut >-%%DATADIR%%/data/CODONS/Eysc_h.cut >-%%DATADIR%%/data/CODONS/Eyscmt.cut >-%%DATADIR%%/data/CODONS/Eysp.cut >-%%DATADIR%%/data/CODONS/Ezebrafish.cut >-%%DATADIR%%/data/CODONS/Ezma.cut >-%%DATADIR%%/data/EBLOSUM30 >-%%DATADIR%%/data/EBLOSUM35 >-%%DATADIR%%/data/EBLOSUM40 >-%%DATADIR%%/data/EBLOSUM45 >-%%DATADIR%%/data/EBLOSUM50 >-%%DATADIR%%/data/EBLOSUM55 >-%%DATADIR%%/data/EBLOSUM60 >-%%DATADIR%%/data/EBLOSUM62 >-%%DATADIR%%/data/EBLOSUM62-12 >-%%DATADIR%%/data/EBLOSUM65 >-%%DATADIR%%/data/EBLOSUM70 >-%%DATADIR%%/data/EBLOSUM75 >-%%DATADIR%%/data/EBLOSUM80 >-%%DATADIR%%/data/EBLOSUM85 >-%%DATADIR%%/data/EBLOSUM90 >-%%DATADIR%%/data/EBLOSUMN >-%%DATADIR%%/data/EDNAFULL >-%%DATADIR%%/data/EDNAMAT >-%%DATADIR%%/data/EGC.0 >-%%DATADIR%%/data/EGC.1 >-%%DATADIR%%/data/EGC.10 >-%%DATADIR%%/data/EGC.11 >-%%DATADIR%%/data/EGC.12 >-%%DATADIR%%/data/EGC.13 >-%%DATADIR%%/data/EGC.14 >-%%DATADIR%%/data/EGC.15 >-%%DATADIR%%/data/EGC.16 >-%%DATADIR%%/data/EGC.2 >-%%DATADIR%%/data/EGC.21 >-%%DATADIR%%/data/EGC.22 >-%%DATADIR%%/data/EGC.23 >-%%DATADIR%%/data/EGC.3 >-%%DATADIR%%/data/EGC.4 >-%%DATADIR%%/data/EGC.5 >-%%DATADIR%%/data/EGC.6 >-%%DATADIR%%/data/EGC.9 >-%%DATADIR%%/data/ENUC.4.2 >-%%DATADIR%%/data/ENUC.4.4 >-%%DATADIR%%/data/EPAM10 >-%%DATADIR%%/data/EPAM100 >-%%DATADIR%%/data/EPAM110 >-%%DATADIR%%/data/EPAM120 >-%%DATADIR%%/data/EPAM130 >-%%DATADIR%%/data/EPAM140 >-%%DATADIR%%/data/EPAM150 >-%%DATADIR%%/data/EPAM160 >-%%DATADIR%%/data/EPAM170 >-%%DATADIR%%/data/EPAM180 >-%%DATADIR%%/data/EPAM190 >-%%DATADIR%%/data/EPAM20 >-%%DATADIR%%/data/EPAM200 >-%%DATADIR%%/data/EPAM210 >-%%DATADIR%%/data/EPAM220 >-%%DATADIR%%/data/EPAM230 >-%%DATADIR%%/data/EPAM240 >-%%DATADIR%%/data/EPAM250 >-%%DATADIR%%/data/EPAM260 >-%%DATADIR%%/data/EPAM270 >-%%DATADIR%%/data/EPAM280 >-%%DATADIR%%/data/EPAM290 >-%%DATADIR%%/data/EPAM30 >-%%DATADIR%%/data/EPAM300 >-%%DATADIR%%/data/EPAM310 >-%%DATADIR%%/data/EPAM320 >-%%DATADIR%%/data/EPAM330 >-%%DATADIR%%/data/EPAM340 >-%%DATADIR%%/data/EPAM350 >-%%DATADIR%%/data/EPAM360 >-%%DATADIR%%/data/EPAM370 >-%%DATADIR%%/data/EPAM380 >-%%DATADIR%%/data/EPAM390 >-%%DATADIR%%/data/EPAM40 >-%%DATADIR%%/data/EPAM400 >-%%DATADIR%%/data/EPAM410 >-%%DATADIR%%/data/EPAM420 >-%%DATADIR%%/data/EPAM430 >-%%DATADIR%%/data/EPAM440 >-%%DATADIR%%/data/EPAM450 >-%%DATADIR%%/data/EPAM460 >-%%DATADIR%%/data/EPAM470 >-%%DATADIR%%/data/EPAM480 >-%%DATADIR%%/data/EPAM490 >-%%DATADIR%%/data/EPAM50 >-%%DATADIR%%/data/EPAM500 >-%%DATADIR%%/data/EPAM60 >-%%DATADIR%%/data/EPAM70 >-%%DATADIR%%/data/EPAM80 >-%%DATADIR%%/data/EPAM90 >-%%DATADIR%%/data/Eaa_acc_surface.dat >-%%DATADIR%%/data/Eaa_hydropathy.dat >-%%DATADIR%%/data/Eaa_properties.dat >-%%DATADIR%%/data/Eamino.dat >-%%DATADIR%%/data/Eangles.dat >-%%DATADIR%%/data/Eangles_tri.dat >-%%DATADIR%%/data/Eantigenic.dat >-%%DATADIR%%/data/Ebases.iub >-%%DATADIR%%/data/Edayhoff.freq >-%%DATADIR%%/data/Edna.melt >-%%DATADIR%%/data/Eembl.ior >-%%DATADIR%%/data/Eenergy.dat >-%%DATADIR%%/data/Efeatures.embl >-%%DATADIR%%/data/Efeatures.emboss >-%%DATADIR%%/data/Efeatures.gff >-%%DATADIR%%/data/Efeatures.pir >-%%DATADIR%%/data/Efeatures.protein >-%%DATADIR%%/data/Efeatures.swiss >-%%DATADIR%%/data/Efreqs.dat >-%%DATADIR%%/data/Ehet.dat >-%%DATADIR%%/data/Ehth.dat >-%%DATADIR%%/data/Ehth87.dat >-%%DATADIR%%/data/Emass.dat >-%%DATADIR%%/data/Emassmod.dat >-%%DATADIR%%/data/Ememe.dat >-%%DATADIR%%/data/Emwfilter.dat >-%%DATADIR%%/data/Enakai.dat >-%%DATADIR%%/data/Epepcoil.dat >-%%DATADIR%%/data/Epk.dat >-%%DATADIR%%/data/Epprofile >-%%DATADIR%%/data/Eprior1.plib >-%%DATADIR%%/data/Eprior30.plib >-%%DATADIR%%/data/Erna.melt >-%%DATADIR%%/data/Esig.euk >-%%DATADIR%%/data/Esig.pro >-%%DATADIR%%/data/Etags.embl >-%%DATADIR%%/data/Etags.emboss >-%%DATADIR%%/data/Etags.gff >-%%DATADIR%%/data/Etags.pir >-%%DATADIR%%/data/Etags.protein >-%%DATADIR%%/data/Etags.swiss >-%%DATADIR%%/data/Etcode.dat >-%%DATADIR%%/data/Evdw.dat >-%%DATADIR%%/data/Ewhite-wimley.dat >-%%DATADIR%%/data/PRINTS/dummyfile >-%%DATADIR%%/data/PROSITE/dummyfile >-%%DATADIR%%/data/REBASE/dummyfile >-%%DATADIR%%/data/embossre.equ >-%%DATADIR%%/emboss.default.template >-%%DATADIR%%/jemboss/LICENSE >-%%DATADIR%%/jemboss/README >-%%DATADIR%%/jemboss/api/allclasses-frame.html >-%%DATADIR%%/jemboss/api/deprecated-list.html >-%%DATADIR%%/jemboss/api/getClasses.pl >-%%DATADIR%%/jemboss/api/help-doc.html >-%%DATADIR%%/jemboss/api/index-all.html >-%%DATADIR%%/jemboss/api/index.html >-%%DATADIR%%/jemboss/api/makeDocs.csh >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/Jemboss.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/Jemboss.winExit.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/JembossLogo.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/JembossParams.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/BuildProgramMenu.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/ResultsMenuBar.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/SetUpMenuBar.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/ShowResultSet.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/ShowSavedResults.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/SwingWorker.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/filetree/DragTree.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/filetree/FileEditorDisplay.PopupListener.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/filetree/FileEditorDisplay.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/filetree/FileNode.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/filetree/FileSaving.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/BuildJembossForm.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/JembossComboPopup.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/JembossComboPopup.myComboUI.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/ListFilePanel.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/SectionPanel.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/SetInFileCard.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/SetOutFileCard.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/TextFieldFloat.DecimalNumberDocument.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/TextFieldFloat.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/TextFieldInt.WholeNumberDocument.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/TextFieldInt.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/TextFieldSink.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/sequenceChooser/CutNPasteTextArea.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/sequenceChooser/FileChooser.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/sequenceChooser/InputSequenceAttributes.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/sequenceChooser/OutputSequenceAttributes.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/sequenceChooser/SequenceFilter.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/sequenceChooser/TextAreaSink.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/startup/Database.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/startup/ProgList.HorizontalMenu.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/startup/ProgList.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/startup/Splash.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/AcdFunResolve.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/AcdVarResolve.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/Ajax.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/Dependent.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/ParseAcd.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/acd/ApplicationFields.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/acd/ApplicationParam.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/programs/JembossProcess.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/programs/ListFile.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/programs/ResultList.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/programs/RunEmbossApplication.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/soap/AuthPopup.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/soap/CallAjax.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/soap/GetWossname.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/soap/JembossRun.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/soap/JembossSoapException.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/soap/PendingResults.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/soap/PrivateRequest.html >-%%DATADIR%%/jemboss/api/org/emboss/jemboss/soap/ResListView.html >-%%DATADIR%%/jemboss/api/overview-tree.html >-%%DATADIR%%/jemboss/api/package-list >-%%DATADIR%%/jemboss/api/packages.html >-%%DATADIR%%/jemboss/api/serialized-form.html >-%%DATADIR%%/jemboss/api/stylesheet.css >-%%DATADIR%%/jemboss/images/Backward_arrow_button.gif >-%%DATADIR%%/jemboss/images/Forward_arrow_button.gif >-%%DATADIR%%/jemboss/images/Go_button.gif >-%%DATADIR%%/jemboss/images/Information_button.gif >-%%DATADIR%%/jemboss/images/Jemboss_logo_greyback.gif >-%%DATADIR%%/jemboss/images/Jemboss_logo_large.gif >-%%DATADIR%%/jemboss/images/Jemboss_logo_small.gif >-%%DATADIR%%/jemboss/images/Job_manager_button.gif >-%%DATADIR%%/jemboss/images/Refresh_button.gif >-%%DATADIR%%/jemboss/images/Refresh_button2.gif >-%%DATADIR%%/jemboss/lib/JembossPrintAlignment.jar >-%%DATADIR%%/jemboss/lib/README >-%%DATADIR%%/jemboss/lib/activation.jar >-%%DATADIR%%/jemboss/lib/axis/axis-ant.jar >-%%DATADIR%%/jemboss/lib/axis/axis.jar >-%%DATADIR%%/jemboss/lib/axis/commons-discovery.jar >-%%DATADIR%%/jemboss/lib/axis/commons-logging.jar >-%%DATADIR%%/jemboss/lib/axis/jaxrpc.jar >-%%DATADIR%%/jemboss/lib/axis/log4j-1.2.8.jar >-%%DATADIR%%/jemboss/lib/axis/saaj.jar >-%%DATADIR%%/jemboss/lib/axis/servlet.jar >-%%DATADIR%%/jemboss/lib/axis/wsdl4j.jar >-%%DATADIR%%/jemboss/lib/grout.jar >-%%DATADIR%%/jemboss/lib/jakarta-regexp-1.2.jar >-%%DATADIR%%/jemboss/lib/jalview.jar >-%%DATADIR%%/jemboss/lib/mail.jar >-%%DATADIR%%/jemboss/lib/xerces.jar >-%%DATADIR%%/jemboss/org/emboss/jemboss/Jemboss.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/JembossJarUtil.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/JembossLogo.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/JembossParams.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/draw/Block.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/draw/DNADraw.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/draw/EmbossCirdnaReader.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/draw/GeneticMarker.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/draw/LineAttribute.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/draw/PrintDNAImage.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/draw/RestrictionEnzyme.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/draw/Ticks.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/draw/Wizard.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/AlignApplet.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/AlignJFrame.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/ColourJFrame.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/ColourMenu.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/ColourPanel.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/Consensus.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/ConsensusOptions.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GraphicSequenceCollection.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutAlignJFrame.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutAlignJFrameEvent.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutAlignJFrameListener.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutGraphicSequenceCollection.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutGraphicSequenceCollectionEvent.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutGraphicSequenceCollectionListener.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutSequence.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutSequenceJPanel.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/IDTableJFrame.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/Matrix.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/MatrixJFrame.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/Paste.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/PatternJFrame.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/PlotConsensus.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/PrettyPlotJFrame.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/PrintAlignment.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/PrintAlignmentImage.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/PrintableJTable.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/Sequence.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/SequenceJPanel.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/SequenceNameJButton.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/SequenceProperties.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/SequenceReader.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/editor/SequenceSaver.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/graphics/Graph2DPlot.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/graphics/PrintPlot.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/AdvancedOptions.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/Browser.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/BuildProgramMenu.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/Favorites.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/ImageIconJPanel.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/KeywordSearch.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/LaunchJalView.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/MemoryComboBox.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/ResultsMenuBar.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/ScrollPanel.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/SequenceData.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/SequenceList.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/SetUpMenuBar.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/ShowResultSet.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/ShowSavedResults.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/SplashThread.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/SwingWorker.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/DragTree.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/FileEditorDisplay.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/FileNode.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/FileSave.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/FileSaving.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/LocalAndRemoteFileTreeFrame.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/LocalTreeToolBar.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/RemoteDragTree.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/RemoteFileNode.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/RemoteFileTreePanel.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/AlignFormat.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/ApplicationNamePanel.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/BuildJembossForm.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/JembossComboPopup.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/LabelTextBox.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/ListFilePanel.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/MultiLineToolTipUI.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/PlafMacros.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/ReportFormat.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/SectionPanel.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/Separator.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/SetInFileCard.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/SetOutFileCard.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/TextFieldFloat.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/TextFieldInt.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/TextFieldSink.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/sequenceChooser/CutNPasteTextArea.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/sequenceChooser/FileChooser.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/sequenceChooser/InputSequenceAttributes.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/sequenceChooser/OutputSequenceAttributes.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/sequenceChooser/SequenceFilter.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/sequenceChooser/TextAreaSink.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/startup/Database.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/gui/startup/ProgList.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/parser/AcdFunResolve.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/parser/AcdVarResolve.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/parser/AcdVariableResolve.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/parser/Ajax.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/parser/AjaxUtil.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/parser/Dependent.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/parser/ParseAcd.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/parser/acd/ApplicationFields.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/parser/acd/ApplicationParam.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/programs/BatchUpdateTimer.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/programs/JembossProcess.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/programs/ListFile.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/programs/ResultList.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/programs/ResultsUpdateTimer.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/programs/RunEmbossApplication.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/programs/RunEmbossApplication2.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/server/AppendToLogFileThread.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/server/JembossAuthServer.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/server/JembossFileAuthServer.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/server/JembossFileServer.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/server/JembossServer.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/server/JembossThread.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/server/TestPrivateServer.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/server/TestPublicServer.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/soap/AuthPopup.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/soap/CallAjax.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/soap/FileList.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/soap/FileRoots.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/soap/GetACD.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/soap/GetHelp.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/soap/GetWossname.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/soap/JembossRun.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/soap/JembossSoapException.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/soap/MakeFileSafe.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/soap/PendingResults.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/soap/PrivateRequest.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/soap/PublicRequest.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/soap/ServerSetup.java >-%%DATADIR%%/jemboss/org/emboss/jemboss/soap/ShowDB.java >-%%DATADIR%%/jemboss/readme.html >-%%DATADIR%%/jemboss/resources/filemgr.html >-%%DATADIR%%/jemboss/resources/jemboss.properties >-%%DATADIR%%/jemboss/resources/readme.html >-%%DATADIR%%/jemboss/resources/readmeAlign.html >-%%DATADIR%%/jemboss/resources/readmeDNADraw.html >-%%DATADIR%%/jemboss/resources/results.html >-%%DATADIR%%/jemboss/resources/seqList.html >-%%DATADIR%%/jemboss/resources/version >-%%DATADIR%%/jemboss/runJemboss.sh >-%%DATADIR%%/jemboss/utils/README >-%%DATADIR%%/jemboss/utils/install-jemboss-server.sh >-%%DATADIR%%/jemboss/utils/keys.sh >-%%DATADIR%%/jemboss/utils/makeFileManagerJNLP.sh >-%%DATADIR%%/jemboss/utils/makeJNLP.sh >-%%DATADIR%%/jemboss/utils/makeJar.csh >-%%DATADIR%%/jemboss/utils/template.html >-%%DATADIR%%/plstnd5.fnt >-%%DATADIR%%/plxtnd5.fnt >-%%DATADIR%%/test/data/aaindex1.test >-%%DATADIR%%/test/data/aligna.dna >-%%DATADIR%%/test/data/aligna.prot >-%%DATADIR%%/test/data/alignapart.dna >-%%DATADIR%%/test/data/alignapart.prot >-%%DATADIR%%/test/data/alignb.dna >-%%DATADIR%%/test/data/alignb.prot >-%%DATADIR%%/test/data/cutg.codon >-%%DATADIR%%/test/data/dna.acedb >-%%DATADIR%%/test/data/dna.aln >-%%DATADIR%%/test/data/dna.asn1 >-%%DATADIR%%/test/data/dna.codata >-%%DATADIR%%/test/data/dna.embl >-%%DATADIR%%/test/data/dna.fasta >-%%DATADIR%%/test/data/dna.fitch >-%%DATADIR%%/test/data/dna.gcg >-%%DATADIR%%/test/data/dna.gcg8 >-%%DATADIR%%/test/data/dna.genbank >-%%DATADIR%%/test/data/dna.ig >-%%DATADIR%%/test/data/dna.m-acedb >-%%DATADIR%%/test/data/dna.m-codata >-%%DATADIR%%/test/data/dna.m-embl >-%%DATADIR%%/test/data/dna.m-fasta >-%%DATADIR%%/test/data/dna.m-fasta-long >-%%DATADIR%%/test/data/dna.m-ncbi >-%%DATADIR%%/test/data/dna.m-strider >-%%DATADIR%%/test/data/dna.msf >-%%DATADIR%%/test/data/dna.msf8 >-%%DATADIR%%/test/data/dna.ncbi >-%%DATADIR%%/test/data/dna.phylip >-%%DATADIR%%/test/data/dna.phylip3 >-%%DATADIR%%/test/data/dna.staden >-%%DATADIR%%/test/data/dna.strider >-%%DATADIR%%/test/data/dna.text >-%%DATADIR%%/test/data/feat.emft >-%%DATADIR%%/test/data/feat.fasta >-%%DATADIR%%/test/data/feat.pir >-%%DATADIR%%/test/data/mw1.dat >-%%DATADIR%%/test/data/mw2.dat >-%%DATADIR%%/test/data/mw3.dat >-%%DATADIR%%/test/data/paamir.pep >-%%DATADIR%%/test/data/pax6_cdna.fasta >-%%DATADIR%%/test/data/prints.test >-%%DATADIR%%/test/data/prosite.dat >-%%DATADIR%%/test/data/prosite.doc >-%%DATADIR%%/test/data/prot.acedb >-%%DATADIR%%/test/data/prot.codata >-%%DATADIR%%/test/data/prot.fasta >-%%DATADIR%%/test/data/prot.gcg >-%%DATADIR%%/test/data/prot.gcg8 >-%%DATADIR%%/test/data/prot.ig >-%%DATADIR%%/test/data/prot.m-acedb >-%%DATADIR%%/test/data/prot.m-codata >-%%DATADIR%%/test/data/prot.m-fasta >-%%DATADIR%%/test/data/prot.m-nbrf >-%%DATADIR%%/test/data/prot.m-ncbi >-%%DATADIR%%/test/data/prot.m-swiss >-%%DATADIR%%/test/data/prot.nbrf >-%%DATADIR%%/test/data/prot.ncbi >-%%DATADIR%%/test/data/prot.swiss >-%%DATADIR%%/test/data/prot.text >-%%DATADIR%%/test/data/site.dat >-%%DATADIR%%/test/data/tranalign.pep >-%%DATADIR%%/test/data/tranalign.seq >-%%DATADIR%%/test/data/withrefm >-%%DATADIR%%/test/data/z83307.seq >-%%DATADIR%%/test/embl/acnum.hit >-%%DATADIR%%/test/embl/acnum.trg >-%%DATADIR%%/test/embl/des.hit >-%%DATADIR%%/test/embl/des.trg >-%%DATADIR%%/test/embl/division.lkp >-%%DATADIR%%/test/embl/entrynam.idx >-%%DATADIR%%/test/embl/est.dat >-%%DATADIR%%/test/embl/fun.dat >-%%DATADIR%%/test/embl/hum1.dat >-%%DATADIR%%/test/embl/inv.dat >-%%DATADIR%%/test/embl/keyword.hit >-%%DATADIR%%/test/embl/keyword.trg >-%%DATADIR%%/test/embl/pln.dat >-%%DATADIR%%/test/embl/pro.dat >-%%DATADIR%%/test/embl/rod.dat >-%%DATADIR%%/test/embl/seqvn.hit >-%%DATADIR%%/test/embl/seqvn.trg >-%%DATADIR%%/test/embl/sts.dat >-%%DATADIR%%/test/embl/taxon.hit >-%%DATADIR%%/test/embl/taxon.trg >-%%DATADIR%%/test/embl/vrl.dat >-%%DATADIR%%/test/embl/vrt.dat >-%%DATADIR%%/test/gb/acnum.hit >-%%DATADIR%%/test/gb/acnum.trg >-%%DATADIR%%/test/gb/ba.ref >-%%DATADIR%%/test/gb/ba.seq >-%%DATADIR%%/test/gb/des.hit >-%%DATADIR%%/test/gb/des.trg >-%%DATADIR%%/test/gb/division.lkp >-%%DATADIR%%/test/gb/entrynam.idx >-%%DATADIR%%/test/gb/htg.ref >-%%DATADIR%%/test/gb/htg.seq >-%%DATADIR%%/test/gb/keyword.hit >-%%DATADIR%%/test/gb/keyword.trg >-%%DATADIR%%/test/gb/seqvn.hit >-%%DATADIR%%/test/gb/seqvn.trg >-%%DATADIR%%/test/gb/taxon.hit >-%%DATADIR%%/test/gb/taxon.trg >-%%DATADIR%%/test/genbank/acnum.hit >-%%DATADIR%%/test/genbank/acnum.trg >-%%DATADIR%%/test/genbank/des.hit >-%%DATADIR%%/test/genbank/des.trg >-%%DATADIR%%/test/genbank/division.lkp >-%%DATADIR%%/test/genbank/entrynam.idx >-%%DATADIR%%/test/genbank/gbbct1.seq >-%%DATADIR%%/test/genbank/gbest1.seq >-%%DATADIR%%/test/genbank/gbinv1.seq >-%%DATADIR%%/test/genbank/gbpln1.seq >-%%DATADIR%%/test/genbank/gbpln2.seq >-%%DATADIR%%/test/genbank/gbpri1.seq >-%%DATADIR%%/test/genbank/gbrod1.seq >-%%DATADIR%%/test/genbank/gbsts1.seq >-%%DATADIR%%/test/genbank/gbvrl1.seq >-%%DATADIR%%/test/genbank/gbvrt.seq >-%%DATADIR%%/test/genbank/keyword.hit >-%%DATADIR%%/test/genbank/keyword.trg >-%%DATADIR%%/test/genbank/seqvn.hit >-%%DATADIR%%/test/genbank/seqvn.trg >-%%DATADIR%%/test/genbank/taxon.hit >-%%DATADIR%%/test/genbank/taxon.trg >-%%DATADIR%%/test/pir/acnum.hit >-%%DATADIR%%/test/pir/acnum.trg >-%%DATADIR%%/test/pir/des.hit >-%%DATADIR%%/test/pir/des.trg >-%%DATADIR%%/test/pir/division.lkp >-%%DATADIR%%/test/pir/entrynam.idx >-%%DATADIR%%/test/pir/keyword.hit >-%%DATADIR%%/test/pir/keyword.trg >-%%DATADIR%%/test/pir/pir1.header >-%%DATADIR%%/test/pir/pir1.names >-%%DATADIR%%/test/pir/pir1.numbers >-%%DATADIR%%/test/pir/pir1.offset >-%%DATADIR%%/test/pir/pir1.ref >-%%DATADIR%%/test/pir/pir1.seq >-%%DATADIR%%/test/pir/pir2.header >-%%DATADIR%%/test/pir/pir2.names >-%%DATADIR%%/test/pir/pir2.numbers >-%%DATADIR%%/test/pir/pir2.offset >-%%DATADIR%%/test/pir/pir2.ref >-%%DATADIR%%/test/pir/pir2.seq >-%%DATADIR%%/test/pir/pir3.header >-%%DATADIR%%/test/pir/pir3.names >-%%DATADIR%%/test/pir/pir3.numbers >-%%DATADIR%%/test/pir/pir3.offset >-%%DATADIR%%/test/pir/pir3.ref >-%%DATADIR%%/test/pir/pir3.seq >-%%DATADIR%%/test/pir/pir4.header >-%%DATADIR%%/test/pir/pir4.names >-%%DATADIR%%/test/pir/pir4.numbers >-%%DATADIR%%/test/pir/pir4.offset >-%%DATADIR%%/test/pir/pir4.ref >-%%DATADIR%%/test/pir/pir4.seq >-%%DATADIR%%/test/pir/taxon.hit >-%%DATADIR%%/test/pir/taxon.trg >-%%DATADIR%%/test/swiss/acnum.hit >-%%DATADIR%%/test/swiss/acnum.trg >-%%DATADIR%%/test/swiss/des.hit >-%%DATADIR%%/test/swiss/des.trg >-%%DATADIR%%/test/swiss/division.lkp >-%%DATADIR%%/test/swiss/entrynam.idx >-%%DATADIR%%/test/swiss/keyword.hit >-%%DATADIR%%/test/swiss/keyword.trg >-%%DATADIR%%/test/swiss/seq.dat >-%%DATADIR%%/test/swiss/seqvn.hit >-%%DATADIR%%/test/swiss/seqvn.trg >-%%DATADIR%%/test/swiss/taxon.hit >-%%DATADIR%%/test/swiss/taxon.trg >-%%DATADIR%%/test/swnew/acnum.hit >-%%DATADIR%%/test/swnew/acnum.trg >-%%DATADIR%%/test/swnew/des.hit >-%%DATADIR%%/test/swnew/des.trg >-%%DATADIR%%/test/swnew/division.lkp >-%%DATADIR%%/test/swnew/entrynam.idx >-%%DATADIR%%/test/swnew/keyword.hit >-%%DATADIR%%/test/swnew/keyword.trg >-%%DATADIR%%/test/swnew/new_seq.dat >-%%DATADIR%%/test/swnew/seqvn.hit >-%%DATADIR%%/test/swnew/seqvn.trg >-%%DATADIR%%/test/swnew/taxon.hit >-%%DATADIR%%/test/swnew/taxon.trg >-%%DATADIR%%/test/swnew/upd_ann.dat >-%%DATADIR%%/test/swnew/upd_seq.dat >-%%DATADIR%%/test/wormpep/acnum.hit >-%%DATADIR%%/test/wormpep/acnum.trg >-%%DATADIR%%/test/wormpep/des.hit >-%%DATADIR%%/test/wormpep/des.trg >-%%DATADIR%%/test/wormpep/division.lkp >-%%DATADIR%%/test/wormpep/entrynam.idx >-%%DATADIR%%/test/wormpep/wormpep >-%%PORTDOCS%%%%DOCSDIR%%/manuals/EMBOSS-FreeBSD-HOWTO.txt >+lib/libnucleus.la >+lib/libnucleus.a >+%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.sty >+%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.tex > %%PORTDOCS%%%%DOCSDIR%%/manuals/admin.aux > %%PORTDOCS%%%%DOCSDIR%%/manuals/admin.dvi > %%PORTDOCS%%%%DOCSDIR%%/manuals/admin.log > %%PORTDOCS%%%%DOCSDIR%%/manuals/admin.pdf > %%PORTDOCS%%%%DOCSDIR%%/manuals/admin.ps >-%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.sty >-%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.tex > %%PORTDOCS%%%%DOCSDIR%%/manuals/admin.toc > %%PORTDOCS%%%%DOCSDIR%%/manuals/adminguide.tar.gz > %%PORTDOCS%%%%DOCSDIR%%/manuals/domainatrix.doc >-%%PORTDOCS%%%%DOCSDIR%%/manuals/emboss.sty >+%%PORTDOCS%%%%DOCSDIR%%/manuals/program.ps.gz >+%%PORTDOCS%%%%DOCSDIR%%/manuals/EMBOSS-FreeBSD-HOWTO.txt > %%PORTDOCS%%%%DOCSDIR%%/manuals/emboss_qg.pdf > %%PORTDOCS%%%%DOCSDIR%%/manuals/emboss_qg.ps >+%%PORTDOCS%%%%DOCSDIR%%/manuals/emboss.sty > %%PORTDOCS%%%%DOCSDIR%%/manuals/fdl.txt >-%%PORTDOCS%%%%DOCSDIR%%/manuals/program.ps.gz >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/aaindexextract.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/lindna.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/listor.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/marscan.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/maskfeat.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/maskseq.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/matcher.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/matgen3d.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/megamerger.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/meme.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/menus_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/merger.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/msbar.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/mse.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/mwcontam.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/mwfilter.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/myseq.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/nawalign.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/nawalignrunner.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/needle.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/needlerunner.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/newcpgreport.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/newcpgseek.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/newseq.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/noreturn.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/notseq.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/nthseq.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_2d_structure_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_codon_usage_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_codon_usage_nucleic_gene_finding_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_composition_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_cpg_islands_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_gene_finding_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_motifs_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_mutation_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_primers_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_profiles_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_repeats_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_restriction_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_transcription_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_translation_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/octanol.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/oddcomp.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/palindrome.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/pasteseq.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/patmatdb.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/patmatmotifs.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/pdbparse.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/pdbplus.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/pdbtosp.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepcoil.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepinfo.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepnet.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepstats.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepwheel.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepwindow.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepwindowall.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_consensus_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_continuous_characters_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_discrete_characters_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_distance_matrix_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_gene_frequencies_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_molecular_sequence_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_tree_drawing_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/plotcon.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/plotorf.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/polydot.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/preg.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/prettyplot.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/prettyseq.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/primersearch.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/printsextract.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/profit.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/prophecy.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/prophet.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/prosextract.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_2d_structure_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_3d_structure_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_composition_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_motifs_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_mutation_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_profiles_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_sequence_alignment_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/pscan.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/psiphi.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/rebaseextract.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/recoder.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/redata.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/remap.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/restover.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/restrict.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/revseq.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/rocon.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/rocplot.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/scope.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/scopparse.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/scorecmapdir.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/scorer.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/scorerrunner.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/seealso.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqalign.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqfraggle.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqmatchall.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqnr.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqret.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqretsplit.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqsearch.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqsort.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqwords.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/showalign.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/showdb.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/showfeat.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/showorf.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/showseq.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/shuffleseq.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/sigcleave.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/siggen.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/siggenlig.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/sigscan.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/sigscanlig.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/silent.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/sirna.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/sites.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/sixpack.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/skipseq.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/splitter.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/ssematch.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/stretcher.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/stssearch.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/substitute.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/substituterunner.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/supermatcher.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/syco.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/tcode.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/template.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/test_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/textsearch.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/tfextract.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/tfm.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/tfscan.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/tmap.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/topo.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/tranalign.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/transeq.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/trimest.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/trimseq.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/twofeat.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/union.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/utils_database_creation_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/utils_database_indexing_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/utils_misc_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/vectorstrip.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/water.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/whichdb.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/wobble.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/wordcount.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/wordmatch.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/wossname.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/yank.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/emboss_icon.jpg > %%PORTDOCS%%%%DOCSDIR%%/programs/html/abiview.1.abiview.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/chaos.1.chaos.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/cirdna.1.cirdna.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/cpgplot.1.cpgplot.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/dan.2.dan.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/dotmatcher.1.dotmatcher.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/dotpath.1.dotpath.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/dottup.1.dottup.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/emboss_icon.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/findkm.1.findkm.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/isochore.1.isochore.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/lindna.1.lindna.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/octanol.1.octanol.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepinfo.1.pepinfo.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepnet.1.pepnet.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepwheel.1.pepwheel.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepwindow.1.pepwindow.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepwindowall.1.pepwindowall.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/plotcon.1.plotcon.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/plotorf.1.plotorf.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/plotorf.2.plotorf.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/polydot.1.polydot.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/prettyplot.1.prettyplot.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/prettyplot.2.prettyplot.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/syco.1.syco.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/tmap.1.tmap.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/topo.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/wobble.1.wobble.gif >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/aaindexextract.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/abiview.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/acd_group.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/acdc.html >@@ -1237,49 +494,45 @@ > %%PORTDOCS%%%%DOCSDIR%%/programs/html/alignment_consensus_group.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/alignment_differences_group.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/alignment_dot_plots_group.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/antigenic.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/alignment_global_group.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/alignment_local_group.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/alignment_multiple_group.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/alignrunner.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/allversusall.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/antigenic.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/backtranseq.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/banana.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/biosed.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/btwisted.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/cai.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/cathparse.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/chaos.1.chaos.gif > %%PORTDOCS%%%%DOCSDIR%%/programs/html/chaos.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/charge.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/checktrans.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/chips.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/cirdna.1.cirdna.gif > %%PORTDOCS%%%%DOCSDIR%%/programs/html/cirdna.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/clique.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/codcmp.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/codcopy.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/coderet.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/comparator.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/compseq.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/cons.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/consense.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/contactalign.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/contactcount.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/contacts.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/contml.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/contrast.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/cpgplot.1.cpgplot.gif > %%PORTDOCS%%%%DOCSDIR%%/programs/html/cpgplot.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/cpgreport.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/crystalball.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/cusp.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/cutgextract.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/cutseq.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/dan.2.dan.gif > %%PORTDOCS%%%%DOCSDIR%%/programs/html/dan.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/dbiblast.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/dbifasta.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/dbiflat.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/dbigcg.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/dbxfasta.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/dbxflat.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/dbxgcg.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/degapseq.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/degapseqrunner.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/descseq.html >@@ -1287,15 +540,6 @@ > %%PORTDOCS%%%%DOCSDIR%%/programs/html/digest.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/display_group.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/distmat.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/dnacomp.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/dnadist.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/dnainvar.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/dnaml.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/dnamlk.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/dnapars.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/dnapenny.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/dollop.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/dolpenny.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/domainalign.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/domainer.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/domainnr.html >@@ -1303,11 +547,8 @@ > %%PORTDOCS%%%%DOCSDIR%%/programs/html/domainreso.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/domainseqs.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/domainsse.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/dotmatcher.1.dotmatcher.gif > %%PORTDOCS%%%%DOCSDIR%%/programs/html/dotmatcher.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/dotpath.1.dotpath.gif > %%PORTDOCS%%%%DOCSDIR%%/programs/html/dotpath.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/dottup.1.dottup.gif > %%PORTDOCS%%%%DOCSDIR%%/programs/html/dottup.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/dreg.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/ealistat.html >@@ -1339,8 +580,6 @@ > %%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmsearch.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/einverted.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/ekitsch.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/emboss_icon.gif >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/emboss_icon.jpg > %%PORTDOCS%%%%DOCSDIR%%/programs/html/embossdata.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/embossversion.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/emix.html >@@ -1363,7 +602,6 @@ > %%PORTDOCS%%%%DOCSDIR%%/programs/html/etandem.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/extractfeat.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/extractseq.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/factor.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/fclique.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/fconsense.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/fcontml.html >@@ -1387,9 +625,7 @@ > %%PORTDOCS%%%%DOCSDIR%%/programs/html/ffitch.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/ffreqboot.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/fgendist.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/findkm.1.findkm.gif > %%PORTDOCS%%%%DOCSDIR%%/programs/html/findkm.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fitch.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/fkitsch.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/fmix.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/fmove.html >@@ -1414,7 +650,6 @@ > %%PORTDOCS%%%%DOCSDIR%%/programs/html/fuzztran.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/garnier.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/geecee.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/gendist.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/getorf.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/groups.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/helixturnhelix.html >@@ -1427,197 +662,145 @@ > %%PORTDOCS%%%%DOCSDIR%%/programs/html/information_group.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/infoseq.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/interface.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/isochore.1.isochore.gif > %%PORTDOCS%%%%DOCSDIR%%/programs/html/isochore.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/jembossctl.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/kitsch.html > %%PORTDOCS%%%%DOCSDIR%%/programs/html/libgen.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/libscan.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/lindna.1.lindna.gif >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/lindna.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/listor.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/marscan.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/maskfeat.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/maskseq.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/matcher.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/megamerger.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/meme.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/menus_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/merger.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/mix.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/msbar.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/mse.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/mwcontam.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/mwfilter.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/myseq.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/nawalign.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/nawalignrunner.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/needle.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/needlerunner.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/neighbor.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/newcpgreport.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/newcpgseek.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/newseq.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/noreturn.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/notseq.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/nthseq.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_2d_structure_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_codon_usage_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_codon_usage_nucleic_gene_finding_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_composition_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_cpg_islands_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_gene_finding_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_motifs_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_mutation_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_primers_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_profiles_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_repeats_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_restriction_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_transcription_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_translation_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/octanol.1.octanol.gif >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/octanol.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/oddcomp.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/palindrome.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/pasteseq.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/patmatdb.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/patmatmotifs.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/pdbparse.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/pdbplus.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/pdbtosp.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/penny.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepcoil.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepinfo.1.pepinfo.gif >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepinfo.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepnet.1.pepnet.gif >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepnet.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepstats.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepwheel.1.pepwheel.gif >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepwheel.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepwindow.1.pepwindow.gif >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepwindow.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepwindowall.1.pepwindowall.gif >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepwindowall.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/pestfind.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_consensus_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_continuous_characters_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_discrete_characters_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_distance_matrix_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_gene_frequencies_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_molecular_sequence_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_tree_drawing_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/plotcon.1.plotcon.gif >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/plotcon.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/plotorf.1.plotorf.gif >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/plotorf.2.plotorf.gif >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/plotorf.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/polydot.1.polydot.gif >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/polydot.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/preg.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/prettyplot.1.prettyplot.gif >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/prettyplot.2.prettyplot.gif >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/prettyplot.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/prettyseq.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/primersearch.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/printsextract.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/profit.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/prophecy.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/prophet.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/prosextract.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/protdist.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_2d_structure_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_3d_structure_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_composition_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_motifs_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_mutation_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_profiles_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_sequence_alignment_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/pscan.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/psiphi.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/rebaseextract.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/recoder.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/redata.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/remap.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/restml.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/restover.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/restrict.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/revseq.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/rocon.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/rocplot.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/scope.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/scopparse.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/scorer.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/scorerrunner.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/seealso.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqalign.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqboot.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqfraggle.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqmatchall.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqnr.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqret.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqretsplit.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqsearch.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqsort.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqwords.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/showalign.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/showdb.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/showfeat.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/showorf.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/showseq.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/shuffleseq.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/sigcleave.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/siggen.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/sigscan.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/silent.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/sirna.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/sites.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/sixpack.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/skipseq.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/splitter.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/ssematch.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/stretcher.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/stssearch.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/substitute.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/substituterunner.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/supermatcher.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/syco.1.syco.gif >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/syco.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/tcode.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/template.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/test_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/textsearch.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/tfextract.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/tfm.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/tfscan.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/tmap.1.tmap.gif >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/tmap.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/topo.gif >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/topo.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/tranalign.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/transeq.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/trimest.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/trimseq.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/twofeat.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/union.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/utils_database_creation_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/utils_database_indexing_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/utils_misc_group.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/vectorstrip.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/water.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/whichdb.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/wobble.1.wobble.gif >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/wobble.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/wordcount.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/wordmatch.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/wossname.html >-%%PORTDOCS%%%%DOCSDIR%%/programs/html/yank.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/html/libscan.html >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/jembossctl.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/libgen.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/libscan.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/lindna.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/listor.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/marscan.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/maskfeat.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/maskseq.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/matcher.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/matgen3d.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/megamerger.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/meme.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/merger.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/msbar.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/mse.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/mwcontam.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/mwfilter.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/myseq.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/nawalign.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/nawalignrunner.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/needle.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/needlerunner.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/newcpgreport.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/newcpgseek.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/newseq.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/noreturn.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/notseq.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/nthseq.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/octanol.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/oddcomp.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/palindrome.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/pasteseq.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/patmatdb.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/patmatmotifs.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/pdbparse.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/pdbplus.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/pdbtosp.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepcoil.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepinfo.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepnet.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepstats.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepwheel.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepwindow.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepwindowall.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/plotcon.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/plotorf.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/polydot.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/preg.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/prettyplot.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/prettyseq.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/primersearch.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/printsextract.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/profit.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/prophecy.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/prophet.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/prosextract.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/pscan.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/psiphi.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/rebaseextract.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/recoder.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/redata.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/remap.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/restover.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/restrict.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/revseq.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/rocon.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/rocplot.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/scope.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/scopparse.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/scorecmapdir.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/scorer.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/scorerrunner.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/seealso.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqalign.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqfraggle.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqmatchall.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqnr.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqret.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqretsplit.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqsearch.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqsort.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqwords.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/showalign.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/showdb.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/showfeat.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/showorf.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/showseq.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/shuffleseq.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/sigcleave.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/siggen.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/siggenlig.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/sigscan.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/sigscanlig.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/silent.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/sirna.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/SITE-DIRECTED.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/sites.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/sixpack.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/skipseq.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/splitter.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/ssematch.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/stretcher.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/stssearch.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/substitute.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/substituterunner.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/supermatcher.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/syco.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/tcode.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/textsearch.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/tfextract.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/tfm.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/tfscan.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/tmap.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/topo.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/tranalign.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/transeq.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/trimest.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/trimseq.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/twofeat.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/union.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/vectorstrip.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/water.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/whichdb.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/wobble.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/wordcount.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/wordmatch.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/wossname.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/yank.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/aaindexextract.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/abiview.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/acdc.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/acdlog.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/acdpretty.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/acdtable.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/cai.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/acdtrace.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/acdvalid.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/alignrunner.txt >@@ -1627,25 +810,21 @@ > %%PORTDOCS%%%%DOCSDIR%%/programs/text/banana.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/biosed.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/btwisted.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/cai.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/cathparse.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/chaos.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/charge.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/checktrans.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/chips.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/cirdna.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/clique.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/codcmp.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/codcopy.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/coderet.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/comparator.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/complex.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/compseq.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/cons.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/consense.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/contactalign.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/contactcount.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/contacts.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/contml.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/contrast.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/cpgplot.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/cpgreport.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/crystalball.txt >@@ -1657,21 +836,15 @@ > %%PORTDOCS%%%%DOCSDIR%%/programs/text/dbifasta.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/dbiflat.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/dbigcg.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/dbxfasta.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/dbxflat.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/dbxgcg.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/degapseq.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/degapseqrunner.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/descseq.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/diffseq.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/digest.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/distmat.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/dnacomp.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/dnadist.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/dnainvar.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/dnaml.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/dnamlk.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/dnapars.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/dnapenny.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/dollop.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/dolpenny.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/domainalign.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/domainer.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/domainnr.txt >@@ -1696,6 +869,7 @@ > %%PORTDOCS%%%%DOCSDIR%%/programs/text/ednapars.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/ednapenny.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/edollop.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/iep.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/edolpenny.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/efactor.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/efitch.txt >@@ -1732,7 +906,6 @@ > %%PORTDOCS%%%%DOCSDIR%%/programs/text/etandem.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/extractfeat.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/extractseq.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/factor.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/fclique.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/fconsense.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/fcontml.txt >@@ -1756,7 +929,6 @@ > %%PORTDOCS%%%%DOCSDIR%%/programs/text/ffreqboot.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/fgendist.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/findkm.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fitch.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/fkitsch.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/fmix.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/fmove.txt >@@ -1781,206 +953,1120 @@ > %%PORTDOCS%%%%DOCSDIR%%/programs/text/fuzztran.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/garnier.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/geecee.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/gendist.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/getorf.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/helixturnhelix.txt > %%PORTDOCS%%%%DOCSDIR%%/programs/text/hetparse.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/hmoment.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/iep.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/infoalign.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/infoseq.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/interface.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/isochore.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/jembossctl.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/kitsch.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/libgen.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/libscan.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/lindna.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/listor.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/marscan.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/maskfeat.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/maskseq.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/matcher.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/megamerger.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/meme.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/merger.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/mix.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/msbar.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/mse.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/mwcontam.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/mwfilter.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/myseq.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/nawalign.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/nawalignrunner.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/needle.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/needlerunner.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/neighbor.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/newcpgreport.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/newcpgseek.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/newseq.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/noreturn.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/notseq.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/nthseq.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/octanol.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/oddcomp.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/palindrome.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/pasteseq.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/patmatdb.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/patmatmotifs.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/pdbparse.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/pdbplus.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/pdbtosp.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/penny.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepcoil.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepinfo.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepnet.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepstats.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepwheel.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepwindow.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepwindowall.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/pestfind.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/plotcon.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/plotorf.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/polydot.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/preg.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/prettyplot.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/prettyseq.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/primersearch.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/printsextract.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/profit.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/prophecy.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/prophet.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/prosextract.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/protdist.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/pscan.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/psiphi.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/rebaseextract.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/recoder.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/redata.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/remap.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/restml.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/restover.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/restrict.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/revseq.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/rocon.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/rocplot.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/scope.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/scopparse.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/scorer.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/scorerrunner.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/seealso.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqalign.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqboot.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqfraggle.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqmatchall.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqnr.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqret.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqretsplit.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqsearch.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqsort.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqwords.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/showalign.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/showdb.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/showfeat.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/showorf.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/showseq.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/shuffleseq.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/sigcleave.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/siggen.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/sigscan.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/silent.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/sirna.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/sites.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/sixpack.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/skipseq.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/splitter.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/ssematch.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/stretcher.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/stssearch.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/substitute.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/substituterunner.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/supermatcher.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/syco.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/tcode.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/textsearch.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/tfextract.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/tfm.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/tfscan.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/tmap.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/topo.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/tranalign.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/transeq.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/trimest.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/trimseq.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/twofeat.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/union.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/vectorstrip.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/water.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/whichdb.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/wobble.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/wordcount.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/wordmatch.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/wossname.txt >-%%PORTDOCS%%%%DOCSDIR%%/programs/text/yank.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/hmoment.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/infoalign.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/infoseq.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/interface.txt >+%%PORTDOCS%%%%DOCSDIR%%/programs/text/isochore.txt > %%PORTDOCS%%%%DOCSDIR%%/tutorials/emboss-gcg.ppt > %%PORTDOCS%%%%DOCSDIR%%/tutorials/emboss-interfaces.ppt > %%PORTDOCS%%%%DOCSDIR%%/tutorials/emboss-talk.ppt > %%PORTDOCS%%%%DOCSDIR%%/tutorials/emboss_tut.tar.gz >-%%PORTDOCS%%@dirrm %%DOCSDIR%%/tutorials >-%%PORTDOCS%%@dirrm %%DOCSDIR%%/programs/text >+%%DATADIR%%/plstnd5.fnt >+%%DATADIR%%/plxtnd5.fnt >+%%DATADIR%%/acd/needle.acd >+%%DATADIR%%/acd/newcoils.acd >+%%DATADIR%%/acd/newcpgreport.acd >+%%DATADIR%%/acd/newcpgseek.acd >+%%DATADIR%%/acd/newseq.acd >+%%DATADIR%%/acd/noreturn.acd >+%%DATADIR%%/acd/notseq.acd >+%%DATADIR%%/acd/nthseq.acd >+%%DATADIR%%/acd/octanol.acd >+%%DATADIR%%/acd/oddcomp.acd >+%%DATADIR%%/acd/palindrome.acd >+%%DATADIR%%/acd/pasteseq.acd >+%%DATADIR%%/acd/patmatdb.acd >+%%DATADIR%%/acd/patmatmotifs.acd >+%%DATADIR%%/acd/patmattest.acd >+%%DATADIR%%/acd/pepcoil.acd >+%%DATADIR%%/acd/pepinfo.acd >+%%DATADIR%%/acd/pepnet.acd >+%%DATADIR%%/acd/pepstats.acd >+%%DATADIR%%/acd/pepwheel.acd >+%%DATADIR%%/acd/pepwindow.acd >+%%DATADIR%%/acd/pepwindowall.acd >+%%DATADIR%%/acd/plotcon.acd >+%%DATADIR%%/acd/plotorf.acd >+%%DATADIR%%/acd/polydot.acd >+%%DATADIR%%/acd/preg.acd >+%%DATADIR%%/acd/prettyplot.acd >+%%DATADIR%%/acd/prettyseq.acd >+%%DATADIR%%/acd/prima.acd >+%%DATADIR%%/acd/primers.acd >+%%DATADIR%%/acd/primersearch.acd >+%%DATADIR%%/acd/printsextract.acd >+%%DATADIR%%/acd/profit.acd >+%%DATADIR%%/acd/prophecy.acd >+%%DATADIR%%/acd/prophet.acd >+%%DATADIR%%/acd/prosextract.acd >+%%DATADIR%%/acd/pscan.acd >+%%DATADIR%%/acd/psiphi.acd >+%%DATADIR%%/acd/rebaseextract.acd >+%%DATADIR%%/acd/recoder.acd >+%%DATADIR%%/acd/redata.acd >+%%DATADIR%%/acd/remap.acd >+%%DATADIR%%/acd/restover.acd >+%%DATADIR%%/acd/revseq.acd >+%%DATADIR%%/acd/restrict.acd >+%%DATADIR%%/acd/seealso.acd >+%%DATADIR%%/acd/seqinfo.acd >+%%DATADIR%%/acd/seqmatchall.acd >+%%DATADIR%%/acd/seqret.acd >+%%DATADIR%%/acd/seqretall.acd >+%%DATADIR%%/acd/seqretallfeat.acd >+%%DATADIR%%/acd/seqretset.acd >+%%DATADIR%%/acd/seqretsingle.acd >+%%DATADIR%%/acd/seqretsplit.acd >+%%DATADIR%%/acd/seqrettype.acd >+%%DATADIR%%/acd/showalign.acd >+%%DATADIR%%/acd/showdb.acd >+%%DATADIR%%/acd/showfeat.acd >+%%DATADIR%%/acd/showorf.acd >+%%DATADIR%%/acd/showseq.acd >+%%DATADIR%%/acd/shuffleseq.acd >+%%DATADIR%%/acd/sigcleave.acd >+%%DATADIR%%/acd/silent.acd >+%%DATADIR%%/acd/sirna.acd >+%%DATADIR%%/acd/sixpack.acd >+%%DATADIR%%/acd/skipseq.acd >+%%DATADIR%%/acd/tfm.acd >+%%DATADIR%%/acd/splitter.acd >+%%DATADIR%%/acd/stretcher.acd >+%%DATADIR%%/acd/stssearch.acd >+%%DATADIR%%/acd/supermatcher.acd >+%%DATADIR%%/acd/syco.acd >+%%DATADIR%%/acd/tcode.acd >+%%DATADIR%%/acd/testplot.acd >+%%DATADIR%%/acd/textsearch.acd >+%%DATADIR%%/acd/tfextract.acd >+%%DATADIR%%/acd/tfscan.acd >+%%DATADIR%%/acd/tmap.acd >+%%DATADIR%%/acd/tranalign.acd >+%%DATADIR%%/acd/transeq.acd >+%%DATADIR%%/acd/treetypedisplay.acd >+%%DATADIR%%/acd/trimest.acd >+%%DATADIR%%/acd/trimseq.acd >+%%DATADIR%%/acd/twofeat.acd >+%%DATADIR%%/acd/union.acd >+%%DATADIR%%/acd/vectorstrip.acd >+%%DATADIR%%/acd/water.acd >+%%DATADIR%%/acd/whichdb.acd >+%%DATADIR%%/acd/wobble.acd >+%%DATADIR%%/acd/wordcount.acd >+%%DATADIR%%/acd/wordmatch.acd >+%%DATADIR%%/acd/wossname.acd >+%%DATADIR%%/acd/yank.acd >+%%DATADIR%%/acd/codes.english >+%%DATADIR%%/acd/groups.standard >+%%DATADIR%%/acd/knowntypes.standard >+%%DATADIR%%/acd/sections.standard >+%%DATADIR%%/acd/variables.standard >+%%DATADIR%%/acd/aaindexextract.acd >+%%DATADIR%%/acd/abiview.acd >+%%DATADIR%%/acd/acdc.acd >+%%DATADIR%%/acd/acdlog.acd >+%%DATADIR%%/acd/acdpretty.acd >+%%DATADIR%%/acd/acdtable.acd >+%%DATADIR%%/acd/acdtrace.acd >+%%DATADIR%%/acd/acdvalid.acd >+%%DATADIR%%/acd/ajbad.acd >+%%DATADIR%%/acd/ajfeatest.acd >+%%DATADIR%%/acd/ajtest.acd >+%%DATADIR%%/acd/antigenic.acd >+%%DATADIR%%/acd/backtranseq.acd >+%%DATADIR%%/acd/cai.acd >+%%DATADIR%%/acd/banana.acd >+%%DATADIR%%/acd/biosed.acd >+%%DATADIR%%/acd/btwisted.acd >+%%DATADIR%%/acd/chaos.acd >+%%DATADIR%%/acd/charge.acd >+%%DATADIR%%/acd/checktrans.acd >+%%DATADIR%%/acd/chips.acd >+%%DATADIR%%/acd/cirdna.acd >+%%DATADIR%%/acd/codcmp.acd >+%%DATADIR%%/acd/codcopy.acd >+%%DATADIR%%/acd/coderet.acd >+%%DATADIR%%/acd/complex.acd >+%%DATADIR%%/acd/compseq.acd >+%%DATADIR%%/acd/cons.acd >+%%DATADIR%%/acd/corbatest.acd >+%%DATADIR%%/acd/cpgplot.acd >+%%DATADIR%%/acd/cpgreport.acd >+%%DATADIR%%/acd/cusp.acd >+%%DATADIR%%/acd/cutgextract.acd >+%%DATADIR%%/acd/cutseq.acd >+%%DATADIR%%/acd/dan.acd >+%%DATADIR%%/acd/dbiblast.acd >+%%DATADIR%%/acd/dbifasta.acd >+%%DATADIR%%/acd/dbiflat.acd >+%%DATADIR%%/acd/dbigcg.acd >+%%DATADIR%%/acd/dbxfasta.acd >+%%DATADIR%%/acd/dbxflat.acd >+%%DATADIR%%/acd/dbxgcg.acd >+%%DATADIR%%/acd/degapseq.acd >+%%DATADIR%%/acd/demoalign.acd >+%%DATADIR%%/acd/demofeatures.acd >+%%DATADIR%%/acd/demolist.acd >+%%DATADIR%%/acd/demoreport.acd >+%%DATADIR%%/acd/demosequence.acd >+%%DATADIR%%/acd/demostring.acd >+%%DATADIR%%/acd/demotable.acd >+%%DATADIR%%/acd/descseq.acd >+%%DATADIR%%/acd/diffseq.acd >+%%DATADIR%%/acd/digest.acd >+%%DATADIR%%/acd/distmat.acd >+%%DATADIR%%/acd/dotmatcher.acd >+%%DATADIR%%/acd/dotpath.acd >+%%DATADIR%%/acd/dottup.acd >+%%DATADIR%%/acd/dreg.acd >+%%DATADIR%%/acd/einverted.acd >+%%DATADIR%%/acd/embossdata.acd >+%%DATADIR%%/acd/iep.acd >+%%DATADIR%%/acd/embossversion.acd >+%%DATADIR%%/acd/emma.acd >+%%DATADIR%%/acd/emowse.acd >+%%DATADIR%%/acd/entrails.acd >+%%DATADIR%%/acd/entret.acd >+%%DATADIR%%/acd/epestfind.acd >+%%DATADIR%%/acd/eprimer3.acd >+%%DATADIR%%/acd/equicktandem.acd >+%%DATADIR%%/acd/est2genome.acd >+%%DATADIR%%/acd/etandem.acd >+%%DATADIR%%/acd/extractfeat.acd >+%%DATADIR%%/acd/extractseq.acd >+%%DATADIR%%/acd/findkm.acd >+%%DATADIR%%/acd/freak.acd >+%%DATADIR%%/acd/fuzznuc.acd >+%%DATADIR%%/acd/fuzzpro.acd >+%%DATADIR%%/acd/fuzztran.acd >+%%DATADIR%%/acd/garnier.acd >+%%DATADIR%%/acd/geecee.acd >+%%DATADIR%%/acd/getorf.acd >+%%DATADIR%%/acd/giep.acd >+%%DATADIR%%/acd/helixturnhelix.acd >+%%DATADIR%%/acd/hmoment.acd >+%%DATADIR%%/acd/histogramtest.acd >+%%DATADIR%%/acd/infoalign.acd >+%%DATADIR%%/acd/infoseq.acd >+%%DATADIR%%/acd/intconv.acd >+%%DATADIR%%/acd/isochore.acd >+%%DATADIR%%/acd/kmrsplitter.acd >+%%DATADIR%%/acd/kmrunion.acd >+%%DATADIR%%/acd/lindna.acd >+%%DATADIR%%/acd/listor.acd >+%%DATADIR%%/acd/marscan.acd >+%%DATADIR%%/acd/maskfeat.acd >+%%DATADIR%%/acd/maskseq.acd >+%%DATADIR%%/acd/matcher.acd >+%%DATADIR%%/acd/megamerger.acd >+%%DATADIR%%/acd/merger.acd >+%%DATADIR%%/acd/msbar.acd >+%%DATADIR%%/acd/mwcontam.acd >+%%DATADIR%%/acd/mwfilter.acd >+%%DATADIR%%/data/AAINDEX/dummyfile >+%%DATADIR%%/data/CODONS/Cut.index >+%%DATADIR%%/data/CODONS/Eacica.cut >+%%DATADIR%%/data/CODONS/Eagrtu.cut >+%%DATADIR%%/data/CODONS/Eanasp.cut >+%%DATADIR%%/data/CODONS/Earath.cut >+%%DATADIR%%/data/CODONS/Eazovi.cut >+%%DATADIR%%/data/CODONS/Ebacme.cut >+%%DATADIR%%/data/CODONS/Ebacst.cut >+%%DATADIR%%/data/CODONS/Ebacsu.cut >+%%DATADIR%%/data/CODONS/Ebacsu_high.cut >+%%DATADIR%%/data/CODONS/Ebommo.cut >+%%DATADIR%%/data/CODONS/Ebovin.cut >+%%DATADIR%%/data/CODONS/Ebpphx.cut >+%%DATADIR%%/data/CODONS/Ebraja.cut >+%%DATADIR%%/data/CODONS/Ebrana.cut >+%%DATADIR%%/data/CODONS/Ebrare.cut >+%%DATADIR%%/data/CODONS/Ecaeel.cut >+%%DATADIR%%/data/CODONS/Ecanal.cut >+%%DATADIR%%/data/CODONS/Ecanfa.cut >+%%DATADIR%%/data/CODONS/Ecaucr.cut >+%%DATADIR%%/data/CODONS/Echick.cut >+%%DATADIR%%/data/CODONS/Echlre.cut >+%%DATADIR%%/data/CODONS/Echltr.cut >+%%DATADIR%%/data/CODONS/Ecloab.cut >+%%DATADIR%%/data/CODONS/Ecrigr.cut >+%%DATADIR%%/data/CODONS/Ecyapa.cut >+%%DATADIR%%/data/CODONS/Edayhoff.cut >+%%DATADIR%%/data/CODONS/Edicdi.cut >+%%DATADIR%%/data/CODONS/Edicdi_high.cut >+%%DATADIR%%/data/CODONS/Edrome.cut >+%%DATADIR%%/data/CODONS/Edrome_high.cut >+%%DATADIR%%/data/CODONS/Eecoli.cut >+%%DATADIR%%/data/CODONS/Eecoli_high.cut >+%%DATADIR%%/data/CODONS/Eemeni.cut >+%%DATADIR%%/data/CODONS/Eemeni_mit.cut >+%%DATADIR%%/data/CODONS/Eemeni_high.cut >+%%DATADIR%%/data/CODONS/Eerwct.cut >+%%DATADIR%%/data/CODONS/Ehaein.cut >+%%DATADIR%%/data/CODONS/Ehalma.cut >+%%DATADIR%%/data/CODONS/Ehalsa.cut >+%%DATADIR%%/data/CODONS/Ehorvu.cut >+%%DATADIR%%/data/CODONS/Ehuman.cut >+%%DATADIR%%/data/CODONS/Eklepn.cut >+%%DATADIR%%/data/CODONS/Eklula.cut >+%%DATADIR%%/data/CODONS/Elacdl.cut >+%%DATADIR%%/data/CODONS/Elyces.cut >+%%DATADIR%%/data/CODONS/Emacfa.cut >+%%DATADIR%%/data/CODONS/Emaize.cut >+%%DATADIR%%/data/CODONS/Emaize_chl.cut >+%%DATADIR%%/data/CODONS/Emammal_high.cut >+%%DATADIR%%/data/CODONS/Emanse.cut >+%%DATADIR%%/data/CODONS/Emarpo_chl.cut >+%%DATADIR%%/data/CODONS/Emedsa.cut >+%%DATADIR%%/data/CODONS/Emetth.cut >+%%DATADIR%%/data/CODONS/Emouse.cut >+%%DATADIR%%/data/CODONS/Emyctu.cut >+%%DATADIR%%/data/CODONS/Eneigo.cut >+%%DATADIR%%/data/CODONS/Eneucr.cut >+%%DATADIR%%/data/CODONS/Eoncmy.cut >+%%DATADIR%%/data/CODONS/Eorysa.cut >+%%DATADIR%%/data/CODONS/Eorysa_chl.cut >+%%DATADIR%%/data/CODONS/Epea.cut >+%%DATADIR%%/data/CODONS/Epethy.cut >+%%DATADIR%%/data/CODONS/Ephavu.cut >+%%DATADIR%%/data/CODONS/Epig.cut >+%%DATADIR%%/data/CODONS/Eplafa.cut >+%%DATADIR%%/data/CODONS/Eprovu.cut >+%%DATADIR%%/data/CODONS/Epseae.cut >+%%DATADIR%%/data/CODONS/Epsepu.cut >+%%DATADIR%%/data/CODONS/Epsesm.cut >+%%DATADIR%%/data/CODONS/Erabit.cut >+%%DATADIR%%/data/CODONS/Erat.cut >+%%DATADIR%%/data/CODONS/Erhile.cut >+%%DATADIR%%/data/CODONS/Erhime.cut >+%%DATADIR%%/data/CODONS/Erhoca.cut >+%%DATADIR%%/data/CODONS/Erhosh.cut >+%%DATADIR%%/data/CODONS/Esalsa.cut >+%%DATADIR%%/data/CODONS/Esalty.cut >+%%DATADIR%%/data/CODONS/Eschma.cut >+%%DATADIR%%/data/CODONS/Eschpo.cut >+%%DATADIR%%/data/CODONS/Eschpo_cai.cut >+%%DATADIR%%/data/CODONS/Eschpo_high.cut >+%%DATADIR%%/data/CODONS/Eserma.cut >+%%DATADIR%%/data/CODONS/Esheep.cut >+%%DATADIR%%/data/CODONS/Esoltu.cut >+%%DATADIR%%/data/CODONS/Esoybn.cut >+%%DATADIR%%/data/CODONS/Espiol.cut >+%%DATADIR%%/data/CODONS/Estaau.cut >+%%DATADIR%%/data/CODONS/Estrco.cut >+%%DATADIR%%/data/CODONS/Estrmu.cut >+%%DATADIR%%/data/CODONS/Estrpn.cut >+%%DATADIR%%/data/CODONS/Estrpu.cut >+%%DATADIR%%/data/CODONS/Esyncy.cut >+%%DATADIR%%/data/CODONS/Esynco.cut >+%%DATADIR%%/data/CODONS/Etetth.cut >+%%DATADIR%%/data/CODONS/Etheth.cut >+%%DATADIR%%/data/CODONS/Etobac.cut >+%%DATADIR%%/data/CODONS/Etobac_chl.cut >+%%DATADIR%%/data/CODONS/Etrybr.cut >+%%DATADIR%%/data/CODONS/Etrycr.cut >+%%DATADIR%%/data/CODONS/Evibch.cut >+%%DATADIR%%/data/CODONS/Ewheat.cut >+%%DATADIR%%/data/CODONS/Exenla.cut >+%%DATADIR%%/data/CODONS/Eyeast.cut >+%%DATADIR%%/data/CODONS/Eyeast_cai.cut >+%%DATADIR%%/data/CODONS/Eyeast_high.cut >+%%DATADIR%%/data/CODONS/Eyeast_mit.cut >+%%DATADIR%%/data/CODONS/Eyeren.cut >+%%DATADIR%%/data/CODONS/Eyerpe.cut >+%%DATADIR%%/data/CODONS/Eacc.cut >+%%DATADIR%%/data/CODONS/Eadenovirus5.cut >+%%DATADIR%%/data/CODONS/Eadenovirus7.cut >+%%DATADIR%%/data/CODONS/Eaidlav.cut >+%%DATADIR%%/data/CODONS/Eani.cut >+%%DATADIR%%/data/CODONS/Eani_h.cut >+%%DATADIR%%/data/CODONS/Eanidmit.cut >+%%DATADIR%%/data/CODONS/Easn.cut >+%%DATADIR%%/data/CODONS/Eath.cut >+%%DATADIR%%/data/CODONS/Eatu.cut >+%%DATADIR%%/data/CODONS/Eavi.cut >+%%DATADIR%%/data/CODONS/Ef1.cut >+%%DATADIR%%/data/CODONS/Ebja.cut >+%%DATADIR%%/data/CODONS/Ebly.cut >+%%DATADIR%%/data/CODONS/Ebme.cut >+%%DATADIR%%/data/CODONS/Ebmo.cut >+%%DATADIR%%/data/CODONS/Ebna.cut >+%%DATADIR%%/data/CODONS/Ebov.cut >+%%DATADIR%%/data/CODONS/Ebovsp.cut >+%%DATADIR%%/data/CODONS/Ebst.cut >+%%DATADIR%%/data/CODONS/Ebsu.cut >+%%DATADIR%%/data/CODONS/Ebsu_h.cut >+%%DATADIR%%/data/CODONS/Ecac.cut >+%%DATADIR%%/data/CODONS/Ecal.cut >+%%DATADIR%%/data/CODONS/Eccr.cut >+%%DATADIR%%/data/CODONS/Ecel.cut >+%%DATADIR%%/data/CODONS/Echi.cut >+%%DATADIR%%/data/CODONS/Echicken.cut >+%%DATADIR%%/data/CODONS/Echisp.cut >+%%DATADIR%%/data/CODONS/Echk.cut >+%%DATADIR%%/data/CODONS/Echmp.cut >+%%DATADIR%%/data/CODONS/Echnt.cut >+%%DATADIR%%/data/CODONS/Echos.cut >+%%DATADIR%%/data/CODONS/Echzm.cut >+%%DATADIR%%/data/CODONS/Echzmrubp.cut >+%%DATADIR%%/data/CODONS/Ecpx.cut >+%%DATADIR%%/data/CODONS/Ecre.cut >+%%DATADIR%%/data/CODONS/Ecrisp.cut >+%%DATADIR%%/data/CODONS/Ectr.cut >+%%DATADIR%%/data/CODONS/Eddi.cut >+%%DATADIR%%/data/CODONS/Eddi_h.cut >+%%DATADIR%%/data/CODONS/Edog.cut >+%%DATADIR%%/data/CODONS/Edro.cut >+%%DATADIR%%/data/CODONS/Edro_h.cut >+%%DATADIR%%/data/CODONS/Edrosophila.cut >+%%DATADIR%%/data/CODONS/Eeca.cut >+%%DATADIR%%/data/CODONS/Eeco.cut >+%%DATADIR%%/data/CODONS/Eeco_h.cut >+%%DATADIR%%/data/CODONS/Efish.cut >+%%DATADIR%%/data/CODONS/Efmdvpolyp.cut >+%%DATADIR%%/data/CODONS/Eham.cut >+%%DATADIR%%/data/CODONS/Ehha.cut >+%%DATADIR%%/data/CODONS/Ehin.cut >+%%DATADIR%%/data/CODONS/Ehma.cut >+%%DATADIR%%/data/CODONS/Ehum.cut >+%%DATADIR%%/data/CODONS/Ekla.cut >+%%DATADIR%%/data/CODONS/Ekpn.cut >+%%DATADIR%%/data/CODONS/Ella.cut >+%%DATADIR%%/data/CODONS/Emac.cut >+%%DATADIR%%/data/CODONS/Emam_h.cut >+%%DATADIR%%/data/CODONS/Emixlg.cut >+%%DATADIR%%/data/CODONS/Emsa.cut >+%%DATADIR%%/data/CODONS/Emse.cut >+%%DATADIR%%/data/CODONS/Emta.cut >+%%DATADIR%%/data/CODONS/Emtu.cut >+%%DATADIR%%/data/CODONS/Emus.cut >+%%DATADIR%%/data/CODONS/Emussp.cut >+%%DATADIR%%/data/CODONS/Emva.cut >+%%DATADIR%%/data/CODONS/Emze.cut >+%%DATADIR%%/data/CODONS/Emzecp.cut >+%%DATADIR%%/data/CODONS/Encr.cut >+%%DATADIR%%/data/CODONS/Eneu.cut >+%%DATADIR%%/data/CODONS/Engo.cut >+%%DATADIR%%/data/CODONS/Eoncsp.cut >+%%DATADIR%%/data/CODONS/Epae.cut >+%%DATADIR%%/data/CODONS/Epet.cut >+%%DATADIR%%/data/CODONS/Epfa.cut >+%%DATADIR%%/data/CODONS/Ephix174.cut >+%%DATADIR%%/data/CODONS/Ephv.cut >+%%DATADIR%%/data/CODONS/Ephy.cut >+%%DATADIR%%/data/CODONS/Epolyomaa2.cut >+%%DATADIR%%/data/CODONS/Epombe.cut >+%%DATADIR%%/data/CODONS/Epombecai.cut >+%%DATADIR%%/data/CODONS/Epot.cut >+%%DATADIR%%/data/CODONS/Eppu.cut >+%%DATADIR%%/data/CODONS/Epse.cut >+%%DATADIR%%/data/CODONS/Epsy.cut >+%%DATADIR%%/data/CODONS/Epvu.cut >+%%DATADIR%%/data/CODONS/Erab.cut >+%%DATADIR%%/data/CODONS/Erabbit.cut >+%%DATADIR%%/data/CODONS/Erabsp.cut >+%%DATADIR%%/data/CODONS/Eratsp.cut >+%%DATADIR%%/data/CODONS/Erca.cut >+%%DATADIR%%/data/CODONS/Erhm.cut >+%%DATADIR%%/data/CODONS/Eric.cut >+%%DATADIR%%/data/CODONS/Erle.cut >+%%DATADIR%%/data/CODONS/Erme.cut >+%%DATADIR%%/data/CODONS/Ersp.cut >+%%DATADIR%%/data/CODONS/Esalsp.cut >+%%DATADIR%%/data/CODONS/Esau.cut >+%%DATADIR%%/data/CODONS/Esco.cut >+%%DATADIR%%/data/CODONS/Esgi.cut >+%%DATADIR%%/data/CODONS/Eshp.cut >+%%DATADIR%%/data/CODONS/Eshpsp.cut >+%%DATADIR%%/data/CODONS/Esli.cut >+%%DATADIR%%/data/CODONS/Eslm.cut >+%%DATADIR%%/data/CODONS/Esma.cut >+%%DATADIR%%/data/CODONS/Esmi.cut >+%%DATADIR%%/data/CODONS/Esmu.cut >+%%DATADIR%%/data/CODONS/Esoy.cut >+%%DATADIR%%/data/CODONS/Espi.cut >+%%DATADIR%%/data/CODONS/Espn.cut >+%%DATADIR%%/data/CODONS/Espo.cut >+%%DATADIR%%/data/CODONS/Espo_h.cut >+%%DATADIR%%/data/CODONS/Espu.cut >+%%DATADIR%%/data/CODONS/Esta.cut >+%%DATADIR%%/data/CODONS/Esty.cut >+%%DATADIR%%/data/CODONS/Esus.cut >+%%DATADIR%%/data/CODONS/Esv40.cut >+%%DATADIR%%/data/CODONS/Esyhsp.cut >+%%DATADIR%%/data/CODONS/Esynsp.cut >+%%DATADIR%%/data/CODONS/Etbr.cut >+%%DATADIR%%/data/CODONS/Etcr.cut >+%%DATADIR%%/data/CODONS/Eter.cut >+%%DATADIR%%/data/CODONS/Etetsp.cut >+%%DATADIR%%/data/CODONS/Etob.cut >+%%DATADIR%%/data/CODONS/Etobcp.cut >+%%DATADIR%%/data/CODONS/Etom.cut >+%%DATADIR%%/data/CODONS/Etrb.cut >+%%DATADIR%%/data/CODONS/Evco.cut >+%%DATADIR%%/data/CODONS/Ewht.cut >+%%DATADIR%%/data/CODONS/Exel.cut >+%%DATADIR%%/data/CODONS/Exenopus.cut >+%%DATADIR%%/data/CODONS/Eyeastcai.cut >+%%DATADIR%%/data/CODONS/Eyen.cut >+%%DATADIR%%/data/CODONS/Eysc.cut >+%%DATADIR%%/data/CODONS/Eysc_h.cut >+%%DATADIR%%/data/CODONS/Eyscmt.cut >+%%DATADIR%%/data/CODONS/Eysp.cut >+%%DATADIR%%/data/CODONS/Ezebrafish.cut >+%%DATADIR%%/data/CODONS/Ezma.cut >+%%DATADIR%%/data/REBASE/dummyfile >+%%DATADIR%%/data/PRINTS/dummyfile >+%%DATADIR%%/data/PROSITE/dummyfile >+%%DATADIR%%/data/EBLOSUM30 >+%%DATADIR%%/data/EBLOSUM35 >+%%DATADIR%%/data/EBLOSUM40 >+%%DATADIR%%/data/EBLOSUM45 >+%%DATADIR%%/data/EBLOSUM50 >+%%DATADIR%%/data/EBLOSUM55 >+%%DATADIR%%/data/EBLOSUM60 >+%%DATADIR%%/data/EBLOSUM62 >+%%DATADIR%%/data/EBLOSUM62-12 >+%%DATADIR%%/data/EBLOSUM65 >+%%DATADIR%%/data/EBLOSUM70 >+%%DATADIR%%/data/EBLOSUM75 >+%%DATADIR%%/data/EBLOSUM80 >+%%DATADIR%%/data/EBLOSUM85 >+%%DATADIR%%/data/EBLOSUM90 >+%%DATADIR%%/data/EBLOSUMN >+%%DATADIR%%/data/EDNAFULL >+%%DATADIR%%/data/EDNAMAT >+%%DATADIR%%/data/EGC.0 >+%%DATADIR%%/data/EGC.1 >+%%DATADIR%%/data/EGC.10 >+%%DATADIR%%/data/EGC.11 >+%%DATADIR%%/data/EGC.12 >+%%DATADIR%%/data/EGC.13 >+%%DATADIR%%/data/EGC.14 >+%%DATADIR%%/data/EGC.15 >+%%DATADIR%%/data/EGC.16 >+%%DATADIR%%/data/EGC.2 >+%%DATADIR%%/data/EGC.21 >+%%DATADIR%%/data/EGC.22 >+%%DATADIR%%/data/EGC.23 >+%%DATADIR%%/data/EGC.3 >+%%DATADIR%%/data/EGC.4 >+%%DATADIR%%/data/EGC.5 >+%%DATADIR%%/data/EGC.6 >+%%DATADIR%%/data/EGC.9 >+%%DATADIR%%/data/EGC.index >+%%DATADIR%%/data/EGC.txt >+%%DATADIR%%/data/ENUC.4.2 >+%%DATADIR%%/data/ENUC.4.4 >+%%DATADIR%%/data/EPAM10 >+%%DATADIR%%/data/EPAM100 >+%%DATADIR%%/data/EPAM110 >+%%DATADIR%%/data/EPAM120 >+%%DATADIR%%/data/EPAM130 >+%%DATADIR%%/data/EPAM140 >+%%DATADIR%%/data/EPAM150 >+%%DATADIR%%/data/EPAM160 >+%%DATADIR%%/data/EPAM170 >+%%DATADIR%%/data/EPAM180 >+%%DATADIR%%/data/EPAM190 >+%%DATADIR%%/data/EPAM20 >+%%DATADIR%%/data/EPAM200 >+%%DATADIR%%/data/EPAM210 >+%%DATADIR%%/data/EPAM220 >+%%DATADIR%%/data/EPAM230 >+%%DATADIR%%/data/EPAM240 >+%%DATADIR%%/data/EPAM250 >+%%DATADIR%%/data/EPAM260 >+%%DATADIR%%/data/EPAM270 >+%%DATADIR%%/data/EPAM280 >+%%DATADIR%%/data/EPAM290 >+%%DATADIR%%/data/EPAM30 >+%%DATADIR%%/data/EPAM300 >+%%DATADIR%%/data/EPAM310 >+%%DATADIR%%/data/EPAM320 >+%%DATADIR%%/data/EPAM330 >+%%DATADIR%%/data/EPAM340 >+%%DATADIR%%/data/EPAM350 >+%%DATADIR%%/data/EPAM360 >+%%DATADIR%%/data/EPAM370 >+%%DATADIR%%/data/EPAM380 >+%%DATADIR%%/data/EPAM390 >+%%DATADIR%%/data/EPAM40 >+%%DATADIR%%/data/EPAM400 >+%%DATADIR%%/data/EPAM410 >+%%DATADIR%%/data/EPAM420 >+%%DATADIR%%/data/EPAM430 >+%%DATADIR%%/data/EPAM440 >+%%DATADIR%%/data/EPAM450 >+%%DATADIR%%/data/EPAM460 >+%%DATADIR%%/data/EPAM470 >+%%DATADIR%%/data/EPAM480 >+%%DATADIR%%/data/EPAM490 >+%%DATADIR%%/data/EPAM50 >+%%DATADIR%%/data/EPAM500 >+%%DATADIR%%/data/EPAM60 >+%%DATADIR%%/data/EPAM70 >+%%DATADIR%%/data/EPAM80 >+%%DATADIR%%/data/EPAM90 >+%%DATADIR%%/data/Eaa_acc_surface.dat >+%%DATADIR%%/data/Eaa_hydropathy.dat >+%%DATADIR%%/data/Eaa_properties.dat >+%%DATADIR%%/data/Eamino.dat >+%%DATADIR%%/data/Eangles.dat >+%%DATADIR%%/data/Eangles_tri.dat >+%%DATADIR%%/data/Eantigenic.dat >+%%DATADIR%%/data/Ebases.iub >+%%DATADIR%%/data/Edayhoff.freq >+%%DATADIR%%/data/Edna.melt >+%%DATADIR%%/data/Eembl.ior >+%%DATADIR%%/data/Eenergy.dat >+%%DATADIR%%/data/Efeatures.embl >+%%DATADIR%%/data/Efeatures.emboss >+%%DATADIR%%/data/Efeatures.gff >+%%DATADIR%%/data/Efeatures.pir >+%%DATADIR%%/data/Efeatures.protein >+%%DATADIR%%/data/Efeatures.swiss >+%%DATADIR%%/data/Efreqs.dat >+%%DATADIR%%/data/Ehet.dat >+%%DATADIR%%/data/Ehth.dat >+%%DATADIR%%/data/Ehth87.dat >+%%DATADIR%%/data/Ememe.dat >+%%DATADIR%%/data/Enakai.dat >+%%DATADIR%%/data/Epepcoil.dat >+%%DATADIR%%/data/Epk.dat >+%%DATADIR%%/data/Epprofile >+%%DATADIR%%/data/Eprior1.plib >+%%DATADIR%%/data/Eprior30.plib >+%%DATADIR%%/data/Erna.melt >+%%DATADIR%%/data/Esig.euk >+%%DATADIR%%/data/Esig.pro >+%%DATADIR%%/data/Etags.embl >+%%DATADIR%%/data/Etags.emboss >+%%DATADIR%%/data/Etags.gff >+%%DATADIR%%/data/Etags.pir >+%%DATADIR%%/data/Etags.protein >+%%DATADIR%%/data/Etags.swiss >+%%DATADIR%%/data/Etcode.dat >+%%DATADIR%%/data/Evdw.dat >+%%DATADIR%%/data/Ewhite-wimley.dat >+%%DATADIR%%/data/embossre.equ >+%%DATADIR%%/data/Emwfilter.dat >+%%DATADIR%%/data/Emass.dat >+%%DATADIR%%/data/Emassmod.dat >+%%DATADIR%%/data/Matrices.nucleotide >+%%DATADIR%%/data/Matrices.protein >+%%DATADIR%%/data/Matrices.proteinstructure >+%%DATADIR%%/emboss.default.template >+%%DATADIR%%/test/data/aaindex1.test >+%%DATADIR%%/test/data/prosite.dat >+%%DATADIR%%/test/data/prosite.doc >+%%DATADIR%%/test/data/prints.test >+%%DATADIR%%/test/data/withrefm >+%%DATADIR%%/test/data/site.dat >+%%DATADIR%%/test/data/cutg.codon >+%%DATADIR%%/test/data/dna.acedb >+%%DATADIR%%/test/data/dna.aln >+%%DATADIR%%/test/data/dna.asn1 >+%%DATADIR%%/test/data/dna.codata >+%%DATADIR%%/test/data/dna.embl >+%%DATADIR%%/test/data/dna.fasta >+%%DATADIR%%/test/data/dna.fitch >+%%DATADIR%%/test/data/dna.gcg >+%%DATADIR%%/test/data/dna.gcg8 >+%%DATADIR%%/test/data/dna.genbank >+%%DATADIR%%/test/data/dna.ig >+%%DATADIR%%/test/data/dna.m-acedb >+%%DATADIR%%/test/data/dna.m-codata >+%%DATADIR%%/test/data/dna.m-embl >+%%DATADIR%%/test/data/dna.m-fasta >+%%DATADIR%%/test/data/dna.m-fasta-long >+%%DATADIR%%/test/data/dna.m-ncbi >+%%DATADIR%%/test/data/dna.m-strider >+%%DATADIR%%/test/data/dna.msf >+%%DATADIR%%/test/data/dna.msf8 >+%%DATADIR%%/test/data/dna.ncbi >+%%DATADIR%%/test/data/dna.phylip >+%%DATADIR%%/test/data/dna.phylip3 >+%%DATADIR%%/test/data/dna.staden >+%%DATADIR%%/test/data/dna.strider >+%%DATADIR%%/test/data/dna.text >+%%DATADIR%%/test/data/feat.emft >+%%DATADIR%%/test/data/feat.fasta >+%%DATADIR%%/test/data/feat.pir >+%%DATADIR%%/test/data/mw1.dat >+%%DATADIR%%/test/data/mw2.dat >+%%DATADIR%%/test/data/mw3.dat >+%%DATADIR%%/test/data/paamir.pep >+%%DATADIR%%/test/data/pax6_cdna.fasta >+%%DATADIR%%/test/data/prot.acedb >+%%DATADIR%%/test/data/prot.codata >+%%DATADIR%%/test/data/prot.fasta >+%%DATADIR%%/test/data/prot.gcg >+%%DATADIR%%/test/data/prot.gcg8 >+%%DATADIR%%/test/data/prot.ig >+%%DATADIR%%/test/data/prot.m-acedb >+%%DATADIR%%/test/data/prot.m-codata >+%%DATADIR%%/test/data/prot.m-fasta >+%%DATADIR%%/test/data/prot.m-nbrf >+%%DATADIR%%/test/data/prot.m-ncbi >+%%DATADIR%%/test/data/prot.m-swiss >+%%DATADIR%%/test/data/prot.nbrf >+%%DATADIR%%/test/data/prot.ncbi >+%%DATADIR%%/test/data/prot.swiss >+%%DATADIR%%/test/data/prot.text >+%%DATADIR%%/test/data/z83307.seq >+%%DATADIR%%/test/data/aligna.dna >+%%DATADIR%%/test/data/alignapart.dna >+%%DATADIR%%/test/data/alignb.dna >+%%DATADIR%%/test/data/aligna.prot >+%%DATADIR%%/test/data/alignapart.prot >+%%DATADIR%%/test/data/alignb.prot >+%%DATADIR%%/test/data/tranalign.pep >+%%DATADIR%%/test/data/tranalign.seq >+%%DATADIR%%/test/embl/acnum.hit >+%%DATADIR%%/test/embl/acnum.trg >+%%DATADIR%%/test/embl/division.lkp >+%%DATADIR%%/test/embl/entrynam.idx >+%%DATADIR%%/test/embl/seqvn.hit >+%%DATADIR%%/test/embl/seqvn.trg >+%%DATADIR%%/test/embl/des.hit >+%%DATADIR%%/test/embl/des.trg >+%%DATADIR%%/test/embl/keyword.hit >+%%DATADIR%%/test/embl/keyword.trg >+%%DATADIR%%/test/embl/taxon.hit >+%%DATADIR%%/test/embl/taxon.trg >+%%DATADIR%%/test/embl/est.dat >+%%DATADIR%%/test/embl/fun.dat >+%%DATADIR%%/test/embl/hum1.dat >+%%DATADIR%%/test/embl/inv.dat >+%%DATADIR%%/test/embl/pln.dat >+%%DATADIR%%/test/embl/pro.dat >+%%DATADIR%%/test/embl/rod.dat >+%%DATADIR%%/test/embl/sts.dat >+%%DATADIR%%/test/embl/vrl.dat >+%%DATADIR%%/test/embl/vrt.dat >+%%DATADIR%%/test/genbank/acnum.hit >+%%DATADIR%%/test/genbank/acnum.trg >+%%DATADIR%%/test/genbank/division.lkp >+%%DATADIR%%/test/genbank/entrynam.idx >+%%DATADIR%%/test/genbank/seqvn.hit >+%%DATADIR%%/test/genbank/seqvn.trg >+%%DATADIR%%/test/genbank/des.hit >+%%DATADIR%%/test/genbank/des.trg >+%%DATADIR%%/test/genbank/keyword.hit >+%%DATADIR%%/test/genbank/keyword.trg >+%%DATADIR%%/test/genbank/taxon.hit >+%%DATADIR%%/test/genbank/taxon.trg >+%%DATADIR%%/test/genbank/gbbct1.seq >+%%DATADIR%%/test/genbank/gbest1.seq >+%%DATADIR%%/test/genbank/gbinv1.seq >+%%DATADIR%%/test/genbank/gbpln1.seq >+%%DATADIR%%/test/genbank/gbpln2.seq >+%%DATADIR%%/test/genbank/gbpri1.seq >+%%DATADIR%%/test/genbank/gbrod1.seq >+%%DATADIR%%/test/genbank/gbsts1.seq >+%%DATADIR%%/test/genbank/gbvrl1.seq >+%%DATADIR%%/test/genbank/gbvrt.seq >+%%DATADIR%%/test/gb/acnum.hit >+%%DATADIR%%/test/gb/acnum.trg >+%%DATADIR%%/test/gb/division.lkp >+%%DATADIR%%/test/gb/entrynam.idx >+%%DATADIR%%/test/gb/seqvn.hit >+%%DATADIR%%/test/gb/seqvn.trg >+%%DATADIR%%/test/gb/des.hit >+%%DATADIR%%/test/gb/des.trg >+%%DATADIR%%/test/gb/keyword.hit >+%%DATADIR%%/test/gb/keyword.trg >+%%DATADIR%%/test/gb/taxon.hit >+%%DATADIR%%/test/gb/taxon.trg >+%%DATADIR%%/test/gb/ba.ref >+%%DATADIR%%/test/gb/ba.seq >+%%DATADIR%%/test/gb/htg.ref >+%%DATADIR%%/test/gb/htg.seq >+%%DATADIR%%/test/pir/acnum.hit >+%%DATADIR%%/test/pir/acnum.trg >+%%DATADIR%%/test/pir/division.lkp >+%%DATADIR%%/test/pir/entrynam.idx >+%%DATADIR%%/test/pir/des.hit >+%%DATADIR%%/test/pir/des.trg >+%%DATADIR%%/test/pir/keyword.hit >+%%DATADIR%%/test/pir/keyword.trg >+%%DATADIR%%/test/pir/taxon.hit >+%%DATADIR%%/test/pir/taxon.trg >+%%DATADIR%%/test/pir/pir1.header >+%%DATADIR%%/test/pir/pir1.names >+%%DATADIR%%/test/pir/pir1.numbers >+%%DATADIR%%/test/pir/pir1.offset >+%%DATADIR%%/test/pir/pir1.ref >+%%DATADIR%%/test/pir/pir1.seq >+%%DATADIR%%/test/pir/pir2.header >+%%DATADIR%%/test/pir/pir2.names >+%%DATADIR%%/test/pir/pir2.numbers >+%%DATADIR%%/test/pir/pir2.offset >+%%DATADIR%%/test/pir/pir2.ref >+%%DATADIR%%/test/pir/pir2.seq >+%%DATADIR%%/test/pir/pir3.header >+%%DATADIR%%/test/pir/pir3.names >+%%DATADIR%%/test/pir/pir3.numbers >+%%DATADIR%%/test/pir/pir3.offset >+%%DATADIR%%/test/pir/pir3.ref >+%%DATADIR%%/test/pir/pir3.seq >+%%DATADIR%%/test/pir/pir4.header >+%%DATADIR%%/test/pir/pir4.names >+%%DATADIR%%/test/pir/pir4.numbers >+%%DATADIR%%/test/pir/pir4.offset >+%%DATADIR%%/test/pir/pir4.ref >+%%DATADIR%%/test/pir/pir4.seq >+%%DATADIR%%/test/swiss/seq.dat >+%%DATADIR%%/test/swiss/acnum.hit >+%%DATADIR%%/test/swiss/acnum.trg >+%%DATADIR%%/test/swiss/division.lkp >+%%DATADIR%%/test/swiss/entrynam.idx >+%%DATADIR%%/test/swiss/seqvn.hit >+%%DATADIR%%/test/swiss/seqvn.trg >+%%DATADIR%%/test/swiss/des.hit >+%%DATADIR%%/test/swiss/des.trg >+%%DATADIR%%/test/swiss/keyword.hit >+%%DATADIR%%/test/swiss/keyword.trg >+%%DATADIR%%/test/swiss/taxon.hit >+%%DATADIR%%/test/swiss/taxon.trg >+%%DATADIR%%/test/swnew/acnum.hit >+%%DATADIR%%/test/swnew/acnum.trg >+%%DATADIR%%/test/swnew/division.lkp >+%%DATADIR%%/test/swnew/entrynam.idx >+%%DATADIR%%/test/swnew/seqvn.hit >+%%DATADIR%%/test/swnew/seqvn.trg >+%%DATADIR%%/test/swnew/des.hit >+%%DATADIR%%/test/swnew/des.trg >+%%DATADIR%%/test/swnew/keyword.hit >+%%DATADIR%%/test/swnew/keyword.trg >+%%DATADIR%%/test/swnew/taxon.hit >+%%DATADIR%%/test/swnew/taxon.trg >+%%DATADIR%%/test/swnew/new_seq.dat >+%%DATADIR%%/test/swnew/upd_ann.dat >+%%DATADIR%%/test/swnew/upd_seq.dat >+%%DATADIR%%/test/wormpep/wormpep >+%%DATADIR%%/test/wormpep/acnum.hit >+%%DATADIR%%/test/wormpep/acnum.trg >+%%DATADIR%%/test/wormpep/division.lkp >+%%DATADIR%%/test/wormpep/entrynam.idx >+%%DATADIR%%/test/wormpep/des.hit >+%%DATADIR%%/test/wormpep/des.trg >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/filetree/DragTree.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/filetree/FileEditorDisplay.PopupListener.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/filetree/FileEditorDisplay.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/filetree/FileNode.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/filetree/FileSaving.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/BuildJembossForm.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/ListFilePanel.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/SectionPanel.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/SetInFileCard.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/SetOutFileCard.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/TextFieldFloat.DecimalNumberDocument.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/TextFieldFloat.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/TextFieldInt.WholeNumberDocument.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/TextFieldInt.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/TextFieldSink.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/JembossComboPopup.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/JembossComboPopup.myComboUI.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/sequenceChooser/CutNPasteTextArea.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/sequenceChooser/FileChooser.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/sequenceChooser/InputSequenceAttributes.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/sequenceChooser/OutputSequenceAttributes.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/sequenceChooser/SequenceFilter.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/sequenceChooser/TextAreaSink.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/startup/Database.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/startup/ProgList.HorizontalMenu.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/startup/ProgList.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/startup/Splash.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/BuildProgramMenu.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/ResultsMenuBar.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/SetUpMenuBar.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/ShowResultSet.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/ShowSavedResults.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/SwingWorker.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/acd/ApplicationFields.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/acd/ApplicationParam.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/AcdFunResolve.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/AcdVarResolve.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/Ajax.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/Dependent.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/ParseAcd.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/programs/JembossProcess.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/programs/ListFile.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/programs/ResultList.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/programs/RunEmbossApplication.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/soap/AuthPopup.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/soap/CallAjax.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/soap/GetWossname.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/soap/JembossRun.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/soap/JembossSoapException.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/soap/PendingResults.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/soap/PrivateRequest.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/soap/ResListView.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/Jemboss.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/Jemboss.winExit.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/JembossLogo.html >+%%DATADIR%%/jemboss/api/org/emboss/jemboss/JembossParams.html >+%%DATADIR%%/jemboss/api/allclasses-frame.html >+%%DATADIR%%/jemboss/api/deprecated-list.html >+%%DATADIR%%/jemboss/api/getClasses.pl >+%%DATADIR%%/jemboss/api/help-doc.html >+%%DATADIR%%/jemboss/api/index-all.html >+%%DATADIR%%/jemboss/api/index.html >+%%DATADIR%%/jemboss/api/makeDocs.csh >+%%DATADIR%%/jemboss/api/overview-tree.html >+%%DATADIR%%/jemboss/api/package-list >+%%DATADIR%%/jemboss/api/packages.html >+%%DATADIR%%/jemboss/api/serialized-form.html >+%%DATADIR%%/jemboss/api/stylesheet.css >+%%DATADIR%%/jemboss/images/Backward_arrow_button.gif >+%%DATADIR%%/jemboss/images/Forward_arrow_button.gif >+%%DATADIR%%/jemboss/images/Go_button.gif >+%%DATADIR%%/jemboss/images/Information_button.gif >+%%DATADIR%%/jemboss/images/Jemboss_logo_greyback.gif >+%%DATADIR%%/jemboss/images/Jemboss_logo_large.gif >+%%DATADIR%%/jemboss/images/Jemboss_logo_small.gif >+%%DATADIR%%/jemboss/images/Job_manager_button.gif >+%%DATADIR%%/jemboss/images/Refresh_button.gif >+%%DATADIR%%/jemboss/images/Refresh_button2.gif >+%%DATADIR%%/jemboss/lib/axis/axis-ant.jar >+%%DATADIR%%/jemboss/lib/axis/axis.jar >+%%DATADIR%%/jemboss/lib/axis/commons-discovery.jar >+%%DATADIR%%/jemboss/lib/axis/commons-logging.jar >+%%DATADIR%%/jemboss/lib/axis/jaxrpc.jar >+%%DATADIR%%/jemboss/lib/axis/log4j-1.2.8.jar >+%%DATADIR%%/jemboss/lib/axis/saaj.jar >+%%DATADIR%%/jemboss/lib/axis/servlet.jar >+%%DATADIR%%/jemboss/lib/axis/wsdl4j.jar >+%%DATADIR%%/jemboss/lib/README >+%%DATADIR%%/jemboss/lib/activation.jar >+%%DATADIR%%/jemboss/lib/jakarta-regexp-1.2.jar >+%%DATADIR%%/jemboss/lib/mail.jar >+%%DATADIR%%/jemboss/lib/xerces.jar >+%%DATADIR%%/jemboss/lib/jalview.jar >+%%DATADIR%%/jemboss/lib/JembossPrintAlignment.jar >+%%DATADIR%%/jemboss/lib/grout.jar >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/AlignApplet.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutSequenceJPanel.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/AlignJFrame.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/Matrix.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/ColourJFrame.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/MatrixJFrame.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/ColourMenu.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/PatternJFrame.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/ColourPanel.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/PlotConsensus.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/Consensus.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/PrettyPlotJFrame.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/ConsensusOptions.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/PrintAlignmentImage.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GraphicSequenceCollection.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/PrintAlignment.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/Paste.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutAlignJFrameEvent.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/Sequence.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutAlignJFrame.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/SequenceJPanel.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutAlignJFrameListener.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/SequenceNameJButton.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutGraphicSequenceCollectionEvent.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/SequenceProperties.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutGraphicSequenceCollection.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/SequenceReader.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutGraphicSequenceCollectionListener.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/SequenceSaver.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutSequence.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/IDTableJFrame.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/editor/PrintableJTable.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/draw/Block.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/draw/PrintDNAImage.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/draw/DNADraw.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/draw/RestrictionEnzyme.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/draw/EmbossCirdnaReader.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/draw/Ticks.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/draw/GeneticMarker.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/draw/Wizard.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/draw/LineAttribute.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/graphics/Graph2DPlot.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/graphics/PrintPlot.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/DragTree.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/FileEditorDisplay.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/FileNode.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/FileSave.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/FileSaving.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/RemoteDragTree.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/RemoteFileNode.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/RemoteFileTreePanel.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/LocalAndRemoteFileTreeFrame.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/LocalTreeToolBar.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/BuildJembossForm.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/ListFilePanel.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/SectionPanel.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/SetInFileCard.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/SetOutFileCard.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/TextFieldFloat.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/TextFieldInt.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/TextFieldSink.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/JembossComboPopup.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/MultiLineToolTipUI.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/PlafMacros.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/ReportFormat.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/AlignFormat.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/ApplicationNamePanel.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/LabelTextBox.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/Separator.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/sequenceChooser/CutNPasteTextArea.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/sequenceChooser/FileChooser.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/sequenceChooser/InputSequenceAttributes.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/sequenceChooser/OutputSequenceAttributes.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/sequenceChooser/SequenceFilter.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/sequenceChooser/TextAreaSink.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/startup/Database.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/startup/ProgList.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/AdvancedOptions.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/ResultsMenuBar.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/ShowResultSet.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/BuildProgramMenu.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/SequenceData.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/ShowSavedResults.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/LaunchJalView.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/SequenceList.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/SwingWorker.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/MemoryComboBox.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/SetUpMenuBar.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/Browser.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/SplashThread.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/ScrollPanel.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/ImageIconJPanel.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/Favorites.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/gui/KeywordSearch.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/parser/acd/ApplicationFields.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/parser/acd/ApplicationParam.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/parser/AcdFunResolve.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/parser/AcdVariableResolve.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/parser/AcdVarResolve.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/parser/Ajax.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/parser/AjaxUtil.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/parser/Dependent.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/parser/ParseAcd.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/programs/BatchUpdateTimer.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/programs/JembossProcess.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/programs/ListFile.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/programs/ResultList.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/programs/ResultsUpdateTimer.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/programs/RunEmbossApplication.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/programs/RunEmbossApplication2.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/server/JembossServer.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/server/JembossFileServer.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/server/JembossThread.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/server/JembossAuthServer.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/server/JembossFileAuthServer.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/server/TestPublicServer.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/server/TestPrivateServer.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/server/AppendToLogFileThread.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/soap/AuthPopup.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/soap/JembossSoapException.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/soap/CallAjax.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/soap/PendingResults.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/soap/GetWossname.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/soap/PrivateRequest.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/soap/JembossRun.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/soap/ServerSetup.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/soap/FileRoots.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/soap/FileList.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/soap/PublicRequest.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/soap/GetACD.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/soap/GetHelp.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/soap/ShowDB.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/soap/MakeFileSafe.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/Jemboss.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/JembossLogo.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/JembossParams.java >+%%DATADIR%%/jemboss/org/emboss/jemboss/JembossJarUtil.java >+%%DATADIR%%/jemboss/resources/jemboss.properties >+%%DATADIR%%/jemboss/resources/readme.html >+%%DATADIR%%/jemboss/resources/readmeAlign.html >+%%DATADIR%%/jemboss/resources/readmeDNADraw.html >+%%DATADIR%%/jemboss/resources/results.html >+%%DATADIR%%/jemboss/resources/version >+%%DATADIR%%/jemboss/resources/filemgr.html >+%%DATADIR%%/jemboss/resources/seqList.html >+%%DATADIR%%/jemboss/utils/install-jemboss-server.sh >+%%DATADIR%%/jemboss/utils/keys.sh >+%%DATADIR%%/jemboss/utils/makeJar.csh >+%%DATADIR%%/jemboss/utils/makeJNLP.sh >+%%DATADIR%%/jemboss/utils/makeFileManagerJNLP.sh >+%%DATADIR%%/jemboss/utils/template.html >+%%DATADIR%%/jemboss/utils/README >+%%DATADIR%%/jemboss/LICENSE >+%%DATADIR%%/jemboss/readme.html >+%%DATADIR%%/jemboss/runJemboss.sh >+%%DATADIR%%/jemboss/README >+%%PORTDOCS%%@dirrm %%DOCSDIR%%/manuals > %%PORTDOCS%%@dirrm %%DOCSDIR%%/programs/html >+%%PORTDOCS%%@dirrm %%DOCSDIR%%/programs/text > %%PORTDOCS%%@dirrm %%DOCSDIR%%/programs >-%%PORTDOCS%%@dirrm %%DOCSDIR%%/manuals >+%%PORTDOCS%%@dirrm %%DOCSDIR%%/tutorials > %%PORTDOCS%%@dirrm %%DOCSDIR%% >-@dirrm %%DATADIR%%/test/wormpep >-@dirrm %%DATADIR%%/test/swnew >-@dirrm %%DATADIR%%/test/swiss >-@dirrm %%DATADIR%%/test/pir >+@dirrm %%DATADIR%%/acd >+@dirrm %%DATADIR%%/data/AAINDEX >+@dirrm %%DATADIR%%/data/CODONS >+@dirrm %%DATADIR%%/data/REBASE >+@dirrm %%DATADIR%%/data/PRINTS >+@dirrm %%DATADIR%%/data/PROSITE >+@dirrmtry %%DATADIR%%/data >+@dirrm %%DATADIR%%/test/data >+@dirrm %%DATADIR%%/test/embl > @dirrm %%DATADIR%%/test/genbank > @dirrm %%DATADIR%%/test/gb >-@dirrm %%DATADIR%%/test/embl >-@dirrm %%DATADIR%%/test/data >+@dirrm %%DATADIR%%/test/pir >+@dirrm %%DATADIR%%/test/swiss >+@dirrm %%DATADIR%%/test/swnew >+@dirrm %%DATADIR%%/test/wormpep > @dirrm %%DATADIR%%/test >-@dirrm %%DATADIR%%/jemboss/utils >-@dirrm %%DATADIR%%/jemboss/resources >-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/soap >-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/server >-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/programs >-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/parser/acd >-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/parser >-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/startup >-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/sequenceChooser >-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/form >-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree >-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui >-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/graphics >-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/editor >-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/draw >-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss >-@dirrm %%DATADIR%%/jemboss/org/emboss >-@dirrm %%DATADIR%%/jemboss/org >-@dirrm %%DATADIR%%/jemboss/lib/axis >-@dirrm %%DATADIR%%/jemboss/lib >-@dirrm %%DATADIR%%/jemboss/images >-@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/soap >-@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/programs >-@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/acd >-@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/parser >-@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/startup >-@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/sequenceChooser >-@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form > @dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/filetree >+@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form >+@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/sequenceChooser >+@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/startup > @dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui >+@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/acd >+@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/parser >+@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/programs >+@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/soap > @dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss > @dirrm %%DATADIR%%/jemboss/api/org/emboss > @dirrm %%DATADIR%%/jemboss/api/org > @dirrm %%DATADIR%%/jemboss/api >+@dirrm %%DATADIR%%/jemboss/images >+@dirrm %%DATADIR%%/jemboss/lib/axis >+@dirrm %%DATADIR%%/jemboss/lib >+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/editor >+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/draw >+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/graphics >+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree >+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/form >+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/sequenceChooser >+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/startup >+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui >+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/parser/acd >+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/parser >+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/programs >+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/server >+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/soap >+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss >+@dirrm %%DATADIR%%/jemboss/org/emboss >+@dirrm %%DATADIR%%/jemboss/org >+@dirrm %%DATADIR%%/jemboss/resources >+@dirrm %%DATADIR%%/jemboss/utils > @dirrm %%DATADIR%%/jemboss >-@dirrm %%DATADIR%%/data/REBASE >-@dirrm %%DATADIR%%/data/PROSITE >-@dirrm %%DATADIR%%/data/PRINTS >-@dirrm %%DATADIR%%/data/CODONS >-@dirrm %%DATADIR%%/data/AAINDEX >-@dirrm %%DATADIR%%/data >-@dirrm %%DATADIR%%/acd >-@dirrm %%DATADIR%% >+@dirrmtry %%DATADIR%% >+@dirrmtry bin >+@dirrmtry include >+@dirrmtry lib >+@dirrmtry share/doc >+@dirrmtry share >+
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 93053
:
62217
|
62218
|
62219
| 62220 |
62221