[med-svn] [Git][med-team/seaview][master] 6 commits: New upstream version 4.6.4

Andreas Tille gitlab at salsa.debian.org
Sat Feb 17 13:40:39 UTC 2018


Andreas Tille pushed to branch master at Debian Med / seaview


Commits:
54e22815 by Andreas Tille at 2018-02-17T14:27:54+01:00
New upstream version 4.6.4
- - - - -
b8b9757b by Andreas Tille at 2018-02-17T14:27:56+01:00
Update upstream source from tag 'upstream/4.6.4'

Update to upstream version '4.6.4'
with Debian dir 9a639ab9c063e24a6e4637a1032ca46cf518e7a2
- - - - -
12d843c4 by Andreas Tille at 2018-02-17T14:30:30+01:00
New upstream version

- - - - -
d5257652 by Andreas Tille at 2018-02-17T14:30:55+01:00
Standards-Version: 4.1.3

- - - - -
815244a9 by Andreas Tille at 2018-02-17T14:31:16+01:00
debhelper 11

- - - - -
731d7862 by Andreas Tille at 2018-02-17T14:39:02+01:00
Upload to unstable

- - - - -


21 changed files:

- FL/Fl_Native_File_Chooser.H
- csrc/misc_acnuc.c
- debian/changelog
- debian/compat
- debian/control
- − debian/patches/evaluate_phyml_bootstrap_number.patch
- − debian/patches/series
- macos_extras.mm
- pdf_or_ps.h
- seaview.cxx
- seaview.h
- seaview.html
- seaview.svg
- svg.cxx
- treedraw.cxx
- trees.cxx
- unrooted.cxx
- use_mase_files.cxx
- viewasprots.cxx
- win32_extras.cxx
- xfmatpt.cxx


Changes:

=====================================
FL/Fl_Native_File_Chooser.H
=====================================
--- a/FL/Fl_Native_File_Chooser.H
+++ b/FL/Fl_Native_File_Chooser.H
@@ -2,10 +2,6 @@
 #define FL_NATIVE_FILE_CHOOSER_H
 
 #include <FL/Enumerations.H>
-#if defined(USE_NEW_FLTK_FEATURES) && FL_PATCH_VERSION < 3
-#undef FL_PATCH_VERSION
-#define FL_PATCH_VERSION 3
-#endif
 #define SEAVIEW_FLTK_VERSION 100*FL_MAJOR_VERSION + 10*FL_MINOR_VERSION + FL_PATCH_VERSION
 #if SEAVIEW_FLTK_VERSION < 133 && !(defined(__APPLE__) || defined(WIN32))
 #define Fl_Native_File_Chooser mgFl_Native_File_Chooser


=====================================
csrc/misc_acnuc.c
=====================================
--- a/csrc/misc_acnuc.c
+++ b/csrc/misc_acnuc.c
@@ -27,6 +27,7 @@ void *mycalloc(int nbr, size_t taille);
 char complementer_base(char nucl);
 void complementer_seq(char *deb_ch, int l);
 char init_codon_to_aa(char *codon, int gc);
+char stop_codon_to_aa(char *codon, int gc);
 int notrail2(char *chaine, int len);
 int prepch(char *chaine, char **posmot);
 int compch(char *cible, int lcible, char **posmot, int nbrmots);
@@ -53,31 +54,36 @@ for(i=(int)strlen(pname);i<length;i++) pname[i]=' ';
 }
 
 
