From owner-freebsd-ports-bugs@FreeBSD.ORG Mon Mar 20 16:36:21 2006 Return-Path: X-Original-To: freebsd-ports-bugs@FreeBSD.org Delivered-To: freebsd-ports-bugs@FreeBSD.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 0405B16A426; Mon, 20 Mar 2006 16:36:21 +0000 (UTC) (envelope-from fernan@iib.unsam.edu.ar) Received: from smtp.unsam.edu.ar (smtp.unsam.edu.ar [170.210.48.3]) by mx1.FreeBSD.org (Postfix) with ESMTP id BC01343D72; Mon, 20 Mar 2006 16:33:06 +0000 (GMT) (envelope-from fernan@iib.unsam.edu.ar) Received: from pi.iib.unsam.edu.ar (pi.iib.unsam.edu.ar [192.168.10.11]) by smtp.unsam.edu.ar (8.12.6/8.12.6) with ESMTP id k2KGN3Ur038678; Mon, 20 Mar 2006 13:23:03 -0300 (ART) (envelope-from fernan@iib.unsam.edu.ar) Received: from pi.iib.unsam.edu.ar (localhost [127.0.0.1]) by pi.iib.unsam.edu.ar (8.13.1/8.13.1) with ESMTP id k2KGW3lC014361; Mon, 20 Mar 2006 13:32:03 -0300 (ART) (envelope-from fernan@iib.unsam.edu.ar) Received: (from fernan@localhost) by pi.iib.unsam.edu.ar (8.13.1/8.13.1/Submit) id k2KGW2j3014360; Mon, 20 Mar 2006 13:32:02 -0300 (ART) (envelope-from fernan@iib.unsam.edu.ar) X-Authentication-Warning: pi.iib.unsam.edu.ar: fernan set sender to fernan@iib.unsam.edu.ar using -f Date: Mon, 20 Mar 2006 13:32:02 -0300 From: Fernan Aguero To: Thierry Thomas Message-ID: <20060320163202.GA13717@iib.unsam.edu.ar> Mail-Followup-To: Thierry Thomas , freebsd-ports-bugs@FreeBSD.org References: <200603171036.k2HAaiQs056559@freefall.freebsd.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="qMm9M+Fa2AknHoGS" Content-Disposition: inline In-Reply-To: <200603171036.k2HAaiQs056559@freefall.freebsd.org> User-Agent: Mutt/1.5.9i Cc: freebsd-ports-bugs@FreeBSD.org Subject: Re: ports/93053: sync update of biology/emboss && biology/embassy X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Mar 2006 16:36:21 -0000 --qMm9M+Fa2AknHoGS Content-Type: text/plain; charset=us-ascii Content-Disposition: inline +----[ Thierry Thomas (17.Mar.2006 07:37): | | There is a problem with the default config file, still included in | plist user $PREFIX/etc: | | ===> Building package for emboss-3.0.0 | tar: etc/emboss.default.sample: Cannot stat: No such file or directory | pkg_create: make_dist: tar command failed with code 256 | +----] Sorry about that. Attached is a new diff, Fernan --qMm9M+Fa2AknHoGS Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="emboss_new.2.diff" 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 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;iPtr)>=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;ibuf; ++ 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;jIds[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;ikarray[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;ikarray[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;ikarray[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;ikarray[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;ipageno) ++ 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> 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;iOverflow; ++ bentries = buckets[i]->Nentries; ++ for(j=0;jIds[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;iOverflow = 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; itotsize; ++ 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;iNentries; ++ for(j=0;jIds[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;iNentries = 0; ++ for(j=0;jIds[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;iNentries = 0; ++ for(j=0;jIds[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;ibuf; ++ lv = lblockno; ++ SBT_PREV(tbuf,lv); ++ tpage->dirty = BT_DIRTY; ++ } ++ ++ ++ totlen = 0; ++ for(i=keypos+1;idirty = BT_DIRTY; ++ btreeWriteNode(cache,rpage,tkarray,tparray,rkeyno); ++ ++ ++ for(i=0;ibuf; ++ 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;ibuf; ++ lv = lblockno; ++ SBT_PREV(tbuf,lv); ++ tpage->dirty = BT_DIRTY; ++ } ++ ++ totlen = 0; ++ for(i=keypos+1;idirty = BT_DIRTY; ++ btreeWriteNode(cache,rpage,tkarray,tparray,rkeyno); ++ ++ for(i=0;ibuf; ++ 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;ikey1->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;ibuf; ++ ++ 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;idirty = 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;iNumId[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;iNumId[i]); ++ ++ ++ pptr = PBT_BUCKKEYLEN(buf); ++ ++ for(i=0;iNumId[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;iNentries;++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;iNumId[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> 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;iNentries; ++ for(j=0;jNumId[j]); ++ ++ AJFREE(buckets[i]->NumId); ++ AJFREE(buckets[i]); ++ } ++ ajListSort(idlist,btreeNumIdCompare); ++ AJFREE(buckets); ++ ++ cbucket = btreeNumBucketNew(maxnperbucket); ++ bucketlimit = bucketn - 1; ++ ++ for(i=0;iNentries = 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;ibuf; ++ lv = lblockno; ++ SBT_PREV(tbuf,lv); ++ tpage->dirty = BT_DIRTY; ++ } ++ ++ ++ totlen = 0; ++ for(i=keypos+1;idirty = BT_DIRTY; ++ btreeWriteNumNode(cache,rpage,tkarray,tparray,rkeyno); ++ ++ ++ for(i=0;ibuf; ++ 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;ibuf; ++ lv = lblockno; ++ SBT_PREV(tbuf,lv); ++ tpage->dirty = BT_DIRTY; ++ } ++ ++ for(i=keypos+1;idirty = BT_DIRTY; ++ btreeWriteNumNode(cache,rpage,tkarray,tparray,rkeyno); ++ ++ for(i=0;ibuf; ++ 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;ipageno) ++ 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;ipageno) ++ 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;iNentries; ++ for(j=0;jNumId[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;iNentries = 0; ++ for(j=0;jNumId[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;iNentries = 0; ++ for(j=0;jNumId[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;iorder;++i) ++ ajStrDel(&p->karray[i]); ++ AJFREE(p->karray); ++ AJFREE(p); ++ p = next; ++ next = p->next; ++ } ++ ++ ++ AJFREE(p->parray); ++ AJFREE(p->overflows); ++ for(i=0;iorder;++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;isorder;++i) ++ ajStrDel(&p->karray[i]); ++ AJFREE(p->karray); ++ AJFREE(p); ++ ++ p = next; ++ next = p->next; ++ } ++ ++ ++ AJFREE(p->parray); ++ AJFREE(p->overflows); ++ for(i=0;isorder;++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;iNentries;++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 + #include +@@ -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 Fri Mar 17 18:35:45 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,230 @@ 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.a +lib/libajax.so.3 lib/libajax.so -lib/libajax.so.1 -lib/libajaxg.a -lib/libajaxg.la +lib/libajax.a +lib/libajaxg.so.3 lib/libajaxg.so -lib/libajaxg.so.1 -lib/libnucleus.a -lib/libnucleus.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.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 +490,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 +536,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 +543,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 +576,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 +598,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 +621,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 +646,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 +658,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 +806,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 +832,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 +865,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 +902,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 +925,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 +949,1114 @@ %%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%% --qMm9M+Fa2AknHoGS--