ports/93053: sync update of biology/emboss && biology/embassy

Fernan Aguero fernan at iib.unsam.edu.ar
Wed Feb 8 19:10:17 UTC 2006


>Number:         93053
>Category:       ports
>Synopsis:       sync update of biology/emboss && biology/embassy
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          maintainer-update
>Submitter-Id:   current-users
>Arrival-Date:   Wed Feb 08 19:10:08 GMT 2006
>Closed-Date:
>Last-Modified:
>Originator:     Fernan Aguero
>Release:        FreeBSD 6.0-RELEASE-p4 i386
>Organization:
IIB-UNSAM
>Environment:

System: FreeBSD omega.iib.unsam.edu.ar 6.0-RELEASE-p4 FreeBSD 6.0-RELEASE-p4 #0: Wed Jan 25 12:43:39 ART 2006 fernan at omega.iib.unsam.edu.ar:/usr/obj/usr/src/sys/OMEGA i386

	
>Description:
	
	
	For EMBOSS:
	

	This patch brings EMBOSS up to date with the current version.
	
	i.   The patches included in files/ are bugfixes for files in
	     EMBOSS-3.0.0 that appeared after the release. They are
   	     documented in ftp://emboss.open-bio.org/pub/EMBOSS/fixes/README
	
	     This is just 'for the record' so that we remember to remove these 
	     patches in the next update.
	
	ii.  EMBOSS is now installed by default in LOCALBASE/emboss
	     This is to avoid CONFLICTS with other ports that install files
	     with the same names. Installing EMBOSS to another PREFIX is also
	     possible.
	
	iii. now EMBASSY and EMBOSS both store their distfiles in the same
	     DIST_SUBDIR
	
	iv.  use built-in PKGMESSAGE and SUB_FILES instead of doing it the old
	     (manual) way


	For EMBASSY:

	
	This update brings embassy in sync with the update of EMBOSS to 3.0.0
	(in separate PR).
	
	Things that changed from previous version of the port:
	
	i.  embassy now installs by default in $LOCALBASE/emboss (the
	    new default PREFIX for emboss as well). 
	   
	ii. changed DIST_SUBDIR so that all the distfiles are put together with
	    emboss. This makes sense(TM)
	
	iii. incorporated new EMBASSY apps (this accounts for the changes in
	     OPTIONS and pkg-plist)
	
	iv.  removed obsoleted patches


	Finally, I included a sample text that could go in UPDATING.
	The change is not drastic, but a notice would not hurt.
	
>How-To-Repeat:
	
	
>Fix:

	



--- emboss.diff begins here ---
diff -ruN /usr/ports/biology/emboss/Makefile emboss/Makefile
--- /usr/ports/biology/emboss/Makefile	Fri Feb  3 23:06:22 2006
+++ emboss/Makefile	Wed Feb  8 14:35:41 2006
@@ -6,13 +6,15 @@
 #
 
 PORTNAME=	emboss
-PORTVERSION=	2.10.0
+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 at iib.unsam.edu.ar
 COMMENT=	A collection of open source tools for genetic sequence analysis
@@ -31,8 +33,8 @@
 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 at 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 at hgmp.mrc.ac.uk)
