diff options
author | Thierry Thomas <thierry@FreeBSD.org> | 2006-03-31 09:43:21 +0000 |
---|---|---|
committer | Thierry Thomas <thierry@FreeBSD.org> | 2006-03-31 09:43:21 +0000 |
commit | 10570c91c859759f24e50ca522c93841cf7b3c1a (patch) | |
tree | 851aa9297bae05a3433bb7d4d99522569e4d4927 /biology | |
parent | c3097ebe013a5b50a88581c6300340de69f6b2aa (diff) | |
download | ports-10570c91c859759f24e50ca522c93841cf7b3c1a.tar.gz ports-10570c91c859759f24e50ca522c93841cf7b3c1a.zip |
Notes
Diffstat (limited to 'biology')
22 files changed, 7820 insertions, 1458 deletions
diff --git a/biology/embassy/Makefile b/biology/embassy/Makefile index 6c572598b54e..5d3ed872749a 100644 --- a/biology/embassy/Makefile +++ b/biology/embassy/Makefile @@ -7,18 +7,21 @@ # PORTNAME= embassy -PORTVERSION= 2.10.0 +PORTVERSION= 3.0.0 CATEGORIES= biology -MASTER_SITES= ftp://ftp.uk.embnet.org/pub/EMBOSS/ \ +MASTER_SITES= ftp://emboss.open-bio.org/pub/EMBOSS/ \ + ftp://ftp.uk.embnet.org/pub/EMBOSS/ \ ftp://ftp.es.embnet.org/pub/software/emboss/EMBOSS/ \ ftp://ftp.ebi.ac.uk/pub/software/unix/EMBOSS/ -DIST_SUBDIR= ${PORTNAME} +DIST_SUBDIR= emboss MAINTAINER= fernan@iib.unsam.edu.ar COMMENT= A collection of contributed EMBOSS applications -LIB_DEPENDS= nucleus.1:${PORTSDIR}/biology/emboss +LIB_DEPENDS= nucleus.3:${PORTSDIR}/biology/emboss +PREFIX?= ${LOCALBASE}/emboss +NO_MTREE= yes USE_SUBMAKE= yes USE_ICONV= yes USE_GMAKE= yes @@ -26,12 +29,17 @@ GNU_CONFIGURE= yes USE_XLIB= yes USE_MOTIF= yes -OPTIONS= DOMAINATRIX "Protein structure and domain apps" on \ +OPTIONS= DOMAINATRIX "Protein domain apps" on \ + DOMALIGN "Protein domain apps" on \ + DOMSEARCH "Protein domain apps" on \ + SIGNATURE "Protein domain apps" on \ + STRUCTURE "Protein domain apps" on \ EMNU "EMBOSS simple menu" on \ ESIM4 "Align cDNA/EST to genome" on \ HMMER "HMM alignment and searches" on \ MEME "Motif detection" on \ MSE "A multiple sequence screen editor" on \ + MYEMBOSS "Examples for developers of EMBOSS apps" on \ PHYLIP "Phylogeny inference" on \ TOPO "Transmembrane display" on @@ -39,15 +47,21 @@ CONFIGURE_ENV+= CPPFLAGS="-I${PREFIX}/include -I${LOCALBASE}/include" \ LDFLAGS="-L${PREFIX}/lib -L${LOCALBASE}/lib" EMBASSY_WRKDIR= ${WRKSRC}/EMBASSY -DOMAINATRIX_VERSION= 1.0.0 +DOMAINATRIX_VERSION= 0.1.0 EMNU_VERSION= 1.05 ESIM4_VERSION= 1.0.0 HMMER_VERSION= 2.1.1 MEME_VERSION= 2.3.1 MSE_VERSION= 1.0.0 TOPO_VERSION= 1.0.0 -PHYLIP_VERSION= 3.57c -EMBASSY_APPS= DOMAINATRIX EMNU ESIM4 HMMER MEME MSE PHYLIP TOPO +PHYLIP_VERSION= 3.6b +DOMALIGN_VERSION= 0.1.0 +DOMSEARCH_VERSION= 0.1.0 +SIGNATURE_VERSION= 0.1.0 +STRUCTURE_VERSION= 0.1.0 +MYEMBOSS_VERSION= 3.0.0 +EMBASSY_APPS= DOMAINATRIX EMNU ESIM4 HMMER MEME MSE PHYLIP TOPO \ + DOMALIGN DOMSEARCH SIGNATURE STRUCTURE MYEMBOSS .include <bsd.port.pre.mk> @@ -75,16 +89,6 @@ do-extract: fi .endfor -.if !defined(WITHOUT_DOMAINATRIX) -pre-configure:: - @${PATCH} ${PATCH_ARGS} < ${PATCHDIR}/domainatrix-patch-Makefile.in -.endif - -.if !defined(WITHOUT_EMNU) -pre-configure:: - @${PATCH} ${PATCH_ARGS} < ${PATCHDIR}/emnu-patch-Makefile.in -.endif - do-configure: .for app in ${APPLIST} @ cd ${${app}_WRKSRC} && \ diff --git a/biology/embassy/distinfo b/biology/embassy/distinfo index 62e43dd5e562..486dd95d3995 100644 --- a/biology/embassy/distinfo +++ b/biology/embassy/distinfo @@ -1,24 +1,39 @@ -MD5 (embassy/DOMAINATRIX-1.0.0.tar.gz) = 9deff6f5bf526408f0f02c002488ad59 -SHA256 (embassy/DOMAINATRIX-1.0.0.tar.gz) = 50abb58f3196f2f3d04af2649ace36457315c378fa73345cb635b51e913db8fc -SIZE (embassy/DOMAINATRIX-1.0.0.tar.gz) = 471604 -MD5 (embassy/EMNU-1.05.tar.gz) = df29ae1e8201081f4413862d7f10edb5 -SHA256 (embassy/EMNU-1.05.tar.gz) = 4bcdc64c9ec2d818b3ba00eef34eee39e11ef99d87cf292a214b7be51bf6bf48 -SIZE (embassy/EMNU-1.05.tar.gz) = 339355 -MD5 (embassy/ESIM4-1.0.0.tar.gz) = 3b8137b3b8ff0e84bc6e1243c7343578 -SHA256 (embassy/ESIM4-1.0.0.tar.gz) = 6e24466905c457d3f464f3a7fb24680a01326cb22acf7d090b84a51da0382d2a -SIZE (embassy/ESIM4-1.0.0.tar.gz) = 378342 -MD5 (embassy/HMMER-2.1.1.tar.gz) = 56816b26a43c8542f7d12f9069e77843 -SHA256 (embassy/HMMER-2.1.1.tar.gz) = 63f3d4e6a509b8d1a815a9dc7e74fe7c458a9478e4885608349eeb2aa8c2df87 -SIZE (embassy/HMMER-2.1.1.tar.gz) = 562855 -MD5 (embassy/MEME-2.3.1.tar.gz) = a9fb38886665f3f654da1244c2e1476f -SHA256 (embassy/MEME-2.3.1.tar.gz) = 778589a63705e17db1aded3704b70a3cc3de4b1e41f90ccfcd8d86b7f6dab622 -SIZE (embassy/MEME-2.3.1.tar.gz) = 421914 -MD5 (embassy/MSE-1.0.0.tar.gz) = b666681aceb9f07f968585f2edc4a039 -SHA256 (embassy/MSE-1.0.0.tar.gz) = 13fca33f78cd83e2a53c0b08a0db97da2b9dd572e01a694e8acd6a87316b3fa7 -SIZE (embassy/MSE-1.0.0.tar.gz) = 411772 -MD5 (embassy/PHYLIP-3.57c.tar.gz) = 83201895898feb15dbbae6affabd3609 -SHA256 (embassy/PHYLIP-3.57c.tar.gz) = ff5385d0b5b6c5f42a8b7c53a682ede654e0309f4ab31859f5b907563a4a7b4f -SIZE (embassy/PHYLIP-3.57c.tar.gz) = 858348 -MD5 (embassy/TOPO-1.0.0.tar.gz) = 0a8fcc84fdba071b20f3046de9fdb487 -SHA256 (embassy/TOPO-1.0.0.tar.gz) = d1e9e6c9c37b36f4bfca485fbda68d1c045c8fa1171eea94089773ed40bc11d3 -SIZE (embassy/TOPO-1.0.0.tar.gz) = 345938 +MD5 (emboss/DOMAINATRIX-0.1.0.tar.gz) = 655f6ec58e0b9dfdac111fd9481359cb +SHA256 (emboss/DOMAINATRIX-0.1.0.tar.gz) = 6bc374c5275dead68ef09d8273bf4d73a03bc56990e795d6eddcee4de25c12a0 +SIZE (emboss/DOMAINATRIX-0.1.0.tar.gz) = 349882 +MD5 (emboss/EMNU-1.05.tar.gz) = b3a7fc11e46f7166ddeec11f2fe03d9b +SHA256 (emboss/EMNU-1.05.tar.gz) = d7261d615d6547a9824d3d9e3f82ff756c0db5786e8356bc54cc5fa0c516b26f +SIZE (emboss/EMNU-1.05.tar.gz) = 348924 +MD5 (emboss/ESIM4-1.0.0.tar.gz) = 835393b3246eb4543a694362c6f335ff +SHA256 (emboss/ESIM4-1.0.0.tar.gz) = f8241c9e37ccc17dbd29df2d9c90063ba7caf4e64cc5c368b6878c3aa3895620 +SIZE (emboss/ESIM4-1.0.0.tar.gz) = 384396 +MD5 (emboss/HMMER-2.1.1.tar.gz) = 382594654e45a7e8d5872b4b1016a494 +SHA256 (emboss/HMMER-2.1.1.tar.gz) = 78647dfb7841e8b52b4c3de34400c68d17a877b698956ac9a5ee5e030569cca6 +SIZE (emboss/HMMER-2.1.1.tar.gz) = 561289 +MD5 (emboss/MEME-2.3.1.tar.gz) = 6f4e516e413582268a34e91fb12e21c3 +SHA256 (emboss/MEME-2.3.1.tar.gz) = bec2c8002b8b551ef9c639bcb58633499060cd8a1bfe4754db5ed201a6a0dffa +SIZE (emboss/MEME-2.3.1.tar.gz) = 423966 +MD5 (emboss/MSE-1.0.0.tar.gz) = 3b9810e870937ec32220b5c9fe7a83cd +SHA256 (emboss/MSE-1.0.0.tar.gz) = ddf9092721666d64c56733d9b6d04e749957848cafa8ba4ec6eee083a0ffcab3 +SIZE (emboss/MSE-1.0.0.tar.gz) = 415051 +MD5 (emboss/PHYLIP-3.6b.tar.gz) = 6f2c10438d788acf4a1dff23441b2a2c +SHA256 (emboss/PHYLIP-3.6b.tar.gz) = 32aba94d0be011ee304e974657db11544297c008e53341cd000a1f412eb874e2 +SIZE (emboss/PHYLIP-3.6b.tar.gz) = 1136746 +MD5 (emboss/TOPO-1.0.0.tar.gz) = 7b3355570ba36f7daf57dcbc717215ce +SHA256 (emboss/TOPO-1.0.0.tar.gz) = ff10378b4ecad69ddb374cd47a7d3c7fa5975d6695057f05ea264940258ebaa3 +SIZE (emboss/TOPO-1.0.0.tar.gz) = 351796 +MD5 (emboss/DOMALIGN-0.1.0.tar.gz) = 4332d7de49b27f257b58a90510223eb7 +SHA256 (emboss/DOMALIGN-0.1.0.tar.gz) = de66ddfdb72ccf7291be614c9a83fd8fc47363191cb2c045b372de5cc334a594 +SIZE (emboss/DOMALIGN-0.1.0.tar.gz) = 347672 +MD5 (emboss/DOMSEARCH-0.1.0.tar.gz) = c62f9b69a9ed9580d4489a8de9ea4863 +SHA256 (emboss/DOMSEARCH-0.1.0.tar.gz) = f4933b62e19ee6b23a78b70c3cf2d5a9a18eff1d7532f92e2d33b1d683877916 +SIZE (emboss/DOMSEARCH-0.1.0.tar.gz) = 352793 +MD5 (emboss/SIGNATURE-0.1.0.tar.gz) = 1e30e12048609a468b7b4d4affb177cf +SHA256 (emboss/SIGNATURE-0.1.0.tar.gz) = c6bb252beaccac5256d99301933b15da6ef90af3f20d7f92fed1f78b271785ee +SIZE (emboss/SIGNATURE-0.1.0.tar.gz) = 400125 +MD5 (emboss/STRUCTURE-0.1.0.tar.gz) = 6efc35eb2855738252e0537198f5225d +SHA256 (emboss/STRUCTURE-0.1.0.tar.gz) = 7142e207987da46cd85c81088ea475abb866da90ff57e4c3ca1c63bd8f209b64 +SIZE (emboss/STRUCTURE-0.1.0.tar.gz) = 362563 +MD5 (emboss/MYEMBOSS-3.0.0.tar.gz) = 15d5bc7b0ce9dfb113777c06c4e18906 +SHA256 (emboss/MYEMBOSS-3.0.0.tar.gz) = 0a19ebbe52da849fb87799edaea2281a1bf235e6045725789b9b29e58f0a0dc5 +SIZE (emboss/MYEMBOSS-3.0.0.tar.gz) = 323628 diff --git a/biology/embassy/files/domainatrix-patch-Makefile.in b/biology/embassy/files/domainatrix-patch-Makefile.in deleted file mode 100644 index d544a23f136b..000000000000 --- a/biology/embassy/files/domainatrix-patch-Makefile.in +++ /dev/null @@ -1,11 +0,0 @@ ---- EMBASSY/DOMAINATRIX-1.0.0/src/Makefile.in.orig Sat May 28 12:21:57 2005 -+++ EMBASSY/DOMAINATRIX-1.0.0/src/Makefile.in Sat May 28 12:22:14 2005 -@@ -315,7 +315,7 @@ - @LOCALLINK_TRUE@ ../../../plplot/libplplot.la \ - @LOCALLINK_TRUE@ $(am__DEPENDENCIES_1) - DEFAULT_INCLUDES = -I. -I$(srcdir) --depcomp = $(SHELL) $(top_srcdir)/../../depcomp -+depcomp = $(SHELL) $(top_srcdir)/depcomp - am__depfiles_maybe = depfiles - COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) diff --git a/biology/embassy/files/emnu-patch-Makefile.in b/biology/embassy/files/emnu-patch-Makefile.in deleted file mode 100644 index 31688dfd589b..000000000000 --- a/biology/embassy/files/emnu-patch-Makefile.in +++ /dev/null @@ -1,11 +0,0 @@ ---- EMBASSY/EMNU-1.05/source/Makefile.in.orig Sat May 28 12:57:17 2005 -+++ EMBASSY/EMNU-1.05/source/Makefile.in Sat May 28 13:03:33 2005 -@@ -63,7 +63,7 @@ - @LOCALLINK_TRUE@ ../../../plplot/libplplot.la \ - @LOCALLINK_TRUE@ $(am__DEPENDENCIES_1) - DEFAULT_INCLUDES = -I. -I$(srcdir) --depcomp = $(SHELL) $(top_srcdir)/../../depcomp -+depcomp = $(SHELL) $(top_srcdir)/depcomp - am__depfiles_maybe = depfiles - COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) diff --git a/biology/embassy/pkg-plist b/biology/embassy/pkg-plist index 22c88962c326..a1f0267522e1 100644 --- a/biology/embassy/pkg-plist +++ b/biology/embassy/pkg-plist @@ -1,148 +1,201 @@ -%%PLIST_DOMAINATRIX%%bin/allversusall %%PLIST_DOMAINATRIX%%bin/cathparse -%%PLIST_DOMAINATRIX%%bin/contacts -%%PLIST_DOMAINATRIX%%bin/domainalign -%%PLIST_DOMAINATRIX%%bin/domainer %%PLIST_DOMAINATRIX%%bin/domainnr -%%PLIST_DOMAINATRIX%%bin/domainrep %%PLIST_DOMAINATRIX%%bin/domainreso %%PLIST_DOMAINATRIX%%bin/domainseqs %%PLIST_DOMAINATRIX%%bin/domainsse -%%PLIST_DOMAINATRIX%%bin/hetparse -%%PLIST_DOMAINATRIX%%bin/interface -%%PLIST_DOMAINATRIX%%bin/libgen -%%PLIST_DOMAINATRIX%%bin/pdbparse -%%PLIST_DOMAINATRIX%%bin/pdbplus -%%PLIST_DOMAINATRIX%%bin/pdbtosp -%%PLIST_DOMAINATRIX%%bin/rocon -%%PLIST_DOMAINATRIX%%bin/rocplot %%PLIST_DOMAINATRIX%%bin/scopparse -%%PLIST_DOMAINATRIX%%bin/seqalign -%%PLIST_DOMAINATRIX%%bin/seqfraggle -%%PLIST_DOMAINATRIX%%bin/seqnr -%%PLIST_DOMAINATRIX%%bin/seqsearch -%%PLIST_DOMAINATRIX%%bin/seqsort -%%PLIST_DOMAINATRIX%%bin/seqwords -%%PLIST_DOMAINATRIX%%bin/siggen -%%PLIST_DOMAINATRIX%%bin/sigscan -%%PLIST_DOMAINATRIX%%bin/sites %%PLIST_DOMAINATRIX%%bin/ssematch +%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/cathparse.acd +%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/domainnr.acd +%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/domainreso.acd +%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/domainseqs.acd +%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/domainsse.acd +%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/scopparse.acd +%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/ssematch.acd +%%PLIST_DOMALIGN%%bin/allversusall +%%PLIST_DOMALIGN%%bin/domainalign +%%PLIST_DOMALIGN%%bin/domainrep +%%PLIST_DOMALIGN%%bin/seqalign +%%PLIST_DOMALIGN%%share/EMBOSS/acd/allversusall.acd +%%PLIST_DOMALIGN%%share/EMBOSS/acd/domainalign.acd +%%PLIST_DOMALIGN%%share/EMBOSS/acd/domainrep.acd +%%PLIST_DOMALIGN%%share/EMBOSS/acd/seqalign.acd +%%PLIST_DOMSEARCH%%bin/seqfraggle +%%PLIST_DOMSEARCH%%bin/seqnr +%%PLIST_DOMSEARCH%%bin/seqsearch +%%PLIST_DOMSEARCH%%bin/seqsort +%%PLIST_DOMSEARCH%%bin/seqwords +%%PLIST_DOMSEARCH%%share/EMBOSS/acd/seqfraggle.acd +%%PLIST_DOMSEARCH%%share/EMBOSS/acd/seqnr.acd +%%PLIST_DOMSEARCH%%share/EMBOSS/acd/seqsearch.acd +%%PLIST_DOMSEARCH%%share/EMBOSS/acd/seqsort.acd +%%PLIST_DOMSEARCH%%share/EMBOSS/acd/seqwords.acd %%PLIST_EMNU%%bin/emnu -%%PLIST_ESIM4%%bin/esim4 -%%PLIST_MEME%%bin/meme +%%PLIST_EMNU%%share/EMBOSS/acd/emnu.acd +%%PLIST_HMMER%%bin/ealistat +%%PLIST_HMMER%%bin/ehmmalign +%%PLIST_HMMER%%bin/ehmmbuild %%PLIST_HMMER%%bin/ehmmcalibrate %%PLIST_HMMER%%bin/ehmmconvert %%PLIST_HMMER%%bin/ehmmemit %%PLIST_HMMER%%bin/ehmmfetch %%PLIST_HMMER%%bin/ehmmindex -%%PLIST_HMMER%%bin/ehmmbuild -%%PLIST_HMMER%%bin/ehmmalign %%PLIST_HMMER%%bin/ehmmpfam %%PLIST_HMMER%%bin/ehmmsearch -%%PLIST_HMMER%%bin/ealistat -%%PLIST_MSE%%bin/mse -%%PLIST_PHYLIP%%bin/eclique -%%PLIST_PHYLIP%%bin/econsense -%%PLIST_PHYLIP%%bin/econtml -%%PLIST_PHYLIP%%bin/econtrast -%%PLIST_PHYLIP%%bin/ednacomp -%%PLIST_PHYLIP%%bin/ednadist -%%PLIST_PHYLIP%%bin/ednainvar -%%PLIST_PHYLIP%%bin/ednaml -%%PLIST_PHYLIP%%bin/ednamlk -%%PLIST_PHYLIP%%bin/ednapars -%%PLIST_PHYLIP%%bin/ednapenny -%%PLIST_PHYLIP%%bin/edollop -%%PLIST_PHYLIP%%bin/edolpenny -%%PLIST_PHYLIP%%bin/efactor -%%PLIST_PHYLIP%%bin/efitch -%%PLIST_PHYLIP%%bin/egendist -%%PLIST_PHYLIP%%bin/ekitsch -%%PLIST_PHYLIP%%bin/emix -%%PLIST_PHYLIP%%bin/epenny -%%PLIST_PHYLIP%%bin/eprotdist -%%PLIST_PHYLIP%%bin/eprotpars -%%PLIST_PHYLIP%%bin/erestml -%%PLIST_PHYLIP%%bin/eseqboot -%%PLIST_PHYLIP%%bin/eneighbor -%%PLIST_TOPO%%bin/topo -%%PLIST_MEME%%lib/libmeme.so.2 -%%PLIST_MEME%%lib/libmeme.so -%%PLIST_MEME%%lib/libmeme.la -%%PLIST_MEME%%lib/libmeme.a -%%PLIST_HMMER%%lib/libhmmer.so.2 -%%PLIST_HMMER%%lib/libhmmer.so -%%PLIST_HMMER%%lib/libhmmer.la %%PLIST_HMMER%%lib/libhmmer.a -%%PLIST_MSE%%lib/libckit.so.1 -%%PLIST_MSE%%lib/libckit.so -%%PLIST_MSE%%lib/libckit.la -%%PLIST_MSE%%lib/libckit.a -%%PLIST_MSE%%share/EMBOSS/acd/mse.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/allversusall.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/cathparse.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/contacts.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/domainalign.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/domainer.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/domainnr.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/domainrep.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/domainreso.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/domainseqs.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/domainsse.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/hetparse.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/interface.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/libgen.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/pdbparse.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/pdbplus.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/pdbtosp.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/rocon.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/rocplot.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/scopparse.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/seqalign.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/seqfraggle.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/seqnr.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/seqsearch.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/seqsort.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/seqwords.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/siggen.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/sigscan.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/sites.acd -%%PLIST_DOMAINATRIX%%share/EMBOSS/acd/ssematch.acd -%%PLIST_EMNU%%share/EMBOSS/acd/emnu.acd -%%PLIST_ESIM4%%share/EMBOSS/acd/esim4.acd -%%PLIST_MEME%%share/EMBOSS/acd/meme.acd +%%PLIST_HMMER%%lib/libhmmer.la +%%PLIST_HMMER%%lib/libhmmer.so +%%PLIST_HMMER%%lib/libhmmer.so.2 +%%PLIST_HMMER%%share/EMBOSS/acd/ealistat.acd +%%PLIST_HMMER%%share/EMBOSS/acd/ehmmalign.acd +%%PLIST_HMMER%%share/EMBOSS/acd/ehmmbuild.acd %%PLIST_HMMER%%share/EMBOSS/acd/ehmmcalibrate.acd %%PLIST_HMMER%%share/EMBOSS/acd/ehmmconvert.acd %%PLIST_HMMER%%share/EMBOSS/acd/ehmmemit.acd %%PLIST_HMMER%%share/EMBOSS/acd/ehmmfetch.acd %%PLIST_HMMER%%share/EMBOSS/acd/ehmmindex.acd -%%PLIST_HMMER%%share/EMBOSS/acd/ehmmbuild.acd -%%PLIST_HMMER%%share/EMBOSS/acd/ehmmalign.acd %%PLIST_HMMER%%share/EMBOSS/acd/ehmmpfam.acd %%PLIST_HMMER%%share/EMBOSS/acd/ehmmsearch.acd -%%PLIST_HMMER%%share/EMBOSS/acd/ealistat.acd -%%PLIST_PHYLIP%%share/EMBOSS/acd/eclique.acd -%%PLIST_PHYLIP%%share/EMBOSS/acd/econsense.acd -%%PLIST_PHYLIP%%share/EMBOSS/acd/econtml.acd -%%PLIST_PHYLIP%%share/EMBOSS/acd/econtrast.acd -%%PLIST_PHYLIP%%share/EMBOSS/acd/ednacomp.acd -%%PLIST_PHYLIP%%share/EMBOSS/acd/ednadist.acd -%%PLIST_PHYLIP%%share/EMBOSS/acd/ednainvar.acd -%%PLIST_PHYLIP%%share/EMBOSS/acd/ednaml.acd -%%PLIST_PHYLIP%%share/EMBOSS/acd/ednamlk.acd -%%PLIST_PHYLIP%%share/EMBOSS/acd/ednapars.acd -%%PLIST_PHYLIP%%share/EMBOSS/acd/ednapenny.acd -%%PLIST_PHYLIP%%share/EMBOSS/acd/edollop.acd -%%PLIST_PHYLIP%%share/EMBOSS/acd/edolpenny.acd -%%PLIST_PHYLIP%%share/EMBOSS/acd/efactor.acd -%%PLIST_PHYLIP%%share/EMBOSS/acd/efitch.acd -%%PLIST_PHYLIP%%share/EMBOSS/acd/egendist.acd -%%PLIST_PHYLIP%%share/EMBOSS/acd/ekitsch.acd -%%PLIST_PHYLIP%%share/EMBOSS/acd/emix.acd -%%PLIST_PHYLIP%%share/EMBOSS/acd/eneighbor.acd -%%PLIST_PHYLIP%%share/EMBOSS/acd/epenny.acd -%%PLIST_PHYLIP%%share/EMBOSS/acd/eprotdist.acd -%%PLIST_PHYLIP%%share/EMBOSS/acd/eprotpars.acd -%%PLIST_PHYLIP%%share/EMBOSS/acd/erestml.acd -%%PLIST_PHYLIP%%share/EMBOSS/acd/eseqboot.acd +%%PLIST_MEME%%bin/meme +%%PLIST_MEME%%lib/libmeme.a +%%PLIST_MEME%%lib/libmeme.la +%%PLIST_MEME%%lib/libmeme.so +%%PLIST_MEME%%lib/libmeme.so.2 +%%PLIST_MEME%%share/EMBOSS/acd/meme.acd +%%PLIST_MSE%%bin/mse +%%PLIST_MSE%%lib/libckit.a +%%PLIST_MSE%%lib/libckit.la +%%PLIST_MSE%%lib/libckit.so +%%PLIST_MSE%%lib/libckit.so.1 +%%PLIST_MSE%%share/EMBOSS/acd/mse.acd +%%PLIST_MYEMBOSS%%bin/myseq +%%PLIST_MYEMBOSS%%bin/mytest +%%PLIST_MYEMBOSS%%share/EMBOSS/acd/myseq.acd +%%PLIST_MYEMBOSS%%share/EMBOSS/acd/mytest.acd +%%PLIST_PHYLIP%%bin/fclique +%%PLIST_PHYLIP%%bin/fconsense +%%PLIST_PHYLIP%%bin/fcontml +%%PLIST_PHYLIP%%bin/fcontrast +%%PLIST_PHYLIP%%bin/fdiscboot +%%PLIST_PHYLIP%%bin/fdnacomp +%%PLIST_PHYLIP%%bin/fdnadist +%%PLIST_PHYLIP%%bin/fdnainvar +%%PLIST_PHYLIP%%bin/fdnaml +%%PLIST_PHYLIP%%bin/fdnamlk +%%PLIST_PHYLIP%%bin/fdnamove +%%PLIST_PHYLIP%%bin/fdnapars +%%PLIST_PHYLIP%%bin/fdnapenny +%%PLIST_PHYLIP%%bin/fdollop +%%PLIST_PHYLIP%%bin/fdolmove +%%PLIST_PHYLIP%%bin/fdolpenny +%%PLIST_PHYLIP%%bin/fdrawgram +%%PLIST_PHYLIP%%bin/fdrawtree +%%PLIST_PHYLIP%%bin/ffactor +%%PLIST_PHYLIP%%bin/ffitch +%%PLIST_PHYLIP%%bin/ffreqboot +%%PLIST_PHYLIP%%bin/fgendist +%%PLIST_PHYLIP%%bin/fkitsch +%%PLIST_PHYLIP%%bin/fmix +%%PLIST_PHYLIP%%bin/fmove +%%PLIST_PHYLIP%%bin/fneighbor +%%PLIST_PHYLIP%%bin/fpars +%%PLIST_PHYLIP%%bin/fpenny +%%PLIST_PHYLIP%%bin/fproml +%%PLIST_PHYLIP%%bin/fpromlk +%%PLIST_PHYLIP%%bin/fprotdist +%%PLIST_PHYLIP%%bin/fprotpars +%%PLIST_PHYLIP%%bin/frestboot +%%PLIST_PHYLIP%%bin/frestdist +%%PLIST_PHYLIP%%bin/frestml +%%PLIST_PHYLIP%%bin/fretree +%%PLIST_PHYLIP%%bin/fseqboot +%%PLIST_PHYLIP%%bin/fseqbootall +%%PLIST_PHYLIP%%bin/ftreedist +%%PLIST_PHYLIP%%bin/ftreedistpair +%%PLIST_PHYLIP%%share/EMBOSS/acd/fclique.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fconsense.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fcontml.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fcontrast.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fdiscboot.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fdnacomp.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fdnadist.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fdnainvar.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fdnaml.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fdnamlk.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fdnamove.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fdnapars.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fdnapenny.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fdollop.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fdolmove.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fdolpenny.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fdrawgram.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fdrawtree.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/ffactor.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/ffitch.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/ffreqboot.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fgendist.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fkitsch.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fmix.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fmove.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fneighbor.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fpars.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fpenny.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fproml.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fpromlk.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fprotdist.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fprotpars.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/frestboot.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/frestdist.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/frestml.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fretree.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fseqboot.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/fseqbootall.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/ftreedist.acd +%%PLIST_PHYLIP%%share/EMBOSS/acd/ftreedistpair.acd +%%PLIST_PHYLIP%%share/PHYLIP/data/phylipnew/font1 +%%PLIST_PHYLIP%%share/PHYLIP/data/phylipnew/font2 +%%PLIST_PHYLIP%%share/PHYLIP/data/phylipnew/font3 +%%PLIST_PHYLIP%%share/PHYLIP/data/phylipnew/font4 +%%PLIST_PHYLIP%%share/PHYLIP/data/phylipnew/font5 +%%PLIST_PHYLIP%%share/PHYLIP/data/phylipnew/font6 +%%PLIST_PHYLIP%%@dirrm share/PHYLIP/data/phylipnew +%%PLIST_PHYLIP%%@dirrm share/PHYLIP/data +%%PLIST_PHYLIP%%@dirrm share/PHYLIP +%%PLIST_SIGNATURE%%bin/libgen +%%PLIST_SIGNATURE%%bin/matgen3d +%%PLIST_SIGNATURE%%bin/rocon +%%PLIST_SIGNATURE%%bin/rocplot +%%PLIST_SIGNATURE%%bin/siggen +%%PLIST_SIGNATURE%%bin/siggenlig +%%PLIST_SIGNATURE%%bin/sigscan +%%PLIST_SIGNATURE%%bin/sigscanlig +%%PLIST_SIGNATURE%%share/EMBOSS/acd/libgen.acd +%%PLIST_SIGNATURE%%share/EMBOSS/acd/matgen3d.acd +%%PLIST_SIGNATURE%%share/EMBOSS/acd/rocon.acd +%%PLIST_SIGNATURE%%share/EMBOSS/acd/rocplot.acd +%%PLIST_SIGNATURE%%share/EMBOSS/acd/siggen.acd +%%PLIST_SIGNATURE%%share/EMBOSS/acd/siggenlig.acd +%%PLIST_SIGNATURE%%share/EMBOSS/acd/sigscan.acd +%%PLIST_SIGNATURE%%share/EMBOSS/acd/sigscanlig.acd +%%PLIST_ESIM4%%bin/esim4 +%%PLIST_ESIM4%%share/EMBOSS/acd/esim4.acd +%%PLIST_STRUCTURE%%bin/contacts +%%PLIST_STRUCTURE%%bin/domainer +%%PLIST_STRUCTURE%%bin/hetparse +%%PLIST_STRUCTURE%%bin/interface +%%PLIST_STRUCTURE%%bin/pdbparse +%%PLIST_STRUCTURE%%bin/pdbplus +%%PLIST_STRUCTURE%%bin/pdbtosp +%%PLIST_STRUCTURE%%bin/sites +%%PLIST_STRUCTURE%%share/EMBOSS/acd/contacts.acd +%%PLIST_STRUCTURE%%share/EMBOSS/acd/domainer.acd +%%PLIST_STRUCTURE%%share/EMBOSS/acd/hetparse.acd +%%PLIST_STRUCTURE%%share/EMBOSS/acd/interface.acd +%%PLIST_STRUCTURE%%share/EMBOSS/acd/pdbparse.acd +%%PLIST_STRUCTURE%%share/EMBOSS/acd/pdbplus.acd +%%PLIST_STRUCTURE%%share/EMBOSS/acd/pdbtosp.acd +%%PLIST_STRUCTURE%%share/EMBOSS/acd/sites.acd +%%PLIST_TOPO%%bin/topo %%PLIST_TOPO%%share/EMBOSS/acd/topo.acd +@dirrmtry share/EMBOSS/acd +@dirrmtry share/EMBOSS diff --git a/biology/emboss/Makefile b/biology/emboss/Makefile index 27aa2db9b5ee..2fdecddae40f 100644 --- a/biology/emboss/Makefile +++ b/biology/emboss/Makefile @@ -6,14 +6,15 @@ # PORTNAME= emboss -PORTVERSION= 2.10.0 -PORTREVISION= 1 +PORTVERSION= 3.0.0 CATEGORIES= biology -MASTER_SITES= ftp://ftp.uk.embnet.org/pub/EMBOSS/ \ +MASTER_SITES= ftp://emboss.open-bio.org/pub/EMBOSS/ \ + ftp://ftp.uk.embnet.org/pub/EMBOSS/ \ ftp://ftp.es.embnet.org/pub/software/emboss/EMBOSS/ \ ftp://ftp.ebi.ac.uk/pub/software/unix/EMBOSS/ DISTNAME= ${PORTNAME:U}-${PORTVERSION} DISTFILES= ${PORTNAME:U}-${PORTVERSION}${EXTRACT_SUFX} +DIST_SUBDIR= ${PORTNAME} MAINTAINER= fernan@iib.unsam.edu.ar COMMENT= A collection of open source tools for genetic sequence analysis @@ -23,16 +24,19 @@ BUILD_DEPENDS= clustalw:${PORTSDIR}/biology/clustalw \ LIB_DEPENDS= gd.4:${PORTSDIR}/graphics/gd \ png.5:${PORTSDIR}/graphics/png -CONFLICTS= qmail-ldap2-* digest-* +CONFLICTS= qmail-ldap-[0-9]* digest-[0-9]* +PREFIX?= ${LOCALBASE}/emboss +NO_MTREE= yes USE_SUBMAKE= yes USE_GMAKE= yes GNU_CONFIGURE= yes +USE_AUTOTOOLS= libtool:15 INSTALLS_SHLIB= yes USE_XLIB= yes USE_MOTIF= yes -USE_REINPLACE= yes -PKGMESSAGE= ${WRKDIR}/pkg-message +SUB_FILES= pkg-message +SUB_LIST= PREFIX=${PREFIX} DATADIR=${DATADIR} DOCSDIR= ${PREFIX}/share/doc/${PORTNAME:U} DATADIR= ${PREFIX}/share/${PORTNAME:U} @@ -43,20 +47,17 @@ CONFIG_FILE= ${WRKSRC}/emboss/emboss.default.template post-patch: .if !defined(NOPORTDOCS) .for DIR in ${DOC_DIRS} - ${REINPLACE_CMD} -e \ + @ ${REINPLACE_CMD} -e \ 's#$$(prefix)/share/$$(PACKAGE)/doc#$$(datadir)/doc/$$(PACKAGE)#' \ ${WRKSRC}/${DIR}/Makefile.in .endfor .endif +pre-install: + @ ${REINPLACE_CMD} -e 's#%%DATADIR%%#${DATADIR}#' ${CONFIG_FILE} + post-install: - @ cd ${WRKSRC} && \ - ${SED} -e 's#%%PREFIX%%#${PREFIX}#' \ - ${CONFIG_FILE} > ${PREFIX}/etc/emboss.default.sample && \ - ${CHOWN} ${SHAREOWN}:${SHAREGRP} ${PREFIX}/etc/emboss.default.sample - @ ${SED} -e 's#%%PREFIX%%#${PREFIX}#' ${.CURDIR}/pkg-message > ${PKGMESSAGE} -.if !defined(BATCH) + ${CHOWN} ${SHAREOWN}:${SHAREGRP} ${DATADIR}/emboss.default.template @ ${CAT} ${PKGMESSAGE} -.endif .include <bsd.port.mk> diff --git a/biology/emboss/distinfo b/biology/emboss/distinfo index 5cf84b5d9e66..12a082f17df0 100644 --- a/biology/emboss/distinfo +++ b/biology/emboss/distinfo @@ -1,3 +1,3 @@ -MD5 (EMBOSS-2.10.0.tar.gz) = 4a48388ced7021a8ffece5166c40a364 -SHA256 (EMBOSS-2.10.0.tar.gz) = 1d3a8d84ff9c4f77d81b88c9e7c33517a232e7797eb2b761729f97898aa34a8f -SIZE (EMBOSS-2.10.0.tar.gz) = 16262124 +MD5 (emboss/EMBOSS-3.0.0.tar.gz) = fa72feded9ab9272e3e731c09f545dcc +SHA256 (emboss/EMBOSS-3.0.0.tar.gz) = 47a51ba7aeb9f6e7f4cd23c28cffad7c6d28432e92f37d6f08121791ef894dea +SIZE (emboss/EMBOSS-3.0.0.tar.gz) = 16257908 diff --git a/biology/emboss/files/patch-ajindex.c b/biology/emboss/files/patch-ajindex.c new file mode 100644 index 000000000000..410f90c1d2e2 --- /dev/null +++ b/biology/emboss/files/patch-ajindex.c @@ -0,0 +1,5134 @@ +--- ajax/ajindex.c.orig Mon Jan 23 12:17:02 2006 ++++ ajax/ajindex.c Thu Dec 22 13:12:27 2005 +@@ -22,7 +22,6 @@ + + + +- + static AjPBtpage btreeCacheLocate(const AjPBtcache cache, ajlong page); + static AjPBtpage btreeCacheLruUnlink(AjPBtcache cache); + static void btreeCacheUnlink(AjPBtcache cache, AjPBtpage cpage); +@@ -35,10 +34,14 @@ + AjBool isread); + static AjPBtpage btreeFindINode(AjPBtcache cache, AjPBtpage page, + const char *item); ++static AjPBtpage btreeSecFindINode(AjPBtcache cache, AjPBtpage page, ++ const char *item); + + + static AjPBtpage btreePageFromKey(AjPBtcache cache, unsigned char *buf, + const char *item); ++static AjPBtpage btreeSecPageFromKey(AjPBtcache cache, unsigned char *buf, ++ const char *item); + static ajint btreeNumInBucket(AjPBtcache cache, ajlong pageno); + static AjPBucket btreeReadBucket(AjPBtcache cache, ajlong pageno); + static void btreeWriteBucket(AjPBtcache cache, const AjPBucket bucket, +@@ -55,6 +58,7 @@ + AjPStr const *keys, const ajlong *ptrs, + ajint nkeys); + static AjBool btreeNodeIsFull(const AjPBtcache cache, AjPBtpage page); ++static AjBool btreeNodeIsFullSec(const AjPBtcache cache, AjPBtpage page); + static void btreeInsertNonFull(AjPBtcache cache, AjPBtpage page, + const AjPStr key, ajlong less, + ajlong greater); +@@ -87,6 +91,8 @@ + + + ++ ++ + #if 0 + static AjPBtpage btreeTraverseLeaves(AjPBtcache cache, AjPBtpage thys); + static void btreeJoinLeaves(AjPBtcache cache); +@@ -168,6 +174,63 @@ + static ajint btreeDbnoCompare(const void *a, const void *b); + + ++static AjPBtMem btreeAllocPriArray(AjPBtcache cache); ++static void btreeDeallocPriArray(AjPBtcache cache, AjPBtMem node); ++static AjPBtMem btreeAllocSecArray(AjPBtcache cache); ++static void btreeDeallocSecArray(AjPBtcache cache, AjPBtMem node); ++ ++ ++ ++static void btreeAddToHybBucket(AjPBtcache cache, ajlong pageno, ++ const AjPBtHybrid id); ++static AjPBtpage btreeHybFindINode(AjPBtcache cache, AjPBtpage page, ++ const char *item); ++static AjPBtpage btreeHybPageFromKey(AjPBtcache cache, ++ unsigned char *buf, const char *key); ++static ajlong btreeHybInsertShift(AjPBtcache cache, AjPBtpage *retpage, ++ const char *key); ++static AjBool btreeHybReorderBuckets(AjPBtcache cache, AjPBtpage leaf); ++static AjPBtpage btreeHybSplitLeaf(AjPBtcache cache, AjPBtpage spage); ++static void btreeHybInsertKey(AjPBtcache cache, AjPBtpage page, ++ const AjPStr key, ajlong less, ++ ajlong greater); ++static void btreeHybSplitRoot(AjPBtcache cache); ++static void btreeHybDupInsert(AjPBtcache cache, AjPBtHybrid hyb, ++ AjPBtId btid); ++static void btreeGetNumKeys(AjPBtcache cache, unsigned char *buf, ++ ajlong **keys, ajlong **ptrs); ++static void btreeWriteNumNode(AjPBtcache cache, AjPBtpage spage, ++ const ajlong *keys, const ajlong *ptrs, ++ ajint nkeys); ++static AjPNumBucket btreeReadNumBucket(AjPBtcache cache, ajlong pageno); ++static void btreeNumBucketDel(AjPNumBucket *thys); ++static void btreeAddToNumBucket(AjPBtcache cache, ajlong pageno, ++ const AjPBtNumId num); ++static AjPBtpage btreeNumFindINode(AjPBtcache cache, AjPBtpage page, ++ const ajlong item); ++static AjPBtpage btreeNumPageFromKey(AjPBtcache cache, unsigned char *buf, ++ const ajlong key); ++static ajint btreeNumInNumBucket(AjPBtcache cache, ajlong pageno); ++static AjBool btreeReorderNumBuckets(AjPBtcache cache, AjPBtpage leaf); ++static AjPNumBucket btreeNumBucketNew(ajint n); ++static ajint btreeNumIdCompare(const void *a, const void *b); ++static AjBool btreeNumNodeIsFull(const AjPBtcache cache, ++ AjPBtpage page); ++static void btreeNumInsertNonFull(AjPBtcache cache, AjPBtpage page, ++ const ajlong key, ajlong less, ++ ajlong greater); ++static void btreeNumInsertKey(AjPBtcache cache, AjPBtpage page, ++ const ajlong key, ajlong less, ++ ajlong greater); ++static void btreeNumSplitRoot(AjPBtcache cache); ++static void btreeNumKeyShift(AjPBtcache cache, AjPBtpage tpage); ++static ajlong btreeNumInsertShift(AjPBtcache cache, AjPBtpage *retpage, ++ ajlong key); ++static AjPBtpage btreeNumSplitLeaf(AjPBtcache cache, AjPBtpage spage); ++ ++ ++ ++ + + + +@@ -196,11 +259,14 @@ + { + FILE *fp; + AjPBtcache cache = NULL; ++#if 0 + #if defined (HAVE64) && !defined(_OSF_SOURCE) && !defined(_AIX) && !defined(__hpux) && !defined(__ppc__) && !defined(__FreeBSD__) + struct stat64 buf; + #else + struct stat buf; + #endif ++#endif ++ + ajlong filelen = 0L; + + AjPStr fn = NULL; +@@ -213,12 +279,18 @@ + return NULL; + + ++ /* Commented out pending database updating */ ++#if 0 ++ if(strcmp(mode,"r")) ++ { + #if defined (HAVE64) && !defined(_OSF_SOURCE) && !defined(_AIX) && !defined(__hpux) && !defined(__ppc__) && !defined(__FreeBSD__) +- if(!stat64(file, &buf)) ++ if(!stat64(fn->Ptr, &buf)) + #else +- if(!stat(file, &buf)) ++ if(!stat(fn->Ptr, &buf)) + #endif +- filelen = buf.st_size; ++ filelen = buf.st_size; ++ } ++#endif + + AJNEW0(cache); + +@@ -244,6 +316,13 @@ + cache->totsize = filelen; + cache->cachesize = cachesize; + ++ cache->bmem = NULL; ++ cache->tmem = NULL; ++ ++ cache->bsmem = NULL; ++ cache->tsmem = NULL; ++ ++ + /* Add slevel, sorder and snperbucket ???? */ + + ajStrDel(&fn); +@@ -808,7 +887,7 @@ + root = btreeCacheLocate(cache,0L); + + if(!root) +- ajFatal("Something has unlocked the PRI root cache page\n"); ++ ajFatal("The PRI root cache page has been unlocked\n"); + + if(!cache->level) + return root; +@@ -863,6 +942,48 @@ + + + ++/* @funcstatic btreeSecFindINode ************************************************* ++** ++** Recursive search for insert node in a secondary tree ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [u] page [AjPBtpage] page ++** @param [r] item [const char*] key to search for ++** ++** @return [AjPBtpage] leaf node where item should be inserted ++** @@ ++******************************************************************************/ ++ ++static AjPBtpage btreeSecFindINode(AjPBtcache cache, AjPBtpage page, ++ const char *item) ++{ ++ AjPBtpage ret = NULL; ++ AjPBtpage pg = NULL; ++ ++ unsigned char *buf = NULL; ++ ajint status = 0; ++ ajint ival = 0; ++ ++ /* ajDebug("In btreeSecFindINode\n"); */ ++ ++ ret = page; ++ buf = page->buf; ++ GBT_NODETYPE(buf,&ival); ++ if(ival != BT_LEAF) ++ { ++ status = ret->dirty; ++ ret->dirty = BT_LOCK; /* Lock in case of lots of overflow pages */ ++ pg = btreeSecPageFromKey(cache,buf,item); ++ ret->dirty = status; ++ ret = btreeSecFindINode(cache,pg,item); ++ } ++ ++ return ret; ++} ++ ++ ++ ++ + /* @funcstatic btreePageFromKey ******************************************* + ** + ** Return next lower index page given a key +@@ -928,6 +1049,71 @@ + + + ++/* @funcstatic btreeSecPageFromKey ******************************************* ++** ++** Return next lower index page given a key in a secondary tree ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [u] buf [unsigned char *] page buffer ++** @param [r] key [const char *] key to search for ++** ++** @return [AjPBtpage] pointer to a page ++** @@ ++******************************************************************************/ ++ ++static AjPBtpage btreeSecPageFromKey(AjPBtcache cache, unsigned char *buf, ++ const char *key) ++{ ++ unsigned char *rootbuf = NULL; ++ ajint nkeys = 0; ++ ajint order = 0; ++ ajint i; ++ ++ ajlong blockno = 0L; ++ AjPStr *karray = NULL; ++ ajlong *parray = NULL; ++ AjPBtpage page = NULL; ++ ++ /* ajDebug("In btreePageFromKey\n"); */ ++ ++ rootbuf = buf; ++ ++ ++ GBT_NKEYS(rootbuf,&nkeys); ++ order = cache->sorder; ++ ++ AJCNEW0(karray,order); ++ AJCNEW0(parray,order); ++ for(i=0;i<order;++i) ++ karray[i] = ajStrNew(); ++ ++ btreeGetKeys(cache,rootbuf,&karray,&parray); ++ i = 0; ++ while(i!=nkeys && strcmp(key,karray[i]->Ptr)>=0) ++ ++i; ++ if(i==nkeys) ++ { ++ if(strcmp(key,karray[i-1]->Ptr)<0) ++ blockno = parray[i-1]; ++ else ++ blockno = parray[i]; ++ } ++ else ++ blockno = parray[i]; ++ ++ for(i=0;i<order;++i) ++ ajStrDel(&karray[i]); ++ AJFREE(karray); ++ AJFREE(parray); ++ ++ page = ajBtreeCacheRead(cache,blockno); ++ ++ return page; ++} ++ ++ ++ ++ + /* @func ajBtreeIdNew ********************************************* + ** + ** Constructor for index bucket ID informationn +@@ -1617,6 +1803,36 @@ + + + ++/* @funcstatic btreeNodeIsFullSec ***************************************** ++** ++** Tests whether a secondary node is full of keys ++** ++** @param [r] cache [const AjPBtcache] cache ++** @param [u] page [AjPBtpage] original page ++** ++** @return [AjBool] true if full ++** @@ ++******************************************************************************/ ++ ++static AjBool btreeNodeIsFullSec(const AjPBtcache cache, AjPBtpage page) ++{ ++ unsigned char *buf = NULL; ++ ajint nkeys = 0; ++ ++ /* ajDebug("In btreeNodeIsFull\n"); */ ++ ++ buf = page->buf; ++ GBT_NKEYS(buf,&nkeys); ++ ++ if(nkeys == cache->sorder - 1) ++ return ajTrue; ++ ++ return ajFalse; ++} ++ ++ ++ ++ + /* @funcstatic btreeInsertNonFull ***************************************** + ** + ** Insert a key into a non-full node +@@ -2289,6 +2505,25 @@ + + + ++/* @funcstatic btreeNumIdCompare ******************************************* ++** ++** Comparison function for ajListSort ++** ++** @param [r] a [const void*] ID 1 ++** @param [r] b [const void*] ID 2 ++** ++** @return [ajint] 0 = bases match ++** @@ ++******************************************************************************/ ++ ++static ajint btreeNumIdCompare(const void *a, const void *b) ++{ ++ return (*(AjPBtNumId*)a)->offset - (*(AjPBtNumId*)b)->offset; ++} ++ ++ ++ ++ + /* @funcstatic btreeWriteNode ******************************************* + ** + ** Write an internal node +@@ -2999,8 +3234,7 @@ + rno = totalkeys - lno; + + maxnperbucket = nperbucket >> 1; +- if(!maxnperbucket) +- ++maxnperbucket; ++ ++maxnperbucket; + + cbucket = btreeBucketNew(maxnperbucket); + +@@ -5729,7 +5963,17 @@ + { + bentries = buckets[i]->Nentries; + for(j=0;j<bentries;++j) +- ajListPush(list,(void *)buckets[i]->Ids[j]); ++ { ++ if(!buckets[i]->Ids[j]->dups) ++ ajListPush(list,(void *)buckets[i]->Ids[j]); ++ else ++ { ++ ajBtreeHybLeafList(cache,buckets[i]->Ids[j]->offset, ++ buckets[i]->Ids[j]->id,list); ++ ajBtreeIdDel(&buckets[i]->Ids[j]); ++ } ++ } ++ + AJFREE(buckets[i]->keylen); + AJFREE(buckets[i]->Ids); + AJFREE(buckets[i]); +@@ -6273,6 +6517,7 @@ + ** + ** @param [r] filename [const char*] file name + ** @param [r] indexdir [const char*] index file directory ++** @param [r] directory [const char*] file directory + ** @param [w] seqfiles [AjPStr**] sequence file names + ** @param [w] reffiles [AjPStr**] reference file names (if any) + +@@ -6282,6 +6527,7 @@ + ******************************************************************************/ + + ajint ajBtreeReadEntries(const char *filename, const char *indexdir, ++ const char *directory, + AjPStr **seqfiles, AjPStr **reffiles) + { + AjPStr line = NULL; +@@ -6292,6 +6538,8 @@ + + AjPStr seqname = NULL; + AjPStr refname = NULL; ++ AjPStr tseqname = NULL; ++ AjPStr trefname = NULL; + + AjPFile inf = NULL; + char p; +@@ -6303,6 +6551,9 @@ + line = ajStrNew(); + list = ajListNew(); + reflist = ajListNew(); ++ ++ tseqname = ajStrNew(); ++ trefname = ajStrNew(); + + fn = ajStrNew(); + ajFmtPrintS(&fn,"%s/%s",indexdir,filename); +@@ -6329,7 +6580,8 @@ + while(ajFileReadLine(inf, &line)) + { + seqname = ajStrNew(); +- ajFmtScanS(line,"%S",&seqname); ++ ajFmtScanS(line,"%S",&tseqname); ++ ajFmtPrintS(&seqname,"%s/%S",directory,tseqname); + ajListPushApp(list,(void *)seqname); + } + +@@ -6342,7 +6594,9 @@ + { + seqname = ajStrNew(); + refname = ajStrNew(); +- ajFmtScanS(line,"%S%S",&seqname,&refname); ++ ajFmtScanS(line,"%S%S",&tseqname,&trefname); ++ ajFmtPrintS(&seqname,"%s/%S",directory,tseqname); ++ ajFmtPrintS(&refname,"%s/%S",directory,trefname); + ajListPushApp(list,(void *)seqname); + ajListPushApp(reflist,(void *)refname); + } +@@ -6357,6 +6611,11 @@ + ajListDel(&reflist); + ajStrDel(&line); + ajStrDel(&fn); ++ ++ ajStrDel(&tseqname); ++ ajStrDel(&trefname); ++ ++ + ajFileClose(&inf); + + return entries; +@@ -6967,7 +7226,7 @@ + pripage = btreeCacheLocate(cache,0L); + pripage->dirty = BT_LOCK; + +- ajDebug("Created secondary tree at block %d\n",(ajint)secrootpage); ++ /* ajDebug("Created 2ry tree at block %d\n",(ajint)secrootpage); */ + } + else + { +@@ -7776,8 +8035,7 @@ + rno = totalkeys - lno; + + maxnperbucket = nperbucket >> 1; +- if(!maxnperbucket) +- ++maxnperbucket; ++ ++maxnperbucket; + + cbucket = btreePriBucketNew(maxnperbucket); + +@@ -8230,11 +8488,13 @@ + { + FILE *fp; + AjPBtcache cache = NULL; ++#if 0 + #if defined (HAVE64) && !defined(_OSF_SOURCE) && !defined(_AIX) && !defined(__hpux) && !defined(__ppc__) && !defined(__FreeBSD__) + struct stat64 buf; + #else + struct stat buf; + #endif ++#endif + ajlong filelen = 0L; + + AjPStr fn = NULL; +@@ -8246,13 +8506,18 @@ + if(!fp) + return NULL; + +- ++ /* Commented out pending database updating */ ++#if 0 ++ if(strcmp(mode,"r")) ++ { + #if defined (HAVE64) && !defined(_OSF_SOURCE) && !defined(_AIX) && !defined(__hpux) && !defined(__ppc__) && !defined(__FreeBSD__) +- if(!stat64(file, &buf)) ++ if(!stat64(fn->Ptr, &buf)) + #else +- if(!stat(file, &buf)) ++ if(!stat(fn->Ptr, &buf)) ++#endif ++ filelen = buf.st_size; ++ } + #endif +- filelen = buf.st_size; + + AJNEW0(cache); + +@@ -8283,6 +8548,12 @@ + cache->snperbucket = sfill; + cache->count = count; + cache->kwlimit = kwlimit; ++ ++ cache->bmem = NULL; ++ cache->tmem = NULL; ++ ++ cache->bsmem = NULL; ++ cache->tsmem = NULL; + + ajStrDel(&fn); + +@@ -8456,8 +8727,7 @@ + rno = totalkeys - lno; + + maxnperbucket = nperbucket >> 1; +- if(!maxnperbucket) +- ++maxnperbucket; ++ ++maxnperbucket; + + cbucket = btreeSecBucketNew(maxnperbucket); + +@@ -9070,7 +9340,7 @@ + if(!cache->slevel) + return root; + +- ret = btreeFindINode(cache,root,key); ++ ret = btreeSecFindINode(cache,root,key); + + return ret; + } +@@ -9694,7 +9964,7 @@ + + /* ajDebug("In btreeInsertKeySec\n"); */ + +- if(!btreeNodeIsFull(cache,page)) ++ if(!btreeNodeIsFullSec(cache,page)) + { + btreeInsertNonFullSec(cache,page,key,less,greater); + return; +@@ -10572,7 +10842,7 @@ + + list = ajListNew(); + +- order = cache->order; ++ order = cache->sorder; + + AJCNEW0(karray,order); + AJCNEW0(parray,order); +@@ -11724,3 +11994,4580 @@ + return (*(AjPBtId*)a)->dbno - + (*(AjPBtId*)b)->dbno; + } ++ ++ ++ ++ ++ ++ ++ ++ ++/* @func ajBtreeHybNew ********************************************* ++** ++** Constructor for index bucket ID informationn ++** ++** ++** @return [AjPBtHybrid] Index ID object ++** @@ ++******************************************************************************/ ++ ++AjPBtHybrid ajBtreeHybNew(void) ++{ ++ AjPBtHybrid Id = NULL; ++ ++ /* ajDebug("In ajBtreeHybNew\n"); */ ++ ++ AJNEW0(Id); ++ Id->key1 = ajStrNew(); ++ Id->dbno = 0; ++ Id->dups = 0; ++ Id->offset = 0L; ++ Id->refoffset = 0L; ++ Id->treeblock = 0L; ++ ++ return Id; ++} ++ ++ ++ ++ ++/* @func ajBtreeHybDel ********************************************* ++** ++** Destructor for index bucket ID information ++** ++** @param [w] thys [AjPBtHybrid*] index ID object ++** ++** @return [void] ++** @@ ++******************************************************************************/ ++ ++void ajBtreeHybDel(AjPBtHybrid *thys) ++{ ++ AjPBtHybrid Id = NULL; ++ ++ /* ajDebug("In ajBtreeIdDel\n"); */ ++ ++ if(!thys || !*thys) ++ return; ++ Id = *thys; ++ ++ ajStrDel(&Id->key1); ++ AJFREE(Id); ++ *thys = NULL; ++ ++ return; ++} ++ ++ ++ ++ ++/* @funcstatic btreeAllocPriArray ******************************************* ++** ++** Allocate karray and parray arrays for a primary key ++** ++** @param [rw] cache [AjPBtcache] cache ++** ++** @return [AjPBtMem] memory node ++** @@ ++******************************************************************************/ ++ ++static AjPBtMem btreeAllocPriArray(AjPBtcache cache) ++{ ++ AjPBtMem node = NULL; ++ ajint i; ++ ajint limit; ++ AjPBtMem p = NULL; ++ ++ limit = cache->order; ++ if(!cache->bmem) ++ { ++ AJNEW0(node); ++ cache->bmem = node; ++ cache->tmem = node; ++ node->prev = NULL; ++ node->next = NULL; ++ node->used = ajTrue; ++ AJCNEW0(node->karray,limit); ++ AJCNEW0(node->parray,limit); ++ AJCNEW0(node->overflows,limit); ++ for(i=0;i<limit;++i) ++ node->karray[i] = ajStrNew(); ++ ++ return node; ++ } ++ ++ if(!cache->bmem->used) ++ { ++ cache->bmem->used = ajTrue; ++ ++ if(cache->bmem->next) ++ { ++ p = cache->bmem->next; ++ ++ cache->tmem->next = cache->bmem; ++ cache->bmem->next = NULL; ++ ++ cache->bmem->prev = cache->tmem; ++ ++ cache->tmem = cache->bmem; ++ ++ cache->bmem = p; ++ cache->bmem->prev = NULL; ++ ++ memset(cache->tmem->parray,0,sizeof(ajlong)*limit); ++ ++ return cache->tmem; ++ } ++ ++ memset(cache->bmem->parray,0,sizeof(ajlong)*limit); ++ ++ return cache->bmem; ++ } ++ ++ ++ AJNEW0(node); ++ node->used = ajTrue; ++ node->next = NULL; ++ node->prev = cache->tmem; ++ cache->tmem->next = node; ++ cache->tmem = node; ++ ++ AJCNEW0(node->karray,limit); ++ AJCNEW0(node->parray,limit); ++ AJCNEW0(node->overflows,limit); ++ for(i=0;i<limit;++i) ++ node->karray[i] = ajStrNew(); ++ ++ return node; ++} ++ ++ ++ ++ ++/* @funcstatic btreeDeallocPriArray ******************************************* ++** ++** Deallocate karray and parray arrays for a primary key ++** ++** @param [rw] cache [AjPBtcache] cache ++** @param [rw] node [AjPBtMem] node ++** ++** @return [void] ++** @@ ++******************************************************************************/ ++ ++static void btreeDeallocPriArray(AjPBtcache cache, AjPBtMem node) ++{ ++ node->used = ajFalse; ++ if(!node->prev) ++ return; ++ ++ node->prev->next = node->next; ++ if(node->next) ++ node->next->prev = node->prev; ++ else ++ cache->tmem = node->prev; ++ ++ node->next = cache->bmem; ++ cache->bmem->prev = node; ++ cache->bmem = node; ++ node->prev = NULL; ++ ++ return; ++} ++ ++ ++ ++ ++ ++/* @funcstatic btreeAllocSecArray ******************************************* ++** ++** Allocate karray and parray arrays for a primary key ++** ++** @param [rw] cache [AjPBtcache] cache ++** ++** @return [AjPBtMem] memory node ++** @@ ++******************************************************************************/ ++ ++static AjPBtMem btreeAllocSecArray(AjPBtcache cache) ++{ ++ AjPBtMem node = NULL; ++ ajint i; ++ ajint limit; ++ AjPBtMem p = NULL; ++ ++ limit = cache->sorder; ++ if(!cache->bsmem) ++ { ++ AJNEW0(node); ++ cache->bsmem = node; ++ cache->tsmem = node; ++ node->prev = NULL; ++ node->next = NULL; ++ node->used = ajTrue; ++ AJCNEW0(node->karray,limit); ++ AJCNEW0(node->parray,limit); ++ AJCNEW0(node->overflows,limit); ++ for(i=0;i<limit;++i) ++ node->karray[i] = ajStrNew(); ++ ++ return node; ++ } ++ ++ if(!cache->bsmem->used) ++ { ++ cache->bsmem->used = ajTrue; ++ ++ if(cache->bsmem->next) ++ { ++ p = cache->bsmem->next; ++ ++ cache->tsmem->next = cache->bsmem; ++ cache->bsmem->next = NULL; ++ ++ cache->bsmem->prev = cache->tsmem; ++ ++ cache->tsmem = cache->bsmem; ++ ++ cache->bsmem = p; ++ cache->bsmem->prev = NULL; ++ ++ memset(cache->tsmem->parray,0,sizeof(ajlong)*limit); ++ return cache->tsmem; ++ } ++ ++ memset(cache->bsmem->parray,0,sizeof(ajlong)*limit); ++ return cache->bsmem; ++ } ++ ++ AJNEW0(node); ++ node->used = ajTrue; ++ node->next = NULL; ++ node->prev = cache->tsmem; ++ cache->tsmem->next = node; ++ cache->tsmem = node; ++ ++ AJCNEW0(node->karray,limit); ++ AJCNEW0(node->parray,limit); ++ AJCNEW0(node->overflows,limit); ++ for(i=0;i<limit;++i) ++ node->karray[i] = ajStrNew(); ++ ++ return node; ++} ++ ++ ++ ++ ++/* @funcstatic btreeDeallocSecArray ******************************************* ++** ++** Deallocate karray and parray arrays for a primary key ++** ++** @param [rw] cache [AjPBtcache] cache ++** @param [rw] node [AjPBtMem] node ++** ++** @return [void] ++** @@ ++******************************************************************************/ ++ ++static void btreeDeallocSecArray(AjPBtcache cache, AjPBtMem node) ++{ ++ node->used = ajFalse; ++ if(!node->prev) ++ return; ++ ++ node->prev->next = node->next; ++ if(node->next) ++ node->next->prev = node->prev; ++ else ++ cache->tsmem = node->prev; ++ ++ node->next = cache->bsmem; ++ cache->bsmem->prev = node; ++ cache->bsmem = node; ++ node->prev = NULL; ++ ++ return; ++} ++ ++ ++ ++ ++/* @funcstatic btreeAddToHybBucket ******************************************* ++** ++** Add an ID to a bucket ++** Only called if there is room in the bucket ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [r] pageno [ajlong] page number of bucket ++** @param [r] id [const AjPBtId] ID info ++** ++** @return [void] ++** @@ ++******************************************************************************/ ++ ++static void btreeAddToHybBucket(AjPBtcache cache, ajlong pageno, ++ const AjPBtHybrid hyb) ++{ ++ AjPBucket bucket = NULL; ++ AjPBtId destid = NULL; ++ ++ ajint nentries; ++ ++ /* ajDebug("In btreeAddToHybBucket\n"); */ ++ ++ bucket = btreeReadBucket(cache,pageno); ++ nentries = bucket->Nentries; ++ ++ ++ /* Reading a bucket always gives one extra ID position */ ++ bucket->Ids[nentries] = ajBtreeIdNew(); ++ destid = bucket->Ids[nentries]; ++ ++ ajStrAssS(&destid->id,hyb->key1); ++ destid->dbno = hyb->dbno; ++ destid->offset = hyb->offset; ++ destid->refoffset = hyb->refoffset; ++ destid->dups = hyb->dups; ++ ++ ++bucket->Nentries; ++ ++ btreeWriteBucket(cache,bucket,pageno); ++ ++ btreeBucketDel(&bucket); ++ ++ return; ++} ++ ++ ++ ++ ++/* @func ajBtreeHybFindInsert *********************************************** ++** ++** Find the node that should contain a new key for insertion ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [r] key [const char*] key to search for ++** ++** @return [AjPBtpage] leaf node where item should be inserted ++** @@ ++******************************************************************************/ ++ ++AjPBtpage ajBtreeHybFindInsert(AjPBtcache cache, const char *key) ++{ ++ AjPBtpage root = NULL; ++ AjPBtpage ret = NULL; ++ ++ /* ajDebug("In ajBtreeHybFindInsert\n"); */ ++ ++ /* The root node should always be in the cache (BT_LOCKed) */ ++ root = btreeCacheLocate(cache,0L); ++ ++ if(!root) ++ ajFatal("The PRI root cache page has been unlocked\n"); ++ ++ if(!cache->level) ++ return root; ++ ++ ret = btreeHybFindINode(cache,root,key); ++ ++ return ret; ++} ++ ++ ++ ++ ++/* @funcstatic btreeHybFindINode ********************************************* ++** ++** Recursive search for insert node ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [u] page [AjPBtpage] page ++** @param [r] item [const char*] key to search for ++** ++** @return [AjPBtpage] leaf node where item should be inserted ++** @@ ++******************************************************************************/ ++ ++static AjPBtpage btreeHybFindINode(AjPBtcache cache, AjPBtpage page, ++ const char *item) ++{ ++ AjPBtpage ret = NULL; ++ AjPBtpage pg = NULL; ++ ++ unsigned char *buf = NULL; ++ ajint status = 0; ++ ajint ival = 0; ++ ++ /* ajDebug("In btreeHybFindINode\n"); */ ++ ++ ret = page; ++ buf = page->buf; ++ GBT_NODETYPE(buf,&ival); ++ if(ival != BT_LEAF) ++ { ++ status = ret->dirty; ++ ret->dirty = BT_LOCK; /* Lock in case of lots of overflow pages */ ++ pg = btreeHybPageFromKey(cache,buf,item); ++ ret->dirty = status; ++ ret = btreeHybFindINode(cache,pg,item); ++ } ++ ++ return ret; ++} ++ ++ ++ ++ ++/* @funcstatic btreeHybPageFromKey ******************************************* ++** ++** Return next lower index page given a key ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [u] buf [unsigned char *] page buffer ++** @param [r] key [const char *] key to search for ++** ++** @return [AjPBtpage] pointer to a page ++** @@ ++******************************************************************************/ ++ ++static AjPBtpage btreeHybPageFromKey(AjPBtcache cache, unsigned char *buf, ++ const char *key) ++{ ++ unsigned char *rootbuf = NULL; ++ ajint nkeys = 0; ++ ajint order = 0; ++ ajint i; ++ ++ ajlong blockno = 0L; ++ AjPStr *karray = NULL; ++ ajlong *parray = NULL; ++ AjPBtpage page = NULL; ++ AjPBtMem arrays = NULL; ++ ++ /* ajDebug("In btreeHybPageFromKey\n"); */ ++ ++ rootbuf = buf; ++ ++ ++ GBT_NKEYS(rootbuf,&nkeys); ++ order = cache->order; ++ ++ arrays = btreeAllocPriArray(cache); ++ karray = arrays->karray; ++ parray = arrays->parray; ++ ++ btreeGetKeys(cache,rootbuf,&karray,&parray); ++ i = 0; ++ while(i!=nkeys && strcmp(key,karray[i]->Ptr)>=0) ++ ++i; ++ if(i==nkeys) ++ { ++ if(strcmp(key,karray[i-1]->Ptr)<0) ++ blockno = parray[i-1]; ++ else ++ blockno = parray[i]; ++ } ++ else ++ blockno = parray[i]; ++ ++ btreeDeallocPriArray(cache,arrays); ++ ++ page = ajBtreeCacheRead(cache,blockno); ++ ++ return page; ++} ++ ++ ++ ++ ++/* @funcstatic btreeHybInsertShift ******************************************** ++** ++** Rebalance buckets on insertion ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [u] retpage [AjPBtpage*] page ++** @param [r] key [const char *] key ++** ++** @return [ajlong] bucket block or 0L if shift not posible ++** @@ ++******************************************************************************/ ++ ++static ajlong btreeHybInsertShift(AjPBtcache cache, AjPBtpage *retpage, ++ const char *key) ++{ ++ unsigned char *tbuf = NULL; ++ unsigned char *pbuf = NULL; ++ unsigned char *sbuf = NULL; ++ ++ AjPBtpage ppage = NULL; ++ AjPBtpage spage = NULL; ++ AjPBtpage tpage = NULL; ++ ++ ajint tkeys = 0; ++ ajint pkeys = 0; ++ ajint skeys = 0; ++ ajint order = 0; ++ ++ ajint i; ++ ajint n; ++ ++ ajlong parent = 0L; ++ ajlong blockno = 0L; ++ ++ AjPStr *kTarray = NULL; ++ AjPStr *kParray = NULL; ++ AjPStr *kSarray = NULL; ++ ajlong *pTarray = NULL; ++ ajlong *pParray = NULL; ++ ajlong *pSarray = NULL; ++ ++ AjPStr *karray = NULL; ++ ajlong *parray = NULL; ++ ++ ajint ppos = 0; ++ ajint pkeypos = 0; ++ ajint minsize = 0; ++ ++ AjPBtMem arrays1 = NULL; ++ AjPBtMem arrays2 = NULL; ++ AjPBtMem arrays3 = NULL; ++ ++ /* ajDebug("In btreeHybInsertShift\n"); */ ++ ++ ++ tpage = *retpage; ++ ++ tbuf = tpage->buf; ++ ++ GBT_PREV(tbuf,&parent); ++ GBT_NKEYS(tbuf,&tkeys); ++ ++ order = cache->order; ++ minsize = order / 2; ++ if(order % 2) ++ ++minsize; ++ ++ if(tkeys <= minsize) ++ return 0L; ++ ++ ppage = ajBtreeCacheRead(cache,parent); ++ ++ pbuf = ppage->buf; ++ GBT_NKEYS(pbuf,&pkeys); ++ ++ ++ arrays1 = btreeAllocPriArray(cache); ++ kParray = arrays1->karray; ++ pParray = arrays1->parray; ++ ++ arrays2 = btreeAllocPriArray(cache); ++ kSarray = arrays2->karray; ++ pSarray = arrays2->parray; ++ ++ arrays3 = btreeAllocPriArray(cache); ++ kTarray = arrays3->karray; ++ pTarray = arrays3->parray; ++ ++ ++ btreeGetKeys(cache,pbuf,&kParray,&pParray); ++ ++ i=0; ++ while(i!=pkeys && strcmp(key,kParray[i]->Ptr)>=0) ++ ++i; ++ pkeypos = i; ++ ++ if(i==pkeys) ++ { ++ if(strcmp(key,kParray[i-1]->Ptr)<0) ++ ppos = i-1; ++ else ++ ppos = i; ++ } ++ else ++ ppos = i; ++ ++ ++ if(ppos) /* There is another leaf to the left */ ++ { ++ spage = ajBtreeCacheRead(cache,pParray[ppos-1]); ++ sbuf = spage->buf; ++ GBT_NKEYS(sbuf,&skeys); ++ } ++ ++ if(i && skeys != order-1) /* There is space in the left leaf */ ++ { ++ /* ajDebug("Left shift\n"); */ ++ btreeGetKeys(cache,tbuf,&kTarray,&pTarray); ++ if(skeys) ++ btreeGetKeys(cache,sbuf,&kSarray,&pSarray); ++ ++ i = 0; ++ while(pParray[i] != tpage->pageno) ++ ++i; ++ --i; ++ ++ pkeypos = i; ++ ++ ajStrAssS(&kSarray[skeys],kParray[pkeypos]); ++ pSarray[skeys+1] = pTarray[0]; ++ ++skeys; ++ --tkeys; ++ ajStrAssS(&kParray[pkeypos],kTarray[0]); ++ for(i=0;i<tkeys;++i) ++ { ++ ajStrAssS(&kTarray[i],kTarray[i+1]); ++ pTarray[i] = pTarray[i+1]; ++ } ++ pTarray[i] = pTarray[i+1]; ++ pTarray[i+1] = 0L; ++ ++ btreeWriteNode(cache,spage,kSarray,pSarray,skeys); ++ btreeWriteNode(cache,tpage,kTarray,pTarray,tkeys); ++ btreeWriteNode(cache,ppage,kParray,pParray,pkeys); ++ if(!ppage->pageno) ++ ppage->dirty = BT_LOCK; ++ ++ i = 0; ++ while(i!=pkeys && strcmp(key,kParray[i]->Ptr)>=0) ++ ++i; ++ if(i==pkeys) ++ { ++ if(strcmp(key,kParray[i-1]->Ptr)<0) ++ blockno = pParray[i-1]; ++ else ++ blockno = pParray[i]; ++ } ++ else ++ blockno = pParray[i]; ++ ++ if(blockno == spage->pageno) ++ { ++ *retpage = spage; ++ karray = kSarray; ++ parray = pSarray; ++ n = skeys; ++ } ++ else ++ { ++ karray = kTarray; ++ parray = pTarray; ++ n = tkeys; ++ } ++ ++ ++ i = 0; ++ while(i!=n && strcmp(key,karray[i]->Ptr)>=0) ++ ++i; ++ if(i==n) ++ { ++ if(strcmp(key,karray[i-1]->Ptr)<0) ++ blockno = parray[i-1]; ++ else ++ blockno = parray[i]; ++ } ++ else ++ blockno = parray[i]; ++ ++ btreeDeallocPriArray(cache,arrays1); ++ btreeDeallocPriArray(cache,arrays2); ++ btreeDeallocPriArray(cache,arrays3); ++ ++ /* ajDebug("... returns blockno (a) %Ld\n",blockno); */ ++ ++ return blockno; ++ } ++ ++ ++ if(ppos != pkeys) /* There is a right node */ ++ { ++ spage = ajBtreeCacheRead(cache,pParray[ppos+1]); ++ sbuf = spage->buf; ++ GBT_NKEYS(sbuf,&skeys); ++ } ++ ++ ++ /* Space in the right leaf */ ++ if(ppos != pkeys && skeys != order-1) ++ { ++ /* ajDebug("Right shift\n"); */ ++ btreeGetKeys(cache,tbuf,&kTarray,&pTarray); ++ btreeGetKeys(cache,sbuf,&kSarray,&pSarray); ++ ++ i = 0; ++ while(pParray[i] != tpage->pageno) ++ ++i; ++ pkeypos = i; ++ ++ pSarray[skeys+1] = pSarray[skeys]; ++ for(i=skeys-1;i>-1;--i) ++ { ++ ajStrAssS(&kSarray[i+1],kSarray[i]); ++ pSarray[i+1] = pSarray[i]; ++ } ++ ajStrAssS(&kSarray[0],kParray[pkeypos]); ++ pSarray[0] = pTarray[tkeys]; ++ ajStrAssS(&kParray[pkeypos],kTarray[tkeys-1]); ++ ++skeys; ++ --tkeys; ++ pTarray[tkeys+1] = 0L; ++ ++ btreeWriteNode(cache,spage,kSarray,pSarray,skeys); ++ btreeWriteNode(cache,tpage,kTarray,pTarray,tkeys); ++ btreeWriteNode(cache,ppage,kParray,pParray,pkeys); ++ if(!ppage->pageno) ++ ppage->dirty = BT_LOCK; ++ ++ i = 0; ++ while(i!=pkeys && strcmp(key,kParray[i]->Ptr)>=0) ++ ++i; ++ if(i==pkeys) ++ { ++ if(strcmp(key,kParray[i-1]->Ptr)<0) ++ blockno = pParray[i-1]; ++ else ++ blockno = pParray[i]; ++ } ++ else ++ blockno = pParray[i]; ++ ++ if(blockno == spage->pageno) ++ { ++ *retpage = spage; ++ karray = kSarray; ++ parray = pSarray; ++ n = skeys; ++ } ++ else ++ { ++ karray = kTarray; ++ parray = pTarray; ++ n = tkeys; ++ } ++ ++ i = 0; ++ while(i!=n && strcmp(key,karray[i]->Ptr)>=0) ++ ++i; ++ if(i==n) ++ { ++ if(strcmp(key,karray[i-1]->Ptr)<0) ++ blockno = parray[i-1]; ++ else ++ blockno = parray[i]; ++ } ++ else ++ blockno = parray[i]; ++ ++ btreeDeallocPriArray(cache,arrays1); ++ btreeDeallocPriArray(cache,arrays2); ++ btreeDeallocPriArray(cache,arrays3); ++ ++ /* ajDebug("... returns blockno (b) %Ld\n",blockno); */ ++ ++ return blockno; ++ } ++ ++ ++ btreeDeallocPriArray(cache,arrays1); ++ btreeDeallocPriArray(cache,arrays2); ++ btreeDeallocPriArray(cache,arrays3); ++ ++ /* ajDebug("... returns 0L\n"); */ ++ ++ return 0L; ++} ++ ++ ++ ++ ++/* @funcstatic btreeHybReorderBuckets ***************************************** ++** ++** Re-order leaf buckets ++** Must only be called if one of the buckets is full ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [u] leaf [AjPBtpage] leaf page ++** ++** @return [AjBool] true if reorder was successful i.e. leaf not full ++** @@ ++******************************************************************************/ ++ ++static AjBool btreeHybReorderBuckets(AjPBtcache cache, AjPBtpage leaf) ++{ ++ ajint nkeys = 0; ++ unsigned char *lbuf = NULL; ++ AjPBucket *buckets = NULL; ++ AjPStr *keys = NULL; ++ ajlong *ptrs = NULL; ++ ajlong *overflows = NULL; ++ AjPBtMem arrays = NULL; ++ ++ ajint i = 0; ++ ajint j = 0; ++ ++ ajint order; ++ ajint bentries = 0; ++ ajint totalkeys = 0; ++ ajint nperbucket = 0; ++ ajint maxnperbucket = 0; ++ ajint count = 0; ++ ajint totkeylen = 0; ++ ajint keylimit = 0; ++ ajint bucketn = 0; ++ ajint bucketlimit = 0; ++ ajint nodetype = 0; ++ ++ AjPList idlist = NULL; ++ ajint dirtysave = 0; ++ AjPBtId bid = NULL; ++ AjPBucket cbucket = NULL; ++ AjPBtId cid = NULL; ++ ++ ajint v = 0; ++ ++ /* ajDebug("In btreeHybReorderBuckets\n"); */ ++ ++ dirtysave = leaf->dirty; ++ ++ leaf->dirty = BT_LOCK; ++ lbuf = leaf->buf; ++ ++ GBT_NODETYPE(lbuf,&nodetype); ++ ++ order = cache->order; ++ nperbucket = cache->nperbucket; ++ ++ ++ /* Read keys/ptrs */ ++ arrays = btreeAllocPriArray(cache); ++ keys = arrays->karray; ++ ptrs = arrays->parray; ++ overflows = arrays->overflows; ++ ++ btreeGetKeys(cache,lbuf,&keys,&ptrs); ++ ++ GBT_NKEYS(lbuf,&nkeys); ++ ++ ++ if(!nkeys) ++ ajFatal("BucketReorder: Attempt to reorder empty leaf"); ++ ++ for(i=0;i<nkeys;++i) ++ totalkeys += btreeNumInBucket(cache,ptrs[i]); ++ totalkeys += btreeNumInBucket(cache,ptrs[i]); ++ ++ /* Set the number of entries per bucket to approximately half full */ ++ maxnperbucket = nperbucket >> 1; ++ ++ if(!maxnperbucket) ++ ++maxnperbucket; ++ ++ /* Work out the number of new buckets needed */ ++ bucketn = (totalkeys / maxnperbucket); ++ if(totalkeys % maxnperbucket) ++ ++bucketn; ++ ++ if(bucketn > order) ++ { ++ btreeDeallocPriArray(cache,arrays); ++ ++ leaf->dirty = dirtysave; ++ return ajFalse; ++ } ++ ++ ++ /* Read buckets */ ++ AJCNEW0(buckets,nkeys+1); ++ keylimit = nkeys + 1; ++ ++ for(i=0;i<keylimit;++i) ++ buckets[i] = btreeReadBucket(cache,ptrs[i]); ++ ++ ++ /* Read IDs from all buckets and push to list and sort (increasing id) */ ++ idlist = ajListNew(); ++ ++ for(i=0;i<keylimit;++i) ++ { ++ overflows[i] = buckets[i]->Overflow; ++ bentries = buckets[i]->Nentries; ++ for(j=0;j<bentries;++j) ++ ajListPush(idlist,(void *)buckets[i]->Ids[j]); ++ ++ AJFREE(buckets[i]->keylen); ++ AJFREE(buckets[i]->Ids); ++ AJFREE(buckets[i]); ++ } ++ ajListSort(idlist,btreeIdCompare); ++ AJFREE(buckets); ++ ++ cbucket = btreeBucketNew(maxnperbucket); ++ bucketlimit = bucketn - 1; ++ ++ for(i=0;i<bucketlimit;++i) ++ { ++ cbucket->Overflow = overflows[i]; ++ cbucket->Nentries = 0; ++ ++ count = 0; ++ while(count!=maxnperbucket) ++ { ++ ajListPop(idlist,(void **)&bid); ++ ++ cid = cbucket->Ids[count]; ++ ajStrAssS(&cid->id,bid->id); ++ cid->dbno = bid->dbno; ++ cid->dups = bid->dups; ++ cid->offset = bid->offset; ++ cid->refoffset = bid->refoffset; ++ ++ cbucket->keylen[count] = BT_BUCKIDLEN(bid->id); ++ ++cbucket->Nentries; ++ ++count; ++ ajBtreeIdDel(&bid); ++ } ++ ++ ++ ajListPeek(idlist,(void **)&bid); ++ ajStrAssS(&keys[i],bid->id); ++ ++ totkeylen += ajStrLen(bid->id); ++ ++ if(!ptrs[i]) ++ ptrs[i] = cache->totsize; ++ btreeWriteBucket(cache,cbucket,ptrs[i]); ++ } ++ ++ ++ /* Deal with greater-than bucket */ ++ ++ cbucket->Overflow = overflows[i]; ++ cbucket->Nentries = 0; ++ ++ count = 0; ++ while(ajListPop(idlist,(void **)&bid)) ++ { ++ cid = cbucket->Ids[count]; ++ ajStrAssS(&cid->id,bid->id); ++ cid->dbno = bid->dbno; ++ cid->dups = bid->dups; ++ cid->offset = bid->offset; ++ cid->refoffset = bid->refoffset; ++ ++ ++cbucket->Nentries; ++ ++count; ++ ajBtreeIdDel(&bid); ++ } ++ ++ ++ if(!ptrs[i]) ++ ptrs[i] = cache->totsize; ++ btreeWriteBucket(cache,cbucket,ptrs[i]); ++ ++ cbucket->Nentries = maxnperbucket; ++ btreeBucketDel(&cbucket); ++ ++ /* Now write out a modified leaf with new keys/ptrs */ ++ ++ nkeys = bucketn - 1; ++ v = nkeys; ++ SBT_NKEYS(lbuf,v); ++ v = totkeylen; ++ SBT_TOTLEN(lbuf,v); ++ ++ btreeWriteNode(cache,leaf,keys,ptrs,nkeys); ++ ++ leaf->dirty = BT_DIRTY; ++ if(nodetype == BT_ROOT) ++ leaf->dirty = BT_LOCK; ++ ++ btreeDeallocPriArray(cache,arrays); ++ ++ btreeBucketDel(&cbucket); ++ ajListDel(&idlist); ++ ++ return ajTrue; ++} ++ ++ ++ ++ ++/* @funcstatic btreeHybSplitLeaf ********************************************* ++** ++** Split a leaf and propagate up if necessary ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [u] spage [AjPBtpage] page ++** ++** @return [AjPBtpage] pointer to a parent page ++** @@ ++******************************************************************************/ ++ ++static AjPBtpage btreeHybSplitLeaf(AjPBtcache cache, AjPBtpage spage) ++{ ++ ajint nkeys = 0; ++ ajint order = 0; ++ ajint totalkeys = 0; ++ ajint bentries = 0; ++ ajint keylimit = 0; ++ ajint nodetype = 0; ++ ++ ajint rootnodetype = 0; ++ ++ ajint i; ++ ajint j; ++ ++ AjPBtpage lpage = NULL; ++ AjPBtpage rpage = NULL; ++ AjPBtpage page = NULL; ++ ++ AjPStr mediankey = NULL; ++ ajlong mediangtr = 0L; ++ ajlong medianless = 0L; ++ ++ ++ AjPBtId bid = NULL; ++ AjPBtId cid = NULL; ++ ++ unsigned char *buf = NULL; ++ unsigned char *lbuf = NULL; ++ unsigned char *rbuf = NULL; ++ ++ AjPList idlist = NULL; ++ ++ AjPBucket *buckets = NULL; ++ AjPBucket cbucket = NULL; ++ ++ AjPStr *karray = NULL; ++ ajlong *parray = NULL; ++ AjPBtMem arrays = NULL; ++ ++ ajint keypos = 0; ++ ajint lno = 0; ++ ajint rno = 0; ++ ++ ajint bucketlimit = 0; ++ ajint maxnperbucket = 0; ++ ajint nperbucket = 0; ++ ajint bucketn = 0; ++ ajint count = 0; ++ ajint totkeylen = 0; ++ ++ ajlong lblockno = 0L; ++ ajlong rblockno = 0L; ++ ajlong prev = 0L; ++ ajlong overflow = 0L; ++ ajlong prevsave = 0L; ++ ++ ajlong zero = 0L; ++ ajlong join = 0L; ++ ++ ajlong lv = 0L; ++ ajint v = 0; ++ ++ /* ajDebug("In btreeHybSplitLeaf\n"); */ ++ ++ order = cache->order; ++ nperbucket = cache->nperbucket; ++ ++ mediankey = ajStrNew(); ++ ++ arrays = btreeAllocPriArray(cache); ++ karray = arrays->karray; ++ parray = arrays->parray; ++ ++ ++ buf = spage->buf; ++ lbuf = buf; ++ ++ GBT_NKEYS(buf,&nkeys); ++ ++ for(i=nkeys+1; i<order; ++i) ++ parray[i] = 0L; ++ ++ GBT_NODETYPE(buf,&rootnodetype); ++ ++ if(rootnodetype == BT_ROOT) ++ { ++ /* ajDebug("Splitting root node\n"); */ ++ lblockno = cache->totsize; ++ lpage = ajBtreeCacheWrite(cache,lblockno); ++ lpage->pageno = cache->totsize; ++ cache->totsize += cache->pagesize; ++ lbuf = lpage->buf; ++ lv = prev; ++ SBT_PREV(lbuf,lv); ++ } ++ else ++ { ++ lblockno = spage->pageno; ++ lpage = spage; ++ } ++ ++ lpage->dirty = BT_LOCK; ++ ++ ++ rblockno = cache->totsize; ++ rpage = ajBtreeCacheWrite(cache,rblockno); ++ rpage->pageno = cache->totsize; ++ rpage->dirty = BT_LOCK; ++ cache->totsize += cache->pagesize; ++ rbuf = rpage->buf; ++ ++ ++ if(rootnodetype == BT_ROOT) ++ { ++ lv = zero; ++ SBT_RIGHT(rbuf,lv); ++ lv = zero; ++ SBT_LEFT(lbuf,lv); ++ } ++ else ++ { ++ GBT_RIGHT(lbuf,&join); ++ lv = join; ++ SBT_RIGHT(rbuf,lv); ++ } ++ lv = lblockno; ++ SBT_LEFT(rbuf,lv); ++ lv = rblockno; ++ SBT_RIGHT(lbuf,lv); ++ ++ ++ btreeGetKeys(cache,buf,&karray,&parray); ++ ++ ++ keylimit = nkeys+1; ++ AJCNEW0(buckets,keylimit); ++ for(i=0;i<keylimit;++i) ++ buckets[i] = btreeReadBucket(cache,parray[i]); ++ ++ idlist = ajListNew(); ++ for(i=0;i<keylimit;++i) ++ { ++ bentries = buckets[i]->Nentries; ++ for(j=0;j<bentries;++j) ++ ajListPush(idlist,(void *)buckets[i]->Ids[j]); ++ AJFREE(buckets[i]->keylen); ++ AJFREE(buckets[i]->Ids); ++ AJFREE(buckets[i]); ++ } ++ ajListSort(idlist,btreeIdCompare); ++ AJFREE(buckets); ++ ++ ++ totalkeys = ajListLength(idlist); ++ ++ keypos = totalkeys / 2; ++ ++ lno = keypos; ++ rno = totalkeys - lno; ++ ++ maxnperbucket = nperbucket >> 1; ++ ++maxnperbucket; ++ ++ cbucket = btreeBucketNew(maxnperbucket); ++ ++ bucketn = lno / maxnperbucket; ++ if(lno % maxnperbucket) ++ ++bucketn; ++ bucketlimit = bucketn - 1; ++ ++ ++ totkeylen = 0; ++ count = 0; ++ for(i=0;i<bucketlimit;++i) ++ { ++ cbucket->Nentries = 0; ++ for(j=0;j<maxnperbucket;++j) ++ { ++ ajListPop(idlist,(void **)&bid); ++ ++ cid = cbucket->Ids[j]; ++ ajStrAssS(&cid->id,bid->id); ++ cid->dbno = bid->dbno; ++ cid->dups = bid->dups; ++ cid->offset = bid->offset; ++ cid->refoffset = bid->refoffset; ++ ++ cbucket->keylen[j] = BT_BUCKIDLEN(bid->id); ++ ++count; ++ ++cbucket->Nentries; ++ ajBtreeIdDel(&bid); ++ } ++ ajListPeek(idlist,(void **)&bid); ++ ++ ajStrAssS(&karray[i],bid->id); ++ totkeylen += ajStrLen(bid->id); ++ ++ if(!parray[i]) ++ parray[i] = cache->totsize; ++ btreeWriteBucket(cache,cbucket,parray[i]); ++ } ++ ++ cbucket->Nentries = 0; ++ ++ j = 0; ++ while(count != lno) ++ { ++ ajListPop(idlist,(void **)&bid); ++ cid = cbucket->Ids[j]; ++ ++j; ++ ++count; ++ ++ ajStrAssS(&cid->id,bid->id); ++ cid->dbno = bid->dbno; ++ cid->dups = bid->dups; ++ cid->offset = bid->offset; ++ cid->refoffset = bid->refoffset; ++ ++ ++cbucket->Nentries; ++ ajBtreeIdDel(&bid); ++ } ++ ++ if(!parray[i]) ++ parray[i] = cache->totsize; ++ btreeWriteBucket(cache,cbucket,parray[i]); ++ ++ nkeys = bucketn - 1; ++ v = nkeys; ++ SBT_NKEYS(lbuf,v); ++ v = totkeylen; ++ SBT_TOTLEN(lbuf,v); ++ nodetype = BT_LEAF; ++ v = nodetype; ++ SBT_NODETYPE(lbuf,v); ++ lpage->dirty = BT_DIRTY; ++ ++ GBT_PREV(lbuf,&prevsave); ++ ++ btreeWriteNode(cache,lpage,karray,parray,nkeys); ++ ++ ajListPeek(idlist,(void **)&bid); ++ ajStrAssS(&mediankey,bid->id); ++ ++ totkeylen = 0; ++ bucketn = rno / maxnperbucket; ++ if(rno % maxnperbucket) ++ ++bucketn; ++ bucketlimit = bucketn - 1; ++ ++ for(i=0;i<bucketlimit;++i) ++ { ++ cbucket->Nentries = 0; ++ for(j=0;j<maxnperbucket;++j) ++ { ++ ajListPop(idlist,(void **)&bid); ++ ++ cid = cbucket->Ids[j]; ++ ajStrAssS(&cid->id,bid->id); ++ cid->dbno = bid->dbno; ++ cid->dups = bid->dups; ++ cid->offset = bid->offset; ++ cid->refoffset = bid->refoffset; ++ ++ cbucket->keylen[j] = BT_BUCKIDLEN(bid->id); ++ ++cbucket->Nentries; ++ ajBtreeIdDel(&bid); ++ } ++ ++ ajListPeek(idlist,(void **)&bid); ++ ajStrAssS(&karray[i],bid->id); ++ totkeylen += ajStrLen(bid->id); ++ ++ parray[i] = cache->totsize; ++ btreeWriteBucket(cache,cbucket,parray[i]); ++ } ++ ++ cbucket->Nentries = 0; ++ ++ j = 0; ++ while(ajListPop(idlist,(void**)&bid)) ++ { ++ cid = cbucket->Ids[j]; ++ ++j; ++ ++ ajStrAssS(&cid->id,bid->id); ++ cid->dbno = bid->dbno; ++ cid->dups = bid->dups; ++ cid->offset = bid->offset; ++ cid->refoffset = bid->refoffset; ++ ++ ++cbucket->Nentries; ++ ajBtreeIdDel(&bid); ++ } ++ ++ parray[i] = cache->totsize; ++ btreeWriteBucket(cache,cbucket,parray[i]); ++ ++ nkeys = bucketn - 1; ++ ++ v = nkeys; ++ SBT_NKEYS(rbuf,v); ++ v = totkeylen; ++ SBT_TOTLEN(rbuf,v); ++ nodetype = BT_LEAF; ++ v = nodetype; ++ SBT_NODETYPE(rbuf,v); ++ lv = prevsave; ++ SBT_PREV(rbuf,lv); ++ lv = overflow; ++ SBT_OVERFLOW(rbuf,lv); ++ ++ btreeWriteNode(cache,rpage,karray,parray,nkeys); ++ rpage->dirty = BT_DIRTY; ++ ++ cbucket->Nentries = maxnperbucket; ++ btreeBucketDel(&cbucket); ++ ajListDel(&idlist); ++ ++ ++ ++ medianless = lblockno; ++ mediangtr = rblockno; ++ ++ ++ if(rootnodetype == BT_ROOT) ++ { ++ ajStrAssS(&karray[0],mediankey); ++ parray[0]=lblockno; ++ parray[1]=rblockno; ++ nkeys = 1; ++ btreeWriteNode(cache,spage,karray,parray,nkeys); ++ spage->dirty = BT_LOCK; ++ ++ btreeDeallocPriArray(cache,arrays); ++ ++ ajStrDel(&mediankey); ++ ++cache->level; ++ return spage; ++ } ++ ++ ++ btreeDeallocPriArray(cache,arrays); ++ ++ page = ajBtreeCacheRead(cache,prevsave); ++ btreeHybInsertKey(cache,page,mediankey,medianless,mediangtr); ++ ajStrDel(&mediankey); ++ ++ page = ajBtreeCacheRead(cache,prevsave); ++ ++ return page; ++} ++ ++ ++ ++ ++/* @funcstatic btreeHybInsertKey ***************************************** ++** ++** Insert a key into a potentially full node ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [u] page [AjPBtpage] original page ++** @param [r] key [const AjPStr] key to insert ++** @param [r] less [ajlong] less-than pointer ++** @param [r] greater [ajlong] greater-than pointer ++** ++** @return [void] ++** @@ ++******************************************************************************/ ++ ++static void btreeHybInsertKey(AjPBtcache cache, AjPBtpage page, ++ const AjPStr key, ajlong less, ajlong greater) ++{ ++ unsigned char *lbuf = NULL; ++ unsigned char *rbuf = NULL; ++ unsigned char *tbuf = NULL; ++ AjPStr *karray = NULL; ++ ajlong *parray = NULL; ++ AjPStr *tkarray = NULL; ++ ajlong *tparray = NULL; ++ ++ AjPBtMem arrays1 = NULL; ++ AjPBtMem arrays2 = NULL; ++ ++ ajint nkeys = 0; ++ ajint order = 0; ++ ajint keypos = 0; ++ ajint rkeyno = 0; ++ ++ ajint i = 0; ++ ajint n = 0; ++ ++ ajint nodetype = 0; ++ AjPBtpage ipage = NULL; ++ AjPBtpage lpage = NULL; ++ AjPBtpage rpage = NULL; ++ AjPBtpage tpage = NULL; ++ ++ ajlong blockno = 0L; ++ ajlong rblockno = 0L; ++ ajlong lblockno = 0L; ++ AjPStr mediankey = NULL; ++ ajlong medianless = 0L; ++ ajlong mediangtr = 0L; ++ ajlong overflow = 0L; ++ ajlong prev = 0L; ++ ajint totlen = 0; ++ ++ ajlong lv = 0L; ++ ajint v = 0; ++ ++ /* ajDebug("In btreeHybInsertKey\n"); */ ++ ++ if(!btreeNodeIsFull(cache,page)) ++ { ++ btreeInsertNonFull(cache,page,key,less,greater); ++ return; ++ } ++ ++ order = cache->order; ++ lbuf = page->buf; ++ GBT_NODETYPE(lbuf,&nodetype); ++ page->dirty = BT_LOCK; ++ ++ if(nodetype == BT_ROOT) ++ { ++ arrays1 = btreeAllocPriArray(cache); ++ karray = arrays1->karray; ++ parray = arrays1->parray; ++ ++ btreeHybSplitRoot(cache); ++ ++ if(page->pageno) ++ page->dirty = BT_DIRTY; ++ btreeGetKeys(cache,lbuf,&karray,&parray); ++ ++ if(strcmp(key->Ptr,karray[0]->Ptr)<0) ++ blockno = parray[0]; ++ else ++ blockno = parray[1]; ++ ipage = ajBtreeCacheRead(cache,blockno); ++ btreeInsertNonFull(cache,ipage,key,less,greater); ++ ++ btreeDeallocPriArray(cache,arrays1); ++ return; ++ } ++ ++ ++ arrays1 = btreeAllocPriArray(cache); ++ karray = arrays1->karray; ++ parray = arrays1->parray; ++ ++ arrays2 = btreeAllocPriArray(cache); ++ tkarray = arrays2->karray; ++ tparray = arrays2->parray; ++ ++ mediankey = ajStrNew(); ++ ++ lpage = page; ++ lbuf = lpage->buf; ++ ++ btreeGetKeys(cache,lbuf,&karray,&parray); ++ ++ GBT_BLOCKNUMBER(lbuf,&lblockno); ++ rblockno = cache->totsize; ++ rpage = ajBtreeCacheWrite(cache,rblockno); ++ rpage->dirty = BT_LOCK; ++ rpage->pageno = cache->totsize; ++ cache->totsize += cache->pagesize; ++ rbuf = rpage->buf; ++ lv = rblockno; ++ SBT_BLOCKNUMBER(rbuf,lv); ++ ++ ++ GBT_PREV(lbuf,&prev); ++ lv = prev; ++ SBT_PREV(rbuf,lv); ++ ++ nkeys = order - 1; ++ keypos = nkeys / 2; ++ if(!(nkeys % 2)) ++ --keypos; ++ ++ ajStrAssS(&mediankey,karray[keypos]); ++ medianless = lblockno; ++ mediangtr = rblockno; ++ ++ ++ GBT_NODETYPE(lbuf,&nodetype); ++ v = nodetype; ++ SBT_NODETYPE(rbuf,v); ++ lv = overflow; ++ SBT_OVERFLOW(rbuf,lv); ++ ++ ++ totlen = 0; ++ for(i=0;i<keypos;++i) ++ { ++ ajStrAssS(&tkarray[i],karray[i]); ++ totlen += ajStrLen(karray[i]); ++ tparray[i] = parray[i]; ++ } ++ tparray[i] = parray[i]; ++ v = totlen; ++ SBT_TOTLEN(lbuf,v); ++ n = i; ++ v = n; ++ SBT_NKEYS(lbuf,v); ++ btreeWriteNode(cache,lpage,tkarray,tparray,i); ++ ++ ++ ++ for(i=0;i<n+1;++i) ++ { ++ tpage = ajBtreeCacheRead(cache,tparray[i]); ++ tbuf = tpage->buf; ++ lv = lblockno; ++ SBT_PREV(tbuf,lv); ++ tpage->dirty = BT_DIRTY; ++ } ++ ++ ++ totlen = 0; ++ for(i=keypos+1;i<nkeys;++i) ++ { ++ ajStrAssS(&tkarray[i-(keypos+1)],karray[i]); ++ totlen += ajStrLen(karray[i]); ++ tparray[i-(keypos+1)] = parray[i]; ++ } ++ tparray[i-(keypos+1)] = parray[i]; ++ v = totlen; ++ SBT_TOTLEN(rbuf,v); ++ rkeyno = (nkeys-keypos) - 1; ++ v = rkeyno; ++ SBT_NKEYS(rbuf,v); ++ rpage->dirty = BT_DIRTY; ++ btreeWriteNode(cache,rpage,tkarray,tparray,rkeyno); ++ ++ ++ for(i=0;i<rkeyno+1;++i) ++ { ++ tpage = ajBtreeCacheRead(cache,tparray[i]); ++ tbuf = tpage->buf; ++ lv = rblockno; ++ SBT_PREV(tbuf,lv); ++ tpage->dirty = BT_DIRTY; ++ } ++ ++ ++ ipage = rpage; ++ if(strcmp(key->Ptr,mediankey->Ptr)<0) ++ ipage = lpage; ++ ++ btreeInsertNonFull(cache,ipage,key,less,greater); ++ ++ ++ btreeDeallocPriArray(cache,arrays1); ++ btreeDeallocPriArray(cache,arrays2); ++ ++ ipage = ajBtreeCacheRead(cache,prev); ++ ++ btreeHybInsertKey(cache,ipage,mediankey,medianless,mediangtr); ++ ajStrDel(&mediankey); ++ ++ return; ++} ++ ++ ++ ++ ++/* @funcstatic btreeHybSplitRoot ***************************************** ++** ++** Split the root node ++** ++** @param [u] cache [AjPBtcache] cache ++** ++** @return [void] ++** @@ ++******************************************************************************/ ++ ++static void btreeHybSplitRoot(AjPBtcache cache) ++{ ++ AjPBtpage rootpage = NULL; ++ AjPBtpage rpage = NULL; ++ AjPBtpage lpage = NULL; ++ AjPBtpage tpage = NULL; ++ ++ AjPStr *karray = NULL; ++ AjPStr *tkarray = NULL; ++ ajlong *parray = NULL; ++ ajlong *tparray = NULL; ++ AjPBtMem arrays1 = NULL; ++ AjPBtMem arrays2 = NULL; ++ ++ ajint order = 0; ++ ajint nkeys = 0; ++ ajint keypos = 0; ++ ++ ajlong rblockno = 0L; ++ ajlong lblockno = 0L; ++ ++ AjPStr key = NULL; ++ ajint i; ++ ++ unsigned char *rootbuf = NULL; ++ unsigned char *rbuf = NULL; ++ unsigned char *lbuf = NULL; ++ unsigned char *tbuf = NULL; ++ ++ ajint nodetype = 0; ++ ajlong overflow = 0L; ++ ajlong zero = 0L; ++ ajint totlen = 0; ++ ajint rkeyno = 0; ++ ajint n = 0; ++ ++ ajlong lv = 0L; ++ ajint v = 0; ++ ++ ++ /* ajDebug("In btreeHybSplitRoot\n"); */ ++ ++ order = cache->order; ++ ++ arrays1 = btreeAllocPriArray(cache); ++ karray = arrays1->karray; ++ parray = arrays1->parray; ++ ++ arrays2 = btreeAllocPriArray(cache); ++ tkarray = arrays2->karray; ++ tparray = arrays2->parray; ++ ++ key = ajStrNew(); ++ ++ rootpage = btreeCacheLocate(cache,0L); ++ if(!rootpage) ++ ajFatal("Root page has been unlocked 1"); ++ ++ rootbuf = rootpage->buf; ++ ++ nkeys = order - 1; ++ ++ keypos = nkeys / 2; ++ if(!(nkeys % 2)) ++ --keypos; ++ ++ ++ rblockno = cache->totsize; ++ rpage = ajBtreeCacheWrite(cache,rblockno); ++ rpage->dirty = BT_LOCK; ++ rpage->pageno = cache->totsize; ++ cache->totsize += cache->pagesize; ++ ++ lblockno = cache->totsize; ++ lpage = ajBtreeCacheWrite(cache,lblockno); ++ lpage->pageno = cache->totsize; ++ cache->totsize += cache->pagesize; ++ ++ lv = rblockno; ++ SBT_BLOCKNUMBER(rpage->buf,lv); ++ lv = lblockno; ++ SBT_BLOCKNUMBER(lpage->buf,lv); ++ ++ if(!cache->level) ++ { ++ lv = zero; ++ SBT_LEFT(lpage->buf,lv); ++ lv = rblockno; ++ SBT_RIGHT(lpage->buf,lv); ++ lv = lblockno; ++ SBT_LEFT(rpage->buf,lv); ++ lv = zero; ++ SBT_RIGHT(rpage->buf,lv); ++ } ++ ++ btreeGetKeys(cache,rootbuf,&karray,&parray); ++ ++ /* Get key for root node and write new root node */ ++ ajStrAssS(&tkarray[0],karray[keypos]); ++ tparray[0] = lblockno; ++ tparray[1] = rblockno; ++ ++ ++ n = 1; ++ v = n; ++ SBT_NKEYS(rootbuf,v); ++ btreeWriteNode(cache,rootpage,tkarray,tparray,1); ++ rootpage->dirty = BT_LOCK; ++ ++ rbuf = rpage->buf; ++ lbuf = lpage->buf; ++ ++ if(cache->level) ++ nodetype = BT_INTERNAL; ++ else ++ nodetype = BT_LEAF; ++ ++ v = nodetype; ++ SBT_NODETYPE(rbuf,v); ++ v = nodetype; ++ SBT_NODETYPE(lbuf,v); ++ lv = overflow; ++ SBT_OVERFLOW(rbuf,lv); ++ lv = overflow; ++ SBT_PREV(rbuf,lv); ++ lv = overflow; ++ SBT_OVERFLOW(lbuf,lv); ++ lv = overflow; ++ SBT_PREV(lbuf,lv); ++ ++ totlen = 0; ++ for(i=0;i<keypos;++i) ++ { ++ ajStrAssS(&tkarray[i],karray[i]); ++ totlen += ajStrLen(karray[i]); ++ tparray[i] = parray[i]; ++ } ++ tparray[i] = parray[i]; ++ v = totlen; ++ SBT_TOTLEN(lbuf,v); ++ n = i; ++ v = n; ++ SBT_NKEYS(lbuf,v); ++ btreeWriteNode(cache,lpage,tkarray,tparray,i); ++ ++ for(i=0;i<n+1;++i) ++ { ++ tpage = ajBtreeCacheRead(cache,tparray[i]); ++ tbuf = tpage->buf; ++ lv = lblockno; ++ SBT_PREV(tbuf,lv); ++ tpage->dirty = BT_DIRTY; ++ } ++ ++ totlen = 0; ++ for(i=keypos+1;i<nkeys;++i) ++ { ++ ajStrAssS(&tkarray[i-(keypos+1)],karray[i]); ++ totlen += ajStrLen(karray[i]); ++ tparray[i-(keypos+1)] = parray[i]; ++ } ++ tparray[i-(keypos+1)] = parray[i]; ++ v = totlen; ++ SBT_TOTLEN(rbuf,v); ++ rkeyno = (nkeys-keypos) - 1; ++ v = rkeyno; ++ SBT_NKEYS(rbuf,v); ++ rpage->dirty = BT_DIRTY; ++ btreeWriteNode(cache,rpage,tkarray,tparray,rkeyno); ++ ++ for(i=0;i<rkeyno+1;++i) ++ { ++ tpage = ajBtreeCacheRead(cache,tparray[i]); ++ tbuf = tpage->buf; ++ lv = rblockno; ++ SBT_PREV(tbuf,lv); ++ tpage->dirty = BT_DIRTY; ++ } ++ ++ ++ btreeDeallocPriArray(cache,arrays1); ++ btreeDeallocPriArray(cache,arrays2); ++ ++ ++cache->level; ++ ++ ajStrDel(&key); ++ ++ return; ++} ++ ++ ++ ++ ++/* @func ajBtreeHybInsertId ********************************************* ++** ++** Insert an ID structure into the tree ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [r] id [const AjPBtId] Id object ++** ++** @return [void] pointer to a page ++** @@ ++******************************************************************************/ ++ ++void ajBtreeHybInsertId(AjPBtcache cache, AjPBtHybrid hyb) ++{ ++ AjPBtpage spage = NULL; ++ AjPBtpage parent = NULL; ++ AjPStr key = NULL; ++ const char *ckey = NULL; ++ AjPBucket lbucket = NULL; ++ AjPBucket rbucket = NULL; ++ AjPBucket bucket = NULL; ++ ajlong lblockno = 0L; ++ ajlong rblockno = 0L; ++ ajlong blockno = 0L; ++ ajlong shift = 0L; ++ ++ ajint nkeys = 0; ++ ajint order = 0; ++ ++ ajint nodetype = 0; ++ ajint nentries = 0; ++ ++ AjPStr *karray = NULL; ++ ajlong *parray = NULL; ++ AjPBtMem arrays = NULL; ++ AjBool found = ajFalse; ++ AjPBtId btid = NULL; ++ ++ ajint i; ++ ajint n; ++ ++ unsigned char *buf = NULL; ++ ++ /* ajDebug("In ajBtreeHybInsertId\n"); */ ++ ++ key = ajStrNew(); ++ ++ ++ ajStrAssS(&key,hyb->key1); ++ if(!ajStrLen(key)) ++ { ++ ajStrDel(&key); ++ return; ++ } ++ ++ ckey = ajStrStr(key); ++ spage = ajBtreeHybFindInsert(cache,ckey); ++ buf = spage->buf; ++ ++ GBT_NKEYS(buf,&nkeys); ++ GBT_NODETYPE(buf,&nodetype); ++ ++ order = cache->order; ++ ++ arrays = btreeAllocPriArray(cache); ++ karray = arrays->karray; ++ parray = arrays->parray; ++ ++ if(!nkeys) ++ { ++ lbucket = btreeBucketNew(0); ++ rbucket = btreeBucketNew(0); ++ ++ lblockno = cache->totsize; ++ btreeWriteBucket(cache,lbucket,lblockno); ++ ++ rblockno = cache->totsize; ++ btreeWriteBucket(cache,rbucket,rblockno); ++ ++ parray[0] = lblockno; ++ parray[1] = rblockno; ++ ajStrAssS(karray,key); ++ ++ btreeWriteNode(cache,spage,karray,parray,1); ++ ++ btreeBucketDel(&lbucket); ++ btreeBucketDel(&rbucket); ++ ++ btreeAddToHybBucket(cache,rblockno,hyb); ++ ++ btreeDeallocPriArray(cache,arrays); ++ ++ ajStrDel(&key); ++ ++ return; ++ } ++ ++ ++ /* Search to see whether entry exists */ ++ ++ btreeGetKeys(cache,buf,&karray,&parray); ++ ++ i=0; ++ while(i!=nkeys && strcmp(key->Ptr,karray[i]->Ptr)>=0) ++ ++i; ++ if(i==nkeys) ++ { ++ if(strcmp(key->Ptr,karray[i-1]->Ptr)<0) ++ blockno = parray[i-1]; ++ else ++ blockno = parray[i]; ++ } ++ else ++ blockno = parray[i]; ++ ++ ++ bucket = btreeReadBucket(cache,blockno); ++ ++ nentries = bucket->Nentries; ++ ++ found = ajFalse; ++ ++ for(i=0;i<nentries;++i) ++ if(!strcmp(hyb->key1->Ptr,bucket->Ids[i]->id->Ptr)) ++ { ++ found = ajTrue; ++ break; ++ } ++ ++ ++ if(found) ++ { ++ btid = bucket->Ids[i]; ++ ++ btreeHybDupInsert(cache,hyb,btid); ++ ++ btreeWriteBucket(cache,bucket,blockno); ++ btreeBucketDel(&bucket); ++ ++ btreeDeallocPriArray(cache,arrays); ++ ++ ajStrDel(&key); ++ ++ return; ++ } ++ else ++ btreeBucketDel(&bucket); ++ ++ if(nodetype != BT_ROOT) ++ if((shift = btreeHybInsertShift(cache,&spage,key->Ptr))) ++ blockno = shift; ++ ++ buf = spage->buf; ++ ++ n = btreeNumInBucket(cache,blockno); ++ ++ if(n == cache->nperbucket) ++ { ++ if(btreeHybReorderBuckets(cache,spage)) ++ { ++ GBT_NKEYS(buf,&nkeys); ++ btreeGetKeys(cache,buf,&karray,&parray); ++ ++ i=0; ++ while(i!=nkeys && strcmp(key->Ptr,karray[i]->Ptr)>=0) ++ ++i; ++ ++ if(i==nkeys) ++ { ++ if(strcmp(key->Ptr,karray[i-1]->Ptr)<0) ++ blockno = parray[i-1]; ++ else ++ blockno = parray[i]; ++ } ++ else ++ blockno = parray[i]; ++ } ++ else ++ { ++ parent = btreeHybSplitLeaf(cache,spage); ++ spage = ajBtreeHybFindInsert(cache,ckey); ++ buf = spage->buf; ++ ++ btreeGetKeys(cache,buf,&karray,&parray); ++ ++ GBT_NKEYS(buf,&nkeys); ++ i=0; ++ while(i!=nkeys && strcmp(key->Ptr,karray[i]->Ptr)>=0) ++ ++i; ++ ++ if(i==nkeys) ++ { ++ if(strcmp(key->Ptr,karray[i-1]->Ptr)<0) ++ blockno = parray[i-1]; ++ else ++ blockno = parray[i]; ++ } ++ else ++ blockno = parray[i]; ++ ++ } ++ } ++ ++ ++ btreeAddToHybBucket(cache,blockno,hyb); ++ ++ ++cache->count; ++ ++ btreeDeallocPriArray(cache,arrays); ++ ++ ajStrDel(&key); ++ ++ return; ++} ++ ++ ++ ++ ++static void btreeHybDupInsert(AjPBtcache cache, AjPBtHybrid hyb, ++ AjPBtId btid) ++{ ++ AjPBtpage page; ++ AjPBtpage rpage; ++ ajlong secrootpage = 0L; ++ unsigned char *buf; ++ ajlong right = 0L; ++ AjPBtNumId num = NULL; ++ ++ /* ajDebug("In btreeHybDupInsert\n"); */ ++ ++ if(!btid->dups) ++ { ++ btid->dups = 1; ++ AJNEW0(num); ++ ++ num->offset = btid->offset; ++ num->refoffset = btid->refoffset; ++ num->dbno = btid->dbno; ++ ++ secrootpage = cache->totsize; ++ ++ btid->offset = secrootpage; ++ ++ ajBtreeCreateRootNode(cache,secrootpage); ++ cache->secrootblock = secrootpage; ++ page = ajBtreeCacheWrite(cache,secrootpage); ++ page->dirty = BT_DIRTY; ++ ajBtreeCacheSync(cache,secrootpage); ++ page->dirty = BT_LOCK; ++ ++ rpage = btreeCacheLocate(cache, 0L); ++ rpage->dirty = BT_LOCK; ++ ++ cache->slevel = 0; ++ ++ ajBtreeInsertNum(cache,num,page); ++ ++ num->offset = hyb->offset; ++ num->refoffset = hyb->refoffset; ++ num->dbno = hyb->dbno; ++ ++ ajBtreeInsertNum(cache,num,page); ++ ++btid->dups; ++ ++ AJFREE(num); ++ ++ return; ++ } ++ else ++ { ++ cache->secrootblock = btid->offset; ++ page = ajBtreeCacheWrite(cache,cache->secrootblock); ++ page->dirty = BT_LOCK; ++ buf = page->buf; ++ GBT_RIGHT(buf,&right); ++ cache->slevel = (ajint) right; ++ ++ AJNEW0(num); ++ ++ num->offset = hyb->offset; ++ num->refoffset = hyb->refoffset; ++ num->dbno = hyb->dbno; ++ ++ ajBtreeInsertNum(cache,num,page); ++ ++ AJFREE(num); ++ ++ ++btid->dups; ++ } ++ ++ ++ page->dirty = BT_DIRTY; ++ ++ return; ++} ++ ++ ++ ++ ++/* @funcstatic btreeGetNumKeys ********************************************* ++** ++** Get Keys and Pointers from an internal node ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [u] buf [unsigned char *] page buffer ++** @param [w] keys [ajlong **] keys ++** @param [w] ptrs [ajlong**] ptrs ++** ++** @return [void] ++** @@ ++******************************************************************************/ ++ ++static void btreeGetNumKeys(AjPBtcache cache, unsigned char *buf, ++ ajlong **keys, ajlong **ptrs) ++{ ++ ajlong *karray = NULL; ++ ajlong *parray = NULL; ++ ++ ajint nkeys = 0; ++ unsigned char *pptr = NULL; ++ ajint i; ++ ++ /* ajDebug("In btreeGetNumKeys\n"); */ ++ ++ ++ karray = *keys; ++ parray = *ptrs; ++ ++ pptr = PBT_KEYLEN(buf); ++ GBT_NKEYS(buf,&nkeys); ++ if(!nkeys) ++ ajFatal("GetNumKeys: No keys in node"); ++ ++ for(i=0;i<nkeys;++i) ++ { ++ BT_GETAJLONG(pptr,&karray[i]); ++ pptr += sizeof(ajlong); ++ } ++ ++ for(i=0;i<nkeys;++i) ++ { ++ BT_GETAJLONG(pptr,&parray[i]); ++ pptr += sizeof(ajlong); ++ } ++ ++ BT_GETAJLONG(pptr,&parray[i]); ++ ++ return; ++} ++ ++ ++ ++ ++/* @funcstatic btreeWriteNumNode ******************************************* ++** ++** Write an internal node ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [u] spage [AjPBtpage] buffer ++** @param [r] keys [AjPStr const *] keys ++** @param [r] ptrs [const ajlong*] page pointers ++** @param [r] nkeys [ajint] number of keys ++ ++** ++** @return [void] ++** @@ ++******************************************************************************/ ++ ++static void btreeWriteNumNode(AjPBtcache cache, AjPBtpage spage, ++ const ajlong *keys, const ajlong *ptrs, ++ ajint nkeys) ++{ ++ unsigned char *pptr = NULL; ++ unsigned char *buf; ++ ++ ajint tnkeys = 0; ++ ++ ajlong aspace = 0L; ++ ajlong lv = 0L; ++ ajlong overflow = 0L; ++ ajint i; ++ ++ ++ /* ajDebug("In btreeWriteNumNode\n"); */ ++ ++ buf = spage->buf; ++ ++ tnkeys = nkeys; ++ SBT_NKEYS(buf,tnkeys); ++ ++ pptr = PBT_KEYLEN(buf); ++ aspace = 2 * nkeys * sizeof(ajlong) + sizeof(ajlong); ++ if((pptr+aspace)-buf > cache->pagesize) ++ ajFatal("WriteNumNode: too many keys for available pagesize"); ++ ++ for(i=0;i<nkeys;++i) ++ { ++ lv = keys[i]; ++ BT_SETAJLONG(pptr,lv); ++ pptr += sizeof(ajlong); ++ } ++ ++ for(i=0;i<nkeys;++i) ++ { ++ lv = ptrs[i]; ++ BT_SETAJLONG(pptr,lv); ++ pptr += sizeof(ajlong); ++ } ++ ++ lv = ptrs[i]; ++ BT_SETAJLONG(pptr,lv); ++ ++ spage->dirty = BT_DIRTY; ++ ++ overflow = 0L; ++ SBT_OVERFLOW(buf,overflow); ++ ++ ++ return; ++} ++ ++ ++ ++ ++/* @funcstatic btreeWriteNumBucket ******************************************* ++** ++** Write index bucket object to the cache given a disc page number ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [r] bucket [const AjPBucket] bucket ++** @param [r] pageno [ajlong] page number ++** ++** @return [void] ++** @@ ++******************************************************************************/ ++ ++static void btreeWriteNumBucket(AjPBtcache cache, const AjPNumBucket bucket, ++ ajlong pageno) ++{ ++ AjPBtpage page = NULL; ++ unsigned char *buf = NULL; ++ unsigned char *pptr = NULL; ++ ++ ajint v = 0; ++ ajint i = 0; ++ ajlong lv = 0L; ++ ajint nentries = 0; ++ ajlong overflow = 0L; ++ ++ /* ajDebug("In btreeWriteNumBucket\n"); */ ++ ++ if(pageno == cache->totsize) ++ { ++ page = ajBtreeCacheWrite(cache,pageno); ++ page->pageno = cache->totsize; ++ cache->totsize += cache->pagesize; ++ buf = page->buf; ++ overflow = 0L; ++ lv = overflow; ++ SBT_BUCKOVERFLOW(buf,lv); ++ } ++ else ++ { ++ page = ajBtreeCacheRead(cache,pageno); ++ buf = page->buf; ++ GBT_BUCKOVERFLOW(buf,&overflow); ++ } ++ ++ v = BT_BUCKET; ++ SBT_BUCKNODETYPE(buf,v); ++ page->dirty = BT_LOCK; ++ ++ nentries = bucket->Nentries; ++ v = nentries; ++ SBT_BUCKNENTRIES(buf,v); ++ ++ pptr = PBT_BUCKKEYLEN(buf); ++ ++ for(i=0;i<nentries;++i) ++ { ++ lv = bucket->NumId[i]->offset; ++ BT_SETAJLONG(pptr,lv); ++ pptr += sizeof(ajlong); ++ lv = bucket->NumId[i]->refoffset; ++ BT_SETAJLONG(pptr,lv); ++ pptr += sizeof(ajlong); ++ v = bucket->NumId[i]->dbno; ++ BT_SETAJINT(pptr,v); ++ pptr += sizeof(ajint); ++ } ++ ++ lv = 0L; ++ SBT_BUCKOVERFLOW(buf,lv); ++ page->dirty = BT_DIRTY; ++ ++ return; ++} ++ ++ ++ ++ ++/* @funcstatic btreeReadNumBucket ********************************************* ++** ++** Constructor for index bucket given a disc page number ++** Creates one empty key slot for possible addition ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [r] pageno [ajlong] page number ++** ++** @return [AjPNumBucket] bucket ++** @@ ++******************************************************************************/ ++ ++static AjPNumBucket btreeReadNumBucket(AjPBtcache cache, ajlong pageno) ++{ ++ AjPNumBucket bucket = NULL; ++ AjPBtpage page = NULL; ++ unsigned char *buf = NULL; ++ unsigned char *pptr = NULL; ++ ajint nodetype = 0; ++ ajint nentries = 0; ++ ajlong overflow = 0L; ++ ajint dirtysave = 0; ++ ++ ajint i; ++ ++ /* ajDebug("In btreeReadNumBucket\n"); */ ++ ++ if(pageno == cache->secrootblock) ++ ajFatal("ReadNumBucket: cannot read bucket from a root page"); ++ ++ page = ajBtreeCacheRead(cache,pageno); ++ dirtysave = page->dirty; ++ page->dirty = BT_LOCK; ++ buf = page->buf; ++ ++ GBT_BUCKNODETYPE(buf,&nodetype); ++ if(nodetype != BT_BUCKET) ++ ajFatal("ReadNumBucket: Nodetype mismatch. Not bucket (%d)",nodetype); ++ ++ GBT_BUCKNENTRIES(buf,&nentries); ++ if(nentries > cache->snperbucket) ++ ajFatal("ReadNumBucket: Bucket too full"); ++ ++ GBT_BUCKOVERFLOW(buf,&overflow); ++ ++ AJNEW0(bucket); ++ bucket->NodeType = nodetype; ++ bucket->Nentries = nentries; ++ bucket->Overflow = overflow; ++ ++ AJCNEW0(bucket->NumId,nentries+1); ++ for(i=0;i<nentries;++i) ++ AJNEW0(bucket->NumId[i]); ++ ++ ++ pptr = PBT_BUCKKEYLEN(buf); ++ ++ for(i=0;i<nentries;++i) ++ { ++ BT_GETAJLONG(pptr,&bucket->NumId[i]->offset); ++ pptr += sizeof(ajlong); ++ BT_GETAJLONG(pptr,&bucket->NumId[i]->refoffset); ++ pptr += sizeof(ajlong); ++ BT_GETAJINT(pptr,&bucket->NumId[i]->dbno); ++ pptr += sizeof(ajint); ++ } ++ ++ page->dirty = dirtysave; ++ ++ return bucket; ++} ++ ++ ++ ++ ++/* @funcstatic btreeNumBucketDel ********************************************* ++** ++** Delete a bucket object ++** ++** @param [w] thys [AjPNumBucket*] bucket ++** ++** @return [void] ++** @@ ++******************************************************************************/ ++ ++static void btreeNumBucketDel(AjPNumBucket *thys) ++{ ++ AjPNumBucket pthis = NULL; ++ int i; ++ ++ ++ /* ajDebug("In btreeNumBucketDel\n"); */ ++ ++ if(!thys || !*thys) ++ return; ++ ++ pthis = *thys; ++ ++ if(pthis->Nentries) ++ { ++ for(i=0;i<pthis->Nentries;++i) ++ AJFREE(pthis->NumId[i]); ++ ++ AJFREE(pthis->NumId); ++ } ++ ++ ++ AJFREE(pthis); ++ ++ *thys = NULL; ++ ++ return; ++} ++ ++ ++ ++ ++/* @func ajBtreeNumFindInsert *********************************************** ++** ++** Find the node that should contain a new key for insertion ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [r] key [const ajlong] key to search for ++** ++** @return [AjPBtpage] leaf node where item should be inserted ++** @@ ++******************************************************************************/ ++ ++AjPBtpage ajBtreeNumFindInsert(AjPBtcache cache, const ajlong key) ++{ ++ AjPBtpage root = NULL; ++ AjPBtpage ret = NULL; ++ ++ /* ajDebug("In ajBtreeNumFindInsert\n"); */ ++ ++ /* The root node should always be in the cache (BT_LOCKed) */ ++ root = btreeCacheLocate(cache,cache->secrootblock); ++ ++ /* ajDebug("cache->slevel = %d root=%d\n",cache->slevel,(ajint)root); */ ++ ++ ++ if(!cache->slevel) ++ return root; ++ ++ ret = btreeNumFindINode(cache,root,key); ++ ++ return ret; ++} ++ ++ ++ ++ ++/* @funcstatic btreeNumFindINode ********************************************** ++** ++** Recursive search for insert node in a secondary tree ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [u] page [AjPBtpage] page ++** @param [r] item [const ajlong] key to search for ++** ++** @return [AjPBtpage] leaf node where item should be inserted ++** @@ ++******************************************************************************/ ++ ++static AjPBtpage btreeNumFindINode(AjPBtcache cache, AjPBtpage page, ++ const ajlong item) ++{ ++ AjPBtpage ret = NULL; ++ AjPBtpage pg = NULL; ++ ++ unsigned char *buf = NULL; ++ ajint status = 0; ++ ajint ival = 0; ++ ++ /* ajDebug("In btreeNumFindINode\n"); */ ++ ++ ret = page; ++ buf = page->buf; ++ GBT_NODETYPE(buf,&ival); ++ if(ival != BT_LEAF) ++ { ++ status = ret->dirty; ++ ret->dirty = BT_LOCK; /* Lock in case of lots of overflow pages */ ++ pg = btreeNumPageFromKey(cache,buf,item); ++ ret->dirty = status; ++ ret = btreeNumFindINode(cache,pg,item); ++ } ++ ++ return ret; ++} ++ ++ ++ ++ ++/* @funcstatic btreeNumPageFromKey ******************************************* ++** ++** Return next lower index page given a key in a secondary tree ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [u] buf [unsigned char *] page buffer ++** @param [r] key [const ajlong] key to search for ++** ++** @return [AjPBtpage] pointer to a page ++** @@ ++******************************************************************************/ ++ ++static AjPBtpage btreeNumPageFromKey(AjPBtcache cache, unsigned char *buf, ++ const ajlong key) ++{ ++ unsigned char *rootbuf = NULL; ++ ajint nkeys = 0; ++ ajint order = 0; ++ ajint i; ++ ++ ajlong blockno = 0L; ++ ajlong *karray = NULL; ++ ajlong *parray = NULL; ++ AjPBtpage page = NULL; ++ AjPBtMem array = NULL; ++ ++ /* ajDebug("In btreeNumPageFromKey\n"); */ ++ ++ rootbuf = buf; ++ ++ ++ GBT_NKEYS(rootbuf,&nkeys); ++ order = cache->sorder; ++ ++ array = btreeAllocSecArray(cache); ++ karray = array->overflows; ++ parray = array->parray; ++ ++ btreeGetNumKeys(cache,rootbuf,&karray,&parray); ++ i = 0; ++ while(i!=nkeys && key >= karray[i]) ++ ++i; ++ if(i==nkeys) ++ { ++ if(key < karray[i-1]) ++ blockno = parray[i-1]; ++ else ++ blockno = parray[i]; ++ } ++ else ++ blockno = parray[i]; ++ ++ btreeDeallocSecArray(cache,array); ++ ++ page = ajBtreeCacheRead(cache,blockno); ++ ++ return page; ++} ++ ++ ++ ++ ++/* @funcstatic btreeAddToNumBucket ******************************************* ++** ++** Add offset info to a bucket ++** Only called if there is room in the bucket ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [r] pageno [ajlong] page number of bucket ++** @param [r] num [const AjPBtNumId] ID info ++** ++** @return [void] ++** @@ ++******************************************************************************/ ++ ++static void btreeAddToNumBucket(AjPBtcache cache, ajlong pageno, ++ const AjPBtNumId num) ++{ ++ AjPNumBucket bucket = NULL; ++ ajint nentries; ++ ++ /* ajDebug("In btreeAddToNumBucket\n"); */ ++ ++ bucket = btreeReadNumBucket(cache,pageno); ++ ++ nentries = bucket->Nentries; ++ ++ /* Reading a bucket always gives one extra ID position */ ++ ++ AJNEW0(bucket->NumId[nentries]); ++ bucket->NumId[nentries]->offset = num->offset; ++ bucket->NumId[nentries]->refoffset = num->refoffset; ++ bucket->NumId[nentries]->dbno = num->dbno; ++ ++ ++ ++bucket->Nentries; ++ ++ btreeWriteNumBucket(cache,bucket,pageno); ++ ++ btreeNumBucketDel(&bucket); ++ ++ return; ++} ++ ++ ++ ++ ++/* @funcstatic btreeNumInNumBucket ******************************************* ++** ++** Return number of entries in a bucket ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [r] pageno [ajlong] page number ++** ++** @return [ajint] Number of entries in bucket ++** @@ ++******************************************************************************/ ++ ++static ajint btreeNumInNumBucket(AjPBtcache cache, ajlong pageno) ++{ ++ AjPBtpage page = NULL; ++ unsigned char *buf = NULL; ++ ajint nodetype = 0; ++ ajint nentries = 0; ++ ++ /* ajDebug("In btreeNumInNumBucket\n"); */ ++ ++ if(pageno == cache->secrootblock) ++ ajFatal("NumInNumBucket: Attempt to read bucket from root page\n"); ++ ++ page = ajBtreeCacheRead(cache,pageno); ++ ++ buf = page->buf; ++ ++ GBT_BUCKNODETYPE(buf,&nodetype); ++ if(nodetype != BT_BUCKET) ++ ajFatal("NumInNumBucket: NodeType mismatch. Not bucket (%d)", ++ nodetype); ++ ++ GBT_BUCKNENTRIES(buf,&nentries); ++ ++ return nentries; ++} ++ ++ ++ ++ ++/* @funcstatic btreeNumBucketNew ********************************************* ++** ++** Construct a bucket object ++** ++** @param [r] n [ajint] Number of IDs ++** ++** @return [AjPBucket] initialised disc block cache structure ++** @@ ++******************************************************************************/ ++ ++static AjPNumBucket btreeNumBucketNew(ajint n) ++{ ++ AjPNumBucket bucket = NULL; ++ ajint i; ++ ++ /* ajDebug("In btreeNumBucketNew\n"); */ ++ ++ AJNEW0(bucket); ++ ++ if(n) ++ { ++ AJCNEW0(bucket->NumId,n); ++ for(i=0;i<n;++i) ++ AJNEW0(bucket->NumId[i]); ++ } ++ ++ bucket->NodeType = BT_BUCKET; ++ bucket->Nentries = n; ++ bucket->Overflow = 0L; ++ ++ return bucket; ++} ++ ++ ++ ++ ++/* @funcstatic btreeReorderNumBuckets ***************************************** ++** ++** Re-order leaf buckets ++** Must only be called if one of the buckets is full ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [u] leaf [AjPBtpage] leaf page ++** ++** @return [AjBool] true if reorder was successful i.e. leaf not full ++** @@ ++******************************************************************************/ ++ ++static AjBool btreeReorderNumBuckets(AjPBtcache cache, AjPBtpage leaf) ++{ ++ ajint nkeys = 0; ++ unsigned char *lbuf = NULL; ++ ++ ajlong *keys = NULL; ++ ajlong *ptrs = NULL; ++ ++ AjPNumBucket *buckets = NULL; ++ ++ ajint i = 0; ++ ajint j = 0; ++ ++ ajint order; ++ ajint bentries = 0; ++ ajint totalkeys = 0; ++ ajint nperbucket = 0; ++ ajint maxnperbucket = 0; ++ ajint count = 0; ++ ajint keylimit = 0; ++ ajint bucketn = 0; ++ ajint bucketlimit = 0; ++ ajint nodetype = 0; ++ ++ AjPList idlist = NULL; ++ ajint dirtysave = 0; ++ AjPBtNumId bid = NULL; ++ AjPNumBucket cbucket = NULL; ++ AjPBtNumId cid = NULL; ++ ++ ajint v = 0; ++ AjPBtMem array = NULL; ++ ++ /* ajDebug("In btreeReorderNumBuckets\n"); */ ++ ++ dirtysave = leaf->dirty; ++ ++ leaf->dirty = BT_LOCK; ++ lbuf = leaf->buf; ++ ++ GBT_NODETYPE(lbuf,&nodetype); ++ ++ order = cache->sorder; ++ nperbucket = cache->snperbucket; ++ ++ ++ array = btreeAllocSecArray(cache); ++ keys = array->overflows; ++ ptrs = array->parray; ++ ++ /* Read keys/ptrs */ ++ ++ btreeGetNumKeys(cache,lbuf,&keys,&ptrs); ++ ++ GBT_NKEYS(lbuf,&nkeys); ++ ++ ++ if(!nkeys) ++ ajFatal("NumBucketReorder: Attempt to reorder empty leaf"); ++ ++ for(i=0;i<nkeys;++i) ++ totalkeys += btreeNumInNumBucket(cache,ptrs[i]); ++ totalkeys += btreeNumInNumBucket(cache,ptrs[i]); ++ ++ /* Set the number of entries per bucket to approximately half full */ ++ maxnperbucket = nperbucket >> 1; ++ ++ if(!maxnperbucket) ++ ++maxnperbucket; ++ ++ /* Work out the number of new buckets needed */ ++ bucketn = (totalkeys / maxnperbucket); ++ if(totalkeys % maxnperbucket) ++ ++bucketn; ++ ++ if(bucketn > order) ++ { ++ btreeDeallocSecArray(cache,array); ++ ++ leaf->dirty = dirtysave; ++ return ajFalse; ++ } ++ ++ ++ /* Read buckets */ ++ AJCNEW0(buckets,nkeys+1); ++ keylimit = nkeys + 1; ++ ++ for(i=0;i<keylimit;++i) ++ buckets[i] = btreeReadNumBucket(cache,ptrs[i]); ++ ++ ++ /* Read IDs from all buckets and push to list and sort (increasing id) */ ++ idlist = ajListNew(); ++ ++ for(i=0;i<keylimit;++i) ++ { ++ bentries = buckets[i]->Nentries; ++ for(j=0;j<bentries;++j) ++ ajListPush(idlist,(void *)buckets[i]->NumId[j]); ++ ++ AJFREE(buckets[i]->NumId); ++ AJFREE(buckets[i]); ++ } ++ ajListSort(idlist,btreeNumIdCompare); ++ AJFREE(buckets); ++ ++ cbucket = btreeNumBucketNew(maxnperbucket); ++ bucketlimit = bucketn - 1; ++ ++ for(i=0;i<bucketlimit;++i) ++ { ++ cbucket->Nentries = 0; ++ ++ count = 0; ++ while(count!=maxnperbucket) ++ { ++ ajListPop(idlist,(void **)&bid); ++ ++ cid = cbucket->NumId[count]; ++ cid->dbno = bid->dbno; ++ cid->offset = bid->offset; ++ cid->refoffset = bid->refoffset; ++ ++ ++cbucket->Nentries; ++ ++count; ++ AJFREE(bid); ++ } ++ ++ ++ ajListPeek(idlist,(void **)&bid); ++ keys[i] = bid->offset; ++ ++ if(!ptrs[i]) ++ ptrs[i] = cache->totsize; ++ btreeWriteNumBucket(cache,cbucket,ptrs[i]); ++ } ++ ++ ++ /* Deal with greater-than bucket */ ++ ++ cbucket->Nentries = 0; ++ ++ count = 0; ++ while(ajListPop(idlist,(void **)&bid)) ++ { ++ cid = cbucket->NumId[count]; ++ cid->dbno = bid->dbno; ++ cid->offset = bid->offset; ++ cid->refoffset = bid->refoffset; ++ ++ ++cbucket->Nentries; ++ ++count; ++ AJFREE(bid); ++ } ++ ++ ++ if(!ptrs[i]) ++ ptrs[i] = cache->totsize; ++ btreeWriteNumBucket(cache,cbucket,ptrs[i]); ++ ++ cbucket->Nentries = maxnperbucket; ++ btreeNumBucketDel(&cbucket); ++ ++ /* Now write out a modified leaf with new keys/ptrs */ ++ ++ nkeys = bucketn - 1; ++ v = nkeys; ++ SBT_NKEYS(lbuf,v); ++ ++ btreeWriteNumNode(cache,leaf,keys,ptrs,nkeys); ++ ++ leaf->dirty = BT_DIRTY; ++ if(nodetype == BT_ROOT) ++ leaf->dirty = BT_LOCK; ++ ++ btreeDeallocSecArray(cache,array); ++ ++ ajListDel(&idlist); ++ ++ return ajTrue; ++} ++ ++ ++ ++ ++/* @funcstatic btreeNumNodeIsFull ***************************************** ++** ++** Tests whether a node is full of keys ++** ++** @param [r] cache [const AjPBtcache] cache ++** @param [u] page [AjPBtpage] original page ++** ++** @return [AjBool] true if full ++** @@ ++******************************************************************************/ ++ ++static AjBool btreeNumNodeIsFull(const AjPBtcache cache, AjPBtpage page) ++{ ++ unsigned char *buf = NULL; ++ ajint nkeys = 0; ++ ++ /* ajDebug("In btreeNumNodeIsFull\n"); */ ++ ++ buf = page->buf; ++ GBT_NKEYS(buf,&nkeys); ++ ++ if(nkeys == cache->sorder - 1) ++ return ajTrue; ++ ++ return ajFalse; ++} ++ ++ ++ ++ ++/* @funcstatic btreeNumInsertNonFull ***************************************** ++** ++** Insert a key into a non-full node ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [u] page [AjPBtpage] original page ++** @param [r] key [const ajlong] key to insert ++** @param [r] less [ajlong] less-than pointer ++** @param [r] greater [ajlong] greater-than pointer ++** ++** @return [void] ++** @@ ++******************************************************************************/ ++ ++static void btreeNumInsertNonFull(AjPBtcache cache, AjPBtpage page, ++ const ajlong key, ajlong less, ++ ajlong greater) ++{ ++ unsigned char *buf = NULL; ++ ajlong *karray = NULL; ++ ajlong *parray = NULL; ++ ajint nkeys = 0; ++ ajint order = 0; ++ ajint ipos = 0; ++ ajint i; ++ ajint count = 0; ++ ++ ajlong lv = 0L; ++ ajint v = 0; ++ AjPBtMem array = NULL; ++ ++ AjPBtpage ppage = NULL; ++ ajlong pageno = 0L; ++ ++ ajint nodetype = 0; ++ ++ /* ajDebug("In btreeNumInsertNonFull\n"); */ ++ ++ order = cache->sorder; ++ ++ array = btreeAllocSecArray(cache); ++ karray = array->overflows; ++ parray = array->parray; ++ ++ ++ buf = page->buf; ++ GBT_NKEYS(buf,&nkeys); ++ GBT_NODETYPE(buf,&nodetype); ++ ++ btreeGetNumKeys(cache,buf,&karray,&parray); ++ ++ i = 0; ++ while(i!=nkeys && key >= karray[i]) ++ ++i; ++ ++ ipos = i; ++ ++ count = nkeys - ipos; ++ ++ ++ if(ipos == nkeys) ++ { ++ karray[ipos] = key; ++ parray[ipos+1] = greater; ++ parray[ipos] = less; ++ } ++ else ++ { ++ parray[nkeys+1] = parray[nkeys]; ++ ++ for(i=nkeys-1; count>0; --count, --i) ++ { ++ karray[i+1] = karray[i]; ++ parray[i+1] = parray[i]; ++ } ++ ++ karray[ipos] = key; ++ parray[ipos] = less; ++ parray[ipos+1] = greater; ++ } ++ ++ ++nkeys; ++ v = nkeys; ++ SBT_NKEYS(buf,v); ++ ++ btreeWriteNumNode(cache,page,karray,parray,nkeys); ++ if(nodetype == BT_ROOT) ++ page->dirty = BT_LOCK; ++ ++ pageno = page->pageno; ++ ppage = ajBtreeCacheRead(cache,less); ++ lv = pageno; ++ SBT_PREV(ppage->buf,lv); ++ ppage->dirty = BT_DIRTY; ++ ppage = ajBtreeCacheRead(cache,greater); ++ lv = pageno; ++ SBT_PREV(ppage->buf,lv); ++ ppage->dirty = BT_DIRTY; ++ ++ ++ btreeDeallocSecArray(cache,array); ++ ++ if(nodetype != BT_ROOT) ++ btreeNumKeyShift(cache,page); ++ ++ return; ++} ++ ++ ++ ++ ++/* @funcstatic btreeNumInsertKey ********************************************** ++** ++** Insert a key into a potentially full node ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [u] page [AjPBtpage] original page ++** @param [r] key [const ajlong] key to insert ++** @param [r] less [ajlong] less-than pointer ++** @param [r] greater [ajlong] greater-than pointer ++** ++** @return [void] ++** @@ ++******************************************************************************/ ++ ++static void btreeNumInsertKey(AjPBtcache cache, AjPBtpage page, ++ const ajlong key, ajlong less, ajlong greater) ++{ ++ unsigned char *lbuf = NULL; ++ unsigned char *rbuf = NULL; ++ unsigned char *tbuf = NULL; ++ ajlong *karray = NULL; ++ ajlong *parray = NULL; ++ ajlong *tkarray = NULL; ++ ajlong *tparray = NULL; ++ ajint nkeys = 0; ++ ajint order = 0; ++ ajint keypos = 0; ++ ajint rkeyno = 0; ++ ++ ajint i = 0; ++ ajint n = 0; ++ ++ ajint nodetype = 0; ++ AjPBtpage ipage = NULL; ++ AjPBtpage lpage = NULL; ++ AjPBtpage rpage = NULL; ++ AjPBtpage tpage = NULL; ++ ++ ajlong blockno = 0L; ++ ajlong rblockno = 0L; ++ ajlong lblockno = 0L; ++ ajlong mediankey = 0L; ++ ajlong medianless = 0L; ++ ajlong mediangtr = 0L; ++ ajlong overflow = 0L; ++ ajlong prev = 0L; ++ ajint totlen = 0; ++ ++ ajlong lv = 0L; ++ ajint v = 0; ++ AjPBtMem array = NULL; ++ AjPBtMem array2 = NULL; ++ ++ /* ajDebug("In btreeNumInsertKey\n"); */ ++ ++ if(!btreeNumNodeIsFull(cache,page)) ++ { ++ btreeNumInsertNonFull(cache,page,key,less,greater); ++ return; ++ } ++ ++ order = cache->sorder; ++ lbuf = page->buf; ++ GBT_NODETYPE(lbuf,&nodetype); ++ page->dirty = BT_LOCK; ++ ++ if(nodetype == BT_ROOT) ++ { ++ array = btreeAllocSecArray(cache); ++ karray = array->overflows; ++ parray = array->parray; ++ ++ btreeNumSplitRoot(cache); ++ ++ if(page->pageno) ++ page->dirty = BT_DIRTY; ++ btreeGetNumKeys(cache,lbuf,&karray,&parray); ++ ++ if(key < karray[0]) ++ blockno = parray[0]; ++ else ++ blockno = parray[1]; ++ ipage = ajBtreeCacheRead(cache,blockno); ++ btreeNumInsertNonFull(cache,ipage,key,less,greater); ++ ++ btreeDeallocSecArray(cache,array); ++ return; ++ } ++ ++ ++ array = btreeAllocSecArray(cache); ++ karray = array->overflows; ++ parray = array->parray; ++ ++ array2 = btreeAllocSecArray(cache); ++ tkarray = array2->overflows; ++ tparray = array2->parray; ++ ++ ++ lpage = page; ++ lbuf = lpage->buf; ++ ++ btreeGetNumKeys(cache,lbuf,&karray,&parray); ++ ++ GBT_BLOCKNUMBER(lbuf,&lblockno); ++ rblockno = cache->totsize; ++ rpage = ajBtreeCacheWrite(cache,rblockno); ++ rpage->dirty = BT_LOCK; ++ rpage->pageno = cache->totsize; ++ cache->totsize += cache->pagesize; ++ rbuf = rpage->buf; ++ lv = rblockno; ++ SBT_BLOCKNUMBER(rbuf,lv); ++ ++ ++ GBT_PREV(lbuf,&prev); ++ lv = prev; ++ SBT_PREV(rbuf,lv); ++ ++ nkeys = order - 1; ++ keypos = nkeys / 2; ++ if(!(nkeys % 2)) ++ --keypos; ++ ++ mediankey = karray[keypos]; ++ medianless = lblockno; ++ mediangtr = rblockno; ++ ++ ++ GBT_NODETYPE(lbuf,&nodetype); ++ v = nodetype; ++ SBT_NODETYPE(rbuf,v); ++ lv = overflow; ++ SBT_OVERFLOW(rbuf,lv); ++ ++ ++ totlen = 0; ++ for(i=0;i<keypos;++i) ++ { ++ tkarray[i] = karray[i]; ++ tparray[i] = parray[i]; ++ } ++ tparray[i] = parray[i]; ++ ++ n = i; ++ v = n; ++ SBT_NKEYS(lbuf,v); ++ btreeWriteNumNode(cache,lpage,tkarray,tparray,i); ++ ++ ++ ++ for(i=0;i<n+1;++i) ++ { ++ tpage = ajBtreeCacheRead(cache,tparray[i]); ++ tbuf = tpage->buf; ++ lv = lblockno; ++ SBT_PREV(tbuf,lv); ++ tpage->dirty = BT_DIRTY; ++ } ++ ++ ++ totlen = 0; ++ for(i=keypos+1;i<nkeys;++i) ++ { ++ tkarray[i-(keypos+1)] = karray[i]; ++ tparray[i-(keypos+1)] = parray[i]; ++ } ++ tparray[i-(keypos+1)] = parray[i]; ++ ++ rkeyno = (nkeys-keypos) - 1; ++ v = rkeyno; ++ SBT_NKEYS(rbuf,v); ++ rpage->dirty = BT_DIRTY; ++ btreeWriteNumNode(cache,rpage,tkarray,tparray,rkeyno); ++ ++ ++ for(i=0;i<rkeyno+1;++i) ++ { ++ tpage = ajBtreeCacheRead(cache,tparray[i]); ++ tbuf = tpage->buf; ++ lv = rblockno; ++ SBT_PREV(tbuf,lv); ++ tpage->dirty = BT_DIRTY; ++ } ++ ++ ++ ipage = rpage; ++ if(key < mediankey) ++ ipage = lpage; ++ ++ btreeNumInsertNonFull(cache,ipage,key,less,greater); ++ ++ ++ btreeDeallocSecArray(cache,array); ++ btreeDeallocSecArray(cache,array2); ++ ++ ipage = ajBtreeCacheRead(cache,prev); ++ ++ btreeNumInsertKey(cache,ipage,mediankey,medianless,mediangtr); ++ ++ return; ++} ++ ++ ++ ++ ++/* @funcstatic btreeNumSplitRoot ***************************************** ++** ++** Split s secondary root node ++** ++** @param [u] cache [AjPBtcache] cache ++** ++** @return [void] ++** @@ ++******************************************************************************/ ++ ++static void btreeNumSplitRoot(AjPBtcache cache) ++{ ++ AjPBtpage rootpage = NULL; ++ AjPBtpage rpage = NULL; ++ AjPBtpage lpage = NULL; ++ AjPBtpage tpage = NULL; ++ ++ ajlong *karray = NULL; ++ ajlong *tkarray = NULL; ++ ajlong *parray = NULL; ++ ajlong *tparray = NULL; ++ ++ ajint order = 0; ++ ajint nkeys = 0; ++ ajint keypos = 0; ++ ++ ajlong rblockno = 0L; ++ ajlong lblockno = 0L; ++ ++ ajlong right; ++ ++ ajint i; ++ ++ unsigned char *rootbuf = NULL; ++ unsigned char *rbuf = NULL; ++ unsigned char *lbuf = NULL; ++ unsigned char *tbuf = NULL; ++ ++ ajint nodetype = 0; ++ ajlong overflow = 0L; ++ ajlong zero = 0L; ++ ajint rkeyno = 0; ++ ajint n = 0; ++ ++ ajlong lv = 0L; ++ ajint v = 0; ++ ++ AjPBtMem array = NULL; ++ AjPBtMem array2 = NULL; ++ ++ ++ /* ajDebug("In btreeNumSplitRoot\n"); */ ++ ++ order = cache->sorder; ++ ++ array = btreeAllocSecArray(cache); ++ karray = array->overflows; ++ parray = array->parray; ++ ++ array2 = btreeAllocSecArray(cache); ++ tkarray = array2->overflows; ++ tparray = array2->parray; ++ ++ ++ rootpage = btreeCacheLocate(cache,cache->secrootblock); ++ rootbuf = rootpage->buf; ++ ++ nkeys = order - 1; ++ ++ keypos = nkeys / 2; ++ if(!(nkeys % 2)) ++ --keypos; ++ ++ ++ rblockno = cache->totsize; ++ rpage = ajBtreeCacheWrite(cache,rblockno); ++ rpage->pageno = cache->totsize; ++ cache->totsize += cache->pagesize; ++ rpage->dirty = BT_LOCK; ++ ++ lblockno = cache->totsize; ++ lpage = ajBtreeCacheWrite(cache,lblockno); ++ lpage->pageno = cache->totsize; ++ cache->totsize += cache->pagesize; ++ ++ lv = rblockno; ++ SBT_BLOCKNUMBER(rpage->buf,lv); ++ lv = lblockno; ++ SBT_BLOCKNUMBER(lpage->buf,lv); ++ ++ /* Comment this next block out after the beta test */ ++ if(!cache->slevel) ++ { ++ fprintf(stderr,"btreeSplitRootSec: Shouldn't get here\n"); ++ exit(0); ++ lv = zero; ++ SBT_LEFT(lpage->buf,lv); ++ lv = rblockno; ++ SBT_RIGHT(lpage->buf,lv); ++ lv = lblockno; ++ SBT_LEFT(rpage->buf,lv); ++ lv = zero; ++ SBT_RIGHT(rpage->buf,lv); ++ } ++ ++ btreeGetNumKeys(cache,rootbuf,&karray,&parray); ++ ++ /* Get key for root node and write new root node */ ++ tkarray[0] = karray[keypos]; ++ tparray[0] = lblockno; ++ tparray[1] = rblockno; ++ ++ ++ n = 1; ++ v = n; ++ SBT_NKEYS(rootbuf,v); ++ btreeWriteNumNode(cache,rootpage,tkarray,tparray,1); ++ right = (ajlong)(cache->slevel + 1); ++ SBT_RIGHT(rootbuf,right); ++ ++ rootpage->dirty = BT_LOCK; ++ ++ rbuf = rpage->buf; ++ lbuf = lpage->buf; ++ ++ if(cache->slevel) ++ nodetype = BT_INTERNAL; ++ else ++ nodetype = BT_LEAF; ++ ++ v = nodetype; ++ SBT_NODETYPE(rbuf,v); ++ v = nodetype; ++ SBT_NODETYPE(lbuf,v); ++ lv = overflow; ++ SBT_OVERFLOW(rbuf,lv); ++ lv = cache->secrootblock; ++ SBT_PREV(rbuf,lv); ++ lv = overflow; ++ SBT_OVERFLOW(lbuf,lv); ++ lv = cache->secrootblock; ++ SBT_PREV(lbuf,lv); ++ ++ for(i=0;i<keypos;++i) ++ { ++ tkarray[i] = karray[i]; ++ tparray[i] = parray[i]; ++ } ++ tparray[i] = parray[i]; ++ ++ n = i; ++ v = n; ++ SBT_NKEYS(lbuf,v); ++ btreeWriteNumNode(cache,lpage,tkarray,tparray,i); ++ ++ for(i=0;i<n+1;++i) ++ { ++ tpage = ajBtreeCacheRead(cache,tparray[i]); ++ tbuf = tpage->buf; ++ lv = lblockno; ++ SBT_PREV(tbuf,lv); ++ tpage->dirty = BT_DIRTY; ++ } ++ ++ for(i=keypos+1;i<nkeys;++i) ++ { ++ tkarray[i-(keypos+1)] = karray[i]; ++ tparray[i-(keypos+1)] = parray[i]; ++ } ++ tparray[i-(keypos+1)] = parray[i]; ++ ++ rkeyno = (nkeys-keypos) - 1; ++ v = rkeyno; ++ SBT_NKEYS(rbuf,v); ++ rpage->dirty = BT_DIRTY; ++ btreeWriteNumNode(cache,rpage,tkarray,tparray,rkeyno); ++ ++ for(i=0;i<rkeyno+1;++i) ++ { ++ tpage = ajBtreeCacheRead(cache,tparray[i]); ++ tbuf = tpage->buf; ++ lv = rblockno; ++ SBT_PREV(tbuf,lv); ++ tpage->dirty = BT_DIRTY; ++ } ++ ++ ++ ++cache->slevel; ++ ++ btreeDeallocSecArray(cache,array); ++ btreeDeallocSecArray(cache,array2); ++ ++ return; ++} ++ ++ ++ ++ ++/* @funcstatic btreeNumKeyShift ******************************************** ++** ++** Rebalance Nodes on insertion ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [u] tpage [AjPBtpage] page ++** ++** @return [void] ++** @@ ++******************************************************************************/ ++ ++static void btreeNumKeyShift(AjPBtcache cache, AjPBtpage tpage) ++{ ++ unsigned char *tbuf = NULL; ++ unsigned char *pbuf = NULL; ++ unsigned char *sbuf = NULL; ++ unsigned char *buf = NULL; ++ ++ AjPBtpage ppage = NULL; ++ AjPBtpage spage = NULL; ++ AjPBtpage page = NULL; ++ ++ ajint tkeys = 0; ++ ajint pkeys = 0; ++ ajint skeys = 0; ++ ajint order = 0; ++ ++ ajint i; ++ ++ ajlong parent = 0L; ++ ++ ajlong *kTarray = NULL; ++ ajlong *kParray = NULL; ++ ajlong *kSarray = NULL; ++ ajlong *pTarray = NULL; ++ ajlong *pParray = NULL; ++ ajlong *pSarray = NULL; ++ ++ ajint pkeypos = 0; ++ ajint minsize = 0; ++ ++ ajlong lv = 0L; ++ ++ AjPBtMem array = NULL; ++ AjPBtMem array2 = NULL; ++ AjPBtMem array3 = NULL; ++ ++ /* ajDebug("In btreeNumKeyShift\n"); */ ++ ++ tbuf = tpage->buf; ++ ++ GBT_PREV(tbuf,&parent); ++ GBT_NKEYS(tbuf,&tkeys); ++ ++ order = cache->sorder; ++ minsize = order / 2; ++ if(order % 2) ++ ++minsize; ++ ++ if(tkeys <= minsize) ++ return; ++ ++ ++ ppage = ajBtreeCacheRead(cache,parent); ++ pbuf = ppage->buf; ++ GBT_NKEYS(pbuf,&pkeys); ++ ++ array = btreeAllocSecArray(cache); ++ kParray = array->overflows; ++ pParray = array->parray; ++ ++ array2 = btreeAllocSecArray(cache); ++ kSarray = array2->overflows; ++ pSarray = array2->parray; ++ ++ array3 = btreeAllocSecArray(cache); ++ kTarray = array3->overflows; ++ pTarray = array3->parray; ++ ++ ++ btreeGetNumKeys(cache,tbuf,&kTarray,&pTarray); ++ GBT_NKEYS(tbuf,&tkeys); ++ ++ ++ btreeGetNumKeys(cache,pbuf,&kParray,&pParray); ++ i=0; ++ while(pParray[i] != tpage->pageno) ++ ++i; ++ ++ if(i) /* There is another leaf to the left */ ++ { ++ pkeypos = i-1; ++ spage = ajBtreeCacheRead(cache,pParray[pkeypos]); ++ sbuf = spage->buf; ++ GBT_NKEYS(sbuf,&skeys); ++ ++ } ++ ++ if(i && skeys != order-1) /* There is space in the left leaf */ ++ { ++ if(skeys) ++ btreeGetNumKeys(cache,sbuf,&kSarray,&pSarray); ++ ++ kSarray[skeys] = kParray[pkeypos]; ++ pSarray[skeys+1] = pTarray[0]; ++ ++skeys; ++ --tkeys; ++ kParray[pkeypos] = kTarray[0]; ++ for(i=0;i<tkeys;++i) ++ { ++ kTarray[i] = kTarray[i+1]; ++ pTarray[i] = pTarray[i+1]; ++ } ++ pTarray[i] = pTarray[i+1]; ++ pTarray[i+1] = 0L; ++ ++ btreeWriteNumNode(cache,spage,kSarray,pSarray,skeys); ++ btreeWriteNumNode(cache,tpage,kTarray,pTarray,tkeys); ++ btreeWriteNumNode(cache,ppage,kParray,pParray,pkeys); ++ if(!ppage->pageno) ++ ppage->dirty = BT_LOCK; ++ ++ page = ajBtreeCacheRead(cache,pSarray[skeys]); ++ buf = page->buf; ++ lv = spage->pageno; ++ SBT_PREV(buf,lv); ++ page->dirty = BT_DIRTY; ++ ++ ++ btreeDeallocSecArray(cache,array); ++ btreeDeallocSecArray(cache,array2); ++ btreeDeallocSecArray(cache,array3); ++ ++ return; ++ } ++ ++ ++ ++ if(i != pkeys) /* There is a right node */ ++ { ++ pkeypos = i; ++ spage = ajBtreeCacheRead(cache,pParray[pkeypos+1]); ++ sbuf = spage->buf; ++ GBT_NKEYS(sbuf,&skeys); ++ } ++ ++ ++ if(i != pkeys && skeys != order-1) /* Space in the right node */ ++ { ++ if(skeys) ++ btreeGetNumKeys(cache,sbuf,&kSarray,&pSarray); ++ ++ pSarray[skeys+1] = pSarray[skeys]; ++ for(i=skeys-1;i>-1;--i) ++ { ++ kSarray[i+1] = kSarray[i]; ++ pSarray[i+1] = pSarray[i]; ++ } ++ kSarray[0] = kParray[pkeypos]; ++ pSarray[0] = pTarray[tkeys]; ++ kParray[pkeypos] = kTarray[tkeys-1]; ++ ++skeys; ++ --tkeys; ++ pTarray[tkeys+1] = 0L; ++ ++ btreeWriteNumNode(cache,spage,kSarray,pSarray,skeys); ++ btreeWriteNumNode(cache,tpage,kTarray,pTarray,tkeys); ++ btreeWriteNumNode(cache,ppage,kParray,pParray,pkeys); ++ if(!ppage->pageno) ++ ppage->dirty = BT_LOCK; ++ ++ page = ajBtreeCacheRead(cache,pSarray[0]); ++ buf = page->buf; ++ lv = spage->pageno; ++ SBT_PREV(buf,lv); ++ page->dirty = BT_DIRTY; ++ ++ btreeDeallocSecArray(cache,array); ++ btreeDeallocSecArray(cache,array2); ++ btreeDeallocSecArray(cache,array3); ++ ++ return; ++ } ++ ++ ++ btreeDeallocSecArray(cache,array); ++ btreeDeallocSecArray(cache,array2); ++ btreeDeallocSecArray(cache,array3); ++ ++ return; ++} ++ ++ ++ ++ ++/* @funcstatic btreeNumInsertShift ******************************************** ++** ++** Rebalance buckets on insertion ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [u] retpage [AjPBtpage*] page ++** @param [r] key [const ajlong] key ++** ++** @return [ajlong] bucket block or 0L if shift not posible ++** @@ ++******************************************************************************/ ++ ++static ajlong btreeNumInsertShift(AjPBtcache cache, AjPBtpage *retpage, ++ ajlong key) ++{ ++ unsigned char *tbuf = NULL; ++ unsigned char *pbuf = NULL; ++ unsigned char *sbuf = NULL; ++ ++ AjPBtpage ppage = NULL; ++ AjPBtpage spage = NULL; ++ AjPBtpage tpage = NULL; ++ ++ ajint tkeys = 0; ++ ajint pkeys = 0; ++ ajint skeys = 0; ++ ajint order = 0; ++ ++ ajint i; ++ ajint n; ++ ++ ajlong parent = 0L; ++ ajlong blockno = 0L; ++ ++ ajlong *kTarray = NULL; ++ ajlong *kParray = NULL; ++ ajlong *kSarray = NULL; ++ ajlong *pTarray = NULL; ++ ajlong *pParray = NULL; ++ ajlong *pSarray = NULL; ++ ++ ajlong *karray = NULL; ++ ajlong *parray = NULL; ++ ++ ajint ppos = 0; ++ ajint pkeypos = 0; ++ ajint minsize = 0; ++ ++ AjPBtMem array = NULL; ++ AjPBtMem array2 = NULL; ++ AjPBtMem array3 = NULL; ++ ++ ++ ++ /* ajDebug("In btreeNumInsertShift\n"); */ ++ ++ ++ tpage = *retpage; ++ ++ tbuf = tpage->buf; ++ ++ GBT_PREV(tbuf,&parent); ++ GBT_NKEYS(tbuf,&tkeys); ++ ++ ++ order = cache->sorder; ++ minsize = order / 2; ++ if(order % 2) ++ ++minsize; ++ ++ if(tkeys <= minsize) ++ return 0L; ++ ++ ppage = ajBtreeCacheRead(cache,parent); ++ ++ ++ ++ pbuf = ppage->buf; ++ GBT_NKEYS(pbuf,&pkeys); ++ ++ ++ array = btreeAllocSecArray(cache); ++ kParray = array->overflows; ++ pParray = array->parray; ++ ++ array2 = btreeAllocSecArray(cache); ++ kSarray = array2->overflows; ++ pSarray = array2->parray; ++ ++ array3 = btreeAllocSecArray(cache); ++ kTarray = array3->overflows; ++ pTarray = array3->parray; ++ ++ ++ btreeGetNumKeys(cache,pbuf,&kParray,&pParray); ++ ++ i=0; ++ while(i!=pkeys && key >= kParray[i]) ++ ++i; ++ pkeypos = i; ++ ++ if(i==pkeys) ++ { ++ if(key < kParray[i-1]) ++ ppos = i-1; ++ else ++ ppos = i; ++ } ++ else ++ ppos = i; ++ ++ ++ if(ppos) /* There is another leaf to the left */ ++ { ++ spage = ajBtreeCacheRead(cache,pParray[ppos-1]); ++ sbuf = spage->buf; ++ GBT_NKEYS(sbuf,&skeys); ++ } ++ ++ if(i && skeys != order-1) /* There is space in the left leaf */ ++ { ++ /* ajDebug("Left shift\n"); */ ++ btreeGetNumKeys(cache,tbuf,&kTarray,&pTarray); ++ if(skeys) ++ btreeGetNumKeys(cache,sbuf,&kSarray,&pSarray); ++ ++ i = 0; ++ while(pParray[i] != tpage->pageno) ++ ++i; ++ --i; ++ ++ pkeypos = i; ++ ++ kSarray[skeys] = kParray[pkeypos]; ++ pSarray[skeys+1] = pTarray[0]; ++ ++skeys; ++ --tkeys; ++ kParray[pkeypos] = kTarray[0]; ++ for(i=0;i<tkeys;++i) ++ { ++ kTarray[i] = kTarray[i+1]; ++ pTarray[i] = pTarray[i+1]; ++ } ++ pTarray[i] = pTarray[i+1]; ++ pTarray[i+1] = 0L; ++ ++ btreeWriteNumNode(cache,spage,kSarray,pSarray,skeys); ++ btreeWriteNumNode(cache,tpage,kTarray,pTarray,tkeys); ++ btreeWriteNumNode(cache,ppage,kParray,pParray,pkeys); ++ if(!ppage->pageno) ++ ppage->dirty = BT_LOCK; ++ ++ i = 0; ++ while(i!=pkeys && key >= kParray[i]) ++ ++i; ++ if(i==pkeys) ++ { ++ if(key < kParray[i-1]) ++ blockno = pParray[i-1]; ++ else ++ blockno = pParray[i]; ++ } ++ else ++ blockno = pParray[i]; ++ ++ if(blockno == spage->pageno) ++ { ++ *retpage = spage; ++ karray = kSarray; ++ parray = pSarray; ++ n = skeys; ++ } ++ else ++ { ++ karray = kTarray; ++ parray = pTarray; ++ n = tkeys; ++ } ++ ++ ++ i = 0; ++ while(i!=n && key >= karray[i]) ++ ++i; ++ if(i==n) ++ { ++ if(key < karray[i-1]) ++ blockno = parray[i-1]; ++ else ++ blockno = parray[i]; ++ } ++ else ++ blockno = parray[i]; ++ ++ btreeDeallocSecArray(cache,array); ++ btreeDeallocSecArray(cache,array2); ++ btreeDeallocSecArray(cache,array3); ++ ++ /* ajDebug("... returns blockno (a) %Ld\n",blockno); */ ++ ++ return blockno; ++ } ++ ++ ++ if(ppos != pkeys) /* There is a right node */ ++ { ++ spage = ajBtreeCacheRead(cache,pParray[ppos+1]); ++ sbuf = spage->buf; ++ GBT_NKEYS(sbuf,&skeys); ++ } ++ ++ ++ /* Space in the right leaf */ ++ if(ppos != pkeys && skeys != order-1) ++ { ++ /* ajDebug("Right shift\n"); */ ++ btreeGetNumKeys(cache,tbuf,&kTarray,&pTarray); ++ btreeGetNumKeys(cache,sbuf,&kSarray,&pSarray); ++ ++ i = 0; ++ while(pParray[i] != tpage->pageno) ++ ++i; ++ pkeypos = i; ++ ++ pSarray[skeys+1] = pSarray[skeys]; ++ for(i=skeys-1;i>-1;--i) ++ { ++ kSarray[i+1] = kSarray[i]; ++ pSarray[i+1] = pSarray[i]; ++ } ++ kSarray[0] = kParray[pkeypos]; ++ pSarray[0] = pTarray[tkeys]; ++ kParray[pkeypos] = kTarray[tkeys-1]; ++ ++skeys; ++ --tkeys; ++ pTarray[tkeys+1] = 0L; ++ ++ btreeWriteNumNode(cache,spage,kSarray,pSarray,skeys); ++ btreeWriteNumNode(cache,tpage,kTarray,pTarray,tkeys); ++ btreeWriteNumNode(cache,ppage,kParray,pParray,pkeys); ++ if(!ppage->pageno) ++ ppage->dirty = BT_LOCK; ++ ++ i = 0; ++ while(i!=pkeys && key >= kParray[i]) ++ ++i; ++ if(i==pkeys) ++ { ++ if(key < kParray[i-1]) ++ blockno = pParray[i-1]; ++ else ++ blockno = pParray[i]; ++ } ++ else ++ blockno = pParray[i]; ++ ++ if(blockno == spage->pageno) ++ { ++ *retpage = spage; ++ karray = kSarray; ++ parray = pSarray; ++ n = skeys; ++ } ++ else ++ { ++ karray = kTarray; ++ parray = pTarray; ++ n = tkeys; ++ } ++ ++ i = 0; ++ while(i!=n && key >= karray[i]) ++ ++i; ++ if(i==n) ++ { ++ if(key < karray[i-1]) ++ blockno = parray[i-1]; ++ else ++ blockno = parray[i]; ++ } ++ else ++ blockno = parray[i]; ++ ++ btreeDeallocSecArray(cache,array); ++ btreeDeallocSecArray(cache,array2); ++ btreeDeallocSecArray(cache,array3); ++ ++ /* ajDebug("... returns blockno (b) %Ld\n",blockno); */ ++ ++ return blockno; ++ } ++ ++ ++ btreeDeallocSecArray(cache,array); ++ btreeDeallocSecArray(cache,array2); ++ btreeDeallocSecArray(cache,array3); ++ ++ /* ajDebug("... returns 0L\n"); */ ++ ++ return 0L; ++} ++ ++ ++ ++ ++void ajBtreeInsertNum(AjPBtcache cache, AjPBtNumId num, AjPBtpage page) ++{ ++ unsigned char *buf = NULL; ++ ajint order; ++ AjPBtMem array = NULL; ++ ajlong key; ++ AjPBtpage spage = NULL; ++ AjPBtpage parent = NULL; ++ ajint nkeys = 0; ++ ajint nodetype = 0; ++ ajlong *karray = NULL; ++ ajlong *parray = NULL; ++ AjPNumBucket lbucket = NULL; ++ AjPNumBucket rbucket = NULL; ++ ajlong lblockno; ++ ajlong rblockno; ++ ajlong blockno; ++ ajlong shift; ++ ajint n; ++ ajint i; ++ ++ /* ajDebug("In ajBtreeInsertNum\n"); */ ++ ++ key = num->offset; ++ ++ spage = ajBtreeNumFindInsert(cache,key); ++ buf = spage->buf; ++ ++ GBT_NKEYS(buf,&nkeys); ++ GBT_NODETYPE(buf,&nodetype); ++ ++ order = cache->sorder; ++ ++ array = btreeAllocSecArray(cache); ++ karray = array->overflows; ++ parray = array->parray; ++ ++ if(!nkeys) ++ { ++ lbucket = btreeNumBucketNew(0); ++ rbucket = btreeNumBucketNew(0); ++ ++ lblockno = cache->totsize; ++ btreeWriteNumBucket(cache,lbucket,lblockno); ++ rblockno = cache->totsize; ++ btreeWriteNumBucket(cache,rbucket,rblockno); ++ ++ parray[0] = lblockno; ++ parray[1] = rblockno; ++ karray[0] = key; ++ ++ btreeWriteNumNode(cache,spage,karray,parray,1); ++ ++ btreeNumBucketDel(&lbucket); ++ btreeNumBucketDel(&rbucket); ++ ++ btreeAddToNumBucket(cache,rblockno,num); ++ ++ btreeDeallocSecArray(cache,array); ++ ++ return; ++ } ++ ++ ++ btreeGetNumKeys(cache,buf,&karray,&parray); ++ i=0; ++ while(i != nkeys && key >= karray[i]) ++ ++i; ++ if(i==nkeys) ++ { ++ if(key < karray[i-1]) ++ blockno = parray[i-1]; ++ else ++ blockno = parray[i]; ++ } ++ else ++ blockno = parray[i]; ++ ++ if(nodetype != BT_ROOT) ++ if((shift = btreeNumInsertShift(cache,&spage,key))) ++ blockno = shift; ++ ++ ++ buf = spage->buf; ++ n = btreeNumInNumBucket(cache,blockno); ++ ++ if(n == cache->snperbucket) ++ { ++ if(btreeReorderNumBuckets(cache,spage)) ++ { ++ GBT_NKEYS(buf,&nkeys); ++ btreeGetNumKeys(cache,buf,&karray,&parray); ++ i=0; ++ while(i != nkeys && key >= karray[i]) ++ ++i; ++ if(i==nkeys) ++ { ++ if(key < karray[i-1]) ++ blockno = parray[i-1]; ++ else ++ blockno = parray[i]; ++ } ++ else ++ blockno = parray[i]; ++ } ++ else ++ { ++ parent = btreeNumSplitLeaf(cache,spage); ++ spage = ajBtreeNumFindInsert(cache,key); ++ buf = spage->buf; ++ ++ btreeGetNumKeys(cache,buf,&karray,&parray); ++ GBT_NKEYS(buf,&nkeys); ++ ++ i=0; ++ while(i != nkeys && key >= karray[i]) ++ ++i; ++ if(i==nkeys) ++ { ++ if(key < karray[i-1]) ++ blockno = parray[i-1]; ++ else ++ blockno = parray[i]; ++ } ++ else ++ blockno = parray[i]; ++ } ++ } ++ ++ btreeAddToNumBucket(cache,blockno,num); ++ ++ btreeDeallocSecArray(cache,array); ++ ++ ++cache->count; ++ ++ return; ++} ++ ++ ++ ++ ++/* @funcstatic btreeNumSplitLeaf ********************************************* ++** ++** Split a leaf and propagate up if necessary ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [u] spage [AjPBtpage] page ++** ++** @return [AjPBtpage] pointer to a parent page ++** @@ ++******************************************************************************/ ++ ++static AjPBtpage btreeNumSplitLeaf(AjPBtcache cache, AjPBtpage spage) ++{ ++ ajint nkeys = 0; ++ ajint order = 0; ++ ajint totalkeys = 0; ++ ajint bentries = 0; ++ ajint keylimit = 0; ++ ajint nodetype = 0; ++ ++ ajint rootnodetype = 0; ++ ++ ajint i; ++ ajint j; ++ ++ AjPBtpage lpage = NULL; ++ AjPBtpage rpage = NULL; ++ AjPBtpage page = NULL; ++ ++ ajlong mediankey = 0L; ++ ajlong mediangtr = 0L; ++ ajlong medianless = 0L; ++ ++ AjPBtNumId bid = NULL; ++ ++ unsigned char *buf = NULL; ++ unsigned char *lbuf = NULL; ++ unsigned char *rbuf = NULL; ++ ++ AjPList idlist = NULL; ++ ++ AjPNumBucket *buckets = NULL; ++ AjPNumBucket cbucket = NULL; ++ ++ ajlong *karray = NULL; ++ ajlong *parray = NULL; ++ ++ ajint keypos = 0; ++ ajint lno = 0; ++ ajint rno = 0; ++ ++ ajint bucketlimit = 0; ++ ajint maxnperbucket = 0; ++ ajint nperbucket = 0; ++ ajint bucketn = 0; ++ ajint count = 0; ++ ++ ajlong lblockno = 0L; ++ ajlong rblockno = 0L; ++ ajlong overflow = 0L; ++ ajlong prevsave = 0L; ++ ++ ajlong zero = 0L; ++ ajlong join = 0L; ++ ++ ajlong lv = 0L; ++ ajint v = 0; ++ ++ AjPBtMem array = NULL; ++ ++ ++ /* ajDebug("In btreeNumSplitLeaf\n"); */ ++ ++ order = cache->sorder; ++ nperbucket = cache->snperbucket; ++ ++ array = btreeAllocSecArray(cache); ++ karray = array->overflows; ++ parray = array->parray; ++ ++ buf = spage->buf; ++ lbuf = buf; ++ ++ GBT_NKEYS(buf,&nkeys); ++ GBT_NODETYPE(buf,&rootnodetype); ++ ++ if(rootnodetype == BT_ROOT) ++ { ++ /* ajDebug("Root leaf splitting\n"); */ ++ lblockno = cache->totsize; ++ lpage = ajBtreeCacheWrite(cache,lblockno); ++ lpage->pageno = cache->totsize; ++ cache->totsize += cache->pagesize; ++ lbuf = lpage->buf; ++ lv = cache->secrootblock; ++ SBT_PREV(lbuf,lv); ++ } ++ else ++ { ++ lblockno = spage->pageno; ++ lpage = spage; ++ } ++ ++ lpage->dirty = BT_LOCK; ++ ++ rblockno = cache->totsize; ++ rpage = ajBtreeCacheWrite(cache,rblockno); ++ rpage->pageno = cache->totsize; ++ cache->totsize += cache->pagesize; ++ rbuf = rpage->buf; ++ rpage->dirty = BT_LOCK; ++ ++ if(rootnodetype == BT_ROOT) ++ { ++ lv = zero; ++ SBT_RIGHT(rbuf,lv); ++ lv = zero; ++ SBT_LEFT(lbuf,lv); ++ } ++ else ++ { ++ GBT_RIGHT(lbuf,&join); ++ lv = join; ++ SBT_RIGHT(rbuf,lv); ++ } ++ lv = lblockno; ++ SBT_LEFT(rbuf,lv); ++ lv = rblockno; ++ SBT_RIGHT(lbuf,lv); ++ ++ ++ btreeGetNumKeys(cache,buf,&karray,&parray); ++ ++ ++ keylimit = nkeys+1; ++ AJCNEW0(buckets,keylimit); ++ for(i=0;i<keylimit;++i) ++ buckets[i] = btreeReadNumBucket(cache,parray[i]); ++ ++ idlist = ajListNew(); ++ for(i=0;i<keylimit;++i) ++ { ++ bentries = buckets[i]->Nentries; ++ for(j=0;j<bentries;++j) ++ ajListPush(idlist,(void *)buckets[i]->NumId[j]); ++ AJFREE(buckets[i]->NumId); ++ AJFREE(buckets[i]); ++ } ++ ++ ++ ++ ajListSort(idlist,btreeNumIdCompare); ++ AJFREE(buckets); ++ ++ totalkeys = ajListLength(idlist); ++ ++ keypos = totalkeys / 2; ++ ++ lno = keypos; ++ rno = totalkeys - lno; ++ ++ maxnperbucket = nperbucket >> 1; ++ ++maxnperbucket; ++ ++ cbucket = btreeNumBucketNew(maxnperbucket); ++ ++ bucketn = lno / maxnperbucket; ++ if(lno % maxnperbucket) ++ ++bucketn; ++ bucketlimit = bucketn - 1; ++ ++ ++ count = 0; ++ for(i=0;i<bucketlimit;++i) ++ { ++ cbucket->Nentries = 0; ++ for(j=0;j<maxnperbucket;++j) ++ { ++ ajListPop(idlist,(void **)&bid); ++ ++ cbucket->NumId[j]->offset = bid->offset; ++ cbucket->NumId[j]->refoffset = bid->refoffset; ++ cbucket->NumId[j]->dbno = bid->dbno; ++ ++ ++count; ++ ++cbucket->Nentries; ++ AJFREE(bid); ++ } ++ ajListPeek(idlist,(void **)&bid); ++ ++ karray[i] = bid->offset; ++ ++ if(!parray[i]) ++ parray[i] = cache->totsize; ++ btreeWriteNumBucket(cache,cbucket,parray[i]); ++ } ++ ++ cbucket->Nentries = 0; ++ ++ j = 0; ++ while(count != lno) ++ { ++ ajListPop(idlist,(void **)&bid); ++ ++ cbucket->NumId[j]->offset = bid->offset; ++ cbucket->NumId[j]->refoffset = bid->refoffset; ++ cbucket->NumId[j]->dbno = bid->dbno; ++ ++ ++j; ++ ++count; ++ ++ ++ ++cbucket->Nentries; ++ AJFREE(bid); ++ } ++ ++ if(!parray[i]) ++ parray[i] = cache->totsize; ++ btreeWriteNumBucket(cache,cbucket,parray[i]); ++ ++ nkeys = bucketn - 1; ++ v = nkeys; ++ SBT_NKEYS(lbuf,v); ++ nodetype = BT_LEAF; ++ v = nodetype; ++ SBT_NODETYPE(lbuf,v); ++ GBT_PREV(lbuf,&prevsave); ++ lpage->dirty = BT_DIRTY; ++ btreeWriteNumNode(cache,lpage,karray,parray,nkeys); ++ ++ ajListPeek(idlist,(void **)&bid); ++ mediankey = bid->offset; ++ ++ bucketn = rno / maxnperbucket; ++ if(rno % maxnperbucket) ++ ++bucketn; ++ bucketlimit = bucketn - 1; ++ ++ for(i=0;i<bucketlimit;++i) ++ { ++ cbucket->Nentries = 0; ++ for(j=0;j<maxnperbucket;++j) ++ { ++ ajListPop(idlist,(void **)&bid); ++ ++ cbucket->NumId[j]->offset = bid->offset; ++ cbucket->NumId[j]->refoffset = bid->refoffset; ++ cbucket->NumId[j]->dbno = bid->dbno; ++ ++ ++cbucket->Nentries; ++ AJFREE(bid); ++ } ++ ++ ajListPeek(idlist,(void **)&bid); ++ karray[i] = bid->offset; ++ ++ parray[i] = cache->totsize; ++ btreeWriteNumBucket(cache,cbucket,parray[i]); ++ } ++ ++ cbucket->Nentries = 0; ++ ++ j = 0; ++ while(ajListPop(idlist,(void**)&bid)) ++ { ++ cbucket->NumId[j]->offset = bid->offset; ++ cbucket->NumId[j]->refoffset = bid->refoffset; ++ cbucket->NumId[j]->dbno = bid->dbno; ++ ++j; ++ ++ ++ ++cbucket->Nentries; ++ AJFREE(bid); ++ } ++ ++ parray[i] = cache->totsize; ++ btreeWriteNumBucket(cache,cbucket,parray[i]); ++ ++ nkeys = bucketn - 1; ++ ++ v = nkeys; ++ SBT_NKEYS(rbuf,v); ++ nodetype = BT_LEAF; ++ v = nodetype; ++ SBT_NODETYPE(rbuf,v); ++ lv = prevsave; ++ SBT_PREV(rbuf,lv); ++ lv = overflow; ++ SBT_OVERFLOW(rbuf,lv); ++ ++ btreeWriteNumNode(cache,rpage,karray,parray,nkeys); ++ rpage->dirty = BT_DIRTY; ++ ++ cbucket->Nentries = maxnperbucket; ++ btreeNumBucketDel(&cbucket); ++ ajListDel(&idlist); ++ ++ ++ ++ medianless = lblockno; ++ mediangtr = rblockno; ++ ++ ++ if(rootnodetype == BT_ROOT) ++ { ++ karray[0] = mediankey; ++ parray[0]=lblockno; ++ parray[1]=rblockno; ++ nkeys = 1; ++ spage->dirty = BT_DIRTY; ++ btreeWriteNumNode(cache,spage,karray,parray,nkeys); ++ ++ ++cache->slevel; ++ lv = cache->slevel; ++ SBT_RIGHT(buf,lv); ++ spage->dirty = BT_LOCK; ++ ++ btreeDeallocSecArray(cache,array); ++ ++ return spage; ++ } ++ ++ btreeDeallocSecArray(cache,array); ++ ++ ++ page = ajBtreeCacheRead(cache,prevsave); ++ btreeNumInsertKey(cache,page,mediankey,medianless,mediangtr); ++ ++ ++ page = ajBtreeCacheRead(cache,prevsave); ++ ++ return page; ++} ++ ++ ++ ++ ++/* @func ajBtreeFreePriArray ******************************************* ++** ++** Free karray and parray arrays for a primary key ++** ++** @param [rw] cache [AjPBtcache] cache ++** ++** @return [void] ++** @@ ++******************************************************************************/ ++ ++void ajBtreeFreePriArray(AjPBtcache cache) ++{ ++ AjPBtMem p; ++ AjPBtMem next; ++ ajint i; ++ ++ /* ajDebug("In ajBtreeFreePriArray\n"); */ ++ ++ if(!cache->bmem) ++ return; ++ ++ p = cache->bmem; ++ next = p->next; ++ ++ while(next) ++ { ++ AJFREE(p->parray); ++ AJFREE(p->overflows); ++ for(i=0;i<cache->order;++i) ++ ajStrDel(&p->karray[i]); ++ AJFREE(p->karray); ++ AJFREE(p); ++ p = next; ++ next = p->next; ++ } ++ ++ ++ AJFREE(p->parray); ++ AJFREE(p->overflows); ++ for(i=0;i<cache->order;++i) ++ ajStrDel(&p->karray[i]); ++ AJFREE(p->karray); ++ AJFREE(p); ++ ++ cache->bmem = NULL; ++ cache->tmem = NULL; ++ ++ return; ++} ++ ++ ++ ++ ++/* @func ajBtreeFreeSecArray ******************************************* ++** ++** Free karray and parray arrays for a secondary key ++** ++** @param [rw] cache [AjPBtcache] cache ++** ++** @return [void] ++** @@ ++******************************************************************************/ ++ ++void ajBtreeFreeSecArray(AjPBtcache cache) ++{ ++ AjPBtMem p; ++ AjPBtMem next; ++ ajint i; ++ ++ /* ajDebug("In ajBtreeFreeSecArray\n"); */ ++ ++ if(!cache->bsmem) ++ return; ++ ++ p = cache->bsmem; ++ next = p->next; ++ ++ while(next) ++ { ++ AJFREE(p->parray); ++ AJFREE(p->overflows); ++ for(i=0;i<cache->sorder;++i) ++ ajStrDel(&p->karray[i]); ++ AJFREE(p->karray); ++ AJFREE(p); ++ ++ p = next; ++ next = p->next; ++ } ++ ++ ++ AJFREE(p->parray); ++ AJFREE(p->overflows); ++ for(i=0;i<cache->sorder;++i) ++ ajStrDel(&p->karray[i]); ++ AJFREE(p->karray); ++ AJFREE(p); ++ ++ cache->bsmem = NULL; ++ cache->tsmem = NULL; ++ ++ return; ++} ++ ++ ++ ++ ++/* @func ajBtreeHybLeafList ******************************************** ++** ++** Read the leaves of a secondary hybrid tree ++** ++** @param [u] cache [AjPBtcache] cache ++** @param [r] rootblock [ajlong] root page of secondary tree ++** @param [r] idname [AjPStr] id name ++** @param [r] list [AjPList] list to add BtIDs to ++** ++** @return [void] ++** @@ ++******************************************************************************/ ++ ++void ajBtreeHybLeafList(AjPBtcache cache, ajlong rootblock, AjPStr idname, ++ AjPList list) ++{ ++ AjPBtId id = NULL; ++ ++ ajint order; ++ ajlong *karray; ++ ajlong *parray; ++ AjPBtpage page; ++ unsigned char *buf; ++ ajint nodetype; ++ ajint i; ++ ajint j; ++ ajlong level = 0L; ++ ++ AjPNumBucket bucket; ++ ajint nkeys; ++ ajlong right; ++ AjPBtMem array = NULL; ++ ++ order = cache->sorder; ++ ++ array = btreeAllocSecArray(cache); ++ karray = array->overflows; ++ parray = array->parray; ++ ++ page = ajBtreeCacheRead(cache, rootblock); ++ buf = page->buf; ++ ++ GBT_RIGHT(buf,&level); ++ cache->slevel = (ajint) level; ++ ++ btreeGetNumKeys(cache,buf,&karray,&parray); ++ GBT_NODETYPE(buf,&nodetype); ++ ++ while(nodetype != BT_LEAF && cache->slevel != 0) ++ { ++ page = ajBtreeCacheRead(cache,parray[0]); ++ buf = page->buf; ++ btreeGetNumKeys(cache,buf,&karray,&parray); ++ GBT_NODETYPE(buf,&nodetype); ++ } ++ ++ do ++ { ++ GBT_NKEYS(buf,&nkeys); ++ for(i=0;i<nkeys+1;++i) ++ { ++ bucket = btreeReadNumBucket(cache,parray[i]); ++ for(j=0;j<bucket->Nentries;++j) ++ { ++ id = ajBtreeIdNew(); ++ ajStrAssS(&id->id,idname); ++ id->offset = bucket->NumId[j]->offset; ++ id->refoffset = bucket->NumId[j]->refoffset; ++ id->dbno = bucket->NumId[j]->dbno; ++ ajListPush(list, (void*)id); ++ } ++ btreeNumBucketDel(&bucket); ++ } ++ ++ right = 0L; ++ if(cache->slevel) ++ { ++ GBT_RIGHT(buf,&right); ++ if(right) ++ { ++ page = ajBtreeCacheRead(cache,right); ++ buf = page->buf; ++ btreeGetNumKeys(cache,buf,&karray,&parray); ++ } ++ } ++ } while(right); ++ ++ btreeDeallocSecArray(cache,array); ++ ++ return; ++} ++ diff --git a/biology/emboss/files/patch-ajindex.h b/biology/emboss/files/patch-ajindex.h new file mode 100644 index 000000000000..bcd3faa62f17 --- /dev/null +++ b/biology/emboss/files/patch-ajindex.h @@ -0,0 +1,170 @@ +--- ajax/ajindex.h.orig Mon Jan 23 12:17:10 2006 ++++ ajax/ajindex.h Thu Dec 22 13:12:32 2005 +@@ -67,6 +67,23 @@ + } AjOBtNode; + #define AjPBtNode AjOBtNode* + ++ ++ ++ ++typedef struct AjSBtMem ++{ ++ struct AjSBtMem *next; ++ struct AjSBtMem *prev; ++ AjPStr *karray; ++ ajlong *parray; ++ ajlong *overflows; ++ AjBool used; ++} AjOBtMem; ++#define AjPBtMem AjOBtMem* ++ ++ ++ ++ + /* @data AjPBtId *************************************************** + ** + ** Btree ID +@@ -137,6 +154,54 @@ + + + ++/* @data AjPBtNumId *************************************************** ++** ++** Btree ID ++** ++** @attr id [AjPStr] Unique ID ++** @attr dbno [ajint] Database file number ++** @attr dups [ajint] Duplicates ++** @attr offset [ajlong] Offset within database file (ftello) ++** @attr refoffset [ajlong] Offset within reference database file (ftello) ++******************************************************************************/ ++ ++typedef struct AjSBtNumId ++{ ++ ajint dbno; ++ ajlong offset; ++ ajlong refoffset; ++} AjOBtNumId; ++#define AjPBtNumId AjOBtNumId* ++ ++ ++ ++ ++/* @data AjPNumBucket *************************************************** ++** ++** Offset bucket structure on disc ++** ++** Key, filenumber, ftell ID, subkey page (char*, ajint, ajlong, ajlong) ++** ++** @attr NodeType [ajint] Node type ++** @attr Nentries [ajint] Number of entries ++** @attr Overflow [ajlong] Offset to overflow block ++** @attr offset [ajlong*] file offsets ++** @attr refoffset [ajlong*] ref file offsets ++** @attr offset [ajint*] database numbers ++******************************************************************************/ ++ ++typedef struct AjSNumBucket ++{ ++ ajint NodeType; ++ ajint Nentries; ++ ajlong Overflow; ++ AjPBtNumId *NumId; ++} AjONumBucket; ++#define AjPNumBucket AjONumBucket* ++ ++ ++ ++ + /* Database file name structure + ** + ** ajint order Order of B+tree +@@ -387,6 +452,10 @@ + ** @attr snperbucket [ajint] Undocumented + ** @attr secrootblock [ajlong] secondary tree root block + ** @attr kwlimit [ajint] Max length of secondary key ++** @attr bmem [AjPBtMem] primary memory allocation MRU bottom ++** @attr bsmem [AjPBtMem] secondary memory allocation MRU bottom ++** @attr tmem [AjPBtMem] primary memory allocation MRU top ++** @attr tsmem [AjPBtMem] secondary memory allocation MRU top + ******************************************************************************/ + + typedef struct AjSBtCache +@@ -409,6 +478,12 @@ + ajint snperbucket; + ajlong secrootblock; + ajint kwlimit; ++ ++ AjPBtMem bmem; ++ AjPBtMem tmem; ++ AjPBtMem bsmem; ++ AjPBtMem tsmem; ++ + } AjOBtcache; + #define AjPBtcache AjOBtcache* + +@@ -511,6 +586,32 @@ + + + ++/* @data AjPBtHybrid *************************************************** ++** ++** Btree ID ++** ++** @attr key1 [AjPStr] Unique ID ++** @attr dbno [ajint] Database file number ++** @attr dups [ajint] Duplicates ++** @attr offset [ajlong] Offset within database file (ftello)** @attr refoffset [ajlong] Offset within reference database file (ftello) ++** @attr refoffset [ajlong] Offset within reference database file (ftello) ++** @attr treeblock [ajlong] Secondary tree root page ++******************************************************************************/ ++ ++typedef struct AjSBtHybrid ++{ ++ AjPStr key1; ++ ajint dbno; ++ ajint dups; ++ ajlong offset; ++ ajlong refoffset; ++ ajlong treeblock; ++} AjOBtHybrid; ++#define AjPBtHybrid AjOBtHybrid* ++ ++ ++ ++ + AjPBtcache ajBtreeCacheNewC(const char *file, const char *ext, + const char *idir, const char *mode, + ajint pagesize, ajint order, ajint fill, +@@ -553,7 +654,8 @@ + AjBool ajBtreeReplaceId(AjPBtcache cache, const AjPBtId rid); + + ajint ajBtreeReadEntries(const char *filename, const char *indexdir, +- AjPStr **seqfiles, AjPStr **reffiles); ++ const char *directory, ++ AjPStr **seqfiles, AjPStr **reffiles); + void ajBtreeInsertDupId(AjPBtcache cache, AjPBtId id); + AjPList ajBtreeDupFromKey(AjPBtcache cache, const char *key); + +@@ -580,6 +682,21 @@ + void ajBtreeInsertKeyword(AjPBtcache cache, const AjPBtPri pri); + + void ajBtreeLockTest(AjPBtcache cache); ++ ++ ++ ++AjPBtpage ajBtreeHybFindInsert(AjPBtcache cache, const char *key); ++AjPBtpage ajBtreeNumFindInsert(AjPBtcache cache, const ajlong key); ++ ++void ajBtreeInsertNum(AjPBtcache cache, AjPBtNumId num, AjPBtpage page); ++void ajBtreeHybInsertId(AjPBtcache cache, AjPBtHybrid hyb); ++AjPBtHybrid ajBtreeHybNew(void); ++void ajBtreeHybDel(AjPBtHybrid *thys); ++void ajBtreeFreePriArray(AjPBtcache cache); ++void ajBtreeFreeSecArray(AjPBtcache cache); ++void ajBtreeHybLeafList(AjPBtcache cache, ajlong rootblock, ++ AjPStr idname, AjPList list); ++ + + #endif + diff --git a/biology/emboss/files/patch-ajpdb.c b/biology/emboss/files/patch-ajpdb.c new file mode 100644 index 000000000000..39b7300f56c0 --- /dev/null +++ b/biology/emboss/files/patch-ajpdb.c @@ -0,0 +1,67 @@ +--- ajax/ajpdb.c.orig Mon Jan 23 12:19:22 2006 ++++ ajax/ajpdb.c Fri Aug 19 13:49:12 2005 +@@ -1198,7 +1198,7 @@ + osstr = ajStrNew(); + xstr = ajStrNew(); + +- /* Start of main application loop */ ++ /* Start of main loop */ + while(ajFileReadLine(inf,&line)) + { + if(ajStrPrefixC(line,"XX")) +@@ -1313,6 +1313,8 @@ + + (ret)->Nchn = ncha; + (ret)->Ngp = ngrp; ++ ++ continue; + } + + +@@ -1382,7 +1384,11 @@ + ajStrToken(&token,&handle,NULL); + ajStrToInt(token,&mod); + if((mode == 0) && (mod!=1)) +- break; ++ { ++ /* break; */ ++ /* Discard remaining AT lines */ ++ while(ajFileReadLine(inf,&line) && ajStrPrefixC(line,"AT")); ++ } + + /* Chain number */ + ajStrToken(&token,&handle,NULL); +@@ -1463,7 +1469,10 @@ + "jison@hgmp.mrc.ac.uk"); + } + else ++ { + ajListPushApp((ret)->Chains[chn-1]->Atoms,(void *)atom); ++ } ++ continue; + } + + /* Parse residue line */ +@@ -1479,8 +1488,11 @@ + ajStrToken(&token,&handle,NULL); + ajStrToInt(token,&mod); + if((mode == 0) && (mod!=1)) +- break; +- ++ { ++ /* break;*/ ++ /* Discard remaining RE lines */ ++ while(ajFileReadLine(inf,&line) && ajStrPrefixC(line,"RE")); ++ } + /* Chain number */ + ajStrToken(&token,&handle,NULL); + ajStrToInt(token,&chn); +@@ -1585,6 +1597,8 @@ + ajStrToFloat(token,&residue->pol_rel); + + ajListPushApp((ret)->Chains[chn-1]->Residues,(void *)residue); ++ ++ continue; + } + } + /* End of main application loop */ diff --git a/biology/emboss/files/patch-ajseqdb.c b/biology/emboss/files/patch-ajseqdb.c new file mode 100644 index 000000000000..236f96035a0a --- /dev/null +++ b/biology/emboss/files/patch-ajseqdb.c @@ -0,0 +1,195 @@ +--- ajax/ajseqdb.c.orig Mon Jan 23 12:20:25 2006 ++++ ajax/ajseqdb.c Thu Dec 22 13:12:57 2005 +@@ -27,8 +27,7 @@ + ******************************************************************************/ + + #include "ajax.h" +-#include "ajmem.h" +-#include "ajfile.h" ++ + #include "limits.h" + #include <stdarg.h> + #include <sys/types.h> +@@ -3055,13 +3054,13 @@ + + + if(qryd->do_id) +- seqEmbossOpenCache(qry,ID_EXTENSION,&qryd->idcache); ++ seqEmbossOpenSecCache(qry,ID_EXTENSION,&qryd->idcache); + + if(qryd->do_ac) +- seqEmbossOpenCache(qry,AC_EXTENSION,&qryd->accache); ++ seqEmbossOpenSecCache(qry,AC_EXTENSION,&qryd->accache); + + if(qryd->do_sv) +- seqEmbossOpenCache(qry,SV_EXTENSION,&qryd->svcache); ++ seqEmbossOpenSecCache(qry,SV_EXTENSION,&qryd->svcache); + + if(qryd->do_kw) + { +@@ -3073,14 +3072,14 @@ + if(qryd->do_de) + { + if(!qryd->idcache) +- seqEmbossOpenCache(qry,ID_EXTENSION,&qryd->idcache); ++ seqEmbossOpenSecCache(qry,ID_EXTENSION,&qryd->idcache); + seqEmbossOpenSecCache(qry,DE_EXTENSION,&qryd->decache); + } + + if(qryd->do_tx) + { + if(!qryd->idcache) +- seqEmbossOpenCache(qry,ID_EXTENSION,&qryd->idcache); ++ seqEmbossOpenSecCache(qry,ID_EXTENSION,&qryd->idcache); + seqEmbossOpenSecCache(qry,TX_EXTENSION,&qryd->txcache); + } + +@@ -3149,6 +3148,7 @@ + if(qryd->nentries == -1) + qryd->nentries = ajBtreeReadEntries(ajStrStr(qry->DbAlias), + ajStrStr(qry->IndexDir), ++ ajStrStr(qry->Directory), + &qryd->files,&qryd->reffiles); + + *cache = ajBtreeCacheNewC(ajStrStr(qry->DbAlias),ext, +@@ -3209,6 +3209,7 @@ + if(qryd->nentries == -1) + qryd->nentries = ajBtreeReadEntries(ajStrStr(qry->DbAlias), + ajStrStr(qry->IndexDir), ++ ajStrStr(qry->Directory), + &qryd->files,&qryd->reffiles); + + +@@ -3270,6 +3271,7 @@ + + + n = ajBtreeReadEntries(qry->DbAlias->Ptr,qry->IndexDir->Ptr, ++ qry->Directory->Ptr, + &filestrings,&reffilestrings); + + +@@ -3365,7 +3367,13 @@ + { + entry = ajBtreeIdFromKey(qryd->idcache,ajStrStr(qry->Id)); + if(entry) +- ajListPushApp(qryd->List,(void *)entry); ++ { ++ if(!entry->dups) ++ ajListPushApp(qryd->List,(void *)entry); ++ else ++ ajBtreeHybLeafList(qryd->idcache,entry->offset, ++ entry->id,qryd->List); ++ } + } + + +@@ -3373,14 +3381,26 @@ + { + entry = ajBtreeIdFromKey(qryd->accache,ajStrStr(qry->Acc)); + if(entry) +- ajListPushApp(qryd->List,(void *)entry); ++ { ++ if(!entry->dups) ++ ajListPushApp(qryd->List,(void *)entry); ++ else ++ ajBtreeHybLeafList(qryd->accache,entry->offset, ++ entry->id,qryd->List); ++ } + } + + if((qryd->do_sv && !entry) && (qryd->do_sv && qryd->svcache)) + { + entry = ajBtreeIdFromKey(qryd->svcache,ajStrStr(qry->Gi)); + if(entry) +- ajListPushApp(qryd->List,(void *)entry); ++ { ++ if(!entry->dups) ++ ajListPushApp(qryd->List,(void *)entry); ++ else ++ ajBtreeHybLeafList(qryd->svcache,entry->offset, ++ entry->id,qryd->List); ++ } + } + + if(!ajListLength(qryd->List)) +@@ -3512,13 +3532,25 @@ + qryd = qry->QryData; + + if(qryd->do_id && qryd->idcache) ++ { ++ ajBtreeFreeSecArray(qryd->idcache); + ajBtreeCacheDel(&qryd->idcache); ++ } ++ + + if(qryd->do_ac && qryd->accache) ++ { ++ ajBtreeFreeSecArray(qryd->accache); + ajBtreeCacheDel(&qryd->accache); ++ } ++ + + if(qryd->do_sv && qryd->svcache) ++ { ++ ajBtreeFreeSecArray(qryd->svcache); + ajBtreeCacheDel(&qryd->svcache); ++ } ++ + + if(qryd->do_kw && qryd->kwcache) + ajBtreeCacheDel(&qryd->kwcache); +@@ -3608,7 +3640,14 @@ + ajStrToLower(&kwid); + id = ajBtreeIdFromKey(qryd->idcache,ajStrStr(kwid)); + if(id) +- ajListPushApp(qryd->List,(void *)id); ++ { ++ if(!id->dups) ++ ajListPushApp(qryd->List,(void *)id); ++ else ++ ajBtreeHybLeafList(qryd->idcache,id->offset, ++ id->id,qryd->List); ++ } ++ ajStrDel(&kwid); + } + ajListDel(&tlist); + ajBtreePriDel(&pri); +@@ -3637,7 +3676,13 @@ + ajStrToLower(&kwid); + id = ajBtreeIdFromKey(qryd->idcache,ajStrStr(kwid)); + if(id) +- ajListPushApp(qryd->List,(void *)id); ++ { ++ if(!id->dups) ++ ajListPushApp(qryd->List,(void *)id); ++ else ++ ajBtreeHybLeafList(qryd->idcache,id->offset, ++ id->id,qryd->List); ++ } + ajStrDel(&kwid); + } + ajListDel(&tlist); +@@ -3667,7 +3712,14 @@ + ajStrToLower(&kwid); + id = ajBtreeIdFromKey(qryd->idcache,ajStrStr(kwid)); + if(id) +- ajListPushApp(qryd->List,(void *)id); ++ { ++ if(!id->dups) ++ ajListPushApp(qryd->List,(void *)id); ++ else ++ ajBtreeHybLeafList(qryd->idcache,id->offset, ++ id->id,qryd->List); ++ } ++ ajStrDel(&kwid); + } + ajListDel(&tlist); + ajBtreePriDel(&pri); +@@ -3832,6 +3884,7 @@ + qryd = qry->QryData; + i = -1; + ajBtreeReadEntries(qry->DbAlias->Ptr,qry->IndexDir->Ptr, ++ qry->Directory->Ptr, + &qryd->files,&qryd->reffiles); + + seqin->Single = ajTrue; diff --git a/biology/emboss/files/patch-dbxfasta.c b/biology/emboss/files/patch-dbxfasta.c new file mode 100644 index 000000000000..66f97c17c6df --- /dev/null +++ b/biology/emboss/files/patch-dbxfasta.c @@ -0,0 +1,89 @@ +--- emboss/dbxfasta.c.orig Mon Jan 23 12:22:12 2006 ++++ emboss/dbxfasta.c Wed Jan 4 16:31:37 2006 +@@ -2,7 +2,7 @@ + ** + ** Index flatfile databases + ** +-** @author: Copyright (C) Alan Bleasby (ableasby@hgmp.mrc.ac.uk) ++** @author Copyright (C) Alan Bleasby (ableasby@hgmp.mrc.ac.uk) + ** @@ + ** + ** This program is free software; you can redistribute it and/or +@@ -77,6 +77,7 @@ + + AjPBtId idobj = NULL; + AjPBtPri priobj = NULL; ++ AjPBtHybrid hyb = NULL; + + + AjPRegexp typeexp = NULL; +@@ -102,7 +103,8 @@ + + idobj = ajBtreeIdNew(); + priobj = ajBtreePriNew(); +- ++ hyb = ajBtreeHybNew(); ++ + + nfields = embBtreeSetFields(entry,fieldarray); + embBtreeSetDbInfo(entry,dbname,dbrs,datestr,release,dbtype,directory, +@@ -134,22 +136,22 @@ + if(entry->do_id) + { + ajStrToLower(&entry->id); +- ajStrAssS(&idobj->id,entry->id); +- idobj->dbno = i; +- idobj->offset = entry->fpos; +- idobj->dups = 0; +- ajBtreeInsertId(entry->idcache,idobj); ++ ajStrAssS(&hyb->key1,entry->id); ++ hyb->dbno = i; ++ hyb->offset = entry->fpos; ++ hyb->dups = 0; ++ ajBtreeHybInsertId(entry->idcache,hyb); + } + + if(entry->do_accession) + while(ajListPop(entry->ac,(void **)&word)) + { + ajStrToLower(&word); +- ajStrAssS(&idobj->id,word); +- idobj->dbno = i; +- idobj->offset = entry->fpos; +- idobj->dups = 0; +- ajBtreeInsertId(entry->accache,idobj); ++ ajStrAssS(&hyb->key1,word); ++ hyb->dbno = i; ++ hyb->offset = entry->fpos; ++ hyb->dups = 0; ++ ajBtreeHybInsertId(entry->accache,hyb); + ajStrDel(&word); + } + +@@ -157,11 +159,11 @@ + while(ajListPop(entry->sv,(void **)&word)) + { + ajStrToLower(&word); +- ajStrAssS(&idobj->id,word); +- idobj->dbno = i; +- idobj->offset = entry->fpos; +- idobj->dups = 0; +- ajBtreeInsertId(entry->svcache,idobj); ++ ajStrAssS(&hyb->key1,word); ++ hyb->dbno = i; ++ hyb->offset = entry->fpos; ++ hyb->dups = 0; ++ ajBtreeHybInsertId(entry->svcache,hyb); + ajStrDel(&word); + } + +@@ -197,7 +199,8 @@ + + ajBtreeIdDel(&idobj); + ajBtreePriDel(&priobj); +- ++ ajBtreeHybDel(&hyb); ++ + ajExit(); + + return 0; diff --git a/biology/emboss/files/patch-dbxflat.c b/biology/emboss/files/patch-dbxflat.c new file mode 100644 index 000000000000..f89837097c0e --- /dev/null +++ b/biology/emboss/files/patch-dbxflat.c @@ -0,0 +1,146 @@ +--- emboss/dbxflat.c.orig Mon Jan 23 12:22:23 2006 ++++ emboss/dbxflat.c Sun Jan 1 07:29:09 2006 +@@ -2,7 +2,7 @@ + ** + ** Index flatfile databases + ** +-** @author: Copyright (C) Alan Bleasby (ableasby@hgmp.mrc.ac.uk) ++** @author Copyright (C) Alan Bleasby (ableasby@hgmp.mrc.ac.uk) + ** @@ + ** + ** This program is free software; you can redistribute it and/or +@@ -106,6 +106,7 @@ + + AjPBtId idobj = NULL; + AjPBtPri priobj = NULL; ++ AjPBtHybrid hyb = NULL; + + + embInit("dbxflat", argc, argv); +@@ -126,7 +127,8 @@ + + idobj = ajBtreeIdNew(); + priobj = ajBtreePriNew(); +- ++ hyb = ajBtreeHybNew(); ++ + + nfields = embBtreeSetFields(entry,fieldarray); + embBtreeSetDbInfo(entry,dbname,dbrs,datestr,release,dbtype,directory, +@@ -156,11 +158,11 @@ + if(entry->do_id) + { + ajStrToLower(&entry->id); +- ajStrAssS(&idobj->id,entry->id); +- idobj->dbno = i; +- idobj->offset = entry->fpos; +- idobj->dups = 0; +- ajBtreeInsertId(entry->idcache,idobj); ++ ajStrAssS(&hyb->key1,entry->id); ++ hyb->dbno = i; ++ hyb->offset = entry->fpos; ++ hyb->dups = 0; ++ ajBtreeHybInsertId(entry->idcache,hyb); + } + + if(entry->do_accession) +@@ -168,11 +170,11 @@ + while(ajListPop(entry->ac,(void **)&word)) + { + ajStrToLower(&word); +- ajStrAssS(&idobj->id,word); +- idobj->dbno = i; +- idobj->offset = entry->fpos; +- idobj->dups = 0; +- ajBtreeInsertId(entry->accache,idobj); ++ ajStrAssS(&hyb->key1,word); ++ hyb->dbno = i; ++ hyb->offset = entry->fpos; ++ hyb->dups = 0; ++ ajBtreeHybInsertId(entry->accache,hyb); + ajStrDel(&word); + } + } +@@ -182,11 +184,11 @@ + while(ajListPop(entry->sv,(void **)&word)) + { + ajStrToLower(&word); +- ajStrAssS(&idobj->id,word); +- idobj->dbno = i; +- idobj->offset = entry->fpos; +- idobj->dups = 0; +- ajBtreeInsertId(entry->svcache,idobj); ++ ajStrAssS(&hyb->key1,word); ++ hyb->dbno = i; ++ hyb->offset = entry->fpos; ++ hyb->dups = 0; ++ ajBtreeHybInsertId(entry->svcache,hyb); + ajStrDel(&word); + } + } +@@ -231,15 +233,11 @@ + } + } + +- +- +- +- +- + ajFileClose(&inf); + } + + ++ + embBtreeDumpParameters(entry); + embBtreeCloseCaches(entry); + +@@ -256,7 +254,8 @@ + + ajBtreeIdDel(&idobj); + ajBtreePriDel(&priobj); +- ++ ajBtreeHybDel(&hyb); ++ + ajExit(); + + return 0; +@@ -306,11 +305,13 @@ + } + + if(entry->do_sv) +- if(ajStrPrefixC(line,"SV")) ++ if(ajStrPrefixC(line,"SV") || ++ ajStrPrefixC(line,"IV")) /* emblcds database format */ + embBtreeEmblAC(line,entry->sv); + + if(entry->do_accession) +- if(ajStrPrefixC(line,"AC")) ++ if(ajStrPrefixC(line,"AC") || ++ ajStrPrefixC(line,"PA")) /* emblcds database format */ + embBtreeEmblAC(line,entry->ac); + + if(entry->do_keyword) +@@ -356,12 +357,10 @@ + + line = ajStrNewC(""); + sumline = ajStrNew(); ++ + + while(!ajStrPrefixC(line,"//") && ret) + { +- pos = ajFileTell(inf); +- +- + if(ajStrPrefixC(line,"LOCUS")) + { + entry->fpos = pos; +@@ -423,7 +422,7 @@ + } + + +- ++ pos = ajFileTell(inf); + + if(!ajFileReadLine(inf,&line)) + ret = ajFalse; diff --git a/biology/emboss/files/patch-dbxgcg.c b/biology/emboss/files/patch-dbxgcg.c new file mode 100644 index 000000000000..5856843c57e8 --- /dev/null +++ b/biology/emboss/files/patch-dbxgcg.c @@ -0,0 +1,96 @@ +--- emboss/dbxgcg.c.orig Mon Jan 23 12:22:30 2006 ++++ emboss/dbxgcg.c Thu Dec 22 13:13:18 2005 +@@ -2,7 +2,7 @@ + ** + ** Index flatfile databases + ** +-** @author: Copyright (C) Alan Bleasby (ableasby@hgmp.mrc.ac.uk) ++** @author Copyright (C) Alan Bleasby (ableasby@hgmp.mrc.ac.uk) + ** @@ + ** + ** This program is free software; you can redistribute it and/or +@@ -136,6 +136,7 @@ + + AjPBtId idobj = NULL; + AjPBtPri priobj = NULL; ++ AjPBtHybrid hyb = NULL; + + + embInit("dbxgcg", argc, argv); +@@ -156,7 +157,8 @@ + + idobj = ajBtreeIdNew(); + priobj = ajBtreePriNew(); +- ++ hyb = ajBtreeHybNew(); ++ + + nfields = embBtreeSetFields(entry,fieldarray); + embBtreeSetDbInfo(entry,dbname,dbrs,datestr,release,dbtype,directory, +@@ -204,12 +206,12 @@ + if(entry->do_id) + { + ajStrToLower(&entry->id); +- ajStrAssS(&idobj->id,entry->id); +- idobj->dbno = i; +- idobj->offset = entry->fpos; +- idobj->refoffset = entry->reffpos; +- idobj->dups = 0; +- ajBtreeInsertId(entry->idcache,idobj); ++ ajStrAssS(&hyb->key1,entry->id); ++ hyb->dbno = i; ++ hyb->offset = entry->fpos; ++ hyb->refoffset = entry->reffpos; ++ hyb->dups = 0; ++ ajBtreeHybInsertId(entry->idcache,hyb); + } + + if(entry->do_accession) +@@ -217,12 +219,12 @@ + while(ajListPop(entry->ac,(void **)&word)) + { + ajStrToLower(&word); +- ajStrAssS(&idobj->id,word); +- idobj->dbno = i; +- idobj->offset = entry->fpos; +- idobj->refoffset = entry->reffpos; +- idobj->dups = 0; +- ajBtreeInsertId(entry->accache,idobj); ++ ajStrAssS(&hyb->key1,word); ++ hyb->dbno = i; ++ hyb->offset = entry->fpos; ++ hyb->refoffset = entry->reffpos; ++ hyb->dups = 0; ++ ajBtreeHybInsertId(entry->accache,hyb); + ajStrDel(&word); + } + } +@@ -232,12 +234,12 @@ + while(ajListPop(entry->sv,(void **)&word)) + { + ajStrToLower(&word); +- ajStrAssS(&idobj->id,word); +- idobj->dbno = i; +- idobj->offset = entry->fpos; +- idobj->refoffset = entry->reffpos; +- idobj->dups = 0; +- ajBtreeInsertId(entry->svcache,idobj); ++ ajStrAssS(&hyb->key1,word); ++ hyb->dbno = i; ++ hyb->offset = entry->fpos; ++ hyb->refoffset = entry->reffpos; ++ hyb->dups = 0; ++ ajBtreeHybInsertId(entry->svcache,hyb); + ajStrDel(&word); + } + } +@@ -303,7 +305,8 @@ + + ajBtreeIdDel(&idobj); + ajBtreePriDel(&priobj); +- ++ ajBtreeHybDel(&hyb); ++ + ajExit(); + + return 0; diff --git a/biology/emboss/files/patch-embindex.c b/biology/emboss/files/patch-embindex.c new file mode 100644 index 000000000000..25569485eca7 --- /dev/null +++ b/biology/emboss/files/patch-embindex.c @@ -0,0 +1,115 @@ +--- nucleus/embindex.c.orig Mon Jan 23 12:24:54 2006 ++++ nucleus/embindex.c Thu Dec 22 13:12:38 2005 +@@ -973,15 +973,14 @@ + if(!do_ref) + { + ajListPop(entry->files,(void **)&tmpstr); +- ajFmtPrintF(entfile,"%S%S\n",entry->directory,tmpstr); ++ ajFmtPrintF(entfile,"%S\n",tmpstr); + ajListPushApp(entry->files,(void *)tmpstr); + } + else + { + ajListPop(entry->files,(void **)&tmpstr); + ajListPop(entry->reffiles,(void **)&refstr); +- ajFmtPrintF(entfile,"%S%S %S%S\n",entry->directory,tmpstr, +- entry->directory,refstr); ++ ajFmtPrintF(entfile,"%S %S\n",tmpstr, refstr); + ajListPushApp(entry->files,(void *)tmpstr); + ajListPushApp(entry->reffiles,(void *)refstr); + } +@@ -1150,7 +1149,15 @@ + entry->desecfill = (entry->pagesize - 16) / (entry->idlen + 4); + entry->txsecfill = (entry->pagesize - 16) / (entry->idlen + 4); + ++ entry->idsecorder = (entry->pagesize - 60) / 24; ++ entry->idsecfill = (entry->pagesize - 60) / 20; + ++ entry->acsecorder = (entry->pagesize - 60) / 24; ++ entry->acsecfill = (entry->pagesize - 60) / 20; ++ ++ entry->svsecorder = (entry->pagesize - 60) / 24; ++ entry->svsecfill = (entry->pagesize - 60) / 20; ++ + ajStrDel(&value); + + return; +@@ -1183,28 +1190,38 @@ + + if(entry->do_id) + { +- entry->idcache = ajBtreeCacheNewC(basenam,ID_EXTENSION,idir,"w+", +- entry->pagesize, entry->idorder, +- entry->idfill, level, +- entry->cachesize); ++ entry->idcache = ajBtreeSecCacheNewC(basenam,ID_EXTENSION,idir,"w+", ++ entry->pagesize, entry->idorder, ++ entry->idfill, level, ++ entry->cachesize, ++ entry->idsecorder, slevel, ++ entry->idsecfill, count, ++ entry->kwlen); + ajBtreeCreateRootNode(entry->idcache,0L); + } + + if(entry->do_accession) + { +- entry->accache = ajBtreeCacheNewC(basenam,AC_EXTENSION,idir,"w+", +- entry->pagesize, entry->acorder, +- entry->acfill, level, +- entry->cachesize); ++ entry->accache = ajBtreeSecCacheNewC(basenam,AC_EXTENSION,idir,"w+", ++ entry->pagesize, ++ entry->acorder, entry->acfill, ++ level, ++ entry->cachesize, ++ entry->acsecorder, slevel, ++ entry->acsecfill, count, ++ entry->kwlen); + ajBtreeCreateRootNode(entry->accache,0L); + } + + if(entry->do_sv) + { +- entry->svcache = ajBtreeCacheNewC(basenam,SV_EXTENSION,idir,"w+", +- entry->pagesize, entry->svorder, +- entry->svfill, level, +- entry->cachesize); ++ entry->svcache = ajBtreeSecCacheNewC(basenam,SV_EXTENSION,idir,"w+", ++ entry->pagesize, entry->svorder, ++ entry->svfill, level, ++ entry->cachesize, ++ entry->svsecorder, slevel, ++ entry->svsecfill, count, ++ entry->kwlen); + ajBtreeCreateRootNode(entry->svcache,0L); + } + +@@ -1270,18 +1287,27 @@ + + if(entry->do_id) + { ++ ajBtreeFreePriArray(entry->idcache); ++ ajBtreeFreeSecArray(entry->idcache); ++ + ajBtreeCacheSync(entry->idcache,0L); + ajBtreeCacheDel(&entry->idcache); + } + + if(entry->do_accession) + { ++ ajBtreeFreePriArray(entry->accache); ++ ajBtreeFreeSecArray(entry->accache); ++ + ajBtreeCacheSync(entry->accache,0L); + ajBtreeCacheDel(&entry->accache); + } + + if(entry->do_sv) + { ++ ajBtreeFreePriArray(entry->svcache); ++ ajBtreeFreeSecArray(entry->svcache); ++ + ajBtreeCacheSync(entry->svcache,0L); + ajBtreeCacheDel(&entry->svcache); + } diff --git a/biology/emboss/files/patch-embindex.h b/biology/emboss/files/patch-embindex.h new file mode 100644 index 000000000000..3714ede97e10 --- /dev/null +++ b/biology/emboss/files/patch-embindex.h @@ -0,0 +1,96 @@ +--- nucleus/embindex.h.orig Mon Jan 23 12:24:46 2006 ++++ nucleus/embindex.h Thu Dec 22 13:12:44 2005 +@@ -16,6 +16,76 @@ + #define BTREE_DEF_CACHESIZE 100 + #define BTREE_DEF_PAGESIZE 2048 + ++/* @data EmbPBtreeEntry ******************************************************* ++** ++** Index tree entries ++** ++** @alias EmbSBtreeEntry ++** ++** @attr do_id [AjBool] Undocumented ++** @attr do_accession [AjBool] Undocumented ++** @attr do_sv [AjBool] Undocumented ++** @attr do_description [AjBool] Undocumented ++** @attr do_keyword [AjBool] Undocumented ++** @attr do_taxonomy [AjBool] Undocumented ++** @attr dbname [AjPStr] Undocumented ++** @attr dbrs [AjPStr] Undocumented ++** @attr release [AjPStr] Undocumented ++** @attr date [AjPStr] Undocumented ++** @attr dbtype [AjPStr] Undocumented ++** @attr directory [AjPStr] Undocumented ++** @attr idirectory [AjPStr] Undocumented ++** @attr files [AjPList] Undocumented ++** @attr reffiles [AjPList] Undocumented ++** @attr nfiles [ajint] Undocumented ++** @attr cachesize [ajint] Undocumented ++** @attr pagesize [ajint] Undocumented ++** @attr idlen [ajint] Undocumented ++** @attr aclen [ajint] Undocumented ++** @attr svlen [ajint] Undocumented ++** @attr kwlen [ajint] Undocumented ++** @attr delen [ajint] Undocumented ++** @attr txlen [ajint] Undocumented ++** @attr idorder [ajint] Undocumented ++** @attr idfill [ajint] Undocumented ++** @attr idsecorder [ajint] Undocumented ++** @attr idsecfill [ajint] Undocumented ++** @attr acorder [ajint] Undocumented ++** @attr acfill [ajint] Undocumented ++** @attr acsecorder [ajint] Undocumented ++** @attr acsecfill [ajint] Undocumented ++** @attr svorder [ajint] Undocumented ++** @attr svfill [ajint] Undocumented ++** @attr svsecorder [ajint] Undocumented ++** @attr svsecfill [ajint] Undocumented ++** @attr kworder [ajint] Undocumented ++** @attr kwfill [ajint] Undocumented ++** @attr kwsecorder [ajint] Undocumented ++** @attr kwsecfill [ajint] Undocumented ++** @attr deorder [ajint] Undocumented ++** @attr defill [ajint] Undocumented ++** @attr desecorder [ajint] Undocumented ++** @attr desecfill [ajint] Undocumented ++** @attr txorder [ajint] Undocumented ++** @attr txfill [ajint] Undocumented ++** @attr txsecorder [ajint] Undocumented ++** @attr txsecfill [ajint] Undocumented ++** @attr idcache [AjPBtcache] Undocumented ++** @attr accache [AjPBtcache] Undocumented ++** @attr svcache [AjPBtcache] Undocumented ++** @attr kwcache [AjPBtcache] Undocumented ++** @attr decache [AjPBtcache] Undocumented ++** @attr txcache [AjPBtcache] Undocumented ++** @attr fpos [ajlong] Undocumented ++** @attr reffpos [ajlong] Undocumented ++** @attr id [AjPStr] Undocumented ++** @attr ac [AjPList] Undocumented ++** @attr sv [AjPList] Undocumented ++** @attr tx [AjPList] Undocumented ++** @attr kw [AjPList] Undocumented ++** @attr de [AjPList] Undocumented ++******************************************************************************/ ++ + typedef struct EmbSBtreeEntry + { + AjBool do_id; +@@ -48,10 +118,16 @@ + + ajint idorder; + ajint idfill; ++ ajint idsecorder; ++ ajint idsecfill; + ajint acorder; + ajint acfill; ++ ajint acsecorder; ++ ajint acsecfill; + ajint svorder; + ajint svfill; ++ ajint svsecorder; ++ ajint svsecfill; + + ajint kworder; + ajint kwfill; diff --git a/biology/emboss/files/patch-emboss.default.template b/biology/emboss/files/patch-emboss.default.template new file mode 100644 index 000000000000..04ee586b4bfb --- /dev/null +++ b/biology/emboss/files/patch-emboss.default.template @@ -0,0 +1,20 @@ +--- emboss/emboss.default.template.orig Wed Feb 8 00:43:42 2006 ++++ emboss/emboss.default.template Wed Feb 8 00:40:34 2006 +@@ -4,7 +4,7 @@ + # By default this is /usr/local/share/EMBOSS/test but the directory can + # be changed with --prefix when you configure EMBOSS. + +-# SET emboss_tempdata path_to_directory_$EMBOSS/test ++# SET emboss_tempdata %%DATADIR%%/test + + # Proxy - set this if any databases are accessed through a proxy web server. + # Turn off in the DB definition with proxy: ":" for any +@@ -15,7 +15,7 @@ + # Logfile - set this to a file that any user can append to + # and EMBOSS applications will automatically write log information + +-# SET emboss_logfile /packages/emboss/emboss/log ++# SET emboss_logfile /var/log/emboss.log + + # Pagesize - this is the size of disc page blocks and is + # required by the 'dbx' indexing programs and 'method: emboss' diff --git a/biology/emboss/files/patch-marscan.c b/biology/emboss/files/patch-marscan.c new file mode 100644 index 000000000000..85481fedfe78 --- /dev/null +++ b/biology/emboss/files/patch-marscan.c @@ -0,0 +1,72 @@ +--- emboss/marscan.c.orig Mon Jan 23 11:36:36 2006 ++++ emboss/marscan.c Mon Jan 23 08:56:35 2006 +@@ -1,7 +1,7 @@ + /* @source marscan application + ** + ** Finds MAR/SAR sites in nucleic sequences +-** @author: Copyright (C) Gary Williams (gwilliam@hgmp.mrc.ac.uk) ++** @author Copyright (C) Gary Williams (gwilliam@hgmp.mrc.ac.uk) + ** @@ + ** + ** This program is free software; you can redistribute it and/or +@@ -249,33 +249,41 @@ + amino8rev, carboxyl8rev, buf8rev, off8rev, + sotable8rev, solimit8rev, regexp8rev, skipm8rev, + &hits8rev, m8rev, &tidy8rev); ++ ajDebug("Marscan '%S' hits %d:%d %d:%d\n", seqname, ++ hits16, hits16rev, ++ hits8, hits8rev); ++ ++ /* initialise the output feature table */ ++ tab = ajFeattableNewDna(seqname); ++ ++ /* ++ ** append reverse lists to forward lists and sort them by match ++ ** position ++ */ + +- if((hits16 || hits16rev) && (hits8 || hits8rev)) ++ if(hits8 || hits8rev) + { +- /* +- ** append reverse lists to forward lists and sort them by match +- ** position +- */ + ajListPushList(l8, &l8rev); + ajListSort(l8, embPatRestrictStartCompare); +- ++ } ++ if((hits16 || hits16rev)) ++ { + ajListPushList(l16, &l16rev); + ajListSort(l16, embPatRestrictStartCompare); + +- /* initialise the output feature table */ +- if(!tab) +- tab = ajFeattableNewDna(seqname); +- +- /* +- ** find pairs of hits within the required distance and output +- ** the results +- */ +- marscan_stepdown(l16, l8, &tab); +- +- /* write features and tidy up */ +- ajReportWrite(report, tab, seq); +- ajFeattableDel(&tab); + } ++ ++ ++ /* ++ ** find pairs of hits within the required distance and output ++ ** the results ++ */ ++ marscan_stepdown(l16, l8, &tab); ++ ++ ajDebug("Marscan reportwrite '%S'\n", seqname); ++ /* write features and tidy up */ ++ ajReportWrite(report, tab, seq); ++ ajFeattableDel(&tab); + + while(ajListPop(l16,(void **)&aptr)) + embMatMatchDel(&aptr); diff --git a/biology/emboss/files/pkg-message.in b/biology/emboss/files/pkg-message.in new file mode 100644 index 000000000000..cdedc5082b5c --- /dev/null +++ b/biology/emboss/files/pkg-message.in @@ -0,0 +1,27 @@ +============================================================================= + + The EMBOSS suite has been successfully installed under + %%PREFIX%% + + To run EMBOSS programs make sure that %%PREFIX%%/bin is in your PATH. + + In order to see graphical output from some EMBOSS programs, you will + need to set the following environment variable in your shell: + + set PLPLOT_LIB to: "%%PREFIX%%/share/EMBOSS" + + A sample configuration file has been installed in + %%DATADIR%%/emboss.default.template + + This must be renamed to emboss.default and edited to suit your site + and requirements. + + A .embossrc file in a user's home directory overrides settings in the + system-wide emboss.default. + + Additional third party applications for EMBOSS can be installed from the + biology/embassy port. Remember, though that if you installed EMBOSS in a + PREFIX other than the default, you will have to install EMBASSY into this + same PREFIX. + +============================================================================= diff --git a/biology/emboss/files/pre-install.in b/biology/emboss/files/pre-install.in new file mode 100644 index 000000000000..e39e4d0c3b21 --- /dev/null +++ b/biology/emboss/files/pre-install.in @@ -0,0 +1,21 @@ +=============================================================================== + + ATENTION!!! + + The EMBOSS port is currently affected by a CONFLICTS condition. + If you install the port in the default prefix + PREFIX = LOCALBASE = %%LOCALBASE%% + it will conflict with other ports that install applications with the + same name, in the same places. + + It is highly recommended that you install EMBOSS to a different prefix, + for example PREFIX=%%LOCALBASE%%/emboss + In this case, all of the documentation and examples will be installed + within this PREFIX. + + If you still choose to install EMBOSS on the default prefix, do note + that documentation, examples and shared data will not be installed + in the usual places for a FreeBSD port (i.e. docs in + PREFIX/share/EMBOSS/doc instead of in PREFIX/share/doc/EMBOSS). + +=============================================================================== diff --git a/biology/emboss/pkg-message b/biology/emboss/pkg-message deleted file mode 100644 index 1c36c80c0b39..000000000000 --- a/biology/emboss/pkg-message +++ /dev/null @@ -1,22 +0,0 @@ --------------------------------------------------------------------------- - -The EMBOSS suite has been successfully installed. - -In order to see graphical output from some EMBOSS programs, you will need to -set the following environment variable in your shell startup file: - -- set PLPLOT_LIB to: "%%PREFIX%%/share/EMBOSS" - -NB: A sample configuration file has been installed to %%PREFIX%%/etc as -emboss.default.sample. This must be renamed to emboss.default and edited -to suit your site and its requirements. - -A .embossrc in a user's home directory overrides settings in the -system-wide emboss.default. - -Online EMBOSS documentation is available at: - http://www.uk.embnet.org/Software/EMBOSS/userdoc.html - http://www.uk.embnet.org/Software/EMBOSS/Doc/ - http://emboss.sourceforge.net/docs/ - --------------------------------------------------------------------------- diff --git a/biology/emboss/pkg-plist b/biology/emboss/pkg-plist index 9154aea12af3..ea98778089e1 100644 --- a/biology/emboss/pkg-plist +++ b/biology/emboss/pkg-plist @@ -17,6 +17,7 @@ bin/checktrans bin/chips bin/cirdna bin/codcmp +bin/codcopy bin/coderet bin/compseq bin/cons @@ -24,12 +25,15 @@ bin/cpgplot bin/cpgreport bin/cusp bin/cutgextract -bin/cutseq bin/dan +bin/cutseq bin/dbiblast bin/dbifasta bin/dbiflat bin/dbigcg +bin/dbxfasta +bin/dbxflat +bin/dbxgcg bin/degapseq bin/descseq bin/diffseq @@ -119,7 +123,6 @@ bin/remap bin/restover bin/restrict bin/revseq -bin/runJemboss.csh bin/seealso bin/seqmatchall bin/seqret @@ -135,11 +138,11 @@ bin/silent bin/sirna bin/sixpack bin/skipseq +bin/syco bin/splitter bin/stretcher bin/stssearch bin/supermatcher -bin/syco bin/tcode bin/textsearch bin/tfextract @@ -160,18 +163,30 @@ bin/wordcount bin/wordmatch bin/wossname bin/yank -etc/emboss.default.sample +bin/runJemboss.csh +include/drivers.h +include/pdf.h +include/plcore.h +include/plevent.h +include/plplotP.h +include/plxwd.h +include/metadefs.h +include/plConfig.h +include/pldebug.h +include/plplot.h +include/plstrm.h +include/plDevs.h +include/ajax.h +include/ajarch.h +include/ajdefine.h include/ajacd.h include/ajalign.h -include/ajarch.h include/ajarr.h include/ajassert.h -include/ajax.h include/ajbase.h include/ajcall.h include/ajcod.h include/ajdan.h -include/ajdefine.h include/ajdmx.h include/ajdomain.h include/ajexcept.h @@ -180,8 +195,8 @@ include/ajfeatdata.h include/ajfile.h include/ajfmt.h include/ajgraph.h -include/ajgraphstruct.h include/ajgraphxml.h +include/ajgraphstruct.h include/ajhist.h include/ajindex.h include/ajjava.h @@ -214,7 +229,14 @@ include/ajtranslate.h include/ajtree.h include/ajutil.h include/ajvector.h -include/drivers.h +include/pcre.h +include/pcre_chartables.c +include/pcre_config.h +include/pcre_get.c +include/pcre_printint.c +include/pcre_internal.h +include/pcreposix.h +include/emboss.h include/embaln.h include/embcom.h include/embcons.h @@ -232,48 +254,817 @@ include/embmat.h include/embmisc.h include/embmol.h include/embnmer.h -include/emboss.h include/embpat.h -include/embpdb.h include/embprop.h +include/embpdb.h include/embread.h -include/embshow.h include/embsig.h +include/embshow.h include/embword.h -include/metadefs.h -include/pcre.h -include/pcre_chartables.c -include/pcre_config.h -include/pcre_get.c -include/pcre_internal.h -include/pcre_printint.c -include/pcreposix.h -include/pdf.h -include/plConfig.h -include/plDevs.h -include/plcore.h -include/pldebug.h -include/plevent.h -include/plplot.h -include/plplotP.h -include/plstrm.h -include/plxwd.h -lib/libajax.a -lib/libajax.la +lib/libplplot.so.5 +lib/libplplot.so +lib/libplplot.la +lib/libplplot.a +lib/libajax.so.3 lib/libajax.so -lib/libajax.so.1 -lib/libajaxg.a -lib/libajaxg.la +lib/libajax.la +lib/libajax.a +lib/libajaxg.so.3 lib/libajaxg.so -lib/libajaxg.so.1 -lib/libnucleus.a -lib/libnucleus.la +lib/libajaxg.la +lib/libajaxg.a +lib/libnucleus.so.3 lib/libnucleus.so -lib/libnucleus.so.1 -lib/libplplot.a -lib/libplplot.la -lib/libplplot.so -lib/libplplot.so.5 +lib/libnucleus.la +lib/libnucleus.a +%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.sty +%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.tex +%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.aux +%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.dvi +%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.log +%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.pdf +%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.ps +%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.toc +%%PORTDOCS%%%%DOCSDIR%%/manuals/adminguide.tar.gz +%%PORTDOCS%%%%DOCSDIR%%/manuals/domainatrix.doc +%%PORTDOCS%%%%DOCSDIR%%/manuals/program.ps.gz +%%PORTDOCS%%%%DOCSDIR%%/manuals/EMBOSS-FreeBSD-HOWTO.txt +%%PORTDOCS%%%%DOCSDIR%%/manuals/emboss_qg.pdf +%%PORTDOCS%%%%DOCSDIR%%/manuals/emboss_qg.ps +%%PORTDOCS%%%%DOCSDIR%%/manuals/emboss.sty +%%PORTDOCS%%%%DOCSDIR%%/manuals/fdl.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/html/lindna.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/listor.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/marscan.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/maskfeat.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/maskseq.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/matcher.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/matgen3d.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/megamerger.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/meme.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/menus_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/merger.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/msbar.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/mse.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/mwcontam.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/mwfilter.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/myseq.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/nawalign.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/nawalignrunner.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/needle.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/needlerunner.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/newcpgreport.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/newcpgseek.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/newseq.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/noreturn.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/notseq.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/nthseq.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_2d_structure_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_codon_usage_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_codon_usage_nucleic_gene_finding_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_composition_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_cpg_islands_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_gene_finding_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_motifs_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_mutation_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_primers_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_profiles_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_repeats_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_restriction_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_transcription_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_translation_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/octanol.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/oddcomp.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/palindrome.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/pasteseq.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/patmatdb.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/patmatmotifs.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/pdbparse.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/pdbplus.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/pdbtosp.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepcoil.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepinfo.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepnet.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepstats.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepwheel.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepwindow.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepwindowall.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_consensus_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_continuous_characters_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_discrete_characters_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_distance_matrix_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_gene_frequencies_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_molecular_sequence_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_tree_drawing_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/plotcon.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/plotorf.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/polydot.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/preg.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/prettyplot.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/prettyseq.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/primersearch.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/printsextract.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/profit.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/prophecy.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/prophet.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/prosextract.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_2d_structure_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_3d_structure_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_composition_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_motifs_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_mutation_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_profiles_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_sequence_alignment_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/pscan.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/psiphi.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/rebaseextract.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/recoder.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/redata.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/remap.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/restover.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/restrict.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/revseq.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/rocon.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/rocplot.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/scope.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/scopparse.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/scorecmapdir.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/scorer.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/scorerrunner.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/seealso.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqalign.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqfraggle.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqmatchall.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqnr.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqret.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqretsplit.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqsearch.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqsort.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqwords.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/showalign.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/showdb.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/showfeat.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/showorf.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/showseq.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/shuffleseq.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/sigcleave.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/siggen.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/siggenlig.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/sigscan.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/sigscanlig.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/silent.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/sirna.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/sites.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/sixpack.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/skipseq.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/splitter.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/ssematch.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/stretcher.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/stssearch.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/substitute.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/substituterunner.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/supermatcher.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/syco.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/tcode.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/template.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/test_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/textsearch.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/tfextract.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/tfm.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/tfscan.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/tmap.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/topo.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/tranalign.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/transeq.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/trimest.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/trimseq.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/twofeat.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/union.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/utils_database_creation_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/utils_database_indexing_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/utils_misc_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/vectorstrip.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/water.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/whichdb.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/wobble.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/wordcount.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/wordmatch.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/wossname.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/yank.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/emboss_icon.jpg +%%PORTDOCS%%%%DOCSDIR%%/programs/html/abiview.1.abiview.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/chaos.1.chaos.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/cirdna.1.cirdna.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/cpgplot.1.cpgplot.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/dan.2.dan.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/dotmatcher.1.dotmatcher.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/dotpath.1.dotpath.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/dottup.1.dottup.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/emboss_icon.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/findkm.1.findkm.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/isochore.1.isochore.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/lindna.1.lindna.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/octanol.1.octanol.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepinfo.1.pepinfo.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepnet.1.pepnet.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepwheel.1.pepwheel.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepwindow.1.pepwindow.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepwindowall.1.pepwindowall.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/plotcon.1.plotcon.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/plotorf.1.plotorf.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/plotorf.2.plotorf.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/polydot.1.polydot.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/prettyplot.1.prettyplot.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/prettyplot.2.prettyplot.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/syco.1.syco.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/tmap.1.tmap.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/topo.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/wobble.1.wobble.gif +%%PORTDOCS%%%%DOCSDIR%%/programs/html/aaindexextract.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/abiview.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/acd_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/acdc.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/acdlog.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/acdpretty.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/acdtable.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/acdtrace.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/acdvalid.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/ajtest.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/alignment_consensus_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/alignment_differences_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/alignment_dot_plots_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/antigenic.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/alignment_global_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/alignment_local_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/alignment_multiple_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/alignrunner.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/allversusall.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/backtranseq.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/banana.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/biosed.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/btwisted.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/cai.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/cathparse.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/chaos.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/charge.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/checktrans.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/chips.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/cirdna.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/codcmp.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/codcopy.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/coderet.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/comparator.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/compseq.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/cons.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/contactalign.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/contacts.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/cpgplot.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/cpgreport.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/crystalball.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/cusp.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/cutgextract.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/cutseq.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/dan.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/dbiblast.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/dbifasta.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/dbiflat.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/dbigcg.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/dbxfasta.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/dbxflat.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/dbxgcg.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/degapseq.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/degapseqrunner.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/descseq.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/diffseq.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/digest.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/display_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/distmat.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/domainalign.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/domainer.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/domainnr.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/domainrep.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/domainreso.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/domainseqs.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/domainsse.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/dotmatcher.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/dotpath.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/dottup.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/dreg.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/ealistat.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/eclique.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/econsense.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/econtml.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/econtrast.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/edit_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednacomp.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednadist.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednainvar.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednaml.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednamlk.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednapars.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednapenny.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/edollop.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/edolpenny.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/efactor.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/efitch.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/egendist.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmalign.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmbuild.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmcalibrate.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmconvert.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmemit.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmfetch.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmindex.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmpfam.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmsearch.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/einverted.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/ekitsch.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/embossdata.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/embossversion.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/emix.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/emma.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/emnu.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/emowse.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/eneighbor.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/entret.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/enzyme_kinetics_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/epenny.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/epestfind.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/eprimer3.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/eprotdist.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/eprotpars.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/equicktandem.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/erestml.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/eseqboot.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/esim4.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/est2genome.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/etandem.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/extractfeat.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/extractseq.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fclique.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fconsense.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fcontml.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fcontrast.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdiscboot.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnacomp.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnadist.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnainvar.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnaml.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnamlk.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnamove.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnapars.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnapenny.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdollop.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdolmove.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdolpenny.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdrawgram.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdrawtree.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/feature_tables_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/ffactor.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/ffitch.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/ffreqboot.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fgendist.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/findkm.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fkitsch.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fmix.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fmove.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fneighbor.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fpars.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fpenny.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fproml.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fpromlk.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fprotdist.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fprotpars.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/freak.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/frestboot.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/frestdist.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/frestml.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fretree.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fseqboot.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fseqbootall.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/ftreedist.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/ftreedistpair.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fuzznuc.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fuzzpro.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/fuzztran.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/garnier.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/geecee.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/getorf.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/groups.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/helixturnhelix.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/hetparse.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/hmm_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/hmoment.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/iep.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/index.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/infoalign.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/information_group.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/infoseq.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/interface.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/isochore.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/jembossctl.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/libgen.html +%%PORTDOCS%%%%DOCSDIR%%/programs/html/libscan.html +%%PORTDOCS%%%%DOCSDIR%%/programs/text/jembossctl.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/libgen.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/libscan.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/lindna.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/listor.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/marscan.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/maskfeat.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/maskseq.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/matcher.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/matgen3d.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/megamerger.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/meme.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/merger.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/msbar.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/mse.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/mwcontam.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/mwfilter.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/myseq.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/nawalign.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/nawalignrunner.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/needle.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/needlerunner.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/newcpgreport.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/newcpgseek.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/newseq.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/noreturn.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/notseq.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/nthseq.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/octanol.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/oddcomp.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/palindrome.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/pasteseq.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/patmatdb.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/patmatmotifs.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/pdbparse.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/pdbplus.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/pdbtosp.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepcoil.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepinfo.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepnet.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepstats.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepwheel.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepwindow.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepwindowall.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/plotcon.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/plotorf.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/polydot.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/preg.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/prettyplot.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/prettyseq.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/primersearch.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/printsextract.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/profit.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/prophecy.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/prophet.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/prosextract.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/pscan.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/psiphi.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/rebaseextract.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/recoder.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/redata.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/remap.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/restover.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/restrict.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/revseq.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/rocon.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/rocplot.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/scope.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/scopparse.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/scorecmapdir.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/scorer.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/scorerrunner.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/seealso.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqalign.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqfraggle.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqmatchall.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqnr.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqret.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqretsplit.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqsearch.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqsort.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqwords.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/showalign.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/showdb.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/showfeat.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/showorf.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/showseq.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/shuffleseq.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/sigcleave.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/siggen.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/siggenlig.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/sigscan.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/sigscanlig.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/silent.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/sirna.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/SITE-DIRECTED.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/sites.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/sixpack.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/skipseq.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/splitter.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/ssematch.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/stretcher.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/stssearch.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/substitute.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/substituterunner.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/supermatcher.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/syco.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/tcode.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/textsearch.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/tfextract.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/tfm.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/tfscan.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/tmap.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/topo.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/tranalign.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/transeq.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/trimest.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/trimseq.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/twofeat.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/union.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/vectorstrip.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/water.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/whichdb.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/wobble.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/wordcount.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/wordmatch.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/wossname.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/yank.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/aaindexextract.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/abiview.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/acdc.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/acdlog.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/acdpretty.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/acdtable.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/cai.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/acdtrace.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/acdvalid.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/alignrunner.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/allversusall.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/antigenic.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/backtranseq.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/banana.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/biosed.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/btwisted.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/cathparse.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/chaos.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/charge.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/checktrans.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/chips.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/cirdna.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/codcmp.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/codcopy.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/coderet.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/comparator.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/complex.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/compseq.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/cons.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/contactalign.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/contacts.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/cpgplot.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/cpgreport.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/crystalball.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/cusp.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/cutgextract.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/cutseq.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/dan.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/dbiblast.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/dbifasta.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/dbiflat.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/dbigcg.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/dbxfasta.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/dbxflat.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/dbxgcg.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/degapseq.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/degapseqrunner.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/descseq.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/diffseq.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/digest.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/distmat.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/domainalign.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/domainer.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/domainnr.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/domainrep.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/domainreso.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/domainseqs.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/domainsse.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/dotmatcher.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/dotpath.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/dottup.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/dreg.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/ealistat.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/eclique.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/econsense.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/econtml.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/econtrast.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednacomp.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednadist.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednainvar.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednaml.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednamlk.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednapars.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednapenny.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/edollop.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/iep.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/edolpenny.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/efactor.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/efitch.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/egendist.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmalign.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmbuild.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmcalibrate.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmconvert.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmemit.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmfetch.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmindex.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmpfam.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmsearch.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/einverted.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/ekitsch.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/embossdata.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/embossversion.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/emix.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/emma.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/emnu.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/emowse.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/eneighbor.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/entret.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/epenny.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/epestfind.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/eprimer3.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/eprotdist.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/eprotpars.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/equicktandem.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/erestml.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/eseqboot.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/esim4.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/est2genome.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/etandem.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/extractfeat.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/extractseq.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fclique.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fconsense.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fcontml.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fcontrast.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdiscboot.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnacomp.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnadist.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnainvar.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnaml.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnamlk.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnamove.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnapars.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnapenny.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdollop.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdolmove.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdolpenny.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdrawgram.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdrawtree.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/ffactor.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/ffitch.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/ffreqboot.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fgendist.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/findkm.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fkitsch.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fmix.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fmove.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fneighbor.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fpars.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fpenny.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fproml.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fpromlk.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fprotdist.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fprotpars.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/freak.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/frestboot.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/frestdist.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/frestml.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fretree.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fseqboot.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fseqbootall.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/ftreedist.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/ftreedistpair.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fuzznuc.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fuzzpro.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/fuzztran.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/garnier.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/geecee.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/getorf.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/helixturnhelix.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/hetparse.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/hmoment.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/infoalign.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/infoseq.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/interface.txt +%%PORTDOCS%%%%DOCSDIR%%/programs/text/isochore.txt +%%PORTDOCS%%%%DOCSDIR%%/tutorials/emboss-gcg.ppt +%%PORTDOCS%%%%DOCSDIR%%/tutorials/emboss-interfaces.ppt +%%PORTDOCS%%%%DOCSDIR%%/tutorials/emboss-talk.ppt +%%PORTDOCS%%%%DOCSDIR%%/tutorials/emboss_tut.tar.gz +%%DATADIR%%/plstnd5.fnt +%%DATADIR%%/plxtnd5.fnt +%%DATADIR%%/acd/needle.acd +%%DATADIR%%/acd/newcoils.acd +%%DATADIR%%/acd/newcpgreport.acd +%%DATADIR%%/acd/newcpgseek.acd +%%DATADIR%%/acd/newseq.acd +%%DATADIR%%/acd/noreturn.acd +%%DATADIR%%/acd/notseq.acd +%%DATADIR%%/acd/nthseq.acd +%%DATADIR%%/acd/octanol.acd +%%DATADIR%%/acd/oddcomp.acd +%%DATADIR%%/acd/palindrome.acd +%%DATADIR%%/acd/pasteseq.acd +%%DATADIR%%/acd/patmatdb.acd +%%DATADIR%%/acd/patmatmotifs.acd +%%DATADIR%%/acd/patmattest.acd +%%DATADIR%%/acd/pepcoil.acd +%%DATADIR%%/acd/pepinfo.acd +%%DATADIR%%/acd/pepnet.acd +%%DATADIR%%/acd/pepstats.acd +%%DATADIR%%/acd/pepwheel.acd +%%DATADIR%%/acd/pepwindow.acd +%%DATADIR%%/acd/pepwindowall.acd +%%DATADIR%%/acd/plotcon.acd +%%DATADIR%%/acd/plotorf.acd +%%DATADIR%%/acd/polydot.acd +%%DATADIR%%/acd/preg.acd +%%DATADIR%%/acd/prettyplot.acd +%%DATADIR%%/acd/prettyseq.acd +%%DATADIR%%/acd/prima.acd +%%DATADIR%%/acd/primers.acd +%%DATADIR%%/acd/primersearch.acd +%%DATADIR%%/acd/printsextract.acd +%%DATADIR%%/acd/profit.acd +%%DATADIR%%/acd/prophecy.acd +%%DATADIR%%/acd/prophet.acd +%%DATADIR%%/acd/prosextract.acd +%%DATADIR%%/acd/pscan.acd +%%DATADIR%%/acd/psiphi.acd +%%DATADIR%%/acd/rebaseextract.acd +%%DATADIR%%/acd/recoder.acd +%%DATADIR%%/acd/redata.acd +%%DATADIR%%/acd/remap.acd +%%DATADIR%%/acd/restover.acd +%%DATADIR%%/acd/revseq.acd +%%DATADIR%%/acd/restrict.acd +%%DATADIR%%/acd/seealso.acd +%%DATADIR%%/acd/seqinfo.acd +%%DATADIR%%/acd/seqmatchall.acd +%%DATADIR%%/acd/seqret.acd +%%DATADIR%%/acd/seqretall.acd +%%DATADIR%%/acd/seqretallfeat.acd +%%DATADIR%%/acd/seqretset.acd +%%DATADIR%%/acd/seqretsingle.acd +%%DATADIR%%/acd/seqretsplit.acd +%%DATADIR%%/acd/seqrettype.acd +%%DATADIR%%/acd/showalign.acd +%%DATADIR%%/acd/showdb.acd +%%DATADIR%%/acd/showfeat.acd +%%DATADIR%%/acd/showorf.acd +%%DATADIR%%/acd/showseq.acd +%%DATADIR%%/acd/shuffleseq.acd +%%DATADIR%%/acd/sigcleave.acd +%%DATADIR%%/acd/silent.acd +%%DATADIR%%/acd/sirna.acd +%%DATADIR%%/acd/sixpack.acd +%%DATADIR%%/acd/skipseq.acd +%%DATADIR%%/acd/tfm.acd +%%DATADIR%%/acd/splitter.acd +%%DATADIR%%/acd/stretcher.acd +%%DATADIR%%/acd/stssearch.acd +%%DATADIR%%/acd/supermatcher.acd +%%DATADIR%%/acd/syco.acd +%%DATADIR%%/acd/tcode.acd +%%DATADIR%%/acd/testplot.acd +%%DATADIR%%/acd/textsearch.acd +%%DATADIR%%/acd/tfextract.acd +%%DATADIR%%/acd/tfscan.acd +%%DATADIR%%/acd/tmap.acd +%%DATADIR%%/acd/tranalign.acd +%%DATADIR%%/acd/transeq.acd +%%DATADIR%%/acd/treetypedisplay.acd +%%DATADIR%%/acd/trimest.acd +%%DATADIR%%/acd/trimseq.acd +%%DATADIR%%/acd/twofeat.acd +%%DATADIR%%/acd/union.acd +%%DATADIR%%/acd/vectorstrip.acd +%%DATADIR%%/acd/water.acd +%%DATADIR%%/acd/whichdb.acd +%%DATADIR%%/acd/wobble.acd +%%DATADIR%%/acd/wordcount.acd +%%DATADIR%%/acd/wordmatch.acd +%%DATADIR%%/acd/wossname.acd +%%DATADIR%%/acd/yank.acd +%%DATADIR%%/acd/codes.english +%%DATADIR%%/acd/groups.standard +%%DATADIR%%/acd/knowntypes.standard +%%DATADIR%%/acd/sections.standard +%%DATADIR%%/acd/variables.standard %%DATADIR%%/acd/aaindexextract.acd %%DATADIR%%/acd/abiview.acd %%DATADIR%%/acd/acdc.acd @@ -287,18 +1078,18 @@ lib/libplplot.so.5 %%DATADIR%%/acd/ajtest.acd %%DATADIR%%/acd/antigenic.acd %%DATADIR%%/acd/backtranseq.acd +%%DATADIR%%/acd/cai.acd %%DATADIR%%/acd/banana.acd %%DATADIR%%/acd/biosed.acd %%DATADIR%%/acd/btwisted.acd -%%DATADIR%%/acd/cai.acd %%DATADIR%%/acd/chaos.acd %%DATADIR%%/acd/charge.acd %%DATADIR%%/acd/checktrans.acd %%DATADIR%%/acd/chips.acd %%DATADIR%%/acd/cirdna.acd %%DATADIR%%/acd/codcmp.acd +%%DATADIR%%/acd/codcopy.acd %%DATADIR%%/acd/coderet.acd -%%DATADIR%%/acd/codes.english %%DATADIR%%/acd/complex.acd %%DATADIR%%/acd/compseq.acd %%DATADIR%%/acd/cons.acd @@ -313,6 +1104,9 @@ lib/libplplot.so.5 %%DATADIR%%/acd/dbifasta.acd %%DATADIR%%/acd/dbiflat.acd %%DATADIR%%/acd/dbigcg.acd +%%DATADIR%%/acd/dbxfasta.acd +%%DATADIR%%/acd/dbxflat.acd +%%DATADIR%%/acd/dbxgcg.acd %%DATADIR%%/acd/degapseq.acd %%DATADIR%%/acd/demoalign.acd %%DATADIR%%/acd/demofeatures.acd @@ -331,6 +1125,7 @@ lib/libplplot.so.5 %%DATADIR%%/acd/dreg.acd %%DATADIR%%/acd/einverted.acd %%DATADIR%%/acd/embossdata.acd +%%DATADIR%%/acd/iep.acd %%DATADIR%%/acd/embossversion.acd %%DATADIR%%/acd/emma.acd %%DATADIR%%/acd/emowse.acd @@ -352,18 +1147,15 @@ lib/libplplot.so.5 %%DATADIR%%/acd/geecee.acd %%DATADIR%%/acd/getorf.acd %%DATADIR%%/acd/giep.acd -%%DATADIR%%/acd/groups.standard %%DATADIR%%/acd/helixturnhelix.acd -%%DATADIR%%/acd/histogramtest.acd %%DATADIR%%/acd/hmoment.acd -%%DATADIR%%/acd/iep.acd +%%DATADIR%%/acd/histogramtest.acd %%DATADIR%%/acd/infoalign.acd %%DATADIR%%/acd/infoseq.acd %%DATADIR%%/acd/intconv.acd %%DATADIR%%/acd/isochore.acd %%DATADIR%%/acd/kmrsplitter.acd %%DATADIR%%/acd/kmrunion.acd -%%DATADIR%%/acd/knowntypes.standard %%DATADIR%%/acd/lindna.acd %%DATADIR%%/acd/listor.acd %%DATADIR%%/acd/marscan.acd @@ -375,107 +1167,120 @@ lib/libplplot.so.5 %%DATADIR%%/acd/msbar.acd %%DATADIR%%/acd/mwcontam.acd %%DATADIR%%/acd/mwfilter.acd -%%DATADIR%%/acd/needle.acd -%%DATADIR%%/acd/newcoils.acd -%%DATADIR%%/acd/newcpgreport.acd -%%DATADIR%%/acd/newcpgseek.acd -%%DATADIR%%/acd/newseq.acd -%%DATADIR%%/acd/noreturn.acd -%%DATADIR%%/acd/notseq.acd -%%DATADIR%%/acd/nthseq.acd -%%DATADIR%%/acd/octanol.acd -%%DATADIR%%/acd/oddcomp.acd -%%DATADIR%%/acd/palindrome.acd -%%DATADIR%%/acd/pasteseq.acd -%%DATADIR%%/acd/patmatdb.acd -%%DATADIR%%/acd/patmatmotifs.acd -%%DATADIR%%/acd/patmattest.acd -%%DATADIR%%/acd/pepcoil.acd -%%DATADIR%%/acd/pepinfo.acd -%%DATADIR%%/acd/pepnet.acd -%%DATADIR%%/acd/pepstats.acd -%%DATADIR%%/acd/pepwheel.acd -%%DATADIR%%/acd/pepwindow.acd -%%DATADIR%%/acd/pepwindowall.acd -%%DATADIR%%/acd/plotcon.acd -%%DATADIR%%/acd/plotorf.acd -%%DATADIR%%/acd/polydot.acd -%%DATADIR%%/acd/preg.acd -%%DATADIR%%/acd/prettyplot.acd -%%DATADIR%%/acd/prettyseq.acd -%%DATADIR%%/acd/prima.acd -%%DATADIR%%/acd/primers.acd -%%DATADIR%%/acd/primersearch.acd -%%DATADIR%%/acd/printsextract.acd -%%DATADIR%%/acd/profit.acd -%%DATADIR%%/acd/prophecy.acd -%%DATADIR%%/acd/prophet.acd -%%DATADIR%%/acd/prosextract.acd -%%DATADIR%%/acd/pscan.acd -%%DATADIR%%/acd/psiphi.acd -%%DATADIR%%/acd/rebaseextract.acd -%%DATADIR%%/acd/recoder.acd -%%DATADIR%%/acd/redata.acd -%%DATADIR%%/acd/remap.acd -%%DATADIR%%/acd/restover.acd -%%DATADIR%%/acd/restrict.acd -%%DATADIR%%/acd/revseq.acd -%%DATADIR%%/acd/sections.standard -%%DATADIR%%/acd/seealso.acd -%%DATADIR%%/acd/seqinfo.acd -%%DATADIR%%/acd/seqmatchall.acd -%%DATADIR%%/acd/seqret.acd -%%DATADIR%%/acd/seqretall.acd -%%DATADIR%%/acd/seqretallfeat.acd -%%DATADIR%%/acd/seqretset.acd -%%DATADIR%%/acd/seqretsingle.acd -%%DATADIR%%/acd/seqretsplit.acd -%%DATADIR%%/acd/seqrettype.acd -%%DATADIR%%/acd/showalign.acd -%%DATADIR%%/acd/showdb.acd -%%DATADIR%%/acd/showfeat.acd -%%DATADIR%%/acd/showorf.acd -%%DATADIR%%/acd/showseq.acd -%%DATADIR%%/acd/shuffleseq.acd -%%DATADIR%%/acd/sigcleave.acd -%%DATADIR%%/acd/silent.acd -%%DATADIR%%/acd/sirna.acd -%%DATADIR%%/acd/sixpack.acd -%%DATADIR%%/acd/skipseq.acd -%%DATADIR%%/acd/splitter.acd -%%DATADIR%%/acd/stretcher.acd -%%DATADIR%%/acd/stssearch.acd -%%DATADIR%%/acd/supermatcher.acd -%%DATADIR%%/acd/syco.acd -%%DATADIR%%/acd/tcode.acd -%%DATADIR%%/acd/testplot.acd -%%DATADIR%%/acd/textsearch.acd -%%DATADIR%%/acd/tfextract.acd -%%DATADIR%%/acd/tfm.acd -%%DATADIR%%/acd/tfscan.acd -%%DATADIR%%/acd/tmap.acd -%%DATADIR%%/acd/tranalign.acd -%%DATADIR%%/acd/transeq.acd -%%DATADIR%%/acd/treetypedisplay.acd -%%DATADIR%%/acd/trimest.acd -%%DATADIR%%/acd/trimseq.acd -%%DATADIR%%/acd/twofeat.acd -%%DATADIR%%/acd/union.acd -%%DATADIR%%/acd/variables.standard -%%DATADIR%%/acd/vectorstrip.acd -%%DATADIR%%/acd/water.acd -%%DATADIR%%/acd/whichdb.acd -%%DATADIR%%/acd/wobble.acd -%%DATADIR%%/acd/wordcount.acd -%%DATADIR%%/acd/wordmatch.acd -%%DATADIR%%/acd/wossname.acd -%%DATADIR%%/acd/yank.acd %%DATADIR%%/data/AAINDEX/dummyfile +%%DATADIR%%/data/CODONS/Cut.index +%%DATADIR%%/data/CODONS/Eacica.cut +%%DATADIR%%/data/CODONS/Eagrtu.cut +%%DATADIR%%/data/CODONS/Eanasp.cut +%%DATADIR%%/data/CODONS/Earath.cut +%%DATADIR%%/data/CODONS/Eazovi.cut +%%DATADIR%%/data/CODONS/Ebacme.cut +%%DATADIR%%/data/CODONS/Ebacst.cut +%%DATADIR%%/data/CODONS/Ebacsu.cut +%%DATADIR%%/data/CODONS/Ebacsu_high.cut +%%DATADIR%%/data/CODONS/Ebommo.cut +%%DATADIR%%/data/CODONS/Ebovin.cut +%%DATADIR%%/data/CODONS/Ebpphx.cut +%%DATADIR%%/data/CODONS/Ebraja.cut +%%DATADIR%%/data/CODONS/Ebrana.cut +%%DATADIR%%/data/CODONS/Ebrare.cut +%%DATADIR%%/data/CODONS/Ecaeel.cut +%%DATADIR%%/data/CODONS/Ecanal.cut +%%DATADIR%%/data/CODONS/Ecanfa.cut +%%DATADIR%%/data/CODONS/Ecaucr.cut +%%DATADIR%%/data/CODONS/Echick.cut +%%DATADIR%%/data/CODONS/Echlre.cut +%%DATADIR%%/data/CODONS/Echltr.cut +%%DATADIR%%/data/CODONS/Ecloab.cut +%%DATADIR%%/data/CODONS/Ecrigr.cut +%%DATADIR%%/data/CODONS/Ecyapa.cut +%%DATADIR%%/data/CODONS/Edayhoff.cut +%%DATADIR%%/data/CODONS/Edicdi.cut +%%DATADIR%%/data/CODONS/Edicdi_high.cut +%%DATADIR%%/data/CODONS/Edrome.cut +%%DATADIR%%/data/CODONS/Edrome_high.cut +%%DATADIR%%/data/CODONS/Eecoli.cut +%%DATADIR%%/data/CODONS/Eecoli_high.cut +%%DATADIR%%/data/CODONS/Eemeni.cut +%%DATADIR%%/data/CODONS/Eemeni_mit.cut +%%DATADIR%%/data/CODONS/Eemeni_high.cut +%%DATADIR%%/data/CODONS/Eerwct.cut +%%DATADIR%%/data/CODONS/Ehaein.cut +%%DATADIR%%/data/CODONS/Ehalma.cut +%%DATADIR%%/data/CODONS/Ehalsa.cut +%%DATADIR%%/data/CODONS/Ehorvu.cut +%%DATADIR%%/data/CODONS/Ehuman.cut +%%DATADIR%%/data/CODONS/Eklepn.cut +%%DATADIR%%/data/CODONS/Eklula.cut +%%DATADIR%%/data/CODONS/Elacdl.cut +%%DATADIR%%/data/CODONS/Elyces.cut +%%DATADIR%%/data/CODONS/Emacfa.cut +%%DATADIR%%/data/CODONS/Emaize.cut +%%DATADIR%%/data/CODONS/Emaize_chl.cut +%%DATADIR%%/data/CODONS/Emammal_high.cut +%%DATADIR%%/data/CODONS/Emanse.cut +%%DATADIR%%/data/CODONS/Emarpo_chl.cut +%%DATADIR%%/data/CODONS/Emedsa.cut +%%DATADIR%%/data/CODONS/Emetth.cut +%%DATADIR%%/data/CODONS/Emouse.cut +%%DATADIR%%/data/CODONS/Emyctu.cut +%%DATADIR%%/data/CODONS/Eneigo.cut +%%DATADIR%%/data/CODONS/Eneucr.cut +%%DATADIR%%/data/CODONS/Eoncmy.cut +%%DATADIR%%/data/CODONS/Eorysa.cut +%%DATADIR%%/data/CODONS/Eorysa_chl.cut +%%DATADIR%%/data/CODONS/Epea.cut +%%DATADIR%%/data/CODONS/Epethy.cut +%%DATADIR%%/data/CODONS/Ephavu.cut +%%DATADIR%%/data/CODONS/Epig.cut +%%DATADIR%%/data/CODONS/Eplafa.cut +%%DATADIR%%/data/CODONS/Eprovu.cut +%%DATADIR%%/data/CODONS/Epseae.cut +%%DATADIR%%/data/CODONS/Epsepu.cut +%%DATADIR%%/data/CODONS/Epsesm.cut +%%DATADIR%%/data/CODONS/Erabit.cut +%%DATADIR%%/data/CODONS/Erat.cut +%%DATADIR%%/data/CODONS/Erhile.cut +%%DATADIR%%/data/CODONS/Erhime.cut +%%DATADIR%%/data/CODONS/Erhoca.cut +%%DATADIR%%/data/CODONS/Erhosh.cut +%%DATADIR%%/data/CODONS/Esalsa.cut +%%DATADIR%%/data/CODONS/Esalty.cut +%%DATADIR%%/data/CODONS/Eschma.cut +%%DATADIR%%/data/CODONS/Eschpo.cut +%%DATADIR%%/data/CODONS/Eschpo_cai.cut +%%DATADIR%%/data/CODONS/Eschpo_high.cut +%%DATADIR%%/data/CODONS/Eserma.cut +%%DATADIR%%/data/CODONS/Esheep.cut +%%DATADIR%%/data/CODONS/Esoltu.cut +%%DATADIR%%/data/CODONS/Esoybn.cut +%%DATADIR%%/data/CODONS/Espiol.cut +%%DATADIR%%/data/CODONS/Estaau.cut +%%DATADIR%%/data/CODONS/Estrco.cut +%%DATADIR%%/data/CODONS/Estrmu.cut +%%DATADIR%%/data/CODONS/Estrpn.cut +%%DATADIR%%/data/CODONS/Estrpu.cut +%%DATADIR%%/data/CODONS/Esyncy.cut +%%DATADIR%%/data/CODONS/Esynco.cut +%%DATADIR%%/data/CODONS/Etetth.cut +%%DATADIR%%/data/CODONS/Etheth.cut +%%DATADIR%%/data/CODONS/Etobac.cut +%%DATADIR%%/data/CODONS/Etobac_chl.cut +%%DATADIR%%/data/CODONS/Etrybr.cut +%%DATADIR%%/data/CODONS/Etrycr.cut +%%DATADIR%%/data/CODONS/Evibch.cut +%%DATADIR%%/data/CODONS/Ewheat.cut +%%DATADIR%%/data/CODONS/Exenla.cut +%%DATADIR%%/data/CODONS/Eyeast.cut +%%DATADIR%%/data/CODONS/Eyeast_cai.cut +%%DATADIR%%/data/CODONS/Eyeast_high.cut +%%DATADIR%%/data/CODONS/Eyeast_mit.cut +%%DATADIR%%/data/CODONS/Eyeren.cut +%%DATADIR%%/data/CODONS/Eyerpe.cut %%DATADIR%%/data/CODONS/Eacc.cut %%DATADIR%%/data/CODONS/Eadenovirus5.cut %%DATADIR%%/data/CODONS/Eadenovirus7.cut %%DATADIR%%/data/CODONS/Eaidlav.cut -%%DATADIR%%/data/CODONS/Eanasp.cut %%DATADIR%%/data/CODONS/Eani.cut %%DATADIR%%/data/CODONS/Eani_h.cut %%DATADIR%%/data/CODONS/Eanidmit.cut @@ -483,6 +1288,7 @@ lib/libplplot.so.5 %%DATADIR%%/data/CODONS/Eath.cut %%DATADIR%%/data/CODONS/Eatu.cut %%DATADIR%%/data/CODONS/Eavi.cut +%%DATADIR%%/data/CODONS/Ef1.cut %%DATADIR%%/data/CODONS/Ebja.cut %%DATADIR%%/data/CODONS/Ebly.cut %%DATADIR%%/data/CODONS/Ebme.cut @@ -510,7 +1316,6 @@ lib/libplplot.so.5 %%DATADIR%%/data/CODONS/Ecre.cut %%DATADIR%%/data/CODONS/Ecrisp.cut %%DATADIR%%/data/CODONS/Ectr.cut -%%DATADIR%%/data/CODONS/Edayhoff.cut %%DATADIR%%/data/CODONS/Eddi.cut %%DATADIR%%/data/CODONS/Eddi_h.cut %%DATADIR%%/data/CODONS/Edog.cut @@ -520,8 +1325,6 @@ lib/libplplot.so.5 %%DATADIR%%/data/CODONS/Eeca.cut %%DATADIR%%/data/CODONS/Eeco.cut %%DATADIR%%/data/CODONS/Eeco_h.cut -%%DATADIR%%/data/CODONS/Eecoli.cut -%%DATADIR%%/data/CODONS/Ef1.cut %%DATADIR%%/data/CODONS/Efish.cut %%DATADIR%%/data/CODONS/Efmdvpolyp.cut %%DATADIR%%/data/CODONS/Eham.cut @@ -529,15 +1332,12 @@ lib/libplplot.so.5 %%DATADIR%%/data/CODONS/Ehin.cut %%DATADIR%%/data/CODONS/Ehma.cut %%DATADIR%%/data/CODONS/Ehum.cut -%%DATADIR%%/data/CODONS/Ehuman.cut %%DATADIR%%/data/CODONS/Ekla.cut %%DATADIR%%/data/CODONS/Ekpn.cut %%DATADIR%%/data/CODONS/Ella.cut %%DATADIR%%/data/CODONS/Emac.cut -%%DATADIR%%/data/CODONS/Emaize.cut %%DATADIR%%/data/CODONS/Emam_h.cut %%DATADIR%%/data/CODONS/Emixlg.cut -%%DATADIR%%/data/CODONS/Emouse.cut %%DATADIR%%/data/CODONS/Emsa.cut %%DATADIR%%/data/CODONS/Emse.cut %%DATADIR%%/data/CODONS/Emta.cut @@ -552,13 +1352,11 @@ lib/libplplot.so.5 %%DATADIR%%/data/CODONS/Engo.cut %%DATADIR%%/data/CODONS/Eoncsp.cut %%DATADIR%%/data/CODONS/Epae.cut -%%DATADIR%%/data/CODONS/Epea.cut %%DATADIR%%/data/CODONS/Epet.cut %%DATADIR%%/data/CODONS/Epfa.cut %%DATADIR%%/data/CODONS/Ephix174.cut %%DATADIR%%/data/CODONS/Ephv.cut %%DATADIR%%/data/CODONS/Ephy.cut -%%DATADIR%%/data/CODONS/Epig.cut %%DATADIR%%/data/CODONS/Epolyomaa2.cut %%DATADIR%%/data/CODONS/Epombe.cut %%DATADIR%%/data/CODONS/Epombecai.cut @@ -570,7 +1368,6 @@ lib/libplplot.so.5 %%DATADIR%%/data/CODONS/Erab.cut %%DATADIR%%/data/CODONS/Erabbit.cut %%DATADIR%%/data/CODONS/Erabsp.cut -%%DATADIR%%/data/CODONS/Erat.cut %%DATADIR%%/data/CODONS/Eratsp.cut %%DATADIR%%/data/CODONS/Erca.cut %%DATADIR%%/data/CODONS/Erhm.cut @@ -613,7 +1410,6 @@ lib/libplplot.so.5 %%DATADIR%%/data/CODONS/Ewht.cut %%DATADIR%%/data/CODONS/Exel.cut %%DATADIR%%/data/CODONS/Exenopus.cut -%%DATADIR%%/data/CODONS/Eyeast.cut %%DATADIR%%/data/CODONS/Eyeastcai.cut %%DATADIR%%/data/CODONS/Eyen.cut %%DATADIR%%/data/CODONS/Eysc.cut @@ -622,6 +1418,9 @@ lib/libplplot.so.5 %%DATADIR%%/data/CODONS/Eysp.cut %%DATADIR%%/data/CODONS/Ezebrafish.cut %%DATADIR%%/data/CODONS/Ezma.cut +%%DATADIR%%/data/REBASE/dummyfile +%%DATADIR%%/data/PRINTS/dummyfile +%%DATADIR%%/data/PROSITE/dummyfile %%DATADIR%%/data/EBLOSUM30 %%DATADIR%%/data/EBLOSUM35 %%DATADIR%%/data/EBLOSUM40 @@ -658,6 +1457,8 @@ lib/libplplot.so.5 %%DATADIR%%/data/EGC.5 %%DATADIR%%/data/EGC.6 %%DATADIR%%/data/EGC.9 +%%DATADIR%%/data/EGC.index +%%DATADIR%%/data/EGC.txt %%DATADIR%%/data/ENUC.4.2 %%DATADIR%%/data/ENUC.4.4 %%DATADIR%%/data/EPAM10 @@ -732,10 +1533,7 @@ lib/libplplot.so.5 %%DATADIR%%/data/Ehet.dat %%DATADIR%%/data/Ehth.dat %%DATADIR%%/data/Ehth87.dat -%%DATADIR%%/data/Emass.dat -%%DATADIR%%/data/Emassmod.dat %%DATADIR%%/data/Ememe.dat -%%DATADIR%%/data/Emwfilter.dat %%DATADIR%%/data/Enakai.dat %%DATADIR%%/data/Epepcoil.dat %%DATADIR%%/data/Epk.dat @@ -754,38 +1552,215 @@ lib/libplplot.so.5 %%DATADIR%%/data/Etcode.dat %%DATADIR%%/data/Evdw.dat %%DATADIR%%/data/Ewhite-wimley.dat -%%DATADIR%%/data/PRINTS/dummyfile -%%DATADIR%%/data/PROSITE/dummyfile -%%DATADIR%%/data/REBASE/dummyfile %%DATADIR%%/data/embossre.equ +%%DATADIR%%/data/Emwfilter.dat +%%DATADIR%%/data/Emass.dat +%%DATADIR%%/data/Emassmod.dat +%%DATADIR%%/data/Matrices.nucleotide +%%DATADIR%%/data/Matrices.protein +%%DATADIR%%/data/Matrices.proteinstructure %%DATADIR%%/emboss.default.template -%%DATADIR%%/jemboss/LICENSE -%%DATADIR%%/jemboss/README -%%DATADIR%%/jemboss/api/allclasses-frame.html -%%DATADIR%%/jemboss/api/deprecated-list.html -%%DATADIR%%/jemboss/api/getClasses.pl -%%DATADIR%%/jemboss/api/help-doc.html -%%DATADIR%%/jemboss/api/index-all.html -%%DATADIR%%/jemboss/api/index.html -%%DATADIR%%/jemboss/api/makeDocs.csh -%%DATADIR%%/jemboss/api/org/emboss/jemboss/Jemboss.html -%%DATADIR%%/jemboss/api/org/emboss/jemboss/Jemboss.winExit.html -%%DATADIR%%/jemboss/api/org/emboss/jemboss/JembossLogo.html -%%DATADIR%%/jemboss/api/org/emboss/jemboss/JembossParams.html -%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/BuildProgramMenu.html -%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/ResultsMenuBar.html -%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/SetUpMenuBar.html -%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/ShowResultSet.html -%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/ShowSavedResults.html -%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/SwingWorker.html +%%DATADIR%%/test/data/aaindex1.test +%%DATADIR%%/test/data/prosite.dat +%%DATADIR%%/test/data/prosite.doc +%%DATADIR%%/test/data/prints.test +%%DATADIR%%/test/data/withrefm +%%DATADIR%%/test/data/site.dat +%%DATADIR%%/test/data/cutg.codon +%%DATADIR%%/test/data/dna.acedb +%%DATADIR%%/test/data/dna.aln +%%DATADIR%%/test/data/dna.asn1 +%%DATADIR%%/test/data/dna.codata +%%DATADIR%%/test/data/dna.embl +%%DATADIR%%/test/data/dna.fasta +%%DATADIR%%/test/data/dna.fitch +%%DATADIR%%/test/data/dna.gcg +%%DATADIR%%/test/data/dna.gcg8 +%%DATADIR%%/test/data/dna.genbank +%%DATADIR%%/test/data/dna.ig +%%DATADIR%%/test/data/dna.m-acedb +%%DATADIR%%/test/data/dna.m-codata +%%DATADIR%%/test/data/dna.m-embl +%%DATADIR%%/test/data/dna.m-fasta +%%DATADIR%%/test/data/dna.m-fasta-long +%%DATADIR%%/test/data/dna.m-ncbi +%%DATADIR%%/test/data/dna.m-strider +%%DATADIR%%/test/data/dna.msf +%%DATADIR%%/test/data/dna.msf8 +%%DATADIR%%/test/data/dna.ncbi +%%DATADIR%%/test/data/dna.phylip +%%DATADIR%%/test/data/dna.phylip3 +%%DATADIR%%/test/data/dna.staden +%%DATADIR%%/test/data/dna.strider +%%DATADIR%%/test/data/dna.text +%%DATADIR%%/test/data/feat.emft +%%DATADIR%%/test/data/feat.fasta +%%DATADIR%%/test/data/feat.pir +%%DATADIR%%/test/data/mw1.dat +%%DATADIR%%/test/data/mw2.dat +%%DATADIR%%/test/data/mw3.dat +%%DATADIR%%/test/data/paamir.pep +%%DATADIR%%/test/data/pax6_cdna.fasta +%%DATADIR%%/test/data/prot.acedb +%%DATADIR%%/test/data/prot.codata +%%DATADIR%%/test/data/prot.fasta +%%DATADIR%%/test/data/prot.gcg +%%DATADIR%%/test/data/prot.gcg8 +%%DATADIR%%/test/data/prot.ig +%%DATADIR%%/test/data/prot.m-acedb +%%DATADIR%%/test/data/prot.m-codata +%%DATADIR%%/test/data/prot.m-fasta +%%DATADIR%%/test/data/prot.m-nbrf +%%DATADIR%%/test/data/prot.m-ncbi +%%DATADIR%%/test/data/prot.m-swiss +%%DATADIR%%/test/data/prot.nbrf +%%DATADIR%%/test/data/prot.ncbi +%%DATADIR%%/test/data/prot.swiss +%%DATADIR%%/test/data/prot.text +%%DATADIR%%/test/data/z83307.seq +%%DATADIR%%/test/data/aligna.dna +%%DATADIR%%/test/data/alignapart.dna +%%DATADIR%%/test/data/alignb.dna +%%DATADIR%%/test/data/aligna.prot +%%DATADIR%%/test/data/alignapart.prot +%%DATADIR%%/test/data/alignb.prot +%%DATADIR%%/test/data/tranalign.pep +%%DATADIR%%/test/data/tranalign.seq +%%DATADIR%%/test/embl/acnum.hit +%%DATADIR%%/test/embl/acnum.trg +%%DATADIR%%/test/embl/division.lkp +%%DATADIR%%/test/embl/entrynam.idx +%%DATADIR%%/test/embl/seqvn.hit +%%DATADIR%%/test/embl/seqvn.trg +%%DATADIR%%/test/embl/des.hit +%%DATADIR%%/test/embl/des.trg +%%DATADIR%%/test/embl/keyword.hit +%%DATADIR%%/test/embl/keyword.trg +%%DATADIR%%/test/embl/taxon.hit +%%DATADIR%%/test/embl/taxon.trg +%%DATADIR%%/test/embl/est.dat +%%DATADIR%%/test/embl/fun.dat +%%DATADIR%%/test/embl/hum1.dat +%%DATADIR%%/test/embl/inv.dat +%%DATADIR%%/test/embl/pln.dat +%%DATADIR%%/test/embl/pro.dat +%%DATADIR%%/test/embl/rod.dat +%%DATADIR%%/test/embl/sts.dat +%%DATADIR%%/test/embl/vrl.dat +%%DATADIR%%/test/embl/vrt.dat +%%DATADIR%%/test/genbank/acnum.hit +%%DATADIR%%/test/genbank/acnum.trg +%%DATADIR%%/test/genbank/division.lkp +%%DATADIR%%/test/genbank/entrynam.idx +%%DATADIR%%/test/genbank/seqvn.hit +%%DATADIR%%/test/genbank/seqvn.trg +%%DATADIR%%/test/genbank/des.hit +%%DATADIR%%/test/genbank/des.trg +%%DATADIR%%/test/genbank/keyword.hit +%%DATADIR%%/test/genbank/keyword.trg +%%DATADIR%%/test/genbank/taxon.hit +%%DATADIR%%/test/genbank/taxon.trg +%%DATADIR%%/test/genbank/gbbct1.seq +%%DATADIR%%/test/genbank/gbest1.seq +%%DATADIR%%/test/genbank/gbinv1.seq +%%DATADIR%%/test/genbank/gbpln1.seq +%%DATADIR%%/test/genbank/gbpln2.seq +%%DATADIR%%/test/genbank/gbpri1.seq +%%DATADIR%%/test/genbank/gbrod1.seq +%%DATADIR%%/test/genbank/gbsts1.seq +%%DATADIR%%/test/genbank/gbvrl1.seq +%%DATADIR%%/test/genbank/gbvrt.seq +%%DATADIR%%/test/gb/acnum.hit +%%DATADIR%%/test/gb/acnum.trg +%%DATADIR%%/test/gb/division.lkp +%%DATADIR%%/test/gb/entrynam.idx +%%DATADIR%%/test/gb/seqvn.hit +%%DATADIR%%/test/gb/seqvn.trg +%%DATADIR%%/test/gb/des.hit +%%DATADIR%%/test/gb/des.trg +%%DATADIR%%/test/gb/keyword.hit +%%DATADIR%%/test/gb/keyword.trg +%%DATADIR%%/test/gb/taxon.hit +%%DATADIR%%/test/gb/taxon.trg +%%DATADIR%%/test/gb/ba.ref +%%DATADIR%%/test/gb/ba.seq +%%DATADIR%%/test/gb/htg.ref +%%DATADIR%%/test/gb/htg.seq +%%DATADIR%%/test/pir/acnum.hit +%%DATADIR%%/test/pir/acnum.trg +%%DATADIR%%/test/pir/division.lkp +%%DATADIR%%/test/pir/entrynam.idx +%%DATADIR%%/test/pir/des.hit +%%DATADIR%%/test/pir/des.trg +%%DATADIR%%/test/pir/keyword.hit +%%DATADIR%%/test/pir/keyword.trg +%%DATADIR%%/test/pir/taxon.hit +%%DATADIR%%/test/pir/taxon.trg +%%DATADIR%%/test/pir/pir1.header +%%DATADIR%%/test/pir/pir1.names +%%DATADIR%%/test/pir/pir1.numbers +%%DATADIR%%/test/pir/pir1.offset +%%DATADIR%%/test/pir/pir1.ref +%%DATADIR%%/test/pir/pir1.seq +%%DATADIR%%/test/pir/pir2.header +%%DATADIR%%/test/pir/pir2.names +%%DATADIR%%/test/pir/pir2.numbers +%%DATADIR%%/test/pir/pir2.offset +%%DATADIR%%/test/pir/pir2.ref +%%DATADIR%%/test/pir/pir2.seq +%%DATADIR%%/test/pir/pir3.header +%%DATADIR%%/test/pir/pir3.names +%%DATADIR%%/test/pir/pir3.numbers +%%DATADIR%%/test/pir/pir3.offset +%%DATADIR%%/test/pir/pir3.ref +%%DATADIR%%/test/pir/pir3.seq +%%DATADIR%%/test/pir/pir4.header +%%DATADIR%%/test/pir/pir4.names +%%DATADIR%%/test/pir/pir4.numbers +%%DATADIR%%/test/pir/pir4.offset +%%DATADIR%%/test/pir/pir4.ref +%%DATADIR%%/test/pir/pir4.seq +%%DATADIR%%/test/swiss/seq.dat +%%DATADIR%%/test/swiss/acnum.hit +%%DATADIR%%/test/swiss/acnum.trg +%%DATADIR%%/test/swiss/division.lkp +%%DATADIR%%/test/swiss/entrynam.idx +%%DATADIR%%/test/swiss/seqvn.hit +%%DATADIR%%/test/swiss/seqvn.trg +%%DATADIR%%/test/swiss/des.hit +%%DATADIR%%/test/swiss/des.trg +%%DATADIR%%/test/swiss/keyword.hit +%%DATADIR%%/test/swiss/keyword.trg +%%DATADIR%%/test/swiss/taxon.hit +%%DATADIR%%/test/swiss/taxon.trg +%%DATADIR%%/test/swnew/acnum.hit +%%DATADIR%%/test/swnew/acnum.trg +%%DATADIR%%/test/swnew/division.lkp +%%DATADIR%%/test/swnew/entrynam.idx +%%DATADIR%%/test/swnew/seqvn.hit +%%DATADIR%%/test/swnew/seqvn.trg +%%DATADIR%%/test/swnew/des.hit +%%DATADIR%%/test/swnew/des.trg +%%DATADIR%%/test/swnew/keyword.hit +%%DATADIR%%/test/swnew/keyword.trg +%%DATADIR%%/test/swnew/taxon.hit +%%DATADIR%%/test/swnew/taxon.trg +%%DATADIR%%/test/swnew/new_seq.dat +%%DATADIR%%/test/swnew/upd_ann.dat +%%DATADIR%%/test/swnew/upd_seq.dat +%%DATADIR%%/test/wormpep/wormpep +%%DATADIR%%/test/wormpep/acnum.hit +%%DATADIR%%/test/wormpep/acnum.trg +%%DATADIR%%/test/wormpep/division.lkp +%%DATADIR%%/test/wormpep/entrynam.idx +%%DATADIR%%/test/wormpep/des.hit +%%DATADIR%%/test/wormpep/des.trg %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/filetree/DragTree.html %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/filetree/FileEditorDisplay.PopupListener.html %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/filetree/FileEditorDisplay.html %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/filetree/FileNode.html %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/filetree/FileSaving.html %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/BuildJembossForm.html -%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/JembossComboPopup.html -%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/JembossComboPopup.myComboUI.html %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/ListFilePanel.html %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/SectionPanel.html %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/SetInFileCard.html @@ -795,6 +1770,8 @@ lib/libplplot.so.5 %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/TextFieldInt.WholeNumberDocument.html %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/TextFieldInt.html %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/TextFieldSink.html +%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/JembossComboPopup.html +%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form/JembossComboPopup.myComboUI.html %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/sequenceChooser/CutNPasteTextArea.html %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/sequenceChooser/FileChooser.html %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/sequenceChooser/InputSequenceAttributes.html @@ -805,13 +1782,19 @@ lib/libplplot.so.5 %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/startup/ProgList.HorizontalMenu.html %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/startup/ProgList.html %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/startup/Splash.html +%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/BuildProgramMenu.html +%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/ResultsMenuBar.html +%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/SetUpMenuBar.html +%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/ShowResultSet.html +%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/ShowSavedResults.html +%%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/SwingWorker.html +%%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/acd/ApplicationFields.html +%%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/acd/ApplicationParam.html %%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/AcdFunResolve.html %%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/AcdVarResolve.html %%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/Ajax.html %%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/Dependent.html %%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/ParseAcd.html -%%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/acd/ApplicationFields.html -%%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/acd/ApplicationParam.html %%DATADIR%%/jemboss/api/org/emboss/jemboss/programs/JembossProcess.html %%DATADIR%%/jemboss/api/org/emboss/jemboss/programs/ListFile.html %%DATADIR%%/jemboss/api/org/emboss/jemboss/programs/ResultList.html @@ -824,6 +1807,17 @@ lib/libplplot.so.5 %%DATADIR%%/jemboss/api/org/emboss/jemboss/soap/PendingResults.html %%DATADIR%%/jemboss/api/org/emboss/jemboss/soap/PrivateRequest.html %%DATADIR%%/jemboss/api/org/emboss/jemboss/soap/ResListView.html +%%DATADIR%%/jemboss/api/org/emboss/jemboss/Jemboss.html +%%DATADIR%%/jemboss/api/org/emboss/jemboss/Jemboss.winExit.html +%%DATADIR%%/jemboss/api/org/emboss/jemboss/JembossLogo.html +%%DATADIR%%/jemboss/api/org/emboss/jemboss/JembossParams.html +%%DATADIR%%/jemboss/api/allclasses-frame.html +%%DATADIR%%/jemboss/api/deprecated-list.html +%%DATADIR%%/jemboss/api/getClasses.pl +%%DATADIR%%/jemboss/api/help-doc.html +%%DATADIR%%/jemboss/api/index-all.html +%%DATADIR%%/jemboss/api/index.html +%%DATADIR%%/jemboss/api/makeDocs.csh %%DATADIR%%/jemboss/api/overview-tree.html %%DATADIR%%/jemboss/api/package-list %%DATADIR%%/jemboss/api/packages.html @@ -839,9 +1833,6 @@ lib/libplplot.so.5 %%DATADIR%%/jemboss/images/Job_manager_button.gif %%DATADIR%%/jemboss/images/Refresh_button.gif %%DATADIR%%/jemboss/images/Refresh_button2.gif -%%DATADIR%%/jemboss/lib/JembossPrintAlignment.jar -%%DATADIR%%/jemboss/lib/README -%%DATADIR%%/jemboss/lib/activation.jar %%DATADIR%%/jemboss/lib/axis/axis-ant.jar %%DATADIR%%/jemboss/lib/axis/axis.jar %%DATADIR%%/jemboss/lib/axis/commons-discovery.jar @@ -851,101 +1842,83 @@ lib/libplplot.so.5 %%DATADIR%%/jemboss/lib/axis/saaj.jar %%DATADIR%%/jemboss/lib/axis/servlet.jar %%DATADIR%%/jemboss/lib/axis/wsdl4j.jar -%%DATADIR%%/jemboss/lib/grout.jar +%%DATADIR%%/jemboss/lib/README +%%DATADIR%%/jemboss/lib/activation.jar %%DATADIR%%/jemboss/lib/jakarta-regexp-1.2.jar -%%DATADIR%%/jemboss/lib/jalview.jar %%DATADIR%%/jemboss/lib/mail.jar %%DATADIR%%/jemboss/lib/xerces.jar -%%DATADIR%%/jemboss/org/emboss/jemboss/Jemboss.java -%%DATADIR%%/jemboss/org/emboss/jemboss/JembossJarUtil.java -%%DATADIR%%/jemboss/org/emboss/jemboss/JembossLogo.java -%%DATADIR%%/jemboss/org/emboss/jemboss/JembossParams.java -%%DATADIR%%/jemboss/org/emboss/jemboss/draw/Block.java -%%DATADIR%%/jemboss/org/emboss/jemboss/draw/DNADraw.java -%%DATADIR%%/jemboss/org/emboss/jemboss/draw/EmbossCirdnaReader.java -%%DATADIR%%/jemboss/org/emboss/jemboss/draw/GeneticMarker.java -%%DATADIR%%/jemboss/org/emboss/jemboss/draw/LineAttribute.java -%%DATADIR%%/jemboss/org/emboss/jemboss/draw/PrintDNAImage.java -%%DATADIR%%/jemboss/org/emboss/jemboss/draw/RestrictionEnzyme.java -%%DATADIR%%/jemboss/org/emboss/jemboss/draw/Ticks.java -%%DATADIR%%/jemboss/org/emboss/jemboss/draw/Wizard.java +%%DATADIR%%/jemboss/lib/jalview.jar +%%DATADIR%%/jemboss/lib/JembossPrintAlignment.jar +%%DATADIR%%/jemboss/lib/grout.jar %%DATADIR%%/jemboss/org/emboss/jemboss/editor/AlignApplet.java +%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutSequenceJPanel.java %%DATADIR%%/jemboss/org/emboss/jemboss/editor/AlignJFrame.java +%%DATADIR%%/jemboss/org/emboss/jemboss/editor/Matrix.java %%DATADIR%%/jemboss/org/emboss/jemboss/editor/ColourJFrame.java +%%DATADIR%%/jemboss/org/emboss/jemboss/editor/MatrixJFrame.java %%DATADIR%%/jemboss/org/emboss/jemboss/editor/ColourMenu.java +%%DATADIR%%/jemboss/org/emboss/jemboss/editor/PatternJFrame.java %%DATADIR%%/jemboss/org/emboss/jemboss/editor/ColourPanel.java +%%DATADIR%%/jemboss/org/emboss/jemboss/editor/PlotConsensus.java %%DATADIR%%/jemboss/org/emboss/jemboss/editor/Consensus.java +%%DATADIR%%/jemboss/org/emboss/jemboss/editor/PrettyPlotJFrame.java %%DATADIR%%/jemboss/org/emboss/jemboss/editor/ConsensusOptions.java +%%DATADIR%%/jemboss/org/emboss/jemboss/editor/PrintAlignmentImage.java %%DATADIR%%/jemboss/org/emboss/jemboss/editor/GraphicSequenceCollection.java -%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutAlignJFrame.java -%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutAlignJFrameEvent.java -%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutAlignJFrameListener.java -%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutGraphicSequenceCollection.java -%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutGraphicSequenceCollectionEvent.java -%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutGraphicSequenceCollectionListener.java -%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutSequence.java -%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutSequenceJPanel.java -%%DATADIR%%/jemboss/org/emboss/jemboss/editor/IDTableJFrame.java -%%DATADIR%%/jemboss/org/emboss/jemboss/editor/Matrix.java -%%DATADIR%%/jemboss/org/emboss/jemboss/editor/MatrixJFrame.java -%%DATADIR%%/jemboss/org/emboss/jemboss/editor/Paste.java -%%DATADIR%%/jemboss/org/emboss/jemboss/editor/PatternJFrame.java -%%DATADIR%%/jemboss/org/emboss/jemboss/editor/PlotConsensus.java -%%DATADIR%%/jemboss/org/emboss/jemboss/editor/PrettyPlotJFrame.java %%DATADIR%%/jemboss/org/emboss/jemboss/editor/PrintAlignment.java -%%DATADIR%%/jemboss/org/emboss/jemboss/editor/PrintAlignmentImage.java -%%DATADIR%%/jemboss/org/emboss/jemboss/editor/PrintableJTable.java +%%DATADIR%%/jemboss/org/emboss/jemboss/editor/Paste.java +%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutAlignJFrameEvent.java %%DATADIR%%/jemboss/org/emboss/jemboss/editor/Sequence.java +%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutAlignJFrame.java %%DATADIR%%/jemboss/org/emboss/jemboss/editor/SequenceJPanel.java +%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutAlignJFrameListener.java %%DATADIR%%/jemboss/org/emboss/jemboss/editor/SequenceNameJButton.java +%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutGraphicSequenceCollectionEvent.java %%DATADIR%%/jemboss/org/emboss/jemboss/editor/SequenceProperties.java +%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutGraphicSequenceCollection.java %%DATADIR%%/jemboss/org/emboss/jemboss/editor/SequenceReader.java +%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutGraphicSequenceCollectionListener.java %%DATADIR%%/jemboss/org/emboss/jemboss/editor/SequenceSaver.java +%%DATADIR%%/jemboss/org/emboss/jemboss/editor/GroutSequence.java +%%DATADIR%%/jemboss/org/emboss/jemboss/editor/IDTableJFrame.java +%%DATADIR%%/jemboss/org/emboss/jemboss/editor/PrintableJTable.java +%%DATADIR%%/jemboss/org/emboss/jemboss/draw/Block.java +%%DATADIR%%/jemboss/org/emboss/jemboss/draw/PrintDNAImage.java +%%DATADIR%%/jemboss/org/emboss/jemboss/draw/DNADraw.java +%%DATADIR%%/jemboss/org/emboss/jemboss/draw/RestrictionEnzyme.java +%%DATADIR%%/jemboss/org/emboss/jemboss/draw/EmbossCirdnaReader.java +%%DATADIR%%/jemboss/org/emboss/jemboss/draw/Ticks.java +%%DATADIR%%/jemboss/org/emboss/jemboss/draw/GeneticMarker.java +%%DATADIR%%/jemboss/org/emboss/jemboss/draw/Wizard.java +%%DATADIR%%/jemboss/org/emboss/jemboss/draw/LineAttribute.java %%DATADIR%%/jemboss/org/emboss/jemboss/graphics/Graph2DPlot.java %%DATADIR%%/jemboss/org/emboss/jemboss/graphics/PrintPlot.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/AdvancedOptions.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/Browser.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/BuildProgramMenu.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/Favorites.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/ImageIconJPanel.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/KeywordSearch.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/LaunchJalView.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/MemoryComboBox.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/ResultsMenuBar.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/ScrollPanel.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/SequenceData.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/SequenceList.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/SetUpMenuBar.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/ShowResultSet.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/ShowSavedResults.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/SplashThread.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/SwingWorker.java %%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/DragTree.java %%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/FileEditorDisplay.java %%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/FileNode.java %%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/FileSave.java %%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/FileSaving.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/LocalAndRemoteFileTreeFrame.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/LocalTreeToolBar.java %%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/RemoteDragTree.java %%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/RemoteFileNode.java %%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/RemoteFileTreePanel.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/AlignFormat.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/ApplicationNamePanel.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/LocalAndRemoteFileTreeFrame.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree/LocalTreeToolBar.java %%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/BuildJembossForm.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/JembossComboPopup.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/LabelTextBox.java %%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/ListFilePanel.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/MultiLineToolTipUI.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/PlafMacros.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/ReportFormat.java %%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/SectionPanel.java -%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/Separator.java %%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/SetInFileCard.java %%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/SetOutFileCard.java %%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/TextFieldFloat.java %%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/TextFieldInt.java %%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/TextFieldSink.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/JembossComboPopup.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/MultiLineToolTipUI.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/PlafMacros.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/ReportFormat.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/AlignFormat.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/ApplicationNamePanel.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/LabelTextBox.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/form/Separator.java %%DATADIR%%/jemboss/org/emboss/jemboss/gui/sequenceChooser/CutNPasteTextArea.java %%DATADIR%%/jemboss/org/emboss/jemboss/gui/sequenceChooser/FileChooser.java %%DATADIR%%/jemboss/org/emboss/jemboss/gui/sequenceChooser/InputSequenceAttributes.java @@ -954,15 +1927,32 @@ lib/libplplot.so.5 %%DATADIR%%/jemboss/org/emboss/jemboss/gui/sequenceChooser/TextAreaSink.java %%DATADIR%%/jemboss/org/emboss/jemboss/gui/startup/Database.java %%DATADIR%%/jemboss/org/emboss/jemboss/gui/startup/ProgList.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/AdvancedOptions.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/ResultsMenuBar.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/ShowResultSet.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/BuildProgramMenu.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/SequenceData.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/ShowSavedResults.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/LaunchJalView.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/SequenceList.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/SwingWorker.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/MemoryComboBox.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/SetUpMenuBar.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/Browser.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/SplashThread.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/ScrollPanel.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/ImageIconJPanel.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/Favorites.java +%%DATADIR%%/jemboss/org/emboss/jemboss/gui/KeywordSearch.java +%%DATADIR%%/jemboss/org/emboss/jemboss/parser/acd/ApplicationFields.java +%%DATADIR%%/jemboss/org/emboss/jemboss/parser/acd/ApplicationParam.java %%DATADIR%%/jemboss/org/emboss/jemboss/parser/AcdFunResolve.java -%%DATADIR%%/jemboss/org/emboss/jemboss/parser/AcdVarResolve.java %%DATADIR%%/jemboss/org/emboss/jemboss/parser/AcdVariableResolve.java +%%DATADIR%%/jemboss/org/emboss/jemboss/parser/AcdVarResolve.java %%DATADIR%%/jemboss/org/emboss/jemboss/parser/Ajax.java %%DATADIR%%/jemboss/org/emboss/jemboss/parser/AjaxUtil.java %%DATADIR%%/jemboss/org/emboss/jemboss/parser/Dependent.java %%DATADIR%%/jemboss/org/emboss/jemboss/parser/ParseAcd.java -%%DATADIR%%/jemboss/org/emboss/jemboss/parser/acd/ApplicationFields.java -%%DATADIR%%/jemboss/org/emboss/jemboss/parser/acd/ApplicationParam.java %%DATADIR%%/jemboss/org/emboss/jemboss/programs/BatchUpdateTimer.java %%DATADIR%%/jemboss/org/emboss/jemboss/programs/JembossProcess.java %%DATADIR%%/jemboss/org/emboss/jemboss/programs/ListFile.java @@ -970,1017 +1960,112 @@ lib/libplplot.so.5 %%DATADIR%%/jemboss/org/emboss/jemboss/programs/ResultsUpdateTimer.java %%DATADIR%%/jemboss/org/emboss/jemboss/programs/RunEmbossApplication.java %%DATADIR%%/jemboss/org/emboss/jemboss/programs/RunEmbossApplication2.java -%%DATADIR%%/jemboss/org/emboss/jemboss/server/AppendToLogFileThread.java -%%DATADIR%%/jemboss/org/emboss/jemboss/server/JembossAuthServer.java -%%DATADIR%%/jemboss/org/emboss/jemboss/server/JembossFileAuthServer.java -%%DATADIR%%/jemboss/org/emboss/jemboss/server/JembossFileServer.java %%DATADIR%%/jemboss/org/emboss/jemboss/server/JembossServer.java +%%DATADIR%%/jemboss/org/emboss/jemboss/server/JembossFileServer.java %%DATADIR%%/jemboss/org/emboss/jemboss/server/JembossThread.java -%%DATADIR%%/jemboss/org/emboss/jemboss/server/TestPrivateServer.java +%%DATADIR%%/jemboss/org/emboss/jemboss/server/JembossAuthServer.java +%%DATADIR%%/jemboss/org/emboss/jemboss/server/JembossFileAuthServer.java %%DATADIR%%/jemboss/org/emboss/jemboss/server/TestPublicServer.java +%%DATADIR%%/jemboss/org/emboss/jemboss/server/TestPrivateServer.java +%%DATADIR%%/jemboss/org/emboss/jemboss/server/AppendToLogFileThread.java %%DATADIR%%/jemboss/org/emboss/jemboss/soap/AuthPopup.java -%%DATADIR%%/jemboss/org/emboss/jemboss/soap/CallAjax.java -%%DATADIR%%/jemboss/org/emboss/jemboss/soap/FileList.java -%%DATADIR%%/jemboss/org/emboss/jemboss/soap/FileRoots.java -%%DATADIR%%/jemboss/org/emboss/jemboss/soap/GetACD.java -%%DATADIR%%/jemboss/org/emboss/jemboss/soap/GetHelp.java -%%DATADIR%%/jemboss/org/emboss/jemboss/soap/GetWossname.java -%%DATADIR%%/jemboss/org/emboss/jemboss/soap/JembossRun.java %%DATADIR%%/jemboss/org/emboss/jemboss/soap/JembossSoapException.java -%%DATADIR%%/jemboss/org/emboss/jemboss/soap/MakeFileSafe.java +%%DATADIR%%/jemboss/org/emboss/jemboss/soap/CallAjax.java %%DATADIR%%/jemboss/org/emboss/jemboss/soap/PendingResults.java +%%DATADIR%%/jemboss/org/emboss/jemboss/soap/GetWossname.java %%DATADIR%%/jemboss/org/emboss/jemboss/soap/PrivateRequest.java -%%DATADIR%%/jemboss/org/emboss/jemboss/soap/PublicRequest.java +%%DATADIR%%/jemboss/org/emboss/jemboss/soap/JembossRun.java %%DATADIR%%/jemboss/org/emboss/jemboss/soap/ServerSetup.java +%%DATADIR%%/jemboss/org/emboss/jemboss/soap/FileRoots.java +%%DATADIR%%/jemboss/org/emboss/jemboss/soap/FileList.java +%%DATADIR%%/jemboss/org/emboss/jemboss/soap/PublicRequest.java +%%DATADIR%%/jemboss/org/emboss/jemboss/soap/GetACD.java +%%DATADIR%%/jemboss/org/emboss/jemboss/soap/GetHelp.java %%DATADIR%%/jemboss/org/emboss/jemboss/soap/ShowDB.java -%%DATADIR%%/jemboss/readme.html -%%DATADIR%%/jemboss/resources/filemgr.html +%%DATADIR%%/jemboss/org/emboss/jemboss/soap/MakeFileSafe.java +%%DATADIR%%/jemboss/org/emboss/jemboss/Jemboss.java +%%DATADIR%%/jemboss/org/emboss/jemboss/JembossLogo.java +%%DATADIR%%/jemboss/org/emboss/jemboss/JembossParams.java +%%DATADIR%%/jemboss/org/emboss/jemboss/JembossJarUtil.java %%DATADIR%%/jemboss/resources/jemboss.properties %%DATADIR%%/jemboss/resources/readme.html %%DATADIR%%/jemboss/resources/readmeAlign.html %%DATADIR%%/jemboss/resources/readmeDNADraw.html %%DATADIR%%/jemboss/resources/results.html -%%DATADIR%%/jemboss/resources/seqList.html %%DATADIR%%/jemboss/resources/version -%%DATADIR%%/jemboss/runJemboss.sh -%%DATADIR%%/jemboss/utils/README +%%DATADIR%%/jemboss/resources/filemgr.html +%%DATADIR%%/jemboss/resources/seqList.html %%DATADIR%%/jemboss/utils/install-jemboss-server.sh %%DATADIR%%/jemboss/utils/keys.sh -%%DATADIR%%/jemboss/utils/makeFileManagerJNLP.sh -%%DATADIR%%/jemboss/utils/makeJNLP.sh %%DATADIR%%/jemboss/utils/makeJar.csh +%%DATADIR%%/jemboss/utils/makeJNLP.sh +%%DATADIR%%/jemboss/utils/makeFileManagerJNLP.sh %%DATADIR%%/jemboss/utils/template.html -%%DATADIR%%/plstnd5.fnt -%%DATADIR%%/plxtnd5.fnt -%%DATADIR%%/test/data/aaindex1.test -%%DATADIR%%/test/data/aligna.dna -%%DATADIR%%/test/data/aligna.prot -%%DATADIR%%/test/data/alignapart.dna -%%DATADIR%%/test/data/alignapart.prot -%%DATADIR%%/test/data/alignb.dna -%%DATADIR%%/test/data/alignb.prot -%%DATADIR%%/test/data/cutg.codon -%%DATADIR%%/test/data/dna.acedb -%%DATADIR%%/test/data/dna.aln -%%DATADIR%%/test/data/dna.asn1 -%%DATADIR%%/test/data/dna.codata -%%DATADIR%%/test/data/dna.embl -%%DATADIR%%/test/data/dna.fasta -%%DATADIR%%/test/data/dna.fitch -%%DATADIR%%/test/data/dna.gcg -%%DATADIR%%/test/data/dna.gcg8 -%%DATADIR%%/test/data/dna.genbank -%%DATADIR%%/test/data/dna.ig -%%DATADIR%%/test/data/dna.m-acedb -%%DATADIR%%/test/data/dna.m-codata -%%DATADIR%%/test/data/dna.m-embl -%%DATADIR%%/test/data/dna.m-fasta -%%DATADIR%%/test/data/dna.m-fasta-long -%%DATADIR%%/test/data/dna.m-ncbi -%%DATADIR%%/test/data/dna.m-strider -%%DATADIR%%/test/data/dna.msf -%%DATADIR%%/test/data/dna.msf8 -%%DATADIR%%/test/data/dna.ncbi -%%DATADIR%%/test/data/dna.phylip -%%DATADIR%%/test/data/dna.phylip3 -%%DATADIR%%/test/data/dna.staden -%%DATADIR%%/test/data/dna.strider -%%DATADIR%%/test/data/dna.text -%%DATADIR%%/test/data/feat.emft -%%DATADIR%%/test/data/feat.fasta -%%DATADIR%%/test/data/feat.pir -%%DATADIR%%/test/data/mw1.dat -%%DATADIR%%/test/data/mw2.dat -%%DATADIR%%/test/data/mw3.dat -%%DATADIR%%/test/data/paamir.pep -%%DATADIR%%/test/data/pax6_cdna.fasta -%%DATADIR%%/test/data/prints.test -%%DATADIR%%/test/data/prosite.dat -%%DATADIR%%/test/data/prosite.doc -%%DATADIR%%/test/data/prot.acedb -%%DATADIR%%/test/data/prot.codata -%%DATADIR%%/test/data/prot.fasta -%%DATADIR%%/test/data/prot.gcg -%%DATADIR%%/test/data/prot.gcg8 -%%DATADIR%%/test/data/prot.ig -%%DATADIR%%/test/data/prot.m-acedb -%%DATADIR%%/test/data/prot.m-codata -%%DATADIR%%/test/data/prot.m-fasta -%%DATADIR%%/test/data/prot.m-nbrf -%%DATADIR%%/test/data/prot.m-ncbi -%%DATADIR%%/test/data/prot.m-swiss -%%DATADIR%%/test/data/prot.nbrf -%%DATADIR%%/test/data/prot.ncbi -%%DATADIR%%/test/data/prot.swiss -%%DATADIR%%/test/data/prot.text -%%DATADIR%%/test/data/site.dat -%%DATADIR%%/test/data/tranalign.pep -%%DATADIR%%/test/data/tranalign.seq -%%DATADIR%%/test/data/withrefm -%%DATADIR%%/test/data/z83307.seq -%%DATADIR%%/test/embl/acnum.hit -%%DATADIR%%/test/embl/acnum.trg -%%DATADIR%%/test/embl/des.hit -%%DATADIR%%/test/embl/des.trg -%%DATADIR%%/test/embl/division.lkp -%%DATADIR%%/test/embl/entrynam.idx -%%DATADIR%%/test/embl/est.dat -%%DATADIR%%/test/embl/fun.dat -%%DATADIR%%/test/embl/hum1.dat -%%DATADIR%%/test/embl/inv.dat -%%DATADIR%%/test/embl/keyword.hit -%%DATADIR%%/test/embl/keyword.trg -%%DATADIR%%/test/embl/pln.dat -%%DATADIR%%/test/embl/pro.dat -%%DATADIR%%/test/embl/rod.dat -%%DATADIR%%/test/embl/seqvn.hit -%%DATADIR%%/test/embl/seqvn.trg -%%DATADIR%%/test/embl/sts.dat -%%DATADIR%%/test/embl/taxon.hit -%%DATADIR%%/test/embl/taxon.trg -%%DATADIR%%/test/embl/vrl.dat -%%DATADIR%%/test/embl/vrt.dat -%%DATADIR%%/test/gb/acnum.hit -%%DATADIR%%/test/gb/acnum.trg -%%DATADIR%%/test/gb/ba.ref -%%DATADIR%%/test/gb/ba.seq -%%DATADIR%%/test/gb/des.hit -%%DATADIR%%/test/gb/des.trg -%%DATADIR%%/test/gb/division.lkp -%%DATADIR%%/test/gb/entrynam.idx -%%DATADIR%%/test/gb/htg.ref -%%DATADIR%%/test/gb/htg.seq -%%DATADIR%%/test/gb/keyword.hit -%%DATADIR%%/test/gb/keyword.trg -%%DATADIR%%/test/gb/seqvn.hit -%%DATADIR%%/test/gb/seqvn.trg -%%DATADIR%%/test/gb/taxon.hit -%%DATADIR%%/test/gb/taxon.trg -%%DATADIR%%/test/genbank/acnum.hit -%%DATADIR%%/test/genbank/acnum.trg -%%DATADIR%%/test/genbank/des.hit -%%DATADIR%%/test/genbank/des.trg -%%DATADIR%%/test/genbank/division.lkp -%%DATADIR%%/test/genbank/entrynam.idx -%%DATADIR%%/test/genbank/gbbct1.seq -%%DATADIR%%/test/genbank/gbest1.seq -%%DATADIR%%/test/genbank/gbinv1.seq -%%DATADIR%%/test/genbank/gbpln1.seq -%%DATADIR%%/test/genbank/gbpln2.seq -%%DATADIR%%/test/genbank/gbpri1.seq -%%DATADIR%%/test/genbank/gbrod1.seq -%%DATADIR%%/test/genbank/gbsts1.seq -%%DATADIR%%/test/genbank/gbvrl1.seq -%%DATADIR%%/test/genbank/gbvrt.seq -%%DATADIR%%/test/genbank/keyword.hit -%%DATADIR%%/test/genbank/keyword.trg -%%DATADIR%%/test/genbank/seqvn.hit -%%DATADIR%%/test/genbank/seqvn.trg -%%DATADIR%%/test/genbank/taxon.hit -%%DATADIR%%/test/genbank/taxon.trg -%%DATADIR%%/test/pir/acnum.hit -%%DATADIR%%/test/pir/acnum.trg -%%DATADIR%%/test/pir/des.hit -%%DATADIR%%/test/pir/des.trg -%%DATADIR%%/test/pir/division.lkp -%%DATADIR%%/test/pir/entrynam.idx -%%DATADIR%%/test/pir/keyword.hit -%%DATADIR%%/test/pir/keyword.trg -%%DATADIR%%/test/pir/pir1.header -%%DATADIR%%/test/pir/pir1.names -%%DATADIR%%/test/pir/pir1.numbers -%%DATADIR%%/test/pir/pir1.offset -%%DATADIR%%/test/pir/pir1.ref -%%DATADIR%%/test/pir/pir1.seq -%%DATADIR%%/test/pir/pir2.header -%%DATADIR%%/test/pir/pir2.names -%%DATADIR%%/test/pir/pir2.numbers -%%DATADIR%%/test/pir/pir2.offset -%%DATADIR%%/test/pir/pir2.ref -%%DATADIR%%/test/pir/pir2.seq -%%DATADIR%%/test/pir/pir3.header -%%DATADIR%%/test/pir/pir3.names -%%DATADIR%%/test/pir/pir3.numbers -%%DATADIR%%/test/pir/pir3.offset -%%DATADIR%%/test/pir/pir3.ref -%%DATADIR%%/test/pir/pir3.seq -%%DATADIR%%/test/pir/pir4.header -%%DATADIR%%/test/pir/pir4.names -%%DATADIR%%/test/pir/pir4.numbers -%%DATADIR%%/test/pir/pir4.offset -%%DATADIR%%/test/pir/pir4.ref -%%DATADIR%%/test/pir/pir4.seq -%%DATADIR%%/test/pir/taxon.hit -%%DATADIR%%/test/pir/taxon.trg -%%DATADIR%%/test/swiss/acnum.hit -%%DATADIR%%/test/swiss/acnum.trg -%%DATADIR%%/test/swiss/des.hit -%%DATADIR%%/test/swiss/des.trg -%%DATADIR%%/test/swiss/division.lkp -%%DATADIR%%/test/swiss/entrynam.idx -%%DATADIR%%/test/swiss/keyword.hit -%%DATADIR%%/test/swiss/keyword.trg -%%DATADIR%%/test/swiss/seq.dat -%%DATADIR%%/test/swiss/seqvn.hit -%%DATADIR%%/test/swiss/seqvn.trg -%%DATADIR%%/test/swiss/taxon.hit -%%DATADIR%%/test/swiss/taxon.trg -%%DATADIR%%/test/swnew/acnum.hit -%%DATADIR%%/test/swnew/acnum.trg -%%DATADIR%%/test/swnew/des.hit -%%DATADIR%%/test/swnew/des.trg -%%DATADIR%%/test/swnew/division.lkp -%%DATADIR%%/test/swnew/entrynam.idx -%%DATADIR%%/test/swnew/keyword.hit -%%DATADIR%%/test/swnew/keyword.trg -%%DATADIR%%/test/swnew/new_seq.dat -%%DATADIR%%/test/swnew/seqvn.hit -%%DATADIR%%/test/swnew/seqvn.trg -%%DATADIR%%/test/swnew/taxon.hit -%%DATADIR%%/test/swnew/taxon.trg -%%DATADIR%%/test/swnew/upd_ann.dat -%%DATADIR%%/test/swnew/upd_seq.dat -%%DATADIR%%/test/wormpep/acnum.hit -%%DATADIR%%/test/wormpep/acnum.trg -%%DATADIR%%/test/wormpep/des.hit -%%DATADIR%%/test/wormpep/des.trg -%%DATADIR%%/test/wormpep/division.lkp -%%DATADIR%%/test/wormpep/entrynam.idx -%%DATADIR%%/test/wormpep/wormpep -%%PORTDOCS%%%%DOCSDIR%%/manuals/EMBOSS-FreeBSD-HOWTO.txt -%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.aux -%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.dvi -%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.log -%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.pdf -%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.ps -%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.sty -%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.tex -%%PORTDOCS%%%%DOCSDIR%%/manuals/admin.toc -%%PORTDOCS%%%%DOCSDIR%%/manuals/adminguide.tar.gz -%%PORTDOCS%%%%DOCSDIR%%/manuals/domainatrix.doc -%%PORTDOCS%%%%DOCSDIR%%/manuals/emboss.sty -%%PORTDOCS%%%%DOCSDIR%%/manuals/emboss_qg.pdf -%%PORTDOCS%%%%DOCSDIR%%/manuals/emboss_qg.ps -%%PORTDOCS%%%%DOCSDIR%%/manuals/fdl.txt -%%PORTDOCS%%%%DOCSDIR%%/manuals/program.ps.gz -%%PORTDOCS%%%%DOCSDIR%%/programs/html/aaindexextract.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/abiview.1.abiview.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/abiview.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/acd_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/acdc.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/acdlog.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/acdpretty.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/acdtable.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/acdtrace.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/acdvalid.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/ajtest.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/alignment_consensus_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/alignment_differences_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/alignment_dot_plots_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/alignment_global_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/alignment_local_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/alignment_multiple_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/alignrunner.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/allversusall.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/antigenic.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/backtranseq.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/banana.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/biosed.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/btwisted.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/cai.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/cathparse.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/chaos.1.chaos.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/chaos.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/charge.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/checktrans.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/chips.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/cirdna.1.cirdna.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/cirdna.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/clique.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/codcmp.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/coderet.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/compseq.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/cons.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/consense.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/contactalign.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/contactcount.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/contacts.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/contml.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/contrast.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/cpgplot.1.cpgplot.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/cpgplot.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/cpgreport.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/crystalball.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/cusp.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/cutgextract.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/cutseq.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/dan.2.dan.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/dan.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/dbiblast.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/dbifasta.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/dbiflat.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/dbigcg.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/degapseq.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/degapseqrunner.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/descseq.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/diffseq.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/digest.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/display_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/distmat.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/dnacomp.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/dnadist.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/dnainvar.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/dnaml.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/dnamlk.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/dnapars.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/dnapenny.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/dollop.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/dolpenny.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/domainalign.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/domainer.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/domainnr.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/domainrep.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/domainreso.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/domainseqs.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/domainsse.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/dotmatcher.1.dotmatcher.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/dotmatcher.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/dotpath.1.dotpath.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/dotpath.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/dottup.1.dottup.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/dottup.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/dreg.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/ealistat.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/eclique.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/econsense.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/econtml.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/econtrast.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/edit_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednacomp.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednadist.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednainvar.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednaml.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednamlk.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednapars.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/ednapenny.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/edollop.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/edolpenny.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/efactor.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/efitch.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/egendist.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmalign.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmbuild.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmcalibrate.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmconvert.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmemit.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmfetch.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmindex.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmpfam.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/ehmmsearch.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/einverted.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/ekitsch.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/emboss_icon.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/emboss_icon.jpg -%%PORTDOCS%%%%DOCSDIR%%/programs/html/embossdata.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/embossversion.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/emix.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/emma.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/emnu.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/emowse.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/eneighbor.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/entret.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/enzyme_kinetics_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/epenny.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/epestfind.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/eprimer3.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/eprotdist.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/eprotpars.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/equicktandem.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/erestml.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/eseqboot.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/esim4.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/est2genome.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/etandem.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/extractfeat.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/extractseq.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/factor.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fclique.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fconsense.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fcontml.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fcontrast.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdiscboot.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnacomp.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnadist.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnainvar.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnaml.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnamlk.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnamove.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnapars.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdnapenny.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdollop.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdolmove.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdolpenny.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdrawgram.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fdrawtree.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/feature_tables_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/ffactor.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/ffitch.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/ffreqboot.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fgendist.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/findkm.1.findkm.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/findkm.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fitch.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fkitsch.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fmix.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fmove.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fneighbor.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fpars.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fpenny.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fproml.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fpromlk.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fprotdist.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fprotpars.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/freak.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/frestboot.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/frestdist.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/frestml.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fretree.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fseqboot.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fseqbootall.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/ftreedist.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/ftreedistpair.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fuzznuc.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fuzzpro.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/fuzztran.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/garnier.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/geecee.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/gendist.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/getorf.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/groups.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/helixturnhelix.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/hetparse.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/hmm_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/hmoment.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/iep.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/index.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/infoalign.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/information_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/infoseq.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/interface.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/isochore.1.isochore.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/isochore.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/jembossctl.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/kitsch.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/libgen.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/libscan.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/lindna.1.lindna.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/lindna.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/listor.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/marscan.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/maskfeat.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/maskseq.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/matcher.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/megamerger.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/meme.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/menus_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/merger.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/mix.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/msbar.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/mse.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/mwcontam.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/mwfilter.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/myseq.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/nawalign.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/nawalignrunner.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/needle.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/needlerunner.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/neighbor.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/newcpgreport.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/newcpgseek.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/newseq.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/noreturn.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/notseq.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/nthseq.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_2d_structure_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_codon_usage_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_codon_usage_nucleic_gene_finding_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_composition_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_cpg_islands_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_gene_finding_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_motifs_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_mutation_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_primers_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_profiles_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_repeats_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_restriction_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_transcription_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/nucleic_translation_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/octanol.1.octanol.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/octanol.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/oddcomp.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/palindrome.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/pasteseq.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/patmatdb.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/patmatmotifs.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/pdbparse.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/pdbplus.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/pdbtosp.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/penny.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepcoil.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepinfo.1.pepinfo.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepinfo.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepnet.1.pepnet.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepnet.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepstats.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepwheel.1.pepwheel.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepwheel.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepwindow.1.pepwindow.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepwindow.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepwindowall.1.pepwindowall.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/pepwindowall.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/pestfind.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_consensus_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_continuous_characters_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_discrete_characters_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_distance_matrix_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_gene_frequencies_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_molecular_sequence_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/phylogeny_tree_drawing_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/plotcon.1.plotcon.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/plotcon.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/plotorf.1.plotorf.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/plotorf.2.plotorf.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/plotorf.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/polydot.1.polydot.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/polydot.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/preg.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/prettyplot.1.prettyplot.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/prettyplot.2.prettyplot.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/prettyplot.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/prettyseq.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/primersearch.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/printsextract.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/profit.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/prophecy.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/prophet.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/prosextract.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/protdist.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_2d_structure_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_3d_structure_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_composition_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_motifs_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_mutation_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_profiles_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/protein_sequence_alignment_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/pscan.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/psiphi.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/rebaseextract.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/recoder.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/redata.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/remap.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/restml.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/restover.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/restrict.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/revseq.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/rocon.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/rocplot.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/scope.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/scopparse.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/scorer.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/scorerrunner.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/seealso.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqalign.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqboot.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqfraggle.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqmatchall.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqnr.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqret.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqretsplit.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqsearch.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqsort.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/seqwords.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/showalign.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/showdb.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/showfeat.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/showorf.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/showseq.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/shuffleseq.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/sigcleave.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/siggen.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/sigscan.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/silent.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/sirna.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/sites.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/sixpack.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/skipseq.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/splitter.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/ssematch.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/stretcher.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/stssearch.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/substitute.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/substituterunner.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/supermatcher.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/syco.1.syco.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/syco.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/tcode.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/template.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/test_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/textsearch.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/tfextract.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/tfm.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/tfscan.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/tmap.1.tmap.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/tmap.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/topo.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/topo.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/tranalign.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/transeq.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/trimest.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/trimseq.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/twofeat.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/union.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/utils_database_creation_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/utils_database_indexing_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/utils_misc_group.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/vectorstrip.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/water.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/whichdb.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/wobble.1.wobble.gif -%%PORTDOCS%%%%DOCSDIR%%/programs/html/wobble.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/wordcount.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/wordmatch.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/wossname.html -%%PORTDOCS%%%%DOCSDIR%%/programs/html/yank.html -%%PORTDOCS%%%%DOCSDIR%%/programs/text/aaindexextract.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/abiview.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/acdc.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/acdlog.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/acdpretty.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/acdtable.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/acdtrace.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/acdvalid.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/alignrunner.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/allversusall.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/antigenic.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/backtranseq.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/banana.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/biosed.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/btwisted.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/cai.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/cathparse.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/chaos.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/charge.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/checktrans.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/chips.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/cirdna.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/clique.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/codcmp.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/coderet.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/complex.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/compseq.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/cons.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/consense.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/contactalign.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/contactcount.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/contacts.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/contml.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/contrast.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/cpgplot.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/cpgreport.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/crystalball.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/cusp.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/cutgextract.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/cutseq.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/dan.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/dbiblast.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/dbifasta.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/dbiflat.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/dbigcg.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/degapseq.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/degapseqrunner.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/descseq.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/diffseq.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/digest.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/distmat.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/dnacomp.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/dnadist.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/dnainvar.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/dnaml.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/dnamlk.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/dnapars.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/dnapenny.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/dollop.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/dolpenny.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/domainalign.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/domainer.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/domainnr.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/domainrep.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/domainreso.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/domainseqs.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/domainsse.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/dotmatcher.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/dotpath.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/dottup.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/dreg.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/ealistat.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/eclique.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/econsense.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/econtml.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/econtrast.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednacomp.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednadist.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednainvar.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednaml.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednamlk.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednapars.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/ednapenny.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/edollop.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/edolpenny.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/efactor.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/efitch.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/egendist.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmalign.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmbuild.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmcalibrate.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmconvert.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmemit.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmfetch.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmindex.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmpfam.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/ehmmsearch.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/einverted.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/ekitsch.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/embossdata.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/embossversion.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/emix.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/emma.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/emnu.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/emowse.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/eneighbor.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/entret.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/epenny.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/epestfind.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/eprimer3.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/eprotdist.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/eprotpars.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/equicktandem.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/erestml.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/eseqboot.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/esim4.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/est2genome.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/etandem.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/extractfeat.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/extractseq.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/factor.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fclique.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fconsense.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fcontml.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fcontrast.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdiscboot.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnacomp.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnadist.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnainvar.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnaml.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnamlk.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnamove.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnapars.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdnapenny.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdollop.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdolmove.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdolpenny.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdrawgram.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fdrawtree.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/ffactor.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/ffitch.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/ffreqboot.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fgendist.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/findkm.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fitch.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fkitsch.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fmix.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fmove.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fneighbor.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fpars.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fpenny.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fproml.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fpromlk.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fprotdist.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fprotpars.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/freak.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/frestboot.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/frestdist.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/frestml.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fretree.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fseqboot.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fseqbootall.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/ftreedist.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/ftreedistpair.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fuzznuc.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fuzzpro.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/fuzztran.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/garnier.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/geecee.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/gendist.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/getorf.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/helixturnhelix.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/hetparse.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/hmoment.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/iep.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/infoalign.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/infoseq.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/interface.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/isochore.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/jembossctl.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/kitsch.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/libgen.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/libscan.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/lindna.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/listor.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/marscan.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/maskfeat.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/maskseq.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/matcher.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/megamerger.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/meme.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/merger.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/mix.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/msbar.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/mse.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/mwcontam.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/mwfilter.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/myseq.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/nawalign.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/nawalignrunner.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/needle.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/needlerunner.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/neighbor.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/newcpgreport.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/newcpgseek.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/newseq.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/noreturn.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/notseq.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/nthseq.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/octanol.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/oddcomp.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/palindrome.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/pasteseq.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/patmatdb.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/patmatmotifs.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/pdbparse.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/pdbplus.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/pdbtosp.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/penny.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepcoil.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepinfo.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepnet.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepstats.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepwheel.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepwindow.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/pepwindowall.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/pestfind.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/plotcon.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/plotorf.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/polydot.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/preg.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/prettyplot.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/prettyseq.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/primersearch.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/printsextract.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/profit.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/prophecy.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/prophet.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/prosextract.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/protdist.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/pscan.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/psiphi.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/rebaseextract.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/recoder.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/redata.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/remap.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/restml.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/restover.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/restrict.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/revseq.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/rocon.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/rocplot.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/scope.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/scopparse.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/scorer.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/scorerrunner.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/seealso.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqalign.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqboot.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqfraggle.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqmatchall.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqnr.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqret.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqretsplit.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqsearch.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqsort.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/seqwords.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/showalign.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/showdb.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/showfeat.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/showorf.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/showseq.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/shuffleseq.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/sigcleave.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/siggen.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/sigscan.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/silent.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/sirna.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/sites.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/sixpack.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/skipseq.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/splitter.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/ssematch.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/stretcher.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/stssearch.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/substitute.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/substituterunner.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/supermatcher.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/syco.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/tcode.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/textsearch.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/tfextract.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/tfm.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/tfscan.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/tmap.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/topo.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/tranalign.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/transeq.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/trimest.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/trimseq.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/twofeat.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/union.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/vectorstrip.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/water.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/whichdb.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/wobble.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/wordcount.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/wordmatch.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/wossname.txt -%%PORTDOCS%%%%DOCSDIR%%/programs/text/yank.txt -%%PORTDOCS%%%%DOCSDIR%%/tutorials/emboss-gcg.ppt -%%PORTDOCS%%%%DOCSDIR%%/tutorials/emboss-interfaces.ppt -%%PORTDOCS%%%%DOCSDIR%%/tutorials/emboss-talk.ppt -%%PORTDOCS%%%%DOCSDIR%%/tutorials/emboss_tut.tar.gz -%%PORTDOCS%%@dirrm %%DOCSDIR%%/tutorials -%%PORTDOCS%%@dirrm %%DOCSDIR%%/programs/text +%%DATADIR%%/jemboss/utils/README +%%DATADIR%%/jemboss/LICENSE +%%DATADIR%%/jemboss/readme.html +%%DATADIR%%/jemboss/runJemboss.sh +%%DATADIR%%/jemboss/README +%%PORTDOCS%%@dirrm %%DOCSDIR%%/manuals %%PORTDOCS%%@dirrm %%DOCSDIR%%/programs/html +%%PORTDOCS%%@dirrm %%DOCSDIR%%/programs/text %%PORTDOCS%%@dirrm %%DOCSDIR%%/programs -%%PORTDOCS%%@dirrm %%DOCSDIR%%/manuals +%%PORTDOCS%%@dirrm %%DOCSDIR%%/tutorials %%PORTDOCS%%@dirrm %%DOCSDIR%% -@dirrm %%DATADIR%%/test/wormpep -@dirrm %%DATADIR%%/test/swnew -@dirrm %%DATADIR%%/test/swiss -@dirrm %%DATADIR%%/test/pir +@dirrm %%DATADIR%%/acd +@dirrm %%DATADIR%%/data/AAINDEX +@dirrm %%DATADIR%%/data/CODONS +@dirrm %%DATADIR%%/data/REBASE +@dirrm %%DATADIR%%/data/PRINTS +@dirrm %%DATADIR%%/data/PROSITE +@dirrmtry %%DATADIR%%/data +@dirrm %%DATADIR%%/test/data +@dirrm %%DATADIR%%/test/embl @dirrm %%DATADIR%%/test/genbank @dirrm %%DATADIR%%/test/gb -@dirrm %%DATADIR%%/test/embl -@dirrm %%DATADIR%%/test/data +@dirrm %%DATADIR%%/test/pir +@dirrm %%DATADIR%%/test/swiss +@dirrm %%DATADIR%%/test/swnew +@dirrm %%DATADIR%%/test/wormpep @dirrm %%DATADIR%%/test -@dirrm %%DATADIR%%/jemboss/utils -@dirrm %%DATADIR%%/jemboss/resources -@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/soap -@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/server -@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/programs -@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/parser/acd -@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/parser -@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/startup -@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/sequenceChooser -@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/form -@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree -@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui -@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/graphics -@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/editor -@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/draw -@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss -@dirrm %%DATADIR%%/jemboss/org/emboss -@dirrm %%DATADIR%%/jemboss/org -@dirrm %%DATADIR%%/jemboss/lib/axis -@dirrm %%DATADIR%%/jemboss/lib -@dirrm %%DATADIR%%/jemboss/images -@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/soap -@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/programs -@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/acd -@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/parser -@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/startup -@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/sequenceChooser -@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form @dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/filetree +@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/form +@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/sequenceChooser +@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui/startup @dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/gui +@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/parser/acd +@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/parser +@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/programs +@dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss/soap @dirrm %%DATADIR%%/jemboss/api/org/emboss/jemboss @dirrm %%DATADIR%%/jemboss/api/org/emboss @dirrm %%DATADIR%%/jemboss/api/org @dirrm %%DATADIR%%/jemboss/api +@dirrm %%DATADIR%%/jemboss/images +@dirrm %%DATADIR%%/jemboss/lib/axis +@dirrm %%DATADIR%%/jemboss/lib +@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/editor +@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/draw +@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/graphics +@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/filetree +@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/form +@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/sequenceChooser +@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui/startup +@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/gui +@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/parser/acd +@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/parser +@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/programs +@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/server +@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss/soap +@dirrm %%DATADIR%%/jemboss/org/emboss/jemboss +@dirrm %%DATADIR%%/jemboss/org/emboss +@dirrm %%DATADIR%%/jemboss/org +@dirrm %%DATADIR%%/jemboss/resources +@dirrm %%DATADIR%%/jemboss/utils @dirrm %%DATADIR%%/jemboss -@dirrm %%DATADIR%%/data/REBASE -@dirrm %%DATADIR%%/data/PROSITE -@dirrm %%DATADIR%%/data/PRINTS -@dirrm %%DATADIR%%/data/CODONS -@dirrm %%DATADIR%%/data/AAINDEX -@dirrm %%DATADIR%%/data -@dirrm %%DATADIR%%/acd -@dirrm %%DATADIR%% +@dirrmtry %%DATADIR%% +@dirrmtry bin +@dirrmtry include +@dirrmtry lib +@dirrmtry share/doc +@dirrmtry share |