-#define TOTCODES 20  /* nbre total de codes definis, 0 inclus */
+#define TOTCODES 25  /* nbre total de codes definis, 0 inclus */
 int totcodes=TOTCODES;
 
 char aminoacids[]="RLSTPAGVKNQHEDYCFIMW*X";
 
 struct genetic_code_libel { /* definition d'un code genetique */
 	char libel[61]; /* nom du code decrivant ses variants % code standard */
+	char* target;
 	int code[65]; /* tableau codon->acide amine */
 	int ncbi_gc; /* numero NCBI du meme code */
-	int codon_init[64]; /* tableau codon initiateur -> acide amine */
+	int codon_init[64]; /* tableau codon initiateur ou stop -> acide amine */
 	};
 
 /* 
 les codons sont numerotes de 1 a 64 selon ordre alphabetique;
 le numero 65 est attribue a tout codon avec base hors AcCcGgTtUu
 les acides amines sont numerotes selon l'ordre de la variable aminoacids
-de un a 20 + * pour stop et X pour inconnu
+de un a 20 + * pour stop et X pour inconnu.
+ Table codon_init gives 19 (=M) for initiation codons and 21 (=*) for stop codons.
+ In some genetic codes, the same codon corresponds to an aa in table code
+ and to a stop in table codon_init.
 */
 
 /* initialisation de tous les codes genetiques */
 struct genetic_code_libel genetic_code[TOTCODES] = 
 {
 
-{ /* 0: universel */
-	{"Universal genetic code"},
+{ /* 0: standard */
+	{"Standard genetic code"},
+	"Standard",
 /*ANN*/	{9,10,9,10,4,4,4,4,1,3,1,3,18,18,19,18,
 /*CNN*/	11,12,11,12,5,5,5,5,1,1,1,1,2,2,2,2,
 /*GNN*/	13,14,13,14,6,6,6,6,7,7,7,7,8,8,8,8,
@@ -86,11 +92,12 @@ struct genetic_code_libel genetic_code[TOTCODES] =
 /*init*/{0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* AUG */
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* CUG */
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-	0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0} /* UUG */
+	21,0,21,0,0,0,0,0,21,0,0,0,0,0,19,0} /* UUG */
 }
 ,
 { /* 1: yeast mt */
 	{"CUN=T  AUA=M  UGA=W"},
+	"Yeast Mitochondrial",
 	{9,10,9,10,4,4,4,4,1,3,1,3,19,18,19,18,
 	11,12,11,12,5,5,5,5,1,1,1,1,4,4,4,4,
 	13,14,13,14,6,6,6,6,7,7,7,7,8,8,8,8,
@@ -99,23 +106,25 @@ struct genetic_code_libel genetic_code[TOTCODES] =
 	{0,0,0,0,0,0,0,0,0,0,0,0,19,0,19,0, /* AUA, AUG */
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
+	21,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0} 
 }
 ,
 { /* 2: :    MITOCHONDRIAL CODE OF VERTEBRATES */
 	{"AGR=*  AUA=M  UGA=W"},
+	"Vertebrate Mitochondrial",
      {9,10,9,10,4,4,4,4,21,3,21,3,19,18,19,18,11,12,11,12,
      5,5,5,5,1,1,1,1,2,2,2,2,13,14,13,14,6,6,6,6,7,7,7,7,8,8,8,8,21,15,
      21,15,3,3,3,3,20,16,20,16,2,17,2,17,22},
 	2,
-	{0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19, /* AUN */
+	{0,0,0,0,0,0,0,0,21,0,21,0,19,19,19,19, /* AUN */
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* GUG */
-	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
+	21,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0}
 }
 ,
 { /* 3:   MITOCHONDRIAL CODE OF FILAMENTOUS FUNGI */
 	{"UGA=W"},
+	"Mold Mitochondrial; Protozoan Mitochondrial; Coelenterate Mitochondrial; Mycoplasma; Spiroplasma",
      {9,10,9,10,4,4,4,4,1,3,1,3,18,18,19,18,11,12,11,12,5,5,5,
      5,1,1,1,1,2,2,2,2,13,14,13,14,6,6,6,6,7,7,7,7,8,8,8,8,21,15,21,
      15,3,3,3,3,20,16,20,16,2,17,2,17,22},
@@ -123,11 +132,12 @@ struct genetic_code_libel genetic_code[TOTCODES] =
 	{0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19, /* AUN */
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* CUG */
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* GUG */
-	0,0,0,0,0,0,0,0,0,0,0,0,19,0,19,0} /* UUR */
+	21,0,21,0,0,0,0,0,0,0,0,0,19,0,19,0} /* UUR */
 }
 ,
 { /* 4:    MITOCHONDRIAL CODE OF INSECT AND PLATYHELMINTHES  */
 	{"AUA=M  UGA=W  AGR=S"},
+	"Invertebrate Mitochondrial",
      {9,10,9,10,4,4,4,4,3,3,3,3,19,18,19,18,11,12,11,12,5,5,5,
      5,1,1,1,1,2,2,2,2,13,14,13,14,6,6,6,6,7,7,7,7,8,8,8,8,21,15,21,
      15,3,3,3,3,20,16,20,16,2,17,2,17,22},
@@ -135,11 +145,12 @@ struct genetic_code_libel genetic_code[TOTCODES] =
 	{0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19, /* AUN */
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* GUG */
-	0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0} /* UUG */
+	21,0,21,0,0,0,0,0,0,0,0,0,0,0,19,0} /* UUG */
 }
 ,
 { /* 5:    Nuclear code of Candida cylindracea (see nature 341:164) */
 	{"CUG=S"},
+	"Alternative Yeast Nuclear",
      	{9,10,9,10,4,4,4,4,1,3,1,3,18,18,19,18,
 	11,12,11,12,5,5,5,5,1,1,1,1,2,2,3,2,
 	13,14,13,14,6,6,6,6,7,7,7,7,8,8,8,8,
@@ -148,11 +159,12 @@ struct genetic_code_libel genetic_code[TOTCODES] =
 	{0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* AUG */
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* CUG */
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
+	21,0,21,0,0,0,0,0,21,0,0,0,0,0,0,0}
 }
 ,
 { /* 6:   NUCLEAR CODE OF CILIATA: UAR = Gln = Q */
 	{"UAR=Q"},
+	"Ciliate Nuclear; Dasycladacean Nuclear; Hexamita Nuclear",
      {9,10,9,10,4,4,4,4,1,3,1,3,18,18,19,18,11,12,11,12,5,5,5,
      5,1,1,1,1,2,2,2,2,13,14,13,14,6,6,6,6,7,7,7,7,8,8,8,8,11,15,11,
      15,3,3,3,3,21,16,20,16,2,17,2,17,22},
@@ -160,11 +172,12 @@ struct genetic_code_libel genetic_code[TOTCODES] =
 	{0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* AUG */
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
+	0,0,0,0,0,0,0,0,21,0,0,0,0,0,0,0}
 }
 ,
 { /* 7:   NUCLEAR CODE OF EUPLOTES */
 	{"UGA=C"},
+	"Euplotid Nuclear",
      {9,10,9,10,4,4,4,4,1,3,1,3,18,18,19,18,11,12,11,12,5,5,5,
      5,1,1,1,1,2,2,2,2,13,14,13,14,6,6,6,6,7,7,7,7,8,8,8,8,21,15,21,
      15,3,3,3,3,16,16,20,16,2,17,2,17,22},
@@ -172,11 +185,12 @@ struct genetic_code_libel genetic_code[TOTCODES] =
 	{0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* AUG */
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
+	21,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0}
 }
 ,
 { /* 8:   MITOCHONDRIAL CODE OF ECHINODERMS */
 	{"UGA=W  AGR=S  AAA=N"},
+	"Echinoderm Mitochondrial; Flatworm Mitochondrial",
      	{10,10,9,10,4,4,4,4,3,3,3,3,18,18,19,18,
 	11,12,11,12,5,5,5,5,1,1,1,1,2,2,2,2,
 	13,14,13,14,6,6,6,6,7,7,7,7,8,8,8,8,
@@ -184,25 +198,27 @@ struct genetic_code_libel genetic_code[TOTCODES] =
 	9,
 	{0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* AUG */
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* GUG */
+	21,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0}
 }
 ,
 { /* 9:   MITOCHONDRIAL CODE OF ASCIDIACEA */
 	{"UGA=W  AGR=G  AUA=M"},
+	"Ascidian Mitochondrial",
      	{9,10,9,10,4,4,4,4,7,3,7,3,19,18,19,18,
 	11,12,11,12,5,5,5,5,1,1,1,1,2,2,2,2,
 	13,14,13,14,6,6,6,6,7,7,7,7,8,8,8,8,
 	21,15,21,15,3,3,3,3,20,16,20,16,2,17,2,17,22},
 	13,
-	{0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* AUG */
-	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	{0,0,0,0,0,0,0,0,0,0,0,0,19,0,19,0, /* AUA,AUG */
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* GUG */
+	21,0,21,0,0,0,0,0,0,0,0,0,0,0,19,0} /* UUG */
 }
 ,
 { /* 10:   MITOCHONDRIAL CODE OF PLATYHELMINTHES */
 	{"UGA=W  AGR=S  UAA=Y AAA=N"},
+	"Alternative Flatworm Mitochondrial",
 	{10,10,9,10,4,4,4,4,3,3,3,3,18,18,19,18,
 	11,12,11,12,5,5,5,5,1,1,1,1,2,2,2,2,
 	13,14,13,14,6,6,6,6,7,7,7,7,8,8,8,8,
@@ -211,11 +227,12 @@ struct genetic_code_libel genetic_code[TOTCODES] =
 	{0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* AUG */
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
+	0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0}
 }
 ,
 { /* 11:   NUCLEAR CODE OF BLEPHARISMA */
 	{"UAG=Q"},
+	"Blepharisma Macronuclear",
 /*ANN*/	{9,10,9,10,4,4,4,4,1,3,1,3,18,18,19,18,
 /*CNN*/	11,12,11,12,5,5,5,5,1,1,1,1,2,2,2,2,
 /*GNN*/	13,14,13,14,6,6,6,6,7,7,7,7,8,8,8,8,
@@ -224,11 +241,12 @@ struct genetic_code_libel genetic_code[TOTCODES] =
 	{0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* AUG */
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
+	21,0,0,0,0,0,0,0,21,0,0,0,0,0,0,0}
 }
 ,
 { /* 12:   NUCLEAR CODE OF BACTERIA: differs only for initiation codons */
 	{"NUG=AUN=M when initiation codon"},
+	"Bacterial, Archaeal and Plant Plastid",
 /*ANN*/	{9,10,9,10,4,4,4,4,1,3,1,3,18,18,19,18,
 /*CNN*/	11,12,11,12,5,5,5,5,1,1,1,1,2,2,2,2,
 /*GNN*/	13,14,13,14,6,6,6,6,7,7,7,7,8,8,8,8,
@@ -237,11 +255,12 @@ struct genetic_code_libel genetic_code[TOTCODES] =
 	{0,0,0,0,0,0,0,0,0,0,0,0,19,19,19,19, /* AUN */
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* CUG */
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* GUG */
-	0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0} /* UUG */
+	21,0,21,0,0,0,0,0,21,0,0,0,0,0,19,0} /* UUG */
 }
 ,
 { /* 13: Chlorophycean Mitochondrial */
 	{"UAG=Leu"},
+	"Chlorophycean Mitochondrial",
 /*ANN*/	{9,10,9,10,4,4,4,4,1,3,1,3,18,18,19,18,
 /*CNN*/	11,12,11,12,5,5,5,5,1,1,1,1,2,2,2,2,
 /*GNN*/	13,14,13,14,6,6,6,6,7,7,7,7,8,8,8,8,
@@ -250,11 +269,12 @@ struct genetic_code_libel genetic_code[TOTCODES] =
 /*init*/{0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* AUG */
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
+	21,0,0,0,0,0,0,0,21,0,0,0,0,0,0,0}
 }
 ,
 { /* 14:    MITOCHONDRIAL CODE OF TREMATODE  */
 	{"AUA=M  UGA=W  AGR=S AAA=N"},
+	"Trematode Mitochondrial",
      {10,10,9,10,4,4,4,4,3,3,3,3,19,18,19,18,11,12,11,12,5,5,5,
      5,1,1,1,1,2,2,2,2,13,14,13,14,6,6,6,6,7,7,7,7,8,8,8,8,21,15,21,
      15,3,3,3,3,20,16,20,16,2,17,2,17,22},
@@ -262,11 +282,12 @@ struct genetic_code_libel genetic_code[TOTCODES] =
 	{0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* AUG */
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* GUG */
-	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} 
+	21,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0} 
 }
 ,
 { /* 15: TAG-Leu,TCA-stop */
 	{"UAG=L UCA=*"},
+	"Scenedesmus obliquus mitochondrial",
 /*ANN*/	{9,10,9,10,4,4,4,4,1,3,1,3,18,18,19,18,
 /*CNN*/	11,12,11,12,5,5,5,5,1,1,1,1,2,2,2,2,
 /*GNN*/	13,14,13,14,6,6,6,6,7,7,7,7,8,8,8,8,
@@ -275,11 +296,12 @@ struct genetic_code_libel genetic_code[TOTCODES] =
 /*init*/{0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* AUG */
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} 
+	21,0,0,0,21,0,0,0,21,0,0,0,0,0,0,0} 
 }
 ,
 { /* 16: Thraustochytrium-mt */
 	{"UUA=*"},
+	"Thraustochytrium mitochondrial",
 /*ANN*/	{9,10,9,10,4,4,4,4,1,3,1,3,18,18,19,18,
 /*CNN*/	11,12,11,12,5,5,5,5,1,1,1,1,2,2,2,2,
 /*GNN*/	13,14,13,14,6,6,6,6,7,7,7,7,8,8,8,8,
@@ -288,11 +310,12 @@ struct genetic_code_libel genetic_code[TOTCODES] =
 /*init*/{0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,19, /* AUG AUU */
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* GUG */
-	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} 
+	21,0,21,0,0,0,0,0,21,0,0,0,21,0,0,0} 
 }
   ,
   { /* 17:   MITOCHONDRIAL CODE OF Pterobranchia */
     {"UGA=W  AGA=S  AGG=K"},
+    "Pterobranchia Mitochondrial",
 /*ANN*/	{9,10,9,10,4,4,4,4,3,3,9,3,18,18,19,18,
 /*CNN*/	11,12,11,12,5,5,5,5,1,1,1,1,2,2,2,2,
 /*GNN*/	13,14,13,14,6,6,6,6,7,7,7,7,8,8,8,8,
@@ -300,25 +323,27 @@ struct genetic_code_libel genetic_code[TOTCODES] =
 /*ncbi*/24,
 /*init*/{0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* AUG */
          0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* CUG */
-         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-         0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0} /* UUG */
+         0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* GUG */
+         21,0,21,0,0,0,0,0,0,0,0,0,0,0,19,0} /* UUG */
   }
   ,
   { /* 18: Candidate Division SR1 and Gracilibacteria */
     {"UGA=G"},
+    "Candidate Division SR1 and Gracilibacteria",
     /*ANN*/	{9,10,9,10,4,4,4,4,1,3,1,3,18,18,19,18,
     /*CNN*/	11,12,11,12,5,5,5,5,1,1,1,1,2,2,2,2,
     /*GNN*/	13,14,13,14,6,6,6,6,7,7,7,7,8,8,8,8,
     /*TNN*/	21,15,21,15,3,3,3,3,7,16,20,16,2,17,2,17,22},
     /*ncbi*/25,
     /*init*/{0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* AUG */
-      0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* CUG */
-      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-      0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0} /* UUG */
+      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 
+      0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* GUG */
+      21,0,21,0,0,0,0,0,0,0,0,0,0,0,19,0} /* UUG */
   }
   ,
   { /* 19: Pachysolen tannophilus */
     {"CUG=A"},
+    "Pachysolen tannophilus Nuclear",
 /*ANN*/	{9,10,9,10,4,4,4,4,1,3,1,3,18,18,19,18,
 /*CNN*/	11,12,11,12,5,5,5,5,1,1,1,1,2,2,6,2,
 /*GNN*/	13,14,13,14,6,6,6,6,7,7,7,7,8,8,8,8,
@@ -327,9 +352,79 @@ struct genetic_code_libel genetic_code[TOTCODES] =
 /*init*/{0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* AUG */
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* CUG */
 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} /* UUG */
+	21,0,21,0,0,0,0,0,21,0,0,0,0,0,0,0}
   }
-  
+  ,
+    { /* 20: Karyorelict Nuclear */
+    {"UAR=Q, UGA=W, CUG=A"},
+    "Karyorelict Nuclear",
+/*ANN*/	{9,10,9,10,4,4,4,4,1,3,1,3,18,18,19,18,
+/*CNN*/	11,12,11,12,5,5,5,5,1,1,1,1,2,2,6,2,
+/*GNN*/	13,14,13,14,6,6,6,6,7,7,7,7,8,8,8,8,
+/*TNN*/	11,15,11,15,3,3,3,3,20,16,20,16,2,17,2,17,22},
+/*ncbi*/27,
+/*init*/{0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* AUG */
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,21,0,0,0,0,0,0,0}
+  }
+  ,
+    { /* 21: Condylostoma Nuclear */
+    {"UAR=Q, UGA=W, CUG=A"},
+    "Condylostoma Nuclear",
+/*ANN*/	{9,10,9,10,4,4,4,4,1,3,1,3,18,18,19,18,
+/*CNN*/	11,12,11,12,5,5,5,5,1,1,1,1,2,2,6,2,
+/*GNN*/	13,14,13,14,6,6,6,6,7,7,7,7,8,8,8,8,
+/*TNN*/	11,15,11,15,3,3,3,3,20,16,20,16,2,17,2,17,22},
+/*ncbi*/28,
+/*init*/{0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* AUG */
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	21,0,21,0,0,0,0,0,21,0,0,0,0,0,0,0}
+  }
+  ,
+    { /* 22: Mesodinium Nuclear */
+    {"UAR=Y, CUG=A"},
+    "Mesodinium Nuclear",
+/*ANN*/	{9,10,9,10,4,4,4,4,1,3,1,3,18,18,19,18,
+/*CNN*/	11,12,11,12,5,5,5,5,1,1,1,1,2,2,6,2,
+/*GNN*/	13,14,13,14,6,6,6,6,7,7,7,7,8,8,8,8,
+/*TNN*/	15,15,15,15,3,3,3,3,21,16,20,16,2,17,2,17,22},
+/*ncbi*/29,
+/*init*/{0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* AUG */
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,21,0,0,0,0,0,0,0}
+  }
+  ,
+    { /* 23: Peritrich Nuclear */
+    {"UAR=E, CUG=A"},
+    "Peritrich Nuclear",
+/*ANN*/	{9,10,9,10,4,4,4,4,1,3,1,3,18,18,19,18,
+/*CNN*/	11,12,11,12,5,5,5,5,1,1,1,1,2,2,6,2,
+/*GNN*/	13,14,13,14,6,6,6,6,7,7,7,7,8,8,8,8,
+/*TNN*/	13,15,13,15,3,3,3,3,21,16,20,16,2,17,2,17,22},
+/*ncbi*/30,
+/*init*/{0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* AUG */
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,21,0,0,0,0,0,0,0}
+  }
+  ,
+    { /* 24: Blastocrithidia Nuclear */
+    {"UAR=E, UGA=W"},
+    "Blastocrithidia Nuclear",
+/*ANN*/	{9,10,9,10,4,4,4,4,1,3,1,3,18,18,19,18,
+/*CNN*/	11,12,11,12,5,5,5,5,1,1,1,1,2,2,2,2,
+/*GNN*/	13,14,13,14,6,6,6,6,7,7,7,7,8,8,8,8,
+/*TNN*/	13,15,13,15,3,3,3,3,20,16,20,16,2,17,2,17,22},
+/*ncbi*/31,
+/*init*/{0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0, /* AUG */
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	21,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0}
+  }
+
 
 /*       1         2
 1234567890123456789012
@@ -352,6 +447,19 @@ else
 }
 
 
+char *get_code_target(int code)
+/* 
+get a description of target organisms of a variant genetic code
+return value	pointer to the description, not to be altered!
+*/
+{
+if(code >= 0 && code < totcodes)
+	return genetic_code[code].target ;
+else	
+	return "Unknown genetic code. Standard code is used.";
+}
+
+
 int calc_codon_number(char *codon)
 {
 static char nucleotides[] = "AaCcGgTtUu";
@@ -537,7 +645,6 @@ void complementer_seq(char *deb_ch, int l)
 }
 
 
-
 char init_codon_to_aa(char *codon, int gc)
 {
 int num, aa;
@@ -550,7 +657,27 @@ if(gc < 0 || gc >= totcodes) gc = 0;
 pdata = &genetic_code[gc];
 aa = pdata->codon_init[num];
 /* if not listed in expected init codons */
-if(aa == 0) aa = pdata->code[num];
+if(aa == 0 || aa == 21) aa = pdata->code[num];
+return aminoacids[aa - 1];
+}
+
+
+char stop_codon_to_aa(char *codon, int gc)
+{
+int num, aa;
+struct genetic_code_libel *pdata;
+
+num = calc_codon_number(codon);
+if(num >= 64) return 'X';
+/* use regular code if unknown number */
+if(gc < 0 || gc >= totcodes) gc = 0; 
+pdata = &genetic_code[gc];
+aa = pdata->code[num];
+if (aa != 21) {
+	aa = pdata->codon_init[num];
+	/* if not listed in expected stop codons */
+	if (aa != 21) aa = pdata->code[num];
+}
 return aminoacids[aa - 1];
 }
 


=====================================
debian/changelog
=====================================
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+seaview (1:4.6.4-1) unstable; urgency=medium
+
+  * New upstream version
+  * Standards-Version: 4.1.3
+  * debhelper 11
+
+ -- Andreas Tille <tille at debian.org>  Sat, 17 Feb 2018 14:31:40 +0100
+
 seaview (1:4.6.1.2-2) unstable; urgency=medium
 
   * Enable reading number of bootstraps from phyml runs


=====================================
debian/compat
=====================================
--- a/debian/compat
+++ b/debian/compat
@@ -1 +1 @@
-10
+11


=====================================
debian/control
=====================================
--- a/debian/control
+++ b/debian/control
@@ -4,14 +4,14 @@ Uploaders: Charles Plessy <plessy at debian.org>,
            Andreas Tille <tille at debian.org>
 Section: science
 Priority: optional
-Build-Depends: debhelper (>= 10),
+Build-Depends: debhelper (>= 11~),
                libfltk1.3-dev,
                libpng-dev,
                libxft-dev,
                libxext-dev,
                libxinerama-dev,
                zlib1g-dev
-Standards-Version: 3.9.8
+Standards-Version: 4.1.3
 Vcs-Browser: https://anonscm.debian.org/cgit/debian-med/seaview.git
 Vcs-Git: https://anonscm.debian.org/git/debian-med/seaview.git
 Homepage: http://doua.prabi.fr/software/seaview


=====================================
debian/patches/evaluate_phyml_bootstrap_number.patch deleted
=====================================
--- a/debian/patches/evaluate_phyml_bootstrap_number.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-Description: Enable reading number of bootstraps from phyml runs
-Author: Manolo Gouy <manolo.gouy at univ-lyon1.fr>
-        Patch extracted from Upstream version 4.6.1.3
-Last-Update: Wed, 01 Feb 2017 08:51:09 +0100
-
---- a/trees.cxx
-+++ b/trees.cxx
-@@ -1201,6 +1201,24 @@ void run_phyml_callback(Fl_Widget *ob, v
- 	  display_tree = put_names_back_in_tree(display_tree, truenames);
-     //process bootstrap trees
-     char *bootstrap_trees = NULL;
-+    if (replicates > 0) {
-+      sprintf(input, "%s.phy_phyml_boot_stats.txt", base_fname);
-+      in = fopen(input, "r");
-+      if (!in) {
-+        sprintf(input, "%s.phy_phyml_boot_stats", base_fname);
-+        in = fopen(input, "r");
-+      }
-+      if (in) { // compute the true # of bootstrap replicates because parallelized phyML can compute a few more
-+        char line[150];
-+        while ((p = fgets(line, sizeof(line), in))) {
-+          while (*p == ' ') p++;
-+          if (*p == '#') {
-+            sscanf(p+1, "%d", &replicates);
-+          }
-+        }
-+        fclose(in);
-+      }
-+    }
-     if (replicates > 0 && b_keep_trees->value()) {
-       sprintf(input, "%s.phy_phyml_boot_trees.txt", base_fname);
-       in = fopen(input, "r");


=====================================
debian/patches/series deleted
=====================================
--- a/debian/patches/series
+++ /dev/null
@@ -1 +0,0 @@
-evaluate_phyml_bootstrap_number.patch


=====================================
macos_extras.mm
=====================================
--- a/macos_extras.mm
+++ b/macos_extras.mm
@@ -5,9 +5,6 @@
 #include <FL/x.H>
 #include <FL/Fl_Sys_Menu_Bar.H>
 #include <FL/Fl_Help_View.H>
-#if 100*FL_MAJOR_VERSION + 10*FL_MINOR_VERSION + FL_PATCH_VERSION >= 140
-#include <src/drivers/Quartz/Fl_Quartz_Graphics_Driver.H>
-#endif
 #include <FL/filename.H>
 #include <FL/fl_draw.H>
 #include <sys/stat.h>
@@ -20,11 +17,13 @@ static void file_receive_cb(const char *fname);
 static void show_apropos(Fl_Widget *, void *unused);
 void MG_apple_inits(void);
 void set_seaview_modified(SEA_VIEW *view, int ismodified);
-void windowmenuitem_callback(Fl_Widget *o, void *data);
-int find_windowmenuitem(Fl_Window *w);
-int add_windowmenuitem(const char *name, Fl_Window *w);
-void rename_windowmenuitem(const char *name, int rank);
-void delete_windowmenuitem(int rank);
+#if 100*FL_MAJOR_VERSION + FL_MINOR_VERSION < 104
+  void windowmenuitem_callback(Fl_Widget *o, void *data);
+  int find_windowmenuitem(Fl_Window *w);
+  int add_windowmenuitem(const char *name, Fl_Window *w);
+  void rename_windowmenuitem(const char *name, int rank);
+  void delete_windowmenuitem(int rank);
+#endif
 char *mac_GetOutputFName_Plus(const char *dfault, const char *message, int, const char *directory);
 
 /* extern functions */
@@ -181,7 +180,7 @@ char *mac_GetOutputFName_Plus(const char *dfault, const char *message, int use_o
   [key makeKeyWindow];
   [preset release];
   [dir release];
-  if ( retval == NSOKButton ) {//read accessory view state
+  if ( retval == NSFileHandlingPanelOKButton ) {//read accessory view state
     printout_block = [blockview intValue];
     printout_fontsize = [fontview intValue];
     printout_black = [pdfmatrix selectedRow];
@@ -191,10 +190,11 @@ char *mac_GetOutputFName_Plus(const char *dfault, const char *message, int use_o
     strcpy(pathname, [[[_panel URL] path] UTF8String]);
     }
   [_panel setAccessoryView:nil];
-  if ( retval == NSCancelButton ) return NULL;
+  if ( retval == NSFileHandlingPanelCancelButton ) return NULL;
   return pathname;
 }
 
+#if 100*FL_MAJOR_VERSION + FL_MINOR_VERSION < 104
 
 void windowmenuitem_callback(Fl_Widget *o, void *data)
 {
@@ -239,6 +239,9 @@ void delete_windowmenuitem(int rank)
   fl_sys_menu_bar->remove(rank);
 }
 
+#endif
+
+
 static void file_receive_cb(const char *fname)
 {
   SEA_VIEW *view;
@@ -293,10 +296,56 @@ static void show_apropos(Fl_Widget *w, void *unused)
   about->show();
 }
 
+#if 100*FL_MAJOR_VERSION + FL_MINOR_VERSION >= 104
+
+static Fl_Window *merged;
+
+static bool merge_windows_for_class(Fl_Window *first)
+{
+  bool retval = false;
+  Fl_Window *win = first;
+  NSWindow *nsw = (NSWindow*)fl_xid(first), *nsw2;
+  while ((win = Fl::next_window(win)) != NULL) {
+    int diff = strcmp(win->xclass(), first->xclass());
+    if (win->parent() || diff) continue;
+    nsw2 = (NSWindow*)fl_xid(win);
+    [nsw2 addTabbedWindow:nsw ordered:NSWindowAbove];
+    retval = true;
+    if (!merged) merged = win;
+  }
+  return retval;
+}
+
+static void merge_windows_by_class_cb(Fl_Widget *, void *)
+{
+  merged = NULL;
+more:
+  Fl_Window *win = Fl::first_window();
+  NSWindow *nsw;
+  while (win) {
+    nsw = (NSWindow*)fl_xid(win);
+    if (!win->parent() && ![nsw tabbedWindows] && strcmp(win->xclass(), Fl_Window::default_xclass())) {
+      if (merge_windows_for_class(win)) goto more;
+    }
+    win = Fl::next_window(win);
+  }
+  if (merged) merged->show();
+}
+#endif // FLTK ≥ 1.4
+
 void MG_apple_inits(void)
 {
   fl_open_callback(file_receive_cb);
   fl_mac_set_about(show_apropos, NULL, 0);
+#if 100*FL_MAJOR_VERSION + FL_MINOR_VERSION >= 104
+  Fl_Sys_Menu_Bar::create_window_menu();
+  int merge = fl_sys_menu_bar->find_index("Window/Merge All Windows");
+  if (merge >= 0) {
+    fl_sys_menu_bar->replace(merge, "Merge Windows by Class");
+    Fl_Menu_Item *item = (Fl_Menu_Item*)fl_sys_menu_bar->menu() + merge;
+    item->callback(merge_windows_by_class_cb);
+  }
+#endif
   Fl::set_font(FL_COURIER,"Courier");
   Fl::set_font(FL_COURIER_BOLD, (fl_mac_os_version >= 100500 ? "Courier-Bold" : "Courier Bold") );
   if (fl_mac_os_version >= 100500) { // it seems that Courier Oblique is not present on older OS
@@ -463,9 +512,17 @@ Copy_Surface::Copy_Surface(bool pict, int w, int h) : Fl_Surface_Device(NULL)
     }
   else {
     prepare_copy_pdf_and_pict(w, h);
+#if 100*FL_MAJOR_VERSION + 10*FL_MINOR_VERSION + FL_PATCH_VERSION >= 140
+    driver(Fl_Graphics_Driver::newMainGraphicsDriver());
+#else
     driver(new Fl_Quartz_Graphics_Driver());
+#endif
     oldgc = fl_gc;
+#if 100*FL_MAJOR_VERSION + 10*FL_MINOR_VERSION + FL_PATCH_VERSION >= 140
+    driver()->gc(gc);
+#else
     fl_gc = gc;
+#endif
     }
 }
 
@@ -558,7 +615,7 @@ void Copy_Surface::init_PDF_context(int w, int h)
   CGRect bounds = CGRectMake(0, 0, w, h );	
   pdfdata = CFDataCreateMutable(NULL, 0);
   CGDataConsumerRef myconsumer;
-  if (CGDataConsumerCreateWithCFData != NULL) { // true from 10.4
+  if (CGDataConsumerCreateWithCFData) { // true from 10.4
     myconsumer = CGDataConsumerCreateWithCFData (pdfdata);
   }
   else {


=====================================
pdf_or_ps.h
=====================================
--- a/pdf_or_ps.h
+++ b/pdf_or_ps.h
@@ -6,6 +6,10 @@
 #include <FL/Fl_Graphics_Driver.H>
 #endif
 
+#if defined(WIN32)
+#include <windows.h>
+#endif
+
 #if !(defined(__APPLE__) || defined(WIN32)) && 100*FL_MAJOR_VERSION + 10*FL_MINOR_VERSION  + FL_PATCH_VERSION == 130
 // for X11 under 1.3.0 only
 #include <FL/Fl_Printer.H>
@@ -161,10 +165,8 @@ typedef Fl_PDF_File_Device Fl_PDF_or_PS_File_Device;
 #endif
 #endif
 
-#if (defined(__APPLE__) || defined(WIN32))
-
+#if defined(__APPLE__)
 class Copy_Surface : public Fl_Surface_Device {
-#ifdef __APPLE__
   bool use_pict;
   CFMutableDataRef pdfdata;
   CGContextRef oldgc;
@@ -178,18 +180,35 @@ class Copy_Surface : public Fl_Surface_Device {
   void prepare_copy_pdf_and_pict(int w, int h);
   void complete_copy_pdf_and_pict();
   void init_PDF_context(int w, int h);
-#else
-  HDC oldflgc;
-#endif
 public:
-#ifdef __APPLE__
   Copy_Surface(bool use_pict, int w, int h);
+  ~Copy_Surface();
+};
+#endif // __APPLE__
+
+#if defined(WIN32)
+
+#if 100*FL_MAJOR_VERSION + 10*FL_MINOR_VERSION + FL_PATCH_VERSION >= 134 // FLTK after 1.3.4
+
+#include <FL/Fl_Copy_Surface.H>
+class Copy_Surface : public Fl_Copy_Surface {
+public:
+  Copy_Surface(int w, int h) : Fl_Copy_Surface(w, h) {}
+  ~Copy_Surface() {}
+};
+
 #else
+
+class Copy_Surface : public Fl_Surface_Device {
+  HDC oldflgc;
+public:
   Copy_Surface(int w, int h);
-#endif
   ~Copy_Surface();
 };
-#endif
+
+#endif // FLTK after 1.4
+
+#endif // WIN32
 
 
 #endif // PDF_OR_PS_H


=====================================
seaview.cxx
=====================================
--- a/seaview.cxx
+++ b/seaview.cxx
@@ -1,5 +1,5 @@
 //
-// Copyright 1996-2015 by Manolo Gouy.
+// Copyright 1996-2018 by Manolo Gouy.
 //
 // This program, except where indicated, is free software; you can redistribute it and/or
 // modify it under the terms of the GNU General Public
@@ -182,10 +182,12 @@ extern "C" {
 #ifdef __APPLE__
 extern char *mac_GetOutputFName_Plus(const char *dfault, const char *message, int use_only_button,
 									 const char *dirname);
-extern int find_windowmenuitem(Fl_Window *w);
-extern int add_windowmenuitem(const char *name, Fl_Window *w);
-extern void rename_windowmenuitem(const char *name, int rank);
-extern void delete_windowmenuitem(int rank);
+#if 100*FL_MAJOR_VERSION + FL_MINOR_VERSION < 104
+  extern int find_windowmenuitem(Fl_Window *w);
+  extern int add_windowmenuitem(const char *name, Fl_Window *w);
+  extern void rename_windowmenuitem(const char *name, int rank);
+  extern void delete_windowmenuitem(int rank);
+#endif
 extern int set_res_value(const char *name, const char *value);
 extern void fl_mac_set_about( Fl_Callback *cb, void *user_data, int shortcut );
 extern void MG_apple_inits(void);
@@ -254,6 +256,8 @@ extern void plotonly(int argc, char *argv[]);
 extern void printout_cmdline(int argc, char **argv);
 extern bool isarg(int argc, char *argv[], const char *arg);
 extern char *argname(int argc, char *argv[], const char *arg);
+
+
 int main(int argc, char *argv[])
 {
 #if defined(WIN32)	
@@ -479,7 +483,18 @@ while(i < argc) {
 	}
   clipboardfname = strdup( create_tmp_filename() );
   atexit(to_do_at_exit);
+#ifdef __APPLE__
+  SEA_VIEW *view = NULL;
+  Fl::wait(0); // creates the windows related to files dropped at launch
+  if (Fl::first_window() == 0) {
+    // if there is no window already, create an empty one
+    view = create_the_form(!quick_and_dirty);
+  } else { // a window is created, do not process file in argument list
+    masename = 0;
+  }
+#else
 SEA_VIEW *view = create_the_form(!quick_and_dirty);
+#endif
 //Fl::add_timeout(0.5, fix_paste_timeout);
 if (masename != NULL) use_initial_file(view, masename, FALSE);
 Fl::lock();
@@ -487,12 +502,6 @@ Fl::run();
 return 0;
 }
 
-#ifdef __APPLE__
-static void del_widget_callback(void *data)
-{
-  ((Fl_Widget*)data)->do_callback();
-}
-#endif
 
 Fl_Window *use_initial_file(SEA_VIEW *view, char *masename, int doing_dnd)
 /* returns the window containing the loaded data (alignment or tree) or NULL
@@ -520,11 +529,7 @@ else if((int)defaultformat == -2) {// a Newick tree
 	fclose(in);
 	w = treedraw(tree, view, extract_filename(masename), FALSE);
 	if (view != NULL && view->tot_seqs == 0) { // closes an empty alignment window that opened the tree
-#ifdef __APPLE__ // necessary ≥ 10.10 when dropping treefile to program icon, or the empty window does not close well
-    Fl::add_timeout(0.0, del_widget_callback, view->dnawin);
-#else
     view->dnawin->do_callback();
-#endif
 	}
 }
 else
@@ -967,7 +972,7 @@ else	{ /* cas colored letters */
 fl_font(ob->labelfont(), ob->labelsize());
 fl_color(background);
 fl_rectf( x, y - view->line_height + fl_descent(), 
-	view->char_width, 
+	view->char_width +1,
 	view->line_height);
 fl_color(foreground); 
 fl_draw(lettre, 1, x, y);
@@ -1017,6 +1022,7 @@ static char trunc_name[20];
 
 x = view->x_name; y = view->y_name;
 fl_font(FL_COURIER, ob->labelsize() );
+fl_push_clip(ob->x(), ob->y(), view->x_seq - ob->x(), ob->h() - 4);
 debut = view->first_seq - 1; 
 fin = view->first_seq - 2 + view->tot_lines;
 if(fin >= view->tot_seqs) fin = view->tot_seqs - 1;
@@ -1078,14 +1084,30 @@ for(num = debut; num <= fin; num++) {
 	  if (view->sel_seqs[num]) couleur = FL_DARK2;
 	  fl_font(fl_font()|FL_BOLD, fl_size());
 	  }
-	fl_color(couleur); 
-	fl_draw(view->seqname[num], 
-		FL_min((unsigned)view->wid_names, strlen(view->seqname[num])), x, y );
+	fl_color(couleur);
+    int lbytes = strlen(view->seqname[num]); // length in bytes
+    int lc = fl_utf_nb_char((uchar*)view->seqname[num], lbytes); // length in UTF characters
+    int draw_bytes; // # of bytes of the name string to draw
+    if (lc == lbytes) draw_bytes = FL_min(view->wid_names, lbytes);
+    else if (lc <= view->wid_names) draw_bytes = lbytes;
+    else { // name contains non ASCII: count characters not bytes
+        lc = 0;
+        char *p = view->seqname[num], *last = view->seqname[num] + lbytes;
+        while (p < last && lc < view->wid_names) {
+            int len;
+            fl_utf8decode(p, last, &len);
+            lc++;
+            p += len;
+        }
+        draw_bytes = p - view->seqname[num];
+    }
+	fl_draw(view->seqname[num], draw_bytes, x, y );
 	if (num == view->cursor_seq - 1) {
 	  fl_font(fl_font()&~FL_BOLD, fl_size());
 	  }
 	y += view->line_height;
 	}
+    fl_pop_clip();
 }
 
 
@@ -1294,7 +1316,7 @@ for(nline=firstline; nline < lastline; /* ecriture des fonds de couleur */
 				if( (c = (int)view->col_rank[nline][pos]) != 0 ) {
 					fl_color(view->curr_colors[c]);
 					fl_rectf( xx, yy, 
-						view->char_width, 
+						view->char_width+1,
 						view->line_height);
 						}
 				xx += view->char_width;
@@ -1479,7 +1501,7 @@ if(masename != NULL) {
 	if(view->masename == NULL) out_of_memory();
 	strcpy(view->masename, masename);
 	view->dnawin->label(extract_filename(view->masename));
-#ifdef __APPLE__
+#if defined(__APPLE__) && 100*FL_MAJOR_VERSION + FL_MINOR_VERSION < 104
 	rename_windowmenuitem(view->dnawin->label(), find_windowmenuitem(view->dnawin));
 #endif
 	}
@@ -2080,7 +2102,7 @@ win_parent->remove(*win);
 delete win;
 Fl_Group::current(win_parent);
 if(view->double_buffer)	
-	win = (Fl_Window *)new Fl_Double_Window(x, y, w, h );
+	win = new Fl_Double_Window(x, y, w, h );
 else 	win = new Fl_Window(x,y,w,h);
 win->box(FL_DOWN_BOX);
 win->resizable(win);
@@ -2387,9 +2409,13 @@ if(reponse == COPY_SEQS) { /* copy selected sequences */
 		Fl::copy("", 0, 1);
 		}
 	}
-else if(reponse == PASTE_SEQS) { /* paste first from the selection buffer */
-  pasted_from_what_source = 0;
-  Fl::paste(*(view->DNA_obj), 0 );
+else if(reponse == PASTE_SEQS) {
+#ifdef WIN32
+  pasted_from_what_source = 1;
+#else
+  pasted_from_what_source = 0; /* paste first from the selection buffer */
+#endif
+  Fl::paste(*(view->DNA_obj), pasted_from_what_source);
 	}
 else if(reponse == SELECT_ALL) { /* select all sequences */
   if(view->multipl->argument() > 0) mod_multipl(view,0);
@@ -2998,7 +3024,7 @@ if(view->tot_seqs == 0 && view->tot_trees == 0) {
 	view->DNA_obj->parent()->redraw();
 	return NULL;
 	}
-if(file_format != NEXUS_FORMAT) protein = is_a_protein_seq(view->sequence[0]);
+if(file_format != NEXUS_FORMAT) protein = is_a_protein_alignment(view);
 if(view->menu_file != NULL) {
 	Fl_Menu_Item *items = (Fl_Menu_Item *)view->menu_file;
 	if(file_format == view->format_for_save) {
@@ -3053,10 +3079,12 @@ void mainwin_close_callback(Fl_Widget *form, void *data)
 			"Do you want to close it anyway?", "Cancel", "Close", NULL, extract_filename(view->masename)) == 0) return;
 		}
 	free_alignment(view);
-#ifdef __APPLE__
+#if defined(__APPLE__)
 	char value[50];
 	sprintf(value, "%dx%d", view->dnawin->w(),  view->dnawin->h() );
-	delete_windowmenuitem(find_windowmenuitem(view->dnawin));
+# if 100*FL_MAJOR_VERSION + FL_MINOR_VERSION < 104
+    delete_windowmenuitem(find_windowmenuitem(view->dnawin));
+# endif
 #endif
 	//disconnect all tree windows pointing to the deleted seaview window
 	disconnect_tree_windows(view);
@@ -3219,7 +3247,7 @@ else if(reponse == SAVE || reponse == SAVE_AS) 	{
 			if(view->masename == NULL) out_of_memory();
 			strcpy(view->masename,filename);
 			view->dnawin->label(extract_filename(filename));
-#ifdef __APPLE__
+#if defined(__APPLE__) && 100*FL_MAJOR_VERSION + FL_MINOR_VERSION < 104
 			rename_windowmenuitem(view->dnawin->label(), find_windowmenuitem(view->dnawin));
 #endif
 		  Fl_Menu_Item *items = (Fl_Menu_Item *)view->menu_file;
@@ -3975,6 +4003,14 @@ void DNA_obj::draw(void)
 SEA_VIEW *view = (SEA_VIEW *)this->user_data();
 if(view == NULL) return; //this is necessary after deletion of an alignment window
 
+#if (100*FL_MAJOR_VERSION + FL_MINOR_VERSION >= 104) && !defined(__APPLE__)
+  if (view->scale != fl_graphics_driver->scale()) {
+    view->scale = fl_graphics_driver->scale();
+    fl_font(view->DNA_obj->labelfont(), view->DNA_obj->labelsize());
+    view->char_width = fl_width('W');
+  }
+#endif
+  
 /* returns TRUE if window size was changed by user */
 if( compute_size_params( view, FALSE) ) {
 	view->horsli->redraw();
@@ -4170,7 +4206,7 @@ int DNA_obj::handle(int event)
       }
       break;
     case FL_KEYBOARD:
-      if( Fl::event_state(FL_COMMAND) ) { /* vrai si touche ctrl */
+      if( Fl::event_state(FL_CTRL) || Fl::event_state(FL_META)) {
         return 0; /* ne pas traiter ici car shortcut d'autres widgets */
       }
       key = Fl::event_key();
@@ -4214,10 +4250,15 @@ void handle_paste(SEA_VIEW *view, char *clipboard, int doing_dnd)
     fclose(out);
     count = read_fasta_align(fname, &seqs, &seqnames, &comments, &header, &err_message, false);
     delete_tmp_filename(fname);
-    if (count) {
+    if (count) { // caution here: fl_choice may change Fl::e_text which may be reused after return
+      char *save = Fl::e_text;
+      int savel = Fl::e_length;
+      Fl::e_text = NULL;
       i = fl_choice("You are about to add to this alignment %d sequence%s (%s) \n"
 		    "present in the clipboard.", "Cancel", "Confirm", 
 		    NULL, count, (count > 1 ? "s" : ""), seqnames[0]);
+      Fl::e_text = save;
+      Fl::e_length = savel;
       if (!i) return;
     }
   }
@@ -4235,7 +4276,7 @@ void handle_paste(SEA_VIEW *view, char *clipboard, int doing_dnd)
 	  if(num != 0) view->comments[view->tot_seqs - 1] = comments[i];
 	  }
   if (changedwname) {
-#ifdef __APPLE__
+#if defined(__APPLE__) && 100*FL_MAJOR_VERSION + FL_MINOR_VERSION < 104
     rename_windowmenuitem(view->dnawin->label(), find_windowmenuitem(view->dnawin));
 #endif
     ((Fl_Menu_Item*)view->menu_file)[SAVE].deactivate();
@@ -5053,6 +5094,7 @@ menus->spacing(2);
 /* menu Props */
   view->inverted_colors = inverted;
   view->consensus_threshold = 60;
+  view->double_buffer = double_buffer;
   create_props_menu(view, curr_color_choice, view->inverted_colors, black_and_white, defaultfontsize);
 
 /* menu regions */
@@ -5205,13 +5247,14 @@ view->phylipwidnames = int_res_value("phylipwidnames", 30);
 #if !(defined(__APPLE__) || defined(WIN32)) && SEAVIEW_FLTK_VERSION < 133
   my_form->icon( (void*)seaview_X11_icon );
 #endif
+#if defined(__APPLE__) && 100*FL_MAJOR_VERSION + FL_MINOR_VERSION < 104
+  add_windowmenuitem(NULL, my_form);
+#endif
 my_form->show();
 #ifndef MICRO
 my_form->hotspot(my_form);
 #endif
-#ifdef __APPLE__
-	add_windowmenuitem(NULL, my_form);
-#elif ! defined(WIN32) //for X11 only
+#if !(defined(__APPLE__) && !defined(WIN32)) //for X11 only
   my_form->make_current(); // 3 lines so the Fl_Pack gets its true width
   menus->damage(FL_DAMAGE_ALL);
   ((Fl_Widget*)menus)->draw();


=====================================
seaview.h
=====================================
--- a/seaview.h
+++ b/seaview.h
@@ -204,6 +204,9 @@ typedef struct _SEA_VIEW {
 		  0: normal; 
 		  >= 1: 1 seul seq ecrite */
   int mod_cursor; /* FALSE: cursor ancien ignore; TRUE: ancien efface */
+#if (100*FL_MAJOR_VERSION + FL_MINOR_VERSION >= 104) && !defined(__APPLE__)
+  float scale; /* scaling factor used to compute char_width */
+#endif
   float char_width; /* largeur en pixels des caracteres */
   int line_height; /* hauteur en pixels des lignes */
   int cursor_seq, cursor_site; /* position courante du curseur */
@@ -319,6 +322,7 @@ extern char *save_alignment_or_region(const char *fname, char **seq,
 extern Fl_Window *load_alignment_file(SEA_VIEW *view, char *filename, 
 	const char *message, known_format file_format, int doing_dnd);
 extern int is_a_protein_seq(char *seq);
+extern int is_a_protein_alignment(SEA_VIEW *view);
 extern char *get_full_path(const char *fname);
 extern void draw_region_background(SEA_VIEW *view, int f_seq0, int l_seq0);
 extern void load_seq_dialog(SEA_VIEW *view);


=====================================
seaview.html
=====================================
--- a/seaview.html
+++ b/seaview.html
@@ -44,11 +44,11 @@ Molecular Biology and Evolution 27(2):221-224.
 SEAVIEW and PHYLO_WIN: two graphic tools for sequence alignment and molecular phylogeny.</a> 
 Comput. Appl. Biosci., 12:543-548.
 <p>
-Version 4.6.1
+Version 4.6.4
 
 <p>Binaries and full source code available from <a href=http://doua.prabi.fr/software/seaview>http://doua.prabi.fr/software/seaview</a>
 
-<p>© 1996-2016 Manolo Gouy
+<p>© 1996-2018 Manolo Gouy
 <br>Laboratoire de Biométrie et Biologie Evolutive
 <br>CNRS / Université de Lyon
 <p>Licensed under the GNU <a href=http://www.gnu.org/licenses/gpl.txt>General Public Licence</a>.
@@ -270,7 +270,7 @@ of menu <a href="#Props Menu">Props</a> for more details.
 <br><u>Set genetic code:</u>         Allows to specify the genetic code used to translate
                          to protein the selected sequence(s). Active only with
                          nucleotide alignments. Genetic codes are saved if the
-                         mase or NEXUS file formats are used.
+                         mase, NEXUS, or FASTA file formats are used.
 
 <hr>
 <a name="Align Menu"></a>
@@ -815,7 +815,10 @@ and <i>options</i> are as in the following table:
 or <tt>nexus</tt>). The format of the input file is the default.</td></tr>
 <tr><td><tt>-o</tt> <i>fname</i></td><td>      use <i>fname</i> as name of the converted alignment (default is built from input filename)</td></tr>
 <tr><td><tt>-o</tt> -</td><td>          write the output alignment to standard output</td></tr>
-<tr><td><tt>-translate</tt></td><td>    translate input sequences to protein before outputting them (don't use the <tt>-sites</tt> option)</td></tr>
+<tr><td><tt>-translate</tt></td><td>    translate input sequences to protein before outputting them (don't use the <tt>-sites</tt> option)
+  <br>Add <tt>/transl_table=</tt># (where # is a genetic code number) to sequence comments to use variant genetic codes.
+  If the input file is in FASTA format, put this after each sequence name.
+</td></tr>
 <tr><td><tt>-no_terminal_stop</tt></td><td> translate terminal stop codons as a gap (with <tt>-translate</tt> option)</td></tr>
 <tr><td><tt>-del_gap_only_sites</tt></td><td> remove all gap-only sites from alignment (don't use the <tt>-sites</tt> option)</td></tr>
 <tr><td><tt>-def_species_group</tt> <i>group_name,group_members</i></td><td>   create a species group of given name and members
@@ -852,7 +855,7 @@ Without this option, sequences with the same name in alignment files are concate
 <tr><td><tt>-align_algo</tt> <i>n</i></td><td>      rank (in seaview, from 0) of alignment algorithm. 0 is clustalo, 1 is muscle.
 Other algorithms can be used after having been added as external alignment method in seaview.
 Without this option, seaview's default alignment algorithm is used. This can be changed using seaview's GUI.</td></tr>
-<tr><td><tt>-align_extra_opts</tt> <i>"option1 ..."</i></td><td>additional options to use when running the alignment algorithm</td></tr>
+<tr><td><tt>-align_extra_args</tt> <i>"option1 ..."</i></td><td>additional options to use when running the alignment algorithm</td></tr>
 <tr><td><tt>-align_at_protein_level</tt></td><td> input sequences are translated to protein; those protein sequences are aligned;
 and the resulting alignment is reproduced at the DNA level.</td></tr>
 <tr><td><tt>-o</tt> <i>fname</i></td><td>      use <i>fname</i> as name of the output alignment</td></tr>


=====================================
seaview.svg
=====================================
--- a/seaview.svg
+++ b/seaview.svg
@@ -1,132 +1,4 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   id="svg2"
-   sodipodi:version="0.32"
-   inkscape:version="0.46"
-   width="32"
-   height="32"
-   version="1.0"
-   sodipodi:docname="seaview.svg"
-   inkscape:output_extension="org.inkscape.output.svg.inkscape">
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <defs
-     id="defs5">
-    <inkscape:perspective
-       sodipodi:type="inkscape:persp3d"
-       inkscape:vp_x="0 : 526.18109 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_z="744.09448 : 526.18109 : 1"
-       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
-       id="perspective9" />
-  </defs>
-  <sodipodi:namedview
-     inkscape:window-height="790"
-     inkscape:window-width="1396"
-     inkscape:pageshadow="2"
-     inkscape:pageopacity="0.0"
-     guidetolerance="10.0"
-     gridtolerance="10.0"
-     objecttolerance="10.0"
-     borderopacity="1.0"
-     bordercolor="#666666"
-     pagecolor="#ffffff"
-     id="base"
-     showgrid="false"
-     inkscape:snap-global="true"
-     inkscape:zoom="11.313709"
-     inkscape:cx="19.052994"
-     inkscape:cy="11.588534"
-     inkscape:window-x="0"
-     inkscape:window-y="25"
-     inkscape:current-layer="svg2" />
-  <rect
-     style="fill:#cc4dcc;fill-opacity:1;stroke:none;stroke-opacity:1"
-     id="rect3172"
-     width="15.753295"
-     height="15.753295"
-     x="16.052052"
-     y="0.48956311" />
-  <rect
-     style="fill:#19cc19;fill-opacity:1;stroke:none;stroke-opacity:1"
-     id="rect3174"
-     width="15.753295"
-     height="15.753295"
-     x="0.29875571"
-     y="0.48956311" />
-  <rect
-     style="fill:#1980e6;fill-opacity:1;stroke:none;stroke-opacity:1"
-     id="rect3176"
-     width="15.753295"
-     height="15.753295"
-     x="0.29875571"
-     y="16.242928" />
-  <rect
-     style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-opacity:1"
-     id="rect3178"
-     width="15.753295"
-     height="15.753295"
-     x="16.052052"
-     y="16.242928" />
-  <text
-     xml:space="preserve"
-     style="font-size:14.82434082px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-     x="2.8712039"
-     y="14.298828"
-     id="text3168"><tspan
-       sodipodi:role="line"
-       id="tspan3170"
-       x="2.8712039"
-       y="14.298828"
-       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono">S</tspan></text>
-  <text
-     xml:space="preserve"
-     style="font-size:14.82434082px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-     x="18.286121"
-     y="14.294434"
-     id="text3192"><tspan
-       sodipodi:role="line"
-       id="tspan3194"
-       x="18.286121"
-       y="14.294434"
-       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono">E</tspan></text>
-  <text
-     xml:space="preserve"
-     style="font-size:14.82434082px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-     x="2.7789187"
-     y="30.047798"
-     id="text3196"><tspan
-       sodipodi:role="line"
-       id="tspan3198"
-       x="2.7789187"
-       y="30.047798"
-       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono">A</tspan></text>
-  <text
-     xml:space="preserve"
-     style="font-size:14.82434082px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-     x="18.532215"
-     y="28.900826"
-     id="text3200"><tspan
-       sodipodi:role="line"
-       id="tspan3202"
-       x="18.532215"
-       y="28.900826"
-       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono">-</tspan></text>
-</svg>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!--Generated by Intaglio, www.PurgatoryDesign.com-->
+<svg version="1.1" viewBox="0,0,32,32" width="32" height="32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path fill="#cc4dcc" d="M16.0521,0.489563 L31.8053,0.489563 L31.8053,16.2429 L16.0521,16.2429 L16.0521,0.489563 Z"/><path fill="#19cc19" d="M0.298756,0.489563 L16.0521,0.489563 L16.0521,16.2429 L0.298756,16.2429 L0.298756,0.489563 Z"/><path fill="#1980e6" d="M0.298756,16.2429 L16.0521,16.2429 L16.0521,31.9962 L0.298756,31.9962 L0.298756,16.2429 Z"/><path fill="#fff" d="M16.0521,16.2429 L31.8053,16.2429 L31.8053,31.9962 L16.0521,31.9962 L16.0521,16.2429 Z"/><path d="M5.70128,13.9912 Q5.65734,14.3867,5.49913,14.5405 Q5.34093,14.6943,4.99816,14.6943 Q4.62902,14.6943,4.44884,14.479 Q4.26866,14.2637,4.2423,13.7803 L4.12804,11.7412 L4.12804,11.583 Q4.12804,11.1611,4.29064,10.9854 Q4.45324,10.8096,4.83116,10.8096 Q5.35851,10.8096,5.58702,11.5654 Q5.69249,11.9434,5.78917,12.1367 Q6.09679,12.752,6.76036,13.0859 Q7.42394,13.4199,8.34679,13.4199 Q9.48058,13.4199,10.1881,12.8838 Q10.8956,12.3477,10.8956,11.5127 Q10.8956,10.8184,10.4606,10.3965 Q10.0255,9.97461,9.19054,9.85156 L7.88976,9.67578 Q6.07042,9.4209,5.23546,8.71777 Q4.4005,8.01465,4.4005,6.74023 Q4.4005,5.39551,5.51232,4.48145 Q6.62413,3.56738,8.28527,3.56738 Q8.76866,3.56738,9.3048,3.69482 Q9.84093,3.82227,10.5177,4.09473 Q10.5353,3.83984,10.6583,3.74316 Q10.7814,3.64648,11.0802,3.64648 Q11.4669,3.64648,11.6163,3.76074 Q11.7657,3.875,11.8009,4.30566 L11.9239,6.14258 L11.9239,6.23047 Q11.9239,6.53809,11.7482,6.70947 Q11.5724,6.88086,11.256,6.88086 Q10.7901,6.88086,10.5353,6.23047 Q10.4122,5.86133,10.2892,5.67676 Q9.99913,5.2373,9.45421,5 Q8.90929,4.7627,8.21495,4.7627 Q7.15148,4.7627,6.4879,5.29004 Q5.82433,5.81738,5.82433,6.66992 Q5.82433,7.33789,6.32091,7.72461 Q6.81749,8.11133,7.83702,8.25195 L9.24327,8.42773 Q10.7726,8.62988,11.546,9.36377 Q12.3194,10.0977,12.3194,11.3457 Q12.3194,12.8223,11.2208,13.7144 Q10.1222,14.6064,8.28527,14.6064 Q7.65245,14.6064,7.02843,14.457 Q6.40441,14.3076,5.70128,13.9912 Z"/><path d="M19.9209,14.2944 L19.5078,14.2944 Q19.1914,14.2944,19.0288,14.1362 Q18.8662,13.978,18.8662,13.6616 Q18.8662,13.3101,19.0552,13.1826 Q19.2441,13.0552,19.9209,13.0552 L20.4834,13.0552 L20.4834,5.13623 L19.9209,5.13623 Q19.2617,5.13623,19.064,5 Q18.8662,4.86377,18.8662,4.50342 Q18.8662,4.17822,19.0288,4.02441 Q19.1914,3.87061,19.5254,3.87061 L19.9209,3.87061 L27.1807,3.87061 Q27.4795,3.87061,27.6333,4.05078 Q27.7871,4.23096,27.7871,4.57373 L27.7871,6.64795 Q27.7871,7.10498,27.6553,7.28076 Q27.5234,7.45654,27.1807,7.45654 Q26.8203,7.45654,26.6841,7.26318 Q26.5478,7.06982,26.5478,6.39307 L26.5478,5.13623 L21.8721,5.13623 L21.8721,8.09814 L24.1748,8.09814 L24.1748,7.63232 Q24.1748,7.15772,24.3022,6.97314 Q24.4297,6.78857,24.7461,6.78857 Q25.0537,6.78857,25.1724,6.98633 Q25.291,7.18408,25.291,7.83447 L25.291,9.46924 Q25.291,10.1284,25.168,10.313 Q25.0449,10.4976,24.7285,10.4976 Q24.4121,10.4976,24.2934,10.2866 Q24.1748,10.0757,24.1748,9.46924 L24.1748,9.16162 L21.8721,9.16162 L21.8721,13.0552 L26.5478,13.0552 L26.5478,11.6313 Q26.5478,10.9546,26.6841,10.7612 Q26.8203,10.5679,27.1807,10.5679 Q27.5146,10.5679,27.6509,10.748 Q27.7871,10.9282,27.7871,11.4292 L27.7871,13.644 Q27.7871,13.9604,27.6289,14.1274 Q27.4707,14.2944,27.1807,14.2944 Z"/><path d="M6.36486,25.5478 L9.95958,25.5478 L8.06993,20.8896 Z M6.8131,20.8896 L5.5299,20.8896 Q4.99376,20.8896,4.77843,20.7446 Q4.5631,20.5996,4.5631,20.2568 Q4.5631,19.8964,4.75206,19.7602 Q4.94103,19.624,5.78478,19.624 L8.28966,19.624 Q8.77306,19.624,8.94445,19.7514 Q9.11583,19.8789,9.25646,20.2216 L12.693,28.8085 L12.8424,28.8085 Q13.317,28.8085,13.4928,28.9404 Q13.6686,29.0722,13.6686,29.415 Q13.6686,29.7753,13.5016,29.9116 Q13.3346,30.0478,12.8776,30.0478 L10.4869,30.0478 Q9.81896,30.0478,9.62999,29.9116 Q9.44103,29.7753,9.44103,29.415 Q9.44103,29.081,9.64757,28.9448 Q9.85411,28.8085,10.4254,28.8085 L11.2428,28.8085 L10.3902,26.7167 L5.9254,26.7167 L5.16954,28.8085 L6.02208,28.8085 Q6.60216,28.8085,6.8131,28.9448 Q7.02404,29.081,7.02404,29.415 Q7.02404,29.7753,6.83507,29.9116 Q6.64611,30.0478,6.0045,30.0478 L3.69298,30.0478 Q3.13048,30.0478,2.94591,29.9116 Q2.76134,29.7753,2.76134,29.415 Q2.76134,29.0722,2.94591,28.9404 Q3.13048,28.8085,3.65782,28.8085 L3.82482,28.8085 Z"/><path d="M20.2637,25.6928 Q20.0879,25.6928,19.9868,25.583 Q19.8857,25.4731,19.8857,25.2797 L19.8857,24.3481 Q19.8857,24.1811,19.9868,24.0844 Q20.0879,23.9877,20.2637,23.9877 L27.5498,23.9877 Q27.7519,23.9877,27.8662,24.0844 Q27.9805,24.1811,27.9805,24.3481 L27.9805,25.2797 Q27.9805,25.4379,27.8486,25.5654 Q27.7168,25.6928,27.5498,25.6928 Z"/></svg>


=====================================
svg.cxx
=====================================
--- a/svg.cxx
+++ b/svg.cxx
@@ -84,8 +84,9 @@ void Fl_SVG_Graphics_Driver::draw(const char *str, int n, int x, int y) {
   // Caution: Internet Explorer ignores the xml:space="preserve" attribute
   // work-around: replace all spaces by no-break space = U+00A0 = 0xC2-0xA0 (UTF-8) before sending to IE
   fprintf(out_, "<text x=\"%d\" y=\"%d\" font-family=\"%s\"%s%s font-size=\"%d\" "
-	  "xml:space=\"preserve\" "
-	  " fill=\"rgb(%u,%u,%u)\">%.*s</text>\n",x, y, family_, bold_, style_, size(), red_, green_, blue_, n, str);
+          "xml:space=\"preserve\" "
+          " fill=\"rgb(%u,%u,%u)\" textLength=\"%d\">%.*s</text>\n",x, y, family_, bold_, style_, size(), red_, green_, blue_, (int)width(str, n), n, str);
+
 }
 
 void Fl_SVG_Graphics_Driver::draw(const char* str, int n, float fx, float fy) {


=====================================
treedraw.cxx
=====================================
--- a/treedraw.cxx
+++ b/treedraw.cxx
@@ -72,7 +72,8 @@ char *check_alloc(int nbrelt, int sizelt);
 const char *loadphylip(FD_nj_plot *fd_nj_plot, char *arbre, char *last_bootstrap);
 struct noeud *unrootedset(FD_nj_plot *fd_nj_plot, char *deb, char *fin, branche **p_int_br);
 char *nextpar(char *pospar);
-const char *make_binary_or_unrooted(char *arbre);
+const char *make_binary_or_unrooted_extra(char *arbre, bool *p_has_3_subtrees);
+const char *make_binary_or_unrooted(char *arbre) {return make_binary_or_unrooted_extra(arbre, NULL); }
 int make_binary(char *arbre, char *debut, char *fin, int go_down);
 void mydrawstring(double x, double y, char *nom, char option, int height);
 void moveto(double x,double y);
@@ -136,9 +137,9 @@ char *extract_one_tree(char *from, char **pnext);
 void replace_with_new_tree(FD_nj_plot *fd_nj_plot, char *newtree);
 void tree_counter_callback(Fl_Widget *, void *data);
 int calc_tree_count(char *tree);
+void remove_parenth_no_comma(char *tree);
 
 //extern variables & functions
-extern void help_callback(Fl_Widget *ob, void *data);
 extern Fl_Window *use_initial_file(SEA_VIEW *view, char *masename, int doing_dnd);
 extern void direct_help_callback(Fl_Widget *wgt, void *data);
 extern void rooted_unrooted_callback(Fl_Widget *o, void *data);
@@ -150,11 +151,11 @@ extern int testbit(int *plist, int num);
 extern void bit1(int *plist, int num);
 extern char *get_res_value(const char *name, const char *def_value);
 extern int set_res_value(const char *name, const char *value);
-#ifdef __APPLE__
-extern int add_windowmenuitem(const char *name, Fl_Window *w);
-extern void rename_windowmenuitem(const char *name, int rank);
-extern void delete_windowmenuitem(int rank);
-extern int find_windowmenuitem(Fl_Window *w);
+#if defined(__APPLE__) && 100*FL_MAJOR_VERSION + FL_MINOR_VERSION < 104
+  extern int add_windowmenuitem(const char *name, Fl_Window *w);
+  extern void rename_windowmenuitem(const char *name, int rank);
+  extern void delete_windowmenuitem(int rank);
+  extern int find_windowmenuitem(Fl_Window *w);
 #endif
 
 
@@ -516,7 +517,7 @@ Fl_Window *treedraw(char *trees, SEA_VIEW *view, const char *name, int from_tree
 #ifndef MICRO
 	w->hotspot(w);
 #endif
-#ifdef __APPLE__
+#if defined(__APPLE__) && 100*FL_MAJOR_VERSION + FL_MINOR_VERSION < 104
 	add_windowmenuitem(w->label(), w);
 #endif
 	return w;
@@ -707,7 +708,7 @@ switch (event)
 		fd_nj_plot->tree_name = strdup("pasted tree");
 		w = fd_nj_plot->full->window();
 		w->copy_label(fd_nj_plot->tree_name);
-#ifdef __APPLE__
+#if defined(__APPLE__) && 100*FL_MAJOR_VERSION + FL_MINOR_VERSION < 104
 		rename_windowmenuitem(w->label(), find_windowmenuitem(w));
 #endif
     if (count > 1) {
@@ -987,7 +988,7 @@ void treeplotw_callback(Fl_Widget *wgt, void *data)
 	  delete fd_nj_plot->menu_font;
 		free(fd_nj_plot);
 		}
-#ifdef __APPLE__
+#if defined(__APPLE__) && 100*FL_MAJOR_VERSION + FL_MINOR_VERSION < 104
 	int rank = find_windowmenuitem((Fl_Window *)wgt);
 	if(rank > 0) delete_windowmenuitem(rank);
 #endif
@@ -1482,6 +1483,7 @@ const char *preptree(FD_nj_plot *fd_nj_plot)
 int i, c, maxlname, v;
 char *arbre, *finarbre;
 char *last_bootstrap, *p, *q;
+bool has_3_subtrees;
 
 arbre = strdup(fd_nj_plot->current_tree);
 /* lecture de l'arbre et de son label entre [] */
@@ -1528,7 +1530,9 @@ if(*finarbre != ';' && *finarbre != 0) {
 else last_bootstrap = NULL;
 
 arbre = (char *)realloc(arbre, strlen(arbre) + 4 * v + 5 ); /* worst case add 4 chars for each , */
-p = (char *)make_binary_or_unrooted(arbre);
+p = (char *)make_binary_or_unrooted_extra(arbre, &has_3_subtrees);
+  if (has_3_subtrees && v + 2 == fd_nj_plot->notu) remove_parenth_no_comma(arbre);
+
 if(p != NULL) {
 	fd_nj_plot->notu = 0;
 	free(arbre);
@@ -1867,39 +1871,43 @@ return pos;
 }
 
 
-const char *make_binary_or_unrooted(char *arbre)
+const char *make_binary_or_unrooted_extra(char *arbre, bool *p_has_3_subtrees)
 //returns NULL iff OK
 {
-char *finarbre, *deba, *debb, *debc;
-int retval;
-
-finarbre= nextpar(arbre);
-*(finarbre + 1) = 0;
-deba=arbre+1;
+  char *finarbre, *deba, *debb, *debc;
+  int retval;
+  
+  finarbre= nextpar(arbre);
+  *(finarbre + 1) = 0;
+  deba=arbre+1;
   while (*deba == '(' && nextpar(deba) == finarbre - 1) { // remove extra enclosing parentheses
     *finarbre = 0;
     memmove(arbre, deba, finarbre - arbre);
     finarbre -= 2;
   }
-debb=deba;
-while(*debb != ',') {
-	if(*debb == 0) return("Incorrect tree file");
-	if(*debb == '(')debb=nextpar(debb);
-	debb++;
-	}
-debb++;
-debc=debb;
-while(*debc != ',' && debc<finarbre) {
-	if(*debc == '(')debc=nextpar(debc);
-	debc++;
-	}
-if(*debc == ',') {
-/* the tree is unrooted <==> it has 3 subtrees or more at its bottommost level */
-	retval = make_binary(arbre , debb, finarbre - 1, TRUE);
-	if(retval != -1) retval = make_binary(arbre , deba, debb - 2, TRUE);
-	}
-else retval = make_binary(arbre , deba, finarbre - 1, TRUE);
-	return (retval >= 0 ? NULL : "Cannot process multibranched tree without branch lengths");
+  debb=deba;
+  while(*debb != ',') {
+    if(*debb == 0) return("Incorrect tree file");
+    if(*debb == '(')debb=nextpar(debb);
+    debb++;
+  }
+  debb++;
+  debc=debb;
+  while(*debc != ',' && debc<finarbre) {
+    if(*debc == '(')debc=nextpar(debc);
+    debc++;
+  }
+  if(*debc == ',') {
+    /* the tree is unrooted <==> it has 3 subtrees or more at its bottommost level */
+    retval = make_binary(arbre , debb, finarbre - 1, TRUE);
+    if(retval != -1) retval = make_binary(arbre , deba, debb - 2, TRUE);
+    if (p_has_3_subtrees) *p_has_3_subtrees = TRUE;
+  }
+  else {
+    retval = make_binary(arbre , deba, finarbre - 1, TRUE);
+    if (p_has_3_subtrees) *p_has_3_subtrees = FALSE;
+  }
+  return (retval >= 0 ? NULL : "Cannot process multibranched tree without branch lengths");
 }
 
 
@@ -2569,7 +2577,7 @@ p2 = ecrit_arbre_parenth(fd_nj_plot, t2);  *(p2 + strlen(p2) - 1) = 0;
 p3 = ecrit_arbre_parenth(fd_nj_plot, t3);  *(p3 + strlen(p3) - 1) = 0;
 l = strlen(p1) + strlen(p2)+ strlen(p3) + 150;
 p = (char *)check_alloc(l, 1);
-if(fd_nj_plot->has_br_length) sprintf(p, "(%s:%.5f,%s:%.5f,%s%s:%.5f);", p1, l1, p2, l2, p3, bootstrap, l3);
+if(fd_nj_plot->has_br_length) sprintf(p, "(%s:%g,%s:%g,%s%s:%g);", p1, l1, p2, l2, p3, bootstrap, l3);
 else sprintf(p, "(%s,%s,%s%s);", p1, p2, p3, bootstrap);
 free(p1); free(p2); free(p3);
 return p;
@@ -2623,7 +2631,7 @@ else	{
 	if(arbre==NULL) return NULL;
 	if(fd_nj_plot->has_br_length) {
 		if(arbre+10>=finarbre) return NULL;
-		sprintf(++arbre,":%.5f",centre->l1);
+		sprintf(++arbre,":%g",centre->l1);
 		while(*arbre!=0) arbre++;
 		}
 	else arbre++;
@@ -2632,7 +2640,7 @@ else	{
 	if(arbre==NULL) return NULL;
 	if(fd_nj_plot->has_br_length) {
 		if(arbre+10>=finarbre) return NULL;
-		sprintf(++arbre,":%.5f",centre->l2);
+		sprintf(++arbre,":%g",centre->l2);
 		while(*arbre!=0) arbre++;
 		}
 	else arbre++;
@@ -4031,6 +4039,56 @@ int calc_tree_count(char *tree)
   return count;
 }
 
+/* Remove parentheses around comma-free blocks
+     ( name-or-block : length1 ) bootstrap : length2
+ that occur with IQtree. This substring is replaced by :
+       name-or-block : length1+length2
+ */
+void remove_parenth_no_comma(char *tree)
+{
+  char *close, *p;
+  int found = FALSE;
+  if (*tree != '(') return;
+  close = nextpar(tree);
+  p = tree;
+  while (++p < close) {
+    if (*p == '(') {
+      char *q = nextpar(p);
+      remove_parenth_no_comma(p);
+      p = q;
+    }
+    else if(*p == ',') {
+      found = TRUE;
+    }
+  }
+  if (!found) {
+    char *q, *r, length_value[20];
+    int len;
+    double l2, l3;
+    p = close-1;
+    while (*p != ':') {
+      p--;
+      if (p <= tree) return;
+    }
+    sscanf(p+1, "%lf", &l2);
+    q = close + 1;
+    while (*q != ':') {
+      if (*q == 0 || *q == ')') return;
+      q++;
+    }
+    sscanf(q+1, "%lf", &l3);
+    q = strchr(q, ')');
+    if (q == NULL) return;
+    *tree = ' ';
+    r = p+1;
+    do *r++ = ' '; while (r < q);
+    sprintf(length_value, "%f", l2+l3);
+    len = strlen(length_value);
+    if (p + len >= q) len = q - p - 1;
+    memcpy(p + 1, length_value, len);
+  }
+}
+
 /*
  void check_tree(struct noeud *from, struct noeud *parent)
 {


=====================================
trees.cxx
=====================================
--- a/trees.cxx
+++ b/trees.cxx
@@ -612,7 +612,7 @@ void savedistinfile(matrix *mat, const char *dirname, const char *outfname)
 	fprintf(out, "%d\n", mat->n_otu);
 	for( i = 0; i < mat->n_otu - 1; i++) {
 		for( j = i + 1; j < mat->n_otu; j++) {
-			fprintf(out, "%.6f ", mat->dist[i][j]);
+			fprintf(out, "%g ", mat->dist[i][j]);
 			}
 		fputs("\n", out);
 		}
@@ -626,7 +626,7 @@ void savedistinfile(matrix *mat, const char *dirname, const char *outfname)
       char *n1 = mat->name[i];
       char *n2 = mat->name[j];
       if (strcmp(n1, n2) > 0) { char *p = n1; n1 = n2; n2 = p; }
-      fprintf(out, "%s,%s: %f\n", n1, n2, mat->dist[i][j]);
+      fprintf(out, "%s,%s: %g\n", n1, n2, mat->dist[i][j]);
     }
   }
   fclose(out);
@@ -1201,6 +1201,24 @@ void run_phyml_callback(Fl_Widget *ob, void *data)
 	  display_tree = put_names_back_in_tree(display_tree, truenames);
     //process bootstrap trees
     char *bootstrap_trees = NULL;
+    if (replicates > 0) {
+      sprintf(input, "%s.phy_phyml_boot_stats.txt", base_fname);
+      in = fopen(input, "r");
+      if (!in) {
+        sprintf(input, "%s.phy_phyml_boot_stats", base_fname);
+        in = fopen(input, "r");
+      }
+      if (in) { // compute the true # of bootstrap replicates because parallelized phyML can compute a few more
+        char line[150];
+        while ((p = fgets(line, sizeof(line), in))) {
+          while (*p == ' ') p++;
+          if (*p == '#') {
+            sscanf(p+1, "%d", &replicates);
+          }
+        }
+        fclose(in);
+      }
+    }
     if (replicates > 0 && b_keep_trees->value()) {
       sprintf(input, "%s.phy_phyml_boot_trees.txt", base_fname);
       in = fopen(input, "r");


=====================================
unrooted.cxx
=====================================
--- a/unrooted.cxx
+++ b/unrooted.cxx
@@ -392,6 +392,12 @@ void draw_tree(FD_unrooted *ob)
 	int char_width, char_height, num, dernier, encore = FALSE, ascend, descend;
 	hit result;
 	hits_field hits;
+#if !(defined(__APPLE__) || defined(WIN32))
+        if (fl_display && Fl::event() != FL_DRAG) {
+          ob->unrooted_plot->window()->cursor(FL_CURSOR_WAIT);
+          Fl::flush();
+        }
+#endif
 	char_width = myrint(fl_width("M"));
 	char_height = my_get_char_height(&ascend, &descend);
 	dernier = 2*ob->notu-3;
@@ -424,6 +430,9 @@ void draw_tree(FD_unrooted *ob)
 				  descend, ascend);
 	}
 	if(ob->has_br_length) draw_scale(ob, char_height, ascend);
+#if !(defined(__APPLE__) || defined(WIN32))
+        if (fl_display && Fl::event() != FL_DRAG) ob->unrooted_plot->window()->cursor(FL_CURSOR_DEFAULT);
+#endif
 }
 
 
@@ -613,17 +622,6 @@ hit try_angle_draw(float w, int *px, int *py, float *pdegrees /* clockwise degre
 	if(radians < 0) radians += 2 * M_PI;
 	float cosa = cos(radians);
 	float sina = sin(radians);
-	if(radians > M_PI/2 && radians < 3*M_PI/2 ) {//draw string so its end is at position x,y
-		x1 += (int)( w * cosa );
-		y1 -= (int)( w * sina );
-		radians += M_PI;
-		degrees -= 180;/* clockwise degrees */
-		if(radians >= 2*M_PI) radians -= 2 * M_PI;
-		if(degrees <= 0) degrees += 360;
-		cosa = - cosa;  sina = - sina;
-	}
-	x1 += (int)( (fl_size()/3) * sina );//position string midheight at position x,y
-	y1 += (int)( (fl_size()/3) * cosa );
 	
 	const float ch = 0.7;
 	x2 = x1 - (int)(ch * fl_size() * sina);
@@ -652,15 +650,32 @@ hit draw_name_angle(cp_point *phys_pos, const char *nom, FD_unrooted *fd_unroote
 					int ascent)
 {	
 	int x, y;
-	float degrees = - radians * 180/M_PI;
+	float degrees = - int(radians * 180/M_PI);
 	x = (int)phys_pos->x;
 	y = (int)phys_pos->y;
-	float w = fl_width(nom);
+        int dx, dy;
+        fl_measure(nom, dx, dy);
+        float w = dx, l = dy/4., fdx;
 	hit result = try_angle_draw(w, &x, &y, &degrees, fd_unrooted->x,  fd_unrooted->y,  fd_unrooted->w,  fd_unrooted->h);
 	if( (!doit) && result != NO_HIT) return result;
 	if( ! doit) return NO_HIT;
 	if(color) fl_color(FL_RED);
-	fl_draw(-(int)degrees, nom, x, y);
+        int rt_angle = -(int)degrees;
+        if (rt_angle <= 90 || rt_angle >= 270) {
+          if (rt_angle >= 270) rt_angle -= 360;
+          fdx =  l * sin(M_PI*rt_angle/180.);
+          dx = (int)fdx;
+          dy =  sqrt(l*l - fdx*fdx);
+          fl_draw(rt_angle, nom, x + dx, y + dy);
+        } else {
+          rt_angle -= 180;
+          float ddy = -sin(M_PI*(rt_angle+180)/180.) * dx;
+          float ddx = cos(M_PI*(rt_angle+180)/180.) * dx;
+          fdx = l * sin(M_PI*rt_angle/180.);
+          dx = fdx + ddx;
+          dy = sqrt(l*l - fdx*fdx) + ddy;
+          fl_draw(rt_angle, nom, x + dx, y + dy);
+        }
 	if(color) fl_color(FL_BLACK);
 	return NO_HIT;
 }


=====================================
use_mase_files.cxx
=====================================
--- a/use_mase_files.cxx
+++ b/use_mase_files.cxx
@@ -773,6 +773,18 @@ return ( (float)(total) / length ) <= 0.8 ;
 }
 
 
+int is_a_protein_alignment(SEA_VIEW *view)
+/* returns TRUE if alignment looks like protein data (less than 80% ACGTU) */
+{
+  char *seq;
+  for (int i = 0; i < view->tot_seqs; i++) {
+    seq = view->sequence[i];
+    while (*seq == '-') seq++;
+    if (*seq != 0) return is_a_protein_seq(view->sequence[i]);
+  }
+  return false;
+}
+
 int save_phylip_file(const char *fname, char **seq,
 	char **seqname, int totseqs, int *eachlength, region *region_used, 
 	int *sel_seqs, int tot_sel_seqs, int phylipwidnames)
@@ -1109,6 +1121,11 @@ for(num=0; num<totseqs; num++) {
 		  putc(' ', out); 
 		  p = comments[num] + 1;
 		  while(*p != '\n' && *p != 0) putc(*(p++), out);
+            int gc = get_ncbi_gc_from_comment(comments[num]);
+            char *q = strstr(comments[num], "/transl_table=");
+            if (gc > 1 && q != NULL && q >= p) {
+              fprintf(out, " /transl_table=%d", gc);
+            }
 		  }
 	  }
 	putc('\n', out);
@@ -2054,7 +2071,10 @@ SEA_VIEW* read_alignment_file(const char *infile )
   memset(view, 0, sizeof(SEA_VIEW));
   view->menubar = new Fl_Menu_Bar(0,0, 30, 30);
   view->menu_trees = new vlength_menu(view->menubar, "Trees", NULL, 0);
-  
+
+#ifndef R_OK
+#define R_OK 04
+#endif
   if (fl_access(infile, R_OK)) {
     fprintf(stderr, "File %s\nis not readable or does not exist", infile);
     return NULL;
@@ -2108,7 +2128,7 @@ SEA_VIEW* read_alignment_file(const char *infile )
     if(name_sp != NULL) free(name_sp);
   }
   if (view->tot_seqs == 0) return NULL;
-  if (file_format != NEXUS_FORMAT) view->protein = is_a_protein_seq(view->sequence[0]);
+  if (file_format != NEXUS_FORMAT) view->protein = is_a_protein_alignment(view);
   view->each_length = new int[view->tot_seqs];
   for (i = 0; i < view->tot_seqs; i++) {
     view->each_length[i] = strlen(view->sequence[i]);


=====================================
viewasprots.cxx
=====================================
--- a/viewasprots.cxx
+++ b/viewasprots.cxx
@@ -14,7 +14,8 @@ extern "C" {
 	char codaa(char *codon, int code);
 	int get_acnuc_gc_number(int ncbi_gc);
 	int get_ncbi_gc_number(int ncbi_gc);
-	char *get_code_descr(int code);
+        char *get_code_descr(int code);
+	char *get_code_target(int code);
 	}
 extern int totcodes;
 extern void set_and_show_new_cursor_seq(SEA_VIEW *view, int new_pos);
@@ -191,7 +192,7 @@ char *back_translate_with_gaps(char *prot, char *dna)
 		}
 	*pd = 0;
 	while(memcmp(dna, "---", 3) == 0) dna += 3;
-	if (*dna != 0) {//if a partial codon remains at end
+	if (*dna != 0 && *dna != '-') {//if a partial codon remains at end
 	  while (*(pd-1) == '-') pd--;
 	  ld = pd - newdna;
 	  q = dna + strlen(dna);
@@ -253,27 +254,21 @@ void set_ncbi_genetic_code(SEA_VIEW *view)
 int gc = 1, num;
 char line[170];
 int status;
-static char codencbinames[19][60] = { "Standard", "Yeast mt", "Vertebrate mt",
-	"Mold+Protozoan+Coelentarate mt, Mycoplasma Spiroplasma", "Invertebrate mt", "Alternative Yeast Nuclear", 
-	"Ciliate+Dasycladacean+Hexamita Nuclear", "Euplotid Nuclear", "Echinoderm+Flatworm mt",
-	"Ascidian mt", "Alternative Flatworm mt", "Blepharisma Macronuclear", 
-	"Bacterial and Plant Plastid", "Chlorophycean mt", "Trematode mt", 
-	"Scenedesmus obliquus mt", "Thraustochytrium mt", "Pterobranchia mt", "Candidate Division SR1"};
 
 if(view->comments == NULL) view->comments = (char **)calloc(view->tot_seqs, sizeof(char *));
 if(view->comments == NULL) return;
-Fl_Window *win = new Fl_Window(750,390);
+Fl_Window *win = new Fl_Window(850,400);
 win->label("Genetic code selection");
 for(num = 0; num < view->tot_seqs; num++)
 		if(view->sel_seqs[num]) break;
 gc = get_ncbi_gc_from_comment(view->comments[num]);
-Fl_Hold_Browser *obj = new Fl_Hold_Browser(5, 25, 740, 340);
+Fl_Hold_Browser *obj = new Fl_Hold_Browser(5, 25, 840, 350);
 obj->textfont(FL_COURIER);
 sprintf(line, "Set genetic code for %s", view->tot_sel_seqs > 1 ? "selected sequences" : view->seqname[num]);
 obj->copy_label(line);
 obj->align(FL_ALIGN_TOP);
 for(num = 0; num < totcodes; num++) {
-	sprintf(line, "%45.45s|%2d| %s", codencbinames[num], get_ncbi_gc_number(num), get_code_descr(num));
+	sprintf(line, "%65.65s|%2d| %s", get_code_target(num), get_ncbi_gc_number(num), get_code_descr(num));
 	obj->add(line);
 	}
 obj->value(get_acnuc_gc_number(gc) + 1);


=====================================
win32_extras.cxx
=====================================
--- a/win32_extras.cxx
+++ b/win32_extras.cxx
@@ -1,12 +1,13 @@
 #ifdef WIN32
+
+#include <FL/Enumerations.H>
 #include "pdf_or_ps.h"
-#include <Windows.h>
 #include <FL/fl_utf8.h>
 #include <stdlib.h>
 #include <stdio.h>
-#ifndef NO_PDF
-#include <pdflib.h>
-#endif
+#  ifndef NO_PDF
+#    include <pdflib.h>
+#  endif
 
 /* included functions */
 void my_bell(void);
@@ -14,6 +15,7 @@ char *get_prog_dir(void);
 char **getutf8args(int *pargc);
 int mysystem(const char *cmd);
 
+#if 100*FL_MAJOR_VERSION + 10*FL_MINOR_VERSION + FL_PATCH_VERSION < 134 // FLTK before 1.3.4
 
 Copy_Surface::Copy_Surface(int w, int h) : Fl_Surface_Device(new Fl_GDI_Graphics_Driver())
 {
@@ -57,6 +59,8 @@ Copy_Surface::~Copy_Surface()
   delete driver();
 }
 
+#endif // FLTK before 1.3.4
+
 
 char *get_prog_dir(void)
 /* returns path of dir where calling program was launched */


=====================================
xfmatpt.cxx
=====================================
--- a/xfmatpt.cxx
+++ b/xfmatpt.cxx
@@ -90,12 +90,12 @@ public:
 
 void my_watch_cursor(Fl_Window *win)
 {
-win->default_cursor(FL_CURSOR_WAIT); 
+if (win) win->default_cursor(FL_CURSOR_WAIT);
 }
 
 void fl_reset_cursor(Fl_Window *win)
 {
-win->default_cursor(FL_CURSOR_DEFAULT); 
+if (win) win->default_cursor(FL_CURSOR_DEFAULT); 
 }
 
 



View it on GitLab: https://salsa.debian.org/med-team/seaview/compare/ae372fca53428f43e98c2cc123d6c43f7663c3c0...731d786210f8b735e3afaa92433e9a7be6e4b0ac

---
View it on GitLab: https://salsa.debian.org/med-team/seaview/compare/ae372fca53428f43e98c2cc123d6c43f7663c3c0...731d786210f8b735e3afaa92433e9a7be6e4b0ac
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.alioth.debian.org/pipermail/debian-med-commit/attachments/20180217/af67ac12/attachment-0001.html>


More information about the debian-med-commit mailing list