Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 16 Mar 2006 21:50:15 GMT
From:      Fernan Aguero <fernan@iib.unsam.edu.ar>
To:        freebsd-ports-bugs@FreeBSD.org
Subject:   Re: ports/93053: sync update of biology/emboss && biology/embassy
Message-ID:  <200603162150.k2GLoFdl010429@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR ports/93053; it has been noted by GNATS.

From: Fernan Aguero <fernan@iib.unsam.edu.ar>
To: Thierry Thomas <thierry@FreeBSD.org>
Cc: bug-followup@FreeBSD.org
Subject: Re: ports/93053: sync update of biology/emboss && biology/embassy
Date: Thu, 16 Mar 2006 18:44:37 -0300

 --l76fUT7nc3MelDdI
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 
 +----[ Thierry Thomas <thierry@FreeBSD.org> (16.Mar.2006 18:27):
 |
 | Hello Fernan,
 | 
 | These ports have been updated since your intial submission, and your
 | patches don't install cleanly any more; could you please update them?
 |
 +----]
 
 Thierry,
 
 yes, the libtool upgrade was the reason of the update.
 
 Attached is a new diff against the current emboss port.
 
 AFAICS the embassy port was not affected, so the original
 embassy.diff file should be OK. Let me know if it's not.
 
 Thanks,
 
 fernan
 
 --l76fUT7nc3MelDdI
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: attachment; filename="emboss_new.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 <bsd.port.mk>
 diff -ruN /usr/ports/biology/emboss/distinfo emboss/distinfo
 --- /usr/ports/biology/emboss/distinfo	Wed Jan 25 11:31:47 2006
 +++ emboss/distinfo	Thu Jan 19 15:37:47 2006
 @@ -1,3 +1,3 @@
 -MD5 (EMBOSS-2.10.0.tar.gz) = 4a48388ced7021a8ffece5166c40a364
 -SHA256 (EMBOSS-2.10.0.tar.gz) = 1d3a8d84ff9c4f77d81b88c9e7c33517a232e7797eb2b761729f97898aa34a8f
 -SIZE (EMBOSS-2.10.0.tar.gz) = 16262124
 +MD5 (emboss/EMBOSS-3.0.0.tar.gz) = fa72feded9ab9272e3e731c09f545dcc
 +SHA256 (emboss/EMBOSS-3.0.0.tar.gz) = 47a51ba7aeb9f6e7f4cd23c28cffad7c6d28432e92f37d6f08121791ef894dea
 +SIZE (emboss/EMBOSS-3.0.0.tar.gz) = 16257908
 diff -ruN /usr/ports/biology/emboss/files/patch-ajindex.c emboss/files/patch-ajindex.c
 --- /usr/ports/biology/emboss/files/patch-ajindex.c	Wed Dec 31 21:00:00 1969
 +++ emboss/files/patch-ajindex.c	Mon Jan 23 12:18:51 2006
 @@ -0,0 +1,5134 @@
 +--- ajax/ajindex.c.orig	Mon Jan 23 12:17:02 2006
 ++++ ajax/ajindex.c	Thu Dec 22 13:12:27 2005
 +@@ -22,7 +22,6 @@
 + 
 + 
 + 
 +-
 + static AjPBtpage  btreeCacheLocate(const AjPBtcache cache, ajlong page);
 + static AjPBtpage  btreeCacheLruUnlink(AjPBtcache cache);
 + static void       btreeCacheUnlink(AjPBtcache cache, AjPBtpage cpage);
 +@@ -35,10 +34,14 @@
 + 				    AjBool isread);
 + static AjPBtpage  btreeFindINode(AjPBtcache cache, AjPBtpage page,
 + 				 const char *item);
 ++static AjPBtpage  btreeSecFindINode(AjPBtcache cache, AjPBtpage page,
 ++				    const char *item);
 + 
 + 
 + static AjPBtpage  btreePageFromKey(AjPBtcache cache, unsigned char *buf,
 + 				   const char *item);
 ++static AjPBtpage  btreeSecPageFromKey(AjPBtcache cache, unsigned char *buf,
 ++				      const char *item);
 + static ajint      btreeNumInBucket(AjPBtcache cache, ajlong pageno);
 + static AjPBucket  btreeReadBucket(AjPBtcache cache, ajlong pageno);
 + static void       btreeWriteBucket(AjPBtcache cache, const AjPBucket bucket,
 +@@ -55,6 +58,7 @@
 + 				 AjPStr const *keys, const ajlong *ptrs,
 + 				 ajint nkeys);
 + static AjBool     btreeNodeIsFull(const AjPBtcache cache, AjPBtpage page);
 ++static AjBool     btreeNodeIsFullSec(const AjPBtcache cache, AjPBtpage page);
 + static void       btreeInsertNonFull(AjPBtcache cache, AjPBtpage page,
 + 				     const AjPStr key, ajlong less,
 + 				     ajlong greater);
 +@@ -87,6 +91,8 @@
 + 
 + 
 + 
 ++
 ++
 + #if 0
 + static AjPBtpage  btreeTraverseLeaves(AjPBtcache cache, AjPBtpage thys);
 + static void       btreeJoinLeaves(AjPBtcache cache);
 +@@ -168,6 +174,63 @@
 + static ajint         btreeDbnoCompare(const void *a, const void *b);
 + 
 + 
 ++static AjPBtMem      btreeAllocPriArray(AjPBtcache cache);
 ++static void          btreeDeallocPriArray(AjPBtcache cache, AjPBtMem node);
 ++static AjPBtMem      btreeAllocSecArray(AjPBtcache cache);
 ++static void          btreeDeallocSecArray(AjPBtcache cache, AjPBtMem node);
 ++
 ++
 ++
 ++static void          btreeAddToHybBucket(AjPBtcache cache, ajlong pageno,
 ++					 const AjPBtHybrid id);
 ++static AjPBtpage     btreeHybFindINode(AjPBtcache cache, AjPBtpage page,
 ++				       const char *item);
 ++static AjPBtpage     btreeHybPageFromKey(AjPBtcache cache,
 ++					 unsigned char *buf, const char *key);
 ++static ajlong        btreeHybInsertShift(AjPBtcache cache, AjPBtpage *retpage,
 ++					 const char *key);
 ++static AjBool        btreeHybReorderBuckets(AjPBtcache cache, AjPBtpage leaf);
 ++static AjPBtpage     btreeHybSplitLeaf(AjPBtcache cache, AjPBtpage spage);
 ++static void          btreeHybInsertKey(AjPBtcache cache, AjPBtpage page,
 ++				       const AjPStr key, ajlong less,
 ++				       ajlong greater);
 ++static void          btreeHybSplitRoot(AjPBtcache cache);
 ++static void          btreeHybDupInsert(AjPBtcache cache, AjPBtHybrid hyb,
 ++				       AjPBtId btid);
 ++static void          btreeGetNumKeys(AjPBtcache cache, unsigned char *buf,
 ++				     ajlong **keys, ajlong **ptrs);
 ++static void          btreeWriteNumNode(AjPBtcache cache, AjPBtpage spage,
 ++				       const ajlong *keys, const ajlong *ptrs,
 ++				       ajint nkeys);
 ++static AjPNumBucket  btreeReadNumBucket(AjPBtcache cache, ajlong pageno);
 ++static void          btreeNumBucketDel(AjPNumBucket *thys);
 ++static void          btreeAddToNumBucket(AjPBtcache cache, ajlong pageno,
 ++					 const AjPBtNumId num);
 ++static AjPBtpage     btreeNumFindINode(AjPBtcache cache, AjPBtpage page,
 ++				       const ajlong item);
 ++static AjPBtpage     btreeNumPageFromKey(AjPBtcache cache, unsigned char *buf,
 ++					 const ajlong key);
 ++static ajint         btreeNumInNumBucket(AjPBtcache cache, ajlong pageno);
 ++static AjBool        btreeReorderNumBuckets(AjPBtcache cache, AjPBtpage leaf);
 ++static AjPNumBucket  btreeNumBucketNew(ajint n);
 ++static ajint         btreeNumIdCompare(const void *a, const void *b);
 ++static AjBool        btreeNumNodeIsFull(const AjPBtcache cache,
 ++					AjPBtpage page);
 ++static void          btreeNumInsertNonFull(AjPBtcache cache, AjPBtpage page,
 ++					   const ajlong key, ajlong less,
 ++					   ajlong greater);
 ++static void          btreeNumInsertKey(AjPBtcache cache, AjPBtpage page,
 ++				       const ajlong key, ajlong less,
 ++				       ajlong greater);
 ++static void          btreeNumSplitRoot(AjPBtcache cache);
 ++static void          btreeNumKeyShift(AjPBtcache cache, AjPBtpage tpage);
 ++static ajlong        btreeNumInsertShift(AjPBtcache cache, AjPBtpage *retpage,
 ++					 ajlong key);
 ++static AjPBtpage     btreeNumSplitLeaf(AjPBtcache cache, AjPBtpage spage);
 ++
 ++
 ++
 ++
 + 
 + 
 + 
 +@@ -196,11 +259,14 @@
 + {
 +     FILE *fp;
 +     AjPBtcache cache = NULL;
 ++#if 0
 + #if defined (HAVE64) && !defined(_OSF_SOURCE) && !defined(_AIX) && !defined(__hpux) && !defined(__ppc__) && !defined(__FreeBSD__)
 +     struct stat64 buf;
 + #else
 +     struct stat buf;
 + #endif
 ++#endif
 ++
 +     ajlong filelen = 0L;
 + 
 +     AjPStr fn = NULL;
 +@@ -213,12 +279,18 @@
 + 	return NULL;
 + 
 + 
 ++    /* Commented out pending database updating */
 ++#if 0
 ++    if(strcmp(mode,"r"))
 ++    {
 + #if defined (HAVE64) && !defined(_OSF_SOURCE) && !defined(_AIX) && !defined(__hpux) && !defined(__ppc__) && !defined(__FreeBSD__)
 +-    if(!stat64(file, &buf))
 ++	if(!stat64(fn->Ptr, &buf))
 + #else
 +-    if(!stat(file, &buf))
 ++	    if(!stat(fn->Ptr, &buf))
 + #endif
 +-	filelen = buf.st_size;
 ++		filelen = buf.st_size;
 ++    }
 ++#endif    
 + 
 +     AJNEW0(cache);
 + 
 +@@ -244,6 +316,13 @@
 +     cache->totsize    = filelen;
 +     cache->cachesize  = cachesize;
 + 
 ++    cache->bmem = NULL;
 ++    cache->tmem = NULL;
 ++
 ++    cache->bsmem = NULL;
 ++    cache->tsmem = NULL;
 ++
 ++
 +     /* Add slevel, sorder and snperbucket ???? */
 + 
 +     ajStrDel(&fn);
 +@@ -808,7 +887,7 @@
 +     root = btreeCacheLocate(cache,0L);
 + 
 +     if(!root)
 +-	ajFatal("Something has unlocked the PRI root cache page\n");
 ++	ajFatal("The PRI root cache page has been unlocked\n");
 +     
 +     if(!cache->level)
 + 	return root;
 +@@ -863,6 +942,48 @@
 + 
 + 
 + 
 ++/* @funcstatic btreeSecFindINode *************************************************
 ++**
 ++** Recursive search for insert node in a secondary tree
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [u] page [AjPBtpage] page
 ++** @param [r] item [const char*] key to search for 
 ++**
 ++** @return [AjPBtpage] leaf node where item should be inserted
 ++** @@
 ++******************************************************************************/
 ++
 ++static AjPBtpage btreeSecFindINode(AjPBtcache cache, AjPBtpage page,
 ++				 const char *item)
 ++{
 ++    AjPBtpage ret = NULL;
 ++    AjPBtpage pg  = NULL;
 ++
 ++    unsigned char *buf = NULL;
 ++    ajint status       = 0;
 ++    ajint ival         = 0;
 ++
 ++    /* ajDebug("In btreeSecFindINode\n"); */
 ++    
 ++    ret = page;
 ++    buf = page->buf;
 ++    GBT_NODETYPE(buf,&ival);
 ++    if(ival != BT_LEAF)
 ++    {
 ++	status = ret->dirty;
 ++	ret->dirty = BT_LOCK;	/* Lock in case of lots of overflow pages */
 ++	pg = btreeSecPageFromKey(cache,buf,item);
 ++	ret->dirty = status;
 ++	ret = btreeSecFindINode(cache,pg,item);
 ++    }
 ++    
 ++    return ret;
 ++}
 ++
 ++
 ++
 ++
 + /* @funcstatic btreePageFromKey *******************************************
 + **
 + ** Return next lower index page given a key
 +@@ -928,6 +1049,71 @@
 + 
 + 
 + 
 ++/* @funcstatic btreeSecPageFromKey *******************************************
 ++**
 ++** Return next lower index page given a key in a secondary tree
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [u] buf [unsigned char *] page buffer
 ++** @param [r] key [const char *] key to search for 
 ++**
 ++** @return [AjPBtpage] pointer to a page
 ++** @@
 ++******************************************************************************/
 ++
 ++static AjPBtpage btreeSecPageFromKey(AjPBtcache cache, unsigned char *buf,
 ++				     const char *key)
 ++{
 ++    unsigned char *rootbuf = NULL;
 ++    ajint nkeys = 0;
 ++    ajint order = 0;
 ++    ajint i;
 ++    
 ++    ajlong blockno = 0L;
 ++    AjPStr *karray = NULL;
 ++    ajlong *parray = NULL;
 ++    AjPBtpage page = NULL;
 ++    
 ++    /* ajDebug("In btreePageFromKey\n"); */
 ++    
 ++    rootbuf = buf;
 ++
 ++
 ++    GBT_NKEYS(rootbuf,&nkeys);
 ++    order = cache->sorder;
 ++
 ++    AJCNEW0(karray,order);
 ++    AJCNEW0(parray,order);
 ++    for(i=0;i<order;++i)
 ++	karray[i] = ajStrNew();
 ++
 ++    btreeGetKeys(cache,rootbuf,&karray,&parray);
 ++    i = 0;
 ++    while(i!=nkeys && strcmp(key,karray[i]->Ptr)>=0)
 ++	++i;
 ++    if(i==nkeys)
 ++    {
 ++	if(strcmp(key,karray[i-1]->Ptr)<0)
 ++	    blockno = parray[i-1];
 ++	else
 ++	    blockno = parray[i];
 ++    }
 ++    else
 ++	blockno = parray[i];
 ++
 ++    for(i=0;i<order;++i)
 ++	ajStrDel(&karray[i]);
 ++    AJFREE(karray);
 ++    AJFREE(parray);
 ++
 ++    page =  ajBtreeCacheRead(cache,blockno);
 ++
 ++    return page;
 ++}
 ++
 ++
 ++
 ++
 + /* @func ajBtreeIdNew *********************************************
 + **
 + ** Constructor for index bucket ID informationn
 +@@ -1617,6 +1803,36 @@
 + 
 + 
 + 
 ++/* @funcstatic btreeNodeIsFullSec *****************************************
 ++**
 ++** Tests whether a secondary node is full of keys
 ++**
 ++** @param [r] cache [const AjPBtcache] cache
 ++** @param [u] page [AjPBtpage] original page
 ++**
 ++** @return [AjBool] true if full
 ++** @@
 ++******************************************************************************/
 ++
 ++static AjBool btreeNodeIsFullSec(const AjPBtcache cache, AjPBtpage page)
 ++{
 ++    unsigned char *buf = NULL;
 ++    ajint nkeys = 0;
 ++
 ++    /* ajDebug("In btreeNodeIsFull\n"); */
 ++
 ++    buf = page->buf;
 ++    GBT_NKEYS(buf,&nkeys);
 ++
 ++    if(nkeys == cache->sorder - 1)
 ++	return ajTrue;
 ++
 ++    return ajFalse;
 ++}
 ++
 ++
 ++
 ++
 + /* @funcstatic btreeInsertNonFull *****************************************
 + **
 + ** Insert a key into a non-full node
 +@@ -2289,6 +2505,25 @@
 + 
 + 
 + 
 ++/* @funcstatic btreeNumIdCompare *******************************************
 ++**
 ++** Comparison function for ajListSort
 ++**
 ++** @param [r] a [const void*] ID 1
 ++** @param [r] b [const void*] ID 2
 ++**
 ++** @return [ajint] 0 = bases match
 ++** @@
 ++******************************************************************************/
 ++
 ++static ajint btreeNumIdCompare(const void *a, const void *b)
 ++{
 ++    return (*(AjPBtNumId*)a)->offset - (*(AjPBtNumId*)b)->offset;
 ++}
 ++
 ++
 ++
 ++
 + /* @funcstatic btreeWriteNode *******************************************
 + **
 + ** Write an internal node
 +@@ -2999,8 +3234,7 @@
 +     rno = totalkeys - lno;
 + 
 +     maxnperbucket = nperbucket >> 1;
 +-    if(!maxnperbucket)
 +-	++maxnperbucket;
 ++    ++maxnperbucket;
 + 
 +     cbucket = btreeBucketNew(maxnperbucket);
 + 
 +@@ -5729,7 +5963,17 @@
 +     {
 + 	bentries = buckets[i]->Nentries;
 + 	for(j=0;j<bentries;++j)
 +-	    ajListPush(list,(void *)buckets[i]->Ids[j]);
 ++	{
 ++	    if(!buckets[i]->Ids[j]->dups)
 ++		ajListPush(list,(void *)buckets[i]->Ids[j]);
 ++	    else
 ++	    {
 ++		ajBtreeHybLeafList(cache,buckets[i]->Ids[j]->offset,
 ++				   buckets[i]->Ids[j]->id,list);
 ++		ajBtreeIdDel(&buckets[i]->Ids[j]);
 ++	    }
 ++	}
 ++	
 + 	AJFREE(buckets[i]->keylen);
 + 	AJFREE(buckets[i]->Ids);
 + 	AJFREE(buckets[i]);
 +@@ -6273,6 +6517,7 @@
 + **
 + ** @param [r] filename [const char*] file name
 + ** @param [r] indexdir [const char*] index file directory
 ++** @param [r] directory [const char*] file directory
 + ** @param [w] seqfiles [AjPStr**] sequence file names
 + ** @param [w] reffiles [AjPStr**] reference file names (if any)
 + 
 +@@ -6282,6 +6527,7 @@
 + ******************************************************************************/
 + 
 + ajint ajBtreeReadEntries(const char *filename, const char *indexdir,
 ++			 const char *directory,
 + 			 AjPStr **seqfiles, AjPStr **reffiles)
 + {
 +     AjPStr line = NULL;
 +@@ -6292,6 +6538,8 @@
 + 
 +     AjPStr seqname = NULL;
 +     AjPStr refname = NULL;
 ++    AjPStr tseqname = NULL;
 ++    AjPStr trefname = NULL;
 +     
 +     AjPFile inf   = NULL;
 +     char p;
 +@@ -6303,6 +6551,9 @@
 +     line    = ajStrNew();
 +     list    = ajListNew();
 +     reflist = ajListNew();
 ++
 ++    tseqname = ajStrNew();
 ++    trefname = ajStrNew();
 +     
 +     fn = ajStrNew();
 +     ajFmtPrintS(&fn,"%s/%s",indexdir,filename);
 +@@ -6329,7 +6580,8 @@
 + 	while(ajFileReadLine(inf, &line))
 + 	{
 + 	    seqname = ajStrNew();
 +-	    ajFmtScanS(line,"%S",&seqname);
 ++	    ajFmtScanS(line,"%S",&tseqname);
 ++	    ajFmtPrintS(&seqname,"%s/%S",directory,tseqname);
 + 	    ajListPushApp(list,(void *)seqname);
 + 	}
 + 
 +@@ -6342,7 +6594,9 @@
 + 	{
 + 	    seqname = ajStrNew();
 + 	    refname = ajStrNew();
 +-	    ajFmtScanS(line,"%S%S",&seqname,&refname);
 ++	    ajFmtScanS(line,"%S%S",&tseqname,&trefname);
 ++	    ajFmtPrintS(&seqname,"%s/%S",directory,tseqname);
 ++	    ajFmtPrintS(&refname,"%s/%S",directory,trefname);
 + 	    ajListPushApp(list,(void *)seqname);
 + 	    ajListPushApp(reflist,(void *)refname);
 + 	}
 +@@ -6357,6 +6611,11 @@
 +     ajListDel(&reflist);
 +     ajStrDel(&line);
 +     ajStrDel(&fn);
 ++
 ++    ajStrDel(&tseqname);
 ++    ajStrDel(&trefname);
 ++    
 ++
 +     ajFileClose(&inf);
 + 
 +     return entries;
 +@@ -6967,7 +7226,7 @@
 + 	pripage = btreeCacheLocate(cache,0L);
 + 	pripage->dirty = BT_LOCK;
 + 
 +-	ajDebug("Created secondary tree at block %d\n",(ajint)secrootpage);
 ++	/* ajDebug("Created 2ry tree at block %d\n",(ajint)secrootpage); */
 +     }
 +     else
 +     {
 +@@ -7776,8 +8035,7 @@
 +     rno = totalkeys - lno;
 + 
 +     maxnperbucket = nperbucket >> 1;
 +-    if(!maxnperbucket)
 +-	++maxnperbucket;
 ++    ++maxnperbucket;
 + 
 +     cbucket = btreePriBucketNew(maxnperbucket);
 + 
 +@@ -8230,11 +8488,13 @@
 + {
 +     FILE *fp;
 +     AjPBtcache cache = NULL;
 ++#if 0
 + #if defined (HAVE64) && !defined(_OSF_SOURCE) && !defined(_AIX) && !defined(__hpux) && !defined(__ppc__) && !defined(__FreeBSD__)
 +     struct stat64 buf;
 + #else
 +     struct stat buf;
 + #endif
 ++#endif
 +     ajlong filelen = 0L;
 + 
 +     AjPStr fn = NULL;
 +@@ -8246,13 +8506,18 @@
 +     if(!fp)
 + 	return NULL;
 + 
 +-
 ++    /* Commented out pending database updating */
 ++#if 0
 ++    if(strcmp(mode,"r"))
 ++    {
 + #if defined (HAVE64) && !defined(_OSF_SOURCE) && !defined(_AIX) && !defined(__hpux) && !defined(__ppc__) && !defined(__FreeBSD__)
 +-    if(!stat64(file, &buf))
 ++	if(!stat64(fn->Ptr, &buf))
 + #else
 +-    if(!stat(file, &buf))
 ++	    if(!stat(fn->Ptr, &buf))
 ++#endif
 ++		filelen = buf.st_size;
 ++    }
 + #endif
 +-	filelen = buf.st_size;
 + 
 +     AJNEW0(cache);
 + 
 +@@ -8283,6 +8548,12 @@
 +     cache->snperbucket = sfill;
 +     cache->count = count;
 +     cache->kwlimit = kwlimit;
 ++
 ++    cache->bmem = NULL;
 ++    cache->tmem = NULL;
 ++
 ++    cache->bsmem = NULL;
 ++    cache->tsmem = NULL;
 +     
 +     ajStrDel(&fn);
 +     
 +@@ -8456,8 +8727,7 @@
 +     rno = totalkeys - lno;
 + 
 +     maxnperbucket = nperbucket >> 1;
 +-    if(!maxnperbucket)
 +-	++maxnperbucket;
 ++    ++maxnperbucket;
 + 
 +     cbucket = btreeSecBucketNew(maxnperbucket);
 + 
 +@@ -9070,7 +9340,7 @@
 +     if(!cache->slevel)
 + 	return root;
 +     
 +-    ret = btreeFindINode(cache,root,key);
 ++    ret = btreeSecFindINode(cache,root,key);
 + 
 +     return ret;
 + }
 +@@ -9694,7 +9964,7 @@
 +     
 +     /* ajDebug("In btreeInsertKeySec\n"); */
 + 
 +-    if(!btreeNodeIsFull(cache,page))
 ++    if(!btreeNodeIsFullSec(cache,page))
 +     {
 + 	btreeInsertNonFullSec(cache,page,key,less,greater);
 + 	return;
 +@@ -10572,7 +10842,7 @@
 + 
 +     list = ajListNew();
 + 
 +-    order = cache->order;
 ++    order = cache->sorder;
 + 
 +     AJCNEW0(karray,order);
 +     AJCNEW0(parray,order);
 +@@ -11724,3 +11994,4580 @@
 +     return (*(AjPBtId*)a)->dbno -
 + 		  (*(AjPBtId*)b)->dbno;
 + }
 ++
 ++
 ++
 ++
 ++
 ++
 ++
 ++
 ++/* @func ajBtreeHybNew *********************************************
 ++**
 ++** Constructor for index bucket ID informationn
 ++**
 ++**
 ++** @return [AjPBtHybrid] Index ID object
 ++** @@
 ++******************************************************************************/
 ++
 ++AjPBtHybrid ajBtreeHybNew(void)
 ++{
 ++    AjPBtHybrid Id = NULL;
 ++
 ++    /* ajDebug("In ajBtreeHybNew\n"); */
 ++
 ++    AJNEW0(Id);
 ++    Id->key1 = ajStrNew();
 ++    Id->dbno = 0;
 ++    Id->dups = 0;
 ++    Id->offset = 0L;
 ++    Id->refoffset = 0L;
 ++    Id->treeblock = 0L;    
 ++
 ++    return Id;
 ++}
 ++
 ++
 ++
 ++
 ++/* @func ajBtreeHybDel *********************************************
 ++**
 ++** Destructor for index bucket ID information
 ++**
 ++** @param [w] thys [AjPBtHybrid*] index ID object
 ++**
 ++** @return [void]
 ++** @@
 ++******************************************************************************/
 ++
 ++void ajBtreeHybDel(AjPBtHybrid *thys)
 ++{
 ++    AjPBtHybrid Id = NULL;
 ++
 ++    /* ajDebug("In ajBtreeIdDel\n"); */
 ++
 ++    if(!thys || !*thys)
 ++	return;
 ++    Id = *thys;
 ++    
 ++    ajStrDel(&Id->key1);
 ++    AJFREE(Id);
 ++    *thys = NULL;
 ++
 ++    return;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeAllocPriArray *******************************************
 ++**
 ++** Allocate karray and parray arrays for a primary key
 ++**
 ++** @param [rw] cache [AjPBtcache] cache
 ++**
 ++** @return [AjPBtMem] memory node
 ++** @@
 ++******************************************************************************/
 ++
 ++static AjPBtMem btreeAllocPriArray(AjPBtcache cache)
 ++{
 ++    AjPBtMem node = NULL;
 ++    ajint i;
 ++    ajint limit;
 ++    AjPBtMem p = NULL;
 ++
 ++    limit = cache->order;
 ++    if(!cache->bmem)
 ++    {
 ++        AJNEW0(node);
 ++        cache->bmem = node;
 ++        cache->tmem = node;
 ++        node->prev = NULL;
 ++        node->next = NULL;
 ++        node->used = ajTrue;
 ++        AJCNEW0(node->karray,limit);
 ++        AJCNEW0(node->parray,limit);
 ++        AJCNEW0(node->overflows,limit);
 ++        for(i=0;i<limit;++i)
 ++            node->karray[i] = ajStrNew();
 ++
 ++        return node;
 ++    }
 ++
 ++    if(!cache->bmem->used)
 ++    {
 ++        cache->bmem->used = ajTrue;
 ++
 ++        if(cache->bmem->next)
 ++        {
 ++            p = cache->bmem->next;
 ++
 ++            cache->tmem->next = cache->bmem;
 ++            cache->bmem->next = NULL;
 ++
 ++            cache->bmem->prev = cache->tmem;
 ++
 ++            cache->tmem = cache->bmem;
 ++
 ++            cache->bmem = p;
 ++            cache->bmem->prev = NULL;
 ++
 ++	    memset(cache->tmem->parray,0,sizeof(ajlong)*limit);
 ++	    
 ++	    return cache->tmem;
 ++        }
 ++
 ++	memset(cache->bmem->parray,0,sizeof(ajlong)*limit);
 ++	
 ++        return cache->bmem;
 ++    }
 ++
 ++
 ++    AJNEW0(node);
 ++    node->used = ajTrue;
 ++    node->next = NULL;
 ++    node->prev = cache->tmem;
 ++    cache->tmem->next = node;
 ++    cache->tmem = node;
 ++
 ++    AJCNEW0(node->karray,limit);
 ++    AJCNEW0(node->parray,limit);
 ++    AJCNEW0(node->overflows,limit);
 ++    for(i=0;i<limit;++i)
 ++        node->karray[i] = ajStrNew();
 ++
 ++    return node;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeDeallocPriArray *******************************************
 ++**
 ++** Deallocate karray and parray arrays for a primary key
 ++**
 ++** @param [rw] cache [AjPBtcache] cache
 ++** @param [rw] node [AjPBtMem] node
 ++**
 ++** @return [void]
 ++** @@
 ++******************************************************************************/
 ++
 ++static void btreeDeallocPriArray(AjPBtcache cache, AjPBtMem node)
 ++{
 ++    node->used = ajFalse;
 ++    if(!node->prev)
 ++        return;
 ++
 ++    node->prev->next = node->next;
 ++    if(node->next)
 ++        node->next->prev = node->prev;
 ++    else
 ++        cache->tmem = node->prev;
 ++
 ++    node->next = cache->bmem;
 ++    cache->bmem->prev = node;
 ++    cache->bmem = node;
 ++    node->prev = NULL;
 ++
 ++    return;
 ++}
 ++
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeAllocSecArray *******************************************
 ++**
 ++** Allocate karray and parray arrays for a primary key
 ++**
 ++** @param [rw] cache [AjPBtcache] cache
 ++**
 ++** @return [AjPBtMem] memory node
 ++** @@
 ++******************************************************************************/
 ++
 ++static AjPBtMem btreeAllocSecArray(AjPBtcache cache)
 ++{
 ++    AjPBtMem node = NULL;
 ++    ajint i;
 ++    ajint limit;
 ++    AjPBtMem p = NULL;
 ++
 ++    limit = cache->sorder;
 ++    if(!cache->bsmem)
 ++    {
 ++        AJNEW0(node);
 ++        cache->bsmem = node;
 ++        cache->tsmem = node;
 ++        node->prev = NULL;
 ++        node->next = NULL;
 ++        node->used = ajTrue;
 ++        AJCNEW0(node->karray,limit);
 ++        AJCNEW0(node->parray,limit);
 ++        AJCNEW0(node->overflows,limit);
 ++        for(i=0;i<limit;++i)
 ++            node->karray[i] = ajStrNew();
 ++
 ++        return node;
 ++    }
 ++
 ++    if(!cache->bsmem->used)
 ++    {
 ++        cache->bsmem->used = ajTrue;
 ++
 ++        if(cache->bsmem->next)
 ++        {
 ++            p = cache->bsmem->next;
 ++
 ++            cache->tsmem->next = cache->bsmem;
 ++            cache->bsmem->next = NULL;
 ++
 ++            cache->bsmem->prev = cache->tsmem;
 ++
 ++            cache->tsmem = cache->bsmem;
 ++
 ++            cache->bsmem = p;
 ++            cache->bsmem->prev = NULL;
 ++
 ++	    memset(cache->tsmem->parray,0,sizeof(ajlong)*limit);
 ++	    return cache->tsmem;
 ++        }
 ++
 ++	memset(cache->bsmem->parray,0,sizeof(ajlong)*limit);
 ++        return cache->bsmem;
 ++    }
 ++
 ++    AJNEW0(node);
 ++    node->used = ajTrue;
 ++    node->next = NULL;
 ++    node->prev = cache->tsmem;
 ++    cache->tsmem->next = node;
 ++    cache->tsmem = node;
 ++
 ++    AJCNEW0(node->karray,limit);
 ++    AJCNEW0(node->parray,limit);
 ++    AJCNEW0(node->overflows,limit);
 ++    for(i=0;i<limit;++i)
 ++        node->karray[i] = ajStrNew();
 ++
 ++    return node;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeDeallocSecArray *******************************************
 ++**
 ++** Deallocate karray and parray arrays for a primary key
 ++**
 ++** @param [rw] cache [AjPBtcache] cache
 ++** @param [rw] node [AjPBtMem] node
 ++**
 ++** @return [void]
 ++** @@
 ++******************************************************************************/
 ++
 ++static void btreeDeallocSecArray(AjPBtcache cache, AjPBtMem node)
 ++{
 ++    node->used = ajFalse;
 ++    if(!node->prev)
 ++        return;
 ++
 ++    node->prev->next = node->next;
 ++    if(node->next)
 ++        node->next->prev = node->prev;
 ++    else
 ++        cache->tsmem = node->prev;
 ++
 ++    node->next = cache->bsmem;
 ++    cache->bsmem->prev = node;
 ++    cache->bsmem = node;
 ++    node->prev = NULL;
 ++
 ++    return;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeAddToHybBucket *******************************************
 ++**
 ++** Add an ID to a bucket
 ++** Only called if there is room in the bucket
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [r] pageno [ajlong] page number of bucket
 ++** @param [r] id [const AjPBtId] ID info
 ++**
 ++** @return [void]
 ++** @@
 ++******************************************************************************/
 ++
 ++static void btreeAddToHybBucket(AjPBtcache cache, ajlong pageno,
 ++				const AjPBtHybrid hyb)
 ++{
 ++    AjPBucket bucket = NULL;
 ++    AjPBtId   destid = NULL;
 ++    
 ++    ajint nentries;
 ++    
 ++    /* ajDebug("In btreeAddToHybBucket\n"); */
 ++
 ++    bucket   = btreeReadBucket(cache,pageno);
 ++    nentries = bucket->Nentries;
 ++
 ++
 ++    /* Reading a bucket always gives one extra ID position */
 ++    bucket->Ids[nentries] = ajBtreeIdNew();
 ++    destid = bucket->Ids[nentries];
 ++
 ++    ajStrAssS(&destid->id,hyb->key1);
 ++    destid->dbno      = hyb->dbno;
 ++    destid->offset    = hyb->offset;
 ++    destid->refoffset = hyb->refoffset;
 ++    destid->dups      = hyb->dups;
 ++    
 ++    ++bucket->Nentries;
 ++
 ++    btreeWriteBucket(cache,bucket,pageno);
 ++
 ++    btreeBucketDel(&bucket);
 ++    
 ++    return;
 ++}
 ++
 ++
 ++
 ++
 ++/* @func ajBtreeHybFindInsert ***********************************************
 ++**
 ++** Find the node that should contain a new key for insertion
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [r] key [const char*] key to search for 
 ++**
 ++** @return [AjPBtpage] leaf node where item should be inserted
 ++** @@
 ++******************************************************************************/
 ++
 ++AjPBtpage ajBtreeHybFindInsert(AjPBtcache cache, const char *key)
 ++{
 ++    AjPBtpage root = NULL;
 ++    AjPBtpage ret  = NULL;
 ++
 ++    /* ajDebug("In ajBtreeHybFindInsert\n"); */
 ++
 ++    /* The root node should always be in the cache (BT_LOCKed) */
 ++    root = btreeCacheLocate(cache,0L);
 ++
 ++    if(!root)
 ++	ajFatal("The PRI root cache page has been unlocked\n");
 ++    
 ++    if(!cache->level)
 ++	return root;
 ++    
 ++    ret = btreeHybFindINode(cache,root,key);
 ++    
 ++    return ret;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeHybFindINode *********************************************
 ++**
 ++** Recursive search for insert node
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [u] page [AjPBtpage] page
 ++** @param [r] item [const char*] key to search for 
 ++**
 ++** @return [AjPBtpage] leaf node where item should be inserted
 ++** @@
 ++******************************************************************************/
 ++
 ++static AjPBtpage btreeHybFindINode(AjPBtcache cache, AjPBtpage page,
 ++				 const char *item)
 ++{
 ++    AjPBtpage ret = NULL;
 ++    AjPBtpage pg  = NULL;
 ++
 ++    unsigned char *buf = NULL;
 ++    ajint status       = 0;
 ++    ajint ival         = 0;
 ++
 ++    /* ajDebug("In btreeHybFindINode\n"); */
 ++    
 ++    ret = page;
 ++    buf = page->buf;
 ++    GBT_NODETYPE(buf,&ival);
 ++    if(ival != BT_LEAF)
 ++    {
 ++	status = ret->dirty;
 ++	ret->dirty = BT_LOCK;	/* Lock in case of lots of overflow pages */
 ++	pg = btreeHybPageFromKey(cache,buf,item);
 ++	ret->dirty = status;
 ++	ret = btreeHybFindINode(cache,pg,item);
 ++    }
 ++    
 ++    return ret;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeHybPageFromKey *******************************************
 ++**
 ++** Return next lower index page given a key
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [u] buf [unsigned char *] page buffer
 ++** @param [r] key [const char *] key to search for 
 ++**
 ++** @return [AjPBtpage] pointer to a page
 ++** @@
 ++******************************************************************************/
 ++
 ++static AjPBtpage btreeHybPageFromKey(AjPBtcache cache, unsigned char *buf,
 ++				     const char *key)
 ++{
 ++    unsigned char *rootbuf = NULL;
 ++    ajint nkeys = 0;
 ++    ajint order = 0;
 ++    ajint i;
 ++    
 ++    ajlong blockno = 0L;
 ++    AjPStr *karray = NULL;
 ++    ajlong *parray = NULL;
 ++    AjPBtpage page = NULL;
 ++    AjPBtMem arrays = NULL;
 ++    
 ++    /* ajDebug("In btreeHybPageFromKey\n"); */
 ++    
 ++    rootbuf = buf;
 ++
 ++
 ++    GBT_NKEYS(rootbuf,&nkeys);
 ++    order = cache->order;
 ++
 ++    arrays = btreeAllocPriArray(cache);
 ++    karray = arrays->karray;
 ++    parray = arrays->parray;
 ++
 ++    btreeGetKeys(cache,rootbuf,&karray,&parray);
 ++    i = 0;
 ++    while(i!=nkeys && strcmp(key,karray[i]->Ptr)>=0)
 ++	++i;
 ++    if(i==nkeys)
 ++    {
 ++	if(strcmp(key,karray[i-1]->Ptr)<0)
 ++	    blockno = parray[i-1];
 ++	else
 ++	    blockno = parray[i];
 ++    }
 ++    else
 ++	blockno = parray[i];
 ++
 ++    btreeDeallocPriArray(cache,arrays);
 ++
 ++    page =  ajBtreeCacheRead(cache,blockno);
 ++
 ++    return page;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeHybInsertShift ********************************************
 ++**
 ++** Rebalance buckets on insertion
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [u] retpage [AjPBtpage*] page
 ++** @param [r] key [const char *] key
 ++**
 ++** @return [ajlong] bucket block or 0L if shift not posible 
 ++** @@
 ++******************************************************************************/
 ++
 ++static ajlong btreeHybInsertShift(AjPBtcache cache, AjPBtpage *retpage,
 ++				  const char *key)
 ++{
 ++    unsigned char *tbuf = NULL;
 ++    unsigned char *pbuf = NULL;
 ++    unsigned char *sbuf = NULL;
 ++
 ++    AjPBtpage ppage = NULL;
 ++    AjPBtpage spage = NULL;
 ++    AjPBtpage tpage = NULL;
 ++
 ++    ajint tkeys = 0;
 ++    ajint pkeys = 0;
 ++    ajint skeys = 0;
 ++    ajint order = 0;
 ++    
 ++    ajint i;
 ++    ajint n;
 ++    
 ++    ajlong parent  = 0L;
 ++    ajlong blockno = 0L;
 ++    
 ++    AjPStr *kTarray = NULL;
 ++    AjPStr *kParray = NULL;
 ++    AjPStr *kSarray = NULL;
 ++    ajlong *pTarray = NULL;
 ++    ajlong *pParray = NULL;
 ++    ajlong *pSarray = NULL;
 ++
 ++    AjPStr *karray = NULL;
 ++    ajlong *parray = NULL;
 ++
 ++    ajint ppos    = 0;
 ++    ajint pkeypos = 0;
 ++    ajint minsize = 0;
 ++
 ++    AjPBtMem arrays1 = NULL;
 ++    AjPBtMem arrays2 = NULL;
 ++    AjPBtMem arrays3 = NULL;
 ++    
 ++    /* ajDebug("In btreeHybInsertShift\n"); */
 ++
 ++
 ++    tpage = *retpage;
 ++
 ++    tbuf = tpage->buf;
 ++
 ++    GBT_PREV(tbuf,&parent);
 ++    GBT_NKEYS(tbuf,&tkeys);
 ++
 ++    order = cache->order;
 ++    minsize = order / 2;
 ++    if(order % 2)
 ++	++minsize;
 ++
 ++    if(tkeys <= minsize)
 ++	return 0L;
 ++
 ++    ppage = ajBtreeCacheRead(cache,parent);
 ++    
 ++    pbuf = ppage->buf;
 ++    GBT_NKEYS(pbuf,&pkeys);
 ++    
 ++
 ++    arrays1 = btreeAllocPriArray(cache);
 ++    kParray = arrays1->karray;
 ++    pParray = arrays1->parray;
 ++
 ++    arrays2 = btreeAllocPriArray(cache);
 ++    kSarray = arrays2->karray;
 ++    pSarray = arrays2->parray;
 ++
 ++    arrays3 = btreeAllocPriArray(cache);
 ++    kTarray = arrays3->karray;
 ++    pTarray = arrays3->parray;
 ++    
 ++
 ++    btreeGetKeys(cache,pbuf,&kParray,&pParray);
 ++
 ++    i=0;
 ++    while(i!=pkeys && strcmp(key,kParray[i]->Ptr)>=0)
 ++	++i;
 ++    pkeypos = i;
 ++    
 ++    if(i==pkeys)
 ++    {
 ++	if(strcmp(key,kParray[i-1]->Ptr)<0)
 ++	    ppos = i-1;
 ++	else
 ++	    ppos = i;
 ++    }
 ++    else
 ++	ppos = i;
 ++
 ++    
 ++    if(ppos) /* There is another leaf to the left */
 ++    {
 ++	spage = ajBtreeCacheRead(cache,pParray[ppos-1]);
 ++	sbuf = spage->buf;
 ++	GBT_NKEYS(sbuf,&skeys);
 ++    }
 ++
 ++    if(i && skeys != order-1) /* There is space in the left leaf */
 ++    {
 ++	/* ajDebug("Left shift\n"); */
 ++	btreeGetKeys(cache,tbuf,&kTarray,&pTarray);
 ++	if(skeys)
 ++	    btreeGetKeys(cache,sbuf,&kSarray,&pSarray);
 ++
 ++	i = 0;
 ++	while(pParray[i] != tpage->pageno)
 ++	    ++i;
 ++	--i;
 ++
 ++	pkeypos = i;
 ++
 ++	ajStrAssS(&kSarray[skeys],kParray[pkeypos]);
 ++	pSarray[skeys+1] = pTarray[0];
 ++	++skeys;
 ++	--tkeys;
 ++	ajStrAssS(&kParray[pkeypos],kTarray[0]);
 ++	for(i=0;i<tkeys;++i)
 ++	{
 ++	    ajStrAssS(&kTarray[i],kTarray[i+1]);
 ++	    pTarray[i] = pTarray[i+1];
 ++	}
 ++	pTarray[i] = pTarray[i+1];
 ++	pTarray[i+1] = 0L;
 ++	
 ++	btreeWriteNode(cache,spage,kSarray,pSarray,skeys);
 ++	btreeWriteNode(cache,tpage,kTarray,pTarray,tkeys);
 ++	btreeWriteNode(cache,ppage,kParray,pParray,pkeys);
 ++	if(!ppage->pageno)
 ++	    ppage->dirty = BT_LOCK;
 ++
 ++	i = 0;
 ++	while(i!=pkeys && strcmp(key,kParray[i]->Ptr)>=0)
 ++	    ++i;
 ++	if(i==pkeys)
 ++	{
 ++	    if(strcmp(key,kParray[i-1]->Ptr)<0)
 ++		blockno = pParray[i-1];
 ++	    else
 ++		blockno = pParray[i];
 ++	}
 ++	else
 ++	    blockno = pParray[i];
 ++
 ++	if(blockno == spage->pageno)
 ++	{
 ++	    *retpage = spage;
 ++	    karray = kSarray;
 ++	    parray = pSarray;
 ++	    n = skeys;
 ++	}
 ++	else
 ++	{
 ++	    karray = kTarray;
 ++	    parray = pTarray;
 ++	    n = tkeys;
 ++	}
 ++	
 ++
 ++	i = 0;
 ++	while(i!=n && strcmp(key,karray[i]->Ptr)>=0)
 ++	    ++i;
 ++	if(i==n)
 ++	{
 ++	    if(strcmp(key,karray[i-1]->Ptr)<0)
 ++		blockno = parray[i-1];
 ++	    else
 ++		blockno = parray[i];
 ++	}
 ++	else
 ++	    blockno = parray[i];
 ++
 ++	btreeDeallocPriArray(cache,arrays1);
 ++	btreeDeallocPriArray(cache,arrays2);
 ++	btreeDeallocPriArray(cache,arrays3);
 ++
 ++	/* ajDebug("... returns blockno (a) %Ld\n",blockno); */
 ++
 ++	return blockno;
 ++    }
 ++    
 ++
 ++    if(ppos != pkeys)	/* There is a right node */
 ++    {
 ++	spage = ajBtreeCacheRead(cache,pParray[ppos+1]);
 ++	sbuf = spage->buf;
 ++	GBT_NKEYS(sbuf,&skeys);
 ++    }
 ++
 ++
 ++    /* Space in the right leaf */
 ++    if(ppos != pkeys && skeys != order-1)
 ++    {
 ++	/* ajDebug("Right shift\n"); */
 ++	btreeGetKeys(cache,tbuf,&kTarray,&pTarray);
 ++	btreeGetKeys(cache,sbuf,&kSarray,&pSarray);
 ++
 ++	i = 0;
 ++	while(pParray[i] != tpage->pageno)
 ++	    ++i;
 ++	pkeypos = i;
 ++	
 ++	pSarray[skeys+1] = pSarray[skeys];
 ++	for(i=skeys-1;i>-1;--i)
 ++	{
 ++	    ajStrAssS(&kSarray[i+1],kSarray[i]);
 ++	    pSarray[i+1] = pSarray[i];
 ++	}
 ++	ajStrAssS(&kSarray[0],kParray[pkeypos]);
 ++	pSarray[0] = pTarray[tkeys];
 ++	ajStrAssS(&kParray[pkeypos],kTarray[tkeys-1]);
 ++	++skeys;
 ++	--tkeys;
 ++	pTarray[tkeys+1] = 0L;
 ++	
 ++	btreeWriteNode(cache,spage,kSarray,pSarray,skeys);
 ++	btreeWriteNode(cache,tpage,kTarray,pTarray,tkeys);
 ++	btreeWriteNode(cache,ppage,kParray,pParray,pkeys);
 ++	if(!ppage->pageno)
 ++	    ppage->dirty = BT_LOCK;
 ++
 ++	i = 0;
 ++	while(i!=pkeys && strcmp(key,kParray[i]->Ptr)>=0)
 ++	    ++i;
 ++	if(i==pkeys)
 ++	{
 ++	    if(strcmp(key,kParray[i-1]->Ptr)<0)
 ++		blockno = pParray[i-1];
 ++	    else
 ++		blockno = pParray[i];
 ++	}
 ++	else
 ++	    blockno = pParray[i];
 ++
 ++	if(blockno == spage->pageno)
 ++	{
 ++	    *retpage = spage;
 ++	    karray = kSarray;
 ++	    parray = pSarray;
 ++	    n = skeys;
 ++	}
 ++	else
 ++	{
 ++	    karray = kTarray;
 ++	    parray = pTarray;
 ++	    n = tkeys;
 ++	}
 ++	
 ++	i = 0;
 ++	while(i!=n && strcmp(key,karray[i]->Ptr)>=0)
 ++	    ++i;
 ++	if(i==n)
 ++	{
 ++	    if(strcmp(key,karray[i-1]->Ptr)<0)
 ++		blockno = parray[i-1];
 ++	    else
 ++		blockno = parray[i];
 ++	}
 ++	else
 ++	    blockno = parray[i];
 ++
 ++	btreeDeallocPriArray(cache,arrays1);
 ++	btreeDeallocPriArray(cache,arrays2);
 ++	btreeDeallocPriArray(cache,arrays3);
 ++
 ++	/* ajDebug("... returns blockno (b) %Ld\n",blockno); */
 ++	
 ++	return blockno;
 ++    }
 ++
 ++
 ++    btreeDeallocPriArray(cache,arrays1);
 ++    btreeDeallocPriArray(cache,arrays2);
 ++    btreeDeallocPriArray(cache,arrays3);
 ++
 ++    /* ajDebug("... returns 0L\n"); */
 ++
 ++    return 0L;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeHybReorderBuckets *****************************************
 ++**
 ++** Re-order leaf buckets
 ++** Must only be called if one of the buckets is full
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [u] leaf [AjPBtpage] leaf page
 ++**
 ++** @return [AjBool] true if reorder was successful i.e. leaf not full
 ++** @@
 ++******************************************************************************/
 ++
 ++static AjBool btreeHybReorderBuckets(AjPBtcache cache, AjPBtpage leaf)
 ++{
 ++    ajint nkeys = 0;
 ++    unsigned char *lbuf = NULL;
 ++    AjPBucket *buckets  = NULL;
 ++    AjPStr *keys        = NULL;
 ++    ajlong *ptrs        = NULL;
 ++    ajlong *overflows   = NULL;
 ++    AjPBtMem arrays     = NULL;
 ++
 ++    ajint i = 0;
 ++    ajint j = 0;
 ++    
 ++    ajint order;
 ++    ajint bentries      = 0;
 ++    ajint totalkeys     = 0;
 ++    ajint nperbucket    = 0;
 ++    ajint maxnperbucket = 0;
 ++    ajint count         = 0;
 ++    ajint totkeylen     = 0;
 ++    ajint keylimit      = 0;
 ++    ajint bucketn       = 0;
 ++    ajint bucketlimit   = 0;
 ++    ajint nodetype      = 0;
 ++    
 ++    AjPList idlist    = NULL;
 ++    ajint   dirtysave = 0;
 ++    AjPBtId bid       = NULL;
 ++    AjPBucket cbucket = NULL;
 ++    AjPBtId cid       = NULL;
 ++
 ++    ajint   v = 0;
 ++    
 ++    /* ajDebug("In btreeHybReorderBuckets\n"); */
 ++
 ++    dirtysave = leaf->dirty;
 ++
 ++    leaf->dirty = BT_LOCK;
 ++    lbuf = leaf->buf;
 ++
 ++    GBT_NODETYPE(lbuf,&nodetype);
 ++
 ++    order = cache->order;
 ++    nperbucket = cache->nperbucket;
 ++    
 ++
 ++    /* Read keys/ptrs */
 ++    arrays    = btreeAllocPriArray(cache);
 ++    keys      = arrays->karray;
 ++    ptrs      = arrays->parray;
 ++    overflows = arrays->overflows;
 ++
 ++    btreeGetKeys(cache,lbuf,&keys,&ptrs);
 ++
 ++    GBT_NKEYS(lbuf,&nkeys);
 ++
 ++
 ++    if(!nkeys)
 ++	ajFatal("BucketReorder: Attempt to reorder empty leaf");
 ++
 ++    for(i=0;i<nkeys;++i)
 ++	totalkeys += btreeNumInBucket(cache,ptrs[i]);
 ++    totalkeys += btreeNumInBucket(cache,ptrs[i]);
 ++
 ++    /* Set the number of entries per bucket to approximately half full */
 ++    maxnperbucket = nperbucket >> 1;
 ++
 ++    if(!maxnperbucket)
 ++	++maxnperbucket;
 ++
 ++    /* Work out the number of new buckets needed */
 ++    bucketn = (totalkeys / maxnperbucket);
 ++    if(totalkeys % maxnperbucket)
 ++	++bucketn;
 ++    
 ++    if(bucketn > order)
 ++    {
 ++	btreeDeallocPriArray(cache,arrays);
 ++
 ++	leaf->dirty = dirtysave;
 ++	return ajFalse;
 ++    }
 ++    
 ++
 ++    /* Read buckets */
 ++    AJCNEW0(buckets,nkeys+1);
 ++    keylimit = nkeys + 1;
 ++    
 ++    for(i=0;i<keylimit;++i)
 ++	buckets[i] = btreeReadBucket(cache,ptrs[i]);
 ++
 ++
 ++    /* Read IDs from all buckets and push to list and sort (increasing id) */
 ++    idlist  = ajListNew();
 ++    
 ++    for(i=0;i<keylimit;++i)
 ++    {
 ++	overflows[i] = buckets[i]->Overflow;
 ++	bentries = buckets[i]->Nentries;
 ++	for(j=0;j<bentries;++j)
 ++	    ajListPush(idlist,(void *)buckets[i]->Ids[j]);
 ++	
 ++	AJFREE(buckets[i]->keylen);
 ++	AJFREE(buckets[i]->Ids);
 ++	AJFREE(buckets[i]);
 ++    }
 ++    ajListSort(idlist,btreeIdCompare);
 ++    AJFREE(buckets);
 ++
 ++    cbucket = btreeBucketNew(maxnperbucket);
 ++    bucketlimit = bucketn - 1;
 ++    
 ++    for(i=0;i<bucketlimit;++i)
 ++    {
 ++	cbucket->Overflow = overflows[i];
 ++	cbucket->Nentries = 0;
 ++
 ++	count = 0;
 ++	while(count!=maxnperbucket)
 ++	{
 ++	    ajListPop(idlist,(void **)&bid);
 ++	    
 ++	    cid = cbucket->Ids[count];
 ++	    ajStrAssS(&cid->id,bid->id);
 ++	    cid->dbno = bid->dbno;
 ++	    cid->dups = bid->dups;
 ++	    cid->offset = bid->offset;
 ++	    cid->refoffset = bid->refoffset;
 ++	    
 ++	    cbucket->keylen[count] = BT_BUCKIDLEN(bid->id);
 ++	    ++cbucket->Nentries;
 ++	    ++count;
 ++	    ajBtreeIdDel(&bid);
 ++	}
 ++
 ++
 ++	ajListPeek(idlist,(void **)&bid);
 ++	ajStrAssS(&keys[i],bid->id);
 ++
 ++	totkeylen += ajStrLen(bid->id);
 ++
 ++	if(!ptrs[i])
 ++	    ptrs[i] = cache->totsize;
 ++	btreeWriteBucket(cache,cbucket,ptrs[i]);
 ++    }
 ++
 ++
 ++    /* Deal with greater-than bucket */
 ++
 ++    cbucket->Overflow = overflows[i];
 ++    cbucket->Nentries = 0;
 ++
 ++    count = 0;
 ++    while(ajListPop(idlist,(void **)&bid))
 ++    {
 ++	cid = cbucket->Ids[count];
 ++	ajStrAssS(&cid->id,bid->id);
 ++	cid->dbno = bid->dbno;
 ++	cid->dups = bid->dups;
 ++	cid->offset = bid->offset;
 ++	cid->refoffset = bid->refoffset;
 ++	
 ++	++cbucket->Nentries;
 ++	++count;
 ++	ajBtreeIdDel(&bid);
 ++    }
 ++    
 ++    
 ++    if(!ptrs[i])
 ++	ptrs[i] = cache->totsize;
 ++    btreeWriteBucket(cache,cbucket,ptrs[i]);
 ++
 ++    cbucket->Nentries = maxnperbucket;
 ++    btreeBucketDel(&cbucket);
 ++
 ++    /* Now write out a modified leaf with new keys/ptrs */
 ++
 ++    nkeys = bucketn - 1;
 ++    v = nkeys;
 ++    SBT_NKEYS(lbuf,v);
 ++    v = totkeylen;
 ++    SBT_TOTLEN(lbuf,v);
 ++
 ++    btreeWriteNode(cache,leaf,keys,ptrs,nkeys);
 ++
 ++    leaf->dirty = BT_DIRTY;
 ++    if(nodetype == BT_ROOT)
 ++	leaf->dirty = BT_LOCK;
 ++
 ++    btreeDeallocPriArray(cache,arrays);
 ++    
 ++    btreeBucketDel(&cbucket);
 ++    ajListDel(&idlist);
 ++
 ++    return ajTrue;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeHybSplitLeaf *********************************************
 ++**
 ++** Split a leaf and propagate up if necessary
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [u] spage [AjPBtpage] page
 ++**
 ++** @return [AjPBtpage] pointer to a parent page
 ++** @@
 ++******************************************************************************/
 ++
 ++static AjPBtpage btreeHybSplitLeaf(AjPBtcache cache, AjPBtpage spage)
 ++{
 ++    ajint nkeys     = 0;
 ++    ajint order     = 0;
 ++    ajint totalkeys = 0;
 ++    ajint bentries  = 0;
 ++    ajint keylimit  = 0;
 ++    ajint nodetype  = 0;
 ++
 ++    ajint rootnodetype  = 0;
 ++    
 ++    ajint i;
 ++    ajint j;
 ++    
 ++    AjPBtpage lpage = NULL;
 ++    AjPBtpage rpage = NULL;
 ++    AjPBtpage page  = NULL;
 ++    
 ++    AjPStr mediankey  = NULL;
 ++    ajlong mediangtr  = 0L;
 ++    ajlong medianless = 0L;
 ++    
 ++
 ++    AjPBtId bid = NULL;
 ++    AjPBtId cid = NULL;
 ++
 ++    unsigned char *buf  = NULL;
 ++    unsigned char *lbuf = NULL;
 ++    unsigned char *rbuf = NULL;
 ++
 ++    AjPList idlist = NULL;
 ++
 ++    AjPBucket *buckets = NULL;
 ++    AjPBucket cbucket  = NULL;
 ++    
 ++    AjPStr *karray = NULL;
 ++    ajlong *parray = NULL;
 ++    AjPBtMem arrays     = NULL;
 ++    
 ++    ajint keypos = 0;
 ++    ajint lno    = 0;
 ++    ajint rno    = 0;
 ++
 ++    ajint bucketlimit   = 0;
 ++    ajint maxnperbucket = 0;
 ++    ajint nperbucket    = 0;
 ++    ajint bucketn       = 0;
 ++    ajint count         = 0;
 ++    ajint totkeylen     = 0;
 ++    
 ++    ajlong lblockno = 0L;
 ++    ajlong rblockno = 0L;
 ++    ajlong prev     = 0L;
 ++    ajlong overflow = 0L;
 ++    ajlong prevsave = 0L;
 ++
 ++    ajlong zero = 0L;
 ++    ajlong join = 0L;
 ++    
 ++    ajlong lv = 0L;
 ++    ajint  v  = 0;
 ++    
 ++    /* ajDebug("In btreeHybSplitLeaf\n"); */
 ++
 ++    order = cache->order;
 ++    nperbucket = cache->nperbucket;
 ++
 ++    mediankey = ajStrNew();
 ++
 ++    arrays    = btreeAllocPriArray(cache);
 ++    karray    = arrays->karray;
 ++    parray    = arrays->parray;
 ++
 ++
 ++    buf = spage->buf;
 ++    lbuf = buf;
 ++
 ++    GBT_NKEYS(buf,&nkeys);
 ++
 ++    for(i=nkeys+1; i<order; ++i)
 ++	parray[i] = 0L;
 ++
 ++    GBT_NODETYPE(buf,&rootnodetype);
 ++
 ++    if(rootnodetype == BT_ROOT)
 ++    {
 ++	/* ajDebug("Splitting root node\n"); */
 ++	lblockno = cache->totsize;
 ++	lpage = ajBtreeCacheWrite(cache,lblockno);
 ++	lpage->pageno = cache->totsize;
 ++	cache->totsize += cache->pagesize;
 ++	lbuf = lpage->buf;
 ++	lv = prev;
 ++	SBT_PREV(lbuf,lv);
 ++    }
 ++    else
 ++    {
 ++	lblockno = spage->pageno;
 ++	lpage = spage;
 ++    }
 ++
 ++    lpage->dirty = BT_LOCK;
 ++
 ++
 ++    rblockno = cache->totsize;
 ++    rpage = ajBtreeCacheWrite(cache,rblockno);
 ++    rpage->pageno = cache->totsize;
 ++    rpage->dirty = BT_LOCK;
 ++    cache->totsize += cache->pagesize;
 ++    rbuf = rpage->buf;
 ++
 ++
 ++    if(rootnodetype == BT_ROOT)
 ++    {
 ++	lv = zero;
 ++	SBT_RIGHT(rbuf,lv);
 ++	lv = zero;
 ++	SBT_LEFT(lbuf,lv);
 ++    }
 ++    else
 ++    {
 ++	GBT_RIGHT(lbuf,&join);
 ++	lv = join;
 ++	SBT_RIGHT(rbuf,lv);
 ++    }
 ++    lv = lblockno;
 ++    SBT_LEFT(rbuf,lv);
 ++    lv = rblockno;
 ++    SBT_RIGHT(lbuf,lv);
 ++
 ++
 ++    btreeGetKeys(cache,buf,&karray,&parray);
 ++
 ++
 ++    keylimit = nkeys+1;
 ++    AJCNEW0(buckets,keylimit);
 ++    for(i=0;i<keylimit;++i)
 ++	buckets[i] = btreeReadBucket(cache,parray[i]);
 ++
 ++    idlist = ajListNew();
 ++    for(i=0;i<keylimit;++i)
 ++    {
 ++	bentries = buckets[i]->Nentries;
 ++	for(j=0;j<bentries;++j)
 ++	    ajListPush(idlist,(void *)buckets[i]->Ids[j]);
 ++	AJFREE(buckets[i]->keylen);
 ++	AJFREE(buckets[i]->Ids);
 ++	AJFREE(buckets[i]);
 ++    }
 ++    ajListSort(idlist,btreeIdCompare);
 ++    AJFREE(buckets);
 ++
 ++
 ++    totalkeys = ajListLength(idlist);
 ++
 ++    keypos = totalkeys / 2;
 ++
 ++    lno = keypos;
 ++    rno = totalkeys - lno;
 ++
 ++    maxnperbucket = nperbucket >> 1;
 ++    ++maxnperbucket;
 ++
 ++    cbucket = btreeBucketNew(maxnperbucket);
 ++
 ++    bucketn = lno / maxnperbucket;
 ++    if(lno % maxnperbucket)
 ++	++bucketn;
 ++    bucketlimit = bucketn - 1;
 ++
 ++
 ++    totkeylen = 0;
 ++    count = 0;
 ++    for(i=0;i<bucketlimit;++i)
 ++    {
 ++	cbucket->Nentries = 0;
 ++	for(j=0;j<maxnperbucket;++j)
 ++	{
 ++	    ajListPop(idlist,(void **)&bid);
 ++	    
 ++	    cid = cbucket->Ids[j];
 ++	    ajStrAssS(&cid->id,bid->id);
 ++	    cid->dbno = bid->dbno;
 ++	    cid->dups = bid->dups;
 ++	    cid->offset = bid->offset;
 ++	    cid->refoffset = bid->refoffset;
 ++	    
 ++	    cbucket->keylen[j] = BT_BUCKIDLEN(bid->id);
 ++	    ++count;
 ++	    ++cbucket->Nentries;
 ++	    ajBtreeIdDel(&bid);
 ++	}
 ++	ajListPeek(idlist,(void **)&bid);
 ++	
 ++	ajStrAssS(&karray[i],bid->id);
 ++	totkeylen += ajStrLen(bid->id);
 ++
 ++	if(!parray[i])
 ++	    parray[i] = cache->totsize;
 ++	btreeWriteBucket(cache,cbucket,parray[i]);
 ++    }
 ++
 ++    cbucket->Nentries = 0;
 ++
 ++    j = 0;
 ++    while(count != lno)
 ++    {
 ++	ajListPop(idlist,(void **)&bid);
 ++	cid = cbucket->Ids[j];
 ++	++j;
 ++	++count;
 ++
 ++	ajStrAssS(&cid->id,bid->id);
 ++	cid->dbno = bid->dbno;
 ++	cid->dups = bid->dups;
 ++	cid->offset = bid->offset;
 ++	cid->refoffset = bid->refoffset;
 ++	
 ++	++cbucket->Nentries;
 ++	ajBtreeIdDel(&bid);
 ++    }
 ++
 ++    if(!parray[i])
 ++	parray[i] = cache->totsize;
 ++    btreeWriteBucket(cache,cbucket,parray[i]);
 ++
 ++    nkeys = bucketn - 1;
 ++    v = nkeys;
 ++    SBT_NKEYS(lbuf,v);
 ++    v = totkeylen;
 ++    SBT_TOTLEN(lbuf,v);
 ++    nodetype = BT_LEAF;
 ++    v = nodetype;
 ++    SBT_NODETYPE(lbuf,v);
 ++    lpage->dirty = BT_DIRTY;
 ++
 ++    GBT_PREV(lbuf,&prevsave);
 ++
 ++    btreeWriteNode(cache,lpage,karray,parray,nkeys);
 ++
 ++    ajListPeek(idlist,(void **)&bid);
 ++    ajStrAssS(&mediankey,bid->id);
 ++
 ++    totkeylen = 0;
 ++    bucketn = rno / maxnperbucket;
 ++    if(rno % maxnperbucket)
 ++	++bucketn;
 ++    bucketlimit = bucketn - 1;
 ++
 ++    for(i=0;i<bucketlimit;++i)
 ++    {
 ++	cbucket->Nentries = 0;
 ++	for(j=0;j<maxnperbucket;++j)
 ++	{
 ++	    ajListPop(idlist,(void **)&bid);
 ++	    
 ++	    cid = cbucket->Ids[j];
 ++	    ajStrAssS(&cid->id,bid->id);
 ++	    cid->dbno = bid->dbno;
 ++	    cid->dups = bid->dups;
 ++	    cid->offset = bid->offset;
 ++	    cid->refoffset = bid->refoffset;
 ++	    
 ++	    cbucket->keylen[j] = BT_BUCKIDLEN(bid->id);
 ++	    ++cbucket->Nentries;
 ++	    ajBtreeIdDel(&bid);
 ++	}
 ++
 ++	ajListPeek(idlist,(void **)&bid);
 ++	ajStrAssS(&karray[i],bid->id);
 ++	totkeylen += ajStrLen(bid->id);
 ++
 ++	parray[i] = cache->totsize;
 ++	btreeWriteBucket(cache,cbucket,parray[i]);
 ++    }
 ++
 ++    cbucket->Nentries = 0;
 ++
 ++    j = 0;
 ++    while(ajListPop(idlist,(void**)&bid))
 ++    {
 ++	cid = cbucket->Ids[j];
 ++	++j;
 ++
 ++	ajStrAssS(&cid->id,bid->id);
 ++	cid->dbno = bid->dbno;
 ++	cid->dups = bid->dups;
 ++	cid->offset = bid->offset;
 ++	cid->refoffset = bid->refoffset;
 ++	
 ++	++cbucket->Nentries;
 ++	ajBtreeIdDel(&bid);
 ++    }
 ++    
 ++    parray[i] = cache->totsize;
 ++    btreeWriteBucket(cache,cbucket,parray[i]);
 ++
 ++    nkeys = bucketn - 1;
 ++
 ++    v = nkeys;
 ++    SBT_NKEYS(rbuf,v);
 ++    v = totkeylen;
 ++    SBT_TOTLEN(rbuf,v);
 ++    nodetype = BT_LEAF;
 ++    v = nodetype;
 ++    SBT_NODETYPE(rbuf,v);
 ++    lv = prevsave;
 ++    SBT_PREV(rbuf,lv);
 ++    lv = overflow;
 ++    SBT_OVERFLOW(rbuf,lv);
 ++
 ++    btreeWriteNode(cache,rpage,karray,parray,nkeys);
 ++    rpage->dirty = BT_DIRTY;
 ++
 ++    cbucket->Nentries = maxnperbucket;
 ++    btreeBucketDel(&cbucket);
 ++    ajListDel(&idlist);
 ++
 ++
 ++
 ++    medianless = lblockno;
 ++    mediangtr  = rblockno;
 ++
 ++
 ++    if(rootnodetype == BT_ROOT)
 ++    {
 ++	ajStrAssS(&karray[0],mediankey);
 ++	parray[0]=lblockno;
 ++	parray[1]=rblockno;
 ++	nkeys = 1;
 ++	btreeWriteNode(cache,spage,karray,parray,nkeys);	
 ++	spage->dirty = BT_LOCK;
 ++
 ++	btreeDeallocPriArray(cache,arrays);
 ++
 ++	ajStrDel(&mediankey);
 ++	++cache->level;
 ++	return spage;
 ++    }
 ++
 ++
 ++    btreeDeallocPriArray(cache,arrays);
 ++
 ++    page = ajBtreeCacheRead(cache,prevsave);
 ++    btreeHybInsertKey(cache,page,mediankey,medianless,mediangtr);
 ++    ajStrDel(&mediankey);
 ++
 ++    page = ajBtreeCacheRead(cache,prevsave);
 ++
 ++    return page;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeHybInsertKey *****************************************
 ++**
 ++** Insert a key into a potentially full node
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [u] page [AjPBtpage] original page
 ++** @param [r] key [const AjPStr] key to insert
 ++** @param [r] less [ajlong] less-than pointer
 ++** @param [r] greater [ajlong] greater-than pointer
 ++**
 ++** @return [void]
 ++** @@
 ++******************************************************************************/
 ++
 ++static void btreeHybInsertKey(AjPBtcache cache, AjPBtpage page,
 ++			      const AjPStr key, ajlong less, ajlong greater)
 ++{
 ++    unsigned char *lbuf = NULL;
 ++    unsigned char *rbuf = NULL;
 ++    unsigned char *tbuf = NULL;
 ++    AjPStr *karray      = NULL;
 ++    ajlong *parray      = NULL;
 ++    AjPStr *tkarray     = NULL;
 ++    ajlong *tparray     = NULL;
 ++
 ++    AjPBtMem arrays1    = NULL;
 ++    AjPBtMem arrays2    = NULL;
 ++
 ++    ajint nkeys    = 0;
 ++    ajint order    = 0;
 ++    ajint keypos   = 0;
 ++    ajint rkeyno   = 0;
 ++    
 ++    ajint i = 0;
 ++    ajint n = 0;
 ++    
 ++    ajint nodetype  = 0;
 ++    AjPBtpage ipage = NULL;
 ++    AjPBtpage lpage = NULL;
 ++    AjPBtpage rpage = NULL;
 ++    AjPBtpage tpage = NULL;
 ++
 ++    ajlong blockno  = 0L;
 ++    ajlong rblockno = 0L;
 ++    ajlong lblockno = 0L;
 ++    AjPStr mediankey  = NULL;
 ++    ajlong medianless = 0L;
 ++    ajlong mediangtr  = 0L;
 ++    ajlong overflow   = 0L;
 ++    ajlong prev       = 0L;
 ++    ajint  totlen     = 0;
 ++    
 ++    ajlong lv = 0L;
 ++    ajint  v  = 0;
 ++    
 ++    /* ajDebug("In btreeHybInsertKey\n"); */
 ++
 ++    if(!btreeNodeIsFull(cache,page))
 ++    {
 ++	btreeInsertNonFull(cache,page,key,less,greater);
 ++	return;
 ++    }
 ++    
 ++    order = cache->order;
 ++    lbuf = page->buf;
 ++    GBT_NODETYPE(lbuf,&nodetype);
 ++    page->dirty = BT_LOCK;
 ++
 ++    if(nodetype == BT_ROOT)
 ++    {
 ++	arrays1   = btreeAllocPriArray(cache);
 ++	karray    = arrays1->karray;
 ++	parray    = arrays1->parray;
 ++
 ++	btreeHybSplitRoot(cache);
 ++
 ++	if(page->pageno)
 ++	    page->dirty = BT_DIRTY;
 ++	btreeGetKeys(cache,lbuf,&karray,&parray);
 ++
 ++	if(strcmp(key->Ptr,karray[0]->Ptr)<0)
 ++	    blockno = parray[0];
 ++	else
 ++	    blockno = parray[1];
 ++	ipage = ajBtreeCacheRead(cache,blockno);
 ++	btreeInsertNonFull(cache,ipage,key,less,greater);
 ++
 ++	btreeDeallocPriArray(cache,arrays1);
 ++	return;
 ++    }
 ++
 ++
 ++    arrays1   = btreeAllocPriArray(cache);
 ++    karray    = arrays1->karray;
 ++    parray    = arrays1->parray;
 ++
 ++    arrays2   = btreeAllocPriArray(cache);
 ++    tkarray   = arrays2->karray;
 ++    tparray   = arrays2->parray;
 ++
 ++    mediankey = ajStrNew();
 ++    
 ++    lpage = page;
 ++    lbuf = lpage->buf;
 ++    
 ++    btreeGetKeys(cache,lbuf,&karray,&parray);
 ++
 ++    GBT_BLOCKNUMBER(lbuf,&lblockno);
 ++    rblockno = cache->totsize;
 ++    rpage = ajBtreeCacheWrite(cache,rblockno);
 ++    rpage->dirty = BT_LOCK;
 ++    rpage->pageno = cache->totsize;
 ++    cache->totsize += cache->pagesize;
 ++    rbuf = rpage->buf;
 ++    lv = rblockno;
 ++    SBT_BLOCKNUMBER(rbuf,lv);
 ++
 ++    
 ++    GBT_PREV(lbuf,&prev);
 ++    lv = prev;
 ++    SBT_PREV(rbuf,lv);
 ++
 ++    nkeys = order - 1;
 ++    keypos = nkeys / 2;
 ++    if(!(nkeys % 2))
 ++	--keypos;
 ++
 ++    ajStrAssS(&mediankey,karray[keypos]);
 ++    medianless = lblockno;
 ++    mediangtr  = rblockno;
 ++
 ++
 ++    GBT_NODETYPE(lbuf,&nodetype);
 ++    v = nodetype;
 ++    SBT_NODETYPE(rbuf,v);
 ++    lv = overflow;
 ++    SBT_OVERFLOW(rbuf,lv);
 ++
 ++
 ++    totlen = 0;
 ++    for(i=0;i<keypos;++i)
 ++    {
 ++	ajStrAssS(&tkarray[i],karray[i]);
 ++	totlen += ajStrLen(karray[i]);
 ++	tparray[i] = parray[i];
 ++    }
 ++    tparray[i] = parray[i];
 ++    v = totlen;
 ++    SBT_TOTLEN(lbuf,v);
 ++    n = i;
 ++    v = n;
 ++    SBT_NKEYS(lbuf,v);
 ++    btreeWriteNode(cache,lpage,tkarray,tparray,i);
 ++
 ++
 ++
 ++    for(i=0;i<n+1;++i)
 ++    {
 ++	tpage = ajBtreeCacheRead(cache,tparray[i]);
 ++	tbuf = tpage->buf;
 ++	lv = lblockno;
 ++	SBT_PREV(tbuf,lv);
 ++	tpage->dirty = BT_DIRTY;
 ++    }
 ++
 ++
 ++    totlen = 0;
 ++    for(i=keypos+1;i<nkeys;++i)
 ++    {
 ++	ajStrAssS(&tkarray[i-(keypos+1)],karray[i]);
 ++	totlen += ajStrLen(karray[i]);
 ++	tparray[i-(keypos+1)] = parray[i];
 ++    }
 ++    tparray[i-(keypos+1)] = parray[i];
 ++    v = totlen;
 ++    SBT_TOTLEN(rbuf,v);
 ++    rkeyno = (nkeys-keypos) - 1;
 ++    v = rkeyno;
 ++    SBT_NKEYS(rbuf,v);
 ++    rpage->dirty = BT_DIRTY;
 ++    btreeWriteNode(cache,rpage,tkarray,tparray,rkeyno);
 ++
 ++
 ++    for(i=0;i<rkeyno+1;++i)
 ++    {
 ++	tpage = ajBtreeCacheRead(cache,tparray[i]);
 ++	tbuf = tpage->buf;
 ++	lv = rblockno;
 ++	SBT_PREV(tbuf,lv);
 ++	tpage->dirty = BT_DIRTY;
 ++    }
 ++
 ++
 ++    ipage = rpage;
 ++    if(strcmp(key->Ptr,mediankey->Ptr)<0)
 ++	ipage = lpage;
 ++
 ++    btreeInsertNonFull(cache,ipage,key,less,greater);
 ++
 ++
 ++    btreeDeallocPriArray(cache,arrays1);
 ++    btreeDeallocPriArray(cache,arrays2);
 ++
 ++    ipage = ajBtreeCacheRead(cache,prev);
 ++
 ++    btreeHybInsertKey(cache,ipage,mediankey,medianless,mediangtr);
 ++    ajStrDel(&mediankey);
 ++
 ++    return;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeHybSplitRoot *****************************************
 ++**
 ++** Split the root node
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++**
 ++** @return [void]
 ++** @@
 ++******************************************************************************/
 ++
 ++static void btreeHybSplitRoot(AjPBtcache cache)
 ++{
 ++    AjPBtpage rootpage = NULL;
 ++    AjPBtpage rpage    = NULL;
 ++    AjPBtpage lpage    = NULL;
 ++    AjPBtpage tpage    = NULL;
 ++
 ++    AjPStr *karray     = NULL;
 ++    AjPStr *tkarray    = NULL;
 ++    ajlong *parray     = NULL;
 ++    ajlong *tparray    = NULL;
 ++    AjPBtMem arrays1   = NULL;
 ++    AjPBtMem arrays2   = NULL;
 ++
 ++    ajint order     = 0;
 ++    ajint nkeys     = 0;
 ++    ajint keypos    = 0;
 ++    
 ++    ajlong rblockno = 0L;
 ++    ajlong lblockno = 0L;
 ++    
 ++    AjPStr key = NULL;
 ++    ajint  i;
 ++
 ++    unsigned char *rootbuf = NULL;
 ++    unsigned char *rbuf    = NULL;
 ++    unsigned char *lbuf    = NULL;
 ++    unsigned char *tbuf    = NULL;
 ++    
 ++    ajint nodetype  = 0;
 ++    ajlong overflow = 0L;
 ++    ajlong zero     = 0L;
 ++    ajint totlen    = 0;
 ++    ajint rkeyno    = 0;
 ++    ajint n         = 0;
 ++
 ++    ajlong lv = 0L;
 ++    ajint  v  = 0;
 ++    
 ++    
 ++    /* ajDebug("In btreeHybSplitRoot\n"); */
 ++
 ++    order = cache->order;
 ++
 ++    arrays1   = btreeAllocPriArray(cache);
 ++    karray    = arrays1->karray;
 ++    parray    = arrays1->parray;
 ++
 ++    arrays2   = btreeAllocPriArray(cache);
 ++    tkarray   = arrays2->karray;
 ++    tparray   = arrays2->parray;
 ++
 ++    key = ajStrNew();
 ++
 ++    rootpage = btreeCacheLocate(cache,0L);
 ++    if(!rootpage)
 ++	ajFatal("Root page has been unlocked 1");
 ++    
 ++    rootbuf = rootpage->buf;
 ++
 ++    nkeys = order - 1;
 ++
 ++    keypos = nkeys / 2;
 ++    if(!(nkeys % 2))
 ++	--keypos;
 ++
 ++
 ++    rblockno = cache->totsize;
 ++    rpage = ajBtreeCacheWrite(cache,rblockno);
 ++    rpage->dirty = BT_LOCK;
 ++    rpage->pageno = cache->totsize;
 ++    cache->totsize += cache->pagesize;
 ++
 ++    lblockno = cache->totsize;
 ++    lpage = ajBtreeCacheWrite(cache,lblockno);
 ++    lpage->pageno = cache->totsize;
 ++    cache->totsize += cache->pagesize;
 ++
 ++    lv = rblockno;
 ++    SBT_BLOCKNUMBER(rpage->buf,lv);
 ++    lv = lblockno;
 ++    SBT_BLOCKNUMBER(lpage->buf,lv);
 ++
 ++    if(!cache->level)
 ++    {
 ++	lv = zero;
 ++	SBT_LEFT(lpage->buf,lv);
 ++	lv = rblockno;
 ++	SBT_RIGHT(lpage->buf,lv);
 ++	lv = lblockno;
 ++	SBT_LEFT(rpage->buf,lv);
 ++	lv = zero;
 ++	SBT_RIGHT(rpage->buf,lv);
 ++    }
 ++
 ++    btreeGetKeys(cache,rootbuf,&karray,&parray);
 ++
 ++    /* Get key for root node and write new root node */
 ++    ajStrAssS(&tkarray[0],karray[keypos]);
 ++    tparray[0] = lblockno;
 ++    tparray[1] = rblockno;
 ++    
 ++
 ++    n = 1;
 ++    v = n;
 ++    SBT_NKEYS(rootbuf,v);
 ++    btreeWriteNode(cache,rootpage,tkarray,tparray,1);
 ++    rootpage->dirty = BT_LOCK;
 ++
 ++    rbuf = rpage->buf;
 ++    lbuf = lpage->buf;
 ++    
 ++    if(cache->level)
 ++	nodetype = BT_INTERNAL;
 ++    else
 ++	nodetype = BT_LEAF;
 ++
 ++    v = nodetype;
 ++    SBT_NODETYPE(rbuf,v);
 ++    v = nodetype;
 ++    SBT_NODETYPE(lbuf,v);
 ++    lv = overflow;
 ++    SBT_OVERFLOW(rbuf,lv);
 ++    lv = overflow;
 ++    SBT_PREV(rbuf,lv);
 ++    lv = overflow;
 ++    SBT_OVERFLOW(lbuf,lv);
 ++    lv = overflow;
 ++    SBT_PREV(lbuf,lv);
 ++
 ++    totlen = 0;
 ++    for(i=0;i<keypos;++i)
 ++    {
 ++	ajStrAssS(&tkarray[i],karray[i]);
 ++	totlen += ajStrLen(karray[i]);
 ++	tparray[i] = parray[i];
 ++    }
 ++    tparray[i] = parray[i];
 ++    v = totlen;
 ++    SBT_TOTLEN(lbuf,v);
 ++    n = i;
 ++    v = n;
 ++    SBT_NKEYS(lbuf,v);
 ++    btreeWriteNode(cache,lpage,tkarray,tparray,i);
 ++
 ++    for(i=0;i<n+1;++i)
 ++    {
 ++	tpage = ajBtreeCacheRead(cache,tparray[i]);
 ++	tbuf = tpage->buf;
 ++	lv = lblockno;
 ++	SBT_PREV(tbuf,lv);
 ++	tpage->dirty = BT_DIRTY;
 ++    }
 ++
 ++    totlen = 0;
 ++    for(i=keypos+1;i<nkeys;++i)
 ++    {
 ++	ajStrAssS(&tkarray[i-(keypos+1)],karray[i]);
 ++	totlen += ajStrLen(karray[i]);
 ++	tparray[i-(keypos+1)] = parray[i];
 ++    }
 ++    tparray[i-(keypos+1)] = parray[i];
 ++    v = totlen;
 ++    SBT_TOTLEN(rbuf,v);
 ++    rkeyno = (nkeys-keypos) - 1;
 ++    v = rkeyno;
 ++    SBT_NKEYS(rbuf,v);
 ++    rpage->dirty = BT_DIRTY;
 ++    btreeWriteNode(cache,rpage,tkarray,tparray,rkeyno);
 ++
 ++    for(i=0;i<rkeyno+1;++i)
 ++    {
 ++	tpage = ajBtreeCacheRead(cache,tparray[i]);
 ++	tbuf = tpage->buf;
 ++	lv = rblockno;
 ++	SBT_PREV(tbuf,lv);
 ++	tpage->dirty = BT_DIRTY;
 ++    }
 ++
 ++
 ++    btreeDeallocPriArray(cache,arrays1);
 ++    btreeDeallocPriArray(cache,arrays2);
 ++
 ++    ++cache->level;
 ++
 ++    ajStrDel(&key);
 ++    
 ++    return;
 ++}
 ++
 ++
 ++
 ++
 ++/* @func ajBtreeHybInsertId *********************************************
 ++**
 ++** Insert an ID structure into the tree
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [r] id [const AjPBtId] Id object
 ++**
 ++** @return [void] pointer to a page
 ++** @@
 ++******************************************************************************/
 ++
 ++void ajBtreeHybInsertId(AjPBtcache cache, AjPBtHybrid hyb)
 ++{
 ++    AjPBtpage spage   = NULL;
 ++    AjPBtpage parent  = NULL;
 ++    AjPStr key        = NULL;
 ++    const char *ckey  = NULL;
 ++    AjPBucket lbucket = NULL;
 ++    AjPBucket rbucket = NULL;
 ++    AjPBucket bucket  = NULL;
 ++    ajlong lblockno = 0L;
 ++    ajlong rblockno = 0L;
 ++    ajlong blockno  = 0L;
 ++    ajlong shift    = 0L;
 ++
 ++    ajint nkeys = 0;
 ++    ajint order = 0;
 ++
 ++    ajint nodetype = 0;
 ++    ajint nentries = 0;
 ++    
 ++    AjPStr *karray = NULL;
 ++    ajlong *parray = NULL;
 ++    AjPBtMem arrays = NULL;
 ++    AjBool found = ajFalse;
 ++    AjPBtId btid = NULL;
 ++    
 ++    ajint i;
 ++    ajint n;
 ++    
 ++    unsigned char *buf = NULL;
 ++
 ++    /* ajDebug("In ajBtreeHybInsertId\n"); */
 ++
 ++    key = ajStrNew();
 ++    
 ++
 ++    ajStrAssS(&key,hyb->key1);
 ++    if(!ajStrLen(key))
 ++    {
 ++	ajStrDel(&key);
 ++	return;
 ++    }
 ++
 ++    ckey = ajStrStr(key);
 ++    spage = ajBtreeHybFindInsert(cache,ckey);
 ++    buf = spage->buf;
 ++
 ++    GBT_NKEYS(buf,&nkeys);
 ++    GBT_NODETYPE(buf,&nodetype);
 ++    
 ++    order = cache->order;
 ++
 ++    arrays = btreeAllocPriArray(cache);
 ++    karray = arrays->karray;
 ++    parray = arrays->parray;
 ++    
 ++    if(!nkeys)
 ++    {
 ++	lbucket  = btreeBucketNew(0);
 ++	rbucket  = btreeBucketNew(0);
 ++
 ++	lblockno = cache->totsize;
 ++	btreeWriteBucket(cache,lbucket,lblockno);
 ++
 ++	rblockno = cache->totsize;
 ++	btreeWriteBucket(cache,rbucket,rblockno);	
 ++
 ++	parray[0] = lblockno;
 ++	parray[1] = rblockno;
 ++	ajStrAssS(karray,key);
 ++	
 ++	btreeWriteNode(cache,spage,karray,parray,1);
 ++
 ++	btreeBucketDel(&lbucket);
 ++	btreeBucketDel(&rbucket);
 ++
 ++	btreeAddToHybBucket(cache,rblockno,hyb);
 ++
 ++	btreeDeallocPriArray(cache,arrays);
 ++
 ++	ajStrDel(&key);
 ++
 ++	return;
 ++    }
 ++
 ++
 ++    /* Search to see whether entry exists */
 ++    
 ++    btreeGetKeys(cache,buf,&karray,&parray);
 ++
 ++    i=0;
 ++    while(i!=nkeys && strcmp(key->Ptr,karray[i]->Ptr)>=0)
 ++	++i;
 ++    if(i==nkeys)
 ++    {
 ++	if(strcmp(key->Ptr,karray[i-1]->Ptr)<0)
 ++	    blockno = parray[i-1];
 ++	else
 ++	    blockno = parray[i];
 ++    }
 ++    else
 ++	blockno = parray[i];
 ++
 ++
 ++    bucket = btreeReadBucket(cache,blockno);
 ++    
 ++    nentries = bucket->Nentries;
 ++    
 ++    found = ajFalse;
 ++
 ++    for(i=0;i<nentries;++i)
 ++	if(!strcmp(hyb->key1->Ptr,bucket->Ids[i]->id->Ptr))
 ++	{
 ++	    found = ajTrue;
 ++	    break;
 ++	}
 ++    
 ++
 ++    if(found)
 ++    {
 ++	btid = bucket->Ids[i];
 ++
 ++	btreeHybDupInsert(cache,hyb,btid);
 ++
 ++	btreeWriteBucket(cache,bucket,blockno);
 ++	btreeBucketDel(&bucket);
 ++
 ++	btreeDeallocPriArray(cache,arrays);
 ++
 ++	ajStrDel(&key);
 ++	
 ++	return;
 ++    }
 ++    else
 ++	btreeBucketDel(&bucket);
 ++
 ++    if(nodetype != BT_ROOT)
 ++	if((shift = btreeHybInsertShift(cache,&spage,key->Ptr)))
 ++	    blockno = shift;
 ++
 ++    buf = spage->buf;
 ++
 ++    n = btreeNumInBucket(cache,blockno);
 ++
 ++    if(n == cache->nperbucket)
 ++    {
 ++	if(btreeHybReorderBuckets(cache,spage))
 ++	{
 ++	    GBT_NKEYS(buf,&nkeys);	    
 ++	    btreeGetKeys(cache,buf,&karray,&parray);
 ++
 ++	    i=0;
 ++	    while(i!=nkeys && strcmp(key->Ptr,karray[i]->Ptr)>=0)
 ++		++i;
 ++
 ++	    if(i==nkeys)
 ++	    {
 ++		if(strcmp(key->Ptr,karray[i-1]->Ptr)<0)
 ++		    blockno = parray[i-1];
 ++		else
 ++		    blockno = parray[i];
 ++	    }
 ++	    else
 ++		blockno = parray[i];
 ++	}
 ++	else
 ++	{
 ++	    parent = btreeHybSplitLeaf(cache,spage);
 ++	    spage  = ajBtreeHybFindInsert(cache,ckey);
 ++	    buf = spage->buf;
 ++
 ++	    btreeGetKeys(cache,buf,&karray,&parray);
 ++
 ++	    GBT_NKEYS(buf,&nkeys);
 ++	    i=0;
 ++	    while(i!=nkeys && strcmp(key->Ptr,karray[i]->Ptr)>=0)
 ++		++i;
 ++
 ++	    if(i==nkeys)
 ++	    {
 ++		if(strcmp(key->Ptr,karray[i-1]->Ptr)<0)
 ++		    blockno = parray[i-1];
 ++		else
 ++		    blockno = parray[i];
 ++	    }
 ++	    else
 ++		blockno = parray[i];
 ++
 ++	}
 ++    }
 ++
 ++
 ++    btreeAddToHybBucket(cache,blockno,hyb);
 ++
 ++    ++cache->count;
 ++
 ++    btreeDeallocPriArray(cache,arrays);
 ++
 ++    ajStrDel(&key);
 ++
 ++    return;
 ++}
 ++
 ++
 ++
 ++
 ++static void btreeHybDupInsert(AjPBtcache cache, AjPBtHybrid hyb,
 ++			      AjPBtId btid)
 ++{
 ++    AjPBtpage page;
 ++    AjPBtpage rpage;
 ++    ajlong secrootpage = 0L;
 ++    unsigned char *buf;
 ++    ajlong right = 0L;
 ++    AjPBtNumId num = NULL;
 ++
 ++    /* ajDebug("In btreeHybDupInsert\n"); */
 ++
 ++    if(!btid->dups)
 ++    {
 ++	btid->dups = 1;
 ++	AJNEW0(num);
 ++	
 ++	num->offset    = btid->offset;
 ++	num->refoffset = btid->refoffset;
 ++	num->dbno      = btid->dbno;
 ++
 ++	secrootpage = cache->totsize;
 ++
 ++	btid->offset = secrootpage;
 ++
 ++	ajBtreeCreateRootNode(cache,secrootpage);
 ++	cache->secrootblock = secrootpage;
 ++	page = ajBtreeCacheWrite(cache,secrootpage);
 ++	page->dirty = BT_DIRTY;
 ++	ajBtreeCacheSync(cache,secrootpage);
 ++	page->dirty = BT_LOCK;
 ++	
 ++	rpage = btreeCacheLocate(cache, 0L);
 ++	rpage->dirty = BT_LOCK;
 ++
 ++	cache->slevel = 0;
 ++
 ++	ajBtreeInsertNum(cache,num,page);
 ++
 ++	num->offset    = hyb->offset;
 ++	num->refoffset = hyb->refoffset;
 ++	num->dbno      = hyb->dbno;
 ++
 ++	ajBtreeInsertNum(cache,num,page);
 ++	++btid->dups;
 ++
 ++	AJFREE(num);
 ++
 ++	return;
 ++    }
 ++    else
 ++    {
 ++	cache->secrootblock = btid->offset;
 ++	page = ajBtreeCacheWrite(cache,cache->secrootblock);
 ++	page->dirty = BT_LOCK;
 ++	buf = page->buf;
 ++	GBT_RIGHT(buf,&right);
 ++	cache->slevel = (ajint) right;
 ++
 ++	AJNEW0(num);
 ++	
 ++	num->offset    = hyb->offset;
 ++	num->refoffset = hyb->refoffset;
 ++	num->dbno      = hyb->dbno;
 ++	
 ++	ajBtreeInsertNum(cache,num,page);
 ++
 ++	AJFREE(num);
 ++	
 ++	++btid->dups;
 ++    }
 ++    
 ++
 ++    page->dirty = BT_DIRTY;
 ++
 ++    return;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeGetNumKeys *********************************************
 ++**
 ++** Get Keys and Pointers from an internal node
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [u] buf [unsigned char *] page buffer
 ++** @param [w] keys [ajlong **] keys
 ++** @param [w] ptrs [ajlong**] ptrs
 ++**
 ++** @return [void]
 ++** @@
 ++******************************************************************************/
 ++
 ++static void btreeGetNumKeys(AjPBtcache cache, unsigned char *buf,
 ++			    ajlong **keys, ajlong **ptrs)
 ++{
 ++    ajlong *karray = NULL;
 ++    ajlong *parray = NULL;
 ++    
 ++    ajint nkeys = 0;
 ++    unsigned char *pptr = NULL;
 ++    ajint    i;
 ++
 ++    /* ajDebug("In btreeGetNumKeys\n"); */
 ++
 ++
 ++    karray = *keys;
 ++    parray = *ptrs;
 ++
 ++    pptr = PBT_KEYLEN(buf);
 ++    GBT_NKEYS(buf,&nkeys);
 ++    if(!nkeys)
 ++	ajFatal("GetNumKeys: No keys in node");
 ++
 ++    for(i=0;i<nkeys;++i)
 ++    {
 ++	BT_GETAJLONG(pptr,&karray[i]);
 ++	pptr += sizeof(ajlong);
 ++    }
 ++
 ++    for(i=0;i<nkeys;++i)
 ++    {
 ++	BT_GETAJLONG(pptr,&parray[i]);
 ++	pptr += sizeof(ajlong);
 ++    }
 ++    
 ++    BT_GETAJLONG(pptr,&parray[i]);
 ++
 ++    return;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeWriteNumNode *******************************************
 ++**
 ++** Write an internal node
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [u] spage [AjPBtpage] buffer
 ++** @param [r] keys [AjPStr const *] keys
 ++** @param [r] ptrs [const ajlong*] page pointers
 ++** @param [r] nkeys [ajint] number of keys
 ++
 ++**
 ++** @return [void]
 ++** @@
 ++******************************************************************************/
 ++
 ++static void btreeWriteNumNode(AjPBtcache cache, AjPBtpage spage,
 ++			      const ajlong *keys, const ajlong *ptrs,
 ++			      ajint nkeys)
 ++{
 ++    unsigned char *pptr   = NULL;
 ++    unsigned char *buf;
 ++    
 ++    ajint tnkeys = 0;
 ++
 ++    ajlong aspace   = 0L;
 ++    ajlong lv       = 0L;
 ++    ajlong overflow = 0L;
 ++    ajint i;
 ++
 ++
 ++    /* ajDebug("In btreeWriteNumNode\n"); */
 ++
 ++    buf = spage->buf;
 ++
 ++    tnkeys = nkeys;
 ++    SBT_NKEYS(buf,tnkeys);
 ++
 ++    pptr = PBT_KEYLEN(buf);
 ++    aspace = 2 * nkeys * sizeof(ajlong) + sizeof(ajlong);
 ++    if((pptr+aspace)-buf > cache->pagesize)
 ++	ajFatal("WriteNumNode: too many keys for available pagesize");
 ++
 ++    for(i=0;i<nkeys;++i)
 ++    {
 ++	lv = keys[i];
 ++	BT_SETAJLONG(pptr,lv);
 ++	pptr += sizeof(ajlong);
 ++    }
 ++
 ++    for(i=0;i<nkeys;++i)
 ++    {
 ++	lv = ptrs[i];
 ++	BT_SETAJLONG(pptr,lv);
 ++	pptr += sizeof(ajlong);
 ++    }
 ++    
 ++    lv = ptrs[i];
 ++    BT_SETAJLONG(pptr,lv);
 ++
 ++    spage->dirty = BT_DIRTY;
 ++
 ++    overflow = 0L;
 ++    SBT_OVERFLOW(buf,overflow);
 ++
 ++
 ++    return;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeWriteNumBucket *******************************************
 ++**
 ++** Write index bucket object to the cache given a disc page number
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [r] bucket [const AjPBucket] bucket
 ++** @param [r] pageno [ajlong] page number
 ++**
 ++** @return [void]
 ++** @@
 ++******************************************************************************/
 ++
 ++static void btreeWriteNumBucket(AjPBtcache cache, const AjPNumBucket bucket,
 ++			     ajlong pageno)
 ++{
 ++    AjPBtpage page      = NULL;
 ++    unsigned char *buf  = NULL;
 ++    unsigned char *pptr = NULL;
 ++
 ++    ajint   v   = 0;
 ++    ajint   i   = 0;
 ++    ajlong lv   = 0L;
 ++    ajint  nentries = 0;
 ++    ajlong overflow = 0L;
 ++
 ++    /* ajDebug("In btreeWriteNumBucket\n"); */
 ++
 ++    if(pageno == cache->totsize)
 ++    {
 ++	page = ajBtreeCacheWrite(cache,pageno);
 ++	page->pageno = cache->totsize;
 ++	cache->totsize += cache->pagesize;
 ++	buf = page->buf;
 ++	overflow = 0L;
 ++	lv = overflow;
 ++	SBT_BUCKOVERFLOW(buf,lv);
 ++    }
 ++    else
 ++    {
 ++	page = ajBtreeCacheRead(cache,pageno);
 ++	buf = page->buf;
 ++	GBT_BUCKOVERFLOW(buf,&overflow);
 ++    }
 ++
 ++    v = BT_BUCKET;
 ++    SBT_BUCKNODETYPE(buf,v);
 ++    page->dirty = BT_LOCK;
 ++
 ++    nentries = bucket->Nentries;
 ++    v = nentries;
 ++    SBT_BUCKNENTRIES(buf,v);
 ++    
 ++    pptr = PBT_BUCKKEYLEN(buf);
 ++
 ++    for(i=0;i<nentries;++i)
 ++    {
 ++	lv = bucket->NumId[i]->offset;
 ++	BT_SETAJLONG(pptr,lv);
 ++	pptr += sizeof(ajlong);
 ++	lv = bucket->NumId[i]->refoffset;
 ++	BT_SETAJLONG(pptr,lv);
 ++	pptr += sizeof(ajlong);
 ++	v = bucket->NumId[i]->dbno;
 ++	BT_SETAJINT(pptr,v);
 ++	pptr += sizeof(ajint);
 ++    }
 ++    
 ++    lv = 0L;
 ++    SBT_BUCKOVERFLOW(buf,lv);
 ++    page->dirty = BT_DIRTY;
 ++
 ++    return;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeReadNumBucket *********************************************
 ++**
 ++** Constructor for index bucket given a disc page number
 ++** Creates one empty key slot for possible addition
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [r] pageno [ajlong] page number
 ++**
 ++** @return [AjPNumBucket] bucket
 ++** @@
 ++******************************************************************************/
 ++
 ++static AjPNumBucket btreeReadNumBucket(AjPBtcache cache, ajlong pageno)
 ++{
 ++    AjPNumBucket bucket    = NULL;
 ++    AjPBtpage page      = NULL;
 ++    unsigned char *buf  = NULL;
 ++    unsigned char *pptr = NULL;
 ++    ajint  nodetype  = 0;
 ++    ajint  nentries  = 0;
 ++    ajlong overflow  = 0L;
 ++    ajint  dirtysave = 0;
 ++    
 ++    ajint  i;
 ++    
 ++    /* ajDebug("In btreeReadNumBucket\n"); */
 ++
 ++    if(pageno == cache->secrootblock)
 ++	ajFatal("ReadNumBucket: cannot read bucket from a root page");
 ++
 ++    page = ajBtreeCacheRead(cache,pageno);
 ++    dirtysave = page->dirty;
 ++    page->dirty = BT_LOCK;
 ++    buf = page->buf;
 ++
 ++    GBT_BUCKNODETYPE(buf,&nodetype);
 ++    if(nodetype != BT_BUCKET)
 ++	ajFatal("ReadNumBucket: Nodetype mismatch. Not bucket (%d)",nodetype);
 ++
 ++    GBT_BUCKNENTRIES(buf,&nentries);
 ++    if(nentries > cache->snperbucket)
 ++	ajFatal("ReadNumBucket: Bucket too full");
 ++
 ++    GBT_BUCKOVERFLOW(buf,&overflow);
 ++
 ++    AJNEW0(bucket);
 ++    bucket->NodeType = nodetype;
 ++    bucket->Nentries = nentries;
 ++    bucket->Overflow = overflow;
 ++
 ++    AJCNEW0(bucket->NumId,nentries+1);
 ++    for(i=0;i<nentries;++i)
 ++	AJNEW0(bucket->NumId[i]);
 ++    
 ++
 ++    pptr = PBT_BUCKKEYLEN(buf);
 ++
 ++    for(i=0;i<nentries;++i)
 ++    {
 ++	BT_GETAJLONG(pptr,&bucket->NumId[i]->offset);
 ++	pptr += sizeof(ajlong);
 ++	BT_GETAJLONG(pptr,&bucket->NumId[i]->refoffset);
 ++	pptr += sizeof(ajlong);
 ++	BT_GETAJINT(pptr,&bucket->NumId[i]->dbno);
 ++	pptr += sizeof(ajint);
 ++    }
 ++    
 ++    page->dirty = dirtysave;
 ++
 ++    return bucket;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeNumBucketDel *********************************************
 ++**
 ++** Delete a bucket object
 ++**
 ++** @param [w] thys [AjPNumBucket*] bucket
 ++**
 ++** @return [void]
 ++** @@
 ++******************************************************************************/
 ++
 ++static void btreeNumBucketDel(AjPNumBucket *thys)
 ++{
 ++    AjPNumBucket pthis = NULL;
 ++    int i;
 ++    
 ++    
 ++    /* ajDebug("In btreeNumBucketDel\n"); */
 ++
 ++    if(!thys || !*thys)
 ++	return;
 ++
 ++    pthis = *thys;
 ++
 ++    if(pthis->Nentries)
 ++    {
 ++	for(i=0;i<pthis->Nentries;++i)
 ++	    AJFREE(pthis->NumId[i]);
 ++    
 ++	AJFREE(pthis->NumId);
 ++    }
 ++    
 ++    
 ++    AJFREE(pthis);
 ++
 ++    *thys = NULL;
 ++
 ++    return;
 ++}
 ++
 ++
 ++
 ++
 ++/* @func ajBtreeNumFindInsert ***********************************************
 ++**
 ++** Find the node that should contain a new key for insertion
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [r] key [const ajlong] key to search for 
 ++**
 ++** @return [AjPBtpage] leaf node where item should be inserted
 ++** @@
 ++******************************************************************************/
 ++
 ++AjPBtpage ajBtreeNumFindInsert(AjPBtcache cache, const ajlong key)
 ++{
 ++    AjPBtpage root = NULL;
 ++    AjPBtpage ret  = NULL;
 ++
 ++    /* ajDebug("In ajBtreeNumFindInsert\n"); */
 ++
 ++    /* The root node should always be in the cache (BT_LOCKed) */
 ++    root = btreeCacheLocate(cache,cache->secrootblock);
 ++
 ++    /* ajDebug("cache->slevel = %d root=%d\n",cache->slevel,(ajint)root); */
 ++    
 ++
 ++    if(!cache->slevel)
 ++	return root;
 ++    
 ++    ret = btreeNumFindINode(cache,root,key);
 ++
 ++    return ret;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeNumFindINode **********************************************
 ++**
 ++** Recursive search for insert node in a secondary tree
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [u] page [AjPBtpage] page
 ++** @param [r] item [const ajlong] key to search for 
 ++**
 ++** @return [AjPBtpage] leaf node where item should be inserted
 ++** @@
 ++******************************************************************************/
 ++
 ++static AjPBtpage btreeNumFindINode(AjPBtcache cache, AjPBtpage page,
 ++				   const ajlong item)
 ++{
 ++    AjPBtpage ret = NULL;
 ++    AjPBtpage pg  = NULL;
 ++
 ++    unsigned char *buf = NULL;
 ++    ajint status       = 0;
 ++    ajint ival         = 0;
 ++
 ++    /* ajDebug("In btreeNumFindINode\n"); */
 ++    
 ++    ret = page;
 ++    buf = page->buf;
 ++    GBT_NODETYPE(buf,&ival);
 ++    if(ival != BT_LEAF)
 ++    {
 ++	status = ret->dirty;
 ++	ret->dirty = BT_LOCK;	/* Lock in case of lots of overflow pages */
 ++	pg = btreeNumPageFromKey(cache,buf,item);
 ++	ret->dirty = status;
 ++	ret = btreeNumFindINode(cache,pg,item);
 ++    }
 ++    
 ++    return ret;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeNumPageFromKey *******************************************
 ++**
 ++** Return next lower index page given a key in a secondary tree
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [u] buf [unsigned char *] page buffer
 ++** @param [r] key [const ajlong] key to search for 
 ++**
 ++** @return [AjPBtpage] pointer to a page
 ++** @@
 ++******************************************************************************/
 ++
 ++static AjPBtpage btreeNumPageFromKey(AjPBtcache cache, unsigned char *buf,
 ++				     const ajlong key)
 ++{
 ++    unsigned char *rootbuf = NULL;
 ++    ajint nkeys = 0;
 ++    ajint order = 0;
 ++    ajint i;
 ++    
 ++    ajlong blockno = 0L;
 ++    ajlong *karray = NULL;
 ++    ajlong *parray = NULL;
 ++    AjPBtpage page = NULL;
 ++    AjPBtMem array = NULL;
 ++
 ++    /* ajDebug("In btreeNumPageFromKey\n"); */
 ++    
 ++    rootbuf = buf;
 ++
 ++
 ++    GBT_NKEYS(rootbuf,&nkeys);
 ++    order = cache->sorder;
 ++
 ++    array = btreeAllocSecArray(cache);
 ++    karray = array->overflows;
 ++    parray = array->parray;
 ++    
 ++    btreeGetNumKeys(cache,rootbuf,&karray,&parray);
 ++    i = 0;
 ++    while(i!=nkeys && key >= karray[i])
 ++	++i;
 ++    if(i==nkeys)
 ++    {
 ++	if(key < karray[i-1])
 ++	    blockno = parray[i-1];
 ++	else
 ++	    blockno = parray[i];
 ++    }
 ++    else
 ++	blockno = parray[i];
 ++
 ++    btreeDeallocSecArray(cache,array);
 ++
 ++    page =  ajBtreeCacheRead(cache,blockno);
 ++
 ++    return page;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeAddToNumBucket *******************************************
 ++**
 ++** Add offset info to a bucket
 ++** Only called if there is room in the bucket
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [r] pageno [ajlong] page number of bucket
 ++** @param [r] num [const AjPBtNumId] ID info
 ++**
 ++** @return [void]
 ++** @@
 ++******************************************************************************/
 ++
 ++static void btreeAddToNumBucket(AjPBtcache cache, ajlong pageno,
 ++				const AjPBtNumId num)
 ++{
 ++    AjPNumBucket bucket = NULL;
 ++    ajint nentries;
 ++    
 ++    /* ajDebug("In btreeAddToNumBucket\n"); */
 ++
 ++    bucket   = btreeReadNumBucket(cache,pageno);
 ++
 ++    nentries = bucket->Nentries;
 ++
 ++    /* Reading a bucket always gives one extra ID position */
 ++
 ++    AJNEW0(bucket->NumId[nentries]);
 ++    bucket->NumId[nentries]->offset    = num->offset;
 ++    bucket->NumId[nentries]->refoffset = num->refoffset;
 ++    bucket->NumId[nentries]->dbno      = num->dbno;
 ++
 ++    
 ++    ++bucket->Nentries;
 ++
 ++    btreeWriteNumBucket(cache,bucket,pageno);
 ++
 ++    btreeNumBucketDel(&bucket);
 ++    
 ++    return;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeNumInNumBucket *******************************************
 ++**
 ++** Return number of entries in a bucket
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [r] pageno [ajlong] page number
 ++**
 ++** @return [ajint] Number of entries in bucket
 ++** @@
 ++******************************************************************************/
 ++
 ++static ajint btreeNumInNumBucket(AjPBtcache cache, ajlong pageno)
 ++{
 ++    AjPBtpage page     = NULL;
 ++    unsigned char *buf = NULL;
 ++    ajint  nodetype    = 0;
 ++    ajint  nentries    = 0;
 ++    
 ++    /* ajDebug("In btreeNumInNumBucket\n"); */
 ++    
 ++    if(pageno == cache->secrootblock)
 ++	ajFatal("NumInNumBucket: Attempt to read bucket from root page\n");
 ++
 ++    page  = ajBtreeCacheRead(cache,pageno);
 ++
 ++    buf = page->buf;
 ++
 ++    GBT_BUCKNODETYPE(buf,&nodetype);
 ++    if(nodetype != BT_BUCKET)
 ++	ajFatal("NumInNumBucket: NodeType mismatch. Not bucket (%d)",
 ++		nodetype);
 ++    
 ++    GBT_BUCKNENTRIES(buf,&nentries);
 ++
 ++    return nentries;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeNumBucketNew *********************************************
 ++**
 ++** Construct a bucket object
 ++**
 ++** @param [r] n [ajint] Number of IDs
 ++**
 ++** @return [AjPBucket] initialised disc block cache structure
 ++** @@
 ++******************************************************************************/
 ++
 ++static AjPNumBucket btreeNumBucketNew(ajint n)
 ++{
 ++    AjPNumBucket bucket = NULL;
 ++    ajint i;
 ++
 ++    /* ajDebug("In btreeNumBucketNew\n"); */
 ++    
 ++    AJNEW0(bucket);
 ++
 ++    if(n)
 ++    {
 ++	AJCNEW0(bucket->NumId,n);
 ++	for(i=0;i<n;++i)
 ++	    AJNEW0(bucket->NumId[i]);
 ++    }
 ++
 ++    bucket->NodeType = BT_BUCKET;
 ++    bucket->Nentries = n;
 ++    bucket->Overflow = 0L;
 ++    
 ++    return bucket;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeReorderNumBuckets *****************************************
 ++**
 ++** Re-order leaf buckets
 ++** Must only be called if one of the buckets is full
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [u] leaf [AjPBtpage] leaf page
 ++**
 ++** @return [AjBool] true if reorder was successful i.e. leaf not full
 ++** @@
 ++******************************************************************************/
 ++
 ++static AjBool btreeReorderNumBuckets(AjPBtcache cache, AjPBtpage leaf)
 ++{
 ++    ajint nkeys = 0;
 ++    unsigned char *lbuf = NULL;
 ++
 ++    ajlong *keys        = NULL;
 ++    ajlong *ptrs        = NULL;
 ++
 ++    AjPNumBucket *buckets  = NULL;
 ++    
 ++    ajint i = 0;
 ++    ajint j = 0;
 ++    
 ++    ajint order;
 ++    ajint bentries      = 0;
 ++    ajint totalkeys     = 0;
 ++    ajint nperbucket    = 0;
 ++    ajint maxnperbucket = 0;
 ++    ajint count         = 0;
 ++    ajint keylimit      = 0;
 ++    ajint bucketn       = 0;
 ++    ajint bucketlimit   = 0;
 ++    ajint nodetype      = 0;
 ++    
 ++    AjPList idlist    = NULL;
 ++    ajint   dirtysave = 0;
 ++    AjPBtNumId bid       = NULL;
 ++    AjPNumBucket cbucket = NULL;
 ++    AjPBtNumId cid       = NULL;
 ++
 ++    ajint   v = 0;
 ++    AjPBtMem array = NULL;
 ++    
 ++    /* ajDebug("In btreeReorderNumBuckets\n"); */
 ++
 ++    dirtysave = leaf->dirty;
 ++
 ++    leaf->dirty = BT_LOCK;
 ++    lbuf = leaf->buf;
 ++
 ++    GBT_NODETYPE(lbuf,&nodetype);
 ++
 ++    order = cache->sorder;
 ++    nperbucket = cache->snperbucket;
 ++    
 ++
 ++    array = btreeAllocSecArray(cache);
 ++    keys  = array->overflows;
 ++    ptrs  = array->parray;
 ++
 ++    /* Read keys/ptrs */
 ++
 ++    btreeGetNumKeys(cache,lbuf,&keys,&ptrs);
 ++
 ++    GBT_NKEYS(lbuf,&nkeys);
 ++
 ++
 ++    if(!nkeys)
 ++	ajFatal("NumBucketReorder: Attempt to reorder empty leaf");
 ++
 ++    for(i=0;i<nkeys;++i)
 ++	totalkeys += btreeNumInNumBucket(cache,ptrs[i]);
 ++    totalkeys += btreeNumInNumBucket(cache,ptrs[i]);
 ++
 ++    /* Set the number of entries per bucket to approximately half full */
 ++    maxnperbucket = nperbucket >> 1;
 ++
 ++    if(!maxnperbucket)
 ++	++maxnperbucket;
 ++
 ++    /* Work out the number of new buckets needed */
 ++    bucketn = (totalkeys / maxnperbucket);
 ++    if(totalkeys % maxnperbucket)
 ++	++bucketn;
 ++    
 ++    if(bucketn > order)
 ++    {
 ++	btreeDeallocSecArray(cache,array);
 ++	
 ++	leaf->dirty = dirtysave;
 ++	return ajFalse;
 ++    }
 ++    
 ++
 ++    /* Read buckets */
 ++    AJCNEW0(buckets,nkeys+1);
 ++    keylimit = nkeys + 1;
 ++    
 ++    for(i=0;i<keylimit;++i)
 ++	buckets[i] = btreeReadNumBucket(cache,ptrs[i]);
 ++
 ++
 ++    /* Read IDs from all buckets and push to list and sort (increasing id) */
 ++    idlist  = ajListNew();
 ++    
 ++    for(i=0;i<keylimit;++i)
 ++    {
 ++	bentries = buckets[i]->Nentries;
 ++	for(j=0;j<bentries;++j)
 ++	    ajListPush(idlist,(void *)buckets[i]->NumId[j]);
 ++	
 ++	AJFREE(buckets[i]->NumId);
 ++	AJFREE(buckets[i]);
 ++    }
 ++    ajListSort(idlist,btreeNumIdCompare);
 ++    AJFREE(buckets);
 ++
 ++    cbucket = btreeNumBucketNew(maxnperbucket);
 ++    bucketlimit = bucketn - 1;
 ++    
 ++    for(i=0;i<bucketlimit;++i)
 ++    {
 ++	cbucket->Nentries = 0;
 ++
 ++	count = 0;
 ++	while(count!=maxnperbucket)
 ++	{
 ++	    ajListPop(idlist,(void **)&bid);
 ++	    
 ++	    cid = cbucket->NumId[count];
 ++	    cid->dbno = bid->dbno;
 ++	    cid->offset = bid->offset;
 ++	    cid->refoffset = bid->refoffset;
 ++	    
 ++	    ++cbucket->Nentries;
 ++	    ++count;
 ++	    AJFREE(bid);
 ++	}
 ++
 ++
 ++	ajListPeek(idlist,(void **)&bid);
 ++	keys[i] = bid->offset;
 ++
 ++	if(!ptrs[i])
 ++	    ptrs[i] = cache->totsize;
 ++	btreeWriteNumBucket(cache,cbucket,ptrs[i]);
 ++    }
 ++
 ++
 ++    /* Deal with greater-than bucket */
 ++
 ++    cbucket->Nentries = 0;
 ++
 ++    count = 0;
 ++    while(ajListPop(idlist,(void **)&bid))
 ++    {
 ++	cid = cbucket->NumId[count];
 ++	cid->dbno = bid->dbno;
 ++	cid->offset = bid->offset;
 ++	cid->refoffset = bid->refoffset;
 ++	
 ++	++cbucket->Nentries;
 ++	++count;
 ++	AJFREE(bid);
 ++    }
 ++    
 ++    
 ++    if(!ptrs[i])
 ++	ptrs[i] = cache->totsize;
 ++    btreeWriteNumBucket(cache,cbucket,ptrs[i]);
 ++
 ++    cbucket->Nentries = maxnperbucket;
 ++    btreeNumBucketDel(&cbucket);
 ++
 ++    /* Now write out a modified leaf with new keys/ptrs */
 ++
 ++    nkeys = bucketn - 1;
 ++    v = nkeys;
 ++    SBT_NKEYS(lbuf,v);
 ++
 ++    btreeWriteNumNode(cache,leaf,keys,ptrs,nkeys);
 ++
 ++    leaf->dirty = BT_DIRTY;
 ++    if(nodetype == BT_ROOT)
 ++	leaf->dirty = BT_LOCK;
 ++    
 ++    btreeDeallocSecArray(cache,array);
 ++
 ++    ajListDel(&idlist);
 ++
 ++    return ajTrue;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeNumNodeIsFull *****************************************
 ++**
 ++** Tests whether a node is full of keys
 ++**
 ++** @param [r] cache [const AjPBtcache] cache
 ++** @param [u] page [AjPBtpage] original page
 ++**
 ++** @return [AjBool] true if full
 ++** @@
 ++******************************************************************************/
 ++
 ++static AjBool btreeNumNodeIsFull(const AjPBtcache cache, AjPBtpage page)
 ++{
 ++    unsigned char *buf = NULL;
 ++    ajint nkeys = 0;
 ++
 ++    /* ajDebug("In btreeNumNodeIsFull\n"); */
 ++
 ++    buf = page->buf;
 ++    GBT_NKEYS(buf,&nkeys);
 ++
 ++    if(nkeys == cache->sorder - 1)
 ++	return ajTrue;
 ++
 ++    return ajFalse;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeNumInsertNonFull *****************************************
 ++**
 ++** Insert a key into a non-full node
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [u] page [AjPBtpage] original page
 ++** @param [r] key [const ajlong] key to insert
 ++** @param [r] less [ajlong] less-than pointer
 ++** @param [r] greater [ajlong] greater-than pointer
 ++**
 ++** @return [void]
 ++** @@
 ++******************************************************************************/
 ++
 ++static void btreeNumInsertNonFull(AjPBtcache cache, AjPBtpage page,
 ++				  const ajlong key, ajlong less,
 ++				  ajlong greater)
 ++{
 ++    unsigned char *buf = NULL;
 ++    ajlong *karray     = NULL;
 ++    ajlong *parray     = NULL;
 ++    ajint nkeys  = 0;
 ++    ajint order  = 0;
 ++    ajint ipos   = 0;
 ++    ajint i;
 ++    ajint count  = 0;
 ++
 ++    ajlong lv = 0L;
 ++    ajint  v  = 0;
 ++    AjPBtMem array = NULL;    
 ++
 ++    AjPBtpage ppage = NULL;
 ++    ajlong pageno   = 0L;
 ++
 ++    ajint nodetype = 0;
 ++    
 ++    /* ajDebug("In btreeNumInsertNonFull\n"); */
 ++
 ++    order = cache->sorder;
 ++
 ++    array = btreeAllocSecArray(cache);
 ++    karray  = array->overflows;
 ++    parray  = array->parray;
 ++
 ++
 ++    buf = page->buf;
 ++    GBT_NKEYS(buf,&nkeys);
 ++    GBT_NODETYPE(buf,&nodetype);
 ++    
 ++    btreeGetNumKeys(cache,buf,&karray,&parray);
 ++
 ++    i = 0;
 ++    while(i!=nkeys && key >= karray[i])
 ++	++i;
 ++
 ++    ipos = i;
 ++
 ++    count = nkeys - ipos;
 ++    
 ++
 ++    if(ipos == nkeys)
 ++    {
 ++	karray[ipos] = key;
 ++	parray[ipos+1] = greater;
 ++	parray[ipos]   = less;
 ++    }
 ++    else
 ++    {
 ++	parray[nkeys+1] = parray[nkeys];
 ++
 ++	for(i=nkeys-1; count>0; --count, --i)
 ++	{
 ++	    karray[i+1] = karray[i];
 ++	    parray[i+1] = parray[i];
 ++	}
 ++
 ++	karray[ipos] = key;
 ++	parray[ipos] = less;
 ++	parray[ipos+1] = greater;
 ++    }
 ++
 ++    ++nkeys;
 ++    v = nkeys;
 ++    SBT_NKEYS(buf,v);
 ++
 ++    btreeWriteNumNode(cache,page,karray,parray,nkeys);
 ++    if(nodetype == BT_ROOT)
 ++	page->dirty = BT_LOCK;
 ++
 ++    pageno = page->pageno;
 ++    ppage = ajBtreeCacheRead(cache,less);
 ++    lv = pageno;
 ++    SBT_PREV(ppage->buf,lv);
 ++    ppage->dirty = BT_DIRTY;
 ++    ppage = ajBtreeCacheRead(cache,greater);
 ++    lv = pageno;
 ++    SBT_PREV(ppage->buf,lv);
 ++    ppage->dirty = BT_DIRTY;
 ++    
 ++
 ++    btreeDeallocSecArray(cache,array);
 ++
 ++    if(nodetype != BT_ROOT)
 ++	btreeNumKeyShift(cache,page);
 ++
 ++    return;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeNumInsertKey **********************************************
 ++**
 ++** Insert a key into a potentially full node
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [u] page [AjPBtpage] original page
 ++** @param [r] key [const ajlong] key to insert
 ++** @param [r] less [ajlong] less-than pointer
 ++** @param [r] greater [ajlong] greater-than pointer
 ++**
 ++** @return [void]
 ++** @@
 ++******************************************************************************/
 ++
 ++static void btreeNumInsertKey(AjPBtcache cache, AjPBtpage page,
 ++			      const ajlong key, ajlong less, ajlong greater)
 ++{
 ++    unsigned char *lbuf = NULL;
 ++    unsigned char *rbuf = NULL;
 ++    unsigned char *tbuf = NULL;
 ++    ajlong *karray      = NULL;
 ++    ajlong *parray      = NULL;
 ++    ajlong *tkarray     = NULL;
 ++    ajlong *tparray     = NULL;
 ++    ajint nkeys    = 0;
 ++    ajint order    = 0;
 ++    ajint keypos   = 0;
 ++    ajint rkeyno   = 0;
 ++    
 ++    ajint i = 0;
 ++    ajint n = 0;
 ++    
 ++    ajint nodetype  = 0;
 ++    AjPBtpage ipage = NULL;
 ++    AjPBtpage lpage = NULL;
 ++    AjPBtpage rpage = NULL;
 ++    AjPBtpage tpage = NULL;
 ++
 ++    ajlong blockno  = 0L;
 ++    ajlong rblockno = 0L;
 ++    ajlong lblockno = 0L;
 ++    ajlong mediankey  = 0L;
 ++    ajlong medianless = 0L;
 ++    ajlong mediangtr  = 0L;
 ++    ajlong overflow   = 0L;
 ++    ajlong prev       = 0L;
 ++    ajint  totlen     = 0;
 ++    
 ++    ajlong lv = 0L;
 ++    ajint  v  = 0;
 ++    AjPBtMem array  = NULL;    
 ++    AjPBtMem array2 = NULL;    
 ++    
 ++    /* ajDebug("In btreeNumInsertKey\n"); */
 ++
 ++    if(!btreeNumNodeIsFull(cache,page))
 ++    {
 ++	btreeNumInsertNonFull(cache,page,key,less,greater);
 ++	return;
 ++    }
 ++    
 ++    order = cache->sorder;
 ++    lbuf = page->buf;
 ++    GBT_NODETYPE(lbuf,&nodetype);
 ++    page->dirty = BT_LOCK;
 ++
 ++    if(nodetype == BT_ROOT)
 ++    {
 ++	array = btreeAllocSecArray(cache);
 ++	karray  = array->overflows;
 ++	parray  = array->parray;
 ++
 ++	btreeNumSplitRoot(cache);
 ++
 ++	if(page->pageno)
 ++	    page->dirty = BT_DIRTY;
 ++	btreeGetNumKeys(cache,lbuf,&karray,&parray);
 ++
 ++	if(key < karray[0])
 ++	    blockno = parray[0];
 ++	else
 ++	    blockno = parray[1];
 ++	ipage = ajBtreeCacheRead(cache,blockno);
 ++	btreeNumInsertNonFull(cache,ipage,key,less,greater);
 ++
 ++	btreeDeallocSecArray(cache,array);
 ++	return;
 ++    }
 ++
 ++
 ++    array = btreeAllocSecArray(cache);
 ++    karray  = array->overflows;
 ++    parray  = array->parray;
 ++    
 ++    array2 = btreeAllocSecArray(cache);
 ++    tkarray  = array2->overflows;
 ++    tparray  = array2->parray;
 ++
 ++    
 ++    lpage = page;
 ++    lbuf = lpage->buf;
 ++    
 ++    btreeGetNumKeys(cache,lbuf,&karray,&parray);
 ++
 ++    GBT_BLOCKNUMBER(lbuf,&lblockno);
 ++    rblockno = cache->totsize;
 ++    rpage = ajBtreeCacheWrite(cache,rblockno);
 ++    rpage->dirty = BT_LOCK;
 ++    rpage->pageno = cache->totsize;
 ++    cache->totsize += cache->pagesize;
 ++    rbuf = rpage->buf;
 ++    lv = rblockno;
 ++    SBT_BLOCKNUMBER(rbuf,lv);
 ++
 ++    
 ++    GBT_PREV(lbuf,&prev);
 ++    lv = prev;
 ++    SBT_PREV(rbuf,lv);
 ++
 ++    nkeys = order - 1;
 ++    keypos = nkeys / 2;
 ++    if(!(nkeys % 2))
 ++	--keypos;
 ++
 ++    mediankey = karray[keypos];
 ++    medianless = lblockno;
 ++    mediangtr  = rblockno;
 ++
 ++
 ++    GBT_NODETYPE(lbuf,&nodetype);
 ++    v = nodetype;
 ++    SBT_NODETYPE(rbuf,v);
 ++    lv = overflow;
 ++    SBT_OVERFLOW(rbuf,lv);
 ++
 ++
 ++    totlen = 0;
 ++    for(i=0;i<keypos;++i)
 ++    {
 ++	tkarray[i] = karray[i];
 ++	tparray[i] = parray[i];
 ++    }
 ++    tparray[i] = parray[i];
 ++
 ++    n = i;
 ++    v = n;
 ++    SBT_NKEYS(lbuf,v);
 ++    btreeWriteNumNode(cache,lpage,tkarray,tparray,i);
 ++
 ++
 ++
 ++    for(i=0;i<n+1;++i)
 ++    {
 ++	tpage = ajBtreeCacheRead(cache,tparray[i]);
 ++	tbuf = tpage->buf;
 ++	lv = lblockno;
 ++	SBT_PREV(tbuf,lv);
 ++	tpage->dirty = BT_DIRTY;
 ++    }
 ++
 ++
 ++    totlen = 0;
 ++    for(i=keypos+1;i<nkeys;++i)
 ++    {
 ++	tkarray[i-(keypos+1)] = karray[i];
 ++	tparray[i-(keypos+1)] = parray[i];
 ++    }
 ++    tparray[i-(keypos+1)] = parray[i];
 ++
 ++    rkeyno = (nkeys-keypos) - 1;
 ++    v = rkeyno;
 ++    SBT_NKEYS(rbuf,v);
 ++    rpage->dirty = BT_DIRTY;
 ++    btreeWriteNumNode(cache,rpage,tkarray,tparray,rkeyno);
 ++
 ++
 ++    for(i=0;i<rkeyno+1;++i)
 ++    {
 ++	tpage = ajBtreeCacheRead(cache,tparray[i]);
 ++	tbuf = tpage->buf;
 ++	lv = rblockno;
 ++	SBT_PREV(tbuf,lv);
 ++	tpage->dirty = BT_DIRTY;
 ++    }
 ++
 ++
 ++    ipage = rpage;
 ++    if(key < mediankey)
 ++	ipage = lpage;
 ++
 ++    btreeNumInsertNonFull(cache,ipage,key,less,greater);
 ++
 ++
 ++    btreeDeallocSecArray(cache,array);
 ++    btreeDeallocSecArray(cache,array2);
 ++
 ++    ipage = ajBtreeCacheRead(cache,prev);
 ++
 ++    btreeNumInsertKey(cache,ipage,mediankey,medianless,mediangtr);
 ++
 ++    return;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeNumSplitRoot *****************************************
 ++**
 ++** Split s secondary root node
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++**
 ++** @return [void]
 ++** @@
 ++******************************************************************************/
 ++
 ++static void btreeNumSplitRoot(AjPBtcache cache)
 ++{
 ++    AjPBtpage rootpage = NULL;
 ++    AjPBtpage rpage    = NULL;
 ++    AjPBtpage lpage    = NULL;
 ++    AjPBtpage tpage    = NULL;
 ++
 ++    ajlong *karray  = NULL;
 ++    ajlong *tkarray = NULL;
 ++    ajlong *parray  = NULL;
 ++    ajlong *tparray = NULL;
 ++
 ++    ajint order  = 0;
 ++    ajint nkeys  = 0;
 ++    ajint keypos = 0;
 ++    
 ++    ajlong rblockno = 0L;
 ++    ajlong lblockno = 0L;
 ++
 ++    ajlong right;
 ++    
 ++    ajint  i;
 ++
 ++    unsigned char *rootbuf = NULL;
 ++    unsigned char *rbuf    = NULL;
 ++    unsigned char *lbuf    = NULL;
 ++    unsigned char *tbuf    = NULL;
 ++    
 ++    ajint nodetype  = 0;
 ++    ajlong overflow = 0L;
 ++    ajlong zero     = 0L;
 ++    ajint rkeyno    = 0;
 ++    ajint n         = 0;
 ++
 ++    ajlong lv = 0L;
 ++    ajint  v  = 0;
 ++
 ++    AjPBtMem array  = NULL;    
 ++    AjPBtMem array2 = NULL;    
 ++    
 ++    
 ++    /* ajDebug("In btreeNumSplitRoot\n"); */
 ++
 ++    order = cache->sorder;
 ++
 ++    array = btreeAllocSecArray(cache);
 ++    karray  = array->overflows;
 ++    parray  = array->parray;
 ++    
 ++    array2 = btreeAllocSecArray(cache);
 ++    tkarray  = array2->overflows;
 ++    tparray  = array2->parray;
 ++
 ++
 ++    rootpage = btreeCacheLocate(cache,cache->secrootblock);
 ++    rootbuf = rootpage->buf;
 ++
 ++    nkeys = order - 1;
 ++
 ++    keypos = nkeys / 2;
 ++    if(!(nkeys % 2))
 ++	--keypos;
 ++
 ++
 ++    rblockno = cache->totsize;
 ++    rpage = ajBtreeCacheWrite(cache,rblockno);
 ++    rpage->pageno = cache->totsize;
 ++    cache->totsize += cache->pagesize;
 ++    rpage->dirty = BT_LOCK;
 ++    
 ++    lblockno = cache->totsize;
 ++    lpage = ajBtreeCacheWrite(cache,lblockno);
 ++    lpage->pageno = cache->totsize;
 ++    cache->totsize += cache->pagesize;
 ++
 ++    lv = rblockno;
 ++    SBT_BLOCKNUMBER(rpage->buf,lv);
 ++    lv = lblockno;
 ++    SBT_BLOCKNUMBER(lpage->buf,lv);
 ++
 ++    /* Comment this next block out after the beta test */
 ++    if(!cache->slevel)
 ++    {
 ++	fprintf(stderr,"btreeSplitRootSec: Shouldn't get here\n");
 ++	exit(0);
 ++	lv = zero;
 ++	SBT_LEFT(lpage->buf,lv);
 ++	lv = rblockno;
 ++	SBT_RIGHT(lpage->buf,lv);
 ++	lv = lblockno;
 ++	SBT_LEFT(rpage->buf,lv);
 ++	lv = zero;
 ++	SBT_RIGHT(rpage->buf,lv);
 ++    }
 ++
 ++    btreeGetNumKeys(cache,rootbuf,&karray,&parray);
 ++
 ++    /* Get key for root node and write new root node */
 ++    tkarray[0] = karray[keypos];
 ++    tparray[0] = lblockno;
 ++    tparray[1] = rblockno;
 ++    
 ++
 ++    n = 1;
 ++    v = n;
 ++    SBT_NKEYS(rootbuf,v);
 ++    btreeWriteNumNode(cache,rootpage,tkarray,tparray,1);
 ++    right = (ajlong)(cache->slevel + 1);
 ++    SBT_RIGHT(rootbuf,right);
 ++
 ++    rootpage->dirty = BT_LOCK;
 ++
 ++    rbuf = rpage->buf;
 ++    lbuf = lpage->buf;
 ++    
 ++    if(cache->slevel)
 ++	nodetype = BT_INTERNAL;
 ++    else
 ++	nodetype = BT_LEAF;
 ++
 ++    v = nodetype;
 ++    SBT_NODETYPE(rbuf,v);
 ++    v = nodetype;
 ++    SBT_NODETYPE(lbuf,v);
 ++    lv = overflow;
 ++    SBT_OVERFLOW(rbuf,lv);
 ++    lv = cache->secrootblock;
 ++    SBT_PREV(rbuf,lv);
 ++    lv = overflow;
 ++    SBT_OVERFLOW(lbuf,lv);
 ++    lv = cache->secrootblock;
 ++    SBT_PREV(lbuf,lv);
 ++
 ++    for(i=0;i<keypos;++i)
 ++    {
 ++	tkarray[i] = karray[i];
 ++	tparray[i] = parray[i];
 ++    }
 ++    tparray[i] = parray[i];
 ++
 ++    n = i;
 ++    v = n;
 ++    SBT_NKEYS(lbuf,v);
 ++    btreeWriteNumNode(cache,lpage,tkarray,tparray,i);
 ++
 ++    for(i=0;i<n+1;++i)
 ++    {
 ++	tpage = ajBtreeCacheRead(cache,tparray[i]);
 ++	tbuf = tpage->buf;
 ++	lv = lblockno;
 ++	SBT_PREV(tbuf,lv);
 ++	tpage->dirty = BT_DIRTY;
 ++    }
 ++
 ++    for(i=keypos+1;i<nkeys;++i)
 ++    {
 ++	tkarray[i-(keypos+1)] = karray[i];
 ++	tparray[i-(keypos+1)] = parray[i];
 ++    }
 ++    tparray[i-(keypos+1)] = parray[i];
 ++
 ++    rkeyno = (nkeys-keypos) - 1;
 ++    v = rkeyno;
 ++    SBT_NKEYS(rbuf,v);
 ++    rpage->dirty = BT_DIRTY;
 ++    btreeWriteNumNode(cache,rpage,tkarray,tparray,rkeyno);
 ++
 ++    for(i=0;i<rkeyno+1;++i)
 ++    {
 ++	tpage = ajBtreeCacheRead(cache,tparray[i]);
 ++	tbuf = tpage->buf;
 ++	lv = rblockno;
 ++	SBT_PREV(tbuf,lv);
 ++	tpage->dirty = BT_DIRTY;
 ++    }
 ++
 ++
 ++    ++cache->slevel;
 ++
 ++    btreeDeallocSecArray(cache,array);
 ++    btreeDeallocSecArray(cache,array2);
 ++    
 ++    return;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeNumKeyShift ********************************************
 ++**
 ++** Rebalance Nodes on insertion
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [u] tpage [AjPBtpage] page
 ++**
 ++** @return [void]
 ++** @@
 ++******************************************************************************/
 ++
 ++static void btreeNumKeyShift(AjPBtcache cache, AjPBtpage tpage)
 ++{
 ++    unsigned char *tbuf = NULL;
 ++    unsigned char *pbuf = NULL;
 ++    unsigned char *sbuf = NULL;
 ++    unsigned char *buf  = NULL;
 ++
 ++    AjPBtpage ppage = NULL;
 ++    AjPBtpage spage = NULL;
 ++    AjPBtpage page  = NULL;
 ++
 ++    ajint tkeys = 0;
 ++    ajint pkeys = 0;
 ++    ajint skeys = 0;
 ++    ajint order = 0;
 ++    
 ++    ajint i;
 ++    
 ++    ajlong parent  = 0L;
 ++    
 ++    ajlong *kTarray = NULL;
 ++    ajlong *kParray = NULL;
 ++    ajlong *kSarray = NULL;
 ++    ajlong *pTarray = NULL;
 ++    ajlong *pParray = NULL;
 ++    ajlong *pSarray = NULL;
 ++
 ++    ajint pkeypos = 0;
 ++    ajint minsize = 0;
 ++
 ++    ajlong lv = 0L;
 ++
 ++    AjPBtMem array  = NULL;    
 ++    AjPBtMem array2 = NULL;    
 ++    AjPBtMem array3 = NULL;    
 ++    
 ++    /* ajDebug("In btreeNumKeyShift\n"); */
 ++    
 ++    tbuf = tpage->buf;
 ++
 ++    GBT_PREV(tbuf,&parent);
 ++    GBT_NKEYS(tbuf,&tkeys);
 ++
 ++    order = cache->sorder;
 ++    minsize = order / 2;
 ++    if(order % 2)
 ++	++minsize;
 ++
 ++    if(tkeys <= minsize)
 ++	return;
 ++
 ++    
 ++    ppage = ajBtreeCacheRead(cache,parent);
 ++    pbuf = ppage->buf;
 ++    GBT_NKEYS(pbuf,&pkeys);
 ++    
 ++    array = btreeAllocSecArray(cache);
 ++    kParray  = array->overflows;
 ++    pParray  = array->parray;
 ++    
 ++    array2 = btreeAllocSecArray(cache);
 ++    kSarray  = array2->overflows;
 ++    pSarray  = array2->parray;
 ++
 ++    array3 = btreeAllocSecArray(cache);
 ++    kTarray  = array3->overflows;
 ++    pTarray  = array3->parray;
 ++
 ++
 ++    btreeGetNumKeys(cache,tbuf,&kTarray,&pTarray);
 ++    GBT_NKEYS(tbuf,&tkeys);
 ++
 ++
 ++    btreeGetNumKeys(cache,pbuf,&kParray,&pParray);
 ++    i=0;
 ++    while(pParray[i] != tpage->pageno)
 ++	++i;
 ++
 ++    if(i) /* There is another leaf to the left */
 ++    {
 ++	pkeypos = i-1;
 ++	spage = ajBtreeCacheRead(cache,pParray[pkeypos]);
 ++	sbuf = spage->buf;
 ++	GBT_NKEYS(sbuf,&skeys);
 ++	
 ++    }
 ++
 ++    if(i && skeys != order-1) /* There is space in the left leaf */
 ++    {
 ++	if(skeys)
 ++	    btreeGetNumKeys(cache,sbuf,&kSarray,&pSarray);
 ++
 ++	kSarray[skeys] = kParray[pkeypos];
 ++	pSarray[skeys+1] = pTarray[0];
 ++	++skeys;
 ++	--tkeys;
 ++	kParray[pkeypos] = kTarray[0];
 ++	for(i=0;i<tkeys;++i)
 ++	{
 ++	    kTarray[i] = kTarray[i+1];
 ++	    pTarray[i] = pTarray[i+1];
 ++	}
 ++	pTarray[i] = pTarray[i+1];
 ++	pTarray[i+1] = 0L;
 ++	
 ++	btreeWriteNumNode(cache,spage,kSarray,pSarray,skeys);
 ++	btreeWriteNumNode(cache,tpage,kTarray,pTarray,tkeys);
 ++	btreeWriteNumNode(cache,ppage,kParray,pParray,pkeys);
 ++	if(!ppage->pageno)
 ++	    ppage->dirty = BT_LOCK;
 ++
 ++	page = ajBtreeCacheRead(cache,pSarray[skeys]);
 ++	buf = page->buf;
 ++	lv = spage->pageno;
 ++	SBT_PREV(buf,lv);
 ++	page->dirty = BT_DIRTY;
 ++
 ++
 ++	btreeDeallocSecArray(cache,array);
 ++	btreeDeallocSecArray(cache,array2);
 ++	btreeDeallocSecArray(cache,array3);
 ++
 ++	return;
 ++    }
 ++
 ++
 ++
 ++    if(i != pkeys)	/* There is a right node */
 ++    {
 ++	pkeypos = i;
 ++	spage = ajBtreeCacheRead(cache,pParray[pkeypos+1]);
 ++	sbuf = spage->buf;
 ++	GBT_NKEYS(sbuf,&skeys);
 ++    }
 ++
 ++
 ++    if(i != pkeys && skeys != order-1) /* Space in the right node */
 ++    {
 ++	if(skeys)
 ++	    btreeGetNumKeys(cache,sbuf,&kSarray,&pSarray);
 ++
 ++	pSarray[skeys+1] = pSarray[skeys];
 ++	for(i=skeys-1;i>-1;--i)
 ++	{
 ++	    kSarray[i+1] = kSarray[i];
 ++	    pSarray[i+1] = pSarray[i];
 ++	}
 ++	kSarray[0] = kParray[pkeypos];
 ++	pSarray[0] = pTarray[tkeys];
 ++	kParray[pkeypos] = kTarray[tkeys-1];
 ++	++skeys;
 ++	--tkeys;
 ++	pTarray[tkeys+1] = 0L;
 ++	
 ++	btreeWriteNumNode(cache,spage,kSarray,pSarray,skeys);
 ++	btreeWriteNumNode(cache,tpage,kTarray,pTarray,tkeys);
 ++	btreeWriteNumNode(cache,ppage,kParray,pParray,pkeys);
 ++	if(!ppage->pageno)
 ++	    ppage->dirty = BT_LOCK;
 ++
 ++	page = ajBtreeCacheRead(cache,pSarray[0]);
 ++	buf = page->buf;
 ++	lv = spage->pageno;
 ++	SBT_PREV(buf,lv);
 ++	page->dirty = BT_DIRTY;
 ++
 ++	btreeDeallocSecArray(cache,array);
 ++	btreeDeallocSecArray(cache,array2);
 ++	btreeDeallocSecArray(cache,array3);
 ++
 ++	return;
 ++    }
 ++
 ++
 ++    btreeDeallocSecArray(cache,array);
 ++    btreeDeallocSecArray(cache,array2);
 ++    btreeDeallocSecArray(cache,array3);
 ++
 ++    return;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeNumInsertShift ********************************************
 ++**
 ++** Rebalance buckets on insertion
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [u] retpage [AjPBtpage*] page
 ++** @param [r] key [const ajlong] key
 ++**
 ++** @return [ajlong] bucket block or 0L if shift not posible 
 ++** @@
 ++******************************************************************************/
 ++
 ++static ajlong btreeNumInsertShift(AjPBtcache cache, AjPBtpage *retpage,
 ++				  ajlong key)
 ++{
 ++    unsigned char *tbuf = NULL;
 ++    unsigned char *pbuf = NULL;
 ++    unsigned char *sbuf = NULL;
 ++
 ++    AjPBtpage ppage = NULL;
 ++    AjPBtpage spage = NULL;
 ++    AjPBtpage tpage = NULL;
 ++
 ++    ajint tkeys = 0;
 ++    ajint pkeys = 0;
 ++    ajint skeys = 0;
 ++    ajint order = 0;
 ++    
 ++    ajint i;
 ++    ajint n;
 ++    
 ++    ajlong parent  = 0L;
 ++    ajlong blockno = 0L;
 ++    
 ++    ajlong *kTarray = NULL;
 ++    ajlong *kParray = NULL;
 ++    ajlong *kSarray = NULL;
 ++    ajlong *pTarray = NULL;
 ++    ajlong *pParray = NULL;
 ++    ajlong *pSarray = NULL;
 ++
 ++    ajlong *karray = NULL;
 ++    ajlong *parray = NULL;
 ++
 ++    ajint ppos    = 0;
 ++    ajint pkeypos = 0;
 ++    ajint minsize = 0;
 ++
 ++    AjPBtMem array  = NULL;    
 ++    AjPBtMem array2 = NULL;    
 ++    AjPBtMem array3 = NULL;    
 ++
 ++
 ++    
 ++    /* ajDebug("In btreeNumInsertShift\n"); */
 ++
 ++
 ++    tpage = *retpage;
 ++
 ++    tbuf = tpage->buf;
 ++
 ++    GBT_PREV(tbuf,&parent);
 ++    GBT_NKEYS(tbuf,&tkeys);
 ++
 ++
 ++    order = cache->sorder;
 ++    minsize = order / 2;
 ++    if(order % 2)
 ++	++minsize;
 ++
 ++    if(tkeys <= minsize)
 ++	return 0L;
 ++
 ++    ppage = ajBtreeCacheRead(cache,parent);
 ++
 ++
 ++    
 ++    pbuf = ppage->buf;
 ++    GBT_NKEYS(pbuf,&pkeys);
 ++
 ++    
 ++    array = btreeAllocSecArray(cache);
 ++    kParray  = array->overflows;
 ++    pParray  = array->parray;
 ++    
 ++    array2 = btreeAllocSecArray(cache);
 ++    kSarray  = array2->overflows;
 ++    pSarray  = array2->parray;
 ++
 ++    array3 = btreeAllocSecArray(cache);
 ++    kTarray  = array3->overflows;
 ++    pTarray  = array3->parray;
 ++
 ++
 ++    btreeGetNumKeys(cache,pbuf,&kParray,&pParray);
 ++
 ++    i=0;
 ++    while(i!=pkeys && key >= kParray[i])
 ++	++i;
 ++    pkeypos = i;
 ++    
 ++    if(i==pkeys)
 ++    {
 ++	if(key < kParray[i-1])
 ++	    ppos = i-1;
 ++	else
 ++	    ppos = i;
 ++    }
 ++    else
 ++	ppos = i;
 ++
 ++    
 ++    if(ppos) /* There is another leaf to the left */
 ++    {
 ++	spage = ajBtreeCacheRead(cache,pParray[ppos-1]);
 ++	sbuf = spage->buf;
 ++	GBT_NKEYS(sbuf,&skeys);
 ++    }
 ++
 ++    if(i && skeys != order-1) /* There is space in the left leaf */
 ++    {
 ++	/* ajDebug("Left shift\n"); */
 ++	btreeGetNumKeys(cache,tbuf,&kTarray,&pTarray);
 ++	if(skeys)
 ++	    btreeGetNumKeys(cache,sbuf,&kSarray,&pSarray);
 ++
 ++	i = 0;
 ++	while(pParray[i] != tpage->pageno)
 ++	    ++i;
 ++	--i;
 ++
 ++	pkeypos = i;
 ++
 ++	kSarray[skeys] = kParray[pkeypos];
 ++	pSarray[skeys+1] = pTarray[0];
 ++	++skeys;
 ++	--tkeys;
 ++	kParray[pkeypos] = kTarray[0];
 ++	for(i=0;i<tkeys;++i)
 ++	{
 ++	    kTarray[i] = kTarray[i+1];
 ++	    pTarray[i] = pTarray[i+1];
 ++	}
 ++	pTarray[i] = pTarray[i+1];
 ++	pTarray[i+1] = 0L;
 ++	
 ++	btreeWriteNumNode(cache,spage,kSarray,pSarray,skeys);
 ++	btreeWriteNumNode(cache,tpage,kTarray,pTarray,tkeys);
 ++	btreeWriteNumNode(cache,ppage,kParray,pParray,pkeys);
 ++	if(!ppage->pageno)
 ++	    ppage->dirty = BT_LOCK;
 ++
 ++	i = 0;
 ++	while(i!=pkeys && key >= kParray[i])
 ++	    ++i;
 ++	if(i==pkeys)
 ++	{
 ++	    if(key < kParray[i-1])
 ++		blockno = pParray[i-1];
 ++	    else
 ++		blockno = pParray[i];
 ++	}
 ++	else
 ++	    blockno = pParray[i];
 ++
 ++	if(blockno == spage->pageno)
 ++	{
 ++	    *retpage = spage;
 ++	    karray = kSarray;
 ++	    parray = pSarray;
 ++	    n = skeys;
 ++	}
 ++	else
 ++	{
 ++	    karray = kTarray;
 ++	    parray = pTarray;
 ++	    n = tkeys;
 ++	}
 ++	
 ++
 ++	i = 0;
 ++	while(i!=n && key >= karray[i])
 ++	    ++i;
 ++	if(i==n)
 ++	{
 ++	    if(key < karray[i-1])
 ++		blockno = parray[i-1];
 ++	    else
 ++		blockno = parray[i];
 ++	}
 ++	else
 ++	    blockno = parray[i];
 ++
 ++	btreeDeallocSecArray(cache,array);
 ++	btreeDeallocSecArray(cache,array2);
 ++	btreeDeallocSecArray(cache,array3);
 ++
 ++	/* ajDebug("... returns blockno (a) %Ld\n",blockno); */
 ++
 ++	return blockno;
 ++    }
 ++    
 ++
 ++    if(ppos != pkeys)	/* There is a right node */
 ++    {
 ++	spage = ajBtreeCacheRead(cache,pParray[ppos+1]);
 ++	sbuf = spage->buf;
 ++	GBT_NKEYS(sbuf,&skeys);
 ++    }
 ++
 ++
 ++    /* Space in the right leaf */
 ++    if(ppos != pkeys && skeys != order-1)
 ++    {
 ++	/* ajDebug("Right shift\n"); */
 ++	btreeGetNumKeys(cache,tbuf,&kTarray,&pTarray);
 ++	btreeGetNumKeys(cache,sbuf,&kSarray,&pSarray);
 ++
 ++	i = 0;
 ++	while(pParray[i] != tpage->pageno)
 ++	    ++i;
 ++	pkeypos = i;
 ++	
 ++	pSarray[skeys+1] = pSarray[skeys];
 ++	for(i=skeys-1;i>-1;--i)
 ++	{
 ++	    kSarray[i+1] = kSarray[i];
 ++	    pSarray[i+1] = pSarray[i];
 ++	}
 ++	kSarray[0] = kParray[pkeypos];
 ++	pSarray[0] = pTarray[tkeys];
 ++	kParray[pkeypos] = kTarray[tkeys-1];
 ++	++skeys;
 ++	--tkeys;
 ++	pTarray[tkeys+1] = 0L;
 ++	
 ++	btreeWriteNumNode(cache,spage,kSarray,pSarray,skeys);
 ++	btreeWriteNumNode(cache,tpage,kTarray,pTarray,tkeys);
 ++	btreeWriteNumNode(cache,ppage,kParray,pParray,pkeys);
 ++	if(!ppage->pageno)
 ++	    ppage->dirty = BT_LOCK;
 ++
 ++	i = 0;
 ++	while(i!=pkeys && key >= kParray[i])
 ++	    ++i;
 ++	if(i==pkeys)
 ++	{
 ++	    if(key < kParray[i-1])
 ++		blockno = pParray[i-1];
 ++	    else
 ++		blockno = pParray[i];
 ++	}
 ++	else
 ++	    blockno = pParray[i];
 ++
 ++	if(blockno == spage->pageno)
 ++	{
 ++	    *retpage = spage;
 ++	    karray = kSarray;
 ++	    parray = pSarray;
 ++	    n = skeys;
 ++	}
 ++	else
 ++	{
 ++	    karray = kTarray;
 ++	    parray = pTarray;
 ++	    n = tkeys;
 ++	}
 ++	
 ++	i = 0;
 ++	while(i!=n && key >= karray[i])
 ++	    ++i;
 ++	if(i==n)
 ++	{
 ++	    if(key < karray[i-1])
 ++		blockno = parray[i-1];
 ++	    else
 ++		blockno = parray[i];
 ++	}
 ++	else
 ++	    blockno = parray[i];
 ++
 ++	btreeDeallocSecArray(cache,array);
 ++	btreeDeallocSecArray(cache,array2);
 ++	btreeDeallocSecArray(cache,array3);
 ++
 ++	/* ajDebug("... returns blockno (b) %Ld\n",blockno); */
 ++	
 ++	return blockno;
 ++    }
 ++
 ++
 ++    btreeDeallocSecArray(cache,array);
 ++    btreeDeallocSecArray(cache,array2);
 ++    btreeDeallocSecArray(cache,array3);
 ++
 ++    /* ajDebug("... returns 0L\n"); */
 ++
 ++    return 0L;
 ++}
 ++
 ++
 ++
 ++
 ++void ajBtreeInsertNum(AjPBtcache cache, AjPBtNumId num, AjPBtpage page)
 ++{
 ++    unsigned char *buf = NULL;
 ++    ajint order;
 ++    AjPBtMem array = NULL;
 ++    ajlong key;
 ++    AjPBtpage spage  = NULL;
 ++    AjPBtpage parent = NULL;
 ++    ajint nkeys = 0;
 ++    ajint nodetype = 0;
 ++    ajlong *karray = NULL;
 ++    ajlong *parray = NULL;
 ++    AjPNumBucket lbucket = NULL;
 ++    AjPNumBucket rbucket = NULL;
 ++    ajlong lblockno;
 ++    ajlong rblockno;
 ++    ajlong blockno;
 ++    ajlong shift;
 ++    ajint n;
 ++    ajint i;
 ++
 ++    /* ajDebug("In ajBtreeInsertNum\n"); */
 ++
 ++    key = num->offset;
 ++
 ++    spage = ajBtreeNumFindInsert(cache,key);
 ++    buf = spage->buf;
 ++
 ++    GBT_NKEYS(buf,&nkeys);
 ++    GBT_NODETYPE(buf,&nodetype);
 ++
 ++    order = cache->sorder;
 ++
 ++    array = btreeAllocSecArray(cache);
 ++    karray = array->overflows;
 ++    parray = array->parray;
 ++
 ++    if(!nkeys)
 ++    {
 ++	lbucket = btreeNumBucketNew(0);
 ++	rbucket = btreeNumBucketNew(0);
 ++
 ++	lblockno = cache->totsize;
 ++	btreeWriteNumBucket(cache,lbucket,lblockno);
 ++	rblockno = cache->totsize;
 ++	btreeWriteNumBucket(cache,rbucket,rblockno);
 ++
 ++	parray[0] = lblockno;
 ++	parray[1] = rblockno;
 ++	karray[0] = key;
 ++
 ++	btreeWriteNumNode(cache,spage,karray,parray,1);
 ++
 ++	btreeNumBucketDel(&lbucket);
 ++	btreeNumBucketDel(&rbucket);
 ++
 ++	btreeAddToNumBucket(cache,rblockno,num);
 ++
 ++	btreeDeallocSecArray(cache,array);
 ++
 ++	return;
 ++    }
 ++
 ++
 ++    btreeGetNumKeys(cache,buf,&karray,&parray);
 ++    i=0;
 ++    while(i != nkeys && key >= karray[i])
 ++	++i;
 ++    if(i==nkeys)
 ++    {
 ++	if(key < karray[i-1])
 ++	    blockno = parray[i-1];
 ++	else
 ++	    blockno = parray[i];
 ++    }
 ++    else
 ++	blockno = parray[i];
 ++
 ++    if(nodetype != BT_ROOT)
 ++	if((shift = btreeNumInsertShift(cache,&spage,key)))
 ++	    blockno = shift;
 ++
 ++
 ++    buf = spage->buf;
 ++    n = btreeNumInNumBucket(cache,blockno);
 ++
 ++    if(n == cache->snperbucket)
 ++    {
 ++	if(btreeReorderNumBuckets(cache,spage))
 ++	{
 ++	    GBT_NKEYS(buf,&nkeys);
 ++	    btreeGetNumKeys(cache,buf,&karray,&parray);
 ++	    i=0;
 ++	    while(i != nkeys && key >= karray[i])
 ++		++i;
 ++	    if(i==nkeys)
 ++	    {
 ++		if(key < karray[i-1])
 ++		    blockno = parray[i-1];
 ++		else
 ++		    blockno = parray[i];
 ++	    }
 ++	    else
 ++		blockno = parray[i];
 ++	}
 ++	else
 ++	{
 ++	    parent = btreeNumSplitLeaf(cache,spage);
 ++	    spage = ajBtreeNumFindInsert(cache,key);
 ++	    buf = spage->buf;
 ++
 ++	    btreeGetNumKeys(cache,buf,&karray,&parray);
 ++	    GBT_NKEYS(buf,&nkeys);
 ++	
 ++	    i=0;
 ++	    while(i != nkeys && key >= karray[i])
 ++		++i;
 ++	    if(i==nkeys)
 ++	    {
 ++		if(key < karray[i-1])
 ++		    blockno = parray[i-1];
 ++		else
 ++		    blockno = parray[i];
 ++	    }
 ++	    else
 ++		blockno = parray[i];
 ++	}
 ++    }
 ++
 ++    btreeAddToNumBucket(cache,blockno,num);
 ++
 ++    btreeDeallocSecArray(cache,array);
 ++
 ++    ++cache->count;
 ++
 ++    return;
 ++}
 ++
 ++
 ++
 ++
 ++/* @funcstatic btreeNumSplitLeaf *********************************************
 ++**
 ++** Split a leaf and propagate up if necessary
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [u] spage [AjPBtpage] page
 ++**
 ++** @return [AjPBtpage] pointer to a parent page
 ++** @@
 ++******************************************************************************/
 ++
 ++static AjPBtpage btreeNumSplitLeaf(AjPBtcache cache, AjPBtpage spage)
 ++{
 ++    ajint nkeys     = 0;
 ++    ajint order     = 0;
 ++    ajint totalkeys = 0;
 ++    ajint bentries  = 0;
 ++    ajint keylimit  = 0;
 ++    ajint nodetype  = 0;
 ++
 ++    ajint rootnodetype = 0;
 ++    
 ++    ajint i;
 ++    ajint j;
 ++    
 ++    AjPBtpage lpage = NULL;
 ++    AjPBtpage rpage = NULL;
 ++    AjPBtpage page  = NULL;
 ++    
 ++    ajlong mediankey  = 0L;
 ++    ajlong mediangtr  = 0L;
 ++    ajlong medianless = 0L;
 ++
 ++    AjPBtNumId bid = NULL;
 ++
 ++    unsigned char *buf  = NULL;
 ++    unsigned char *lbuf = NULL;
 ++    unsigned char *rbuf = NULL;
 ++
 ++    AjPList idlist = NULL;
 ++
 ++    AjPNumBucket *buckets = NULL;
 ++    AjPNumBucket cbucket  = NULL;
 ++    
 ++    ajlong *karray = NULL;
 ++    ajlong *parray = NULL;
 ++    
 ++    ajint keypos = 0;
 ++    ajint lno    = 0;
 ++    ajint rno    = 0;
 ++
 ++    ajint bucketlimit   = 0;
 ++    ajint maxnperbucket = 0;
 ++    ajint nperbucket    = 0;
 ++    ajint bucketn       = 0;
 ++    ajint count         = 0;
 ++    
 ++    ajlong lblockno = 0L;
 ++    ajlong rblockno = 0L;
 ++    ajlong overflow = 0L;
 ++    ajlong prevsave = 0L;
 ++    
 ++    ajlong zero = 0L;
 ++    ajlong join = 0L;
 ++    
 ++    ajlong lv = 0L;
 ++    ajint  v  = 0;
 ++
 ++    AjPBtMem array = NULL;
 ++    
 ++    
 ++    /* ajDebug("In btreeNumSplitLeaf\n"); */
 ++
 ++    order = cache->sorder;
 ++    nperbucket = cache->snperbucket;
 ++
 ++    array = btreeAllocSecArray(cache);
 ++    karray = array->overflows;
 ++    parray = array->parray;
 ++
 ++    buf = spage->buf;
 ++    lbuf = buf;
 ++
 ++    GBT_NKEYS(buf,&nkeys);
 ++    GBT_NODETYPE(buf,&rootnodetype);
 ++
 ++    if(rootnodetype == BT_ROOT)
 ++    {
 ++	/* ajDebug("Root leaf splitting\n"); */
 ++	lblockno = cache->totsize;
 ++	lpage = ajBtreeCacheWrite(cache,lblockno);
 ++	lpage->pageno = cache->totsize;
 ++	cache->totsize += cache->pagesize;
 ++	lbuf = lpage->buf;
 ++	lv = cache->secrootblock;
 ++	SBT_PREV(lbuf,lv);
 ++    }
 ++    else
 ++    {
 ++	lblockno = spage->pageno;
 ++	lpage = spage;
 ++    }
 ++
 ++    lpage->dirty = BT_LOCK;
 ++
 ++    rblockno = cache->totsize;
 ++    rpage = ajBtreeCacheWrite(cache,rblockno);
 ++    rpage->pageno = cache->totsize;
 ++    cache->totsize += cache->pagesize;
 ++    rbuf = rpage->buf;
 ++    rpage->dirty = BT_LOCK;
 ++
 ++    if(rootnodetype == BT_ROOT)
 ++    {
 ++	lv = zero;
 ++	SBT_RIGHT(rbuf,lv);
 ++	lv = zero;
 ++	SBT_LEFT(lbuf,lv);
 ++    }
 ++    else
 ++    {
 ++	GBT_RIGHT(lbuf,&join);
 ++	lv = join;
 ++	SBT_RIGHT(rbuf,lv);
 ++    }
 ++    lv = lblockno;
 ++    SBT_LEFT(rbuf,lv);
 ++    lv = rblockno;
 ++    SBT_RIGHT(lbuf,lv);
 ++
 ++
 ++    btreeGetNumKeys(cache,buf,&karray,&parray);
 ++
 ++
 ++    keylimit = nkeys+1;
 ++    AJCNEW0(buckets,keylimit);
 ++    for(i=0;i<keylimit;++i)
 ++	buckets[i] = btreeReadNumBucket(cache,parray[i]);
 ++
 ++    idlist = ajListNew();
 ++    for(i=0;i<keylimit;++i)
 ++    {
 ++	bentries = buckets[i]->Nentries;
 ++	for(j=0;j<bentries;++j)
 ++	    ajListPush(idlist,(void *)buckets[i]->NumId[j]);
 ++	AJFREE(buckets[i]->NumId);
 ++	AJFREE(buckets[i]);
 ++    }
 ++
 ++
 ++
 ++    ajListSort(idlist,btreeNumIdCompare);
 ++    AJFREE(buckets);
 ++
 ++    totalkeys = ajListLength(idlist);
 ++
 ++    keypos = totalkeys / 2;
 ++
 ++    lno = keypos;
 ++    rno = totalkeys - lno;
 ++
 ++    maxnperbucket = nperbucket >> 1;
 ++    ++maxnperbucket;
 ++
 ++    cbucket = btreeNumBucketNew(maxnperbucket);
 ++
 ++    bucketn = lno / maxnperbucket;
 ++    if(lno % maxnperbucket)
 ++	++bucketn;
 ++    bucketlimit = bucketn - 1;
 ++
 ++
 ++    count = 0;
 ++    for(i=0;i<bucketlimit;++i)
 ++    {
 ++	cbucket->Nentries = 0;
 ++	for(j=0;j<maxnperbucket;++j)
 ++	{
 ++	    ajListPop(idlist,(void **)&bid);
 ++
 ++	    cbucket->NumId[j]->offset    = bid->offset;
 ++	    cbucket->NumId[j]->refoffset = bid->refoffset;
 ++	    cbucket->NumId[j]->dbno      = bid->dbno;
 ++	    
 ++	    ++count;
 ++	    ++cbucket->Nentries;
 ++	    AJFREE(bid);
 ++	}
 ++	ajListPeek(idlist,(void **)&bid);
 ++
 ++	karray[i] = bid->offset;
 ++
 ++	if(!parray[i])
 ++	    parray[i] = cache->totsize;
 ++	btreeWriteNumBucket(cache,cbucket,parray[i]);
 ++    }
 ++
 ++    cbucket->Nentries = 0;
 ++
 ++    j = 0;
 ++    while(count != lno)
 ++    {
 ++	ajListPop(idlist,(void **)&bid);
 ++
 ++	cbucket->NumId[j]->offset    = bid->offset;
 ++	cbucket->NumId[j]->refoffset = bid->refoffset;
 ++	cbucket->NumId[j]->dbno      = bid->dbno;
 ++
 ++	++j;
 ++	++count;
 ++
 ++
 ++	++cbucket->Nentries;
 ++	AJFREE(bid);
 ++    }
 ++
 ++    if(!parray[i])
 ++	parray[i] = cache->totsize;
 ++    btreeWriteNumBucket(cache,cbucket,parray[i]);
 ++
 ++    nkeys = bucketn - 1;
 ++    v = nkeys;
 ++    SBT_NKEYS(lbuf,v);
 ++    nodetype = BT_LEAF;
 ++    v = nodetype;
 ++    SBT_NODETYPE(lbuf,v);
 ++    GBT_PREV(lbuf,&prevsave);
 ++    lpage->dirty = BT_DIRTY;
 ++    btreeWriteNumNode(cache,lpage,karray,parray,nkeys);
 ++
 ++    ajListPeek(idlist,(void **)&bid);
 ++    mediankey = bid->offset;
 ++
 ++    bucketn = rno / maxnperbucket;
 ++    if(rno % maxnperbucket)
 ++	++bucketn;
 ++    bucketlimit = bucketn - 1;
 ++
 ++    for(i=0;i<bucketlimit;++i)
 ++    {
 ++	cbucket->Nentries = 0;
 ++	for(j=0;j<maxnperbucket;++j)
 ++	{
 ++	    ajListPop(idlist,(void **)&bid);
 ++	    
 ++	    cbucket->NumId[j]->offset    = bid->offset;
 ++	    cbucket->NumId[j]->refoffset = bid->refoffset;
 ++	    cbucket->NumId[j]->dbno      = bid->dbno;
 ++	    
 ++	    ++cbucket->Nentries;
 ++	    AJFREE(bid);
 ++	}
 ++
 ++	ajListPeek(idlist,(void **)&bid);
 ++	karray[i] = bid->offset;
 ++
 ++	parray[i] = cache->totsize;
 ++	btreeWriteNumBucket(cache,cbucket,parray[i]);
 ++    }
 ++
 ++    cbucket->Nentries = 0;
 ++
 ++    j = 0;
 ++    while(ajListPop(idlist,(void**)&bid))
 ++    {
 ++	cbucket->NumId[j]->offset    = bid->offset;
 ++	cbucket->NumId[j]->refoffset = bid->refoffset;
 ++	cbucket->NumId[j]->dbno      = bid->dbno;
 ++	++j;
 ++
 ++
 ++	++cbucket->Nentries;
 ++	AJFREE(bid);
 ++    }
 ++    
 ++    parray[i] = cache->totsize;
 ++    btreeWriteNumBucket(cache,cbucket,parray[i]);
 ++
 ++    nkeys = bucketn - 1;
 ++
 ++    v = nkeys;
 ++    SBT_NKEYS(rbuf,v);
 ++    nodetype = BT_LEAF;
 ++    v = nodetype;
 ++    SBT_NODETYPE(rbuf,v);
 ++    lv = prevsave;
 ++    SBT_PREV(rbuf,lv);
 ++    lv = overflow;
 ++    SBT_OVERFLOW(rbuf,lv);
 ++    
 ++    btreeWriteNumNode(cache,rpage,karray,parray,nkeys);
 ++    rpage->dirty = BT_DIRTY;
 ++
 ++    cbucket->Nentries = maxnperbucket;
 ++    btreeNumBucketDel(&cbucket);
 ++    ajListDel(&idlist);
 ++
 ++
 ++
 ++    medianless = lblockno;
 ++    mediangtr  = rblockno;
 ++
 ++
 ++    if(rootnodetype == BT_ROOT)
 ++    {
 ++	karray[0] = mediankey;
 ++	parray[0]=lblockno;
 ++	parray[1]=rblockno;
 ++	nkeys = 1;
 ++	spage->dirty = BT_DIRTY;
 ++	btreeWriteNumNode(cache,spage,karray,parray,nkeys);	
 ++
 ++	++cache->slevel;
 ++	lv = cache->slevel;
 ++	SBT_RIGHT(buf,lv);
 ++	spage->dirty = BT_LOCK;
 ++
 ++	btreeDeallocSecArray(cache,array);
 ++
 ++	return spage;
 ++    }
 ++
 ++    btreeDeallocSecArray(cache,array);
 ++
 ++
 ++    page = ajBtreeCacheRead(cache,prevsave);
 ++    btreeNumInsertKey(cache,page,mediankey,medianless,mediangtr);
 ++
 ++
 ++    page = ajBtreeCacheRead(cache,prevsave);
 ++
 ++    return page;
 ++}
 ++
 ++
 ++
 ++
 ++/* @func ajBtreeFreePriArray *******************************************
 ++**
 ++** Free karray and parray arrays for a primary key
 ++**
 ++** @param [rw] cache [AjPBtcache] cache
 ++**
 ++** @return [void]
 ++** @@
 ++******************************************************************************/
 ++
 ++void ajBtreeFreePriArray(AjPBtcache cache)
 ++{
 ++    AjPBtMem p;
 ++    AjPBtMem next;
 ++    ajint i;
 ++
 ++    /* ajDebug("In ajBtreeFreePriArray\n"); */
 ++    
 ++    if(!cache->bmem)
 ++	return;
 ++
 ++    p = cache->bmem;
 ++    next = p->next;
 ++    
 ++    while(next)
 ++    {
 ++	AJFREE(p->parray);
 ++	AJFREE(p->overflows);
 ++	for(i=0;i<cache->order;++i)
 ++	    ajStrDel(&p->karray[i]);
 ++	AJFREE(p->karray);
 ++	AJFREE(p);
 ++	p = next;
 ++	next = p->next;
 ++    }
 ++    
 ++
 ++    AJFREE(p->parray);
 ++    AJFREE(p->overflows);
 ++    for(i=0;i<cache->order;++i)
 ++	ajStrDel(&p->karray[i]);
 ++    AJFREE(p->karray);
 ++    AJFREE(p);
 ++    
 ++    cache->bmem = NULL;
 ++    cache->tmem = NULL;
 ++
 ++    return;
 ++}
 ++
 ++
 ++
 ++
 ++/* @func ajBtreeFreeSecArray *******************************************
 ++**
 ++** Free karray and parray arrays for a secondary key
 ++**
 ++** @param [rw] cache [AjPBtcache] cache
 ++**
 ++** @return [void]
 ++** @@
 ++******************************************************************************/
 ++
 ++void ajBtreeFreeSecArray(AjPBtcache cache)
 ++{
 ++    AjPBtMem p;
 ++    AjPBtMem next;
 ++    ajint i;
 ++
 ++    /* ajDebug("In ajBtreeFreeSecArray\n"); */
 ++    
 ++    if(!cache->bsmem)
 ++	return;
 ++
 ++    p = cache->bsmem;
 ++    next = p->next;
 ++    
 ++    while(next)
 ++    {
 ++	AJFREE(p->parray);
 ++	AJFREE(p->overflows);
 ++	for(i=0;i<cache->sorder;++i)
 ++	    ajStrDel(&p->karray[i]);
 ++	AJFREE(p->karray);
 ++	AJFREE(p);
 ++	
 ++	p = next;
 ++	next = p->next;
 ++    }
 ++    
 ++
 ++    AJFREE(p->parray);
 ++    AJFREE(p->overflows);
 ++    for(i=0;i<cache->sorder;++i)
 ++	ajStrDel(&p->karray[i]);
 ++    AJFREE(p->karray);
 ++    AJFREE(p);
 ++
 ++    cache->bsmem = NULL;
 ++    cache->tsmem = NULL;
 ++
 ++    return;
 ++}
 ++
 ++
 ++
 ++
 ++/* @func ajBtreeHybLeafList ********************************************
 ++**
 ++** Read the leaves of a secondary hybrid tree
 ++**
 ++** @param [u] cache [AjPBtcache] cache
 ++** @param [r] rootblock [ajlong] root page of secondary tree
 ++** @param [r] idname [AjPStr] id name
 ++** @param [r] list [AjPList] list to add BtIDs to
 ++**
 ++** @return [void]
 ++** @@
 ++******************************************************************************/
 ++
 ++void ajBtreeHybLeafList(AjPBtcache cache, ajlong rootblock, AjPStr idname,
 ++			AjPList list)
 ++{
 ++    AjPBtId id = NULL;
 ++    
 ++    ajint order;
 ++    ajlong *karray;
 ++    ajlong *parray;
 ++    AjPBtpage page;
 ++    unsigned char *buf;
 ++    ajint nodetype;
 ++    ajint i;
 ++    ajint j;
 ++    ajlong level = 0L;
 ++    
 ++    AjPNumBucket bucket;
 ++    ajint nkeys;
 ++    ajlong right;
 ++    AjPBtMem array = NULL;
 ++
 ++    order = cache->sorder;
 ++
 ++    array = btreeAllocSecArray(cache);
 ++    karray = array->overflows;
 ++    parray = array->parray;
 ++
 ++    page = ajBtreeCacheRead(cache, rootblock);
 ++    buf = page->buf;
 ++
 ++    GBT_RIGHT(buf,&level);
 ++    cache->slevel = (ajint) level;
 ++
 ++    btreeGetNumKeys(cache,buf,&karray,&parray);
 ++    GBT_NODETYPE(buf,&nodetype);
 ++
 ++    while(nodetype != BT_LEAF && cache->slevel != 0)
 ++    {
 ++	page = ajBtreeCacheRead(cache,parray[0]);
 ++	buf = page->buf;
 ++	btreeGetNumKeys(cache,buf,&karray,&parray);
 ++	GBT_NODETYPE(buf,&nodetype);
 ++    }
 ++
 ++    do
 ++    {
 ++	GBT_NKEYS(buf,&nkeys);
 ++	for(i=0;i<nkeys+1;++i)
 ++	{
 ++	    bucket = btreeReadNumBucket(cache,parray[i]);
 ++	    for(j=0;j<bucket->Nentries;++j)
 ++	    {
 ++		id = ajBtreeIdNew();
 ++		ajStrAssS(&id->id,idname);
 ++		id->offset = bucket->NumId[j]->offset;
 ++		id->refoffset = bucket->NumId[j]->refoffset;
 ++		id->dbno = bucket->NumId[j]->dbno;
 ++		ajListPush(list, (void*)id);
 ++	    }
 ++	    btreeNumBucketDel(&bucket);
 ++	}
 ++
 ++	right = 0L;
 ++	if(cache->slevel)
 ++	{
 ++	    GBT_RIGHT(buf,&right);
 ++	    if(right)
 ++	    {
 ++		page = ajBtreeCacheRead(cache,right);
 ++		buf = page->buf;
 ++		btreeGetNumKeys(cache,buf,&karray,&parray);
 ++	    }
 ++	}
 ++    } while(right);
 ++
 ++    btreeDeallocSecArray(cache,array);
 ++
 ++    return;
 ++}
 ++
 diff -ruN /usr/ports/biology/emboss/files/patch-ajindex.h emboss/files/patch-ajindex.h
 --- /usr/ports/biology/emboss/files/patch-ajindex.h	Wed Dec 31 21:00:00 1969
 +++ emboss/files/patch-ajindex.h	Mon Jan 23 12:18:57 2006
 @@ -0,0 +1,170 @@
 +--- ajax/ajindex.h.orig	Mon Jan 23 12:17:10 2006
 ++++ ajax/ajindex.h	Thu Dec 22 13:12:32 2005
 +@@ -67,6 +67,23 @@
 + } AjOBtNode;
 + #define AjPBtNode AjOBtNode*
 + 
 ++
 ++
 ++
 ++typedef struct AjSBtMem
 ++{
 ++    struct AjSBtMem *next;
 ++    struct AjSBtMem *prev;
 ++    AjPStr *karray;
 ++    ajlong *parray;
 ++    ajlong *overflows;
 ++    AjBool used;
 ++} AjOBtMem;
 ++#define AjPBtMem AjOBtMem*
 ++
 ++
 ++
 ++
 + /* @data AjPBtId ***************************************************
 + **
 + ** Btree ID
 +@@ -137,6 +154,54 @@
 + 
 + 
 + 
 ++/* @data AjPBtNumId ***************************************************
 ++**
 ++** Btree ID
 ++**
 ++** @attr id [AjPStr] Unique ID
 ++** @attr dbno [ajint] Database file number
 ++** @attr dups [ajint] Duplicates
 ++** @attr offset [ajlong] Offset within database file (ftello)
 ++** @attr refoffset [ajlong] Offset within reference database file (ftello)
 ++******************************************************************************/
 ++
 ++typedef struct AjSBtNumId
 ++{
 ++    ajint  dbno;
 ++    ajlong offset;
 ++    ajlong refoffset;
 ++} AjOBtNumId;
 ++#define AjPBtNumId AjOBtNumId*
 ++
 ++
 ++
 ++
 ++/* @data AjPNumBucket ***************************************************
 ++**
 ++** Offset bucket structure on disc
 ++**
 ++** Key, filenumber, ftell ID, subkey page (char*, ajint, ajlong, ajlong)
 ++**
 ++** @attr NodeType [ajint] Node type
 ++** @attr Nentries [ajint] Number of entries
 ++** @attr Overflow [ajlong] Offset to overflow block
 ++** @attr offset [ajlong*] file offsets
 ++** @attr refoffset [ajlong*] ref file offsets
 ++** @attr offset [ajint*] database numbers
 ++******************************************************************************/
 ++
 ++typedef struct AjSNumBucket
 ++{
 ++    ajint    NodeType;
 ++    ajint    Nentries;
 ++    ajlong   Overflow;
 ++    AjPBtNumId *NumId;
 ++} AjONumBucket;
 ++#define AjPNumBucket AjONumBucket*
 ++
 ++
 ++
 ++
 + /* Database file name structure
 + **
 + ** ajint        order			Order of B+tree
 +@@ -387,6 +452,10 @@
 + ** @attr snperbucket [ajint] Undocumented
 + ** @attr secrootblock [ajlong] secondary tree root block
 + ** @attr kwlimit [ajint] Max length of secondary key
 ++** @attr bmem [AjPBtMem] primary memory allocation MRU bottom
 ++** @attr bsmem [AjPBtMem] secondary memory allocation MRU bottom
 ++** @attr tmem [AjPBtMem] primary memory allocation MRU top
 ++** @attr tsmem [AjPBtMem] secondary memory allocation MRU top
 + ******************************************************************************/
 + 
 + typedef struct AjSBtCache
 +@@ -409,6 +478,12 @@
 +     ajint snperbucket;
 +     ajlong secrootblock;
 +     ajint  kwlimit;
 ++
 ++    AjPBtMem bmem;
 ++    AjPBtMem tmem;
 ++    AjPBtMem bsmem;
 ++    AjPBtMem tsmem;
 ++
 + } AjOBtcache;
 + #define AjPBtcache AjOBtcache*
 + 
 +@@ -511,6 +586,32 @@
 + 
 + 
 + 
 ++/* @data AjPBtHybrid ***************************************************
 ++**
 ++** Btree ID
 ++**
 ++** @attr key1 [AjPStr] Unique ID
 ++** @attr dbno [ajint] Database file number
 ++** @attr dups [ajint] Duplicates
 ++** @attr offset [ajlong] Offset within database file (ftello)** @attr refoffset [ajlong] Offset within reference database file (ftello)
 ++** @attr refoffset [ajlong] Offset within reference database file (ftello)
 ++** @attr treeblock [ajlong] Secondary tree root page
 ++******************************************************************************/
 ++
 ++typedef struct AjSBtHybrid
 ++{
 ++    AjPStr key1;
 ++    ajint  dbno;
 ++    ajint  dups;
 ++    ajlong offset;
 ++    ajlong refoffset;
 ++    ajlong treeblock;
 ++} AjOBtHybrid;
 ++#define AjPBtHybrid AjOBtHybrid*
 ++
 ++
 ++
 ++
 + AjPBtcache ajBtreeCacheNewC(const char *file, const char *ext,
 + 			    const char *idir, const char *mode,
 + 			    ajint pagesize, ajint order, ajint fill,
 +@@ -553,7 +654,8 @@
 + AjBool     ajBtreeReplaceId(AjPBtcache cache, const AjPBtId rid);
 + 
 + ajint      ajBtreeReadEntries(const char *filename, const char *indexdir,
 +-		   	      AjPStr **seqfiles, AjPStr **reffiles);
 ++			      const char *directory,
 ++			      AjPStr **seqfiles, AjPStr **reffiles);
 + void       ajBtreeInsertDupId(AjPBtcache cache, AjPBtId id);
 + AjPList    ajBtreeDupFromKey(AjPBtcache cache, const char *key);
 + 
 +@@ -580,6 +682,21 @@
 + void       ajBtreeInsertKeyword(AjPBtcache cache, const AjPBtPri pri);
 + 
 + void       ajBtreeLockTest(AjPBtcache cache);
 ++
 ++
 ++
 ++AjPBtpage   ajBtreeHybFindInsert(AjPBtcache cache, const char *key);
 ++AjPBtpage   ajBtreeNumFindInsert(AjPBtcache cache, const ajlong key);
 ++
 ++void        ajBtreeInsertNum(AjPBtcache cache, AjPBtNumId num, AjPBtpage page);
 ++void        ajBtreeHybInsertId(AjPBtcache cache, AjPBtHybrid hyb);
 ++AjPBtHybrid ajBtreeHybNew(void);
 ++void        ajBtreeHybDel(AjPBtHybrid *thys);
 ++void        ajBtreeFreePriArray(AjPBtcache cache);
 ++void        ajBtreeFreeSecArray(AjPBtcache cache);
 ++void 	    ajBtreeHybLeafList(AjPBtcache cache, ajlong rootblock,
 ++			       AjPStr idname, AjPList list);
 ++
 + 
 + #endif
 + 
 diff -ruN /usr/ports/biology/emboss/files/patch-ajpdb.c emboss/files/patch-ajpdb.c
 --- /usr/ports/biology/emboss/files/patch-ajpdb.c	Wed Dec 31 21:00:00 1969
 +++ emboss/files/patch-ajpdb.c	Mon Jan 23 12:20:04 2006
 @@ -0,0 +1,67 @@
 +--- ajax/ajpdb.c.orig	Mon Jan 23 12:19:22 2006
 ++++ ajax/ajpdb.c	Fri Aug 19 13:49:12 2005
 +@@ -1198,7 +1198,7 @@
 +     osstr = ajStrNew();
 +     xstr  = ajStrNew();
 + 
 +-    /* Start of main application loop */
 ++    /* Start of main loop */
 +     while(ajFileReadLine(inf,&line))
 +     {
 + 	if(ajStrPrefixC(line,"XX"))
 +@@ -1313,6 +1313,8 @@
 + 	    
 + 	    (ret)->Nchn = ncha;
 + 	    (ret)->Ngp  = ngrp;
 ++
 ++	    continue;
 + 	}
 + 	
 + 
 +@@ -1382,7 +1384,11 @@
 + 	    ajStrToken(&token,&handle,NULL);
 + 	    ajStrToInt(token,&mod);
 + 	    if((mode == 0) && (mod!=1))
 +-		break;
 ++	      {
 ++		/* break; */
 ++		/* Discard remaining AT lines */
 ++		while(ajFileReadLine(inf,&line) && ajStrPrefixC(line,"AT"));
 ++	      }
 + 
 + 	    /* Chain number */
 + 	    ajStrToken(&token,&handle,NULL);
 +@@ -1463,7 +1469,10 @@
 + 			    "jison@hgmp.mrc.ac.uk");
 + 	    }
 + 	    else
 ++	      {
 + 		ajListPushApp((ret)->Chains[chn-1]->Atoms,(void *)atom);
 ++	      }
 ++	    continue;
 + 	}
 + 	
 + 	/* Parse residue line */
 +@@ -1479,8 +1488,11 @@
 + 	    ajStrToken(&token,&handle,NULL);
 + 	    ajStrToInt(token,&mod);
 + 	    if((mode == 0) && (mod!=1))
 +-		break;
 +-
 ++	      {
 ++		/* break;*/
 ++		/* Discard remaining RE lines */
 ++		while(ajFileReadLine(inf,&line) && ajStrPrefixC(line,"RE"));
 ++	      }
 + 	    /* Chain number */
 + 	    ajStrToken(&token,&handle,NULL);
 + 	    ajStrToInt(token,&chn);
 +@@ -1585,6 +1597,8 @@
 +             ajStrToFloat(token,&residue->pol_rel);
 + 
 + 	    ajListPushApp((ret)->Chains[chn-1]->Residues,(void *)residue);  
 ++
 ++	    continue;
 + 	}
 +     }
 +     /* End of main application loop */
 diff -ruN /usr/ports/biology/emboss/files/patch-ajseqdb.c emboss/files/patch-ajseqdb.c
 --- /usr/ports/biology/emboss/files/patch-ajseqdb.c	Wed Dec 31 21:00:00 1969
 +++ emboss/files/patch-ajseqdb.c	Mon Jan 23 12:21:36 2006
 @@ -0,0 +1,195 @@
 +--- ajax/ajseqdb.c.orig	Mon Jan 23 12:20:25 2006
 ++++ ajax/ajseqdb.c	Thu Dec 22 13:12:57 2005
 +@@ -27,8 +27,7 @@
 + ******************************************************************************/
 + 
 + #include "ajax.h"
 +-#include "ajmem.h"
 +-#include "ajfile.h"
 ++
 + #include "limits.h"
 + #include <stdarg.h>
 + #include <sys/types.h>
 +@@ -3055,13 +3054,13 @@
 + 
 + 
 +     if(qryd->do_id)
 +-        seqEmbossOpenCache(qry,ID_EXTENSION,&qryd->idcache);
 ++        seqEmbossOpenSecCache(qry,ID_EXTENSION,&qryd->idcache);
 + 
 +     if(qryd->do_ac)
 +-	seqEmbossOpenCache(qry,AC_EXTENSION,&qryd->accache);
 ++	seqEmbossOpenSecCache(qry,AC_EXTENSION,&qryd->accache);
 + 
 +     if(qryd->do_sv)
 +-	seqEmbossOpenCache(qry,SV_EXTENSION,&qryd->svcache);
 ++	seqEmbossOpenSecCache(qry,SV_EXTENSION,&qryd->svcache);
 + 
 +     if(qryd->do_kw)
 +     {
 +@@ -3073,14 +3072,14 @@
 +     if(qryd->do_de)
 +     {
 + 	if(!qryd->idcache)
 +-	    seqEmbossOpenCache(qry,ID_EXTENSION,&qryd->idcache);	
 ++	    seqEmbossOpenSecCache(qry,ID_EXTENSION,&qryd->idcache);	
 + 	seqEmbossOpenSecCache(qry,DE_EXTENSION,&qryd->decache);
 +     }
 + 
 +     if(qryd->do_tx)
 +     {
 + 	if(!qryd->idcache)
 +-	    seqEmbossOpenCache(qry,ID_EXTENSION,&qryd->idcache);	
 ++	    seqEmbossOpenSecCache(qry,ID_EXTENSION,&qryd->idcache);	
 + 	seqEmbossOpenSecCache(qry,TX_EXTENSION,&qryd->txcache);
 +     }
 + 
 +@@ -3149,6 +3148,7 @@
 +     if(qryd->nentries == -1)
 + 	qryd->nentries = ajBtreeReadEntries(ajStrStr(qry->DbAlias),
 + 					    ajStrStr(qry->IndexDir),
 ++					    ajStrStr(qry->Directory),
 + 					    &qryd->files,&qryd->reffiles);
 + 
 +     *cache = ajBtreeCacheNewC(ajStrStr(qry->DbAlias),ext,
 +@@ -3209,6 +3209,7 @@
 +     if(qryd->nentries == -1)
 + 	qryd->nentries = ajBtreeReadEntries(ajStrStr(qry->DbAlias),
 + 					    ajStrStr(qry->IndexDir),
 ++					    ajStrStr(qry->Directory),
 + 					    &qryd->files,&qryd->reffiles);
 +     
 +     
 +@@ -3270,6 +3271,7 @@
 + 
 + 
 +     n = ajBtreeReadEntries(qry->DbAlias->Ptr,qry->IndexDir->Ptr,
 ++			   qry->Directory->Ptr,
 + 			   &filestrings,&reffilestrings);
 + 
 + 
 +@@ -3365,7 +3367,13 @@
 +     {
 + 	    entry = ajBtreeIdFromKey(qryd->idcache,ajStrStr(qry->Id));
 + 	    if(entry)
 +-		ajListPushApp(qryd->List,(void *)entry);
 ++	    {
 ++		if(!entry->dups)
 ++		    ajListPushApp(qryd->List,(void *)entry);
 ++		else
 ++		    ajBtreeHybLeafList(qryd->idcache,entry->offset,
 ++				       entry->id,qryd->List);
 ++	    }
 +     }
 +     
 + 
 +@@ -3373,14 +3381,26 @@
 +     {
 + 	    entry = ajBtreeIdFromKey(qryd->accache,ajStrStr(qry->Acc));
 + 	    if(entry)
 +-		ajListPushApp(qryd->List,(void *)entry);
 ++	    {
 ++		if(!entry->dups)
 ++		    ajListPushApp(qryd->List,(void *)entry);
 ++		else
 ++		    ajBtreeHybLeafList(qryd->accache,entry->offset,
 ++				       entry->id,qryd->List);
 ++	    }
 +     }
 + 
 +     if((qryd->do_sv && !entry) && (qryd->do_sv && qryd->svcache))
 +     {
 + 	    entry = ajBtreeIdFromKey(qryd->svcache,ajStrStr(qry->Gi));
 + 	    if(entry)
 +-		ajListPushApp(qryd->List,(void *)entry);
 ++	    {
 ++		if(!entry->dups)
 ++		    ajListPushApp(qryd->List,(void *)entry);
 ++		else
 ++		    ajBtreeHybLeafList(qryd->svcache,entry->offset,
 ++				       entry->id,qryd->List);
 ++	    }
 +     }
 + 
 +     if(!ajListLength(qryd->List))
 +@@ -3512,13 +3532,25 @@
 +     qryd = qry->QryData;
 + 
 +     if(qryd->do_id && qryd->idcache)
 ++    {
 ++	ajBtreeFreeSecArray(qryd->idcache);
 + 	ajBtreeCacheDel(&qryd->idcache);
 ++    }
 ++    
 + 
 +     if(qryd->do_ac && qryd->accache)
 ++    {
 ++	ajBtreeFreeSecArray(qryd->accache);	
 + 	ajBtreeCacheDel(&qryd->accache);
 ++    }
 ++    
 + 
 +     if(qryd->do_sv && qryd->svcache)
 ++    {
 ++	ajBtreeFreeSecArray(qryd->svcache);	
 + 	ajBtreeCacheDel(&qryd->svcache);
 ++    }
 ++
 + 
 +     if(qryd->do_kw && qryd->kwcache)
 + 	ajBtreeCacheDel(&qryd->kwcache);
 +@@ -3608,7 +3640,14 @@
 + 		    ajStrToLower(&kwid);
 + 		    id = ajBtreeIdFromKey(qryd->idcache,ajStrStr(kwid));
 + 		    if(id)
 +-			ajListPushApp(qryd->List,(void *)id);
 ++		    {
 ++			if(!id->dups)
 ++			    ajListPushApp(qryd->List,(void *)id);
 ++			else
 ++			    ajBtreeHybLeafList(qryd->idcache,id->offset,
 ++					       id->id,qryd->List);
 ++		    }
 ++		    ajStrDel(&kwid);
 + 		}
 + 		ajListDel(&tlist);
 + 		ajBtreePriDel(&pri);
 +@@ -3637,7 +3676,13 @@
 + 		    ajStrToLower(&kwid);
 + 		    id = ajBtreeIdFromKey(qryd->idcache,ajStrStr(kwid));
 + 		    if(id)
 +-			ajListPushApp(qryd->List,(void *)id);
 ++		    {
 ++			if(!id->dups)
 ++			    ajListPushApp(qryd->List,(void *)id);
 ++			else
 ++			    ajBtreeHybLeafList(qryd->idcache,id->offset,
 ++					       id->id,qryd->List);
 ++		    }
 + 		    ajStrDel(&kwid);
 + 		}
 + 		ajListDel(&tlist);
 +@@ -3667,7 +3712,14 @@
 + 		    ajStrToLower(&kwid);
 + 		    id = ajBtreeIdFromKey(qryd->idcache,ajStrStr(kwid));
 + 		    if(id)
 +-			ajListPushApp(qryd->List,(void *)id);
 ++		    {
 ++			if(!id->dups)
 ++			    ajListPushApp(qryd->List,(void *)id);
 ++			else
 ++			    ajBtreeHybLeafList(qryd->idcache,id->offset,
 ++					       id->id,qryd->List);
 ++		    }
 ++		    ajStrDel(&kwid);
 + 		}
 + 		ajListDel(&tlist);
 + 		ajBtreePriDel(&pri);
 +@@ -3832,6 +3884,7 @@
 + 	qryd = qry->QryData;
 + 	i = -1;
 + 	ajBtreeReadEntries(qry->DbAlias->Ptr,qry->IndexDir->Ptr,
 ++			   qry->Directory->Ptr,
 + 			   &qryd->files,&qryd->reffiles);
 + 
 + 	seqin->Single = ajTrue;
 diff -ruN /usr/ports/biology/emboss/files/patch-dbxfasta.c emboss/files/patch-dbxfasta.c
 --- /usr/ports/biology/emboss/files/patch-dbxfasta.c	Wed Dec 31 21:00:00 1969
 +++ emboss/files/patch-dbxfasta.c	Mon Jan 23 12:23:34 2006
 @@ -0,0 +1,89 @@
 +--- emboss/dbxfasta.c.orig	Mon Jan 23 12:22:12 2006
 ++++ emboss/dbxfasta.c	Wed Jan  4 16:31:37 2006
 +@@ -2,7 +2,7 @@
 + **
 + ** Index flatfile databases
 + **
 +-** @author: Copyright (C) Alan Bleasby (ableasby@hgmp.mrc.ac.uk)
 ++** @author Copyright (C) Alan Bleasby (ableasby@hgmp.mrc.ac.uk)
 + ** @@
 + **
 + ** This program is free software; you can redistribute it and/or
 +@@ -77,6 +77,7 @@
 +     
 +     AjPBtId  idobj  = NULL;
 +     AjPBtPri priobj = NULL;
 ++    AjPBtHybrid hyb = NULL;
 +     
 + 
 +     AjPRegexp typeexp = NULL;
 +@@ -102,7 +103,8 @@
 +     
 +     idobj   = ajBtreeIdNew();
 +     priobj  = ajBtreePriNew();
 +-
 ++    hyb     = ajBtreeHybNew();
 ++    
 + 
 +     nfields = embBtreeSetFields(entry,fieldarray);
 +     embBtreeSetDbInfo(entry,dbname,dbrs,datestr,release,dbtype,directory,
 +@@ -134,22 +136,22 @@
 + 	    if(entry->do_id)
 + 	    {
 + 		ajStrToLower(&entry->id);
 +-		ajStrAssS(&idobj->id,entry->id);
 +-		idobj->dbno = i;
 +-		idobj->offset = entry->fpos;
 +-		idobj->dups = 0;
 +-		ajBtreeInsertId(entry->idcache,idobj);
 ++		ajStrAssS(&hyb->key1,entry->id);
 ++		hyb->dbno = i;
 ++		hyb->offset = entry->fpos;
 ++		hyb->dups = 0;
 ++		ajBtreeHybInsertId(entry->idcache,hyb);
 + 	    }
 + 
 + 	    if(entry->do_accession)
 +                 while(ajListPop(entry->ac,(void **)&word))
 +                 {
 + 		    ajStrToLower(&word);
 +-                    ajStrAssS(&idobj->id,word);
 +-                    idobj->dbno = i;
 +-		    idobj->offset = entry->fpos;
 +-		    idobj->dups = 0;
 +-		    ajBtreeInsertId(entry->accache,idobj);
 ++                    ajStrAssS(&hyb->key1,word);
 ++                    hyb->dbno = i;
 ++		    hyb->offset = entry->fpos;
 ++		    hyb->dups = 0;
 ++		    ajBtreeHybInsertId(entry->accache,hyb);
 + 		    ajStrDel(&word);
 +                 }
 + 
 +@@ -157,11 +159,11 @@
 +                 while(ajListPop(entry->sv,(void **)&word))
 +                 {
 + 		    ajStrToLower(&word);
 +-                    ajStrAssS(&idobj->id,word);
 +-                    idobj->dbno = i;
 +-		    idobj->offset = entry->fpos;
 +-		    idobj->dups = 0;
 +-		    ajBtreeInsertId(entry->svcache,idobj);
 ++                    ajStrAssS(&hyb->key1,word);
 ++                    hyb->dbno = i;
 ++		    hyb->offset = entry->fpos;
 ++		    hyb->dups = 0;
 ++		    ajBtreeHybInsertId(entry->svcache,hyb);
 + 		    ajStrDel(&word);
 +                 }
 + 
 +@@ -197,7 +199,8 @@
 + 
 +     ajBtreeIdDel(&idobj);
 +     ajBtreePriDel(&priobj);
 +-
 ++    ajBtreeHybDel(&hyb);
 ++    
 +     ajExit();
 + 
 +     return 0;
 diff -ruN /usr/ports/biology/emboss/files/patch-dbxflat.c emboss/files/patch-dbxflat.c
 --- /usr/ports/biology/emboss/files/patch-dbxflat.c	Wed Dec 31 21:00:00 1969
 +++ emboss/files/patch-dbxflat.c	Mon Jan 23 12:23:51 2006
 @@ -0,0 +1,146 @@
 +--- emboss/dbxflat.c.orig	Mon Jan 23 12:22:23 2006
 ++++ emboss/dbxflat.c	Sun Jan  1 07:29:09 2006
 +@@ -2,7 +2,7 @@
 + **
 + ** Index flatfile databases
 + **
 +-** @author: Copyright (C) Alan Bleasby (ableasby@hgmp.mrc.ac.uk)
 ++** @author Copyright (C) Alan Bleasby (ableasby@hgmp.mrc.ac.uk)
 + ** @@
 + **
 + ** This program is free software; you can redistribute it and/or
 +@@ -106,6 +106,7 @@
 +     
 +     AjPBtId  idobj  = NULL;
 +     AjPBtPri priobj = NULL;
 ++    AjPBtHybrid hyb = NULL;
 +     
 + 
 +     embInit("dbxflat", argc, argv);
 +@@ -126,7 +127,8 @@
 +     
 +     idobj   = ajBtreeIdNew();
 +     priobj  = ajBtreePriNew();
 +-
 ++    hyb     = ajBtreeHybNew();
 ++    
 + 
 +     nfields = embBtreeSetFields(entry,fieldarray);
 +     embBtreeSetDbInfo(entry,dbname,dbrs,datestr,release,dbtype,directory,
 +@@ -156,11 +158,11 @@
 + 	    if(entry->do_id)
 + 	    {
 + 		ajStrToLower(&entry->id);
 +-		ajStrAssS(&idobj->id,entry->id);
 +-		idobj->dbno = i;
 +-		idobj->offset = entry->fpos;
 +-		idobj->dups = 0;
 +-		ajBtreeInsertId(entry->idcache,idobj);
 ++		ajStrAssS(&hyb->key1,entry->id);
 ++		hyb->dbno = i;
 ++		hyb->offset = entry->fpos;
 ++		hyb->dups = 0;
 ++		ajBtreeHybInsertId(entry->idcache,hyb);
 + 	    }
 + 
 + 	    if(entry->do_accession)
 +@@ -168,11 +170,11 @@
 +                 while(ajListPop(entry->ac,(void **)&word))
 +                 {
 + 		    ajStrToLower(&word);
 +-                    ajStrAssS(&idobj->id,word);
 +-                    idobj->dbno = i;
 +-		    idobj->offset = entry->fpos;
 +-		    idobj->dups = 0;
 +-		    ajBtreeInsertId(entry->accache,idobj);
 ++                    ajStrAssS(&hyb->key1,word);
 ++                    hyb->dbno = i;
 ++		    hyb->offset = entry->fpos;
 ++		    hyb->dups = 0;
 ++		    ajBtreeHybInsertId(entry->accache,hyb);
 + 		    ajStrDel(&word);
 +                 }
 + 	    }
 +@@ -182,11 +184,11 @@
 +                 while(ajListPop(entry->sv,(void **)&word))
 +                 {
 + 		    ajStrToLower(&word);
 +-                    ajStrAssS(&idobj->id,word);
 +-                    idobj->dbno = i;
 +-		    idobj->offset = entry->fpos;
 +-		    idobj->dups = 0;
 +-		    ajBtreeInsertId(entry->svcache,idobj);
 ++                    ajStrAssS(&hyb->key1,word);
 ++                    hyb->dbno = i;
 ++		    hyb->offset = entry->fpos;
 ++		    hyb->dups = 0;
 ++		    ajBtreeHybInsertId(entry->svcache,hyb);
 + 		    ajStrDel(&word);
 +                 }
 + 	    }
 +@@ -231,15 +233,11 @@
 + 	    }
 + 	}
 + 	
 +-
 +-
 +-
 +-
 +-
 + 	ajFileClose(&inf);
 +     }
 +     
 + 
 ++
 +     embBtreeDumpParameters(entry);
 +     embBtreeCloseCaches(entry);
 +     
 +@@ -256,7 +254,8 @@
 + 
 +     ajBtreeIdDel(&idobj);
 +     ajBtreePriDel(&priobj);
 +-
 ++    ajBtreeHybDel(&hyb);
 ++    
 +     ajExit();
 + 
 +     return 0;
 +@@ -306,11 +305,13 @@
 + 	}
 + 
 + 	if(entry->do_sv)
 +-	    if(ajStrPrefixC(line,"SV"))
 ++	    if(ajStrPrefixC(line,"SV") ||
 ++	       ajStrPrefixC(line,"IV"))	/* emblcds database format */
 + 		embBtreeEmblAC(line,entry->sv);
 + 
 + 	if(entry->do_accession)
 +-	    if(ajStrPrefixC(line,"AC"))
 ++	    if(ajStrPrefixC(line,"AC") ||
 ++	       ajStrPrefixC(line,"PA"))	/* emblcds database format */
 + 		embBtreeEmblAC(line,entry->ac);
 + 	
 + 	if(entry->do_keyword)
 +@@ -356,12 +357,10 @@
 +     
 +     line = ajStrNewC("");
 +     sumline = ajStrNew();
 ++
 +     
 +     while(!ajStrPrefixC(line,"//") && ret)
 +     {
 +-	pos = ajFileTell(inf);
 +-	
 +-	
 + 	if(ajStrPrefixC(line,"LOCUS"))
 + 	{
 + 	    entry->fpos = pos;
 +@@ -423,7 +422,7 @@
 + 	    }
 + 	
 + 
 +-
 ++	pos = ajFileTell(inf);
 + 
 + 	if(!ajFileReadLine(inf,&line))
 + 	    ret = ajFalse;
 diff -ruN /usr/ports/biology/emboss/files/patch-dbxgcg.c emboss/files/patch-dbxgcg.c
 --- /usr/ports/biology/emboss/files/patch-dbxgcg.c	Wed Dec 31 21:00:00 1969
 +++ emboss/files/patch-dbxgcg.c	Mon Jan 23 12:24:04 2006
 @@ -0,0 +1,96 @@
 +--- emboss/dbxgcg.c.orig	Mon Jan 23 12:22:30 2006
 ++++ emboss/dbxgcg.c	Thu Dec 22 13:13:18 2005
 +@@ -2,7 +2,7 @@
 + **
 + ** Index flatfile databases
 + **
 +-** @author: Copyright (C) Alan Bleasby (ableasby@hgmp.mrc.ac.uk)
 ++** @author Copyright (C) Alan Bleasby (ableasby@hgmp.mrc.ac.uk)
 + ** @@
 + **
 + ** This program is free software; you can redistribute it and/or
 +@@ -136,6 +136,7 @@
 +     
 +     AjPBtId  idobj  = NULL;
 +     AjPBtPri priobj = NULL;
 ++    AjPBtHybrid hyb = NULL;
 +     
 + 
 +     embInit("dbxgcg", argc, argv);
 +@@ -156,7 +157,8 @@
 +     
 +     idobj   = ajBtreeIdNew();
 +     priobj  = ajBtreePriNew();
 +-
 ++    hyb     = ajBtreeHybNew();
 ++    
 + 
 +     nfields = embBtreeSetFields(entry,fieldarray);
 +     embBtreeSetDbInfo(entry,dbname,dbrs,datestr,release,dbtype,directory,
 +@@ -204,12 +206,12 @@
 + 	    if(entry->do_id)
 + 	    {
 + 		ajStrToLower(&entry->id);
 +-		ajStrAssS(&idobj->id,entry->id);
 +-		idobj->dbno = i;
 +-		idobj->offset = entry->fpos;
 +-		idobj->refoffset = entry->reffpos;
 +-		idobj->dups = 0;
 +-		ajBtreeInsertId(entry->idcache,idobj);
 ++		ajStrAssS(&hyb->key1,entry->id);
 ++		hyb->dbno = i;
 ++		hyb->offset = entry->fpos;
 ++		hyb->refoffset = entry->reffpos;
 ++		hyb->dups = 0;
 ++		ajBtreeHybInsertId(entry->idcache,hyb);
 + 	    }
 + 
 + 	    if(entry->do_accession)
 +@@ -217,12 +219,12 @@
 +                 while(ajListPop(entry->ac,(void **)&word))
 +                 {
 + 		    ajStrToLower(&word);
 +-                    ajStrAssS(&idobj->id,word);
 +-                    idobj->dbno = i;
 +-		    idobj->offset = entry->fpos;
 +-		    idobj->refoffset = entry->reffpos;
 +-		    idobj->dups = 0;
 +-		    ajBtreeInsertId(entry->accache,idobj);
 ++                    ajStrAssS(&hyb->key1,word);
 ++                    hyb->dbno = i;
 ++		    hyb->offset = entry->fpos;
 ++		    hyb->refoffset = entry->reffpos;
 ++		    hyb->dups = 0;
 ++		    ajBtreeHybInsertId(entry->accache,hyb);
 + 		    ajStrDel(&word);
 +                 }
 + 	    }
 +@@ -232,12 +234,12 @@
 +                 while(ajListPop(entry->sv,(void **)&word))
 +                 {
 + 		    ajStrToLower(&word);
 +-                    ajStrAssS(&idobj->id,word);
 +-                    idobj->dbno = i;
 +-		    idobj->offset = entry->fpos;
 +-		    idobj->refoffset = entry->reffpos;
 +-		    idobj->dups = 0;
 +-		    ajBtreeInsertId(entry->svcache,idobj);
 ++                    ajStrAssS(&hyb->key1,word);
 ++                    hyb->dbno = i;
 ++		    hyb->offset = entry->fpos;
 ++		    hyb->refoffset = entry->reffpos;
 ++		    hyb->dups = 0;
 ++		    ajBtreeHybInsertId(entry->svcache,hyb);
 + 		    ajStrDel(&word);
 +                 }
 + 	    }
 +@@ -303,7 +305,8 @@
 + 
 +     ajBtreeIdDel(&idobj);
 +     ajBtreePriDel(&priobj);
 +-
 ++    ajBtreeHybDel(&hyb);
 ++    
 +     ajExit();
 + 
 +     return 0;
 diff -ruN /usr/ports/biology/emboss/files/patch-embindex.c emboss/files/patch-embindex.c
 --- /usr/ports/biology/emboss/files/patch-embindex.c	Wed Dec 31 21:00:00 1969
 +++ emboss/files/patch-embindex.c	Mon Jan 23 12:25:40 2006
 @@ -0,0 +1,115 @@
 +--- nucleus/embindex.c.orig	Mon Jan 23 12:24:54 2006
 ++++ nucleus/embindex.c	Thu Dec 22 13:12:38 2005
 +@@ -973,15 +973,14 @@
 + 	if(!do_ref)
 + 	{
 + 	    ajListPop(entry->files,(void **)&tmpstr);
 +-	    ajFmtPrintF(entfile,"%S%S\n",entry->directory,tmpstr);
 ++	    ajFmtPrintF(entfile,"%S\n",tmpstr);
 + 	    ajListPushApp(entry->files,(void *)tmpstr);
 + 	}
 + 	else
 + 	{
 + 	    ajListPop(entry->files,(void **)&tmpstr);
 + 	    ajListPop(entry->reffiles,(void **)&refstr);
 +-	    ajFmtPrintF(entfile,"%S%S %S%S\n",entry->directory,tmpstr,
 +-			entry->directory,refstr);
 ++	    ajFmtPrintF(entfile,"%S %S\n",tmpstr, refstr);
 + 	    ajListPushApp(entry->files,(void *)tmpstr);
 + 	    ajListPushApp(entry->reffiles,(void *)refstr);
 + 	}
 +@@ -1150,7 +1149,15 @@
 +     entry->desecfill  = (entry->pagesize - 16) / (entry->idlen + 4);
 +     entry->txsecfill  = (entry->pagesize - 16) / (entry->idlen + 4);
 + 
 ++    entry->idsecorder = (entry->pagesize - 60) / 24;
 ++    entry->idsecfill  = (entry->pagesize - 60) / 20;
 + 
 ++    entry->acsecorder = (entry->pagesize - 60) / 24;
 ++    entry->acsecfill  = (entry->pagesize - 60) / 20;
 ++
 ++    entry->svsecorder = (entry->pagesize - 60) / 24;
 ++    entry->svsecfill  = (entry->pagesize - 60) / 20;
 ++    
 +     ajStrDel(&value);
 + 
 +     return;
 +@@ -1183,28 +1190,38 @@
 + 
 +     if(entry->do_id)
 +     {
 +-	entry->idcache = ajBtreeCacheNewC(basenam,ID_EXTENSION,idir,"w+",
 +-					  entry->pagesize, entry->idorder,
 +-					  entry->idfill, level,
 +-					  entry->cachesize);
 ++	entry->idcache = ajBtreeSecCacheNewC(basenam,ID_EXTENSION,idir,"w+",
 ++					     entry->pagesize, entry->idorder,
 ++					     entry->idfill, level,
 ++					     entry->cachesize,
 ++					     entry->idsecorder, slevel,
 ++					     entry->idsecfill, count,
 ++					     entry->kwlen);
 + 	ajBtreeCreateRootNode(entry->idcache,0L);
 +     }
 + 
 +     if(entry->do_accession)
 +     {
 +-	entry->accache = ajBtreeCacheNewC(basenam,AC_EXTENSION,idir,"w+",
 +-					  entry->pagesize, entry->acorder,
 +-					  entry->acfill, level,
 +-					  entry->cachesize);
 ++	entry->accache = ajBtreeSecCacheNewC(basenam,AC_EXTENSION,idir,"w+",
 ++					     entry->pagesize,
 ++					     entry->acorder, entry->acfill,
 ++					     level,
 ++					     entry->cachesize,
 ++					     entry->acsecorder, slevel,
 ++					     entry->acsecfill, count,
 ++					     entry->kwlen);
 + 	ajBtreeCreateRootNode(entry->accache,0L);
 +     }
 + 
 +     if(entry->do_sv)
 +     {
 +-	entry->svcache = ajBtreeCacheNewC(basenam,SV_EXTENSION,idir,"w+",
 +-					  entry->pagesize, entry->svorder,
 +-					  entry->svfill, level,
 +-					  entry->cachesize);
 ++	entry->svcache = ajBtreeSecCacheNewC(basenam,SV_EXTENSION,idir,"w+",
 ++					     entry->pagesize, entry->svorder,
 ++					     entry->svfill, level,
 ++					     entry->cachesize,
 ++					     entry->svsecorder, slevel,
 ++					     entry->svsecfill, count,
 ++					     entry->kwlen);
 + 	ajBtreeCreateRootNode(entry->svcache,0L);
 +     }
 + 
 +@@ -1270,18 +1287,27 @@
 + 
 +     if(entry->do_id)
 +     {
 ++	ajBtreeFreePriArray(entry->idcache);
 ++	ajBtreeFreeSecArray(entry->idcache);
 ++
 + 	ajBtreeCacheSync(entry->idcache,0L);
 + 	ajBtreeCacheDel(&entry->idcache);
 +     }
 + 
 +     if(entry->do_accession)
 +     {
 ++	ajBtreeFreePriArray(entry->accache);
 ++	ajBtreeFreeSecArray(entry->accache);
 ++
 + 	ajBtreeCacheSync(entry->accache,0L);
 + 	ajBtreeCacheDel(&entry->accache);
 +     }
 + 
 +     if(entry->do_sv)
 +     {
 ++	ajBtreeFreePriArray(entry->svcache);
 ++	ajBtreeFreeSecArray(entry->svcache);
 ++
 + 	ajBtreeCacheSync(entry->svcache,0L);
 + 	ajBtreeCacheDel(&entry->svcache);
 +     }
 diff -ruN /usr/ports/biology/emboss/files/patch-embindex.h emboss/files/patch-embindex.h
 --- /usr/ports/biology/emboss/files/patch-embindex.h	Wed Dec 31 21:00:00 1969
 +++ emboss/files/patch-embindex.h	Mon Jan 23 12:25:48 2006
 @@ -0,0 +1,96 @@
 +--- nucleus/embindex.h.orig	Mon Jan 23 12:24:46 2006
 ++++ nucleus/embindex.h	Thu Dec 22 13:12:44 2005
 +@@ -16,6 +16,76 @@
 + #define BTREE_DEF_CACHESIZE 100
 + #define BTREE_DEF_PAGESIZE  2048
 + 
 ++/* @data EmbPBtreeEntry *******************************************************
 ++**
 ++** Index tree entries
 ++**
 ++** @alias EmbSBtreeEntry
 ++**
 ++** @attr do_id [AjBool] Undocumented
 ++** @attr do_accession [AjBool] Undocumented
 ++** @attr do_sv [AjBool] Undocumented
 ++** @attr do_description [AjBool] Undocumented
 ++** @attr do_keyword [AjBool] Undocumented
 ++** @attr do_taxonomy [AjBool] Undocumented
 ++** @attr dbname [AjPStr] Undocumented
 ++** @attr dbrs [AjPStr] Undocumented
 ++** @attr release [AjPStr] Undocumented
 ++** @attr date [AjPStr] Undocumented
 ++** @attr dbtype [AjPStr] Undocumented
 ++** @attr directory [AjPStr] Undocumented
 ++** @attr idirectory [AjPStr] Undocumented
 ++** @attr files [AjPList] Undocumented
 ++** @attr reffiles [AjPList] Undocumented
 ++** @attr nfiles [ajint] Undocumented
 ++** @attr cachesize [ajint] Undocumented
 ++** @attr pagesize [ajint] Undocumented
 ++** @attr idlen [ajint] Undocumented
 ++** @attr aclen [ajint] Undocumented
 ++** @attr svlen [ajint] Undocumented
 ++** @attr kwlen [ajint] Undocumented
 ++** @attr delen [ajint] Undocumented
 ++** @attr txlen [ajint] Undocumented
 ++** @attr idorder [ajint] Undocumented
 ++** @attr idfill [ajint] Undocumented
 ++** @attr idsecorder [ajint] Undocumented
 ++** @attr idsecfill [ajint] Undocumented
 ++** @attr acorder [ajint] Undocumented
 ++** @attr acfill [ajint] Undocumented
 ++** @attr acsecorder [ajint] Undocumented
 ++** @attr acsecfill [ajint] Undocumented
 ++** @attr svorder [ajint] Undocumented
 ++** @attr svfill [ajint] Undocumented
 ++** @attr svsecorder [ajint] Undocumented
 ++** @attr svsecfill [ajint] Undocumented
 ++** @attr kworder [ajint] Undocumented
 ++** @attr kwfill [ajint] Undocumented
 ++** @attr kwsecorder [ajint] Undocumented
 ++** @attr kwsecfill [ajint] Undocumented
 ++** @attr deorder [ajint] Undocumented
 ++** @attr defill [ajint] Undocumented
 ++** @attr desecorder [ajint] Undocumented
 ++** @attr desecfill [ajint] Undocumented
 ++** @attr txorder [ajint] Undocumented
 ++** @attr txfill [ajint] Undocumented
 ++** @attr txsecorder [ajint] Undocumented
 ++** @attr txsecfill [ajint] Undocumented
 ++** @attr idcache [AjPBtcache] Undocumented
 ++** @attr accache [AjPBtcache] Undocumented
 ++** @attr svcache [AjPBtcache] Undocumented
 ++** @attr kwcache [AjPBtcache] Undocumented
 ++** @attr decache [AjPBtcache] Undocumented
 ++** @attr txcache [AjPBtcache] Undocumented
 ++** @attr fpos [ajlong] Undocumented
 ++** @attr reffpos [ajlong] Undocumented
 ++** @attr id [AjPStr] Undocumented
 ++** @attr ac [AjPList] Undocumented
 ++** @attr sv [AjPList] Undocumented
 ++** @attr tx [AjPList] Undocumented
 ++** @attr kw [AjPList] Undocumented
 ++** @attr de [AjPList] Undocumented
 ++******************************************************************************/
 ++
 + typedef struct EmbSBtreeEntry
 + {
 +     AjBool do_id;
 +@@ -48,10 +118,16 @@
 + 
 +     ajint idorder;
 +     ajint idfill;
 ++    ajint idsecorder;
 ++    ajint idsecfill;
 +     ajint acorder;
 +     ajint acfill;
 ++    ajint acsecorder;
 ++    ajint acsecfill;
 +     ajint svorder;
 +     ajint svfill;
 ++    ajint svsecorder;
 ++    ajint svsecfill;
 + 
 +     ajint kworder;
 +     ajint kwfill;
 diff -ruN /usr/ports/biology/emboss/files/patch-emboss.default.template emboss/files/patch-emboss.default.template
 --- /usr/ports/biology/emboss/files/patch-emboss.default.template	Wed Dec 31 21:00:00 1969
 +++ emboss/files/patch-emboss.default.template	Wed Feb  8 00:44:31 2006
 @@ -0,0 +1,20 @@
 +--- emboss/emboss.default.template.orig	Wed Feb  8 00:43:42 2006
 ++++ emboss/emboss.default.template	Wed Feb  8 00:40:34 2006
 +@@ -4,7 +4,7 @@
 + # By default this is /usr/local/share/EMBOSS/test but the directory can
 + # be changed with --prefix when you configure EMBOSS.
 + 
 +-# SET emboss_tempdata path_to_directory_$EMBOSS/test
 ++# SET emboss_tempdata %%DATADIR%%/test
 + 
 + # Proxy - set this if any databases are accessed through a proxy web server.
 + # Turn off in the DB definition with proxy: ":" for any
 +@@ -15,7 +15,7 @@
 + # Logfile - set this to a file that any user can append to
 + # and EMBOSS applications will automatically write log information
 + 
 +-# SET emboss_logfile /packages/emboss/emboss/log
 ++# SET emboss_logfile /var/log/emboss.log
 + 
 + # Pagesize - this is the size of disc page blocks and is
 + # required by the 'dbx' indexing programs and 'method: emboss'
 diff -ruN /usr/ports/biology/emboss/files/patch-marscan.c emboss/files/patch-marscan.c
 --- /usr/ports/biology/emboss/files/patch-marscan.c	Wed Dec 31 21:00:00 1969
 +++ emboss/files/patch-marscan.c	Mon Jan 23 11:37:24 2006
 @@ -0,0 +1,72 @@
 +--- emboss/marscan.c.orig	Mon Jan 23 11:36:36 2006
 ++++ emboss/marscan.c	Mon Jan 23 08:56:35 2006
 +@@ -1,7 +1,7 @@
 + /* @source marscan application
 + **
 + ** Finds MAR/SAR sites in nucleic sequences
 +-** @author: Copyright (C) Gary Williams (gwilliam@hgmp.mrc.ac.uk)
 ++** @author Copyright (C) Gary Williams (gwilliam@hgmp.mrc.ac.uk)
 + ** @@
 + **
 + ** This program is free software; you can redistribute it and/or
 +@@ -249,33 +249,41 @@
 + 			 amino8rev, carboxyl8rev, buf8rev, off8rev,
 + 			 sotable8rev, solimit8rev, regexp8rev, skipm8rev,
 + 			 &hits8rev, m8rev, &tidy8rev);
 ++	ajDebug("Marscan '%S' hits %d:%d %d:%d\n", seqname,
 ++		hits16, hits16rev,
 ++		hits8, hits8rev);
 ++
 ++	/* initialise the output feature table */
 ++	tab = ajFeattableNewDna(seqname);
 ++
 ++	/*
 ++	**  append reverse lists to forward lists and sort them by match
 ++	**  position
 ++	*/
 + 
 +-	if((hits16 || hits16rev) && (hits8 || hits8rev))
 ++	if(hits8 || hits8rev)
 + 	{
 +-	    /*
 +-	    **  append reverse lists to forward lists and sort them by match
 +-	    **  position
 +-	    */
 + 	    ajListPushList(l8, &l8rev);
 + 	    ajListSort(l8, embPatRestrictStartCompare);
 +-
 ++	}
 ++	if((hits16 || hits16rev))
 ++	{
 + 	    ajListPushList(l16, &l16rev);
 + 	    ajListSort(l16, embPatRestrictStartCompare);
 + 
 +-	    /* initialise the output feature table */
 +-	    if(!tab)
 +-		tab = ajFeattableNewDna(seqname);
 +-
 +-	    /*
 +-	    **  find pairs of hits within the required distance and output
 +-	    **  the results
 +-	    */
 +-	    marscan_stepdown(l16, l8, &tab);
 +-
 +-	    /* write features and tidy up */
 +-	    ajReportWrite(report, tab, seq);
 +-	    ajFeattableDel(&tab);
 + 	}
 ++
 ++
 ++	/*
 ++	**  find pairs of hits within the required distance and output
 ++	**  the results
 ++	*/
 ++	marscan_stepdown(l16, l8, &tab);
 ++
 ++	ajDebug("Marscan reportwrite '%S'\n", seqname);
 ++	/* write features and tidy up */
 ++	ajReportWrite(report, tab, seq);
 ++	ajFeattableDel(&tab);
 + 
 +         while(ajListPop(l16,(void **)&aptr))
 +             embMatMatchDel(&aptr);
 diff -ruN /usr/ports/biology/emboss/files/pkg-message.in emboss/files/pkg-message.in
 --- /usr/ports/biology/emboss/files/pkg-message.in	Wed Dec 31 21:00:00 1969
 +++ emboss/files/pkg-message.in	Wed Feb  8 14:12:12 2006
 @@ -0,0 +1,27 @@
 +=============================================================================
 +
 + The EMBOSS suite has been successfully installed under
 + %%PREFIX%%
 +
 + To run EMBOSS programs make sure that %%PREFIX%%/bin is in your PATH.
 +
 + In order to see graphical output from some EMBOSS programs, you will 
 + need to set the following environment variable in your shell:
 +
 + set PLPLOT_LIB to: "%%PREFIX%%/share/EMBOSS"
 +
 + A sample configuration file has been installed in
 + %%DATADIR%%/emboss.default.template
 +
 + This must be renamed to emboss.default and edited to suit your site 
 + and requirements.
 +
 + A .embossrc file in a user's home directory overrides settings in the
 + system-wide emboss.default.
 +
 + Additional third party applications for EMBOSS can be installed from the
 + biology/embassy port. Remember, though that if you installed EMBOSS in a 
 + PREFIX other than the default, you will have to install EMBASSY into this 
 + same PREFIX.
 +
 +=============================================================================
 diff -ruN /usr/ports/biology/emboss/files/pre-install.in emboss/files/pre-install.in
 --- /usr/ports/biology/emboss/files/pre-install.in	Wed Dec 31 21:00:00 1969
 +++ emboss/files/pre-install.in	Wed Jan 25 15:06:47 2006
 @@ -0,0 +1,21 @@
 +===============================================================================
 +
 + ATENTION!!!
 +
 + The EMBOSS port is currently affected by a CONFLICTS condition.
 + If you install the port in the default prefix
 + PREFIX = LOCALBASE = %%LOCALBASE%%
 + it will conflict with other ports that install applications with the 
 + same name, in the same places. 
 +
 + It is highly recommended that you install EMBOSS to a different prefix,
 + for example PREFIX=%%LOCALBASE%%/emboss
 + In this case, all of the documentation and examples will be installed 
 + within this PREFIX. 
 +
 + If you still choose to install EMBOSS on the default prefix, do note 
 + that documentation, examples and shared data will not be installed 
 + in the usual places for a FreeBSD port (i.e. docs in
 + PREFIX/share/EMBOSS/doc instead of in PREFIX/share/doc/EMBOSS).
 +
 +===============================================================================
 diff -ruN /usr/ports/biology/emboss/pkg-message emboss/pkg-message
 --- /usr/ports/biology/emboss/pkg-message	Thu Apr 28 09:05:22 2005
 +++ emboss/pkg-message	Wed Dec 31 21:00:00 1969
 @@ -1,22 +0,0 @@
 ---------------------------------------------------------------------------
 -
 -The EMBOSS suite has been successfully installed.
 -
 -In order to see graphical output from some EMBOSS programs, you will need to
 -set the following environment variable in your shell startup file:
 -
 -- set PLPLOT_LIB to:     "%%PREFIX%%/share/EMBOSS"
 -
 -NB:  A sample configuration file has been installed to %%PREFIX%%/etc as
 -emboss.default.sample.  This must be renamed to emboss.default and edited
 -to suit your site and its requirements.
 -
 -A .embossrc in a user's home directory overrides settings in the
 -system-wide emboss.default.
 -
 -Online EMBOSS documentation is available at:
 -	http://www.uk.embnet.org/Software/EMBOSS/userdoc.html
 -	http://www.uk.embnet.org/Software/EMBOSS/Doc/
 -  http://emboss.sourceforge.net/docs/
 -
 ---------------------------------------------------------------------------
 diff -ruN /usr/ports/biology/emboss/pkg-plist emboss/pkg-plist
 --- /usr/ports/biology/emboss/pkg-plist	Wed Mar  1 20:11:41 2006
 +++ emboss/pkg-plist	Wed Feb  8 13:55:48 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,31 @@
  bin/wordmatch
  bin/wossname
  bin/yank
 +bin/runJemboss.csh
  etc/emboss.default.sample
 +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 +196,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 +230,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 +255,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 +491,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 +537,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 +544,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 +577,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 +599,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 +622,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 +647,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 +659,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 +807,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 +833,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 +866,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 +903,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 +926,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 +950,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%%
 
 --l76fUT7nc3MelDdI--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200603162150.k2GLoFdl010429>