[Debian-med-packaging] [SCM] The European Molecular Biology Open Software Suite. branch, master, updated. upstream/6.2.0-14-gf7ce5f6

Charles Plessy plessy at debian.org
Sun Feb 21 08:00:41 UTC 2010


The following commit has been merged in the master branch:
commit f7ce5f6dfc20ab5ef635362d82371930a53fe1ad
Author: Charles Plessy <plessy at debian.org>
Date:   Sun Feb 21 16:59:29 2010 +0900

    New upstream release obsoleting some patches.

diff --git a/debian/patches/official-upstream-patch.patch b/debian/patches/official-upstream-patch.patch
deleted file mode 100644
index 8c8b0b3..0000000
--- a/debian/patches/official-upstream-patch.patch
+++ /dev/null
@@ -1,3952 +0,0 @@
-Description: Official upstream patch.
- 29 Jul 2009: Fix feature specification problems in Jemboss.
-              Use version number to point to documentation URLs
-              Remove standalone option from server script.
-              Correct FASTQ input searching for '@' to start next sequence
-              Standardize FASTQ sequence formats with other OpenBio projects
-              Correct issues in igstrict, genpept and refseqp formats
- .
- 24-Aug-2009: Fix string extension so that pointers in lists remain valid.
-              This fixes a bug in processing SwissProt complex descriptions.
-              Fix definition of AJRESIZE0 macro.
-              Fix processing of first match in a profile alignment (prophet).
- .
- 02-Dec-2009: Fixes problems with extractfeat. The fix includes cleaner
-              definitions of functions used to match feature tags and
-              feature types which result in minor updates to 6 other
-              applications.
- .
-              Extractfeat in previous versions used its own text parser
-              to extract feature data from only a limited set of
-              formats. In release 6.1.0 it was replaced by the standard
-              EMBOSS feature table. With no options set, extractfeat
-              rejected all features (type '*' was needed to extract
-              features). Extractfeat default settings now extract all
-              features from an entry.
- .
-              Features on the reverse strand were incorrectly processed
-              (an effect caused by some of the old extractfeat code
-              remaining). Reverse strand features are now correctly
-              parsed, including both "join(complement())" and
-              "complement(join())" syntax in EMBL/GenBank/DDBJ feature
-              tables.
- .
-              Fixes an issue in GenBank parsing where the ORIGIN line is absent.
- .
-              Fixes scaling errors in prettyplot, especially in mEMBOSS
-              when plotting to a window on screen (the default
-              output). The plplot library does not report the true
-              width and height for several devices. The assumptions in
-              prettyplot depend on reasonable size estimates. Release
-              6.2.0 will have further corrections to plplot device
-              scaling.
- .
-              Fixes the counting of non-coding features in coderet.
- .
-              Fixes a seqmatchall error for short sequences with perfect matches
- .
-              When reverse-complementing sequences, also reverses
-              the quality scores.
- .
-              Allows '-' in format names in the USA syntax, to allow
-              fastq-sanger fastq-illumina and fastq-solexa format names
-              to be used.
- .
-              When reading protein sequences, a sequence with only a
-              stop is now recognized as empty (zero length) after
-              processing ambiguity codes and stops.
- .
-              Fixes a problem writing features in PIR format when the
-              feature table is empty, for example a report file with no hits.
- .
-              Fixes a dependency on 'ant' to install a Jemboss server.
- .
-              Fixes a problem in logging Jemboss info/error messages.
-Origin: ftp://emboss.open-bio.org/pub/EMBOSS/fixes/patches/patch-1-3.gz
-Forwarded: not-needed
-
-diff -c -N --recursive EMBOSS-6.1.0orig/ajax/ajfeat.c EMBOSS-6.1.0/ajax/ajfeat.c
-*** EMBOSS-6.1.0orig/ajax/ajfeat.c	Mon Sep 28 22:15:17 2009
---- EMBOSS-6.1.0/ajax/ajfeat.c	Mon Dec  7 12:07:06 2009
-***************
-*** 373,378 ****
---- 373,383 ----
-  				      AjPTable pTagsTable,
-  				       AjBool recursion);
-  static void         featWarn(const char* fmt, ...);
-+ static AjBool featTypeTestDnaWild(const AjPStr type, const AjPStr str);
-+ static AjBool featTypeTestProtWild(const AjPStr type, const AjPStr str);
-+ static AjBool featTableTypeTestWild(const AjPStr type,
-+                                     const AjPTable table,
-+                                     const AjPStr str);
-  
-  
-  
-***************
-*** 6284,6290 ****
-  	/*ajDebug("last: calling featDumpPir for gfprev\n");*/
-  	/*ajDebug("location: '%S'\n", location);*/
-  
-! 	featDumpPir(gfprev,location, file); /* gfprev has tag data */
-  	ajStrDel(&location);
-  	ajStrDel(&pos);
-  	ajStrDel(&temp);
---- 6289,6296 ----
-  	/*ajDebug("last: calling featDumpPir for gfprev\n");*/
-  	/*ajDebug("location: '%S'\n", location);*/
-  
-!         if(gfprev)
-!             featDumpPir(gfprev,location, file); /* gfprev has tag data */
-  	ajStrDel(&location);
-  	ajStrDel(&pos);
-  	ajStrDel(&temp);
-***************
-*** 6919,6931 ****
-  ** Returns all cross-references from a feature table
-  **
-  ** @param [r] thys [const AjPFeattable] Feature table
-! ** @param [u] xreflist [AjPList] List of sequence cross-reference objects
-  ** @param [w] Ptaxid [ajuint*] Taxon ID
-  ** @return [AjBool] True on success
-  ** @@
-  ******************************************************************************/
-  
-! AjBool ajFeattableGetXrefs(const AjPFeattable thys, AjPList xreflist,
-                             ajuint *Ptaxid)
-  {
-      AjIList iterfeat     = NULL;
---- 6925,6937 ----
-  ** Returns all cross-references from a feature table
-  **
-  ** @param [r] thys [const AjPFeattable] Feature table
-! ** @param [u] Pxreflist [AjPList*] List of sequence cross-reference objects
-  ** @param [w] Ptaxid [ajuint*] Taxon ID
-  ** @return [AjBool] True on success
-  ** @@
-  ******************************************************************************/
-  
-! AjBool ajFeattableGetXrefs(const AjPFeattable thys, AjPList *Pxreflist,
-                             ajuint *Ptaxid)
-  {
-      AjIList iterfeat     = NULL;
-***************
-*** 6934,6941 ****
---- 6940,6952 ----
-      AjPSeqXref  xref = NULL;
-      ajint ipos;
-      ajuint inum = 0;
-+     AjPList xreflist;
-      AjPFeature feat  = NULL;
-  
-+     if(!*Pxreflist)
-+         *Pxreflist = ajListNew();
-+     xreflist = *Pxreflist;
-+ 
-      *Ptaxid = 0;
-      
-      if(thys->Features)
-***************
-*** 7224,7230 ****
-  
-  
-  
-! /* @func ajFeatGetSeq **********************************************************
-  **
-  ** Returns the sequence matching a feature. For multiple location features
-  ** (joins in an EMBL/GenBank feature table) the full feature table is used
---- 7235,7241 ----
-  
-  
-  
-! /* @func ajFeatGetFlags *******************************************************
-  **
-  ** Returns the sequence matching a feature. For multiple location features
-  ** (joins in an EMBL/GenBank feature table) the full feature table is used
-***************
-*** 7233,7269 ****
-  ** The database name is used to retrieve sequences from other entries
-  **
-  ** @param [r] thys [const AjPFeature] Feature
-! ** @param [r] table [const AjPFeattable] Full feature table
-  ** @param [r] seq [const AjPSeq] Sequence for the current feature table
-  ** @param [u] Pseqstr [AjPStr*] Sequence for this feature
-  ** @return [AjBool] True on success
-  ** @@
-  ******************************************************************************/
-  
-! AjBool ajFeatGetSeq(const AjPFeature thys, const AjPFeattable table,
-                      const AjPSeq seq, AjPStr* Pseqstr)
-  {
-      const AjPFeature gf;
-      AjIList iter = NULL;
-      AjPSeq remoteseq = NULL;
-      AjBool isjoin = ajFalse;
-  
-      isjoin = ajFeatIsMultiple(thys);
-  
-!     ajDebug("ajFeatGetSeq nfeat:%u usa:%S\n",
-!             ajFeattableSize(table), ajSeqGetUsaS(seq));
-      iter = ajListIterNewread(table->Features);
-  
-      while(!ajListIterDone(iter))
-      {
-          gf = (const AjPFeature) ajListIterGet(iter);
-  
-          if(gf->Group == thys->Group)
-          {
-! /*
-!   if(isjoin && !ajFeatIsChild(gf))
-!                 continue;
-! */
-              ajFeatTrace(gf);
-  
-              if(gf->Flags & FEATFLAG_BETWEEN_SEQ)
---- 7244,7411 ----
-  ** The database name is used to retrieve sequences from other entries
-  **
-  ** @param [r] thys [const AjPFeature] Feature
-! ** @param [u] Pseqstr [AjPStr*] Sequence for this feature
-! ** @return [AjBool] True on success
-! ** @@
-! ******************************************************************************/
-! 
-! AjBool ajFeatGetFlags(const AjPFeature thys,  AjPStr* Pflagstr)
-! {
-!     ajStrAssignC(Pflagstr, "");
-! 
-!     if(thys->Flags & FEATFLAG_START_BEFORE_SEQ)
-!         ajStrAppendC(Pflagstr, "<start ");
-!     if(thys->Flags & FEATFLAG_END_AFTER_SEQ)
-!         ajStrAppendC(Pflagstr, ">end ");
-!     if(thys->Flags & FEATFLAG_CHILD)
-!         ajStrAppendC(Pflagstr, "child-exon ");
-!     if(thys->Flags & FEATFLAG_BETWEEN_SEQ)
-!         ajStrAppendC(Pflagstr, "x^y ");
-!     if(thys->Flags & FEATFLAG_START_TWO)
-!         ajStrAppendC(Pflagstr, "startrange ");
-!     if(thys->Flags & FEATFLAG_END_TWO)
-!         ajStrAppendC(Pflagstr, "endrange ");
-!     if(thys->Flags & FEATFLAG_POINT)
-!         ajStrAppendC(Pflagstr, "single-base ");
-!     if(thys->Flags & FEATFLAG_COMPLEMENT_MAIN)
-!         ajStrAppendC(Pflagstr, "complement(join) ");
-!     if(thys->Flags & FEATFLAG_MULTIPLE)
-!         ajStrAppendC(Pflagstr, "multiple ");
-!     if(thys->Flags & FEATFLAG_GROUP)
-!         ajStrAppendC(Pflagstr, "group ");
-!     if(thys->Flags & FEATFLAG_ORDER)
-!         ajStrAppendC(Pflagstr, "order ");
-!     if(thys->Flags & FEATFLAG_ONEOF)
-!         ajStrAppendC(Pflagstr, "oneof ");
-!     if(thys->Flags & FEATFLAG_REMOTEID)
-!         ajStrAppendC(Pflagstr, "remoteid ");
-!     if(thys->Flags & FEATFLAG_LABEL)
-!         ajStrAppendC(Pflagstr, "LABEL ");
-!     if(thys->Flags & FEATFLAG_START_UNSURE)
-!         ajStrAppendC(Pflagstr, "start-unsure ");
-!     if(thys->Flags & FEATFLAG_END_UNSURE)
-!         ajStrAppendC(Pflagstr, "end-unsure ");
-! 
-!     ajStrTrimWhite(Pflagstr);
-! 
-!     return ajTrue;
-! }
-! 
-! 
-! 
-! 
-! /* @func ajFeatGetSeq *********************************************************
-! **
-! ** Returns the sequence matching a feature. 
-! **
-! ** The database name is used to retrieve sequences from other entries
-! **
-! ** @param [r] thys [const AjPFeature] Feature
-  ** @param [r] seq [const AjPSeq] Sequence for the current feature table
-  ** @param [u] Pseqstr [AjPStr*] Sequence for this feature
-  ** @return [AjBool] True on success
-  ** @@
-  ******************************************************************************/
-  
-! AjBool ajFeatGetSeq(const AjPFeature thys,
-                      const AjPSeq seq, AjPStr* Pseqstr)
-  {
-+     AjPSeq remoteseq = NULL;
-+     AjBool isjoin = ajFalse;
-+     AjPStr tmpseq = NULL;
-+     AjBool compjoin = ajFalse;
-+ 
-+     ajStrSetClear(Pseqstr);
-+ 
-+     isjoin = ajFeatIsMultiple(thys);
-+ 
-+     ajDebug("ajFeatGetSeq usa:%S\n",
-+             ajSeqGetUsaS(seq));
-+ 
-+     if(thys->Flags & FEATFLAG_BETWEEN_SEQ)
-+         return ajTrue;
-+ 
-+     ajFeatTrace(thys);
-+ 
-+     if(thys->Flags & FEATFLAG_REMOTEID)
-+     {
-+         if(!remoteseq)
-+             remoteseq = ajSeqNew();
-+ 
-+         ajFeatGetRemoteseq(thys, ajSeqGetUsaS(seq), remoteseq);
-+         ajStrAppendS(Pseqstr, ajSeqGetSeqS(remoteseq));
-+     }
-+     else
-+     {
-+         if(thys->Strand == '-' && !compjoin)
-+         {
-+             ajStrAppendSubS(&tmpseq, ajSeqGetSeqS(seq),
-+                             ajFeatGetStart(thys)-1, ajFeatGetEnd(thys)-1);
-+             ajSeqstrReverse(&tmpseq);
-+             ajStrInsertS(Pseqstr, 0, tmpseq);
-+             ajStrDel(&tmpseq);
-+         }
-+         else
-+         {
-+             ajStrAppendSubS(Pseqstr, ajSeqGetSeqS(seq),
-+                             ajFeatGetStart(thys)-1, ajFeatGetEnd(thys)-1);
-+         }
-+     }
-+ 
-+     ajSeqDel(&remoteseq);
-+ 
-+     return ajTrue;
-+ }
-+ 
-+ 
-+ 
-+ 
-+ /* @func ajFeatGetSeqJoin ******************************************************
-+ **
-+ ** Returns the sequence matching a feature. For multiple location features
-+ ** (joins in an EMBL/GenBank feature table) the full feature table is used
-+ ** to find all exons.
-+ **
-+ ** The database name is used to retrieve sequences from other entries
-+ **
-+ ** @param [r] thys [const AjPFeature] Feature
-+ ** @param [r] table [const AjPFeattable] Full feature table
-+ ** @param [r] seq [const AjPSeq] Sequence for the current feature table
-+ ** @param [u] Pseqstr [AjPStr*] Sequence for this feature
-+ ** @return [AjBool] True on success
-+ ** @@
-+ ******************************************************************************/
-+ 
-+ AjBool ajFeatGetSeqJoin(const AjPFeature thys, const AjPFeattable table,
-+                         const AjPSeq seq, AjPStr* Pseqstr)
-+ {
-      const AjPFeature gf;
-      AjIList iter = NULL;
-      AjPSeq remoteseq = NULL;
-      AjBool isjoin = ajFalse;
-+     AjPStr tmpseq = NULL;
-+     AjBool compjoin = ajFalse;
-+     AjPStr flags = NULL;
-+     ajuint count=0;
-+ 
-+     ajStrSetClear(Pseqstr);
-  
-      isjoin = ajFeatIsMultiple(thys);
-+     if(thys->Flags & FEATFLAG_COMPLEMENT_MAIN)
-+         compjoin = ajTrue;
-  
-!     ajDebug("ajFeatGetSeqJoin nfeat:%u usa:%S\n",
-!             ajFeattableGetSize(table), ajSeqGetUsaS(seq));
-      iter = ajListIterNewread(table->Features);
-  
-      while(!ajListIterDone(iter))
-      {
-+         count++;
-          gf = (const AjPFeature) ajListIterGet(iter);
-  
-          if(gf->Group == thys->Group)
-          {
-!             ajFeatGetFlags(gf, &flags);
-              ajFeatTrace(gf);
-  
-              if(gf->Flags & FEATFLAG_BETWEEN_SEQ)
-***************
-*** 7280,7295 ****
-              }
-              else
-              {
-!                 if(gf->Strand == '-')
-!                     ajStrAppendSubS(Pseqstr, ajSeqGetSeqS(seq),
-!                                     ajFeatGetEnd(gf)-1, ajFeatGetStart(gf)-1);
-                  else
-                      ajStrAppendSubS(Pseqstr, ajSeqGetSeqS(seq),
-                                      ajFeatGetStart(gf)-1, ajFeatGetEnd(gf)-1);
-              }
-          }
-      }
-  
-      ajListIterDel(&iter);
-      ajSeqDel(&remoteseq);
-  
---- 7422,7447 ----
-              }
-              else
-              {
-!                 if(gf->Strand == '-' && !compjoin)
-!                 {
-!                     ajStrAppendSubS(&tmpseq, ajSeqGetSeqS(seq),
-!                                     ajFeatGetStart(gf)-1, ajFeatGetEnd(gf)-1);
-!                     ajSeqstrReverse(&tmpseq);
-!                     ajStrAppendS(Pseqstr, tmpseq);
-!                     ajStrDel(&tmpseq);
-!                 }
-                  else
-+                 {
-                      ajStrAppendSubS(Pseqstr, ajSeqGetSeqS(seq),
-                                      ajFeatGetStart(gf)-1, ajFeatGetEnd(gf)-1);
-+                 }
-              }
-          }
-      }
-  
-+     if(compjoin)
-+         ajSeqstrReverse(Pseqstr);
-+ 
-      ajListIterDel(&iter);
-      ajSeqDel(&remoteseq);
-  
-***************
-*** 7355,7372 ****
-  ** Returns all cross-references from a feature
-  **
-  ** @param [r] thys [const AjPFeature] Feature
-! ** @param [u] xreflist [AjPList] List of sequence cross-reference objects
-  ** @return [AjBool] True on success
-  ** @@
-  ******************************************************************************/
-  
-! AjBool ajFeatGetXrefs(const AjPFeature thys, AjPList xreflist)
-  {
-      AjIList iter     = NULL;
-      FeatPTagval item = NULL;
-      AjPSeqXref  xref = NULL;
-      ajint ipos;
-      ajuint inum = 0;
-  
-      if(thys->Tags)
-      {
---- 7507,7529 ----
-  ** Returns all cross-references from a feature
-  **
-  ** @param [r] thys [const AjPFeature] Feature
-! ** @param [u] Pxreflist [AjPList*] List of sequence cross-reference objects
-  ** @return [AjBool] True on success
-  ** @@
-  ******************************************************************************/
-  
-! AjBool ajFeatGetXrefs(const AjPFeature thys, AjPList *Pxreflist)
-  {
-      AjIList iter     = NULL;
-      FeatPTagval item = NULL;
-      AjPSeqXref  xref = NULL;
-      ajint ipos;
-      ajuint inum = 0;
-+     AjPList xreflist;
-+ 
-+     if(!*Pxreflist)
-+         *Pxreflist = ajListNew();
-+     xreflist = *Pxreflist;
-  
-      if(thys->Tags)
-      {
-***************
-*** 7388,7395 ****
-                      xref->Start = ajFeatGetStart(thys)-1;
-                      xref->End   = ajFeatGetEnd(thys)-1;
-                      ajListPushAppend(xreflist, xref);
--                     ajUser("/%S='%S' db: '%S' id: '%S'",
--                            item->Tag, item->Value, xref->Db, xref->Id);
-                      xref->Type = XREF_DBXREF;
-                      xref = NULL;
-                  }
---- 7545,7550 ----
-***************
-*** 10534,10539 ****
---- 10689,10739 ----
-  
-  
-  
-+ /* @funcstatic featTypeTestDnaWild *********************************************
-+ **
-+ ** Given a feature type name,
-+ ** returns the valid feature type for the internal DNA feature table
-+ ** following alternative names until a matching wildcard name is found
-+ **
-+ ** @param [r]   type  [const AjPStr] Type name
-+ ** @param [r]   str   [const AjPStr] Wildcard name
-+ ** @return [AjBool] True if a match is found
-+ ** @@
-+ ******************************************************************************/
-+ 
-+ static AjBool featTypeTestDnaWild(const AjPStr type, const AjPStr str)
-+ {
-+     featInit();
-+ 
-+     return featTableTypeTestWild(type, FeatTypeTableDna, str);
-+ }
-+ 
-+ 
-+ 
-+ 
-+ /* @funcstatic featTypeTestProtWild ********************************************
-+ **
-+ ** Given a feature type name,
-+ ** returns the valid feature type for the internal protein feature table
-+ ** following alternative names until a unique name is found
-+ **
-+ ** @param [r]   type  [const AjPStr] Type name
-+ ** @param [r]   str   [const AjPStr] Wildcard name
-+ ** @return [AjBool] True if a match is found
-+ ** @@
-+ ******************************************************************************/
-+ 
-+ static AjBool featTypeTestProtWild(const AjPStr type, const AjPStr str)
-+ {
-+     featInit();
-+ 
-+     return featTableTypeTestWild(type, FeatTypeTableProtein, str);
-+ }
-+ 
-+ 
-+ 
-+ 
-+ 
-  /* @funcstatic featTagDna *****************************************************
-  **
-  ** Given a feature tag name,
-***************
-*** 10771,10776 ****
---- 10971,11071 ----
-  
-  
-  
-+ /* @funcstatic featTableTypeTestWild *******************************************
-+ **
-+ ** Given a feature type name,
-+ ** returns the valid feature type for a feature table
-+ ** following alternative names which are common in the internal table
-+ ** which is a combination of multiple definitions
-+ **
-+ ** @param [r]   type  [const AjPStr] Type name
-+ ** @param [r]   table [const AjPTable]  Feature table
-+ ** @param [r]   str   [const AjPStr] Wildcard name
-+ ** @return [AjBool] True if a match is found
-+ ** @@
-+ ******************************************************************************/
-+ 
-+ static AjBool featTableTypeTestWild(const AjPStr type,
-+                                     const AjPTable table,
-+                                     const AjPStr str)
-+ {
-+     const AjPStr retkey = NULL;
-+     const AjPStr tmpstr = NULL;
-+     AjPStr tmpkey = NULL;
-+     ajuint i = 0;
-+     ajuint nkeys;
-+     void **keys = NULL;
-+     void **values = NULL;
-+     AjPStr key = NULL;
-+ 
-+     if(ajStrMatchWildS(type, str))
-+         return ajTrue;
-+ 
-+     retkey = (const AjPStr) ajTableFetchKey(table, type);
-+ 
-+     while(retkey && i < 5)
-+     {
-+ 	tmpstr = (AjPStr)ajTableFetch(table, retkey);
-+ 	ajDebug("featTableTypeTestWild '%S' found in internal table"
-+                 " as '%S' (%S)\n",type, retkey, tmpstr);
-+ 
-+ 	if(ajStrGetCharLast(tmpstr) != ';')
-+ 	{
-+             if(ajStrMatchWildS(tmpstr, str))
-+                 return ajTrue;
-+ 
-+             tmpstr = (AjPStr)ajTableFetch(table, retkey);
-+ 	    retkey = (const AjPStr) ajTableFetchKey(table, tmpstr);
-+ 	}
-+         else 
-+         {
-+             ajStrAssignSubS(&tmpkey, tmpstr, 0, ajStrFindAnyK(tmpstr, ';')-1);
-+ 
-+             if(ajStrMatchWildS(tmpkey, str))
-+             {
-+                 ajStrDel(&tmpkey);
-+                 return ajTrue;
-+             }
-+ 
-+             ajStrDel(&tmpkey);
-+ 
-+ 	    ajDebug("featTableTypeTestWild '%S' is an alias for '%S'\n",
-+ 		 retkey, tmpstr);
-+ 
-+             retkey = (const AjPStr) ajTableFetchKey(table, tmpstr);
-+ 
-+ 	}
-+ 
-+ 	ajDebug("featTableTypeTestWild result %u '%S'\n",
-+                 ++i, retkey);
-+     }
-+ 
-+     nkeys = ajTableToarray(table, &keys, &values);
-+     AJFREE(values);
-+     for (i=0; i<nkeys; i++) 
-+     {
-+         key = (AjPStr) keys[i];
-+         if(ajStrMatchWildS(key, str))
-+         {
-+             if(ajStrMatchS(featTableTypeInternalLimit(key,table),
-+                            featTableTypeInternalLimit(type,table)))
-+             {
-+                 AJFREE(keys);
-+                 return ajTrue;
-+             }
-+         }
-+     }
-+ 
-+     AJFREE(keys);
-+     ajDebug("featTableTypeTestWild '%S' not in internal table %x, "
-+ 	    "default to NULL\n", type, table);
-+ 
-+     return ajFalse;
-+ }
-+ 
-+ 
-+ 
-+ 
-  /* @funcstatic featTableTag ***************************************************
-  **
-  ** Given a feature tag name,
-***************
-*** 14471,14476 ****
---- 14766,14829 ----
-  
-  
-  
-+ /* @func ajFeatTypeMatchWildS **************************************************
-+ **
-+ ** Tests whether the feature type matches a given wildcard string
-+ ** including testing for alternative names
-+ **
-+ ** @param [r] gf       [const AjPFeature]  Feature
-+ ** @param [r] str      [const AjPStr]  Feature type name to test
-+ ** @return [AjBool] ajTrue on success
-+ ** @@
-+ ******************************************************************************/
-+ 
-+ AjBool ajFeatTypeMatchWildS(const AjPFeature gf, const AjPStr str)
-+ {
-+     AjBool ret = ajFalse;
-+     AjPStr mystr = NULL;
-+ 
-+     mystr = ajStrNewS(str);
-+     ajStrFmtLower(&mystr);
-+     
-+     if(gf->Protein)
-+     {
-+ 	ret =  featTypeTestProtWild(gf->Type, mystr);
-+ 
-+         if(!ret)
-+         {
-+             if(ajStrIsWild(mystr))
-+                 ajStrTrimEndC(&mystr, "*");
-+             ret = ajFeatTypeMatchS(gf, mystr);
-+         }
-+     
-+         ajDebug("ajFeatTypeMatchWildS: %B '%S' '%S' prot:'%S'\n",
-+                 ret, mystr, gf->Type,
-+                 featTypeProtLimit(gf->Type));
-+     }
-+     
-+     else
-+     {
-+ 	ret =  featTypeTestDnaWild(gf->Type, mystr);
-+ 
-+         if(!ret)
-+         {
-+             if(ajStrIsWild(mystr))
-+                 ajStrTrimEndC(&mystr, "*");
-+             ret = ajFeatTypeMatchS(gf, mystr);
-+         }
-+ 
-+         ajDebug("ajFeatTypeMatchWildS: %B '%S' '%S' dna: '%S'\n",
-+                 ret, mystr, gf->Type,
-+                 featTypeDnaLimit(gf->Type));
-+     }
-+     ajStrDel(&mystr);
-+ 
-+     return ret;
-+ }
-+ 
-+ 
-+ 
-+ 
-  /* @func ajFeatIsLocal ********************************************************
-  **
-  ** Tests whether the feature is local to the sequence.
-diff -c -N --recursive EMBOSS-6.1.0orig/ajax/ajfeat.h EMBOSS-6.1.0/ajax/ajfeat.h
-*** EMBOSS-6.1.0orig/ajax/ajfeat.h	Mon Sep 28 22:15:17 2009
---- EMBOSS-6.1.0/ajax/ajfeat.h	Wed Dec  2 12:27:01 2009
-***************
-*** 56,63 ****
-                                   AjPSeq seq);
-  float         ajFeatGetScore (const AjPFeature thys);
-  const AjPStr  ajFeatGetSource (const AjPFeature thys);
-! AjBool        ajFeatGetSeq(const AjPFeature feat, const AjPFeattable table,
-                             const AjPSeq seq, AjPStr* seqstr);
-  ajuint        ajFeatGetStart (const AjPFeature thys);
-  char          ajFeatGetStrand (const AjPFeature thys);
-  AjBool        ajFeatGetTagC(const AjPFeature thys, const char* tname,
---- 56,66 ----
-                                   AjPSeq seq);
-  float         ajFeatGetScore (const AjPFeature thys);
-  const AjPStr  ajFeatGetSource (const AjPFeature thys);
-! AjBool        ajFeatGetFlags(const AjPFeature thys,  AjPStr* Pflagstr);
-! AjBool        ajFeatGetSeq(const AjPFeature feat,
-                             const AjPSeq seq, AjPStr* seqstr);
-+ AjBool        ajFeatGetSeqJoin(const AjPFeature thys, const AjPFeattable table,
-+                                const AjPSeq seq, AjPStr* Pseqstr);
-  ajuint        ajFeatGetStart (const AjPFeature thys);
-  char          ajFeatGetStrand (const AjPFeature thys);
-  AjBool        ajFeatGetTagC(const AjPFeature thys, const char* tname,
-***************
-*** 66,72 ****
-  			    ajint num, AjPStr* val);
-  AjBool        ajFeatGetTranslation(const AjPFeature feat, AjPStr* seqstr);
-  const AjPStr  ajFeatGetType (const AjPFeature thys);
-! AjBool        ajFeatGetXrefs(const AjPFeature thys, AjPList xreflist);
-  AjBool        ajFeatIsCompMult (const AjPFeature gf);
-  AjBool        ajFeatIsLocal (const AjPFeature gf);
-  AjBool        ajFeatIsLocalRange (const AjPFeature gf,
---- 69,75 ----
-  			    ajint num, AjPStr* val);
-  AjBool        ajFeatGetTranslation(const AjPFeature feat, AjPStr* seqstr);
-  const AjPStr  ajFeatGetType (const AjPFeature thys);
-! AjBool        ajFeatGetXrefs(const AjPFeature thys, AjPList *Pxreflist);
-  AjBool        ajFeatIsCompMult (const AjPFeature gf);
-  AjBool        ajFeatIsLocal (const AjPFeature gf);
-  AjBool        ajFeatIsLocalRange (const AjPFeature gf,
-***************
-*** 107,113 ****
-  ajuint        ajFeattableGetSize(const AjPFeattable thys);
-  const char*   ajFeattableGetTypeC (const AjPFeattable thys);
-  const AjPStr  ajFeattableGetTypeS (const AjPFeattable thys);
-! AjBool        ajFeattableGetXrefs(const AjPFeattable thys, AjPList xreflist,
-                                    ajuint *Ptaxid);
-  AjBool        ajFeattableIsNuc (const AjPFeattable thys);
-  AjBool        ajFeattableIsProt (const AjPFeattable thys);
---- 110,116 ----
-  ajuint        ajFeattableGetSize(const AjPFeattable thys);
-  const char*   ajFeattableGetTypeC (const AjPFeattable thys);
-  const AjPStr  ajFeattableGetTypeS (const AjPFeattable thys);
-! AjBool        ajFeattableGetXrefs(const AjPFeattable thys, AjPList *Pxreflist,
-                                    ajuint *Ptaxid);
-  AjBool        ajFeattableIsNuc (const AjPFeattable thys);
-  AjBool        ajFeattableIsProt (const AjPFeattable thys);
-***************
-*** 203,208 ****
---- 206,212 ----
-  AjBool        ajFeatTypeIsCds(const AjPFeature gf);
-  AjBool        ajFeatTypeMatchC(const AjPFeature gf, const char* txt);
-  AjBool        ajFeatTypeMatchS(const AjPFeature gf, const AjPStr str);
-+ AjBool        ajFeatTypeMatchWildS(const AjPFeature gf, const AjPStr str);
-  const AjPStr  ajFeatTypeNuc(const AjPStr type);
-  const AjPStr  ajFeatTypeProt(const AjPStr type);
-  AjPFeattable  ajFeatUfoRead (AjPFeattabIn tabin, const AjPStr Ufo);
-diff -c -N --recursive EMBOSS-6.1.0orig/ajax/ajgraph.c EMBOSS-6.1.0/ajax/ajgraph.c
-*** EMBOSS-6.1.0orig/ajax/ajgraph.c	Mon Nov 23 16:36:58 2009
---- EMBOSS-6.1.0/ajax/ajgraph.c	Wed Dec  2 12:27:06 2009
-***************
-*** 2831,2836 ****
---- 2831,2838 ----
-  void ajGraphGetOut(float *xp,float *yp, ajint *xleng, ajint *yleng,
-  		   ajint *xoff, ajint *yoff)
-  {
-+     char devname[128];
-+ 
-      ajDebug("=g= plgpage(&f &f) [&xp, &yp, &xleng, &yleng, &xoff, &yoff]\n");
-  
-      if(graphData)
-***************
-*** 2847,2852 ****
---- 2849,2893 ----
-  	plgpage(xp,yp,xleng,yleng,xoff,yoff);
-  	ajDebug("returns xp:%.3f yp:%.3f xleng:%d yleng:%d xoff:%d yoff:%d\n",
-  		 *xp, *yp, *xleng, *yleng, *xoff, *yoff);
-+         if(*xleng == 0.0) 
-+         {
-+             plgdev(devname);
-+             if(!strcmp(devname, "win3"))
-+             {
-+                 *xleng = 720;
-+                 *yleng = 540;
-+             }
-+             else if(!strcmp(devname, "xterm"))
-+             {
-+                 *xleng = 1024;
-+                 *yleng = 780;
-+             }
-+             else if(!strcmp(devname, "xwin"))
-+             {
-+                 *xleng = 1440;
-+                 *yleng = 900;
-+             }
-+             else if(!strcmp(devname, "ps"))
-+             {
-+                 *xleng = 720;
-+                 *yleng = 540;
-+             }
-+             else if(!strcmp(devname, "psc"))
-+             {
-+                 *xleng = 720;
-+                 *yleng = 540;
-+             }
-+             else if(!strcmp(devname, "png"))
-+             {
-+                 *xleng = 640;
-+                 *yleng = 480;
-+             }
-+             else if(!strcmp(devname, "gif"))
-+             {
-+                 *xleng = 640;
-+                 *yleng = 480;
-+             }
-+         }
-      }
-  
-      return;
-diff -c -N --recursive EMBOSS-6.1.0orig/ajax/ajmath.c EMBOSS-6.1.0/ajax/ajmath.c
-*** EMBOSS-6.1.0orig/ajax/ajmath.c	Mon Sep 28 22:15:17 2009
---- EMBOSS-6.1.0/ajax/ajmath.c	Wed Dec  2 12:27:10 2009
-***************
-*** 671,690 ****
-  
-  ajuint ajMathPosI(ajuint len, ajuint imin, ajint ipos)
-  {
-!     ajuint jpos;
-  
-      if(ipos < 0)
-  	jpos = len + ipos;
-      else
-  	jpos = ipos;
-  
-!     if(jpos >= len)
-  	jpos = len - 1;
-  
-!     if(jpos < imin)
-  	jpos = imin;
-  
-!     return jpos;
-  }
-  
-  
---- 671,692 ----
-  
-  ajuint ajMathPosI(ajuint len, ajuint imin, ajint ipos)
-  {
-!     ajint jpos;
-!     ajint jmin = imin;
-!     ajint jlen = len;
-  
-      if(ipos < 0)
-  	jpos = len + ipos;
-      else
-  	jpos = ipos;
-  
-!     if(jpos >= jlen)
-  	jpos = len - 1;
-  
-!     if(jpos < jmin)
-  	jpos = imin;
-  
-!     return (ajuint) jpos;
-  }
-  
-  
-diff -c -N --recursive EMBOSS-6.1.0orig/ajax/ajmem.h EMBOSS-6.1.0/ajax/ajmem.h
-*** EMBOSS-6.1.0orig/ajax/ajmem.h	Mon Sep 28 22:15:17 2009
---- EMBOSS-6.1.0/ajax/ajmem.h	Mon Sep 28 22:14:48 2009
-***************
-*** 71,77 ****
-  #define AJFREE(ptr) ((void)(ajMemFree(ptr), (ptr) = 0))
-  #define AJRESIZE(ptr, nbytes) 	((ptr) = ajMemResize((ptr), \
-  	(nbytes), __FILE__, __LINE__, AJFALSE))
-! #define AJRESIZE0(ptr, oldbytes, nbytes)  (ptr) = ajMemResizeZero((ptr), \
-  	(oldbytes), (nbytes), __FILE__, __LINE__, AJFALSE))
-  #define AJCRESIZE(ptr, nbytes) 	((ptr) = ajMemResize((ptr), \
-  	(nbytes)*sizeof *(ptr), __FILE__, __LINE__, AJFALSE))
---- 71,77 ----
-  #define AJFREE(ptr) ((void)(ajMemFree(ptr), (ptr) = 0))
-  #define AJRESIZE(ptr, nbytes) 	((ptr) = ajMemResize((ptr), \
-  	(nbytes), __FILE__, __LINE__, AJFALSE))
-! #define AJRESIZE0(ptr, oldbytes, nbytes)  ((ptr) = ajMemResizeZero((ptr), \
-  	(oldbytes), (nbytes), __FILE__, __LINE__, AJFALSE))
-  #define AJCRESIZE(ptr, nbytes) 	((ptr) = ajMemResize((ptr), \
-  	(nbytes)*sizeof *(ptr), __FILE__, __LINE__, AJFALSE))
-diff -c -N --recursive EMBOSS-6.1.0orig/ajax/ajseq.c EMBOSS-6.1.0/ajax/ajseq.c
-*** EMBOSS-6.1.0orig/ajax/ajseq.c	Mon Sep 28 22:15:17 2009
---- EMBOSS-6.1.0/ajax/ajseq.c	Wed Dec  2 12:27:15 2009
-***************
-*** 2574,2580 ****
---- 2574,2584 ----
-  {
-      ajint ibegin;
-      ajint iend;
-+     ajuint ilen;
-      ajint itemp;
-+     ajuint i;
-+     ajuint j;
-+     float atemp;
-  
-      ajDebug("ajSeqReverse len: %d Begin: %d End: %d Rev: %B Reversed: %B\n",
-  	    ajSeqGetLen(seq), seq->Begin, seq->End,
-***************
-*** 2608,2613 ****
---- 2612,2630 ----
-      if(seq->Fttable)
-  	ajFeattableReverse(seq->Fttable);
-  
-+     if(seq->Accuracy)
-+     {
-+         ilen = ajSeqGetLen(seq);
-+         j = ilen;
-+         for(i=0;i<ilen;i++)
-+         {
-+             if(--j <= i) break;
-+             atemp = seq->Accuracy[j];
-+             seq->Accuracy[j] = seq->Accuracy[i];
-+             seq->Accuracy[i] = atemp;
-+         }
-+     }
-+     
-      return;
-  }
-  
-diff -c -N --recursive EMBOSS-6.1.0orig/ajax/ajseqread.c EMBOSS-6.1.0/ajax/ajseqread.c
-*** EMBOSS-6.1.0orig/ajax/ajseqread.c	Mon Sep 28 22:15:16 2009
---- EMBOSS-6.1.0/ajax/ajseqread.c	Wed Dec  2 12:27:18 2009
-***************
-*** 689,695 ****
-         AJTRUE,  AJTRUE,  seqReadSwiss, AJFALSE, 0},
-    {"nbrf",        "NBRF/PIR entry format",
-         AJFALSE, AJTRUE,  AJTRUE,  AJTRUE,
-!        AJFALSE, AJTRUE,  seqReadNbrf, AJFALSE, 0},	/* test before NCBI */
-    {"pir",         "NBRF/PIR entry format (alias)",
-         AJTRUE,  AJFALSE, AJTRUE,  AJTRUE,
-         AJTRUE,  AJTRUE,  seqReadNbrf, AJFALSE, 0},	/* alias for nbrf */
---- 689,695 ----
-         AJTRUE,  AJTRUE,  seqReadSwiss, AJFALSE, 0},
-    {"nbrf",        "NBRF/PIR entry format",
-         AJFALSE, AJTRUE,  AJTRUE,  AJTRUE,
-!        AJTRUE,  AJTRUE,  seqReadNbrf, AJFALSE, 0},	/* test before NCBI */
-    {"pir",         "NBRF/PIR entry format (alias)",
-         AJTRUE,  AJFALSE, AJTRUE,  AJTRUE,
-         AJTRUE,  AJTRUE,  seqReadNbrf, AJFALSE, 0},	/* alias for nbrf */
-***************
-*** 712,718 ****
-    {"ncbi",        "FASTA format including NCBI-style IDs (alias)",
-         AJTRUE,  AJFALSE, AJTRUE,  AJTRUE,
-         AJFALSE, AJTRUE,  seqReadNcbi, AJFALSE, 0}, /* test before pearson */
-!   {"gifasta",     "FASTA format including NCBI-style IDs (alias)",
-         AJFALSE, AJFALSE, AJTRUE,  AJTRUE,
-         AJFALSE, AJTRUE,  seqReadGifasta, AJFALSE, 0}, /* NCBI with GI as ID*/
-    {"pearson",     "Plain old fasta format with IDs not parsed further",
---- 712,718 ----
-    {"ncbi",        "FASTA format including NCBI-style IDs (alias)",
-         AJTRUE,  AJFALSE, AJTRUE,  AJTRUE,
-         AJFALSE, AJTRUE,  seqReadNcbi, AJFALSE, 0}, /* test before pearson */
-!   {"gifasta",     "FASTA format including NCBI-style GIs (alias)",
-         AJFALSE, AJFALSE, AJTRUE,  AJTRUE,
-         AJFALSE, AJTRUE,  seqReadGifasta, AJFALSE, 0}, /* NCBI with GI as ID*/
-    {"pearson",     "Plain old fasta format with IDs not parsed further",
-***************
-*** 749,759 ****
-         AJTRUE,  AJFALSE, AJTRUE,  AJFALSE,
-         AJTRUE,  AJTRUE,  seqReadRefseq, AJFALSE, 0}, /* alias for genbank */
-    {"refseqp",     "Refseq protein entry format",
-!        AJFALSE, AJFALSE, AJFALSE, AJTRUE,       /* genbank forwards proteins */
-         AJTRUE,  AJTRUE,  seqReadRefseqp, AJFALSE, 0},
-    {"genpept",     "Refseq protein entry format (alias)",
-!        AJTRUE,  AJFALSE, AJFALSE, AJTRUE,
-!        AJTRUE,  AJTRUE,  seqReadGenpept, AJFALSE, 0}, /* alias for refseqp*/
-    {"codata",      "Codata entry format",
-         AJFALSE, AJTRUE,  AJTRUE,  AJTRUE,
-         AJTRUE,  AJTRUE,  seqReadCodata, AJFALSE, 0},
---- 749,759 ----
-         AJTRUE,  AJFALSE, AJTRUE,  AJFALSE,
-         AJTRUE,  AJTRUE,  seqReadRefseq, AJFALSE, 0}, /* alias for genbank */
-    {"refseqp",     "Refseq protein entry format",
-!        AJFALSE, AJFALSE, AJFALSE, AJTRUE,       /* genbank format proteins */
-         AJTRUE,  AJTRUE,  seqReadRefseqp, AJFALSE, 0},
-    {"genpept",     "Refseq protein entry format (alias)",
-!        AJFALSE, AJFALSE, AJFALSE, AJTRUE,
-!        AJTRUE,  AJTRUE,  seqReadGenpept, AJFALSE, 0},
-    {"codata",      "Codata entry format",
-         AJFALSE, AJTRUE,  AJTRUE,  AJTRUE,
-         AJTRUE,  AJTRUE,  seqReadCodata, AJFALSE, 0},
-***************
-*** 785,791 ****
-    {"hennig86",    "Hennig86 output format",
-         AJFALSE, AJTRUE,  AJTRUE,  AJTRUE,
-         AJFALSE, AJTRUE,  seqReadHennig86, AJFALSE, 0},
-!   {"jackknifer",  "Jackknifer output interleaved format",
-         AJFALSE, AJTRUE,  AJTRUE,  AJTRUE,
-         AJFALSE, AJTRUE,  seqReadJackknifer, AJFALSE, 0},
-    {"nexus",       "Nexus/paup interleaved format",
---- 785,791 ----
-    {"hennig86",    "Hennig86 output format",
-         AJFALSE, AJTRUE,  AJTRUE,  AJTRUE,
-         AJFALSE, AJTRUE,  seqReadHennig86, AJFALSE, 0},
-!   {"jackknifer",  "Jackknifer interleaved and non-interleaved formats",
-         AJFALSE, AJTRUE,  AJTRUE,  AJTRUE,
-         AJFALSE, AJTRUE,  seqReadJackknifer, AJFALSE, 0},
-    {"nexus",       "Nexus/paup interleaved format",
-***************
-*** 797,803 ****
-    {"treecon",     "Treecon output format",
-         AJFALSE, AJTRUE,  AJTRUE,  AJTRUE,
-         AJFALSE, AJTRUE,  seqReadTreecon, AJFALSE, 0},
-!   {"mega",        "Mega interleaved output format",
-         AJFALSE, AJTRUE,  AJTRUE,  AJTRUE,
-         AJFALSE, AJTRUE,  seqReadMega, AJFALSE, 0},
-    {"igstrict",    "Intelligenetics sequence format strict parser",
---- 797,803 ----
-    {"treecon",     "Treecon output format",
-         AJFALSE, AJTRUE,  AJTRUE,  AJTRUE,
-         AJFALSE, AJTRUE,  seqReadTreecon, AJFALSE, 0},
-!   {"mega",        "Mega interleaved and non-interleaved formats",
-         AJFALSE, AJTRUE,  AJTRUE,  AJTRUE,
-         AJFALSE, AJTRUE,  seqReadMega, AJFALSE, 0},
-    {"igstrict",    "Intelligenetics sequence format strict parser",
-***************
-*** 813,819 ****
-         AJFALSE, AJFALSE, AJTRUE,  AJTRUE,
-         AJFALSE, AJTRUE,  seqReadText, AJFALSE, 0},/* can read almost anything */
-    {"plain",       "Plain text (alias)",
-!        AJFALSE, AJFALSE, AJTRUE,  AJTRUE,
-         AJFALSE, AJTRUE,  seqReadText, AJFALSE, 0},	/* alias for text */
-    {"gff2",         "GFF feature file with sequence in the header",
-         AJFALSE, AJTRUE,  AJTRUE,  AJTRUE,
---- 813,819 ----
-         AJFALSE, AJFALSE, AJTRUE,  AJTRUE,
-         AJFALSE, AJTRUE,  seqReadText, AJFALSE, 0},/* can read almost anything */
-    {"plain",       "Plain text (alias)",
-!        AJTRUE,  AJFALSE, AJTRUE,  AJTRUE,
-         AJFALSE, AJTRUE,  seqReadText, AJFALSE, 0},	/* alias for text */
-    {"gff2",         "GFF feature file with sequence in the header",
-         AJFALSE, AJTRUE,  AJTRUE,  AJTRUE,
-***************
-*** 822,838 ****
-         AJFALSE, AJTRUE,  AJTRUE,  AJTRUE,
-         AJTRUE,  AJTRUE,  seqReadGff3, AJFALSE, 0},
-    {"gff",         "GFF3 feature file with sequence",
-!        AJTRUE,  AJTRUE,  AJTRUE,  AJTRUE,
-         AJTRUE,  AJTRUE,  seqReadGff3, AJFALSE, 0},
-    {"stockholm",   "Stockholm (pfam) format",
-         AJFALSE, AJTRUE,  AJTRUE,  AJTRUE,
-         AJFALSE, AJTRUE,  seqReadStockholm, AJFALSE, 0},
--   {"selex",       "Selex format",                /* can read almost anything */
--        AJFALSE, AJFALSE, AJTRUE,  AJTRUE,
--        AJFALSE, AJTRUE,  seqReadSelex, AJFALSE, 0},
-    {"pfam",        "Stockholm (pfam) format (alias)",
-         AJTRUE,  AJTRUE,  AJTRUE,  AJTRUE,
-         AJFALSE, AJTRUE,  seqReadStockholm, AJFALSE, 0},
-    {"fitch",       "Fitch program format",
-         AJFALSE, AJTRUE,  AJTRUE,  AJTRUE,
-         AJFALSE, AJTRUE,  seqReadFitch, AJFALSE, 0},
---- 822,838 ----
-         AJFALSE, AJTRUE,  AJTRUE,  AJTRUE,
-         AJTRUE,  AJTRUE,  seqReadGff3, AJFALSE, 0},
-    {"gff",         "GFF3 feature file with sequence",
-!        AJTRUE,  AJFALSE,  AJTRUE,  AJTRUE,
-         AJTRUE,  AJTRUE,  seqReadGff3, AJFALSE, 0},
-    {"stockholm",   "Stockholm (pfam) format",
-         AJFALSE, AJTRUE,  AJTRUE,  AJTRUE,
-         AJFALSE, AJTRUE,  seqReadStockholm, AJFALSE, 0},
-    {"pfam",        "Stockholm (pfam) format (alias)",
-         AJTRUE,  AJTRUE,  AJTRUE,  AJTRUE,
-         AJFALSE, AJTRUE,  seqReadStockholm, AJFALSE, 0},
-+   {"selex",       "Selex format",                /* can read almost anything */
-+        AJFALSE, AJFALSE, AJTRUE,  AJTRUE,
-+        AJFALSE, AJTRUE,  seqReadSelex, AJFALSE, 0},
-    {"fitch",       "Fitch program format",
-         AJFALSE, AJTRUE,  AJTRUE,  AJTRUE,
-         AJFALSE, AJTRUE,  seqReadFitch, AJFALSE, 0},
-***************
-*** 1739,1745 ****
-  	else
-  	    ajSeqSetRange(seq, thys->Begin, thys->End);
-  
-! 	ajDebug ("ajSeqsetRead read sequence %d %x '%s' %d..%d (%d) "
-                   "Rev:%B Reversed:%B\n",
-  		 iseq, seq, ajSeqGetNameS(seq),
-  		 seq->Begin, seq->End, ajSeqGetLen(seq),
---- 1739,1745 ----
-  	else
-  	    ajSeqSetRange(seq, thys->Begin, thys->End);
-  
-! 	ajDebug ("ajSeqsetRead read sequence %d %x '%S' %d..%d (%d) "
-                   "Rev:%B Reversed:%B\n",
-  		 iseq, seq, ajSeqGetNameS(seq),
-  		 seq->Begin, seq->End, ajSeqGetLen(seq),
-***************
-*** 2104,2109 ****
---- 2104,2112 ----
-  
-  	    if(ajSeqTypeCheckIn(thys, seqin))
-  	    {
-+                 if (!ajStrGetLen(thys->Seq))  /* removed all remaining chars */
-+                     return FMT_EMPTY;
-+ 
-  		/* ajSeqinTrace(seqin); */
-  		if(seqin->Upper)
-  		    ajSeqFmtUpper(thys);
-***************
-*** 2627,2634 ****
-  				 seqin->Text, &thys->TextPtr);
-  
-      while(ok &&
-!           (ajStrGetLen(qualstr) < seqlen) &&
-!           (!ajStrPrefixC(seqReadLine, "@")))
-      {
-          seqqualAppendWarn(&qualstr, seqReadLine);
-  
---- 2630,2637 ----
-  				 seqin->Text, &thys->TextPtr);
-  
-      while(ok &&
-!           ((ajStrGetLen(qualstr) < seqlen) ||
-!            ajStrGetCharFirst(seqReadLine) != '@'))
-      {
-          seqqualAppendWarn(&qualstr, seqReadLine);
-  
-***************
-*** 2790,2797 ****
-  				 seqin->Text, &thys->TextPtr);
-  
-      while(ok &&
-!           (ajStrGetLen(qualstr) < seqlen) &&
-!           (!ajStrPrefixC(seqReadLine, "@")))
-      {
-          seqqualAppendWarn(&qualstr, seqReadLine);
-  
---- 2793,2800 ----
-  				 seqin->Text, &thys->TextPtr);
-  
-      while(ok &&
-!           ((ajStrGetLen(qualstr) < seqlen) ||
-!            ajStrGetCharFirst(seqReadLine) != '@'))
-      {
-          seqqualAppendWarn(&qualstr, seqReadLine);
-  
-***************
-*** 3157,3164 ****
-  				 seqin->Text, &thys->TextPtr);
-  
-      while(ok &&
-!           (ajStrGetLen(qualstr) < seqlen) &&
-!           (!ajStrPrefixC(seqReadLine, "@")))
-      {
-          seqqualAppendWarn(&qualstr, seqReadLine);
-  
---- 3160,3167 ----
-  				 seqin->Text, &thys->TextPtr);
-  
-      while(ok &&
-!           ((ajStrGetLen(qualstr) < seqlen) ||
-!            ajStrGetCharFirst(seqReadLine) != '@'))
-      {
-          seqqualAppendWarn(&qualstr, seqReadLine);
-  
-***************
-*** 3352,3359 ****
-  				 seqin->Text, &thys->TextPtr);
-  
-      while(ok &&
-!           (ajStrGetLen(qualstr) < seqlen) &&
-!           (!ajStrPrefixC(seqReadLine, "@")))
-      {
-          seqqualAppendWarn(&qualstr, seqReadLine);
-  
---- 3355,3362 ----
-  				 seqin->Text, &thys->TextPtr);
-  
-      while(ok &&
-!           ((ajStrGetLen(qualstr) < seqlen) ||
-!            ajStrGetCharFirst(seqReadLine) != '@'))
-      {
-          seqqualAppendWarn(&qualstr, seqReadLine);
-  
-***************
-*** 5254,5261 ****
-  	return ajFalse;
-      }
-  
-!     ajStrAssignS(&thys->Name, seqReadLine);
-!     ajStrCutEnd(&thys->Name, 1);
-      bufflines++;
-  
-      while(ajBuffreadLineStore(buff, &seqReadLine,
---- 5257,5263 ----
-  	return ajFalse;
-      }
-  
-!     seqSetName(&thys->Name, seqReadLine);
-      bufflines++;
-  
-      while(ajBuffreadLineStore(buff, &seqReadLine,
-***************
-*** 5330,5337 ****
-  	return ajFalse;
-      }
-  
-!     ajStrAssignS(&thys->Name, seqReadLine);
-!     ajStrCutEnd(&thys->Name, 1);
-      bufflines++;
-  
-      while(ajBuffreadLineStore(buff, &seqReadLine,
---- 5332,5338 ----
-  	return ajFalse;
-      }
-  
-!     seqSetName(&thys->Name, seqReadLine);
-      bufflines++;
-  
-      while(ajBuffreadLineStore(buff, &seqReadLine,
-***************
-*** 6651,6656 ****
---- 6652,6658 ----
-  	    if(ajStrIsWhite(phyitem->Name) ||
-  	       ajTableFetch(phytable, phyitem->Name))
-  	    {
-+                 ajFilebuffSetBuffered(buff);
-  		ajFilebuffResetStore(buff, seqin->Text, &thys->TextPtr);
-  		ajDebug("phytable repeated name '%S'\n",
-  			phyitem->Name);
-***************
-*** 6745,6750 ****
---- 6747,6753 ----
-  			    ajDebug("phylip format length mismatch at %d "
-  				    "(length %d)\n",
-  				    maxlen, ilen);
-+                             ajFilebuffSetBuffered(buff);
-  			    ajFilebuffResetStore(buff,
-  						 seqin->Text, &thys->TextPtr);
-  			    seqMsfDataDel((SeqPMsfData*) &seqin->Data);
-***************
-*** 6771,6776 ****
---- 6774,6780 ----
-  	    if(!done)
-  	    {
-  		ajDebug("seqReadPhylip read failed, try seqReadPhylipnon\n");
-+                 ajFilebuffSetBuffered(buff);
-  		ajFilebuffResetStore(buff, seqin->Text, &thys->TextPtr);
-  		seqMsfDataDel((SeqPMsfData*) &seqin->Data);
-  
-***************
-*** 6781,6786 ****
---- 6785,6791 ----
-  	    {
-  		ajDebug("Phylip format %d sequences partly read at end\n",
-  			iseq-jseq);
-+                 ajFilebuffSetBuffered(buff);
-  		ajFilebuffResetStore(buff, seqin->Text, &thys->TextPtr);
-  		seqMsfDataDel((SeqPMsfData*) &seqin->Data);
-  
-***************
-*** 10621,10627 ****
-  
-      if(ajFeattableGetSize(thys->Fttable))
-      {
-!         ajFeattableGetXrefs(thys->Fttable, thys->Xreflist, &taxid);
-          if(taxid)
-              seqTaxidSaveI(thys, taxid);
-      }
---- 10626,10632 ----
-  
-      if(ajFeattableGetSize(thys->Fttable))
-      {
-!         ajFeattableGetXrefs(thys->Fttable, &thys->Xreflist, &taxid);
-          if(taxid)
-              seqTaxidSaveI(thys, taxid);
-      }
-***************
-*** 10973,10978 ****
---- 10978,10985 ----
-      if(!ajBuffreadLine(buff, &seqReadLine))
-  	return ajFalse;
-  
-+     ajDebug("++seqReadGenbank first line '%S'\n", seqReadLine);
-+ 
-      bufflines++;
-  
-      ok = ajTrue;
-***************
-*** 11030,11035 ****
---- 11037,11043 ----
-  
-      if(nfields == 9) 
-      {
-+         ajFilebuffSetBuffered(buff);
-          ajFilebuffResetStore(buff, seqin->Text, &thys->TextPtr);
-  
-          return seqReadGenpept(thys,seqin);
-***************
-*** 11053,11062 ****
---- 11061,11073 ----
-  	case 4:
-  	    if(ajStrMatchC(token, "aa"))
-              {
-+                 ajFilebuffSetBuffered(buff);
-                  ajFilebuffResetStore(buff, seqin->Text, &thys->TextPtr);
-                  ajStrDel(&token);
-                  ajStrTokenDel(&handle);
-  
-+                 ajDebug("first line %d aa pass to refseqp '%S'\n",
-+                         buff->Pos, seqReadLine);
-                  return seqReadRefseqp(thys,seqin);
-              }
-  	    if(!ajStrMatchC(token, "bp"))
-***************
-*** 11089,11094 ****
---- 11100,11106 ----
-      ok = ajBuffreadLineStore(buff, &seqReadLine, seqin->Text, &thys->TextPtr);
-  
-      while(ok &&
-+ 	  !ajStrPrefixC(seqReadLine, "//") &&
-  	  !ajStrPrefixC(seqReadLine, "ORIGIN") &&
-  	  !ajStrPrefixC(seqReadLine, "BASE COUNT"))
-      {
-***************
-*** 11351,11364 ****
-  	/* read the sequence and terminator */
-  	ajDebug("sequence start at '%S'\n", seqReadLine);
-  
-! 	while(!ajStrPrefixC(seqReadLine,"ORIGIN") &&
-! 	      !ajStrPrefixC(seqReadLine,"BASE COUNT"))
-! 	    if(!ajBuffreadLineStore(buff,&seqReadLine,
-! 				   seqin->Text, &thys->TextPtr))
-! 		break;
-  
-- 	ok = ajBuffreadLineStore(buff, &seqReadLine,
-- 				seqin->Text, &thys->TextPtr);
-  	ajStrSetRes(&thys->Seq, seqlen+1);
-  
-  	while(ok && !ajStrPrefixC(seqReadLine, "//"))
---- 11363,11383 ----
-  	/* read the sequence and terminator */
-  	ajDebug("sequence start at '%S'\n", seqReadLine);
-  
-! 	while(ok &&
-!               !ajStrPrefixC(seqReadLine,"//") &&
-! 	      !ajStrPrefixC(seqReadLine,"ORIGIN") &&
-!               !ajStrPrefixC(seqReadLine,"BASE COUNT"))
-!         {
-!             ok = ajBuffreadLineStore(buff,&seqReadLine,
-!                                      seqin->Text, &thys->TextPtr);
-!             if(!ok)
-!                 break;
-!         }
-! 
-!         if(ok && !ajStrPrefixC(seqReadLine,"//"))
-!             ok = ajBuffreadLineStore(buff, &seqReadLine,
-!                                      seqin->Text, &thys->TextPtr);
-  
-  	ajStrSetRes(&thys->Seq, seqlen+1);
-  
-  	while(ok && !ajStrPrefixC(seqReadLine, "//"))
-***************
-*** 11381,11387 ****
-  
-      if(ajFeattableGetSize(thys->Fttable))
-      {
-!         ajFeattableGetXrefs(thys->Fttable, thys->Xreflist, &taxid);
-          if(taxid)
-              seqTaxidSaveI(thys, taxid);
-      }
---- 11400,11406 ----
-  
-      if(ajFeattableGetSize(thys->Fttable))
-      {
-!         ajFeattableGetXrefs(thys->Fttable, &thys->Xreflist, &taxid);
-          if(taxid)
-              seqTaxidSaveI(thys, taxid);
-      }
-***************
-*** 11521,11526 ****
---- 11540,11546 ----
-  
-      if(nfields == 8) 
-      {
-+         ajFilebuffSetBuffered(buff);
-          ajFilebuffResetStore(buff, seqin->Text, &thys->TextPtr);
-  
-          return seqReadRefseqp(thys,seqin);
-***************
-*** 11916,11921 ****
---- 11936,11943 ----
-      if(!ajBuffreadLine(buff, &seqReadLine))
-  	return ajFalse;
-  
-+     ajDebug("++seqReadRefseqp  %d first line '%S'\n", buff->Pos, seqReadLine);
-+ 
-      bufflines++;
-  
-      ok = ajTrue;
-***************
-*** 12303,12310 ****
-  	    ok = ajBuffreadLineStore(buff,&seqReadLine,
-  				    seqin->Text, &thys->TextPtr);
-  
-- 
-      ajFilebuffClear(buff, 0);
-  
-      ajStrTokenDel(&handle);
-      ajStrDel(&token);
---- 12325,12332 ----
-  	    ok = ajBuffreadLineStore(buff,&seqReadLine,
-  				    seqin->Text, &thys->TextPtr);
-  
-      ajFilebuffClear(buff, 0);
-+     ajDebug("++last line %d '%S'\n", buff->Pos, seqReadLine);
-  
-      ajStrTokenDel(&handle);
-      ajStrDel(&token);
-***************
-*** 13446,13452 ****
-          return;
-  
-      if(!seqRegUsaFmt)
-! 	seqRegUsaFmt = ajRegCompC("^([A-Za-z0-9]*)::(.*)$");
-      /* \1 format letters and numbers only */
-      /* \2 remainder (filename, etc.)*/
-  
---- 13468,13474 ----
-          return;
-  
-      if(!seqRegUsaFmt)
-! 	seqRegUsaFmt = ajRegCompC("^([A-Za-z0-9-]*)::(.*)$");
-      /* \1 format letters and numbers only */
-      /* \2 remainder (filename, etc.)*/
-  
-diff -c -N --recursive EMBOSS-6.1.0orig/ajax/ajseqwrite.c EMBOSS-6.1.0/ajax/ajseqwrite.c
-*** EMBOSS-6.1.0orig/ajax/ajseqwrite.c	Mon Sep 28 22:15:17 2009
---- EMBOSS-6.1.0/ajax/ajseqwrite.c	Wed Dec  2 12:27:22 2009
-***************
-*** 231,237 ****
-  	 AJFALSE, AJFALSE, AJFALSE, AJTRUE,  AJTRUE,
-  	 AJFALSE, AJTRUE,  AJFALSE, seqWriteGcg},
-      {"gcg8",       "GCG old (version 8) sequence format",
-! 	 AJFALSE, AJFALSE, AJFALSE, AJTRUE,  AJTRUE,
-  	 AJFALSE, AJTRUE,  AJFALSE, seqWriteGcg}, /* alias for gcg */
-      {"embl",       "EMBL entry format",
-  	 AJFALSE, AJFALSE, AJFALSE, AJTRUE, AJFALSE,
---- 231,237 ----
-  	 AJFALSE, AJFALSE, AJFALSE, AJTRUE,  AJTRUE,
-  	 AJFALSE, AJTRUE,  AJFALSE, seqWriteGcg},
-      {"gcg8",       "GCG old (version 8) sequence format",
-! 	 AJTRUE,  AJFALSE, AJFALSE, AJTRUE,  AJTRUE,
-  	 AJFALSE, AJTRUE,  AJFALSE, seqWriteGcg}, /* alias for gcg */
-      {"embl",       "EMBL entry format",
-  	 AJFALSE, AJFALSE, AJFALSE, AJTRUE, AJFALSE,
-***************
-*** 240,246 ****
-  	 AJTRUE,  AJFALSE, AJFALSE, AJTRUE,  AJFALSE,
-  	 AJTRUE,  AJTRUE,  AJFALSE, seqWriteEmbl},
-      {"emblold",    "EMBL entry format (alias)",
-! 	 AJFALSE, AJFALSE, AJFALSE, AJTRUE,  AJFALSE,
-  	 AJTRUE,  AJTRUE,  AJFALSE, seqWriteEmbl}, /* embl pre-87 format*/
-      {"em",         "EMBL entry format (alias)",
-  	 AJTRUE,  AJFALSE, AJFALSE, AJTRUE,  AJFALSE,
---- 240,246 ----
-  	 AJTRUE,  AJFALSE, AJFALSE, AJTRUE,  AJFALSE,
-  	 AJTRUE,  AJTRUE,  AJFALSE, seqWriteEmbl},
-      {"emblold",    "EMBL entry format (alias)",
-! 	 AJTRUE,  AJFALSE, AJFALSE, AJTRUE,  AJFALSE,
-  	 AJTRUE,  AJTRUE,  AJFALSE, seqWriteEmbl}, /* embl pre-87 format*/
-      {"em",         "EMBL entry format (alias)",
-  	 AJTRUE,  AJFALSE, AJFALSE, AJTRUE,  AJFALSE,
-***************
-*** 255,261 ****
-  	 AJTRUE,  AJFALSE, AJFALSE, AJFALSE, AJTRUE,
-  	 AJTRUE,  AJTRUE,  AJFALSE, seqWriteSwiss},
-      {"swissold",   "Swissprot entry format", /* format before 2006 release */
-! 	 AJFALSE, AJFALSE, AJFALSE, AJFALSE, AJTRUE,
-  	 AJTRUE,  AJTRUE,  AJFALSE, seqWriteSwiss},
-      {"swissprotold","Swissprot entry format",
-  	 AJTRUE,  AJFALSE, AJFALSE, AJFALSE, AJTRUE,
---- 255,261 ----
-  	 AJTRUE,  AJFALSE, AJFALSE, AJFALSE, AJTRUE,
-  	 AJTRUE,  AJTRUE,  AJFALSE, seqWriteSwiss},
-      {"swissold",   "Swissprot entry format", /* format before 2006 release */
-! 	 AJTRUE,  AJFALSE, AJFALSE, AJFALSE, AJTRUE,
-  	 AJTRUE,  AJTRUE,  AJFALSE, seqWriteSwiss},
-      {"swissprotold","Swissprot entry format",
-  	 AJTRUE,  AJFALSE, AJFALSE, AJFALSE, AJTRUE,
-***************
-*** 347,353 ****
-      {"msf",        "GCG MSF (mutiple sequence file) file format",
-  	 AJFALSE, AJFALSE, AJTRUE,  AJTRUE,  AJTRUE,
-  	 AJFALSE, AJTRUE,  AJFALSE, seqWriteMsf},
-!     {"clustal",    "Clustalw output format",
-  	 AJFALSE, AJFALSE, AJTRUE,  AJTRUE,  AJTRUE,
-  	 AJFALSE, AJTRUE,  AJFALSE, seqWriteClustal},
-      {"aln",        "Clustalw output format (alias)",
---- 347,353 ----
-      {"msf",        "GCG MSF (mutiple sequence file) file format",
-  	 AJFALSE, AJFALSE, AJTRUE,  AJTRUE,  AJTRUE,
-  	 AJFALSE, AJTRUE,  AJFALSE, seqWriteMsf},
-!     {"clustal",    "Clustalw multiple alignment format",
-  	 AJFALSE, AJFALSE, AJTRUE,  AJTRUE,  AJTRUE,
-  	 AJFALSE, AJTRUE,  AJFALSE, seqWriteClustal},
-      {"aln",        "Clustalw output format (alias)",
-***************
-*** 1360,1374 ****
-  
-  static void seqWriteFastqSanger(AjPSeqout outseq)
-  {
--     ajuint i;
-      ajuint j;
-      ajuint ilen;
--     ajuint jlen;
-      AjPStr seq = NULL;
--     ajuint linelen     = 60;
--     ajuint iend;
-      AjPStr db = NULL;
-!     char qchar;
-  
-      ajStrAssignS(&db, outseq->Setoutdb);
-      /* ajStrAssignEmptyS(&db, outseq->Db);*/
---- 1360,1370 ----
-  
-  static void seqWriteFastqSanger(AjPSeqout outseq)
-  {
-      ajuint j;
-      ajuint ilen;
-      AjPStr seq = NULL;
-      AjPStr db = NULL;
-!     ajint qchar;
-  
-      ajStrAssignS(&db, outseq->Setoutdb);
-      /* ajStrAssignEmptyS(&db, outseq->Db);*/
-***************
-*** 1394,1430 ****
-      ajFmtPrintF(outseq->File, "\n");
-      ilen = ajStrGetLen(outseq->Seq);
-  
-!     for(i=0; i < ilen; i += linelen)
-!     {
-! 	iend = AJMIN(ilen-1, i+linelen-1);
-! 	ajStrAssignSubS(&seq, outseq->Seq, i, iend);
-! 	ajFmtPrintF(outseq->File, "%S\n", seq);
-!     }
-! 
-!     ajFmtPrintF(outseq->File, "+%S", outseq->Name);
-! 
-!     if(ajStrGetLen(outseq->Sv))
-! 	ajFmtPrintF(outseq->File, " %S", outseq->Sv);
-!     else if(ajStrGetLen(outseq->Acc))
-! 	ajFmtPrintF(outseq->File, " %S", outseq->Acc);
-  
-!     ajFmtPrintF(outseq->File, "\n");
-  
-      ilen = ajStrGetLen(outseq->Seq);
-  
-      if(outseq->Accuracy)
-      {
-!         for(i=0; i < ilen; i += linelen)
-          {
-!             iend = AJMIN(ilen-1, i+linelen-1);
-!             ajStrAssignClear(&seq);
-!             for(j=i;j<=iend;j++)
-!             {
-!                 qchar = 33 + (int) outseq->Accuracy[j];
-!                 ajStrAppendK(&seq, qchar);
-!             }
-!             ajFmtPrintF(outseq->File, "%S\n", seq);
-          }
-      }
-  
-      else 
---- 1390,1416 ----
-      ajFmtPrintF(outseq->File, "\n");
-      ilen = ajStrGetLen(outseq->Seq);
-  
-!     ajFmtPrintF(outseq->File, "%S\n", outseq->Seq);
-  
-!     ajFmtPrintF(outseq->File, "+\n");
-  
-      ilen = ajStrGetLen(outseq->Seq);
-  
-      if(outseq->Accuracy)
-      {
-!         ajStrAssignClear(&seq);
-! 
-!         for(j=0;j<ilen;j++)
-          {
-!             qchar = 33 + (int) (0.5 + outseq->Accuracy[j]);
-!             if(qchar > 126)
-!                 qchar = 126;
-!             if(qchar < 33)
-!                 qchar = 33;
-!             ajStrAppendK(&seq, (char) qchar);
-          }
-+ 
-+         ajFmtPrintF(outseq->File, "%S\n", seq);
-      }
-  
-      else 
-***************
-*** 1433,1447 ****
-          ** default to a score of 1 (0.75 error : 1 base in 4 is right)
-          */
-  
-!         for(i=0; i < ilen; i += linelen)
-!         {
-!             iend = AJMIN(ilen-1, i+linelen-1);
-!             jlen = (iend - i + 1);
-!             ajStrAssignClear(&seq);
-!             ajStrAppendCountK(&seq,'\"', jlen); 
-!             ajFmtPrintF(outseq->File, "%S\n", seq);
-!         }
-  
-      }
-      
-      ajStrDel(&seq);
---- 1419,1429 ----
-          ** default to a score of 1 (0.75 error : 1 base in 4 is right)
-          */
-  
-!         ajStrAssignClear(&seq);
-! 
-!         ajStrAppendCountK(&seq,'\"', ilen); 
-  
-+         ajFmtPrintF(outseq->File, "%S\n", seq);
-      }
-      
-      ajStrDel(&seq);
-***************
-*** 1464,1478 ****
-  
-  static void seqWriteFastqIllumina(AjPSeqout outseq)
-  {
--     ajuint i;
-      ajuint j;
-      ajuint ilen;
--     ajuint jlen;
-      AjPStr seq = NULL;
--     ajuint linelen     = 60;
--     ajuint iend;
-      AjPStr db = NULL;
-!     char qchar;
-  
-      ajStrAssignS(&db, outseq->Setoutdb);
-      /* ajStrAssignEmptyS(&db, outseq->Db);*/
---- 1446,1456 ----
-  
-  static void seqWriteFastqIllumina(AjPSeqout outseq)
-  {
-      ajuint j;
-      ajuint ilen;
-      AjPStr seq = NULL;
-      AjPStr db = NULL;
-!     ajint qchar;
-  
-      ajStrAssignS(&db, outseq->Setoutdb);
-      /* ajStrAssignEmptyS(&db, outseq->Db);*/
-***************
-*** 1498,1534 ****
-      ajFmtPrintF(outseq->File, "\n");
-      ilen = ajStrGetLen(outseq->Seq);
-  
-!     for(i=0; i < ilen; i += linelen)
-!     {
-! 	iend = AJMIN(ilen-1, i+linelen-1);
-! 	ajStrAssignSubS(&seq, outseq->Seq, i, iend);
-! 	ajFmtPrintF(outseq->File, "%S\n", seq);
-!     }
-! 
-!     ajFmtPrintF(outseq->File, "+%S", outseq->Name);
-! 
-!     if(ajStrGetLen(outseq->Sv))
-! 	ajFmtPrintF(outseq->File, " %S", outseq->Sv);
-!     else if(ajStrGetLen(outseq->Acc))
-! 	ajFmtPrintF(outseq->File, " %S", outseq->Acc);
-! 
-!     ajFmtPrintF(outseq->File, "\n");
-  
-      ilen = ajStrGetLen(outseq->Seq);
-  
-      if(outseq->Accuracy)
-      {
-!         for(i=0; i < ilen; i += linelen)
-          {
-!             iend = AJMIN(ilen-1, i+linelen-1);
-!             ajStrAssignClear(&seq);
-!             for(j=i;j<=iend;j++)
-!             {
-!                 qchar = 64 + (int) outseq->Accuracy[j];
-!                 ajStrAppendK(&seq, qchar);
-!             }
-!             ajFmtPrintF(outseq->File, "%S\n", seq);
-          }
-      }
-  
-      else 
---- 1476,1501 ----
-      ajFmtPrintF(outseq->File, "\n");
-      ilen = ajStrGetLen(outseq->Seq);
-  
-!     ajFmtPrintF(outseq->File, "%S\n", outseq->Seq);
-!     ajFmtPrintF(outseq->File, "+\n");
-  
-      ilen = ajStrGetLen(outseq->Seq);
-  
-      if(outseq->Accuracy)
-      {
-!         ajStrAssignClear(&seq);
-! 
-!         for(j=0;j<ilen;j++)
-          {
-!             qchar = 64 + (int) (0.5 + outseq->Accuracy[j]);
-!             if(qchar > 126)
-!                 qchar = 126;
-!             else if(qchar < 33)
-!                 qchar = 33;
-!             ajStrAppendK(&seq, (char) qchar);
-          }
-+ 
-+         ajFmtPrintF(outseq->File, "%S\n", seq);
-      }
-  
-      else 
-***************
-*** 1537,1551 ****
-          ** default to a score of 1 (0.75 error : 1 base in 4 is right)
-          */
-  
-!         for(i=0; i < ilen; i += linelen)
-!         {
-!             iend = AJMIN(ilen-1, i+linelen-1);
-!             jlen = (iend - i + 1);
-!             ajStrAssignClear(&seq);
-!             ajStrAppendCountK(&seq,'A', jlen);
-!             ajFmtPrintF(outseq->File, "%S\n", seq);
-!         }
-  
-      }
-      
-      ajStrDel(&seq);
---- 1504,1514 ----
-          ** default to a score of 1 (0.75 error : 1 base in 4 is right)
-          */
-  
-!         ajStrAssignClear(&seq);
-! 
-!         ajStrAppendCountK(&seq,'A', ilen);
-  
-+         ajFmtPrintF(outseq->File, "%S\n", seq);
-      }
-      
-      ajStrDel(&seq);
-***************
-*** 1568,1582 ****
-  
-  static void seqWriteFastqSolexa(AjPSeqout outseq)
-  {
--     ajuint i;
-      ajuint j;
-      ajuint ilen;
--     ajuint jlen;
-      AjPStr seq = NULL;
--     ajuint linelen     = 60;
--     ajuint iend;
-      AjPStr db = NULL;
-!     char qchar;
-      double sval;
-      double pval;
-      double qval;
---- 1531,1541 ----
-  
-  static void seqWriteFastqSolexa(AjPSeqout outseq)
-  {
-      ajuint j;
-      ajuint ilen;
-      AjPStr seq = NULL;
-      AjPStr db = NULL;
-!     ajint qchar;
-      double sval;
-      double pval;
-      double qval;
-***************
-*** 1605,1651 ****
-      ajFmtPrintF(outseq->File, "\n");
-      ilen = ajStrGetLen(outseq->Seq);
-  
-!     for(i=0; i < ilen; i += linelen)
-!     {
-! 	iend = AJMIN(ilen-1, i+linelen-1);
-! 	ajStrAssignSubS(&seq, outseq->Seq, i, iend);
-! 	ajFmtPrintF(outseq->File, "%S\n", seq);
-!     }
-  
-!     ajFmtPrintF(outseq->File, "+%S", outseq->Name);
-! 
-!     if(ajStrGetLen(outseq->Sv))
-! 	ajFmtPrintF(outseq->File, " %S", outseq->Sv);
-!     else if(ajStrGetLen(outseq->Acc))
-! 	ajFmtPrintF(outseq->File, " %S", outseq->Acc);
-! 
-!     ajFmtPrintF(outseq->File, "\n");
-  
-      ilen = ajStrGetLen(outseq->Seq);
-  
-      if(outseq->Accuracy)
-      {
-!         for(i=0; i < ilen; i += linelen)
-          {
-!             iend = AJMIN(ilen-1, i+linelen-1);
-!             ajStrAssignClear(&seq);
-!             for(j=i;j<=iend;j++)
-!             {
-!                 sval = outseq->Accuracy[j];
-!                 pval = 1.0 / pow(10.0, (sval/10.0));
-  
-!                 /*adjust zero phred score to 0.75 error rate */
-!                 if(pval == 1.0)
-!                     pval = 0.75;
-! 
-!                 qval = 0.5 + -10.0 * log10(pval/(1.0 - pval));
-!                 qchar = 64 + (int) qval;
-!                 ajStrAppendK(&seq, qchar);
-!                 ajDebug("[%d] aval:%.4f qval:%.4f %d '%c'\n",
-!                         j, sval, qval, (int)qval, qchar);
-!             }
-!             ajFmtPrintF(outseq->File, "%S\n", seq);
-          }
-      }
-  
-      else 
---- 1564,1602 ----
-      ajFmtPrintF(outseq->File, "\n");
-      ilen = ajStrGetLen(outseq->Seq);
-  
-!     ajFmtPrintF(outseq->File, "%S\n", outseq->Seq);
-  
-!     ajFmtPrintF(outseq->File, "+\n");
-  
-      ilen = ajStrGetLen(outseq->Seq);
-  
-      if(outseq->Accuracy)
-      {
-!         ajStrAssignClear(&seq);
-! 
-!         for(j=0;j<ilen;j++)
-          {
-!             sval = outseq->Accuracy[j];
-!             pval = 1.0 / pow(10.0, (sval/10.0));
-  
-!             /*adjust zero phred score to 0.75 error rate */
-!             if(pval > 0.75)
-!                 pval = 0.75;
-! 
-!             qval = -10.0 * log10(pval/(1.0 - pval));
-!             if(qval >= 0.0)
-!                 qchar = 64 + (int) (qval + 0.5);
-!             else
-!                 qchar = 64 + (int) (qval - 0.5);
-!             if(qchar > 126)
-!                 qchar = 126;
-!             else if(qchar < 33)
-!                 qchar = 33;
-!             ajStrAppendK(&seq, (char) qchar);
-!             ajDebug("[%d] aval:%.4f qval:%.4f %d '%c'\n",
-!                     j, sval, qval, (int)qval, qchar);
-          }
-+         ajFmtPrintF(outseq->File, "%S\n", seq);
-      }
-  
-      else 
-***************
-*** 1654,1668 ****
-          ** default to a score of -5 (0.75 error : 1 base in 4 is right)
-          */
-  
-!         for(i=0; i < ilen; i += linelen)
-!         {
-!             iend = AJMIN(ilen-1, i+linelen-1);
-!             jlen = (iend - i + 1);
-!             ajStrAssignClear(&seq);
-!             ajStrAppendCountK(&seq,';', jlen); 
-!             ajFmtPrintF(outseq->File, "%S\n", seq);
-!         }
-  
-      }
-      
-      ajStrDel(&seq);
---- 1605,1615 ----
-          ** default to a score of -5 (0.75 error : 1 base in 4 is right)
-          */
-  
-!         ajStrAssignClear(&seq);
-!         
-!         ajStrAppendCountK(&seq,';', ilen); 
-  
-+         ajFmtPrintF(outseq->File, "%S\n", seq);
-      }
-      
-      ajStrDel(&seq);
-***************
-*** 6927,6939 ****
-      ajDebug("seqoutUsaProcess\n");
-      if(!seqoutRegFmt)
-  #ifndef WIN32
-! 	seqoutRegFmt = ajRegCompC("^([A-Za-z0-9]*)::?(.*)$");
-      /* \1 format */
-      /* \2 remainder */
-  #else
-      /* Windows file names can start with e.g.: 'C:\' */
-      /* -> Require that format names have at least 2 letters */
-!     seqoutRegFmt = ajRegCompC("^([A-Za-z0-9][A-Za-z0-9][A-Za-z0-9]*)::?(.*)$");
-      /* \1 format */
-      /* \2 remainder */
-  #endif
---- 6874,6886 ----
-      ajDebug("seqoutUsaProcess\n");
-      if(!seqoutRegFmt)
-  #ifndef WIN32
-! 	seqoutRegFmt = ajRegCompC("^([A-Za-z0-9-]*)::?(.*)$");
-      /* \1 format */
-      /* \2 remainder */
-  #else
-      /* Windows file names can start with e.g.: 'C:\' */
-      /* -> Require that format names have at least 2 letters */
-!     seqoutRegFmt = ajRegCompC("^([A-Za-z0-9][A-Za-z0-9-][A-Za-z0-9-]*)::?(.*)$");
-      /* \1 format */
-      /* \2 remainder */
-  #endif
-***************
-*** 7798,7803 ****
---- 7745,7751 ----
-  
-  
-  
-+ 
-  /* @funcstatic seqSeqFormat ***************************************************
-  **
-  ** Initialises sequence output formatting parameters.
-diff -c -N --recursive EMBOSS-6.1.0orig/ajax/ajstr.c EMBOSS-6.1.0/ajax/ajstr.c
-*** EMBOSS-6.1.0orig/ajax/ajstr.c	Mon Sep 28 22:15:18 2009
---- EMBOSS-6.1.0/ajax/ajstr.c	Mon Sep 28 22:14:49 2009
-***************
-*** 3,13 ****
-  **
-  ** AjPStr objects are reference counted strings
-  ** Any change will need a new string object if the use count
-! ** is greater than 1, so the original ajStr provided so that it can
-! ** be reallocated in any routine where string modification is possible.
-  **
-! ** In many cases
-! ** the text is always a copy, even of a constant original, so
-  ** that it can be simply freed.
-  **
-  ** @author Copyright (C) 1998 Peter Rice
---- 3,13 ----
-  **
-  ** AjPStr objects are reference counted strings
-  ** Any change will need a new string object if the use count
-! ** is greater than 1, so the original AjPStr is provided as a pointer
-! ** so that it can be reallocated in any routine where string modification
-! ** may be needed.
-  **
-! ** In many cases the text is always a copy, even of a constant original, so
-  ** that it can be simply freed.
-  **
-  ** @author Copyright (C) 1998 Peter Rice
-***************
-*** 2042,2047 ****
---- 2042,2048 ----
-  ** @nam4rule  NewRes   Construct with reserved size.
-  **
-  ** @argrule   C       txt [const char*] Text string
-+ ** @argrule   K       ch [char] Single character
-  ** @argrule   S       str [const AjPStr] Text string
-  ** @argrule   NewRes  size [ajuint] Reserved size
-  ** @argrule   NewRef  refstr [AjPStr] Text string to be duplicated
-***************
-*** 2099,2104 ****
---- 2100,2132 ----
-  
-  
-  
-+ /* @func ajStrNewK ************************************************************
-+ **
-+ ** String constructor which allocates memory for a string and initialises it
-+ ** with the single character provided. 
-+ ** 
-+ ** The string size is set just large enough to hold the supplied text.
-+ **
-+ ** @param [r] ch [char] Null-terminated character string to initialise
-+ **                      the new string.
-+ ** @return [AjPStr] Pointer to a string containing the supplied text
-+ ** @@
-+ ******************************************************************************/
-+ 
-+ AjPStr ajStrNewK(char ch)
-+ {
-+     char txt[2] = " ";
-+     AjPStr thys;
-+ 
-+     txt[0] = ch;
-+     thys = ajStrNewResLenC(txt, 2, 1);
-+ 
-+     return thys;
-+ }
-+ 
-+ 
-+ 
-+ 
-  /* @func ajStrNewS ************************************************************
-  **
-  ** String constructor which allocates memory for a string and initialises it
-***************
-*** 6106,6111 ****
---- 6134,6157 ----
-  
-  
-  
-+ /* @func ajStrTrimWhiteStart **************************************************
-+ **
-+ ** Removes regions composed of white space characters only from the start of a 
-+ ** string.
-+ **
-+ ** @param [u] Pstr [AjPStr*] String
-+ ** @return [AjBool] ajTrue if string was reallocated
-+ ** @@
-+ ******************************************************************************/
-+ 
-+ AjBool ajStrTrimWhiteStart(AjPStr* Pstr)
-+ {
-+     return ajStrTrimStartC(Pstr, "\t \n\r");
-+ }
-+ 
-+ 
-+ 
-+ 
-  /* @func ajStrTruncateLen *****************************************************
-  **
-  ** Removes the end from a string reducing it to a defined length.
-***************
-*** 8512,8524 ****
-  
-      thys = *Pstr;
-  
-!     if((thys->Use > 1) || (thys->Res < savesize))
-      {
-  	strCloneL(Pstr, savesize);
-  
-  	return ajTrue;
-      }
-  
-      return ajFalse;
-  }
-  
---- 8558,8578 ----
-  
-      thys = *Pstr;
-  
-!     if(thys->Use > 1)
-      {
-  	strCloneL(Pstr, savesize);
-  
-  	return ajTrue;
-      }
-  
-+     if(thys->Res < savesize)
-+     {
-+ 	AJRESIZE(thys->Ptr, savesize);
-+ 	thys->Res = savesize;
-+ 
-+ 	return ajTrue;
-+     }
-+ 
-      return ajFalse;
-  }
-  
-***************
-*** 8565,8570 ****
---- 8619,8631 ----
-  
-      thys = *Pstr;
-  
-+     if(thys->Use > 1)
-+     {
-+ 	strCloneL(Pstr, size);
-+ 
-+ 	return ajTrue;
-+     }
-+ 
-      if(thys->Res < size)
-      {
-  	if(size >= LONGSTR)
-***************
-*** 8579,8592 ****
-  	else
-  	  roundsize = ajRound(size, STRSIZE);
-  
-! 	strCloneL(Pstr, roundsize);
-! 
-! 	return ajTrue;
-!     }
-! 
-!     if(thys->Use > 1)
-!     {
-! 	strCloneL(Pstr, size);
-  
-  	return ajTrue;
-      }
---- 8640,8647 ----
-  	else
-  	  roundsize = ajRound(size, STRSIZE);
-  
-!         AJRESIZE(thys->Ptr, roundsize);
-!         thys->Res = roundsize;
-  
-  	return ajTrue;
-      }
-diff -c -N --recursive EMBOSS-6.1.0orig/ajax/ajstr.h EMBOSS-6.1.0/ajax/ajstr.h
-*** EMBOSS-6.1.0orig/ajax/ajstr.h	Mon Sep 28 22:15:17 2009
---- EMBOSS-6.1.0/ajax/ajstr.h	Mon Sep 28 22:14:48 2009
-***************
-*** 65,70 ****
---- 65,73 ----
-  **
-  ** String iterator, used to test iterator functionality.
-  **
-+ ** @alias AjSStrIter
-+ ** @alias AjOStrIter
-+ **
-  ** @new ajStrIter Creates and initializes an iterator for a string
-  **
-  ** @delete ajStrIterFree Destructor for a string iterator
-***************
-*** 192,197 ****
---- 195,201 ----
-  
-  AjPStr     ajStrNew (void);
-  AjPStr     ajStrNewC (const char *txt);
-+ AjPStr     ajStrNewK (char ch);
-  AjPStr     ajStrNewS (const AjPStr str);
-  AjPStr     ajStrNewRef(AjPStr str);
-  AjPStr     ajStrNewRes(ajuint size);
-***************
-*** 296,301 ****
---- 300,306 ----
-  AjBool     ajStrTrimStartC (AjPStr* Pstr, const char* txt);
-  AjBool     ajStrTrimWhite(AjPStr* Pstr);
-  AjBool     ajStrTrimWhiteEnd(AjPStr* Pstr);
-+ AjBool     ajStrTrimWhiteStart(AjPStr* Pstr);
-  AjBool     ajStrTruncateLen(AjPStr* Pstr, ajuint len);
-  AjBool     ajStrTruncatePos(AjPStr* Pstr, ajint pos);
-  
-diff -c -N --recursive EMBOSS-6.1.0orig/emboss/coderet.c EMBOSS-6.1.0/emboss/coderet.c
-*** EMBOSS-6.1.0orig/emboss/coderet.c	Mon Sep 28 22:15:20 2009
---- EMBOSS-6.1.0/emboss/coderet.c	Wed Dec  2 12:28:05 2009
-***************
-*** 137,143 ****
-              if(seqoutcds && ajFeatTypeMatchC(gf, "CDS"))
-              {
-                  icds++;
-!                 ret = ajFeatGetSeq(gf, feat, seq, &cds);
-  		if(!ret)
-  		{
-  		    ajWarn("Cannot extract %S\n",ajSeqGetNameS(seq));
---- 137,143 ----
-              if(seqoutcds && ajFeatTypeMatchC(gf, "CDS"))
-              {
-                  icds++;
-!                 ret = ajFeatGetSeqJoin(gf, feat, seq, &cds);
-  		if(!ret)
-  		{
-  		    ajWarn("Cannot extract %S\n",ajSeqGetNameS(seq));
-***************
-*** 149,155 ****
-              if(seqoutmrna && ajFeatTypeMatchC(gf, "mRNA"))
-              {
-                  imrna++;
-!                 ret = ajFeatGetSeq(gf, feat, seq, &mrna);
-                  if(!ret)
-                  {
-                      ajWarn("Cannot extract %s",ajSeqGetNameC(seq));
---- 149,155 ----
-              if(seqoutmrna && ajFeatTypeMatchC(gf, "mRNA"))
-              {
-                  imrna++;
-!                 ret = ajFeatGetSeqJoin(gf, feat, seq, &mrna);
-                  if(!ret)
-                  {
-                      ajWarn("Cannot extract %s",ajSeqGetNameC(seq));
-***************
-*** 165,175 ****
-                  if(ajFeatTypeMatchC(gf, "CDS") ||
-                     ajFeatTypeMatchC(gf, "mRNA") ||
-                     ajFeatTypeMatchC(gf, "exon"))
--                 {
--                     irest++;
-                      ajFeatLocMark(gf, feat, &copyseq);
-!                 }
-! 
-              }
-  
-              if(seqoutprot && ajFeatTypeMatchC(gf, "CDS"))
---- 165,173 ----
-                  if(ajFeatTypeMatchC(gf, "CDS") ||
-                     ajFeatTypeMatchC(gf, "mRNA") ||
-                     ajFeatTypeMatchC(gf, "exon"))
-                      ajFeatLocMark(gf, feat, &copyseq);
-!                 else
-!                     irest++;
-              }
-  
-              if(seqoutprot && ajFeatTypeMatchC(gf, "CDS"))
-***************
-*** 196,202 ****
-              ajFmtPrintF(logf, "%6d", itran);
-  
-          ajFmtPrintF(logf, "%6d %s\n",
-!                     icds+imrna+irest+itran, ajSeqGetNameC(seq));
-      }
-  
-  
---- 194,200 ----
-              ajFmtPrintF(logf, "%6d", itran);
-  
-          ajFmtPrintF(logf, "%6d %s\n",
-!                     icds+imrna+irest, ajSeqGetNameC(seq));
-      }
-  
-  
-diff -c -N --recursive EMBOSS-6.1.0orig/emboss/extractfeat.c EMBOSS-6.1.0/emboss/extractfeat.c
-*** EMBOSS-6.1.0orig/emboss/extractfeat.c	Mon Sep 28 22:15:18 2009
---- EMBOSS-6.1.0/emboss/extractfeat.c	Thu Dec 10 11:46:28 2009
-***************
-*** 205,214 ****
-      ajint   firstpos;
-      ajint   lastpos;	        /* bounds of feature in sequence */
-      AjPStr  describeout = NULL;	/* tag names/values to add to descriptions */
-! 
-  
-      /* For all features... */
-!     if(featab && ajFeattableSize(featab))
-      {
-  	/* initialise details of a feature */
-          featseq = ajStrNew();
---- 205,214 ----
-      ajint   firstpos;
-      ajint   lastpos;	        /* bounds of feature in sequence */
-      AjPStr  describeout = NULL;	/* tag names/values to add to descriptions */
-!     ajuint count = 0;
-  
-      /* For all features... */
-!     if(featab && ajFeattableGetSize(featab))
-      {
-  	/* initialise details of a feature */
-          featseq = ajStrNew();
-***************
-*** 267,278 ****
-  	    ajDebug("feature %S %d-%d is parent %B, child %B, single %B\n",
-  		    ajFeatGetType(gf), ajFeatGetStart(gf), ajFeatGetEnd(gf),
-  		    parent, child, single);
-! 
-  	    /*
-  	    ** If single or parent, write out any stored previous feature
-  	    ** sequence
-  	    */	    
-!             if(!child)
-  	    {
-              	extractfeat_WriteOut(seqout, &featseq, compall, sense,
-  				     firstpos, lastpos, before, after, seq,
---- 267,282 ----
-  	    ajDebug("feature %S %d-%d is parent %B, child %B, single %B\n",
-  		    ajFeatGetType(gf), ajFeatGetStart(gf), ajFeatGetEnd(gf),
-  		    parent, child, single);
-! /*
-! 	    ajUser("feature %S %d-%d is parent %B, child %B, single %B",
-! 		    ajFeatGetType(gf), ajFeatGetStart(gf), ajFeatGetEnd(gf),
-! 		    parent, child, single);
-! */
-  	    /*
-  	    ** If single or parent, write out any stored previous feature
-  	    ** sequence
-  	    */	    
-!             if(count++ && !child)
-  	    {
-              	extractfeat_WriteOut(seqout, &featseq, compall, sense,
-  				     firstpos, lastpos, before, after, seq,
-***************
-*** 333,340 ****
-  	    /* get feature sequence(complement if required) */
-              if(!child)
-              {
-!                 ajFeatGetSeq(gf, featab, seq, &tmpseq);
-                  ajDebug("extracted feature = %d bases\n", ajStrGetLen(tmpseq));
-              	ajStrAssignS(&featseq, tmpseq);
-  	    }
-  	}
---- 337,348 ----
-  	    /* get feature sequence(complement if required) */
-              if(!child)
-              {
-!                 if(join)
-!                     ajFeatGetSeqJoin(gf, featab, seq, &tmpseq);
-!                 else
-!                     ajFeatGetSeq(gf, seq, &tmpseq);
-                  ajDebug("extracted feature = %d bases\n", ajStrGetLen(tmpseq));
-+                 /*ajUser("extracted feature = %d bases", ajStrGetLen(tmpseq));*/
-              	ajStrAssignS(&featseq, tmpseq);
-  	    }
-  	}
-***************
-*** 375,381 ****
-  ** @param [r] before [ajint] region before feature to get
-  ** @param [r] after [ajint] region after feature to get
-  ** @param [r] seq [const AjPSeq] input sequence
-! ** @param [r] remote [AjBool] TRUE if must abort becuase it includes Remote IDs
-  ** @param [r] type [const AjPStr] type of feature
-  ** @param [r] featinname [AjBool] TRUE if want the type to be part of the name
-  ** @param [r] describestr [const AjPStr] tag names/values for description line
---- 383,389 ----
-  ** @param [r] before [ajint] region before feature to get
-  ** @param [r] after [ajint] region after feature to get
-  ** @param [r] seq [const AjPSeq] input sequence
-! ** @param [r] remote [AjBool] TRUE if must abort because it includes Remote IDs
-  ** @param [r] type [const AjPStr] type of feature
-  ** @param [r] featinname [AjBool] TRUE if want the type to be part of the name
-  ** @param [r] describestr [const AjPStr] tag names/values for description line
-***************
-*** 395,404 ****
---- 403,423 ----
-      AjPStr value  = NULL;	/* string value of start or end position */
-      AjPStr desc   = NULL;	/* sequence description */
-      ajint tmp;
-+     AjBool forward = sense;
-+ 
-+     if(compall)
-+         forward = ajFalse;
-  
-+     ajDebug("WriteOut %S_%d_%d [%S] %d all:%B fwd:%B remote:%B\n",
-+            ajSeqGetNameS(seq), firstpos+1, lastpos+1, type,
-+            ajStrGetLen(*featstr), compall, sense, remote);
-+  
-      /* see if there is a sequence to be written out */
-      if(!ajStrGetLen(*featstr))
-      {
-+         ajWarn("feature %S_%d_%d [%S] "
-+                "not written out because it has zero length\n",
-+                ajSeqGetNameS(seq), firstpos+1, lastpos+1, type);
-          ajDebug("feature not written out because it has length=0 "
-  		"(probably first time round)\n");
-      	return;
-***************
-*** 407,439 ****
-      /* see if must abort because there were Remote IDs in the features */
-      if(remote)
-      {
-          ajDebug("feature not written out because it has Remote IDs\n");
-          return;
-      }
-  
--     /* if complementing the whole sequence, swap before and after */
--     if(compall)
--     {
--         tmp    = before;
--         before = after;
--         after  = tmp;
--     }
-- 
-      ajDebug("feature = %d bases\n", ajStrGetLen(*featstr));
-  
-      /* featstr may be edited, so it is a AjPStr* */
-      extractfeat_BeforeAfter (seq, featstr, firstpos, lastpos, before,
-! 			     after, sense);
-  
-      ajDebug("feature+before/after = %d bases\n", ajStrGetLen(*featstr));
-  
--     /*
--     ** if join was all in reverse sense, now finally get reverse
--     ** complement
--     */
--     if(compall)
--     	ajSeqstrReverse(featstr);
-- 
-      /* set the extracted sequence */
-      newseq = ajSeqNew();
-      ajSeqAssignSeqS(newseq, *featstr);
---- 426,444 ----
-      /* see if must abort because there were Remote IDs in the features */
-      if(remote)
-      {
-+         ajWarn("feature not written out because it has Remote IDs\n");
-          ajDebug("feature not written out because it has Remote IDs\n");
-          return;
-      }
-  
-      ajDebug("feature = %d bases\n", ajStrGetLen(*featstr));
-  
-      /* featstr may be edited, so it is a AjPStr* */
-      extractfeat_BeforeAfter (seq, featstr, firstpos, lastpos, before,
-! 			     after, forward);
-  
-      ajDebug("feature+before/after = %d bases\n", ajStrGetLen(*featstr));
-  
-      /* set the extracted sequence */
-      newseq = ajSeqNew();
-      ajSeqAssignSeqS(newseq, *featstr);
-***************
-*** 518,524 ****
-      ajint len;
-  
-  
-- 
-      /*
-       ** There is now:
-       ** A complete set of joined features in featstr.
---- 523,528 ----
-***************
-*** 819,829 ****
-  				       float maxscore, const AjPStr tag,
-  				       const AjPStr value, AjBool *tagsmatch)
-  {
-  
-!      /*
-!      ** is this a child of a join() ?
-!      ** if it is a child, then we use the previous result of MatchPatternTags
-!      */
-      if(!ajFeatIsMultiple(gf) || !ajFeatIsChild(gf))
-          *tagsmatch = extractfeat_MatchPatternTags(gf, tag, value);
-  
---- 823,836 ----
-  				       float maxscore, const AjPStr tag,
-  				       const AjPStr value, AjBool *tagsmatch)
-  {
-+     AjPStrTok tokens = NULL;
-+     AjPStr key = NULL;
-+     AjBool val = ajFalse;
-  
-!     /*
-!     ** is this a child of a join() ?
-!     ** if it is a child, then we use the previous result of MatchPatternTags
-!     */
-      if(!ajFeatIsMultiple(gf) || !ajFeatIsChild(gf))
-          *tagsmatch = extractfeat_MatchPatternTags(gf, tag, value);
-  
-***************
-*** 846,862 ****
-  
-      ajDebug("extractfeat_MatchFeature\n");
-  
-!     ajDebug("embMiscMatchPattern(ajFeatGetSource(gf), source) %B\n",
-! 	    embMiscMatchPattern(ajFeatGetSource(gf), source));
-      ajDebug("ajFeatTypeMatchS(gf, type) %B\n",
-! 	    ajFeatTypeMatchS(gf, type));
-      ajDebug("ajFeatGetStrand(gf) '%x' sense %d\n", ajFeatGetStrand(gf), sense);
-      ajDebug("testscore: %B ajFeatGetScore(gf): %f minscore:%f maxscore:%f\n",
-  	    testscore, ajFeatGetScore(gf), minscore, maxscore);
-!     if(!embMiscMatchPattern(ajFeatGetSource(gf), source))
-!         return ajFalse;
-!     if(ajStrGetLen(type) && !ajFeatTypeMatchS(gf, type))
-          return ajFalse;
-      if(ajFeatGetStrand(gf) == '+' && sense == -1)
-          return ajFalse;
-      if(ajFeatGetStrand(gf) == '-' && sense == +1)
---- 853,888 ----
-  
-      ajDebug("extractfeat_MatchFeature\n");
-  
-!     ajDebug("embMiscMatchPatternDelim(ajFeatGetSource(gf), source) %B\n",
-! 	    embMiscMatchPatternDelimC(ajFeatGetSource(gf), source, ",;|"));
-      ajDebug("ajFeatTypeMatchS(gf, type) %B\n",
-!       ajFeatTypeMatchWildS(gf, type));
-      ajDebug("ajFeatGetStrand(gf) '%x' sense %d\n", ajFeatGetStrand(gf), sense);
-      ajDebug("testscore: %B ajFeatGetScore(gf): %f minscore:%f maxscore:%f\n",
-  	    testscore, ajFeatGetScore(gf), minscore, maxscore);
-!     if(!embMiscMatchPatternDelimC(ajFeatGetSource(gf), source, ",;|"))
-          return ajFalse;
-+ 
-+ 
-+     if(ajStrGetLen(type))
-+     {
-+         val = ajFalse;
-+         tokens = ajStrTokenNewC(type, " \t\n\r,;|");
-+ 
-+         while (ajStrTokenNextParse( &tokens, &key))
-+         {
-+             if (ajFeatTypeMatchWildS(gf, key))
-+             {
-+                 val = ajTrue;
-+                 break;
-+             }
-+         }
-+ 
-+         ajStrTokenDel( &tokens);
-+         ajStrDel(&key);
-+         if(!val)
-+             return ajFalse;
-+     }
-      if(ajFeatGetStrand(gf) == '+' && sense == -1)
-          return ajFalse;
-      if(ajFeatGetStrand(gf) == '-' && sense == +1)
-***************
-*** 869,874 ****
---- 895,901 ----
-          return ajFalse;
-  
-      ajDebug("All tests passed, return ajTrue\n");
-+     /*ajUser("All tests passed, return ajTrue");*/
-  
-      return ajTrue;
-  }
-***************
-*** 914,920 ****
-  
-      while(ajFeatTagval(titer, &tagnam, &tagval))
-      {
-!         tval = embMiscMatchPattern(tagnam, tpattern);
-  
-          /*
-          ** If tag has no value then
---- 941,947 ----
-  
-      while(ajFeatTagval(titer, &tagnam, &tagval))
-      {
-!         tval = embMiscMatchPatternDelimC(tagnam, tpattern, ",;|");
-  
-          /*
-          ** If tag has no value then
-***************
-*** 929,935 ****
-  		vval = ajFalse;
-          }
-  	else
-!             vval = embMiscMatchPattern(tagval, vpattern);
-  
-          if(tval && vval)
-  	{
---- 956,962 ----
-  		vval = ajFalse;
-          }
-  	else
-!             vval = embMiscMatchPatternDelimC(tagval, vpattern, ",;|");
-  
-          if(tval && vval)
-  	{
-***************
-*** 978,984 ****
-  
-      while(ajFeatTagval(titer, &tagnam, &tagval))
-      {
-!         if(embMiscMatchPattern(tagnam, describe))
-  	{
-              /* There's a match, so write to strout in a pretty format */
-              if(!val)
---- 1005,1011 ----
-  
-      while(ajFeatTagval(titer, &tagnam, &tagval))
-      {
-!         if(embMiscMatchPatternDelimC(tagnam, describe, ",;|"))
-  	{
-              /* There's a match, so write to strout in a pretty format */
-              if(!val)
-diff -c -N --recursive EMBOSS-6.1.0orig/emboss/notseq.c EMBOSS-6.1.0/emboss/notseq.c
-*** EMBOSS-6.1.0orig/emboss/notseq.c	Mon Sep 28 22:15:18 2009
---- EMBOSS-6.1.0/emboss/notseq.c	Wed Dec  2 12:28:15 2009
-***************
-*** 62,69 ****
-  	ajStrAssignS(&name, ajSeqGetNameS(seq));
-  	ajStrAssignS(&acc, ajSeqGetAccS(seq));
-  
-! 	if(embMiscMatchPattern(name, pattern) ||
-! 	    embMiscMatchPattern(acc, pattern))
-  	    ajSeqoutWriteSeq(junkout, seq);
-  	else
-  	    /* no match, so not excluded */
---- 62,69 ----
-  	ajStrAssignS(&name, ajSeqGetNameS(seq));
-  	ajStrAssignS(&acc, ajSeqGetAccS(seq));
-  
-! 	if(embMiscMatchPatternDelimC(name, pattern, ",;") ||
-! 	    embMiscMatchPatternDelimC(acc, pattern, ",;"))
-  	    ajSeqoutWriteSeq(junkout, seq);
-  	else
-  	    /* no match, so not excluded */
-diff -c -N --recursive EMBOSS-6.1.0orig/emboss/prettyplot.c EMBOSS-6.1.0/emboss/prettyplot.c
-*** EMBOSS-6.1.0orig/emboss/prettyplot.c	Mon Sep 28 22:15:18 2009
---- EMBOSS-6.1.0/emboss/prettyplot.c	Wed Dec  2 12:28:21 2009
-***************
-*** 201,206 ****
---- 201,207 ----
-      ajint newILend = 0;
-      ajint newILstart;
-      void *freeptr;
-+     ajint itmp;
-      
-      ajGraphInit("prettyplot", argc, argv);
-  
-***************
-*** 427,442 ****
-      if(ixlen == 0.0)
-      {
-  	/* for postscript these are 0.0 ????? */
-- 	if(portrait)
-- 	{
-- 	    ixlen = 768;
-- 	    iylen = 960;
-- 	}
-- 	else
-- 	{
-  	    ixlen = 960;
-  	    iylen = 768;
-! 	}
-      }
-  
-      ajGraphGetCharSize(&defheight,&currentheight);
---- 428,442 ----
-      if(ixlen == 0.0)
-      {
-  	/* for postscript these are 0.0 ????? */
-  	    ixlen = 960;
-  	    iylen = 768;
-!     }
-! 
-!     if(portrait)
-!     {
-!         itmp = ixlen;
-!         ixlen = iylen;
-!         iylen = itmp;
-      }
-  
-      ajGraphGetCharSize(&defheight,&currentheight);
-diff -c -N --recursive EMBOSS-6.1.0orig/emboss/seqmatchall.c EMBOSS-6.1.0/emboss/seqmatchall.c
-*** EMBOSS-6.1.0orig/emboss/seqmatchall.c	Mon Sep 28 22:15:18 2009
---- EMBOSS-6.1.0/emboss/seqmatchall.c	Wed Dec  2 12:28:27 2009
-***************
-*** 76,82 ****
-  		for(j=i+1;j<ajSeqsetGetSize(seqset);j++)
-  		{
-  		    iseq2 = j;
-! 		    if(ajSeqGetLen(seqs[j]) > statwordlen)
-  		    {
-  			matchlist = embWordBuildMatchTable(seq1MatchTable,
-  							   seqs[j], ajTrue);
---- 76,82 ----
-  		for(j=i+1;j<ajSeqsetGetSize(seqset);j++)
-  		{
-  		    iseq2 = j;
-! 		    if(ajSeqGetLen(seqs[j]) >= statwordlen)
-  		    {
-  			matchlist = embWordBuildMatchTable(seq1MatchTable,
-  							   seqs[j], ajTrue);
-diff -c -N --recursive EMBOSS-6.1.0orig/emboss/showfeat.c EMBOSS-6.1.0/emboss/showfeat.c
-*** EMBOSS-6.1.0orig/emboss/showfeat.c	Mon Sep 28 22:15:18 2009
---- EMBOSS-6.1.0/emboss/showfeat.c	Wed Dec  2 12:28:34 2009
-***************
-*** 286,291 ****
---- 286,294 ----
-      AjBool want_multiple_line = ajFalse; /* true if want a join()s line */
-      AjBool in_multiple_line = ajFalse;   /* true if this is a join()s line */
-      AjBool child;	                 /* true if multiple's child */
-+     AjPStrTok tokens = NULL;
-+     AjPStr key = NULL;
-+     AjBool val = ajFalse;
-  
-      /* get the feature table of the sequence */
-      feat = ajSeqGetFeatCopy(seq);
-***************
-*** 355,366 ****
-  		continue;
-  
-  	    /* check that we want to output this match of source, type */
-! 	    if(!embMiscMatchPattern(ajFeatGetSource(gf), matchsource) ||
-! 	       !embMiscMatchPattern(ajFeatGetType(gf), matchtype) ||
-  	       !showfeat_MatchPatternTags(gf, matchtag, matchvalue,
-  					  stricttags, &tagstmp, values))
-  		continue;
-  
-  	     /*
-  	     ** Starting a new line?
-  	     ** Don't start a new line if:
---- 358,390 ----
-  		continue;
-  
-  	    /* check that we want to output this match of source, type */
-! 	    if(!embMiscMatchPatternDelimC(ajFeatGetSource(gf),
-!                                           matchsource,",;|") ||
-  	       !showfeat_MatchPatternTags(gf, matchtag, matchvalue,
-  					  stricttags, &tagstmp, values))
-  		continue;
-  
-+             if(ajStrGetLen(matchtype))
-+             {
-+                 val = ajFalse;
-+                 tokens = ajStrTokenNewC(matchtype, " \t\n\r,;|");
-+ 
-+                 while (ajStrTokenNextParse( &tokens, &key))
-+                 {
-+                     if (ajFeatTypeMatchWildS(gf, key))
-+                     {
-+                         val = ajTrue;
-+                         break;
-+                     }
-+                 }
-+ 
-+                 ajStrTokenDel( &tokens);
-+                 ajStrDel(&key);
-+                 if(!val)
-+                     continue;
-+             }
-+             
-+ 
-  	     /*
-  	     ** Starting a new line?
-  	     ** Don't start a new line if:
-***************
-*** 852,858 ****
-      titer = ajFeatTagIter(feat);
-      while(ajFeatTagval(titer, &tagnam, &tagval))
-      {
-!         tval = embMiscMatchPattern(tagnam, tpattern);
-  
-           /*
-  	 ** If tag has no value then
---- 876,882 ----
-      titer = ajFeatTagIter(feat);
-      while(ajFeatTagval(titer, &tagnam, &tagval))
-      {
-!         tval = embMiscMatchPatternDelimC(tagnam, tpattern,",;|");
-  
-           /*
-  	 ** If tag has no value then
-***************
-*** 878,884 ****
-  	     ** without spitting it up into words. 
-  	     */
-              vval = (ajStrMatchS(tagval, vpattern) ||
-! 		    embMiscMatchPattern(tagval, vpattern));
-  	}
-  
-          if(tval && vval)
---- 902,908 ----
-  	     ** without spitting it up into words. 
-  	     */
-              vval = (ajStrMatchS(tagval, vpattern) ||
-! 		    embMiscMatchPatternDelimC(tagval, vpattern,",;|"));
-  	}
-  
-          if(tval && vval)
-diff -c -N --recursive EMBOSS-6.1.0orig/emboss/showpep.c EMBOSS-6.1.0/emboss/showpep.c
-*** EMBOSS-6.1.0orig/emboss/showpep.c	Mon Sep 28 22:15:18 2009
---- EMBOSS-6.1.0/emboss/showpep.c	Wed Dec  2 12:28:38 2009
-***************
-*** 438,445 ****
-       **      for sense, 0
-       **      for score, maxscore <= minscore
-       */
-!     if(!embMiscMatchPattern(ajFeatGetSource(gf), source) ||
-!        !embMiscMatchPattern(ajFeatGetType(gf), type) ||
-         (testscore && ajFeatGetScore(gf) < minscore) ||
-         (testscore && ajFeatGetScore(gf) > maxscore) ||
-         !*tagsmatch)
---- 438,444 ----
-       **      for sense, 0
-       **      for score, maxscore <= minscore
-       */
-!     if(!embMiscMatchPatternDelimC(ajFeatGetSource(gf), source,",;|") ||
-         (testscore && ajFeatGetScore(gf) < minscore) ||
-         (testscore && ajFeatGetScore(gf) > maxscore) ||
-         !*tagsmatch)
-***************
-*** 495,501 ****
-      titer = ajFeatTagIter(gf);
-      while(ajFeatTagval(titer, &tagnam, &tagval))
-      {
-!         tval = embMiscMatchPattern(tagnam, tpattern);
-          /*
-          ** If tag has no value then
-          **   If vpattern is '*' the value pattern is a match
---- 494,500 ----
-      titer = ajFeatTagIter(gf);
-      while(ajFeatTagval(titer, &tagnam, &tagval))
-      {
-!         tval = embMiscMatchPatternDelimC(tagnam, tpattern,",;|");
-          /*
-          ** If tag has no value then
-          **   If vpattern is '*' the value pattern is a match
-***************
-*** 516,522 ****
-  	    ** of the whole of vpattern without spitting it up into words.
-              */
-              vval = (ajStrMatchS(tagval, vpattern) ||
-! 		    embMiscMatchPattern(tagval, vpattern));
-  
-  
-          if(tval && vval)
---- 515,521 ----
-  	    ** of the whole of vpattern without spitting it up into words.
-              */
-              vval = (ajStrMatchS(tagval, vpattern) ||
-! 		    embMiscMatchPatternDelimC(tagval, vpattern,",;|"));
-  
-  
-          if(tval && vval)
-diff -c -N --recursive EMBOSS-6.1.0orig/emboss/showseq.c EMBOSS-6.1.0/emboss/showseq.c
-*** EMBOSS-6.1.0orig/emboss/showseq.c	Mon Sep 28 22:15:18 2009
---- EMBOSS-6.1.0/emboss/showseq.c	Wed Dec  2 12:28:42 2009
-***************
-*** 722,729 ****
-       **      for sense, 0
-       **      for score, maxscore <= minscore
-       */
-!     if(!embMiscMatchPattern(ajFeatGetSource(gf), source) ||
-!        !embMiscMatchPattern(ajFeatGetType(gf), type) ||
-         (ajFeatGetStrand(gf) == '+' && sense == -1) ||
-         (ajFeatGetStrand(gf) == '-' && sense == +1) ||
-         (testscore && ajFeatGetScore(gf) < minscore) ||
---- 722,728 ----
-       **      for sense, 0
-       **      for score, maxscore <= minscore
-       */
-!     if(!embMiscMatchPatternDelimC(ajFeatGetSource(gf), source,",;|") ||
-         (ajFeatGetStrand(gf) == '+' && sense == -1) ||
-         (ajFeatGetStrand(gf) == '-' && sense == +1) ||
-         (testscore && ajFeatGetScore(gf) < minscore) ||
-***************
-*** 781,787 ****
-      titer = ajFeatTagIter(gf);
-      while(ajFeatTagval(titer, &tagnam, &tagval))
-      {
-!         tval = embMiscMatchPattern(tagnam, tpattern);
-          /*
-          ** If tag has no value then
-          **   If vpattern is '*' the value pattern is a match
---- 780,786 ----
-      titer = ajFeatTagIter(gf);
-      while(ajFeatTagval(titer, &tagnam, &tagval))
-      {
-!         tval = embMiscMatchPatternDelimC(tagnam, tpattern,",;|");
-          /*
-          ** If tag has no value then
-          **   If vpattern is '*' the value pattern is a match
-***************
-*** 802,808 ****
-  	    ** of the whole of vpattern without spitting it up into words.
-              */
-              vval = (ajStrMatchS(tagval, vpattern) ||
-! 		    embMiscMatchPattern(tagval, vpattern));
-  
-  
-          if(tval && vval)
---- 801,807 ----
-  	    ** of the whole of vpattern without spitting it up into words.
-              */
-              vval = (ajStrMatchS(tagval, vpattern) ||
-! 		    embMiscMatchPatternDelimC(tagval, vpattern,",;|"));
-  
-  
-          if(tval && vval)
-diff -c -N --recursive EMBOSS-6.1.0orig/emboss/twofeat.c EMBOSS-6.1.0/emboss/twofeat.c
-*** EMBOSS-6.1.0orig/emboss/twofeat.c	Mon Sep 28 22:15:18 2009
---- EMBOSS-6.1.0/emboss/twofeat.c	Wed Dec  2 12:28:48 2009
-***************
-*** 612,617 ****
---- 612,620 ----
-  				   const AjPStr tag, const AjPStr value,
-  				   AjBool *tagsmatch)
-  {
-+     AjPStrTok tokens = NULL;
-+     AjPStr key = NULL;
-+     AjBool val = ajFalse;
-      AjBool scoreok;
-  
-      scoreok = (minscore < maxscore);
-***************
-*** 634,641 ****
-       **      for score, maxscore <= minscore
-       */
-  
-!     if(!embMiscMatchPattern(ajFeatGetSource(gf), source) ||
-!        !embMiscMatchPattern(ajFeatGetType(gf), type) ||
-         (ajFeatGetStrand(gf) == '+' && sense == -1) ||
-         (ajFeatGetStrand(gf) == '-' && sense == +1) ||
-         (scoreok && ajFeatGetScore(gf) < minscore) ||
---- 637,643 ----
-       **      for score, maxscore <= minscore
-       */
-  
-!     if(!embMiscMatchPatternDelimC(ajFeatGetSource(gf), source,",;|") ||
-         (ajFeatGetStrand(gf) == '+' && sense == -1) ||
-         (ajFeatGetStrand(gf) == '-' && sense == +1) ||
-         (scoreok && ajFeatGetScore(gf) < minscore) ||
-***************
-*** 643,648 ****
---- 645,670 ----
-         !*tagsmatch)
-  	return ajFalse;
-  
-+     if(ajStrGetLen(type))
-+     {
-+         val = ajFalse;
-+         tokens = ajStrTokenNewC(type, " \t\n\r,;|");
-+ 
-+         while (ajStrTokenNextParse( &tokens, &key))
-+         {
-+             if (ajFeatTypeMatchWildS(gf, key))
-+             {
-+                 val = ajTrue;
-+                 break;
-+             }
-+         }
-+ 
-+         ajStrTokenDel( &tokens);
-+         ajStrDel(&key);
-+         if(!val)
-+             return ajFalse;
-+     }
-+ 
-      return ajTrue;                        
-  }
-  
-***************
-*** 686,692 ****
-      titer = ajFeatTagIter(feat);
-      while(ajFeatTagval(titer, &tagnam, &tagval))
-      {
-!         tval = embMiscMatchPattern(tagnam, tpattern);
-  	 /*
-  	 ** If tag has no value then
-  	 **   If vpattern is '*' the value pattern is a match
---- 708,714 ----
-      titer = ajFeatTagIter(feat);
-      while(ajFeatTagval(titer, &tagnam, &tagval))
-      {
-!         tval = embMiscMatchPatternDelimC(tagnam, tpattern,",;|");
-  	 /*
-  	 ** If tag has no value then
-  	 **   If vpattern is '*' the value pattern is a match
-***************
-*** 701,707 ****
-  		vval = ajFalse;
-          }
-  	else
-!             vval = embMiscMatchPattern(tagval, vpattern);
-  
-          if(tval && vval)
-  	{
---- 723,729 ----
-  		vval = ajFalse;
-          }
-  	else
-!             vval = embMiscMatchPatternDelimC(tagval, vpattern,",;|");
-  
-          if(tval && vval)
-  	{
-diff -c -N --recursive EMBOSS-6.1.0orig/jemboss/org/emboss/jemboss/gui/Browser.java EMBOSS-6.1.0/jemboss/org/emboss/jemboss/gui/Browser.java
-*** EMBOSS-6.1.0orig/jemboss/org/emboss/jemboss/gui/Browser.java	Mon Sep 28 22:15:15 2009
---- EMBOSS-6.1.0/jemboss/org/emboss/jemboss/gui/Browser.java	Mon Sep 28 22:14:46 2009
-***************
-*** 68,74 ****
---- 68,77 ----
-  import javax.swing.tree.DefaultMutableTreeNode;
-  import javax.swing.tree.TreeSelectionModel;
-  
-+ import org.emboss.jemboss.Jemboss;
-  import org.emboss.jemboss.JembossParams;
-+ import org.emboss.jemboss.server.JembossServer;
-+ import org.emboss.jemboss.soap.GetVersion;
-  
-  
-  /**
-***************
-*** 110,115 ****
---- 113,120 ----
-    private JMenuItem fwdMenu;
-    /** Forward button option */
-    private JButton fwdBt;
-+   /** version of EMBOSS programs */
-+   String embossVersion = "6.1";
-  
-    /**
-    *
-***************
-*** 178,185 ****
-        URL pageURL = new URL(initialURL);
-        setURL(pageURL,initialURL);
-      }
-    }
-! 
-  
-    /**
-    *
---- 183,193 ----
-        URL pageURL = new URL(initialURL);
-        setURL(pageURL,initialURL);
-      }
-+     if (Jemboss.withSoap){
-+     	embossVersion = GetVersion.getVersion(mysettings);
-+     }
-    }
-!   
-  
-    /**
-    *
-***************
-*** 712,719 ****
-              loc = "http://emboss.sourceforge.net/Jemboss/";
-            else if(selectedValue.equals("Home") && category.equals("EMBOSS"))
-              loc = "http://emboss.sourceforge.net/";
-!           else if(selectedValue.equals("Apps") && category.equals("EMBOSS"))
-!             loc = "http://emboss.sourceforge.net/apps/release/6.0/emboss/apps/";
-  
-            if(loc != null) 
-            {
---- 720,732 ----
-              loc = "http://emboss.sourceforge.net/Jemboss/";
-            else if(selectedValue.equals("Home") && category.equals("EMBOSS"))
-              loc = "http://emboss.sourceforge.net/";
-!           else if(selectedValue.equals("Apps") && category.equals("EMBOSS")){
-!         	if (!JembossParams.isJembossServer()){
-!         	  	embossVersion = new JembossServer().version();
-!         	  	embossVersion = embossVersion.split("\\.")[0]+"."+embossVersion.split("\\.")[1];
-!         	}
-!             loc = "http://emboss.sourceforge.net/apps/release/"+embossVersion+"/emboss/apps/";
-!           }
-  
-            if(loc != null) 
-            {
-diff -c -N --recursive EMBOSS-6.1.0orig/jemboss/org/emboss/jemboss/gui/BuildProgramMenu.java EMBOSS-6.1.0/jemboss/org/emboss/jemboss/gui/BuildProgramMenu.java
-*** EMBOSS-6.1.0orig/jemboss/org/emboss/jemboss/gui/BuildProgramMenu.java	Mon Sep 28 22:15:15 2009
---- EMBOSS-6.1.0/jemboss/org/emboss/jemboss/gui/BuildProgramMenu.java	Mon Sep 28 22:14:46 2009
-***************
-*** 141,146 ****
---- 141,162 ----
-            return woss;
-        }
-  
-+       private synchronized void  updateConnectionSettings(){      
-+ 		  splashing.doneSomething("Cannot connect!");
-+ 		  ServerSetup ss = new ServerSetup(mysettings);
-+ 		  splashThread.setInterval(100000);
-+ 		  int sso = JOptionPane.showConfirmDialog(f,ss,
-+ 				  "Check Settings",
-+ 				  JOptionPane.OK_CANCEL_OPTION,
-+ 				  JOptionPane.ERROR_MESSAGE,null);
-+ 		  if(sso == JOptionPane.OK_OPTION){
-+ 			  ss.setNewSettings();
-+ 			  splashThread.setInterval(80);
-+ 		  }
-+ 		  else
-+ 			  System.exit(0);
-+ 	  }
-+ 
-        private void constructWithSoap(){
-  
-            mainMenu.setEnableFileManagers(false);
-***************
-*** 157,249 ****
-              mysettings.updateJembossPropStrings(settings);
-            }
-  
-!           SwingWorker databaseworker = new SwingWorker()
-            {
-!             public Object construct()
-!             {
-!               ShowDB showdb = null;
-!               try
-!               {
-!                 showdb  = new ShowDB(mysettings);
-!               }
-!               catch (Exception ex)
-!               {
-!                 splashing.doneSomething("Cannot connect!");
-!                 ServerSetup ss = new ServerSetup(mysettings);
-!                 int sso = JOptionPane.showConfirmDialog(f,ss,
-!                            "Check Settings",
-!                            JOptionPane.OK_CANCEL_OPTION,
-!                            JOptionPane.ERROR_MESSAGE,null);
-!                 if(sso == JOptionPane.OK_OPTION)
-!                   ss.setNewSettings();
-!                 else
-!                   System.exit(0);
-  
-!                 try
-!                 {
-!                   showdb  = new ShowDB(mysettings);
-!                 }
-!                 catch (Exception exp)
-!                 {
-!                   exp.printStackTrace();
-!                 }
-!               }
-!               String showdbOut = showdb.getDBText();
-  
-!               Database d = new Database(showdbOut);
-!               db = d.getDB();
-!               mainMenu.setEnableFileManagers(true);
-!               mainMenu.setEnableShowResults(true);
-!               splashing.doneSomething("");
-!               splashThread.setInterval(0);
-! 
-!               matrices = showdb.getMatrices();  // get the available matrices
-!               codons   = showdb.getCodonUsage();
-! 
-!               /*JLabel jl = */new JLabel("<html>"); // not used but speeds first
-!                                                 // ACD form loading which
-!                                                 // uses html
-!               return null;
-!             }
-            };
-            databaseworker.start();
--           
-            splashing.doneSomething("");
-- 
--           try
--           {
--             try
--             {
--               Hashtable hwoss = (new JembossJarUtil("resources/wossname.jar")).getHash();
--               if(hwoss.containsKey("wossname.out"))
--                 woss = new String((byte[])hwoss.get("wossname.out"));
--             }
--             catch (Exception ex){}
-- 
--             if(woss.equals(""))
--             {
--               GetWossname ewoss = new GetWossname(mysettings);
--               woss = ewoss.getWossnameText(); 
--               mainMenu.setEnableFileManagers(true);
--               mainMenu.setEnableShowResults(true);
--             }
--             
--             splashing.doneSomething("");
--           } 
--           catch(Exception e)
--           {
--             splashing.doneSomething("Cannot connect!");
--             ServerSetup ss = new ServerSetup(mysettings);
--             int sso = JOptionPane.showConfirmDialog(f,ss,
--                            "Check Settings",
--                            JOptionPane.OK_CANCEL_OPTION,
--                            JOptionPane.ERROR_MESSAGE,null);
--             if(sso == JOptionPane.OK_OPTION)
--               ss.setNewSettings();
--             else
--               System.exit(0);
--           }        
-        }
-              
-        private void constructWithoutSoap(){
-  
---- 173,237 ----
-              mysettings.updateJembossPropStrings(settings);
-            }
-  
-!           try
-            {
-!         	  Hashtable hwoss = (new JembossJarUtil("resources/wossname.jar")).getHash();
-!         	  if(hwoss.containsKey("wossname.out"))
-!         		  woss = new String((byte[])hwoss.get("wossname.out"));
-!           }
-!           catch (Exception ex){}
-!           if(woss.equals(""))
-!           {
-!         	  boolean connectionmade = false;
-!         	  while (!connectionmade){
-!         		  try
-!         		  {
-!         			  GetWossname ewoss = new GetWossname(mysettings);
-!         			  woss = ewoss.getWossnameText(); 
-!         			  mainMenu.setEnableFileManagers(true);
-!         			  mainMenu.setEnableShowResults(true);
-!         		  }
-!         		  catch (JembossSoapException ex){
-!         			  updateConnectionSettings();
-!         			  continue;
-!         		  }
-!         		  connectionmade = true;
-!         	  }
-!           }
-  
-!           SwingWorker databaseworker = new SwingWorker()
-!           {
-  
-!         	  public Object construct() {
-!         		  boolean connectionmade = false;
-!         		  while (!connectionmade) {
-!         			  ShowDB showdb = null;
-!         			  try {
-!         				  showdb = new ShowDB(mysettings);
-!         				  String showdbOut = showdb.getDBText();
-! 
-!         				  Database d = new Database(showdbOut);
-!         				  db = d.getDB();
-!         				  mainMenu.setEnableFileManagers(true);
-!         				  mainMenu.setEnableShowResults(true);
-!         				  splashing.doneSomething("");
-!         				  splashThread.setInterval(0);
-! 
-!         				  matrices = showdb.getMatrices();
-!         				  codons = showdb.getCodonUsage();
-!         			  } catch (JembossSoapException ex) {
-!         				  updateConnectionSettings();
-!         				  continue;
-!         			  }
-!         			  connectionmade = true;
-!         		  }
-!         		  return null;
-!         	  }
-            };
-            databaseworker.start();
-            splashing.doneSomething("");
-        }
-+       
-              
-        private void constructWithoutSoap(){
-  
-***************
-*** 310,316 ****
-          progs = new ProgList(woss,menuBar);
-  
-          if(withSoap)
-!           splashing.doneSomething("");
-  
-          int npG = progs.getNumPrimaryGroups();
-          menuBar.setLayout(new GridLayout(npG,1));
---- 298,304 ----
-          progs = new ProgList(woss,menuBar);
-  
-          if(withSoap)
-!           splashing.doneEverything("");
-  
-          int npG = progs.getNumPrimaryGroups();
-          menuBar.setLayout(new GridLayout(npG,1));
-diff -c -N --recursive EMBOSS-6.1.0orig/jemboss/org/emboss/jemboss/gui/form/BuildJembossForm.java EMBOSS-6.1.0/jemboss/org/emboss/jemboss/gui/form/BuildJembossForm.java
-*** EMBOSS-6.1.0orig/jemboss/org/emboss/jemboss/gui/form/BuildJembossForm.java	Mon Sep 28 22:15:15 2009
---- EMBOSS-6.1.0/jemboss/org/emboss/jemboss/gui/form/BuildJembossForm.java	Mon Sep 28 22:14:46 2009
-***************
-*** 100,107 ****
-    private boolean withSoap;
-    private JFrame f;
-    private JPanel p2;
-!   private String embossBin;
-! 
-    private int numofFields;
-    private JembossParams mysettings;
-    
---- 100,106 ----
-    private boolean withSoap;
-    private JFrame f;
-    private JPanel p2;
-!   
-    private int numofFields;
-    private JembossParams mysettings;
-    
-***************
-*** 125,131 ****
-      this.mysettings = mysettings;
-      this.withSoap = withSoap;
-  
--     embossBin  = mysettings.getEmbossBin();
-      this.envp = envp;
-      this.applName = applName;
-  
---- 124,129 ----
-***************
-*** 172,181 ****
-          {
-            String urlEmbassyPrefix = parseAcd.getUrlPrefix();
-            url = mysettings.getembURL();
-            if(urlEmbassyPrefix != null)
-!             url = url + "apps/release/6.0/embassy/" +applName+ "/" ;
-            else
-!             url = url + "apps/release/6.0/emboss/apps/";
-  
-            url = url+applName+".html";
-          }
---- 170,181 ----
-          {
-            String urlEmbassyPrefix = parseAcd.getUrlPrefix();
-            url = mysettings.getembURL();
-+           String version = GetVersion.getVersion(mysettings);
-            if(urlEmbassyPrefix != null)
-!         	 // get the version from server
-!             url = url + "apps/release/"+version+"/embassy/"+urlEmbassyPrefix+"/" ;
-            else
-!             url = url + "apps/release/"+version+"/emboss/apps/";
-  
-            url = url+applName+".html";
-          }
-***************
-*** 893,900 ****
-        }
-        else if ( att.startsWith("float") )
-        {
-!         if( (textFloat[h].getText() != null) && textFloat[h].isVisible()
-!                                              && textFloat[h].isEnabled())
-          {
-            options = options.concat(" -" + val + " " + textFloat[h].getValue());
-            optionsA.add("-"+val);
---- 893,901 ----
-        }
-        else if ( att.startsWith("float") )
-        {
-!         if( textFloat[h].getText() != null &&
-!         		textFloat[h].getText().length()>0 &&
-!         		textFloat[h].isVisible() && textFloat[h].isEnabled())
-          {
-            options = options.concat(" -" + val + " " + textFloat[h].getValue());
-            optionsA.add("-"+val);
-diff -c -N --recursive EMBOSS-6.1.0orig/jemboss/org/emboss/jemboss/gui/sequenceChooser/InputSequenceAttributes.java EMBOSS-6.1.0/jemboss/org/emboss/jemboss/gui/sequenceChooser/InputSequenceAttributes.java
-*** EMBOSS-6.1.0orig/jemboss/org/emboss/jemboss/gui/sequenceChooser/InputSequenceAttributes.java	Mon Sep 28 22:15:15 2009
---- EMBOSS-6.1.0/jemboss/org/emboss/jemboss/gui/sequenceChooser/InputSequenceAttributes.java	Mon Sep 28 22:14:46 2009
-***************
-*** 281,287 ****
-  //  bx.add(Box.createHorizontalGlue());
-  
-  
-!     UFO = new JTextField();                     //sufo
-      UFO.setPreferredSize(new Dimension(100, 30));
-      UFO.setMaximumSize(new Dimension(100, 30));
-  
---- 281,287 ----
-  //  bx.add(Box.createHorizontalGlue());
-  
-  
-!     UFO = new JTextField();                     //ufo
-      UFO.setPreferredSize(new Dimension(100, 30));
-      UFO.setMaximumSize(new Dimension(100, 30));
-  
-***************
-*** 433,440 ****
-  
-    /**
-    *
-!   * Determine if there is a default -sufo value
-!   * @return     true if -sufo is set
-    *
-    */
-    public boolean isUFODefault()
---- 433,440 ----
-  
-    /**
-    *
-!   * Determine if there is a default -ufo value
-!   * @return     true if -ufo is set
-    *
-    */
-    public boolean isUFODefault()
-***************
-*** 508,514 ****
-  //                                     sID.getText());
-  
-      if(!isUFODefault())
-!       options = options.concat(" -sufo" + seq + " " +
-                                         UFO.getText());
-  
-      return options;
---- 508,514 ----
-  //                                     sID.getText());
-  
-      if(!isUFODefault())
-!       options = options.concat(" -ufo" + seq + " " +
-                                         UFO.getText());
-  
-      return options;
-***************
-*** 559,565 ****
-      }
-  
-      if(!isUFODefault()){
-!       optionsA.add("-sufo"+ seq);
-        optionsA.add(UFO.getText());
-      }
-  
---- 559,565 ----
-      }
-  
-      if(!isUFODefault()){
-!       optionsA.add("-ufo"+ seq);
-        optionsA.add(UFO.getText());
-      }
-  
-diff -c -N --recursive EMBOSS-6.1.0orig/jemboss/org/emboss/jemboss/server/AppendToLogFileThread.java EMBOSS-6.1.0/jemboss/org/emboss/jemboss/server/AppendToLogFileThread.java
-*** EMBOSS-6.1.0orig/jemboss/org/emboss/jemboss/server/AppendToLogFileThread.java	Mon Sep 28 22:15:16 2009
---- EMBOSS-6.1.0/jemboss/org/emboss/jemboss/server/AppendToLogFileThread.java	Mon Dec  7 16:28:03 2009
-***************
-*** 72,79 ****
-      try
-      {
-        File logFile = new File(logFileName);
--       if (!logFile.exists())
--           logFile.mkdirs();
-        bw = new BufferedWriter(new FileWriter(logFile, true));
-        bw.write(logEntry);
-        bw.newLine();
---- 72,77 ----
-diff -c -N --recursive EMBOSS-6.1.0orig/jemboss/org/emboss/jemboss/server/JembossAuthServer.java EMBOSS-6.1.0/jemboss/org/emboss/jemboss/server/JembossAuthServer.java
-*** EMBOSS-6.1.0orig/jemboss/org/emboss/jemboss/server/JembossAuthServer.java	Mon Sep 28 22:15:16 2009
---- EMBOSS-6.1.0/jemboss/org/emboss/jemboss/server/JembossAuthServer.java	Thu Dec 10 13:57:58 2009
-***************
-*** 46,52 ****
-    private final String fs = new String(System.getProperty("file.separator"));
-    /** path separator */
-    private final String ps = new String(System.getProperty("path.separator"));
-!   /** line seperator */
-    private final String ls = System.getProperty("line.separator");
-  
-  //get paths to EMBOSS
---- 46,52 ----
-    private final String fs = new String(System.getProperty("file.separator"));
-    /** path separator */
-    private final String ps = new String(System.getProperty("path.separator"));
-!   /** line separator */
-    private final String ls = System.getProperty("line.separator");
-  
-  //get paths to EMBOSS
-***************
-*** 80,85 ****
---- 80,102 ----
-  // FIX FOR SOME SUNOS
-  
-  
-+   
-+   public JembossAuthServer(){
-+       File logDir = new File(tmproot);
-+       if (!tmproot.endsWith(fs))
-+           tmproot += fs;
-+       if (!logDir.exists())
-+       {
-+           logDir.mkdirs();
-+           try {
-+             Runtime.getRuntime().exec("chmod 1777 " + tmproot);
-+         } catch (IOException e) {
-+             e.printStackTrace();
-+         } 
-+       }
-+   }
-+   
-+   
-    /**
-    *
-    * Retrieves the ACD file of an application.
-***************
-*** 376,386 ****
-      {
-  //    System.out.println("STATUS OK");
-        vans.add("length");
-!       vans.add(new Integer(aj.length));
-        vans.add("protein");
-!       vans.add(new Boolean(aj.protein));
-        vans.add("weight");
-!       vans.add(new Float(aj.weight));
-        vans.add("status");
-        vans.add("0");
-      }
---- 393,403 ----
-      {
-  //    System.out.println("STATUS OK");
-        vans.add("length");
-!       vans.add(new Integer(Ajax.length));
-        vans.add("protein");
-!       vans.add(new Boolean(Ajax.protein));
-        vans.add("weight");
-!       vans.add(new Float(Ajax.weight));
-        vans.add("status");
-        vans.add("0");
-      }
-***************
-*** 610,616 ****
-                             project+fs+thiskey,userName);
-      }
-  
-! //write decription file to project directory
-      ok = false;
-      try
-      {
---- 627,633 ----
-                             project+fs+thiskey,userName);
-      }
-  
-! //write description file to project directory
-      ok = false;
-      try
-      {
-***************
-*** 673,680 ****
-      {
-  
-  // COMMENT THIS LINE TO USE QUEUEING SOFTWARE
-!       boolean lforkB = aj.forkBatch(userName,passwd,environ,
-!                                     embossCommand,project);
-  
-  // UNCOMMENT ONE OF THESE LINE TO USE QUEUEING SOFTWARE
-  //    runAsBatch(aj,userName,passwd,project,quoteMe(embossCommand));
---- 690,696 ----
-      {
-  
-  // COMMENT THIS LINE TO USE QUEUEING SOFTWARE
-!       aj.forkBatch(userName, passwd, environ, embossCommand, project);
-  
-  // UNCOMMENT ONE OF THESE LINE TO USE QUEUEING SOFTWARE
-  //    runAsBatch(aj,userName,passwd,project,quoteMe(embossCommand));
-***************
-*** 1070,1076 ****
-      lsr.add("OK");
-  
-      aj.setErrStd();
-!     boolean lsd = aj.listDirs(userName,passwd,environ,tmproot);
-      
-      String outStd = aj.getOutStd();
-  
---- 1086,1092 ----
-      lsr.add("OK");
-  
-      aj.setErrStd();
-!     /*boolean lsd =*/ aj.listDirs(userName,passwd,environ,tmproot);
-      
-      String outStd = aj.getOutStd();
-  
-***************
-*** 1123,1139 ****
-      BufferedWriter bw = null;
-      try 
-      {
-!       File logFile = new File(logFileName);
-!       if (logFile.exists())
-!           logFile.mkdirs();
-!       bw = new BufferedWriter(new FileWriter(logFile, true));
-        bw.write(logEntry);
-        bw.newLine();
-        bw.flush();
-      } 
-      catch (Exception ioe) 
-      {
-!       System.out.println("Error writing to log file "+logFile);
-        ioe.printStackTrace();
-      } 
-      finally                     // always close the file
---- 1139,1152 ----
-      BufferedWriter bw = null;
-      try 
-      {
-!       bw = new BufferedWriter(new FileWriter(logFileName, true));
-        bw.write(logEntry);
-        bw.newLine();
-        bw.flush();
-      } 
-      catch (Exception ioe) 
-      {
-!       System.out.println("Error writing to log file "+logFileName);
-        ioe.printStackTrace();
-      } 
-      finally                     // always close the file
-***************
-*** 1315,1320 ****
---- 1328,1336 ----
-      }
-      catch(Exception exp) 
-      {
-+       appendToLogFile(userName+":: "+new Date().toString().replace(':','_')+
-+             " Failed Authorisation call "+userName+"\n"+
-+             "Error message: "+exp.getMessage(),errorLog);        
-        ok = false;
-      }
-  
-diff -c -N --recursive EMBOSS-6.1.0orig/jemboss/org/emboss/jemboss/soap/GetVersion.java EMBOSS-6.1.0/jemboss/org/emboss/jemboss/soap/GetVersion.java
-*** EMBOSS-6.1.0orig/jemboss/org/emboss/jemboss/soap/GetVersion.java	Thu Jan  1 01:00:00 1970
---- EMBOSS-6.1.0/jemboss/org/emboss/jemboss/soap/GetVersion.java	Mon Sep 28 22:14:46 2009
-***************
-*** 0 ****
---- 1,82 ----
-+ /********************************************************************
-+  *
-+  *  This library is free software; you can redistribute it and/or
-+  *  modify it under the terms of the GNU Library General Public
-+  *  License as published by the Free Software Foundation; either
-+  *  version 2 of the License, or (at your option) any later version.
-+  *
-+  *  This library is distributed in the hope that it will be useful,
-+  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+  *  Library General Public License for more details.
-+  *
-+  *  You should have received a copy of the GNU Library General Public
-+  *  License along with this library; if not, write to the
-+  *  Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-+  *  Boston, MA  02111-1307, USA.
-+  *
-+  *  @author: Copyright (C) Tim Carver
-+  *
-+  ********************************************************************/
-+ 
-+ package org.emboss.jemboss.soap;
-+ 
-+ import javax.xml.namespace.QName;
-+ 
-+ import org.apache.axis.client.Call;
-+ import org.emboss.jemboss.JembossParams;
-+ 
-+ /**
-+  * 
-+  * Get the version of EMBOSS programs used by the Jemboss server connected
-+  * 
-+  */
-+ /**
-+  * @author uludag
-+  *
-+  */
-+ public class GetVersion {
-+ 
-+ 	private static String version = null;
-+ 
-+ 	/**
-+ 	 * returns complete version string of EMBOSS connected Jemboss server is using
-+ 	 * @param mysettings
-+ 	 *            jemboss properties
-+ 	 * 
-+ 	 */
-+ 	public static String getVersionComplete(JembossParams mysettings) {
-+ 
-+ 		if (version != null)
-+ 			return version;
-+ 
-+ 		if (!JembossParams.isJembossServer())
-+ 			return null;
-+ 		try {
-+ 			String endpoint = mysettings.getPublicSoapURL();
-+ 			org.apache.axis.client.Service serv = new org.apache.axis.client.Service();
-+ 
-+ 			Call call = (Call) serv.createCall();
-+ 			call.setTargetEndpointAddress(new java.net.URL(endpoint));
-+ 			call.setOperationName(new QName(mysettings.getPublicSoapService(),
-+ 					"version"));
-+ 			call.setReturnType(org.apache.axis.Constants.SOAP_STRING);
-+ 			version = (String) call.invoke(new Object[] {});
-+ 		} catch (Exception jse) {
-+ 			jse.printStackTrace();
-+ 		}
-+ 		return version;
-+ 	}
-+ 	
-+ 	
-+ 	/**
-+ 	 * returns firt two digits of EMBOSS version connected server has
-+ 	 * @param mysettings
-+ 	 * @return version of EMBOSS programs such as 5.0, or 6.1
-+ 	 */
-+ 	public static String getVersion(JembossParams mysettings){
-+ 		getVersionComplete(mysettings);
-+ 		return version.split("\\.")[0]+"."+version.split("\\.")[1];        
-+ 	}
-+ 
-+ }
-diff -c -N --recursive EMBOSS-6.1.0orig/jemboss/org/emboss/jemboss/soap/ShowDB.java EMBOSS-6.1.0/jemboss/org/emboss/jemboss/soap/ShowDB.java
-*** EMBOSS-6.1.0orig/jemboss/org/emboss/jemboss/soap/ShowDB.java	Mon Sep 28 22:15:15 2009
---- EMBOSS-6.1.0/jemboss/org/emboss/jemboss/soap/ShowDB.java	Mon Sep 28 22:14:46 2009
-***************
-*** 50,64 ****
-    * @param mysettings 	jemboss properties
-    *
-    */
-!   public ShowDB(JembossParams mysettings)
-    {
-   
-      PublicRequest dbReq = null;   
-!     try
-!     {
-!       dbReq = new PublicRequest(mysettings, "show_db");
-!     }
-!     catch (JembossSoapException jse) {}
-  
-      statusmsg = dbReq.getVal("msg");
-      status = dbReq.getVal("status");
---- 50,61 ----
-    * @param mysettings 	jemboss properties
-    *
-    */
-!   public ShowDB(JembossParams mysettings) throws JembossSoapException
-    {
-   
-      PublicRequest dbReq = null;   
-! 
-!     dbReq = new PublicRequest(mysettings, "show_db");
-  
-      statusmsg = dbReq.getVal("msg");
-      status = dbReq.getVal("status");
-diff -c -N --recursive EMBOSS-6.1.0orig/jemboss/utils/install-jemboss-server.sh EMBOSS-6.1.0/jemboss/utils/install-jemboss-server.sh
-*** EMBOSS-6.1.0orig/jemboss/utils/install-jemboss-server.sh	Mon Sep 28 22:15:12 2009
---- EMBOSS-6.1.0/jemboss/utils/install-jemboss-server.sh	Thu Dec 10 11:56:58 2009
-***************
-*** 694,718 ****
-  echo "         EMBOSS and Jemboss Server installation script"
-  echo "--------------------------------------------------------------"
-  echo " "
-! echo "Note: any default values are given in square brackets []. "
-  echo " "
-! echo "There are two types of installation see details at: "
-  echo "http://emboss.sourceforge.net/Jemboss/install/setup.html"
-- echo " "
-- echo "(1) CLIENT-SERVER"
-- echo "(2) STANDALONE"
-- echo "Enter type of installation [1] :"
-- read INSTALL_TYPE
-- 
-- if (test "$INSTALL_TYPE" != "1") && (test "$INSTALL_TYPE" != "2"); then
--   INSTALL_TYPE="1"
-- fi
-- clear
-- 
-  echo
-- echo "--------------------------------------------------------------"
-- echo "         EMBOSS and Jemboss Server installation script"
-- echo "--------------------------------------------------------------"
-  echo
-  echo "*** This script needs to be run with permissions to be able"
-  echo "*** to install EMBOSS in the required directories. This may"
---- 694,709 ----
-  echo "         EMBOSS and Jemboss Server installation script"
-  echo "--------------------------------------------------------------"
-  echo " "
-! echo "Note: any default values are given in square brackets []."
-  echo " "
-! echo "This script installs EMBOSS as well as Jemboss."
-! echo "Jemboss is deployed as a Java web application in your tomcat server."
-! echo "A script is prepared to run Jemboss client that by default uses the"
-! echo "above Jemboss web application."
-! echo
-! echo "For detailed information on installing Jemboss see: "
-  echo "http://emboss.sourceforge.net/Jemboss/install/setup.html"
-  echo
-  echo
-  echo "*** This script needs to be run with permissions to be able"
-  echo "*** to install EMBOSS in the required directories. This may"
-***************
-*** 721,735 ****
-  echo "Before running this script you should download the latest:"
-  echo
-  echo "(1) EMBOSS release (contains Jemboss) ftp://emboss.open-bio.org/pub/EMBOSS/"
-! 
-! 
-! if [ $INSTALL_TYPE = "1" ]; then
-!   echo "(2) Tomcat release http://jakarta.apache.org/site/binindex.html"
-!   echo "(3) Apache AXIS (SOAP) release   http://xml.apache.org/axis/"
-! fi
-    
-  echo
-! echo "Has the above been downloaded (y/n)? "
-  read DOWNLOADED
-  
-  if (test "$DOWNLOADED" != "y") && (test "$DOWNLOADED" != "Y"); then
---- 712,722 ----
-  echo "Before running this script you should download the latest:"
-  echo
-  echo "(1) EMBOSS release (contains Jemboss) ftp://emboss.open-bio.org/pub/EMBOSS/"
-! echo "(2) Tomcat 5.5 series release http://tomcat.apache.org/"
-! echo "(3) Apache AXIS (SOAP) release 1.4   http://ws.apache.org/axis/"
-    
-  echo
-! echo "Have the above been downloaded (y/n)? "
-  read DOWNLOADED
-  
-  if (test "$DOWNLOADED" != "y") && (test "$DOWNLOADED" != "Y"); then
-***************
-*** 831,836 ****
---- 818,826 ----
-  fi
-  
-  SSL="y"
-+ 
-+ # keep the following variable for now so we have cvs compare for a while
-+ INSTALL_TYPE="1";
-  if [ $INSTALL_TYPE = "1" ]; then
-  #
-  # localhost name
-***************
-*** 1271,1287 ****
-  #cd $EMBOSS_INSTALL/share/EMBOSS/jemboss
-  JEMBOSS=$EMBOSS_INSTALL/share/EMBOSS/jemboss
-  
-- #---------------------------------------------------------------------------------
-- # Exit for standalone installations
-- #---------------------------------------------------------------------------------
-- if [ $INSTALL_TYPE = "2" ]; then
--   echo
--   echo "To run Jemboss:"
--   echo "cd $JEMBOSS"
--   echo "./runJemboss.sh"
--   echo
--   exit 0
-- fi
-  
-  
-  #
---- 1261,1266 ----
-***************
-*** 1413,1419 ****
-    cp $JEMBOSS/lib/mail.jar $TOMCAT_ROOT/webapps/axis/WEB-INF/lib
-    cp $JEMBOSS/lib/activation.jar $TOMCAT_ROOT/webapps/axis/WEB-INF/lib
-  
--   mv $JEMBOSS/org $TOMCAT_ROOT/webapps/axis/WEB-INF/classes/org
-    cp -R $JEMBOSS/resources $TOMCAT_ROOT/webapps/axis/WEB-INF/classes/
-    
-    cp -R $EMBOSS_DOWNLOAD/jemboss/lib/axis $JEMBOSS/lib
---- 1392,1397 ----
-***************
-*** 1429,1438 ****
-    jar -cvf ../lib/ajax.jar org
-    jar -xvf ../lib/client.jar
-    rm org/emboss/jemboss/parser/Ajax.class org/emboss/jemboss/parser/AjaxUtil.class
--   jar -cvf ../lib/jemboss.jar .
-    cd ..;
-    rm -rf tmp;
--   cp lib/jemboss.jar $TOMCAT_ROOT/webapps/axis/WEB-INF/lib/
-  
-    if [ -d "$TOMCAT_ROOT/shared/lib" ]; then
-    #tomcat 4.1.x and 5.5.x
---- 1407,1418 ----
-    jar -cvf ../lib/ajax.jar org
-    jar -xvf ../lib/client.jar
-    rm org/emboss/jemboss/parser/Ajax.class org/emboss/jemboss/parser/AjaxUtil.class
-    cd ..;
-+   javac org/emboss/jemboss/server/AppendToLogFileThread.java -d tmp
-+   javac org/emboss/jemboss/server/JembossAuthServer.java -d tmp
-+   javac org/emboss/jemboss/server/JembossFileAuthServer.java -d tmp
-+   cp -R tmp/org $TOMCAT_ROOT/webapps/axis/WEB-INF/classes/
-    rm -rf tmp;
-  
-    if [ -d "$TOMCAT_ROOT/shared/lib" ]; then
-    #tomcat 4.1.x and 5.5.x
-diff -c -N --recursive EMBOSS-6.1.0orig/nucleus/embaln.c EMBOSS-6.1.0/nucleus/embaln.c
-*** EMBOSS-6.1.0orig/nucleus/embaln.c	Mon Sep 28 22:15:07 2009
---- EMBOSS-6.1.0/nucleus/embaln.c	Mon Sep 28 22:14:38 2009
-***************
-*** 2091,2096 ****
---- 2091,2098 ----
-  	    ajStrAppendK(m,p[row--]);
-  	    ajStrAppendK(n,q[column--]);
-  
-+             if(row < 0 || column < 0)
-+                 break;
-  	    if(path[(row)*seqlen+(column)]<=0.)
-  		break;
-  
-diff -c -N --recursive EMBOSS-6.1.0orig/nucleus/embmisc.c EMBOSS-6.1.0/nucleus/embmisc.c
-*** EMBOSS-6.1.0orig/nucleus/embmisc.c	Mon Sep 28 22:15:07 2009
---- EMBOSS-6.1.0/nucleus/embmisc.c	Wed Dec  2 12:27:39 2009
-***************
-*** 20,49 ****
-  
-  
-  
-! /* @func embMiscMatchPattern **************************************************
-  **
-  ** Does a simple OR'd test of matches to (possibly wildcarded) words.
-  ** The words are tested one at a time until a match is found.
-! ** Whitespace and , ; | characters can separate the words in the pattern.
-  **
-  ** @param [r] str [const AjPStr] string to test
-  ** @param [r] pattern [const AjPStr] pattern to match with
-  **
-  ** @return [AjBool] ajTrue = found a match
-  ** @@
-  ******************************************************************************/
-  
-! AjBool embMiscMatchPattern (const AjPStr str, const AjPStr pattern)
-  {
-  
-!     /* pmr: allow '|' which can appear in NCBI style IDs */
-! 
-!     char whiteSpace[] = " \t\n\r,;";  /* skip whitespace and , ; */
-      AjPStrTok tokens;
-      AjPStr key = NULL;
-      AjBool val = ajFalse;
-  
-!     tokens = ajStrTokenNewC(pattern, whiteSpace);
-  
-      while (ajStrTokenNextParse( &tokens, &key))
-  	if (ajStrMatchWildCaseS(str, key))
---- 20,53 ----
-  
-  
-  
-! /* @func embMiscMatchPatternDelimC *********************************************
-  **
-  ** Does a simple OR'd test of matches to (possibly wildcarded) words.
-  ** The words are tested one at a time until a match is found.
-! ** Whitespace and additional delimiter characters can separate the
-! ** words in the pattern.
-  **
-  ** @param [r] str [const AjPStr] string to test
-  ** @param [r] pattern [const AjPStr] pattern to match with
-+ ** @param [r] delim [const char*] additional delimiters
-  **
-  ** @return [AjBool] ajTrue = found a match
-  ** @@
-  ******************************************************************************/
-  
-! AjBool embMiscMatchPatternDelimC (const AjPStr str, const AjPStr pattern,
-!                                  const char* delim)
-  {
-  
-!     char whiteSpace[] = " \t\n\r";  /* skip whitespace */
-      AjPStrTok tokens;
-+     AjPStr delimstr = NULL;
-      AjPStr key = NULL;
-      AjBool val = ajFalse;
-  
-!     delimstr = ajStrNewC(whiteSpace);
-!     ajStrAppendC(&delimstr, delim);
-!     tokens = ajStrTokenNewS(pattern, delimstr);
-  
-      while (ajStrTokenNextParse( &tokens, &key))
-  	if (ajStrMatchWildCaseS(str, key))
-***************
-*** 54,59 ****
---- 58,64 ----
-  
-      ajStrTokenDel( &tokens);
-      ajStrDel(&key);
-+     ajStrDel(&delimstr);
-  
-      return val;
-  
-diff -c -N --recursive EMBOSS-6.1.0orig/nucleus/embmisc.h EMBOSS-6.1.0/nucleus/embmisc.h
-*** EMBOSS-6.1.0orig/nucleus/embmisc.h	Mon Sep 28 22:15:07 2009
---- EMBOSS-6.1.0/nucleus/embmisc.h	Wed Dec  2 12:27:42 2009
-***************
-*** 13,19 ****
-  ** Prototype definitions
-  */
-  
-! AjBool embMiscMatchPattern (const AjPStr str, const AjPStr pattern);
-  
-  /*
-  ** End of prototype definitions
---- 13,20 ----
-  ** Prototype definitions
-  */
-  
-! AjBool embMiscMatchPatternDelimC (const AjPStr str, const AjPStr pattern,
-!                                   const char* delim);
-  
-  /*
-  ** End of prototype definitions
diff --git a/debian/patches/series b/debian/patches/series
index 0a4d87d..50db2ce 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,4 +1,2 @@
-official-upstream-patch.patch
-transient-vectorstrip.patch
 using-pager-in-tfm.patch
 tfm-html.patch
diff --git a/debian/patches/transient-vectorstrip.patch b/debian/patches/transient-vectorstrip.patch
deleted file mode 100644
index c4d8fd1..0000000
--- a/debian/patches/transient-vectorstrip.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-Description: Makes vectorsctrip retain quality scores.
- This patch or an equivalent solution has been applied Upstream.
- https://sourceforge.net/tracker/index.php?func=detail&aid=2886368&group_id=93650&atid=605034
-Origin: http://lists.open-bio.org/pipermail/emboss/2009-September/003735.html
---- emboss-6.1.0.orig/ajax/ajseq.c
-+++ emboss-6.1.0/ajax/ajseq.c
-@@ -782,6 +782,12 @@
-     if (seq->Fttable)
- 	pthis->Fttable = ajFeattableCopy(seq->Fttable);
- 
-+    if (seq->Accuracy)
-+    {
-+        AJCNEW0(pthis->Accuracy,seq->Seq->Len);
-+        memmove(pthis->Accuracy,seq->Accuracy,seq->Seq->Len*sizeof(float));
-+    }
-+
-     return pthis;
- }
- 

-- 
The European Molecular Biology Open Software Suite.



More information about the Debian-med-packaging mailing list