diff options
author | thierry <thierry@FreeBSD.org> | 2006-03-31 09:43:21 +0000 |
---|---|---|
committer | thierry <thierry@FreeBSD.org> | 2006-03-31 09:43:21 +0000 |
commit | fb2acddfa450b94668fcabf373f758e9a5f0ecfb (patch) | |
tree | 4a676f74d96f647e056c72fae56132ecc88cbda8 /biology | |
parent | 617f5ef59bee4a7e55352e88675cc333bdde455c (diff) | |
download | FreeBSD-ports-fb2acddfa450b94668fcabf373f758e9a5f0ecfb.zip FreeBSD-ports-fb2acddfa450b94668fcabf373f758e9a5f0ecfb.tar.gz |
For EMBOSS:
This patch brings EMBOSS up to date with the current version.
i. The patches included in files/ are bugfixes for files in
EMBOSS-3.0.0 that appeared after the release. They are
documented in ftp://emboss.open-bio.org/pub/EMBOSS/fixes/README
This is just 'for the record' so that we remember to remove these
patches in the next update.
ii. EMBOSS is now installed by default in LOCALBASE/emboss
This is to avoid CONFLICTS with other ports that install files
with the same names. Installing EMBOSS to another PREFIX is also
possible.
iii. now EMBASSY and EMBOSS both store their distfiles in the same
DIST_SUBDIR
iv. use built-in PKGMESSAGE and SUB_FILES instead of doing it the old
(manual) way
For EMBASSY:
This update brings embassy in sync with the update of EMBOSS to 3.0.0.
Things that changed from previous version of the port:
i. embassy now installs by default in $LOCALBASE/emboss (the
new default PREFIX for emboss as well).
ii. changed DIST_SUBDIR so that all the distfiles are put together with
emboss. This makes sense(TM)
iii. incorporated new EMBASSY apps (this accounts for the changes in
OPTIONS and pkg-plist)
iv. removed obsoleted patches
Finally, I included a sample text that could go in UPDATING.
PR: 93053
Submitted by: Fernan Aguero <fernan (at) iib.unsam.edu.ar> (maintainer)
Diffstat (limited to 'biology')
22 files changed, 7820 insertions, 1458 deletions
diff --git a/biology/embassy/Makefile b/biology/embassy/Makefile index 6c57259..5d3ed87 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 62e43dd..486dd95 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 d544a23..0000000 --- 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 31688df..0000000 --- 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 22c8896..a1f0267 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 27aa2db..2fdecdd 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 5cf84b5..12a082f 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 0000000..410f90c --- /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 0000000..bcd3faa --- /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 0000000..39b7300 --- /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 0000000..236f960 --- /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 0000000..66f97c1 --- /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 0000000..f898370 --- /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 0000000..5856843 --- /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 0000000..2556948 --- /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 0000000..3714ede --- /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 0000000..04ee586 --- /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 0000000..85481fe --- /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 0000000..cdedc50 --- /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 0000000..e39e4d0 --- /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 1c36c80..0000000 --- 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 9154aea..ea98778 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 |