aboutsummaryrefslogtreecommitdiff
path: root/biology
diff options
context:
space:
mode:
authorThierry Thomas <thierry@FreeBSD.org>2006-03-31 09:43:21 +0000
committerThierry Thomas <thierry@FreeBSD.org>2006-03-31 09:43:21 +0000
commit10570c91c859759f24e50ca522c93841cf7b3c1a (patch)
tree851aa9297bae05a3433bb7d4d99522569e4d4927 /biology
parentc3097ebe013a5b50a88581c6300340de69f6b2aa (diff)
downloadports-10570c91c859759f24e50ca522c93841cf7b3c1a.tar.gz
ports-10570c91c859759f24e50ca522c93841cf7b3c1a.zip
Notes
Diffstat (limited to 'biology')
-rw-r--r--biology/embassy/Makefile40
-rw-r--r--biology/embassy/distinfo63
-rw-r--r--biology/embassy/files/domainatrix-patch-Makefile.in11
-rw-r--r--biology/embassy/files/emnu-patch-Makefile.in11
-rw-r--r--biology/embassy/pkg-plist301
-rw-r--r--biology/emboss/Makefile29
-rw-r--r--biology/emboss/distinfo6
-rw-r--r--biology/emboss/files/patch-ajindex.c5134
-rw-r--r--biology/emboss/files/patch-ajindex.h170
-rw-r--r--biology/emboss/files/patch-ajpdb.c67
-rw-r--r--biology/emboss/files/patch-ajseqdb.c195
-rw-r--r--biology/emboss/files/patch-dbxfasta.c89
-rw-r--r--biology/emboss/files/patch-dbxflat.c146
-rw-r--r--biology/emboss/files/patch-dbxgcg.c96
-rw-r--r--biology/emboss/files/patch-embindex.c115
-rw-r--r--biology/emboss/files/patch-embindex.h96
-rw-r--r--biology/emboss/files/patch-emboss.default.template20
-rw-r--r--biology/emboss/files/patch-marscan.c72
-rw-r--r--biology/emboss/files/pkg-message.in27
-rw-r--r--biology/emboss/files/pre-install.in21
-rw-r--r--biology/emboss/pkg-message22
-rw-r--r--biology/emboss/pkg-plist2547
22 files changed, 7820 insertions, 1458 deletions
diff --git a/biology/embassy/Makefile b/biology/embassy/Makefile
index 6c572598b54e..5d3ed872749a 100644
--- a/biology/embassy/Makefile
+++ b/biology/embassy/Makefile
@@ -7,18 +7,21 @@
#
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@iib.unsam.edu.ar
COMMENT= A collection of contributed EMBOSS applications
-LIB_DEPENDS= nucleus.1:${PORTSDIR}/biology/emboss
+LIB_DEPENDS= nucleus.3:${PORTSDIR}/biology/emboss
+PREFIX?= ${LOCALBASE}/emboss
+NO_MTREE= yes
USE_SUBMAKE= yes
USE_ICONV= yes
USE_GMAKE= yes
@@ -26,12 +29,17 @@ GNU_CONFIGURE= yes
USE_XLIB= yes
USE_MOTIF= yes
-OPTIONS= DOMAINATRIX "Protein structure and domain apps" on \
+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
@@ -39,15 +47,21 @@ 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>
@@ -75,16 +89,6 @@ do-extract:
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}
@ cd ${${app}_WRKSRC} && \
diff --git a/biology/embassy/distinfo b/biology/embassy/distinfo
index 62e43dd5e562..486dd95d3995 100644
--- a/biology/embassy/distinfo
+++ b/biology/embassy/distinfo
@@ -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 --git a/biology/embassy/files/domainatrix-patch-Makefile.in b/biology/embassy/files/domainatrix-patch-Makefile.in
deleted file mode 100644
index d544a23f136b..000000000000
--- a/biology/embassy/files/domainatrix-patch-Makefile.in
+++ /dev/null
@@ -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 --git a/biology/embassy/files/emnu-patch-Makefile.in b/biology/embassy/files/emnu-patch-Makefile.in
deleted file mode 100644
index 31688dfd589b..000000000000
--- a/biology/embassy/files/emnu-patch-Makefile.in
+++ /dev/null
@@ -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 --git a/biology/embassy/pkg-plist b/biology/embassy/pkg-plist
index 22c88962c326..a1f0267522e1 100644
--- a/biology/embassy/pkg-plist
+++ b/biology/embassy/pkg-plist
@@ -1,148 +1,201 @@
-%%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/seqfraggle
+%%PLIST_DOMSEARCH%%bin/seqnr
+%%PLIST_DOMSEARCH%%bin/seqsearch
+%%PLIST_DOMSEARCH%%bin/seqsort
+%%PLIST_DOMSEARCH%%bin/seqwords
+%%PLIST_DOMSEARCH%%share/EMBOSS/acd/seqfraggle.acd
+%%PLIST_DOMSEARCH%%share/EMBOSS/acd/seqnr.acd
+%%PLIST_DOMSEARCH%%share/EMBOSS/acd/seqsearch.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/ealistat
+%%PLIST_HMMER%%bin/ehmmalign
+%%PLIST_HMMER%%bin/ehmmbuild
%%PLIST_HMMER%%bin/ehmmcalibrate
%%PLIST_HMMER%%bin/ehmmconvert
%%PLIST_HMMER%%bin/ehmmemit
%%PLIST_HMMER%%bin/ehmmfetch
%%PLIST_HMMER%%bin/ehmmindex
-%%PLIST_HMMER%%bin/ehmmbuild
-%%PLIST_HMMER%%bin/ehmmalign
%%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%%lib/libhmmer.la
+%%PLIST_HMMER%%lib/libhmmer.so
+%%PLIST_HMMER%%lib/libhmmer.so.2
+%%PLIST_HMMER%%share/EMBOSS/acd/ealistat.acd
+%%PLIST_HMMER%%share/EMBOSS/acd/ehmmalign.acd
+%%PLIST_HMMER%%share/EMBOSS/acd/ehmmbuild.acd
%%PLIST_HMMER%%share/EMBOSS/acd/ehmmcalibrate.acd
%%PLIST_HMMER%%share/EMBOSS/acd/ehmmconvert.acd
%%PLIST_HMMER%%share/EMBOSS/acd/ehmmemit.acd
%%PLIST_HMMER%%share/EMBOSS/acd/ehmmfetch.acd
%%PLIST_HMMER%%share/EMBOSS/acd/ehmmindex.acd
-%%PLIST_HMMER%%share/EMBOSS/acd/ehmmbuild.acd
-%%PLIST_HMMER%%share/EMBOSS/acd/ehmmalign.acd
%%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.a
+%%PLIST_MEME%%lib/libmeme.la
+%%PLIST_MEME%%lib/libmeme.so
+%%PLIST_MEME%%lib/libmeme.so.2
+%%PLIST_MEME%%share/EMBOSS/acd/meme.acd
+%%PLIST_MSE%%bin/mse
+%%PLIST_MSE%%lib/libckit.a
+%%PLIST_MSE%%lib/libckit.la
+%%PLIST_MSE%%lib/libckit.so
+%%PLIST_MSE%%lib/libckit.so.1
+%%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/fdiscboot
+%%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/fdollop
+%%PLIST_PHYLIP%%bin/fdolmove
+%%PLIST_PHYLIP%%bin/fdolpenny
+%%PLIST_PHYLIP%%bin/fdrawgram
+%%PLIST_PHYLIP%%bin/fdrawtree
+%%PLIST_PHYLIP%%bin/ffactor
+%%PLIST_PHYLIP%%bin/ffitch
+%%PLIST_PHYLIP%%bin/ffreqboot
+%%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/frestboot
+%%PLIST_PHYLIP%%bin/frestdist
+%%PLIST_PHYLIP%%bin/frestml
+%%PLIST_PHYLIP%%bin/fretree
+%%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/rocon
+%%PLIST_SIGNATURE%%bin/rocplot
+%%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/rocon.acd
+%%PLIST_SIGNATURE%%share/EMBOSS/acd/rocplot.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_ESIM4%%bin/esim4
+%%PLIST_ESIM4%%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
+@dirrmtry share/EMBOSS/acd
+@dirrmtry share/EMBOSS
diff --git a/biology/emboss/Makefile b/biology/emboss/Makefile
index 27aa2db9b5ee..2fdecddae40f 100644
--- a/biology/emboss/Makefile
+++ b/biology/emboss/Makefile
@@ -6,14 +6,15 @@
#
PORTNAME= emboss
-PORTVERSION= 2.10.0
-PORTREVISION= 1
+PORTVERSION= 3.0.0
CATEGORIES= biology
-MASTER_SITES= ftp://ftp.uk.embnet.org/pub/EMBOSS/ \
+MASTER_SITES= ftp://emboss.open-bio.org/pub/EMBOSS/ \
+ ftp://ftp.uk.embnet.org/pub/EMBOSS/ \
ftp://ftp.es.embnet.org/pub/software/emboss/EMBOSS/ \
ftp://ftp.ebi.ac.uk/pub/software/unix/EMBOSS/
DISTNAME= ${PORTNAME:U}-${PORTVERSION}
DISTFILES= ${PORTNAME:U}-${PORTVERSION}${EXTRACT_SUFX}
+DIST_SUBDIR= ${PORTNAME}
MAINTAINER= fernan@iib.unsam.edu.ar
COMMENT= A collection of open source tools for genetic sequence analysis
@@ -23,16 +24,19 @@ BUILD_DEPENDS= clustalw:${PORTSDIR}/biology/clustalw \
LIB_DEPENDS= gd.4:${PORTSDIR}/graphics/gd \
png.5:${PORTSDIR}/graphics/png
-CONFLICTS= qmail-ldap2-* digest-*
+CONFLICTS= qmail-ldap-[0-9]* digest-[0-9]*
+PREFIX?= ${LOCALBASE}/emboss
+NO_MTREE= yes
USE_SUBMAKE= yes
USE_GMAKE= yes
GNU_CONFIGURE= yes
+USE_AUTOTOOLS= libtool:15
INSTALLS_SHLIB= yes
USE_XLIB= yes
USE_MOTIF= yes
-USE_REINPLACE= yes
-PKGMESSAGE= ${WRKDIR}/pkg-message
+SUB_FILES= pkg-message
+SUB_LIST= PREFIX=${PREFIX} DATADIR=${DATADIR}
DOCSDIR= ${PREFIX}/share/doc/${PORTNAME:U}
DATADIR= ${PREFIX}/share/${PORTNAME:U}
@@ -43,20 +47,17 @@ CONFIG_FILE= ${WRKSRC}/emboss/emboss.default.template
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 --git a/biology/emboss/distinfo b/biology/emboss/distinfo
index 5cf84b5d9e66..12a082f17df0 100644
--- a/biology/emboss/distinfo
+++ b/biology/emboss/distinfo
@@ -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 --git a/biology/emboss/files/patch-ajindex.c b/biology/emboss/files/patch-ajindex.c
new file mode 100644
index 000000000000..410f90c1d2e2
--- /dev/null
+++ b/biology/emboss/files/patch-ajindex.c
@@ -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 --git a/biology/emboss/files/patch-ajindex.h b/biology/emboss/files/patch-ajindex.h
new file mode 100644
index 000000000000..bcd3faa62f17
--- /dev/null
+++ b/biology/emboss/files/patch-ajindex.h
@@ -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 --git a/biology/emboss/files/patch-ajpdb.c b/biology/emboss/files/patch-ajpdb.c
new file mode 100644
index 000000000000..39b7300f56c0
--- /dev/null
+++ b/biology/emboss/files/patch-ajpdb.c
@@ -0,0 +1,67 @@
+--- ajax/ajpdb.c.orig Mon Jan 23 12:19:22 2006
++++ ajax/ajpdb.c Fri Aug 19 13:49:12 2005
+@@ -1198,7 +1198,7 @@
+ osstr = ajStrNew();
+ xstr = ajStrNew();
+
+- /* Start of main application loop */
++ /* Start of main loop */
+ while(ajFileReadLine(inf,&line))
+ {
+ if(ajStrPrefixC(line,"XX"))
+@@ -1313,6 +1313,8 @@
+
+ (ret)->Nchn = ncha;
+ (ret)->Ngp = ngrp;
++
++ continue;
+ }
+
+
+@@ -1382,7 +1384,11 @@
+ ajStrToken(&token,&handle,NULL);
+ ajStrToInt(token,&mod);
+ if((mode == 0) && (mod!=1))
+- break;
++ {
++ /* break; */
++ /* Discard remaining AT lines */
++ while(ajFileReadLine(inf,&line) && ajStrPrefixC(line,"AT"));
++ }
+
+ /* Chain number */
+ ajStrToken(&token,&handle,NULL);
+@@ -1463,7 +1469,10 @@
+ "jison@hgmp.mrc.ac.uk");
+ }
+ else
++ {
+ ajListPushApp((ret)->Chains[chn-1]->Atoms,(void *)atom);
++ }
++ continue;
+ }
+
+ /* Parse residue line */
+@@ -1479,8 +1488,11 @@
+ ajStrToken(&token,&handle,NULL);
+ ajStrToInt(token,&mod);
+ if((mode == 0) && (mod!=1))
+- break;
+-
++ {
++ /* break;*/
++ /* Discard remaining RE lines */
++ while(ajFileReadLine(inf,&line) && ajStrPrefixC(line,"RE"));
++ }
+ /* Chain number */
+ ajStrToken(&token,&handle,NULL);
+ ajStrToInt(token,&chn);
+@@ -1585,6 +1597,8 @@
+ ajStrToFloat(token,&residue->pol_rel);
+
+ ajListPushApp((ret)->Chains[chn-1]->Residues,(void *)residue);
++
++ continue;
+ }
+ }
+ /* End of main application loop */
diff --git a/biology/emboss/files/patch-ajseqdb.c b/biology/emboss/files/patch-ajseqdb.c
new file mode 100644
index 000000000000..236f96035a0a
--- /dev/null
+++ b/biology/emboss/files/patch-ajseqdb.c
@@ -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 --git a/biology/emboss/files/patch-dbxfasta.c b/biology/emboss/files/patch-dbxfasta.c
new file mode 100644
index 000000000000..66f97c17c6df
--- /dev/null
+++ b/biology/emboss/files/patch-dbxfasta.c
@@ -0,0 +1,89 @@
+--- emboss/dbxfasta.c.orig Mon Jan 23 12:22:12 2006
++++ emboss/dbxfasta.c Wed Jan 4 16:31:37 2006
+@@ -2,7 +2,7 @@
+ **
+ ** Index flatfile databases
+ **
+-** @author: Copyright (C) Alan Bleasby (ableasby@hgmp.mrc.ac.uk)
++** @author Copyright (C) Alan Bleasby (ableasby@hgmp.mrc.ac.uk)
+ ** @@
+ **
+ ** This program is free software; you can redistribute it and/or
+@@ -77,6 +77,7 @@
+
+ AjPBtId idobj = NULL;
+ AjPBtPri priobj = NULL;
++ AjPBtHybrid hyb = NULL;
+
+
+ AjPRegexp typeexp = NULL;
+@@ -102,7 +103,8 @@
+
+ idobj = ajBtreeIdNew();
+ priobj = ajBtreePriNew();
+-
++ hyb = ajBtreeHybNew();
++
+
+ nfields = embBtreeSetFields(entry,fieldarray);
+ embBtreeSetDbInfo(entry,dbname,dbrs,datestr,release,dbtype,directory,
+@@ -134,22 +136,22 @@
+ if(entry->do_id)
+ {
+ ajStrToLower(&entry->id);
+- ajStrAssS(&idobj->id,entry->id);
+- idobj->dbno = i;
+- idobj->offset = entry->fpos;
+- idobj->dups = 0;
+- ajBtreeInsertId(entry->idcache,idobj);
++ ajStrAssS(&hyb->key1,entry->id);
++ hyb->dbno = i;
++ hyb->offset = entry->fpos;
++ hyb->dups = 0;
++ ajBtreeHybInsertId(entry->idcache,hyb);
+ }
+
+ if(entry->do_accession)
+ while(ajListPop(entry->ac,(void **)&word))
+ {
+ ajStrToLower(&word);
+- ajStrAssS(&idobj->id,word);
+- idobj->dbno = i;
+- idobj->offset = entry->fpos;
+- idobj->dups = 0;
+- ajBtreeInsertId(entry->accache,idobj);
++ ajStrAssS(&hyb->key1,word);
++ hyb->dbno = i;
++ hyb->offset = entry->fpos;
++ hyb->dups = 0;
++ ajBtreeHybInsertId(entry->accache,hyb);
+ ajStrDel(&word);
+ }
+
+@@ -157,11 +159,11 @@
+ while(ajListPop(entry->sv,(void **)&word))
+ {
+ ajStrToLower(&word);
+- ajStrAssS(&idobj->id,word);
+- idobj->dbno = i;
+- idobj->offset = entry->fpos;
+- idobj->dups = 0;
+- ajBtreeInsertId(entry->svcache,idobj);
++ ajStrAssS(&hyb->key1,word);
++ hyb->dbno = i;
++ hyb->offset = entry->fpos;
++ hyb->dups = 0;
++ ajBtreeHybInsertId(entry->svcache,hyb);
+ ajStrDel(&word);
+ }
+
+@@ -197,7 +199,8 @@
+
+ ajBtreeIdDel(&idobj);
+ ajBtreePriDel(&priobj);
+-
++ ajBtreeHybDel(&hyb);
++
+ ajExit();
+
+ return 0;
diff --git a/biology/emboss/files/patch-dbxflat.c b/biology/emboss/files/patch-dbxflat.c
new file mode 100644
index 000000000000..f89837097c0e
--- /dev/null
+++ b/biology/emboss/files/patch-dbxflat.c
@@ -0,0 +1,146 @@
+--- emboss/dbxflat.c.orig Mon Jan 23 12:22:23 2006
++++ emboss/dbxflat.c Sun Jan 1 07:29:09 2006
+@@ -2,7 +2,7 @@
+ **
+ ** Index flatfile databases
+ **
+-** @author: Copyright (C) Alan Bleasby (ableasby@hgmp.mrc.ac.uk)
++** @author Copyright (C) Alan Bleasby (ableasby@hgmp.mrc.ac.uk)
+ ** @@
+ **
+ ** This program is free software; you can redistribute it and/or
+@@ -106,6 +106,7 @@
+
+ AjPBtId idobj = NULL;
+ AjPBtPri priobj = NULL;
++ AjPBtHybrid hyb = NULL;
+
+
+ embInit("dbxflat", argc, argv);
+@@ -126,7 +127,8 @@
+
+ idobj = ajBtreeIdNew();
+ priobj = ajBtreePriNew();
+-
++ hyb = ajBtreeHybNew();
++
+
+ nfields = embBtreeSetFields(entry,fieldarray);
+ embBtreeSetDbInfo(entry,dbname,dbrs,datestr,release,dbtype,directory,
+@@ -156,11 +158,11 @@
+ if(entry->do_id)
+ {
+ ajStrToLower(&entry->id);
+- ajStrAssS(&idobj->id,entry->id);
+- idobj->dbno = i;
+- idobj->offset = entry->fpos;
+- idobj->dups = 0;
+- ajBtreeInsertId(entry->idcache,idobj);
++ ajStrAssS(&hyb->key1,entry->id);
++ hyb->dbno = i;
++ hyb->offset = entry->fpos;
++ hyb->dups = 0;
++ ajBtreeHybInsertId(entry->idcache,hyb);
+ }
+
+ if(entry->do_accession)
+@@ -168,11 +170,11 @@
+ while(ajListPop(entry->ac,(void **)&word))
+ {
+ ajStrToLower(&word);
+- ajStrAssS(&idobj->id,word);
+- idobj->dbno = i;
+- idobj->offset = entry->fpos;
+- idobj->dups = 0;
+- ajBtreeInsertId(entry->accache,idobj);
++ ajStrAssS(&hyb->key1,word);
++ hyb->dbno = i;
++ hyb->offset = entry->fpos;
++ hyb->dups = 0;
++ ajBtreeHybInsertId(entry->accache,hyb);
+ ajStrDel(&word);
+ }
+ }
+@@ -182,11 +184,11 @@
+ while(ajListPop(entry->sv,(void **)&word))
+ {
+ ajStrToLower(&word);
+- ajStrAssS(&idobj->id,word);
+- idobj->dbno = i;
+- idobj->offset = entry->fpos;
+- idobj->dups = 0;
+- ajBtreeInsertId(entry->svcache,idobj);
++ ajStrAssS(&hyb->key1,word);
++ hyb->dbno = i;
++ hyb->offset = entry->fpos;
++ hyb->dups = 0;
++ ajBtreeHybInsertId(entry->svcache,hyb);
+ ajStrDel(&word);
+ }
+ }
+@@ -231,15 +233,11 @@
+ }
+ }
+
+-
+-
+-
+-
+-
+ ajFileClose(&inf);
+ }
+
+
++
+ embBtreeDumpParameters(entry);
+ embBtreeCloseCaches(entry);
+
+@@ -256,7 +254,8 @@
+
+ ajBtreeIdDel(&idobj);
+ ajBtreePriDel(&priobj);
+-
++ ajBtreeHybDel(&hyb);
++
+ ajExit();
+
+ return 0;
+@@ -306,11 +305,13 @@
+ }
+
+ if(entry->do_sv)
+- if(ajStrPrefixC(line,"SV"))
++ if(ajStrPrefixC(line,"SV") ||
++ ajStrPrefixC(line,"IV")) /* emblcds database format */
+ embBtreeEmblAC(line,entry->sv);
+
+ if(entry->do_accession)
+- if(ajStrPrefixC(line,"AC"))
++ if(ajStrPrefixC(line,"AC") ||
++ ajStrPrefixC(line,"PA")) /* emblcds database format */
+ embBtreeEmblAC(line,entry->ac);
+
+ if(entry->do_keyword)
+@@ -356,12 +357,10 @@
+
+ line = ajStrNewC("");
+ sumline = ajStrNew();
++
+
+ while(!ajStrPrefixC(line,"//") && ret)
+ {
+- pos = ajFileTell(inf);
+-
+-
+ if(ajStrPrefixC(line,"LOCUS"))
+ {
+ entry->fpos = pos;
+@@ -423,7 +422,7 @@
+ }
+
+
+-
++ pos = ajFileTell(inf);
+
+ if(!ajFileReadLine(inf,&line))
+ ret = ajFalse;
diff --git a/biology/emboss/files/patch-dbxgcg.c b/biology/emboss/files/patch-dbxgcg.c
new file mode 100644
index 000000000000..5856843c57e8
--- /dev/null
+++ b/biology/emboss/files/patch-dbxgcg.c
@@ -0,0 +1,96 @@
+--- emboss/dbxgcg.c.orig Mon Jan 23 12:22:30 2006
++++ emboss/dbxgcg.c Thu Dec 22 13:13:18 2005
+@@ -2,7 +2,7 @@
+ **
+ ** Index flatfile databases
+ **
+-** @author: Copyright (C) Alan Bleasby (ableasby@hgmp.mrc.ac.uk)
++** @author Copyright (C) Alan Bleasby (ableasby@hgmp.mrc.ac.uk)
+ ** @@
+ **
+ ** This program is free software; you can redistribute it and/or
+@@ -136,6 +136,7 @@
+
+ AjPBtId idobj = NULL;
+ AjPBtPri priobj = NULL;
++ AjPBtHybrid hyb = NULL;
+
+
+ embInit("dbxgcg", argc, argv);
+@@ -156,7 +157,8 @@
+
+ idobj = ajBtreeIdNew();
+ priobj = ajBtreePriNew();
+-
++ hyb = ajBtreeHybNew();
++
+
+ nfields = embBtreeSetFields(entry,fieldarray);
+ embBtreeSetDbInfo(entry,dbname,dbrs,datestr,release,dbtype,directory,
+@@ -204,12 +206,12 @@
+ if(entry->do_id)
+ {
+ ajStrToLower(&entry->id);
+- ajStrAssS(&idobj->id,entry->id);
+- idobj->dbno = i;
+- idobj->offset = entry->fpos;
+- idobj->refoffset = entry->reffpos;
+- idobj->dups = 0;
+- ajBtreeInsertId(entry->idcache,idobj);
++ ajStrAssS(&hyb->key1,entry->id);
++ hyb->dbno = i;
++ hyb->offset = entry->fpos;
++ hyb->refoffset = entry->reffpos;
++ hyb->dups = 0;
++ ajBtreeHybInsertId(entry->idcache,hyb);
+ }
+
+ if(entry->do_accession)
+@@ -217,12 +219,12 @@
+ while(ajListPop(entry->ac,(void **)&word))
+ {
+ ajStrToLower(&word);
+- ajStrAssS(&idobj->id,word);
+- idobj->dbno = i;
+- idobj->offset = entry->fpos;
+- idobj->refoffset = entry->reffpos;
+- idobj->dups = 0;
+- ajBtreeInsertId(entry->accache,idobj);
++ ajStrAssS(&hyb->key1,word);
++ hyb->dbno = i;
++ hyb->offset = entry->fpos;
++ hyb->refoffset = entry->reffpos;
++ hyb->dups = 0;
++ ajBtreeHybInsertId(entry->accache,hyb);
+ ajStrDel(&word);
+ }
+ }
+@@ -232,12 +234,12 @@
+ while(ajListPop(entry->sv,(void **)&word))
+ {
+ ajStrToLower(&word);
+- ajStrAssS(&idobj->id,word);
+- idobj->dbno = i;
+- idobj->offset = entry->fpos;
+- idobj->refoffset = entry->reffpos;
+- idobj->dups = 0;
+- ajBtreeInsertId(entry->svcache,idobj);
++ ajStrAssS(&hyb->key1,word);
++ hyb->dbno = i;
++ hyb->offset = entry->fpos;
++ hyb->refoffset = entry->reffpos;
++ hyb->dups = 0;
++ ajBtreeHybInsertId(entry->svcache,hyb);
+ ajStrDel(&word);
+ }
+ }
+@@ -303,7 +305,8 @@
+
+ ajBtreeIdDel(&idobj);
+ ajBtreePriDel(&priobj);
+-
++ ajBtreeHybDel(&hyb);
++
+ ajExit();
+
+ return 0;
diff --git a/biology/emboss/files/patch-embindex.c b/biology/emboss/files/patch-embindex.c
new file mode 100644
index 000000000000..25569485eca7
--- /dev/null
+++ b/biology/emboss/files/patch-embindex.c
@@ -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 --git a/biology/emboss/files/patch-embindex.h b/biology/emboss/files/patch-embindex.h
new file mode 100644
index 000000000000..3714ede97e10
--- /dev/null
+++ b/biology/emboss/files/patch-embindex.h
@@ -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 --git a/biology/emboss/files/patch-emboss.default.template b/biology/emboss/files/patch-emboss.default.template
new file mode 100644
index 000000000000..04ee586b4bfb
--- /dev/null
+++ b/biology/emboss/files/patch-emboss.default.template
@@ -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 --git a/biology/emboss/files/patch-marscan.c b/biology/emboss/files/patch-marscan.c
new file mode 100644
index 000000000000..85481fedfe78
--- /dev/null
+++ b/biology/emboss/files/patch-marscan.c
@@ -0,0 +1,72 @@
+--- emboss/marscan.c.orig Mon Jan 23 11:36:36 2006
++++ emboss/marscan.c Mon Jan 23 08:56:35 2006
+@@ -1,7 +1,7 @@
+ /* @source marscan application
+ **
+ ** Finds MAR/SAR sites in nucleic sequences
+-** @author: Copyright (C) Gary Williams (gwilliam@hgmp.mrc.ac.uk)
++** @author Copyright (C) Gary Williams (gwilliam@hgmp.mrc.ac.uk)
+ ** @@
+ **
+ ** This program is free software; you can redistribute it and/or
+@@ -249,33 +249,41 @@
+ amino8rev, carboxyl8rev, buf8rev, off8rev,
+ sotable8rev, solimit8rev, regexp8rev, skipm8rev,
+ &hits8rev, m8rev, &tidy8rev);
++ ajDebug("Marscan '%S' hits %d:%d %d:%d\n", seqname,
++ hits16, hits16rev,
++ hits8, hits8rev);
++
++ /* initialise the output feature table */
++ tab = ajFeattableNewDna(seqname);
++
++ /*
++ ** append reverse lists to forward lists and sort them by match
++ ** position
++ */
+
+- if((hits16 || hits16rev) && (hits8 || hits8rev))
++ if(hits8 || hits8rev)
+ {
+- /*
+- ** append reverse lists to forward lists and sort them by match
+- ** position
+- */
+ ajListPushList(l8, &l8rev);
+ ajListSort(l8, embPatRestrictStartCompare);
+-
++ }
++ if((hits16 || hits16rev))
++ {
+ ajListPushList(l16, &l16rev);
+ ajListSort(l16, embPatRestrictStartCompare);
+
+- /* initialise the output feature table */
+- if(!tab)
+- tab = ajFeattableNewDna(seqname);
+-
+- /*
+- ** find pairs of hits within the required distance and output
+- ** the results
+- */
+- marscan_stepdown(l16, l8, &tab);
+-
+- /* write features and tidy up */
+- ajReportWrite(report, tab, seq);
+- ajFeattableDel(&tab);
+ }
++
++
++ /*
++ ** find pairs of hits within the required distance and output
++ ** the results
++ */
++ marscan_stepdown(l16, l8, &tab);
++
++ ajDebug("Marscan reportwrite '%S'\n", seqname);
++ /* write features and tidy up */
++ ajReportWrite(report, tab, seq);
++ ajFeattableDel(&tab);
+
+ while(ajListPop(l16,(void **)&aptr))
+ embMatMatchDel(&aptr);
diff --git a/biology/emboss/files/pkg-message.in b/biology/emboss/files/pkg-message.in
new file mode 100644
index 000000000000..cdedc5082b5c
--- /dev/null
+++ b/biology/emboss/files/pkg-message.in
@@ -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 --git a/biology/emboss/files/pre-install.in b/biology/emboss/files/pre-install.in
new file mode 100644
index 000000000000..e39e4d0c3b21
--- /dev/null
+++ b/biology/emboss/files/pre-install.in
@@ -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 --git a/biology/emboss/pkg-message b/biology/emboss/pkg-message
deleted file mode 100644
index 1c36c80c0b39..000000000000
--- a/biology/emboss/pkg-message
+++ /dev/null
@@ -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 --git a/biology/emboss/pkg-plist b/biology/emboss/pkg-plist
index 9154aea12af3..ea98778089e1 100644
--- a/biology/emboss/pkg-plist
+++ b/biology/emboss/pkg-plist
@@ -17,6 +17,7 @@ bin/checktrans
bin/chips
bin/cirdna
bin/codcmp
+bin/codcopy
bin/coderet
bin/compseq
bin/cons
@@ -24,12 +25,15 @@ bin/cpgplot
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/remap
bin/restover
bin/restrict
bin/revseq
-bin/runJemboss.csh
bin/seealso
bin/seqmatchall
bin/seqret
@@ -135,11 +138,11 @@ bin/silent
bin/sirna
bin/sixpack
bin/skipseq
+bin/syco
bin/splitter
bin/stretcher
bin/stssearch
bin/supermatcher
-bin/syco
bin/tcode
bin/textsearch
bin/tfextract
@@ -160,18 +163,30 @@ bin/wordcount
bin/wordmatch
bin/wossname
bin/yank
-etc/emboss.default.sample
+bin/runJemboss.csh
+include/drivers.h
+include/pdf.h
+include/plcore.h
+include/plevent.h
+include/plplotP.h
+include/plxwd.h
+include/metadefs.h
+include/plConfig.h
+include/pldebug.h
+include/plplot.h
+include/plstrm.h
+include/plDevs.h
+include/ajax.h
+include/ajarch.h
+include/ajdefine.h
include/ajacd.h
include/ajalign.h
-include/ajarch.h
include/ajarr.h
include/ajassert.h
-include/ajax.h
include/ajbase.h
include/ajcall.h
include/ajcod.h
include/ajdan.h
-include/ajdefine.h
include/ajdmx.h
include/ajdomain.h
include/ajexcept.h
@@ -180,8 +195,8 @@ include/ajfeatdata.h
include/ajfile.h
include/ajfmt.h
include/ajgraph.h
-include/ajgraphstruct.h
include/ajgraphxml.h
+include/ajgraphstruct.h
include/ajhist.h
include/ajindex.h
include/ajjava.h
@@ -214,7 +229,14 @@ include/ajtranslate.h
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,48 +254,817 @@ include/embmat.h
include/embmisc.h
include/embmol.h
include/embnmer.h
-include/emboss.h
include/embpat.h
-include/embpdb.h
include/embprop.h
+include/embpdb.h
include/embread.h
-include/embshow.h
include/embsig.h
+include/embshow.h
include/embword.h
-include/metadefs.h
-include/pcre.h
-include/pcre_chartables.c
-include/pcre_config.h
-include/pcre_get.c
-include/pcre_internal.h
-include/pcre_printint.c
-include/pcreposix.h
-include/pdf.h
-include/plConfig.h
-include/plDevs.h
-include/plcore.h
-include/pldebug.h
-include/plevent.h
-include/plplot.h
-include/plplotP.h
-include/plstrm.h
-include/plxwd.h
-lib/libajax.a
-lib/libajax.la
+lib/libplplot.so.5
+lib/libplplot.so
+lib/libplplot.la
+lib/libplplot.a
+lib/libajax.so.3
lib/libajax.so
-lib/libajax.so.1
-lib/libajaxg.a
-lib/libajaxg.la
+lib/libajax.la
+lib/libajax.a
+lib/libajaxg.so.3
lib/libajaxg.so
-lib/libajaxg.so.1
-lib/libnucleus.a
-lib/libnucleus.la
+lib/libajaxg.la
+lib/libajaxg.a
+lib/libnucleus.so.3
lib/libnucleus.so
-lib/libnucleus.so.1
-lib/libplplot.a
-lib/libplplot.la
-lib/libplplot.so
-lib/libplplot.so.5
+lib/libnucleus.la
+lib/libnucleus.a
+%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.sty
+%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.tex
+%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.aux
+%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.dvi
+%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.log
+%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.pdf
+%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.ps
+%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.toc
+%%PORTDOCS%%%%DOCSDIR%%/manuals/adminguide.tar.gz
+%%PORTDOCS%%%%DOCSDIR%%/manuals/domainatrix.doc
+%%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%%/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
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/acdlog.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/acdpretty.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/acdtable.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/acdtrace.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/acdvalid.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/ajtest.html
+%%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/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.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/charge.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/checktrans.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/chips.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/cirdna.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/contactalign.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/contacts.html
+%%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.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
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/diffseq.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/digest.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/display_group.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/distmat.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/domainalign.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/domainer.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/domainnr.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/domainrep.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/domainreso.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/domainseqs.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/domainsse.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/dotmatcher.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/dotpath.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/dottup.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/dreg.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/ealistat.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/eclique.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/econsense.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/econtml.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/econtrast.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/edit_group.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednacomp.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednadist.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednainvar.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednaml.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednamlk.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednapars.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednapenny.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/edollop.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/edolpenny.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/efactor.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/efitch.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/egendist.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmalign.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmbuild.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmcalibrate.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmconvert.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmemit.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmfetch.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmindex.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmpfam.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmsearch.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/einverted.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/ekitsch.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/embossdata.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/embossversion.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/emix.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/emma.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/emnu.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/emowse.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/eneighbor.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/entret.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/enzyme_kinetics_group.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/epenny.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/epestfind.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/eprimer3.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/eprotdist.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/eprotpars.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/equicktandem.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/erestml.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/eseqboot.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/esim4.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/est2genome.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/etandem.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/extractfeat.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/extractseq.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fclique.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fconsense.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fcontml.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fcontrast.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdiscboot.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnacomp.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnadist.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnainvar.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnaml.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnamlk.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnamove.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnapars.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnapenny.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdollop.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdolmove.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdolpenny.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdrawgram.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdrawtree.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/feature_tables_group.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/ffactor.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/ffitch.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/ffreqboot.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fgendist.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/findkm.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fkitsch.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fmix.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fmove.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fneighbor.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fpars.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fpenny.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fproml.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fpromlk.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fprotdist.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fprotpars.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/freak.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/frestboot.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/frestdist.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/frestml.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fretree.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fseqboot.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fseqbootall.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/ftreedist.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/ftreedistpair.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fuzznuc.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fuzzpro.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/fuzztran.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/garnier.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/geecee.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/getorf.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/groups.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/helixturnhelix.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/hetparse.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/hmm_group.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/hmoment.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/iep.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/index.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/infoalign.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/information_group.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/infoseq.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/interface.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/isochore.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/jembossctl.html
+%%PORTDOCS%%%%DOCSDIR%%/programs/html/libgen.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
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/allversusall.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/antigenic.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/backtranseq.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/banana.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/biosed.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/btwisted.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/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/contactalign.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/contacts.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/cpgplot.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/cpgreport.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/crystalball.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/cusp.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/cutgextract.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/cutseq.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/dan.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/dbiblast.txt
+%%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/domainalign.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/domainer.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/domainnr.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/domainrep.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/domainreso.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/domainseqs.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/domainsse.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/dotmatcher.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/dotpath.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/dottup.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/dreg.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/ealistat.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/eclique.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/econsense.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/econtml.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/econtrast.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednacomp.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednadist.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednainvar.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednaml.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednamlk.txt
+%%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
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/egendist.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmalign.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmbuild.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmcalibrate.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmconvert.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmemit.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmfetch.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmindex.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmpfam.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmsearch.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/einverted.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/ekitsch.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/embossdata.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/embossversion.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/emix.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/emma.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/emnu.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/emowse.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/eneighbor.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/entret.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/epenny.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/epestfind.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/eprimer3.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/eprotdist.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/eprotpars.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/equicktandem.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/erestml.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/eseqboot.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/esim4.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/est2genome.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/etandem.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/extractfeat.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/extractseq.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fclique.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fconsense.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fcontml.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fcontrast.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdiscboot.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnacomp.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnadist.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnainvar.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnaml.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnamlk.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnamove.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnapars.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnapenny.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdollop.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdolmove.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdolpenny.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdrawgram.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdrawtree.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/ffactor.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/ffitch.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/ffreqboot.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fgendist.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/findkm.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fkitsch.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fmix.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fmove.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fneighbor.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fpars.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fpenny.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fproml.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fpromlk.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fprotdist.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fprotpars.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/freak.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/frestboot.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/frestdist.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/frestml.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fretree.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fseqboot.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fseqbootall.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/ftreedist.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/ftreedistpair.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fuzznuc.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fuzzpro.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/fuzztran.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/garnier.txt
+%%PORTDOCS%%%%DOCSDIR%%/programs/text/geecee.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/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
+%%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
@@ -287,18 +1078,18 @@ lib/libplplot.so.5
%%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/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/codcopy.acd
%%DATADIR%%/acd/coderet.acd
-%%DATADIR%%/acd/codes.english
%%DATADIR%%/acd/complex.acd
%%DATADIR%%/acd/compseq.acd
%%DATADIR%%/acd/cons.acd
@@ -313,6 +1104,9 @@ lib/libplplot.so.5
%%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
@@ -331,6 +1125,7 @@ lib/libplplot.so.5
%%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
@@ -352,18 +1147,15 @@ lib/libplplot.so.5
%%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/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/knowntypes.standard
%%DATADIR%%/acd/lindna.acd
%%DATADIR%%/acd/listor.acd
%%DATADIR%%/acd/marscan.acd
@@ -375,107 +1167,120 @@ lib/libplplot.so.5
%%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/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/Eanasp.cut
%%DATADIR%%/data/CODONS/Eani.cut
%%DATADIR%%/data/CODONS/Eani_h.cut
%%DATADIR%%/data/CODONS/Eanidmit.cut
@@ -483,6 +1288,7 @@ lib/libplplot.so.5
%%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
@@ -510,7 +1316,6 @@ lib/libplplot.so.5
%%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
@@ -520,8 +1325,6 @@ lib/libplplot.so.5
%%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
@@ -529,15 +1332,12 @@ lib/libplplot.so.5
%%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
@@ -552,13 +1352,11 @@ lib/libplplot.so.5
%%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
@@ -570,7 +1368,6 @@ lib/libplplot.so.5
%%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
@@ -613,7 +1410,6 @@ lib/libplplot.so.5
%%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
@@ -622,6 +1418,9 @@ lib/libplplot.so.5
%%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
@@ -658,6 +1457,8 @@ lib/libplplot.so.5
%%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
@@ -732,10 +1533,7 @@ lib/libplplot.so.5
%%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
@@ -754,38 +1552,215 @@ lib/libplplot.so.5
%%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%%/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%%/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%%/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/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
@@ -795,6 +1770,8 @@ lib/libplplot.so.5
%%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
@@ -805,13 +1782,19 @@ lib/libplplot.so.5
%%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/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
@@ -824,6 +1807,17 @@ lib/libplplot.so.5
%%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
@@ -839,9 +1833,6 @@ lib/libplplot.so.5
%%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
@@ -851,101 +1842,83 @@ lib/libplplot.so.5
%%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/README
+%%DATADIR%%/jemboss/lib/activation.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/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/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/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/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/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/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/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
@@ -954,15 +1927,32 @@ lib/libplplot.so.5
%%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/AcdVarResolve.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/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
@@ -970,1017 +1960,112 @@ lib/libplplot.so.5
%%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/JembossFileServer.java
%%DATADIR%%/jemboss/org/emboss/jemboss/server/JembossThread.java
-%%DATADIR%%/jemboss/org/emboss/jemboss/server/TestPrivateServer.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/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/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/PublicRequest.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/readme.html
-%%DATADIR%%/jemboss/resources/filemgr.html
+%%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/seqList.html
%%DATADIR%%/jemboss/resources/version
-%%DATADIR%%/jemboss/runJemboss.sh
-%%DATADIR%%/jemboss/utils/README
+%%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/makeFileManagerJNLP.sh
-%%DATADIR%%/jemboss/utils/makeJNLP.sh
%%DATADIR%%/jemboss/utils/makeJar.csh
+%%DATADIR%%/jemboss/utils/makeJNLP.sh
+%%DATADIR%%/jemboss/utils/makeFileManagerJNLP.sh
%%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
-%%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/emboss_qg.pdf
-%%PORTDOCS%%%%DOCSDIR%%/manuals/emboss_qg.ps
-%%PORTDOCS%%%%DOCSDIR%%/manuals/fdl.txt
-%%PORTDOCS%%%%DOCSDIR%%/manuals/program.ps.gz
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/aaindexextract.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/abiview.1.abiview.gif
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/abiview.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/acd_group.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/acdc.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/acdlog.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/acdpretty.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/acdtable.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/acdtrace.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/acdvalid.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/ajtest.html
-%%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/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/coderet.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/degapseq.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/degapseqrunner.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/descseq.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/diffseq.html
-%%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
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/domainrep.html
-%%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
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/eclique.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/econsense.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/econtml.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/econtrast.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/edit_group.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednacomp.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednadist.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednainvar.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednaml.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednamlk.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednapars.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednapenny.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/edollop.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/edolpenny.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/efactor.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/efitch.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/egendist.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmalign.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmbuild.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmcalibrate.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmconvert.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmemit.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmfetch.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmindex.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmpfam.html
-%%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
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/emma.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/emnu.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/emowse.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/eneighbor.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/entret.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/enzyme_kinetics_group.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/epenny.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/epestfind.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/eprimer3.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/eprotdist.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/eprotpars.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/equicktandem.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/erestml.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/eseqboot.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/esim4.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/est2genome.html
-%%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
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fcontrast.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdiscboot.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnacomp.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnadist.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnainvar.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnaml.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnamlk.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnamove.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnapars.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnapenny.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdollop.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdolmove.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdolpenny.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdrawgram.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdrawtree.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/feature_tables_group.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/ffactor.html
-%%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
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fneighbor.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fpars.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fpenny.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fproml.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fpromlk.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fprotdist.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fprotpars.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/freak.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/frestboot.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/frestdist.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/frestml.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fretree.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fseqboot.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fseqbootall.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/ftreedist.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/ftreedistpair.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fuzznuc.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/fuzzpro.html
-%%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
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/hetparse.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/hmm_group.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/hmoment.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/iep.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/index.html
-%%PORTDOCS%%%%DOCSDIR%%/programs/html/infoalign.html
-%%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/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/acdtrace.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/acdvalid.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/alignrunner.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/allversusall.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/antigenic.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/backtranseq.txt
-%%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/coderet.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
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/cusp.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/cutgextract.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/cutseq.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/dan.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/dbiblast.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/dbifasta.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/dbiflat.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/dbigcg.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
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/domainrep.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/domainreso.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/domainseqs.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/domainsse.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/dotmatcher.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/dotpath.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/dottup.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/dreg.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/ealistat.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/eclique.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/econsense.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/econtml.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/econtrast.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednacomp.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednadist.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednainvar.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednaml.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednamlk.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednapars.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednapenny.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/edollop.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/edolpenny.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/efactor.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/efitch.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/egendist.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmalign.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmbuild.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmcalibrate.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmconvert.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmemit.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmfetch.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmindex.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmpfam.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmsearch.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/einverted.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/ekitsch.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/embossdata.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/embossversion.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/emix.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/emma.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/emnu.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/emowse.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/eneighbor.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/entret.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/epenny.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/epestfind.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/eprimer3.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/eprotdist.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/eprotpars.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/equicktandem.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/erestml.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/eseqboot.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/esim4.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/est2genome.txt
-%%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
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fcontrast.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdiscboot.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnacomp.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnadist.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnainvar.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnaml.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnamlk.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnamove.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnapars.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnapenny.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdollop.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdolmove.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdolpenny.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdrawgram.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdrawtree.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/ffactor.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/ffitch.txt
-%%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
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fneighbor.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fpars.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fpenny.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fproml.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fpromlk.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fprotdist.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fprotpars.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/freak.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/frestboot.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/frestdist.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/frestml.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fretree.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fseqboot.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fseqbootall.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/ftreedist.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/ftreedistpair.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fuzznuc.txt
-%%PORTDOCS%%%%DOCSDIR%%/programs/text/fuzzpro.txt
-%%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%%/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%%/jemboss/utils/README
+%%DATADIR%%/jemboss/LICENSE
+%%DATADIR%%/jemboss/readme.html
+%%DATADIR%%/jemboss/runJemboss.sh
+%%DATADIR%%/jemboss/README
+%%PORTDOCS%%@dirrm %%DOCSDIR%%/manuals
%%PORTDOCS%%@dirrm %%DOCSDIR%%/programs/html
+%%PORTDOCS%%@dirrm %%DOCSDIR%%/programs/text
%%PORTDOCS%%@dirrm %%DOCSDIR%%/programs
-%%PORTDOCS%%@dirrm %%DOCSDIR%%/manuals
+%%PORTDOCS%%@dirrm %%DOCSDIR%%/tutorials
%%PORTDOCS%%@dirrm %%DOCSDIR%%
-@dirrm %%DATADIR%%/test/wormpep
-@dirrm %%DATADIR%%/test/swnew
-@dirrm %%DATADIR%%/test/swiss
-@dirrm %%DATADIR%%/test/pir
+@dirrm %%DATADIR%%/acd
+@dirrm %%DATADIR%%/data/AAINDEX
+@dirrm %%DATADIR%%/data/CODONS
+@dirrm %%DATADIR%%/data/REBASE
+@dirrm %%DATADIR%%/data/PRINTS
+@dirrm %%DATADIR%%/data/PROSITE
+@dirrmtry %%DATADIR%%/data
+@dirrm %%DATADIR%%/test/data
+@dirrm %%DATADIR%%/test/embl
@dirrm %%DATADIR%%/test/genbank
@dirrm %%DATADIR%%/test/gb
-@dirrm %%DATADIR%%/test/embl
-@dirrm %%DATADIR%%/test/data
+@dirrm %%DATADIR%%/test/pir
+@dirrm %%DATADIR%%/test/swiss
+@dirrm %%DATADIR%%/test/swnew
+@dirrm %%DATADIR%%/test/wormpep
@dirrm %%DATADIR%%/test
-@dirrm %%DATADIR%%/jemboss/utils
-@dirrm %%DATADIR%%/jemboss/resources
-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/soap
-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/server
-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/programs
-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/parser/acd
-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/parser
-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/startup
-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/sequenceChooser
-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/form
-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree
-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui
-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/graphics
-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/editor
-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/draw
-@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss
-@dirrm %%DATADIR%%/jemboss/org/emboss
-@dirrm %%DATADIR%%/jemboss/org
-@dirrm %%DATADIR%%/jemboss/lib/axis
-@dirrm %%DATADIR%%/jemboss/lib
-@dirrm %%DATADIR%%/jemboss/images
-@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/soap
-@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/programs
-@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/acd
-@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/parser
-@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/startup
-@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/sequenceChooser
-@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form
@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/filetree
+@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form
+@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/sequenceChooser
+@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/startup
@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui
+@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/acd
+@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/parser
+@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/programs
+@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/soap
@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss
@dirrm %%DATADIR%%/jemboss/api/org/emboss
@dirrm %%DATADIR%%/jemboss/api/org
@dirrm %%DATADIR%%/jemboss/api
+@dirrm %%DATADIR%%/jemboss/images
+@dirrm %%DATADIR%%/jemboss/lib/axis
+@dirrm %%DATADIR%%/jemboss/lib
+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/editor
+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/draw
+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/graphics
+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree
+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/form
+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/sequenceChooser
+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/startup
+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui
+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/parser/acd
+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/parser
+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/programs
+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/server
+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/soap
+@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss
+@dirrm %%DATADIR%%/jemboss/org/emboss
+@dirrm %%DATADIR%%/jemboss/org
+@dirrm %%DATADIR%%/jemboss/resources
+@dirrm %%DATADIR%%/jemboss/utils
@dirrm %%DATADIR%%/jemboss
-@dirrm %%DATADIR%%/data/REBASE
-@dirrm %%DATADIR%%/data/PROSITE
-@dirrm %%DATADIR%%/data/PRINTS
-@dirrm %%DATADIR%%/data/CODONS
-@dirrm %%DATADIR%%/data/AAINDEX
-@dirrm %%DATADIR%%/data
-@dirrm %%DATADIR%%/acd
-@dirrm %%DATADIR%%
+@dirrmtry %%DATADIR%%
+@dirrmtry bin
+@dirrmtry include
+@dirrmtry lib
+@dirrmtry share/doc
+@dirrmtry share