++** @author Copyright (C) Alan Bleasby (ableasby at 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 at hgmp.mrc.ac.uk)
++** @author Copyright (C) Alan Bleasby (ableasby at 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 at hgmp.mrc.ac.uk)
++** @author Copyright (C) Alan Bleasby (ableasby at 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 at hgmp.mrc.ac.uk)
++** @author Copyright (C) Gary Williams (gwilliam at 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 Jan 25 18:04:51 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,995 +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/libplplot.so.5
+lib/libplplot.so
+lib/libplplot.a
+lib/libajax.so.3
 lib/libajax.so
-lib/libajax.so.1
-lib/libajaxg.a
+lib/libajax.a
+lib/libajaxg.so.3
 lib/libajaxg.so
-lib/libajaxg.so.1
-lib/libnucleus.a
+lib/libajaxg.a
+lib/libnucleus.so.3
 lib/libnucleus.so
-lib/libnucleus.so.1
-lib/libplplot.a
-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
@@ -1233,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
@@ -1283,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
@@ -1299,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
@@ -1335,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
@@ -1359,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
@@ -1383,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
@@ -1410,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
@@ -1423,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
@@ -1623,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
@@ -1653,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
@@ -1692,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
@@ -1728,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
@@ -1752,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
@@ -1777,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%%
- at dirrm %%DATADIR%%/test/wormpep
- at dirrm %%DATADIR%%/test/swnew
- at dirrm %%DATADIR%%/test/swiss
- at dirrm %%DATADIR%%/test/pir
+ at dirrm %%DATADIR%%/acd
+ at dirrm %%DATADIR%%/data/AAINDEX
+ at dirrm %%DATADIR%%/data/CODONS
+ at dirrm %%DATADIR%%/data/REBASE
+ at dirrm %%DATADIR%%/data/PRINTS
+ at dirrm %%DATADIR%%/data/PROSITE
+ at dirrmtry %%DATADIR%%/data
+ at dirrm %%DATADIR%%/test/data
+ at dirrm %%DATADIR%%/test/embl
 @dirrm %%DATADIR%%/test/genbank
 @dirrm %%DATADIR%%/test/gb
- at dirrm %%DATADIR%%/test/embl
- at dirrm %%DATADIR%%/test/data
+ at dirrm %%DATADIR%%/test/pir
+ at dirrm %%DATADIR%%/test/swiss
+ at dirrm %%DATADIR%%/test/swnew
+ at dirrm %%DATADIR%%/test/wormpep
 @dirrm %%DATADIR%%/test
- at dirrm %%DATADIR%%/jemboss/utils
- at dirrm %%DATADIR%%/jemboss/resources
- at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/soap
- at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/server
- at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/programs
- at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/parser/acd
- at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/parser
- at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/startup
- at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/sequenceChooser
- at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/form
- at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree
- at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui
- at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/graphics
- at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/editor
- at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/draw
- at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss
- at dirrm %%DATADIR%%/jemboss/org/emboss
- at dirrm %%DATADIR%%/jemboss/org
- at dirrm %%DATADIR%%/jemboss/lib/axis
- at dirrm %%DATADIR%%/jemboss/lib
- at dirrm %%DATADIR%%/jemboss/images
- at dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/soap
- at dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/programs
- at dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/acd
- at dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/parser
- at dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/startup
- at dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/sequenceChooser
- at dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form
 @dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/filetree
+ at dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form
+ at dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/sequenceChooser
+ at dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/startup
 @dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui
+ at dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/acd
+ at dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/parser
+ at dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/programs
+ at 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
+ at dirrm %%DATADIR%%/jemboss/images
+ at dirrm %%DATADIR%%/jemboss/lib/axis
+ at dirrm %%DATADIR%%/jemboss/lib
+ at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/editor
+ at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/draw
+ at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/graphics
+ at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree
+ at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/form
+ at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/sequenceChooser
+ at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/startup
+ at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui
+ at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/parser/acd
+ at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/parser
+ at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/programs
+ at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/server
+ at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/soap
+ at dirrm %%DATADIR%%/jemboss/org/emboss/jemboss
+ at dirrm %%DATADIR%%/jemboss/org/emboss
+ at dirrm %%DATADIR%%/jemboss/org
+ at dirrm %%DATADIR%%/jemboss/resources
+ at dirrm %%DATADIR%%/jemboss/utils
 @dirrm %%DATADIR%%/jemboss
- at dirrm %%DATADIR%%/data/REBASE
- at dirrm %%DATADIR%%/data/PROSITE
- at dirrm %%DATADIR%%/data/PRINTS
- at dirrm %%DATADIR%%/data/CODONS
- at dirrm %%DATADIR%%/data/AAINDEX
- at dirrm %%DATADIR%%/data
- at dirrm %%DATADIR%%/acd
- at dirrm %%DATADIR%%
+ at dirrmtry %%DATADIR%%
--- emboss.diff ends here ---

--- embassy.diff begins here ---
diff -ruN /usr/ports/biology/embassy/Makefile embassy/Makefile
--- /usr/ports/biology/embassy/Makefile	Fri Feb  3 23:06:22 2006
+++ embassy/Makefile	Wed Feb  8 15:15:51 2006
@@ -7,18 +7,19 @@
 #
 
 PORTNAME=	embassy
-PORTVERSION=	2.10.0
+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/
-DIST_SUBDIR=	${PORTNAME}
+DIST_SUBDIR=	emboss
 
 MAINTAINER=	fernan at iib.unsam.edu.ar
 COMMENT=	A collection of contributed EMBOSS applications
 
-LIB_DEPENDS=	nucleus.1:${PORTSDIR}/biology/emboss
-
+PREFIX?=	${LOCALBASE}/emboss
+NO_MTREE=	yes
 USE_SUBMAKE=	yes
 USE_ICONV=	yes
 USE_GMAKE=	yes
@@ -26,28 +27,43 @@
 USE_XLIB=	yes
 USE_MOTIF=	yes
 
-OPTIONS=	DOMAINATRIX	"Protein structure and domain apps" on \
+LIB_DEPENDS=	nucleus.3:${PORTSDIR}/biology/emboss
+BUILD_DEPENDS=	${PREFIX}/include/ajax.h:${PORTSDIR}/biology/emboss
+	
+OPTIONS=	DOMAINATRIX	"Protein domain apps" on \
+		DOMALIGN	"Protein domain apps" on \
+		DOMSEARCH	"Protein domain apps" on \
+		SIGNATURE	"Protein domain apps" on \
+		STRUCTURE	"Protein domain apps" on \
 		EMNU		"EMBOSS simple menu" on \
 		ESIM4		"Align cDNA/EST to genome" on \
 		HMMER		"HMM alignment and searches" on \
 		MEME		"Motif detection" on \
 		MSE		"A multiple sequence screen editor" on \
+		MYEMBOSS	"Examples for developers of EMBOSS apps" on \
 		PHYLIP		"Phylogeny inference" on \
 		TOPO		"Transmembrane display" on
 
 CONFIGURE_ENV+=	CPPFLAGS="-I${PREFIX}/include -I${LOCALBASE}/include" \
 		LDFLAGS="-L${PREFIX}/lib -L${LOCALBASE}/lib"
 
+
 EMBASSY_WRKDIR=		${WRKSRC}/EMBASSY
-DOMAINATRIX_VERSION=	1.0.0
+DOMAINATRIX_VERSION=	0.1.0
 EMNU_VERSION=		1.05
 ESIM4_VERSION=		1.0.0
 HMMER_VERSION=		2.1.1
 MEME_VERSION=		2.3.1
 MSE_VERSION=		1.0.0
 TOPO_VERSION=		1.0.0
-PHYLIP_VERSION=		3.57c
-EMBASSY_APPS=		DOMAINATRIX EMNU ESIM4 HMMER MEME MSE PHYLIP TOPO
+PHYLIP_VERSION=		3.6b
+DOMALIGN_VERSION=	0.1.0
+DOMSEARCH_VERSION=	0.1.0
+SIGNATURE_VERSION=	0.1.0
+STRUCTURE_VERSION=	0.1.0
+MYEMBOSS_VERSION=	3.0.0
+EMBASSY_APPS=		DOMAINATRIX EMNU ESIM4 HMMER MEME MSE PHYLIP TOPO \
+			DOMALIGN DOMSEARCH SIGNATURE STRUCTURE MYEMBOSS
 
 .include <bsd.port.pre.mk>
 
@@ -74,16 +90,6 @@
 	    ${CHOWN} -R 0:0 ${${app}_WRKSRC}; \
 	  fi
 .endfor
-
-.if !defined(WITHOUT_DOMAINATRIX)
-pre-configure::
-	@${PATCH} ${PATCH_ARGS} < ${PATCHDIR}/domainatrix-patch-Makefile.in
-.endif
-
-.if !defined(WITHOUT_EMNU)
-pre-configure::
-	@${PATCH} ${PATCH_ARGS} < ${PATCHDIR}/emnu-patch-Makefile.in
-.endif
 
 do-configure:
 .for app in ${APPLIST}
diff -ruN /usr/ports/biology/embassy/distinfo embassy/distinfo
--- /usr/ports/biology/embassy/distinfo	Wed Jan 25 11:31:47 2006
+++ embassy/distinfo	Thu Jan 26 12:28:50 2006
@@ -1,24 +1,39 @@
-MD5 (embassy/DOMAINATRIX-1.0.0.tar.gz) = 9deff6f5bf526408f0f02c002488ad59
-SHA256 (embassy/DOMAINATRIX-1.0.0.tar.gz) = 50abb58f3196f2f3d04af2649ace36457315c378fa73345cb635b51e913db8fc
-SIZE (embassy/DOMAINATRIX-1.0.0.tar.gz) = 471604
-MD5 (embassy/EMNU-1.05.tar.gz) = df29ae1e8201081f4413862d7f10edb5
-SHA256 (embassy/EMNU-1.05.tar.gz) = 4bcdc64c9ec2d818b3ba00eef34eee39e11ef99d87cf292a214b7be51bf6bf48
-SIZE (embassy/EMNU-1.05.tar.gz) = 339355
-MD5 (embassy/ESIM4-1.0.0.tar.gz) = 3b8137b3b8ff0e84bc6e1243c7343578
-SHA256 (embassy/ESIM4-1.0.0.tar.gz) = 6e24466905c457d3f464f3a7fb24680a01326cb22acf7d090b84a51da0382d2a
-SIZE (embassy/ESIM4-1.0.0.tar.gz) = 378342
-MD5 (embassy/HMMER-2.1.1.tar.gz) = 56816b26a43c8542f7d12f9069e77843
-SHA256 (embassy/HMMER-2.1.1.tar.gz) = 63f3d4e6a509b8d1a815a9dc7e74fe7c458a9478e4885608349eeb2aa8c2df87
-SIZE (embassy/HMMER-2.1.1.tar.gz) = 562855
-MD5 (embassy/MEME-2.3.1.tar.gz) = a9fb38886665f3f654da1244c2e1476f
-SHA256 (embassy/MEME-2.3.1.tar.gz) = 778589a63705e17db1aded3704b70a3cc3de4b1e41f90ccfcd8d86b7f6dab622
-SIZE (embassy/MEME-2.3.1.tar.gz) = 421914
-MD5 (embassy/MSE-1.0.0.tar.gz) = b666681aceb9f07f968585f2edc4a039
-SHA256 (embassy/MSE-1.0.0.tar.gz) = 13fca33f78cd83e2a53c0b08a0db97da2b9dd572e01a694e8acd6a87316b3fa7
-SIZE (embassy/MSE-1.0.0.tar.gz) = 411772
-MD5 (embassy/PHYLIP-3.57c.tar.gz) = 83201895898feb15dbbae6affabd3609
-SHA256 (embassy/PHYLIP-3.57c.tar.gz) = ff5385d0b5b6c5f42a8b7c53a682ede654e0309f4ab31859f5b907563a4a7b4f
-SIZE (embassy/PHYLIP-3.57c.tar.gz) = 858348
-MD5 (embassy/TOPO-1.0.0.tar.gz) = 0a8fcc84fdba071b20f3046de9fdb487
-SHA256 (embassy/TOPO-1.0.0.tar.gz) = d1e9e6c9c37b36f4bfca485fbda68d1c045c8fa1171eea94089773ed40bc11d3
-SIZE (embassy/TOPO-1.0.0.tar.gz) = 345938
+MD5 (emboss/DOMAINATRIX-0.1.0.tar.gz) = 655f6ec58e0b9dfdac111fd9481359cb
+SHA256 (emboss/DOMAINATRIX-0.1.0.tar.gz) = 6bc374c5275dead68ef09d8273bf4d73a03bc56990e795d6eddcee4de25c12a0
+SIZE (emboss/DOMAINATRIX-0.1.0.tar.gz) = 349882
+MD5 (emboss/EMNU-1.05.tar.gz) = b3a7fc11e46f7166ddeec11f2fe03d9b
+SHA256 (emboss/EMNU-1.05.tar.gz) = d7261d615d6547a9824d3d9e3f82ff756c0db5786e8356bc54cc5fa0c516b26f
+SIZE (emboss/EMNU-1.05.tar.gz) = 348924
+MD5 (emboss/ESIM4-1.0.0.tar.gz) = 835393b3246eb4543a694362c6f335ff
+SHA256 (emboss/ESIM4-1.0.0.tar.gz) = f8241c9e37ccc17dbd29df2d9c90063ba7caf4e64cc5c368b6878c3aa3895620
+SIZE (emboss/ESIM4-1.0.0.tar.gz) = 384396
+MD5 (emboss/HMMER-2.1.1.tar.gz) = 382594654e45a7e8d5872b4b1016a494
+SHA256 (emboss/HMMER-2.1.1.tar.gz) = 78647dfb7841e8b52b4c3de34400c68d17a877b698956ac9a5ee5e030569cca6
+SIZE (emboss/HMMER-2.1.1.tar.gz) = 561289
+MD5 (emboss/MEME-2.3.1.tar.gz) = 6f4e516e413582268a34e91fb12e21c3
+SHA256 (emboss/MEME-2.3.1.tar.gz) = bec2c8002b8b551ef9c639bcb58633499060cd8a1bfe4754db5ed201a6a0dffa
+SIZE (emboss/MEME-2.3.1.tar.gz) = 423966
+MD5 (emboss/MSE-1.0.0.tar.gz) = 3b9810e870937ec32220b5c9fe7a83cd
+SHA256 (emboss/MSE-1.0.0.tar.gz) = ddf9092721666d64c56733d9b6d04e749957848cafa8ba4ec6eee083a0ffcab3
+SIZE (emboss/MSE-1.0.0.tar.gz) = 415051
+MD5 (emboss/PHYLIP-3.6b.tar.gz) = 6f2c10438d788acf4a1dff23441b2a2c
+SHA256 (emboss/PHYLIP-3.6b.tar.gz) = 32aba94d0be011ee304e974657db11544297c008e53341cd000a1f412eb874e2
+SIZE (emboss/PHYLIP-3.6b.tar.gz) = 1136746
+MD5 (emboss/TOPO-1.0.0.tar.gz) = 7b3355570ba36f7daf57dcbc717215ce
+SHA256 (emboss/TOPO-1.0.0.tar.gz) = ff10378b4ecad69ddb374cd47a7d3c7fa5975d6695057f05ea264940258ebaa3
+SIZE (emboss/TOPO-1.0.0.tar.gz) = 351796
+MD5 (emboss/DOMALIGN-0.1.0.tar.gz) = 4332d7de49b27f257b58a90510223eb7
+SHA256 (emboss/DOMALIGN-0.1.0.tar.gz) = de66ddfdb72ccf7291be614c9a83fd8fc47363191cb2c045b372de5cc334a594
+SIZE (emboss/DOMALIGN-0.1.0.tar.gz) = 347672
+MD5 (emboss/DOMSEARCH-0.1.0.tar.gz) = c62f9b69a9ed9580d4489a8de9ea4863
+SHA256 (emboss/DOMSEARCH-0.1.0.tar.gz) = f4933b62e19ee6b23a78b70c3cf2d5a9a18eff1d7532f92e2d33b1d683877916
+SIZE (emboss/DOMSEARCH-0.1.0.tar.gz) = 352793
+MD5 (emboss/SIGNATURE-0.1.0.tar.gz) = 1e30e12048609a468b7b4d4affb177cf
+SHA256 (emboss/SIGNATURE-0.1.0.tar.gz) = c6bb252beaccac5256d99301933b15da6ef90af3f20d7f92fed1f78b271785ee
+SIZE (emboss/SIGNATURE-0.1.0.tar.gz) = 400125
+MD5 (emboss/STRUCTURE-0.1.0.tar.gz) = 6efc35eb2855738252e0537198f5225d
+SHA256 (emboss/STRUCTURE-0.1.0.tar.gz) = 7142e207987da46cd85c81088ea475abb866da90ff57e4c3ca1c63bd8f209b64
+SIZE (emboss/STRUCTURE-0.1.0.tar.gz) = 362563
+MD5 (emboss/MYEMBOSS-3.0.0.tar.gz) = 15d5bc7b0ce9dfb113777c06c4e18906
+SHA256 (emboss/MYEMBOSS-3.0.0.tar.gz) = 0a19ebbe52da849fb87799edaea2281a1bf235e6045725789b9b29e58f0a0dc5
+SIZE (emboss/MYEMBOSS-3.0.0.tar.gz) = 323628
diff -ruN /usr/ports/biology/embassy/files/domainatrix-patch-Makefile.in embassy/files/domainatrix-patch-Makefile.in
--- /usr/ports/biology/embassy/files/domainatrix-patch-Makefile.in	Sun May 29 15:26:25 2005
+++ embassy/files/domainatrix-patch-Makefile.in	Wed Dec 31 21:00:00 1969
@@ -1,11 +0,0 @@
---- EMBASSY/DOMAINATRIX-1.0.0/src/Makefile.in.orig	Sat May 28 12:21:57 2005
-+++ EMBASSY/DOMAINATRIX-1.0.0/src/Makefile.in	Sat May 28 12:22:14 2005
-@@ -315,7 +315,7 @@
- @LOCALLINK_TRUE@	../../../plplot/libplplot.la \
- @LOCALLINK_TRUE@	$(am__DEPENDENCIES_1)
- DEFAULT_INCLUDES = -I. -I$(srcdir)
--depcomp = $(SHELL) $(top_srcdir)/../../depcomp
-+depcomp = $(SHELL) $(top_srcdir)/depcomp
- am__depfiles_maybe = depfiles
- COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
diff -ruN /usr/ports/biology/embassy/files/emnu-patch-Makefile.in embassy/files/emnu-patch-Makefile.in
--- /usr/ports/biology/embassy/files/emnu-patch-Makefile.in	Sun May 29 15:26:25 2005
+++ embassy/files/emnu-patch-Makefile.in	Wed Dec 31 21:00:00 1969
@@ -1,11 +0,0 @@
---- EMBASSY/EMNU-1.05/source/Makefile.in.orig	Sat May 28 12:57:17 2005
-+++ EMBASSY/EMNU-1.05/source/Makefile.in	Sat May 28 13:03:33 2005
-@@ -63,7 +63,7 @@
- @LOCALLINK_TRUE@	../../../plplot/libplplot.la \
- @LOCALLINK_TRUE@	$(am__DEPENDENCIES_1)
- DEFAULT_INCLUDES = -I. -I$(srcdir)
--depcomp = $(SHELL) $(top_srcdir)/../../depcomp
-+depcomp = $(SHELL) $(top_srcdir)/depcomp
- am__depfiles_maybe = depfiles
- COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
diff -ruN /usr/ports/biology/embassy/pkg-plist embassy/pkg-plist
--- /usr/ports/biology/embassy/pkg-plist	Wed Jun 29 14:45:27 2005
+++ embassy/pkg-plist	Wed Feb  8 13:49:38 2006
@@ -1,35 +1,37 @@
-%%PLIST_DOMAINATRIX%%bin/allversusall
 %%PLIST_DOMAINATRIX%%bin/cathparse
-%%PLIST_DOMAINATRIX%%bin/contacts
-%%PLIST_DOMAINATRIX%%bin/domainalign
-%%PLIST_DOMAINATRIX%%bin/domainer
 %%PLIST_DOMAINATRIX%%bin/domainnr
-%%PLIST_DOMAINATRIX%%bin/domainrep
 %%PLIST_DOMAINATRIX%%bin/domainreso
 %%PLIST_DOMAINATRIX%%bin/domainseqs
 %%PLIST_DOMAINATRIX%%bin/domainsse
-%%PLIST_DOMAINATRIX%%bin/hetparse
-%%PLIST_DOMAINATRIX%%bin/interface
-%%PLIST_DOMAINATRIX%%bin/libgen
-%%PLIST_DOMAINATRIX%%bin/pdbparse
-%%PLIST_DOMAINATRIX%%bin/pdbplus
-%%PLIST_DOMAINATRIX%%bin/pdbtosp
-%%PLIST_DOMAINATRIX%%bin/rocon
-%%PLIST_DOMAINATRIX%%bin/rocplot
 %%PLIST_DOMAINATRIX%%bin/scopparse
-%%PLIST_DOMAINATRIX%%bin/seqalign
-%%PLIST_DOMAINATRIX%%bin/seqfraggle
-%%PLIST_DOMAINATRIX%%bin/seqnr
-%%PLIST_DOMAINATRIX%%bin/seqsearch
-%%PLIST_DOMAINATRIX%%bin/seqsort
-%%PLIST_DOMAINATRIX%%bin/seqwords
-%%PLIST_DOMAINATRIX%%bin/siggen
-%%PLIST_DOMAINATRIX%%bin/sigscan
-%%PLIST_DOMAINATRIX%%bin/sites
 %%PLIST_DOMAINATRIX%%bin/ssematch
+%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/cathparse.acd
+%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/domainnr.acd
+%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/domainreso.acd
+%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/domainseqs.acd
+%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/domainsse.acd
+%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/scopparse.acd
+%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/ssematch.acd
+%%PLIST_DOMALIGN%%bin/allversusall
+%%PLIST_DOMALIGN%%bin/domainalign
+%%PLIST_DOMALIGN%%bin/domainrep
+%%PLIST_DOMALIGN%%bin/seqalign
+%%PLIST_DOMALIGN%%share/EMBOSS/acd/allversusall.acd
+%%PLIST_DOMALIGN%%share/EMBOSS/acd/domainalign.acd
+%%PLIST_DOMALIGN%%share/EMBOSS/acd/domainrep.acd
+%%PLIST_DOMALIGN%%share/EMBOSS/acd/seqalign.acd
+%%PLIST_DOMSEARCH%%bin/seqnr
+%%PLIST_DOMSEARCH%%bin/seqsearch
+%%PLIST_DOMSEARCH%%bin/seqfraggle
+%%PLIST_DOMSEARCH%%bin/seqsort
+%%PLIST_DOMSEARCH%%bin/seqwords
+%%PLIST_DOMSEARCH%%share/EMBOSS/acd/seqnr.acd
+%%PLIST_DOMSEARCH%%share/EMBOSS/acd/seqsearch.acd
+%%PLIST_DOMSEARCH%%share/EMBOSS/acd/seqfraggle.acd
+%%PLIST_DOMSEARCH%%share/EMBOSS/acd/seqsort.acd
+%%PLIST_DOMSEARCH%%share/EMBOSS/acd/seqwords.acd
 %%PLIST_EMNU%%bin/emnu
-%%PLIST_ESIM4%%bin/esim4
-%%PLIST_MEME%%bin/meme
+%%PLIST_EMNU%%share/EMBOSS/acd/emnu.acd
 %%PLIST_HMMER%%bin/ehmmcalibrate
 %%PLIST_HMMER%%bin/ehmmconvert
 %%PLIST_HMMER%%bin/ehmmemit
@@ -40,77 +42,10 @@
 %%PLIST_HMMER%%bin/ehmmpfam
 %%PLIST_HMMER%%bin/ehmmsearch
 %%PLIST_HMMER%%bin/ealistat
-%%PLIST_MSE%%bin/mse
-%%PLIST_PHYLIP%%bin/eclique
-%%PLIST_PHYLIP%%bin/econsense
-%%PLIST_PHYLIP%%bin/econtml
-%%PLIST_PHYLIP%%bin/econtrast
-%%PLIST_PHYLIP%%bin/ednacomp
-%%PLIST_PHYLIP%%bin/ednadist
-%%PLIST_PHYLIP%%bin/ednainvar
-%%PLIST_PHYLIP%%bin/ednaml
-%%PLIST_PHYLIP%%bin/ednamlk
-%%PLIST_PHYLIP%%bin/ednapars
-%%PLIST_PHYLIP%%bin/ednapenny
-%%PLIST_PHYLIP%%bin/edollop
-%%PLIST_PHYLIP%%bin/edolpenny
-%%PLIST_PHYLIP%%bin/efactor
-%%PLIST_PHYLIP%%bin/efitch
-%%PLIST_PHYLIP%%bin/egendist
-%%PLIST_PHYLIP%%bin/ekitsch
-%%PLIST_PHYLIP%%bin/emix
-%%PLIST_PHYLIP%%bin/epenny
-%%PLIST_PHYLIP%%bin/eprotdist
-%%PLIST_PHYLIP%%bin/eprotpars
-%%PLIST_PHYLIP%%bin/erestml
-%%PLIST_PHYLIP%%bin/eseqboot
-%%PLIST_PHYLIP%%bin/eneighbor
-%%PLIST_TOPO%%bin/topo
-%%PLIST_MEME%%lib/libmeme.so.2
-%%PLIST_MEME%%lib/libmeme.so
-%%PLIST_MEME%%lib/libmeme.la
-%%PLIST_MEME%%lib/libmeme.a
 %%PLIST_HMMER%%lib/libhmmer.so.2
 %%PLIST_HMMER%%lib/libhmmer.so
 %%PLIST_HMMER%%lib/libhmmer.la
 %%PLIST_HMMER%%lib/libhmmer.a
-%%PLIST_MSE%%lib/libckit.so.1
-%%PLIST_MSE%%lib/libckit.so
-%%PLIST_MSE%%lib/libckit.la
-%%PLIST_MSE%%lib/libckit.a
-%%PLIST_MSE%%share/EMBOSS/acd/mse.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/allversusall.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/cathparse.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/contacts.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/domainalign.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/domainer.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/domainnr.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/domainrep.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/domainreso.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/domainseqs.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/domainsse.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/hetparse.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/interface.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/libgen.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/pdbparse.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/pdbplus.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/pdbtosp.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/rocon.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/rocplot.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/scopparse.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/seqalign.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/seqfraggle.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/seqnr.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/seqsearch.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/seqsort.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/seqwords.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/siggen.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/sigscan.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/sites.acd
-%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/ssematch.acd
-%%PLIST_EMNU%%share/EMBOSS/acd/emnu.acd
-%%PLIST_ESIM4%%share/EMBOSS/acd/esim4.acd
-%%PLIST_MEME%%share/EMBOSS/acd/meme.acd
 %%PLIST_HMMER%%share/EMBOSS/acd/ehmmcalibrate.acd
 %%PLIST_HMMER%%share/EMBOSS/acd/ehmmconvert.acd
 %%PLIST_HMMER%%share/EMBOSS/acd/ehmmemit.acd
@@ -121,28 +56,146 @@
 %%PLIST_HMMER%%share/EMBOSS/acd/ehmmpfam.acd
 %%PLIST_HMMER%%share/EMBOSS/acd/ehmmsearch.acd
 %%PLIST_HMMER%%share/EMBOSS/acd/ealistat.acd
-%%PLIST_PHYLIP%%share/EMBOSS/acd/eclique.acd
-%%PLIST_PHYLIP%%share/EMBOSS/acd/econsense.acd
-%%PLIST_PHYLIP%%share/EMBOSS/acd/econtml.acd
-%%PLIST_PHYLIP%%share/EMBOSS/acd/econtrast.acd
-%%PLIST_PHYLIP%%share/EMBOSS/acd/ednacomp.acd
-%%PLIST_PHYLIP%%share/EMBOSS/acd/ednadist.acd
-%%PLIST_PHYLIP%%share/EMBOSS/acd/ednainvar.acd
-%%PLIST_PHYLIP%%share/EMBOSS/acd/ednaml.acd
-%%PLIST_PHYLIP%%share/EMBOSS/acd/ednamlk.acd
-%%PLIST_PHYLIP%%share/EMBOSS/acd/ednapars.acd
-%%PLIST_PHYLIP%%share/EMBOSS/acd/ednapenny.acd
-%%PLIST_PHYLIP%%share/EMBOSS/acd/edollop.acd
-%%PLIST_PHYLIP%%share/EMBOSS/acd/edolpenny.acd
-%%PLIST_PHYLIP%%share/EMBOSS/acd/efactor.acd
-%%PLIST_PHYLIP%%share/EMBOSS/acd/efitch.acd
-%%PLIST_PHYLIP%%share/EMBOSS/acd/egendist.acd
-%%PLIST_PHYLIP%%share/EMBOSS/acd/ekitsch.acd
-%%PLIST_PHYLIP%%share/EMBOSS/acd/emix.acd
-%%PLIST_PHYLIP%%share/EMBOSS/acd/eneighbor.acd
-%%PLIST_PHYLIP%%share/EMBOSS/acd/epenny.acd
-%%PLIST_PHYLIP%%share/EMBOSS/acd/eprotdist.acd
-%%PLIST_PHYLIP%%share/EMBOSS/acd/eprotpars.acd
-%%PLIST_PHYLIP%%share/EMBOSS/acd/erestml.acd
-%%PLIST_PHYLIP%%share/EMBOSS/acd/eseqboot.acd
+%%PLIST_MEME%%bin/meme
+%%PLIST_MEME%%lib/libmeme.so.2
+%%PLIST_MEME%%lib/libmeme.so
+%%PLIST_MEME%%lib/libmeme.la
+%%PLIST_MEME%%lib/libmeme.a
+%%PLIST_MEME%%share/EMBOSS/acd/meme.acd
+%%PLIST_MSE%%bin/mse
+%%PLIST_MSE%%lib/libckit.so.1
+%%PLIST_MSE%%lib/libckit.so
+%%PLIST_MSE%%lib/libckit.la
+%%PLIST_MSE%%lib/libckit.a
+%%PLIST_MSE%%share/EMBOSS/acd/mse.acd
+%%PLIST_MYEMBOSS%%bin/myseq
+%%PLIST_MYEMBOSS%%bin/mytest
+%%PLIST_MYEMBOSS%%share/EMBOSS/acd/myseq.acd
+%%PLIST_MYEMBOSS%%share/EMBOSS/acd/mytest.acd
+%%PLIST_PHYLIP%%bin/fclique
+%%PLIST_PHYLIP%%bin/fconsense
+%%PLIST_PHYLIP%%bin/fcontml
+%%PLIST_PHYLIP%%bin/fcontrast
+%%PLIST_PHYLIP%%bin/fdnacomp
+%%PLIST_PHYLIP%%bin/fdnadist
+%%PLIST_PHYLIP%%bin/fdnainvar
+%%PLIST_PHYLIP%%bin/fdnaml
+%%PLIST_PHYLIP%%bin/fdnamlk
+%%PLIST_PHYLIP%%bin/fdnamove
+%%PLIST_PHYLIP%%bin/fdnapars
+%%PLIST_PHYLIP%%bin/fdnapenny
+%%PLIST_PHYLIP%%bin/fdolmove
+%%PLIST_PHYLIP%%bin/fdollop
+%%PLIST_PHYLIP%%bin/fdolpenny
+%%PLIST_PHYLIP%%bin/fdrawgram
+%%PLIST_PHYLIP%%bin/fdrawtree
+%%PLIST_PHYLIP%%bin/ffactor
+%%PLIST_PHYLIP%%bin/ffitch
+%%PLIST_PHYLIP%%bin/fgendist
+%%PLIST_PHYLIP%%bin/fkitsch
+%%PLIST_PHYLIP%%bin/fmix
+%%PLIST_PHYLIP%%bin/fmove
+%%PLIST_PHYLIP%%bin/fneighbor
+%%PLIST_PHYLIP%%bin/fpars
+%%PLIST_PHYLIP%%bin/fpenny
+%%PLIST_PHYLIP%%bin/fproml
+%%PLIST_PHYLIP%%bin/fpromlk
+%%PLIST_PHYLIP%%bin/fprotdist
+%%PLIST_PHYLIP%%bin/fprotpars
+%%PLIST_PHYLIP%%bin/frestdist
+%%PLIST_PHYLIP%%bin/frestml
+%%PLIST_PHYLIP%%bin/fretree
+%%PLIST_PHYLIP%%bin/fdiscboot
+%%PLIST_PHYLIP%%bin/ffreqboot
+%%PLIST_PHYLIP%%bin/frestboot
+%%PLIST_PHYLIP%%bin/fseqboot
+%%PLIST_PHYLIP%%bin/fseqbootall
+%%PLIST_PHYLIP%%bin/ftreedist
+%%PLIST_PHYLIP%%bin/ftreedistpair
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fclique.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fconsense.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fcontml.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fcontrast.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fdiscboot.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fdnacomp.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fdnadist.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fdnainvar.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fdnaml.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fdnamlk.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fdnamove.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fdnapars.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fdnapenny.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fdollop.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fdolmove.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fdolpenny.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fdrawgram.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fdrawtree.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/ffactor.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/ffitch.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/ffreqboot.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fgendist.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fkitsch.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fmix.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fmove.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fneighbor.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fpars.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fpenny.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fproml.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fpromlk.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fprotdist.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fprotpars.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/frestboot.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/frestdist.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/frestml.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fretree.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fseqboot.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/fseqbootall.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/ftreedist.acd
+%%PLIST_PHYLIP%%share/EMBOSS/acd/ftreedistpair.acd
+%%PLIST_PHYLIP%%share/PHYLIP/data/phylipnew/font1
+%%PLIST_PHYLIP%%share/PHYLIP/data/phylipnew/font2
+%%PLIST_PHYLIP%%share/PHYLIP/data/phylipnew/font3
+%%PLIST_PHYLIP%%share/PHYLIP/data/phylipnew/font4
+%%PLIST_PHYLIP%%share/PHYLIP/data/phylipnew/font5
+%%PLIST_PHYLIP%%share/PHYLIP/data/phylipnew/font6
+%%PLIST_PHYLIP%%@dirrm share/PHYLIP/data/phylipnew
+%%PLIST_PHYLIP%%@dirrm share/PHYLIP/data
+%%PLIST_PHYLIP%%@dirrm share/PHYLIP
+%%PLIST_SIGNATURE%%bin/libgen
+%%PLIST_SIGNATURE%%bin/matgen3d
+%%PLIST_SIGNATURE%%bin/rocplot
+%%PLIST_SIGNATURE%%bin/rocon
+%%PLIST_SIGNATURE%%bin/siggen
+%%PLIST_SIGNATURE%%bin/siggenlig
+%%PLIST_SIGNATURE%%bin/sigscan
+%%PLIST_SIGNATURE%%bin/sigscanlig
+%%PLIST_SIGNATURE%%share/EMBOSS/acd/libgen.acd
+%%PLIST_SIGNATURE%%share/EMBOSS/acd/matgen3d.acd
+%%PLIST_SIGNATURE%%share/EMBOSS/acd/rocplot.acd
+%%PLIST_SIGNATURE%%share/EMBOSS/acd/rocon.acd
+%%PLIST_SIGNATURE%%share/EMBOSS/acd/siggen.acd
+%%PLIST_SIGNATURE%%share/EMBOSS/acd/siggenlig.acd
+%%PLIST_SIGNATURE%%share/EMBOSS/acd/sigscan.acd
+%%PLIST_SIGNATURE%%share/EMBOSS/acd/sigscanlig.acd
+%%PLIST_SIM4%%bin/esim4
+%%PLIST_SIM4%%share/EMBOSS/acd/esim4.acd
+%%PLIST_STRUCTURE%%bin/contacts
+%%PLIST_STRUCTURE%%bin/domainer
+%%PLIST_STRUCTURE%%bin/hetparse
+%%PLIST_STRUCTURE%%bin/interface
+%%PLIST_STRUCTURE%%bin/pdbparse
+%%PLIST_STRUCTURE%%bin/pdbplus
+%%PLIST_STRUCTURE%%bin/pdbtosp
+%%PLIST_STRUCTURE%%bin/sites
+%%PLIST_STRUCTURE%%share/EMBOSS/acd/contacts.acd
+%%PLIST_STRUCTURE%%share/EMBOSS/acd/domainer.acd
+%%PLIST_STRUCTURE%%share/EMBOSS/acd/hetparse.acd
+%%PLIST_STRUCTURE%%share/EMBOSS/acd/interface.acd
+%%PLIST_STRUCTURE%%share/EMBOSS/acd/pdbparse.acd
+%%PLIST_STRUCTURE%%share/EMBOSS/acd/pdbplus.acd
+%%PLIST_STRUCTURE%%share/EMBOSS/acd/pdbtosp.acd
+%%PLIST_STRUCTURE%%share/EMBOSS/acd/sites.acd
+%%PLIST_TOPO%%bin/topo
 %%PLIST_TOPO%%share/EMBOSS/acd/topo.acd
+ at dirrmtry share/EMBOSS/acd
+ at dirrmtry share/EMBOSS
--- embassy.diff ends here ---

--- UPDATING.diff begins here ---
--- /usr/ports/UPDATING	Fri Feb  3 23:06:15 2006
+++ UPDATING	Wed Feb  8 14:59:44 2006
@@ -6,6 +6,22 @@
 time you update your ports collection, before attempting any port
 upgrades.
 
+20060208:
+  AFFECTS: users of biology/emboss and biology/embassy
+  AUTHOR: fernan at iib.unsam.edu.ar
+
+  Since EMBOSS-3.0.0 both EMBOSS and EMBASSY install by default into
+  $LOCALBASE/emboss to avoid conflicts with other ports.
+
+  Users upgrading to 3.0.0 should take this into consideration when
+  planning the upgrade, because it will involve moving data not
+  installed by the port (databases) and tweaking the emboss.defaults
+  config file.
+
+  If you want to install the ports into $LOCALBASE (/usr/local, the old
+  behaviour), you can still do so by setting PREFIX manually. But you
+  will have to take care of conflicting ports yourself.
+
 20060202:
   AFFECTS: users of textproc/expat2
   AUTHOR: kuriyama at FreeBSD.org
--- UPDATING.diff ends here ---

>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list